@seamapi/http 0.0.2 → 0.2.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 (132) hide show
  1. package/dist/connect.cjs +1807 -96
  2. package/dist/connect.cjs.map +1 -1
  3. package/dist/connect.d.cts +472 -15
  4. package/lib/params-serializer.d.ts +5 -0
  5. package/lib/params-serializer.js +42 -0
  6. package/lib/params-serializer.js.map +1 -0
  7. package/lib/seam/connect/auth.d.ts +4 -3
  8. package/lib/seam/connect/auth.js +59 -8
  9. package/lib/seam/connect/auth.js.map +1 -1
  10. package/lib/seam/connect/client.d.ts +10 -10
  11. package/lib/seam/connect/client.js +16 -49
  12. package/lib/seam/connect/client.js.map +1 -1
  13. package/lib/seam/connect/index.d.ts +2 -1
  14. package/lib/seam/connect/index.js +2 -1
  15. package/lib/seam/connect/index.js.map +1 -1
  16. package/lib/seam/connect/options.d.ts +23 -0
  17. package/lib/seam/connect/options.js +39 -0
  18. package/lib/seam/connect/options.js.map +1 -0
  19. package/lib/seam/connect/parse-options.d.ts +6 -2
  20. package/lib/seam/connect/parse-options.js +35 -10
  21. package/lib/seam/connect/parse-options.js.map +1 -1
  22. package/lib/seam/connect/routes/access-codes-unmanaged.d.ts +27 -0
  23. package/lib/seam/connect/routes/access-codes-unmanaged.js +84 -0
  24. package/lib/seam/connect/routes/access-codes-unmanaged.js.map +1 -0
  25. package/lib/seam/connect/routes/access-codes.d.ts +38 -0
  26. package/lib/seam/connect/routes/access-codes.js +113 -0
  27. package/lib/seam/connect/routes/access-codes.js.map +1 -0
  28. package/lib/seam/connect/routes/acs-access-groups.d.ts +36 -0
  29. package/lib/seam/connect/routes/acs-access-groups.js +107 -0
  30. package/lib/seam/connect/routes/acs-access-groups.js.map +1 -0
  31. package/lib/seam/connect/routes/acs-credentials.d.ts +24 -0
  32. package/lib/seam/connect/routes/acs-credentials.js +78 -0
  33. package/lib/seam/connect/routes/acs-credentials.js.map +1 -0
  34. package/lib/seam/connect/routes/acs-systems.d.ts +18 -0
  35. package/lib/seam/connect/routes/acs-systems.js +63 -0
  36. package/lib/seam/connect/routes/acs-systems.js.map +1 -0
  37. package/lib/seam/connect/routes/acs-users.d.ts +39 -0
  38. package/lib/seam/connect/routes/acs-users.js +113 -0
  39. package/lib/seam/connect/routes/acs-users.js.map +1 -0
  40. package/lib/seam/connect/routes/acs.d.ts +18 -0
  41. package/lib/seam/connect/routes/acs.js +63 -0
  42. package/lib/seam/connect/routes/acs.js.map +1 -0
  43. package/lib/seam/connect/routes/action-attempts.d.ts +18 -0
  44. package/lib/seam/connect/routes/action-attempts.js +63 -0
  45. package/lib/seam/connect/routes/action-attempts.js.map +1 -0
  46. package/lib/seam/connect/routes/client-sessions.d.ts +30 -0
  47. package/lib/seam/connect/routes/client-sessions.js +93 -0
  48. package/lib/seam/connect/routes/client-sessions.js.map +1 -0
  49. package/lib/seam/connect/routes/connect-webviews.d.ts +27 -0
  50. package/lib/seam/connect/routes/connect-webviews.js +85 -0
  51. package/lib/seam/connect/routes/connect-webviews.js.map +1 -0
  52. package/lib/seam/connect/routes/connected-accounts.d.ts +21 -0
  53. package/lib/seam/connect/routes/connected-accounts.js +70 -0
  54. package/lib/seam/connect/routes/connected-accounts.js.map +1 -0
  55. package/lib/seam/connect/routes/devices-unmanaged.d.ts +21 -0
  56. package/lib/seam/connect/routes/devices-unmanaged.js +70 -0
  57. package/lib/seam/connect/routes/devices-unmanaged.js.map +1 -0
  58. package/lib/seam/connect/routes/devices.d.ts +29 -0
  59. package/lib/seam/connect/routes/devices.js +89 -0
  60. package/lib/seam/connect/routes/devices.js.map +1 -0
  61. package/lib/seam/connect/routes/events.d.ts +18 -0
  62. package/lib/seam/connect/routes/events.js +63 -0
  63. package/lib/seam/connect/routes/events.js.map +1 -0
  64. package/lib/seam/connect/routes/index.d.ts +21 -0
  65. package/lib/seam/connect/routes/index.js +22 -0
  66. package/lib/seam/connect/routes/index.js.map +1 -0
  67. package/lib/seam/connect/routes/locks.d.ts +24 -0
  68. package/lib/seam/connect/routes/locks.js +79 -0
  69. package/lib/seam/connect/routes/locks.js.map +1 -0
  70. package/lib/seam/connect/routes/noise-sensors-noise-thresholds.d.ts +27 -0
  71. package/lib/seam/connect/routes/noise-sensors-noise-thresholds.js +84 -0
  72. package/lib/seam/connect/routes/noise-sensors-noise-thresholds.js.map +1 -0
  73. package/lib/seam/connect/routes/noise-sensors.d.ts +12 -0
  74. package/lib/seam/connect/routes/noise-sensors.js +51 -0
  75. package/lib/seam/connect/routes/noise-sensors.js.map +1 -0
  76. package/lib/seam/connect/routes/thermostats-climate-setting-schedules.d.ts +27 -0
  77. package/lib/seam/connect/routes/thermostats-climate-setting-schedules.js +85 -0
  78. package/lib/seam/connect/routes/thermostats-climate-setting-schedules.js.map +1 -0
  79. package/lib/seam/connect/routes/thermostats.d.ts +38 -0
  80. package/lib/seam/connect/routes/thermostats.js +109 -0
  81. package/lib/seam/connect/routes/thermostats.js.map +1 -0
  82. package/lib/seam/connect/routes/webhooks.d.ts +24 -0
  83. package/lib/seam/connect/routes/webhooks.js +78 -0
  84. package/lib/seam/connect/routes/webhooks.js.map +1 -0
  85. package/lib/seam/connect/routes/workspaces.d.ts +17 -7
  86. package/lib/seam/connect/routes/workspaces.js +61 -11
  87. package/lib/seam/connect/routes/workspaces.js.map +1 -1
  88. package/lib/seam/connect/seam-http.d.ts +24 -0
  89. package/lib/seam/connect/seam-http.js +82 -0
  90. package/lib/seam/connect/seam-http.js.map +1 -0
  91. package/package.json +9 -3
  92. package/src/lib/params-serializer.ts +55 -0
  93. package/src/lib/seam/connect/auth.ts +101 -13
  94. package/src/lib/seam/connect/client.ts +30 -62
  95. package/src/lib/seam/connect/env.d.ts +11 -0
  96. package/src/lib/seam/connect/index.ts +2 -1
  97. package/src/lib/seam/connect/{client-options.ts → options.ts} +37 -15
  98. package/src/lib/seam/connect/parse-options.ts +55 -14
  99. package/src/lib/seam/connect/routes/access-codes-unmanaged.ts +170 -0
  100. package/src/lib/seam/connect/routes/access-codes.ts +226 -0
  101. package/src/lib/seam/connect/routes/acs-access-groups.ts +216 -0
  102. package/src/lib/seam/connect/routes/acs-credentials.ts +151 -0
  103. package/src/lib/seam/connect/routes/acs-systems.ts +118 -0
  104. package/src/lib/seam/connect/routes/acs-users.ts +221 -0
  105. package/src/lib/seam/connect/routes/acs.ts +101 -0
  106. package/src/lib/seam/connect/routes/action-attempts.ts +118 -0
  107. package/src/lib/seam/connect/routes/client-sessions.ts +187 -0
  108. package/src/lib/seam/connect/routes/connect-webviews.ts +170 -0
  109. package/src/lib/seam/connect/routes/connected-accounts.ts +139 -0
  110. package/src/lib/seam/connect/routes/devices-unmanaged.ts +134 -0
  111. package/src/lib/seam/connect/routes/devices.ts +166 -0
  112. package/src/lib/seam/connect/routes/events.ts +114 -0
  113. package/src/lib/seam/connect/routes/index.ts +21 -0
  114. package/src/lib/seam/connect/routes/locks.ts +148 -0
  115. package/src/lib/seam/connect/routes/noise-sensors-noise-thresholds.ts +170 -0
  116. package/src/lib/seam/connect/routes/noise-sensors.ts +86 -0
  117. package/src/lib/seam/connect/routes/thermostats-climate-setting-schedules.ts +192 -0
  118. package/src/lib/seam/connect/routes/thermostats.ts +208 -0
  119. package/src/lib/seam/connect/routes/webhooks.ts +151 -0
  120. package/src/lib/seam/connect/routes/workspaces.ts +118 -22
  121. package/src/lib/seam/connect/seam-http.ts +141 -0
  122. package/lib/seam/connect/axios.d.ts +0 -3
  123. package/lib/seam/connect/axios.js +0 -17
  124. package/lib/seam/connect/axios.js.map +0 -1
  125. package/lib/seam/connect/client-options.d.ts +0 -19
  126. package/lib/seam/connect/client-options.js +0 -29
  127. package/lib/seam/connect/client-options.js.map +0 -1
  128. package/lib/seam/connect/legacy/workspaces.d.ts +0 -8
  129. package/lib/seam/connect/legacy/workspaces.js +0 -10
  130. package/lib/seam/connect/legacy/workspaces.js.map +0 -1
  131. package/src/lib/seam/connect/axios.ts +0 -23
  132. package/src/lib/seam/connect/legacy/workspaces.ts +0 -26
@@ -1,47 +1,98 @@
1
- import { InvalidSeamHttpOptionsError, isSeamHttpOptionsWithApiKey, isSeamHttpOptionsWithClientSessionToken, } from './client-options.js';
1
+ import { isSeamHttpOptionsWithApiKey, isSeamHttpOptionsWithClientSessionToken, SeamHttpInvalidOptionsError, } from './options.js';
2
2
  export const getAuthHeaders = (options) => {
3
+ if ('publishableKey' in options) {
4
+ return getAuthHeadersForPublishableKey(options.publishableKey);
5
+ }
3
6
  if (isSeamHttpOptionsWithApiKey(options)) {
4
7
  return getAuthHeadersForApiKey(options);
5
8
  }
6
9
  if (isSeamHttpOptionsWithClientSessionToken(options)) {
7
10
  return getAuthHeadersForClientSessionToken(options);
8
11
  }
9
- throw new InvalidSeamHttpOptionsError('Must specify an apiKey or clientSessionToken');
12
+ throw new SeamHttpInvalidOptionsError('Must specify an apiKey, clientSessionToken, or publishableKey');
10
13
  };
11
14
  const getAuthHeadersForApiKey = ({ apiKey, }) => {
12
15
  if (isClientSessionToken(apiKey)) {
13
- throw new InvalidSeamTokenError('A Client Session Token cannot be used as an apiKey');
16
+ throw new SeamHttpInvalidTokenError('A Client Session Token cannot be used as an apiKey');
17
+ }
18
+ if (isJwt(apiKey)) {
19
+ throw new SeamHttpInvalidTokenError('A JWT cannot be used as an apiKey');
14
20
  }
15
21
  if (isAccessToken(apiKey)) {
16
- throw new InvalidSeamTokenError('An access token cannot be used as an apiKey');
22
+ throw new SeamHttpInvalidTokenError('An Access Token cannot be used as an apiKey');
17
23
  }
18
- if (isJwt(apiKey) || !isSeamToken(apiKey)) {
19
- throw new InvalidSeamTokenError(`Unknown or invalid apiKey format, expected token to start with ${tokenPrefix}`);
24
+ if (isPublishableKey(apiKey)) {
25
+ throw new SeamHttpInvalidTokenError('A Publishable Key cannot be used as an apiKey');
26
+ }
27
+ if (!isSeamToken(apiKey)) {
28
+ throw new SeamHttpInvalidTokenError(`Unknown or invalid apiKey format, expected token to start with ${tokenPrefix}`);
20
29
  }
21
30
  return {
22
31
  authorization: `Bearer ${apiKey}`,
23
32
  };
24
33
  };
25
34
  const getAuthHeadersForClientSessionToken = ({ clientSessionToken, }) => {
35
+ if (isJwt(clientSessionToken)) {
36
+ throw new SeamHttpInvalidTokenError('A JWT cannot be used as a clientSessionToken');
37
+ }
38
+ if (isAccessToken(clientSessionToken)) {
39
+ throw new SeamHttpInvalidTokenError('An Access Token cannot be used as a clientSessionToken');
40
+ }
41
+ if (isPublishableKey(clientSessionToken)) {
42
+ throw new SeamHttpInvalidTokenError('A Publishable Key cannot be used as a clientSessionToken');
43
+ }
26
44
  if (!isClientSessionToken(clientSessionToken)) {
27
- throw new InvalidSeamTokenError(`Unknown or invalid clientSessionToken format, expected token to start with ${clientSessionTokenPrefix}`);
45
+ throw new SeamHttpInvalidTokenError(`Unknown or invalid clientSessionToken format, expected token to start with ${clientSessionTokenPrefix}`);
28
46
  }
29
47
  return {
30
48
  authorization: `Bearer ${clientSessionToken}`,
31
49
  'client-session-token': clientSessionToken,
32
50
  };
33
51
  };
34
- export class InvalidSeamTokenError extends Error {
52
+ const getAuthHeadersForPublishableKey = (publishableKey) => {
53
+ if (isJwt(publishableKey)) {
54
+ throw new SeamHttpInvalidTokenError('A JWT cannot be used as a publishableKey');
55
+ }
56
+ if (isAccessToken(publishableKey)) {
57
+ throw new SeamHttpInvalidTokenError('An Access Token cannot be used as a publishableKey');
58
+ }
59
+ if (isClientSessionToken(publishableKey)) {
60
+ throw new SeamHttpInvalidTokenError('A Client Session Token Key cannot be used as a publishableKey');
61
+ }
62
+ if (!isPublishableKey(publishableKey)) {
63
+ throw new SeamHttpInvalidTokenError(`Unknown or invalid publishableKey format, expected token to start with ${publishableKeyTokenPrefix}`);
64
+ }
65
+ return {
66
+ 'seam-publishable-key': publishableKey,
67
+ };
68
+ };
69
+ export class SeamHttpInvalidTokenError extends Error {
35
70
  constructor(message) {
36
71
  super(`SeamHttp received an invalid token: ${message}`);
37
72
  this.name = this.constructor.name;
38
73
  Error.captureStackTrace(this, this.constructor);
39
74
  }
40
75
  }
76
+ export const warnOnInsecureuserIdentifierKey = (userIdentifierKey) => {
77
+ if (isEmail(userIdentifierKey)) {
78
+ // eslint-disable-next-line no-console
79
+ console.warn(...[
80
+ 'Using an email for the userIdentifierKey is insecure and may return an error in the future!',
81
+ 'This is insecure because an email is common knowledge or easily guessed.',
82
+ 'Use something with sufficient entropy known only to the owner of the client session.',
83
+ 'For help choosing a user identifier key see',
84
+ 'https://docs.seam.co/latest/seam-components/overview/get-started-with-client-side-components#3-select-a-user-identifier-key',
85
+ ]);
86
+ }
87
+ };
41
88
  const tokenPrefix = 'seam_';
42
89
  const clientSessionTokenPrefix = 'seam_cst';
90
+ const publishableKeyTokenPrefix = 'seam_pk';
43
91
  const isClientSessionToken = (token) => token.startsWith(clientSessionTokenPrefix);
44
92
  const isAccessToken = (token) => token.startsWith('seam_at');
45
93
  const isJwt = (token) => token.startsWith('ey');
46
94
  const isSeamToken = (token) => token.startsWith(tokenPrefix);
95
+ const isPublishableKey = (token) => token.startsWith(publishableKeyTokenPrefix);
96
+ // SOURCE: https://stackoverflow.com/a/46181
97
+ const isEmail = (value) => /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value);
47
98
  //# sourceMappingURL=auth.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/lib/seam/connect/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,2BAA2B,EAC3B,2BAA2B,EAC3B,uCAAuC,GAIxC,MAAM,qBAAqB,CAAA;AAI5B,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,OAAwB,EAAW,EAAE;IAClE,IAAI,2BAA2B,CAAC,OAAO,CAAC,EAAE;QACxC,OAAO,uBAAuB,CAAC,OAAO,CAAC,CAAA;KACxC;IAED,IAAI,uCAAuC,CAAC,OAAO,CAAC,EAAE;QACpD,OAAO,mCAAmC,CAAC,OAAO,CAAC,CAAA;KACpD;IAED,MAAM,IAAI,2BAA2B,CACnC,8CAA8C,CAC/C,CAAA;AACH,CAAC,CAAA;AAED,MAAM,uBAAuB,GAAG,CAAC,EAC/B,MAAM,GACoB,EAAW,EAAE;IACvC,IAAI,oBAAoB,CAAC,MAAM,CAAC,EAAE;QAChC,MAAM,IAAI,qBAAqB,CAC7B,oDAAoD,CACrD,CAAA;KACF;IAED,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE;QACzB,MAAM,IAAI,qBAAqB,CAC7B,6CAA6C,CAC9C,CAAA;KACF;IAED,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE;QACzC,MAAM,IAAI,qBAAqB,CAC7B,kEAAkE,WAAW,EAAE,CAChF,CAAA;KACF;IAED,OAAO;QACL,aAAa,EAAE,UAAU,MAAM,EAAE;KAClC,CAAA;AACH,CAAC,CAAA;AAED,MAAM,mCAAmC,GAAG,CAAC,EAC3C,kBAAkB,GACoB,EAAW,EAAE;IACnD,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,EAAE;QAC7C,MAAM,IAAI,qBAAqB,CAC7B,8EAA8E,wBAAwB,EAAE,CACzG,CAAA;KACF;IAED,OAAO;QACL,aAAa,EAAE,UAAU,kBAAkB,EAAE;QAC7C,sBAAsB,EAAE,kBAAkB;KAC3C,CAAA;AACH,CAAC,CAAA;AAED,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAC9C,YAAY,OAAe;QACzB,KAAK,CAAC,uCAAuC,OAAO,EAAE,CAAC,CAAA;QACvD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAA;QACjC,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAA;IACjD,CAAC;CACF;AAED,MAAM,WAAW,GAAG,OAAO,CAAA;AAE3B,MAAM,wBAAwB,GAAG,UAAU,CAAA;AAE3C,MAAM,oBAAoB,GAAG,CAAC,KAAa,EAAW,EAAE,CACtD,KAAK,CAAC,UAAU,CAAC,wBAAwB,CAAC,CAAA;AAE5C,MAAM,aAAa,GAAG,CAAC,KAAa,EAAW,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAA;AAE7E,MAAM,KAAK,GAAG,CAAC,KAAa,EAAW,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;AAEhE,MAAM,WAAW,GAAG,CAAC,KAAa,EAAW,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,CAAA"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/lib/seam/connect/auth.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,11 @@
1
- import type { Axios } from 'axios';
2
- import { type SeamHttpOptions, type SeamHttpOptionsWithApiKey, type SeamHttpOptionsWithClientSessionToken } from './client-options.js';
3
- import { WorkspacesHttp } from './routes/workspaces.js';
4
- export declare class SeamHttp {
5
- #private;
6
- client: Axios;
7
- constructor(apiKeyOrOptions: string | SeamHttpOptions);
8
- static fromApiKey(apiKey: SeamHttpOptionsWithApiKey['apiKey'], options?: Omit<SeamHttpOptionsWithApiKey, 'apiKey'>): SeamHttp;
9
- static fromClientSessionToken(clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'], options?: Omit<SeamHttpOptionsWithClientSessionToken, 'clientSessionToken'>): SeamHttp;
10
- get workspaces(): WorkspacesHttp;
1
+ import { type Axios, type AxiosRequestConfig } from 'axios';
2
+ import { type AxiosRetry } from 'axios-retry';
3
+ export type Client = Axios;
4
+ export interface ClientOptions {
5
+ axiosOptions?: AxiosRequestConfig;
6
+ axiosRetryOptions?: AxiosRetryConfig;
7
+ client?: Client;
11
8
  }
9
+ type AxiosRetryConfig = Parameters<AxiosRetry>[1];
10
+ export declare const createClient: (options: ClientOptions) => Axios;
11
+ export {};
@@ -1,51 +1,18 @@
1
- var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
2
- if (kind === "m") throw new TypeError("Private method is not writable");
3
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
4
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
5
- return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
1
+ import axios, {} from 'axios';
2
+ import axiosRetry, { exponentialDelay } from 'axios-retry';
3
+ import { paramsSerializer } from '../../../lib/params-serializer.js';
4
+ export const createClient = (options) => {
5
+ if (options.client != null)
6
+ return options.client;
7
+ const client = axios.create({
8
+ paramsSerializer,
9
+ ...options.axiosOptions,
10
+ });
11
+ axiosRetry(client, {
12
+ retries: 2,
13
+ retryDelay: exponentialDelay,
14
+ ...options.axiosRetryOptions,
15
+ });
16
+ return client;
6
17
  };
7
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
8
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
9
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
10
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
- };
12
- var _SeamHttp_legacy;
13
- import { createAxiosClient } from './axios.js';
14
- import { InvalidSeamHttpOptionsError, isSeamHttpOptionsWithApiKey, isSeamHttpOptionsWithClientSessionToken, } from './client-options.js';
15
- import { LegacyWorkspacesHttp } from './legacy/workspaces.js';
16
- import { parseOptions } from './parse-options.js';
17
- import { WorkspacesHttp } from './routes/workspaces.js';
18
- export class SeamHttp {
19
- constructor(apiKeyOrOptions) {
20
- _SeamHttp_legacy.set(this, void 0);
21
- const options = parseOptions(apiKeyOrOptions);
22
- __classPrivateFieldSet(this, _SeamHttp_legacy, options.enableLegacyMethodBehaivor, "f");
23
- this.client = createAxiosClient(options);
24
- }
25
- static fromApiKey(apiKey, options = {}) {
26
- const opts = { ...options, apiKey };
27
- if (!isSeamHttpOptionsWithApiKey(opts)) {
28
- throw new InvalidSeamHttpOptionsError('Missing apiKey');
29
- }
30
- return new SeamHttp(opts);
31
- }
32
- static fromClientSessionToken(clientSessionToken, options = {}) {
33
- const opts = { ...options, clientSessionToken };
34
- if (!isSeamHttpOptionsWithClientSessionToken(opts)) {
35
- throw new InvalidSeamHttpOptionsError('Missing clientSessionToken');
36
- }
37
- return new SeamHttp(opts);
38
- }
39
- // TODO
40
- // static fromPublishableKey and deprecate getClientSessionToken
41
- // TODO: Should we keep makeRequest?
42
- // Better to implement error handling and wrapping in an error handler.
43
- // makeRequest
44
- get workspaces() {
45
- if (__classPrivateFieldGet(this, _SeamHttp_legacy, "f"))
46
- return new LegacyWorkspacesHttp(this.client);
47
- return new WorkspacesHttp(this.client);
48
- }
49
- }
50
- _SeamHttp_legacy = new WeakMap();
51
18
  //# sourceMappingURL=client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/lib/seam/connect/client.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAC9C,OAAO,EACL,2BAA2B,EAC3B,2BAA2B,EAC3B,uCAAuC,GAIxC,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAEvD,MAAM,OAAO,QAAQ;IAKnB,YAAY,eAAyC;QAFrD,mCAAgB;QAGd,MAAM,OAAO,GAAG,YAAY,CAAC,eAAe,CAAC,CAAA;QAC7C,uBAAA,IAAI,oBAAW,OAAO,CAAC,0BAA0B,MAAA,CAAA;QACjD,IAAI,CAAC,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAA;IAC1C,CAAC;IAED,MAAM,CAAC,UAAU,CACf,MAA2C,EAC3C,UAAqD,EAAE;QAEvD,MAAM,IAAI,GAAG,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,CAAA;QACnC,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,EAAE;YACtC,MAAM,IAAI,2BAA2B,CAAC,gBAAgB,CAAC,CAAA;SACxD;QACD,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAA;IAC3B,CAAC;IAED,MAAM,CAAC,sBAAsB,CAC3B,kBAA+E,EAC/E,UAGI,EAAE;QAEN,MAAM,IAAI,GAAG,EAAE,GAAG,OAAO,EAAE,kBAAkB,EAAE,CAAA;QAC/C,IAAI,CAAC,uCAAuC,CAAC,IAAI,CAAC,EAAE;YAClD,MAAM,IAAI,2BAA2B,CAAC,4BAA4B,CAAC,CAAA;SACpE;QACD,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAA;IAC3B,CAAC;IAED,OAAO;IACP,gEAAgE;IAEhE,oCAAoC;IACpC,uEAAuE;IACvE,cAAc;IAEd,IAAI,UAAU;QACZ,IAAI,uBAAA,IAAI,wBAAQ;YAAE,OAAO,IAAI,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAC9D,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACxC,CAAC;CACF"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/lib/seam/connect/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAuC,MAAM,OAAO,CAAA;AAClE,OAAO,UAAU,EAAE,EAAmB,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAE3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAY3D,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,OAAsB,EAAS,EAAE;IAC5D,IAAI,OAAO,CAAC,MAAM,IAAI,IAAI;QAAE,OAAO,OAAO,CAAC,MAAM,CAAA;IAEjD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC1B,gBAAgB;QAChB,GAAG,OAAO,CAAC,YAAY;KACxB,CAAC,CAAA;IAEF,UAAU,CAAC,MAAM,EAAE;QACjB,OAAO,EAAE,CAAC;QACV,UAAU,EAAE,gBAAgB;QAC5B,GAAG,OAAO,CAAC,iBAAiB;KAC7B,CAAC,CAAA;IAEF,OAAO,MAAM,CAAA;AACf,CAAC,CAAA"}
@@ -1 +1,2 @@
1
- export * from './client.js';
1
+ export * from './options.js';
2
+ export * from './seam-http.js';
@@ -1,2 +1,3 @@
1
- export * from './client.js';
1
+ export * from './options.js';
2
+ export * from './seam-http.js';
2
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/seam/connect/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/seam/connect/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,gBAAgB,CAAA"}
@@ -0,0 +1,23 @@
1
+ import type { Client, ClientOptions } from './client.js';
2
+ export type SeamHttpOptions = SeamHttpOptionsFromEnv | SeamHttpOptionsWithClient | SeamHttpOptionsWithApiKey | SeamHttpOptionsWithClientSessionToken;
3
+ interface SeamHttpCommonOptions extends ClientOptions {
4
+ endpoint?: string;
5
+ }
6
+ export type SeamHttpFromPublishableKeyOptions = SeamHttpCommonOptions;
7
+ export type SeamHttpOptionsFromEnv = SeamHttpCommonOptions;
8
+ export interface SeamHttpOptionsWithClient {
9
+ client: Client;
10
+ }
11
+ export declare const isSeamHttpOptionsWithClient: (options: SeamHttpOptions) => options is SeamHttpOptionsWithClient;
12
+ export interface SeamHttpOptionsWithApiKey extends SeamHttpCommonOptions {
13
+ apiKey: string;
14
+ }
15
+ export declare const isSeamHttpOptionsWithApiKey: (options: SeamHttpOptions) => options is SeamHttpOptionsWithApiKey;
16
+ export interface SeamHttpOptionsWithClientSessionToken extends SeamHttpCommonOptions {
17
+ clientSessionToken: string;
18
+ }
19
+ export declare const isSeamHttpOptionsWithClientSessionToken: (options: SeamHttpOptions) => options is SeamHttpOptionsWithClientSessionToken;
20
+ export declare class SeamHttpInvalidOptionsError extends Error {
21
+ constructor(message: string);
22
+ }
23
+ export {};
@@ -0,0 +1,39 @@
1
+ export const isSeamHttpOptionsWithClient = (options) => {
2
+ if (!('client' in options))
3
+ return false;
4
+ if (options.client == null)
5
+ return false;
6
+ const keys = Object.keys(options).filter((k) => k !== 'client');
7
+ if (keys.length > 0) {
8
+ throw new SeamHttpInvalidOptionsError(`The client option cannot be used with any other option, but received: ${keys.join(', ')}`);
9
+ }
10
+ return true;
11
+ };
12
+ export const isSeamHttpOptionsWithApiKey = (options) => {
13
+ if (!('apiKey' in options))
14
+ return false;
15
+ if (options.apiKey == null)
16
+ return false;
17
+ if ('clientSessionToken' in options && options.clientSessionToken != null) {
18
+ throw new SeamHttpInvalidOptionsError('The clientSessionToken option cannot be used with the apiKey option');
19
+ }
20
+ return true;
21
+ };
22
+ export const isSeamHttpOptionsWithClientSessionToken = (options) => {
23
+ if (!('clientSessionToken' in options))
24
+ return false;
25
+ if (options.clientSessionToken == null)
26
+ return false;
27
+ if ('apiKey' in options && options.apiKey != null) {
28
+ throw new SeamHttpInvalidOptionsError('The clientSessionToken option cannot be used with the apiKey option');
29
+ }
30
+ return true;
31
+ };
32
+ export class SeamHttpInvalidOptionsError extends Error {
33
+ constructor(message) {
34
+ super(`SeamHttp received invalid options: ${message}`);
35
+ this.name = this.constructor.name;
36
+ Error.captureStackTrace(this, this.constructor);
37
+ }
38
+ }
39
+ //# sourceMappingURL=options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["../../../src/lib/seam/connect/options.ts"],"names":[],"mappings":"AAoBA,MAAM,CAAC,MAAM,2BAA2B,GAAG,CACzC,OAAwB,EACc,EAAE;IACxC,IAAI,CAAC,CAAC,QAAQ,IAAI,OAAO,CAAC;QAAE,OAAO,KAAK,CAAA;IACxC,IAAI,OAAO,CAAC,MAAM,IAAI,IAAI;QAAE,OAAO,KAAK,CAAA;IAExC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAA;IAC/D,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;QACnB,MAAM,IAAI,2BAA2B,CACnC,yEAAyE,IAAI,CAAC,IAAI,CAChF,IAAI,CACL,EAAE,CACJ,CAAA;KACF;IAED,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAMD,MAAM,CAAC,MAAM,2BAA2B,GAAG,CACzC,OAAwB,EACc,EAAE;IACxC,IAAI,CAAC,CAAC,QAAQ,IAAI,OAAO,CAAC;QAAE,OAAO,KAAK,CAAA;IACxC,IAAI,OAAO,CAAC,MAAM,IAAI,IAAI;QAAE,OAAO,KAAK,CAAA;IAExC,IAAI,oBAAoB,IAAI,OAAO,IAAI,OAAO,CAAC,kBAAkB,IAAI,IAAI,EAAE;QACzE,MAAM,IAAI,2BAA2B,CACnC,qEAAqE,CACtE,CAAA;KACF;IAED,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAOD,MAAM,CAAC,MAAM,uCAAuC,GAAG,CACrD,OAAwB,EAC0B,EAAE;IACpD,IAAI,CAAC,CAAC,oBAAoB,IAAI,OAAO,CAAC;QAAE,OAAO,KAAK,CAAA;IACpD,IAAI,OAAO,CAAC,kBAAkB,IAAI,IAAI;QAAE,OAAO,KAAK,CAAA;IAEpD,IAAI,QAAQ,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,IAAI,IAAI,EAAE;QACjD,MAAM,IAAI,2BAA2B,CACnC,qEAAqE,CACtE,CAAA;KACF;IAED,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAED,MAAM,OAAO,2BAA4B,SAAQ,KAAK;IACpD,YAAY,OAAe;QACzB,KAAK,CAAC,sCAAsC,OAAO,EAAE,CAAC,CAAA;QACtD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAA;QACjC,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAA;IACjD,CAAC;CACF"}
@@ -1,2 +1,6 @@
1
- import type { SeamHttpOptions } from './client-options.js';
2
- export declare const parseOptions: (apiKeyOrOptions: string | SeamHttpOptions) => Required<SeamHttpOptions>;
1
+ import type { ClientOptions } from './client.js';
2
+ import { type SeamHttpOptions } from './options.js';
3
+ export type Options = SeamHttpOptions & {
4
+ publishableKey?: string;
5
+ };
6
+ export declare const parseOptions: (apiKeyOrOptions: string | Options) => ClientOptions;
@@ -1,20 +1,45 @@
1
+ import { getAuthHeaders } from './auth.js';
2
+ import { isSeamHttpOptionsWithClient, isSeamHttpOptionsWithClientSessionToken, } from './options.js';
3
+ const defaultEndpoint = 'https://connect.getseam.com';
1
4
  export const parseOptions = (apiKeyOrOptions) => {
5
+ const options = getNormalizedOptions(apiKeyOrOptions);
6
+ if (isSeamHttpOptionsWithClient(options))
7
+ return options;
8
+ return {
9
+ axiosOptions: {
10
+ baseURL: options.endpoint ?? getEndpointFromEnv() ?? defaultEndpoint,
11
+ withCredentials: isSeamHttpOptionsWithClientSessionToken(options),
12
+ ...options.axiosOptions,
13
+ headers: {
14
+ ...getAuthHeaders(options),
15
+ ...options.axiosOptions?.headers,
16
+ },
17
+ },
18
+ axiosRetryOptions: {
19
+ ...options.axiosRetryOptions,
20
+ },
21
+ };
22
+ };
23
+ const getNormalizedOptions = (apiKeyOrOptions) => {
2
24
  const options = typeof apiKeyOrOptions === 'string'
3
25
  ? { apiKey: apiKeyOrOptions }
4
26
  : apiKeyOrOptions;
5
- const endpoint = options.endpoint ??
6
- globalThis.process?.env?.['SEAM_ENDPOINT'] ??
7
- globalThis.process?.env?.['SEAM_API_URL'] ??
8
- 'https://connect.getseam.com';
9
- const apiKey = 'apiKey' in options
10
- ? options.apiKey
11
- : globalThis.process?.env?.['SEAM_API_KEY'];
27
+ if (isSeamHttpOptionsWithClient(options))
28
+ return options;
29
+ const apiKey = 'apiKey' in options ? options.apiKey : getApiKeyFromEnv(options);
12
30
  return {
13
31
  ...options,
14
32
  ...(apiKey != null ? { apiKey } : {}),
15
- endpoint,
16
- axiosOptions: options.axiosOptions ?? {},
17
- enableLegacyMethodBehaivor: false,
18
33
  };
19
34
  };
35
+ const getApiKeyFromEnv = (options) => {
36
+ if ('clientSessionToken' in options && options.clientSessionToken != null) {
37
+ return null;
38
+ }
39
+ return globalThis.process?.env?.SEAM_API_KEY;
40
+ };
41
+ const getEndpointFromEnv = () => {
42
+ return (globalThis.process?.env?.SEAM_ENDPOINT ??
43
+ globalThis.process?.env?.SEAM_API_URL);
44
+ };
20
45
  //# sourceMappingURL=parse-options.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parse-options.js","sourceRoot":"","sources":["../../../src/lib/seam/connect/parse-options.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,eAAyC,EACd,EAAE;IAC7B,MAAM,OAAO,GACX,OAAO,eAAe,KAAK,QAAQ;QACjC,CAAC,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE;QAC7B,CAAC,CAAC,eAAe,CAAA;IAErB,MAAM,QAAQ,GACZ,OAAO,CAAC,QAAQ;QAChB,UAAU,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC;QAC1C,UAAU,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC;QACzC,6BAA6B,CAAA;IAE/B,MAAM,MAAM,GACV,QAAQ,IAAI,OAAO;QACjB,CAAC,CAAC,OAAO,CAAC,MAAM;QAChB,CAAC,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,CAAA;IAE/C,OAAO;QACL,GAAG,OAAO;QACV,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrC,QAAQ;QACR,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,EAAE;QACxC,0BAA0B,EAAE,KAAK;KAClC,CAAA;AACH,CAAC,CAAA"}
1
+ {"version":3,"file":"parse-options.js","sourceRoot":"","sources":["../../../src/lib/seam/connect/parse-options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAE1C,OAAO,EACL,2BAA2B,EAC3B,uCAAuC,GAExC,MAAM,cAAc,CAAA;AAErB,MAAM,eAAe,GAAG,6BAA6B,CAAA;AAIrD,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,eAAiC,EAClB,EAAE;IACjB,MAAM,OAAO,GAAG,oBAAoB,CAAC,eAAe,CAAC,CAAA;IAErD,IAAI,2BAA2B,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAA;IAExD,OAAO;QACL,YAAY,EAAE;YACZ,OAAO,EAAE,OAAO,CAAC,QAAQ,IAAI,kBAAkB,EAAE,IAAI,eAAe;YACpE,eAAe,EAAE,uCAAuC,CAAC,OAAO,CAAC;YACjE,GAAG,OAAO,CAAC,YAAY;YACvB,OAAO,EAAE;gBACP,GAAG,cAAc,CAAC,OAAO,CAAC;gBAC1B,GAAG,OAAO,CAAC,YAAY,EAAE,OAAO;aACjC;SACF;QACD,iBAAiB,EAAE;YACjB,GAAG,OAAO,CAAC,iBAAiB;SAC7B;KACF,CAAA;AACH,CAAC,CAAA;AAED,MAAM,oBAAoB,GAAG,CAC3B,eAAiC,EAChB,EAAE;IACnB,MAAM,OAAO,GACX,OAAO,eAAe,KAAK,QAAQ;QACjC,CAAC,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE;QAC7B,CAAC,CAAC,eAAe,CAAA;IAErB,IAAI,2BAA2B,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAA;IAExD,MAAM,MAAM,GACV,QAAQ,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAA;IAElE,OAAO;QACL,GAAG,OAAO;QACV,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACtC,CAAA;AACH,CAAC,CAAA;AAED,MAAM,gBAAgB,GAAG,CACvB,OAAwB,EACG,EAAE;IAC7B,IAAI,oBAAoB,IAAI,OAAO,IAAI,OAAO,CAAC,kBAAkB,IAAI,IAAI,EAAE;QACzE,OAAO,IAAI,CAAA;KACZ;IACD,OAAO,UAAU,CAAC,OAAO,EAAE,GAAG,EAAE,YAAY,CAAA;AAC9C,CAAC,CAAA;AAED,MAAM,kBAAkB,GAAG,GAA8B,EAAE;IACzD,OAAO,CACL,UAAU,CAAC,OAAO,EAAE,GAAG,EAAE,aAAa;QACtC,UAAU,CAAC,OAAO,EAAE,GAAG,EAAE,YAAY,CACtC,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,27 @@
1
+ import type { RouteRequestBody, RouteResponse } from '@seamapi/types/connect';
2
+ import type { SetNonNullable } from 'type-fest';
3
+ import { type Client } from '../../../../lib/seam/connect/client.js';
4
+ import { type SeamHttpFromPublishableKeyOptions, type SeamHttpOptions, type SeamHttpOptionsWithApiKey, type SeamHttpOptionsWithClient, type SeamHttpOptionsWithClientSessionToken } from '../../../../lib/seam/connect/options.js';
5
+ export declare class SeamHttpAccessCodesUnmanaged {
6
+ client: Client;
7
+ constructor(apiKeyOrOptions?: string | SeamHttpOptions);
8
+ static fromClient(client: SeamHttpOptionsWithClient['client'], options?: Omit<SeamHttpOptionsWithClient, 'client'>): SeamHttpAccessCodesUnmanaged;
9
+ static fromApiKey(apiKey: SeamHttpOptionsWithApiKey['apiKey'], options?: Omit<SeamHttpOptionsWithApiKey, 'apiKey'>): SeamHttpAccessCodesUnmanaged;
10
+ static fromClientSessionToken(clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'], options?: Omit<SeamHttpOptionsWithClientSessionToken, 'clientSessionToken'>): SeamHttpAccessCodesUnmanaged;
11
+ static fromPublishableKey(publishableKey: string, userIdentifierKey: string, options?: SeamHttpFromPublishableKeyOptions): Promise<SeamHttpAccessCodesUnmanaged>;
12
+ convertToManaged(body: AccessCodesUnmanagedConvertToManagedBody): Promise<void>;
13
+ delete(body: AccessCodesUnmanagedDeleteBody): Promise<void>;
14
+ get(body: AccessCodesUnmanagedGetBody): Promise<AccessCodesUnmanagedGetResponse['access_code']>;
15
+ list(body: AccessCodesUnmanagedListBody): Promise<AccessCodesUnmanagedListResponse['access_codes']>;
16
+ update(body: AccessCodesUnmanagedUpdateBody): Promise<void>;
17
+ }
18
+ export type AccessCodesUnmanagedConvertToManagedBody = RouteRequestBody<'/access_codes/unmanaged/convert_to_managed'>;
19
+ export type AccessCodesUnmanagedConvertToManagedResponse = SetNonNullable<Required<RouteResponse<'/access_codes/unmanaged/convert_to_managed'>>>;
20
+ export type AccessCodesUnmanagedDeleteBody = RouteRequestBody<'/access_codes/unmanaged/delete'>;
21
+ export type AccessCodesUnmanagedDeleteResponse = SetNonNullable<Required<RouteResponse<'/access_codes/unmanaged/delete'>>>;
22
+ export type AccessCodesUnmanagedGetBody = RouteRequestBody<'/access_codes/unmanaged/get'>;
23
+ export type AccessCodesUnmanagedGetResponse = SetNonNullable<Required<RouteResponse<'/access_codes/unmanaged/get'>>>;
24
+ export type AccessCodesUnmanagedListBody = RouteRequestBody<'/access_codes/unmanaged/list'>;
25
+ export type AccessCodesUnmanagedListResponse = SetNonNullable<Required<RouteResponse<'/access_codes/unmanaged/list'>>>;
26
+ export type AccessCodesUnmanagedUpdateBody = RouteRequestBody<'/access_codes/unmanaged/update'>;
27
+ export type AccessCodesUnmanagedUpdateResponse = SetNonNullable<Required<RouteResponse<'/access_codes/unmanaged/update'>>>;
@@ -0,0 +1,84 @@
1
+ /*
2
+ * Automatically generated by generate-routes.ts.
3
+ * Do not edit this file or add other files to this directory.
4
+ */
5
+ import { warnOnInsecureuserIdentifierKey } from '../../../../lib/seam/connect/auth.js';
6
+ import { createClient } from '../../../../lib/seam/connect/client.js';
7
+ import { isSeamHttpOptionsWithApiKey, isSeamHttpOptionsWithClient, isSeamHttpOptionsWithClientSessionToken, SeamHttpInvalidOptionsError, } from '../../../../lib/seam/connect/options.js';
8
+ import { parseOptions } from '../../../../lib/seam/connect/parse-options.js';
9
+ import { SeamHttpClientSessions } from './client-sessions.js';
10
+ export class SeamHttpAccessCodesUnmanaged {
11
+ constructor(apiKeyOrOptions = {}) {
12
+ const clientOptions = parseOptions(apiKeyOrOptions);
13
+ this.client = createClient(clientOptions);
14
+ }
15
+ static fromClient(client, options = {}) {
16
+ const constructorOptions = { ...options, client };
17
+ if (!isSeamHttpOptionsWithClient(constructorOptions)) {
18
+ throw new SeamHttpInvalidOptionsError('Missing client');
19
+ }
20
+ return new SeamHttpAccessCodesUnmanaged(constructorOptions);
21
+ }
22
+ static fromApiKey(apiKey, options = {}) {
23
+ const constructorOptions = { ...options, apiKey };
24
+ if (!isSeamHttpOptionsWithApiKey(constructorOptions)) {
25
+ throw new SeamHttpInvalidOptionsError('Missing apiKey');
26
+ }
27
+ return new SeamHttpAccessCodesUnmanaged(constructorOptions);
28
+ }
29
+ static fromClientSessionToken(clientSessionToken, options = {}) {
30
+ const constructorOptions = { ...options, clientSessionToken };
31
+ if (!isSeamHttpOptionsWithClientSessionToken(constructorOptions)) {
32
+ throw new SeamHttpInvalidOptionsError('Missing clientSessionToken');
33
+ }
34
+ return new SeamHttpAccessCodesUnmanaged(constructorOptions);
35
+ }
36
+ static async fromPublishableKey(publishableKey, userIdentifierKey, options = {}) {
37
+ warnOnInsecureuserIdentifierKey(userIdentifierKey);
38
+ const clientOptions = parseOptions({ ...options, publishableKey });
39
+ const client = createClient(clientOptions);
40
+ const clientSessions = SeamHttpClientSessions.fromClient(client);
41
+ const { token } = await clientSessions.getOrCreate({
42
+ user_identifier_key: userIdentifierKey,
43
+ });
44
+ return SeamHttpAccessCodesUnmanaged.fromClientSessionToken(token, options);
45
+ }
46
+ async convertToManaged(body) {
47
+ await this.client.request({
48
+ url: '/access_codes/unmanaged/convert_to_managed',
49
+ method: 'post',
50
+ data: body,
51
+ });
52
+ }
53
+ async delete(body) {
54
+ await this.client.request({
55
+ url: '/access_codes/unmanaged/delete',
56
+ method: 'post',
57
+ data: body,
58
+ });
59
+ }
60
+ async get(body) {
61
+ const { data } = await this.client.request({
62
+ url: '/access_codes/unmanaged/get',
63
+ method: 'post',
64
+ data: body,
65
+ });
66
+ return data.access_code;
67
+ }
68
+ async list(body) {
69
+ const { data } = await this.client.request({
70
+ url: '/access_codes/unmanaged/list',
71
+ method: 'post',
72
+ data: body,
73
+ });
74
+ return data.access_codes;
75
+ }
76
+ async update(body) {
77
+ await this.client.request({
78
+ url: '/access_codes/unmanaged/update',
79
+ method: 'post',
80
+ data: body,
81
+ });
82
+ }
83
+ }
84
+ //# sourceMappingURL=access-codes-unmanaged.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"access-codes-unmanaged.js","sourceRoot":"","sources":["../../../../src/lib/seam/connect/routes/access-codes-unmanaged.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import type { RouteRequestBody, RouteResponse } from '@seamapi/types/connect';
2
+ import type { SetNonNullable } from 'type-fest';
3
+ import { type Client } from '../../../../lib/seam/connect/client.js';
4
+ import { type SeamHttpFromPublishableKeyOptions, type SeamHttpOptions, type SeamHttpOptionsWithApiKey, type SeamHttpOptionsWithClient, type SeamHttpOptionsWithClientSessionToken } from '../../../../lib/seam/connect/options.js';
5
+ import { SeamHttpAccessCodesUnmanaged } from './access-codes-unmanaged.js';
6
+ export declare class SeamHttpAccessCodes {
7
+ client: Client;
8
+ constructor(apiKeyOrOptions?: string | SeamHttpOptions);
9
+ static fromClient(client: SeamHttpOptionsWithClient['client'], options?: Omit<SeamHttpOptionsWithClient, 'client'>): SeamHttpAccessCodes;
10
+ static fromApiKey(apiKey: SeamHttpOptionsWithApiKey['apiKey'], options?: Omit<SeamHttpOptionsWithApiKey, 'apiKey'>): SeamHttpAccessCodes;
11
+ static fromClientSessionToken(clientSessionToken: SeamHttpOptionsWithClientSessionToken['clientSessionToken'], options?: Omit<SeamHttpOptionsWithClientSessionToken, 'clientSessionToken'>): SeamHttpAccessCodes;
12
+ static fromPublishableKey(publishableKey: string, userIdentifierKey: string, options?: SeamHttpFromPublishableKeyOptions): Promise<SeamHttpAccessCodes>;
13
+ get unmanaged(): SeamHttpAccessCodesUnmanaged;
14
+ create(body: AccessCodesCreateBody): Promise<AccessCodesCreateResponse['access_code']>;
15
+ createMultiple(body: AccessCodesCreateMultipleBody): Promise<AccessCodesCreateMultipleResponse['access_codes']>;
16
+ delete(body: AccessCodesDeleteBody): Promise<void>;
17
+ generateCode(body: AccessCodesGenerateCodeBody): Promise<AccessCodesGenerateCodeResponse['generated_code']>;
18
+ get(body: AccessCodesGetBody): Promise<AccessCodesGetResponse['access_code']>;
19
+ list(body: AccessCodesListBody): Promise<AccessCodesListResponse['access_codes']>;
20
+ pullBackupAccessCode(body: AccessCodesPullBackupAccessCodeBody): Promise<AccessCodesPullBackupAccessCodeResponse['backup_access_code']>;
21
+ update(body: AccessCodesUpdateBody): Promise<void>;
22
+ }
23
+ export type AccessCodesCreateBody = RouteRequestBody<'/access_codes/create'>;
24
+ export type AccessCodesCreateResponse = SetNonNullable<Required<RouteResponse<'/access_codes/create'>>>;
25
+ export type AccessCodesCreateMultipleBody = RouteRequestBody<'/access_codes/create_multiple'>;
26
+ export type AccessCodesCreateMultipleResponse = SetNonNullable<Required<RouteResponse<'/access_codes/create_multiple'>>>;
27
+ export type AccessCodesDeleteBody = RouteRequestBody<'/access_codes/delete'>;
28
+ export type AccessCodesDeleteResponse = SetNonNullable<Required<RouteResponse<'/access_codes/delete'>>>;
29
+ export type AccessCodesGenerateCodeBody = RouteRequestBody<'/access_codes/generate_code'>;
30
+ export type AccessCodesGenerateCodeResponse = SetNonNullable<Required<RouteResponse<'/access_codes/generate_code'>>>;
31
+ export type AccessCodesGetBody = RouteRequestBody<'/access_codes/get'>;
32
+ export type AccessCodesGetResponse = SetNonNullable<Required<RouteResponse<'/access_codes/get'>>>;
33
+ export type AccessCodesListBody = RouteRequestBody<'/access_codes/list'>;
34
+ export type AccessCodesListResponse = SetNonNullable<Required<RouteResponse<'/access_codes/list'>>>;
35
+ export type AccessCodesPullBackupAccessCodeBody = RouteRequestBody<'/access_codes/pull_backup_access_code'>;
36
+ export type AccessCodesPullBackupAccessCodeResponse = SetNonNullable<Required<RouteResponse<'/access_codes/pull_backup_access_code'>>>;
37
+ export type AccessCodesUpdateBody = RouteRequestBody<'/access_codes/update'>;
38
+ export type AccessCodesUpdateResponse = SetNonNullable<Required<RouteResponse<'/access_codes/update'>>>;