Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
ed7f266
Add automatic API token refresh
Jul 9, 2026
ee0b1f3
Exclude client lifecycle from CLI commands
Jul 9, 2026
e5a575d
Harden token refresh failure handling
Jul 9, 2026
7c26f28
Keep clients usable before token API rollout
Jul 9, 2026
b41c4ae
Close remaining token refresh retry gaps
Jul 9, 2026
c2be003
Revoke bootstrap token after initial working token is minted
Jul 9, 2026
0be7837
Automatically reformatting code
Jul 9, 2026
147ce68
Store base_name in slot cache to eliminate repeated token lookups dur…
Jul 9, 2026
1738546
Switch to by-snippet endpoint and revert temporary TTL values
Jul 10, 2026
73a9c47
adding testing values
Jul 13, 2026
9f01505
Park bootstrap token as previous instead of revoking immediately
Jul 23, 2026
dcdcf3a
Fix CI: nullable last_used_at and TokenManager mypy typing
Jul 23, 2026
59782e0
Stop token refresh during HTTP retry tests
Jul 23, 2026
0bc4b13
Disable token refresh during the test suite
Jul 23, 2026
b00991d
Simplify token rotation to use-or-rotate under the lock
Jul 23, 2026
2218fb6
Automatically reformatting code
Jul 23, 2026
803b3b6
Remove local token rotation watch script from the PR
Jul 23, 2026
d5b9f67
Surface 401 response bodies in token init and recovery
Jul 23, 2026
6dbd1be
Discover rotation from token expires_at instead of hardcoded TTLs
Jul 24, 2026
e5862dd
Automatically reformatting code
Jul 24, 2026
eaa7048
Harden token rotation and remove the refresh env knob
Jul 24, 2026
cb7b81b
Automatically reformatting code
Jul 24, 2026
413b320
Merge origin/main into token auto-refresh branch.
Jul 24, 2026
3a556ce
Merge remote autoformat commit into local main merge.
Jul 24, 2026
eaf4622
Tidy token-refresh comments and restore config import style
Jul 24, 2026
c2c8815
Fix mypy errors in multipart retry helpers and token tests
Jul 24, 2026
9d975b9
Revert unnecessary Edge auth recovery wiring
Jul 24, 2026
908621b
Remove mid-request 401 token recovery
Jul 24, 2026
cb64ca2
Drop unnecessary Groundlight.__repr__ docstring
Jul 24, 2026
277c59b
Fix ask_vlm_verify fixture for TokenManager init
Jul 24, 2026
d2eb82f
Automatically reformatting code
Jul 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions generated/.openapi-generator/FILES
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@ docs/ActionList.md
docs/ActionsApi.md
docs/AllNotes.md
docs/AnnotationsRequestedEnum.md
docs/ApiToken.md
docs/ApiTokenCreateResponse.md
docs/ApiTokenRequest.md
docs/ApiTokensApi.md
docs/BBoxGeometry.md
docs/BBoxGeometryRequest.md
docs/BinaryClassificationResult.md
Expand Down Expand Up @@ -52,6 +56,7 @@ docs/Note.md
docs/NoteRequest.md
docs/NotesApi.md
docs/NullEnum.md
docs/PaginatedApiTokenList.md
docs/PaginatedDetectorList.md
docs/PaginatedImageQueryList.md
docs/PaginatedMLPipelineList.md
Expand Down Expand Up @@ -87,6 +92,7 @@ git_push.sh
groundlight_openapi_client/__init__.py
groundlight_openapi_client/api/__init__.py
groundlight_openapi_client/api/actions_api.py
groundlight_openapi_client/api/api_tokens_api.py
groundlight_openapi_client/api/detector_groups_api.py
groundlight_openapi_client/api/detector_reset_api.py
groundlight_openapi_client/api/detectors_api.py
Expand All @@ -108,6 +114,9 @@ groundlight_openapi_client/model/action.py
groundlight_openapi_client/model/action_list.py
groundlight_openapi_client/model/all_notes.py
groundlight_openapi_client/model/annotations_requested_enum.py
groundlight_openapi_client/model/api_token.py
groundlight_openapi_client/model/api_token_create_response.py
groundlight_openapi_client/model/api_token_request.py
groundlight_openapi_client/model/b_box_geometry.py
groundlight_openapi_client/model/b_box_geometry_request.py
groundlight_openapi_client/model/binary_classification_result.py
Expand Down Expand Up @@ -146,6 +155,7 @@ groundlight_openapi_client/model/multi_classification_result.py
groundlight_openapi_client/model/note.py
groundlight_openapi_client/model/note_request.py
groundlight_openapi_client/model/null_enum.py
groundlight_openapi_client/model/paginated_api_token_list.py
groundlight_openapi_client/model/paginated_detector_list.py
groundlight_openapi_client/model/paginated_image_query_list.py
groundlight_openapi_client/model/paginated_ml_pipeline_list.py
Expand Down
8 changes: 8 additions & 0 deletions generated/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,10 @@ Class | Method | HTTP request | Description
*ActionsApi* | [**get_rule**](docs/ActionsApi.md#get_rule) | **GET** /v1/actions/rules/{id} |
*ActionsApi* | [**list_detector_rules**](docs/ActionsApi.md#list_detector_rules) | **GET** /v1/actions/detector/{detector_id}/rules |
*ActionsApi* | [**list_rules**](docs/ActionsApi.md#list_rules) | **GET** /v1/actions/rules |
*ApiTokensApi* | [**create_api_token**](docs/ApiTokensApi.md#create_api_token) | **POST** /v1/api-tokens |
*ApiTokensApi* | [**delete_api_token**](docs/ApiTokensApi.md#delete_api_token) | **DELETE** /v1/api-tokens/{name} |
*ApiTokensApi* | [**get_api_token_by_snippet**](docs/ApiTokensApi.md#get_api_token_by_snippet) | **GET** /v1/api-tokens/by-snippet/{snippet} |
*ApiTokensApi* | [**list_api_tokens**](docs/ApiTokensApi.md#list_api_tokens) | **GET** /v1/api-tokens |
*DetectorGroupsApi* | [**create_detector_group**](docs/DetectorGroupsApi.md#create_detector_group) | **POST** /v1/detector-groups |
*DetectorGroupsApi* | [**get_detector_groups**](docs/DetectorGroupsApi.md#get_detector_groups) | **GET** /v1/detector-groups |
*DetectorResetApi* | [**reset_detector**](docs/DetectorResetApi.md#reset_detector) | **DELETE** /v1/detector-reset/{id} |
Expand Down Expand Up @@ -156,6 +160,9 @@ Class | Method | HTTP request | Description
- [ActionList](docs/ActionList.md)
- [AllNotes](docs/AllNotes.md)
- [AnnotationsRequestedEnum](docs/AnnotationsRequestedEnum.md)
- [ApiToken](docs/ApiToken.md)
- [ApiTokenCreateResponse](docs/ApiTokenCreateResponse.md)
- [ApiTokenRequest](docs/ApiTokenRequest.md)
- [BBoxGeometry](docs/BBoxGeometry.md)
- [BBoxGeometryRequest](docs/BBoxGeometryRequest.md)
- [BinaryClassificationResult](docs/BinaryClassificationResult.md)
Expand Down Expand Up @@ -194,6 +201,7 @@ Class | Method | HTTP request | Description
- [Note](docs/Note.md)
- [NoteRequest](docs/NoteRequest.md)
- [NullEnum](docs/NullEnum.md)
- [PaginatedApiTokenList](docs/PaginatedApiTokenList.md)
- [PaginatedDetectorList](docs/PaginatedDetectorList.md)
- [PaginatedImageQueryList](docs/PaginatedImageQueryList.md)
- [PaginatedMLPipelineList](docs/PaginatedMLPipelineList.md)
Expand Down
16 changes: 16 additions & 0 deletions generated/docs/ApiToken.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# ApiToken


## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**name** | **str** | An nickname for the API token. This name must be unique for this user. |
**raw_key_snippet** | **str** | Since we're storing hashed keys, it can be useful to see the raw prefix snippet of the token. | [readonly]
**created_at** | **datetime** | When was this token created? | [readonly]
**last_used_at** | **datetime, none_type** | The most recent time this API token was used. (Helpful for detecting suspicious activity). Null if the token has never been used. | [readonly]
**expires_at** | **datetime, none_type** | When does this token expire? If Null, the token never expires. | [optional]
**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional]

[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)


18 changes: 18 additions & 0 deletions generated/docs/ApiTokenCreateResponse.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# ApiTokenCreateResponse

Response shape for token creation. Adds the raw_key, which is only ever returned once, at creation time.

## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**name** | **str** | An nickname for the API token. This name must be unique for this user. |
**raw_key_snippet** | **str** | Since we're storing hashed keys, it can be useful to see the raw prefix snippet of the token. | [readonly]
**created_at** | **datetime** | When was this token created? | [readonly]
**last_used_at** | **datetime, none_type** | The most recent time this API token was used. (Helpful for detecting suspicious activity). Null if the token has never been used. | [readonly]
**raw_key** | **str** | The full API token secret. Returned only once, when the token is created. | [readonly]
**expires_at** | **datetime, none_type** | When does this token expire? If Null, the token never expires. | [optional]
**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional]

[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)


13 changes: 13 additions & 0 deletions generated/docs/ApiTokenRequest.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# ApiTokenRequest


## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**name** | **str** | An nickname for the API token. This name must be unique for this user. |
**expires_at** | **datetime, none_type** | When does this token expire? If Null, the token never expires. | [optional]
**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional]

[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)


Loading