@seamapi/http 0.8.1 → 0.9.0

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.
Files changed (116) hide show
  1. package/README.md +14 -1
  2. package/dist/connect.cjs +314 -141
  3. package/dist/connect.cjs.map +1 -1
  4. package/dist/connect.d.cts +89 -75
  5. package/lib/seam/connect/client.d.ts +0 -1
  6. package/lib/seam/connect/client.js +0 -2
  7. package/lib/seam/connect/client.js.map +1 -1
  8. package/lib/seam/connect/options.d.ts +7 -3
  9. package/lib/seam/connect/options.js +2 -1
  10. package/lib/seam/connect/options.js.map +1 -1
  11. package/lib/seam/connect/parse-options.d.ts +9 -3
  12. package/lib/seam/connect/parse-options.js +25 -2
  13. package/lib/seam/connect/parse-options.js.map +1 -1
  14. package/lib/seam/connect/routes/access-codes-unmanaged.d.ts +2 -1
  15. package/lib/seam/connect/routes/access-codes-unmanaged.js +7 -3
  16. package/lib/seam/connect/routes/access-codes-unmanaged.js.map +1 -1
  17. package/lib/seam/connect/routes/access-codes.d.ts +2 -1
  18. package/lib/seam/connect/routes/access-codes.js +8 -4
  19. package/lib/seam/connect/routes/access-codes.js.map +1 -1
  20. package/lib/seam/connect/routes/acs-access-groups.d.ts +2 -1
  21. package/lib/seam/connect/routes/acs-access-groups.js +7 -3
  22. package/lib/seam/connect/routes/acs-access-groups.js.map +1 -1
  23. package/lib/seam/connect/routes/acs-credentials.d.ts +2 -1
  24. package/lib/seam/connect/routes/acs-credentials.js +7 -3
  25. package/lib/seam/connect/routes/acs-credentials.js.map +1 -1
  26. package/lib/seam/connect/routes/acs-systems.d.ts +2 -1
  27. package/lib/seam/connect/routes/acs-systems.js +7 -3
  28. package/lib/seam/connect/routes/acs-systems.js.map +1 -1
  29. package/lib/seam/connect/routes/acs-users.d.ts +2 -1
  30. package/lib/seam/connect/routes/acs-users.js +7 -3
  31. package/lib/seam/connect/routes/acs-users.js.map +1 -1
  32. package/lib/seam/connect/routes/acs.d.ts +2 -1
  33. package/lib/seam/connect/routes/acs.js +11 -7
  34. package/lib/seam/connect/routes/acs.js.map +1 -1
  35. package/lib/seam/connect/routes/action-attempts.d.ts +4 -8
  36. package/lib/seam/connect/routes/action-attempts.js +15 -7
  37. package/lib/seam/connect/routes/action-attempts.js.map +1 -1
  38. package/lib/seam/connect/routes/client-sessions.d.ts +2 -1
  39. package/lib/seam/connect/routes/client-sessions.js +7 -3
  40. package/lib/seam/connect/routes/client-sessions.js.map +1 -1
  41. package/lib/seam/connect/routes/connect-webviews.d.ts +2 -1
  42. package/lib/seam/connect/routes/connect-webviews.js +7 -3
  43. package/lib/seam/connect/routes/connect-webviews.js.map +1 -1
  44. package/lib/seam/connect/routes/connected-accounts.d.ts +2 -1
  45. package/lib/seam/connect/routes/connected-accounts.js +7 -3
  46. package/lib/seam/connect/routes/connected-accounts.js.map +1 -1
  47. package/lib/seam/connect/routes/devices-unmanaged.d.ts +2 -1
  48. package/lib/seam/connect/routes/devices-unmanaged.js +7 -3
  49. package/lib/seam/connect/routes/devices-unmanaged.js.map +1 -1
  50. package/lib/seam/connect/routes/devices.d.ts +2 -1
  51. package/lib/seam/connect/routes/devices.js +8 -4
  52. package/lib/seam/connect/routes/devices.js.map +1 -1
  53. package/lib/seam/connect/routes/events.d.ts +2 -1
  54. package/lib/seam/connect/routes/events.js +7 -3
  55. package/lib/seam/connect/routes/events.js.map +1 -1
  56. package/lib/seam/connect/routes/locks.d.ts +6 -14
  57. package/lib/seam/connect/routes/locks.js +22 -10
  58. package/lib/seam/connect/routes/locks.js.map +1 -1
  59. package/lib/seam/connect/routes/noise-sensors-noise-thresholds.d.ts +2 -1
  60. package/lib/seam/connect/routes/noise-sensors-noise-thresholds.js +7 -3
  61. package/lib/seam/connect/routes/noise-sensors-noise-thresholds.js.map +1 -1
  62. package/lib/seam/connect/routes/noise-sensors.d.ts +2 -1
  63. package/lib/seam/connect/routes/noise-sensors.js +8 -4
  64. package/lib/seam/connect/routes/noise-sensors.js.map +1 -1
  65. package/lib/seam/connect/routes/thermostats-climate-setting-schedules.d.ts +2 -1
  66. package/lib/seam/connect/routes/thermostats-climate-setting-schedules.js +7 -3
  67. package/lib/seam/connect/routes/thermostats-climate-setting-schedules.js.map +1 -1
  68. package/lib/seam/connect/routes/thermostats.d.ts +2 -1
  69. package/lib/seam/connect/routes/thermostats.js +8 -4
  70. package/lib/seam/connect/routes/thermostats.js.map +1 -1
  71. package/lib/seam/connect/routes/user-identities.d.ts +2 -1
  72. package/lib/seam/connect/routes/user-identities.js +7 -3
  73. package/lib/seam/connect/routes/user-identities.js.map +1 -1
  74. package/lib/seam/connect/routes/webhooks.d.ts +2 -1
  75. package/lib/seam/connect/routes/webhooks.js +7 -3
  76. package/lib/seam/connect/routes/webhooks.js.map +1 -1
  77. package/lib/seam/connect/routes/workspaces.d.ts +2 -1
  78. package/lib/seam/connect/routes/workspaces.js +7 -3
  79. package/lib/seam/connect/routes/workspaces.js.map +1 -1
  80. package/lib/seam/connect/seam-http-multi-workspace.d.ts +2 -1
  81. package/lib/seam/connect/seam-http-multi-workspace.js +5 -4
  82. package/lib/seam/connect/seam-http-multi-workspace.js.map +1 -1
  83. package/lib/seam/connect/seam-http.d.ts +2 -1
  84. package/lib/seam/connect/seam-http.js +21 -17
  85. package/lib/seam/connect/seam-http.js.map +1 -1
  86. package/lib/version.d.ts +1 -1
  87. package/lib/version.js +1 -1
  88. package/package.json +1 -1
  89. package/src/lib/seam/connect/client.ts +0 -3
  90. package/src/lib/seam/connect/options.ts +11 -4
  91. package/src/lib/seam/connect/parse-options.ts +43 -4
  92. package/src/lib/seam/connect/routes/access-codes-unmanaged.ts +14 -3
  93. package/src/lib/seam/connect/routes/access-codes.ts +15 -4
  94. package/src/lib/seam/connect/routes/acs-access-groups.ts +14 -3
  95. package/src/lib/seam/connect/routes/acs-credentials.ts +14 -3
  96. package/src/lib/seam/connect/routes/acs-systems.ts +14 -3
  97. package/src/lib/seam/connect/routes/acs-users.ts +14 -3
  98. package/src/lib/seam/connect/routes/acs.ts +18 -7
  99. package/src/lib/seam/connect/routes/action-attempts.ts +26 -16
  100. package/src/lib/seam/connect/routes/client-sessions.ts +14 -3
  101. package/src/lib/seam/connect/routes/connect-webviews.ts +14 -3
  102. package/src/lib/seam/connect/routes/connected-accounts.ts +14 -3
  103. package/src/lib/seam/connect/routes/devices-unmanaged.ts +14 -3
  104. package/src/lib/seam/connect/routes/devices.ts +15 -4
  105. package/src/lib/seam/connect/routes/events.ts +14 -3
  106. package/src/lib/seam/connect/routes/locks.ts +38 -26
  107. package/src/lib/seam/connect/routes/noise-sensors-noise-thresholds.ts +14 -3
  108. package/src/lib/seam/connect/routes/noise-sensors.ts +18 -4
  109. package/src/lib/seam/connect/routes/thermostats-climate-setting-schedules.ts +14 -3
  110. package/src/lib/seam/connect/routes/thermostats.ts +18 -4
  111. package/src/lib/seam/connect/routes/user-identities.ts +14 -3
  112. package/src/lib/seam/connect/routes/webhooks.ts +14 -3
  113. package/src/lib/seam/connect/routes/workspaces.ts +14 -3
  114. package/src/lib/seam/connect/seam-http-multi-workspace.ts +7 -4
  115. package/src/lib/seam/connect/seam-http.ts +25 -17
  116. package/src/lib/version.ts +1 -1
@@ -22,18 +22,24 @@ import {
22
22
  type SeamHttpOptionsWithClientSessionToken,
23
23
  type SeamHttpOptionsWithConsoleSessionToken,
24
24
  type SeamHttpOptionsWithPersonalAccessToken,
25
+ type SeamHttpRequestOptions,
25
26
  } from 'lib/seam/connect/options.js'
26
- import { parseOptions } from 'lib/seam/connect/parse-options.js'
27
+ import {
28
+ limitToSeamHttpRequestOptions,
29
+ parseOptions,
30
+ } from 'lib/seam/connect/parse-options.js'
27
31
 
28
32
  import { SeamHttpClientSessions } from './client-sessions.js'
29
33
  import { SeamHttpDevicesUnmanaged } from './devices-unmanaged.js'
30
34
 
31
35
  export class SeamHttpDevices {
32
36
  client: Client
37
+ readonly defaults: Required<SeamHttpRequestOptions>
33
38
 
34
39
  constructor(apiKeyOrOptions: string | SeamHttpOptions = {}) {
35
- const clientOptions = parseOptions(apiKeyOrOptions)
36
- this.client = createClient(clientOptions)
40
+ const options = parseOptions(apiKeyOrOptions)
41
+ this.client = 'client' in options ? options.client : createClient(options)
42
+ this.defaults = limitToSeamHttpRequestOptions(options)
37
43
  }
38
44
 
39
45
  static fromClient(
@@ -79,6 +85,11 @@ export class SeamHttpDevices {
79
85
  ): Promise<SeamHttpDevices> {
80
86
  warnOnInsecureuserIdentifierKey(userIdentifierKey)
81
87
  const clientOptions = parseOptions({ ...options, publishableKey })
88
+ if (isSeamHttpOptionsWithClient(clientOptions)) {
89
+ throw new SeamHttpInvalidOptionsError(
90
+ 'The client option cannot be used with SeamHttp.fromPublishableKey',
91
+ )
92
+ }
82
93
  const client = createClient(clientOptions)
83
94
  const clientSessions = SeamHttpClientSessions.fromClient(client)
84
95
  const { token } = await clientSessions.getOrCreate({
@@ -122,7 +133,7 @@ export class SeamHttpDevices {
122
133
  }
123
134
 
124
135
  get unmanaged(): SeamHttpDevicesUnmanaged {
125
- return SeamHttpDevicesUnmanaged.fromClient(this.client)
136
+ return SeamHttpDevicesUnmanaged.fromClient(this.client, this.defaults)
126
137
  }
127
138
 
128
139
  async delete(body?: DevicesDeleteBody): Promise<void> {
@@ -22,17 +22,23 @@ import {
22
22
  type SeamHttpOptionsWithClientSessionToken,
23
23
  type SeamHttpOptionsWithConsoleSessionToken,
24
24
  type SeamHttpOptionsWithPersonalAccessToken,
25
+ type SeamHttpRequestOptions,
25
26
  } from 'lib/seam/connect/options.js'
26
- import { parseOptions } from 'lib/seam/connect/parse-options.js'
27
+ import {
28
+ limitToSeamHttpRequestOptions,
29
+ parseOptions,
30
+ } from 'lib/seam/connect/parse-options.js'
27
31
 
28
32
  import { SeamHttpClientSessions } from './client-sessions.js'
29
33
 
30
34
  export class SeamHttpEvents {
31
35
  client: Client
36
+ readonly defaults: Required<SeamHttpRequestOptions>
32
37
 
33
38
  constructor(apiKeyOrOptions: string | SeamHttpOptions = {}) {
34
- const clientOptions = parseOptions(apiKeyOrOptions)
35
- this.client = createClient(clientOptions)
39
+ const options = parseOptions(apiKeyOrOptions)
40
+ this.client = 'client' in options ? options.client : createClient(options)
41
+ this.defaults = limitToSeamHttpRequestOptions(options)
36
42
  }
37
43
 
38
44
  static fromClient(
@@ -78,6 +84,11 @@ export class SeamHttpEvents {
78
84
  ): Promise<SeamHttpEvents> {
79
85
  warnOnInsecureuserIdentifierKey(userIdentifierKey)
80
86
  const clientOptions = parseOptions({ ...options, publishableKey })
87
+ if (isSeamHttpOptionsWithClient(clientOptions)) {
88
+ throw new SeamHttpInvalidOptionsError(
89
+ 'The client option cannot be used with SeamHttp.fromPublishableKey',
90
+ )
91
+ }
81
92
  const client = createClient(clientOptions)
82
93
  const clientSessions = SeamHttpClientSessions.fromClient(client)
83
94
  const { token } = await clientSessions.getOrCreate({
@@ -22,22 +22,25 @@ import {
22
22
  type SeamHttpOptionsWithClientSessionToken,
23
23
  type SeamHttpOptionsWithConsoleSessionToken,
24
24
  type SeamHttpOptionsWithPersonalAccessToken,
25
+ type SeamHttpRequestOptions,
25
26
  } from 'lib/seam/connect/options.js'
26
- import { parseOptions } from 'lib/seam/connect/parse-options.js'
27
27
  import {
28
- resolveActionAttempt,
29
- type ResolveActionAttemptOptions,
30
- } from 'lib/seam/connect/resolve-action-attempt.js'
28
+ limitToSeamHttpRequestOptions,
29
+ parseOptions,
30
+ } from 'lib/seam/connect/parse-options.js'
31
+ import { resolveActionAttempt } from 'lib/seam/connect/resolve-action-attempt.js'
31
32
 
32
33
  import { SeamHttpActionAttempts } from './action-attempts.js'
33
34
  import { SeamHttpClientSessions } from './client-sessions.js'
34
35
 
35
36
  export class SeamHttpLocks {
36
37
  client: Client
38
+ readonly defaults: Required<SeamHttpRequestOptions>
37
39
 
38
40
  constructor(apiKeyOrOptions: string | SeamHttpOptions = {}) {
39
- const clientOptions = parseOptions(apiKeyOrOptions)
40
- this.client = createClient(clientOptions)
41
+ const options = parseOptions(apiKeyOrOptions)
42
+ this.client = 'client' in options ? options.client : createClient(options)
43
+ this.defaults = limitToSeamHttpRequestOptions(options)
41
44
  }
42
45
 
43
46
  static fromClient(
@@ -83,6 +86,11 @@ export class SeamHttpLocks {
83
86
  ): Promise<SeamHttpLocks> {
84
87
  warnOnInsecureuserIdentifierKey(userIdentifierKey)
85
88
  const clientOptions = parseOptions({ ...options, publishableKey })
89
+ if (isSeamHttpOptionsWithClient(clientOptions)) {
90
+ throw new SeamHttpInvalidOptionsError(
91
+ 'The client option cannot be used with SeamHttp.fromPublishableKey',
92
+ )
93
+ }
86
94
  const client = createClient(clientOptions)
87
95
  const clientSessions = SeamHttpClientSessions.fromClient(client)
88
96
  const { token } = await clientSessions.getOrCreate({
@@ -147,21 +155,22 @@ export class SeamHttpLocks {
147
155
 
148
156
  async lockDoor(
149
157
  body?: LocksLockDoorBody,
150
- {
151
- waitForActionAttempt = false,
152
- }: {
153
- waitForActionAttempt?: boolean | Partial<ResolveActionAttemptOptions>
154
- } = {},
158
+ options: Pick<SeamHttpRequestOptions, 'waitForActionAttempt'> = {},
155
159
  ): Promise<LocksLockDoorResponse['action_attempt']> {
156
160
  const { data } = await this.client.request<LocksLockDoorResponse>({
157
161
  url: '/locks/lock_door',
158
162
  method: 'post',
159
163
  data: body,
160
164
  })
161
- if (waitForActionAttempt != null && waitForActionAttempt !== false) {
165
+ const waitForActionAttempt =
166
+ options.waitForActionAttempt ?? this.defaults.waitForActionAttempt
167
+ if (waitForActionAttempt !== false) {
162
168
  return await resolveActionAttempt(
163
169
  data.action_attempt,
164
- SeamHttpActionAttempts.fromClient(this.client),
170
+ SeamHttpActionAttempts.fromClient(this.client, {
171
+ ...this.defaults,
172
+ waitForActionAttempt: false,
173
+ }),
165
174
  typeof waitForActionAttempt === 'boolean' ? {} : waitForActionAttempt,
166
175
  )
167
176
  }
@@ -170,21 +179,22 @@ export class SeamHttpLocks {
170
179
 
171
180
  async unlockDoor(
172
181
  body?: LocksUnlockDoorBody,
173
- {
174
- waitForActionAttempt = false,
175
- }: {
176
- waitForActionAttempt?: boolean | Partial<ResolveActionAttemptOptions>
177
- } = {},
182
+ options: Pick<SeamHttpRequestOptions, 'waitForActionAttempt'> = {},
178
183
  ): Promise<LocksUnlockDoorResponse['action_attempt']> {
179
184
  const { data } = await this.client.request<LocksUnlockDoorResponse>({
180
185
  url: '/locks/unlock_door',
181
186
  method: 'post',
182
187
  data: body,
183
188
  })
184
- if (waitForActionAttempt != null && waitForActionAttempt !== false) {
189
+ const waitForActionAttempt =
190
+ options.waitForActionAttempt ?? this.defaults.waitForActionAttempt
191
+ if (waitForActionAttempt !== false) {
185
192
  return await resolveActionAttempt(
186
193
  data.action_attempt,
187
- SeamHttpActionAttempts.fromClient(this.client),
194
+ SeamHttpActionAttempts.fromClient(this.client, {
195
+ ...this.defaults,
196
+ waitForActionAttempt: false,
197
+ }),
188
198
  typeof waitForActionAttempt === 'boolean' ? {} : waitForActionAttempt,
189
199
  )
190
200
  }
@@ -214,9 +224,10 @@ export type LocksLockDoorResponse = SetNonNullable<
214
224
  Required<RouteResponse<'/locks/lock_door'>>
215
225
  >
216
226
 
217
- export interface LocksLockDoorOptions {
218
- waitForActionAttempt?: boolean | Partial<ResolveActionAttemptOptions>
219
- }
227
+ export type LocksLockDoorOptions = Pick<
228
+ SeamHttpRequestOptions,
229
+ 'waitForActionAttempt'
230
+ >
220
231
 
221
232
  export type LocksUnlockDoorBody = RouteRequestBody<'/locks/unlock_door'>
222
233
 
@@ -224,6 +235,7 @@ export type LocksUnlockDoorResponse = SetNonNullable<
224
235
  Required<RouteResponse<'/locks/unlock_door'>>
225
236
  >
226
237
 
227
- export interface LocksUnlockDoorOptions {
228
- waitForActionAttempt?: boolean | Partial<ResolveActionAttemptOptions>
229
- }
238
+ export type LocksUnlockDoorOptions = Pick<
239
+ SeamHttpRequestOptions,
240
+ 'waitForActionAttempt'
241
+ >
@@ -22,17 +22,23 @@ import {
22
22
  type SeamHttpOptionsWithClientSessionToken,
23
23
  type SeamHttpOptionsWithConsoleSessionToken,
24
24
  type SeamHttpOptionsWithPersonalAccessToken,
25
+ type SeamHttpRequestOptions,
25
26
  } from 'lib/seam/connect/options.js'
26
- import { parseOptions } from 'lib/seam/connect/parse-options.js'
27
+ import {
28
+ limitToSeamHttpRequestOptions,
29
+ parseOptions,
30
+ } from 'lib/seam/connect/parse-options.js'
27
31
 
28
32
  import { SeamHttpClientSessions } from './client-sessions.js'
29
33
 
30
34
  export class SeamHttpNoiseSensorsNoiseThresholds {
31
35
  client: Client
36
+ readonly defaults: Required<SeamHttpRequestOptions>
32
37
 
33
38
  constructor(apiKeyOrOptions: string | SeamHttpOptions = {}) {
34
- const clientOptions = parseOptions(apiKeyOrOptions)
35
- this.client = createClient(clientOptions)
39
+ const options = parseOptions(apiKeyOrOptions)
40
+ this.client = 'client' in options ? options.client : createClient(options)
41
+ this.defaults = limitToSeamHttpRequestOptions(options)
36
42
  }
37
43
 
38
44
  static fromClient(
@@ -78,6 +84,11 @@ export class SeamHttpNoiseSensorsNoiseThresholds {
78
84
  ): Promise<SeamHttpNoiseSensorsNoiseThresholds> {
79
85
  warnOnInsecureuserIdentifierKey(userIdentifierKey)
80
86
  const clientOptions = parseOptions({ ...options, publishableKey })
87
+ if (isSeamHttpOptionsWithClient(clientOptions)) {
88
+ throw new SeamHttpInvalidOptionsError(
89
+ 'The client option cannot be used with SeamHttp.fromPublishableKey',
90
+ )
91
+ }
81
92
  const client = createClient(clientOptions)
82
93
  const clientSessions = SeamHttpClientSessions.fromClient(client)
83
94
  const { token } = await clientSessions.getOrCreate({
@@ -19,18 +19,24 @@ import {
19
19
  type SeamHttpOptionsWithClientSessionToken,
20
20
  type SeamHttpOptionsWithConsoleSessionToken,
21
21
  type SeamHttpOptionsWithPersonalAccessToken,
22
+ type SeamHttpRequestOptions,
22
23
  } from 'lib/seam/connect/options.js'
23
- import { parseOptions } from 'lib/seam/connect/parse-options.js'
24
+ import {
25
+ limitToSeamHttpRequestOptions,
26
+ parseOptions,
27
+ } from 'lib/seam/connect/parse-options.js'
24
28
 
25
29
  import { SeamHttpClientSessions } from './client-sessions.js'
26
30
  import { SeamHttpNoiseSensorsNoiseThresholds } from './noise-sensors-noise-thresholds.js'
27
31
 
28
32
  export class SeamHttpNoiseSensors {
29
33
  client: Client
34
+ readonly defaults: Required<SeamHttpRequestOptions>
30
35
 
31
36
  constructor(apiKeyOrOptions: string | SeamHttpOptions = {}) {
32
- const clientOptions = parseOptions(apiKeyOrOptions)
33
- this.client = createClient(clientOptions)
37
+ const options = parseOptions(apiKeyOrOptions)
38
+ this.client = 'client' in options ? options.client : createClient(options)
39
+ this.defaults = limitToSeamHttpRequestOptions(options)
34
40
  }
35
41
 
36
42
  static fromClient(
@@ -76,6 +82,11 @@ export class SeamHttpNoiseSensors {
76
82
  ): Promise<SeamHttpNoiseSensors> {
77
83
  warnOnInsecureuserIdentifierKey(userIdentifierKey)
78
84
  const clientOptions = parseOptions({ ...options, publishableKey })
85
+ if (isSeamHttpOptionsWithClient(clientOptions)) {
86
+ throw new SeamHttpInvalidOptionsError(
87
+ 'The client option cannot be used with SeamHttp.fromPublishableKey',
88
+ )
89
+ }
79
90
  const client = createClient(clientOptions)
80
91
  const clientSessions = SeamHttpClientSessions.fromClient(client)
81
92
  const { token } = await clientSessions.getOrCreate({
@@ -119,6 +130,9 @@ export class SeamHttpNoiseSensors {
119
130
  }
120
131
 
121
132
  get noiseThresholds(): SeamHttpNoiseSensorsNoiseThresholds {
122
- return SeamHttpNoiseSensorsNoiseThresholds.fromClient(this.client)
133
+ return SeamHttpNoiseSensorsNoiseThresholds.fromClient(
134
+ this.client,
135
+ this.defaults,
136
+ )
123
137
  }
124
138
  }
@@ -22,17 +22,23 @@ import {
22
22
  type SeamHttpOptionsWithClientSessionToken,
23
23
  type SeamHttpOptionsWithConsoleSessionToken,
24
24
  type SeamHttpOptionsWithPersonalAccessToken,
25
+ type SeamHttpRequestOptions,
25
26
  } from 'lib/seam/connect/options.js'
26
- import { parseOptions } from 'lib/seam/connect/parse-options.js'
27
+ import {
28
+ limitToSeamHttpRequestOptions,
29
+ parseOptions,
30
+ } from 'lib/seam/connect/parse-options.js'
27
31
 
28
32
  import { SeamHttpClientSessions } from './client-sessions.js'
29
33
 
30
34
  export class SeamHttpThermostatsClimateSettingSchedules {
31
35
  client: Client
36
+ readonly defaults: Required<SeamHttpRequestOptions>
32
37
 
33
38
  constructor(apiKeyOrOptions: string | SeamHttpOptions = {}) {
34
- const clientOptions = parseOptions(apiKeyOrOptions)
35
- this.client = createClient(clientOptions)
39
+ const options = parseOptions(apiKeyOrOptions)
40
+ this.client = 'client' in options ? options.client : createClient(options)
41
+ this.defaults = limitToSeamHttpRequestOptions(options)
36
42
  }
37
43
 
38
44
  static fromClient(
@@ -78,6 +84,11 @@ export class SeamHttpThermostatsClimateSettingSchedules {
78
84
  ): Promise<SeamHttpThermostatsClimateSettingSchedules> {
79
85
  warnOnInsecureuserIdentifierKey(userIdentifierKey)
80
86
  const clientOptions = parseOptions({ ...options, publishableKey })
87
+ if (isSeamHttpOptionsWithClient(clientOptions)) {
88
+ throw new SeamHttpInvalidOptionsError(
89
+ 'The client option cannot be used with SeamHttp.fromPublishableKey',
90
+ )
91
+ }
81
92
  const client = createClient(clientOptions)
82
93
  const clientSessions = SeamHttpClientSessions.fromClient(client)
83
94
  const { token } = await clientSessions.getOrCreate({
@@ -22,18 +22,24 @@ import {
22
22
  type SeamHttpOptionsWithClientSessionToken,
23
23
  type SeamHttpOptionsWithConsoleSessionToken,
24
24
  type SeamHttpOptionsWithPersonalAccessToken,
25
+ type SeamHttpRequestOptions,
25
26
  } from 'lib/seam/connect/options.js'
26
- import { parseOptions } from 'lib/seam/connect/parse-options.js'
27
+ import {
28
+ limitToSeamHttpRequestOptions,
29
+ parseOptions,
30
+ } from 'lib/seam/connect/parse-options.js'
27
31
 
28
32
  import { SeamHttpClientSessions } from './client-sessions.js'
29
33
  import { SeamHttpThermostatsClimateSettingSchedules } from './thermostats-climate-setting-schedules.js'
30
34
 
31
35
  export class SeamHttpThermostats {
32
36
  client: Client
37
+ readonly defaults: Required<SeamHttpRequestOptions>
33
38
 
34
39
  constructor(apiKeyOrOptions: string | SeamHttpOptions = {}) {
35
- const clientOptions = parseOptions(apiKeyOrOptions)
36
- this.client = createClient(clientOptions)
40
+ const options = parseOptions(apiKeyOrOptions)
41
+ this.client = 'client' in options ? options.client : createClient(options)
42
+ this.defaults = limitToSeamHttpRequestOptions(options)
37
43
  }
38
44
 
39
45
  static fromClient(
@@ -79,6 +85,11 @@ export class SeamHttpThermostats {
79
85
  ): Promise<SeamHttpThermostats> {
80
86
  warnOnInsecureuserIdentifierKey(userIdentifierKey)
81
87
  const clientOptions = parseOptions({ ...options, publishableKey })
88
+ if (isSeamHttpOptionsWithClient(clientOptions)) {
89
+ throw new SeamHttpInvalidOptionsError(
90
+ 'The client option cannot be used with SeamHttp.fromPublishableKey',
91
+ )
92
+ }
82
93
  const client = createClient(clientOptions)
83
94
  const clientSessions = SeamHttpClientSessions.fromClient(client)
84
95
  const { token } = await clientSessions.getOrCreate({
@@ -122,7 +133,10 @@ export class SeamHttpThermostats {
122
133
  }
123
134
 
124
135
  get climateSettingSchedules(): SeamHttpThermostatsClimateSettingSchedules {
125
- return SeamHttpThermostatsClimateSettingSchedules.fromClient(this.client)
136
+ return SeamHttpThermostatsClimateSettingSchedules.fromClient(
137
+ this.client,
138
+ this.defaults,
139
+ )
126
140
  }
127
141
 
128
142
  async cool(body?: ThermostatsCoolBody): Promise<void> {
@@ -22,17 +22,23 @@ import {
22
22
  type SeamHttpOptionsWithClientSessionToken,
23
23
  type SeamHttpOptionsWithConsoleSessionToken,
24
24
  type SeamHttpOptionsWithPersonalAccessToken,
25
+ type SeamHttpRequestOptions,
25
26
  } from 'lib/seam/connect/options.js'
26
- import { parseOptions } from 'lib/seam/connect/parse-options.js'
27
+ import {
28
+ limitToSeamHttpRequestOptions,
29
+ parseOptions,
30
+ } from 'lib/seam/connect/parse-options.js'
27
31
 
28
32
  import { SeamHttpClientSessions } from './client-sessions.js'
29
33
 
30
34
  export class SeamHttpUserIdentities {
31
35
  client: Client
36
+ readonly defaults: Required<SeamHttpRequestOptions>
32
37
 
33
38
  constructor(apiKeyOrOptions: string | SeamHttpOptions = {}) {
34
- const clientOptions = parseOptions(apiKeyOrOptions)
35
- this.client = createClient(clientOptions)
39
+ const options = parseOptions(apiKeyOrOptions)
40
+ this.client = 'client' in options ? options.client : createClient(options)
41
+ this.defaults = limitToSeamHttpRequestOptions(options)
36
42
  }
37
43
 
38
44
  static fromClient(
@@ -78,6 +84,11 @@ export class SeamHttpUserIdentities {
78
84
  ): Promise<SeamHttpUserIdentities> {
79
85
  warnOnInsecureuserIdentifierKey(userIdentifierKey)
80
86
  const clientOptions = parseOptions({ ...options, publishableKey })
87
+ if (isSeamHttpOptionsWithClient(clientOptions)) {
88
+ throw new SeamHttpInvalidOptionsError(
89
+ 'The client option cannot be used with SeamHttp.fromPublishableKey',
90
+ )
91
+ }
81
92
  const client = createClient(clientOptions)
82
93
  const clientSessions = SeamHttpClientSessions.fromClient(client)
83
94
  const { token } = await clientSessions.getOrCreate({
@@ -26,17 +26,23 @@ import {
26
26
  type SeamHttpOptionsWithClientSessionToken,
27
27
  type SeamHttpOptionsWithConsoleSessionToken,
28
28
  type SeamHttpOptionsWithPersonalAccessToken,
29
+ type SeamHttpRequestOptions,
29
30
  } from 'lib/seam/connect/options.js'
30
- import { parseOptions } from 'lib/seam/connect/parse-options.js'
31
+ import {
32
+ limitToSeamHttpRequestOptions,
33
+ parseOptions,
34
+ } from 'lib/seam/connect/parse-options.js'
31
35
 
32
36
  import { SeamHttpClientSessions } from './client-sessions.js'
33
37
 
34
38
  export class SeamHttpWebhooks {
35
39
  client: Client
40
+ readonly defaults: Required<SeamHttpRequestOptions>
36
41
 
37
42
  constructor(apiKeyOrOptions: string | SeamHttpOptions = {}) {
38
- const clientOptions = parseOptions(apiKeyOrOptions)
39
- this.client = createClient(clientOptions)
43
+ const options = parseOptions(apiKeyOrOptions)
44
+ this.client = 'client' in options ? options.client : createClient(options)
45
+ this.defaults = limitToSeamHttpRequestOptions(options)
40
46
  }
41
47
 
42
48
  static fromClient(
@@ -82,6 +88,11 @@ export class SeamHttpWebhooks {
82
88
  ): Promise<SeamHttpWebhooks> {
83
89
  warnOnInsecureuserIdentifierKey(userIdentifierKey)
84
90
  const clientOptions = parseOptions({ ...options, publishableKey })
91
+ if (isSeamHttpOptionsWithClient(clientOptions)) {
92
+ throw new SeamHttpInvalidOptionsError(
93
+ 'The client option cannot be used with SeamHttp.fromPublishableKey',
94
+ )
95
+ }
85
96
  const client = createClient(clientOptions)
86
97
  const clientSessions = SeamHttpClientSessions.fromClient(client)
87
98
  const { token } = await clientSessions.getOrCreate({
@@ -26,17 +26,23 @@ import {
26
26
  type SeamHttpOptionsWithClientSessionToken,
27
27
  type SeamHttpOptionsWithConsoleSessionToken,
28
28
  type SeamHttpOptionsWithPersonalAccessToken,
29
+ type SeamHttpRequestOptions,
29
30
  } from 'lib/seam/connect/options.js'
30
- import { parseOptions } from 'lib/seam/connect/parse-options.js'
31
+ import {
32
+ limitToSeamHttpRequestOptions,
33
+ parseOptions,
34
+ } from 'lib/seam/connect/parse-options.js'
31
35
 
32
36
  import { SeamHttpClientSessions } from './client-sessions.js'
33
37
 
34
38
  export class SeamHttpWorkspaces {
35
39
  client: Client
40
+ readonly defaults: Required<SeamHttpRequestOptions>
36
41
 
37
42
  constructor(apiKeyOrOptions: string | SeamHttpOptions = {}) {
38
- const clientOptions = parseOptions(apiKeyOrOptions)
39
- this.client = createClient(clientOptions)
43
+ const options = parseOptions(apiKeyOrOptions)
44
+ this.client = 'client' in options ? options.client : createClient(options)
45
+ this.defaults = limitToSeamHttpRequestOptions(options)
40
46
  }
41
47
 
42
48
  static fromClient(
@@ -82,6 +88,11 @@ export class SeamHttpWorkspaces {
82
88
  ): Promise<SeamHttpWorkspaces> {
83
89
  warnOnInsecureuserIdentifierKey(userIdentifierKey)
84
90
  const clientOptions = parseOptions({ ...options, publishableKey })
91
+ if (isSeamHttpOptionsWithClient(clientOptions)) {
92
+ throw new SeamHttpInvalidOptionsError(
93
+ 'The client option cannot be used with SeamHttp.fromPublishableKey',
94
+ )
95
+ }
85
96
  const client = createClient(clientOptions)
86
97
  const clientSessions = SeamHttpClientSessions.fromClient(client)
87
98
  const { token } = await clientSessions.getOrCreate({
@@ -8,16 +8,19 @@ import {
8
8
  type SeamHttpMultiWorkspaceOptionsWithClient,
9
9
  type SeamHttpMultiWorkspaceOptionsWithConsoleSessionToken,
10
10
  type SeamHttpMultiWorkspaceOptionsWithPersonalAccessToken,
11
+ type SeamHttpRequestOptions,
11
12
  } from './options.js'
12
- import { parseOptions } from './parse-options.js'
13
+ import { limitToSeamHttpRequestOptions, parseOptions } from './parse-options.js'
13
14
  import { SeamHttpWorkspaces } from './routes/index.js'
14
15
 
15
16
  export class SeamHttpMultiWorkspace {
16
17
  client: Client
18
+ readonly defaults: Required<SeamHttpRequestOptions>
17
19
 
18
20
  constructor(options: SeamHttpMultiWorkspaceOptions) {
19
- const clientOptions = parseOptions(options)
20
- this.client = createClient(clientOptions)
21
+ const opts = parseOptions(options)
22
+ this.client = 'client' in opts ? opts.client : createClient(opts)
23
+ this.defaults = limitToSeamHttpRequestOptions(opts)
21
24
  }
22
25
 
23
26
  static fromClient(
@@ -72,6 +75,6 @@ export class SeamHttpMultiWorkspace {
72
75
  }
73
76
 
74
77
  get workspaces(): SeamHttpWorkspaces {
75
- return SeamHttpWorkspaces.fromClient(this.client)
78
+ return SeamHttpWorkspaces.fromClient(this.client, this.defaults)
76
79
  }
77
80
  }
@@ -14,8 +14,9 @@ import {
14
14
  type SeamHttpOptionsWithClientSessionToken,
15
15
  type SeamHttpOptionsWithConsoleSessionToken,
16
16
  type SeamHttpOptionsWithPersonalAccessToken,
17
+ type SeamHttpRequestOptions,
17
18
  } from './options.js'
18
- import { parseOptions } from './parse-options.js'
19
+ import { limitToSeamHttpRequestOptions, parseOptions } from './parse-options.js'
19
20
  import {
20
21
  SeamHttpAccessCodes,
21
22
  SeamHttpAcs,
@@ -35,10 +36,12 @@ import {
35
36
 
36
37
  export class SeamHttp {
37
38
  client: Client
39
+ readonly defaults: Required<SeamHttpRequestOptions>
38
40
 
39
41
  constructor(apiKeyOrOptions: string | SeamHttpOptions = {}) {
40
- const clientOptions = parseOptions(apiKeyOrOptions)
41
- this.client = createClient(clientOptions)
42
+ const options = parseOptions(apiKeyOrOptions)
43
+ this.client = 'client' in options ? options.client : createClient(options)
44
+ this.defaults = limitToSeamHttpRequestOptions(options)
42
45
  }
43
46
 
44
47
  static fromClient(
@@ -84,6 +87,11 @@ export class SeamHttp {
84
87
  ): Promise<SeamHttp> {
85
88
  warnOnInsecureuserIdentifierKey(userIdentifierKey)
86
89
  const clientOptions = parseOptions({ ...options, publishableKey })
90
+ if (isSeamHttpOptionsWithClient(clientOptions)) {
91
+ throw new SeamHttpInvalidOptionsError(
92
+ 'The client option cannot be used with SeamHttp.fromPublishableKey',
93
+ )
94
+ }
87
95
  const client = createClient(clientOptions)
88
96
  const clientSessions = SeamHttpClientSessions.fromClient(client)
89
97
  const { token } = await clientSessions.getOrCreate({
@@ -127,58 +135,58 @@ export class SeamHttp {
127
135
  }
128
136
 
129
137
  get accessCodes(): SeamHttpAccessCodes {
130
- return SeamHttpAccessCodes.fromClient(this.client)
138
+ return SeamHttpAccessCodes.fromClient(this.client, this.defaults)
131
139
  }
132
140
 
133
141
  get acs(): SeamHttpAcs {
134
- return SeamHttpAcs.fromClient(this.client)
142
+ return SeamHttpAcs.fromClient(this.client, this.defaults)
135
143
  }
136
144
 
137
145
  get actionAttempts(): SeamHttpActionAttempts {
138
- return SeamHttpActionAttempts.fromClient(this.client)
146
+ return SeamHttpActionAttempts.fromClient(this.client, this.defaults)
139
147
  }
140
148
 
141
149
  get clientSessions(): SeamHttpClientSessions {
142
- return SeamHttpClientSessions.fromClient(this.client)
150
+ return SeamHttpClientSessions.fromClient(this.client, this.defaults)
143
151
  }
144
152
 
145
153
  get connectedAccounts(): SeamHttpConnectedAccounts {
146
- return SeamHttpConnectedAccounts.fromClient(this.client)
154
+ return SeamHttpConnectedAccounts.fromClient(this.client, this.defaults)
147
155
  }
148
156
 
149
157
  get connectWebviews(): SeamHttpConnectWebviews {
150
- return SeamHttpConnectWebviews.fromClient(this.client)
158
+ return SeamHttpConnectWebviews.fromClient(this.client, this.defaults)
151
159
  }
152
160
 
153
161
  get devices(): SeamHttpDevices {
154
- return SeamHttpDevices.fromClient(this.client)
162
+ return SeamHttpDevices.fromClient(this.client, this.defaults)
155
163
  }
156
164
 
157
165
  get events(): SeamHttpEvents {
158
- return SeamHttpEvents.fromClient(this.client)
166
+ return SeamHttpEvents.fromClient(this.client, this.defaults)
159
167
  }
160
168
 
161
169
  get locks(): SeamHttpLocks {
162
- return SeamHttpLocks.fromClient(this.client)
170
+ return SeamHttpLocks.fromClient(this.client, this.defaults)
163
171
  }
164
172
 
165
173
  get noiseSensors(): SeamHttpNoiseSensors {
166
- return SeamHttpNoiseSensors.fromClient(this.client)
174
+ return SeamHttpNoiseSensors.fromClient(this.client, this.defaults)
167
175
  }
168
176
 
169
177
  get thermostats(): SeamHttpThermostats {
170
- return SeamHttpThermostats.fromClient(this.client)
178
+ return SeamHttpThermostats.fromClient(this.client, this.defaults)
171
179
  }
172
180
 
173
181
  get userIdentities(): SeamHttpUserIdentities {
174
- return SeamHttpUserIdentities.fromClient(this.client)
182
+ return SeamHttpUserIdentities.fromClient(this.client, this.defaults)
175
183
  }
176
184
 
177
185
  get webhooks(): SeamHttpWebhooks {
178
- return SeamHttpWebhooks.fromClient(this.client)
186
+ return SeamHttpWebhooks.fromClient(this.client, this.defaults)
179
187
  }
180
188
 
181
189
  get workspaces(): SeamHttpWorkspaces {
182
- return SeamHttpWorkspaces.fromClient(this.client)
190
+ return SeamHttpWorkspaces.fromClient(this.client, this.defaults)
183
191
  }
184
192
  }
@@ -1,3 +1,3 @@
1
- const seamapiJavascriptHttpVersion = '0.8.1'
1
+ const seamapiJavascriptHttpVersion = '0.9.0'
2
2
 
3
3
  export default seamapiJavascriptHttpVersion