diff --git a/package-lock.json b/package-lock.json index 39135dd..cdca70e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,7 @@ "devDependencies": { "@seamapi/fake-seam-connect": "1.85.1", "@seamapi/nextlove-sdk-generator": "^1.19.1", - "@seamapi/types": "1.582.0", + "@seamapi/types": "1.586.0", "del": "^7.1.0", "prettier": "^3.2.5" } @@ -475,9 +475,9 @@ } }, "node_modules/@seamapi/types": { - "version": "1.582.0", - "resolved": "https://registry.npmjs.org/@seamapi/types/-/types-1.582.0.tgz", - "integrity": "sha512-IV80fc2QH6LCBbmd5k9Fegj3BhhPEi0kajgY0dP0o/ue4ixjmfhyQM/HeQn4gpG//+XQE3twCK1wjPqcL4g7bQ==", + "version": "1.586.0", + "resolved": "https://registry.npmjs.org/@seamapi/types/-/types-1.586.0.tgz", + "integrity": "sha512-ItYTH1tJF9Q+ZI+toTJnMFl6QHldoeZ5cF3gRtn7+8AM1eRs6p3V1tXVJXoQ8MtDNjBT4cdmSB2L7bXyS03Sjg==", "dev": true, "license": "MIT", "engines": { diff --git a/package.json b/package.json index a893898..f46c408 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "devDependencies": { "@seamapi/fake-seam-connect": "1.85.1", "@seamapi/nextlove-sdk-generator": "^1.19.1", - "@seamapi/types": "1.582.0", + "@seamapi/types": "1.586.0", "del": "^7.1.0", "prettier": "^3.2.5" } diff --git a/seam/routes/access_grants.py b/seam/routes/access_grants.py index b160260..82e093c 100644 --- a/seam/routes/access_grants.py +++ b/seam/routes/access_grants.py @@ -1,12 +1,18 @@ from typing import Optional, Any, List, Dict, Union from ..client import SeamHttpClient from .models import AbstractAccessGrants, AccessGrant +from .access_grants_unmanaged import AccessGrantsUnmanaged class AccessGrants(AbstractAccessGrants): def __init__(self, client: SeamHttpClient, defaults: Dict[str, Any]): self.client = client self.defaults = defaults + self._unmanaged = AccessGrantsUnmanaged(client=client, defaults=defaults) + + @property + def unmanaged(self) -> AccessGrantsUnmanaged: + return self._unmanaged def create( self, diff --git a/seam/routes/access_grants_unmanaged.py b/seam/routes/access_grants_unmanaged.py new file mode 100644 index 0000000..fe321d2 --- /dev/null +++ b/seam/routes/access_grants_unmanaged.py @@ -0,0 +1,39 @@ +from typing import Optional, Any, List, Dict, Union +from ..client import SeamHttpClient +from .models import AbstractAccessGrantsUnmanaged + + +class AccessGrantsUnmanaged(AbstractAccessGrantsUnmanaged): + def __init__(self, client: SeamHttpClient, defaults: Dict[str, Any]): + self.client = client + self.defaults = defaults + + def get(self, *, access_grant_id: str) -> None: + json_payload = {} + + if access_grant_id is not None: + json_payload["access_grant_id"] = access_grant_id + + self.client.post("/access_grants/unmanaged/get", json=json_payload) + + return None + + def list( + self, + *, + acs_entrance_id: Optional[str] = None, + acs_system_id: Optional[str] = None, + user_identity_id: Optional[str] = None + ) -> None: + json_payload = {} + + if acs_entrance_id is not None: + json_payload["acs_entrance_id"] = acs_entrance_id + if acs_system_id is not None: + json_payload["acs_system_id"] = acs_system_id + if user_identity_id is not None: + json_payload["user_identity_id"] = user_identity_id + + self.client.post("/access_grants/unmanaged/list", json=json_payload) + + return None diff --git a/seam/routes/access_methods.py b/seam/routes/access_methods.py index 07d963b..8736c56 100644 --- a/seam/routes/access_methods.py +++ b/seam/routes/access_methods.py @@ -1,7 +1,7 @@ from typing import Optional, Any, List, Dict, Union from ..client import SeamHttpClient from .models import AbstractAccessMethods, ActionAttempt, AccessMethod - +from .access_methods_unmanaged import AccessMethodsUnmanaged from ..modules.action_attempts import resolve_action_attempt @@ -9,6 +9,11 @@ class AccessMethods(AbstractAccessMethods): def __init__(self, client: SeamHttpClient, defaults: Dict[str, Any]): self.client = client self.defaults = defaults + self._unmanaged = AccessMethodsUnmanaged(client=client, defaults=defaults) + + @property + def unmanaged(self) -> AccessMethodsUnmanaged: + return self._unmanaged def delete(self, *, access_method_id: str) -> None: json_payload = {} diff --git a/seam/routes/access_methods_unmanaged.py b/seam/routes/access_methods_unmanaged.py new file mode 100644 index 0000000..36aaa6f --- /dev/null +++ b/seam/routes/access_methods_unmanaged.py @@ -0,0 +1,42 @@ +from typing import Optional, Any, List, Dict, Union +from ..client import SeamHttpClient +from .models import AbstractAccessMethodsUnmanaged + + +class AccessMethodsUnmanaged(AbstractAccessMethodsUnmanaged): + def __init__(self, client: SeamHttpClient, defaults: Dict[str, Any]): + self.client = client + self.defaults = defaults + + def get(self, *, access_method_id: str) -> None: + json_payload = {} + + if access_method_id is not None: + json_payload["access_method_id"] = access_method_id + + self.client.post("/access_methods/unmanaged/get", json=json_payload) + + return None + + def list( + self, + *, + access_grant_id: str, + acs_entrance_id: Optional[str] = None, + device_id: Optional[str] = None, + space_id: Optional[str] = None + ) -> None: + json_payload = {} + + if access_grant_id is not None: + json_payload["access_grant_id"] = access_grant_id + if acs_entrance_id is not None: + json_payload["acs_entrance_id"] = acs_entrance_id + if device_id is not None: + json_payload["device_id"] = device_id + if space_id is not None: + json_payload["space_id"] = space_id + + self.client.post("/access_methods/unmanaged/list", json=json_payload) + + return None diff --git a/seam/routes/models.py b/seam/routes/models.py index ebbd161..6861f64 100644 --- a/seam/routes/models.py +++ b/seam/routes/models.py @@ -1672,106 +1672,27 @@ def update( raise NotImplementedError() -class AbstractAccessGrants(abc.ABC): - - @abc.abstractmethod - def create( - self, - *, - requested_access_methods: List[Dict[str, Any]], - user_identity_id: Optional[str] = None, - user_identity: Optional[Dict[str, Any]] = None, - access_grant_key: Optional[str] = None, - acs_entrance_ids: Optional[List[str]] = None, - customization_profile_id: Optional[str] = None, - device_ids: Optional[List[str]] = None, - ends_at: Optional[str] = None, - location: Optional[Dict[str, Any]] = None, - location_ids: Optional[List[str]] = None, - name: Optional[str] = None, - space_ids: Optional[List[str]] = None, - space_keys: Optional[List[str]] = None, - starts_at: Optional[str] = None - ) -> AccessGrant: - raise NotImplementedError() +class AbstractAccessGrantsUnmanaged(abc.ABC): @abc.abstractmethod - def delete(self, *, access_grant_id: str) -> None: - raise NotImplementedError() - - @abc.abstractmethod - def get( - self, - *, - access_grant_id: Optional[str] = None, - access_grant_key: Optional[str] = None - ) -> AccessGrant: - raise NotImplementedError() - - @abc.abstractmethod - def get_related( - self, - *, - access_grant_ids: List[str], - exclude: Optional[List[str]] = None, - include: Optional[List[str]] = None - ) -> None: + def get(self, *, access_grant_id: str) -> None: raise NotImplementedError() @abc.abstractmethod def list( self, *, - access_grant_key: Optional[str] = None, acs_entrance_id: Optional[str] = None, acs_system_id: Optional[str] = None, - customer_key: Optional[str] = None, - location_id: Optional[str] = None, - space_id: Optional[str] = None, user_identity_id: Optional[str] = None - ) -> List[AccessGrant]: - raise NotImplementedError() - - @abc.abstractmethod - def update( - self, - *, - access_grant_id: str, - ends_at: Optional[str] = None, - name: Optional[str] = None, - starts_at: Optional[str] = None ) -> None: raise NotImplementedError() -class AbstractAccessMethods(abc.ABC): - - @abc.abstractmethod - def delete(self, *, access_method_id: str) -> None: - raise NotImplementedError() +class AbstractAccessMethodsUnmanaged(abc.ABC): @abc.abstractmethod - def encode( - self, - *, - access_method_id: str, - acs_encoder_id: str, - wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None - ) -> ActionAttempt: - raise NotImplementedError() - - @abc.abstractmethod - def get(self, *, access_method_id: str) -> AccessMethod: - raise NotImplementedError() - - @abc.abstractmethod - def get_related( - self, - *, - access_method_ids: List[str], - exclude: Optional[List[str]] = None, - include: Optional[List[str]] = None - ) -> None: + def get(self, *, access_method_id: str) -> None: raise NotImplementedError() @abc.abstractmethod @@ -1782,7 +1703,7 @@ def list( acs_entrance_id: Optional[str] = None, device_id: Optional[str] = None, space_id: Optional[str] = None - ) -> List[AccessMethod]: + ) -> None: raise NotImplementedError() @@ -2803,158 +2724,200 @@ def temperature_reached( raise NotImplementedError() -class AbstractUserIdentities(abc.ABC): +class AbstractUserIdentitiesUnmanaged(abc.ABC): @abc.abstractmethod - def add_acs_user( - self, - *, - acs_user_id: str, - user_identity_id: Optional[str] = None, - user_identity_key: Optional[str] = None - ) -> None: + def get(self, *, user_identity_id: str) -> None: raise NotImplementedError() @abc.abstractmethod - def create( - self, - *, - acs_system_ids: Optional[List[str]] = None, - email_address: Optional[str] = None, - full_name: Optional[str] = None, - phone_number: Optional[str] = None, - user_identity_key: Optional[str] = None - ) -> UserIdentity: + def list(self, *, search: Optional[str] = None) -> None: raise NotImplementedError() + +class AbstractWebhooks(abc.ABC): + @abc.abstractmethod - def delete(self, *, user_identity_id: str) -> None: + def create(self, *, url: str, event_types: Optional[List[str]] = None) -> Webhook: raise NotImplementedError() @abc.abstractmethod - def generate_instant_key( - self, - *, - user_identity_id: str, - customization_profile_id: Optional[str] = None, - max_use_count: Optional[float] = None - ) -> InstantKey: + def delete(self, *, webhook_id: str) -> None: raise NotImplementedError() @abc.abstractmethod - def get( + def get(self, *, webhook_id: str) -> Webhook: + raise NotImplementedError() + + @abc.abstractmethod + def list( self, - *, - user_identity_id: Optional[str] = None, - user_identity_key: Optional[str] = None - ) -> UserIdentity: + ) -> List[Webhook]: raise NotImplementedError() @abc.abstractmethod - def grant_access_to_device(self, *, device_id: str, user_identity_id: str) -> None: + def update(self, *, event_types: List[str], webhook_id: str) -> None: raise NotImplementedError() + +class AbstractWorkspaces(abc.ABC): + @abc.abstractmethod - def list( + def create( self, *, - credential_manager_acs_system_id: Optional[str] = None, - search: Optional[str] = None - ) -> List[UserIdentity]: + name: str, + company_name: Optional[str] = None, + connect_partner_name: Optional[str] = None, + connect_webview_customization: Optional[Dict[str, Any]] = None, + is_sandbox: Optional[bool] = None, + webview_logo_shape: Optional[str] = None, + webview_primary_button_color: Optional[str] = None, + webview_primary_button_text_color: Optional[str] = None, + webview_success_message: Optional[str] = None + ) -> Workspace: raise NotImplementedError() @abc.abstractmethod - def list_accessible_devices(self, *, user_identity_id: str) -> List[Device]: + def get( + self, + ) -> Workspace: raise NotImplementedError() @abc.abstractmethod - def list_acs_systems(self, *, user_identity_id: str) -> List[AcsSystem]: + def list( + self, + ) -> List[Workspace]: raise NotImplementedError() @abc.abstractmethod - def list_acs_users(self, *, user_identity_id: str) -> List[AcsUser]: + def reset_sandbox( + self, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None + ) -> ActionAttempt: raise NotImplementedError() - @abc.abstractmethod - def remove_acs_user(self, *, acs_user_id: str, user_identity_id: str) -> None: - raise NotImplementedError() +class AbstractAccessGrants(abc.ABC): + + @property @abc.abstractmethod - def revoke_access_to_device(self, *, device_id: str, user_identity_id: str) -> None: + def unmanaged(self) -> AbstractAccessGrantsUnmanaged: raise NotImplementedError() @abc.abstractmethod - def update( + def create( self, *, - user_identity_id: str, - email_address: Optional[str] = None, - full_name: Optional[str] = None, - phone_number: Optional[str] = None, - user_identity_key: Optional[str] = None - ) -> None: + requested_access_methods: List[Dict[str, Any]], + user_identity_id: Optional[str] = None, + user_identity: Optional[Dict[str, Any]] = None, + access_grant_key: Optional[str] = None, + acs_entrance_ids: Optional[List[str]] = None, + customization_profile_id: Optional[str] = None, + device_ids: Optional[List[str]] = None, + ends_at: Optional[str] = None, + location: Optional[Dict[str, Any]] = None, + location_ids: Optional[List[str]] = None, + name: Optional[str] = None, + space_ids: Optional[List[str]] = None, + space_keys: Optional[List[str]] = None, + starts_at: Optional[str] = None + ) -> AccessGrant: raise NotImplementedError() - -class AbstractWebhooks(abc.ABC): - @abc.abstractmethod - def create(self, *, url: str, event_types: Optional[List[str]] = None) -> Webhook: + def delete(self, *, access_grant_id: str) -> None: raise NotImplementedError() @abc.abstractmethod - def delete(self, *, webhook_id: str) -> None: + def get( + self, + *, + access_grant_id: Optional[str] = None, + access_grant_key: Optional[str] = None + ) -> AccessGrant: raise NotImplementedError() @abc.abstractmethod - def get(self, *, webhook_id: str) -> Webhook: + def get_related( + self, + *, + access_grant_ids: List[str], + exclude: Optional[List[str]] = None, + include: Optional[List[str]] = None + ) -> None: raise NotImplementedError() @abc.abstractmethod def list( self, - ) -> List[Webhook]: + *, + access_grant_key: Optional[str] = None, + acs_entrance_id: Optional[str] = None, + acs_system_id: Optional[str] = None, + customer_key: Optional[str] = None, + location_id: Optional[str] = None, + space_id: Optional[str] = None, + user_identity_id: Optional[str] = None + ) -> List[AccessGrant]: raise NotImplementedError() @abc.abstractmethod - def update(self, *, event_types: List[str], webhook_id: str) -> None: + def update( + self, + *, + access_grant_id: str, + ends_at: Optional[str] = None, + name: Optional[str] = None, + starts_at: Optional[str] = None + ) -> None: raise NotImplementedError() -class AbstractWorkspaces(abc.ABC): +class AbstractAccessMethods(abc.ABC): + @property @abc.abstractmethod - def create( + def unmanaged(self) -> AbstractAccessMethodsUnmanaged: + raise NotImplementedError() + + @abc.abstractmethod + def delete(self, *, access_method_id: str) -> None: + raise NotImplementedError() + + @abc.abstractmethod + def encode( self, *, - name: str, - company_name: Optional[str] = None, - connect_partner_name: Optional[str] = None, - connect_webview_customization: Optional[Dict[str, Any]] = None, - is_sandbox: Optional[bool] = None, - webview_logo_shape: Optional[str] = None, - webview_primary_button_color: Optional[str] = None, - webview_primary_button_text_color: Optional[str] = None, - webview_success_message: Optional[str] = None - ) -> Workspace: + access_method_id: str, + acs_encoder_id: str, + wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None + ) -> ActionAttempt: raise NotImplementedError() @abc.abstractmethod - def get( - self, - ) -> Workspace: + def get(self, *, access_method_id: str) -> AccessMethod: raise NotImplementedError() @abc.abstractmethod - def list( + def get_related( self, - ) -> List[Workspace]: + *, + access_method_ids: List[str], + exclude: Optional[List[str]] = None, + include: Optional[List[str]] = None + ) -> None: raise NotImplementedError() @abc.abstractmethod - def reset_sandbox( - self, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None - ) -> ActionAttempt: + def list( + self, + *, + access_grant_id: str, + acs_entrance_id: Optional[str] = None, + device_id: Optional[str] = None, + space_id: Optional[str] = None + ) -> List[AccessMethod]: raise NotImplementedError() @@ -3042,6 +3005,104 @@ def list( raise NotImplementedError() +class AbstractUserIdentities(abc.ABC): + + @property + @abc.abstractmethod + def unmanaged(self) -> AbstractUserIdentitiesUnmanaged: + raise NotImplementedError() + + @abc.abstractmethod + def add_acs_user( + self, + *, + acs_user_id: str, + user_identity_id: Optional[str] = None, + user_identity_key: Optional[str] = None + ) -> None: + raise NotImplementedError() + + @abc.abstractmethod + def create( + self, + *, + acs_system_ids: Optional[List[str]] = None, + email_address: Optional[str] = None, + full_name: Optional[str] = None, + phone_number: Optional[str] = None, + user_identity_key: Optional[str] = None + ) -> UserIdentity: + raise NotImplementedError() + + @abc.abstractmethod + def delete(self, *, user_identity_id: str) -> None: + raise NotImplementedError() + + @abc.abstractmethod + def generate_instant_key( + self, + *, + user_identity_id: str, + customization_profile_id: Optional[str] = None, + max_use_count: Optional[float] = None + ) -> InstantKey: + raise NotImplementedError() + + @abc.abstractmethod + def get( + self, + *, + user_identity_id: Optional[str] = None, + user_identity_key: Optional[str] = None + ) -> UserIdentity: + raise NotImplementedError() + + @abc.abstractmethod + def grant_access_to_device(self, *, device_id: str, user_identity_id: str) -> None: + raise NotImplementedError() + + @abc.abstractmethod + def list( + self, + *, + credential_manager_acs_system_id: Optional[str] = None, + search: Optional[str] = None + ) -> List[UserIdentity]: + raise NotImplementedError() + + @abc.abstractmethod + def list_accessible_devices(self, *, user_identity_id: str) -> List[Device]: + raise NotImplementedError() + + @abc.abstractmethod + def list_acs_systems(self, *, user_identity_id: str) -> List[AcsSystem]: + raise NotImplementedError() + + @abc.abstractmethod + def list_acs_users(self, *, user_identity_id: str) -> List[AcsUser]: + raise NotImplementedError() + + @abc.abstractmethod + def remove_acs_user(self, *, acs_user_id: str, user_identity_id: str) -> None: + raise NotImplementedError() + + @abc.abstractmethod + def revoke_access_to_device(self, *, device_id: str, user_identity_id: str) -> None: + raise NotImplementedError() + + @abc.abstractmethod + def update( + self, + *, + user_identity_id: str, + email_address: Optional[str] = None, + full_name: Optional[str] = None, + phone_number: Optional[str] = None, + user_identity_key: Optional[str] = None + ) -> None: + raise NotImplementedError() + + class AbstractAccessCodes(abc.ABC): @property diff --git a/seam/routes/user_identities.py b/seam/routes/user_identities.py index cc54762..c74416a 100644 --- a/seam/routes/user_identities.py +++ b/seam/routes/user_identities.py @@ -8,12 +8,18 @@ AcsSystem, AcsUser, ) +from .user_identities_unmanaged import UserIdentitiesUnmanaged class UserIdentities(AbstractUserIdentities): def __init__(self, client: SeamHttpClient, defaults: Dict[str, Any]): self.client = client self.defaults = defaults + self._unmanaged = UserIdentitiesUnmanaged(client=client, defaults=defaults) + + @property + def unmanaged(self) -> UserIdentitiesUnmanaged: + return self._unmanaged def add_acs_user( self, diff --git a/seam/routes/user_identities_unmanaged.py b/seam/routes/user_identities_unmanaged.py new file mode 100644 index 0000000..305a8a0 --- /dev/null +++ b/seam/routes/user_identities_unmanaged.py @@ -0,0 +1,29 @@ +from typing import Optional, Any, List, Dict, Union +from ..client import SeamHttpClient +from .models import AbstractUserIdentitiesUnmanaged + + +class UserIdentitiesUnmanaged(AbstractUserIdentitiesUnmanaged): + def __init__(self, client: SeamHttpClient, defaults: Dict[str, Any]): + self.client = client + self.defaults = defaults + + def get(self, *, user_identity_id: str) -> None: + json_payload = {} + + if user_identity_id is not None: + json_payload["user_identity_id"] = user_identity_id + + self.client.post("/user_identities/unmanaged/get", json=json_payload) + + return None + + def list(self, *, search: Optional[str] = None) -> None: + json_payload = {} + + if search is not None: + json_payload["search"] = search + + self.client.post("/user_identities/unmanaged/list", json=json_payload) + + return None