diff --git a/docs/api/_report.md b/docs/api/_report.md index fa4e90ba6..74a3275ca 100644 --- a/docs/api/_report.md +++ b/docs/api/_report.md @@ -79,6 +79,7 @@ - `/workspaces/get` - `/workspaces/list` - `/workspaces/reset_sandbox` +- `/workspaces/update` ## Undocumented @@ -91,28 +92,23 @@ These items are intentionally undocumented. - `/acs/credential_provisioning_automations`: No undocumented message provided - `/acs/credentials/unmanaged`: No undocumented message provided - `/acs/users/unmanaged`: No undocumented message provided +- `/locks/simulate`: No undocumented message provided - `/seam/bridge/v1/bridge_client_sessions`: No undocumented message provided - `/seam/bridge/v1/bridge_connected_systems`: No undocumented message provided +- `/seam/instant_key/v1/client_sessions`: No undocumented message provided +- `/thermostats/daily_programs`: No undocumented message provided - `/unstable_access_grants`: No undocumented message provided +- `/unstable_access_methods`: No undocumented message provided - `/unstable_locations`: No undocumented message provided ### Resources - `instant_key`: Unreleased. -### Resource properties - -- `acs_user.is_latest_desired_state_synced_with_provider`: Only used internally. -- `acs_user.latest_desired_state_synced_with_provider_at`: Only used internally. -- `acs_user.pending_mutations`: Experimental. -- `thermostat_schedule.unstable_is_override_allowed`: Unstable -- `unmanaged_acs_user.is_latest_desired_state_synced_with_provider`: Only used internally. -- `unmanaged_acs_user.latest_desired_state_synced_with_provider_at`: Only used internally. -- `unmanaged_acs_user.pending_mutations`: Experimental. - ### Namespaces - `/seam/bridge/v1`: No undocumented message provided +- `/seam/instant_key/v1`: No undocumented message provided ### Endpoints @@ -126,24 +122,33 @@ These items are intentionally undocumented. - `/acs/users/unmanaged/get`: No unmanaged users are currently implemented. - `/acs/users/unmanaged/list`: No unmanaged users are currently implemented. - `/devices/delete`: Deleting a device is no longer supported and will be removed. -- `/devices/simulate/access_code_lock`: Unreleased. -- `/devices/simulate/access_code_unlock`: Unreleased. +- `/locks/simulate/keypad_code_entry`: Unreleased. +- `/locks/simulate/manual_lock_via_keypad`: Unreleased. - `/seam/bridge/v1/bridge_client_sessions/create`: Seam Bridge Client only. - `/seam/bridge/v1/bridge_client_sessions/get`: Seam Bridge Client only. - `/seam/bridge/v1/bridge_client_sessions/refresh_telemetry_token`: Seam Bridge Client only. - `/seam/bridge/v1/bridge_client_sessions/regenerate_pairing_code`: Seam Bridge Client only. - `/seam/bridge/v1/bridge_client_sessions/report_status`: Seam Bridge Client only. - `/seam/bridge/v1/bridge_connected_systems/list`: Seam Bridge Client only. +- `/seam/instant_key/v1/client_sessions/exchange_short_code`: Seam Instant Key only. +- `/thermostats/activate_weekly_program`: Unreleased. +- `/thermostats/clear_weekly_program`: Unreleased. - `/thermostats/get`: Will be removed. +- `/thermostats/daily_programs/create`: Unreleased. +- `/thermostats/daily_programs/delete`: Unreleased. +- `/thermostats/daily_programs/update`: Unreleased. - `/unstable_access_grants/create`: Unreleased. - `/unstable_access_grants/get`: Unreleased. - `/unstable_access_grants/list`: Unreleased. -- `/unstable_access_grants/list_access_methods`: Unreleased. +- `/unstable_access_methods/get`: Unreleased. +- `/unstable_access_methods/list`: Unreleased. +- `/unstable_locations/add_acs_entrances`: Experimental locations. - `/unstable_locations/add_devices`: Experimental locations. - `/unstable_locations/create`: Experimental locations. - `/unstable_locations/delete`: Experimental locations. - `/unstable_locations/get`: Experimental locations. - `/unstable_locations/list`: Experimental locations. +- `/unstable_locations/remove_acs_entrances`: Experimental locations. - `/unstable_locations/remove_devices`: Experimental locations. - `/unstable_locations/update`: Experimental locations. @@ -159,6 +164,8 @@ These items are intentionally undocumented. - `sync`: Only used internally. - `/access_codes/unmanaged/delete` - `sync`: Only used internally. +- `/acs/entrances/list` + - `location_id`: Experimental locations. - `/devices/list` - `exclude_if`: Only used internally. - `include_if`: Only used internally. @@ -235,16 +242,19 @@ Items that are intentionally undocumented are not included in this section. - `acs_credential_provisioning_automation.workspace_id` - `acs_system.acs_access_group_count` - `acs_system.acs_user_count` +- `acs_system.can_create_user` +- `acs_system.can_delete_user` +- `acs_system.can_update_user_group_membership` +- `acs_system.can_update_user_information` +- `acs_system.can_update_user_schedule` +- `acs_system.can_update_user_supension_state` - `acs_system.location` - `acs_system.system_type` - `acs_system.system_type_display_name` - `acs_system.visionline_metadata` - `acs_user.email` - `acs_user.hid_acs_system_id` -- `acs_user.is_latest_desired_state_synced_with_provider` - `acs_user.is_managed` -- `acs_user.latest_desired_state_synced_with_provider_at` -- `acs_user.pending_mutations` - `client_session.client_session_id` - `client_session.connect_webview_ids` - `client_session.connected_account_ids` @@ -337,10 +347,7 @@ Items that are intentionally undocumented are not included in this section. - `unmanaged_acs_credential.is_managed` - `unmanaged_acs_user.email` - `unmanaged_acs_user.hid_acs_system_id` -- `unmanaged_acs_user.is_latest_desired_state_synced_with_provider` - `unmanaged_acs_user.is_managed` -- `unmanaged_acs_user.latest_desired_state_synced_with_provider_at` -- `unmanaged_acs_user.pending_mutations` - `unmanaged_device.can_hvac_cool` - `unmanaged_device.can_hvac_heat` - `unmanaged_device.can_hvac_heat_cool` @@ -362,6 +369,7 @@ Items that are intentionally undocumented are not included in this section. - `webhook.webhook_id` - `workspace.company_name` - `workspace.connect_partner_name` +- `workspace.connect_webview_customization` - `workspace.is_sandbox` - `workspace.name` - `workspace.workspace_id` @@ -397,8 +405,6 @@ Items that are intentionally undocumented are not included in this section. - `/devices/get` - `/devices/list_device_providers` - `/devices/update` -- `/devices/simulate/access_code_lock` -- `/devices/simulate/access_code_unlock` - `/devices/simulate/connect` - `/devices/simulate/disconnect` - `/devices/simulate/remove` @@ -411,6 +417,8 @@ Items that are intentionally undocumented are not included in this section. - `/locks/list` - `/locks/lock_door` - `/locks/unlock_door` +- `/locks/simulate/keypad_code_entry` +- `/locks/simulate/manual_lock_via_keypad` - `/networks/get` - `/networks/list` - `/noise_sensors/list` @@ -430,6 +438,7 @@ Items that are intentionally undocumented are not included in this section. - `/workspaces/get` - `/workspaces/list` - `/workspaces/reset_sandbox` +- `/workspaces/update` ### Endpoint parameters @@ -473,6 +482,7 @@ Items that are intentionally undocumented are not included in this section. - `/acs/entrances/list` - `acs_credential_id` - `acs_system_id` + - `location_id` - `/acs/entrances/list_credentials_with_access` - `acs_entrance_id` - `include_if` @@ -570,12 +580,6 @@ Items that are intentionally undocumented are not included in this section. - `is_managed` - `name` - `properties` -- `/devices/simulate/access_code_lock` - - `access_code_id` - - `device_id` -- `/devices/simulate/access_code_unlock` - - `access_code_id` - - `device_id` - `/devices/simulate/connect` - `device_id` - `/devices/simulate/disconnect` @@ -625,6 +629,11 @@ Items that are intentionally undocumented are not included in this section. - `/locks/unlock_door` - `device_id` - `sync` +- `/locks/simulate/keypad_code_entry` + - `code` + - `device_id` +- `/locks/simulate/manual_lock_via_keypad` + - `device_id` - `/networks/get` - `network_id` - `/noise_sensors/list` @@ -685,11 +694,16 @@ Items that are intentionally undocumented are not included in this section. - `/thermostats/set_hvac_mode` - `hvac_mode_setting` - `/unstable_access_grants/create` - - `desired_access_methods` + - `requested_access_methods` +- `/unstable_locations/add_acs_entrances` + - `acs_entrance_ids` + - `location_id` - `/unstable_locations/add_devices` - `device_ids` - `location_id` - `/unstable_locations/create` + - `acs_entrance_ids` + - `device_ids` - `geolocation` - `name` - `time_zone` @@ -697,6 +711,9 @@ Items that are intentionally undocumented are not included in this section. - `location_id` - `/unstable_locations/get` - `location_id` +- `/unstable_locations/remove_acs_entrances` + - `acs_entrance_ids` + - `location_id` - `/unstable_locations/remove_devices` - `device_ids` - `location_id` @@ -724,12 +741,18 @@ Items that are intentionally undocumented are not included in this section. - `/workspaces/create` - `company_name` - `connect_partner_name` + - `connect_webview_customization` - `is_sandbox` - `name` - `webview_logo_shape` - `webview_primary_button_color` - `webview_primary_button_text_color` - `webview_success_message` +- `/workspaces/update` + - `connect_partner_name` + - `connect_webview_customization` + - `is_suspended` + - `name` ## Deprecated @@ -764,17 +787,25 @@ These items are deprecated. - `manual_override_allowed`: Use 'thermostat_schedule.is_override_allowed' - `/workspaces/create` - `connect_partner_name`: use company_name + - `webview_logo_shape`: Use `connect_webview_customization.webview_logo_shape` instead. + - `webview_primary_button_color`: Use `connect_webview_customization.webview_primary_button_color` instead. + - `webview_primary_button_text_color`: Use `connect_webview_customization.webview_primary_button_text_color` instead. + - `webview_success_message`: Use `connect_webview_customization.webview_success_message` instead. ### Extra response keys - `/access_codes/create` - `action_attempt` +- `/access_codes/list` + - `pagination` - `/access_codes/pull_backup_access_code` - `backup_access_code` - `/acs/users/list` - `pagination` - `/connected_accounts/list` - `pagination` +- `/devices/list` + - `pagination` - `/events/get` - `message` - `/locks/get` @@ -799,6 +830,7 @@ These items are deprecated. - `/access_codes/get` - `/access_codes/list` - `/access_codes/pull_backup_access_code` +- `/access_codes/report_device_constraints` - `/access_codes/update` - `/access_codes/update_multiple` - `/access_codes/simulate/create_unmanaged_access_code` @@ -812,6 +844,7 @@ These items are deprecated. - `/acs/credentials/create_offline_code` - `/acs/credentials/unmanaged/get` - `/acs/credentials/unmanaged/list` +- `/acs/encoders/encode_access_method` - `/acs/encoders/encode_credential` - `/acs/encoders/get` - `/acs/encoders/list` @@ -849,8 +882,6 @@ These items are deprecated. - `/devices/list` - `/devices/list_device_providers` - `/devices/update` -- `/devices/simulate/access_code_lock` -- `/devices/simulate/access_code_unlock` - `/devices/simulate/connect` - `/devices/simulate/disconnect` - `/devices/simulate/remove` @@ -863,6 +894,8 @@ These items are deprecated. - `/locks/list` - `/locks/lock_door` - `/locks/unlock_door` +- `/locks/simulate/keypad_code_entry` +- `/locks/simulate/manual_lock_via_keypad` - `/networks/get` - `/networks/list` - `/noise_sensors/list` @@ -882,18 +915,27 @@ These items are deprecated. - `/seam/bridge/v1/bridge_client_sessions/regenerate_pairing_code` - `/seam/bridge/v1/bridge_client_sessions/report_status` - `/seam/bridge/v1/bridge_connected_systems/list` +- `/seam/instant_key/v1/client_sessions/exchange_short_code` +- `/thermostats/activate_weekly_program` +- `/thermostats/clear_weekly_program` - `/thermostats/get` +- `/thermostats/daily_programs/create` +- `/thermostats/daily_programs/delete` +- `/thermostats/daily_programs/update` - `/thermostats/simulate/hvac_mode_adjusted` - `/thermostats/simulate/temperature_reached` - `/unstable_access_grants/create` - `/unstable_access_grants/get` - `/unstable_access_grants/list` -- `/unstable_access_grants/list_access_methods` +- `/unstable_access_methods/get` +- `/unstable_access_methods/list` +- `/unstable_locations/add_acs_entrances` - `/unstable_locations/add_devices` - `/unstable_locations/create` - `/unstable_locations/delete` - `/unstable_locations/get` - `/unstable_locations/list` +- `/unstable_locations/remove_acs_entrances` - `/unstable_locations/remove_devices` - `/unstable_locations/update` - `/user_identities/generate_instant_key` @@ -907,3 +949,4 @@ These items are deprecated. - `/workspaces/get` - `/workspaces/list` - `/workspaces/reset_sandbox` +- `/workspaces/update` diff --git a/docs/api/acs/credentials/README.md b/docs/api/acs/credentials/README.md index 2a7367e7e..11fb4e70f 100644 --- a/docs/api/acs/credentials/README.md +++ b/docs/api/acs/credentials/README.md @@ -151,6 +151,7 @@ Possible enum values: - `salto_ks_credential` - `assa_abloy_vostio_key` - `salto_space_key` +- `latch_access` --- diff --git a/docs/api/acs/encoders/README.md b/docs/api/acs/encoders/README.md index 395483de6..463e10d73 100644 --- a/docs/api/acs/encoders/README.md +++ b/docs/api/acs/encoders/README.md @@ -90,6 +90,9 @@ ID of the [workspace](../../../core-concepts/workspaces/README.md) that contains ## Endpoints +### [`/acs/encoders/encode_access_method`](./encode_access_method.md) + +Encodes an existing access method onto a plastic card placed on the specified [encoder](../../../capability-guides/access-systems/working-with-card-encoders-and-scanners/README.md). ### [`/acs/encoders/encode_credential`](./encode_credential.md) Encodes an existing [credential](../../../capability-guides/access-systems/managing-credentials.md) onto a plastic card placed on the specified [encoder](../../../capability-guides/access-systems/working-with-card-encoders-and-scanners/README.md). diff --git a/docs/api/acs/encoders/encode_access_method.md b/docs/api/acs/encoders/encode_access_method.md new file mode 100644 index 000000000..510e1d0dd --- /dev/null +++ b/docs/api/acs/encoders/encode_access_method.md @@ -0,0 +1,153 @@ +# Encode an Access Method + +``` +POST /acs/encoders/encode_access_method ⇒ { action_attempt } +``` + +Encodes an existing access method onto a plastic card placed on the specified [encoder](../../../capability-guides/access-systems/working-with-card-encoders-and-scanners/README.md). + +## Authentication Methods + +- API key +- Personal access token +
Must also include the `seam-workspace` header in the request. + +## Request Parameters + +### `access_method_id` + +Format: `UUID` +Required: Yes + +ID of the `access_method` to encode onto a card. + +*** + +### `acs_encoder_id` + +Format: `UUID` +Required: Yes + +ID of the `acs_encoder` to use to encode the `access_method`. + +*** + +## Return Type + +[action\_attempt](./) + +### `ENCODE_ACCESS_METHOD` + +Action attempt to track encoding credential data from the physical encoder onto a card. + +#### `action_attempt_id` + +Format: `UUID` + +ID of the action attempt. + +--- + +#### `action_type` + +Format: `Enum` + +Type of action that the action attempt tracks. + +Value: `ENCODE_ACCESS_METHOD` + +--- + +#### `error` + +Format: `Object` + +
+ +message Format: String +
+
+ +type Format: Enum + +Possible enum values: +- `uncategorized_error` +- `action_attempt_expired` +- `no_credential_on_encoder` +- `incompatible_card_format` +- `credential_cannot_be_reissued` +
+--- + +#### `result` + +Format: `Object` + +If an encoding attempt was successful, includes the `access_method` data that was encoded onto the card. + +
+ +access_method_id Format: UUID + +ID of the access method. +
+
+ +created_at Format: Datetime + +Date and time at which the access method was created. +
+
+ +display_name Format: String + +Display name of the access method. +
+
+ +instant_key_url Format: String + +URL of instant key for mobile key access methods. +
+
+ +is_card_encoding_required Format: Boolean + +Whether card encoding is required for plastic card access methods. +
+
+ +issued_at Format: Datetime + +Date and time at which the access method was issued. +
+
+ +mode Format: Enum + +Access method mode. Supported values: `code`, `card`, `mobile_key`. + +Possible enum values: +- `code` +- `card` +- `mobile_key` +
+
+ +workspace_id Format: UUID + +Unique identifier for the Seam workspace associated with the access grant. +
+--- + +#### `status` + +Format: `Enum` + +Possible enum values: +- `success` +- `pending` +- `error` + +--- + diff --git a/docs/api/acs/encoders/encode_credential.md b/docs/api/acs/encoders/encode_credential.md index 4feb7dcb4..24652bd37 100644 --- a/docs/api/acs/encoders/encode_credential.md +++ b/docs/api/acs/encoders/encode_credential.md @@ -200,6 +200,7 @@ Possible enum values: - `salto_ks_credential` - `assa_abloy_vostio_key` - `salto_space_key` +- `latch_access`
diff --git a/docs/api/acs/encoders/scan_credential.md b/docs/api/acs/encoders/scan_credential.md index d2c63285c..d7649eed2 100644 --- a/docs/api/acs/encoders/scan_credential.md +++ b/docs/api/acs/encoders/scan_credential.md @@ -307,6 +307,7 @@ Possible enum values: - `salto_ks_credential` - `assa_abloy_vostio_key` - `salto_space_key` +- `latch_access`
diff --git a/docs/api/acs/systems/README.md b/docs/api/acs/systems/README.md index f2b8e47f2..6085c2453 100644 --- a/docs/api/acs/systems/README.md +++ b/docs/api/acs/systems/README.md @@ -52,6 +52,18 @@ Indicates whether the [access control system](https://docs.seam.co/latest/capabi --- +### `can_create_user` + +Format: `Boolean` + +--- + +### `can_delete_user` + +Format: `Boolean` + +--- + ### `can_remove_acs_users_from_acs_access_groups` Format: `Boolean` @@ -60,6 +72,30 @@ Indicates whether the [access control system](https://docs.seam.co/latest/capabi --- +### `can_update_user_group_membership` + +Format: `Boolean` + +--- + +### `can_update_user_information` + +Format: `Boolean` + +--- + +### `can_update_user_schedule` + +Format: `Boolean` + +--- + +### `can_update_user_supension_state` + +Format: `Boolean` + +--- + ### `connected_account_id` Format: `UUID` diff --git a/docs/api/acs/users/README.md b/docs/api/acs/users/README.md index 1e793af09..c0dceae8d 100644 --- a/docs/api/acs/users/README.md +++ b/docs/api/acs/users/README.md @@ -141,6 +141,16 @@ Indicates whether the [ACS user](https://docs.seam.co/latest/capability-guides/a --- +### `pending_mutations` + +Format: `List` + +Item format: `Object` + +Pending mutations associated with the [ACS user](https://docs.seam.co/latest/capability-guides/access-systems/user-management). Seam is in the process of pushing these mutations to the integrated access system. + +--- + ### `phone_number` Format: `String` @@ -251,6 +261,12 @@ An unknown issue occurred while syncing the state of this [ACS user](https://doc --- +### `latch_resident_user` + +Indicates that the [ACS user](https://docs.seam.co/latest/capability-guides/access-systems/user-management) was created on Latch Mission Control. Please use the Latch Mission Control to manage this user. + +--- + ## Endpoints ### [`/acs/users/add_to_access_group`](./add_to_access_group.md) diff --git a/docs/api/thermostats/list.md b/docs/api/thermostats/list.md index 8d95d5dfb..f6abab73b 100644 --- a/docs/api/thermostats/list.md +++ b/docs/api/thermostats/list.md @@ -341,6 +341,15 @@ Possible enum values: *** +### `page_cursor` + +Format: `String` +Required: No + +Identifies the specific page of results to return, obtained from the previous page's `next_page_cursor`. + +*** + ### `user_identifier_key` Format: `String` diff --git a/docs/api/thermostats/schedules/README.md b/docs/api/thermostats/schedules/README.md index 3323b4adf..a82ba776d 100644 --- a/docs/api/thermostats/schedules/README.md +++ b/docs/api/thermostats/schedules/README.md @@ -58,6 +58,14 @@ Detailed description of the error. Provides insights into the issue and potentia
--- +### `is_override_allowed` + +Format: `Boolean` + +Indicates whether a person at the thermostat can change the thermostat's settings after the [thermostat schedule](../../../capability-guides/thermostats/creating-and-managing-thermostat-schedules.md) starts. + +--- + ### `max_override_period_minutes` Format: `Number` diff --git a/docs/api/user_identities/generate_instant_key.md b/docs/api/user_identities/generate_instant_key.md index 390b5d284..b6d8c0151 100644 --- a/docs/api/user_identities/generate_instant_key.md +++ b/docs/api/user_identities/generate_instant_key.md @@ -23,6 +23,15 @@ ID of the user identity for which you want to generate an instant key. *** +### `max_use_count` + +Format: `Number` +Required: No + +The maximum number of times the instant key can be used. Defaults to 1. + +*** + ## Return Type [instant\_key](./) diff --git a/package-lock.json b/package-lock.json index 3a302e388..07f33b642 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,7 +14,7 @@ "@prettier/plugin-php": "^0.22.2", "@prettier/plugin-ruby": "^4.0.4", "@seamapi/blueprint": "^0.40.1", - "@seamapi/types": "1.384.0", + "@seamapi/types": "1.389.0", "change-case": "^5.4.4", "command-exists": "^1.2.9", "del": "^8.0.0", @@ -781,9 +781,9 @@ } }, "node_modules/@seamapi/types": { - "version": "1.384.0", - "resolved": "https://registry.npmjs.org/@seamapi/types/-/types-1.384.0.tgz", - "integrity": "sha512-pFQF4O7LaLu9J2yfNxtiuN/kCYX5WH0Sdccx6BC1rYQqwQSD1m5/yXTq14iCBa6z2R8Fw09WRU5Zp+NjHtleQQ==", + "version": "1.389.0", + "resolved": "https://registry.npmjs.org/@seamapi/types/-/types-1.389.0.tgz", + "integrity": "sha512-UHLss1wfPnLTHEXz+2Ia24N5SU5/H1TTa6UmASy1ASub0U5LGPnTxsYxbb/2f82isI/IRJhpqCYOJE+VAcBEaA==", "license": "MIT", "engines": { "node": ">=18.12.0", diff --git a/package.json b/package.json index 605e5dfe4..82d6ebf0c 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "@prettier/plugin-php": "^0.22.2", "@prettier/plugin-ruby": "^4.0.4", "@seamapi/blueprint": "^0.40.1", - "@seamapi/types": "1.384.0", + "@seamapi/types": "1.389.0", "change-case": "^5.4.4", "command-exists": "^1.2.9", "del": "^8.0.0", diff --git a/src/lib/report.ts b/src/lib/report.ts index 4dd29a18f..ab414d770 100644 --- a/src/lib/report.ts +++ b/src/lib/report.ts @@ -320,17 +320,21 @@ function processResponseKeys(endpoint: Endpoint, report: Report): void { function getOpenapiResponseProperties( path: string, -): Record | undefined { +): Record | undefined | null { const openapiEndpointDef = openapi.paths[path as keyof typeof openapi.paths] if (openapiEndpointDef == null) { // eslint-disable-next-line no-console console.warn(`OpenAPI definition not found for endpoint: ${path}`) - return + return null } - return openapiEndpointDef.post.responses['200']?.content['application/json'] - ?.schema?.properties + const res = openapiEndpointDef.post.responses['200'] + if ('content' in res) { + return res.content['application/json']?.schema?.properties + } + + return null } function processParameters(