@seamapi/http 2.5.1 → 2.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +47 -0
- package/index.d.ts +0 -1
- package/index.js +0 -1
- package/index.js.map +1 -1
- package/lib/client.js +1 -1
- package/lib/client.js.map +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -1
- package/lib/resources/event.d.ts +3 -22
- package/lib/seam-http-request.js +1 -1
- package/lib/seam-http-request.js.map +1 -1
- package/lib/url-search-params-serializer.d.ts +4 -0
- package/lib/url-search-params-serializer.js +17 -0
- package/lib/url-search-params-serializer.js.map +1 -0
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/package.json +2 -2
- package/src/index.ts +0 -1
- package/src/lib/client.ts +1 -1
- package/src/lib/index.ts +1 -0
- package/src/lib/resources/event.ts +3 -134
- package/src/lib/seam-http-request.ts +1 -1
- package/src/lib/url-search-params-serializer.ts +28 -0
- package/src/lib/version.ts +1 -1
package/README.md
CHANGED
|
@@ -526,6 +526,53 @@ console.log(`${request.method} ${request.url}`, JSON.stringify(request.body))
|
|
|
526
526
|
const devices = await request.execute()
|
|
527
527
|
```
|
|
528
528
|
|
|
529
|
+
#### Serializing URL search params
|
|
530
|
+
|
|
531
|
+
The Seam API parses URL search params as complex types.
|
|
532
|
+
If you call it with your own HTTP client, use `serializeUrlSearchParams`:
|
|
533
|
+
|
|
534
|
+
```ts
|
|
535
|
+
import axios from 'axios'
|
|
536
|
+
import { serializeUrlSearchParams } from '@seamapi/http'
|
|
537
|
+
|
|
538
|
+
await axios.get('https://connect.getseam.com/devices/list', {
|
|
539
|
+
params: { device_ids: ['device1', 'device2'] },
|
|
540
|
+
paramsSerializer: serializeUrlSearchParams,
|
|
541
|
+
headers: { Authorization: 'Bearer your-api-key' },
|
|
542
|
+
})
|
|
543
|
+
```
|
|
544
|
+
|
|
545
|
+
or `updateUrlSearchParams`:
|
|
546
|
+
|
|
547
|
+
```ts
|
|
548
|
+
import { updateUrlSearchParams } from '@seamapi/http'
|
|
549
|
+
|
|
550
|
+
const searchParams = new URLSearchParams()
|
|
551
|
+
updateUrlSearchParams(searchParams, { device_ids: ['device1', 'device2'] })
|
|
552
|
+
|
|
553
|
+
Array.from(searchParams)
|
|
554
|
+
// => [['device_ids', 'device1'], ['device_ids', 'device2'], ['_strict', 'true']]
|
|
555
|
+
|
|
556
|
+
searchParams.toString()
|
|
557
|
+
// => 'device_ids=device1&device_ids=device2&_strict=true'
|
|
558
|
+
```
|
|
559
|
+
|
|
560
|
+
The helpers wrap the [reference implementation].
|
|
561
|
+
The serialization defines the name and string value of each search param.
|
|
562
|
+
[`URLSearchParams`][URLSearchParams] holds those pairs and renders the query string:
|
|
563
|
+
The `_strict=true` parameter is added to any non-empty query so the Seam API uses
|
|
564
|
+
strict, schema-aware parsing.
|
|
565
|
+
A query with no serializable params remains empty.
|
|
566
|
+
|
|
567
|
+
A param set to `undefined` is omitted, while a param set to `null` is serialized
|
|
568
|
+
to an empty value, which the Seam API reads as null.
|
|
569
|
+
A param that cannot be represented raises an `UnserializableParamError`.
|
|
570
|
+
The Seam API parses these params with the corresponding [parser].
|
|
571
|
+
|
|
572
|
+
[URLSearchParams]: https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams
|
|
573
|
+
[reference implementation]: https://github.com/seamapi/url-search-params-serializer
|
|
574
|
+
[parser]: https://github.com/seamapi/url-search-params-parser
|
|
575
|
+
|
|
529
576
|
## Development and Testing
|
|
530
577
|
|
|
531
578
|
### Quickstart
|
package/index.d.ts
CHANGED
package/index.js
CHANGED
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA"}
|
package/lib/client.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { serializeUrlSearchParams } from '@seamapi/url-search-params-serializer';
|
|
2
1
|
import axios, {} from 'axios';
|
|
3
2
|
import axiosRetry, { exponentialDelay } from 'axios-retry';
|
|
4
3
|
import { errorInterceptor } from './error-interceptor.js';
|
|
4
|
+
import { serializeUrlSearchParams } from './url-search-params-serializer.js';
|
|
5
5
|
export const defaultTimeout = 30_000;
|
|
6
6
|
export const createClient = (options) => {
|
|
7
7
|
const client = axios.create({
|
package/lib/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/lib/client.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/lib/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAA+C,MAAM,OAAO,CAAA;AAC1E,OAAO,UAAU,EAAE,EAAmB,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAE3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAA;AAI5E,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAA;AAUpC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,OAAsB,EAAiB,EAAE;IACpE,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC1B,gBAAgB,EAAE,wBAAwB;QAC1C,OAAO,EAAE,OAAO;QAChB,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,cAAc;QAC1C,GAAG,OAAO,CAAC,YAAY;KACxB,CAAC,CAAA;IAEF,UAAU,CAAC,MAAM,EAAE;QACjB,OAAO,EAAE,CAAC;QACV,UAAU,EAAE,gBAAgB;QAC5B,GAAG,OAAO,CAAC,iBAAiB;KAC7B,CAAC,CAAA;IAEF,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAA;IAE7D,OAAO,MAAM,CAAA;AACf,CAAC,CAAA"}
|
package/lib/index.d.ts
CHANGED
|
@@ -9,3 +9,4 @@ export * from './seam-http-error.js';
|
|
|
9
9
|
export * from './seam-http-request.js';
|
|
10
10
|
export * from './seam-paginator.js';
|
|
11
11
|
export { isApiKey, isClientSessionToken, isConsoleSessionToken, isPersonalAccessToken, isPublishableKey, } from './token.js';
|
|
12
|
+
export * from './url-search-params-serializer.js';
|
package/lib/index.js
CHANGED
|
@@ -9,4 +9,5 @@ export * from './seam-http-error.js';
|
|
|
9
9
|
export * from './seam-http-request.js';
|
|
10
10
|
export * from './seam-paginator.js';
|
|
11
11
|
export { isApiKey, isClientSessionToken, isConsoleSessionToken, isPersonalAccessToken, isPublishableKey, } from './token.js';
|
|
12
|
+
export * from './url-search-params-serializer.js';
|
|
12
13
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAA;AACrD,cAAc,wBAAwB,CAAA;AACtC,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,OAAO,EACL,wBAAwB,EACxB,8BAA8B,EAC9B,+BAA+B,EAC/B,sBAAsB,EACtB,4BAA4B,EAC5B,6BAA6B,GAC9B,MAAM,6BAA6B,CAAA;AACpC,cAAc,sBAAsB,CAAA;AACpC,cAAc,mBAAmB,CAAA;AACjC,cAAc,sBAAsB,CAAA;AACpC,cAAc,wBAAwB,CAAA;AACtC,cAAc,qBAAqB,CAAA;AACnC,OAAO,EACL,QAAQ,EACR,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,YAAY,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAA;AACrD,cAAc,wBAAwB,CAAA;AACtC,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,OAAO,EACL,wBAAwB,EACxB,8BAA8B,EAC9B,+BAA+B,EAC/B,sBAAsB,EACtB,4BAA4B,EAC5B,6BAA6B,GAC9B,MAAM,6BAA6B,CAAA;AACpC,cAAc,sBAAsB,CAAA;AACpC,cAAc,mBAAmB,CAAA;AACjC,cAAc,sBAAsB,CAAA;AACpC,cAAc,wBAAwB,CAAA;AACtC,cAAc,qBAAqB,CAAA;AACnC,OAAO,EACL,QAAQ,EACR,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,YAAY,CAAA;AACnB,cAAc,mCAAmC,CAAA"}
|
package/lib/resources/event.d.ts
CHANGED
|
@@ -1,26 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* An [access code](https://docs.seam.co/low-level-apis/smart-locks/access-codes) was created.
|
|
3
|
+
*/
|
|
1
4
|
export type SeamEvent = {
|
|
2
|
-
/**
|
|
3
|
-
* Date and time at which the event was created.
|
|
4
|
-
*/
|
|
5
|
-
created_at?: string | undefined;
|
|
6
|
-
/**
|
|
7
|
-
* Human-readable description of the event. Persisted when the event is created (so the creating code, including a provider, can supply a tailored description) and otherwise derived from the event.
|
|
8
|
-
*/
|
|
9
|
-
event_description?: string | undefined;
|
|
10
|
-
/**
|
|
11
|
-
* ID of the event.
|
|
12
|
-
*/
|
|
13
|
-
event_id?: string | undefined;
|
|
14
|
-
event_type?: 'access_code.created' | 'access_code.changed' | 'access_code.name_changed' | 'access_code.code_changed' | 'access_code.time_frame_changed' | 'access_code.mutations_requested' | 'access_code.scheduled_on_device' | 'access_code.set_on_device' | 'access_code.removed_from_device' | 'access_code.delay_in_setting_on_device' | 'access_code.failed_to_set_on_device' | 'access_code.deleted' | 'access_code.delay_in_removing_from_device' | 'access_code.failed_to_remove_from_device' | 'access_code.modified_external_to_seam' | 'access_code.deleted_external_to_seam' | 'access_code.backup_access_code_pulled' | 'access_code.unmanaged.converted_to_managed' | 'access_code.unmanaged.failed_to_convert_to_managed' | 'access_code.unmanaged.created' | 'access_code.unmanaged.removed' | 'access_grant.created' | 'access_grant.deleted' | 'access_grant.access_granted_to_all_doors' | 'access_grant.access_granted_to_door' | 'access_grant.access_to_door_lost' | 'access_grant.access_times_changed' | 'access_grant.could_not_create_requested_access_methods' | 'access_method.issued' | 'access_method.revoked' | 'access_method.card_encoding_required' | 'access_method.deleted' | 'access_method.reissued' | 'access_method.created' | 'access_method.delay_in_issuing' | 'access_method.failed_to_issue' | 'acs_system.connected' | 'acs_system.added' | 'acs_system.disconnected' | 'acs_credential.deleted' | 'acs_credential.issued' | 'acs_credential.reissued' | 'acs_credential.invalidated' | 'acs_user.created' | 'acs_user.deleted' | 'acs_encoder.added' | 'acs_encoder.removed' | 'acs_access_group.deleted' | 'acs_entrance.added' | 'acs_entrance.removed' | 'client_session.deleted' | 'connected_account.connected' | 'connected_account.created' | 'connected_account.successful_login' | 'connected_account.disconnected' | 'connected_account.completed_first_sync' | 'connected_account.deleted' | 'connected_account.completed_first_sync_after_reconnection' | 'connected_account.reauthorization_requested' | 'action_attempt.lock_door.succeeded' | 'action_attempt.lock_door.failed' | 'action_attempt.unlock_door.succeeded' | 'action_attempt.unlock_door.failed' | 'action_attempt.simulate_keypad_code_entry.succeeded' | 'action_attempt.simulate_keypad_code_entry.failed' | 'action_attempt.simulate_manual_lock_via_keypad.succeeded' | 'action_attempt.simulate_manual_lock_via_keypad.failed' | 'connect_webview.login_succeeded' | 'connect_webview.login_failed' | 'device.connected' | 'device.added' | 'device.converted_to_unmanaged' | 'device.unmanaged.converted_to_managed' | 'device.unmanaged.connected' | 'device.disconnected' | 'device.unmanaged.disconnected' | 'device.tampered' | 'device.low_battery' | 'device.battery_status_changed' | 'device.removed' | 'device.deleted' | 'device.third_party_integration_detected' | 'device.third_party_integration_no_longer_detected' | 'device.salto.privacy_mode_activated' | 'device.salto.privacy_mode_deactivated' | 'device.connection_became_flaky' | 'device.connection_stabilized' | 'device.error.subscription_required' | 'device.error.subscription_required.resolved' | 'device.accessory_keypad_connected' | 'device.accessory_keypad_disconnected' | 'noise_sensor.noise_threshold_triggered' | 'lock.locked' | 'lock.unlocked' | 'lock.access_denied' | 'thermostat.climate_preset_activated' | 'thermostat.manually_adjusted' | 'thermostat.temperature_threshold_exceeded' | 'thermostat.temperature_threshold_no_longer_exceeded' | 'thermostat.temperature_reached_set_point' | 'thermostat.temperature_changed' | 'device.name_changed' | 'camera.activated' | 'device.doorbell_rang' | 'enrollment_automation.deleted' | 'phone.deactivated' | 'space.device_membership_changed' | 'space.created' | 'space.deleted' | undefined;
|
|
15
|
-
/**
|
|
16
|
-
* Date and time at which the event occurred.
|
|
17
|
-
*/
|
|
18
|
-
occurred_at?: string | undefined;
|
|
19
|
-
/**
|
|
20
|
-
* ID of the workspace associated with the event.
|
|
21
|
-
*/
|
|
22
|
-
workspace_id?: string | undefined;
|
|
23
|
-
} | {
|
|
24
5
|
/**
|
|
25
6
|
* ID of the affected access code.
|
|
26
7
|
*/
|
package/lib/seam-http-request.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { serializeUrlSearchParams } from '@seamapi/url-search-params-serializer';
|
|
2
1
|
import { assertValidRequestParameters } from './request-parameters.js';
|
|
3
2
|
import { resolveActionAttempt, } from './resolve-action-attempt.js';
|
|
3
|
+
import { serializeUrlSearchParams } from './url-search-params-serializer.js';
|
|
4
4
|
export class SeamHttpRequest {
|
|
5
5
|
[Symbol.toStringTag] = 'SeamHttpRequest';
|
|
6
6
|
#parent;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seam-http-request.js","sourceRoot":"","sources":["../src/lib/seam-http-request.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"seam-http-request.js","sourceRoot":"","sources":["../src/lib/seam-http-request.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type Params, UnserializableParamError } from '@seamapi/url-search-params-serializer';
|
|
2
|
+
export declare const serializeUrlSearchParams: (params: Params) => string;
|
|
3
|
+
export declare const updateUrlSearchParams: (searchParams: URLSearchParams, params: Params) => void;
|
|
4
|
+
export { type Params, UnserializableParamError };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { serializeUrlSearchParams as baseSerializeUrlSearchParams, UnserializableParamError, updateUrlSearchParams as baseUpdateUrlSearchParams, } from '@seamapi/url-search-params-serializer';
|
|
2
|
+
export const serializeUrlSearchParams = (params) => {
|
|
3
|
+
const queryString = baseSerializeUrlSearchParams(params);
|
|
4
|
+
if (queryString === '')
|
|
5
|
+
return '';
|
|
6
|
+
const searchParams = new URLSearchParams(queryString);
|
|
7
|
+
searchParams.set('_strict', 'true');
|
|
8
|
+
return searchParams.toString();
|
|
9
|
+
};
|
|
10
|
+
export const updateUrlSearchParams = (searchParams, params) => {
|
|
11
|
+
baseUpdateUrlSearchParams(searchParams, params);
|
|
12
|
+
if (searchParams.size > 0) {
|
|
13
|
+
searchParams.set('_strict', 'true');
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
export { UnserializableParamError };
|
|
17
|
+
//# sourceMappingURL=url-search-params-serializer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url-search-params-serializer.js","sourceRoot":"","sources":["../src/lib/url-search-params-serializer.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,wBAAwB,IAAI,4BAA4B,EACxD,wBAAwB,EACxB,qBAAqB,IAAI,yBAAyB,GACnD,MAAM,uCAAuC,CAAA;AAE9C,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,MAAc,EAAU,EAAE;IACjE,MAAM,WAAW,GAAG,4BAA4B,CAAC,MAAM,CAAC,CAAA;IACxD,IAAI,WAAW,KAAK,EAAE;QAAE,OAAO,EAAE,CAAA;IAEjC,MAAM,YAAY,GAAG,IAAI,eAAe,CAAC,WAAW,CAAC,CAAA;IACrD,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;IACnC,OAAO,YAAY,CAAC,QAAQ,EAAE,CAAA;AAChC,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,YAA6B,EAC7B,MAAc,EACR,EAAE;IACR,yBAAyB,CAAC,YAAY,EAAE,MAAM,CAAC,CAAA;IAE/C,IAAI,YAAY,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QAC1B,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;IACrC,CAAC;AACH,CAAC,CAAA;AAED,OAAO,EAAe,wBAAwB,EAAE,CAAA"}
|
package/lib/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
declare const seamapiJavascriptHttpVersion = "2.
|
|
1
|
+
declare const seamapiJavascriptHttpVersion = "2.6.1";
|
|
2
2
|
export default seamapiJavascriptHttpVersion;
|
package/lib/version.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@seamapi/http",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.6.1",
|
|
4
4
|
"description": "JavaScript HTTP client for the Seam API written in TypeScript.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "index.js",
|
|
@@ -85,7 +85,7 @@
|
|
|
85
85
|
},
|
|
86
86
|
"devDependencies": {
|
|
87
87
|
"@seamapi/blueprint": "^1.5.1",
|
|
88
|
-
"@seamapi/fake-seam-connect": "^
|
|
88
|
+
"@seamapi/fake-seam-connect": "^2.0.4",
|
|
89
89
|
"@seamapi/smith": "^1.1.0",
|
|
90
90
|
"@seamapi/types": "1.1001.0",
|
|
91
91
|
"@types/jsonwebtoken": "^9.0.6",
|
package/src/index.ts
CHANGED
package/src/lib/client.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { serializeUrlSearchParams } from '@seamapi/url-search-params-serializer'
|
|
2
1
|
import axios, { type AxiosInstance, type AxiosRequestConfig } from 'axios'
|
|
3
2
|
import axiosRetry, { type AxiosRetry, exponentialDelay } from 'axios-retry'
|
|
4
3
|
|
|
5
4
|
import { errorInterceptor } from './error-interceptor.js'
|
|
5
|
+
import { serializeUrlSearchParams } from './url-search-params-serializer.js'
|
|
6
6
|
|
|
7
7
|
export type Client = AxiosInstance
|
|
8
8
|
|
package/src/lib/index.ts
CHANGED
|
@@ -3,141 +3,10 @@
|
|
|
3
3
|
* Do not edit this file.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
+
/**
|
|
7
|
+
* An [access code](https://docs.seam.co/low-level-apis/smart-locks/access-codes) was created.
|
|
8
|
+
*/
|
|
6
9
|
export type SeamEvent =
|
|
7
|
-
| {
|
|
8
|
-
/**
|
|
9
|
-
* Date and time at which the event was created.
|
|
10
|
-
*/
|
|
11
|
-
created_at?: string | undefined
|
|
12
|
-
/**
|
|
13
|
-
* Human-readable description of the event. Persisted when the event is created (so the creating code, including a provider, can supply a tailored description) and otherwise derived from the event.
|
|
14
|
-
*/
|
|
15
|
-
event_description?: string | undefined
|
|
16
|
-
/**
|
|
17
|
-
* ID of the event.
|
|
18
|
-
*/
|
|
19
|
-
event_id?: string | undefined
|
|
20
|
-
|
|
21
|
-
event_type?:
|
|
22
|
-
| 'access_code.created'
|
|
23
|
-
| 'access_code.changed'
|
|
24
|
-
| 'access_code.name_changed'
|
|
25
|
-
| 'access_code.code_changed'
|
|
26
|
-
| 'access_code.time_frame_changed'
|
|
27
|
-
| 'access_code.mutations_requested'
|
|
28
|
-
| 'access_code.scheduled_on_device'
|
|
29
|
-
| 'access_code.set_on_device'
|
|
30
|
-
| 'access_code.removed_from_device'
|
|
31
|
-
| 'access_code.delay_in_setting_on_device'
|
|
32
|
-
| 'access_code.failed_to_set_on_device'
|
|
33
|
-
| 'access_code.deleted'
|
|
34
|
-
| 'access_code.delay_in_removing_from_device'
|
|
35
|
-
| 'access_code.failed_to_remove_from_device'
|
|
36
|
-
| 'access_code.modified_external_to_seam'
|
|
37
|
-
| 'access_code.deleted_external_to_seam'
|
|
38
|
-
| 'access_code.backup_access_code_pulled'
|
|
39
|
-
| 'access_code.unmanaged.converted_to_managed'
|
|
40
|
-
| 'access_code.unmanaged.failed_to_convert_to_managed'
|
|
41
|
-
| 'access_code.unmanaged.created'
|
|
42
|
-
| 'access_code.unmanaged.removed'
|
|
43
|
-
| 'access_grant.created'
|
|
44
|
-
| 'access_grant.deleted'
|
|
45
|
-
| 'access_grant.access_granted_to_all_doors'
|
|
46
|
-
| 'access_grant.access_granted_to_door'
|
|
47
|
-
| 'access_grant.access_to_door_lost'
|
|
48
|
-
| 'access_grant.access_times_changed'
|
|
49
|
-
| 'access_grant.could_not_create_requested_access_methods'
|
|
50
|
-
| 'access_method.issued'
|
|
51
|
-
| 'access_method.revoked'
|
|
52
|
-
| 'access_method.card_encoding_required'
|
|
53
|
-
| 'access_method.deleted'
|
|
54
|
-
| 'access_method.reissued'
|
|
55
|
-
| 'access_method.created'
|
|
56
|
-
| 'access_method.delay_in_issuing'
|
|
57
|
-
| 'access_method.failed_to_issue'
|
|
58
|
-
| 'acs_system.connected'
|
|
59
|
-
| 'acs_system.added'
|
|
60
|
-
| 'acs_system.disconnected'
|
|
61
|
-
| 'acs_credential.deleted'
|
|
62
|
-
| 'acs_credential.issued'
|
|
63
|
-
| 'acs_credential.reissued'
|
|
64
|
-
| 'acs_credential.invalidated'
|
|
65
|
-
| 'acs_user.created'
|
|
66
|
-
| 'acs_user.deleted'
|
|
67
|
-
| 'acs_encoder.added'
|
|
68
|
-
| 'acs_encoder.removed'
|
|
69
|
-
| 'acs_access_group.deleted'
|
|
70
|
-
| 'acs_entrance.added'
|
|
71
|
-
| 'acs_entrance.removed'
|
|
72
|
-
| 'client_session.deleted'
|
|
73
|
-
| 'connected_account.connected'
|
|
74
|
-
| 'connected_account.created'
|
|
75
|
-
| 'connected_account.successful_login'
|
|
76
|
-
| 'connected_account.disconnected'
|
|
77
|
-
| 'connected_account.completed_first_sync'
|
|
78
|
-
| 'connected_account.deleted'
|
|
79
|
-
| 'connected_account.completed_first_sync_after_reconnection'
|
|
80
|
-
| 'connected_account.reauthorization_requested'
|
|
81
|
-
| 'action_attempt.lock_door.succeeded'
|
|
82
|
-
| 'action_attempt.lock_door.failed'
|
|
83
|
-
| 'action_attempt.unlock_door.succeeded'
|
|
84
|
-
| 'action_attempt.unlock_door.failed'
|
|
85
|
-
| 'action_attempt.simulate_keypad_code_entry.succeeded'
|
|
86
|
-
| 'action_attempt.simulate_keypad_code_entry.failed'
|
|
87
|
-
| 'action_attempt.simulate_manual_lock_via_keypad.succeeded'
|
|
88
|
-
| 'action_attempt.simulate_manual_lock_via_keypad.failed'
|
|
89
|
-
| 'connect_webview.login_succeeded'
|
|
90
|
-
| 'connect_webview.login_failed'
|
|
91
|
-
| 'device.connected'
|
|
92
|
-
| 'device.added'
|
|
93
|
-
| 'device.converted_to_unmanaged'
|
|
94
|
-
| 'device.unmanaged.converted_to_managed'
|
|
95
|
-
| 'device.unmanaged.connected'
|
|
96
|
-
| 'device.disconnected'
|
|
97
|
-
| 'device.unmanaged.disconnected'
|
|
98
|
-
| 'device.tampered'
|
|
99
|
-
| 'device.low_battery'
|
|
100
|
-
| 'device.battery_status_changed'
|
|
101
|
-
| 'device.removed'
|
|
102
|
-
| 'device.deleted'
|
|
103
|
-
| 'device.third_party_integration_detected'
|
|
104
|
-
| 'device.third_party_integration_no_longer_detected'
|
|
105
|
-
| 'device.salto.privacy_mode_activated'
|
|
106
|
-
| 'device.salto.privacy_mode_deactivated'
|
|
107
|
-
| 'device.connection_became_flaky'
|
|
108
|
-
| 'device.connection_stabilized'
|
|
109
|
-
| 'device.error.subscription_required'
|
|
110
|
-
| 'device.error.subscription_required.resolved'
|
|
111
|
-
| 'device.accessory_keypad_connected'
|
|
112
|
-
| 'device.accessory_keypad_disconnected'
|
|
113
|
-
| 'noise_sensor.noise_threshold_triggered'
|
|
114
|
-
| 'lock.locked'
|
|
115
|
-
| 'lock.unlocked'
|
|
116
|
-
| 'lock.access_denied'
|
|
117
|
-
| 'thermostat.climate_preset_activated'
|
|
118
|
-
| 'thermostat.manually_adjusted'
|
|
119
|
-
| 'thermostat.temperature_threshold_exceeded'
|
|
120
|
-
| 'thermostat.temperature_threshold_no_longer_exceeded'
|
|
121
|
-
| 'thermostat.temperature_reached_set_point'
|
|
122
|
-
| 'thermostat.temperature_changed'
|
|
123
|
-
| 'device.name_changed'
|
|
124
|
-
| 'camera.activated'
|
|
125
|
-
| 'device.doorbell_rang'
|
|
126
|
-
| 'enrollment_automation.deleted'
|
|
127
|
-
| 'phone.deactivated'
|
|
128
|
-
| 'space.device_membership_changed'
|
|
129
|
-
| 'space.created'
|
|
130
|
-
| 'space.deleted'
|
|
131
|
-
| undefined
|
|
132
|
-
/**
|
|
133
|
-
* Date and time at which the event occurred.
|
|
134
|
-
*/
|
|
135
|
-
occurred_at?: string | undefined
|
|
136
|
-
/**
|
|
137
|
-
* ID of the workspace associated with the event.
|
|
138
|
-
*/
|
|
139
|
-
workspace_id?: string | undefined
|
|
140
|
-
}
|
|
141
10
|
| {
|
|
142
11
|
/**
|
|
143
12
|
* ID of the affected access code.
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { serializeUrlSearchParams } from '@seamapi/url-search-params-serializer'
|
|
2
1
|
import type { Method } from 'axios'
|
|
3
2
|
|
|
4
3
|
import type { Client } from './client.js'
|
|
@@ -9,6 +8,7 @@ import {
|
|
|
9
8
|
resolveActionAttempt,
|
|
10
9
|
} from './resolve-action-attempt.js'
|
|
11
10
|
import type { ActionAttempt } from './resources/action-attempt.js'
|
|
11
|
+
import { serializeUrlSearchParams } from './url-search-params-serializer.js'
|
|
12
12
|
|
|
13
13
|
interface SeamHttpRequestParent {
|
|
14
14
|
readonly client: Client
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import {
|
|
2
|
+
type Params,
|
|
3
|
+
serializeUrlSearchParams as baseSerializeUrlSearchParams,
|
|
4
|
+
UnserializableParamError,
|
|
5
|
+
updateUrlSearchParams as baseUpdateUrlSearchParams,
|
|
6
|
+
} from '@seamapi/url-search-params-serializer'
|
|
7
|
+
|
|
8
|
+
export const serializeUrlSearchParams = (params: Params): string => {
|
|
9
|
+
const queryString = baseSerializeUrlSearchParams(params)
|
|
10
|
+
if (queryString === '') return ''
|
|
11
|
+
|
|
12
|
+
const searchParams = new URLSearchParams(queryString)
|
|
13
|
+
searchParams.set('_strict', 'true')
|
|
14
|
+
return searchParams.toString()
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export const updateUrlSearchParams = (
|
|
18
|
+
searchParams: URLSearchParams,
|
|
19
|
+
params: Params,
|
|
20
|
+
): void => {
|
|
21
|
+
baseUpdateUrlSearchParams(searchParams, params)
|
|
22
|
+
|
|
23
|
+
if (searchParams.size > 0) {
|
|
24
|
+
searchParams.set('_strict', 'true')
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export { type Params, UnserializableParamError }
|
package/src/lib/version.ts
CHANGED