@seamapi/http 0.4.0 → 0.5.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 (103) hide show
  1. package/README.md +212 -1
  2. package/dist/connect.cjs +549 -4
  3. package/dist/connect.cjs.map +1 -1
  4. package/dist/connect.d.cts +56 -2
  5. package/lib/seam/connect/auth.js +55 -4
  6. package/lib/seam/connect/auth.js.map +1 -1
  7. package/lib/seam/connect/options.d.ts +11 -1
  8. package/lib/seam/connect/options.js +51 -1
  9. package/lib/seam/connect/options.js.map +1 -1
  10. package/lib/seam/connect/routes/access-codes-unmanaged.d.ts +3 -1
  11. package/lib/seam/connect/routes/access-codes-unmanaged.js +15 -1
  12. package/lib/seam/connect/routes/access-codes-unmanaged.js.map +1 -1
  13. package/lib/seam/connect/routes/access-codes.d.ts +3 -1
  14. package/lib/seam/connect/routes/access-codes.js +15 -1
  15. package/lib/seam/connect/routes/access-codes.js.map +1 -1
  16. package/lib/seam/connect/routes/acs-access-groups.d.ts +3 -1
  17. package/lib/seam/connect/routes/acs-access-groups.js +15 -1
  18. package/lib/seam/connect/routes/acs-access-groups.js.map +1 -1
  19. package/lib/seam/connect/routes/acs-credentials.d.ts +3 -1
  20. package/lib/seam/connect/routes/acs-credentials.js +15 -1
  21. package/lib/seam/connect/routes/acs-credentials.js.map +1 -1
  22. package/lib/seam/connect/routes/acs-systems.d.ts +3 -1
  23. package/lib/seam/connect/routes/acs-systems.js +15 -1
  24. package/lib/seam/connect/routes/acs-systems.js.map +1 -1
  25. package/lib/seam/connect/routes/acs-users.d.ts +3 -1
  26. package/lib/seam/connect/routes/acs-users.js +15 -1
  27. package/lib/seam/connect/routes/acs-users.js.map +1 -1
  28. package/lib/seam/connect/routes/acs.d.ts +3 -1
  29. package/lib/seam/connect/routes/acs.js +15 -1
  30. package/lib/seam/connect/routes/acs.js.map +1 -1
  31. package/lib/seam/connect/routes/action-attempts.d.ts +3 -1
  32. package/lib/seam/connect/routes/action-attempts.js +15 -1
  33. package/lib/seam/connect/routes/action-attempts.js.map +1 -1
  34. package/lib/seam/connect/routes/client-sessions.d.ts +3 -1
  35. package/lib/seam/connect/routes/client-sessions.js +15 -1
  36. package/lib/seam/connect/routes/client-sessions.js.map +1 -1
  37. package/lib/seam/connect/routes/connect-webviews.d.ts +3 -1
  38. package/lib/seam/connect/routes/connect-webviews.js +15 -1
  39. package/lib/seam/connect/routes/connect-webviews.js.map +1 -1
  40. package/lib/seam/connect/routes/connected-accounts.d.ts +3 -1
  41. package/lib/seam/connect/routes/connected-accounts.js +15 -1
  42. package/lib/seam/connect/routes/connected-accounts.js.map +1 -1
  43. package/lib/seam/connect/routes/devices-unmanaged.d.ts +3 -1
  44. package/lib/seam/connect/routes/devices-unmanaged.js +15 -1
  45. package/lib/seam/connect/routes/devices-unmanaged.js.map +1 -1
  46. package/lib/seam/connect/routes/devices.d.ts +3 -1
  47. package/lib/seam/connect/routes/devices.js +15 -1
  48. package/lib/seam/connect/routes/devices.js.map +1 -1
  49. package/lib/seam/connect/routes/events.d.ts +3 -1
  50. package/lib/seam/connect/routes/events.js +15 -1
  51. package/lib/seam/connect/routes/events.js.map +1 -1
  52. package/lib/seam/connect/routes/locks.d.ts +3 -1
  53. package/lib/seam/connect/routes/locks.js +15 -1
  54. package/lib/seam/connect/routes/locks.js.map +1 -1
  55. package/lib/seam/connect/routes/noise-sensors-noise-thresholds.d.ts +3 -1
  56. package/lib/seam/connect/routes/noise-sensors-noise-thresholds.js +15 -1
  57. package/lib/seam/connect/routes/noise-sensors-noise-thresholds.js.map +1 -1
  58. package/lib/seam/connect/routes/noise-sensors.d.ts +3 -1
  59. package/lib/seam/connect/routes/noise-sensors.js +15 -1
  60. package/lib/seam/connect/routes/noise-sensors.js.map +1 -1
  61. package/lib/seam/connect/routes/thermostats-climate-setting-schedules.d.ts +3 -1
  62. package/lib/seam/connect/routes/thermostats-climate-setting-schedules.js +15 -1
  63. package/lib/seam/connect/routes/thermostats-climate-setting-schedules.js.map +1 -1
  64. package/lib/seam/connect/routes/thermostats.d.ts +3 -1
  65. package/lib/seam/connect/routes/thermostats.js +15 -1
  66. package/lib/seam/connect/routes/thermostats.js.map +1 -1
  67. package/lib/seam/connect/routes/webhooks.d.ts +3 -1
  68. package/lib/seam/connect/routes/webhooks.js +15 -1
  69. package/lib/seam/connect/routes/webhooks.js.map +1 -1
  70. package/lib/seam/connect/routes/workspaces.d.ts +3 -1
  71. package/lib/seam/connect/routes/workspaces.js +15 -1
  72. package/lib/seam/connect/routes/workspaces.js.map +1 -1
  73. package/lib/seam/connect/seam-http.d.ts +3 -1
  74. package/lib/seam/connect/seam-http.js +15 -1
  75. package/lib/seam/connect/seam-http.js.map +1 -1
  76. package/lib/version.d.ts +1 -1
  77. package/lib/version.js +1 -1
  78. package/package.json +1 -1
  79. package/src/lib/seam/connect/auth.ts +95 -3
  80. package/src/lib/seam/connect/options.ts +105 -1
  81. package/src/lib/seam/connect/routes/access-codes-unmanaged.ts +38 -0
  82. package/src/lib/seam/connect/routes/access-codes.ts +38 -0
  83. package/src/lib/seam/connect/routes/acs-access-groups.ts +38 -0
  84. package/src/lib/seam/connect/routes/acs-credentials.ts +38 -0
  85. package/src/lib/seam/connect/routes/acs-systems.ts +38 -0
  86. package/src/lib/seam/connect/routes/acs-users.ts +38 -0
  87. package/src/lib/seam/connect/routes/acs.ts +38 -0
  88. package/src/lib/seam/connect/routes/action-attempts.ts +38 -0
  89. package/src/lib/seam/connect/routes/client-sessions.ts +38 -0
  90. package/src/lib/seam/connect/routes/connect-webviews.ts +38 -0
  91. package/src/lib/seam/connect/routes/connected-accounts.ts +38 -0
  92. package/src/lib/seam/connect/routes/devices-unmanaged.ts +38 -0
  93. package/src/lib/seam/connect/routes/devices.ts +38 -0
  94. package/src/lib/seam/connect/routes/events.ts +38 -0
  95. package/src/lib/seam/connect/routes/locks.ts +38 -0
  96. package/src/lib/seam/connect/routes/noise-sensors-noise-thresholds.ts +38 -0
  97. package/src/lib/seam/connect/routes/noise-sensors.ts +38 -0
  98. package/src/lib/seam/connect/routes/thermostats-climate-setting-schedules.ts +38 -0
  99. package/src/lib/seam/connect/routes/thermostats.ts +38 -0
  100. package/src/lib/seam/connect/routes/webhooks.ts +38 -0
  101. package/src/lib/seam/connect/routes/workspaces.ts +38 -0
  102. package/src/lib/seam/connect/seam-http.ts +38 -0
  103. package/src/lib/version.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/lib/seam/connect/error-interceptor.ts","../src/lib/seam/connect/seam-http-error.ts","../src/lib/seam/connect/options.ts","../src/lib/seam/connect/auth.ts","../src/lib/seam/connect/client.ts","../src/lib/params-serializer.ts","../src/lib/version.ts","../src/lib/seam/connect/parse-options.ts","../src/lib/seam/connect/routes/client-sessions.ts","../src/lib/seam/connect/routes/access-codes-unmanaged.ts","../src/lib/seam/connect/routes/access-codes.ts","../src/lib/seam/connect/routes/acs-access-groups.ts","../src/lib/seam/connect/routes/acs-credentials.ts","../src/lib/seam/connect/routes/acs-systems.ts","../src/lib/seam/connect/routes/acs-users.ts","../src/lib/seam/connect/routes/acs.ts","../src/lib/seam/connect/routes/action-attempts.ts","../src/lib/seam/connect/routes/connect-webviews.ts","../src/lib/seam/connect/routes/connected-accounts.ts","../src/lib/seam/connect/routes/devices-unmanaged.ts","../src/lib/seam/connect/routes/devices.ts","../src/lib/seam/connect/routes/events.ts","../src/lib/seam/connect/routes/locks.ts","../src/lib/seam/connect/routes/noise-sensors-noise-thresholds.ts","../src/lib/seam/connect/routes/noise-sensors.ts","../src/lib/seam/connect/routes/thermostats-climate-setting-schedules.ts","../src/lib/seam/connect/routes/thermostats.ts","../src/lib/seam/connect/routes/webhooks.ts","../src/lib/seam/connect/routes/workspaces.ts","../src/lib/seam/connect/seam-http.ts"],"names":[],"mappings":"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","sourcesContent":["import { type AxiosError, isAxiosError } from 'axios'\n\nimport type { ApiErrorResponse } from './api-error-type.js'\nimport {\n SeamHttpApiError,\n SeamHttpInvalidInputError,\n SeamHttpUnauthorizedError,\n} from './seam-http-error.js'\n\nexport const errorInterceptor = async (err: unknown): Promise<void> => {\n if (!isAxiosError(err)) throw err\n\n const { response } = err\n const status = response?.status\n const headers = response?.headers\n const requestId = headers?.['seam-request-id'] ?? ''\n\n if (status == null) throw err\n\n if (status === 401) {\n throw new SeamHttpUnauthorizedError(requestId)\n }\n\n if (!isApiErrorResponse(response)) throw err\n\n const { type } = response.data.error\n\n const args = [response.data.error, status, requestId] as const\n\n if (type === 'invalid_input') throw new SeamHttpInvalidInputError(...args)\n throw new SeamHttpApiError(...args)\n}\n\nconst isApiErrorResponse = (\n response: AxiosError['response'],\n): response is NonNullable<AxiosError<ApiErrorResponse>['response']> => {\n if (response == null) return false\n const { headers, data } = response\n\n if (headers == null) return false\n\n const contentType = headers['content-type']\n if (\n typeof contentType === 'string' &&\n !contentType.startsWith('application/json')\n ) {\n return false\n }\n\n if (typeof data === 'object' && data != null) {\n return (\n 'error' in data &&\n typeof data.error === 'object' &&\n data.error != null &&\n 'type' in data.error &&\n typeof data.error.type === 'string'\n )\n }\n\n return false\n}\n","import type { ApiError } from './api-error-type.js'\n\nexport class SeamHttpApiError extends Error {\n code: string\n statusCode: number\n requestId: string\n data?: unknown\n\n constructor(error: ApiError, statusCode: number, requestId: string) {\n const { type, message, data } = error\n super(message)\n this.name = this.constructor.name\n Error.captureStackTrace(this, this.constructor)\n this.code = type\n this.statusCode = statusCode\n this.requestId = requestId\n if (data != null) this.data = data\n }\n}\n\nexport const isSeamHttpApiError = (\n error: unknown,\n): error is SeamHttpApiError => {\n return error instanceof SeamHttpApiError\n}\n\nexport class SeamHttpUnauthorizedError extends SeamHttpApiError {\n override code: 'unauthorized'\n override statusCode: 401\n\n constructor(requestId: string) {\n const type = 'unauthorized'\n const status = 401\n super({ type, message: 'Unauthorized' }, status, requestId)\n this.name = this.constructor.name\n Error.captureStackTrace(this, this.constructor)\n this.code = type\n this.statusCode = status\n this.requestId = requestId\n }\n}\n\nexport const isSeamHttpUnauthorizedError = (\n error: unknown,\n): error is SeamHttpUnauthorizedError => {\n return error instanceof SeamHttpUnauthorizedError\n}\n\nexport class SeamHttpInvalidInputError extends SeamHttpApiError {\n override code: 'invalid_input'\n\n constructor(error: ApiError, statusCode: number, requestId: string) {\n super(error, statusCode, requestId)\n this.name = this.constructor.name\n Error.captureStackTrace(this, this.constructor)\n this.code = 'invalid_input'\n }\n}\n\nexport const isSeamHttpInvalidInputError = (\n error: unknown,\n): error is SeamHttpInvalidInputError => {\n return error instanceof SeamHttpInvalidInputError\n}\n","import type { Client, ClientOptions } from './client.js'\n\nexport type SeamHttpOptions =\n | SeamHttpOptionsFromEnv\n | SeamHttpOptionsWithClient\n | SeamHttpOptionsWithApiKey\n | SeamHttpOptionsWithClientSessionToken\n\ninterface SeamHttpCommonOptions extends ClientOptions {\n endpoint?: string\n}\n\nexport interface SeamHttpFromPublishableKeyOptions\n extends SeamHttpCommonOptions {}\n\nexport interface SeamHttpOptionsFromEnv extends SeamHttpCommonOptions {}\n\nexport interface SeamHttpOptionsWithClient {\n client: Client\n}\n\nexport const isSeamHttpOptionsWithClient = (\n options: SeamHttpOptions,\n): options is SeamHttpOptionsWithClient => {\n if (!('client' in options)) return false\n if (options.client == null) return false\n\n const keys = Object.keys(options).filter((k) => k !== 'client')\n if (keys.length > 0) {\n throw new SeamHttpInvalidOptionsError(\n `The client option cannot be used with any other option, but received: ${keys.join(\n ', ',\n )}`,\n )\n }\n\n return true\n}\n\nexport interface SeamHttpOptionsWithApiKey extends SeamHttpCommonOptions {\n apiKey: string\n}\n\nexport const isSeamHttpOptionsWithApiKey = (\n options: SeamHttpOptions,\n): options is SeamHttpOptionsWithApiKey => {\n if (!('apiKey' in options)) return false\n if (options.apiKey == null) return false\n\n if ('clientSessionToken' in options && options.clientSessionToken != null) {\n throw new SeamHttpInvalidOptionsError(\n 'The clientSessionToken option cannot be used with the apiKey option',\n )\n }\n\n return true\n}\n\nexport interface SeamHttpOptionsWithClientSessionToken\n extends SeamHttpCommonOptions {\n clientSessionToken: string\n}\n\nexport const isSeamHttpOptionsWithClientSessionToken = (\n options: SeamHttpOptions,\n): options is SeamHttpOptionsWithClientSessionToken => {\n if (!('clientSessionToken' in options)) return false\n if (options.clientSessionToken == null) return false\n\n if ('apiKey' in options && options.apiKey != null) {\n throw new SeamHttpInvalidOptionsError(\n 'The clientSessionToken option cannot be used with the apiKey option',\n )\n }\n\n return true\n}\n\nexport class SeamHttpInvalidOptionsError extends Error {\n constructor(message: string) {\n super(`SeamHttp received invalid options: ${message}`)\n this.name = this.constructor.name\n Error.captureStackTrace(this, this.constructor)\n }\n}\n","import {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClientSessionToken,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClientSessionToken,\n} from './options.js'\nimport type { Options } from './parse-options.js'\n\ntype Headers = Record<string, string>\n\nexport const getAuthHeaders = (options: Options): Headers => {\n if ('publishableKey' in options) {\n return getAuthHeadersForPublishableKey(options.publishableKey)\n }\n\n if (isSeamHttpOptionsWithApiKey(options)) {\n return getAuthHeadersForApiKey(options)\n }\n\n if (isSeamHttpOptionsWithClientSessionToken(options)) {\n return getAuthHeadersForClientSessionToken(options)\n }\n\n throw new SeamHttpInvalidOptionsError(\n 'Must specify an apiKey, clientSessionToken, or publishableKey',\n )\n}\n\nconst getAuthHeadersForApiKey = ({\n apiKey,\n}: SeamHttpOptionsWithApiKey): Headers => {\n if (isClientSessionToken(apiKey)) {\n throw new SeamHttpInvalidTokenError(\n 'A Client Session Token cannot be used as an apiKey',\n )\n }\n\n if (isJwt(apiKey)) {\n throw new SeamHttpInvalidTokenError('A JWT cannot be used as an apiKey')\n }\n\n if (isAccessToken(apiKey)) {\n throw new SeamHttpInvalidTokenError(\n 'An Access Token cannot be used as an apiKey',\n )\n }\n\n if (isPublishableKey(apiKey)) {\n throw new SeamHttpInvalidTokenError(\n 'A Publishable Key cannot be used as an apiKey',\n )\n }\n\n if (!isSeamToken(apiKey)) {\n throw new SeamHttpInvalidTokenError(\n `Unknown or invalid apiKey format, expected token to start with ${tokenPrefix}`,\n )\n }\n\n return {\n authorization: `Bearer ${apiKey}`,\n }\n}\n\nconst getAuthHeadersForClientSessionToken = ({\n clientSessionToken,\n}: SeamHttpOptionsWithClientSessionToken): Headers => {\n if (isJwt(clientSessionToken)) {\n throw new SeamHttpInvalidTokenError(\n 'A JWT cannot be used as a clientSessionToken',\n )\n }\n\n if (isAccessToken(clientSessionToken)) {\n throw new SeamHttpInvalidTokenError(\n 'An Access Token cannot be used as a clientSessionToken',\n )\n }\n\n if (isPublishableKey(clientSessionToken)) {\n throw new SeamHttpInvalidTokenError(\n 'A Publishable Key cannot be used as a clientSessionToken',\n )\n }\n\n if (!isClientSessionToken(clientSessionToken)) {\n throw new SeamHttpInvalidTokenError(\n `Unknown or invalid clientSessionToken format, expected token to start with ${clientSessionTokenPrefix}`,\n )\n }\n\n return {\n authorization: `Bearer ${clientSessionToken}`,\n 'client-session-token': clientSessionToken,\n }\n}\n\nconst getAuthHeadersForPublishableKey = (publishableKey: string): Headers => {\n if (isJwt(publishableKey)) {\n throw new SeamHttpInvalidTokenError(\n 'A JWT cannot be used as a publishableKey',\n )\n }\n\n if (isAccessToken(publishableKey)) {\n throw new SeamHttpInvalidTokenError(\n 'An Access Token cannot be used as a publishableKey',\n )\n }\n\n if (isClientSessionToken(publishableKey)) {\n throw new SeamHttpInvalidTokenError(\n 'A Client Session Token Key cannot be used as a publishableKey',\n )\n }\n\n if (!isPublishableKey(publishableKey)) {\n throw new SeamHttpInvalidTokenError(\n `Unknown or invalid publishableKey format, expected token to start with ${publishableKeyTokenPrefix}`,\n )\n }\n\n return {\n 'seam-publishable-key': publishableKey,\n }\n}\n\nexport class SeamHttpInvalidTokenError extends Error {\n constructor(message: string) {\n super(`SeamHttp received an invalid token: ${message}`)\n this.name = this.constructor.name\n Error.captureStackTrace(this, this.constructor)\n }\n}\n\nexport const warnOnInsecureuserIdentifierKey = (\n userIdentifierKey: string,\n): void => {\n if (isEmail(userIdentifierKey)) {\n // eslint-disable-next-line no-console\n console.warn(\n ...[\n 'Using an email for the userIdentifierKey is insecure and may return an error in the future!',\n 'This is insecure because an email is common knowledge or easily guessed.',\n 'Use something with sufficient entropy known only to the owner of the client session.',\n 'For help choosing a user identifier key see',\n 'https://docs.seam.co/latest/seam-components/overview/get-started-with-client-side-components#3-select-a-user-identifier-key',\n ],\n )\n }\n}\n\nconst tokenPrefix = 'seam_'\n\nconst clientSessionTokenPrefix = 'seam_cst'\n\nconst publishableKeyTokenPrefix = 'seam_pk'\n\nconst isClientSessionToken = (token: string): boolean =>\n token.startsWith(clientSessionTokenPrefix)\n\nconst isAccessToken = (token: string): boolean => token.startsWith('seam_at')\n\nconst isJwt = (token: string): boolean => token.startsWith('ey')\n\nconst isSeamToken = (token: string): boolean => token.startsWith(tokenPrefix)\n\nconst isPublishableKey = (token: string): boolean =>\n token.startsWith(publishableKeyTokenPrefix)\n\n// SOURCE: https://stackoverflow.com/a/46181\nconst isEmail = (value: string): boolean =>\n /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(value)\n","import axios, { type AxiosInstance, type AxiosRequestConfig } from 'axios'\n// @ts-expect-error https://github.com/svsool/axios-better-stacktrace/issues/12\nimport axiosBetterStacktrace from 'axios-better-stacktrace'\nimport axiosRetry, { type AxiosRetry, exponentialDelay } from 'axios-retry'\n\nimport { paramsSerializer } from 'lib/params-serializer.js'\n\nimport { errorInterceptor } from './error-interceptor.js'\n\nexport type Client = AxiosInstance\n\nexport interface ClientOptions {\n axiosOptions?: AxiosRequestConfig\n axiosRetryOptions?: AxiosRetryConfig\n client?: Client\n}\n\ntype AxiosRetryConfig = Parameters<AxiosRetry>[1]\n\nexport const createClient = (options: ClientOptions): AxiosInstance => {\n if (options.client != null) return options.client\n\n const client = axios.create({\n paramsSerializer,\n ...options.axiosOptions,\n })\n\n axiosBetterStacktrace(axios)\n\n // @ts-expect-error https://github.com/softonic/axios-retry/issues/159\n axiosRetry(client, {\n retries: 2,\n retryDelay: exponentialDelay,\n ...options.axiosRetryOptions,\n })\n\n client.interceptors.response.use(undefined, errorInterceptor)\n\n return client\n}\n","import type { CustomParamsSerializer } from 'axios'\n\nexport const paramsSerializer: CustomParamsSerializer = (params) => {\n const searchParams = new URLSearchParams()\n\n for (const [name, value] of Object.entries(params)) {\n if (value == null) continue\n\n if (Array.isArray(value)) {\n if (value.length === 0) searchParams.set(name, '')\n if (value.length === 1 && value[0] === '') {\n throw new UnserializableParamError(\n name,\n `is a single element array containing the empty string which is unsupported because it serializes to the empty array`,\n )\n }\n for (const v of value) {\n throwIfUnserializable(name, v)\n searchParams.append(name, v)\n }\n continue\n }\n\n throwIfUnserializable(name, value)\n searchParams.set(name, value)\n }\n\n searchParams.sort()\n return searchParams.toString()\n}\n\nconst throwIfUnserializable = (k: string, v: unknown): void => {\n if (v == null) {\n throw new UnserializableParamError(k, `is ${v} or contains ${v}`)\n }\n\n if (typeof v === 'function') {\n throw new UnserializableParamError(\n k,\n 'is a function or contains a function',\n )\n }\n\n if (typeof v === 'object') {\n throw new UnserializableParamError(k, 'is an object or contains an object')\n }\n}\n\nexport class UnserializableParamError extends Error {\n constructor(name: string, message: string) {\n super(`Could not serialize parameter: '${name}' ${message}`)\n this.name = this.constructor.name\n Error.captureStackTrace(this, this.constructor)\n }\n}\n","const seamapiJavascriptHttpVersion = null\n\nexport default seamapiJavascriptHttpVersion\n","import version from 'lib/version.js'\n\nimport { getAuthHeaders } from './auth.js'\nimport type { ClientOptions } from './client.js'\nimport {\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n type SeamHttpOptions,\n} from './options.js'\n\nconst defaultEndpoint = 'https://connect.getseam.com'\n\nconst sdkHeaders = {\n 'seam-sdk-name': 'seamapi/javascript-http',\n 'seam-sdk-version': version,\n}\n\nexport type Options = SeamHttpOptions & { publishableKey?: string }\n\nexport const parseOptions = (\n apiKeyOrOptions: string | Options,\n): ClientOptions => {\n const options = getNormalizedOptions(apiKeyOrOptions)\n\n if (isSeamHttpOptionsWithClient(options)) return options\n\n return {\n axiosOptions: {\n baseURL: options.endpoint ?? getEndpointFromEnv() ?? defaultEndpoint,\n withCredentials: isSeamHttpOptionsWithClientSessionToken(options),\n ...options.axiosOptions,\n headers: {\n ...getAuthHeaders(options),\n ...options.axiosOptions?.headers,\n ...sdkHeaders,\n },\n },\n axiosRetryOptions: {\n ...options.axiosRetryOptions,\n },\n }\n}\n\nconst getNormalizedOptions = (\n apiKeyOrOptions: string | Options,\n): SeamHttpOptions => {\n const options =\n typeof apiKeyOrOptions === 'string'\n ? { apiKey: apiKeyOrOptions }\n : apiKeyOrOptions\n\n if (isSeamHttpOptionsWithClient(options)) return options\n\n const apiKey =\n 'apiKey' in options ? options.apiKey : getApiKeyFromEnv(options)\n\n return {\n ...options,\n ...(apiKey != null ? { apiKey } : {}),\n }\n}\n\nconst getApiKeyFromEnv = (\n options: SeamHttpOptions,\n): string | null | undefined => {\n if ('clientSessionToken' in options && options.clientSessionToken != null) {\n return null\n }\n return globalThis.process?.env?.SEAM_API_KEY\n}\n\nconst getEndpointFromEnv = (): string | null | undefined => {\n return (\n globalThis.process?.env?.SEAM_ENDPOINT ??\n globalThis.process?.env?.SEAM_API_URL\n )\n}\n","/*\n * Automatically generated by generate-routes.ts.\n * Do not edit this file or add other files to this directory.\n */\n\nimport type { RouteRequestBody, RouteResponse } from '@seamapi/types/connect'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { warnOnInsecureuserIdentifierKey } from 'lib/seam/connect/auth.js'\nimport { type Client, createClient } from 'lib/seam/connect/client.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n type SeamHttpFromPublishableKeyOptions,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n} from 'lib/seam/connect/options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nexport class SeamHttpClientSessions {\n client: Client\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions = {}) {\n const clientOptions = parseOptions(apiKeyOrOptions)\n this.client = createClient(clientOptions)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpClientSessions {\n const constructorOptions = { ...options, client }\n if (!isSeamHttpOptionsWithClient(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpClientSessions(constructorOptions)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpClientSessions {\n const constructorOptions = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpClientSessions(constructorOptions)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpClientSessions {\n const constructorOptions = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpClientSessions(constructorOptions)\n }\n\n static async fromPublishableKey(\n publishableKey: string,\n userIdentifierKey: string,\n options: SeamHttpFromPublishableKeyOptions = {},\n ): Promise<SeamHttpClientSessions> {\n warnOnInsecureuserIdentifierKey(userIdentifierKey)\n const clientOptions = parseOptions({ ...options, publishableKey })\n const client = createClient(clientOptions)\n const clientSessions = SeamHttpClientSessions.fromClient(client)\n const { token } = await clientSessions.getOrCreate({\n user_identifier_key: userIdentifierKey,\n })\n return SeamHttpClientSessions.fromClientSessionToken(token, options)\n }\n\n async create(\n body?: ClientSessionsCreateBody,\n ): Promise<ClientSessionsCreateResponse['client_session']> {\n const { data } = await this.client.request<ClientSessionsCreateResponse>({\n url: '/client_sessions/create',\n method: 'post',\n data: body,\n })\n return data.client_session\n }\n\n async delete(body?: ClientSessionsDeleteBody): Promise<void> {\n await this.client.request<ClientSessionsDeleteResponse>({\n url: '/client_sessions/delete',\n method: 'post',\n data: body,\n })\n }\n\n async get(\n body?: ClientSessionsGetParams,\n ): Promise<ClientSessionsGetResponse['client_session']> {\n const { data } = await this.client.request<ClientSessionsGetResponse>({\n url: '/client_sessions/get',\n method: 'post',\n data: body,\n })\n return data.client_session\n }\n\n async getOrCreate(\n body?: ClientSessionsGetOrCreateBody,\n ): Promise<ClientSessionsGetOrCreateResponse['client_session']> {\n const { data } =\n await this.client.request<ClientSessionsGetOrCreateResponse>({\n url: '/client_sessions/get_or_create',\n method: 'post',\n data: body,\n })\n return data.client_session\n }\n\n async grantAccess(\n body?: ClientSessionsGrantAccessBody,\n ): Promise<ClientSessionsGrantAccessResponse['client_session']> {\n const { data } =\n await this.client.request<ClientSessionsGrantAccessResponse>({\n url: '/client_sessions/grant_access',\n method: 'post',\n data: body,\n })\n return data.client_session\n }\n\n async list(\n body?: ClientSessionsListParams,\n ): Promise<ClientSessionsListResponse['client_sessions']> {\n const { data } = await this.client.request<ClientSessionsListResponse>({\n url: '/client_sessions/list',\n method: 'post',\n data: body,\n })\n return data.client_sessions\n }\n}\n\nexport type ClientSessionsCreateBody =\n RouteRequestBody<'/client_sessions/create'>\n\nexport type ClientSessionsCreateResponse = SetNonNullable<\n Required<RouteResponse<'/client_sessions/create'>>\n>\n\nexport type ClientSessionsDeleteBody =\n RouteRequestBody<'/client_sessions/delete'>\n\nexport type ClientSessionsDeleteResponse = SetNonNullable<\n Required<RouteResponse<'/client_sessions/delete'>>\n>\n\nexport type ClientSessionsGetParams = RouteRequestBody<'/client_sessions/get'>\n\nexport type ClientSessionsGetResponse = SetNonNullable<\n Required<RouteResponse<'/client_sessions/get'>>\n>\n\nexport type ClientSessionsGetOrCreateBody =\n RouteRequestBody<'/client_sessions/get_or_create'>\n\nexport type ClientSessionsGetOrCreateResponse = SetNonNullable<\n Required<RouteResponse<'/client_sessions/get_or_create'>>\n>\n\nexport type ClientSessionsGrantAccessBody =\n RouteRequestBody<'/client_sessions/grant_access'>\n\nexport type ClientSessionsGrantAccessResponse = SetNonNullable<\n Required<RouteResponse<'/client_sessions/grant_access'>>\n>\n\nexport type ClientSessionsListParams = RouteRequestBody<'/client_sessions/list'>\n\nexport type ClientSessionsListResponse = SetNonNullable<\n Required<RouteResponse<'/client_sessions/list'>>\n>\n","/*\n * Automatically generated by generate-routes.ts.\n * Do not edit this file or add other files to this directory.\n */\n\nimport type { RouteRequestBody, RouteResponse } from '@seamapi/types/connect'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { warnOnInsecureuserIdentifierKey } from 'lib/seam/connect/auth.js'\nimport { type Client, createClient } from 'lib/seam/connect/client.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n type SeamHttpFromPublishableKeyOptions,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n} from 'lib/seam/connect/options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nimport { SeamHttpClientSessions } from './client-sessions.js'\n\nexport class SeamHttpAccessCodesUnmanaged {\n client: Client\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions = {}) {\n const clientOptions = parseOptions(apiKeyOrOptions)\n this.client = createClient(clientOptions)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpAccessCodesUnmanaged {\n const constructorOptions = { ...options, client }\n if (!isSeamHttpOptionsWithClient(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpAccessCodesUnmanaged(constructorOptions)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpAccessCodesUnmanaged {\n const constructorOptions = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpAccessCodesUnmanaged(constructorOptions)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpAccessCodesUnmanaged {\n const constructorOptions = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpAccessCodesUnmanaged(constructorOptions)\n }\n\n static async fromPublishableKey(\n publishableKey: string,\n userIdentifierKey: string,\n options: SeamHttpFromPublishableKeyOptions = {},\n ): Promise<SeamHttpAccessCodesUnmanaged> {\n warnOnInsecureuserIdentifierKey(userIdentifierKey)\n const clientOptions = parseOptions({ ...options, publishableKey })\n const client = createClient(clientOptions)\n const clientSessions = SeamHttpClientSessions.fromClient(client)\n const { token } = await clientSessions.getOrCreate({\n user_identifier_key: userIdentifierKey,\n })\n return SeamHttpAccessCodesUnmanaged.fromClientSessionToken(token, options)\n }\n\n async convertToManaged(\n body?: AccessCodesUnmanagedConvertToManagedBody,\n ): Promise<void> {\n await this.client.request<AccessCodesUnmanagedConvertToManagedResponse>({\n url: '/access_codes/unmanaged/convert_to_managed',\n method: 'post',\n data: body,\n })\n }\n\n async delete(body?: AccessCodesUnmanagedDeleteBody): Promise<void> {\n await this.client.request<AccessCodesUnmanagedDeleteResponse>({\n url: '/access_codes/unmanaged/delete',\n method: 'post',\n data: body,\n })\n }\n\n async get(\n body?: AccessCodesUnmanagedGetParams,\n ): Promise<AccessCodesUnmanagedGetResponse['access_code']> {\n const { data } = await this.client.request<AccessCodesUnmanagedGetResponse>(\n {\n url: '/access_codes/unmanaged/get',\n method: 'post',\n data: body,\n },\n )\n return data.access_code\n }\n\n async list(\n body?: AccessCodesUnmanagedListParams,\n ): Promise<AccessCodesUnmanagedListResponse['access_codes']> {\n const { data } =\n await this.client.request<AccessCodesUnmanagedListResponse>({\n url: '/access_codes/unmanaged/list',\n method: 'post',\n data: body,\n })\n return data.access_codes\n }\n\n async update(body?: AccessCodesUnmanagedUpdateBody): Promise<void> {\n await this.client.request<AccessCodesUnmanagedUpdateResponse>({\n url: '/access_codes/unmanaged/update',\n method: 'post',\n data: body,\n })\n }\n}\n\nexport type AccessCodesUnmanagedConvertToManagedBody =\n RouteRequestBody<'/access_codes/unmanaged/convert_to_managed'>\n\nexport type AccessCodesUnmanagedConvertToManagedResponse = SetNonNullable<\n Required<RouteResponse<'/access_codes/unmanaged/convert_to_managed'>>\n>\n\nexport type AccessCodesUnmanagedDeleteBody =\n RouteRequestBody<'/access_codes/unmanaged/delete'>\n\nexport type AccessCodesUnmanagedDeleteResponse = SetNonNullable<\n Required<RouteResponse<'/access_codes/unmanaged/delete'>>\n>\n\nexport type AccessCodesUnmanagedGetParams =\n RouteRequestBody<'/access_codes/unmanaged/get'>\n\nexport type AccessCodesUnmanagedGetResponse = SetNonNullable<\n Required<RouteResponse<'/access_codes/unmanaged/get'>>\n>\n\nexport type AccessCodesUnmanagedListParams =\n RouteRequestBody<'/access_codes/unmanaged/list'>\n\nexport type AccessCodesUnmanagedListResponse = SetNonNullable<\n Required<RouteResponse<'/access_codes/unmanaged/list'>>\n>\n\nexport type AccessCodesUnmanagedUpdateBody =\n RouteRequestBody<'/access_codes/unmanaged/update'>\n\nexport type AccessCodesUnmanagedUpdateResponse = SetNonNullable<\n Required<RouteResponse<'/access_codes/unmanaged/update'>>\n>\n","/*\n * Automatically generated by generate-routes.ts.\n * Do not edit this file or add other files to this directory.\n */\n\nimport type { RouteRequestBody, RouteResponse } from '@seamapi/types/connect'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { warnOnInsecureuserIdentifierKey } from 'lib/seam/connect/auth.js'\nimport { type Client, createClient } from 'lib/seam/connect/client.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n type SeamHttpFromPublishableKeyOptions,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n} from 'lib/seam/connect/options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nimport { SeamHttpAccessCodesUnmanaged } from './access-codes-unmanaged.js'\nimport { SeamHttpClientSessions } from './client-sessions.js'\n\nexport class SeamHttpAccessCodes {\n client: Client\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions = {}) {\n const clientOptions = parseOptions(apiKeyOrOptions)\n this.client = createClient(clientOptions)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpAccessCodes {\n const constructorOptions = { ...options, client }\n if (!isSeamHttpOptionsWithClient(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpAccessCodes(constructorOptions)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpAccessCodes {\n const constructorOptions = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpAccessCodes(constructorOptions)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpAccessCodes {\n const constructorOptions = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpAccessCodes(constructorOptions)\n }\n\n static async fromPublishableKey(\n publishableKey: string,\n userIdentifierKey: string,\n options: SeamHttpFromPublishableKeyOptions = {},\n ): Promise<SeamHttpAccessCodes> {\n warnOnInsecureuserIdentifierKey(userIdentifierKey)\n const clientOptions = parseOptions({ ...options, publishableKey })\n const client = createClient(clientOptions)\n const clientSessions = SeamHttpClientSessions.fromClient(client)\n const { token } = await clientSessions.getOrCreate({\n user_identifier_key: userIdentifierKey,\n })\n return SeamHttpAccessCodes.fromClientSessionToken(token, options)\n }\n\n get unmanaged(): SeamHttpAccessCodesUnmanaged {\n return SeamHttpAccessCodesUnmanaged.fromClient(this.client)\n }\n\n async create(\n body?: AccessCodesCreateBody,\n ): Promise<AccessCodesCreateResponse['access_code']> {\n const { data } = await this.client.request<AccessCodesCreateResponse>({\n url: '/access_codes/create',\n method: 'post',\n data: body,\n })\n return data.access_code\n }\n\n async createMultiple(\n body?: AccessCodesCreateMultipleBody,\n ): Promise<AccessCodesCreateMultipleResponse['access_codes']> {\n const { data } =\n await this.client.request<AccessCodesCreateMultipleResponse>({\n url: '/access_codes/create_multiple',\n method: 'post',\n data: body,\n })\n return data.access_codes\n }\n\n async delete(body?: AccessCodesDeleteBody): Promise<void> {\n await this.client.request<AccessCodesDeleteResponse>({\n url: '/access_codes/delete',\n method: 'post',\n data: body,\n })\n }\n\n async generateCode(\n body?: AccessCodesGenerateCodeBody,\n ): Promise<AccessCodesGenerateCodeResponse['generated_code']> {\n const { data } = await this.client.request<AccessCodesGenerateCodeResponse>(\n {\n url: '/access_codes/generate_code',\n method: 'post',\n data: body,\n },\n )\n return data.generated_code\n }\n\n async get(\n body?: AccessCodesGetParams,\n ): Promise<AccessCodesGetResponse['access_code']> {\n const { data } = await this.client.request<AccessCodesGetResponse>({\n url: '/access_codes/get',\n method: 'post',\n data: body,\n })\n return data.access_code\n }\n\n async list(\n body?: AccessCodesListParams,\n ): Promise<AccessCodesListResponse['access_codes']> {\n const { data } = await this.client.request<AccessCodesListResponse>({\n url: '/access_codes/list',\n method: 'post',\n data: body,\n })\n return data.access_codes\n }\n\n async pullBackupAccessCode(\n body?: AccessCodesPullBackupAccessCodeBody,\n ): Promise<AccessCodesPullBackupAccessCodeResponse['backup_access_code']> {\n const { data } =\n await this.client.request<AccessCodesPullBackupAccessCodeResponse>({\n url: '/access_codes/pull_backup_access_code',\n method: 'post',\n data: body,\n })\n return data.backup_access_code\n }\n\n async update(body?: AccessCodesUpdateBody): Promise<void> {\n await this.client.request<AccessCodesUpdateResponse>({\n url: '/access_codes/update',\n method: 'post',\n data: body,\n })\n }\n}\n\nexport type AccessCodesCreateBody = RouteRequestBody<'/access_codes/create'>\n\nexport type AccessCodesCreateResponse = SetNonNullable<\n Required<RouteResponse<'/access_codes/create'>>\n>\n\nexport type AccessCodesCreateMultipleBody =\n RouteRequestBody<'/access_codes/create_multiple'>\n\nexport type AccessCodesCreateMultipleResponse = SetNonNullable<\n Required<RouteResponse<'/access_codes/create_multiple'>>\n>\n\nexport type AccessCodesDeleteBody = RouteRequestBody<'/access_codes/delete'>\n\nexport type AccessCodesDeleteResponse = SetNonNullable<\n Required<RouteResponse<'/access_codes/delete'>>\n>\n\nexport type AccessCodesGenerateCodeBody =\n RouteRequestBody<'/access_codes/generate_code'>\n\nexport type AccessCodesGenerateCodeResponse = SetNonNullable<\n Required<RouteResponse<'/access_codes/generate_code'>>\n>\n\nexport type AccessCodesGetParams = RouteRequestBody<'/access_codes/get'>\n\nexport type AccessCodesGetResponse = SetNonNullable<\n Required<RouteResponse<'/access_codes/get'>>\n>\n\nexport type AccessCodesListParams = RouteRequestBody<'/access_codes/list'>\n\nexport type AccessCodesListResponse = SetNonNullable<\n Required<RouteResponse<'/access_codes/list'>>\n>\n\nexport type AccessCodesPullBackupAccessCodeBody =\n RouteRequestBody<'/access_codes/pull_backup_access_code'>\n\nexport type AccessCodesPullBackupAccessCodeResponse = SetNonNullable<\n Required<RouteResponse<'/access_codes/pull_backup_access_code'>>\n>\n\nexport type AccessCodesUpdateBody = RouteRequestBody<'/access_codes/update'>\n\nexport type AccessCodesUpdateResponse = SetNonNullable<\n Required<RouteResponse<'/access_codes/update'>>\n>\n","/*\n * Automatically generated by generate-routes.ts.\n * Do not edit this file or add other files to this directory.\n */\n\nimport type { RouteRequestBody, RouteResponse } from '@seamapi/types/connect'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { warnOnInsecureuserIdentifierKey } from 'lib/seam/connect/auth.js'\nimport { type Client, createClient } from 'lib/seam/connect/client.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n type SeamHttpFromPublishableKeyOptions,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n} from 'lib/seam/connect/options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nimport { SeamHttpClientSessions } from './client-sessions.js'\n\nexport class SeamHttpAcsAccessGroups {\n client: Client\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions = {}) {\n const clientOptions = parseOptions(apiKeyOrOptions)\n this.client = createClient(clientOptions)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpAcsAccessGroups {\n const constructorOptions = { ...options, client }\n if (!isSeamHttpOptionsWithClient(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpAcsAccessGroups(constructorOptions)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpAcsAccessGroups {\n const constructorOptions = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpAcsAccessGroups(constructorOptions)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpAcsAccessGroups {\n const constructorOptions = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpAcsAccessGroups(constructorOptions)\n }\n\n static async fromPublishableKey(\n publishableKey: string,\n userIdentifierKey: string,\n options: SeamHttpFromPublishableKeyOptions = {},\n ): Promise<SeamHttpAcsAccessGroups> {\n warnOnInsecureuserIdentifierKey(userIdentifierKey)\n const clientOptions = parseOptions({ ...options, publishableKey })\n const client = createClient(clientOptions)\n const clientSessions = SeamHttpClientSessions.fromClient(client)\n const { token } = await clientSessions.getOrCreate({\n user_identifier_key: userIdentifierKey,\n })\n return SeamHttpAcsAccessGroups.fromClientSessionToken(token, options)\n }\n\n async addUser(body?: AcsAccessGroupsAddUserBody): Promise<void> {\n await this.client.request<AcsAccessGroupsAddUserResponse>({\n url: '/acs/access_groups/add_user',\n method: 'post',\n data: body,\n })\n }\n\n async create(\n body?: AcsAccessGroupsCreateBody,\n ): Promise<AcsAccessGroupsCreateResponse['acs_access_group']> {\n const { data } = await this.client.request<AcsAccessGroupsCreateResponse>({\n url: '/acs/access_groups/create',\n method: 'post',\n data: body,\n })\n return data.acs_access_group\n }\n\n async delete(body?: AcsAccessGroupsDeleteBody): Promise<void> {\n await this.client.request<AcsAccessGroupsDeleteResponse>({\n url: '/acs/access_groups/delete',\n method: 'post',\n data: body,\n })\n }\n\n async get(\n body?: AcsAccessGroupsGetParams,\n ): Promise<AcsAccessGroupsGetResponse['acs_access_group']> {\n const { data } = await this.client.request<AcsAccessGroupsGetResponse>({\n url: '/acs/access_groups/get',\n method: 'post',\n data: body,\n })\n return data.acs_access_group\n }\n\n async list(\n body?: AcsAccessGroupsListParams,\n ): Promise<AcsAccessGroupsListResponse['acs_access_groups']> {\n const { data } = await this.client.request<AcsAccessGroupsListResponse>({\n url: '/acs/access_groups/list',\n method: 'post',\n data: body,\n })\n return data.acs_access_groups\n }\n\n async listUsers(\n body?: AcsAccessGroupsListUsersParams,\n ): Promise<AcsAccessGroupsListUsersResponse['acs_users']> {\n const { data } =\n await this.client.request<AcsAccessGroupsListUsersResponse>({\n url: '/acs/access_groups/list_users',\n method: 'post',\n data: body,\n })\n return data.acs_users\n }\n\n async removeUser(body?: AcsAccessGroupsRemoveUserBody): Promise<void> {\n await this.client.request<AcsAccessGroupsRemoveUserResponse>({\n url: '/acs/access_groups/remove_user',\n method: 'post',\n data: body,\n })\n }\n\n async update(body?: AcsAccessGroupsUpdateBody): Promise<void> {\n await this.client.request<AcsAccessGroupsUpdateResponse>({\n url: '/acs/access_groups/update',\n method: 'post',\n data: body,\n })\n }\n}\n\nexport type AcsAccessGroupsAddUserBody =\n RouteRequestBody<'/acs/access_groups/add_user'>\n\nexport type AcsAccessGroupsAddUserResponse = SetNonNullable<\n Required<RouteResponse<'/acs/access_groups/add_user'>>\n>\n\nexport type AcsAccessGroupsCreateBody =\n RouteRequestBody<'/acs/access_groups/create'>\n\nexport type AcsAccessGroupsCreateResponse = SetNonNullable<\n Required<RouteResponse<'/acs/access_groups/create'>>\n>\n\nexport type AcsAccessGroupsDeleteBody =\n RouteRequestBody<'/acs/access_groups/delete'>\n\nexport type AcsAccessGroupsDeleteResponse = SetNonNullable<\n Required<RouteResponse<'/acs/access_groups/delete'>>\n>\n\nexport type AcsAccessGroupsGetParams =\n RouteRequestBody<'/acs/access_groups/get'>\n\nexport type AcsAccessGroupsGetResponse = SetNonNullable<\n Required<RouteResponse<'/acs/access_groups/get'>>\n>\n\nexport type AcsAccessGroupsListParams =\n RouteRequestBody<'/acs/access_groups/list'>\n\nexport type AcsAccessGroupsListResponse = SetNonNullable<\n Required<RouteResponse<'/acs/access_groups/list'>>\n>\n\nexport type AcsAccessGroupsListUsersParams =\n RouteRequestBody<'/acs/access_groups/list_users'>\n\nexport type AcsAccessGroupsListUsersResponse = SetNonNullable<\n Required<RouteResponse<'/acs/access_groups/list_users'>>\n>\n\nexport type AcsAccessGroupsRemoveUserBody =\n RouteRequestBody<'/acs/access_groups/remove_user'>\n\nexport type AcsAccessGroupsRemoveUserResponse = SetNonNullable<\n Required<RouteResponse<'/acs/access_groups/remove_user'>>\n>\n\nexport type AcsAccessGroupsUpdateBody =\n RouteRequestBody<'/acs/access_groups/update'>\n\nexport type AcsAccessGroupsUpdateResponse = SetNonNullable<\n Required<RouteResponse<'/acs/access_groups/update'>>\n>\n","/*\n * Automatically generated by generate-routes.ts.\n * Do not edit this file or add other files to this directory.\n */\n\nimport type { RouteRequestBody, RouteResponse } from '@seamapi/types/connect'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { warnOnInsecureuserIdentifierKey } from 'lib/seam/connect/auth.js'\nimport { type Client, createClient } from 'lib/seam/connect/client.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n type SeamHttpFromPublishableKeyOptions,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n} from 'lib/seam/connect/options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nimport { SeamHttpClientSessions } from './client-sessions.js'\n\nexport class SeamHttpAcsCredentials {\n client: Client\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions = {}) {\n const clientOptions = parseOptions(apiKeyOrOptions)\n this.client = createClient(clientOptions)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpAcsCredentials {\n const constructorOptions = { ...options, client }\n if (!isSeamHttpOptionsWithClient(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpAcsCredentials(constructorOptions)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpAcsCredentials {\n const constructorOptions = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpAcsCredentials(constructorOptions)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpAcsCredentials {\n const constructorOptions = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpAcsCredentials(constructorOptions)\n }\n\n static async fromPublishableKey(\n publishableKey: string,\n userIdentifierKey: string,\n options: SeamHttpFromPublishableKeyOptions = {},\n ): Promise<SeamHttpAcsCredentials> {\n warnOnInsecureuserIdentifierKey(userIdentifierKey)\n const clientOptions = parseOptions({ ...options, publishableKey })\n const client = createClient(clientOptions)\n const clientSessions = SeamHttpClientSessions.fromClient(client)\n const { token } = await clientSessions.getOrCreate({\n user_identifier_key: userIdentifierKey,\n })\n return SeamHttpAcsCredentials.fromClientSessionToken(token, options)\n }\n\n async create(\n body?: AcsCredentialsCreateBody,\n ): Promise<AcsCredentialsCreateResponse['acs_credential']> {\n const { data } = await this.client.request<AcsCredentialsCreateResponse>({\n url: '/acs/credentials/create',\n method: 'post',\n data: body,\n })\n return data.acs_credential\n }\n\n async delete(body?: AcsCredentialsDeleteBody): Promise<void> {\n await this.client.request<AcsCredentialsDeleteResponse>({\n url: '/acs/credentials/delete',\n method: 'post',\n data: body,\n })\n }\n\n async get(\n body?: AcsCredentialsGetParams,\n ): Promise<AcsCredentialsGetResponse['acs_credential']> {\n const { data } = await this.client.request<AcsCredentialsGetResponse>({\n url: '/acs/credentials/get',\n method: 'post',\n data: body,\n })\n return data.acs_credential\n }\n\n async list(\n body?: AcsCredentialsListParams,\n ): Promise<AcsCredentialsListResponse['acs_credentials']> {\n const { data } = await this.client.request<AcsCredentialsListResponse>({\n url: '/acs/credentials/list',\n method: 'post',\n data: body,\n })\n return data.acs_credentials\n }\n}\n\nexport type AcsCredentialsCreateBody =\n RouteRequestBody<'/acs/credentials/create'>\n\nexport type AcsCredentialsCreateResponse = SetNonNullable<\n Required<RouteResponse<'/acs/credentials/create'>>\n>\n\nexport type AcsCredentialsDeleteBody =\n RouteRequestBody<'/acs/credentials/delete'>\n\nexport type AcsCredentialsDeleteResponse = SetNonNullable<\n Required<RouteResponse<'/acs/credentials/delete'>>\n>\n\nexport type AcsCredentialsGetParams = RouteRequestBody<'/acs/credentials/get'>\n\nexport type AcsCredentialsGetResponse = SetNonNullable<\n Required<RouteResponse<'/acs/credentials/get'>>\n>\n\nexport type AcsCredentialsListParams = RouteRequestBody<'/acs/credentials/list'>\n\nexport type AcsCredentialsListResponse = SetNonNullable<\n Required<RouteResponse<'/acs/credentials/list'>>\n>\n","/*\n * Automatically generated by generate-routes.ts.\n * Do not edit this file or add other files to this directory.\n */\n\nimport type { RouteRequestBody, RouteResponse } from '@seamapi/types/connect'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { warnOnInsecureuserIdentifierKey } from 'lib/seam/connect/auth.js'\nimport { type Client, createClient } from 'lib/seam/connect/client.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n type SeamHttpFromPublishableKeyOptions,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n} from 'lib/seam/connect/options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nimport { SeamHttpClientSessions } from './client-sessions.js'\n\nexport class SeamHttpAcsSystems {\n client: Client\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions = {}) {\n const clientOptions = parseOptions(apiKeyOrOptions)\n this.client = createClient(clientOptions)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpAcsSystems {\n const constructorOptions = { ...options, client }\n if (!isSeamHttpOptionsWithClient(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpAcsSystems(constructorOptions)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpAcsSystems {\n const constructorOptions = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpAcsSystems(constructorOptions)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpAcsSystems {\n const constructorOptions = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpAcsSystems(constructorOptions)\n }\n\n static async fromPublishableKey(\n publishableKey: string,\n userIdentifierKey: string,\n options: SeamHttpFromPublishableKeyOptions = {},\n ): Promise<SeamHttpAcsSystems> {\n warnOnInsecureuserIdentifierKey(userIdentifierKey)\n const clientOptions = parseOptions({ ...options, publishableKey })\n const client = createClient(clientOptions)\n const clientSessions = SeamHttpClientSessions.fromClient(client)\n const { token } = await clientSessions.getOrCreate({\n user_identifier_key: userIdentifierKey,\n })\n return SeamHttpAcsSystems.fromClientSessionToken(token, options)\n }\n\n async get(\n body?: AcsSystemsGetParams,\n ): Promise<AcsSystemsGetResponse['acs_system']> {\n const { data } = await this.client.request<AcsSystemsGetResponse>({\n url: '/acs/systems/get',\n method: 'post',\n data: body,\n })\n return data.acs_system\n }\n\n async list(\n body?: AcsSystemsListParams,\n ): Promise<AcsSystemsListResponse['acs_systems']> {\n const { data } = await this.client.request<AcsSystemsListResponse>({\n url: '/acs/systems/list',\n method: 'post',\n data: body,\n })\n return data.acs_systems\n }\n}\n\nexport type AcsSystemsGetParams = RouteRequestBody<'/acs/systems/get'>\n\nexport type AcsSystemsGetResponse = SetNonNullable<\n Required<RouteResponse<'/acs/systems/get'>>\n>\n\nexport type AcsSystemsListParams = RouteRequestBody<'/acs/systems/list'>\n\nexport type AcsSystemsListResponse = SetNonNullable<\n Required<RouteResponse<'/acs/systems/list'>>\n>\n","/*\n * Automatically generated by generate-routes.ts.\n * Do not edit this file or add other files to this directory.\n */\n\nimport type { RouteRequestBody, RouteResponse } from '@seamapi/types/connect'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { warnOnInsecureuserIdentifierKey } from 'lib/seam/connect/auth.js'\nimport { type Client, createClient } from 'lib/seam/connect/client.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n type SeamHttpFromPublishableKeyOptions,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n} from 'lib/seam/connect/options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nimport { SeamHttpClientSessions } from './client-sessions.js'\n\nexport class SeamHttpAcsUsers {\n client: Client\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions = {}) {\n const clientOptions = parseOptions(apiKeyOrOptions)\n this.client = createClient(clientOptions)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpAcsUsers {\n const constructorOptions = { ...options, client }\n if (!isSeamHttpOptionsWithClient(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpAcsUsers(constructorOptions)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpAcsUsers {\n const constructorOptions = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpAcsUsers(constructorOptions)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpAcsUsers {\n const constructorOptions = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpAcsUsers(constructorOptions)\n }\n\n static async fromPublishableKey(\n publishableKey: string,\n userIdentifierKey: string,\n options: SeamHttpFromPublishableKeyOptions = {},\n ): Promise<SeamHttpAcsUsers> {\n warnOnInsecureuserIdentifierKey(userIdentifierKey)\n const clientOptions = parseOptions({ ...options, publishableKey })\n const client = createClient(clientOptions)\n const clientSessions = SeamHttpClientSessions.fromClient(client)\n const { token } = await clientSessions.getOrCreate({\n user_identifier_key: userIdentifierKey,\n })\n return SeamHttpAcsUsers.fromClientSessionToken(token, options)\n }\n\n async addToAccessGroup(body?: AcsUsersAddToAccessGroupBody): Promise<void> {\n await this.client.request<AcsUsersAddToAccessGroupResponse>({\n url: '/acs/users/add_to_access_group',\n method: 'post',\n data: body,\n })\n }\n\n async create(\n body?: AcsUsersCreateBody,\n ): Promise<AcsUsersCreateResponse['acs_user']> {\n const { data } = await this.client.request<AcsUsersCreateResponse>({\n url: '/acs/users/create',\n method: 'post',\n data: body,\n })\n return data.acs_user\n }\n\n async delete(body?: AcsUsersDeleteBody): Promise<void> {\n await this.client.request<AcsUsersDeleteResponse>({\n url: '/acs/users/delete',\n method: 'post',\n data: body,\n })\n }\n\n async get(\n body?: AcsUsersGetParams,\n ): Promise<AcsUsersGetResponse['acs_user']> {\n const { data } = await this.client.request<AcsUsersGetResponse>({\n url: '/acs/users/get',\n method: 'post',\n data: body,\n })\n return data.acs_user\n }\n\n async list(\n body?: AcsUsersListParams,\n ): Promise<AcsUsersListResponse['acs_users']> {\n const { data } = await this.client.request<AcsUsersListResponse>({\n url: '/acs/users/list',\n method: 'post',\n data: body,\n })\n return data.acs_users\n }\n\n async removeFromAccessGroup(\n body?: AcsUsersRemoveFromAccessGroupBody,\n ): Promise<void> {\n await this.client.request<AcsUsersRemoveFromAccessGroupResponse>({\n url: '/acs/users/remove_from_access_group',\n method: 'post',\n data: body,\n })\n }\n\n async suspend(body?: AcsUsersSuspendBody): Promise<void> {\n await this.client.request<AcsUsersSuspendResponse>({\n url: '/acs/users/suspend',\n method: 'post',\n data: body,\n })\n }\n\n async unsuspend(body?: AcsUsersUnsuspendBody): Promise<void> {\n await this.client.request<AcsUsersUnsuspendResponse>({\n url: '/acs/users/unsuspend',\n method: 'post',\n data: body,\n })\n }\n\n async update(body?: AcsUsersUpdateBody): Promise<void> {\n await this.client.request<AcsUsersUpdateResponse>({\n url: '/acs/users/update',\n method: 'post',\n data: body,\n })\n }\n}\n\nexport type AcsUsersAddToAccessGroupBody =\n RouteRequestBody<'/acs/users/add_to_access_group'>\n\nexport type AcsUsersAddToAccessGroupResponse = SetNonNullable<\n Required<RouteResponse<'/acs/users/add_to_access_group'>>\n>\n\nexport type AcsUsersCreateBody = RouteRequestBody<'/acs/users/create'>\n\nexport type AcsUsersCreateResponse = SetNonNullable<\n Required<RouteResponse<'/acs/users/create'>>\n>\n\nexport type AcsUsersDeleteBody = RouteRequestBody<'/acs/users/delete'>\n\nexport type AcsUsersDeleteResponse = SetNonNullable<\n Required<RouteResponse<'/acs/users/delete'>>\n>\n\nexport type AcsUsersGetParams = RouteRequestBody<'/acs/users/get'>\n\nexport type AcsUsersGetResponse = SetNonNullable<\n Required<RouteResponse<'/acs/users/get'>>\n>\n\nexport type AcsUsersListParams = RouteRequestBody<'/acs/users/list'>\n\nexport type AcsUsersListResponse = SetNonNullable<\n Required<RouteResponse<'/acs/users/list'>>\n>\n\nexport type AcsUsersRemoveFromAccessGroupBody =\n RouteRequestBody<'/acs/users/remove_from_access_group'>\n\nexport type AcsUsersRemoveFromAccessGroupResponse = SetNonNullable<\n Required<RouteResponse<'/acs/users/remove_from_access_group'>>\n>\n\nexport type AcsUsersSuspendBody = RouteRequestBody<'/acs/users/suspend'>\n\nexport type AcsUsersSuspendResponse = SetNonNullable<\n Required<RouteResponse<'/acs/users/suspend'>>\n>\n\nexport type AcsUsersUnsuspendBody = RouteRequestBody<'/acs/users/unsuspend'>\n\nexport type AcsUsersUnsuspendResponse = SetNonNullable<\n Required<RouteResponse<'/acs/users/unsuspend'>>\n>\n\nexport type AcsUsersUpdateBody = RouteRequestBody<'/acs/users/update'>\n\nexport type AcsUsersUpdateResponse = SetNonNullable<\n Required<RouteResponse<'/acs/users/update'>>\n>\n","/*\n * Automatically generated by generate-routes.ts.\n * Do not edit this file or add other files to this directory.\n */\n\nimport { warnOnInsecureuserIdentifierKey } from 'lib/seam/connect/auth.js'\nimport { type Client, createClient } from 'lib/seam/connect/client.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n type SeamHttpFromPublishableKeyOptions,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n} from 'lib/seam/connect/options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nimport { SeamHttpAcsAccessGroups } from './acs-access-groups.js'\nimport { SeamHttpAcsCredentials } from './acs-credentials.js'\nimport { SeamHttpAcsSystems } from './acs-systems.js'\nimport { SeamHttpAcsUsers } from './acs-users.js'\nimport { SeamHttpClientSessions } from './client-sessions.js'\n\nexport class SeamHttpAcs {\n client: Client\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions = {}) {\n const clientOptions = parseOptions(apiKeyOrOptions)\n this.client = createClient(clientOptions)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpAcs {\n const constructorOptions = { ...options, client }\n if (!isSeamHttpOptionsWithClient(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpAcs(constructorOptions)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpAcs {\n const constructorOptions = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpAcs(constructorOptions)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpAcs {\n const constructorOptions = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpAcs(constructorOptions)\n }\n\n static async fromPublishableKey(\n publishableKey: string,\n userIdentifierKey: string,\n options: SeamHttpFromPublishableKeyOptions = {},\n ): Promise<SeamHttpAcs> {\n warnOnInsecureuserIdentifierKey(userIdentifierKey)\n const clientOptions = parseOptions({ ...options, publishableKey })\n const client = createClient(clientOptions)\n const clientSessions = SeamHttpClientSessions.fromClient(client)\n const { token } = await clientSessions.getOrCreate({\n user_identifier_key: userIdentifierKey,\n })\n return SeamHttpAcs.fromClientSessionToken(token, options)\n }\n\n get accessGroups(): SeamHttpAcsAccessGroups {\n return SeamHttpAcsAccessGroups.fromClient(this.client)\n }\n\n get credentials(): SeamHttpAcsCredentials {\n return SeamHttpAcsCredentials.fromClient(this.client)\n }\n\n get systems(): SeamHttpAcsSystems {\n return SeamHttpAcsSystems.fromClient(this.client)\n }\n\n get users(): SeamHttpAcsUsers {\n return SeamHttpAcsUsers.fromClient(this.client)\n }\n}\n","/*\n * Automatically generated by generate-routes.ts.\n * Do not edit this file or add other files to this directory.\n */\n\nimport type { RouteRequestBody, RouteResponse } from '@seamapi/types/connect'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { warnOnInsecureuserIdentifierKey } from 'lib/seam/connect/auth.js'\nimport { type Client, createClient } from 'lib/seam/connect/client.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n type SeamHttpFromPublishableKeyOptions,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n} from 'lib/seam/connect/options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nimport { SeamHttpClientSessions } from './client-sessions.js'\n\nexport class SeamHttpActionAttempts {\n client: Client\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions = {}) {\n const clientOptions = parseOptions(apiKeyOrOptions)\n this.client = createClient(clientOptions)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpActionAttempts {\n const constructorOptions = { ...options, client }\n if (!isSeamHttpOptionsWithClient(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpActionAttempts(constructorOptions)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpActionAttempts {\n const constructorOptions = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpActionAttempts(constructorOptions)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpActionAttempts {\n const constructorOptions = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpActionAttempts(constructorOptions)\n }\n\n static async fromPublishableKey(\n publishableKey: string,\n userIdentifierKey: string,\n options: SeamHttpFromPublishableKeyOptions = {},\n ): Promise<SeamHttpActionAttempts> {\n warnOnInsecureuserIdentifierKey(userIdentifierKey)\n const clientOptions = parseOptions({ ...options, publishableKey })\n const client = createClient(clientOptions)\n const clientSessions = SeamHttpClientSessions.fromClient(client)\n const { token } = await clientSessions.getOrCreate({\n user_identifier_key: userIdentifierKey,\n })\n return SeamHttpActionAttempts.fromClientSessionToken(token, options)\n }\n\n async get(\n body?: ActionAttemptsGetParams,\n ): Promise<ActionAttemptsGetResponse['action_attempt']> {\n const { data } = await this.client.request<ActionAttemptsGetResponse>({\n url: '/action_attempts/get',\n method: 'post',\n data: body,\n })\n return data.action_attempt\n }\n\n async list(\n body?: ActionAttemptsListParams,\n ): Promise<ActionAttemptsListResponse['action_attempts']> {\n const { data } = await this.client.request<ActionAttemptsListResponse>({\n url: '/action_attempts/list',\n method: 'post',\n data: body,\n })\n return data.action_attempts\n }\n}\n\nexport type ActionAttemptsGetParams = RouteRequestBody<'/action_attempts/get'>\n\nexport type ActionAttemptsGetResponse = SetNonNullable<\n Required<RouteResponse<'/action_attempts/get'>>\n>\n\nexport type ActionAttemptsListParams = RouteRequestBody<'/action_attempts/list'>\n\nexport type ActionAttemptsListResponse = SetNonNullable<\n Required<RouteResponse<'/action_attempts/list'>>\n>\n","/*\n * Automatically generated by generate-routes.ts.\n * Do not edit this file or add other files to this directory.\n */\n\nimport type {\n RouteRequestBody,\n RouteRequestParams,\n RouteResponse,\n} from '@seamapi/types/connect'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { warnOnInsecureuserIdentifierKey } from 'lib/seam/connect/auth.js'\nimport { type Client, createClient } from 'lib/seam/connect/client.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n type SeamHttpFromPublishableKeyOptions,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n} from 'lib/seam/connect/options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nimport { SeamHttpClientSessions } from './client-sessions.js'\n\nexport class SeamHttpConnectWebviews {\n client: Client\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions = {}) {\n const clientOptions = parseOptions(apiKeyOrOptions)\n this.client = createClient(clientOptions)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpConnectWebviews {\n const constructorOptions = { ...options, client }\n if (!isSeamHttpOptionsWithClient(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpConnectWebviews(constructorOptions)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpConnectWebviews {\n const constructorOptions = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpConnectWebviews(constructorOptions)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpConnectWebviews {\n const constructorOptions = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpConnectWebviews(constructorOptions)\n }\n\n static async fromPublishableKey(\n publishableKey: string,\n userIdentifierKey: string,\n options: SeamHttpFromPublishableKeyOptions = {},\n ): Promise<SeamHttpConnectWebviews> {\n warnOnInsecureuserIdentifierKey(userIdentifierKey)\n const clientOptions = parseOptions({ ...options, publishableKey })\n const client = createClient(clientOptions)\n const clientSessions = SeamHttpClientSessions.fromClient(client)\n const { token } = await clientSessions.getOrCreate({\n user_identifier_key: userIdentifierKey,\n })\n return SeamHttpConnectWebviews.fromClientSessionToken(token, options)\n }\n\n async create(\n body?: ConnectWebviewsCreateBody,\n ): Promise<ConnectWebviewsCreateResponse['connect_webview']> {\n const { data } = await this.client.request<ConnectWebviewsCreateResponse>({\n url: '/connect_webviews/create',\n method: 'post',\n data: body,\n })\n return data.connect_webview\n }\n\n async delete(body?: ConnectWebviewsDeleteBody): Promise<void> {\n await this.client.request<ConnectWebviewsDeleteResponse>({\n url: '/connect_webviews/delete',\n method: 'post',\n data: body,\n })\n }\n\n async get(\n body?: ConnectWebviewsGetParams,\n ): Promise<ConnectWebviewsGetResponse['connect_webview']> {\n const { data } = await this.client.request<ConnectWebviewsGetResponse>({\n url: '/connect_webviews/get',\n method: 'post',\n data: body,\n })\n return data.connect_webview\n }\n\n async list(\n body?: ConnectWebviewsListParams,\n ): Promise<ConnectWebviewsListResponse['connect_webviews']> {\n const { data } = await this.client.request<ConnectWebviewsListResponse>({\n url: '/connect_webviews/list',\n method: 'post',\n data: body,\n })\n return data.connect_webviews\n }\n\n async view(params?: ConnectWebviewsViewParams): Promise<void> {\n await this.client.request<ConnectWebviewsViewResponse>({\n url: '/connect_webviews/view',\n method: 'get',\n params,\n })\n }\n}\n\nexport type ConnectWebviewsCreateBody =\n RouteRequestBody<'/connect_webviews/create'>\n\nexport type ConnectWebviewsCreateResponse = SetNonNullable<\n Required<RouteResponse<'/connect_webviews/create'>>\n>\n\nexport type ConnectWebviewsDeleteBody =\n RouteRequestBody<'/connect_webviews/delete'>\n\nexport type ConnectWebviewsDeleteResponse = SetNonNullable<\n Required<RouteResponse<'/connect_webviews/delete'>>\n>\n\nexport type ConnectWebviewsGetParams = RouteRequestBody<'/connect_webviews/get'>\n\nexport type ConnectWebviewsGetResponse = SetNonNullable<\n Required<RouteResponse<'/connect_webviews/get'>>\n>\n\nexport type ConnectWebviewsListParams =\n RouteRequestBody<'/connect_webviews/list'>\n\nexport type ConnectWebviewsListResponse = SetNonNullable<\n Required<RouteResponse<'/connect_webviews/list'>>\n>\n\nexport type ConnectWebviewsViewParams =\n RouteRequestParams<'/connect_webviews/view'>\n\nexport type ConnectWebviewsViewResponse = SetNonNullable<\n Required<RouteResponse<'/connect_webviews/view'>>\n>\n","/*\n * Automatically generated by generate-routes.ts.\n * Do not edit this file or add other files to this directory.\n */\n\nimport type {\n RouteRequestBody,\n RouteRequestParams,\n RouteResponse,\n} from '@seamapi/types/connect'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { warnOnInsecureuserIdentifierKey } from 'lib/seam/connect/auth.js'\nimport { type Client, createClient } from 'lib/seam/connect/client.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n type SeamHttpFromPublishableKeyOptions,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n} from 'lib/seam/connect/options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nimport { SeamHttpClientSessions } from './client-sessions.js'\n\nexport class SeamHttpConnectedAccounts {\n client: Client\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions = {}) {\n const clientOptions = parseOptions(apiKeyOrOptions)\n this.client = createClient(clientOptions)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpConnectedAccounts {\n const constructorOptions = { ...options, client }\n if (!isSeamHttpOptionsWithClient(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpConnectedAccounts(constructorOptions)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpConnectedAccounts {\n const constructorOptions = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpConnectedAccounts(constructorOptions)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpConnectedAccounts {\n const constructorOptions = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpConnectedAccounts(constructorOptions)\n }\n\n static async fromPublishableKey(\n publishableKey: string,\n userIdentifierKey: string,\n options: SeamHttpFromPublishableKeyOptions = {},\n ): Promise<SeamHttpConnectedAccounts> {\n warnOnInsecureuserIdentifierKey(userIdentifierKey)\n const clientOptions = parseOptions({ ...options, publishableKey })\n const client = createClient(clientOptions)\n const clientSessions = SeamHttpClientSessions.fromClient(client)\n const { token } = await clientSessions.getOrCreate({\n user_identifier_key: userIdentifierKey,\n })\n return SeamHttpConnectedAccounts.fromClientSessionToken(token, options)\n }\n\n async delete(body?: ConnectedAccountsDeleteBody): Promise<void> {\n await this.client.request<ConnectedAccountsDeleteResponse>({\n url: '/connected_accounts/delete',\n method: 'post',\n data: body,\n })\n }\n\n async get(\n body?: ConnectedAccountsGetParams,\n ): Promise<ConnectedAccountsGetResponse['connected_account']> {\n const { data } = await this.client.request<ConnectedAccountsGetResponse>({\n url: '/connected_accounts/get',\n method: 'post',\n data: body,\n })\n return data.connected_account\n }\n\n async list(\n params?: ConnectedAccountsListParams,\n ): Promise<ConnectedAccountsListResponse['connected_accounts']> {\n const { data } = await this.client.request<ConnectedAccountsListResponse>({\n url: '/connected_accounts/list',\n method: 'get',\n params,\n })\n return data.connected_accounts\n }\n}\n\nexport type ConnectedAccountsDeleteBody =\n RouteRequestBody<'/connected_accounts/delete'>\n\nexport type ConnectedAccountsDeleteResponse = SetNonNullable<\n Required<RouteResponse<'/connected_accounts/delete'>>\n>\n\nexport type ConnectedAccountsGetParams =\n RouteRequestBody<'/connected_accounts/get'>\n\nexport type ConnectedAccountsGetResponse = SetNonNullable<\n Required<RouteResponse<'/connected_accounts/get'>>\n>\n\nexport type ConnectedAccountsListParams =\n RouteRequestParams<'/connected_accounts/list'>\n\nexport type ConnectedAccountsListResponse = SetNonNullable<\n Required<RouteResponse<'/connected_accounts/list'>>\n>\n","/*\n * Automatically generated by generate-routes.ts.\n * Do not edit this file or add other files to this directory.\n */\n\nimport type { RouteRequestBody, RouteResponse } from '@seamapi/types/connect'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { warnOnInsecureuserIdentifierKey } from 'lib/seam/connect/auth.js'\nimport { type Client, createClient } from 'lib/seam/connect/client.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n type SeamHttpFromPublishableKeyOptions,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n} from 'lib/seam/connect/options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nimport { SeamHttpClientSessions } from './client-sessions.js'\n\nexport class SeamHttpDevicesUnmanaged {\n client: Client\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions = {}) {\n const clientOptions = parseOptions(apiKeyOrOptions)\n this.client = createClient(clientOptions)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpDevicesUnmanaged {\n const constructorOptions = { ...options, client }\n if (!isSeamHttpOptionsWithClient(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpDevicesUnmanaged(constructorOptions)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpDevicesUnmanaged {\n const constructorOptions = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpDevicesUnmanaged(constructorOptions)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpDevicesUnmanaged {\n const constructorOptions = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpDevicesUnmanaged(constructorOptions)\n }\n\n static async fromPublishableKey(\n publishableKey: string,\n userIdentifierKey: string,\n options: SeamHttpFromPublishableKeyOptions = {},\n ): Promise<SeamHttpDevicesUnmanaged> {\n warnOnInsecureuserIdentifierKey(userIdentifierKey)\n const clientOptions = parseOptions({ ...options, publishableKey })\n const client = createClient(clientOptions)\n const clientSessions = SeamHttpClientSessions.fromClient(client)\n const { token } = await clientSessions.getOrCreate({\n user_identifier_key: userIdentifierKey,\n })\n return SeamHttpDevicesUnmanaged.fromClientSessionToken(token, options)\n }\n\n async get(\n body?: DevicesUnmanagedGetParams,\n ): Promise<DevicesUnmanagedGetResponse['device']> {\n const { data } = await this.client.request<DevicesUnmanagedGetResponse>({\n url: '/devices/unmanaged/get',\n method: 'post',\n data: body,\n })\n return data.device\n }\n\n async list(\n body?: DevicesUnmanagedListParams,\n ): Promise<DevicesUnmanagedListResponse['devices']> {\n const { data } = await this.client.request<DevicesUnmanagedListResponse>({\n url: '/devices/unmanaged/list',\n method: 'post',\n data: body,\n })\n return data.devices\n }\n\n async update(body?: DevicesUnmanagedUpdateBody): Promise<void> {\n await this.client.request<DevicesUnmanagedUpdateResponse>({\n url: '/devices/unmanaged/update',\n method: 'post',\n data: body,\n })\n }\n}\n\nexport type DevicesUnmanagedGetParams =\n RouteRequestBody<'/devices/unmanaged/get'>\n\nexport type DevicesUnmanagedGetResponse = SetNonNullable<\n Required<RouteResponse<'/devices/unmanaged/get'>>\n>\n\nexport type DevicesUnmanagedListParams =\n RouteRequestBody<'/devices/unmanaged/list'>\n\nexport type DevicesUnmanagedListResponse = SetNonNullable<\n Required<RouteResponse<'/devices/unmanaged/list'>>\n>\n\nexport type DevicesUnmanagedUpdateBody =\n RouteRequestBody<'/devices/unmanaged/update'>\n\nexport type DevicesUnmanagedUpdateResponse = SetNonNullable<\n Required<RouteResponse<'/devices/unmanaged/update'>>\n>\n","/*\n * Automatically generated by generate-routes.ts.\n * Do not edit this file or add other files to this directory.\n */\n\nimport type { RouteRequestBody, RouteResponse } from '@seamapi/types/connect'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { warnOnInsecureuserIdentifierKey } from 'lib/seam/connect/auth.js'\nimport { type Client, createClient } from 'lib/seam/connect/client.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n type SeamHttpFromPublishableKeyOptions,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n} from 'lib/seam/connect/options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nimport { SeamHttpClientSessions } from './client-sessions.js'\nimport { SeamHttpDevicesUnmanaged } from './devices-unmanaged.js'\n\nexport class SeamHttpDevices {\n client: Client\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions = {}) {\n const clientOptions = parseOptions(apiKeyOrOptions)\n this.client = createClient(clientOptions)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpDevices {\n const constructorOptions = { ...options, client }\n if (!isSeamHttpOptionsWithClient(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpDevices(constructorOptions)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpDevices {\n const constructorOptions = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpDevices(constructorOptions)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpDevices {\n const constructorOptions = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpDevices(constructorOptions)\n }\n\n static async fromPublishableKey(\n publishableKey: string,\n userIdentifierKey: string,\n options: SeamHttpFromPublishableKeyOptions = {},\n ): Promise<SeamHttpDevices> {\n warnOnInsecureuserIdentifierKey(userIdentifierKey)\n const clientOptions = parseOptions({ ...options, publishableKey })\n const client = createClient(clientOptions)\n const clientSessions = SeamHttpClientSessions.fromClient(client)\n const { token } = await clientSessions.getOrCreate({\n user_identifier_key: userIdentifierKey,\n })\n return SeamHttpDevices.fromClientSessionToken(token, options)\n }\n\n get unmanaged(): SeamHttpDevicesUnmanaged {\n return SeamHttpDevicesUnmanaged.fromClient(this.client)\n }\n\n async delete(body?: DevicesDeleteBody): Promise<void> {\n await this.client.request<DevicesDeleteResponse>({\n url: '/devices/delete',\n method: 'post',\n data: body,\n })\n }\n\n async get(body?: DevicesGetParams): Promise<DevicesGetResponse['device']> {\n const { data } = await this.client.request<DevicesGetResponse>({\n url: '/devices/get',\n method: 'post',\n data: body,\n })\n return data.device\n }\n\n async list(\n body?: DevicesListParams,\n ): Promise<DevicesListResponse['devices']> {\n const { data } = await this.client.request<DevicesListResponse>({\n url: '/devices/list',\n method: 'post',\n data: body,\n })\n return data.devices\n }\n\n async listDeviceProviders(\n body?: DevicesListDeviceProvidersParams,\n ): Promise<DevicesListDeviceProvidersResponse['device_providers']> {\n const { data } =\n await this.client.request<DevicesListDeviceProvidersResponse>({\n url: '/devices/list_device_providers',\n method: 'post',\n data: body,\n })\n return data.device_providers\n }\n\n async update(body?: DevicesUpdateBody): Promise<void> {\n await this.client.request<DevicesUpdateResponse>({\n url: '/devices/update',\n method: 'post',\n data: body,\n })\n }\n}\n\nexport type DevicesDeleteBody = RouteRequestBody<'/devices/delete'>\n\nexport type DevicesDeleteResponse = SetNonNullable<\n Required<RouteResponse<'/devices/delete'>>\n>\n\nexport type DevicesGetParams = RouteRequestBody<'/devices/get'>\n\nexport type DevicesGetResponse = SetNonNullable<\n Required<RouteResponse<'/devices/get'>>\n>\n\nexport type DevicesListParams = RouteRequestBody<'/devices/list'>\n\nexport type DevicesListResponse = SetNonNullable<\n Required<RouteResponse<'/devices/list'>>\n>\n\nexport type DevicesListDeviceProvidersParams =\n RouteRequestBody<'/devices/list_device_providers'>\n\nexport type DevicesListDeviceProvidersResponse = SetNonNullable<\n Required<RouteResponse<'/devices/list_device_providers'>>\n>\n\nexport type DevicesUpdateBody = RouteRequestBody<'/devices/update'>\n\nexport type DevicesUpdateResponse = SetNonNullable<\n Required<RouteResponse<'/devices/update'>>\n>\n","/*\n * Automatically generated by generate-routes.ts.\n * Do not edit this file or add other files to this directory.\n */\n\nimport type { RouteRequestBody, RouteResponse } from '@seamapi/types/connect'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { warnOnInsecureuserIdentifierKey } from 'lib/seam/connect/auth.js'\nimport { type Client, createClient } from 'lib/seam/connect/client.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n type SeamHttpFromPublishableKeyOptions,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n} from 'lib/seam/connect/options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nimport { SeamHttpClientSessions } from './client-sessions.js'\n\nexport class SeamHttpEvents {\n client: Client\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions = {}) {\n const clientOptions = parseOptions(apiKeyOrOptions)\n this.client = createClient(clientOptions)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpEvents {\n const constructorOptions = { ...options, client }\n if (!isSeamHttpOptionsWithClient(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpEvents(constructorOptions)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpEvents {\n const constructorOptions = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpEvents(constructorOptions)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpEvents {\n const constructorOptions = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpEvents(constructorOptions)\n }\n\n static async fromPublishableKey(\n publishableKey: string,\n userIdentifierKey: string,\n options: SeamHttpFromPublishableKeyOptions = {},\n ): Promise<SeamHttpEvents> {\n warnOnInsecureuserIdentifierKey(userIdentifierKey)\n const clientOptions = parseOptions({ ...options, publishableKey })\n const client = createClient(clientOptions)\n const clientSessions = SeamHttpClientSessions.fromClient(client)\n const { token } = await clientSessions.getOrCreate({\n user_identifier_key: userIdentifierKey,\n })\n return SeamHttpEvents.fromClientSessionToken(token, options)\n }\n\n async get(body?: EventsGetParams): Promise<EventsGetResponse['event']> {\n const { data } = await this.client.request<EventsGetResponse>({\n url: '/events/get',\n method: 'post',\n data: body,\n })\n return data.event\n }\n\n async list(body?: EventsListParams): Promise<EventsListResponse['events']> {\n const { data } = await this.client.request<EventsListResponse>({\n url: '/events/list',\n method: 'post',\n data: body,\n })\n return data.events\n }\n}\n\nexport type EventsGetParams = RouteRequestBody<'/events/get'>\n\nexport type EventsGetResponse = SetNonNullable<\n Required<RouteResponse<'/events/get'>>\n>\n\nexport type EventsListParams = RouteRequestBody<'/events/list'>\n\nexport type EventsListResponse = SetNonNullable<\n Required<RouteResponse<'/events/list'>>\n>\n","/*\n * Automatically generated by generate-routes.ts.\n * Do not edit this file or add other files to this directory.\n */\n\nimport type { RouteRequestBody, RouteResponse } from '@seamapi/types/connect'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { warnOnInsecureuserIdentifierKey } from 'lib/seam/connect/auth.js'\nimport { type Client, createClient } from 'lib/seam/connect/client.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n type SeamHttpFromPublishableKeyOptions,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n} from 'lib/seam/connect/options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nimport { SeamHttpClientSessions } from './client-sessions.js'\n\nexport class SeamHttpLocks {\n client: Client\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions = {}) {\n const clientOptions = parseOptions(apiKeyOrOptions)\n this.client = createClient(clientOptions)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpLocks {\n const constructorOptions = { ...options, client }\n if (!isSeamHttpOptionsWithClient(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpLocks(constructorOptions)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpLocks {\n const constructorOptions = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpLocks(constructorOptions)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpLocks {\n const constructorOptions = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpLocks(constructorOptions)\n }\n\n static async fromPublishableKey(\n publishableKey: string,\n userIdentifierKey: string,\n options: SeamHttpFromPublishableKeyOptions = {},\n ): Promise<SeamHttpLocks> {\n warnOnInsecureuserIdentifierKey(userIdentifierKey)\n const clientOptions = parseOptions({ ...options, publishableKey })\n const client = createClient(clientOptions)\n const clientSessions = SeamHttpClientSessions.fromClient(client)\n const { token } = await clientSessions.getOrCreate({\n user_identifier_key: userIdentifierKey,\n })\n return SeamHttpLocks.fromClientSessionToken(token, options)\n }\n\n async get(body?: LocksGetParams): Promise<LocksGetResponse['device']> {\n const { data } = await this.client.request<LocksGetResponse>({\n url: '/locks/get',\n method: 'post',\n data: body,\n })\n return data.device\n }\n\n async list(body?: LocksListParams): Promise<LocksListResponse['devices']> {\n const { data } = await this.client.request<LocksListResponse>({\n url: '/locks/list',\n method: 'post',\n data: body,\n })\n return data.devices\n }\n\n async lockDoor(\n body?: LocksLockDoorBody,\n ): Promise<LocksLockDoorResponse['action_attempt']> {\n const { data } = await this.client.request<LocksLockDoorResponse>({\n url: '/locks/lock_door',\n method: 'post',\n data: body,\n })\n return data.action_attempt\n }\n\n async unlockDoor(\n body?: LocksUnlockDoorBody,\n ): Promise<LocksUnlockDoorResponse['action_attempt']> {\n const { data } = await this.client.request<LocksUnlockDoorResponse>({\n url: '/locks/unlock_door',\n method: 'post',\n data: body,\n })\n return data.action_attempt\n }\n}\n\nexport type LocksGetParams = RouteRequestBody<'/locks/get'>\n\nexport type LocksGetResponse = SetNonNullable<\n Required<RouteResponse<'/locks/get'>>\n>\n\nexport type LocksListParams = RouteRequestBody<'/locks/list'>\n\nexport type LocksListResponse = SetNonNullable<\n Required<RouteResponse<'/locks/list'>>\n>\n\nexport type LocksLockDoorBody = RouteRequestBody<'/locks/lock_door'>\n\nexport type LocksLockDoorResponse = SetNonNullable<\n Required<RouteResponse<'/locks/lock_door'>>\n>\n\nexport type LocksUnlockDoorBody = RouteRequestBody<'/locks/unlock_door'>\n\nexport type LocksUnlockDoorResponse = SetNonNullable<\n Required<RouteResponse<'/locks/unlock_door'>>\n>\n","/*\n * Automatically generated by generate-routes.ts.\n * Do not edit this file or add other files to this directory.\n */\n\nimport type { RouteRequestBody, RouteResponse } from '@seamapi/types/connect'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { warnOnInsecureuserIdentifierKey } from 'lib/seam/connect/auth.js'\nimport { type Client, createClient } from 'lib/seam/connect/client.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n type SeamHttpFromPublishableKeyOptions,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n} from 'lib/seam/connect/options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nimport { SeamHttpClientSessions } from './client-sessions.js'\n\nexport class SeamHttpNoiseSensorsNoiseThresholds {\n client: Client\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions = {}) {\n const clientOptions = parseOptions(apiKeyOrOptions)\n this.client = createClient(clientOptions)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpNoiseSensorsNoiseThresholds {\n const constructorOptions = { ...options, client }\n if (!isSeamHttpOptionsWithClient(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpNoiseSensorsNoiseThresholds(constructorOptions)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpNoiseSensorsNoiseThresholds {\n const constructorOptions = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpNoiseSensorsNoiseThresholds(constructorOptions)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpNoiseSensorsNoiseThresholds {\n const constructorOptions = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpNoiseSensorsNoiseThresholds(constructorOptions)\n }\n\n static async fromPublishableKey(\n publishableKey: string,\n userIdentifierKey: string,\n options: SeamHttpFromPublishableKeyOptions = {},\n ): Promise<SeamHttpNoiseSensorsNoiseThresholds> {\n warnOnInsecureuserIdentifierKey(userIdentifierKey)\n const clientOptions = parseOptions({ ...options, publishableKey })\n const client = createClient(clientOptions)\n const clientSessions = SeamHttpClientSessions.fromClient(client)\n const { token } = await clientSessions.getOrCreate({\n user_identifier_key: userIdentifierKey,\n })\n return SeamHttpNoiseSensorsNoiseThresholds.fromClientSessionToken(\n token,\n options,\n )\n }\n\n async create(body?: NoiseSensorsNoiseThresholdsCreateBody): Promise<void> {\n await this.client.request<NoiseSensorsNoiseThresholdsCreateResponse>({\n url: '/noise_sensors/noise_thresholds/create',\n method: 'post',\n data: body,\n })\n }\n\n async delete(body?: NoiseSensorsNoiseThresholdsDeleteBody): Promise<void> {\n await this.client.request<NoiseSensorsNoiseThresholdsDeleteResponse>({\n url: '/noise_sensors/noise_thresholds/delete',\n method: 'post',\n data: body,\n })\n }\n\n async get(\n body?: NoiseSensorsNoiseThresholdsGetParams,\n ): Promise<NoiseSensorsNoiseThresholdsGetResponse['noise_threshold']> {\n const { data } =\n await this.client.request<NoiseSensorsNoiseThresholdsGetResponse>({\n url: '/noise_sensors/noise_thresholds/get',\n method: 'post',\n data: body,\n })\n return data.noise_threshold\n }\n\n async list(\n body?: NoiseSensorsNoiseThresholdsListParams,\n ): Promise<NoiseSensorsNoiseThresholdsListResponse['noise_thresholds']> {\n const { data } =\n await this.client.request<NoiseSensorsNoiseThresholdsListResponse>({\n url: '/noise_sensors/noise_thresholds/list',\n method: 'post',\n data: body,\n })\n return data.noise_thresholds\n }\n\n async update(body?: NoiseSensorsNoiseThresholdsUpdateBody): Promise<void> {\n await this.client.request<NoiseSensorsNoiseThresholdsUpdateResponse>({\n url: '/noise_sensors/noise_thresholds/update',\n method: 'post',\n data: body,\n })\n }\n}\n\nexport type NoiseSensorsNoiseThresholdsCreateBody =\n RouteRequestBody<'/noise_sensors/noise_thresholds/create'>\n\nexport type NoiseSensorsNoiseThresholdsCreateResponse = SetNonNullable<\n Required<RouteResponse<'/noise_sensors/noise_thresholds/create'>>\n>\n\nexport type NoiseSensorsNoiseThresholdsDeleteBody =\n RouteRequestBody<'/noise_sensors/noise_thresholds/delete'>\n\nexport type NoiseSensorsNoiseThresholdsDeleteResponse = SetNonNullable<\n Required<RouteResponse<'/noise_sensors/noise_thresholds/delete'>>\n>\n\nexport type NoiseSensorsNoiseThresholdsGetParams =\n RouteRequestBody<'/noise_sensors/noise_thresholds/get'>\n\nexport type NoiseSensorsNoiseThresholdsGetResponse = SetNonNullable<\n Required<RouteResponse<'/noise_sensors/noise_thresholds/get'>>\n>\n\nexport type NoiseSensorsNoiseThresholdsListParams =\n RouteRequestBody<'/noise_sensors/noise_thresholds/list'>\n\nexport type NoiseSensorsNoiseThresholdsListResponse = SetNonNullable<\n Required<RouteResponse<'/noise_sensors/noise_thresholds/list'>>\n>\n\nexport type NoiseSensorsNoiseThresholdsUpdateBody =\n RouteRequestBody<'/noise_sensors/noise_thresholds/update'>\n\nexport type NoiseSensorsNoiseThresholdsUpdateResponse = SetNonNullable<\n Required<RouteResponse<'/noise_sensors/noise_thresholds/update'>>\n>\n","/*\n * Automatically generated by generate-routes.ts.\n * Do not edit this file or add other files to this directory.\n */\n\nimport { warnOnInsecureuserIdentifierKey } from 'lib/seam/connect/auth.js'\nimport { type Client, createClient } from 'lib/seam/connect/client.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n type SeamHttpFromPublishableKeyOptions,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n} from 'lib/seam/connect/options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nimport { SeamHttpClientSessions } from './client-sessions.js'\nimport { SeamHttpNoiseSensorsNoiseThresholds } from './noise-sensors-noise-thresholds.js'\n\nexport class SeamHttpNoiseSensors {\n client: Client\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions = {}) {\n const clientOptions = parseOptions(apiKeyOrOptions)\n this.client = createClient(clientOptions)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpNoiseSensors {\n const constructorOptions = { ...options, client }\n if (!isSeamHttpOptionsWithClient(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpNoiseSensors(constructorOptions)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpNoiseSensors {\n const constructorOptions = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpNoiseSensors(constructorOptions)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpNoiseSensors {\n const constructorOptions = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpNoiseSensors(constructorOptions)\n }\n\n static async fromPublishableKey(\n publishableKey: string,\n userIdentifierKey: string,\n options: SeamHttpFromPublishableKeyOptions = {},\n ): Promise<SeamHttpNoiseSensors> {\n warnOnInsecureuserIdentifierKey(userIdentifierKey)\n const clientOptions = parseOptions({ ...options, publishableKey })\n const client = createClient(clientOptions)\n const clientSessions = SeamHttpClientSessions.fromClient(client)\n const { token } = await clientSessions.getOrCreate({\n user_identifier_key: userIdentifierKey,\n })\n return SeamHttpNoiseSensors.fromClientSessionToken(token, options)\n }\n\n get noiseThresholds(): SeamHttpNoiseSensorsNoiseThresholds {\n return SeamHttpNoiseSensorsNoiseThresholds.fromClient(this.client)\n }\n}\n","/*\n * Automatically generated by generate-routes.ts.\n * Do not edit this file or add other files to this directory.\n */\n\nimport type { RouteRequestBody, RouteResponse } from '@seamapi/types/connect'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { warnOnInsecureuserIdentifierKey } from 'lib/seam/connect/auth.js'\nimport { type Client, createClient } from 'lib/seam/connect/client.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n type SeamHttpFromPublishableKeyOptions,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n} from 'lib/seam/connect/options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nimport { SeamHttpClientSessions } from './client-sessions.js'\n\nexport class SeamHttpThermostatsClimateSettingSchedules {\n client: Client\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions = {}) {\n const clientOptions = parseOptions(apiKeyOrOptions)\n this.client = createClient(clientOptions)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpThermostatsClimateSettingSchedules {\n const constructorOptions = { ...options, client }\n if (!isSeamHttpOptionsWithClient(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpThermostatsClimateSettingSchedules(constructorOptions)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpThermostatsClimateSettingSchedules {\n const constructorOptions = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpThermostatsClimateSettingSchedules(constructorOptions)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpThermostatsClimateSettingSchedules {\n const constructorOptions = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpThermostatsClimateSettingSchedules(constructorOptions)\n }\n\n static async fromPublishableKey(\n publishableKey: string,\n userIdentifierKey: string,\n options: SeamHttpFromPublishableKeyOptions = {},\n ): Promise<SeamHttpThermostatsClimateSettingSchedules> {\n warnOnInsecureuserIdentifierKey(userIdentifierKey)\n const clientOptions = parseOptions({ ...options, publishableKey })\n const client = createClient(clientOptions)\n const clientSessions = SeamHttpClientSessions.fromClient(client)\n const { token } = await clientSessions.getOrCreate({\n user_identifier_key: userIdentifierKey,\n })\n return SeamHttpThermostatsClimateSettingSchedules.fromClientSessionToken(\n token,\n options,\n )\n }\n\n async create(\n body?: ThermostatsClimateSettingSchedulesCreateBody,\n ): Promise<\n ThermostatsClimateSettingSchedulesCreateResponse['climate_setting_schedule']\n > {\n const { data } =\n await this.client.request<ThermostatsClimateSettingSchedulesCreateResponse>(\n {\n url: '/thermostats/climate_setting_schedules/create',\n method: 'post',\n data: body,\n },\n )\n return data.climate_setting_schedule\n }\n\n async delete(\n body?: ThermostatsClimateSettingSchedulesDeleteBody,\n ): Promise<void> {\n await this.client.request<ThermostatsClimateSettingSchedulesDeleteResponse>(\n {\n url: '/thermostats/climate_setting_schedules/delete',\n method: 'post',\n data: body,\n },\n )\n }\n\n async get(\n body?: ThermostatsClimateSettingSchedulesGetParams,\n ): Promise<\n ThermostatsClimateSettingSchedulesGetResponse['climate_setting_schedule']\n > {\n const { data } =\n await this.client.request<ThermostatsClimateSettingSchedulesGetResponse>({\n url: '/thermostats/climate_setting_schedules/get',\n method: 'post',\n data: body,\n })\n return data.climate_setting_schedule\n }\n\n async list(\n body?: ThermostatsClimateSettingSchedulesListParams,\n ): Promise<\n ThermostatsClimateSettingSchedulesListResponse['climate_setting_schedules']\n > {\n const { data } =\n await this.client.request<ThermostatsClimateSettingSchedulesListResponse>(\n {\n url: '/thermostats/climate_setting_schedules/list',\n method: 'post',\n data: body,\n },\n )\n return data.climate_setting_schedules\n }\n\n async update(\n body?: ThermostatsClimateSettingSchedulesUpdateBody,\n ): Promise<void> {\n await this.client.request<ThermostatsClimateSettingSchedulesUpdateResponse>(\n {\n url: '/thermostats/climate_setting_schedules/update',\n method: 'post',\n data: body,\n },\n )\n }\n}\n\nexport type ThermostatsClimateSettingSchedulesCreateBody =\n RouteRequestBody<'/thermostats/climate_setting_schedules/create'>\n\nexport type ThermostatsClimateSettingSchedulesCreateResponse = SetNonNullable<\n Required<RouteResponse<'/thermostats/climate_setting_schedules/create'>>\n>\n\nexport type ThermostatsClimateSettingSchedulesDeleteBody =\n RouteRequestBody<'/thermostats/climate_setting_schedules/delete'>\n\nexport type ThermostatsClimateSettingSchedulesDeleteResponse = SetNonNullable<\n Required<RouteResponse<'/thermostats/climate_setting_schedules/delete'>>\n>\n\nexport type ThermostatsClimateSettingSchedulesGetParams =\n RouteRequestBody<'/thermostats/climate_setting_schedules/get'>\n\nexport type ThermostatsClimateSettingSchedulesGetResponse = SetNonNullable<\n Required<RouteResponse<'/thermostats/climate_setting_schedules/get'>>\n>\n\nexport type ThermostatsClimateSettingSchedulesListParams =\n RouteRequestBody<'/thermostats/climate_setting_schedules/list'>\n\nexport type ThermostatsClimateSettingSchedulesListResponse = SetNonNullable<\n Required<RouteResponse<'/thermostats/climate_setting_schedules/list'>>\n>\n\nexport type ThermostatsClimateSettingSchedulesUpdateBody =\n RouteRequestBody<'/thermostats/climate_setting_schedules/update'>\n\nexport type ThermostatsClimateSettingSchedulesUpdateResponse = SetNonNullable<\n Required<RouteResponse<'/thermostats/climate_setting_schedules/update'>>\n>\n","/*\n * Automatically generated by generate-routes.ts.\n * Do not edit this file or add other files to this directory.\n */\n\nimport type { RouteRequestBody, RouteResponse } from '@seamapi/types/connect'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { warnOnInsecureuserIdentifierKey } from 'lib/seam/connect/auth.js'\nimport { type Client, createClient } from 'lib/seam/connect/client.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n type SeamHttpFromPublishableKeyOptions,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n} from 'lib/seam/connect/options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nimport { SeamHttpClientSessions } from './client-sessions.js'\nimport { SeamHttpThermostatsClimateSettingSchedules } from './thermostats-climate-setting-schedules.js'\n\nexport class SeamHttpThermostats {\n client: Client\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions = {}) {\n const clientOptions = parseOptions(apiKeyOrOptions)\n this.client = createClient(clientOptions)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpThermostats {\n const constructorOptions = { ...options, client }\n if (!isSeamHttpOptionsWithClient(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpThermostats(constructorOptions)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpThermostats {\n const constructorOptions = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpThermostats(constructorOptions)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpThermostats {\n const constructorOptions = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpThermostats(constructorOptions)\n }\n\n static async fromPublishableKey(\n publishableKey: string,\n userIdentifierKey: string,\n options: SeamHttpFromPublishableKeyOptions = {},\n ): Promise<SeamHttpThermostats> {\n warnOnInsecureuserIdentifierKey(userIdentifierKey)\n const clientOptions = parseOptions({ ...options, publishableKey })\n const client = createClient(clientOptions)\n const clientSessions = SeamHttpClientSessions.fromClient(client)\n const { token } = await clientSessions.getOrCreate({\n user_identifier_key: userIdentifierKey,\n })\n return SeamHttpThermostats.fromClientSessionToken(token, options)\n }\n\n get climateSettingSchedules(): SeamHttpThermostatsClimateSettingSchedules {\n return SeamHttpThermostatsClimateSettingSchedules.fromClient(this.client)\n }\n\n async cool(body?: ThermostatsCoolBody): Promise<void> {\n await this.client.request<ThermostatsCoolResponse>({\n url: '/thermostats/cool',\n method: 'post',\n data: body,\n })\n }\n\n async get(\n body?: ThermostatsGetParams,\n ): Promise<ThermostatsGetResponse['thermostat']> {\n const { data } = await this.client.request<ThermostatsGetResponse>({\n url: '/thermostats/get',\n method: 'post',\n data: body,\n })\n return data.thermostat\n }\n\n async heat(body?: ThermostatsHeatBody): Promise<void> {\n await this.client.request<ThermostatsHeatResponse>({\n url: '/thermostats/heat',\n method: 'post',\n data: body,\n })\n }\n\n async heatCool(body?: ThermostatsHeatCoolBody): Promise<void> {\n await this.client.request<ThermostatsHeatCoolResponse>({\n url: '/thermostats/heat_cool',\n method: 'post',\n data: body,\n })\n }\n\n async list(\n body?: ThermostatsListParams,\n ): Promise<ThermostatsListResponse['thermostats']> {\n const { data } = await this.client.request<ThermostatsListResponse>({\n url: '/thermostats/list',\n method: 'post',\n data: body,\n })\n return data.thermostats\n }\n\n async off(body?: ThermostatsOffBody): Promise<void> {\n await this.client.request<ThermostatsOffResponse>({\n url: '/thermostats/off',\n method: 'post',\n data: body,\n })\n }\n\n async setFanMode(body?: ThermostatsSetFanModeBody): Promise<void> {\n await this.client.request<ThermostatsSetFanModeResponse>({\n url: '/thermostats/set_fan_mode',\n method: 'post',\n data: body,\n })\n }\n\n async update(body?: ThermostatsUpdateBody): Promise<void> {\n await this.client.request<ThermostatsUpdateResponse>({\n url: '/thermostats/update',\n method: 'post',\n data: body,\n })\n }\n}\n\nexport type ThermostatsCoolBody = RouteRequestBody<'/thermostats/cool'>\n\nexport type ThermostatsCoolResponse = SetNonNullable<\n Required<RouteResponse<'/thermostats/cool'>>\n>\n\nexport type ThermostatsGetParams = RouteRequestBody<'/thermostats/get'>\n\nexport type ThermostatsGetResponse = SetNonNullable<\n Required<RouteResponse<'/thermostats/get'>>\n>\n\nexport type ThermostatsHeatBody = RouteRequestBody<'/thermostats/heat'>\n\nexport type ThermostatsHeatResponse = SetNonNullable<\n Required<RouteResponse<'/thermostats/heat'>>\n>\n\nexport type ThermostatsHeatCoolBody = RouteRequestBody<'/thermostats/heat_cool'>\n\nexport type ThermostatsHeatCoolResponse = SetNonNullable<\n Required<RouteResponse<'/thermostats/heat_cool'>>\n>\n\nexport type ThermostatsListParams = RouteRequestBody<'/thermostats/list'>\n\nexport type ThermostatsListResponse = SetNonNullable<\n Required<RouteResponse<'/thermostats/list'>>\n>\n\nexport type ThermostatsOffBody = RouteRequestBody<'/thermostats/off'>\n\nexport type ThermostatsOffResponse = SetNonNullable<\n Required<RouteResponse<'/thermostats/off'>>\n>\n\nexport type ThermostatsSetFanModeBody =\n RouteRequestBody<'/thermostats/set_fan_mode'>\n\nexport type ThermostatsSetFanModeResponse = SetNonNullable<\n Required<RouteResponse<'/thermostats/set_fan_mode'>>\n>\n\nexport type ThermostatsUpdateBody = RouteRequestBody<'/thermostats/update'>\n\nexport type ThermostatsUpdateResponse = SetNonNullable<\n Required<RouteResponse<'/thermostats/update'>>\n>\n","/*\n * Automatically generated by generate-routes.ts.\n * Do not edit this file or add other files to this directory.\n */\n\nimport type {\n RouteRequestBody,\n RouteRequestParams,\n RouteResponse,\n} from '@seamapi/types/connect'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { warnOnInsecureuserIdentifierKey } from 'lib/seam/connect/auth.js'\nimport { type Client, createClient } from 'lib/seam/connect/client.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n type SeamHttpFromPublishableKeyOptions,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n} from 'lib/seam/connect/options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nimport { SeamHttpClientSessions } from './client-sessions.js'\n\nexport class SeamHttpWebhooks {\n client: Client\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions = {}) {\n const clientOptions = parseOptions(apiKeyOrOptions)\n this.client = createClient(clientOptions)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpWebhooks {\n const constructorOptions = { ...options, client }\n if (!isSeamHttpOptionsWithClient(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpWebhooks(constructorOptions)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpWebhooks {\n const constructorOptions = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpWebhooks(constructorOptions)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpWebhooks {\n const constructorOptions = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpWebhooks(constructorOptions)\n }\n\n static async fromPublishableKey(\n publishableKey: string,\n userIdentifierKey: string,\n options: SeamHttpFromPublishableKeyOptions = {},\n ): Promise<SeamHttpWebhooks> {\n warnOnInsecureuserIdentifierKey(userIdentifierKey)\n const clientOptions = parseOptions({ ...options, publishableKey })\n const client = createClient(clientOptions)\n const clientSessions = SeamHttpClientSessions.fromClient(client)\n const { token } = await clientSessions.getOrCreate({\n user_identifier_key: userIdentifierKey,\n })\n return SeamHttpWebhooks.fromClientSessionToken(token, options)\n }\n\n async create(\n body?: WebhooksCreateBody,\n ): Promise<WebhooksCreateResponse['webhook']> {\n const { data } = await this.client.request<WebhooksCreateResponse>({\n url: '/webhooks/create',\n method: 'post',\n data: body,\n })\n return data.webhook\n }\n\n async delete(body?: WebhooksDeleteBody): Promise<void> {\n await this.client.request<WebhooksDeleteResponse>({\n url: '/webhooks/delete',\n method: 'post',\n data: body,\n })\n }\n\n async get(body?: WebhooksGetParams): Promise<WebhooksGetResponse['webhook']> {\n const { data } = await this.client.request<WebhooksGetResponse>({\n url: '/webhooks/get',\n method: 'post',\n data: body,\n })\n return data.webhook\n }\n\n async list(\n params?: WebhooksListParams,\n ): Promise<WebhooksListResponse['webhooks']> {\n const { data } = await this.client.request<WebhooksListResponse>({\n url: '/webhooks/list',\n method: 'get',\n params,\n })\n return data.webhooks\n }\n}\n\nexport type WebhooksCreateBody = RouteRequestBody<'/webhooks/create'>\n\nexport type WebhooksCreateResponse = SetNonNullable<\n Required<RouteResponse<'/webhooks/create'>>\n>\n\nexport type WebhooksDeleteBody = RouteRequestBody<'/webhooks/delete'>\n\nexport type WebhooksDeleteResponse = SetNonNullable<\n Required<RouteResponse<'/webhooks/delete'>>\n>\n\nexport type WebhooksGetParams = RouteRequestBody<'/webhooks/get'>\n\nexport type WebhooksGetResponse = SetNonNullable<\n Required<RouteResponse<'/webhooks/get'>>\n>\n\nexport type WebhooksListParams = RouteRequestParams<'/webhooks/list'>\n\nexport type WebhooksListResponse = SetNonNullable<\n Required<RouteResponse<'/webhooks/list'>>\n>\n","/*\n * Automatically generated by generate-routes.ts.\n * Do not edit this file or add other files to this directory.\n */\n\nimport type {\n RouteRequestBody,\n RouteRequestParams,\n RouteResponse,\n} from '@seamapi/types/connect'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { warnOnInsecureuserIdentifierKey } from 'lib/seam/connect/auth.js'\nimport { type Client, createClient } from 'lib/seam/connect/client.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n type SeamHttpFromPublishableKeyOptions,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n} from 'lib/seam/connect/options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nimport { SeamHttpClientSessions } from './client-sessions.js'\n\nexport class SeamHttpWorkspaces {\n client: Client\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions = {}) {\n const clientOptions = parseOptions(apiKeyOrOptions)\n this.client = createClient(clientOptions)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpWorkspaces {\n const constructorOptions = { ...options, client }\n if (!isSeamHttpOptionsWithClient(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpWorkspaces(constructorOptions)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpWorkspaces {\n const constructorOptions = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpWorkspaces(constructorOptions)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpWorkspaces {\n const constructorOptions = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpWorkspaces(constructorOptions)\n }\n\n static async fromPublishableKey(\n publishableKey: string,\n userIdentifierKey: string,\n options: SeamHttpFromPublishableKeyOptions = {},\n ): Promise<SeamHttpWorkspaces> {\n warnOnInsecureuserIdentifierKey(userIdentifierKey)\n const clientOptions = parseOptions({ ...options, publishableKey })\n const client = createClient(clientOptions)\n const clientSessions = SeamHttpClientSessions.fromClient(client)\n const { token } = await clientSessions.getOrCreate({\n user_identifier_key: userIdentifierKey,\n })\n return SeamHttpWorkspaces.fromClientSessionToken(token, options)\n }\n\n async get(\n params?: WorkspacesGetParams,\n ): Promise<WorkspacesGetResponse['workspace']> {\n const { data } = await this.client.request<WorkspacesGetResponse>({\n url: '/workspaces/get',\n method: 'get',\n params,\n })\n return data.workspace\n }\n\n async list(\n params?: WorkspacesListParams,\n ): Promise<WorkspacesListResponse['workspaces']> {\n const { data } = await this.client.request<WorkspacesListResponse>({\n url: '/workspaces/list',\n method: 'get',\n params,\n })\n return data.workspaces\n }\n\n async resetSandbox(body?: WorkspacesResetSandboxBody): Promise<void> {\n await this.client.request<WorkspacesResetSandboxResponse>({\n url: '/workspaces/reset_sandbox',\n method: 'post',\n data: body,\n })\n }\n}\n\nexport type WorkspacesGetParams = RouteRequestParams<'/workspaces/get'>\n\nexport type WorkspacesGetResponse = SetNonNullable<\n Required<RouteResponse<'/workspaces/get'>>\n>\n\nexport type WorkspacesListParams = RouteRequestParams<'/workspaces/list'>\n\nexport type WorkspacesListResponse = SetNonNullable<\n Required<RouteResponse<'/workspaces/list'>>\n>\n\nexport type WorkspacesResetSandboxBody =\n RouteRequestBody<'/workspaces/reset_sandbox'>\n\nexport type WorkspacesResetSandboxResponse = SetNonNullable<\n Required<RouteResponse<'/workspaces/reset_sandbox'>>\n>\n","import { warnOnInsecureuserIdentifierKey } from './auth.js'\nimport { type Client, createClient } from './client.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n type SeamHttpFromPublishableKeyOptions,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n} from './options.js'\nimport { parseOptions } from './parse-options.js'\nimport {\n SeamHttpAccessCodes,\n SeamHttpAcs,\n SeamHttpActionAttempts,\n SeamHttpClientSessions,\n SeamHttpConnectedAccounts,\n SeamHttpConnectWebviews,\n SeamHttpDevices,\n SeamHttpEvents,\n SeamHttpLocks,\n SeamHttpNoiseSensors,\n SeamHttpThermostats,\n SeamHttpWebhooks,\n SeamHttpWorkspaces,\n} from './routes/index.js'\n\nexport class SeamHttp {\n client: Client\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions = {}) {\n const clientOptions = parseOptions(apiKeyOrOptions)\n this.client = createClient(clientOptions)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttp {\n const constructorOptions = { ...options, client }\n if (!isSeamHttpOptionsWithClient(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttp(constructorOptions)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttp {\n const constructorOptions = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttp(constructorOptions)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttp {\n const constructorOptions = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttp(constructorOptions)\n }\n\n static async fromPublishableKey(\n publishableKey: string,\n userIdentifierKey: string,\n options: SeamHttpFromPublishableKeyOptions = {},\n ): Promise<SeamHttp> {\n warnOnInsecureuserIdentifierKey(userIdentifierKey)\n const clientOptions = parseOptions({ ...options, publishableKey })\n const client = createClient(clientOptions)\n const clientSessions = SeamHttpClientSessions.fromClient(client)\n const { token } = await clientSessions.getOrCreate({\n user_identifier_key: userIdentifierKey,\n })\n return SeamHttp.fromClientSessionToken(token, options)\n }\n\n get accessCodes(): SeamHttpAccessCodes {\n return SeamHttpAccessCodes.fromClient(this.client)\n }\n\n get acs(): SeamHttpAcs {\n return SeamHttpAcs.fromClient(this.client)\n }\n\n get actionAttempts(): SeamHttpActionAttempts {\n return SeamHttpActionAttempts.fromClient(this.client)\n }\n\n get clientSessions(): SeamHttpClientSessions {\n return SeamHttpClientSessions.fromClient(this.client)\n }\n\n get connectedAccounts(): SeamHttpConnectedAccounts {\n return SeamHttpConnectedAccounts.fromClient(this.client)\n }\n\n get connectWebviews(): SeamHttpConnectWebviews {\n return SeamHttpConnectWebviews.fromClient(this.client)\n }\n\n get devices(): SeamHttpDevices {\n return SeamHttpDevices.fromClient(this.client)\n }\n\n get events(): SeamHttpEvents {\n return SeamHttpEvents.fromClient(this.client)\n }\n\n get locks(): SeamHttpLocks {\n return SeamHttpLocks.fromClient(this.client)\n }\n\n get noiseSensors(): SeamHttpNoiseSensors {\n return SeamHttpNoiseSensors.fromClient(this.client)\n }\n\n get thermostats(): SeamHttpThermostats {\n return SeamHttpThermostats.fromClient(this.client)\n }\n\n get webhooks(): SeamHttpWebhooks {\n return SeamHttpWebhooks.fromClient(this.client)\n }\n\n get workspaces(): SeamHttpWorkspaces {\n return SeamHttpWorkspaces.fromClient(this.client)\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/lib/seam/connect/error-interceptor.ts","../src/lib/seam/connect/seam-http-error.ts","../src/lib/seam/connect/options.ts","../src/lib/seam/connect/auth.ts","../src/lib/seam/connect/client.ts","../src/lib/params-serializer.ts","../src/lib/version.ts","../src/lib/seam/connect/parse-options.ts","../src/lib/seam/connect/routes/client-sessions.ts","../src/lib/seam/connect/routes/access-codes-unmanaged.ts","../src/lib/seam/connect/routes/access-codes.ts","../src/lib/seam/connect/routes/acs-access-groups.ts","../src/lib/seam/connect/routes/acs-credentials.ts","../src/lib/seam/connect/routes/acs-systems.ts","../src/lib/seam/connect/routes/acs-users.ts","../src/lib/seam/connect/routes/acs.ts","../src/lib/seam/connect/routes/action-attempts.ts","../src/lib/seam/connect/routes/connect-webviews.ts","../src/lib/seam/connect/routes/connected-accounts.ts","../src/lib/seam/connect/routes/devices-unmanaged.ts","../src/lib/seam/connect/routes/devices.ts","../src/lib/seam/connect/routes/events.ts","../src/lib/seam/connect/routes/locks.ts","../src/lib/seam/connect/routes/noise-sensors-noise-thresholds.ts","../src/lib/seam/connect/routes/noise-sensors.ts","../src/lib/seam/connect/routes/thermostats-climate-setting-schedules.ts","../src/lib/seam/connect/routes/thermostats.ts","../src/lib/seam/connect/routes/webhooks.ts","../src/lib/seam/connect/routes/workspaces.ts","../src/lib/seam/connect/seam-http.ts"],"names":[],"mappings":"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","sourcesContent":["import { type AxiosError, isAxiosError } from 'axios'\n\nimport type { ApiErrorResponse } from './api-error-type.js'\nimport {\n SeamHttpApiError,\n SeamHttpInvalidInputError,\n SeamHttpUnauthorizedError,\n} from './seam-http-error.js'\n\nexport const errorInterceptor = async (err: unknown): Promise<void> => {\n if (!isAxiosError(err)) throw err\n\n const { response } = err\n const status = response?.status\n const headers = response?.headers\n const requestId = headers?.['seam-request-id'] ?? ''\n\n if (status == null) throw err\n\n if (status === 401) {\n throw new SeamHttpUnauthorizedError(requestId)\n }\n\n if (!isApiErrorResponse(response)) throw err\n\n const { type } = response.data.error\n\n const args = [response.data.error, status, requestId] as const\n\n if (type === 'invalid_input') throw new SeamHttpInvalidInputError(...args)\n throw new SeamHttpApiError(...args)\n}\n\nconst isApiErrorResponse = (\n response: AxiosError['response'],\n): response is NonNullable<AxiosError<ApiErrorResponse>['response']> => {\n if (response == null) return false\n const { headers, data } = response\n\n if (headers == null) return false\n\n const contentType = headers['content-type']\n if (\n typeof contentType === 'string' &&\n !contentType.startsWith('application/json')\n ) {\n return false\n }\n\n if (typeof data === 'object' && data != null) {\n return (\n 'error' in data &&\n typeof data.error === 'object' &&\n data.error != null &&\n 'type' in data.error &&\n typeof data.error.type === 'string'\n )\n }\n\n return false\n}\n","import type { ApiError } from './api-error-type.js'\n\nexport class SeamHttpApiError extends Error {\n code: string\n statusCode: number\n requestId: string\n data?: unknown\n\n constructor(error: ApiError, statusCode: number, requestId: string) {\n const { type, message, data } = error\n super(message)\n this.name = this.constructor.name\n Error.captureStackTrace(this, this.constructor)\n this.code = type\n this.statusCode = statusCode\n this.requestId = requestId\n if (data != null) this.data = data\n }\n}\n\nexport const isSeamHttpApiError = (\n error: unknown,\n): error is SeamHttpApiError => {\n return error instanceof SeamHttpApiError\n}\n\nexport class SeamHttpUnauthorizedError extends SeamHttpApiError {\n override code: 'unauthorized'\n override statusCode: 401\n\n constructor(requestId: string) {\n const type = 'unauthorized'\n const status = 401\n super({ type, message: 'Unauthorized' }, status, requestId)\n this.name = this.constructor.name\n Error.captureStackTrace(this, this.constructor)\n this.code = type\n this.statusCode = status\n this.requestId = requestId\n }\n}\n\nexport const isSeamHttpUnauthorizedError = (\n error: unknown,\n): error is SeamHttpUnauthorizedError => {\n return error instanceof SeamHttpUnauthorizedError\n}\n\nexport class SeamHttpInvalidInputError extends SeamHttpApiError {\n override code: 'invalid_input'\n\n constructor(error: ApiError, statusCode: number, requestId: string) {\n super(error, statusCode, requestId)\n this.name = this.constructor.name\n Error.captureStackTrace(this, this.constructor)\n this.code = 'invalid_input'\n }\n}\n\nexport const isSeamHttpInvalidInputError = (\n error: unknown,\n): error is SeamHttpInvalidInputError => {\n return error instanceof SeamHttpInvalidInputError\n}\n","import type { Client, ClientOptions } from './client.js'\n\nexport type SeamHttpOptions =\n | SeamHttpOptionsFromEnv\n | SeamHttpOptionsWithClient\n | SeamHttpOptionsWithApiKey\n | SeamHttpOptionsWithClientSessionToken\n | SeamHttpOptionsWithConsoleSessionToken\n | SeamHttpOptionsWithPersonalAccessToken\n\ninterface SeamHttpCommonOptions extends ClientOptions {\n endpoint?: string\n}\n\nexport interface SeamHttpFromPublishableKeyOptions\n extends SeamHttpCommonOptions {}\n\nexport interface SeamHttpOptionsFromEnv extends SeamHttpCommonOptions {}\n\nexport interface SeamHttpOptionsWithClient {\n client: Client\n}\n\nexport const isSeamHttpOptionsWithClient = (\n options: SeamHttpOptions,\n): options is SeamHttpOptionsWithClient => {\n if (!('client' in options)) return false\n if (options.client == null) return false\n\n const keys = Object.keys(options).filter((k) => k !== 'client')\n if (keys.length > 0) {\n throw new SeamHttpInvalidOptionsError(\n `The client option cannot be used with any other option, but received: ${keys.join(\n ', ',\n )}`,\n )\n }\n\n return true\n}\n\nexport interface SeamHttpOptionsWithApiKey extends SeamHttpCommonOptions {\n apiKey: string\n}\n\nexport const isSeamHttpOptionsWithApiKey = (\n options: SeamHttpOptions,\n): options is SeamHttpOptionsWithApiKey => {\n if (!('apiKey' in options)) return false\n if (options.apiKey == null) return false\n\n if ('clientSessionToken' in options && options.clientSessionToken != null) {\n throw new SeamHttpInvalidOptionsError(\n 'The clientSessionToken option cannot be used with the apiKey option',\n )\n }\n\n if ('consoleSessionToken' in options && options.consoleSessionToken != null) {\n throw new SeamHttpInvalidOptionsError(\n 'The consoleSessionToken option cannot be used with the apiKey option',\n )\n }\n\n if ('personalAccessToken' in options && options.personalAccessToken != null) {\n throw new SeamHttpInvalidOptionsError(\n 'The personalAccessToken option cannot be used with the apiKey option',\n )\n }\n\n return true\n}\n\nexport interface SeamHttpOptionsWithClientSessionToken\n extends SeamHttpCommonOptions {\n clientSessionToken: string\n}\n\nexport const isSeamHttpOptionsWithClientSessionToken = (\n options: SeamHttpOptions,\n): options is SeamHttpOptionsWithClientSessionToken => {\n if (!('clientSessionToken' in options)) return false\n if (options.clientSessionToken == null) return false\n\n if ('apiKey' in options && options.apiKey != null) {\n throw new SeamHttpInvalidOptionsError(\n 'The apiKey option cannot be used with the clientSessionToken option',\n )\n }\n\n if ('consoleSessionToken' in options && options.consoleSessionToken != null) {\n throw new SeamHttpInvalidOptionsError(\n 'The consoleSessionToken option cannot be used with the clientSessionToken option',\n )\n }\n\n if ('personalAccessToken' in options && options.personalAccessToken != null) {\n throw new SeamHttpInvalidOptionsError(\n 'The personalAccessToken option cannot be used with the clientSessionToken option',\n )\n }\n\n return true\n}\n\nexport interface SeamHttpOptionsWithConsoleSessionToken\n extends SeamHttpCommonOptions {\n consoleSessionToken: string\n workspaceId: string\n}\n\nexport const isSeamHttpOptionsWithConsoleSessionToken = (\n options: SeamHttpOptions,\n): options is SeamHttpOptionsWithConsoleSessionToken => {\n if (!('consoleSessionToken' in options)) return false\n if (options.consoleSessionToken == null) return false\n\n if (!('workspaceId' in options) || options.workspaceId == null) {\n throw new SeamHttpInvalidOptionsError(\n 'Must pass a workspaceId when using a consoleSessionToken',\n )\n }\n\n if ('apiKey' in options && options.apiKey != null) {\n throw new SeamHttpInvalidOptionsError(\n 'The apiKey option cannot be used with the consoleSessionToken option',\n )\n }\n\n if ('clientSessionToken' in options && options.clientSessionToken != null) {\n throw new SeamHttpInvalidOptionsError(\n 'The clientSessionToken option cannot be used with the consoleSessionToken option',\n )\n }\n\n if ('personalAccessToken' in options && options.personalAccessToken != null) {\n throw new SeamHttpInvalidOptionsError(\n 'The personalAccessToken option cannot be used with the consoleSessionToken option',\n )\n }\n\n return true\n}\n\nexport interface SeamHttpOptionsWithPersonalAccessToken\n extends SeamHttpCommonOptions {\n personalAccessToken: string\n workspaceId: string\n}\n\nexport const isSeamHttpOptionsWithPersonalAccessToken = (\n options: SeamHttpOptions,\n): options is SeamHttpOptionsWithPersonalAccessToken => {\n if (!('personalAccessToken' in options)) return false\n if (options.personalAccessToken == null) return false\n\n if (!('workspaceId' in options) || options.workspaceId == null) {\n throw new SeamHttpInvalidOptionsError(\n 'Must pass a workspaceId when using a personalAccessToken',\n )\n }\n\n if ('apiKey' in options && options.apiKey != null) {\n throw new SeamHttpInvalidOptionsError(\n 'The apiKey option cannot be used with the personalAccessToken option',\n )\n }\n\n if ('clientSessionToken' in options && options.clientSessionToken != null) {\n throw new SeamHttpInvalidOptionsError(\n 'The clientSessionToken option cannot be used with the personalAccessToken option',\n )\n }\n\n if ('consoleSessionToken' in options && options.consoleSessionToken != null) {\n throw new SeamHttpInvalidOptionsError(\n 'The consoleSessionToken option cannot be used with the personalAccessToken option',\n )\n }\n\n return true\n}\n\nexport class SeamHttpInvalidOptionsError extends Error {\n constructor(message: string) {\n super(`SeamHttp received invalid options: ${message}`)\n this.name = this.constructor.name\n Error.captureStackTrace(this, this.constructor)\n }\n}\n","import {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClientSessionToken,\n isSeamHttpOptionsWithConsoleSessionToken,\n isSeamHttpOptionsWithPersonalAccessToken,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClientSessionToken,\n type SeamHttpOptionsWithConsoleSessionToken,\n type SeamHttpOptionsWithPersonalAccessToken,\n} from './options.js'\nimport type { Options } from './parse-options.js'\n\ntype Headers = Record<string, string>\n\nexport const getAuthHeaders = (options: Options): Headers => {\n if ('publishableKey' in options) {\n return getAuthHeadersForPublishableKey(options.publishableKey)\n }\n\n if (isSeamHttpOptionsWithApiKey(options)) {\n return getAuthHeadersForApiKey(options)\n }\n\n if (isSeamHttpOptionsWithClientSessionToken(options)) {\n return getAuthHeadersForClientSessionToken(options)\n }\n\n if (isSeamHttpOptionsWithConsoleSessionToken(options)) {\n return getAuthHeadersForConsoleSessionToken(options)\n }\n\n if (isSeamHttpOptionsWithPersonalAccessToken(options)) {\n return getAuthHeadersForPersonalAccessToken(options)\n }\n\n throw new SeamHttpInvalidOptionsError(\n [\n 'Must specify',\n 'an apiKey,',\n 'clientSessionToken,',\n 'publishableKey,',\n 'consoleSessionToken with a workspaceId',\n 'or personalAccessToken with a workspaceId',\n ].join(' '),\n )\n}\n\nconst getAuthHeadersForApiKey = ({\n apiKey,\n}: SeamHttpOptionsWithApiKey): Headers => {\n if (isClientSessionToken(apiKey)) {\n throw new SeamHttpInvalidTokenError(\n 'A Client Session Token cannot be used as an apiKey',\n )\n }\n\n if (isJwt(apiKey)) {\n throw new SeamHttpInvalidTokenError('A JWT cannot be used as an apiKey')\n }\n\n if (isAccessToken(apiKey)) {\n throw new SeamHttpInvalidTokenError(\n 'An Access Token cannot be used as an apiKey',\n )\n }\n\n if (isPublishableKey(apiKey)) {\n throw new SeamHttpInvalidTokenError(\n 'A Publishable Key cannot be used as an apiKey',\n )\n }\n\n if (!isSeamToken(apiKey)) {\n throw new SeamHttpInvalidTokenError(\n `Unknown or invalid apiKey format, expected token to start with ${tokenPrefix}`,\n )\n }\n\n return {\n authorization: `Bearer ${apiKey}`,\n }\n}\n\nconst getAuthHeadersForClientSessionToken = ({\n clientSessionToken,\n}: SeamHttpOptionsWithClientSessionToken): Headers => {\n if (isJwt(clientSessionToken)) {\n throw new SeamHttpInvalidTokenError(\n 'A JWT cannot be used as a clientSessionToken',\n )\n }\n\n if (isAccessToken(clientSessionToken)) {\n throw new SeamHttpInvalidTokenError(\n 'An Access Token cannot be used as a clientSessionToken',\n )\n }\n\n if (isPublishableKey(clientSessionToken)) {\n throw new SeamHttpInvalidTokenError(\n 'A Publishable Key cannot be used as a clientSessionToken',\n )\n }\n\n if (!isClientSessionToken(clientSessionToken)) {\n throw new SeamHttpInvalidTokenError(\n `Unknown or invalid clientSessionToken format, expected token to start with ${clientSessionTokenPrefix}`,\n )\n }\n\n return {\n authorization: `Bearer ${clientSessionToken}`,\n 'client-session-token': clientSessionToken,\n }\n}\n\nconst getAuthHeadersForConsoleSessionToken = ({\n consoleSessionToken,\n workspaceId,\n}: SeamHttpOptionsWithConsoleSessionToken): Headers => {\n if (isAccessToken(consoleSessionToken)) {\n throw new SeamHttpInvalidTokenError(\n 'An Access Token cannot be used as a consoleSessionToken',\n )\n }\n\n if (isClientSessionToken(consoleSessionToken)) {\n throw new SeamHttpInvalidTokenError(\n 'A Client Session Token cannot be used as a consoleSessionToken',\n )\n }\n\n if (isPublishableKey(consoleSessionToken)) {\n throw new SeamHttpInvalidTokenError(\n 'A Publishable Key cannot be used as a consoleSessionToken',\n )\n }\n\n if (!isJwt(consoleSessionToken)) {\n throw new SeamHttpInvalidTokenError(\n `Unknown or invalid consoleSessionToken format, expected a JWT which starts with ${jwtPrefix}`,\n )\n }\n\n return {\n authorization: `Bearer ${consoleSessionToken}`,\n 'seam-workspace-id': workspaceId,\n }\n}\n\nconst getAuthHeadersForPersonalAccessToken = ({\n personalAccessToken,\n workspaceId,\n}: SeamHttpOptionsWithPersonalAccessToken): Headers => {\n if (isJwt(personalAccessToken)) {\n throw new SeamHttpInvalidTokenError(\n 'A JWT cannot be used as a personalAccessToken',\n )\n }\n\n if (isClientSessionToken(personalAccessToken)) {\n throw new SeamHttpInvalidTokenError(\n 'A Client Session Token cannot be used as a personalAccessToken',\n )\n }\n\n if (isPublishableKey(personalAccessToken)) {\n throw new SeamHttpInvalidTokenError(\n 'A Publishable Key cannot be used as a personalAccessToken',\n )\n }\n\n if (!isAccessToken(personalAccessToken)) {\n throw new SeamHttpInvalidTokenError(\n `Unknown or invalid personalAccessToken format, expected token to start with ${accessTokenPrefix}`,\n )\n }\n\n return {\n authorization: `Bearer ${personalAccessToken}`,\n 'seam-workspace-id': workspaceId,\n }\n}\n\nconst getAuthHeadersForPublishableKey = (publishableKey: string): Headers => {\n if (isJwt(publishableKey)) {\n throw new SeamHttpInvalidTokenError(\n 'A JWT cannot be used as a publishableKey',\n )\n }\n\n if (isAccessToken(publishableKey)) {\n throw new SeamHttpInvalidTokenError(\n 'An Access Token cannot be used as a publishableKey',\n )\n }\n\n if (isClientSessionToken(publishableKey)) {\n throw new SeamHttpInvalidTokenError(\n 'A Client Session Token Key cannot be used as a publishableKey',\n )\n }\n\n if (!isPublishableKey(publishableKey)) {\n throw new SeamHttpInvalidTokenError(\n `Unknown or invalid publishableKey format, expected token to start with ${publishableKeyTokenPrefix}`,\n )\n }\n\n return {\n 'seam-publishable-key': publishableKey,\n }\n}\n\nexport class SeamHttpInvalidTokenError extends Error {\n constructor(message: string) {\n super(`SeamHttp received an invalid token: ${message}`)\n this.name = this.constructor.name\n Error.captureStackTrace(this, this.constructor)\n }\n}\n\nexport const warnOnInsecureuserIdentifierKey = (\n userIdentifierKey: string,\n): void => {\n if (isEmail(userIdentifierKey)) {\n // eslint-disable-next-line no-console\n console.warn(\n ...[\n 'Using an email for the userIdentifierKey is insecure and may return an error in the future!',\n 'This is insecure because an email is common knowledge or easily guessed.',\n 'Use something with sufficient entropy known only to the owner of the client session.',\n 'For help choosing a user identifier key see',\n 'https://docs.seam.co/latest/seam-components/overview/get-started-with-client-side-components#3-select-a-user-identifier-key',\n ],\n )\n }\n}\n\nconst tokenPrefix = 'seam_'\n\nconst accessTokenPrefix = 'seam_at'\n\nconst jwtPrefix = 'ey'\n\nconst clientSessionTokenPrefix = 'seam_cst'\n\nconst publishableKeyTokenPrefix = 'seam_pk'\n\nconst isClientSessionToken = (token: string): boolean =>\n token.startsWith(clientSessionTokenPrefix)\n\nconst isAccessToken = (token: string): boolean =>\n token.startsWith(accessTokenPrefix)\n\nconst isJwt = (token: string): boolean => token.startsWith(jwtPrefix)\n\nconst isSeamToken = (token: string): boolean => token.startsWith(tokenPrefix)\n\nconst isPublishableKey = (token: string): boolean =>\n token.startsWith(publishableKeyTokenPrefix)\n\n// SOURCE: https://stackoverflow.com/a/46181\nconst isEmail = (value: string): boolean =>\n /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(value)\n","import axios, { type AxiosInstance, type AxiosRequestConfig } from 'axios'\n// @ts-expect-error https://github.com/svsool/axios-better-stacktrace/issues/12\nimport axiosBetterStacktrace from 'axios-better-stacktrace'\nimport axiosRetry, { type AxiosRetry, exponentialDelay } from 'axios-retry'\n\nimport { paramsSerializer } from 'lib/params-serializer.js'\n\nimport { errorInterceptor } from './error-interceptor.js'\n\nexport type Client = AxiosInstance\n\nexport interface ClientOptions {\n axiosOptions?: AxiosRequestConfig\n axiosRetryOptions?: AxiosRetryConfig\n client?: Client\n}\n\ntype AxiosRetryConfig = Parameters<AxiosRetry>[1]\n\nexport const createClient = (options: ClientOptions): AxiosInstance => {\n if (options.client != null) return options.client\n\n const client = axios.create({\n paramsSerializer,\n ...options.axiosOptions,\n })\n\n axiosBetterStacktrace(axios)\n\n // @ts-expect-error https://github.com/softonic/axios-retry/issues/159\n axiosRetry(client, {\n retries: 2,\n retryDelay: exponentialDelay,\n ...options.axiosRetryOptions,\n })\n\n client.interceptors.response.use(undefined, errorInterceptor)\n\n return client\n}\n","import type { CustomParamsSerializer } from 'axios'\n\nexport const paramsSerializer: CustomParamsSerializer = (params) => {\n const searchParams = new URLSearchParams()\n\n for (const [name, value] of Object.entries(params)) {\n if (value == null) continue\n\n if (Array.isArray(value)) {\n if (value.length === 0) searchParams.set(name, '')\n if (value.length === 1 && value[0] === '') {\n throw new UnserializableParamError(\n name,\n `is a single element array containing the empty string which is unsupported because it serializes to the empty array`,\n )\n }\n for (const v of value) {\n throwIfUnserializable(name, v)\n searchParams.append(name, v)\n }\n continue\n }\n\n throwIfUnserializable(name, value)\n searchParams.set(name, value)\n }\n\n searchParams.sort()\n return searchParams.toString()\n}\n\nconst throwIfUnserializable = (k: string, v: unknown): void => {\n if (v == null) {\n throw new UnserializableParamError(k, `is ${v} or contains ${v}`)\n }\n\n if (typeof v === 'function') {\n throw new UnserializableParamError(\n k,\n 'is a function or contains a function',\n )\n }\n\n if (typeof v === 'object') {\n throw new UnserializableParamError(k, 'is an object or contains an object')\n }\n}\n\nexport class UnserializableParamError extends Error {\n constructor(name: string, message: string) {\n super(`Could not serialize parameter: '${name}' ${message}`)\n this.name = this.constructor.name\n Error.captureStackTrace(this, this.constructor)\n }\n}\n","const seamapiJavascriptHttpVersion = null\n\nexport default seamapiJavascriptHttpVersion\n","import version from 'lib/version.js'\n\nimport { getAuthHeaders } from './auth.js'\nimport type { ClientOptions } from './client.js'\nimport {\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n type SeamHttpOptions,\n} from './options.js'\n\nconst defaultEndpoint = 'https://connect.getseam.com'\n\nconst sdkHeaders = {\n 'seam-sdk-name': 'seamapi/javascript-http',\n 'seam-sdk-version': version,\n}\n\nexport type Options = SeamHttpOptions & { publishableKey?: string }\n\nexport const parseOptions = (\n apiKeyOrOptions: string | Options,\n): ClientOptions => {\n const options = getNormalizedOptions(apiKeyOrOptions)\n\n if (isSeamHttpOptionsWithClient(options)) return options\n\n return {\n axiosOptions: {\n baseURL: options.endpoint ?? getEndpointFromEnv() ?? defaultEndpoint,\n withCredentials: isSeamHttpOptionsWithClientSessionToken(options),\n ...options.axiosOptions,\n headers: {\n ...getAuthHeaders(options),\n ...options.axiosOptions?.headers,\n ...sdkHeaders,\n },\n },\n axiosRetryOptions: {\n ...options.axiosRetryOptions,\n },\n }\n}\n\nconst getNormalizedOptions = (\n apiKeyOrOptions: string | Options,\n): SeamHttpOptions => {\n const options =\n typeof apiKeyOrOptions === 'string'\n ? { apiKey: apiKeyOrOptions }\n : apiKeyOrOptions\n\n if (isSeamHttpOptionsWithClient(options)) return options\n\n const apiKey =\n 'apiKey' in options ? options.apiKey : getApiKeyFromEnv(options)\n\n return {\n ...options,\n ...(apiKey != null ? { apiKey } : {}),\n }\n}\n\nconst getApiKeyFromEnv = (\n options: SeamHttpOptions,\n): string | null | undefined => {\n if ('clientSessionToken' in options && options.clientSessionToken != null) {\n return null\n }\n return globalThis.process?.env?.SEAM_API_KEY\n}\n\nconst getEndpointFromEnv = (): string | null | undefined => {\n return (\n globalThis.process?.env?.SEAM_ENDPOINT ??\n globalThis.process?.env?.SEAM_API_URL\n )\n}\n","/*\n * Automatically generated by generate-routes.ts.\n * Do not edit this file or add other files to this directory.\n */\n\nimport type { RouteRequestBody, RouteResponse } from '@seamapi/types/connect'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { warnOnInsecureuserIdentifierKey } from 'lib/seam/connect/auth.js'\nimport { type Client, createClient } from 'lib/seam/connect/client.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n isSeamHttpOptionsWithConsoleSessionToken,\n isSeamHttpOptionsWithPersonalAccessToken,\n type SeamHttpFromPublishableKeyOptions,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n type SeamHttpOptionsWithConsoleSessionToken,\n type SeamHttpOptionsWithPersonalAccessToken,\n} from 'lib/seam/connect/options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nexport class SeamHttpClientSessions {\n client: Client\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions = {}) {\n const clientOptions = parseOptions(apiKeyOrOptions)\n this.client = createClient(clientOptions)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpClientSessions {\n const constructorOptions = { ...options, client }\n if (!isSeamHttpOptionsWithClient(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpClientSessions(constructorOptions)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpClientSessions {\n const constructorOptions = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpClientSessions(constructorOptions)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpClientSessions {\n const constructorOptions = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpClientSessions(constructorOptions)\n }\n\n static async fromPublishableKey(\n publishableKey: string,\n userIdentifierKey: string,\n options: SeamHttpFromPublishableKeyOptions = {},\n ): Promise<SeamHttpClientSessions> {\n warnOnInsecureuserIdentifierKey(userIdentifierKey)\n const clientOptions = parseOptions({ ...options, publishableKey })\n const client = createClient(clientOptions)\n const clientSessions = SeamHttpClientSessions.fromClient(client)\n const { token } = await clientSessions.getOrCreate({\n user_identifier_key: userIdentifierKey,\n })\n return SeamHttpClientSessions.fromClientSessionToken(token, options)\n }\n\n static fromConsoleSessionToken(\n consoleSessionToken: SeamHttpOptionsWithConsoleSessionToken['consoleSessionToken'],\n workspaceId: SeamHttpOptionsWithConsoleSessionToken['workspaceId'],\n options: Omit<\n SeamHttpOptionsWithConsoleSessionToken,\n 'consoleSessionToken' | 'workspaceId'\n > = {},\n ): SeamHttpClientSessions {\n const constructorOptions = { ...options, consoleSessionToken, workspaceId }\n if (!isSeamHttpOptionsWithConsoleSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError(\n 'Missing consoleSessionToken or workspaceId',\n )\n }\n return new SeamHttpClientSessions(constructorOptions)\n }\n\n static fromPersonalAccessToken(\n personalAccessToken: SeamHttpOptionsWithPersonalAccessToken['personalAccessToken'],\n workspaceId: SeamHttpOptionsWithPersonalAccessToken['workspaceId'],\n options: Omit<\n SeamHttpOptionsWithPersonalAccessToken,\n 'personalAccessToken' | 'workspaceId'\n > = {},\n ): SeamHttpClientSessions {\n const constructorOptions = { ...options, personalAccessToken, workspaceId }\n if (!isSeamHttpOptionsWithPersonalAccessToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError(\n 'Missing personalAccessToken or workspaceId',\n )\n }\n return new SeamHttpClientSessions(constructorOptions)\n }\n\n async create(\n body?: ClientSessionsCreateBody,\n ): Promise<ClientSessionsCreateResponse['client_session']> {\n const { data } = await this.client.request<ClientSessionsCreateResponse>({\n url: '/client_sessions/create',\n method: 'post',\n data: body,\n })\n return data.client_session\n }\n\n async delete(body?: ClientSessionsDeleteBody): Promise<void> {\n await this.client.request<ClientSessionsDeleteResponse>({\n url: '/client_sessions/delete',\n method: 'post',\n data: body,\n })\n }\n\n async get(\n body?: ClientSessionsGetParams,\n ): Promise<ClientSessionsGetResponse['client_session']> {\n const { data } = await this.client.request<ClientSessionsGetResponse>({\n url: '/client_sessions/get',\n method: 'post',\n data: body,\n })\n return data.client_session\n }\n\n async getOrCreate(\n body?: ClientSessionsGetOrCreateBody,\n ): Promise<ClientSessionsGetOrCreateResponse['client_session']> {\n const { data } =\n await this.client.request<ClientSessionsGetOrCreateResponse>({\n url: '/client_sessions/get_or_create',\n method: 'post',\n data: body,\n })\n return data.client_session\n }\n\n async grantAccess(\n body?: ClientSessionsGrantAccessBody,\n ): Promise<ClientSessionsGrantAccessResponse['client_session']> {\n const { data } =\n await this.client.request<ClientSessionsGrantAccessResponse>({\n url: '/client_sessions/grant_access',\n method: 'post',\n data: body,\n })\n return data.client_session\n }\n\n async list(\n body?: ClientSessionsListParams,\n ): Promise<ClientSessionsListResponse['client_sessions']> {\n const { data } = await this.client.request<ClientSessionsListResponse>({\n url: '/client_sessions/list',\n method: 'post',\n data: body,\n })\n return data.client_sessions\n }\n}\n\nexport type ClientSessionsCreateBody =\n RouteRequestBody<'/client_sessions/create'>\n\nexport type ClientSessionsCreateResponse = SetNonNullable<\n Required<RouteResponse<'/client_sessions/create'>>\n>\n\nexport type ClientSessionsDeleteBody =\n RouteRequestBody<'/client_sessions/delete'>\n\nexport type ClientSessionsDeleteResponse = SetNonNullable<\n Required<RouteResponse<'/client_sessions/delete'>>\n>\n\nexport type ClientSessionsGetParams = RouteRequestBody<'/client_sessions/get'>\n\nexport type ClientSessionsGetResponse = SetNonNullable<\n Required<RouteResponse<'/client_sessions/get'>>\n>\n\nexport type ClientSessionsGetOrCreateBody =\n RouteRequestBody<'/client_sessions/get_or_create'>\n\nexport type ClientSessionsGetOrCreateResponse = SetNonNullable<\n Required<RouteResponse<'/client_sessions/get_or_create'>>\n>\n\nexport type ClientSessionsGrantAccessBody =\n RouteRequestBody<'/client_sessions/grant_access'>\n\nexport type ClientSessionsGrantAccessResponse = SetNonNullable<\n Required<RouteResponse<'/client_sessions/grant_access'>>\n>\n\nexport type ClientSessionsListParams = RouteRequestBody<'/client_sessions/list'>\n\nexport type ClientSessionsListResponse = SetNonNullable<\n Required<RouteResponse<'/client_sessions/list'>>\n>\n","/*\n * Automatically generated by generate-routes.ts.\n * Do not edit this file or add other files to this directory.\n */\n\nimport type { RouteRequestBody, RouteResponse } from '@seamapi/types/connect'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { warnOnInsecureuserIdentifierKey } from 'lib/seam/connect/auth.js'\nimport { type Client, createClient } from 'lib/seam/connect/client.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n isSeamHttpOptionsWithConsoleSessionToken,\n isSeamHttpOptionsWithPersonalAccessToken,\n type SeamHttpFromPublishableKeyOptions,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n type SeamHttpOptionsWithConsoleSessionToken,\n type SeamHttpOptionsWithPersonalAccessToken,\n} from 'lib/seam/connect/options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nimport { SeamHttpClientSessions } from './client-sessions.js'\n\nexport class SeamHttpAccessCodesUnmanaged {\n client: Client\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions = {}) {\n const clientOptions = parseOptions(apiKeyOrOptions)\n this.client = createClient(clientOptions)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpAccessCodesUnmanaged {\n const constructorOptions = { ...options, client }\n if (!isSeamHttpOptionsWithClient(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpAccessCodesUnmanaged(constructorOptions)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpAccessCodesUnmanaged {\n const constructorOptions = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpAccessCodesUnmanaged(constructorOptions)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpAccessCodesUnmanaged {\n const constructorOptions = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpAccessCodesUnmanaged(constructorOptions)\n }\n\n static async fromPublishableKey(\n publishableKey: string,\n userIdentifierKey: string,\n options: SeamHttpFromPublishableKeyOptions = {},\n ): Promise<SeamHttpAccessCodesUnmanaged> {\n warnOnInsecureuserIdentifierKey(userIdentifierKey)\n const clientOptions = parseOptions({ ...options, publishableKey })\n const client = createClient(clientOptions)\n const clientSessions = SeamHttpClientSessions.fromClient(client)\n const { token } = await clientSessions.getOrCreate({\n user_identifier_key: userIdentifierKey,\n })\n return SeamHttpAccessCodesUnmanaged.fromClientSessionToken(token, options)\n }\n\n static fromConsoleSessionToken(\n consoleSessionToken: SeamHttpOptionsWithConsoleSessionToken['consoleSessionToken'],\n workspaceId: SeamHttpOptionsWithConsoleSessionToken['workspaceId'],\n options: Omit<\n SeamHttpOptionsWithConsoleSessionToken,\n 'consoleSessionToken' | 'workspaceId'\n > = {},\n ): SeamHttpAccessCodesUnmanaged {\n const constructorOptions = { ...options, consoleSessionToken, workspaceId }\n if (!isSeamHttpOptionsWithConsoleSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError(\n 'Missing consoleSessionToken or workspaceId',\n )\n }\n return new SeamHttpAccessCodesUnmanaged(constructorOptions)\n }\n\n static fromPersonalAccessToken(\n personalAccessToken: SeamHttpOptionsWithPersonalAccessToken['personalAccessToken'],\n workspaceId: SeamHttpOptionsWithPersonalAccessToken['workspaceId'],\n options: Omit<\n SeamHttpOptionsWithPersonalAccessToken,\n 'personalAccessToken' | 'workspaceId'\n > = {},\n ): SeamHttpAccessCodesUnmanaged {\n const constructorOptions = { ...options, personalAccessToken, workspaceId }\n if (!isSeamHttpOptionsWithPersonalAccessToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError(\n 'Missing personalAccessToken or workspaceId',\n )\n }\n return new SeamHttpAccessCodesUnmanaged(constructorOptions)\n }\n\n async convertToManaged(\n body?: AccessCodesUnmanagedConvertToManagedBody,\n ): Promise<void> {\n await this.client.request<AccessCodesUnmanagedConvertToManagedResponse>({\n url: '/access_codes/unmanaged/convert_to_managed',\n method: 'post',\n data: body,\n })\n }\n\n async delete(body?: AccessCodesUnmanagedDeleteBody): Promise<void> {\n await this.client.request<AccessCodesUnmanagedDeleteResponse>({\n url: '/access_codes/unmanaged/delete',\n method: 'post',\n data: body,\n })\n }\n\n async get(\n body?: AccessCodesUnmanagedGetParams,\n ): Promise<AccessCodesUnmanagedGetResponse['access_code']> {\n const { data } = await this.client.request<AccessCodesUnmanagedGetResponse>(\n {\n url: '/access_codes/unmanaged/get',\n method: 'post',\n data: body,\n },\n )\n return data.access_code\n }\n\n async list(\n body?: AccessCodesUnmanagedListParams,\n ): Promise<AccessCodesUnmanagedListResponse['access_codes']> {\n const { data } =\n await this.client.request<AccessCodesUnmanagedListResponse>({\n url: '/access_codes/unmanaged/list',\n method: 'post',\n data: body,\n })\n return data.access_codes\n }\n\n async update(body?: AccessCodesUnmanagedUpdateBody): Promise<void> {\n await this.client.request<AccessCodesUnmanagedUpdateResponse>({\n url: '/access_codes/unmanaged/update',\n method: 'post',\n data: body,\n })\n }\n}\n\nexport type AccessCodesUnmanagedConvertToManagedBody =\n RouteRequestBody<'/access_codes/unmanaged/convert_to_managed'>\n\nexport type AccessCodesUnmanagedConvertToManagedResponse = SetNonNullable<\n Required<RouteResponse<'/access_codes/unmanaged/convert_to_managed'>>\n>\n\nexport type AccessCodesUnmanagedDeleteBody =\n RouteRequestBody<'/access_codes/unmanaged/delete'>\n\nexport type AccessCodesUnmanagedDeleteResponse = SetNonNullable<\n Required<RouteResponse<'/access_codes/unmanaged/delete'>>\n>\n\nexport type AccessCodesUnmanagedGetParams =\n RouteRequestBody<'/access_codes/unmanaged/get'>\n\nexport type AccessCodesUnmanagedGetResponse = SetNonNullable<\n Required<RouteResponse<'/access_codes/unmanaged/get'>>\n>\n\nexport type AccessCodesUnmanagedListParams =\n RouteRequestBody<'/access_codes/unmanaged/list'>\n\nexport type AccessCodesUnmanagedListResponse = SetNonNullable<\n Required<RouteResponse<'/access_codes/unmanaged/list'>>\n>\n\nexport type AccessCodesUnmanagedUpdateBody =\n RouteRequestBody<'/access_codes/unmanaged/update'>\n\nexport type AccessCodesUnmanagedUpdateResponse = SetNonNullable<\n Required<RouteResponse<'/access_codes/unmanaged/update'>>\n>\n","/*\n * Automatically generated by generate-routes.ts.\n * Do not edit this file or add other files to this directory.\n */\n\nimport type { RouteRequestBody, RouteResponse } from '@seamapi/types/connect'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { warnOnInsecureuserIdentifierKey } from 'lib/seam/connect/auth.js'\nimport { type Client, createClient } from 'lib/seam/connect/client.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n isSeamHttpOptionsWithConsoleSessionToken,\n isSeamHttpOptionsWithPersonalAccessToken,\n type SeamHttpFromPublishableKeyOptions,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n type SeamHttpOptionsWithConsoleSessionToken,\n type SeamHttpOptionsWithPersonalAccessToken,\n} from 'lib/seam/connect/options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nimport { SeamHttpAccessCodesUnmanaged } from './access-codes-unmanaged.js'\nimport { SeamHttpClientSessions } from './client-sessions.js'\n\nexport class SeamHttpAccessCodes {\n client: Client\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions = {}) {\n const clientOptions = parseOptions(apiKeyOrOptions)\n this.client = createClient(clientOptions)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpAccessCodes {\n const constructorOptions = { ...options, client }\n if (!isSeamHttpOptionsWithClient(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpAccessCodes(constructorOptions)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpAccessCodes {\n const constructorOptions = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpAccessCodes(constructorOptions)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpAccessCodes {\n const constructorOptions = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpAccessCodes(constructorOptions)\n }\n\n static async fromPublishableKey(\n publishableKey: string,\n userIdentifierKey: string,\n options: SeamHttpFromPublishableKeyOptions = {},\n ): Promise<SeamHttpAccessCodes> {\n warnOnInsecureuserIdentifierKey(userIdentifierKey)\n const clientOptions = parseOptions({ ...options, publishableKey })\n const client = createClient(clientOptions)\n const clientSessions = SeamHttpClientSessions.fromClient(client)\n const { token } = await clientSessions.getOrCreate({\n user_identifier_key: userIdentifierKey,\n })\n return SeamHttpAccessCodes.fromClientSessionToken(token, options)\n }\n\n static fromConsoleSessionToken(\n consoleSessionToken: SeamHttpOptionsWithConsoleSessionToken['consoleSessionToken'],\n workspaceId: SeamHttpOptionsWithConsoleSessionToken['workspaceId'],\n options: Omit<\n SeamHttpOptionsWithConsoleSessionToken,\n 'consoleSessionToken' | 'workspaceId'\n > = {},\n ): SeamHttpAccessCodes {\n const constructorOptions = { ...options, consoleSessionToken, workspaceId }\n if (!isSeamHttpOptionsWithConsoleSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError(\n 'Missing consoleSessionToken or workspaceId',\n )\n }\n return new SeamHttpAccessCodes(constructorOptions)\n }\n\n static fromPersonalAccessToken(\n personalAccessToken: SeamHttpOptionsWithPersonalAccessToken['personalAccessToken'],\n workspaceId: SeamHttpOptionsWithPersonalAccessToken['workspaceId'],\n options: Omit<\n SeamHttpOptionsWithPersonalAccessToken,\n 'personalAccessToken' | 'workspaceId'\n > = {},\n ): SeamHttpAccessCodes {\n const constructorOptions = { ...options, personalAccessToken, workspaceId }\n if (!isSeamHttpOptionsWithPersonalAccessToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError(\n 'Missing personalAccessToken or workspaceId',\n )\n }\n return new SeamHttpAccessCodes(constructorOptions)\n }\n\n get unmanaged(): SeamHttpAccessCodesUnmanaged {\n return SeamHttpAccessCodesUnmanaged.fromClient(this.client)\n }\n\n async create(\n body?: AccessCodesCreateBody,\n ): Promise<AccessCodesCreateResponse['access_code']> {\n const { data } = await this.client.request<AccessCodesCreateResponse>({\n url: '/access_codes/create',\n method: 'post',\n data: body,\n })\n return data.access_code\n }\n\n async createMultiple(\n body?: AccessCodesCreateMultipleBody,\n ): Promise<AccessCodesCreateMultipleResponse['access_codes']> {\n const { data } =\n await this.client.request<AccessCodesCreateMultipleResponse>({\n url: '/access_codes/create_multiple',\n method: 'post',\n data: body,\n })\n return data.access_codes\n }\n\n async delete(body?: AccessCodesDeleteBody): Promise<void> {\n await this.client.request<AccessCodesDeleteResponse>({\n url: '/access_codes/delete',\n method: 'post',\n data: body,\n })\n }\n\n async generateCode(\n body?: AccessCodesGenerateCodeBody,\n ): Promise<AccessCodesGenerateCodeResponse['generated_code']> {\n const { data } = await this.client.request<AccessCodesGenerateCodeResponse>(\n {\n url: '/access_codes/generate_code',\n method: 'post',\n data: body,\n },\n )\n return data.generated_code\n }\n\n async get(\n body?: AccessCodesGetParams,\n ): Promise<AccessCodesGetResponse['access_code']> {\n const { data } = await this.client.request<AccessCodesGetResponse>({\n url: '/access_codes/get',\n method: 'post',\n data: body,\n })\n return data.access_code\n }\n\n async list(\n body?: AccessCodesListParams,\n ): Promise<AccessCodesListResponse['access_codes']> {\n const { data } = await this.client.request<AccessCodesListResponse>({\n url: '/access_codes/list',\n method: 'post',\n data: body,\n })\n return data.access_codes\n }\n\n async pullBackupAccessCode(\n body?: AccessCodesPullBackupAccessCodeBody,\n ): Promise<AccessCodesPullBackupAccessCodeResponse['backup_access_code']> {\n const { data } =\n await this.client.request<AccessCodesPullBackupAccessCodeResponse>({\n url: '/access_codes/pull_backup_access_code',\n method: 'post',\n data: body,\n })\n return data.backup_access_code\n }\n\n async update(body?: AccessCodesUpdateBody): Promise<void> {\n await this.client.request<AccessCodesUpdateResponse>({\n url: '/access_codes/update',\n method: 'post',\n data: body,\n })\n }\n}\n\nexport type AccessCodesCreateBody = RouteRequestBody<'/access_codes/create'>\n\nexport type AccessCodesCreateResponse = SetNonNullable<\n Required<RouteResponse<'/access_codes/create'>>\n>\n\nexport type AccessCodesCreateMultipleBody =\n RouteRequestBody<'/access_codes/create_multiple'>\n\nexport type AccessCodesCreateMultipleResponse = SetNonNullable<\n Required<RouteResponse<'/access_codes/create_multiple'>>\n>\n\nexport type AccessCodesDeleteBody = RouteRequestBody<'/access_codes/delete'>\n\nexport type AccessCodesDeleteResponse = SetNonNullable<\n Required<RouteResponse<'/access_codes/delete'>>\n>\n\nexport type AccessCodesGenerateCodeBody =\n RouteRequestBody<'/access_codes/generate_code'>\n\nexport type AccessCodesGenerateCodeResponse = SetNonNullable<\n Required<RouteResponse<'/access_codes/generate_code'>>\n>\n\nexport type AccessCodesGetParams = RouteRequestBody<'/access_codes/get'>\n\nexport type AccessCodesGetResponse = SetNonNullable<\n Required<RouteResponse<'/access_codes/get'>>\n>\n\nexport type AccessCodesListParams = RouteRequestBody<'/access_codes/list'>\n\nexport type AccessCodesListResponse = SetNonNullable<\n Required<RouteResponse<'/access_codes/list'>>\n>\n\nexport type AccessCodesPullBackupAccessCodeBody =\n RouteRequestBody<'/access_codes/pull_backup_access_code'>\n\nexport type AccessCodesPullBackupAccessCodeResponse = SetNonNullable<\n Required<RouteResponse<'/access_codes/pull_backup_access_code'>>\n>\n\nexport type AccessCodesUpdateBody = RouteRequestBody<'/access_codes/update'>\n\nexport type AccessCodesUpdateResponse = SetNonNullable<\n Required<RouteResponse<'/access_codes/update'>>\n>\n","/*\n * Automatically generated by generate-routes.ts.\n * Do not edit this file or add other files to this directory.\n */\n\nimport type { RouteRequestBody, RouteResponse } from '@seamapi/types/connect'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { warnOnInsecureuserIdentifierKey } from 'lib/seam/connect/auth.js'\nimport { type Client, createClient } from 'lib/seam/connect/client.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n isSeamHttpOptionsWithConsoleSessionToken,\n isSeamHttpOptionsWithPersonalAccessToken,\n type SeamHttpFromPublishableKeyOptions,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n type SeamHttpOptionsWithConsoleSessionToken,\n type SeamHttpOptionsWithPersonalAccessToken,\n} from 'lib/seam/connect/options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nimport { SeamHttpClientSessions } from './client-sessions.js'\n\nexport class SeamHttpAcsAccessGroups {\n client: Client\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions = {}) {\n const clientOptions = parseOptions(apiKeyOrOptions)\n this.client = createClient(clientOptions)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpAcsAccessGroups {\n const constructorOptions = { ...options, client }\n if (!isSeamHttpOptionsWithClient(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpAcsAccessGroups(constructorOptions)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpAcsAccessGroups {\n const constructorOptions = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpAcsAccessGroups(constructorOptions)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpAcsAccessGroups {\n const constructorOptions = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpAcsAccessGroups(constructorOptions)\n }\n\n static async fromPublishableKey(\n publishableKey: string,\n userIdentifierKey: string,\n options: SeamHttpFromPublishableKeyOptions = {},\n ): Promise<SeamHttpAcsAccessGroups> {\n warnOnInsecureuserIdentifierKey(userIdentifierKey)\n const clientOptions = parseOptions({ ...options, publishableKey })\n const client = createClient(clientOptions)\n const clientSessions = SeamHttpClientSessions.fromClient(client)\n const { token } = await clientSessions.getOrCreate({\n user_identifier_key: userIdentifierKey,\n })\n return SeamHttpAcsAccessGroups.fromClientSessionToken(token, options)\n }\n\n static fromConsoleSessionToken(\n consoleSessionToken: SeamHttpOptionsWithConsoleSessionToken['consoleSessionToken'],\n workspaceId: SeamHttpOptionsWithConsoleSessionToken['workspaceId'],\n options: Omit<\n SeamHttpOptionsWithConsoleSessionToken,\n 'consoleSessionToken' | 'workspaceId'\n > = {},\n ): SeamHttpAcsAccessGroups {\n const constructorOptions = { ...options, consoleSessionToken, workspaceId }\n if (!isSeamHttpOptionsWithConsoleSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError(\n 'Missing consoleSessionToken or workspaceId',\n )\n }\n return new SeamHttpAcsAccessGroups(constructorOptions)\n }\n\n static fromPersonalAccessToken(\n personalAccessToken: SeamHttpOptionsWithPersonalAccessToken['personalAccessToken'],\n workspaceId: SeamHttpOptionsWithPersonalAccessToken['workspaceId'],\n options: Omit<\n SeamHttpOptionsWithPersonalAccessToken,\n 'personalAccessToken' | 'workspaceId'\n > = {},\n ): SeamHttpAcsAccessGroups {\n const constructorOptions = { ...options, personalAccessToken, workspaceId }\n if (!isSeamHttpOptionsWithPersonalAccessToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError(\n 'Missing personalAccessToken or workspaceId',\n )\n }\n return new SeamHttpAcsAccessGroups(constructorOptions)\n }\n\n async addUser(body?: AcsAccessGroupsAddUserBody): Promise<void> {\n await this.client.request<AcsAccessGroupsAddUserResponse>({\n url: '/acs/access_groups/add_user',\n method: 'post',\n data: body,\n })\n }\n\n async create(\n body?: AcsAccessGroupsCreateBody,\n ): Promise<AcsAccessGroupsCreateResponse['acs_access_group']> {\n const { data } = await this.client.request<AcsAccessGroupsCreateResponse>({\n url: '/acs/access_groups/create',\n method: 'post',\n data: body,\n })\n return data.acs_access_group\n }\n\n async delete(body?: AcsAccessGroupsDeleteBody): Promise<void> {\n await this.client.request<AcsAccessGroupsDeleteResponse>({\n url: '/acs/access_groups/delete',\n method: 'post',\n data: body,\n })\n }\n\n async get(\n body?: AcsAccessGroupsGetParams,\n ): Promise<AcsAccessGroupsGetResponse['acs_access_group']> {\n const { data } = await this.client.request<AcsAccessGroupsGetResponse>({\n url: '/acs/access_groups/get',\n method: 'post',\n data: body,\n })\n return data.acs_access_group\n }\n\n async list(\n body?: AcsAccessGroupsListParams,\n ): Promise<AcsAccessGroupsListResponse['acs_access_groups']> {\n const { data } = await this.client.request<AcsAccessGroupsListResponse>({\n url: '/acs/access_groups/list',\n method: 'post',\n data: body,\n })\n return data.acs_access_groups\n }\n\n async listUsers(\n body?: AcsAccessGroupsListUsersParams,\n ): Promise<AcsAccessGroupsListUsersResponse['acs_users']> {\n const { data } =\n await this.client.request<AcsAccessGroupsListUsersResponse>({\n url: '/acs/access_groups/list_users',\n method: 'post',\n data: body,\n })\n return data.acs_users\n }\n\n async removeUser(body?: AcsAccessGroupsRemoveUserBody): Promise<void> {\n await this.client.request<AcsAccessGroupsRemoveUserResponse>({\n url: '/acs/access_groups/remove_user',\n method: 'post',\n data: body,\n })\n }\n\n async update(body?: AcsAccessGroupsUpdateBody): Promise<void> {\n await this.client.request<AcsAccessGroupsUpdateResponse>({\n url: '/acs/access_groups/update',\n method: 'post',\n data: body,\n })\n }\n}\n\nexport type AcsAccessGroupsAddUserBody =\n RouteRequestBody<'/acs/access_groups/add_user'>\n\nexport type AcsAccessGroupsAddUserResponse = SetNonNullable<\n Required<RouteResponse<'/acs/access_groups/add_user'>>\n>\n\nexport type AcsAccessGroupsCreateBody =\n RouteRequestBody<'/acs/access_groups/create'>\n\nexport type AcsAccessGroupsCreateResponse = SetNonNullable<\n Required<RouteResponse<'/acs/access_groups/create'>>\n>\n\nexport type AcsAccessGroupsDeleteBody =\n RouteRequestBody<'/acs/access_groups/delete'>\n\nexport type AcsAccessGroupsDeleteResponse = SetNonNullable<\n Required<RouteResponse<'/acs/access_groups/delete'>>\n>\n\nexport type AcsAccessGroupsGetParams =\n RouteRequestBody<'/acs/access_groups/get'>\n\nexport type AcsAccessGroupsGetResponse = SetNonNullable<\n Required<RouteResponse<'/acs/access_groups/get'>>\n>\n\nexport type AcsAccessGroupsListParams =\n RouteRequestBody<'/acs/access_groups/list'>\n\nexport type AcsAccessGroupsListResponse = SetNonNullable<\n Required<RouteResponse<'/acs/access_groups/list'>>\n>\n\nexport type AcsAccessGroupsListUsersParams =\n RouteRequestBody<'/acs/access_groups/list_users'>\n\nexport type AcsAccessGroupsListUsersResponse = SetNonNullable<\n Required<RouteResponse<'/acs/access_groups/list_users'>>\n>\n\nexport type AcsAccessGroupsRemoveUserBody =\n RouteRequestBody<'/acs/access_groups/remove_user'>\n\nexport type AcsAccessGroupsRemoveUserResponse = SetNonNullable<\n Required<RouteResponse<'/acs/access_groups/remove_user'>>\n>\n\nexport type AcsAccessGroupsUpdateBody =\n RouteRequestBody<'/acs/access_groups/update'>\n\nexport type AcsAccessGroupsUpdateResponse = SetNonNullable<\n Required<RouteResponse<'/acs/access_groups/update'>>\n>\n","/*\n * Automatically generated by generate-routes.ts.\n * Do not edit this file or add other files to this directory.\n */\n\nimport type { RouteRequestBody, RouteResponse } from '@seamapi/types/connect'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { warnOnInsecureuserIdentifierKey } from 'lib/seam/connect/auth.js'\nimport { type Client, createClient } from 'lib/seam/connect/client.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n isSeamHttpOptionsWithConsoleSessionToken,\n isSeamHttpOptionsWithPersonalAccessToken,\n type SeamHttpFromPublishableKeyOptions,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n type SeamHttpOptionsWithConsoleSessionToken,\n type SeamHttpOptionsWithPersonalAccessToken,\n} from 'lib/seam/connect/options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nimport { SeamHttpClientSessions } from './client-sessions.js'\n\nexport class SeamHttpAcsCredentials {\n client: Client\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions = {}) {\n const clientOptions = parseOptions(apiKeyOrOptions)\n this.client = createClient(clientOptions)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpAcsCredentials {\n const constructorOptions = { ...options, client }\n if (!isSeamHttpOptionsWithClient(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpAcsCredentials(constructorOptions)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpAcsCredentials {\n const constructorOptions = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpAcsCredentials(constructorOptions)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpAcsCredentials {\n const constructorOptions = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpAcsCredentials(constructorOptions)\n }\n\n static async fromPublishableKey(\n publishableKey: string,\n userIdentifierKey: string,\n options: SeamHttpFromPublishableKeyOptions = {},\n ): Promise<SeamHttpAcsCredentials> {\n warnOnInsecureuserIdentifierKey(userIdentifierKey)\n const clientOptions = parseOptions({ ...options, publishableKey })\n const client = createClient(clientOptions)\n const clientSessions = SeamHttpClientSessions.fromClient(client)\n const { token } = await clientSessions.getOrCreate({\n user_identifier_key: userIdentifierKey,\n })\n return SeamHttpAcsCredentials.fromClientSessionToken(token, options)\n }\n\n static fromConsoleSessionToken(\n consoleSessionToken: SeamHttpOptionsWithConsoleSessionToken['consoleSessionToken'],\n workspaceId: SeamHttpOptionsWithConsoleSessionToken['workspaceId'],\n options: Omit<\n SeamHttpOptionsWithConsoleSessionToken,\n 'consoleSessionToken' | 'workspaceId'\n > = {},\n ): SeamHttpAcsCredentials {\n const constructorOptions = { ...options, consoleSessionToken, workspaceId }\n if (!isSeamHttpOptionsWithConsoleSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError(\n 'Missing consoleSessionToken or workspaceId',\n )\n }\n return new SeamHttpAcsCredentials(constructorOptions)\n }\n\n static fromPersonalAccessToken(\n personalAccessToken: SeamHttpOptionsWithPersonalAccessToken['personalAccessToken'],\n workspaceId: SeamHttpOptionsWithPersonalAccessToken['workspaceId'],\n options: Omit<\n SeamHttpOptionsWithPersonalAccessToken,\n 'personalAccessToken' | 'workspaceId'\n > = {},\n ): SeamHttpAcsCredentials {\n const constructorOptions = { ...options, personalAccessToken, workspaceId }\n if (!isSeamHttpOptionsWithPersonalAccessToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError(\n 'Missing personalAccessToken or workspaceId',\n )\n }\n return new SeamHttpAcsCredentials(constructorOptions)\n }\n\n async create(\n body?: AcsCredentialsCreateBody,\n ): Promise<AcsCredentialsCreateResponse['acs_credential']> {\n const { data } = await this.client.request<AcsCredentialsCreateResponse>({\n url: '/acs/credentials/create',\n method: 'post',\n data: body,\n })\n return data.acs_credential\n }\n\n async delete(body?: AcsCredentialsDeleteBody): Promise<void> {\n await this.client.request<AcsCredentialsDeleteResponse>({\n url: '/acs/credentials/delete',\n method: 'post',\n data: body,\n })\n }\n\n async get(\n body?: AcsCredentialsGetParams,\n ): Promise<AcsCredentialsGetResponse['acs_credential']> {\n const { data } = await this.client.request<AcsCredentialsGetResponse>({\n url: '/acs/credentials/get',\n method: 'post',\n data: body,\n })\n return data.acs_credential\n }\n\n async list(\n body?: AcsCredentialsListParams,\n ): Promise<AcsCredentialsListResponse['acs_credentials']> {\n const { data } = await this.client.request<AcsCredentialsListResponse>({\n url: '/acs/credentials/list',\n method: 'post',\n data: body,\n })\n return data.acs_credentials\n }\n}\n\nexport type AcsCredentialsCreateBody =\n RouteRequestBody<'/acs/credentials/create'>\n\nexport type AcsCredentialsCreateResponse = SetNonNullable<\n Required<RouteResponse<'/acs/credentials/create'>>\n>\n\nexport type AcsCredentialsDeleteBody =\n RouteRequestBody<'/acs/credentials/delete'>\n\nexport type AcsCredentialsDeleteResponse = SetNonNullable<\n Required<RouteResponse<'/acs/credentials/delete'>>\n>\n\nexport type AcsCredentialsGetParams = RouteRequestBody<'/acs/credentials/get'>\n\nexport type AcsCredentialsGetResponse = SetNonNullable<\n Required<RouteResponse<'/acs/credentials/get'>>\n>\n\nexport type AcsCredentialsListParams = RouteRequestBody<'/acs/credentials/list'>\n\nexport type AcsCredentialsListResponse = SetNonNullable<\n Required<RouteResponse<'/acs/credentials/list'>>\n>\n","/*\n * Automatically generated by generate-routes.ts.\n * Do not edit this file or add other files to this directory.\n */\n\nimport type { RouteRequestBody, RouteResponse } from '@seamapi/types/connect'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { warnOnInsecureuserIdentifierKey } from 'lib/seam/connect/auth.js'\nimport { type Client, createClient } from 'lib/seam/connect/client.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n isSeamHttpOptionsWithConsoleSessionToken,\n isSeamHttpOptionsWithPersonalAccessToken,\n type SeamHttpFromPublishableKeyOptions,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n type SeamHttpOptionsWithConsoleSessionToken,\n type SeamHttpOptionsWithPersonalAccessToken,\n} from 'lib/seam/connect/options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nimport { SeamHttpClientSessions } from './client-sessions.js'\n\nexport class SeamHttpAcsSystems {\n client: Client\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions = {}) {\n const clientOptions = parseOptions(apiKeyOrOptions)\n this.client = createClient(clientOptions)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpAcsSystems {\n const constructorOptions = { ...options, client }\n if (!isSeamHttpOptionsWithClient(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpAcsSystems(constructorOptions)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpAcsSystems {\n const constructorOptions = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpAcsSystems(constructorOptions)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpAcsSystems {\n const constructorOptions = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpAcsSystems(constructorOptions)\n }\n\n static async fromPublishableKey(\n publishableKey: string,\n userIdentifierKey: string,\n options: SeamHttpFromPublishableKeyOptions = {},\n ): Promise<SeamHttpAcsSystems> {\n warnOnInsecureuserIdentifierKey(userIdentifierKey)\n const clientOptions = parseOptions({ ...options, publishableKey })\n const client = createClient(clientOptions)\n const clientSessions = SeamHttpClientSessions.fromClient(client)\n const { token } = await clientSessions.getOrCreate({\n user_identifier_key: userIdentifierKey,\n })\n return SeamHttpAcsSystems.fromClientSessionToken(token, options)\n }\n\n static fromConsoleSessionToken(\n consoleSessionToken: SeamHttpOptionsWithConsoleSessionToken['consoleSessionToken'],\n workspaceId: SeamHttpOptionsWithConsoleSessionToken['workspaceId'],\n options: Omit<\n SeamHttpOptionsWithConsoleSessionToken,\n 'consoleSessionToken' | 'workspaceId'\n > = {},\n ): SeamHttpAcsSystems {\n const constructorOptions = { ...options, consoleSessionToken, workspaceId }\n if (!isSeamHttpOptionsWithConsoleSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError(\n 'Missing consoleSessionToken or workspaceId',\n )\n }\n return new SeamHttpAcsSystems(constructorOptions)\n }\n\n static fromPersonalAccessToken(\n personalAccessToken: SeamHttpOptionsWithPersonalAccessToken['personalAccessToken'],\n workspaceId: SeamHttpOptionsWithPersonalAccessToken['workspaceId'],\n options: Omit<\n SeamHttpOptionsWithPersonalAccessToken,\n 'personalAccessToken' | 'workspaceId'\n > = {},\n ): SeamHttpAcsSystems {\n const constructorOptions = { ...options, personalAccessToken, workspaceId }\n if (!isSeamHttpOptionsWithPersonalAccessToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError(\n 'Missing personalAccessToken or workspaceId',\n )\n }\n return new SeamHttpAcsSystems(constructorOptions)\n }\n\n async get(\n body?: AcsSystemsGetParams,\n ): Promise<AcsSystemsGetResponse['acs_system']> {\n const { data } = await this.client.request<AcsSystemsGetResponse>({\n url: '/acs/systems/get',\n method: 'post',\n data: body,\n })\n return data.acs_system\n }\n\n async list(\n body?: AcsSystemsListParams,\n ): Promise<AcsSystemsListResponse['acs_systems']> {\n const { data } = await this.client.request<AcsSystemsListResponse>({\n url: '/acs/systems/list',\n method: 'post',\n data: body,\n })\n return data.acs_systems\n }\n}\n\nexport type AcsSystemsGetParams = RouteRequestBody<'/acs/systems/get'>\n\nexport type AcsSystemsGetResponse = SetNonNullable<\n Required<RouteResponse<'/acs/systems/get'>>\n>\n\nexport type AcsSystemsListParams = RouteRequestBody<'/acs/systems/list'>\n\nexport type AcsSystemsListResponse = SetNonNullable<\n Required<RouteResponse<'/acs/systems/list'>>\n>\n","/*\n * Automatically generated by generate-routes.ts.\n * Do not edit this file or add other files to this directory.\n */\n\nimport type { RouteRequestBody, RouteResponse } from '@seamapi/types/connect'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { warnOnInsecureuserIdentifierKey } from 'lib/seam/connect/auth.js'\nimport { type Client, createClient } from 'lib/seam/connect/client.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n isSeamHttpOptionsWithConsoleSessionToken,\n isSeamHttpOptionsWithPersonalAccessToken,\n type SeamHttpFromPublishableKeyOptions,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n type SeamHttpOptionsWithConsoleSessionToken,\n type SeamHttpOptionsWithPersonalAccessToken,\n} from 'lib/seam/connect/options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nimport { SeamHttpClientSessions } from './client-sessions.js'\n\nexport class SeamHttpAcsUsers {\n client: Client\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions = {}) {\n const clientOptions = parseOptions(apiKeyOrOptions)\n this.client = createClient(clientOptions)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpAcsUsers {\n const constructorOptions = { ...options, client }\n if (!isSeamHttpOptionsWithClient(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpAcsUsers(constructorOptions)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpAcsUsers {\n const constructorOptions = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpAcsUsers(constructorOptions)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpAcsUsers {\n const constructorOptions = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpAcsUsers(constructorOptions)\n }\n\n static async fromPublishableKey(\n publishableKey: string,\n userIdentifierKey: string,\n options: SeamHttpFromPublishableKeyOptions = {},\n ): Promise<SeamHttpAcsUsers> {\n warnOnInsecureuserIdentifierKey(userIdentifierKey)\n const clientOptions = parseOptions({ ...options, publishableKey })\n const client = createClient(clientOptions)\n const clientSessions = SeamHttpClientSessions.fromClient(client)\n const { token } = await clientSessions.getOrCreate({\n user_identifier_key: userIdentifierKey,\n })\n return SeamHttpAcsUsers.fromClientSessionToken(token, options)\n }\n\n static fromConsoleSessionToken(\n consoleSessionToken: SeamHttpOptionsWithConsoleSessionToken['consoleSessionToken'],\n workspaceId: SeamHttpOptionsWithConsoleSessionToken['workspaceId'],\n options: Omit<\n SeamHttpOptionsWithConsoleSessionToken,\n 'consoleSessionToken' | 'workspaceId'\n > = {},\n ): SeamHttpAcsUsers {\n const constructorOptions = { ...options, consoleSessionToken, workspaceId }\n if (!isSeamHttpOptionsWithConsoleSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError(\n 'Missing consoleSessionToken or workspaceId',\n )\n }\n return new SeamHttpAcsUsers(constructorOptions)\n }\n\n static fromPersonalAccessToken(\n personalAccessToken: SeamHttpOptionsWithPersonalAccessToken['personalAccessToken'],\n workspaceId: SeamHttpOptionsWithPersonalAccessToken['workspaceId'],\n options: Omit<\n SeamHttpOptionsWithPersonalAccessToken,\n 'personalAccessToken' | 'workspaceId'\n > = {},\n ): SeamHttpAcsUsers {\n const constructorOptions = { ...options, personalAccessToken, workspaceId }\n if (!isSeamHttpOptionsWithPersonalAccessToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError(\n 'Missing personalAccessToken or workspaceId',\n )\n }\n return new SeamHttpAcsUsers(constructorOptions)\n }\n\n async addToAccessGroup(body?: AcsUsersAddToAccessGroupBody): Promise<void> {\n await this.client.request<AcsUsersAddToAccessGroupResponse>({\n url: '/acs/users/add_to_access_group',\n method: 'post',\n data: body,\n })\n }\n\n async create(\n body?: AcsUsersCreateBody,\n ): Promise<AcsUsersCreateResponse['acs_user']> {\n const { data } = await this.client.request<AcsUsersCreateResponse>({\n url: '/acs/users/create',\n method: 'post',\n data: body,\n })\n return data.acs_user\n }\n\n async delete(body?: AcsUsersDeleteBody): Promise<void> {\n await this.client.request<AcsUsersDeleteResponse>({\n url: '/acs/users/delete',\n method: 'post',\n data: body,\n })\n }\n\n async get(\n body?: AcsUsersGetParams,\n ): Promise<AcsUsersGetResponse['acs_user']> {\n const { data } = await this.client.request<AcsUsersGetResponse>({\n url: '/acs/users/get',\n method: 'post',\n data: body,\n })\n return data.acs_user\n }\n\n async list(\n body?: AcsUsersListParams,\n ): Promise<AcsUsersListResponse['acs_users']> {\n const { data } = await this.client.request<AcsUsersListResponse>({\n url: '/acs/users/list',\n method: 'post',\n data: body,\n })\n return data.acs_users\n }\n\n async removeFromAccessGroup(\n body?: AcsUsersRemoveFromAccessGroupBody,\n ): Promise<void> {\n await this.client.request<AcsUsersRemoveFromAccessGroupResponse>({\n url: '/acs/users/remove_from_access_group',\n method: 'post',\n data: body,\n })\n }\n\n async suspend(body?: AcsUsersSuspendBody): Promise<void> {\n await this.client.request<AcsUsersSuspendResponse>({\n url: '/acs/users/suspend',\n method: 'post',\n data: body,\n })\n }\n\n async unsuspend(body?: AcsUsersUnsuspendBody): Promise<void> {\n await this.client.request<AcsUsersUnsuspendResponse>({\n url: '/acs/users/unsuspend',\n method: 'post',\n data: body,\n })\n }\n\n async update(body?: AcsUsersUpdateBody): Promise<void> {\n await this.client.request<AcsUsersUpdateResponse>({\n url: '/acs/users/update',\n method: 'post',\n data: body,\n })\n }\n}\n\nexport type AcsUsersAddToAccessGroupBody =\n RouteRequestBody<'/acs/users/add_to_access_group'>\n\nexport type AcsUsersAddToAccessGroupResponse = SetNonNullable<\n Required<RouteResponse<'/acs/users/add_to_access_group'>>\n>\n\nexport type AcsUsersCreateBody = RouteRequestBody<'/acs/users/create'>\n\nexport type AcsUsersCreateResponse = SetNonNullable<\n Required<RouteResponse<'/acs/users/create'>>\n>\n\nexport type AcsUsersDeleteBody = RouteRequestBody<'/acs/users/delete'>\n\nexport type AcsUsersDeleteResponse = SetNonNullable<\n Required<RouteResponse<'/acs/users/delete'>>\n>\n\nexport type AcsUsersGetParams = RouteRequestBody<'/acs/users/get'>\n\nexport type AcsUsersGetResponse = SetNonNullable<\n Required<RouteResponse<'/acs/users/get'>>\n>\n\nexport type AcsUsersListParams = RouteRequestBody<'/acs/users/list'>\n\nexport type AcsUsersListResponse = SetNonNullable<\n Required<RouteResponse<'/acs/users/list'>>\n>\n\nexport type AcsUsersRemoveFromAccessGroupBody =\n RouteRequestBody<'/acs/users/remove_from_access_group'>\n\nexport type AcsUsersRemoveFromAccessGroupResponse = SetNonNullable<\n Required<RouteResponse<'/acs/users/remove_from_access_group'>>\n>\n\nexport type AcsUsersSuspendBody = RouteRequestBody<'/acs/users/suspend'>\n\nexport type AcsUsersSuspendResponse = SetNonNullable<\n Required<RouteResponse<'/acs/users/suspend'>>\n>\n\nexport type AcsUsersUnsuspendBody = RouteRequestBody<'/acs/users/unsuspend'>\n\nexport type AcsUsersUnsuspendResponse = SetNonNullable<\n Required<RouteResponse<'/acs/users/unsuspend'>>\n>\n\nexport type AcsUsersUpdateBody = RouteRequestBody<'/acs/users/update'>\n\nexport type AcsUsersUpdateResponse = SetNonNullable<\n Required<RouteResponse<'/acs/users/update'>>\n>\n","/*\n * Automatically generated by generate-routes.ts.\n * Do not edit this file or add other files to this directory.\n */\n\nimport { warnOnInsecureuserIdentifierKey } from 'lib/seam/connect/auth.js'\nimport { type Client, createClient } from 'lib/seam/connect/client.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n isSeamHttpOptionsWithConsoleSessionToken,\n isSeamHttpOptionsWithPersonalAccessToken,\n type SeamHttpFromPublishableKeyOptions,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n type SeamHttpOptionsWithConsoleSessionToken,\n type SeamHttpOptionsWithPersonalAccessToken,\n} from 'lib/seam/connect/options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nimport { SeamHttpAcsAccessGroups } from './acs-access-groups.js'\nimport { SeamHttpAcsCredentials } from './acs-credentials.js'\nimport { SeamHttpAcsSystems } from './acs-systems.js'\nimport { SeamHttpAcsUsers } from './acs-users.js'\nimport { SeamHttpClientSessions } from './client-sessions.js'\n\nexport class SeamHttpAcs {\n client: Client\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions = {}) {\n const clientOptions = parseOptions(apiKeyOrOptions)\n this.client = createClient(clientOptions)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpAcs {\n const constructorOptions = { ...options, client }\n if (!isSeamHttpOptionsWithClient(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpAcs(constructorOptions)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpAcs {\n const constructorOptions = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpAcs(constructorOptions)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpAcs {\n const constructorOptions = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpAcs(constructorOptions)\n }\n\n static async fromPublishableKey(\n publishableKey: string,\n userIdentifierKey: string,\n options: SeamHttpFromPublishableKeyOptions = {},\n ): Promise<SeamHttpAcs> {\n warnOnInsecureuserIdentifierKey(userIdentifierKey)\n const clientOptions = parseOptions({ ...options, publishableKey })\n const client = createClient(clientOptions)\n const clientSessions = SeamHttpClientSessions.fromClient(client)\n const { token } = await clientSessions.getOrCreate({\n user_identifier_key: userIdentifierKey,\n })\n return SeamHttpAcs.fromClientSessionToken(token, options)\n }\n\n static fromConsoleSessionToken(\n consoleSessionToken: SeamHttpOptionsWithConsoleSessionToken['consoleSessionToken'],\n workspaceId: SeamHttpOptionsWithConsoleSessionToken['workspaceId'],\n options: Omit<\n SeamHttpOptionsWithConsoleSessionToken,\n 'consoleSessionToken' | 'workspaceId'\n > = {},\n ): SeamHttpAcs {\n const constructorOptions = { ...options, consoleSessionToken, workspaceId }\n if (!isSeamHttpOptionsWithConsoleSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError(\n 'Missing consoleSessionToken or workspaceId',\n )\n }\n return new SeamHttpAcs(constructorOptions)\n }\n\n static fromPersonalAccessToken(\n personalAccessToken: SeamHttpOptionsWithPersonalAccessToken['personalAccessToken'],\n workspaceId: SeamHttpOptionsWithPersonalAccessToken['workspaceId'],\n options: Omit<\n SeamHttpOptionsWithPersonalAccessToken,\n 'personalAccessToken' | 'workspaceId'\n > = {},\n ): SeamHttpAcs {\n const constructorOptions = { ...options, personalAccessToken, workspaceId }\n if (!isSeamHttpOptionsWithPersonalAccessToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError(\n 'Missing personalAccessToken or workspaceId',\n )\n }\n return new SeamHttpAcs(constructorOptions)\n }\n\n get accessGroups(): SeamHttpAcsAccessGroups {\n return SeamHttpAcsAccessGroups.fromClient(this.client)\n }\n\n get credentials(): SeamHttpAcsCredentials {\n return SeamHttpAcsCredentials.fromClient(this.client)\n }\n\n get systems(): SeamHttpAcsSystems {\n return SeamHttpAcsSystems.fromClient(this.client)\n }\n\n get users(): SeamHttpAcsUsers {\n return SeamHttpAcsUsers.fromClient(this.client)\n }\n}\n","/*\n * Automatically generated by generate-routes.ts.\n * Do not edit this file or add other files to this directory.\n */\n\nimport type { RouteRequestBody, RouteResponse } from '@seamapi/types/connect'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { warnOnInsecureuserIdentifierKey } from 'lib/seam/connect/auth.js'\nimport { type Client, createClient } from 'lib/seam/connect/client.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n isSeamHttpOptionsWithConsoleSessionToken,\n isSeamHttpOptionsWithPersonalAccessToken,\n type SeamHttpFromPublishableKeyOptions,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n type SeamHttpOptionsWithConsoleSessionToken,\n type SeamHttpOptionsWithPersonalAccessToken,\n} from 'lib/seam/connect/options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nimport { SeamHttpClientSessions } from './client-sessions.js'\n\nexport class SeamHttpActionAttempts {\n client: Client\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions = {}) {\n const clientOptions = parseOptions(apiKeyOrOptions)\n this.client = createClient(clientOptions)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpActionAttempts {\n const constructorOptions = { ...options, client }\n if (!isSeamHttpOptionsWithClient(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpActionAttempts(constructorOptions)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpActionAttempts {\n const constructorOptions = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpActionAttempts(constructorOptions)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpActionAttempts {\n const constructorOptions = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpActionAttempts(constructorOptions)\n }\n\n static async fromPublishableKey(\n publishableKey: string,\n userIdentifierKey: string,\n options: SeamHttpFromPublishableKeyOptions = {},\n ): Promise<SeamHttpActionAttempts> {\n warnOnInsecureuserIdentifierKey(userIdentifierKey)\n const clientOptions = parseOptions({ ...options, publishableKey })\n const client = createClient(clientOptions)\n const clientSessions = SeamHttpClientSessions.fromClient(client)\n const { token } = await clientSessions.getOrCreate({\n user_identifier_key: userIdentifierKey,\n })\n return SeamHttpActionAttempts.fromClientSessionToken(token, options)\n }\n\n static fromConsoleSessionToken(\n consoleSessionToken: SeamHttpOptionsWithConsoleSessionToken['consoleSessionToken'],\n workspaceId: SeamHttpOptionsWithConsoleSessionToken['workspaceId'],\n options: Omit<\n SeamHttpOptionsWithConsoleSessionToken,\n 'consoleSessionToken' | 'workspaceId'\n > = {},\n ): SeamHttpActionAttempts {\n const constructorOptions = { ...options, consoleSessionToken, workspaceId }\n if (!isSeamHttpOptionsWithConsoleSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError(\n 'Missing consoleSessionToken or workspaceId',\n )\n }\n return new SeamHttpActionAttempts(constructorOptions)\n }\n\n static fromPersonalAccessToken(\n personalAccessToken: SeamHttpOptionsWithPersonalAccessToken['personalAccessToken'],\n workspaceId: SeamHttpOptionsWithPersonalAccessToken['workspaceId'],\n options: Omit<\n SeamHttpOptionsWithPersonalAccessToken,\n 'personalAccessToken' | 'workspaceId'\n > = {},\n ): SeamHttpActionAttempts {\n const constructorOptions = { ...options, personalAccessToken, workspaceId }\n if (!isSeamHttpOptionsWithPersonalAccessToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError(\n 'Missing personalAccessToken or workspaceId',\n )\n }\n return new SeamHttpActionAttempts(constructorOptions)\n }\n\n async get(\n body?: ActionAttemptsGetParams,\n ): Promise<ActionAttemptsGetResponse['action_attempt']> {\n const { data } = await this.client.request<ActionAttemptsGetResponse>({\n url: '/action_attempts/get',\n method: 'post',\n data: body,\n })\n return data.action_attempt\n }\n\n async list(\n body?: ActionAttemptsListParams,\n ): Promise<ActionAttemptsListResponse['action_attempts']> {\n const { data } = await this.client.request<ActionAttemptsListResponse>({\n url: '/action_attempts/list',\n method: 'post',\n data: body,\n })\n return data.action_attempts\n }\n}\n\nexport type ActionAttemptsGetParams = RouteRequestBody<'/action_attempts/get'>\n\nexport type ActionAttemptsGetResponse = SetNonNullable<\n Required<RouteResponse<'/action_attempts/get'>>\n>\n\nexport type ActionAttemptsListParams = RouteRequestBody<'/action_attempts/list'>\n\nexport type ActionAttemptsListResponse = SetNonNullable<\n Required<RouteResponse<'/action_attempts/list'>>\n>\n","/*\n * Automatically generated by generate-routes.ts.\n * Do not edit this file or add other files to this directory.\n */\n\nimport type {\n RouteRequestBody,\n RouteRequestParams,\n RouteResponse,\n} from '@seamapi/types/connect'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { warnOnInsecureuserIdentifierKey } from 'lib/seam/connect/auth.js'\nimport { type Client, createClient } from 'lib/seam/connect/client.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n isSeamHttpOptionsWithConsoleSessionToken,\n isSeamHttpOptionsWithPersonalAccessToken,\n type SeamHttpFromPublishableKeyOptions,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n type SeamHttpOptionsWithConsoleSessionToken,\n type SeamHttpOptionsWithPersonalAccessToken,\n} from 'lib/seam/connect/options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nimport { SeamHttpClientSessions } from './client-sessions.js'\n\nexport class SeamHttpConnectWebviews {\n client: Client\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions = {}) {\n const clientOptions = parseOptions(apiKeyOrOptions)\n this.client = createClient(clientOptions)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpConnectWebviews {\n const constructorOptions = { ...options, client }\n if (!isSeamHttpOptionsWithClient(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpConnectWebviews(constructorOptions)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpConnectWebviews {\n const constructorOptions = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpConnectWebviews(constructorOptions)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpConnectWebviews {\n const constructorOptions = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpConnectWebviews(constructorOptions)\n }\n\n static async fromPublishableKey(\n publishableKey: string,\n userIdentifierKey: string,\n options: SeamHttpFromPublishableKeyOptions = {},\n ): Promise<SeamHttpConnectWebviews> {\n warnOnInsecureuserIdentifierKey(userIdentifierKey)\n const clientOptions = parseOptions({ ...options, publishableKey })\n const client = createClient(clientOptions)\n const clientSessions = SeamHttpClientSessions.fromClient(client)\n const { token } = await clientSessions.getOrCreate({\n user_identifier_key: userIdentifierKey,\n })\n return SeamHttpConnectWebviews.fromClientSessionToken(token, options)\n }\n\n static fromConsoleSessionToken(\n consoleSessionToken: SeamHttpOptionsWithConsoleSessionToken['consoleSessionToken'],\n workspaceId: SeamHttpOptionsWithConsoleSessionToken['workspaceId'],\n options: Omit<\n SeamHttpOptionsWithConsoleSessionToken,\n 'consoleSessionToken' | 'workspaceId'\n > = {},\n ): SeamHttpConnectWebviews {\n const constructorOptions = { ...options, consoleSessionToken, workspaceId }\n if (!isSeamHttpOptionsWithConsoleSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError(\n 'Missing consoleSessionToken or workspaceId',\n )\n }\n return new SeamHttpConnectWebviews(constructorOptions)\n }\n\n static fromPersonalAccessToken(\n personalAccessToken: SeamHttpOptionsWithPersonalAccessToken['personalAccessToken'],\n workspaceId: SeamHttpOptionsWithPersonalAccessToken['workspaceId'],\n options: Omit<\n SeamHttpOptionsWithPersonalAccessToken,\n 'personalAccessToken' | 'workspaceId'\n > = {},\n ): SeamHttpConnectWebviews {\n const constructorOptions = { ...options, personalAccessToken, workspaceId }\n if (!isSeamHttpOptionsWithPersonalAccessToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError(\n 'Missing personalAccessToken or workspaceId',\n )\n }\n return new SeamHttpConnectWebviews(constructorOptions)\n }\n\n async create(\n body?: ConnectWebviewsCreateBody,\n ): Promise<ConnectWebviewsCreateResponse['connect_webview']> {\n const { data } = await this.client.request<ConnectWebviewsCreateResponse>({\n url: '/connect_webviews/create',\n method: 'post',\n data: body,\n })\n return data.connect_webview\n }\n\n async delete(body?: ConnectWebviewsDeleteBody): Promise<void> {\n await this.client.request<ConnectWebviewsDeleteResponse>({\n url: '/connect_webviews/delete',\n method: 'post',\n data: body,\n })\n }\n\n async get(\n body?: ConnectWebviewsGetParams,\n ): Promise<ConnectWebviewsGetResponse['connect_webview']> {\n const { data } = await this.client.request<ConnectWebviewsGetResponse>({\n url: '/connect_webviews/get',\n method: 'post',\n data: body,\n })\n return data.connect_webview\n }\n\n async list(\n body?: ConnectWebviewsListParams,\n ): Promise<ConnectWebviewsListResponse['connect_webviews']> {\n const { data } = await this.client.request<ConnectWebviewsListResponse>({\n url: '/connect_webviews/list',\n method: 'post',\n data: body,\n })\n return data.connect_webviews\n }\n\n async view(params?: ConnectWebviewsViewParams): Promise<void> {\n await this.client.request<ConnectWebviewsViewResponse>({\n url: '/connect_webviews/view',\n method: 'get',\n params,\n })\n }\n}\n\nexport type ConnectWebviewsCreateBody =\n RouteRequestBody<'/connect_webviews/create'>\n\nexport type ConnectWebviewsCreateResponse = SetNonNullable<\n Required<RouteResponse<'/connect_webviews/create'>>\n>\n\nexport type ConnectWebviewsDeleteBody =\n RouteRequestBody<'/connect_webviews/delete'>\n\nexport type ConnectWebviewsDeleteResponse = SetNonNullable<\n Required<RouteResponse<'/connect_webviews/delete'>>\n>\n\nexport type ConnectWebviewsGetParams = RouteRequestBody<'/connect_webviews/get'>\n\nexport type ConnectWebviewsGetResponse = SetNonNullable<\n Required<RouteResponse<'/connect_webviews/get'>>\n>\n\nexport type ConnectWebviewsListParams =\n RouteRequestBody<'/connect_webviews/list'>\n\nexport type ConnectWebviewsListResponse = SetNonNullable<\n Required<RouteResponse<'/connect_webviews/list'>>\n>\n\nexport type ConnectWebviewsViewParams =\n RouteRequestParams<'/connect_webviews/view'>\n\nexport type ConnectWebviewsViewResponse = SetNonNullable<\n Required<RouteResponse<'/connect_webviews/view'>>\n>\n","/*\n * Automatically generated by generate-routes.ts.\n * Do not edit this file or add other files to this directory.\n */\n\nimport type {\n RouteRequestBody,\n RouteRequestParams,\n RouteResponse,\n} from '@seamapi/types/connect'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { warnOnInsecureuserIdentifierKey } from 'lib/seam/connect/auth.js'\nimport { type Client, createClient } from 'lib/seam/connect/client.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n isSeamHttpOptionsWithConsoleSessionToken,\n isSeamHttpOptionsWithPersonalAccessToken,\n type SeamHttpFromPublishableKeyOptions,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n type SeamHttpOptionsWithConsoleSessionToken,\n type SeamHttpOptionsWithPersonalAccessToken,\n} from 'lib/seam/connect/options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nimport { SeamHttpClientSessions } from './client-sessions.js'\n\nexport class SeamHttpConnectedAccounts {\n client: Client\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions = {}) {\n const clientOptions = parseOptions(apiKeyOrOptions)\n this.client = createClient(clientOptions)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpConnectedAccounts {\n const constructorOptions = { ...options, client }\n if (!isSeamHttpOptionsWithClient(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpConnectedAccounts(constructorOptions)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpConnectedAccounts {\n const constructorOptions = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpConnectedAccounts(constructorOptions)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpConnectedAccounts {\n const constructorOptions = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpConnectedAccounts(constructorOptions)\n }\n\n static async fromPublishableKey(\n publishableKey: string,\n userIdentifierKey: string,\n options: SeamHttpFromPublishableKeyOptions = {},\n ): Promise<SeamHttpConnectedAccounts> {\n warnOnInsecureuserIdentifierKey(userIdentifierKey)\n const clientOptions = parseOptions({ ...options, publishableKey })\n const client = createClient(clientOptions)\n const clientSessions = SeamHttpClientSessions.fromClient(client)\n const { token } = await clientSessions.getOrCreate({\n user_identifier_key: userIdentifierKey,\n })\n return SeamHttpConnectedAccounts.fromClientSessionToken(token, options)\n }\n\n static fromConsoleSessionToken(\n consoleSessionToken: SeamHttpOptionsWithConsoleSessionToken['consoleSessionToken'],\n workspaceId: SeamHttpOptionsWithConsoleSessionToken['workspaceId'],\n options: Omit<\n SeamHttpOptionsWithConsoleSessionToken,\n 'consoleSessionToken' | 'workspaceId'\n > = {},\n ): SeamHttpConnectedAccounts {\n const constructorOptions = { ...options, consoleSessionToken, workspaceId }\n if (!isSeamHttpOptionsWithConsoleSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError(\n 'Missing consoleSessionToken or workspaceId',\n )\n }\n return new SeamHttpConnectedAccounts(constructorOptions)\n }\n\n static fromPersonalAccessToken(\n personalAccessToken: SeamHttpOptionsWithPersonalAccessToken['personalAccessToken'],\n workspaceId: SeamHttpOptionsWithPersonalAccessToken['workspaceId'],\n options: Omit<\n SeamHttpOptionsWithPersonalAccessToken,\n 'personalAccessToken' | 'workspaceId'\n > = {},\n ): SeamHttpConnectedAccounts {\n const constructorOptions = { ...options, personalAccessToken, workspaceId }\n if (!isSeamHttpOptionsWithPersonalAccessToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError(\n 'Missing personalAccessToken or workspaceId',\n )\n }\n return new SeamHttpConnectedAccounts(constructorOptions)\n }\n\n async delete(body?: ConnectedAccountsDeleteBody): Promise<void> {\n await this.client.request<ConnectedAccountsDeleteResponse>({\n url: '/connected_accounts/delete',\n method: 'post',\n data: body,\n })\n }\n\n async get(\n body?: ConnectedAccountsGetParams,\n ): Promise<ConnectedAccountsGetResponse['connected_account']> {\n const { data } = await this.client.request<ConnectedAccountsGetResponse>({\n url: '/connected_accounts/get',\n method: 'post',\n data: body,\n })\n return data.connected_account\n }\n\n async list(\n params?: ConnectedAccountsListParams,\n ): Promise<ConnectedAccountsListResponse['connected_accounts']> {\n const { data } = await this.client.request<ConnectedAccountsListResponse>({\n url: '/connected_accounts/list',\n method: 'get',\n params,\n })\n return data.connected_accounts\n }\n}\n\nexport type ConnectedAccountsDeleteBody =\n RouteRequestBody<'/connected_accounts/delete'>\n\nexport type ConnectedAccountsDeleteResponse = SetNonNullable<\n Required<RouteResponse<'/connected_accounts/delete'>>\n>\n\nexport type ConnectedAccountsGetParams =\n RouteRequestBody<'/connected_accounts/get'>\n\nexport type ConnectedAccountsGetResponse = SetNonNullable<\n Required<RouteResponse<'/connected_accounts/get'>>\n>\n\nexport type ConnectedAccountsListParams =\n RouteRequestParams<'/connected_accounts/list'>\n\nexport type ConnectedAccountsListResponse = SetNonNullable<\n Required<RouteResponse<'/connected_accounts/list'>>\n>\n","/*\n * Automatically generated by generate-routes.ts.\n * Do not edit this file or add other files to this directory.\n */\n\nimport type { RouteRequestBody, RouteResponse } from '@seamapi/types/connect'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { warnOnInsecureuserIdentifierKey } from 'lib/seam/connect/auth.js'\nimport { type Client, createClient } from 'lib/seam/connect/client.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n isSeamHttpOptionsWithConsoleSessionToken,\n isSeamHttpOptionsWithPersonalAccessToken,\n type SeamHttpFromPublishableKeyOptions,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n type SeamHttpOptionsWithConsoleSessionToken,\n type SeamHttpOptionsWithPersonalAccessToken,\n} from 'lib/seam/connect/options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nimport { SeamHttpClientSessions } from './client-sessions.js'\n\nexport class SeamHttpDevicesUnmanaged {\n client: Client\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions = {}) {\n const clientOptions = parseOptions(apiKeyOrOptions)\n this.client = createClient(clientOptions)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpDevicesUnmanaged {\n const constructorOptions = { ...options, client }\n if (!isSeamHttpOptionsWithClient(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpDevicesUnmanaged(constructorOptions)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpDevicesUnmanaged {\n const constructorOptions = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpDevicesUnmanaged(constructorOptions)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpDevicesUnmanaged {\n const constructorOptions = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpDevicesUnmanaged(constructorOptions)\n }\n\n static async fromPublishableKey(\n publishableKey: string,\n userIdentifierKey: string,\n options: SeamHttpFromPublishableKeyOptions = {},\n ): Promise<SeamHttpDevicesUnmanaged> {\n warnOnInsecureuserIdentifierKey(userIdentifierKey)\n const clientOptions = parseOptions({ ...options, publishableKey })\n const client = createClient(clientOptions)\n const clientSessions = SeamHttpClientSessions.fromClient(client)\n const { token } = await clientSessions.getOrCreate({\n user_identifier_key: userIdentifierKey,\n })\n return SeamHttpDevicesUnmanaged.fromClientSessionToken(token, options)\n }\n\n static fromConsoleSessionToken(\n consoleSessionToken: SeamHttpOptionsWithConsoleSessionToken['consoleSessionToken'],\n workspaceId: SeamHttpOptionsWithConsoleSessionToken['workspaceId'],\n options: Omit<\n SeamHttpOptionsWithConsoleSessionToken,\n 'consoleSessionToken' | 'workspaceId'\n > = {},\n ): SeamHttpDevicesUnmanaged {\n const constructorOptions = { ...options, consoleSessionToken, workspaceId }\n if (!isSeamHttpOptionsWithConsoleSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError(\n 'Missing consoleSessionToken or workspaceId',\n )\n }\n return new SeamHttpDevicesUnmanaged(constructorOptions)\n }\n\n static fromPersonalAccessToken(\n personalAccessToken: SeamHttpOptionsWithPersonalAccessToken['personalAccessToken'],\n workspaceId: SeamHttpOptionsWithPersonalAccessToken['workspaceId'],\n options: Omit<\n SeamHttpOptionsWithPersonalAccessToken,\n 'personalAccessToken' | 'workspaceId'\n > = {},\n ): SeamHttpDevicesUnmanaged {\n const constructorOptions = { ...options, personalAccessToken, workspaceId }\n if (!isSeamHttpOptionsWithPersonalAccessToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError(\n 'Missing personalAccessToken or workspaceId',\n )\n }\n return new SeamHttpDevicesUnmanaged(constructorOptions)\n }\n\n async get(\n body?: DevicesUnmanagedGetParams,\n ): Promise<DevicesUnmanagedGetResponse['device']> {\n const { data } = await this.client.request<DevicesUnmanagedGetResponse>({\n url: '/devices/unmanaged/get',\n method: 'post',\n data: body,\n })\n return data.device\n }\n\n async list(\n body?: DevicesUnmanagedListParams,\n ): Promise<DevicesUnmanagedListResponse['devices']> {\n const { data } = await this.client.request<DevicesUnmanagedListResponse>({\n url: '/devices/unmanaged/list',\n method: 'post',\n data: body,\n })\n return data.devices\n }\n\n async update(body?: DevicesUnmanagedUpdateBody): Promise<void> {\n await this.client.request<DevicesUnmanagedUpdateResponse>({\n url: '/devices/unmanaged/update',\n method: 'post',\n data: body,\n })\n }\n}\n\nexport type DevicesUnmanagedGetParams =\n RouteRequestBody<'/devices/unmanaged/get'>\n\nexport type DevicesUnmanagedGetResponse = SetNonNullable<\n Required<RouteResponse<'/devices/unmanaged/get'>>\n>\n\nexport type DevicesUnmanagedListParams =\n RouteRequestBody<'/devices/unmanaged/list'>\n\nexport type DevicesUnmanagedListResponse = SetNonNullable<\n Required<RouteResponse<'/devices/unmanaged/list'>>\n>\n\nexport type DevicesUnmanagedUpdateBody =\n RouteRequestBody<'/devices/unmanaged/update'>\n\nexport type DevicesUnmanagedUpdateResponse = SetNonNullable<\n Required<RouteResponse<'/devices/unmanaged/update'>>\n>\n","/*\n * Automatically generated by generate-routes.ts.\n * Do not edit this file or add other files to this directory.\n */\n\nimport type { RouteRequestBody, RouteResponse } from '@seamapi/types/connect'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { warnOnInsecureuserIdentifierKey } from 'lib/seam/connect/auth.js'\nimport { type Client, createClient } from 'lib/seam/connect/client.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n isSeamHttpOptionsWithConsoleSessionToken,\n isSeamHttpOptionsWithPersonalAccessToken,\n type SeamHttpFromPublishableKeyOptions,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n type SeamHttpOptionsWithConsoleSessionToken,\n type SeamHttpOptionsWithPersonalAccessToken,\n} from 'lib/seam/connect/options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nimport { SeamHttpClientSessions } from './client-sessions.js'\nimport { SeamHttpDevicesUnmanaged } from './devices-unmanaged.js'\n\nexport class SeamHttpDevices {\n client: Client\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions = {}) {\n const clientOptions = parseOptions(apiKeyOrOptions)\n this.client = createClient(clientOptions)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpDevices {\n const constructorOptions = { ...options, client }\n if (!isSeamHttpOptionsWithClient(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpDevices(constructorOptions)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpDevices {\n const constructorOptions = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpDevices(constructorOptions)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpDevices {\n const constructorOptions = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpDevices(constructorOptions)\n }\n\n static async fromPublishableKey(\n publishableKey: string,\n userIdentifierKey: string,\n options: SeamHttpFromPublishableKeyOptions = {},\n ): Promise<SeamHttpDevices> {\n warnOnInsecureuserIdentifierKey(userIdentifierKey)\n const clientOptions = parseOptions({ ...options, publishableKey })\n const client = createClient(clientOptions)\n const clientSessions = SeamHttpClientSessions.fromClient(client)\n const { token } = await clientSessions.getOrCreate({\n user_identifier_key: userIdentifierKey,\n })\n return SeamHttpDevices.fromClientSessionToken(token, options)\n }\n\n static fromConsoleSessionToken(\n consoleSessionToken: SeamHttpOptionsWithConsoleSessionToken['consoleSessionToken'],\n workspaceId: SeamHttpOptionsWithConsoleSessionToken['workspaceId'],\n options: Omit<\n SeamHttpOptionsWithConsoleSessionToken,\n 'consoleSessionToken' | 'workspaceId'\n > = {},\n ): SeamHttpDevices {\n const constructorOptions = { ...options, consoleSessionToken, workspaceId }\n if (!isSeamHttpOptionsWithConsoleSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError(\n 'Missing consoleSessionToken or workspaceId',\n )\n }\n return new SeamHttpDevices(constructorOptions)\n }\n\n static fromPersonalAccessToken(\n personalAccessToken: SeamHttpOptionsWithPersonalAccessToken['personalAccessToken'],\n workspaceId: SeamHttpOptionsWithPersonalAccessToken['workspaceId'],\n options: Omit<\n SeamHttpOptionsWithPersonalAccessToken,\n 'personalAccessToken' | 'workspaceId'\n > = {},\n ): SeamHttpDevices {\n const constructorOptions = { ...options, personalAccessToken, workspaceId }\n if (!isSeamHttpOptionsWithPersonalAccessToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError(\n 'Missing personalAccessToken or workspaceId',\n )\n }\n return new SeamHttpDevices(constructorOptions)\n }\n\n get unmanaged(): SeamHttpDevicesUnmanaged {\n return SeamHttpDevicesUnmanaged.fromClient(this.client)\n }\n\n async delete(body?: DevicesDeleteBody): Promise<void> {\n await this.client.request<DevicesDeleteResponse>({\n url: '/devices/delete',\n method: 'post',\n data: body,\n })\n }\n\n async get(body?: DevicesGetParams): Promise<DevicesGetResponse['device']> {\n const { data } = await this.client.request<DevicesGetResponse>({\n url: '/devices/get',\n method: 'post',\n data: body,\n })\n return data.device\n }\n\n async list(\n body?: DevicesListParams,\n ): Promise<DevicesListResponse['devices']> {\n const { data } = await this.client.request<DevicesListResponse>({\n url: '/devices/list',\n method: 'post',\n data: body,\n })\n return data.devices\n }\n\n async listDeviceProviders(\n body?: DevicesListDeviceProvidersParams,\n ): Promise<DevicesListDeviceProvidersResponse['device_providers']> {\n const { data } =\n await this.client.request<DevicesListDeviceProvidersResponse>({\n url: '/devices/list_device_providers',\n method: 'post',\n data: body,\n })\n return data.device_providers\n }\n\n async update(body?: DevicesUpdateBody): Promise<void> {\n await this.client.request<DevicesUpdateResponse>({\n url: '/devices/update',\n method: 'post',\n data: body,\n })\n }\n}\n\nexport type DevicesDeleteBody = RouteRequestBody<'/devices/delete'>\n\nexport type DevicesDeleteResponse = SetNonNullable<\n Required<RouteResponse<'/devices/delete'>>\n>\n\nexport type DevicesGetParams = RouteRequestBody<'/devices/get'>\n\nexport type DevicesGetResponse = SetNonNullable<\n Required<RouteResponse<'/devices/get'>>\n>\n\nexport type DevicesListParams = RouteRequestBody<'/devices/list'>\n\nexport type DevicesListResponse = SetNonNullable<\n Required<RouteResponse<'/devices/list'>>\n>\n\nexport type DevicesListDeviceProvidersParams =\n RouteRequestBody<'/devices/list_device_providers'>\n\nexport type DevicesListDeviceProvidersResponse = SetNonNullable<\n Required<RouteResponse<'/devices/list_device_providers'>>\n>\n\nexport type DevicesUpdateBody = RouteRequestBody<'/devices/update'>\n\nexport type DevicesUpdateResponse = SetNonNullable<\n Required<RouteResponse<'/devices/update'>>\n>\n","/*\n * Automatically generated by generate-routes.ts.\n * Do not edit this file or add other files to this directory.\n */\n\nimport type { RouteRequestBody, RouteResponse } from '@seamapi/types/connect'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { warnOnInsecureuserIdentifierKey } from 'lib/seam/connect/auth.js'\nimport { type Client, createClient } from 'lib/seam/connect/client.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n isSeamHttpOptionsWithConsoleSessionToken,\n isSeamHttpOptionsWithPersonalAccessToken,\n type SeamHttpFromPublishableKeyOptions,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n type SeamHttpOptionsWithConsoleSessionToken,\n type SeamHttpOptionsWithPersonalAccessToken,\n} from 'lib/seam/connect/options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nimport { SeamHttpClientSessions } from './client-sessions.js'\n\nexport class SeamHttpEvents {\n client: Client\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions = {}) {\n const clientOptions = parseOptions(apiKeyOrOptions)\n this.client = createClient(clientOptions)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpEvents {\n const constructorOptions = { ...options, client }\n if (!isSeamHttpOptionsWithClient(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpEvents(constructorOptions)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpEvents {\n const constructorOptions = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpEvents(constructorOptions)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpEvents {\n const constructorOptions = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpEvents(constructorOptions)\n }\n\n static async fromPublishableKey(\n publishableKey: string,\n userIdentifierKey: string,\n options: SeamHttpFromPublishableKeyOptions = {},\n ): Promise<SeamHttpEvents> {\n warnOnInsecureuserIdentifierKey(userIdentifierKey)\n const clientOptions = parseOptions({ ...options, publishableKey })\n const client = createClient(clientOptions)\n const clientSessions = SeamHttpClientSessions.fromClient(client)\n const { token } = await clientSessions.getOrCreate({\n user_identifier_key: userIdentifierKey,\n })\n return SeamHttpEvents.fromClientSessionToken(token, options)\n }\n\n static fromConsoleSessionToken(\n consoleSessionToken: SeamHttpOptionsWithConsoleSessionToken['consoleSessionToken'],\n workspaceId: SeamHttpOptionsWithConsoleSessionToken['workspaceId'],\n options: Omit<\n SeamHttpOptionsWithConsoleSessionToken,\n 'consoleSessionToken' | 'workspaceId'\n > = {},\n ): SeamHttpEvents {\n const constructorOptions = { ...options, consoleSessionToken, workspaceId }\n if (!isSeamHttpOptionsWithConsoleSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError(\n 'Missing consoleSessionToken or workspaceId',\n )\n }\n return new SeamHttpEvents(constructorOptions)\n }\n\n static fromPersonalAccessToken(\n personalAccessToken: SeamHttpOptionsWithPersonalAccessToken['personalAccessToken'],\n workspaceId: SeamHttpOptionsWithPersonalAccessToken['workspaceId'],\n options: Omit<\n SeamHttpOptionsWithPersonalAccessToken,\n 'personalAccessToken' | 'workspaceId'\n > = {},\n ): SeamHttpEvents {\n const constructorOptions = { ...options, personalAccessToken, workspaceId }\n if (!isSeamHttpOptionsWithPersonalAccessToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError(\n 'Missing personalAccessToken or workspaceId',\n )\n }\n return new SeamHttpEvents(constructorOptions)\n }\n\n async get(body?: EventsGetParams): Promise<EventsGetResponse['event']> {\n const { data } = await this.client.request<EventsGetResponse>({\n url: '/events/get',\n method: 'post',\n data: body,\n })\n return data.event\n }\n\n async list(body?: EventsListParams): Promise<EventsListResponse['events']> {\n const { data } = await this.client.request<EventsListResponse>({\n url: '/events/list',\n method: 'post',\n data: body,\n })\n return data.events\n }\n}\n\nexport type EventsGetParams = RouteRequestBody<'/events/get'>\n\nexport type EventsGetResponse = SetNonNullable<\n Required<RouteResponse<'/events/get'>>\n>\n\nexport type EventsListParams = RouteRequestBody<'/events/list'>\n\nexport type EventsListResponse = SetNonNullable<\n Required<RouteResponse<'/events/list'>>\n>\n","/*\n * Automatically generated by generate-routes.ts.\n * Do not edit this file or add other files to this directory.\n */\n\nimport type { RouteRequestBody, RouteResponse } from '@seamapi/types/connect'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { warnOnInsecureuserIdentifierKey } from 'lib/seam/connect/auth.js'\nimport { type Client, createClient } from 'lib/seam/connect/client.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n isSeamHttpOptionsWithConsoleSessionToken,\n isSeamHttpOptionsWithPersonalAccessToken,\n type SeamHttpFromPublishableKeyOptions,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n type SeamHttpOptionsWithConsoleSessionToken,\n type SeamHttpOptionsWithPersonalAccessToken,\n} from 'lib/seam/connect/options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nimport { SeamHttpClientSessions } from './client-sessions.js'\n\nexport class SeamHttpLocks {\n client: Client\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions = {}) {\n const clientOptions = parseOptions(apiKeyOrOptions)\n this.client = createClient(clientOptions)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpLocks {\n const constructorOptions = { ...options, client }\n if (!isSeamHttpOptionsWithClient(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpLocks(constructorOptions)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpLocks {\n const constructorOptions = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpLocks(constructorOptions)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpLocks {\n const constructorOptions = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpLocks(constructorOptions)\n }\n\n static async fromPublishableKey(\n publishableKey: string,\n userIdentifierKey: string,\n options: SeamHttpFromPublishableKeyOptions = {},\n ): Promise<SeamHttpLocks> {\n warnOnInsecureuserIdentifierKey(userIdentifierKey)\n const clientOptions = parseOptions({ ...options, publishableKey })\n const client = createClient(clientOptions)\n const clientSessions = SeamHttpClientSessions.fromClient(client)\n const { token } = await clientSessions.getOrCreate({\n user_identifier_key: userIdentifierKey,\n })\n return SeamHttpLocks.fromClientSessionToken(token, options)\n }\n\n static fromConsoleSessionToken(\n consoleSessionToken: SeamHttpOptionsWithConsoleSessionToken['consoleSessionToken'],\n workspaceId: SeamHttpOptionsWithConsoleSessionToken['workspaceId'],\n options: Omit<\n SeamHttpOptionsWithConsoleSessionToken,\n 'consoleSessionToken' | 'workspaceId'\n > = {},\n ): SeamHttpLocks {\n const constructorOptions = { ...options, consoleSessionToken, workspaceId }\n if (!isSeamHttpOptionsWithConsoleSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError(\n 'Missing consoleSessionToken or workspaceId',\n )\n }\n return new SeamHttpLocks(constructorOptions)\n }\n\n static fromPersonalAccessToken(\n personalAccessToken: SeamHttpOptionsWithPersonalAccessToken['personalAccessToken'],\n workspaceId: SeamHttpOptionsWithPersonalAccessToken['workspaceId'],\n options: Omit<\n SeamHttpOptionsWithPersonalAccessToken,\n 'personalAccessToken' | 'workspaceId'\n > = {},\n ): SeamHttpLocks {\n const constructorOptions = { ...options, personalAccessToken, workspaceId }\n if (!isSeamHttpOptionsWithPersonalAccessToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError(\n 'Missing personalAccessToken or workspaceId',\n )\n }\n return new SeamHttpLocks(constructorOptions)\n }\n\n async get(body?: LocksGetParams): Promise<LocksGetResponse['device']> {\n const { data } = await this.client.request<LocksGetResponse>({\n url: '/locks/get',\n method: 'post',\n data: body,\n })\n return data.device\n }\n\n async list(body?: LocksListParams): Promise<LocksListResponse['devices']> {\n const { data } = await this.client.request<LocksListResponse>({\n url: '/locks/list',\n method: 'post',\n data: body,\n })\n return data.devices\n }\n\n async lockDoor(\n body?: LocksLockDoorBody,\n ): Promise<LocksLockDoorResponse['action_attempt']> {\n const { data } = await this.client.request<LocksLockDoorResponse>({\n url: '/locks/lock_door',\n method: 'post',\n data: body,\n })\n return data.action_attempt\n }\n\n async unlockDoor(\n body?: LocksUnlockDoorBody,\n ): Promise<LocksUnlockDoorResponse['action_attempt']> {\n const { data } = await this.client.request<LocksUnlockDoorResponse>({\n url: '/locks/unlock_door',\n method: 'post',\n data: body,\n })\n return data.action_attempt\n }\n}\n\nexport type LocksGetParams = RouteRequestBody<'/locks/get'>\n\nexport type LocksGetResponse = SetNonNullable<\n Required<RouteResponse<'/locks/get'>>\n>\n\nexport type LocksListParams = RouteRequestBody<'/locks/list'>\n\nexport type LocksListResponse = SetNonNullable<\n Required<RouteResponse<'/locks/list'>>\n>\n\nexport type LocksLockDoorBody = RouteRequestBody<'/locks/lock_door'>\n\nexport type LocksLockDoorResponse = SetNonNullable<\n Required<RouteResponse<'/locks/lock_door'>>\n>\n\nexport type LocksUnlockDoorBody = RouteRequestBody<'/locks/unlock_door'>\n\nexport type LocksUnlockDoorResponse = SetNonNullable<\n Required<RouteResponse<'/locks/unlock_door'>>\n>\n","/*\n * Automatically generated by generate-routes.ts.\n * Do not edit this file or add other files to this directory.\n */\n\nimport type { RouteRequestBody, RouteResponse } from '@seamapi/types/connect'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { warnOnInsecureuserIdentifierKey } from 'lib/seam/connect/auth.js'\nimport { type Client, createClient } from 'lib/seam/connect/client.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n isSeamHttpOptionsWithConsoleSessionToken,\n isSeamHttpOptionsWithPersonalAccessToken,\n type SeamHttpFromPublishableKeyOptions,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n type SeamHttpOptionsWithConsoleSessionToken,\n type SeamHttpOptionsWithPersonalAccessToken,\n} from 'lib/seam/connect/options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nimport { SeamHttpClientSessions } from './client-sessions.js'\n\nexport class SeamHttpNoiseSensorsNoiseThresholds {\n client: Client\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions = {}) {\n const clientOptions = parseOptions(apiKeyOrOptions)\n this.client = createClient(clientOptions)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpNoiseSensorsNoiseThresholds {\n const constructorOptions = { ...options, client }\n if (!isSeamHttpOptionsWithClient(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpNoiseSensorsNoiseThresholds(constructorOptions)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpNoiseSensorsNoiseThresholds {\n const constructorOptions = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpNoiseSensorsNoiseThresholds(constructorOptions)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpNoiseSensorsNoiseThresholds {\n const constructorOptions = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpNoiseSensorsNoiseThresholds(constructorOptions)\n }\n\n static async fromPublishableKey(\n publishableKey: string,\n userIdentifierKey: string,\n options: SeamHttpFromPublishableKeyOptions = {},\n ): Promise<SeamHttpNoiseSensorsNoiseThresholds> {\n warnOnInsecureuserIdentifierKey(userIdentifierKey)\n const clientOptions = parseOptions({ ...options, publishableKey })\n const client = createClient(clientOptions)\n const clientSessions = SeamHttpClientSessions.fromClient(client)\n const { token } = await clientSessions.getOrCreate({\n user_identifier_key: userIdentifierKey,\n })\n return SeamHttpNoiseSensorsNoiseThresholds.fromClientSessionToken(\n token,\n options,\n )\n }\n\n static fromConsoleSessionToken(\n consoleSessionToken: SeamHttpOptionsWithConsoleSessionToken['consoleSessionToken'],\n workspaceId: SeamHttpOptionsWithConsoleSessionToken['workspaceId'],\n options: Omit<\n SeamHttpOptionsWithConsoleSessionToken,\n 'consoleSessionToken' | 'workspaceId'\n > = {},\n ): SeamHttpNoiseSensorsNoiseThresholds {\n const constructorOptions = { ...options, consoleSessionToken, workspaceId }\n if (!isSeamHttpOptionsWithConsoleSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError(\n 'Missing consoleSessionToken or workspaceId',\n )\n }\n return new SeamHttpNoiseSensorsNoiseThresholds(constructorOptions)\n }\n\n static fromPersonalAccessToken(\n personalAccessToken: SeamHttpOptionsWithPersonalAccessToken['personalAccessToken'],\n workspaceId: SeamHttpOptionsWithPersonalAccessToken['workspaceId'],\n options: Omit<\n SeamHttpOptionsWithPersonalAccessToken,\n 'personalAccessToken' | 'workspaceId'\n > = {},\n ): SeamHttpNoiseSensorsNoiseThresholds {\n const constructorOptions = { ...options, personalAccessToken, workspaceId }\n if (!isSeamHttpOptionsWithPersonalAccessToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError(\n 'Missing personalAccessToken or workspaceId',\n )\n }\n return new SeamHttpNoiseSensorsNoiseThresholds(constructorOptions)\n }\n\n async create(body?: NoiseSensorsNoiseThresholdsCreateBody): Promise<void> {\n await this.client.request<NoiseSensorsNoiseThresholdsCreateResponse>({\n url: '/noise_sensors/noise_thresholds/create',\n method: 'post',\n data: body,\n })\n }\n\n async delete(body?: NoiseSensorsNoiseThresholdsDeleteBody): Promise<void> {\n await this.client.request<NoiseSensorsNoiseThresholdsDeleteResponse>({\n url: '/noise_sensors/noise_thresholds/delete',\n method: 'post',\n data: body,\n })\n }\n\n async get(\n body?: NoiseSensorsNoiseThresholdsGetParams,\n ): Promise<NoiseSensorsNoiseThresholdsGetResponse['noise_threshold']> {\n const { data } =\n await this.client.request<NoiseSensorsNoiseThresholdsGetResponse>({\n url: '/noise_sensors/noise_thresholds/get',\n method: 'post',\n data: body,\n })\n return data.noise_threshold\n }\n\n async list(\n body?: NoiseSensorsNoiseThresholdsListParams,\n ): Promise<NoiseSensorsNoiseThresholdsListResponse['noise_thresholds']> {\n const { data } =\n await this.client.request<NoiseSensorsNoiseThresholdsListResponse>({\n url: '/noise_sensors/noise_thresholds/list',\n method: 'post',\n data: body,\n })\n return data.noise_thresholds\n }\n\n async update(body?: NoiseSensorsNoiseThresholdsUpdateBody): Promise<void> {\n await this.client.request<NoiseSensorsNoiseThresholdsUpdateResponse>({\n url: '/noise_sensors/noise_thresholds/update',\n method: 'post',\n data: body,\n })\n }\n}\n\nexport type NoiseSensorsNoiseThresholdsCreateBody =\n RouteRequestBody<'/noise_sensors/noise_thresholds/create'>\n\nexport type NoiseSensorsNoiseThresholdsCreateResponse = SetNonNullable<\n Required<RouteResponse<'/noise_sensors/noise_thresholds/create'>>\n>\n\nexport type NoiseSensorsNoiseThresholdsDeleteBody =\n RouteRequestBody<'/noise_sensors/noise_thresholds/delete'>\n\nexport type NoiseSensorsNoiseThresholdsDeleteResponse = SetNonNullable<\n Required<RouteResponse<'/noise_sensors/noise_thresholds/delete'>>\n>\n\nexport type NoiseSensorsNoiseThresholdsGetParams =\n RouteRequestBody<'/noise_sensors/noise_thresholds/get'>\n\nexport type NoiseSensorsNoiseThresholdsGetResponse = SetNonNullable<\n Required<RouteResponse<'/noise_sensors/noise_thresholds/get'>>\n>\n\nexport type NoiseSensorsNoiseThresholdsListParams =\n RouteRequestBody<'/noise_sensors/noise_thresholds/list'>\n\nexport type NoiseSensorsNoiseThresholdsListResponse = SetNonNullable<\n Required<RouteResponse<'/noise_sensors/noise_thresholds/list'>>\n>\n\nexport type NoiseSensorsNoiseThresholdsUpdateBody =\n RouteRequestBody<'/noise_sensors/noise_thresholds/update'>\n\nexport type NoiseSensorsNoiseThresholdsUpdateResponse = SetNonNullable<\n Required<RouteResponse<'/noise_sensors/noise_thresholds/update'>>\n>\n","/*\n * Automatically generated by generate-routes.ts.\n * Do not edit this file or add other files to this directory.\n */\n\nimport { warnOnInsecureuserIdentifierKey } from 'lib/seam/connect/auth.js'\nimport { type Client, createClient } from 'lib/seam/connect/client.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n isSeamHttpOptionsWithConsoleSessionToken,\n isSeamHttpOptionsWithPersonalAccessToken,\n type SeamHttpFromPublishableKeyOptions,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n type SeamHttpOptionsWithConsoleSessionToken,\n type SeamHttpOptionsWithPersonalAccessToken,\n} from 'lib/seam/connect/options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nimport { SeamHttpClientSessions } from './client-sessions.js'\nimport { SeamHttpNoiseSensorsNoiseThresholds } from './noise-sensors-noise-thresholds.js'\n\nexport class SeamHttpNoiseSensors {\n client: Client\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions = {}) {\n const clientOptions = parseOptions(apiKeyOrOptions)\n this.client = createClient(clientOptions)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpNoiseSensors {\n const constructorOptions = { ...options, client }\n if (!isSeamHttpOptionsWithClient(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpNoiseSensors(constructorOptions)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpNoiseSensors {\n const constructorOptions = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpNoiseSensors(constructorOptions)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpNoiseSensors {\n const constructorOptions = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpNoiseSensors(constructorOptions)\n }\n\n static async fromPublishableKey(\n publishableKey: string,\n userIdentifierKey: string,\n options: SeamHttpFromPublishableKeyOptions = {},\n ): Promise<SeamHttpNoiseSensors> {\n warnOnInsecureuserIdentifierKey(userIdentifierKey)\n const clientOptions = parseOptions({ ...options, publishableKey })\n const client = createClient(clientOptions)\n const clientSessions = SeamHttpClientSessions.fromClient(client)\n const { token } = await clientSessions.getOrCreate({\n user_identifier_key: userIdentifierKey,\n })\n return SeamHttpNoiseSensors.fromClientSessionToken(token, options)\n }\n\n static fromConsoleSessionToken(\n consoleSessionToken: SeamHttpOptionsWithConsoleSessionToken['consoleSessionToken'],\n workspaceId: SeamHttpOptionsWithConsoleSessionToken['workspaceId'],\n options: Omit<\n SeamHttpOptionsWithConsoleSessionToken,\n 'consoleSessionToken' | 'workspaceId'\n > = {},\n ): SeamHttpNoiseSensors {\n const constructorOptions = { ...options, consoleSessionToken, workspaceId }\n if (!isSeamHttpOptionsWithConsoleSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError(\n 'Missing consoleSessionToken or workspaceId',\n )\n }\n return new SeamHttpNoiseSensors(constructorOptions)\n }\n\n static fromPersonalAccessToken(\n personalAccessToken: SeamHttpOptionsWithPersonalAccessToken['personalAccessToken'],\n workspaceId: SeamHttpOptionsWithPersonalAccessToken['workspaceId'],\n options: Omit<\n SeamHttpOptionsWithPersonalAccessToken,\n 'personalAccessToken' | 'workspaceId'\n > = {},\n ): SeamHttpNoiseSensors {\n const constructorOptions = { ...options, personalAccessToken, workspaceId }\n if (!isSeamHttpOptionsWithPersonalAccessToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError(\n 'Missing personalAccessToken or workspaceId',\n )\n }\n return new SeamHttpNoiseSensors(constructorOptions)\n }\n\n get noiseThresholds(): SeamHttpNoiseSensorsNoiseThresholds {\n return SeamHttpNoiseSensorsNoiseThresholds.fromClient(this.client)\n }\n}\n","/*\n * Automatically generated by generate-routes.ts.\n * Do not edit this file or add other files to this directory.\n */\n\nimport type { RouteRequestBody, RouteResponse } from '@seamapi/types/connect'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { warnOnInsecureuserIdentifierKey } from 'lib/seam/connect/auth.js'\nimport { type Client, createClient } from 'lib/seam/connect/client.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n isSeamHttpOptionsWithConsoleSessionToken,\n isSeamHttpOptionsWithPersonalAccessToken,\n type SeamHttpFromPublishableKeyOptions,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n type SeamHttpOptionsWithConsoleSessionToken,\n type SeamHttpOptionsWithPersonalAccessToken,\n} from 'lib/seam/connect/options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nimport { SeamHttpClientSessions } from './client-sessions.js'\n\nexport class SeamHttpThermostatsClimateSettingSchedules {\n client: Client\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions = {}) {\n const clientOptions = parseOptions(apiKeyOrOptions)\n this.client = createClient(clientOptions)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpThermostatsClimateSettingSchedules {\n const constructorOptions = { ...options, client }\n if (!isSeamHttpOptionsWithClient(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpThermostatsClimateSettingSchedules(constructorOptions)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpThermostatsClimateSettingSchedules {\n const constructorOptions = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpThermostatsClimateSettingSchedules(constructorOptions)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpThermostatsClimateSettingSchedules {\n const constructorOptions = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpThermostatsClimateSettingSchedules(constructorOptions)\n }\n\n static async fromPublishableKey(\n publishableKey: string,\n userIdentifierKey: string,\n options: SeamHttpFromPublishableKeyOptions = {},\n ): Promise<SeamHttpThermostatsClimateSettingSchedules> {\n warnOnInsecureuserIdentifierKey(userIdentifierKey)\n const clientOptions = parseOptions({ ...options, publishableKey })\n const client = createClient(clientOptions)\n const clientSessions = SeamHttpClientSessions.fromClient(client)\n const { token } = await clientSessions.getOrCreate({\n user_identifier_key: userIdentifierKey,\n })\n return SeamHttpThermostatsClimateSettingSchedules.fromClientSessionToken(\n token,\n options,\n )\n }\n\n static fromConsoleSessionToken(\n consoleSessionToken: SeamHttpOptionsWithConsoleSessionToken['consoleSessionToken'],\n workspaceId: SeamHttpOptionsWithConsoleSessionToken['workspaceId'],\n options: Omit<\n SeamHttpOptionsWithConsoleSessionToken,\n 'consoleSessionToken' | 'workspaceId'\n > = {},\n ): SeamHttpThermostatsClimateSettingSchedules {\n const constructorOptions = { ...options, consoleSessionToken, workspaceId }\n if (!isSeamHttpOptionsWithConsoleSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError(\n 'Missing consoleSessionToken or workspaceId',\n )\n }\n return new SeamHttpThermostatsClimateSettingSchedules(constructorOptions)\n }\n\n static fromPersonalAccessToken(\n personalAccessToken: SeamHttpOptionsWithPersonalAccessToken['personalAccessToken'],\n workspaceId: SeamHttpOptionsWithPersonalAccessToken['workspaceId'],\n options: Omit<\n SeamHttpOptionsWithPersonalAccessToken,\n 'personalAccessToken' | 'workspaceId'\n > = {},\n ): SeamHttpThermostatsClimateSettingSchedules {\n const constructorOptions = { ...options, personalAccessToken, workspaceId }\n if (!isSeamHttpOptionsWithPersonalAccessToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError(\n 'Missing personalAccessToken or workspaceId',\n )\n }\n return new SeamHttpThermostatsClimateSettingSchedules(constructorOptions)\n }\n\n async create(\n body?: ThermostatsClimateSettingSchedulesCreateBody,\n ): Promise<\n ThermostatsClimateSettingSchedulesCreateResponse['climate_setting_schedule']\n > {\n const { data } =\n await this.client.request<ThermostatsClimateSettingSchedulesCreateResponse>(\n {\n url: '/thermostats/climate_setting_schedules/create',\n method: 'post',\n data: body,\n },\n )\n return data.climate_setting_schedule\n }\n\n async delete(\n body?: ThermostatsClimateSettingSchedulesDeleteBody,\n ): Promise<void> {\n await this.client.request<ThermostatsClimateSettingSchedulesDeleteResponse>(\n {\n url: '/thermostats/climate_setting_schedules/delete',\n method: 'post',\n data: body,\n },\n )\n }\n\n async get(\n body?: ThermostatsClimateSettingSchedulesGetParams,\n ): Promise<\n ThermostatsClimateSettingSchedulesGetResponse['climate_setting_schedule']\n > {\n const { data } =\n await this.client.request<ThermostatsClimateSettingSchedulesGetResponse>({\n url: '/thermostats/climate_setting_schedules/get',\n method: 'post',\n data: body,\n })\n return data.climate_setting_schedule\n }\n\n async list(\n body?: ThermostatsClimateSettingSchedulesListParams,\n ): Promise<\n ThermostatsClimateSettingSchedulesListResponse['climate_setting_schedules']\n > {\n const { data } =\n await this.client.request<ThermostatsClimateSettingSchedulesListResponse>(\n {\n url: '/thermostats/climate_setting_schedules/list',\n method: 'post',\n data: body,\n },\n )\n return data.climate_setting_schedules\n }\n\n async update(\n body?: ThermostatsClimateSettingSchedulesUpdateBody,\n ): Promise<void> {\n await this.client.request<ThermostatsClimateSettingSchedulesUpdateResponse>(\n {\n url: '/thermostats/climate_setting_schedules/update',\n method: 'post',\n data: body,\n },\n )\n }\n}\n\nexport type ThermostatsClimateSettingSchedulesCreateBody =\n RouteRequestBody<'/thermostats/climate_setting_schedules/create'>\n\nexport type ThermostatsClimateSettingSchedulesCreateResponse = SetNonNullable<\n Required<RouteResponse<'/thermostats/climate_setting_schedules/create'>>\n>\n\nexport type ThermostatsClimateSettingSchedulesDeleteBody =\n RouteRequestBody<'/thermostats/climate_setting_schedules/delete'>\n\nexport type ThermostatsClimateSettingSchedulesDeleteResponse = SetNonNullable<\n Required<RouteResponse<'/thermostats/climate_setting_schedules/delete'>>\n>\n\nexport type ThermostatsClimateSettingSchedulesGetParams =\n RouteRequestBody<'/thermostats/climate_setting_schedules/get'>\n\nexport type ThermostatsClimateSettingSchedulesGetResponse = SetNonNullable<\n Required<RouteResponse<'/thermostats/climate_setting_schedules/get'>>\n>\n\nexport type ThermostatsClimateSettingSchedulesListParams =\n RouteRequestBody<'/thermostats/climate_setting_schedules/list'>\n\nexport type ThermostatsClimateSettingSchedulesListResponse = SetNonNullable<\n Required<RouteResponse<'/thermostats/climate_setting_schedules/list'>>\n>\n\nexport type ThermostatsClimateSettingSchedulesUpdateBody =\n RouteRequestBody<'/thermostats/climate_setting_schedules/update'>\n\nexport type ThermostatsClimateSettingSchedulesUpdateResponse = SetNonNullable<\n Required<RouteResponse<'/thermostats/climate_setting_schedules/update'>>\n>\n","/*\n * Automatically generated by generate-routes.ts.\n * Do not edit this file or add other files to this directory.\n */\n\nimport type { RouteRequestBody, RouteResponse } from '@seamapi/types/connect'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { warnOnInsecureuserIdentifierKey } from 'lib/seam/connect/auth.js'\nimport { type Client, createClient } from 'lib/seam/connect/client.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n isSeamHttpOptionsWithConsoleSessionToken,\n isSeamHttpOptionsWithPersonalAccessToken,\n type SeamHttpFromPublishableKeyOptions,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n type SeamHttpOptionsWithConsoleSessionToken,\n type SeamHttpOptionsWithPersonalAccessToken,\n} from 'lib/seam/connect/options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nimport { SeamHttpClientSessions } from './client-sessions.js'\nimport { SeamHttpThermostatsClimateSettingSchedules } from './thermostats-climate-setting-schedules.js'\n\nexport class SeamHttpThermostats {\n client: Client\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions = {}) {\n const clientOptions = parseOptions(apiKeyOrOptions)\n this.client = createClient(clientOptions)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpThermostats {\n const constructorOptions = { ...options, client }\n if (!isSeamHttpOptionsWithClient(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpThermostats(constructorOptions)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpThermostats {\n const constructorOptions = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpThermostats(constructorOptions)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpThermostats {\n const constructorOptions = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpThermostats(constructorOptions)\n }\n\n static async fromPublishableKey(\n publishableKey: string,\n userIdentifierKey: string,\n options: SeamHttpFromPublishableKeyOptions = {},\n ): Promise<SeamHttpThermostats> {\n warnOnInsecureuserIdentifierKey(userIdentifierKey)\n const clientOptions = parseOptions({ ...options, publishableKey })\n const client = createClient(clientOptions)\n const clientSessions = SeamHttpClientSessions.fromClient(client)\n const { token } = await clientSessions.getOrCreate({\n user_identifier_key: userIdentifierKey,\n })\n return SeamHttpThermostats.fromClientSessionToken(token, options)\n }\n\n static fromConsoleSessionToken(\n consoleSessionToken: SeamHttpOptionsWithConsoleSessionToken['consoleSessionToken'],\n workspaceId: SeamHttpOptionsWithConsoleSessionToken['workspaceId'],\n options: Omit<\n SeamHttpOptionsWithConsoleSessionToken,\n 'consoleSessionToken' | 'workspaceId'\n > = {},\n ): SeamHttpThermostats {\n const constructorOptions = { ...options, consoleSessionToken, workspaceId }\n if (!isSeamHttpOptionsWithConsoleSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError(\n 'Missing consoleSessionToken or workspaceId',\n )\n }\n return new SeamHttpThermostats(constructorOptions)\n }\n\n static fromPersonalAccessToken(\n personalAccessToken: SeamHttpOptionsWithPersonalAccessToken['personalAccessToken'],\n workspaceId: SeamHttpOptionsWithPersonalAccessToken['workspaceId'],\n options: Omit<\n SeamHttpOptionsWithPersonalAccessToken,\n 'personalAccessToken' | 'workspaceId'\n > = {},\n ): SeamHttpThermostats {\n const constructorOptions = { ...options, personalAccessToken, workspaceId }\n if (!isSeamHttpOptionsWithPersonalAccessToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError(\n 'Missing personalAccessToken or workspaceId',\n )\n }\n return new SeamHttpThermostats(constructorOptions)\n }\n\n get climateSettingSchedules(): SeamHttpThermostatsClimateSettingSchedules {\n return SeamHttpThermostatsClimateSettingSchedules.fromClient(this.client)\n }\n\n async cool(body?: ThermostatsCoolBody): Promise<void> {\n await this.client.request<ThermostatsCoolResponse>({\n url: '/thermostats/cool',\n method: 'post',\n data: body,\n })\n }\n\n async get(\n body?: ThermostatsGetParams,\n ): Promise<ThermostatsGetResponse['thermostat']> {\n const { data } = await this.client.request<ThermostatsGetResponse>({\n url: '/thermostats/get',\n method: 'post',\n data: body,\n })\n return data.thermostat\n }\n\n async heat(body?: ThermostatsHeatBody): Promise<void> {\n await this.client.request<ThermostatsHeatResponse>({\n url: '/thermostats/heat',\n method: 'post',\n data: body,\n })\n }\n\n async heatCool(body?: ThermostatsHeatCoolBody): Promise<void> {\n await this.client.request<ThermostatsHeatCoolResponse>({\n url: '/thermostats/heat_cool',\n method: 'post',\n data: body,\n })\n }\n\n async list(\n body?: ThermostatsListParams,\n ): Promise<ThermostatsListResponse['thermostats']> {\n const { data } = await this.client.request<ThermostatsListResponse>({\n url: '/thermostats/list',\n method: 'post',\n data: body,\n })\n return data.thermostats\n }\n\n async off(body?: ThermostatsOffBody): Promise<void> {\n await this.client.request<ThermostatsOffResponse>({\n url: '/thermostats/off',\n method: 'post',\n data: body,\n })\n }\n\n async setFanMode(body?: ThermostatsSetFanModeBody): Promise<void> {\n await this.client.request<ThermostatsSetFanModeResponse>({\n url: '/thermostats/set_fan_mode',\n method: 'post',\n data: body,\n })\n }\n\n async update(body?: ThermostatsUpdateBody): Promise<void> {\n await this.client.request<ThermostatsUpdateResponse>({\n url: '/thermostats/update',\n method: 'post',\n data: body,\n })\n }\n}\n\nexport type ThermostatsCoolBody = RouteRequestBody<'/thermostats/cool'>\n\nexport type ThermostatsCoolResponse = SetNonNullable<\n Required<RouteResponse<'/thermostats/cool'>>\n>\n\nexport type ThermostatsGetParams = RouteRequestBody<'/thermostats/get'>\n\nexport type ThermostatsGetResponse = SetNonNullable<\n Required<RouteResponse<'/thermostats/get'>>\n>\n\nexport type ThermostatsHeatBody = RouteRequestBody<'/thermostats/heat'>\n\nexport type ThermostatsHeatResponse = SetNonNullable<\n Required<RouteResponse<'/thermostats/heat'>>\n>\n\nexport type ThermostatsHeatCoolBody = RouteRequestBody<'/thermostats/heat_cool'>\n\nexport type ThermostatsHeatCoolResponse = SetNonNullable<\n Required<RouteResponse<'/thermostats/heat_cool'>>\n>\n\nexport type ThermostatsListParams = RouteRequestBody<'/thermostats/list'>\n\nexport type ThermostatsListResponse = SetNonNullable<\n Required<RouteResponse<'/thermostats/list'>>\n>\n\nexport type ThermostatsOffBody = RouteRequestBody<'/thermostats/off'>\n\nexport type ThermostatsOffResponse = SetNonNullable<\n Required<RouteResponse<'/thermostats/off'>>\n>\n\nexport type ThermostatsSetFanModeBody =\n RouteRequestBody<'/thermostats/set_fan_mode'>\n\nexport type ThermostatsSetFanModeResponse = SetNonNullable<\n Required<RouteResponse<'/thermostats/set_fan_mode'>>\n>\n\nexport type ThermostatsUpdateBody = RouteRequestBody<'/thermostats/update'>\n\nexport type ThermostatsUpdateResponse = SetNonNullable<\n Required<RouteResponse<'/thermostats/update'>>\n>\n","/*\n * Automatically generated by generate-routes.ts.\n * Do not edit this file or add other files to this directory.\n */\n\nimport type {\n RouteRequestBody,\n RouteRequestParams,\n RouteResponse,\n} from '@seamapi/types/connect'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { warnOnInsecureuserIdentifierKey } from 'lib/seam/connect/auth.js'\nimport { type Client, createClient } from 'lib/seam/connect/client.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n isSeamHttpOptionsWithConsoleSessionToken,\n isSeamHttpOptionsWithPersonalAccessToken,\n type SeamHttpFromPublishableKeyOptions,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n type SeamHttpOptionsWithConsoleSessionToken,\n type SeamHttpOptionsWithPersonalAccessToken,\n} from 'lib/seam/connect/options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nimport { SeamHttpClientSessions } from './client-sessions.js'\n\nexport class SeamHttpWebhooks {\n client: Client\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions = {}) {\n const clientOptions = parseOptions(apiKeyOrOptions)\n this.client = createClient(clientOptions)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpWebhooks {\n const constructorOptions = { ...options, client }\n if (!isSeamHttpOptionsWithClient(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpWebhooks(constructorOptions)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpWebhooks {\n const constructorOptions = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpWebhooks(constructorOptions)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpWebhooks {\n const constructorOptions = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpWebhooks(constructorOptions)\n }\n\n static async fromPublishableKey(\n publishableKey: string,\n userIdentifierKey: string,\n options: SeamHttpFromPublishableKeyOptions = {},\n ): Promise<SeamHttpWebhooks> {\n warnOnInsecureuserIdentifierKey(userIdentifierKey)\n const clientOptions = parseOptions({ ...options, publishableKey })\n const client = createClient(clientOptions)\n const clientSessions = SeamHttpClientSessions.fromClient(client)\n const { token } = await clientSessions.getOrCreate({\n user_identifier_key: userIdentifierKey,\n })\n return SeamHttpWebhooks.fromClientSessionToken(token, options)\n }\n\n static fromConsoleSessionToken(\n consoleSessionToken: SeamHttpOptionsWithConsoleSessionToken['consoleSessionToken'],\n workspaceId: SeamHttpOptionsWithConsoleSessionToken['workspaceId'],\n options: Omit<\n SeamHttpOptionsWithConsoleSessionToken,\n 'consoleSessionToken' | 'workspaceId'\n > = {},\n ): SeamHttpWebhooks {\n const constructorOptions = { ...options, consoleSessionToken, workspaceId }\n if (!isSeamHttpOptionsWithConsoleSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError(\n 'Missing consoleSessionToken or workspaceId',\n )\n }\n return new SeamHttpWebhooks(constructorOptions)\n }\n\n static fromPersonalAccessToken(\n personalAccessToken: SeamHttpOptionsWithPersonalAccessToken['personalAccessToken'],\n workspaceId: SeamHttpOptionsWithPersonalAccessToken['workspaceId'],\n options: Omit<\n SeamHttpOptionsWithPersonalAccessToken,\n 'personalAccessToken' | 'workspaceId'\n > = {},\n ): SeamHttpWebhooks {\n const constructorOptions = { ...options, personalAccessToken, workspaceId }\n if (!isSeamHttpOptionsWithPersonalAccessToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError(\n 'Missing personalAccessToken or workspaceId',\n )\n }\n return new SeamHttpWebhooks(constructorOptions)\n }\n\n async create(\n body?: WebhooksCreateBody,\n ): Promise<WebhooksCreateResponse['webhook']> {\n const { data } = await this.client.request<WebhooksCreateResponse>({\n url: '/webhooks/create',\n method: 'post',\n data: body,\n })\n return data.webhook\n }\n\n async delete(body?: WebhooksDeleteBody): Promise<void> {\n await this.client.request<WebhooksDeleteResponse>({\n url: '/webhooks/delete',\n method: 'post',\n data: body,\n })\n }\n\n async get(body?: WebhooksGetParams): Promise<WebhooksGetResponse['webhook']> {\n const { data } = await this.client.request<WebhooksGetResponse>({\n url: '/webhooks/get',\n method: 'post',\n data: body,\n })\n return data.webhook\n }\n\n async list(\n params?: WebhooksListParams,\n ): Promise<WebhooksListResponse['webhooks']> {\n const { data } = await this.client.request<WebhooksListResponse>({\n url: '/webhooks/list',\n method: 'get',\n params,\n })\n return data.webhooks\n }\n}\n\nexport type WebhooksCreateBody = RouteRequestBody<'/webhooks/create'>\n\nexport type WebhooksCreateResponse = SetNonNullable<\n Required<RouteResponse<'/webhooks/create'>>\n>\n\nexport type WebhooksDeleteBody = RouteRequestBody<'/webhooks/delete'>\n\nexport type WebhooksDeleteResponse = SetNonNullable<\n Required<RouteResponse<'/webhooks/delete'>>\n>\n\nexport type WebhooksGetParams = RouteRequestBody<'/webhooks/get'>\n\nexport type WebhooksGetResponse = SetNonNullable<\n Required<RouteResponse<'/webhooks/get'>>\n>\n\nexport type WebhooksListParams = RouteRequestParams<'/webhooks/list'>\n\nexport type WebhooksListResponse = SetNonNullable<\n Required<RouteResponse<'/webhooks/list'>>\n>\n","/*\n * Automatically generated by generate-routes.ts.\n * Do not edit this file or add other files to this directory.\n */\n\nimport type {\n RouteRequestBody,\n RouteRequestParams,\n RouteResponse,\n} from '@seamapi/types/connect'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { warnOnInsecureuserIdentifierKey } from 'lib/seam/connect/auth.js'\nimport { type Client, createClient } from 'lib/seam/connect/client.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n isSeamHttpOptionsWithConsoleSessionToken,\n isSeamHttpOptionsWithPersonalAccessToken,\n type SeamHttpFromPublishableKeyOptions,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n type SeamHttpOptionsWithConsoleSessionToken,\n type SeamHttpOptionsWithPersonalAccessToken,\n} from 'lib/seam/connect/options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nimport { SeamHttpClientSessions } from './client-sessions.js'\n\nexport class SeamHttpWorkspaces {\n client: Client\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions = {}) {\n const clientOptions = parseOptions(apiKeyOrOptions)\n this.client = createClient(clientOptions)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpWorkspaces {\n const constructorOptions = { ...options, client }\n if (!isSeamHttpOptionsWithClient(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpWorkspaces(constructorOptions)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpWorkspaces {\n const constructorOptions = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpWorkspaces(constructorOptions)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpWorkspaces {\n const constructorOptions = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpWorkspaces(constructorOptions)\n }\n\n static async fromPublishableKey(\n publishableKey: string,\n userIdentifierKey: string,\n options: SeamHttpFromPublishableKeyOptions = {},\n ): Promise<SeamHttpWorkspaces> {\n warnOnInsecureuserIdentifierKey(userIdentifierKey)\n const clientOptions = parseOptions({ ...options, publishableKey })\n const client = createClient(clientOptions)\n const clientSessions = SeamHttpClientSessions.fromClient(client)\n const { token } = await clientSessions.getOrCreate({\n user_identifier_key: userIdentifierKey,\n })\n return SeamHttpWorkspaces.fromClientSessionToken(token, options)\n }\n\n static fromConsoleSessionToken(\n consoleSessionToken: SeamHttpOptionsWithConsoleSessionToken['consoleSessionToken'],\n workspaceId: SeamHttpOptionsWithConsoleSessionToken['workspaceId'],\n options: Omit<\n SeamHttpOptionsWithConsoleSessionToken,\n 'consoleSessionToken' | 'workspaceId'\n > = {},\n ): SeamHttpWorkspaces {\n const constructorOptions = { ...options, consoleSessionToken, workspaceId }\n if (!isSeamHttpOptionsWithConsoleSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError(\n 'Missing consoleSessionToken or workspaceId',\n )\n }\n return new SeamHttpWorkspaces(constructorOptions)\n }\n\n static fromPersonalAccessToken(\n personalAccessToken: SeamHttpOptionsWithPersonalAccessToken['personalAccessToken'],\n workspaceId: SeamHttpOptionsWithPersonalAccessToken['workspaceId'],\n options: Omit<\n SeamHttpOptionsWithPersonalAccessToken,\n 'personalAccessToken' | 'workspaceId'\n > = {},\n ): SeamHttpWorkspaces {\n const constructorOptions = { ...options, personalAccessToken, workspaceId }\n if (!isSeamHttpOptionsWithPersonalAccessToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError(\n 'Missing personalAccessToken or workspaceId',\n )\n }\n return new SeamHttpWorkspaces(constructorOptions)\n }\n\n async get(\n params?: WorkspacesGetParams,\n ): Promise<WorkspacesGetResponse['workspace']> {\n const { data } = await this.client.request<WorkspacesGetResponse>({\n url: '/workspaces/get',\n method: 'get',\n params,\n })\n return data.workspace\n }\n\n async list(\n params?: WorkspacesListParams,\n ): Promise<WorkspacesListResponse['workspaces']> {\n const { data } = await this.client.request<WorkspacesListResponse>({\n url: '/workspaces/list',\n method: 'get',\n params,\n })\n return data.workspaces\n }\n\n async resetSandbox(body?: WorkspacesResetSandboxBody): Promise<void> {\n await this.client.request<WorkspacesResetSandboxResponse>({\n url: '/workspaces/reset_sandbox',\n method: 'post',\n data: body,\n })\n }\n}\n\nexport type WorkspacesGetParams = RouteRequestParams<'/workspaces/get'>\n\nexport type WorkspacesGetResponse = SetNonNullable<\n Required<RouteResponse<'/workspaces/get'>>\n>\n\nexport type WorkspacesListParams = RouteRequestParams<'/workspaces/list'>\n\nexport type WorkspacesListResponse = SetNonNullable<\n Required<RouteResponse<'/workspaces/list'>>\n>\n\nexport type WorkspacesResetSandboxBody =\n RouteRequestBody<'/workspaces/reset_sandbox'>\n\nexport type WorkspacesResetSandboxResponse = SetNonNullable<\n Required<RouteResponse<'/workspaces/reset_sandbox'>>\n>\n","import { warnOnInsecureuserIdentifierKey } from './auth.js'\nimport { type Client, createClient } from './client.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n isSeamHttpOptionsWithConsoleSessionToken,\n isSeamHttpOptionsWithPersonalAccessToken,\n type SeamHttpFromPublishableKeyOptions,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n type SeamHttpOptionsWithConsoleSessionToken,\n type SeamHttpOptionsWithPersonalAccessToken,\n} from './options.js'\nimport { parseOptions } from './parse-options.js'\nimport {\n SeamHttpAccessCodes,\n SeamHttpAcs,\n SeamHttpActionAttempts,\n SeamHttpClientSessions,\n SeamHttpConnectedAccounts,\n SeamHttpConnectWebviews,\n SeamHttpDevices,\n SeamHttpEvents,\n SeamHttpLocks,\n SeamHttpNoiseSensors,\n SeamHttpThermostats,\n SeamHttpWebhooks,\n SeamHttpWorkspaces,\n} from './routes/index.js'\n\nexport class SeamHttp {\n client: Client\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions = {}) {\n const clientOptions = parseOptions(apiKeyOrOptions)\n this.client = createClient(clientOptions)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttp {\n const constructorOptions = { ...options, client }\n if (!isSeamHttpOptionsWithClient(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttp(constructorOptions)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttp {\n const constructorOptions = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttp(constructorOptions)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttp {\n const constructorOptions = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttp(constructorOptions)\n }\n\n static async fromPublishableKey(\n publishableKey: string,\n userIdentifierKey: string,\n options: SeamHttpFromPublishableKeyOptions = {},\n ): Promise<SeamHttp> {\n warnOnInsecureuserIdentifierKey(userIdentifierKey)\n const clientOptions = parseOptions({ ...options, publishableKey })\n const client = createClient(clientOptions)\n const clientSessions = SeamHttpClientSessions.fromClient(client)\n const { token } = await clientSessions.getOrCreate({\n user_identifier_key: userIdentifierKey,\n })\n return SeamHttp.fromClientSessionToken(token, options)\n }\n\n static fromConsoleSessionToken(\n consoleSessionToken: SeamHttpOptionsWithConsoleSessionToken['consoleSessionToken'],\n workspaceId: SeamHttpOptionsWithConsoleSessionToken['workspaceId'],\n options: Omit<\n SeamHttpOptionsWithConsoleSessionToken,\n 'consoleSessionToken' | 'workspaceId'\n > = {},\n ): SeamHttp {\n const constructorOptions = { ...options, consoleSessionToken, workspaceId }\n if (!isSeamHttpOptionsWithConsoleSessionToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError(\n 'Missing consoleSessionToken or workspaceId',\n )\n }\n return new SeamHttp(constructorOptions)\n }\n\n static fromPersonalAccessToken(\n personalAccessToken: SeamHttpOptionsWithPersonalAccessToken['personalAccessToken'],\n workspaceId: SeamHttpOptionsWithPersonalAccessToken['workspaceId'],\n options: Omit<\n SeamHttpOptionsWithPersonalAccessToken,\n 'personalAccessToken' | 'workspaceId'\n > = {},\n ): SeamHttp {\n const constructorOptions = { ...options, personalAccessToken, workspaceId }\n if (!isSeamHttpOptionsWithPersonalAccessToken(constructorOptions)) {\n throw new SeamHttpInvalidOptionsError(\n 'Missing personalAccessToken or workspaceId',\n )\n }\n return new SeamHttp(constructorOptions)\n }\n\n get accessCodes(): SeamHttpAccessCodes {\n return SeamHttpAccessCodes.fromClient(this.client)\n }\n\n get acs(): SeamHttpAcs {\n return SeamHttpAcs.fromClient(this.client)\n }\n\n get actionAttempts(): SeamHttpActionAttempts {\n return SeamHttpActionAttempts.fromClient(this.client)\n }\n\n get clientSessions(): SeamHttpClientSessions {\n return SeamHttpClientSessions.fromClient(this.client)\n }\n\n get connectedAccounts(): SeamHttpConnectedAccounts {\n return SeamHttpConnectedAccounts.fromClient(this.client)\n }\n\n get connectWebviews(): SeamHttpConnectWebviews {\n return SeamHttpConnectWebviews.fromClient(this.client)\n }\n\n get devices(): SeamHttpDevices {\n return SeamHttpDevices.fromClient(this.client)\n }\n\n get events(): SeamHttpEvents {\n return SeamHttpEvents.fromClient(this.client)\n }\n\n get locks(): SeamHttpLocks {\n return SeamHttpLocks.fromClient(this.client)\n }\n\n get noiseSensors(): SeamHttpNoiseSensors {\n return SeamHttpNoiseSensors.fromClient(this.client)\n }\n\n get thermostats(): SeamHttpThermostats {\n return SeamHttpThermostats.fromClient(this.client)\n }\n\n get webhooks(): SeamHttpWebhooks {\n return SeamHttpWebhooks.fromClient(this.client)\n }\n\n get workspaces(): SeamHttpWorkspaces {\n return SeamHttpWorkspaces.fromClient(this.client)\n }\n}\n"]}