@atlasauth/backend 0.14.1 → 0.16.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 (80) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/dist/access-control.d.ts +53 -0
  3. package/dist/access-control.js +46 -0
  4. package/dist/access-control.js.map +1 -0
  5. package/dist/algs.d.ts +7 -0
  6. package/dist/algs.js +11 -0
  7. package/dist/algs.js.map +1 -0
  8. package/dist/botid.d.ts +70 -0
  9. package/dist/botid.js +88 -0
  10. package/dist/botid.js.map +1 -0
  11. package/dist/client/action-gallery.d.ts +215 -0
  12. package/dist/client/action-gallery.js +66 -0
  13. package/dist/client/action-gallery.js.map +1 -0
  14. package/dist/client/actions.d.ts +21 -0
  15. package/dist/client/actions.js.map +1 -1
  16. package/dist/client/api-keys.d.ts +49 -4
  17. package/dist/client/api-keys.js +6 -2
  18. package/dist/client/api-keys.js.map +1 -1
  19. package/dist/client/app-roles.d.ts +76 -0
  20. package/dist/client/app-roles.js +39 -0
  21. package/dist/client/app-roles.js.map +1 -0
  22. package/dist/client/attack-protection.d.ts +33 -1
  23. package/dist/client/attack-protection.js.map +1 -1
  24. package/dist/client/billing-plans.d.ts +93 -0
  25. package/dist/client/billing-plans.js +31 -0
  26. package/dist/client/billing-plans.js.map +1 -1
  27. package/dist/client/custom-oauth-providers.d.ts +243 -0
  28. package/dist/client/custom-oauth-providers.js +60 -0
  29. package/dist/client/custom-oauth-providers.js.map +1 -0
  30. package/dist/client/email-templates.d.ts +1 -1
  31. package/dist/client/email-templates.js.map +1 -1
  32. package/dist/client/index.d.ts +157 -3
  33. package/dist/client/index.js +11 -0
  34. package/dist/client/index.js.map +1 -1
  35. package/dist/client/instance-security.d.ts +104 -0
  36. package/dist/client/instance-security.js +28 -0
  37. package/dist/client/instance-security.js.map +1 -1
  38. package/dist/client/notifications.d.ts +1 -1
  39. package/dist/client/notifications.js.map +1 -1
  40. package/dist/client/oauth-clients.d.ts +84 -2
  41. package/dist/client/oauth-clients.js +13 -0
  42. package/dist/client/oauth-clients.js.map +1 -1
  43. package/dist/client/referrals.d.ts +1 -1
  44. package/dist/client/resource-servers.d.ts +34 -5
  45. package/dist/client/resource-servers.js.map +1 -1
  46. package/dist/client/risk-based-mfa.d.ts +3 -0
  47. package/dist/client/risk-based-mfa.js.map +1 -1
  48. package/dist/client/scim-tokens.d.ts +18 -0
  49. package/dist/client/scim-tokens.js +4 -0
  50. package/dist/client/scim-tokens.js.map +1 -1
  51. package/dist/client/sessions.d.ts +16 -0
  52. package/dist/client/sessions.js +15 -0
  53. package/dist/client/sessions.js.map +1 -1
  54. package/dist/client/sso-connections.d.ts +105 -0
  55. package/dist/client/sso-connections.js +29 -0
  56. package/dist/client/sso-connections.js.map +1 -1
  57. package/dist/client/users.d.ts +40 -4
  58. package/dist/client/users.js +8 -3
  59. package/dist/client/users.js.map +1 -1
  60. package/dist/index.d.ts +4 -0
  61. package/dist/index.js +18 -1
  62. package/dist/index.js.map +1 -1
  63. package/dist/logout-token.d.ts +1 -1
  64. package/dist/logout-token.js +3 -2
  65. package/dist/logout-token.js.map +1 -1
  66. package/dist/oauth-resource.d.ts +225 -0
  67. package/dist/oauth-resource.js +469 -0
  68. package/dist/oauth-resource.js.map +1 -0
  69. package/dist/oidc.d.ts +1 -1
  70. package/dist/oidc.js +5 -3
  71. package/dist/oidc.js.map +1 -1
  72. package/dist/referral-test-calls.d.ts +7 -7
  73. package/dist/referral-test-calls.js +2 -2
  74. package/dist/testing.d.ts +6 -4
  75. package/dist/testing.js +7 -6
  76. package/dist/testing.js.map +1 -1
  77. package/dist/verify.d.ts +11 -0
  78. package/dist/verify.js +15 -1
  79. package/dist/verify.js.map +1 -1
  80. package/package.json +3 -3
@@ -40,15 +40,34 @@ export interface ActionTestEvent {
40
40
  email?: string;
41
41
  emailVerified?: boolean;
42
42
  metadata?: Record<string, unknown>;
43
+ /** The user's organization memberships, as `event.user.organizations`. */
44
+ organizations?: Array<{
45
+ id: string;
46
+ slug: string;
47
+ name: string;
48
+ role: string;
49
+ }>;
43
50
  };
44
51
  connection?: {
45
52
  strategy?: string;
46
53
  };
54
+ /** `country` is the ISO code `event.request.country` should carry. */
47
55
  request?: {
48
56
  ip?: string;
49
57
  user_agent?: string;
58
+ country?: string;
50
59
  };
51
60
  }
61
+ /** An outbound request the code queued with `api.http` (a dry run sends nothing). */
62
+ export interface ActionTestHttpRequest {
63
+ method: 'GET' | 'POST';
64
+ /** Query values are masked. */
65
+ url: string;
66
+ /** Header names only; values are never echoed. */
67
+ header_names: string[];
68
+ has_body: boolean;
69
+ save_response_as: string | null;
70
+ }
52
71
  /** What an action produced against a sample event — no real data is touched. */
53
72
  export interface ActionTestResult {
54
73
  object: 'action_test_result';
@@ -59,6 +78,8 @@ export interface ActionTestResult {
59
78
  id_token_claims: Record<string, unknown>;
60
79
  app_metadata: Record<string, unknown>;
61
80
  logs: string[];
81
+ /** What the code queued with `api.http`; sent only on a real post_login / post_user_registration run. */
82
+ http_requests?: ActionTestHttpRequest[];
62
83
  error: string | null;
63
84
  }
64
85
  /** The ordered binding list for a trigger, replaced atomically as a set. */
@@ -1 +1 @@
1
- {"version":3,"file":"actions.js","sourceRoot":"","sources":["../../src/client/actions.ts"],"names":[],"mappings":";;AAwEA,0CAkCC;AA1GD,uCAAgD;AAwEhD,SAAgB,eAAe,CAAC,OAAkB;IAChD,OAAO;QACL,IAAI;YACF,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;QACzD,CAAC;QACD,MAAM,CAAC,IAAsB,EAAE,cAAuB;YACpD,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;QAChF,CAAC;QACD,GAAG,CAAC,EAAU;YACZ,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,eAAe,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACpE,CAAC;QACD,MAAM,CAAC,EAAU,EAAE,IAAsB;YACvC,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5E,CAAC;QACD,MAAM,CAAC,EAAU;YACf,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,eAAe,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACvE,CAAC;QACD,2EAA2E;QAC3E,IAAI,CAAC,EAAU,EAAE,QAAyB,EAAE;YAC1C,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,IAAA,aAAG,EAAC,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QAC3F,CAAC;QACD,oDAAoD;QACpD,WAAW,CAAC,OAAsB;YAChC,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,wBAAwB,IAAA,aAAG,EAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;QAClF,CAAC;QACD,+CAA+C;QAC/C,WAAW,CAAC,OAAsB,EAAE,SAAmB;YACrD,OAAO,OAAO,CAAC;gBACb,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,wBAAwB,IAAA,aAAG,EAAC,OAAO,CAAC,EAAE;gBAC5C,IAAI,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE;aAChC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"actions.js","sourceRoot":"","sources":["../../src/client/actions.ts"],"names":[],"mappings":";;AAwFA,0CAkCC;AA1HD,uCAAgD;AAwFhD,SAAgB,eAAe,CAAC,OAAkB;IAChD,OAAO;QACL,IAAI;YACF,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;QACzD,CAAC;QACD,MAAM,CAAC,IAAsB,EAAE,cAAuB;YACpD,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;QAChF,CAAC;QACD,GAAG,CAAC,EAAU;YACZ,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,eAAe,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACpE,CAAC;QACD,MAAM,CAAC,EAAU,EAAE,IAAsB;YACvC,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5E,CAAC;QACD,MAAM,CAAC,EAAU;YACf,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,eAAe,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACvE,CAAC;QACD,2EAA2E;QAC3E,IAAI,CAAC,EAAU,EAAE,QAAyB,EAAE;YAC1C,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,IAAA,aAAG,EAAC,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QAC3F,CAAC;QACD,oDAAoD;QACpD,WAAW,CAAC,OAAsB;YAChC,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,wBAAwB,IAAA,aAAG,EAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;QAClF,CAAC;QACD,+CAA+C;QAC/C,WAAW,CAAC,OAAsB,EAAE,SAAmB;YACrD,OAAO,OAAO,CAAC;gBACb,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,wBAAwB,IAAA,aAAG,EAAC,OAAO,CAAC,EAAE;gBAC5C,IAAI,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE;aAChC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -20,11 +20,31 @@ export interface ApiKey {
20
20
  limits?: ApiKeyLimit[] | null;
21
21
  /** Each cap with its current-window usage (empty when the key has no caps). */
22
22
  usage?: ApiKeyLimitState[];
23
+ /** A disabled key fails verify until re-enabled (it is not revoked). */
24
+ enabled?: boolean;
25
+ /** Per-key verify rate limit, or null. */
26
+ rate_limit?: ApiKeyRateLimit | null;
27
+ /** Uses left (each successful verify spends one); null = unlimited. */
28
+ remaining?: number | null;
23
29
  last_used_at: number | null;
24
30
  expires_at: number | null;
25
31
  revoked_at: number | null;
26
32
  created_at: number;
27
33
  }
34
+ /** At most `max` successful verifies per `window_seconds`. */
35
+ export interface ApiKeyRateLimit {
36
+ max: number;
37
+ window_seconds: number;
38
+ }
39
+ /** Controls shared by create and update. */
40
+ export interface ApiKeyControls {
41
+ /** Default true. A disabled key fails verify and cannot mint tokens. */
42
+ enabled?: boolean;
43
+ /** Per-key verify rate limit; null removes it. */
44
+ rate_limit?: ApiKeyRateLimit | null;
45
+ /** Uses left; null = unlimited. */
46
+ remaining?: number | null;
47
+ }
28
48
  /** The window a spend cap counts over. `request` caps a single debit; `day`/`month` are UTC calendar windows; `total` never resets. */
29
49
  export type ApiKeyLimitPeriod = 'request' | 'day' | 'month' | 'total';
30
50
  /** A per-key spend cap, metered with {@link apiKeysResource} `recordUsage`. */
@@ -103,17 +123,21 @@ export interface ApiKeyWithSecret extends ApiKey {
103
123
  secret: string;
104
124
  note: string;
105
125
  }
106
- export interface CreateApiKeyBody {
126
+ export interface CreateApiKeyBody extends ApiKeyControls {
107
127
  subject_type: ApiKeySubjectType;
108
128
  subject_id: string;
109
129
  name?: string;
110
130
  claims?: Record<string, unknown>;
111
- /** Epoch ms; null (or omitted) never expires. */
131
+ /** Epoch ms; null never expires (omitted: the instance default lifetime, if any). */
112
132
  expires_at?: number | null;
133
+ /** Relative expiry; mutually exclusive with `expires_at`. */
134
+ expires_in_seconds?: number;
135
+ /** Custom secret prefix (e.g. `acme` gives `acme_<id>_<secret>`). */
136
+ prefix?: string;
113
137
  /** Per-key spend caps, metered with `recordUsage`. */
114
138
  limits?: ApiKeyLimit[] | null;
115
139
  }
116
- export interface UpdateApiKeyBody {
140
+ export interface UpdateApiKeyBody extends ApiKeyControls {
117
141
  name?: string | null;
118
142
  claims?: Record<string, unknown>;
119
143
  expires_at?: number | null;
@@ -128,6 +152,19 @@ export interface UpdateApiKeyBody {
128
152
  export type ApiKeyVerification = {
129
153
  object: 'api_key_verification';
130
154
  valid: false;
155
+ } | {
156
+ /**
157
+ * A live key refused by its own policy: `insufficient_scope` (see
158
+ * `missing_scopes`), `rate_limited` (retry after `retry_after_ms`) or
159
+ * `usage_exhausted` (no uses left).
160
+ */
161
+ object: 'api_key_verification';
162
+ valid: false;
163
+ code: 'insufficient_scope' | 'rate_limited' | 'usage_exhausted';
164
+ id: string;
165
+ missing_scopes?: string[];
166
+ retry_after_ms?: number;
167
+ remaining?: number;
131
168
  } | {
132
169
  object: 'api_key_verification';
133
170
  valid: true;
@@ -144,6 +181,8 @@ export type ApiKeyVerification = {
144
181
  usage?: ApiKeyLimitState[];
145
182
  last_used_at: number | null;
146
183
  expires_at?: number | null;
184
+ /** Uses left after this verify (null = unlimited). */
185
+ remaining?: number | null;
147
186
  };
148
187
  /**
149
188
  * §P1-8 a short-lived, offline-verifiable access JWT minted from a long-lived
@@ -193,7 +232,13 @@ export declare function apiKeysResource(request: RequestFn): {
193
232
  /** Mint a key. The secret is returned once, here. */
194
233
  create(body: CreateApiKeyBody, idempotencyKey?: string): Promise<ApiKeyWithSecret>;
195
234
  /** Check a presented secret. Rate-limited — it is an online credential check. */
196
- verify(secret: string): Promise<ApiKeyVerification>;
235
+ /**
236
+ * Verify a presented key. `required_scopes`: every one must be on the key,
237
+ * else `{ valid: false, code: 'insufficient_scope' }`.
238
+ */
239
+ verify(secret: string, options?: {
240
+ required_scopes?: string[];
241
+ }): Promise<ApiKeyVerification>;
197
242
  get(id: string): Promise<ApiKey>;
198
243
  update(id: string, body: UpdateApiKeyBody): Promise<ApiKey>;
199
244
  /** Revoke a key. It stays queryable but never authenticates again. */
@@ -13,8 +13,12 @@ function apiKeysResource(request) {
13
13
  return request({ method: 'POST', path: '/v1/api_keys', body, idempotencyKey });
14
14
  },
15
15
  /** Check a presented secret. Rate-limited — it is an online credential check. */
16
- verify(secret) {
17
- return request({ method: 'POST', path: '/v1/api_keys/verify', body: { secret } });
16
+ /**
17
+ * Verify a presented key. `required_scopes`: every one must be on the key,
18
+ * else `{ valid: false, code: 'insufficient_scope' }`.
19
+ */
20
+ verify(secret, options = {}) {
21
+ return request({ method: 'POST', path: '/v1/api_keys/verify', body: { secret, ...options } });
18
22
  },
19
23
  get(id) {
20
24
  return request({ method: 'GET', path: `/v1/api_keys/${(0, request_1.enc)(id)}` });
@@ -1 +1 @@
1
- {"version":3,"file":"api-keys.js","sourceRoot":"","sources":["../../src/client/api-keys.ts"],"names":[],"mappings":";;AA2MA,0CAyDC;AApQD,uCAAgD;AA2MhD,SAAgB,eAAe,CAAC,OAAkB;IAChD,OAAO;QACL,0CAA0C;QAC1C,IAAI,CAAC,KAGJ;YACC,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC;QACjE,CAAC;QACD,qDAAqD;QACrD,MAAM,CAAC,IAAsB,EAAE,cAAuB;YACpD,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;QACjF,CAAC;QACD,iFAAiF;QACjF,MAAM,CAAC,MAAc;YACnB,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;QACpF,CAAC;QACD,GAAG,CAAC,EAAU;YACZ,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAgB,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACrE,CAAC;QACD,MAAM,CAAC,EAAU,EAAE,IAAsB;YACvC,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,gBAAgB,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7E,CAAC;QACD,sEAAsE;QACtE,MAAM,CAAC,EAAU;YACf,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,gBAAgB,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACxE,CAAC;QACD;;;;;;;WAOG;QACH,WAAW,CAAC,EAAU,EAAE,IAA2B;YACjD,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,IAAA,aAAG,EAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAClF,CAAC;QACD,iFAAiF;QACjF,QAAQ,CAAC,EAAU;YACjB,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAgB,IAAA,aAAG,EAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC3E,CAAC;QACD;;;WAGG;QACH,SAAS,CAAC,IAAyB;YACjC,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,CAAC;QACvE,CAAC;QACD;;;WAGG;QACH,WAAW,CAAC,QAAiC,EAAE;YAC7C,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,CAAC,CAAC;QACvF,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"api-keys.js","sourceRoot":"","sources":["../../src/client/api-keys.ts"],"names":[],"mappings":";;AAqPA,0CA6DC;AAlTD,uCAAgD;AAqPhD,SAAgB,eAAe,CAAC,OAAkB;IAChD,OAAO;QACL,0CAA0C;QAC1C,IAAI,CAAC,KAGJ;YACC,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC;QACjE,CAAC;QACD,qDAAqD;QACrD,MAAM,CAAC,IAAsB,EAAE,cAAuB;YACpD,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;QACjF,CAAC;QACD,iFAAiF;QACjF;;;WAGG;QACH,MAAM,CAAC,MAAc,EAAE,UAA0C,EAAE;YACjE,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,EAAE,CAAC,CAAC;QAChG,CAAC;QACD,GAAG,CAAC,EAAU;YACZ,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAgB,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACrE,CAAC;QACD,MAAM,CAAC,EAAU,EAAE,IAAsB;YACvC,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,gBAAgB,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7E,CAAC;QACD,sEAAsE;QACtE,MAAM,CAAC,EAAU;YACf,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,gBAAgB,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACxE,CAAC;QACD;;;;;;;WAOG;QACH,WAAW,CAAC,EAAU,EAAE,IAA2B;YACjD,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,IAAA,aAAG,EAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAClF,CAAC;QACD,iFAAiF;QACjF,QAAQ,CAAC,EAAU;YACjB,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAgB,IAAA,aAAG,EAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC3E,CAAC;QACD;;;WAGG;QACH,SAAS,CAAC,IAAyB;YACjC,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,CAAC;QACvE,CAAC;QACD;;;WAGG;QACH,WAAW,CAAC,QAAiC,EAAE;YAC7C,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,CAAC,CAAC;QACvF,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,76 @@
1
+ import { type RequestFn } from './request';
2
+ import type { ListPage } from './types';
3
+ /**
4
+ * App-level (instance-wide) user roles: roles that are not tied to an
5
+ * organization, each granting permission keys like `tickets:read`. A user's
6
+ * role keys and the union of their permissions travel on the session token as
7
+ * `app_roles` / `app_permissions`; check them offline with
8
+ * `has(claims, { appPermission: 'tickets:read' })` or `hasAppPermission`.
9
+ */
10
+ export interface AppRole {
11
+ object: 'app_role';
12
+ id: string;
13
+ key: string;
14
+ name: string;
15
+ description: string | null;
16
+ permissions: string[];
17
+ /** On list and create only. */
18
+ users_count?: number;
19
+ created_at: number;
20
+ updated_at: number;
21
+ }
22
+ export interface CreateAppRoleBody {
23
+ /** 2-64 lowercase letters, digits, _ or -, starting with a letter. */
24
+ key: string;
25
+ name: string;
26
+ description?: string | null;
27
+ /** `resource:action` keys (the `org:` namespace is reserved for organizations). */
28
+ permissions?: string[];
29
+ }
30
+ export interface UpdateAppRoleBody {
31
+ name?: string;
32
+ description?: string | null;
33
+ permissions?: string[];
34
+ }
35
+ export interface UserAppRoles {
36
+ object: 'user_app_roles';
37
+ user_id: string;
38
+ roles: AppRole[];
39
+ role_keys: string[];
40
+ permissions: string[];
41
+ }
42
+ /**
43
+ * Change a user's app roles: `roles` replaces the set; `add`/`remove` change it
44
+ * (role keys or ids). Send one form, not both.
45
+ */
46
+ export type SetUserAppRolesBody = {
47
+ roles: string[];
48
+ } | {
49
+ add?: string[];
50
+ remove?: string[];
51
+ };
52
+ export declare function appRolesResource(request: RequestFn): {
53
+ list(): Promise<ListPage<AppRole>>;
54
+ create(body: CreateAppRoleBody): Promise<AppRole>;
55
+ /** By id or key. */
56
+ get(idOrKey: string): Promise<AppRole>;
57
+ update(idOrKey: string, body: UpdateAppRoleBody): Promise<AppRole>;
58
+ delete(idOrKey: string): Promise<{
59
+ object: "app_role";
60
+ id: string;
61
+ deleted: true;
62
+ }>;
63
+ /** The users holding a role. */
64
+ listUsers(idOrKey: string, query?: {
65
+ limit?: number;
66
+ offset?: number;
67
+ }): Promise<ListPage<{
68
+ object: "user_app_role";
69
+ user_id: string;
70
+ role: string;
71
+ }>>;
72
+ /** A user's app roles and effective permissions. */
73
+ getForUser(userId: string): Promise<UserAppRoles>;
74
+ setForUser(userId: string, body: SetUserAppRolesBody): Promise<UserAppRoles>;
75
+ removeFromUser(userId: string, idOrKey: string): Promise<UserAppRoles>;
76
+ };
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.appRolesResource = appRolesResource;
4
+ const request_1 = require("./request");
5
+ function appRolesResource(request) {
6
+ return {
7
+ list() {
8
+ return request({ method: 'GET', path: '/v1/app_roles' });
9
+ },
10
+ create(body) {
11
+ return request({ method: 'POST', path: '/v1/app_roles', body });
12
+ },
13
+ /** By id or key. */
14
+ get(idOrKey) {
15
+ return request({ method: 'GET', path: `/v1/app_roles/${(0, request_1.enc)(idOrKey)}` });
16
+ },
17
+ update(idOrKey, body) {
18
+ return request({ method: 'PATCH', path: `/v1/app_roles/${(0, request_1.enc)(idOrKey)}`, body });
19
+ },
20
+ delete(idOrKey) {
21
+ return request({ method: 'DELETE', path: `/v1/app_roles/${(0, request_1.enc)(idOrKey)}` });
22
+ },
23
+ /** The users holding a role. */
24
+ listUsers(idOrKey, query = {}) {
25
+ return request({ method: 'GET', path: `/v1/app_roles/${(0, request_1.enc)(idOrKey)}/users`, query });
26
+ },
27
+ /** A user's app roles and effective permissions. */
28
+ getForUser(userId) {
29
+ return request({ method: 'GET', path: `/v1/users/${(0, request_1.enc)(userId)}/app_roles` });
30
+ },
31
+ setForUser(userId, body) {
32
+ return request({ method: 'POST', path: `/v1/users/${(0, request_1.enc)(userId)}/app_roles`, body });
33
+ },
34
+ removeFromUser(userId, idOrKey) {
35
+ return request({ method: 'DELETE', path: `/v1/users/${(0, request_1.enc)(userId)}/app_roles/${(0, request_1.enc)(idOrKey)}` });
36
+ },
37
+ };
38
+ }
39
+ //# sourceMappingURL=app-roles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-roles.js","sourceRoot":"","sources":["../../src/client/app-roles.ts"],"names":[],"mappings":";;AAoDA,4CAoCC;AAxFD,uCAAgD;AAoDhD,SAAgB,gBAAgB,CAAC,OAAkB;IACjD,OAAO;QACL,IAAI;YACF,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC;QAC3D,CAAC;QACD,MAAM,CAAC,IAAuB;YAC5B,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;QAClE,CAAC;QACD,oBAAoB;QACpB,GAAG,CAAC,OAAe;YACjB,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,iBAAiB,IAAA,aAAG,EAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3E,CAAC;QACD,MAAM,CAAC,OAAe,EAAE,IAAuB;YAC7C,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,iBAAiB,IAAA,aAAG,EAAC,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACnF,CAAC;QACD,MAAM,CAAC,OAAe;YACpB,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,iBAAiB,IAAA,aAAG,EAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9E,CAAC;QACD,gCAAgC;QAChC,SAAS,CACP,OAAe,EACf,QAA6C,EAAE;YAE/C,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,iBAAiB,IAAA,aAAG,EAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;QACxF,CAAC;QACD,oDAAoD;QACpD,UAAU,CAAC,MAAc;YACvB,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,IAAA,aAAG,EAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;QAChF,CAAC;QACD,UAAU,CAAC,MAAc,EAAE,IAAyB;YAClD,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,IAAA,aAAG,EAAC,MAAM,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;QACvF,CAAC;QACD,cAAc,CAAC,MAAc,EAAE,OAAe;YAC5C,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,IAAA,aAAG,EAAC,MAAM,CAAC,cAAc,IAAA,aAAG,EAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;QACnG,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -25,8 +25,39 @@ export interface AttackProtection {
25
25
  secret_set: boolean;
26
26
  managed_by: 'auth_config_and_captcha_secret';
27
27
  };
28
+ /** Read-only reflections of auth_config.attackProtection. */
29
+ country_restrictions?: {
30
+ mode: 'off' | 'allow' | 'deny';
31
+ countries: string[];
32
+ sign_up: boolean;
33
+ sign_in: boolean;
34
+ block_unknown: boolean;
35
+ managed_by: 'auth_config';
36
+ };
37
+ device_accounts?: {
38
+ enabled: boolean;
39
+ max_accounts: number;
40
+ window_days: number;
41
+ managed_by: 'auth_config';
42
+ };
43
+ /** Dormant-account reactivation alerts (writable). */
44
+ dormant_accounts?: DormantAccountsSettings;
45
+ }
46
+ /**
47
+ * When an account idle for `threshold_days` signs in again: an audit entry, the
48
+ * `user.reactivated` webhook, an optional security notice to the user, and —
49
+ * with `require_mfa` — a second-factor step-up (`on_no_factor` decides for an
50
+ * account without one).
51
+ */
52
+ export interface DormantAccountsSettings {
53
+ enabled: boolean;
54
+ /** 1–3650; default 90. */
55
+ threshold_days: number;
56
+ require_mfa: boolean;
57
+ on_no_factor: 'allow' | 'require_enroll' | 'block';
58
+ notify_user: boolean;
28
59
  }
29
- /** Only the two flags are writable; the rest of the object is read-only. */
60
+ /** The writable parts; the rest of the object is read-only. */
30
61
  export interface UpdateAttackProtectionBody {
31
62
  brute_force?: {
32
63
  enabled?: boolean;
@@ -34,6 +65,7 @@ export interface UpdateAttackProtectionBody {
34
65
  breached_password?: {
35
66
  enabled?: boolean;
36
67
  };
68
+ dormant_accounts?: Partial<DormantAccountsSettings>;
37
69
  }
38
70
  export declare function attackProtectionResource(request: RequestFn): {
39
71
  get(): Promise<AttackProtection>;
@@ -1 +1 @@
1
- {"version":3,"file":"attack-protection.js","sourceRoot":"","sources":["../../src/client/attack-protection.ts"],"names":[],"mappings":";;AAkCA,4DASC;AATD,SAAgB,wBAAwB,CAAC,OAAkB;IACzD,OAAO;QACL,GAAG;YACD,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,uBAAuB,EAAE,CAAC,CAAC;QACnE,CAAC;QACD,MAAM,CAAC,IAAgC;YACrC,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,uBAAuB,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3E,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"attack-protection.js","sourceRoot":"","sources":["../../src/client/attack-protection.ts"],"names":[],"mappings":";;AA8DA,4DASC;AATD,SAAgB,wBAAwB,CAAC,OAAkB;IACzD,OAAO;QACL,GAAG;YACD,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,uBAAuB,EAAE,CAAC,CAAC;QACnE,CAAC;QACD,MAAM,CAAC,IAAgC;YACrC,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,uBAAuB,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3E,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -15,11 +15,22 @@ export interface BillingPlan {
15
15
  amount: string | null;
16
16
  currency: string;
17
17
  features: string[];
18
+ /** Numeric limits the plan grants (the `ent.limits` claim); `-1` = unlimited. */
19
+ limits?: Record<string, unknown>;
18
20
  audience: string;
19
21
  active: boolean;
22
+ /** stripe | polar | dodo | creem | chargebee | autumn | commet */
23
+ provider?: BillingProviderName;
24
+ /** The plan's price reference on its provider. */
25
+ provider_price_id?: string | null;
26
+ /** `base`: the subject's main plan. `addon`: bought alongside it; several may be live. */
27
+ kind?: 'base' | 'addon';
28
+ /** Autumn plans: the feature whose usage tracks the org's member count. */
29
+ seat_feature_id?: string | null;
20
30
  created_at: number;
21
31
  updated_at: number;
22
32
  }
33
+ export type BillingProviderName = 'stripe' | 'polar' | 'dodo' | 'creem' | 'chargebee' | 'autumn' | 'commet';
23
34
  /**
24
35
  * A read view of who is subscribed. `status` is written ONLY by the verified
25
36
  * Stripe webhook, never through this SDK.
@@ -34,9 +45,55 @@ export interface BillingSubscription {
34
45
  stripe_subscription_id: string | null;
35
46
  stripe_customer_id: string | null;
36
47
  current_period_end: number | null;
48
+ provider?: BillingProviderName;
49
+ provider_subscription_id?: string | null;
50
+ provider_customer_id?: string | null;
51
+ quantity?: number;
52
+ cancel_at_period_end?: boolean;
53
+ /** What an entitlement provider (Autumn, Commet) reports this subscription grants. */
54
+ entitlements?: {
55
+ features: string[];
56
+ limits: Record<string, number>;
57
+ } | null;
37
58
  created_at: number;
38
59
  updated_at: number;
39
60
  }
61
+ /** How numeric limits merge when a subject holds several entitling subscriptions. */
62
+ export interface BillingSettings {
63
+ object: 'billing_settings';
64
+ default_limit_merge: 'max' | 'sum';
65
+ limit_merge: Record<string, 'max' | 'sum'>;
66
+ }
67
+ export interface UpdateBillingSettingsBody {
68
+ default_limit_merge?: 'max' | 'sum';
69
+ /** Limit key → `max` | `sum`; replaces the stored map. */
70
+ limit_merge?: Record<string, 'max' | 'sum'>;
71
+ }
72
+ /** May a subject use a feature? */
73
+ export interface CheckBillingFeatureBody {
74
+ subject_type: 'user' | 'org';
75
+ subject_id: string;
76
+ feature: string;
77
+ /** Units about to be used (default 1). */
78
+ required?: number;
79
+ }
80
+ export interface BillingFeatureCheck {
81
+ object: 'billing_feature_check';
82
+ feature: string;
83
+ allowed: boolean;
84
+ /** `provider`: asked live of Autumn/Commet; `atlas`: from the resolved entitlement. */
85
+ source: 'provider' | 'atlas';
86
+ provider: string | null;
87
+ remaining: number | null;
88
+ granted: number | null;
89
+ usage: number | null;
90
+ unlimited: boolean;
91
+ }
92
+ export interface ChangeBillingSubscriptionBody {
93
+ plan_id: string;
94
+ interval?: 'month' | 'year';
95
+ schedule_at_period_end?: boolean;
96
+ }
40
97
  export interface CreateBillingPlanBody {
41
98
  name: string;
42
99
  slug: string;
@@ -49,6 +106,13 @@ export interface CreateBillingPlanBody {
49
106
  /** One of `user`, `org`. Defaults to `user`. */
50
107
  audience?: string;
51
108
  active?: boolean;
109
+ limits?: Record<string, unknown>;
110
+ provider?: BillingProviderName;
111
+ provider_price_id?: string;
112
+ /** `base` (default) or `addon`. */
113
+ kind?: 'base' | 'addon';
114
+ /** Autumn: one of the plan's features; its usage follows the org's member count. */
115
+ seat_feature_id?: string | null;
52
116
  }
53
117
  export interface UpdateBillingPlanBody {
54
118
  name?: string;
@@ -60,6 +124,12 @@ export interface UpdateBillingPlanBody {
60
124
  features?: string[];
61
125
  audience?: string;
62
126
  active?: boolean;
127
+ limits?: Record<string, unknown>;
128
+ provider?: BillingProviderName;
129
+ provider_price_id?: string;
130
+ kind?: 'base' | 'addon';
131
+ /** `null` clears it. */
132
+ seat_feature_id?: string | null;
63
133
  }
64
134
  /** Filter the subscription read view to one subject. */
65
135
  export interface ListSubscriptionsParams {
@@ -83,6 +153,10 @@ export interface ReportBillingUsageBody {
83
153
  /** Non-negative. */
84
154
  quantity: number;
85
155
  idempotency_key: string;
156
+ /** Count against this provider feature (an Autumn feature id / Commet feature code). */
157
+ feature?: string;
158
+ /** Attribute to this subscription when the subject holds several. */
159
+ subscription_id?: string;
86
160
  }
87
161
  export interface BillingUsageReport {
88
162
  object: 'billing_usage';
@@ -109,6 +183,25 @@ export declare function billingResource(request: RequestFn): {
109
183
  deleted: true;
110
184
  }>;
111
185
  listSubscriptions(params?: ListSubscriptionsParams): Promise<ListPage<BillingSubscription>>;
186
+ /** One subscription by id (a subject may hold several: a base plan + add-ons). */
187
+ getSubscription(id: string): Promise<BillingSubscription>;
188
+ /** Move one subscription to another plan or interval (now, or at the period end). */
189
+ changeSubscription(id: string, body: ChangeBillingSubscriptionBody): Promise<BillingSubscription & {
190
+ scheduled: boolean;
191
+ }>;
192
+ /** Cancel one subscription at the period end (default) or now. */
193
+ cancelSubscription(id: string, body?: {
194
+ immediately?: boolean;
195
+ }): Promise<BillingSubscription>;
196
+ /** Undo a cancellation scheduled for the period end. */
197
+ restoreSubscription(id: string): Promise<BillingSubscription>;
198
+ /** Mirror a plan's features/limits from its provider (Autumn, Commet). */
199
+ syncPlanEntitlements(id: string): Promise<BillingPlan>;
200
+ /** How limits merge across a subject's several subscriptions. */
201
+ getSettings(): Promise<BillingSettings>;
202
+ updateSettings(body: UpdateBillingSettingsBody): Promise<BillingSettings>;
203
+ /** May a subject use a feature? Live from Autumn/Commet when the subject is on one. */
204
+ checkFeature(body: CheckBillingFeatureBody): Promise<BillingFeatureCheck>;
112
205
  /**
113
206
  * Adopt an EXISTING Stripe subscription onto a user/org + plan, for
114
207
  * migrating billing into Atlas without re-charging. Read-only on Stripe.
@@ -22,6 +22,37 @@ function billingResource(request) {
22
22
  listSubscriptions(params) {
23
23
  return request({ method: 'GET', path: '/v1/billing/subscriptions', query: { ...params } });
24
24
  },
25
+ /** One subscription by id (a subject may hold several: a base plan + add-ons). */
26
+ getSubscription(id) {
27
+ return request({ method: 'GET', path: `/v1/billing/subscriptions/${(0, request_1.enc)(id)}` });
28
+ },
29
+ /** Move one subscription to another plan or interval (now, or at the period end). */
30
+ changeSubscription(id, body) {
31
+ return request({ method: 'POST', path: `/v1/billing/subscriptions/${(0, request_1.enc)(id)}/change`, body });
32
+ },
33
+ /** Cancel one subscription at the period end (default) or now. */
34
+ cancelSubscription(id, body = {}) {
35
+ return request({ method: 'POST', path: `/v1/billing/subscriptions/${(0, request_1.enc)(id)}/cancel`, body });
36
+ },
37
+ /** Undo a cancellation scheduled for the period end. */
38
+ restoreSubscription(id) {
39
+ return request({ method: 'POST', path: `/v1/billing/subscriptions/${(0, request_1.enc)(id)}/restore` });
40
+ },
41
+ /** Mirror a plan's features/limits from its provider (Autumn, Commet). */
42
+ syncPlanEntitlements(id) {
43
+ return request({ method: 'POST', path: `/v1/billing/plans/${(0, request_1.enc)(id)}/sync_entitlements` });
44
+ },
45
+ /** How limits merge across a subject's several subscriptions. */
46
+ getSettings() {
47
+ return request({ method: 'GET', path: '/v1/billing/settings' });
48
+ },
49
+ updateSettings(body) {
50
+ return request({ method: 'PUT', path: '/v1/billing/settings', body });
51
+ },
52
+ /** May a subject use a feature? Live from Autumn/Commet when the subject is on one. */
53
+ checkFeature(body) {
54
+ return request({ method: 'POST', path: '/v1/billing/check', body });
55
+ },
25
56
  /**
26
57
  * Adopt an EXISTING Stripe subscription onto a user/org + plan, for
27
58
  * migrating billing into Atlas without re-charging. Read-only on Stripe.
@@ -1 +1 @@
1
- {"version":3,"file":"billing-plans.js","sourceRoot":"","sources":["../../src/client/billing-plans.ts"],"names":[],"mappings":";;AA8GA,0CAkDC;AAhKD,uCAAgD;AA8GhD,SAAgB,eAAe,CAAC,OAAkB;IAChD,OAAO;QACL,SAAS;YACP,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,CAAC;QAC/D,CAAC;QACD,UAAU,CAAC,IAA2B,EAAE,cAAuB;YAC7D,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;QACtF,CAAC;QACD,OAAO,CAAC,EAAU;YAChB,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,qBAAqB,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC1E,CAAC;QACD,UAAU,CAAC,EAAU,EAAE,IAA2B;YAChD,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,qBAAqB,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QAClF,CAAC;QACD,UAAU,CAAC,EAAU;YACnB,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,qBAAqB,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7E,CAAC;QACD,iBAAiB,CAAC,MAAgC;YAChD,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,2BAA2B,EAAE,KAAK,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,CAAC,CAAC;QAC7F,CAAC;QACD;;;WAGG;QACH,kBAAkB,CAChB,IAAmC,EACnC,cAAuB;YAEvB,OAAO,OAAO,CAAC;gBACb,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,kCAAkC;gBACxC,IAAI;gBACJ,cAAc;aACf,CAAC,CAAC;QACL,CAAC;QACD,wFAAwF;QACxF,WAAW,CAAC,IAA4B;YACtC,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC,CAAC;QACtE,CAAC;QACD;;;WAGG;QACH,SAAS,CAAC,WAA2B,EAAE,SAAiB;YACtD,OAAO,OAAO,CAAC;gBACb,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,wBAAwB,IAAA,aAAG,EAAC,WAAW,CAAC,IAAI,IAAA,aAAG,EAAC,SAAS,CAAC,aAAa;aAC9E,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"billing-plans.js","sourceRoot":"","sources":["../../src/client/billing-plans.ts"],"names":[],"mappings":"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"}