@seamapi/http 0.0.2 → 0.1.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 (115) hide show
  1. package/dist/connect.cjs +1386 -61
  2. package/dist/connect.cjs.map +1 -1
  3. package/dist/connect.d.cts +420 -7
  4. package/lib/seam/connect/auth.d.ts +1 -1
  5. package/lib/seam/connect/auth.js +7 -7
  6. package/lib/seam/connect/auth.js.map +1 -1
  7. package/lib/seam/connect/axios.js +3 -1
  8. package/lib/seam/connect/axios.js.map +1 -1
  9. package/lib/seam/connect/client-options.d.ts +7 -3
  10. package/lib/seam/connect/client-options.js +18 -3
  11. package/lib/seam/connect/client-options.js.map +1 -1
  12. package/lib/seam/connect/client.d.ts +16 -4
  13. package/lib/seam/connect/client.js +55 -28
  14. package/lib/seam/connect/client.js.map +1 -1
  15. package/lib/seam/connect/parse-options.d.ts +1 -1
  16. package/lib/seam/connect/parse-options.js +8 -1
  17. package/lib/seam/connect/parse-options.js.map +1 -1
  18. package/lib/seam/connect/routes/access-codes-unmanaged.d.ts +26 -0
  19. package/lib/seam/connect/routes/access-codes-unmanaged.js +72 -0
  20. package/lib/seam/connect/routes/access-codes-unmanaged.js.map +1 -0
  21. package/lib/seam/connect/routes/access-codes.d.ts +37 -0
  22. package/lib/seam/connect/routes/access-codes.js +101 -0
  23. package/lib/seam/connect/routes/access-codes.js.map +1 -0
  24. package/lib/seam/connect/routes/acs-access-groups.d.ts +35 -0
  25. package/lib/seam/connect/routes/acs-access-groups.js +95 -0
  26. package/lib/seam/connect/routes/acs-access-groups.js.map +1 -0
  27. package/lib/seam/connect/routes/acs-credentials.d.ts +23 -0
  28. package/lib/seam/connect/routes/acs-credentials.js +66 -0
  29. package/lib/seam/connect/routes/acs-credentials.js.map +1 -0
  30. package/lib/seam/connect/routes/acs-systems.d.ts +17 -0
  31. package/lib/seam/connect/routes/acs-systems.js +51 -0
  32. package/lib/seam/connect/routes/acs-systems.js.map +1 -0
  33. package/lib/seam/connect/routes/acs-users.d.ts +32 -0
  34. package/lib/seam/connect/routes/acs-users.js +87 -0
  35. package/lib/seam/connect/routes/acs-users.js.map +1 -0
  36. package/lib/seam/connect/routes/acs.d.ts +17 -0
  37. package/lib/seam/connect/routes/acs.js +51 -0
  38. package/lib/seam/connect/routes/acs.js.map +1 -0
  39. package/lib/seam/connect/routes/action-attempts.d.ts +17 -0
  40. package/lib/seam/connect/routes/action-attempts.js +51 -0
  41. package/lib/seam/connect/routes/action-attempts.js.map +1 -0
  42. package/lib/seam/connect/routes/client-sessions.d.ts +26 -0
  43. package/lib/seam/connect/routes/client-sessions.js +74 -0
  44. package/lib/seam/connect/routes/client-sessions.js.map +1 -0
  45. package/lib/seam/connect/routes/connect-webviews.d.ts +26 -0
  46. package/lib/seam/connect/routes/connect-webviews.js +73 -0
  47. package/lib/seam/connect/routes/connect-webviews.js.map +1 -0
  48. package/lib/seam/connect/routes/connected-accounts.d.ts +20 -0
  49. package/lib/seam/connect/routes/connected-accounts.js +58 -0
  50. package/lib/seam/connect/routes/connected-accounts.js.map +1 -0
  51. package/lib/seam/connect/routes/devices-unmanaged.d.ts +20 -0
  52. package/lib/seam/connect/routes/devices-unmanaged.js +58 -0
  53. package/lib/seam/connect/routes/devices-unmanaged.js.map +1 -0
  54. package/lib/seam/connect/routes/devices.d.ts +28 -0
  55. package/lib/seam/connect/routes/devices.js +77 -0
  56. package/lib/seam/connect/routes/devices.js.map +1 -0
  57. package/lib/seam/connect/routes/events.d.ts +17 -0
  58. package/lib/seam/connect/routes/events.js +51 -0
  59. package/lib/seam/connect/routes/events.js.map +1 -0
  60. package/lib/seam/connect/routes/index.d.ts +21 -0
  61. package/lib/seam/connect/routes/index.js +22 -0
  62. package/lib/seam/connect/routes/index.js.map +1 -0
  63. package/lib/seam/connect/routes/locks.d.ts +23 -0
  64. package/lib/seam/connect/routes/locks.js +67 -0
  65. package/lib/seam/connect/routes/locks.js.map +1 -0
  66. package/lib/seam/connect/routes/noise-sensors-noise-thresholds.d.ts +26 -0
  67. package/lib/seam/connect/routes/noise-sensors-noise-thresholds.js +72 -0
  68. package/lib/seam/connect/routes/noise-sensors-noise-thresholds.js.map +1 -0
  69. package/lib/seam/connect/routes/noise-sensors.d.ts +11 -0
  70. package/lib/seam/connect/routes/noise-sensors.js +39 -0
  71. package/lib/seam/connect/routes/noise-sensors.js.map +1 -0
  72. package/lib/seam/connect/routes/thermostats-climate-setting-schedules.d.ts +26 -0
  73. package/lib/seam/connect/routes/thermostats-climate-setting-schedules.js +73 -0
  74. package/lib/seam/connect/routes/thermostats-climate-setting-schedules.js.map +1 -0
  75. package/lib/seam/connect/routes/thermostats.d.ts +37 -0
  76. package/lib/seam/connect/routes/thermostats.js +97 -0
  77. package/lib/seam/connect/routes/thermostats.js.map +1 -0
  78. package/lib/seam/connect/routes/webhooks.d.ts +23 -0
  79. package/lib/seam/connect/routes/webhooks.js +66 -0
  80. package/lib/seam/connect/routes/webhooks.js.map +1 -0
  81. package/lib/seam/connect/routes/workspaces.d.ts +14 -5
  82. package/lib/seam/connect/routes/workspaces.js +48 -10
  83. package/lib/seam/connect/routes/workspaces.js.map +1 -1
  84. package/package.json +4 -1
  85. package/src/lib/seam/connect/auth.ts +7 -7
  86. package/src/lib/seam/connect/axios.ts +2 -0
  87. package/src/lib/seam/connect/client-options.ts +32 -4
  88. package/src/lib/seam/connect/client.ts +88 -15
  89. package/src/lib/seam/connect/parse-options.ts +16 -2
  90. package/src/lib/seam/connect/routes/access-codes-unmanaged.ts +157 -0
  91. package/src/lib/seam/connect/routes/access-codes.ts +226 -0
  92. package/src/lib/seam/connect/routes/acs-access-groups.ts +207 -0
  93. package/src/lib/seam/connect/routes/acs-credentials.ts +139 -0
  94. package/src/lib/seam/connect/routes/acs-systems.ts +108 -0
  95. package/src/lib/seam/connect/routes/acs-users.ts +187 -0
  96. package/src/lib/seam/connect/routes/acs.ts +85 -0
  97. package/src/lib/seam/connect/routes/action-attempts.ts +104 -0
  98. package/src/lib/seam/connect/routes/client-sessions.ts +159 -0
  99. package/src/lib/seam/connect/routes/connect-webviews.ts +159 -0
  100. package/src/lib/seam/connect/routes/connected-accounts.ts +124 -0
  101. package/src/lib/seam/connect/routes/devices-unmanaged.ts +120 -0
  102. package/src/lib/seam/connect/routes/devices.ts +158 -0
  103. package/src/lib/seam/connect/routes/events.ts +100 -0
  104. package/src/lib/seam/connect/routes/index.ts +21 -0
  105. package/src/lib/seam/connect/routes/locks.ts +138 -0
  106. package/src/lib/seam/connect/routes/noise-sensors-noise-thresholds.ts +154 -0
  107. package/src/lib/seam/connect/routes/noise-sensors.ts +70 -0
  108. package/src/lib/seam/connect/routes/thermostats-climate-setting-schedules.ts +176 -0
  109. package/src/lib/seam/connect/routes/thermostats.ts +206 -0
  110. package/src/lib/seam/connect/routes/webhooks.ts +141 -0
  111. package/src/lib/seam/connect/routes/workspaces.ts +100 -17
  112. package/lib/seam/connect/legacy/workspaces.d.ts +0 -8
  113. package/lib/seam/connect/legacy/workspaces.js +0 -10
  114. package/lib/seam/connect/legacy/workspaces.js.map +0 -1
  115. package/src/lib/seam/connect/legacy/workspaces.ts +0 -26
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/lib/seam/connect/axios.ts","../src/lib/seam/connect/client-options.ts","../src/lib/seam/connect/auth.ts","../src/lib/seam/connect/routes/workspaces.ts","../src/lib/seam/connect/parse-options.ts","../src/lib/seam/connect/legacy/workspaces.ts","../src/lib/seam/connect/client.ts"],"names":[],"mappings":"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","sourcesContent":["import axios, { type Axios } from 'axios'\n\nimport { getAuthHeaders } from './auth.js'\nimport {\n isSeamHttpOptionsWithClientSessionToken,\n type SeamHttpOptions,\n} from './client-options.js'\n\nexport const createAxiosClient = (\n options: Required<SeamHttpOptions>,\n): Axios => {\n // TODO: axiosRetry? Allow options to configure this if so\n return axios.create({\n baseURL: options.endpoint,\n withCredentials: isSeamHttpOptionsWithClientSessionToken(options),\n ...options.axiosOptions,\n headers: {\n ...getAuthHeaders(options),\n ...options.axiosOptions.headers,\n // TODO: User-Agent\n },\n })\n}\n","import type { AxiosRequestConfig } from 'axios'\n\nexport type SeamHttpOptions =\n | SeamHttpOptionsWithApiKey\n | SeamHttpOptionsWithClientSessionToken\n\ninterface SeamHttpCommonOptions {\n endpoint?: string\n axiosOptions?: AxiosRequestConfig\n enableLegacyMethodBehaivor?: boolean\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\n if ('clientSessionToken' in options && options.clientSessionToken != null) {\n throw new InvalidSeamHttpOptionsError(\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\n if ('apiKey' in options && options.apiKey != null) {\n throw new InvalidSeamHttpOptionsError(\n 'The clientSessionToken option cannot be used with the apiKey option.',\n )\n }\n\n return true\n}\n\nexport class InvalidSeamHttpOptionsError 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\n// TODO: withSessionToken { sessionToken } or withMultiWorkspaceApiKey { apiKey }?\n// export interface SeamHttpOptionsWithSessionToken extends SeamHttpCommonOptions {\n// workspaceId: string\n// apiKey: string\n// }\n","import {\n InvalidSeamHttpOptionsError,\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClientSessionToken,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClientSessionToken,\n} from './client-options.js'\n\ntype Headers = Record<string, string>\n\nexport const getAuthHeaders = (options: SeamHttpOptions): Headers => {\n if (isSeamHttpOptionsWithApiKey(options)) {\n return getAuthHeadersForApiKey(options)\n }\n\n if (isSeamHttpOptionsWithClientSessionToken(options)) {\n return getAuthHeadersForClientSessionToken(options)\n }\n\n throw new InvalidSeamHttpOptionsError(\n 'Must specify an apiKey or clientSessionToken',\n )\n}\n\nconst getAuthHeadersForApiKey = ({\n apiKey,\n}: SeamHttpOptionsWithApiKey): Headers => {\n if (isClientSessionToken(apiKey)) {\n throw new InvalidSeamTokenError(\n 'A Client Session Token cannot be used as an apiKey',\n )\n }\n\n if (isAccessToken(apiKey)) {\n throw new InvalidSeamTokenError(\n 'An access token cannot be used as an apiKey',\n )\n }\n\n if (isJwt(apiKey) || !isSeamToken(apiKey)) {\n throw new InvalidSeamTokenError(\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 (!isClientSessionToken(clientSessionToken)) {\n throw new InvalidSeamTokenError(\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\nexport class InvalidSeamTokenError 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\nconst tokenPrefix = 'seam_'\n\nconst clientSessionTokenPrefix = 'seam_cst'\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","import type { RouteRequestParams, RouteResponse } from '@seamapi/types/connect'\nimport { Axios } from 'axios'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { createAxiosClient } from 'lib/seam/connect/axios.js'\nimport type { SeamHttpOptions } from 'lib/seam/connect/client-options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nexport class WorkspacesHttp {\n client: Axios\n\n constructor(apiKeyOrOptionsOrClient: Axios | string | SeamHttpOptions) {\n if (apiKeyOrOptionsOrClient instanceof Axios) {\n this.client = apiKeyOrOptionsOrClient\n return\n }\n\n const options = parseOptions(apiKeyOrOptionsOrClient)\n this.client = createAxiosClient(options)\n }\n\n async get(\n params: WorkspacesGetParams = {},\n ): Promise<WorkspacesGetResponse['workspace']> {\n const { data } = await this.client.get<WorkspacesGetResponse>(\n '/workspaces/get',\n {\n params,\n },\n )\n return data.workspace\n }\n}\n\nexport type WorkspacesGetParams = SetNonNullable<\n Required<RouteRequestParams<'/workspaces/get'>>\n>\n\nexport type WorkspacesGetResponse = SetNonNullable<\n Required<RouteResponse<'/workspaces/get'>>\n>\n","import type { SeamHttpOptions } from './client-options.js'\nexport const parseOptions = (\n apiKeyOrOptions: string | SeamHttpOptions,\n): Required<SeamHttpOptions> => {\n const options =\n typeof apiKeyOrOptions === 'string'\n ? { apiKey: apiKeyOrOptions }\n : apiKeyOrOptions\n\n const endpoint =\n options.endpoint ??\n globalThis.process?.env?.['SEAM_ENDPOINT'] ??\n globalThis.process?.env?.['SEAM_API_URL'] ??\n 'https://connect.getseam.com'\n\n const apiKey =\n 'apiKey' in options\n ? options.apiKey\n : globalThis.process?.env?.['SEAM_API_KEY']\n\n return {\n ...options,\n ...(apiKey != null ? { apiKey } : {}),\n endpoint,\n axiosOptions: options.axiosOptions ?? {},\n enableLegacyMethodBehaivor: false,\n }\n}\n","import type { RouteRequestParams, RouteResponse } from '@seamapi/types/connect'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { WorkspacesHttp } from 'lib/seam/connect/routes/workspaces.js'\n\nexport class LegacyWorkspacesHttp extends WorkspacesHttp {\n override async get(\n params: WorkspacesGetParams = {},\n ): Promise<WorkspacesGetResponse['workspace']> {\n const { data } = await this.client.get<WorkspacesGetResponse>(\n '/workspaces/get',\n {\n params,\n },\n )\n return data.workspace\n }\n}\n\nexport type WorkspacesGetParams = SetNonNullable<\n Required<RouteRequestParams<'/workspaces/get'>>\n>\n\nexport type WorkspacesGetResponse = SetNonNullable<\n Required<RouteResponse<'/workspaces/get'>>\n>\n","import type { Axios } from 'axios'\n\nimport { createAxiosClient } from './axios.js'\nimport {\n InvalidSeamHttpOptionsError,\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClientSessionToken,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClientSessionToken,\n} from './client-options.js'\nimport { LegacyWorkspacesHttp } from './legacy/workspaces.js'\nimport { parseOptions } from './parse-options.js'\nimport { WorkspacesHttp } from './routes/workspaces.js'\n\nexport class SeamHttp {\n client: Axios\n\n #legacy: boolean\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions) {\n const options = parseOptions(apiKeyOrOptions)\n this.#legacy = options.enableLegacyMethodBehaivor\n this.client = createAxiosClient(options)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttp {\n const opts = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(opts)) {\n throw new InvalidSeamHttpOptionsError('Missing apiKey')\n }\n return new SeamHttp(opts)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttp {\n const opts = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(opts)) {\n throw new InvalidSeamHttpOptionsError('Missing clientSessionToken')\n }\n return new SeamHttp(opts)\n }\n\n // TODO\n // static fromPublishableKey and deprecate getClientSessionToken\n\n // TODO: Should we keep makeRequest?\n // Better to implement error handling and wrapping in an error handler.\n // makeRequest\n\n get workspaces(): WorkspacesHttp {\n if (this.#legacy) return new LegacyWorkspacesHttp(this.client)\n return new WorkspacesHttp(this.client)\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/lib/seam/connect/axios.ts","../src/lib/seam/connect/client-options.ts","../src/lib/seam/connect/auth.ts","../src/lib/seam/connect/parse-options.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/client-sessions.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/client.ts"],"names":[],"mappings":"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","sourcesContent":["import axios, { type Axios } from 'axios'\n\nimport { getAuthHeaders } from './auth.js'\nimport {\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n type SeamHttpOptions,\n} from './client-options.js'\n\nexport const createAxiosClient = (\n options: Required<SeamHttpOptions>,\n): Axios => {\n if (isSeamHttpOptionsWithClient(options)) return options.client\n // TODO: axiosRetry? Allow options to configure this if so\n return axios.create({\n baseURL: options.endpoint,\n withCredentials: isSeamHttpOptionsWithClientSessionToken(options),\n ...options.axiosOptions,\n headers: {\n ...getAuthHeaders(options),\n ...options.axiosOptions.headers,\n // TODO: User-Agent\n },\n })\n}\n","import type { Axios, AxiosRequestConfig } from 'axios'\n\nexport type SeamHttpOptions =\n | SeamHttpOptionsWithClient\n | SeamHttpOptionsWithApiKey\n | SeamHttpOptionsWithClientSessionToken\n\ninterface SeamHttpCommonOptions {\n endpoint?: string\n axiosOptions?: AxiosRequestConfig\n enableLegacyMethodBehaivor?: boolean\n}\n\nexport interface SeamHttpOptionsWithClient\n extends Pick<SeamHttpCommonOptions, 'enableLegacyMethodBehaivor'> {\n client: Axios\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(\n (k) => !['client', 'enableLegacyMethodBehaivor'].includes(k),\n )\n if (keys.length > 0) {\n throw new SeamHttpInvalidOptionsError(\n `The client option cannot be used with any other option except enableLegacyMethodBehaivor, 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\n// TODO: withSessionToken { sessionToken } or withMultiWorkspaceApiKey { apiKey }?\n// export interface SeamHttpOptionsWithSessionToken extends SeamHttpCommonOptions {\n// workspaceId: string\n// apiKey: string\n// }\n","import {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClientSessionToken,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClientSessionToken,\n} from './client-options.js'\n\ntype Headers = Record<string, string>\n\nexport const getAuthHeaders = (options: SeamHttpOptions): Headers => {\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 or clientSessionToken',\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 (isAccessToken(apiKey)) {\n throw new SeamHttpInvalidTokenError(\n 'An access token cannot be used as an apiKey',\n )\n }\n\n if (isJwt(apiKey) || !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 (!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\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\nconst tokenPrefix = 'seam_'\n\nconst clientSessionTokenPrefix = 'seam_cst'\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","import {\n isSeamHttpOptionsWithClient,\n type SeamHttpOptions,\n} from './client-options.js'\n\nconst enableLegacyMethodBehaivorDefault = true\n\nexport const parseOptions = (\n apiKeyOrOptions: string | SeamHttpOptions,\n): Required<SeamHttpOptions> => {\n const options =\n typeof apiKeyOrOptions === 'string'\n ? { apiKey: apiKeyOrOptions }\n : apiKeyOrOptions\n\n if (isSeamHttpOptionsWithClient(options))\n return {\n ...options,\n enableLegacyMethodBehaivor:\n options.enableLegacyMethodBehaivor ?? enableLegacyMethodBehaivorDefault,\n }\n\n const endpoint =\n options.endpoint ??\n globalThis.process?.env?.['SEAM_ENDPOINT'] ??\n globalThis.process?.env?.['SEAM_API_URL'] ??\n 'https://connect.getseam.com'\n\n const apiKey =\n 'apiKey' in options\n ? options.apiKey\n : globalThis.process?.env?.['SEAM_API_KEY']\n\n return {\n ...options,\n ...(apiKey != null ? { apiKey } : {}),\n endpoint,\n axiosOptions: options.axiosOptions ?? {},\n enableLegacyMethodBehaivor:\n options.enableLegacyMethodBehaivor ?? enableLegacyMethodBehaivorDefault,\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 { Axios } from 'axios'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { createAxiosClient } from 'lib/seam/connect/axios.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n} from 'lib/seam/connect/client-options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nexport class SeamHttpAccessCodesUnmanaged {\n client: Axios\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions) {\n const options = parseOptions(apiKeyOrOptions)\n this.client = createAxiosClient(options)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpAccessCodesUnmanaged {\n const opts = { ...options, client }\n if (!isSeamHttpOptionsWithClient(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpAccessCodesUnmanaged(opts)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpAccessCodesUnmanaged {\n const opts = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpAccessCodesUnmanaged(opts)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpAccessCodesUnmanaged {\n const opts = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpAccessCodesUnmanaged(opts)\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: AccessCodesUnmanagedGetBody,\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: AccessCodesUnmanagedListBody,\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 = SetNonNullable<\n Required<RouteRequestBody<'/access_codes/unmanaged/convert_to_managed'>>\n>\n\nexport type AccessCodesUnmanagedConvertToManagedResponse = SetNonNullable<\n Required<RouteResponse<'/access_codes/unmanaged/convert_to_managed'>>\n>\n\nexport type AccessCodesUnmanagedDeleteBody = SetNonNullable<\n Required<RouteRequestBody<'/access_codes/unmanaged/delete'>>\n>\n\nexport type AccessCodesUnmanagedDeleteResponse = SetNonNullable<\n Required<RouteResponse<'/access_codes/unmanaged/delete'>>\n>\n\nexport type AccessCodesUnmanagedGetBody = SetNonNullable<\n Required<RouteRequestBody<'/access_codes/unmanaged/get'>>\n>\n\nexport type AccessCodesUnmanagedGetResponse = SetNonNullable<\n Required<RouteResponse<'/access_codes/unmanaged/get'>>\n>\n\nexport type AccessCodesUnmanagedListBody = SetNonNullable<\n Required<RouteRequestBody<'/access_codes/unmanaged/list'>>\n>\n\nexport type AccessCodesUnmanagedListResponse = SetNonNullable<\n Required<RouteResponse<'/access_codes/unmanaged/list'>>\n>\n\nexport type AccessCodesUnmanagedUpdateBody = SetNonNullable<\n Required<RouteRequestBody<'/access_codes/unmanaged/update'>>\n>\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 {\n RouteRequestBody,\n RouteRequestParams,\n RouteResponse,\n} from '@seamapi/types/connect'\nimport type { Axios } from 'axios'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { createAxiosClient } from 'lib/seam/connect/axios.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n} from 'lib/seam/connect/client-options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nimport { SeamHttpAccessCodesUnmanaged } from './access-codes-unmanaged.js'\n\nexport class SeamHttpAccessCodes {\n client: Axios\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions) {\n const options = parseOptions(apiKeyOrOptions)\n this.client = createAxiosClient(options)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpAccessCodes {\n const opts = { ...options, client }\n if (!isSeamHttpOptionsWithClient(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpAccessCodes(opts)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpAccessCodes {\n const opts = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpAccessCodes(opts)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpAccessCodes {\n const opts = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpAccessCodes(opts)\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 params?: AccessCodesGenerateCodeParams,\n ): Promise<AccessCodesGenerateCodeResponse['generated_code']> {\n const { data } = await this.client.request<AccessCodesGenerateCodeResponse>(\n {\n url: '/access_codes/generate_code',\n method: 'get',\n params,\n },\n )\n return data.generated_code\n }\n\n async get(\n body: AccessCodesGetBody,\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: AccessCodesListBody,\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 = SetNonNullable<\n Required<RouteRequestBody<'/access_codes/create'>>\n>\n\nexport type AccessCodesCreateResponse = SetNonNullable<\n Required<RouteResponse<'/access_codes/create'>>\n>\n\nexport type AccessCodesCreateMultipleBody = SetNonNullable<\n Required<RouteRequestBody<'/access_codes/create_multiple'>>\n>\n\nexport type AccessCodesCreateMultipleResponse = SetNonNullable<\n Required<RouteResponse<'/access_codes/create_multiple'>>\n>\n\nexport type AccessCodesDeleteBody = SetNonNullable<\n Required<RouteRequestBody<'/access_codes/delete'>>\n>\n\nexport type AccessCodesDeleteResponse = SetNonNullable<\n Required<RouteResponse<'/access_codes/delete'>>\n>\n\nexport type AccessCodesGenerateCodeParams = SetNonNullable<\n Required<RouteRequestParams<'/access_codes/generate_code'>>\n>\n\nexport type AccessCodesGenerateCodeResponse = SetNonNullable<\n Required<RouteResponse<'/access_codes/generate_code'>>\n>\n\nexport type AccessCodesGetBody = SetNonNullable<\n Required<RouteRequestBody<'/access_codes/get'>>\n>\n\nexport type AccessCodesGetResponse = SetNonNullable<\n Required<RouteResponse<'/access_codes/get'>>\n>\n\nexport type AccessCodesListBody = SetNonNullable<\n Required<RouteRequestBody<'/access_codes/list'>>\n>\n\nexport type AccessCodesListResponse = SetNonNullable<\n Required<RouteResponse<'/access_codes/list'>>\n>\n\nexport type AccessCodesPullBackupAccessCodeBody = SetNonNullable<\n Required<RouteRequestBody<'/access_codes/pull_backup_access_code'>>\n>\n\nexport type AccessCodesPullBackupAccessCodeResponse = SetNonNullable<\n Required<RouteResponse<'/access_codes/pull_backup_access_code'>>\n>\n\nexport type AccessCodesUpdateBody = SetNonNullable<\n Required<RouteRequestBody<'/access_codes/update'>>\n>\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 { Axios } from 'axios'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { createAxiosClient } from 'lib/seam/connect/axios.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n} from 'lib/seam/connect/client-options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nexport class SeamHttpAcsAccessGroups {\n client: Axios\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions) {\n const options = parseOptions(apiKeyOrOptions)\n this.client = createAxiosClient(options)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpAcsAccessGroups {\n const opts = { ...options, client }\n if (!isSeamHttpOptionsWithClient(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpAcsAccessGroups(opts)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpAcsAccessGroups {\n const opts = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpAcsAccessGroups(opts)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpAcsAccessGroups {\n const opts = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpAcsAccessGroups(opts)\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: AcsAccessGroupsGetBody,\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: AcsAccessGroupsListBody,\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: AcsAccessGroupsListUsersBody,\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 = SetNonNullable<\n Required<RouteRequestBody<'/acs/access_groups/add_user'>>\n>\n\nexport type AcsAccessGroupsAddUserResponse = SetNonNullable<\n Required<RouteResponse<'/acs/access_groups/add_user'>>\n>\n\nexport type AcsAccessGroupsCreateBody = SetNonNullable<\n Required<RouteRequestBody<'/acs/access_groups/create'>>\n>\n\nexport type AcsAccessGroupsCreateResponse = SetNonNullable<\n Required<RouteResponse<'/acs/access_groups/create'>>\n>\n\nexport type AcsAccessGroupsDeleteBody = SetNonNullable<\n Required<RouteRequestBody<'/acs/access_groups/delete'>>\n>\n\nexport type AcsAccessGroupsDeleteResponse = SetNonNullable<\n Required<RouteResponse<'/acs/access_groups/delete'>>\n>\n\nexport type AcsAccessGroupsGetBody = SetNonNullable<\n Required<RouteRequestBody<'/acs/access_groups/get'>>\n>\n\nexport type AcsAccessGroupsGetResponse = SetNonNullable<\n Required<RouteResponse<'/acs/access_groups/get'>>\n>\n\nexport type AcsAccessGroupsListBody = SetNonNullable<\n Required<RouteRequestBody<'/acs/access_groups/list'>>\n>\n\nexport type AcsAccessGroupsListResponse = SetNonNullable<\n Required<RouteResponse<'/acs/access_groups/list'>>\n>\n\nexport type AcsAccessGroupsListUsersBody = SetNonNullable<\n Required<RouteRequestBody<'/acs/access_groups/list_users'>>\n>\n\nexport type AcsAccessGroupsListUsersResponse = SetNonNullable<\n Required<RouteResponse<'/acs/access_groups/list_users'>>\n>\n\nexport type AcsAccessGroupsRemoveUserBody = SetNonNullable<\n Required<RouteRequestBody<'/acs/access_groups/remove_user'>>\n>\n\nexport type AcsAccessGroupsRemoveUserResponse = SetNonNullable<\n Required<RouteResponse<'/acs/access_groups/remove_user'>>\n>\n\nexport type AcsAccessGroupsUpdateBody = SetNonNullable<\n Required<RouteRequestBody<'/acs/access_groups/update'>>\n>\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 { Axios } from 'axios'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { createAxiosClient } from 'lib/seam/connect/axios.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n} from 'lib/seam/connect/client-options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nexport class SeamHttpAcsCredentials {\n client: Axios\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions) {\n const options = parseOptions(apiKeyOrOptions)\n this.client = createAxiosClient(options)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpAcsCredentials {\n const opts = { ...options, client }\n if (!isSeamHttpOptionsWithClient(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpAcsCredentials(opts)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpAcsCredentials {\n const opts = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpAcsCredentials(opts)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpAcsCredentials {\n const opts = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpAcsCredentials(opts)\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: AcsCredentialsGetBody,\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: AcsCredentialsListBody,\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 = SetNonNullable<\n Required<RouteRequestBody<'/acs/credentials/create'>>\n>\n\nexport type AcsCredentialsCreateResponse = SetNonNullable<\n Required<RouteResponse<'/acs/credentials/create'>>\n>\n\nexport type AcsCredentialsDeleteBody = SetNonNullable<\n Required<RouteRequestBody<'/acs/credentials/delete'>>\n>\n\nexport type AcsCredentialsDeleteResponse = SetNonNullable<\n Required<RouteResponse<'/acs/credentials/delete'>>\n>\n\nexport type AcsCredentialsGetBody = SetNonNullable<\n Required<RouteRequestBody<'/acs/credentials/get'>>\n>\n\nexport type AcsCredentialsGetResponse = SetNonNullable<\n Required<RouteResponse<'/acs/credentials/get'>>\n>\n\nexport type AcsCredentialsListBody = SetNonNullable<\n Required<RouteRequestBody<'/acs/credentials/list'>>\n>\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 {\n RouteRequestBody,\n RouteRequestParams,\n RouteResponse,\n} from '@seamapi/types/connect'\nimport type { Axios } from 'axios'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { createAxiosClient } from 'lib/seam/connect/axios.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n} from 'lib/seam/connect/client-options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nexport class SeamHttpAcsSystems {\n client: Axios\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions) {\n const options = parseOptions(apiKeyOrOptions)\n this.client = createAxiosClient(options)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpAcsSystems {\n const opts = { ...options, client }\n if (!isSeamHttpOptionsWithClient(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpAcsSystems(opts)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpAcsSystems {\n const opts = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpAcsSystems(opts)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpAcsSystems {\n const opts = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpAcsSystems(opts)\n }\n\n async get(\n body: AcsSystemsGetBody,\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 params?: AcsSystemsListParams,\n ): Promise<AcsSystemsListResponse['acs_systems']> {\n const { data } = await this.client.request<AcsSystemsListResponse>({\n url: '/acs/systems/list',\n method: 'get',\n params,\n })\n return data.acs_systems\n }\n}\n\nexport type AcsSystemsGetBody = SetNonNullable<\n Required<RouteRequestBody<'/acs/systems/get'>>\n>\n\nexport type AcsSystemsGetResponse = SetNonNullable<\n Required<RouteResponse<'/acs/systems/get'>>\n>\n\nexport type AcsSystemsListParams = SetNonNullable<\n Required<RouteRequestParams<'/acs/systems/list'>>\n>\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 { Axios } from 'axios'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { createAxiosClient } from 'lib/seam/connect/axios.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n} from 'lib/seam/connect/client-options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nexport class SeamHttpAcsUsers {\n client: Axios\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions) {\n const options = parseOptions(apiKeyOrOptions)\n this.client = createAxiosClient(options)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpAcsUsers {\n const opts = { ...options, client }\n if (!isSeamHttpOptionsWithClient(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpAcsUsers(opts)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpAcsUsers {\n const opts = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpAcsUsers(opts)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpAcsUsers {\n const opts = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpAcsUsers(opts)\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(body: AcsUsersGetBody): 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: AcsUsersListBody,\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 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 = SetNonNullable<\n Required<RouteRequestBody<'/acs/users/add_to_access_group'>>\n>\n\nexport type AcsUsersAddToAccessGroupResponse = SetNonNullable<\n Required<RouteResponse<'/acs/users/add_to_access_group'>>\n>\n\nexport type AcsUsersCreateBody = SetNonNullable<\n Required<RouteRequestBody<'/acs/users/create'>>\n>\n\nexport type AcsUsersCreateResponse = SetNonNullable<\n Required<RouteResponse<'/acs/users/create'>>\n>\n\nexport type AcsUsersDeleteBody = SetNonNullable<\n Required<RouteRequestBody<'/acs/users/delete'>>\n>\n\nexport type AcsUsersDeleteResponse = SetNonNullable<\n Required<RouteResponse<'/acs/users/delete'>>\n>\n\nexport type AcsUsersGetBody = SetNonNullable<\n Required<RouteRequestBody<'/acs/users/get'>>\n>\n\nexport type AcsUsersGetResponse = SetNonNullable<\n Required<RouteResponse<'/acs/users/get'>>\n>\n\nexport type AcsUsersListBody = SetNonNullable<\n Required<RouteRequestBody<'/acs/users/list'>>\n>\n\nexport type AcsUsersListResponse = SetNonNullable<\n Required<RouteResponse<'/acs/users/list'>>\n>\n\nexport type AcsUsersRemoveFromAccessGroupBody = SetNonNullable<\n Required<RouteRequestBody<'/acs/users/remove_from_access_group'>>\n>\n\nexport type AcsUsersRemoveFromAccessGroupResponse = SetNonNullable<\n Required<RouteResponse<'/acs/users/remove_from_access_group'>>\n>\n\nexport type AcsUsersUpdateBody = SetNonNullable<\n Required<RouteRequestBody<'/acs/users/update'>>\n>\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 type { Axios } from 'axios'\n\nimport { createAxiosClient } from 'lib/seam/connect/axios.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n} from 'lib/seam/connect/client-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'\n\nexport class SeamHttpAcs {\n client: Axios\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions) {\n const options = parseOptions(apiKeyOrOptions)\n this.client = createAxiosClient(options)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpAcs {\n const opts = { ...options, client }\n if (!isSeamHttpOptionsWithClient(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpAcs(opts)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpAcs {\n const opts = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpAcs(opts)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpAcs {\n const opts = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpAcs(opts)\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 { Axios } from 'axios'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { createAxiosClient } from 'lib/seam/connect/axios.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n} from 'lib/seam/connect/client-options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nexport class SeamHttpActionAttempts {\n client: Axios\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions) {\n const options = parseOptions(apiKeyOrOptions)\n this.client = createAxiosClient(options)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpActionAttempts {\n const opts = { ...options, client }\n if (!isSeamHttpOptionsWithClient(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpActionAttempts(opts)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpActionAttempts {\n const opts = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpActionAttempts(opts)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpActionAttempts {\n const opts = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpActionAttempts(opts)\n }\n\n async get(\n body: ActionAttemptsGetBody,\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: ActionAttemptsListBody,\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 ActionAttemptsGetBody = SetNonNullable<\n Required<RouteRequestBody<'/action_attempts/get'>>\n>\n\nexport type ActionAttemptsGetResponse = SetNonNullable<\n Required<RouteResponse<'/action_attempts/get'>>\n>\n\nexport type ActionAttemptsListBody = SetNonNullable<\n Required<RouteRequestBody<'/action_attempts/list'>>\n>\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 { RouteRequestBody, RouteResponse } from '@seamapi/types/connect'\nimport type { Axios } from 'axios'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { createAxiosClient } from 'lib/seam/connect/axios.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n} from 'lib/seam/connect/client-options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nexport class SeamHttpClientSessions {\n client: Axios\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions) {\n const options = parseOptions(apiKeyOrOptions)\n this.client = createAxiosClient(options)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpClientSessions {\n const opts = { ...options, client }\n if (!isSeamHttpOptionsWithClient(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpClientSessions(opts)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpClientSessions {\n const opts = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpClientSessions(opts)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpClientSessions {\n const opts = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpClientSessions(opts)\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: ClientSessionsGetBody,\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 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: ClientSessionsListBody,\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 = SetNonNullable<\n Required<RouteRequestBody<'/client_sessions/create'>>\n>\n\nexport type ClientSessionsCreateResponse = SetNonNullable<\n Required<RouteResponse<'/client_sessions/create'>>\n>\n\nexport type ClientSessionsDeleteBody = SetNonNullable<\n Required<RouteRequestBody<'/client_sessions/delete'>>\n>\n\nexport type ClientSessionsDeleteResponse = SetNonNullable<\n Required<RouteResponse<'/client_sessions/delete'>>\n>\n\nexport type ClientSessionsGetBody = SetNonNullable<\n Required<RouteRequestBody<'/client_sessions/get'>>\n>\n\nexport type ClientSessionsGetResponse = SetNonNullable<\n Required<RouteResponse<'/client_sessions/get'>>\n>\n\nexport type ClientSessionsGrantAccessBody = SetNonNullable<\n Required<RouteRequestBody<'/client_sessions/grant_access'>>\n>\n\nexport type ClientSessionsGrantAccessResponse = SetNonNullable<\n Required<RouteResponse<'/client_sessions/grant_access'>>\n>\n\nexport type ClientSessionsListBody = SetNonNullable<\n Required<RouteRequestBody<'/client_sessions/list'>>\n>\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 {\n RouteRequestBody,\n RouteRequestParams,\n RouteResponse,\n} from '@seamapi/types/connect'\nimport type { Axios } from 'axios'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { createAxiosClient } from 'lib/seam/connect/axios.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n} from 'lib/seam/connect/client-options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nexport class SeamHttpConnectWebviews {\n client: Axios\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions) {\n const options = parseOptions(apiKeyOrOptions)\n this.client = createAxiosClient(options)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpConnectWebviews {\n const opts = { ...options, client }\n if (!isSeamHttpOptionsWithClient(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpConnectWebviews(opts)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpConnectWebviews {\n const opts = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpConnectWebviews(opts)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpConnectWebviews {\n const opts = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpConnectWebviews(opts)\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: ConnectWebviewsGetBody,\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 params?: ConnectWebviewsListParams,\n ): Promise<ConnectWebviewsListResponse['connect_webviews']> {\n const { data } = await this.client.request<ConnectWebviewsListResponse>({\n url: '/connect_webviews/list',\n method: 'get',\n params,\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 = SetNonNullable<\n Required<RouteRequestBody<'/connect_webviews/create'>>\n>\n\nexport type ConnectWebviewsCreateResponse = SetNonNullable<\n Required<RouteResponse<'/connect_webviews/create'>>\n>\n\nexport type ConnectWebviewsDeleteBody = SetNonNullable<\n Required<RouteRequestBody<'/connect_webviews/delete'>>\n>\n\nexport type ConnectWebviewsDeleteResponse = SetNonNullable<\n Required<RouteResponse<'/connect_webviews/delete'>>\n>\n\nexport type ConnectWebviewsGetBody = SetNonNullable<\n Required<RouteRequestBody<'/connect_webviews/get'>>\n>\n\nexport type ConnectWebviewsGetResponse = SetNonNullable<\n Required<RouteResponse<'/connect_webviews/get'>>\n>\n\nexport type ConnectWebviewsListParams = SetNonNullable<\n Required<RouteRequestParams<'/connect_webviews/list'>>\n>\n\nexport type ConnectWebviewsListResponse = SetNonNullable<\n Required<RouteResponse<'/connect_webviews/list'>>\n>\n\nexport type ConnectWebviewsViewParams = SetNonNullable<\n Required<RouteRequestParams<'/connect_webviews/view'>>\n>\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 { Axios } from 'axios'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { createAxiosClient } from 'lib/seam/connect/axios.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n} from 'lib/seam/connect/client-options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nexport class SeamHttpConnectedAccounts {\n client: Axios\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions) {\n const options = parseOptions(apiKeyOrOptions)\n this.client = createAxiosClient(options)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpConnectedAccounts {\n const opts = { ...options, client }\n if (!isSeamHttpOptionsWithClient(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpConnectedAccounts(opts)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpConnectedAccounts {\n const opts = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpConnectedAccounts(opts)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpConnectedAccounts {\n const opts = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpConnectedAccounts(opts)\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: ConnectedAccountsGetBody,\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 = SetNonNullable<\n Required<RouteRequestBody<'/connected_accounts/delete'>>\n>\n\nexport type ConnectedAccountsDeleteResponse = SetNonNullable<\n Required<RouteResponse<'/connected_accounts/delete'>>\n>\n\nexport type ConnectedAccountsGetBody = SetNonNullable<\n Required<RouteRequestBody<'/connected_accounts/get'>>\n>\n\nexport type ConnectedAccountsGetResponse = SetNonNullable<\n Required<RouteResponse<'/connected_accounts/get'>>\n>\n\nexport type ConnectedAccountsListParams = SetNonNullable<\n Required<RouteRequestParams<'/connected_accounts/list'>>\n>\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 { Axios } from 'axios'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { createAxiosClient } from 'lib/seam/connect/axios.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n} from 'lib/seam/connect/client-options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nexport class SeamHttpDevicesUnmanaged {\n client: Axios\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions) {\n const options = parseOptions(apiKeyOrOptions)\n this.client = createAxiosClient(options)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpDevicesUnmanaged {\n const opts = { ...options, client }\n if (!isSeamHttpOptionsWithClient(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpDevicesUnmanaged(opts)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpDevicesUnmanaged {\n const opts = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpDevicesUnmanaged(opts)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpDevicesUnmanaged {\n const opts = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpDevicesUnmanaged(opts)\n }\n\n async get(\n body: DevicesUnmanagedGetBody,\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: DevicesUnmanagedListBody,\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 DevicesUnmanagedGetBody = SetNonNullable<\n Required<RouteRequestBody<'/devices/unmanaged/get'>>\n>\n\nexport type DevicesUnmanagedGetResponse = SetNonNullable<\n Required<RouteResponse<'/devices/unmanaged/get'>>\n>\n\nexport type DevicesUnmanagedListBody = SetNonNullable<\n Required<RouteRequestBody<'/devices/unmanaged/list'>>\n>\n\nexport type DevicesUnmanagedListResponse = SetNonNullable<\n Required<RouteResponse<'/devices/unmanaged/list'>>\n>\n\nexport type DevicesUnmanagedUpdateBody = SetNonNullable<\n Required<RouteRequestBody<'/devices/unmanaged/update'>>\n>\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 { Axios } from 'axios'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { createAxiosClient } from 'lib/seam/connect/axios.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n} from 'lib/seam/connect/client-options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nimport { SeamHttpDevicesUnmanaged } from './devices-unmanaged.js'\n\nexport class SeamHttpDevices {\n client: Axios\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions) {\n const options = parseOptions(apiKeyOrOptions)\n this.client = createAxiosClient(options)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpDevices {\n const opts = { ...options, client }\n if (!isSeamHttpOptionsWithClient(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpDevices(opts)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpDevices {\n const opts = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpDevices(opts)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpDevices {\n const opts = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpDevices(opts)\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: DevicesGetBody): 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(body: DevicesListBody): 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: DevicesListDeviceProvidersBody,\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 = SetNonNullable<\n Required<RouteRequestBody<'/devices/delete'>>\n>\n\nexport type DevicesDeleteResponse = SetNonNullable<\n Required<RouteResponse<'/devices/delete'>>\n>\n\nexport type DevicesGetBody = SetNonNullable<\n Required<RouteRequestBody<'/devices/get'>>\n>\n\nexport type DevicesGetResponse = SetNonNullable<\n Required<RouteResponse<'/devices/get'>>\n>\n\nexport type DevicesListBody = SetNonNullable<\n Required<RouteRequestBody<'/devices/list'>>\n>\n\nexport type DevicesListResponse = SetNonNullable<\n Required<RouteResponse<'/devices/list'>>\n>\n\nexport type DevicesListDeviceProvidersBody = SetNonNullable<\n Required<RouteRequestBody<'/devices/list_device_providers'>>\n>\n\nexport type DevicesListDeviceProvidersResponse = SetNonNullable<\n Required<RouteResponse<'/devices/list_device_providers'>>\n>\n\nexport type DevicesUpdateBody = SetNonNullable<\n Required<RouteRequestBody<'/devices/update'>>\n>\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 { Axios } from 'axios'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { createAxiosClient } from 'lib/seam/connect/axios.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n} from 'lib/seam/connect/client-options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nexport class SeamHttpEvents {\n client: Axios\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions) {\n const options = parseOptions(apiKeyOrOptions)\n this.client = createAxiosClient(options)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpEvents {\n const opts = { ...options, client }\n if (!isSeamHttpOptionsWithClient(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpEvents(opts)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpEvents {\n const opts = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpEvents(opts)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpEvents {\n const opts = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpEvents(opts)\n }\n\n async get(body: EventsGetBody): 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: EventsListBody): 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 EventsGetBody = SetNonNullable<\n Required<RouteRequestBody<'/events/get'>>\n>\n\nexport type EventsGetResponse = SetNonNullable<\n Required<RouteResponse<'/events/get'>>\n>\n\nexport type EventsListBody = SetNonNullable<\n Required<RouteRequestBody<'/events/list'>>\n>\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 { Axios } from 'axios'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { createAxiosClient } from 'lib/seam/connect/axios.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n} from 'lib/seam/connect/client-options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nexport class SeamHttpLocks {\n client: Axios\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions) {\n const options = parseOptions(apiKeyOrOptions)\n this.client = createAxiosClient(options)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpLocks {\n const opts = { ...options, client }\n if (!isSeamHttpOptionsWithClient(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpLocks(opts)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpLocks {\n const opts = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpLocks(opts)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpLocks {\n const opts = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpLocks(opts)\n }\n\n async get(body: LocksGetBody): 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: LocksListBody): 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 LocksGetBody = SetNonNullable<\n Required<RouteRequestBody<'/locks/get'>>\n>\n\nexport type LocksGetResponse = SetNonNullable<\n Required<RouteResponse<'/locks/get'>>\n>\n\nexport type LocksListBody = SetNonNullable<\n Required<RouteRequestBody<'/locks/list'>>\n>\n\nexport type LocksListResponse = SetNonNullable<\n Required<RouteResponse<'/locks/list'>>\n>\n\nexport type LocksLockDoorBody = SetNonNullable<\n Required<RouteRequestBody<'/locks/lock_door'>>\n>\n\nexport type LocksLockDoorResponse = SetNonNullable<\n Required<RouteResponse<'/locks/lock_door'>>\n>\n\nexport type LocksUnlockDoorBody = SetNonNullable<\n Required<RouteRequestBody<'/locks/unlock_door'>>\n>\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 { Axios } from 'axios'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { createAxiosClient } from 'lib/seam/connect/axios.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n} from 'lib/seam/connect/client-options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nexport class SeamHttpNoiseSensorsNoiseThresholds {\n client: Axios\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions) {\n const options = parseOptions(apiKeyOrOptions)\n this.client = createAxiosClient(options)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpNoiseSensorsNoiseThresholds {\n const opts = { ...options, client }\n if (!isSeamHttpOptionsWithClient(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpNoiseSensorsNoiseThresholds(opts)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpNoiseSensorsNoiseThresholds {\n const opts = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpNoiseSensorsNoiseThresholds(opts)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpNoiseSensorsNoiseThresholds {\n const opts = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpNoiseSensorsNoiseThresholds(opts)\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: NoiseSensorsNoiseThresholdsGetBody,\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: NoiseSensorsNoiseThresholdsListBody,\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 = SetNonNullable<\n Required<RouteRequestBody<'/noise_sensors/noise_thresholds/create'>>\n>\n\nexport type NoiseSensorsNoiseThresholdsCreateResponse = SetNonNullable<\n Required<RouteResponse<'/noise_sensors/noise_thresholds/create'>>\n>\n\nexport type NoiseSensorsNoiseThresholdsDeleteBody = SetNonNullable<\n Required<RouteRequestBody<'/noise_sensors/noise_thresholds/delete'>>\n>\n\nexport type NoiseSensorsNoiseThresholdsDeleteResponse = SetNonNullable<\n Required<RouteResponse<'/noise_sensors/noise_thresholds/delete'>>\n>\n\nexport type NoiseSensorsNoiseThresholdsGetBody = SetNonNullable<\n Required<RouteRequestBody<'/noise_sensors/noise_thresholds/get'>>\n>\n\nexport type NoiseSensorsNoiseThresholdsGetResponse = SetNonNullable<\n Required<RouteResponse<'/noise_sensors/noise_thresholds/get'>>\n>\n\nexport type NoiseSensorsNoiseThresholdsListBody = SetNonNullable<\n Required<RouteRequestBody<'/noise_sensors/noise_thresholds/list'>>\n>\n\nexport type NoiseSensorsNoiseThresholdsListResponse = SetNonNullable<\n Required<RouteResponse<'/noise_sensors/noise_thresholds/list'>>\n>\n\nexport type NoiseSensorsNoiseThresholdsUpdateBody = SetNonNullable<\n Required<RouteRequestBody<'/noise_sensors/noise_thresholds/update'>>\n>\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 type { Axios } from 'axios'\n\nimport { createAxiosClient } from 'lib/seam/connect/axios.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n} from 'lib/seam/connect/client-options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nimport { SeamHttpNoiseSensorsNoiseThresholds } from './noise-sensors-noise-thresholds.js'\n\nexport class SeamHttpNoiseSensors {\n client: Axios\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions) {\n const options = parseOptions(apiKeyOrOptions)\n this.client = createAxiosClient(options)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpNoiseSensors {\n const opts = { ...options, client }\n if (!isSeamHttpOptionsWithClient(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpNoiseSensors(opts)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpNoiseSensors {\n const opts = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpNoiseSensors(opts)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpNoiseSensors {\n const opts = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpNoiseSensors(opts)\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 { Axios } from 'axios'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { createAxiosClient } from 'lib/seam/connect/axios.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n} from 'lib/seam/connect/client-options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nexport class SeamHttpThermostatsClimateSettingSchedules {\n client: Axios\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions) {\n const options = parseOptions(apiKeyOrOptions)\n this.client = createAxiosClient(options)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpThermostatsClimateSettingSchedules {\n const opts = { ...options, client }\n if (!isSeamHttpOptionsWithClient(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpThermostatsClimateSettingSchedules(opts)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpThermostatsClimateSettingSchedules {\n const opts = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpThermostatsClimateSettingSchedules(opts)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpThermostatsClimateSettingSchedules {\n const opts = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpThermostatsClimateSettingSchedules(opts)\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: ThermostatsClimateSettingSchedulesGetBody,\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: ThermostatsClimateSettingSchedulesListBody,\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 = SetNonNullable<\n Required<RouteRequestBody<'/thermostats/climate_setting_schedules/create'>>\n>\n\nexport type ThermostatsClimateSettingSchedulesCreateResponse = SetNonNullable<\n Required<RouteResponse<'/thermostats/climate_setting_schedules/create'>>\n>\n\nexport type ThermostatsClimateSettingSchedulesDeleteBody = SetNonNullable<\n Required<RouteRequestBody<'/thermostats/climate_setting_schedules/delete'>>\n>\n\nexport type ThermostatsClimateSettingSchedulesDeleteResponse = SetNonNullable<\n Required<RouteResponse<'/thermostats/climate_setting_schedules/delete'>>\n>\n\nexport type ThermostatsClimateSettingSchedulesGetBody = SetNonNullable<\n Required<RouteRequestBody<'/thermostats/climate_setting_schedules/get'>>\n>\n\nexport type ThermostatsClimateSettingSchedulesGetResponse = SetNonNullable<\n Required<RouteResponse<'/thermostats/climate_setting_schedules/get'>>\n>\n\nexport type ThermostatsClimateSettingSchedulesListBody = SetNonNullable<\n Required<RouteRequestBody<'/thermostats/climate_setting_schedules/list'>>\n>\n\nexport type ThermostatsClimateSettingSchedulesListResponse = SetNonNullable<\n Required<RouteResponse<'/thermostats/climate_setting_schedules/list'>>\n>\n\nexport type ThermostatsClimateSettingSchedulesUpdateBody = SetNonNullable<\n Required<RouteRequestBody<'/thermostats/climate_setting_schedules/update'>>\n>\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 { Axios } from 'axios'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { createAxiosClient } from 'lib/seam/connect/axios.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n} from 'lib/seam/connect/client-options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nimport { SeamHttpThermostatsClimateSettingSchedules } from './thermostats-climate-setting-schedules.js'\n\nexport class SeamHttpThermostats {\n client: Axios\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions) {\n const options = parseOptions(apiKeyOrOptions)\n this.client = createAxiosClient(options)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpThermostats {\n const opts = { ...options, client }\n if (!isSeamHttpOptionsWithClient(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpThermostats(opts)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpThermostats {\n const opts = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpThermostats(opts)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpThermostats {\n const opts = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpThermostats(opts)\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: ThermostatsGetBody,\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: ThermostatsListBody,\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 = SetNonNullable<\n Required<RouteRequestBody<'/thermostats/cool'>>\n>\n\nexport type ThermostatsCoolResponse = SetNonNullable<\n Required<RouteResponse<'/thermostats/cool'>>\n>\n\nexport type ThermostatsGetBody = SetNonNullable<\n Required<RouteRequestBody<'/thermostats/get'>>\n>\n\nexport type ThermostatsGetResponse = SetNonNullable<\n Required<RouteResponse<'/thermostats/get'>>\n>\n\nexport type ThermostatsHeatBody = SetNonNullable<\n Required<RouteRequestBody<'/thermostats/heat'>>\n>\n\nexport type ThermostatsHeatResponse = SetNonNullable<\n Required<RouteResponse<'/thermostats/heat'>>\n>\n\nexport type ThermostatsHeatCoolBody = SetNonNullable<\n Required<RouteRequestBody<'/thermostats/heat_cool'>>\n>\n\nexport type ThermostatsHeatCoolResponse = SetNonNullable<\n Required<RouteResponse<'/thermostats/heat_cool'>>\n>\n\nexport type ThermostatsListBody = SetNonNullable<\n Required<RouteRequestBody<'/thermostats/list'>>\n>\n\nexport type ThermostatsListResponse = SetNonNullable<\n Required<RouteResponse<'/thermostats/list'>>\n>\n\nexport type ThermostatsOffBody = SetNonNullable<\n Required<RouteRequestBody<'/thermostats/off'>>\n>\n\nexport type ThermostatsOffResponse = SetNonNullable<\n Required<RouteResponse<'/thermostats/off'>>\n>\n\nexport type ThermostatsSetFanModeBody = SetNonNullable<\n Required<RouteRequestBody<'/thermostats/set_fan_mode'>>\n>\n\nexport type ThermostatsSetFanModeResponse = SetNonNullable<\n Required<RouteResponse<'/thermostats/set_fan_mode'>>\n>\n\nexport type ThermostatsUpdateBody = SetNonNullable<\n Required<RouteRequestBody<'/thermostats/update'>>\n>\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 { Axios } from 'axios'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { createAxiosClient } from 'lib/seam/connect/axios.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n} from 'lib/seam/connect/client-options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nexport class SeamHttpWebhooks {\n client: Axios\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions) {\n const options = parseOptions(apiKeyOrOptions)\n this.client = createAxiosClient(options)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpWebhooks {\n const opts = { ...options, client }\n if (!isSeamHttpOptionsWithClient(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpWebhooks(opts)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpWebhooks {\n const opts = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpWebhooks(opts)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpWebhooks {\n const opts = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpWebhooks(opts)\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: WebhooksGetBody): 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 = SetNonNullable<\n Required<RouteRequestBody<'/webhooks/create'>>\n>\n\nexport type WebhooksCreateResponse = SetNonNullable<\n Required<RouteResponse<'/webhooks/create'>>\n>\n\nexport type WebhooksDeleteBody = SetNonNullable<\n Required<RouteRequestBody<'/webhooks/delete'>>\n>\n\nexport type WebhooksDeleteResponse = SetNonNullable<\n Required<RouteResponse<'/webhooks/delete'>>\n>\n\nexport type WebhooksGetBody = SetNonNullable<\n Required<RouteRequestBody<'/webhooks/get'>>\n>\n\nexport type WebhooksGetResponse = SetNonNullable<\n Required<RouteResponse<'/webhooks/get'>>\n>\n\nexport type WebhooksListParams = SetNonNullable<\n Required<RouteRequestParams<'/webhooks/list'>>\n>\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 { Axios } from 'axios'\nimport type { SetNonNullable } from 'type-fest'\n\nimport { createAxiosClient } from 'lib/seam/connect/axios.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n} from 'lib/seam/connect/client-options.js'\nimport { parseOptions } from 'lib/seam/connect/parse-options.js'\n\nexport class SeamHttpWorkspaces {\n client: Axios\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions) {\n const options = parseOptions(apiKeyOrOptions)\n this.client = createAxiosClient(options)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttpWorkspaces {\n const opts = { ...options, client }\n if (!isSeamHttpOptionsWithClient(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttpWorkspaces(opts)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttpWorkspaces {\n const opts = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttpWorkspaces(opts)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttpWorkspaces {\n const opts = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttpWorkspaces(opts)\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 = SetNonNullable<\n Required<RouteRequestParams<'/workspaces/get'>>\n>\n\nexport type WorkspacesGetResponse = SetNonNullable<\n Required<RouteResponse<'/workspaces/get'>>\n>\n\nexport type WorkspacesListParams = SetNonNullable<\n Required<RouteRequestParams<'/workspaces/list'>>\n>\n\nexport type WorkspacesListResponse = SetNonNullable<\n Required<RouteResponse<'/workspaces/list'>>\n>\n\nexport type WorkspacesResetSandboxBody = SetNonNullable<\n Required<RouteRequestBody<'/workspaces/reset_sandbox'>>\n>\n\nexport type WorkspacesResetSandboxResponse = SetNonNullable<\n Required<RouteResponse<'/workspaces/reset_sandbox'>>\n>\n","import type { Axios } from 'axios'\n\nimport { createAxiosClient } from './axios.js'\nimport {\n isSeamHttpOptionsWithApiKey,\n isSeamHttpOptionsWithClient,\n isSeamHttpOptionsWithClientSessionToken,\n SeamHttpInvalidOptionsError,\n type SeamHttpOptions,\n type SeamHttpOptionsWithApiKey,\n type SeamHttpOptionsWithClient,\n type SeamHttpOptionsWithClientSessionToken,\n} from './client-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: Axios\n\n // #legacy: boolean\n\n constructor(apiKeyOrOptions: string | SeamHttpOptions) {\n const options = parseOptions(apiKeyOrOptions)\n // this.#legacy = options.enableLegacyMethodBehaivor\n this.client = createAxiosClient(options)\n }\n\n static fromClient(\n client: SeamHttpOptionsWithClient['client'],\n options: Omit<SeamHttpOptionsWithClient, 'client'> = {},\n ): SeamHttp {\n const opts = { ...options, client }\n if (!isSeamHttpOptionsWithClient(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing client')\n }\n return new SeamHttp(opts)\n }\n\n static fromApiKey(\n apiKey: SeamHttpOptionsWithApiKey['apiKey'],\n options: Omit<SeamHttpOptionsWithApiKey, 'apiKey'> = {},\n ): SeamHttp {\n const opts = { ...options, apiKey }\n if (!isSeamHttpOptionsWithApiKey(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing apiKey')\n }\n return new SeamHttp(opts)\n }\n\n static fromClientSessionToken(\n clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'],\n options: Omit<\n SeamHttpOptionsWithClientSessionToken,\n 'clientSessionToken'\n > = {},\n ): SeamHttp {\n const opts = { ...options, clientSessionToken }\n if (!isSeamHttpOptionsWithClientSessionToken(opts)) {\n throw new SeamHttpInvalidOptionsError('Missing clientSessionToken')\n }\n return new SeamHttp(opts)\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\n// TODO\n// static fromPublishableKey and deprecate getClientSessionToken\n\n// TODO: Should we keep makeRequest?\n// Better to implement error handling and wrapping in an error handler.\n// makeRequest\n"]}