diff --git a/activitysmith_openapi/__init__.py b/activitysmith_openapi/__init__.py index 5a7b0c5..241c589 100644 --- a/activitysmith_openapi/__init__.py +++ b/activitysmith_openapi/__init__.py @@ -14,7 +14,7 @@ """ # noqa: E501 -__version__ = "1.13.0" +__version__ = "1.14.0" # import apis into sdk package from activitysmith_openapi.api.app_icon_badges_api import AppIconBadgesApi diff --git a/activitysmith_openapi/api_client.py b/activitysmith_openapi/api_client.py index ce1b024..5b296db 100644 --- a/activitysmith_openapi/api_client.py +++ b/activitysmith_openapi/api_client.py @@ -88,7 +88,7 @@ def __init__( self.default_headers[header_name] = header_value self.cookie = cookie # Set default User-Agent. - self.user_agent = 'OpenAPI-Generator/1.13.0/python' + self.user_agent = 'OpenAPI-Generator/1.14.0/python' self.client_side_validation = configuration.client_side_validation def __enter__(self): diff --git a/activitysmith_openapi/configuration.py b/activitysmith_openapi/configuration.py index 4ea33f8..c2d4661 100644 --- a/activitysmith_openapi/configuration.py +++ b/activitysmith_openapi/configuration.py @@ -400,7 +400,7 @@ def to_debug_report(self): "OS: {env}\n"\ "Python Version: {pyversion}\n"\ "Version of the API: 1.0.0\n"\ - "SDK Package Version: 1.13.0".\ + "SDK Package Version: 1.14.0".\ format(env=sys.platform, pyversion=sys.version) def get_host_settings(self): diff --git a/activitysmith_openapi/docs/LiveActivitiesApi.md b/activitysmith_openapi/docs/LiveActivitiesApi.md index bac4b47..6cc0b7f 100644 --- a/activitysmith_openapi/docs/LiveActivitiesApi.md +++ b/activitysmith_openapi/docs/LiveActivitiesApi.md @@ -257,7 +257,7 @@ Name | Type | Description | Notes **400** | Bad request (invalid stream_key, payload, action, or channel targeting input) | * RateLimit - Current request quotas using IETF draft-8 structured fields. Each named policy includes r (remaining requests) and t (seconds until reset). Multiple policies may apply.
* RateLimit-Policy - Each named policy includes q (request quota) and w (window in seconds). Each feature has an independent IP limit of 600 requests per 60 seconds. Independent account limits per 60 seconds are: Push Notifications 60, badges 60, Live Activities 300, and metric updates 300.
| **402** | Trial expired, trial allowance exhausted, or paid usage cap reached | - | **403** | Forbidden (API key scope or channel assignment violation) | * RateLimit - Current request quotas using IETF draft-8 structured fields. Each named policy includes r (remaining requests) and t (seconds until reset). Multiple policies may apply.
* RateLimit-Policy - Each named policy includes q (request quota) and w (window in seconds). Each feature has an independent IP limit of 600 requests per 60 seconds. Independent account limits per 60 seconds are: Push Notifications 60, badges 60, Live Activities 300, and metric updates 300.
| -**422** | No recipients found for effective channel target | * RateLimit - Current request quotas using IETF draft-8 structured fields. Each named policy includes r (remaining requests) and t (seconds until reset). Multiple policies may apply.
* RateLimit-Policy - Each named policy includes q (request quota) and w (window in seconds). Each feature has an independent IP limit of 600 requests per 60 seconds. Independent account limits per 60 seconds are: Push Notifications 60, badges 60, Live Activities 300, and metric updates 300.
| +**422** | No paired devices on the account, or no devices matched the effective channel target | * RateLimit - Current request quotas using IETF draft-8 structured fields. Each named policy includes r (remaining requests) and t (seconds until reset). Multiple policies may apply.
* RateLimit-Policy - Each named policy includes q (request quota) and w (window in seconds). Each feature has an independent IP limit of 600 requests per 60 seconds. Independent account limits per 60 seconds are: Push Notifications 60, badges 60, Live Activities 300, and metric updates 300.
| **429** | Rate limit exceeded | * RateLimit - Current request quotas using IETF draft-8 structured fields. Each named policy includes r (remaining requests) and t (seconds until reset). Multiple policies may apply.
* RateLimit-Policy - Each named policy includes q (request quota) and w (window in seconds). Each feature has an independent IP limit of 600 requests per 60 seconds. Independent account limits per 60 seconds are: Push Notifications 60, badges 60, Live Activities 300, and metric updates 300.
* Retry-After - Seconds to wait before retrying after a request-rate 429. Live Activity capacity errors are separate and require freeing device capacity; they do not provide a timed retry guarantee.
| [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) @@ -341,7 +341,7 @@ Name | Type | Description | Notes **400** | Bad request (invalid payload or channel targeting input) | * RateLimit - Current request quotas using IETF draft-8 structured fields. Each named policy includes r (remaining requests) and t (seconds until reset). Multiple policies may apply.
* RateLimit-Policy - Each named policy includes q (request quota) and w (window in seconds). Each feature has an independent IP limit of 600 requests per 60 seconds. Independent account limits per 60 seconds are: Push Notifications 60, badges 60, Live Activities 300, and metric updates 300.
| **402** | Billing access required | - | **403** | Forbidden (API key scope or channel assignment violation) | * RateLimit - Current request quotas using IETF draft-8 structured fields. Each named policy includes r (remaining requests) and t (seconds until reset). Multiple policies may apply.
* RateLimit-Policy - Each named policy includes q (request quota) and w (window in seconds). Each feature has an independent IP limit of 600 requests per 60 seconds. Independent account limits per 60 seconds are: Push Notifications 60, badges 60, Live Activities 300, and metric updates 300.
| -**422** | No recipients found for effective channel target | * RateLimit - Current request quotas using IETF draft-8 structured fields. Each named policy includes r (remaining requests) and t (seconds until reset). Multiple policies may apply.
* RateLimit-Policy - Each named policy includes q (request quota) and w (window in seconds). Each feature has an independent IP limit of 600 requests per 60 seconds. Independent account limits per 60 seconds are: Push Notifications 60, badges 60, Live Activities 300, and metric updates 300.
| +**422** | No paired devices on the account, or no devices matched the effective channel target | * RateLimit - Current request quotas using IETF draft-8 structured fields. Each named policy includes r (remaining requests) and t (seconds until reset). Multiple policies may apply.
* RateLimit-Policy - Each named policy includes q (request quota) and w (window in seconds). Each feature has an independent IP limit of 600 requests per 60 seconds. Independent account limits per 60 seconds are: Push Notifications 60, badges 60, Live Activities 300, and metric updates 300.
| **429** | Rate limit exceeded | * RateLimit - Current request quotas using IETF draft-8 structured fields. Each named policy includes r (remaining requests) and t (seconds until reset). Multiple policies may apply.
* RateLimit-Policy - Each named policy includes q (request quota) and w (window in seconds). Each feature has an independent IP limit of 600 requests per 60 seconds. Independent account limits per 60 seconds are: Push Notifications 60, badges 60, Live Activities 300, and metric updates 300.
* Retry-After - Seconds to wait before retrying after a request-rate 429. Live Activity capacity errors are separate and require freeing device capacity; they do not provide a timed retry guarantee.
| [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) diff --git a/activitysmith_openapi/docs/LiveActivityStreamDeleteResponse.md b/activitysmith_openapi/docs/LiveActivityStreamDeleteResponse.md index 5b6bf37..5b56c1d 100644 --- a/activitysmith_openapi/docs/LiveActivityStreamDeleteResponse.md +++ b/activitysmith_openapi/docs/LiveActivityStreamDeleteResponse.md @@ -16,7 +16,8 @@ Name | Type | Description | Notes **ignored** | **bool** | True when the stream was already ended and the request had no effect. | [optional] **message** | **str** | | [optional] **forced_completion** | **bool** | | [optional] -**warning** | **str** | | [optional] +**delivered** | **bool** | Present when the stream had a current Live Activity. True when the end was sent to at least one device, or queued for a device that has not registered yet. False when no device received it, so the Live Activity may stay on the Lock Screen until iOS removes it or someone dismisses it. | [optional] +**warning** | **str** | Explains why the end may not have removed the Live Activity, for example because iOS had already ended a Live Activity that started more than 8 hours ago. | [optional] **errors** | **List[str]** | Per-device delivery errors when some devices could not be reached. | [optional] ## Example diff --git a/activitysmith_openapi/docs/NoRecipientsError.md b/activitysmith_openapi/docs/NoRecipientsError.md index 6de3dab..1d73da4 100644 --- a/activitysmith_openapi/docs/NoRecipientsError.md +++ b/activitysmith_openapi/docs/NoRecipientsError.md @@ -6,7 +6,9 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **error** | **str** | | +**code** | **str** | Machine-readable reason. no_paired_devices: the account has no active paired iOS devices; pair an iPhone with the ActivitySmith app. no_recipients_found: devices are paired, but none matched the targeted channels. Treat unknown values as a generic no-delivery error. | [optional] **message** | **str** | | +**app_store_url** | **str** | ActivitySmith App Store link. Present when code is no_paired_devices. | [optional] **effective_channel_slugs** | **List[str]** | | [optional] ## Example diff --git a/activitysmith_openapi/docs/PushNotificationsApi.md b/activitysmith_openapi/docs/PushNotificationsApi.md index 13de2ab..b1452ec 100644 --- a/activitysmith_openapi/docs/PushNotificationsApi.md +++ b/activitysmith_openapi/docs/PushNotificationsApi.md @@ -175,7 +175,7 @@ Name | Type | Description | Notes **400** | Bad request (invalid payload or channel targeting input) | * RateLimit - Current request quotas using IETF draft-8 structured fields. Each named policy includes r (remaining requests) and t (seconds until reset). Multiple policies may apply.
* RateLimit-Policy - Each named policy includes q (request quota) and w (window in seconds). Each feature has an independent IP limit of 600 requests per 60 seconds. Independent account limits per 60 seconds are: Push Notifications 60, badges 60, Live Activities 300, and metric updates 300.
| **402** | Billing access required | - | **403** | Forbidden (API key scope or channel assignment violation) | * RateLimit - Current request quotas using IETF draft-8 structured fields. Each named policy includes r (remaining requests) and t (seconds until reset). Multiple policies may apply.
* RateLimit-Policy - Each named policy includes q (request quota) and w (window in seconds). Each feature has an independent IP limit of 600 requests per 60 seconds. Independent account limits per 60 seconds are: Push Notifications 60, badges 60, Live Activities 300, and metric updates 300.
| -**422** | No recipients found for effective channel target | * RateLimit - Current request quotas using IETF draft-8 structured fields. Each named policy includes r (remaining requests) and t (seconds until reset). Multiple policies may apply.
* RateLimit-Policy - Each named policy includes q (request quota) and w (window in seconds). Each feature has an independent IP limit of 600 requests per 60 seconds. Independent account limits per 60 seconds are: Push Notifications 60, badges 60, Live Activities 300, and metric updates 300.
| +**422** | No paired devices on the account, or no devices matched the effective channel target | * RateLimit - Current request quotas using IETF draft-8 structured fields. Each named policy includes r (remaining requests) and t (seconds until reset). Multiple policies may apply.
* RateLimit-Policy - Each named policy includes q (request quota) and w (window in seconds). Each feature has an independent IP limit of 600 requests per 60 seconds. Independent account limits per 60 seconds are: Push Notifications 60, badges 60, Live Activities 300, and metric updates 300.
| **429** | Rate limit exceeded | * RateLimit - Current request quotas using IETF draft-8 structured fields. Each named policy includes r (remaining requests) and t (seconds until reset). Multiple policies may apply.
* RateLimit-Policy - Each named policy includes q (request quota) and w (window in seconds). Each feature has an independent IP limit of 600 requests per 60 seconds. Independent account limits per 60 seconds are: Push Notifications 60, badges 60, Live Activities 300, and metric updates 300.
* Retry-After - Seconds to wait before retrying after a request-rate 429. Live Activity capacity errors are separate and require freeing device capacity; they do not provide a timed retry guarantee.
| [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) diff --git a/activitysmith_openapi/docs/UpdateAppIconBadgeCount422Response.md b/activitysmith_openapi/docs/UpdateAppIconBadgeCount422Response.md index f7cbbfe..1f2a244 100644 --- a/activitysmith_openapi/docs/UpdateAppIconBadgeCount422Response.md +++ b/activitysmith_openapi/docs/UpdateAppIconBadgeCount422Response.md @@ -6,9 +6,10 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **error** | **str** | | +**code** | **str** | | **message** | **str** | | +**app_store_url** | **str** | ActivitySmith App Store link. Present when code is no_paired_devices. | [optional] **effective_channel_slugs** | **List[str]** | | [optional] -**code** | **str** | | **badge** | **int** | | **devices_targeted** | **int** | | [optional] **devices_updated** | **int** | | diff --git a/activitysmith_openapi/models/live_activity_stream_delete_response.py b/activitysmith_openapi/models/live_activity_stream_delete_response.py index 42d3475..072664a 100644 --- a/activitysmith_openapi/models/live_activity_stream_delete_response.py +++ b/activitysmith_openapi/models/live_activity_stream_delete_response.py @@ -37,9 +37,10 @@ class LiveActivityStreamDeleteResponse(BaseModel): ignored: Optional[StrictBool] = Field(default=None, description="True when the stream was already ended and the request had no effect.") message: Optional[StrictStr] = None forced_completion: Optional[StrictBool] = None - warning: Optional[StrictStr] = None + delivered: Optional[StrictBool] = Field(default=None, description="Present when the stream had a current Live Activity. True when the end was sent to at least one device, or queued for a device that has not registered yet. False when no device received it, so the Live Activity may stay on the Lock Screen until iOS removes it or someone dismisses it.") + warning: Optional[StrictStr] = Field(default=None, description="Explains why the end may not have removed the Live Activity, for example because iOS had already ended a Live Activity that started more than 8 hours ago.") errors: Optional[List[StrictStr]] = Field(default=None, description="Per-device delivery errors when some devices could not be reached.") - __properties: ClassVar[List[str]] = ["success", "operation", "stream_key", "activity_id", "devices_queued", "devices_notified", "timestamp", "ignored", "message", "forced_completion", "warning", "errors"] + __properties: ClassVar[List[str]] = ["success", "operation", "stream_key", "activity_id", "devices_queued", "devices_notified", "timestamp", "ignored", "message", "forced_completion", "delivered", "warning", "errors"] @field_validator('operation') def operation_validate_enum(cls, value): @@ -114,6 +115,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "ignored": obj.get("ignored"), "message": obj.get("message"), "forced_completion": obj.get("forced_completion"), + "delivered": obj.get("delivered"), "warning": obj.get("warning"), "errors": obj.get("errors") }) diff --git a/activitysmith_openapi/models/no_recipients_error.py b/activitysmith_openapi/models/no_recipients_error.py index 42ba7ed..106adcc 100644 --- a/activitysmith_openapi/models/no_recipients_error.py +++ b/activitysmith_openapi/models/no_recipients_error.py @@ -17,7 +17,7 @@ import re # noqa: F401 import json -from pydantic import BaseModel, ConfigDict, StrictStr +from pydantic import BaseModel, ConfigDict, Field, StrictStr from typing import Any, ClassVar, Dict, List, Optional from typing import Optional, Set from typing_extensions import Self @@ -27,9 +27,11 @@ class NoRecipientsError(BaseModel): NoRecipientsError """ # noqa: E501 error: StrictStr + code: Optional[StrictStr] = Field(default=None, description="Machine-readable reason. no_paired_devices: the account has no active paired iOS devices; pair an iPhone with the ActivitySmith app. no_recipients_found: devices are paired, but none matched the targeted channels. Treat unknown values as a generic no-delivery error.") message: StrictStr + app_store_url: Optional[StrictStr] = Field(default=None, description="ActivitySmith App Store link. Present when code is no_paired_devices.") effective_channel_slugs: Optional[List[StrictStr]] = None - __properties: ClassVar[List[str]] = ["error", "message", "effective_channel_slugs"] + __properties: ClassVar[List[str]] = ["error", "code", "message", "app_store_url", "effective_channel_slugs"] model_config = ConfigDict( populate_by_name=True, @@ -83,7 +85,9 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: _obj = cls.model_validate({ "error": obj.get("error"), + "code": obj.get("code"), "message": obj.get("message"), + "app_store_url": obj.get("app_store_url"), "effective_channel_slugs": obj.get("effective_channel_slugs") }) return _obj diff --git a/activitysmith_openapi/openapi-source.json b/activitysmith_openapi/openapi-source.json index 28e1d47..8c9c874 100644 --- a/activitysmith_openapi/openapi-source.json +++ b/activitysmith_openapi/openapi-source.json @@ -1,6 +1,6 @@ { "repository": "ActivitySmithHQ/activitysmith-backend", - "commit": "dd6757c5defa3d1e6524faef789b6829184fb852", + "commit": "ab7064d65ad2097e3b57dc435c10b4f80a0ee27e", "path": "openapi.json", - "sha256": "24dae2d064095351d5e5cf800228e64a2d23c40b1e31a9754503081ddf31c5d8" + "sha256": "f0548e423e06f90169dae8d935b08f78291e9dbf95d4ae591e6d10d8eb269448" } diff --git a/activitysmith_openapi/test/test_live_activity_stream_delete_response.py b/activitysmith_openapi/test/test_live_activity_stream_delete_response.py index 1a4461f..92c3212 100644 --- a/activitysmith_openapi/test/test_live_activity_stream_delete_response.py +++ b/activitysmith_openapi/test/test_live_activity_stream_delete_response.py @@ -45,6 +45,7 @@ def make_instance(self, include_optional) -> LiveActivityStreamDeleteResponse: ignored = True, message = '', forced_completion = True, + delivered = True, warning = '', errors = [ '' diff --git a/activitysmith_openapi/test/test_no_recipients_error.py b/activitysmith_openapi/test/test_no_recipients_error.py index 6b3ae70..ce8709f 100644 --- a/activitysmith_openapi/test/test_no_recipients_error.py +++ b/activitysmith_openapi/test/test_no_recipients_error.py @@ -36,7 +36,9 @@ def make_instance(self, include_optional) -> NoRecipientsError: if include_optional: return NoRecipientsError( error = '', + code = '', message = '', + app_store_url = '', effective_channel_slugs = [ '' ] diff --git a/activitysmith_openapi/test/test_update_app_icon_badge_count422_response.py b/activitysmith_openapi/test/test_update_app_icon_badge_count422_response.py index 23bea2e..241a983 100644 --- a/activitysmith_openapi/test/test_update_app_icon_badge_count422_response.py +++ b/activitysmith_openapi/test/test_update_app_icon_badge_count422_response.py @@ -36,11 +36,12 @@ def make_instance(self, include_optional) -> UpdateAppIconBadgeCount422Response: if include_optional: return UpdateAppIconBadgeCount422Response( error = '', + code = 'badge_device_disconnected', message = '', + app_store_url = '', effective_channel_slugs = [ '' ], - code = 'badge_device_disconnected', badge = 0, devices_targeted = 56, devices_updated = 56, @@ -50,8 +51,8 @@ def make_instance(self, include_optional) -> UpdateAppIconBadgeCount422Response: else: return UpdateAppIconBadgeCount422Response( error = '', - message = '', code = 'badge_device_disconnected', + message = '', badge = 0, devices_updated = 56, )