From 046668c7ba860d77af4d2e7d16518ded73496ba0 Mon Sep 17 00:00:00 2001 From: Andrii Balitskyi <10balian10@gmail.com> Date: Wed, 18 Jun 2025 18:45:53 +0200 Subject: [PATCH 1/2] Update seamapi/types to 1.418.1 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 83359ba..29c58e5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "devDependencies": { "@prettier/plugin-php": "^0.22.1", "@seamapi/nextlove-sdk-generator": "^1.18.1", - "@seamapi/types": "1.405.0", + "@seamapi/types": "1.418.1", "del": "^7.1.0", "prettier": "^3.0.0" } @@ -456,9 +456,9 @@ } }, "node_modules/@seamapi/types": { - "version": "1.405.0", - "resolved": "https://registry.npmjs.org/@seamapi/types/-/types-1.405.0.tgz", - "integrity": "sha512-kcNY2tltFbmjI+KVn8qlRjFxQEd1eQAq0sacZ/TZ8uNu/jNlXSng8DkkfEHNvcTWd3v8h9FnY8xagweQZ/nBTg==", + "version": "1.418.1", + "resolved": "https://registry.npmjs.org/@seamapi/types/-/types-1.418.1.tgz", + "integrity": "sha512-BaxESv5sNtn3rHvQpSOjGGlCweLdE+rgDCSMfQ1Og5h0LN31jTTo9ZSFkFilYLBB0ihrH2g6Xo6Q+E3eKNHrCA==", "dev": true, "license": "MIT", "engines": { diff --git a/package.json b/package.json index 0f0f2e4..486ce39 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "devDependencies": { "@prettier/plugin-php": "^0.22.1", "@seamapi/nextlove-sdk-generator": "^1.18.1", - "@seamapi/types": "1.405.0", + "@seamapi/types": "1.418.1", "del": "^7.1.0", "prettier": "^3.0.0" } From 70546c4587260a110534557b2e4bac54e2d3368b Mon Sep 17 00:00:00 2001 From: Seam Bot Date: Wed, 18 Jun 2025 16:46:23 +0000 Subject: [PATCH 2/2] ci: Generate code --- src/Objects/AccessGrant.php | 40 ++ .../AccessGrantRequestedAccessMethods.php | 28 + src/Objects/AccessMethod.php | 35 ++ src/Objects/AcsAccessGroup.php | 2 + src/Objects/AcsEncoder.php | 2 + src/Objects/AcsEntrance.php | 2 + src/Objects/BridgeClientSession.php | 51 ++ src/Objects/BridgeClientSessionErrors.php | 41 ++ src/Objects/BridgeConnectedSystems.php | 35 ++ src/Objects/ClientSession.php | 4 + src/Objects/ConnectWebview.php | 2 + src/Objects/ConnectedAccount.php | 2 + src/Objects/Location.php | 35 ++ src/Objects/LocationGeolocation.php | 18 + src/Objects/MagicLink.php | 31 + src/Objects/PartnerResource.php | 43 ++ src/Objects/PhoneSessionAcsCredentials.php | 4 +- src/Objects/PhoneSessionAcsEntrances.php | 2 + src/Objects/{Network.php => Space.php} | 10 +- src/Objects/ThermostatDailyProgram.php | 34 ++ src/Objects/ThermostatDailyProgramPeriods.php | 24 + src/Objects/UnmanagedAcsAccessGroup.php | 2 + src/Objects/UserIdentity.php | 10 + src/Objects/UserIdentityErrors.php | 20 + src/Objects/UserIdentityWarnings.php | 25 + src/SeamClient.php | 542 ++++++++++++++++-- 26 files changed, 989 insertions(+), 55 deletions(-) create mode 100644 src/Objects/AccessGrant.php create mode 100644 src/Objects/AccessGrantRequestedAccessMethods.php create mode 100644 src/Objects/AccessMethod.php create mode 100644 src/Objects/BridgeClientSession.php create mode 100644 src/Objects/BridgeClientSessionErrors.php create mode 100644 src/Objects/BridgeConnectedSystems.php create mode 100644 src/Objects/Location.php create mode 100644 src/Objects/LocationGeolocation.php create mode 100644 src/Objects/MagicLink.php create mode 100644 src/Objects/PartnerResource.php rename src/Objects/{Network.php => Space.php} (67%) create mode 100644 src/Objects/ThermostatDailyProgram.php create mode 100644 src/Objects/ThermostatDailyProgramPeriods.php create mode 100644 src/Objects/UserIdentityErrors.php create mode 100644 src/Objects/UserIdentityWarnings.php diff --git a/src/Objects/AccessGrant.php b/src/Objects/AccessGrant.php new file mode 100644 index 0000000..5a82a26 --- /dev/null +++ b/src/Objects/AccessGrant.php @@ -0,0 +1,40 @@ +access_grant_id, + access_method_ids: $json->access_method_ids, + created_at: $json->created_at, + display_name: $json->display_name, + location_ids: $json->location_ids, + requested_access_methods: array_map( + fn($r) => AccessGrantRequestedAccessMethods::from_json($r), + $json->requested_access_methods ?? [] + ), + space_ids: $json->space_ids, + user_identity_id: $json->user_identity_id, + workspace_id: $json->workspace_id + ); + } + + public function __construct( + public string $access_grant_id, + public array $access_method_ids, + public string $created_at, + public string $display_name, + public array $location_ids, + public array $requested_access_methods, + public array $space_ids, + public string $user_identity_id, + public string $workspace_id + ) { + } +} diff --git a/src/Objects/AccessGrantRequestedAccessMethods.php b/src/Objects/AccessGrantRequestedAccessMethods.php new file mode 100644 index 0000000..af4c9a5 --- /dev/null +++ b/src/Objects/AccessGrantRequestedAccessMethods.php @@ -0,0 +1,28 @@ +created_access_method_ids, + created_at: $json->created_at, + display_name: $json->display_name, + mode: $json->mode + ); + } + + public function __construct( + public array $created_access_method_ids, + public string $created_at, + public string $display_name, + public string $mode + ) { + } +} diff --git a/src/Objects/AccessMethod.php b/src/Objects/AccessMethod.php new file mode 100644 index 0000000..7afa91e --- /dev/null +++ b/src/Objects/AccessMethod.php @@ -0,0 +1,35 @@ +access_method_id, + created_at: $json->created_at, + display_name: $json->display_name, + mode: $json->mode, + workspace_id: $json->workspace_id, + instant_key_url: $json->instant_key_url ?? null, + is_card_encoding_required: $json->is_card_encoding_required ?? null, + issued_at: $json->issued_at ?? null + ); + } + + public function __construct( + public string $access_method_id, + public string $created_at, + public string $display_name, + public string $mode, + public string $workspace_id, + public string|null $instant_key_url, + public bool|null $is_card_encoding_required, + public string|null $issued_at + ) { + } +} diff --git a/src/Objects/AcsAccessGroup.php b/src/Objects/AcsAccessGroup.php index a3ded15..dc9fe51 100644 --- a/src/Objects/AcsAccessGroup.php +++ b/src/Objects/AcsAccessGroup.php @@ -14,6 +14,7 @@ public static function from_json(mixed $json): AcsAccessGroup|null access_group_type_display_name: $json->access_group_type_display_name, acs_access_group_id: $json->acs_access_group_id, acs_system_id: $json->acs_system_id, + connected_account_id: $json->connected_account_id, created_at: $json->created_at, display_name: $json->display_name, external_type: $json->external_type, @@ -33,6 +34,7 @@ public function __construct( public string $access_group_type_display_name, public string $acs_access_group_id, public string $acs_system_id, + public string $connected_account_id, public string $created_at, public string $display_name, public string $external_type, diff --git a/src/Objects/AcsEncoder.php b/src/Objects/AcsEncoder.php index 877a341..d5e3580 100644 --- a/src/Objects/AcsEncoder.php +++ b/src/Objects/AcsEncoder.php @@ -12,6 +12,7 @@ public static function from_json(mixed $json): AcsEncoder|null return new self( acs_encoder_id: $json->acs_encoder_id, acs_system_id: $json->acs_system_id, + connected_account_id: $json->connected_account_id, created_at: $json->created_at, display_name: $json->display_name, errors: array_map( @@ -25,6 +26,7 @@ public static function from_json(mixed $json): AcsEncoder|null public function __construct( public string $acs_encoder_id, public string $acs_system_id, + public string $connected_account_id, public string $created_at, public string $display_name, public array $errors, diff --git a/src/Objects/AcsEntrance.php b/src/Objects/AcsEntrance.php index 4f503fa..3e64452 100644 --- a/src/Objects/AcsEntrance.php +++ b/src/Objects/AcsEntrance.php @@ -12,6 +12,7 @@ public static function from_json(mixed $json): AcsEntrance|null return new self( acs_entrance_id: $json->acs_entrance_id, acs_system_id: $json->acs_system_id, + connected_account_id: $json->connected_account_id, created_at: $json->created_at, display_name: $json->display_name, errors: array_map( @@ -54,6 +55,7 @@ public static function from_json(mixed $json): AcsEntrance|null public function __construct( public string $acs_entrance_id, public string $acs_system_id, + public string $connected_account_id, public string $created_at, public string $display_name, public array $errors, diff --git a/src/Objects/BridgeClientSession.php b/src/Objects/BridgeClientSession.php new file mode 100644 index 0000000..6ee4d73 --- /dev/null +++ b/src/Objects/BridgeClientSession.php @@ -0,0 +1,51 @@ +bridge_client_machine_identifier_key, + bridge_client_name: $json->bridge_client_name, + bridge_client_session_id: $json->bridge_client_session_id, + bridge_client_session_token: $json->bridge_client_session_token, + bridge_client_time_zone: $json->bridge_client_time_zone, + created_at: $json->created_at, + errors: array_map( + fn($e) => BridgeClientSessionErrors::from_json($e), + $json->errors ?? [] + ), + pairing_code: $json->pairing_code, + pairing_code_expires_at: $json->pairing_code_expires_at, + tailscale_hostname: $json->tailscale_hostname, + tailscale_auth_key: $json->tailscale_auth_key ?? null, + telemetry_token: $json->telemetry_token ?? null, + telemetry_token_expires_at: $json->telemetry_token_expires_at ?? + null, + telemetry_url: $json->telemetry_url ?? null + ); + } + + public function __construct( + public string $bridge_client_machine_identifier_key, + public string $bridge_client_name, + public string $bridge_client_session_id, + public string $bridge_client_session_token, + public string $bridge_client_time_zone, + public string $created_at, + public array $errors, + public string $pairing_code, + public string $pairing_code_expires_at, + public string $tailscale_hostname, + public string|null $tailscale_auth_key, + public string|null $telemetry_token, + public string|null $telemetry_token_expires_at, + public string|null $telemetry_url + ) { + } +} diff --git a/src/Objects/BridgeClientSessionErrors.php b/src/Objects/BridgeClientSessionErrors.php new file mode 100644 index 0000000..2559b9a --- /dev/null +++ b/src/Objects/BridgeClientSessionErrors.php @@ -0,0 +1,41 @@ +created_at, + error_code: $json->error_code, + message: $json->message, + can_tailscale_proxy_reach_bridge: $json->can_tailscale_proxy_reach_bridge ?? + null, + can_tailscale_proxy_reach_tailscale_network: $json->can_tailscale_proxy_reach_tailscale_network ?? + null, + is_bridge_socks_server_healthy: $json->is_bridge_socks_server_healthy ?? + null, + is_tailscale_proxy_reachable: $json->is_tailscale_proxy_reachable ?? + null, + is_tailscale_proxy_socks_server_healthy: $json->is_tailscale_proxy_socks_server_healthy ?? + null + ); + } + + public function __construct( + public string $created_at, + public string $error_code, + public string $message, + public bool|null $can_tailscale_proxy_reach_bridge, + public bool|null $can_tailscale_proxy_reach_tailscale_network, + public bool|null $is_bridge_socks_server_healthy, + public bool|null $is_tailscale_proxy_reachable, + public bool|null $is_tailscale_proxy_socks_server_healthy + ) { + } +} diff --git a/src/Objects/BridgeConnectedSystems.php b/src/Objects/BridgeConnectedSystems.php new file mode 100644 index 0000000..f250ef0 --- /dev/null +++ b/src/Objects/BridgeConnectedSystems.php @@ -0,0 +1,35 @@ +acs_system_display_name, + acs_system_id: $json->acs_system_id, + bridge_created_at: $json->bridge_created_at, + bridge_id: $json->bridge_id, + connected_account_created_at: $json->connected_account_created_at, + connected_account_id: $json->connected_account_id, + workspace_display_name: $json->workspace_display_name, + workspace_id: $json->workspace_id + ); + } + + public function __construct( + public string $acs_system_display_name, + public string $acs_system_id, + public string $bridge_created_at, + public string $bridge_id, + public string $connected_account_created_at, + public string $connected_account_id, + public string $workspace_display_name, + public string $workspace_id + ) { + } +} diff --git a/src/Objects/ClientSession.php b/src/Objects/ClientSession.php index 6db7362..38a3b0b 100644 --- a/src/Objects/ClientSession.php +++ b/src/Objects/ClientSession.php @@ -19,6 +19,8 @@ public static function from_json(mixed $json): ClientSession|null token: $json->token, user_identity_ids: $json->user_identity_ids, workspace_id: $json->workspace_id, + customer_id: $json->customer_id ?? null, + user_identity_id: $json->user_identity_id ?? null, user_identifier_key: $json->user_identifier_key ?? null ); } @@ -33,6 +35,8 @@ public function __construct( public string $token, public array $user_identity_ids, public string $workspace_id, + public string|null $customer_id, + public string|null $user_identity_id, public string|null $user_identifier_key ) { } diff --git a/src/Objects/ConnectWebview.php b/src/Objects/ConnectWebview.php index 9b9d54d..dbfa748 100644 --- a/src/Objects/ConnectWebview.php +++ b/src/Objects/ConnectWebview.php @@ -10,6 +10,7 @@ public static function from_json(mixed $json): ConnectWebview|null return null; } return new self( + accepted_capabilities: $json->accepted_capabilities, accepted_devices: $json->accepted_devices, accepted_providers: $json->accepted_providers, any_device_allowed: $json->any_device_allowed, @@ -34,6 +35,7 @@ public static function from_json(mixed $json): ConnectWebview|null } public function __construct( + public array $accepted_capabilities, public array $accepted_devices, public array $accepted_providers, public bool $any_device_allowed, diff --git a/src/Objects/ConnectedAccount.php b/src/Objects/ConnectedAccount.php index d9f6e41..73487bc 100644 --- a/src/Objects/ConnectedAccount.php +++ b/src/Objects/ConnectedAccount.php @@ -24,6 +24,7 @@ public static function from_json(mixed $json): ConnectedAccount|null account_type: $json->account_type ?? null, connected_account_id: $json->connected_account_id ?? null, created_at: $json->created_at ?? null, + customer_key: $json->customer_key ?? null, user_identifier: isset($json->user_identifier) ? ConnectedAccountUserIdentifier::from_json( $json->user_identifier @@ -41,6 +42,7 @@ public function __construct( public string|null $account_type, public string|null $connected_account_id, public string|null $created_at, + public string|null $customer_key, public ConnectedAccountUserIdentifier|null $user_identifier ) { } diff --git a/src/Objects/Location.php b/src/Objects/Location.php new file mode 100644 index 0000000..7d135af --- /dev/null +++ b/src/Objects/Location.php @@ -0,0 +1,35 @@ +created_at, + display_name: $json->display_name, + location_id: $json->location_id, + name: $json->name, + workspace_id: $json->workspace_id, + geolocation: isset($json->geolocation) + ? LocationGeolocation::from_json($json->geolocation) + : null, + time_zone: $json->time_zone ?? null + ); + } + + public function __construct( + public string $created_at, + public string $display_name, + public string $location_id, + public string $name, + public string $workspace_id, + public LocationGeolocation|null $geolocation, + public string|null $time_zone + ) { + } +} diff --git a/src/Objects/LocationGeolocation.php b/src/Objects/LocationGeolocation.php new file mode 100644 index 0000000..82c3ef5 --- /dev/null +++ b/src/Objects/LocationGeolocation.php @@ -0,0 +1,18 @@ +latitude, longitude: $json->longitude); + } + + public function __construct(public float $latitude, public float $longitude) + { + } +} diff --git a/src/Objects/MagicLink.php b/src/Objects/MagicLink.php new file mode 100644 index 0000000..54a0143 --- /dev/null +++ b/src/Objects/MagicLink.php @@ -0,0 +1,31 @@ +building_block_type, + created_at: $json->created_at, + customer_key: $json->customer_key, + expires_at: $json->expires_at, + url: $json->url, + workspace_id: $json->workspace_id + ); + } + + public function __construct( + public string $building_block_type, + public string $created_at, + public string $customer_key, + public string $expires_at, + public string $url, + public string $workspace_id + ) { + } +} diff --git a/src/Objects/PartnerResource.php b/src/Objects/PartnerResource.php new file mode 100644 index 0000000..9ee5b44 --- /dev/null +++ b/src/Objects/PartnerResource.php @@ -0,0 +1,43 @@ +customer_key, + partner_resource_key: $json->partner_resource_key, + partner_resource_type: $json->partner_resource_type, + custom_metadata: $json->custom_metadata ?? null, + description: $json->description ?? null, + email_address: $json->email_address ?? null, + ends_at: $json->ends_at ?? null, + location_keys: $json->location_keys ?? null, + name: $json->name ?? null, + phone_number: $json->phone_number ?? null, + starts_at: $json->starts_at ?? null, + user_identity_key: $json->user_identity_key ?? null + ); + } + + public function __construct( + public string $customer_key, + public string $partner_resource_key, + public string $partner_resource_type, + public mixed $custom_metadata, + public string|null $description, + public string|null $email_address, + public string|null $ends_at, + public array|null $location_keys, + public string|null $name, + public string|null $phone_number, + public string|null $starts_at, + public string|null $user_identity_key + ) { + } +} diff --git a/src/Objects/PhoneSessionAcsCredentials.php b/src/Objects/PhoneSessionAcsCredentials.php index dc31dd2..6d8a8f8 100644 --- a/src/Objects/PhoneSessionAcsCredentials.php +++ b/src/Objects/PhoneSessionAcsCredentials.php @@ -12,7 +12,6 @@ public static function from_json( } return new self( access_method: $json->access_method, - acs_credential_id: $json->acs_credential_id, acs_entrances: array_map( fn($a) => PhoneSessionAcsEntrances::from_json($a), $json->acs_entrances ?? [] @@ -52,6 +51,7 @@ public static function from_json( $json->visionline_metadata ) : null, + acs_credential_id: $json->acs_credential_id ?? null, card_number: $json->card_number ?? null, code: $json->code ?? null, is_latest_desired_state_synced_with_provider: $json->is_latest_desired_state_synced_with_provider ?? @@ -64,7 +64,6 @@ public static function from_json( public function __construct( public string $access_method, - public string $acs_credential_id, public array $acs_entrances, public string $acs_system_id, public string $created_at, @@ -85,6 +84,7 @@ public function __construct( public string|null $parent_acs_credential_id, public string|null $starts_at, public PhoneSessionVisionlineMetadata|null $visionline_metadata, + public string|null $acs_credential_id, public string|null $card_number, public string|null $code, public bool|null $is_latest_desired_state_synced_with_provider, diff --git a/src/Objects/PhoneSessionAcsEntrances.php b/src/Objects/PhoneSessionAcsEntrances.php index dc9529f..c66c893 100644 --- a/src/Objects/PhoneSessionAcsEntrances.php +++ b/src/Objects/PhoneSessionAcsEntrances.php @@ -12,6 +12,7 @@ public static function from_json(mixed $json): PhoneSessionAcsEntrances|null return new self( acs_entrance_id: $json->acs_entrance_id, acs_system_id: $json->acs_system_id, + connected_account_id: $json->connected_account_id, created_at: $json->created_at, display_name: $json->display_name, errors: array_map( @@ -54,6 +55,7 @@ public static function from_json(mixed $json): PhoneSessionAcsEntrances|null public function __construct( public string $acs_entrance_id, public string $acs_system_id, + public string $connected_account_id, public string $created_at, public string $display_name, public array $errors, diff --git a/src/Objects/Network.php b/src/Objects/Space.php similarity index 67% rename from src/Objects/Network.php rename to src/Objects/Space.php index c17b16d..967f7bb 100644 --- a/src/Objects/Network.php +++ b/src/Objects/Space.php @@ -2,9 +2,9 @@ namespace Seam\Objects; -class Network +class Space { - public static function from_json(mixed $json): Network|null + public static function from_json(mixed $json): Space|null { if (!$json) { return null; @@ -12,7 +12,8 @@ public static function from_json(mixed $json): Network|null return new self( created_at: $json->created_at, display_name: $json->display_name, - network_id: $json->network_id, + name: $json->name, + space_id: $json->space_id, workspace_id: $json->workspace_id ); } @@ -20,7 +21,8 @@ public static function from_json(mixed $json): Network|null public function __construct( public string $created_at, public string $display_name, - public string $network_id, + public string $name, + public string $space_id, public string $workspace_id ) { } diff --git a/src/Objects/ThermostatDailyProgram.php b/src/Objects/ThermostatDailyProgram.php new file mode 100644 index 0000000..e13533f --- /dev/null +++ b/src/Objects/ThermostatDailyProgram.php @@ -0,0 +1,34 @@ +created_at, + device_id: $json->device_id, + periods: array_map( + fn($p) => ThermostatDailyProgramPeriods::from_json($p), + $json->periods ?? [] + ), + thermostat_daily_program_id: $json->thermostat_daily_program_id, + workspace_id: $json->workspace_id, + name: $json->name ?? null + ); + } + + public function __construct( + public string $created_at, + public string $device_id, + public array $periods, + public string $thermostat_daily_program_id, + public string $workspace_id, + public string|null $name + ) { + } +} diff --git a/src/Objects/ThermostatDailyProgramPeriods.php b/src/Objects/ThermostatDailyProgramPeriods.php new file mode 100644 index 0000000..4f5423a --- /dev/null +++ b/src/Objects/ThermostatDailyProgramPeriods.php @@ -0,0 +1,24 @@ +climate_preset_key, + starts_at_time: $json->starts_at_time + ); + } + + public function __construct( + public string $climate_preset_key, + public string $starts_at_time + ) { + } +} diff --git a/src/Objects/UnmanagedAcsAccessGroup.php b/src/Objects/UnmanagedAcsAccessGroup.php index 18b0c93..cf70b84 100644 --- a/src/Objects/UnmanagedAcsAccessGroup.php +++ b/src/Objects/UnmanagedAcsAccessGroup.php @@ -14,6 +14,7 @@ public static function from_json(mixed $json): UnmanagedAcsAccessGroup|null access_group_type_display_name: $json->access_group_type_display_name, acs_access_group_id: $json->acs_access_group_id, acs_system_id: $json->acs_system_id, + connected_account_id: $json->connected_account_id, created_at: $json->created_at, display_name: $json->display_name, external_type: $json->external_type, @@ -33,6 +34,7 @@ public function __construct( public string $access_group_type_display_name, public string $acs_access_group_id, public string $acs_system_id, + public string $connected_account_id, public string $created_at, public string $display_name, public string $external_type, diff --git a/src/Objects/UserIdentity.php b/src/Objects/UserIdentity.php index f96d616..dfcfe10 100644 --- a/src/Objects/UserIdentity.php +++ b/src/Objects/UserIdentity.php @@ -12,7 +12,15 @@ public static function from_json(mixed $json): UserIdentity|null return new self( created_at: $json->created_at, display_name: $json->display_name, + errors: array_map( + fn($e) => UserIdentityErrors::from_json($e), + $json->errors ?? [] + ), user_identity_id: $json->user_identity_id, + warnings: array_map( + fn($w) => UserIdentityWarnings::from_json($w), + $json->warnings ?? [] + ), workspace_id: $json->workspace_id, email_address: $json->email_address ?? null, full_name: $json->full_name ?? null, @@ -24,7 +32,9 @@ public static function from_json(mixed $json): UserIdentity|null public function __construct( public string $created_at, public string $display_name, + public array $errors, public string $user_identity_id, + public array $warnings, public string $workspace_id, public string|null $email_address, public string|null $full_name, diff --git a/src/Objects/UserIdentityErrors.php b/src/Objects/UserIdentityErrors.php new file mode 100644 index 0000000..5951407 --- /dev/null +++ b/src/Objects/UserIdentityErrors.php @@ -0,0 +1,20 @@ +created_at, message: $json->message); + } + + public function __construct( + public string $created_at, + public string $message + ) { + } +} diff --git a/src/Objects/UserIdentityWarnings.php b/src/Objects/UserIdentityWarnings.php new file mode 100644 index 0000000..d5fe5ef --- /dev/null +++ b/src/Objects/UserIdentityWarnings.php @@ -0,0 +1,25 @@ +created_at, + message: $json->message, + warning_code: $json->warning_code + ); + } + + public function __construct( + public string $created_at, + public string $message, + public string $warning_code + ) { + } +} diff --git a/src/SeamClient.php b/src/SeamClient.php index 317b958..ab59b08 100644 --- a/src/SeamClient.php +++ b/src/SeamClient.php @@ -3,6 +3,8 @@ namespace Seam; use Seam\Objects\AccessCode; +use Seam\Objects\AccessGrant; +use Seam\Objects\AccessMethod; use Seam\Objects\AcsAccessGroup; use Seam\Objects\AcsCredential; use Seam\Objects\AcsCredentialPool; @@ -12,6 +14,8 @@ use Seam\Objects\AcsSystem; use Seam\Objects\AcsUser; use Seam\Objects\ActionAttempt; +use Seam\Objects\BridgeClientSession; +use Seam\Objects\BridgeConnectedSystems; use Seam\Objects\ClientSession; use Seam\Objects\ConnectWebview; use Seam\Objects\ConnectedAccount; @@ -20,12 +24,16 @@ use Seam\Objects\EnrollmentAutomation; use Seam\Objects\Event; use Seam\Objects\InstantKey; -use Seam\Objects\Network; +use Seam\Objects\Location; +use Seam\Objects\MagicLink; use Seam\Objects\NoiseThreshold; use Seam\Objects\Pagination; +use Seam\Objects\PartnerResource; use Seam\Objects\Phone; use Seam\Objects\PhoneRegistration; use Seam\Objects\PhoneSession; +use Seam\Objects\Space; +use Seam\Objects\ThermostatDailyProgram; use Seam\Objects\ThermostatSchedule; use Seam\Objects\UnmanagedAccessCode; use Seam\Objects\UnmanagedAcsAccessGroup; @@ -50,6 +58,8 @@ class SeamClient { public AccessCodesClient $access_codes; + public AccessGrantsClient $access_grants; + public AccessMethodsClient $access_methods; public AcsClient $acs; public ActionAttemptsClient $action_attempts; public ClientSessionsClient $client_sessions; @@ -58,9 +68,9 @@ class SeamClient public DevicesClient $devices; public EventsClient $events; public LocksClient $locks; - public NetworksClient $networks; public NoiseSensorsClient $noise_sensors; public PhonesClient $phones; + public SpacesClient $spaces; public ThermostatsClient $thermostats; public UserIdentitiesClient $user_identities; public WebhooksClient $webhooks; @@ -90,6 +100,8 @@ public function __construct( "http_errors" => $throw_http_errors, ]); $this->access_codes = new AccessCodesClient($this); + $this->access_grants = new AccessGrantsClient($this); + $this->access_methods = new AccessMethodsClient($this); $this->acs = new AcsClient($this); $this->action_attempts = new ActionAttemptsClient($this); $this->client_sessions = new ClientSessionsClient($this); @@ -98,9 +110,9 @@ public function __construct( $this->devices = new DevicesClient($this); $this->events = new EventsClient($this); $this->locks = new LocksClient($this); - $this->networks = new NetworksClient($this); $this->noise_sensors = new NoiseSensorsClient($this); $this->phones = new PhonesClient($this); + $this->spaces = new SpacesClient($this); $this->thermostats = new ThermostatsClient($this); $this->user_identities = new UserIdentitiesClient($this); $this->webhooks = new WebhooksClient($this); @@ -436,6 +448,7 @@ public function get( public function list( ?array $access_code_ids = null, + ?array $customer_ids = null, ?string $device_id = null, ?float $limit = null, ?string $page_cursor = null, @@ -447,6 +460,9 @@ public function list( if ($access_code_ids !== null) { $request_payload["access_code_ids"] = $access_code_ids; } + if ($customer_ids !== null) { + $request_payload["customer_ids"] = $customer_ids; + } if ($device_id !== null) { $request_payload["device_id"] = $device_id; } @@ -841,6 +857,203 @@ public function update( } } +class AccessGrantsClient +{ + private SeamClient $seam; + + public function __construct(SeamClient $seam) + { + $this->seam = $seam; + } + + public function create( + array $requested_access_methods, + ?string $user_identity_id = null, + mixed $user_identity = null, + ?array $acs_entrance_ids = null, + ?array $device_ids = null, + ?string $ends_at = null, + mixed $location = null, + ?array $location_ids = null, + ?array $space_ids = null, + ?string $starts_at = null + ): AccessGrant { + $request_payload = []; + + if ($requested_access_methods !== null) { + $request_payload[ + "requested_access_methods" + ] = $requested_access_methods; + } + if ($user_identity_id !== null) { + $request_payload["user_identity_id"] = $user_identity_id; + } + if ($user_identity !== null) { + $request_payload["user_identity"] = $user_identity; + } + if ($acs_entrance_ids !== null) { + $request_payload["acs_entrance_ids"] = $acs_entrance_ids; + } + if ($device_ids !== null) { + $request_payload["device_ids"] = $device_ids; + } + if ($ends_at !== null) { + $request_payload["ends_at"] = $ends_at; + } + if ($location !== null) { + $request_payload["location"] = $location; + } + if ($location_ids !== null) { + $request_payload["location_ids"] = $location_ids; + } + if ($space_ids !== null) { + $request_payload["space_ids"] = $space_ids; + } + if ($starts_at !== null) { + $request_payload["starts_at"] = $starts_at; + } + + $res = $this->seam->request( + "POST", + "/access_grants/create", + json: (object) $request_payload + ); + + return AccessGrant::from_json($res->access_grant); + } + + public function delete(string $access_grant_id): void + { + $request_payload = []; + + if ($access_grant_id !== null) { + $request_payload["access_grant_id"] = $access_grant_id; + } + + $this->seam->request( + "POST", + "/access_grants/delete", + json: (object) $request_payload + ); + } + + public function get(string $access_grant_id): AccessGrant + { + $request_payload = []; + + if ($access_grant_id !== null) { + $request_payload["access_grant_id"] = $access_grant_id; + } + + $res = $this->seam->request( + "POST", + "/access_grants/get", + json: (object) $request_payload + ); + + return AccessGrant::from_json($res->access_grant); + } + + public function list( + ?string $acs_entrance_id = null, + ?string $acs_system_id = null, + ?string $location_id = null, + ?string $space_id = null, + ?string $user_identity_id = null + ): array { + $request_payload = []; + + if ($acs_entrance_id !== null) { + $request_payload["acs_entrance_id"] = $acs_entrance_id; + } + if ($acs_system_id !== null) { + $request_payload["acs_system_id"] = $acs_system_id; + } + if ($location_id !== null) { + $request_payload["location_id"] = $location_id; + } + if ($space_id !== null) { + $request_payload["space_id"] = $space_id; + } + if ($user_identity_id !== null) { + $request_payload["user_identity_id"] = $user_identity_id; + } + + $res = $this->seam->request( + "POST", + "/access_grants/list", + json: (object) $request_payload + ); + + return array_map( + fn($r) => AccessGrant::from_json($r), + $res->access_grants + ); + } +} + +class AccessMethodsClient +{ + private SeamClient $seam; + + public function __construct(SeamClient $seam) + { + $this->seam = $seam; + } + + public function delete(string $access_method_id): void + { + $request_payload = []; + + if ($access_method_id !== null) { + $request_payload["access_method_id"] = $access_method_id; + } + + $this->seam->request( + "POST", + "/access_methods/delete", + json: (object) $request_payload + ); + } + + public function get(string $access_method_id): AccessMethod + { + $request_payload = []; + + if ($access_method_id !== null) { + $request_payload["access_method_id"] = $access_method_id; + } + + $res = $this->seam->request( + "POST", + "/access_methods/get", + json: (object) $request_payload + ); + + return AccessMethod::from_json($res->access_method); + } + + public function list(string $access_grant_id): array + { + $request_payload = []; + + if ($access_grant_id !== null) { + $request_payload["access_grant_id"] = $access_grant_id; + } + + $res = $this->seam->request( + "POST", + "/access_methods/list", + json: (object) $request_payload + ); + + return array_map( + fn($r) => AccessMethod::from_json($r), + $res->access_methods + ); + } +} + class AcsAccessGroupsClient { private SeamClient $seam; @@ -1561,12 +1774,21 @@ public function grant_access( } public function list( + ?string $access_grant_id = null, + ?string $access_method_id = null, ?string $acs_credential_id = null, ?string $acs_system_id = null, - ?string $location_id = null + ?string $location_id = null, + ?string $space_id = null ): array { $request_payload = []; + if ($access_grant_id !== null) { + $request_payload["access_grant_id"] = $access_grant_id; + } + if ($access_method_id !== null) { + $request_payload["access_method_id"] = $access_method_id; + } if ($acs_credential_id !== null) { $request_payload["acs_credential_id"] = $acs_credential_id; } @@ -1576,6 +1798,9 @@ public function list( if ($location_id !== null) { $request_payload["location_id"] = $location_id; } + if ($space_id !== null) { + $request_payload["space_id"] = $space_id; + } $res = $this->seam->request( "POST", @@ -2116,8 +2341,11 @@ public function __construct(SeamClient $seam) public function create( ?array $connect_webview_ids = null, ?array $connected_account_ids = null, + ?string $customer_id = null, + ?string $customer_key = null, ?string $expires_at = null, ?string $user_identifier_key = null, + ?string $user_identity_id = null, ?array $user_identity_ids = null ): ClientSession { $request_payload = []; @@ -2128,12 +2356,21 @@ public function create( if ($connected_account_ids !== null) { $request_payload["connected_account_ids"] = $connected_account_ids; } + if ($customer_id !== null) { + $request_payload["customer_id"] = $customer_id; + } + if ($customer_key !== null) { + $request_payload["customer_key"] = $customer_key; + } if ($expires_at !== null) { $request_payload["expires_at"] = $expires_at; } if ($user_identifier_key !== null) { $request_payload["user_identifier_key"] = $user_identifier_key; } + if ($user_identity_id !== null) { + $request_payload["user_identity_id"] = $user_identity_id; + } if ($user_identity_ids !== null) { $request_payload["user_identity_ids"] = $user_identity_ids; } @@ -2189,6 +2426,7 @@ public function get_or_create( ?array $connected_account_ids = null, ?string $expires_at = null, ?string $user_identifier_key = null, + ?string $user_identity_id = null, ?array $user_identity_ids = null ): ClientSession { $request_payload = []; @@ -2205,6 +2443,9 @@ public function get_or_create( if ($user_identifier_key !== null) { $request_payload["user_identifier_key"] = $user_identifier_key; } + if ($user_identity_id !== null) { + $request_payload["user_identity_id"] = $user_identity_id; + } if ($user_identity_ids !== null) { $request_payload["user_identity_ids"] = $user_identity_ids; } @@ -2223,6 +2464,7 @@ public function grant_access( ?array $connect_webview_ids = null, ?array $connected_account_ids = null, ?string $user_identifier_key = null, + ?string $user_identity_id = null, ?array $user_identity_ids = null ): void { $request_payload = []; @@ -2239,6 +2481,9 @@ public function grant_access( if ($user_identifier_key !== null) { $request_payload["user_identifier_key"] = $user_identifier_key; } + if ($user_identity_id !== null) { + $request_payload["user_identity_id"] = $user_identity_id; + } if ($user_identity_ids !== null) { $request_payload["user_identity_ids"] = $user_identity_ids; } @@ -2315,17 +2560,22 @@ public function __construct(SeamClient $seam) } public function create( + ?array $accepted_capabilities = null, ?array $accepted_providers = null, ?bool $automatically_manage_new_devices = null, mixed $custom_metadata = null, ?string $custom_redirect_failure_url = null, ?string $custom_redirect_url = null, + ?string $customer_id = null, ?string $device_selection_mode = null, ?string $provider_category = null, ?bool $wait_for_device_creation = null ): ConnectWebview { $request_payload = []; + if ($accepted_capabilities !== null) { + $request_payload["accepted_capabilities"] = $accepted_capabilities; + } if ($accepted_providers !== null) { $request_payload["accepted_providers"] = $accepted_providers; } @@ -2345,6 +2595,9 @@ public function create( if ($custom_redirect_url !== null) { $request_payload["custom_redirect_url"] = $custom_redirect_url; } + if ($customer_id !== null) { + $request_payload["customer_id"] = $customer_id; + } if ($device_selection_mode !== null) { $request_payload["device_selection_mode"] = $device_selection_mode; } @@ -2400,17 +2653,26 @@ public function get(string $connect_webview_id): ConnectWebview public function list( mixed $custom_metadata_has = null, + ?array $customer_ids = null, ?float $limit = null, - ?string $user_identifier_key = null + ?string $page_cursor = null, + ?string $user_identifier_key = null, + ?callable $on_response = null ): array { $request_payload = []; if ($custom_metadata_has !== null) { $request_payload["custom_metadata_has"] = $custom_metadata_has; } + if ($customer_ids !== null) { + $request_payload["customer_ids"] = $customer_ids; + } if ($limit !== null) { $request_payload["limit"] = $limit; } + if ($page_cursor !== null) { + $request_payload["page_cursor"] = $page_cursor; + } if ($user_identifier_key !== null) { $request_payload["user_identifier_key"] = $user_identifier_key; } @@ -2421,6 +2683,10 @@ public function list( json: (object) $request_payload ); + if ($on_response !== null) { + $on_response($res); + } + return array_map( fn($r) => ConnectWebview::from_json($r), $res->connect_webviews @@ -2521,6 +2787,21 @@ public function list( ); } + public function sync(string $connected_account_id): void + { + $request_payload = []; + + if ($connected_account_id !== null) { + $request_payload["connected_account_id"] = $connected_account_id; + } + + $this->seam->request( + "POST", + "/connected_accounts/sync", + json: (object) $request_payload + ); + } + public function update( string $connected_account_id, ?bool $automatically_manage_new_devices = null, @@ -2595,6 +2876,7 @@ public function list( ?float $limit = null, ?string $manufacturer = null, ?string $page_cursor = null, + ?string $space_id = null, ?string $unstable_location_id = null, ?string $user_identifier_key = null, ?callable $on_response = null @@ -2643,6 +2925,9 @@ public function list( if ($page_cursor !== null) { $request_payload["page_cursor"] = $page_cursor; } + if ($space_id !== null) { + $request_payload["space_id"] = $space_id; + } if ($unstable_location_id !== null) { $request_payload["unstable_location_id"] = $unstable_location_id; } @@ -2818,6 +3103,7 @@ public function list( ?float $limit = null, ?string $manufacturer = null, ?string $page_cursor = null, + ?string $space_id = null, ?string $unstable_location_id = null, ?string $user_identifier_key = null, ?callable $on_response = null @@ -2866,6 +3152,9 @@ public function list( if ($page_cursor !== null) { $request_payload["page_cursor"] = $page_cursor; } + if ($space_id !== null) { + $request_payload["space_id"] = $space_id; + } if ($unstable_location_id !== null) { $request_payload["unstable_location_id"] = $unstable_location_id; } @@ -3066,6 +3355,7 @@ public function list( ?float $limit = null, ?string $manufacturer = null, ?string $page_cursor = null, + ?string $space_id = null, ?string $unstable_location_id = null, ?string $user_identifier_key = null, ?callable $on_response = null @@ -3114,6 +3404,9 @@ public function list( if ($page_cursor !== null) { $request_payload["page_cursor"] = $page_cursor; } + if ($space_id !== null) { + $request_payload["space_id"] = $space_id; + } if ($unstable_location_id !== null) { $request_payload["unstable_location_id"] = $unstable_location_id; } @@ -3197,40 +3490,6 @@ public function unlock_door( } } -class NetworksClient -{ - private SeamClient $seam; - - public function __construct(SeamClient $seam) - { - $this->seam = $seam; - } - - public function get(string $network_id): Network - { - $request_payload = []; - - if ($network_id !== null) { - $request_payload["network_id"] = $network_id; - } - - $res = $this->seam->request( - "POST", - "/networks/get", - json: (object) $request_payload - ); - - return Network::from_json($res->network); - } - - public function list(): array - { - $res = $this->seam->request("POST", "/networks/list"); - - return array_map(fn($r) => Network::from_json($r), $res->networks); - } -} - class NoiseSensorsClient { private SeamClient $seam; @@ -3258,6 +3517,7 @@ public function list( ?float $limit = null, ?string $manufacturer = null, ?string $page_cursor = null, + ?string $space_id = null, ?string $unstable_location_id = null, ?string $user_identifier_key = null, ?callable $on_response = null @@ -3306,6 +3566,9 @@ public function list( if ($page_cursor !== null) { $request_payload["page_cursor"] = $page_cursor; } + if ($space_id !== null) { + $request_payload["space_id"] = $space_id; + } if ($unstable_location_id !== null) { $request_payload["unstable_location_id"] = $unstable_location_id; } @@ -3625,6 +3888,177 @@ public function create_sandbox_phone( } } +class SpacesClient +{ + private SeamClient $seam; + + public function __construct(SeamClient $seam) + { + $this->seam = $seam; + } + + public function add_acs_entrances( + array $acs_entrance_ids, + string $space_id + ): void { + $request_payload = []; + + if ($acs_entrance_ids !== null) { + $request_payload["acs_entrance_ids"] = $acs_entrance_ids; + } + if ($space_id !== null) { + $request_payload["space_id"] = $space_id; + } + + $this->seam->request( + "POST", + "/spaces/add_acs_entrances", + json: (object) $request_payload + ); + } + + public function add_devices(array $device_ids, string $space_id): void + { + $request_payload = []; + + if ($device_ids !== null) { + $request_payload["device_ids"] = $device_ids; + } + if ($space_id !== null) { + $request_payload["space_id"] = $space_id; + } + + $this->seam->request( + "POST", + "/spaces/add_devices", + json: (object) $request_payload + ); + } + + public function create( + string $name, + ?array $acs_entrance_ids = null, + ?array $device_ids = null + ): Space { + $request_payload = []; + + if ($name !== null) { + $request_payload["name"] = $name; + } + if ($acs_entrance_ids !== null) { + $request_payload["acs_entrance_ids"] = $acs_entrance_ids; + } + if ($device_ids !== null) { + $request_payload["device_ids"] = $device_ids; + } + + $res = $this->seam->request( + "POST", + "/spaces/create", + json: (object) $request_payload + ); + + return Space::from_json($res->space); + } + + public function delete(string $space_id): void + { + $request_payload = []; + + if ($space_id !== null) { + $request_payload["space_id"] = $space_id; + } + + $this->seam->request( + "POST", + "/spaces/delete", + json: (object) $request_payload + ); + } + + public function get(string $space_id): Space + { + $request_payload = []; + + if ($space_id !== null) { + $request_payload["space_id"] = $space_id; + } + + $res = $this->seam->request( + "POST", + "/spaces/get", + json: (object) $request_payload + ); + + return Space::from_json($res->space); + } + + public function list(): array + { + $res = $this->seam->request("POST", "/spaces/list"); + + return array_map(fn($r) => Space::from_json($r), $res->spaces); + } + + public function remove_acs_entrances( + array $acs_entrance_ids, + string $space_id + ): void { + $request_payload = []; + + if ($acs_entrance_ids !== null) { + $request_payload["acs_entrance_ids"] = $acs_entrance_ids; + } + if ($space_id !== null) { + $request_payload["space_id"] = $space_id; + } + + $this->seam->request( + "POST", + "/spaces/remove_acs_entrances", + json: (object) $request_payload + ); + } + + public function remove_devices(array $device_ids, string $space_id): void + { + $request_payload = []; + + if ($device_ids !== null) { + $request_payload["device_ids"] = $device_ids; + } + if ($space_id !== null) { + $request_payload["space_id"] = $space_id; + } + + $this->seam->request( + "POST", + "/spaces/remove_devices", + json: (object) $request_payload + ); + } + + public function update(string $space_id, ?string $name = null): Space + { + $request_payload = []; + + if ($space_id !== null) { + $request_payload["space_id"] = $space_id; + } + if ($name !== null) { + $request_payload["name"] = $name; + } + + $res = $this->seam->request( + "POST", + "/spaces/update", + json: (object) $request_payload + ); + + return Space::from_json($res->space); + } +} + class ThermostatsClient { private SeamClient $seam; @@ -3908,6 +4342,7 @@ public function list( ?float $limit = null, ?string $manufacturer = null, ?string $page_cursor = null, + ?string $space_id = null, ?string $unstable_location_id = null, ?string $user_identifier_key = null, ?callable $on_response = null @@ -3956,6 +4391,9 @@ public function list( if ($page_cursor !== null) { $request_payload["page_cursor"] = $page_cursor; } + if ($space_id !== null) { + $request_payload["space_id"] = $space_id; + } if ($unstable_location_id !== null) { $request_payload["unstable_location_id"] = $unstable_location_id; } @@ -4160,13 +4598,13 @@ public function set_temperature_threshold( public function update_climate_preset( string $climate_preset_key, string $device_id, - bool $manual_override_allowed, ?float $cooling_set_point_celsius = null, ?float $cooling_set_point_fahrenheit = null, ?string $fan_mode_setting = null, ?float $heating_set_point_celsius = null, ?float $heating_set_point_fahrenheit = null, ?string $hvac_mode_setting = null, + ?bool $manual_override_allowed = null, ?string $name = null ): void { $request_payload = []; @@ -4177,11 +4615,6 @@ public function update_climate_preset( if ($device_id !== null) { $request_payload["device_id"] = $device_id; } - if ($manual_override_allowed !== null) { - $request_payload[ - "manual_override_allowed" - ] = $manual_override_allowed; - } if ($cooling_set_point_celsius !== null) { $request_payload[ "cooling_set_point_celsius" @@ -4208,6 +4641,11 @@ public function update_climate_preset( if ($hvac_mode_setting !== null) { $request_payload["hvac_mode_setting"] = $hvac_mode_setting; } + if ($manual_override_allowed !== null) { + $request_payload[ + "manual_override_allowed" + ] = $manual_override_allowed; + } if ($name !== null) { $request_payload["name"] = $name; } @@ -4288,7 +4726,7 @@ public function create( string $device_id, string $name, array $periods - ): void { + ): ThermostatDailyProgram { $request_payload = []; if ($device_id !== null) { @@ -4301,11 +4739,15 @@ public function create( $request_payload["periods"] = $periods; } - $this->seam->request( + $res = $this->seam->request( "POST", "/thermostats/daily_programs/create", json: (object) $request_payload ); + + return ThermostatDailyProgram::from_json( + $res->thermostat_daily_program + ); } public function delete(string $thermostat_daily_program_id): void @@ -4945,7 +5387,7 @@ public function launch( ?string $acs_credential_pool_id = null, ?bool $create_credential_manager_user = null, ?string $credential_manager_acs_user_id = null - ): void { + ): EnrollmentAutomation { $request_payload = []; if ($credential_manager_acs_system_id !== null) { @@ -4972,11 +5414,13 @@ public function launch( ] = $credential_manager_acs_user_id; } - $this->seam->request( + $res = $this->seam->request( "POST", "/user_identities/enrollment_automations/launch", json: (object) $request_payload ); + + return EnrollmentAutomation::from_json($res->enrollment_automation); } public function list(string $user_identity_id): array