From bde324dea1d1a629bfc87117c5c730775fef658e Mon Sep 17 00:00:00 2001 From: Philip Chmalts Date: Thu, 1 Oct 2026 11:03:29 -0700 Subject: [PATCH 1/3] feat: Add media.get, cameras.live_views and can_stream_live_video Bump @seamapi/types to 1.1092.0 and regenerate. Co-Authored-By: Claude Opus 5.5 --- lib/seam/resources/access_code.rb | 6 +- lib/seam/resources/access_grant.rb | 4 +- lib/seam/resources/access_method.rb | 4 +- lib/seam/resources/acs_access_group.rb | 2 +- lib/seam/resources/acs_credential.rb | 2 +- lib/seam/resources/acs_entrance.rb | 2 +- lib/seam/resources/acs_system.rb | 6 +- lib/seam/resources/acs_user.rb | 4 +- lib/seam/resources/action_attempt.rb | 2 +- lib/seam/resources/camera_live_view_answer.rb | 12 ++++ .../resources/camera_live_view_session.rb | 22 ++++++++ lib/seam/resources/connected_account.rb | 4 +- lib/seam/resources/device.rb | 25 ++++++++- lib/seam/resources/device_provider.rb | 4 ++ lib/seam/resources/event.rb | 8 ++- lib/seam/resources/index.rb | 3 + lib/seam/resources/media.rb | 55 +++++++++++++++++++ lib/seam/resources/unmanaged_access_code.rb | 6 +- lib/seam/resources/unmanaged_access_grant.rb | 4 +- lib/seam/resources/unmanaged_access_method.rb | 4 +- lib/seam/resources/unmanaged_device.rb | 10 +++- lib/seam/resources/unmanaged_user_identity.rb | 4 +- lib/seam/resources/user_identity.rb | 4 +- lib/seam/routes/cameras.rb | 16 ++++++ lib/seam/routes/cameras_live_views.rb | 50 +++++++++++++++++ lib/seam/routes/client_sessions.rb | 4 +- lib/seam/routes/index.rb | 3 + lib/seam/routes/media.rb | 22 ++++++++ lib/seam/routes/routes.rb | 8 +++ package-lock.json | 8 +-- package.json | 2 +- 31 files changed, 267 insertions(+), 43 deletions(-) create mode 100644 lib/seam/resources/camera_live_view_answer.rb create mode 100644 lib/seam/resources/camera_live_view_session.rb create mode 100644 lib/seam/resources/media.rb create mode 100644 lib/seam/routes/cameras.rb create mode 100644 lib/seam/routes/cameras_live_views.rb create mode 100644 lib/seam/routes/media.rb diff --git a/lib/seam/resources/access_code.rb b/lib/seam/resources/access_code.rb index e5b8f6cd..ae04b564 100644 --- a/lib/seam/resources/access_code.rb +++ b/lib/seam/resources/access_code.rb @@ -308,7 +308,7 @@ class SaltoKsSubscriptionLimitExceeded < Errors date_accessor :created_at end - # Indicates that Seam's integration user does not have sufficient permissions on the provider's system to which this device belongs, so Seam cannot manage access codes or unlock the device. See the error message for specifics, then either reauthorize the connected account in Seam or grant the integration user the required permissions in the provider's system. + # Indicates that the provider's system to which this device belongs is not letting Seam act on it, so Seam cannot manage access codes or unlock the device. The error message says which of three causes applies. Seam's integration user may not have sufficient permissions on the provider's system, or may have been suspended there: grant the integration user the required permissions in the provider's system, or reauthorize the connected account in Seam. The provider account or site may not have a valid subscription with the provider: set up or renew that subscription with the provider. Or the provider may have rejected the credential Seam uses to operate the device's hub: contact Seam support to re-activate it. class InsufficientPermissions < Errors # Unique identifier of the type of error. Enables quick recognition and categorization of the issue. # @return [String] @@ -594,7 +594,7 @@ class BridgeDisconnected < Errors "missing_device_credentials" => MissingDeviceCredentials, "auxiliary_heat_running" => AuxiliaryHeatRunning, "subscription_required" => SubscriptionRequired, - "bridge_disconnected" => BridgeDisconnected + "bridge_disconnected" => BridgeDisconnected, }.freeze end @@ -886,7 +886,7 @@ class UnknownIssueWithAccessCode < Warnings "management_transferred" => ManagementTransferred, "using_backup_access_code" => UsingBackupAccessCode, "being_deleted" => BeingDeleted, - "unknown_issue_with_access_code" => UnknownIssueWithAccessCode + "unknown_issue_with_access_code" => UnknownIssueWithAccessCode, }.freeze end diff --git a/lib/seam/resources/access_grant.rb b/lib/seam/resources/access_grant.rb index e4329ead..d2b9ae89 100644 --- a/lib/seam/resources/access_grant.rb +++ b/lib/seam/resources/access_grant.rb @@ -37,7 +37,7 @@ class CannotCreateRequestedAccessMethods < Errors date_accessor :created_at discriminated_by :error_code, { - "cannot_create_requested_access_methods" => CannotCreateRequestedAccessMethods + "cannot_create_requested_access_methods" => CannotCreateRequestedAccessMethods, }.freeze end @@ -286,7 +286,7 @@ class DeviceTimeConstraintsViolated < Warnings "updating_access_times" => UpdatingAccessTimes, "requested_code_unavailable" => RequestedCodeUnavailable, "device_does_not_support_access_codes" => DeviceDoesNotSupportAccessCodes, - "device_time_constraints_violated" => DeviceTimeConstraintsViolated + "device_time_constraints_violated" => DeviceTimeConstraintsViolated, }.freeze end diff --git a/lib/seam/resources/access_method.rb b/lib/seam/resources/access_method.rb index af6378b6..4c41df39 100644 --- a/lib/seam/resources/access_method.rb +++ b/lib/seam/resources/access_method.rb @@ -34,7 +34,7 @@ class FailedToIssue < Errors date_accessor :created_at discriminated_by :error_code, { - "failed_to_issue" => FailedToIssue + "failed_to_issue" => FailedToIssue, }.freeze end @@ -195,7 +195,7 @@ class UserIdentityMissingPhoneNumber < Warnings "pulled_backup_access_code" => PulledBackupAccessCode, "delay_in_issuing" => DelayInIssuing, "user_identity_missing_email_address" => UserIdentityMissingEmailAddress, - "user_identity_missing_phone_number" => UserIdentityMissingPhoneNumber + "user_identity_missing_phone_number" => UserIdentityMissingPhoneNumber, }.freeze end diff --git a/lib/seam/resources/acs_access_group.rb b/lib/seam/resources/acs_access_group.rb index 70dc8437..bb700892 100644 --- a/lib/seam/resources/acs_access_group.rb +++ b/lib/seam/resources/acs_access_group.rb @@ -47,7 +47,7 @@ class FailedToCreateOnAcsSystem < Errors date_accessor :created_at discriminated_by :error_code, { - "failed_to_create_on_acs_system" => FailedToCreateOnAcsSystem + "failed_to_create_on_acs_system" => FailedToCreateOnAcsSystem, }.freeze end diff --git a/lib/seam/resources/acs_credential.rb b/lib/seam/resources/acs_credential.rb index 7308267b..d1afe5a6 100644 --- a/lib/seam/resources/acs_credential.rb +++ b/lib/seam/resources/acs_credential.rb @@ -215,7 +215,7 @@ class RequestedCodeUnavailable < Warnings "being_deleted" => BeingDeleted, "unknown_issue_with_acs_credential" => UnknownIssueWithAcsCredential, "needs_to_be_reissued" => NeedsToBeReissued, - "requested_code_unavailable" => RequestedCodeUnavailable + "requested_code_unavailable" => RequestedCodeUnavailable, }.freeze end diff --git a/lib/seam/resources/acs_entrance.rb b/lib/seam/resources/acs_entrance.rb index a43727e5..46abe2f2 100644 --- a/lib/seam/resources/acs_entrance.rb +++ b/lib/seam/resources/acs_entrance.rb @@ -317,7 +317,7 @@ class PrivacyMode < Warnings "entrance_shares_zone" => EntranceSharesZone, "entrance_setup_required" => EntranceSetupRequired, "salto_ks_privacy_mode" => SaltoKsPrivacyMode, - "privacy_mode" => PrivacyMode + "privacy_mode" => PrivacyMode, }.freeze end diff --git a/lib/seam/resources/acs_system.rb b/lib/seam/resources/acs_system.rb index 107f1d3a..f9eb7e2c 100644 --- a/lib/seam/resources/acs_system.rb +++ b/lib/seam/resources/acs_system.rb @@ -78,7 +78,7 @@ class SaltoKsSubscriptionLimitExceeded < Errors date_accessor :created_at end - # Indicates that Seam's integration user does not have sufficient permissions on the provider's system backing this [access control system](https://www.seam.co/docs/low-level-apis/access-systems). Access cannot be managed until permissions are restored. See the error message for specifics, then either reauthorize the connected account in Seam or grant the integration user the required permissions in the provider's system. + # Indicates that the provider's system backing this [access control system](https://www.seam.co/docs/low-level-apis/access-systems) is not letting Seam act on it, so access cannot be managed until this is resolved. The error message says which of two causes applies. Either Seam's integration user does not have sufficient permissions on the provider's system, or has been suspended there: grant the integration user the required permissions in the provider's system, or reauthorize the connected account in Seam. Or the provider account or site does not have a valid subscription with the provider: set up or renew that subscription with the provider. class InsufficientPermissions < Errors # Unique identifier of the type of error. Enables quick recognition and categorization of the issue. # @return [String] @@ -182,7 +182,7 @@ class ProviderServiceUnavailable < Errors "acs_system_disconnected" => AcsSystemDisconnected, "account_disconnected" => AccountDisconnected, "salto_ks_certification_expired" => SaltoKsCertificationExpired, - "provider_service_unavailable" => ProviderServiceUnavailable + "provider_service_unavailable" => ProviderServiceUnavailable, }.freeze end @@ -288,7 +288,7 @@ class UnknownIssueWithAcsSystem < Warnings "salto_ks_subscription_limit_almost_reached" => SaltoKsSubscriptionLimitAlmostReached, "time_zone_does_not_match_location" => TimeZoneDoesNotMatchLocation, "setup_required" => SetupRequired, - "unknown_issue_with_acs_system" => UnknownIssueWithAcsSystem + "unknown_issue_with_acs_system" => UnknownIssueWithAcsSystem, }.freeze end diff --git a/lib/seam/resources/acs_user.rb b/lib/seam/resources/acs_user.rb index 6d706171..94e5ee9b 100644 --- a/lib/seam/resources/acs_user.rb +++ b/lib/seam/resources/acs_user.rb @@ -125,7 +125,7 @@ class LatchConflictWithResidentUser < Errors "failed_to_create_on_acs_system" => FailedToCreateOnAcsSystem, "failed_to_update_on_acs_system" => FailedToUpdateOnAcsSystem, "failed_to_delete_on_acs_system" => FailedToDeleteOnAcsSystem, - "latch_conflict_with_resident_user" => LatchConflictWithResidentUser + "latch_conflict_with_resident_user" => LatchConflictWithResidentUser, }.freeze end @@ -317,7 +317,7 @@ class LatchResidentUser < Warnings "salto_ks_user_not_subscribed" => SaltoKsUserNotSubscribed, "acs_user_inactive" => AcsUserInactive, "unknown_issue_with_acs_user" => UnknownIssueWithAcsUser, - "latch_resident_user" => LatchResidentUser + "latch_resident_user" => LatchResidentUser, }.freeze end diff --git a/lib/seam/resources/action_attempt.rb b/lib/seam/resources/action_attempt.rb index 8eb86805..bc9bb8c1 100644 --- a/lib/seam/resources/action_attempt.rb +++ b/lib/seam/resources/action_attempt.rb @@ -1814,7 +1814,7 @@ class Result < BaseResource "UPDATE_ACCESS_CODE" => UpdateAccessCode, "CREATE_NOISE_THRESHOLD" => CreateNoiseThreshold, "DELETE_NOISE_THRESHOLD" => DeleteNoiseThreshold, - "UPDATE_NOISE_THRESHOLD" => UpdateNoiseThreshold + "UPDATE_NOISE_THRESHOLD" => UpdateNoiseThreshold, }.freeze end end diff --git a/lib/seam/resources/camera_live_view_answer.rb b/lib/seam/resources/camera_live_view_answer.rb new file mode 100644 index 00000000..17741259 --- /dev/null +++ b/lib/seam/resources/camera_live_view_answer.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true + +module Seam + module Resources + # Represents the WebRTC SDP answer that starts streaming video from a camera for a live view session. + class CameraLiveViewAnswer < BaseResource + # WebRTC SDP answer for the offer, limited to 64 KiB of UTF-8 data. + # @return [String] + attr_accessor :sdp_answer + end + end +end diff --git a/lib/seam/resources/camera_live_view_session.rb b/lib/seam/resources/camera_live_view_session.rb new file mode 100644 index 00000000..e4689b40 --- /dev/null +++ b/lib/seam/resources/camera_live_view_session.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true + +module Seam + module Resources + # Represents a short-lived live view session for a single camera. Use the session ID and token to start a WebRTC stream and to stop the session. + class CameraLiveViewSession < BaseResource + # ID of the camera live view session. + # @return [String] + attr_accessor :camera_live_view_session_id + # ID of the camera. + # @return [String] + attr_accessor :device_id + # Token that authorizes the offer and stop requests for this session. + # @return [String] + attr_accessor :token + + # Date and time at which the live view session expires. + # @return [Time] + date_accessor :expires_at + end + end +end diff --git a/lib/seam/resources/connected_account.rb b/lib/seam/resources/connected_account.rb index e76ff630..d239574c 100644 --- a/lib/seam/resources/connected_account.rb +++ b/lib/seam/resources/connected_account.rb @@ -139,7 +139,7 @@ class DormakabaSitesDisconnected < Errors "account_disconnected" => AccountDisconnected, "bridge_disconnected" => BridgeDisconnected, "salto_ks_subscription_limit_exceeded" => SaltoKsSubscriptionLimitExceeded, - "dormakaba_sites_disconnected" => DormakabaSitesDisconnected + "dormakaba_sites_disconnected" => DormakabaSitesDisconnected, }.freeze end @@ -334,7 +334,7 @@ class DormakabaSitesUnapproved < Warnings "being_deleted" => BeingDeleted, "provider_service_unavailable" => ProviderServiceUnavailable, "setup_required" => SetupRequired, - "dormakaba_sites_unapproved" => DormakabaSitesUnapproved + "dormakaba_sites_unapproved" => DormakabaSitesUnapproved, }.freeze end diff --git a/lib/seam/resources/device.rb b/lib/seam/resources/device.rb index 00981c71..94143f73 100644 --- a/lib/seam/resources/device.rb +++ b/lib/seam/resources/device.rb @@ -75,7 +75,7 @@ class SaltoKsSubscriptionLimitExceeded < Errors date_accessor :created_at end - # Indicates that Seam's integration user does not have sufficient permissions on the provider's system to which this device belongs, so Seam cannot manage access codes or unlock the device. See the error message for specifics, then either reauthorize the connected account in Seam or grant the integration user the required permissions in the provider's system. + # Indicates that the provider's system to which this device belongs is not letting Seam act on it, so Seam cannot manage access codes or unlock the device. The error message says which of three causes applies. Seam's integration user may not have sufficient permissions on the provider's system, or may have been suspended there: grant the integration user the required permissions in the provider's system, or reauthorize the connected account in Seam. The provider account or site may not have a valid subscription with the provider: set up or renew that subscription with the provider. Or the provider may have rejected the credential Seam uses to operate the device's hub: contact Seam support to re-activate it. class InsufficientPermissions < Errors # Unique identifier of the type of error. Enables quick recognition and categorization of the issue. # @return [String] @@ -339,7 +339,7 @@ class BridgeDisconnected < Errors "missing_device_credentials" => MissingDeviceCredentials, "auxiliary_heat_running" => AuxiliaryHeatRunning, "subscription_required" => SubscriptionRequired, - "bridge_disconnected" => BridgeDisconnected + "bridge_disconnected" => BridgeDisconnected, }.freeze end @@ -1023,6 +1023,18 @@ class OmnitecMetadata < BaseResource attr_accessor :timezone_raw_offset_ms end + class ReolinkMetadata < BaseResource + # Firmware version reported by the camera. + # @return [String, nil] + attr_accessor :firmware_version + # Hardware version reported by the camera. + # @return [String, nil] + attr_accessor :hardware_version + # Model reported by the Reolink camera. + # @return [String, nil] + attr_accessor :model + end + class RingMetadata < BaseResource # Device ID for a Ring device. # @return [String, nil] @@ -1889,6 +1901,9 @@ class ThermostatWeeklyProgram < BaseResource # Metadata for an Omnitec device. # @return [OmnitecMetadata, nil] resource_accessor :omnitec_metadata, OmnitecMetadata + # Metadata for a Reolink camera. + # @return [ReolinkMetadata, nil] + resource_accessor :reolink_metadata, ReolinkMetadata # Metadata for a Ring device. # @return [RingMetadata, nil] resource_accessor :ring_metadata, RingMetadata @@ -2637,7 +2652,7 @@ class MaxAccessCodesReached < Warnings "accessory_keypad_setup_required" => AccessoryKeypadSetupRequired, "accessory_keypad_low_battery" => AccessoryKeypadLowBattery, "unreliable_online_status" => UnreliableOnlineStatus, - "max_access_codes_reached" => MaxAccessCodesReached + "max_access_codes_reached" => MaxAccessCodesReached, }.freeze end @@ -2716,6 +2731,9 @@ class MaxAccessCodesReached < Warnings # Indicates whether the device supports simulating removal in a sandbox. # @return [Boolean, nil] attr_accessor :can_simulate_removal + # Indicates whether the camera supports streaming live video through a camera live view session. + # @return [Boolean, nil] + attr_accessor :can_stream_live_video # Indicates whether the thermostat can be turned off. # @return [Boolean, nil] attr_accessor :can_turn_off_hvac @@ -2789,6 +2807,7 @@ class MaxAccessCodesReached < Warnings # - `ring_camera` # - `tapo_camera` # - `arlo_camera` + # - `reolink_camera` attr_accessor :device_type # Display name of the device, defaults to nickname (if it is set) or `properties.appearance.name`, otherwise. Enables administrators and users to identify the device easily, especially when there are numerous devices. # @return [String] diff --git a/lib/seam/resources/device_provider.rb b/lib/seam/resources/device_provider.rb index 8a1c52ff..52788f54 100644 --- a/lib/seam/resources/device_provider.rb +++ b/lib/seam/resources/device_provider.rb @@ -60,6 +60,9 @@ class DeviceProvider < BaseResource # Indicates whether the device supports simulating removal in a sandbox. # @return [Boolean, nil] attr_accessor :can_simulate_removal + # Indicates whether the camera supports streaming live video through a camera live view session. + # @return [Boolean, nil] + attr_accessor :can_stream_live_video # Indicates whether the thermostat can be turned off. # @return [Boolean, nil] attr_accessor :can_turn_off_hvac @@ -128,6 +131,7 @@ class DeviceProvider < BaseResource # - `ring` # - `tapo` # - `arlo` + # - `reolink` # - `ical` # - `lodgify` # - `hostaway` diff --git a/lib/seam/resources/event.rb b/lib/seam/resources/event.rb index e04ab9d7..0de66c52 100644 --- a/lib/seam/resources/event.rb +++ b/lib/seam/resources/event.rb @@ -4866,6 +4866,9 @@ class CameraActivated < SeamEvent # URL to a thumbnail image captured at the time of activation. # @return [String, nil] attr_accessor :image_url + # IDs of the media, such as a video clip and a thumbnail image, captured for this activation. Use `/media/get` to retrieve each one. + # @return [Array] + attr_accessor :media_ids # Sub-type of motion detected, if available. # @return [String, nil] # Known values: @@ -4918,6 +4921,9 @@ class DeviceDoorbellRang < SeamEvent # URL to a thumbnail image captured at the time the doorbell was pressed. # @return [String, nil] attr_accessor :image_url + # IDs of the media, such as a video clip and a thumbnail image, captured when the doorbell was pressed. Use `/media/get` to retrieve each one. + # @return [Array] + attr_accessor :media_ids # URL to a short video clip captured at the time the doorbell was pressed. # @return [String, nil] attr_accessor :video_url @@ -5312,7 +5318,7 @@ class SpaceDeleted < SeamEvent "phone.deactivated" => PhoneDeactivated, "space.device_membership_changed" => SpaceDeviceMembershipChanged, "space.created" => SpaceCreated, - "space.deleted" => SpaceDeleted + "space.deleted" => SpaceDeleted, }.freeze end end diff --git a/lib/seam/resources/index.rb b/lib/seam/resources/index.rb index b04208e1..48384282 100644 --- a/lib/seam/resources/index.rb +++ b/lib/seam/resources/index.rb @@ -12,6 +12,8 @@ require_relative "acs_user" require_relative "action_attempt" require_relative "batch" +require_relative "camera_live_view_answer" +require_relative "camera_live_view_session" require_relative "client_session" require_relative "connect_webview" require_relative "connected_account" @@ -20,6 +22,7 @@ require_relative "device_provider" require_relative "event" require_relative "instant_key" +require_relative "media" require_relative "noise_threshold" require_relative "pagination" require_relative "phone" diff --git a/lib/seam/resources/media.rb b/lib/seam/resources/media.rb new file mode 100644 index 00000000..f3b798a9 --- /dev/null +++ b/lib/seam/resources/media.rb @@ -0,0 +1,55 @@ +# frozen_string_literal: true + +module Seam + module Resources + # Represents a piece of media, such as a video clip or a thumbnail image, that a device captured for an event. Media is in beta. + class Media < BaseResource + # MIME type of the media, such as `video/mp4` or `image/jpeg`. + # @return [String, nil] + attr_accessor :content_type + # ID of the device that captured the media. + # @return [String, nil] + attr_accessor :device_id + # ID of the event that the media belongs to. + # @return [String, nil] + attr_accessor :event_id + # ID of the media. + # @return [String] + attr_accessor :media_id + # Type of the media: a video clip or a still image. + # @return [String] + # Known values: + # - `video` + # - `image` + attr_accessor :media_type + # Status of the media. `pending` means that Seam is still retrieving the media. `available` means that `url` can be used to download it. `unavailable` means that no media exists for the event, and `failed` means that Seam could not retrieve it. + # @return [String] + # Known values: + # - `pending` + # - `available` + # - `unavailable` + # - `failed` + attr_accessor :status + # Short-lived URL from which you can download the media. Null unless `status` is `available`. The URL expires after about five minutes. Call `/media/get` again for a new URL. + # @return [String, nil] + attr_accessor :url + # Video codec used to encode the media. Only present for video media. `hevc` (H.265) playback support varies by browser and device, so check compatibility before assuming a clip plays inline. + # @return [String, nil] + # Known values: + # - `h264` + # - `hevc` + attr_accessor :video_codec + # ID of the workspace that contains the media. + # @return [String] + attr_accessor :workspace_id + + # Date and time at which the media was created. + # @return [Time] + date_accessor :created_at + + # Date and time at which the media stops being available. Null when Seam does not know when the media expires. + # @return [Time, nil] + date_accessor :expires_at + end + end +end diff --git a/lib/seam/resources/unmanaged_access_code.rb b/lib/seam/resources/unmanaged_access_code.rb index 029a7a8c..d2070291 100644 --- a/lib/seam/resources/unmanaged_access_code.rb +++ b/lib/seam/resources/unmanaged_access_code.rb @@ -310,7 +310,7 @@ class SaltoKsSubscriptionLimitExceeded < Errors date_accessor :created_at end - # Indicates that Seam's integration user does not have sufficient permissions on the provider's system to which this device belongs, so Seam cannot manage access codes or unlock the device. See the error message for specifics, then either reauthorize the connected account in Seam or grant the integration user the required permissions in the provider's system. + # Indicates that the provider's system to which this device belongs is not letting Seam act on it, so Seam cannot manage access codes or unlock the device. The error message says which of three causes applies. Seam's integration user may not have sufficient permissions on the provider's system, or may have been suspended there: grant the integration user the required permissions in the provider's system, or reauthorize the connected account in Seam. The provider account or site may not have a valid subscription with the provider: set up or renew that subscription with the provider. Or the provider may have rejected the credential Seam uses to operate the device's hub: contact Seam support to re-activate it. class InsufficientPermissions < Errors # Unique identifier of the type of error. Enables quick recognition and categorization of the issue. # @return [String] @@ -596,7 +596,7 @@ class BridgeDisconnected < Errors "missing_device_credentials" => MissingDeviceCredentials, "auxiliary_heat_running" => AuxiliaryHeatRunning, "subscription_required" => SubscriptionRequired, - "bridge_disconnected" => BridgeDisconnected + "bridge_disconnected" => BridgeDisconnected, }.freeze end @@ -838,7 +838,7 @@ class UnknownIssueWithAccessCode < Warnings "management_transferred" => ManagementTransferred, "using_backup_access_code" => UsingBackupAccessCode, "being_deleted" => BeingDeleted, - "unknown_issue_with_access_code" => UnknownIssueWithAccessCode + "unknown_issue_with_access_code" => UnknownIssueWithAccessCode, }.freeze end diff --git a/lib/seam/resources/unmanaged_access_grant.rb b/lib/seam/resources/unmanaged_access_grant.rb index cd40d201..125fc417 100644 --- a/lib/seam/resources/unmanaged_access_grant.rb +++ b/lib/seam/resources/unmanaged_access_grant.rb @@ -37,7 +37,7 @@ class CannotCreateRequestedAccessMethods < Errors date_accessor :created_at discriminated_by :error_code, { - "cannot_create_requested_access_methods" => CannotCreateRequestedAccessMethods + "cannot_create_requested_access_methods" => CannotCreateRequestedAccessMethods, }.freeze end @@ -286,7 +286,7 @@ class DeviceTimeConstraintsViolated < Warnings "updating_access_times" => UpdatingAccessTimes, "requested_code_unavailable" => RequestedCodeUnavailable, "device_does_not_support_access_codes" => DeviceDoesNotSupportAccessCodes, - "device_time_constraints_violated" => DeviceTimeConstraintsViolated + "device_time_constraints_violated" => DeviceTimeConstraintsViolated, }.freeze end diff --git a/lib/seam/resources/unmanaged_access_method.rb b/lib/seam/resources/unmanaged_access_method.rb index d06c6160..b731788e 100644 --- a/lib/seam/resources/unmanaged_access_method.rb +++ b/lib/seam/resources/unmanaged_access_method.rb @@ -34,7 +34,7 @@ class FailedToIssue < Errors date_accessor :created_at discriminated_by :error_code, { - "failed_to_issue" => FailedToIssue + "failed_to_issue" => FailedToIssue, }.freeze end @@ -195,7 +195,7 @@ class UserIdentityMissingPhoneNumber < Warnings "pulled_backup_access_code" => PulledBackupAccessCode, "delay_in_issuing" => DelayInIssuing, "user_identity_missing_email_address" => UserIdentityMissingEmailAddress, - "user_identity_missing_phone_number" => UserIdentityMissingPhoneNumber + "user_identity_missing_phone_number" => UserIdentityMissingPhoneNumber, }.freeze end diff --git a/lib/seam/resources/unmanaged_device.rb b/lib/seam/resources/unmanaged_device.rb index 7ec9f77e..0e2296d6 100644 --- a/lib/seam/resources/unmanaged_device.rb +++ b/lib/seam/resources/unmanaged_device.rb @@ -48,7 +48,7 @@ class SaltoKsSubscriptionLimitExceeded < Errors date_accessor :created_at end - # Indicates that Seam's integration user does not have sufficient permissions on the provider's system to which this device belongs, so Seam cannot manage access codes or unlock the device. See the error message for specifics, then either reauthorize the connected account in Seam or grant the integration user the required permissions in the provider's system. + # Indicates that the provider's system to which this device belongs is not letting Seam act on it, so Seam cannot manage access codes or unlock the device. The error message says which of three causes applies. Seam's integration user may not have sufficient permissions on the provider's system, or may have been suspended there: grant the integration user the required permissions in the provider's system, or reauthorize the connected account in Seam. The provider account or site may not have a valid subscription with the provider: set up or renew that subscription with the provider. Or the provider may have rejected the credential Seam uses to operate the device's hub: contact Seam support to re-activate it. class InsufficientPermissions < Errors # Unique identifier of the type of error. Enables quick recognition and categorization of the issue. # @return [String] @@ -312,7 +312,7 @@ class BridgeDisconnected < Errors "missing_device_credentials" => MissingDeviceCredentials, "auxiliary_heat_running" => AuxiliaryHeatRunning, "subscription_required" => SubscriptionRequired, - "bridge_disconnected" => BridgeDisconnected + "bridge_disconnected" => BridgeDisconnected, }.freeze end @@ -918,7 +918,7 @@ class MaxAccessCodesReached < Warnings "accessory_keypad_setup_required" => AccessoryKeypadSetupRequired, "accessory_keypad_low_battery" => AccessoryKeypadLowBattery, "unreliable_online_status" => UnreliableOnlineStatus, - "max_access_codes_reached" => MaxAccessCodesReached + "max_access_codes_reached" => MaxAccessCodesReached, }.freeze end @@ -991,6 +991,9 @@ class MaxAccessCodesReached < Warnings # Indicates whether the device supports simulating removal in a sandbox. # @return [Boolean, nil] attr_accessor :can_simulate_removal + # Indicates whether the camera supports streaming live video through a camera live view session. + # @return [Boolean, nil] + attr_accessor :can_stream_live_video # Indicates whether the thermostat can be turned off. # @return [Boolean, nil] attr_accessor :can_turn_off_hvac @@ -1064,6 +1067,7 @@ class MaxAccessCodesReached < Warnings # - `ring_camera` # - `tapo_camera` # - `arlo_camera` + # - `reolink_camera` attr_accessor :device_type # Display name of the device, defaults to nickname (if it is set) or `properties.appearance.name`, otherwise. Enables administrators and users to identify the device easily, especially when there are numerous devices. # @return [String] diff --git a/lib/seam/resources/unmanaged_user_identity.rb b/lib/seam/resources/unmanaged_user_identity.rb index 29d8d4e6..8e57a643 100644 --- a/lib/seam/resources/unmanaged_user_identity.rb +++ b/lib/seam/resources/unmanaged_user_identity.rb @@ -46,7 +46,7 @@ class IssueWithAcsUser < Errors date_accessor :created_at discriminated_by :error_code, { - "issue_with_acs_user" => IssueWithAcsUser + "issue_with_acs_user" => IssueWithAcsUser, }.freeze end @@ -97,7 +97,7 @@ class AcsUserProfileDoesNotMatchUserIdentity < Warnings discriminated_by :warning_code, { "being_deleted" => BeingDeleted, - "acs_user_profile_does_not_match_user_identity" => AcsUserProfileDoesNotMatchUserIdentity + "acs_user_profile_does_not_match_user_identity" => AcsUserProfileDoesNotMatchUserIdentity, }.freeze end diff --git a/lib/seam/resources/user_identity.rb b/lib/seam/resources/user_identity.rb index 8e2ae63b..1b43e2ba 100644 --- a/lib/seam/resources/user_identity.rb +++ b/lib/seam/resources/user_identity.rb @@ -46,7 +46,7 @@ class IssueWithAcsUser < Errors date_accessor :created_at discriminated_by :error_code, { - "issue_with_acs_user" => IssueWithAcsUser + "issue_with_acs_user" => IssueWithAcsUser, }.freeze end @@ -97,7 +97,7 @@ class AcsUserProfileDoesNotMatchUserIdentity < Warnings discriminated_by :warning_code, { "being_deleted" => BeingDeleted, - "acs_user_profile_does_not_match_user_identity" => AcsUserProfileDoesNotMatchUserIdentity + "acs_user_profile_does_not_match_user_identity" => AcsUserProfileDoesNotMatchUserIdentity, }.freeze end diff --git a/lib/seam/routes/cameras.rb b/lib/seam/routes/cameras.rb new file mode 100644 index 00000000..55c68af0 --- /dev/null +++ b/lib/seam/routes/cameras.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +module Seam + module Clients + class Cameras + def initialize(client:, defaults:) + @client = client + @defaults = defaults + end + + def live_views + @live_views ||= Seam::Clients::CamerasLiveViews.new(client: @client, defaults: @defaults) + end + end + end +end diff --git a/lib/seam/routes/cameras_live_views.rb b/lib/seam/routes/cameras_live_views.rb new file mode 100644 index 00000000..ffa1c1a3 --- /dev/null +++ b/lib/seam/routes/cameras_live_views.rb @@ -0,0 +1,50 @@ +# frozen_string_literal: true + +module Seam + module Clients + class CamerasLiveViews + def initialize(client:, defaults:) + @client = client + @defaults = defaults + end + + # Creates a short-lived live view session for a single camera. Pass the returned session ID and token to `/cameras/live_views/offer` to start a WebRTC stream, and to `/cameras/live_views/stop` to end the session. + # + # Camera live view is in beta. To enable it for your workspace, contact Seam support. To check whether a camera supports live view, use `device.can_stream_live_video`. + # @param device_id [String] ID of the camera to view. + # @param duration_seconds [Integer, nil] Number of seconds for which the live view session is valid, up to 600. + # @param include_audio [Boolean, nil] Indicates whether to include the camera's audio. + # @return [Seam::Resources::CameraLiveViewSession] OK + def create(device_id:, duration_seconds: nil, include_audio: nil) + res = @client.post("/cameras/live_views/create", {device_id: device_id, duration_seconds: duration_seconds, include_audio: include_audio}.compact) + + Seam::Resources::CameraLiveViewSession.load_from_response(res.body["camera_live_view_session"]) + end + + # Exchanges a WebRTC SDP offer for an SDP answer that starts streaming video from the camera, for a live view session that you created using `/cameras/live_views/create`. + # + # Camera live view is in beta. To enable it for your workspace, contact Seam support. + # @param camera_live_view_session_id [String] ID of the camera live view session. + # @param sdp_offer [String] WebRTC SDP offer from the viewer, limited to 64 KiB of UTF-8 data. + # @param token [String] Token returned when the camera live view session was created. + # @return [Seam::Resources::CameraLiveViewAnswer] OK + def offer(camera_live_view_session_id:, sdp_offer:, token:) + res = @client.post("/cameras/live_views/offer", {camera_live_view_session_id: camera_live_view_session_id, sdp_offer: sdp_offer, token: token}.compact) + + Seam::Resources::CameraLiveViewAnswer.load_from_response(res.body["camera_live_view_answer"]) + end + + # Stops a camera live view session that the current client session owns. + # + # Camera live view is in beta. To enable it for your workspace, contact Seam support. + # @param camera_live_view_session_id [String] ID of the camera live view session. + # @param token [String] Token returned when the camera live view session was created. + # @return [nil] OK + def stop(camera_live_view_session_id:, token:) + @client.post("/cameras/live_views/stop", {camera_live_view_session_id: camera_live_view_session_id, token: token}.compact) + + nil + end + end + end +end diff --git a/lib/seam/routes/client_sessions.rb b/lib/seam/routes/client_sessions.rb index bd514323..db5f6a18 100644 --- a/lib/seam/routes/client_sessions.rb +++ b/lib/seam/routes/client_sessions.rb @@ -14,7 +14,7 @@ def initialize(client:, defaults:) # @param customer_id [String, nil] Customer ID that you want to associate with the new client session. # @param customer_key [String, nil] Customer key that you want to associate with the new client session. # @param expires_at [Time, nil] Date and time at which the client session should expire, in [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format. - # @param user_identifier_key [String, nil] Your user ID for the user for whom you want to create a client session. + # @param user_identifier_key [String, nil] Your user ID for the user for whom you want to create a client session. When you authenticate with a publishable key, the `user_identifier_key` must be a high-entropy secret that only the user knows, such as a UUIDv4 or a salted hash. Do not use an email address, name, phone number, or other guessable value, because anyone who knows the `user_identifier_key` can retrieve the client session. # @param user_identity_id [String, nil] ID of the [user identity](https://www.seam.co/docs/capability-guides/mobile-access/managing-mobile-app-user-accounts-with-user-identities#what-is-a-user-identity) for which you want to create a client session. # @param user_identity_ids [Array, nil] IDs of the [user identities](https://www.seam.co/docs/capability-guides/mobile-access/managing-mobile-app-user-accounts-with-user-identities#what-is-a-user-identity) that you want to associate with the client session. # @deprecated user_identity_ids: Use `user_identity_id` instead. @@ -48,7 +48,7 @@ def get(client_session_id: nil, user_identifier_key: nil) # @param connect_webview_ids [Array, nil] IDs of the [Connect Webviews](https://www.seam.co/docs/core-concepts/connect-webviews) that you want to associate with the client session (or that are already associated with the existing client session). # @param connected_account_ids [Array, nil] IDs of the [connected accounts](https://www.seam.co/docs/api/connected_accounts/object) that you want to associate with the client session (or that are already associated with the existing client session). # @param expires_at [Time, nil] Date and time at which the client session should expire in [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format. If the client session already exists, this will update the expiration before returning it. - # @param user_identifier_key [String, nil] Your user ID for the user that you want to associate with the client session (or that is already associated with the existing client session). + # @param user_identifier_key [String, nil] Your user ID for the user that you want to associate with the client session (or that is already associated with the existing client session). When you authenticate with a publishable key, the `user_identifier_key` must be a high-entropy secret that only the user knows, such as a UUIDv4 or a salted hash. Do not use an email address, name, phone number, or other guessable value, because anyone who knows the `user_identifier_key` can retrieve the client session. # @param user_identity_id [String, nil] ID of the [user identity](https://www.seam.co/docs/capability-guides/mobile-access/managing-mobile-app-user-accounts-with-user-identities#what-is-a-user-identity) that you want to associate with the client session (or that are already associated with the existing client session). # @param user_identity_ids [Array, nil] IDs of the [user identities](https://www.seam.co/docs/capability-guides/mobile-access/managing-mobile-app-user-accounts-with-user-identities#what-is-a-user-identity) that you want to associate with the client session. # @deprecated user_identity_ids: Use `user_identity_id`. diff --git a/lib/seam/routes/index.rb b/lib/seam/routes/index.rb index eefa352b..dc6fa5f7 100644 --- a/lib/seam/routes/index.rb +++ b/lib/seam/routes/index.rb @@ -16,6 +16,8 @@ require_relative "acs_systems" require_relative "acs_users" require_relative "action_attempts" +require_relative "cameras" +require_relative "cameras_live_views" require_relative "client_sessions" require_relative "connect_webviews" require_relative "connected_accounts" @@ -28,6 +30,7 @@ require_relative "instant_keys" require_relative "locks" require_relative "locks_simulate" +require_relative "media" require_relative "noise_sensors" require_relative "noise_sensors_noise_thresholds" require_relative "noise_sensors_simulate" diff --git a/lib/seam/routes/media.rb b/lib/seam/routes/media.rb new file mode 100644 index 00000000..77aedf7a --- /dev/null +++ b/lib/seam/routes/media.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true + +module Seam + module Clients + class Media + def initialize(client:, defaults:) + @client = client + @defaults = defaults + end + + # Returns a specified piece of media, such as a video clip or thumbnail image captured for a camera event, with a short-lived URL from which you can download it. Camera events list their media in `media_ids`. This endpoint is in beta. + # @param media_id [String] ID of the media that you want to get. + # @param format [String, nil] Response format. `json` returns the media object. `redirect` responds with a `302` redirect to the media's download URL, so you can use this endpoint directly as the source of an image or video. + # @return [Seam::Resources::Media] OK + def get(media_id:, format: nil) + res = @client.get("/media/get", {media_id: media_id, format: format}.compact) + + Seam::Resources::Media.load_from_response(res.body["media"]) + end + end + end +end diff --git a/lib/seam/routes/routes.rb b/lib/seam/routes/routes.rb index 39ca9496..721b29d9 100644 --- a/lib/seam/routes/routes.rb +++ b/lib/seam/routes/routes.rb @@ -22,6 +22,10 @@ def action_attempts @action_attempts ||= Seam::Clients::ActionAttempts.new(client: @client, defaults: @defaults) end + def cameras + @cameras ||= Seam::Clients::Cameras.new(client: @client, defaults: @defaults) + end + def client_sessions @client_sessions ||= Seam::Clients::ClientSessions.new(client: @client, defaults: @defaults) end @@ -54,6 +58,10 @@ def locks @locks ||= Seam::Clients::Locks.new(client: @client, defaults: @defaults) end + def media + @media ||= Seam::Clients::Media.new(client: @client, defaults: @defaults) + end + def noise_sensors @noise_sensors ||= Seam::Clients::NoiseSensors.new(client: @client, defaults: @defaults) end diff --git a/package-lock.json b/package-lock.json index 0719a9e8..889a2c43 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "@seamapi/blueprint": "^1.12.0", "@seamapi/fake-seam-connect": "2.0.6", "@seamapi/smith": "^1.1.0", - "@seamapi/types": "1.1082.0", + "@seamapi/types": "1.1092.0", "change-case": "^5.4.4", "markdown-toc": "^1.2.0", "prettier": "^3.2.5" @@ -864,9 +864,9 @@ } }, "node_modules/@seamapi/types": { - "version": "1.1082.0", - "resolved": "https://registry.npmjs.org/@seamapi/types/-/types-1.1082.0.tgz", - "integrity": "sha512-QDuaHzjq+i/6yQ+fGs2jUmuZ8QomanqnLAuP2NULyGmfpTTeI/pEGkUp9YmRjUrbFoM8LHNT3ZmsFi8/2JJYmA==", + "version": "1.1092.0", + "resolved": "https://npm.pkg.github.com/download/@seamapi/types/1.1092.0/35cfbdb6dbfb0023a1ea6c6353ff90d51cc858e8", + "integrity": "sha512-99Wi8sSk4RZ2g9/iRJiONtIp9Hc/c2Xe5SeIIacbwxKbqkpmiTi8tQO0+M2qGXVzYuoO3xM/lBkEy4kUAhe/Ew==", "dev": true, "license": "MIT", "engines": { diff --git a/package.json b/package.json index 854af129..9d0cad05 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "@seamapi/blueprint": "^1.12.0", "@seamapi/fake-seam-connect": "2.0.6", "@seamapi/smith": "^1.1.0", - "@seamapi/types": "1.1082.0", + "@seamapi/types": "1.1092.0", "change-case": "^5.4.4", "markdown-toc": "^1.2.0", "prettier": "^3.2.5" From be6ec603f20a40248b3ebce59506c6ecb33d54c6 Mon Sep 17 00:00:00 2001 From: Philip Chmalts Date: Thu, 1 Oct 2026 11:08:14 -0700 Subject: [PATCH 2/3] fix: Resolve @seamapi packages from the public npm registry Co-Authored-By: Claude Opus 5.5 --- package-lock.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index 889a2c43..b84d4e3c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -865,7 +865,7 @@ }, "node_modules/@seamapi/types": { "version": "1.1092.0", - "resolved": "https://npm.pkg.github.com/download/@seamapi/types/1.1092.0/35cfbdb6dbfb0023a1ea6c6353ff90d51cc858e8", + "resolved": "https://registry.npmjs.org/@seamapi/types/-/types-1.1092.0.tgz", "integrity": "sha512-99Wi8sSk4RZ2g9/iRJiONtIp9Hc/c2Xe5SeIIacbwxKbqkpmiTi8tQO0+M2qGXVzYuoO3xM/lBkEy4kUAhe/Ew==", "dev": true, "license": "MIT", From 1722901140452bc38d4739ae78854d67e72d1e1e Mon Sep 17 00:00:00 2001 From: Seam Bot Date: Thu, 1 Oct 2026 18:08:52 +0000 Subject: [PATCH 3/3] ci: Format code --- lib/seam/resources/access_code.rb | 4 ++-- lib/seam/resources/access_grant.rb | 4 ++-- lib/seam/resources/access_method.rb | 4 ++-- lib/seam/resources/acs_access_group.rb | 2 +- lib/seam/resources/acs_credential.rb | 2 +- lib/seam/resources/acs_entrance.rb | 2 +- lib/seam/resources/acs_system.rb | 4 ++-- lib/seam/resources/acs_user.rb | 4 ++-- lib/seam/resources/action_attempt.rb | 2 +- lib/seam/resources/connected_account.rb | 4 ++-- lib/seam/resources/device.rb | 4 ++-- lib/seam/resources/event.rb | 2 +- lib/seam/resources/unmanaged_access_code.rb | 4 ++-- lib/seam/resources/unmanaged_access_grant.rb | 4 ++-- lib/seam/resources/unmanaged_access_method.rb | 4 ++-- lib/seam/resources/unmanaged_device.rb | 4 ++-- lib/seam/resources/unmanaged_user_identity.rb | 4 ++-- lib/seam/resources/user_identity.rb | 4 ++-- 18 files changed, 31 insertions(+), 31 deletions(-) diff --git a/lib/seam/resources/access_code.rb b/lib/seam/resources/access_code.rb index ae04b564..2cf5b9a5 100644 --- a/lib/seam/resources/access_code.rb +++ b/lib/seam/resources/access_code.rb @@ -594,7 +594,7 @@ class BridgeDisconnected < Errors "missing_device_credentials" => MissingDeviceCredentials, "auxiliary_heat_running" => AuxiliaryHeatRunning, "subscription_required" => SubscriptionRequired, - "bridge_disconnected" => BridgeDisconnected, + "bridge_disconnected" => BridgeDisconnected }.freeze end @@ -886,7 +886,7 @@ class UnknownIssueWithAccessCode < Warnings "management_transferred" => ManagementTransferred, "using_backup_access_code" => UsingBackupAccessCode, "being_deleted" => BeingDeleted, - "unknown_issue_with_access_code" => UnknownIssueWithAccessCode, + "unknown_issue_with_access_code" => UnknownIssueWithAccessCode }.freeze end diff --git a/lib/seam/resources/access_grant.rb b/lib/seam/resources/access_grant.rb index d2b9ae89..e4329ead 100644 --- a/lib/seam/resources/access_grant.rb +++ b/lib/seam/resources/access_grant.rb @@ -37,7 +37,7 @@ class CannotCreateRequestedAccessMethods < Errors date_accessor :created_at discriminated_by :error_code, { - "cannot_create_requested_access_methods" => CannotCreateRequestedAccessMethods, + "cannot_create_requested_access_methods" => CannotCreateRequestedAccessMethods }.freeze end @@ -286,7 +286,7 @@ class DeviceTimeConstraintsViolated < Warnings "updating_access_times" => UpdatingAccessTimes, "requested_code_unavailable" => RequestedCodeUnavailable, "device_does_not_support_access_codes" => DeviceDoesNotSupportAccessCodes, - "device_time_constraints_violated" => DeviceTimeConstraintsViolated, + "device_time_constraints_violated" => DeviceTimeConstraintsViolated }.freeze end diff --git a/lib/seam/resources/access_method.rb b/lib/seam/resources/access_method.rb index 4c41df39..af6378b6 100644 --- a/lib/seam/resources/access_method.rb +++ b/lib/seam/resources/access_method.rb @@ -34,7 +34,7 @@ class FailedToIssue < Errors date_accessor :created_at discriminated_by :error_code, { - "failed_to_issue" => FailedToIssue, + "failed_to_issue" => FailedToIssue }.freeze end @@ -195,7 +195,7 @@ class UserIdentityMissingPhoneNumber < Warnings "pulled_backup_access_code" => PulledBackupAccessCode, "delay_in_issuing" => DelayInIssuing, "user_identity_missing_email_address" => UserIdentityMissingEmailAddress, - "user_identity_missing_phone_number" => UserIdentityMissingPhoneNumber, + "user_identity_missing_phone_number" => UserIdentityMissingPhoneNumber }.freeze end diff --git a/lib/seam/resources/acs_access_group.rb b/lib/seam/resources/acs_access_group.rb index bb700892..70dc8437 100644 --- a/lib/seam/resources/acs_access_group.rb +++ b/lib/seam/resources/acs_access_group.rb @@ -47,7 +47,7 @@ class FailedToCreateOnAcsSystem < Errors date_accessor :created_at discriminated_by :error_code, { - "failed_to_create_on_acs_system" => FailedToCreateOnAcsSystem, + "failed_to_create_on_acs_system" => FailedToCreateOnAcsSystem }.freeze end diff --git a/lib/seam/resources/acs_credential.rb b/lib/seam/resources/acs_credential.rb index d1afe5a6..7308267b 100644 --- a/lib/seam/resources/acs_credential.rb +++ b/lib/seam/resources/acs_credential.rb @@ -215,7 +215,7 @@ class RequestedCodeUnavailable < Warnings "being_deleted" => BeingDeleted, "unknown_issue_with_acs_credential" => UnknownIssueWithAcsCredential, "needs_to_be_reissued" => NeedsToBeReissued, - "requested_code_unavailable" => RequestedCodeUnavailable, + "requested_code_unavailable" => RequestedCodeUnavailable }.freeze end diff --git a/lib/seam/resources/acs_entrance.rb b/lib/seam/resources/acs_entrance.rb index 46abe2f2..a43727e5 100644 --- a/lib/seam/resources/acs_entrance.rb +++ b/lib/seam/resources/acs_entrance.rb @@ -317,7 +317,7 @@ class PrivacyMode < Warnings "entrance_shares_zone" => EntranceSharesZone, "entrance_setup_required" => EntranceSetupRequired, "salto_ks_privacy_mode" => SaltoKsPrivacyMode, - "privacy_mode" => PrivacyMode, + "privacy_mode" => PrivacyMode }.freeze end diff --git a/lib/seam/resources/acs_system.rb b/lib/seam/resources/acs_system.rb index f9eb7e2c..ad13b305 100644 --- a/lib/seam/resources/acs_system.rb +++ b/lib/seam/resources/acs_system.rb @@ -182,7 +182,7 @@ class ProviderServiceUnavailable < Errors "acs_system_disconnected" => AcsSystemDisconnected, "account_disconnected" => AccountDisconnected, "salto_ks_certification_expired" => SaltoKsCertificationExpired, - "provider_service_unavailable" => ProviderServiceUnavailable, + "provider_service_unavailable" => ProviderServiceUnavailable }.freeze end @@ -288,7 +288,7 @@ class UnknownIssueWithAcsSystem < Warnings "salto_ks_subscription_limit_almost_reached" => SaltoKsSubscriptionLimitAlmostReached, "time_zone_does_not_match_location" => TimeZoneDoesNotMatchLocation, "setup_required" => SetupRequired, - "unknown_issue_with_acs_system" => UnknownIssueWithAcsSystem, + "unknown_issue_with_acs_system" => UnknownIssueWithAcsSystem }.freeze end diff --git a/lib/seam/resources/acs_user.rb b/lib/seam/resources/acs_user.rb index 94e5ee9b..6d706171 100644 --- a/lib/seam/resources/acs_user.rb +++ b/lib/seam/resources/acs_user.rb @@ -125,7 +125,7 @@ class LatchConflictWithResidentUser < Errors "failed_to_create_on_acs_system" => FailedToCreateOnAcsSystem, "failed_to_update_on_acs_system" => FailedToUpdateOnAcsSystem, "failed_to_delete_on_acs_system" => FailedToDeleteOnAcsSystem, - "latch_conflict_with_resident_user" => LatchConflictWithResidentUser, + "latch_conflict_with_resident_user" => LatchConflictWithResidentUser }.freeze end @@ -317,7 +317,7 @@ class LatchResidentUser < Warnings "salto_ks_user_not_subscribed" => SaltoKsUserNotSubscribed, "acs_user_inactive" => AcsUserInactive, "unknown_issue_with_acs_user" => UnknownIssueWithAcsUser, - "latch_resident_user" => LatchResidentUser, + "latch_resident_user" => LatchResidentUser }.freeze end diff --git a/lib/seam/resources/action_attempt.rb b/lib/seam/resources/action_attempt.rb index bc9bb8c1..8eb86805 100644 --- a/lib/seam/resources/action_attempt.rb +++ b/lib/seam/resources/action_attempt.rb @@ -1814,7 +1814,7 @@ class Result < BaseResource "UPDATE_ACCESS_CODE" => UpdateAccessCode, "CREATE_NOISE_THRESHOLD" => CreateNoiseThreshold, "DELETE_NOISE_THRESHOLD" => DeleteNoiseThreshold, - "UPDATE_NOISE_THRESHOLD" => UpdateNoiseThreshold, + "UPDATE_NOISE_THRESHOLD" => UpdateNoiseThreshold }.freeze end end diff --git a/lib/seam/resources/connected_account.rb b/lib/seam/resources/connected_account.rb index d239574c..e76ff630 100644 --- a/lib/seam/resources/connected_account.rb +++ b/lib/seam/resources/connected_account.rb @@ -139,7 +139,7 @@ class DormakabaSitesDisconnected < Errors "account_disconnected" => AccountDisconnected, "bridge_disconnected" => BridgeDisconnected, "salto_ks_subscription_limit_exceeded" => SaltoKsSubscriptionLimitExceeded, - "dormakaba_sites_disconnected" => DormakabaSitesDisconnected, + "dormakaba_sites_disconnected" => DormakabaSitesDisconnected }.freeze end @@ -334,7 +334,7 @@ class DormakabaSitesUnapproved < Warnings "being_deleted" => BeingDeleted, "provider_service_unavailable" => ProviderServiceUnavailable, "setup_required" => SetupRequired, - "dormakaba_sites_unapproved" => DormakabaSitesUnapproved, + "dormakaba_sites_unapproved" => DormakabaSitesUnapproved }.freeze end diff --git a/lib/seam/resources/device.rb b/lib/seam/resources/device.rb index 94143f73..f62f043c 100644 --- a/lib/seam/resources/device.rb +++ b/lib/seam/resources/device.rb @@ -339,7 +339,7 @@ class BridgeDisconnected < Errors "missing_device_credentials" => MissingDeviceCredentials, "auxiliary_heat_running" => AuxiliaryHeatRunning, "subscription_required" => SubscriptionRequired, - "bridge_disconnected" => BridgeDisconnected, + "bridge_disconnected" => BridgeDisconnected }.freeze end @@ -2652,7 +2652,7 @@ class MaxAccessCodesReached < Warnings "accessory_keypad_setup_required" => AccessoryKeypadSetupRequired, "accessory_keypad_low_battery" => AccessoryKeypadLowBattery, "unreliable_online_status" => UnreliableOnlineStatus, - "max_access_codes_reached" => MaxAccessCodesReached, + "max_access_codes_reached" => MaxAccessCodesReached }.freeze end diff --git a/lib/seam/resources/event.rb b/lib/seam/resources/event.rb index 0de66c52..6fa60107 100644 --- a/lib/seam/resources/event.rb +++ b/lib/seam/resources/event.rb @@ -5318,7 +5318,7 @@ class SpaceDeleted < SeamEvent "phone.deactivated" => PhoneDeactivated, "space.device_membership_changed" => SpaceDeviceMembershipChanged, "space.created" => SpaceCreated, - "space.deleted" => SpaceDeleted, + "space.deleted" => SpaceDeleted }.freeze end end diff --git a/lib/seam/resources/unmanaged_access_code.rb b/lib/seam/resources/unmanaged_access_code.rb index d2070291..622bf827 100644 --- a/lib/seam/resources/unmanaged_access_code.rb +++ b/lib/seam/resources/unmanaged_access_code.rb @@ -596,7 +596,7 @@ class BridgeDisconnected < Errors "missing_device_credentials" => MissingDeviceCredentials, "auxiliary_heat_running" => AuxiliaryHeatRunning, "subscription_required" => SubscriptionRequired, - "bridge_disconnected" => BridgeDisconnected, + "bridge_disconnected" => BridgeDisconnected }.freeze end @@ -838,7 +838,7 @@ class UnknownIssueWithAccessCode < Warnings "management_transferred" => ManagementTransferred, "using_backup_access_code" => UsingBackupAccessCode, "being_deleted" => BeingDeleted, - "unknown_issue_with_access_code" => UnknownIssueWithAccessCode, + "unknown_issue_with_access_code" => UnknownIssueWithAccessCode }.freeze end diff --git a/lib/seam/resources/unmanaged_access_grant.rb b/lib/seam/resources/unmanaged_access_grant.rb index 125fc417..cd40d201 100644 --- a/lib/seam/resources/unmanaged_access_grant.rb +++ b/lib/seam/resources/unmanaged_access_grant.rb @@ -37,7 +37,7 @@ class CannotCreateRequestedAccessMethods < Errors date_accessor :created_at discriminated_by :error_code, { - "cannot_create_requested_access_methods" => CannotCreateRequestedAccessMethods, + "cannot_create_requested_access_methods" => CannotCreateRequestedAccessMethods }.freeze end @@ -286,7 +286,7 @@ class DeviceTimeConstraintsViolated < Warnings "updating_access_times" => UpdatingAccessTimes, "requested_code_unavailable" => RequestedCodeUnavailable, "device_does_not_support_access_codes" => DeviceDoesNotSupportAccessCodes, - "device_time_constraints_violated" => DeviceTimeConstraintsViolated, + "device_time_constraints_violated" => DeviceTimeConstraintsViolated }.freeze end diff --git a/lib/seam/resources/unmanaged_access_method.rb b/lib/seam/resources/unmanaged_access_method.rb index b731788e..d06c6160 100644 --- a/lib/seam/resources/unmanaged_access_method.rb +++ b/lib/seam/resources/unmanaged_access_method.rb @@ -34,7 +34,7 @@ class FailedToIssue < Errors date_accessor :created_at discriminated_by :error_code, { - "failed_to_issue" => FailedToIssue, + "failed_to_issue" => FailedToIssue }.freeze end @@ -195,7 +195,7 @@ class UserIdentityMissingPhoneNumber < Warnings "pulled_backup_access_code" => PulledBackupAccessCode, "delay_in_issuing" => DelayInIssuing, "user_identity_missing_email_address" => UserIdentityMissingEmailAddress, - "user_identity_missing_phone_number" => UserIdentityMissingPhoneNumber, + "user_identity_missing_phone_number" => UserIdentityMissingPhoneNumber }.freeze end diff --git a/lib/seam/resources/unmanaged_device.rb b/lib/seam/resources/unmanaged_device.rb index 0e2296d6..f1c81dbf 100644 --- a/lib/seam/resources/unmanaged_device.rb +++ b/lib/seam/resources/unmanaged_device.rb @@ -312,7 +312,7 @@ class BridgeDisconnected < Errors "missing_device_credentials" => MissingDeviceCredentials, "auxiliary_heat_running" => AuxiliaryHeatRunning, "subscription_required" => SubscriptionRequired, - "bridge_disconnected" => BridgeDisconnected, + "bridge_disconnected" => BridgeDisconnected }.freeze end @@ -918,7 +918,7 @@ class MaxAccessCodesReached < Warnings "accessory_keypad_setup_required" => AccessoryKeypadSetupRequired, "accessory_keypad_low_battery" => AccessoryKeypadLowBattery, "unreliable_online_status" => UnreliableOnlineStatus, - "max_access_codes_reached" => MaxAccessCodesReached, + "max_access_codes_reached" => MaxAccessCodesReached }.freeze end diff --git a/lib/seam/resources/unmanaged_user_identity.rb b/lib/seam/resources/unmanaged_user_identity.rb index 8e57a643..29d8d4e6 100644 --- a/lib/seam/resources/unmanaged_user_identity.rb +++ b/lib/seam/resources/unmanaged_user_identity.rb @@ -46,7 +46,7 @@ class IssueWithAcsUser < Errors date_accessor :created_at discriminated_by :error_code, { - "issue_with_acs_user" => IssueWithAcsUser, + "issue_with_acs_user" => IssueWithAcsUser }.freeze end @@ -97,7 +97,7 @@ class AcsUserProfileDoesNotMatchUserIdentity < Warnings discriminated_by :warning_code, { "being_deleted" => BeingDeleted, - "acs_user_profile_does_not_match_user_identity" => AcsUserProfileDoesNotMatchUserIdentity, + "acs_user_profile_does_not_match_user_identity" => AcsUserProfileDoesNotMatchUserIdentity }.freeze end diff --git a/lib/seam/resources/user_identity.rb b/lib/seam/resources/user_identity.rb index 1b43e2ba..8e2ae63b 100644 --- a/lib/seam/resources/user_identity.rb +++ b/lib/seam/resources/user_identity.rb @@ -46,7 +46,7 @@ class IssueWithAcsUser < Errors date_accessor :created_at discriminated_by :error_code, { - "issue_with_acs_user" => IssueWithAcsUser, + "issue_with_acs_user" => IssueWithAcsUser }.freeze end @@ -97,7 +97,7 @@ class AcsUserProfileDoesNotMatchUserIdentity < Warnings discriminated_by :warning_code, { "being_deleted" => BeingDeleted, - "acs_user_profile_does_not_match_user_identity" => AcsUserProfileDoesNotMatchUserIdentity, + "acs_user_profile_does_not_match_user_identity" => AcsUserProfileDoesNotMatchUserIdentity }.freeze end