@stackframe/stack-shared 2.8.32 → 2.8.35
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.
- package/CHANGELOG.md +18 -0
- package/dist/config/schema.d.mts +184 -231
- package/dist/config/schema.d.ts +184 -231
- package/dist/config/schema.js +39 -31
- package/dist/config/schema.js.map +1 -1
- package/dist/esm/config/schema.js +39 -31
- package/dist/esm/config/schema.js.map +1 -1
- package/dist/esm/helpers/production-mode.js +2 -1
- package/dist/esm/helpers/production-mode.js.map +1 -1
- package/dist/esm/interface/admin-interface.js +28 -8
- package/dist/esm/interface/admin-interface.js.map +1 -1
- package/dist/esm/interface/client-interface.js +29 -12
- package/dist/esm/interface/client-interface.js.map +1 -1
- package/dist/esm/interface/crud/users.js +1 -1
- package/dist/esm/interface/crud/users.js.map +1 -1
- package/dist/esm/interface/server-interface.js +22 -10
- package/dist/esm/interface/server-interface.js.map +1 -1
- package/dist/esm/known-errors.js +10 -0
- package/dist/esm/known-errors.js.map +1 -1
- package/dist/esm/schema-fields.js +52 -9
- package/dist/esm/schema-fields.js.map +1 -1
- package/dist/esm/utils/currencies.js +0 -38
- package/dist/esm/utils/currencies.js.map +1 -1
- package/dist/esm/utils/currency-constants.js +42 -0
- package/dist/esm/utils/currency-constants.js.map +1 -0
- package/dist/esm/utils/dates.js +30 -0
- package/dist/esm/utils/dates.js.map +1 -1
- package/dist/esm/utils/jwt.js +42 -37
- package/dist/esm/utils/jwt.js.map +1 -1
- package/dist/esm/utils/strings.js +3 -0
- package/dist/esm/utils/strings.js.map +1 -1
- package/dist/esm/utils/types.js.map +1 -1
- package/dist/esm/utils/urls.js +54 -0
- package/dist/esm/utils/urls.js.map +1 -1
- package/dist/helpers/password.d.mts +1 -1
- package/dist/helpers/password.d.ts +1 -1
- package/dist/helpers/production-mode.js +2 -1
- package/dist/helpers/production-mode.js.map +1 -1
- package/dist/index.d.mts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/interface/admin-interface.d.mts +15 -7
- package/dist/interface/admin-interface.d.ts +15 -7
- package/dist/interface/admin-interface.js +28 -8
- package/dist/interface/admin-interface.js.map +1 -1
- package/dist/interface/client-interface.d.mts +17 -16
- package/dist/interface/client-interface.d.ts +17 -16
- package/dist/interface/client-interface.js +29 -12
- package/dist/interface/client-interface.js.map +1 -1
- package/dist/interface/crud/current-user.d.mts +1 -1
- package/dist/interface/crud/current-user.d.ts +1 -1
- package/dist/interface/crud/project-api-keys.d.mts +4 -4
- package/dist/interface/crud/project-api-keys.d.ts +4 -4
- package/dist/interface/crud/team-member-profiles.d.mts +2 -2
- package/dist/interface/crud/team-member-profiles.d.ts +2 -2
- package/dist/interface/crud/users.d.mts +4 -4
- package/dist/interface/crud/users.d.ts +4 -4
- package/dist/interface/crud/users.js +1 -1
- package/dist/interface/crud/users.js.map +1 -1
- package/dist/interface/server-interface.d.mts +14 -4
- package/dist/interface/server-interface.d.ts +14 -4
- package/dist/interface/server-interface.js +22 -10
- package/dist/interface/server-interface.js.map +1 -1
- package/dist/known-errors.d.mts +6 -3
- package/dist/known-errors.d.ts +6 -3
- package/dist/known-errors.js +10 -0
- package/dist/known-errors.js.map +1 -1
- package/dist/schema-fields.d.mts +28 -8
- package/dist/schema-fields.d.ts +28 -8
- package/dist/schema-fields.js +56 -11
- package/dist/schema-fields.js.map +1 -1
- package/dist/utils/currencies.d.mts +3 -36
- package/dist/utils/currencies.d.ts +3 -36
- package/dist/utils/currencies.js +0 -39
- package/dist/utils/currencies.js.map +1 -1
- package/dist/utils/currency-constants.d.mts +37 -0
- package/dist/utils/currency-constants.d.ts +37 -0
- package/dist/utils/currency-constants.js +67 -0
- package/dist/utils/currency-constants.js.map +1 -0
- package/dist/utils/dates.d.mts +3 -1
- package/dist/utils/dates.d.ts +3 -1
- package/dist/utils/dates.js +32 -0
- package/dist/utils/dates.js.map +1 -1
- package/dist/utils/jwt.d.mts +11 -11
- package/dist/utils/jwt.d.ts +11 -11
- package/dist/utils/jwt.js +44 -42
- package/dist/utils/jwt.js.map +1 -1
- package/dist/utils/strings.js +3 -0
- package/dist/utils/strings.js.map +1 -1
- package/dist/utils/types.d.mts +16 -5
- package/dist/utils/types.d.ts +16 -5
- package/dist/utils/types.js.map +1 -1
- package/dist/utils/urls.d.mts +3 -1
- package/dist/utils/urls.d.ts +3 -1
- package/dist/utils/urls.js +56 -0
- package/dist/utils/urls.js.map +1 -1
- package/package.json +1 -1
|
@@ -7,7 +7,7 @@ import '../utils/strings.js';
|
|
|
7
7
|
import '../utils/errors.js';
|
|
8
8
|
import '../utils/json.js';
|
|
9
9
|
import '../utils/results.js';
|
|
10
|
-
import '../utils/
|
|
10
|
+
import '../utils/currency-constants.js';
|
|
11
11
|
import '../utils/dates.js';
|
|
12
12
|
|
|
13
13
|
declare function getPasswordError(password: string): KnownErrors["PasswordRequirementsNotMet"] | undefined;
|
|
@@ -37,7 +37,8 @@ function getProductionModeErrors(project) {
|
|
|
37
37
|
for (const { domain } of project.config.domains) {
|
|
38
38
|
let url;
|
|
39
39
|
try {
|
|
40
|
-
|
|
40
|
+
const normalizedDomain = domain.replace(/\*+/g, "wildcard-placeholder");
|
|
41
|
+
url = new URL(normalizedDomain);
|
|
41
42
|
} catch (e) {
|
|
42
43
|
(0, import_errors.captureError)("production-mode-domain-not-valid", new import_errors.StackAssertionError("Domain was somehow not a valid URL; we should've caught this when setting the domain in the first place", {
|
|
43
44
|
domain,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/helpers/production-mode.ts"],"sourcesContent":["import { ProjectsCrud } from \"../interface/crud/projects\";\nimport { StackAssertionError, captureError } from \"../utils/errors\";\nimport { isLocalhost } from \"../utils/urls\";\n\nexport type ProductionModeError = {\n message: string,\n relativeFixUrl: `/${string}`,\n};\n\nexport function getProductionModeErrors(project: ProjectsCrud[\"Admin\"][\"Read\"]): ProductionModeError[] {\n const errors: ProductionModeError[] = [];\n const domainsFixUrl = `/projects/${project.id}/domains` as const;\n\n if (project.config.allow_localhost) {\n errors.push({\n message: \"Localhost is not allowed in production mode, turn off 'Allow localhost' in project settings\",\n relativeFixUrl: domainsFixUrl,\n });\n }\n\n for (const { domain } of project.config.domains) {\n let url;\n try {\n url = new URL(
|
|
1
|
+
{"version":3,"sources":["../../src/helpers/production-mode.ts"],"sourcesContent":["import { ProjectsCrud } from \"../interface/crud/projects\";\nimport { StackAssertionError, captureError } from \"../utils/errors\";\nimport { isLocalhost } from \"../utils/urls\";\n\nexport type ProductionModeError = {\n message: string,\n relativeFixUrl: `/${string}`,\n};\n\nexport function getProductionModeErrors(project: ProjectsCrud[\"Admin\"][\"Read\"]): ProductionModeError[] {\n const errors: ProductionModeError[] = [];\n const domainsFixUrl = `/projects/${project.id}/domains` as const;\n\n if (project.config.allow_localhost) {\n errors.push({\n message: \"Localhost is not allowed in production mode, turn off 'Allow localhost' in project settings\",\n relativeFixUrl: domainsFixUrl,\n });\n }\n\n for (const { domain } of project.config.domains) {\n let url;\n try {\n // For wildcard domains, replace wildcards with a valid placeholder to validate the URL structure\n const normalizedDomain = domain.replace(/\\*+/g, 'wildcard-placeholder');\n url = new URL(normalizedDomain);\n } catch (e) {\n captureError(\"production-mode-domain-not-valid\", new StackAssertionError(\"Domain was somehow not a valid URL; we should've caught this when setting the domain in the first place\", {\n domain,\n projectId: project\n }));\n errors.push({\n message: \"Trusted domain is not a valid URL: \" + domain,\n relativeFixUrl: domainsFixUrl,\n });\n continue;\n }\n\n if (isLocalhost(url)) {\n errors.push({\n message: \"Localhost domains are not allowed to be trusted in production mode: \" + domain,\n relativeFixUrl: domainsFixUrl,\n });\n } else if (url.hostname.match(/^\\d+(\\.\\d+)*$/)) {\n errors.push({\n message: \"Direct IPs are not valid for trusted domains in production mode: \" + domain,\n relativeFixUrl: domainsFixUrl,\n });\n } else if (url.protocol !== \"https:\") {\n errors.push({\n message: \"Trusted domains should be HTTPS: \" + domain,\n relativeFixUrl: domainsFixUrl,\n });\n }\n }\n\n return errors;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,oBAAkD;AAClD,kBAA4B;AAOrB,SAAS,wBAAwB,SAA+D;AACrG,QAAM,SAAgC,CAAC;AACvC,QAAM,gBAAgB,aAAa,QAAQ,EAAE;AAE7C,MAAI,QAAQ,OAAO,iBAAiB;AAClC,WAAO,KAAK;AAAA,MACV,SAAS;AAAA,MACT,gBAAgB;AAAA,IAClB,CAAC;AAAA,EACH;AAEA,aAAW,EAAE,OAAO,KAAK,QAAQ,OAAO,SAAS;AAC/C,QAAI;AACJ,QAAI;AAEF,YAAM,mBAAmB,OAAO,QAAQ,QAAQ,sBAAsB;AACtE,YAAM,IAAI,IAAI,gBAAgB;AAAA,IAChC,SAAS,GAAG;AACV,sCAAa,oCAAoC,IAAI,kCAAoB,2GAA2G;AAAA,QAClL;AAAA,QACA,WAAW;AAAA,MACb,CAAC,CAAC;AACF,aAAO,KAAK;AAAA,QACV,SAAS,wCAAwC;AAAA,QACjD,gBAAgB;AAAA,MAClB,CAAC;AACD;AAAA,IACF;AAEA,YAAI,yBAAY,GAAG,GAAG;AACpB,aAAO,KAAK;AAAA,QACV,SAAS,yEAAyE;AAAA,QAClF,gBAAgB;AAAA,MAClB,CAAC;AAAA,IACH,WAAW,IAAI,SAAS,MAAM,eAAe,GAAG;AAC9C,aAAO,KAAK;AAAA,QACV,SAAS,sEAAsE;AAAA,QAC/E,gBAAgB;AAAA,MAClB,CAAC;AAAA,IACH,WAAW,IAAI,aAAa,UAAU;AACpC,aAAO,KAAK;AAAA,QACV,SAAS,sCAAsC;AAAA,QAC/C,gBAAgB;AAAA,MAClB,CAAC;AAAA,IACH;AAAA,EACF;AAEA,SAAO;AACT;","names":[]}
|
package/dist/index.d.mts
CHANGED
|
@@ -29,8 +29,8 @@ import './interface/crud/teams.mjs';
|
|
|
29
29
|
import './interface/crud/users.mjs';
|
|
30
30
|
import './utils/errors.mjs';
|
|
31
31
|
import './utils/json.mjs';
|
|
32
|
-
import '@simplewebauthn/types';
|
|
33
|
-
import './interface/crud/project-api-keys.mjs';
|
|
34
32
|
import './schema-fields.mjs';
|
|
35
|
-
import './utils/
|
|
33
|
+
import './utils/currency-constants.mjs';
|
|
36
34
|
import './utils/dates.mjs';
|
|
35
|
+
import '@simplewebauthn/types';
|
|
36
|
+
import './interface/crud/project-api-keys.mjs';
|
package/dist/index.d.ts
CHANGED
|
@@ -29,8 +29,8 @@ import './interface/crud/teams.js';
|
|
|
29
29
|
import './interface/crud/users.js';
|
|
30
30
|
import './utils/errors.js';
|
|
31
31
|
import './utils/json.js';
|
|
32
|
-
import '@simplewebauthn/types';
|
|
33
|
-
import './interface/crud/project-api-keys.js';
|
|
34
32
|
import './schema-fields.js';
|
|
35
|
-
import './utils/
|
|
33
|
+
import './utils/currency-constants.js';
|
|
36
34
|
import './utils/dates.js';
|
|
35
|
+
import '@simplewebauthn/types';
|
|
36
|
+
import './interface/crud/project-api-keys.js';
|
|
@@ -28,11 +28,11 @@ import './crud/teams.mjs';
|
|
|
28
28
|
import './crud/users.mjs';
|
|
29
29
|
import '../utils/errors.mjs';
|
|
30
30
|
import '../utils/json.mjs';
|
|
31
|
-
import '@simplewebauthn/types';
|
|
32
|
-
import './crud/project-api-keys.mjs';
|
|
33
31
|
import '../schema-fields.mjs';
|
|
34
|
-
import '../utils/
|
|
32
|
+
import '../utils/currency-constants.mjs';
|
|
35
33
|
import '../utils/dates.mjs';
|
|
34
|
+
import '@simplewebauthn/types';
|
|
35
|
+
import './crud/project-api-keys.mjs';
|
|
36
36
|
|
|
37
37
|
type ChatContent = Array<{
|
|
38
38
|
type: "text";
|
|
@@ -97,6 +97,7 @@ declare class StackAdminInterface extends StackServerInterface {
|
|
|
97
97
|
deleteProjectPermissionDefinition(permissionId: string): Promise<void>;
|
|
98
98
|
getSvixToken(): Promise<SvixTokenCrud["Admin"]["Read"]>;
|
|
99
99
|
deleteProject(): Promise<void>;
|
|
100
|
+
transferProject(session: InternalSession, newTeamId: string): Promise<void>;
|
|
100
101
|
getMetrics(): Promise<any>;
|
|
101
102
|
sendTestEmail(data: {
|
|
102
103
|
recipient_email: string;
|
|
@@ -153,13 +154,20 @@ declare class StackAdminInterface extends StackServerInterface {
|
|
|
153
154
|
setupPayments(): Promise<{
|
|
154
155
|
url: string;
|
|
155
156
|
}>;
|
|
157
|
+
getStripeAccountInfo(): Promise<{
|
|
158
|
+
account_id: string;
|
|
159
|
+
charges_enabled: boolean;
|
|
160
|
+
details_submitted: boolean;
|
|
161
|
+
payouts_enabled: boolean;
|
|
162
|
+
}>;
|
|
156
163
|
createStripeWidgetAccountSession(): Promise<{
|
|
157
164
|
client_secret: string;
|
|
158
165
|
}>;
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
166
|
+
testModePurchase(options: {
|
|
167
|
+
price_id: string;
|
|
168
|
+
full_code: string;
|
|
169
|
+
quantity?: number;
|
|
170
|
+
}): Promise<void>;
|
|
163
171
|
}
|
|
164
172
|
|
|
165
173
|
export { type AdminAuthApplicationOptions, type ChatContent, type InternalApiKeyCreateCrudRequest, type InternalApiKeyCreateCrudResponse, StackAdminInterface };
|
|
@@ -28,11 +28,11 @@ import './crud/teams.js';
|
|
|
28
28
|
import './crud/users.js';
|
|
29
29
|
import '../utils/errors.js';
|
|
30
30
|
import '../utils/json.js';
|
|
31
|
-
import '@simplewebauthn/types';
|
|
32
|
-
import './crud/project-api-keys.js';
|
|
33
31
|
import '../schema-fields.js';
|
|
34
|
-
import '../utils/
|
|
32
|
+
import '../utils/currency-constants.js';
|
|
35
33
|
import '../utils/dates.js';
|
|
34
|
+
import '@simplewebauthn/types';
|
|
35
|
+
import './crud/project-api-keys.js';
|
|
36
36
|
|
|
37
37
|
type ChatContent = Array<{
|
|
38
38
|
type: "text";
|
|
@@ -97,6 +97,7 @@ declare class StackAdminInterface extends StackServerInterface {
|
|
|
97
97
|
deleteProjectPermissionDefinition(permissionId: string): Promise<void>;
|
|
98
98
|
getSvixToken(): Promise<SvixTokenCrud["Admin"]["Read"]>;
|
|
99
99
|
deleteProject(): Promise<void>;
|
|
100
|
+
transferProject(session: InternalSession, newTeamId: string): Promise<void>;
|
|
100
101
|
getMetrics(): Promise<any>;
|
|
101
102
|
sendTestEmail(data: {
|
|
102
103
|
recipient_email: string;
|
|
@@ -153,13 +154,20 @@ declare class StackAdminInterface extends StackServerInterface {
|
|
|
153
154
|
setupPayments(): Promise<{
|
|
154
155
|
url: string;
|
|
155
156
|
}>;
|
|
157
|
+
getStripeAccountInfo(): Promise<{
|
|
158
|
+
account_id: string;
|
|
159
|
+
charges_enabled: boolean;
|
|
160
|
+
details_submitted: boolean;
|
|
161
|
+
payouts_enabled: boolean;
|
|
162
|
+
}>;
|
|
156
163
|
createStripeWidgetAccountSession(): Promise<{
|
|
157
164
|
client_secret: string;
|
|
158
165
|
}>;
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
166
|
+
testModePurchase(options: {
|
|
167
|
+
price_id: string;
|
|
168
|
+
full_code: string;
|
|
169
|
+
quantity?: number;
|
|
170
|
+
}): Promise<void>;
|
|
163
171
|
}
|
|
164
172
|
|
|
165
173
|
export { type AdminAuthApplicationOptions, type ChatContent, type InternalApiKeyCreateCrudRequest, type InternalApiKeyCreateCrudResponse, StackAdminInterface };
|
|
@@ -219,6 +219,22 @@ var StackAdminInterface = class extends import_server_interface.StackServerInter
|
|
|
219
219
|
null
|
|
220
220
|
);
|
|
221
221
|
}
|
|
222
|
+
async transferProject(session, newTeamId) {
|
|
223
|
+
await this.sendAdminRequest(
|
|
224
|
+
"/internal/projects/transfer",
|
|
225
|
+
{
|
|
226
|
+
method: "POST",
|
|
227
|
+
headers: {
|
|
228
|
+
"content-type": "application/json"
|
|
229
|
+
},
|
|
230
|
+
body: JSON.stringify({
|
|
231
|
+
project_id: this.options.projectId,
|
|
232
|
+
new_team_id: newTeamId
|
|
233
|
+
})
|
|
234
|
+
},
|
|
235
|
+
session
|
|
236
|
+
);
|
|
237
|
+
}
|
|
222
238
|
async getMetrics() {
|
|
223
239
|
const response = await this.sendAdminRequest(
|
|
224
240
|
"/internal/metrics",
|
|
@@ -417,6 +433,14 @@ var StackAdminInterface = class extends import_server_interface.StackServerInter
|
|
|
417
433
|
);
|
|
418
434
|
return await response.json();
|
|
419
435
|
}
|
|
436
|
+
async getStripeAccountInfo() {
|
|
437
|
+
const response = await this.sendAdminRequest(
|
|
438
|
+
"/internal/payments/stripe/account-info",
|
|
439
|
+
{},
|
|
440
|
+
null
|
|
441
|
+
);
|
|
442
|
+
return await response.json();
|
|
443
|
+
}
|
|
420
444
|
async createStripeWidgetAccountSession() {
|
|
421
445
|
const response = await this.sendAdminRequest(
|
|
422
446
|
"/internal/payments/stripe-widgets/account-session",
|
|
@@ -431,20 +455,16 @@ var StackAdminInterface = class extends import_server_interface.StackServerInter
|
|
|
431
455
|
);
|
|
432
456
|
return await response.json();
|
|
433
457
|
}
|
|
434
|
-
async
|
|
435
|
-
|
|
436
|
-
"/payments/
|
|
458
|
+
async testModePurchase(options) {
|
|
459
|
+
await this.sendAdminRequest(
|
|
460
|
+
"/internal/payments/test-mode-purchase-session",
|
|
437
461
|
{
|
|
438
462
|
method: "POST",
|
|
439
|
-
headers: {
|
|
440
|
-
"content-type": "application/json"
|
|
441
|
-
},
|
|
463
|
+
headers: { "content-type": "application/json" },
|
|
442
464
|
body: JSON.stringify(options)
|
|
443
465
|
},
|
|
444
466
|
null
|
|
445
467
|
);
|
|
446
|
-
const result = await response.json();
|
|
447
|
-
return result.url;
|
|
448
468
|
}
|
|
449
469
|
};
|
|
450
470
|
// Annotate the CommonJS export names for ESM import in node:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/interface/admin-interface.ts"],"sourcesContent":["import { InternalSession } from \"../sessions\";\nimport { ConfigCrud, ConfigOverrideCrud } from \"./crud/config\";\nimport { InternalEmailsCrud } from \"./crud/emails\";\nimport { InternalApiKeysCrud } from \"./crud/internal-api-keys\";\nimport { ProjectPermissionDefinitionsCrud } from \"./crud/project-permissions\";\nimport { ProjectsCrud } from \"./crud/projects\";\nimport { SvixTokenCrud } from \"./crud/svix-token\";\nimport { TeamPermissionDefinitionsCrud } from \"./crud/team-permissions\";\nimport { ServerAuthApplicationOptions, StackServerInterface } from \"./server-interface\";\n\nexport type ChatContent = Array<\n | { type: \"text\", text: string }\n | { type: \"tool-call\", toolName: string, toolCallId: string, args: any, argsText: string, result: any }\n>;\n\nexport type AdminAuthApplicationOptions = ServerAuthApplicationOptions &(\n | {\n superSecretAdminKey: string,\n }\n | {\n projectOwnerSession: InternalSession,\n }\n);\n\nexport type InternalApiKeyCreateCrudRequest = {\n has_publishable_client_key: boolean,\n has_secret_server_key: boolean,\n has_super_secret_admin_key: boolean,\n expires_at_millis: number,\n description: string,\n};\n\nexport type InternalApiKeyCreateCrudResponse = InternalApiKeysCrud[\"Admin\"][\"Read\"] & {\n publishable_client_key?: string,\n secret_server_key?: string,\n super_secret_admin_key?: string,\n};\n\nexport class StackAdminInterface extends StackServerInterface {\n constructor(public readonly options: AdminAuthApplicationOptions) {\n super(options);\n }\n\n public async sendAdminRequest(path: string, options: RequestInit, session: InternalSession | null, requestType: \"admin\" = \"admin\") {\n return await this.sendServerRequest(\n path,\n {\n ...options,\n headers: {\n \"x-stack-super-secret-admin-key\": \"superSecretAdminKey\" in this.options ? this.options.superSecretAdminKey : \"\",\n ...options.headers,\n },\n },\n session,\n requestType,\n );\n }\n\n async getProject(): Promise<ProjectsCrud[\"Admin\"][\"Read\"]> {\n const response = await this.sendAdminRequest(\n \"/internal/projects/current\",\n {\n method: \"GET\",\n },\n null,\n );\n return await response.json();\n }\n\n async updateProject(update: ProjectsCrud[\"Admin\"][\"Update\"]): Promise<ProjectsCrud[\"Admin\"][\"Read\"]> {\n const response = await this.sendAdminRequest(\n \"/internal/projects/current\",\n {\n method: \"PATCH\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(update),\n },\n null,\n );\n return await response.json();\n }\n\n async createInternalApiKey(\n options: InternalApiKeyCreateCrudRequest,\n ): Promise<InternalApiKeyCreateCrudResponse> {\n const response = await this.sendAdminRequest(\n \"/internal/api-keys\",\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(options),\n },\n null,\n );\n return await response.json();\n }\n\n async listInternalApiKeys(): Promise<InternalApiKeysCrud[\"Admin\"][\"Read\"][]> {\n const response = await this.sendAdminRequest(\"/internal/api-keys\", {}, null);\n const result = await response.json() as InternalApiKeysCrud[\"Admin\"][\"List\"];\n return result.items;\n }\n\n async revokeInternalApiKeyById(id: string) {\n await this.sendAdminRequest(\n `/internal/api-keys/${id}`, {\n method: \"PATCH\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({\n revoked: true,\n }),\n },\n null,\n );\n }\n\n async getInternalApiKey(id: string, session: InternalSession): Promise<InternalApiKeysCrud[\"Admin\"][\"Read\"]> {\n const response = await this.sendAdminRequest(`/internal/api-keys/${id}`, {}, session);\n return await response.json();\n }\n\n async listInternalEmailTemplates(): Promise<{ id: string, display_name: string, theme_id?: string, tsx_source: string }[]> {\n const response = await this.sendAdminRequest(`/internal/email-templates`, {}, null);\n const result = await response.json() as { templates: { id: string, display_name: string, theme_id?: string, tsx_source: string }[] };\n return result.templates;\n }\n\n async listEmailThemes(): Promise<{ id: string, display_name: string }[]> {\n const response = await this.sendAdminRequest(`/internal/email-themes`, {}, null);\n const result = await response.json() as { themes: { id: string, display_name: string }[] };\n return result.themes;\n }\n\n\n // Team permission definitions methods\n async listTeamPermissionDefinitions(): Promise<TeamPermissionDefinitionsCrud['Admin']['Read'][]> {\n const response = await this.sendAdminRequest(`/team-permission-definitions`, {}, null);\n const result = await response.json() as TeamPermissionDefinitionsCrud['Admin']['List'];\n return result.items;\n }\n\n async createTeamPermissionDefinition(data: TeamPermissionDefinitionsCrud['Admin']['Create']): Promise<TeamPermissionDefinitionsCrud['Admin']['Read']> {\n const response = await this.sendAdminRequest(\n \"/team-permission-definitions\",\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(data),\n },\n null,\n );\n return await response.json();\n }\n\n async updateTeamPermissionDefinition(permissionId: string, data: TeamPermissionDefinitionsCrud['Admin']['Update']): Promise<TeamPermissionDefinitionsCrud['Admin']['Read']> {\n const response = await this.sendAdminRequest(\n `/team-permission-definitions/${permissionId}`,\n {\n method: \"PATCH\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(data),\n },\n null,\n );\n return await response.json();\n }\n\n async deleteTeamPermissionDefinition(permissionId: string): Promise<void> {\n await this.sendAdminRequest(\n `/team-permission-definitions/${permissionId}`,\n { method: \"DELETE\" },\n null,\n );\n }\n\n async listProjectPermissionDefinitions(): Promise<ProjectPermissionDefinitionsCrud['Admin']['Read'][]> {\n const response = await this.sendAdminRequest(`/project-permission-definitions`, {}, null);\n const result = await response.json() as ProjectPermissionDefinitionsCrud['Admin']['List'];\n return result.items;\n }\n\n async createProjectPermissionDefinition(data: ProjectPermissionDefinitionsCrud['Admin']['Create']): Promise<ProjectPermissionDefinitionsCrud['Admin']['Read']> {\n const response = await this.sendAdminRequest(\n \"/project-permission-definitions\",\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(data),\n },\n null,\n );\n return await response.json();\n }\n\n async updateProjectPermissionDefinition(permissionId: string, data: ProjectPermissionDefinitionsCrud['Admin']['Update']): Promise<ProjectPermissionDefinitionsCrud['Admin']['Read']> {\n const response = await this.sendAdminRequest(\n `/project-permission-definitions/${permissionId}`,\n {\n method: \"PATCH\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(data),\n },\n null,\n );\n return await response.json();\n }\n\n async deleteProjectPermissionDefinition(permissionId: string): Promise<void> {\n await this.sendAdminRequest(\n `/project-permission-definitions/${permissionId}`,\n { method: \"DELETE\" },\n null,\n );\n }\n\n async getSvixToken(): Promise<SvixTokenCrud[\"Admin\"][\"Read\"]> {\n const response = await this.sendAdminRequest(\n \"/webhooks/svix-token\",\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({}),\n },\n null,\n );\n return await response.json();\n }\n\n async deleteProject(): Promise<void> {\n await this.sendAdminRequest(\n \"/internal/projects/current\",\n {\n method: \"DELETE\",\n },\n null,\n );\n }\n\n async getMetrics(): Promise<any> {\n const response = await this.sendAdminRequest(\n \"/internal/metrics\",\n {\n method: \"GET\",\n },\n null,\n );\n return await response.json();\n }\n\n async sendTestEmail(data: {\n recipient_email: string,\n email_config: {\n host: string,\n port: number,\n username: string,\n password: string,\n sender_email: string,\n sender_name: string,\n },\n }): Promise<{ success: boolean, error_message?: string }> {\n const response = await this.sendAdminRequest(`/internal/send-test-email`, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(data),\n }, null);\n return await response.json();\n }\n\n async listSentEmails(): Promise<InternalEmailsCrud[\"Admin\"][\"List\"]> {\n const response = await this.sendAdminRequest(\"/internal/emails\", {\n method: \"GET\",\n }, null);\n return await response.json();\n }\n\n async sendSignInInvitationEmail(\n email: string,\n callbackUrl: string,\n ): Promise<void> {\n await this.sendAdminRequest(\n \"/internal/send-sign-in-invitation\",\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n email,\n callback_url: callbackUrl,\n }),\n },\n null,\n );\n }\n\n\n async sendChatMessage(\n threadId: string,\n contextType: \"email-theme\" | \"email-template\",\n messages: Array<{ role: string, content: any }>,\n abortSignal?: AbortSignal,\n ): Promise<{ content: ChatContent }> {\n const response = await this.sendAdminRequest(\n `/internal/ai-chat/${threadId}`,\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({ context_type: contextType, messages }),\n signal: abortSignal,\n },\n null,\n );\n return await response.json();\n }\n\n async saveChatMessage(threadId: string, message: any): Promise<void> {\n await this.sendAdminRequest(\n `/internal/ai-chat/${threadId}`,\n {\n method: \"PATCH\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({ message }),\n },\n null,\n );\n }\n\n async listChatMessages(threadId: string): Promise<{ messages: Array<any> }> {\n const response = await this.sendAdminRequest(\n `/internal/ai-chat/${threadId}`,\n { method: \"GET\" },\n null,\n );\n return await response.json();\n }\n\n async renderEmailPreview(options: { themeId?: string | null | false, themeTsxSource?: string, templateId?: string, templateTsxSource?: string }): Promise<{ html: string }> {\n const response = await this.sendAdminRequest(`/emails/render-email`, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({\n theme_id: options.themeId,\n theme_tsx_source: options.themeTsxSource,\n template_id: options.templateId,\n template_tsx_source: options.templateTsxSource,\n }),\n }, null);\n return await response.json();\n }\n\n async createEmailTheme(displayName: string): Promise<{ id: string }> {\n const response = await this.sendAdminRequest(\n `/internal/email-themes`,\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({\n display_name: displayName,\n }),\n },\n null,\n );\n return await response.json();\n }\n\n async getEmailTheme(id: string): Promise<{ display_name: string, tsx_source: string }> {\n const response = await this.sendAdminRequest(\n `/internal/email-themes/${id}`,\n { method: \"GET\" },\n null,\n );\n return await response.json();\n }\n\n async updateEmailTheme(id: string, tsxSource: string): Promise<void> {\n await this.sendAdminRequest(\n `/internal/email-themes/${id}`,\n {\n method: \"PATCH\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({\n tsx_source: tsxSource,\n }),\n },\n null,\n );\n }\n\n async updateEmailTemplate(id: string, tsxSource: string, themeId: string | null | false): Promise<{ rendered_html: string }> {\n const response = await this.sendAdminRequest(\n `/internal/email-templates/${id}`,\n {\n method: \"PATCH\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({ tsx_source: tsxSource, theme_id: themeId }),\n },\n null,\n );\n return await response.json();\n }\n\n async getConfig(): Promise<ConfigCrud[\"Admin\"][\"Read\"]> {\n const response = await this.sendAdminRequest(\n `/internal/config`,\n { method: \"GET\" },\n null,\n );\n return await response.json();\n }\n\n async updateConfig(data: { configOverride: any }): Promise<ConfigOverrideCrud[\"Admin\"][\"Read\"]> {\n const response = await this.sendAdminRequest(\n `/internal/config/override`,\n {\n method: \"PATCH\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({ config_override_string: JSON.stringify(data.configOverride) }),\n },\n null,\n );\n return await response.json();\n }\n async createEmailTemplate(displayName: string): Promise<{ id: string }> {\n const response = await this.sendAdminRequest(\n `/internal/email-templates`,\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({\n display_name: displayName,\n }),\n },\n null,\n );\n return await response.json();\n }\n\n async setupPayments(): Promise<{ url: string }> {\n const response = await this.sendAdminRequest(\n \"/internal/payments/setup\",\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({}),\n },\n null,\n );\n return await response.json();\n }\n\n async createStripeWidgetAccountSession(): Promise<{ client_secret: string }> {\n const response = await this.sendAdminRequest(\n \"/internal/payments/stripe-widgets/account-session\",\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({}),\n },\n null,\n );\n return await response.json();\n }\n\n async createPurchaseUrl(options: { customer_id: string, offer_id: string }): Promise<string> {\n const response = await this.sendAdminRequest(\n \"/payments/purchases/create-purchase-url\",\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(options),\n },\n null,\n );\n const result = await response.json() as { url: string };\n return result.url;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA,8BAAmE;AA8B5D,IAAM,sBAAN,cAAkC,6CAAqB;AAAA,EAC5D,YAA4B,SAAsC;AAChE,UAAM,OAAO;AADa;AAAA,EAE5B;AAAA,EAEA,MAAa,iBAAiB,MAAc,SAAsB,SAAiC,cAAuB,SAAS;AACjI,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA;AAAA,QACE,GAAG;AAAA,QACH,SAAS;AAAA,UACP,kCAAkC,yBAAyB,KAAK,UAAU,KAAK,QAAQ,sBAAsB;AAAA,UAC7G,GAAG,QAAQ;AAAA,QACb;AAAA,MACF;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,aAAqD;AACzD,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,MACV;AAAA,MACA;AAAA,IACF;AACA,WAAO,MAAM,SAAS,KAAK;AAAA,EAC7B;AAAA,EAEA,MAAM,cAAc,QAAiF;AACnG,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB;AAAA,QAClB;AAAA,QACA,MAAM,KAAK,UAAU,MAAM;AAAA,MAC7B;AAAA,MACA;AAAA,IACF;AACA,WAAO,MAAM,SAAS,KAAK;AAAA,EAC7B;AAAA,EAEA,MAAM,qBACJ,SAC2C;AAC3C,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB;AAAA,QAClB;AAAA,QACA,MAAM,KAAK,UAAU,OAAO;AAAA,MAC9B;AAAA,MACA;AAAA,IACF;AACA,WAAO,MAAM,SAAS,KAAK;AAAA,EAC7B;AAAA,EAEA,MAAM,sBAAuE;AAC3E,UAAM,WAAW,MAAM,KAAK,iBAAiB,sBAAsB,CAAC,GAAG,IAAI;AAC3E,UAAM,SAAS,MAAM,SAAS,KAAK;AACnC,WAAO,OAAO;AAAA,EAChB;AAAA,EAEA,MAAM,yBAAyB,IAAY;AACzC,UAAM,KAAK;AAAA,MACT,sBAAsB,EAAE;AAAA,MAAI;AAAA,QAC1B,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB;AAAA,QAClB;AAAA,QACA,MAAM,KAAK,UAAU;AAAA,UACnB,SAAS;AAAA,QACX,CAAC;AAAA,MACH;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,kBAAkB,IAAY,SAAyE;AAC3G,UAAM,WAAW,MAAM,KAAK,iBAAiB,sBAAsB,EAAE,IAAI,CAAC,GAAG,OAAO;AACpF,WAAO,MAAM,SAAS,KAAK;AAAA,EAC7B;AAAA,EAEA,MAAM,6BAAqH;AACzH,UAAM,WAAW,MAAM,KAAK,iBAAiB,6BAA6B,CAAC,GAAG,IAAI;AAClF,UAAM,SAAS,MAAM,SAAS,KAAK;AACnC,WAAO,OAAO;AAAA,EAChB;AAAA,EAEA,MAAM,kBAAmE;AACvE,UAAM,WAAW,MAAM,KAAK,iBAAiB,0BAA0B,CAAC,GAAG,IAAI;AAC/E,UAAM,SAAS,MAAM,SAAS,KAAK;AACnC,WAAO,OAAO;AAAA,EAChB;AAAA;AAAA,EAIA,MAAM,gCAA2F;AAC/F,UAAM,WAAW,MAAM,KAAK,iBAAiB,gCAAgC,CAAC,GAAG,IAAI;AACrF,UAAM,SAAS,MAAM,SAAS,KAAK;AACnC,WAAO,OAAO;AAAA,EAChB;AAAA,EAEA,MAAM,+BAA+B,MAAiH;AACpJ,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB;AAAA,QAClB;AAAA,QACA,MAAM,KAAK,UAAU,IAAI;AAAA,MAC3B;AAAA,MACA;AAAA,IACF;AACA,WAAO,MAAM,SAAS,KAAK;AAAA,EAC7B;AAAA,EAEA,MAAM,+BAA+B,cAAsB,MAAiH;AAC1K,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B,gCAAgC,YAAY;AAAA,MAC5C;AAAA,QACE,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB;AAAA,QAClB;AAAA,QACA,MAAM,KAAK,UAAU,IAAI;AAAA,MAC3B;AAAA,MACA;AAAA,IACF;AACA,WAAO,MAAM,SAAS,KAAK;AAAA,EAC7B;AAAA,EAEA,MAAM,+BAA+B,cAAqC;AACxE,UAAM,KAAK;AAAA,MACT,gCAAgC,YAAY;AAAA,MAC5C,EAAE,QAAQ,SAAS;AAAA,MACnB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,mCAAiG;AACrG,UAAM,WAAW,MAAM,KAAK,iBAAiB,mCAAmC,CAAC,GAAG,IAAI;AACxF,UAAM,SAAS,MAAM,SAAS,KAAK;AACnC,WAAO,OAAO;AAAA,EAChB;AAAA,EAEA,MAAM,kCAAkC,MAAuH;AAC7J,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB;AAAA,QAClB;AAAA,QACA,MAAM,KAAK,UAAU,IAAI;AAAA,MAC3B;AAAA,MACA;AAAA,IACF;AACA,WAAO,MAAM,SAAS,KAAK;AAAA,EAC7B;AAAA,EAEA,MAAM,kCAAkC,cAAsB,MAAuH;AACnL,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B,mCAAmC,YAAY;AAAA,MAC/C;AAAA,QACE,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB;AAAA,QAClB;AAAA,QACA,MAAM,KAAK,UAAU,IAAI;AAAA,MAC3B;AAAA,MACA;AAAA,IACF;AACA,WAAO,MAAM,SAAS,KAAK;AAAA,EAC7B;AAAA,EAEA,MAAM,kCAAkC,cAAqC;AAC3E,UAAM,KAAK;AAAA,MACT,mCAAmC,YAAY;AAAA,MAC/C,EAAE,QAAQ,SAAS;AAAA,MACnB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,eAAwD;AAC5D,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB;AAAA,QAClB;AAAA,QACA,MAAM,KAAK,UAAU,CAAC,CAAC;AAAA,MACzB;AAAA,MACA;AAAA,IACF;AACA,WAAO,MAAM,SAAS,KAAK;AAAA,EAC7B;AAAA,EAEA,MAAM,gBAA+B;AACnC,UAAM,KAAK;AAAA,MACT;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,MACV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,aAA2B;AAC/B,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,MACV;AAAA,MACA;AAAA,IACF;AACA,WAAO,MAAM,SAAS,KAAK;AAAA,EAC7B;AAAA,EAEA,MAAM,cAAc,MAUsC;AACxD,UAAM,WAAW,MAAM,KAAK,iBAAiB,6BAA6B;AAAA,MACxE,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,gBAAgB;AAAA,MAClB;AAAA,MACA,MAAM,KAAK,UAAU,IAAI;AAAA,IAC3B,GAAG,IAAI;AACP,WAAO,MAAM,SAAS,KAAK;AAAA,EAC7B;AAAA,EAEA,MAAM,iBAA+D;AACnE,UAAM,WAAW,MAAM,KAAK,iBAAiB,oBAAoB;AAAA,MAC/D,QAAQ;AAAA,IACV,GAAG,IAAI;AACP,WAAO,MAAM,SAAS,KAAK;AAAA,EAC7B;AAAA,EAEA,MAAM,0BACJ,OACA,aACe;AACf,UAAM,KAAK;AAAA,MACT;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB;AAAA,QAClB;AAAA,QACA,MAAM,KAAK,UAAU;AAAA,UACnB;AAAA,UACA,cAAc;AAAA,QAChB,CAAC;AAAA,MACH;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAGA,MAAM,gBACJ,UACA,aACA,UACA,aACmC;AACnC,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B,qBAAqB,QAAQ;AAAA,MAC7B;AAAA,QACE,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB;AAAA,QAClB;AAAA,QACA,MAAM,KAAK,UAAU,EAAE,cAAc,aAAa,SAAS,CAAC;AAAA,QAC5D,QAAQ;AAAA,MACV;AAAA,MACA;AAAA,IACF;AACA,WAAO,MAAM,SAAS,KAAK;AAAA,EAC7B;AAAA,EAEA,MAAM,gBAAgB,UAAkB,SAA6B;AACnE,UAAM,KAAK;AAAA,MACT,qBAAqB,QAAQ;AAAA,MAC7B;AAAA,QACE,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB;AAAA,QAClB;AAAA,QACA,MAAM,KAAK,UAAU,EAAE,QAAQ,CAAC;AAAA,MAClC;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,iBAAiB,UAAqD;AAC1E,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B,qBAAqB,QAAQ;AAAA,MAC7B,EAAE,QAAQ,MAAM;AAAA,MAChB;AAAA,IACF;AACA,WAAO,MAAM,SAAS,KAAK;AAAA,EAC7B;AAAA,EAEA,MAAM,mBAAmB,SAAmJ;AAC1K,UAAM,WAAW,MAAM,KAAK,iBAAiB,wBAAwB;AAAA,MACnE,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,gBAAgB;AAAA,MAClB;AAAA,MACA,MAAM,KAAK,UAAU;AAAA,QACnB,UAAU,QAAQ;AAAA,QAClB,kBAAkB,QAAQ;AAAA,QAC1B,aAAa,QAAQ;AAAA,QACrB,qBAAqB,QAAQ;AAAA,MAC/B,CAAC;AAAA,IACH,GAAG,IAAI;AACP,WAAO,MAAM,SAAS,KAAK;AAAA,EAC7B;AAAA,EAEA,MAAM,iBAAiB,aAA8C;AACnE,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB;AAAA,QAClB;AAAA,QACA,MAAM,KAAK,UAAU;AAAA,UACnB,cAAc;AAAA,QAChB,CAAC;AAAA,MACH;AAAA,MACA;AAAA,IACF;AACA,WAAO,MAAM,SAAS,KAAK;AAAA,EAC7B;AAAA,EAEA,MAAM,cAAc,IAAmE;AACrF,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B,0BAA0B,EAAE;AAAA,MAC5B,EAAE,QAAQ,MAAM;AAAA,MAChB;AAAA,IACF;AACA,WAAO,MAAM,SAAS,KAAK;AAAA,EAC7B;AAAA,EAEA,MAAM,iBAAiB,IAAY,WAAkC;AACnE,UAAM,KAAK;AAAA,MACT,0BAA0B,EAAE;AAAA,MAC5B;AAAA,QACE,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB;AAAA,QAClB;AAAA,QACA,MAAM,KAAK,UAAU;AAAA,UACnB,YAAY;AAAA,QACd,CAAC;AAAA,MACH;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,oBAAoB,IAAY,WAAmB,SAAoE;AAC3H,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B,6BAA6B,EAAE;AAAA,MAC/B;AAAA,QACE,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB;AAAA,QAClB;AAAA,QACA,MAAM,KAAK,UAAU,EAAE,YAAY,WAAW,UAAU,QAAQ,CAAC;AAAA,MACnE;AAAA,MACA;AAAA,IACF;AACA,WAAO,MAAM,SAAS,KAAK;AAAA,EAC7B;AAAA,EAEA,MAAM,YAAkD;AACtD,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B;AAAA,MACA,EAAE,QAAQ,MAAM;AAAA,MAChB;AAAA,IACF;AACA,WAAO,MAAM,SAAS,KAAK;AAAA,EAC7B;AAAA,EAEA,MAAM,aAAa,MAA6E;AAC9F,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB;AAAA,QAClB;AAAA,QACA,MAAM,KAAK,UAAU,EAAE,wBAAwB,KAAK,UAAU,KAAK,cAAc,EAAE,CAAC;AAAA,MACtF;AAAA,MACA;AAAA,IACF;AACA,WAAO,MAAM,SAAS,KAAK;AAAA,EAC7B;AAAA,EACA,MAAM,oBAAoB,aAA8C;AACtE,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB;AAAA,QAClB;AAAA,QACA,MAAM,KAAK,UAAU;AAAA,UACnB,cAAc;AAAA,QAChB,CAAC;AAAA,MACH;AAAA,MACA;AAAA,IACF;AACA,WAAO,MAAM,SAAS,KAAK;AAAA,EAC7B;AAAA,EAEA,MAAM,gBAA0C;AAC9C,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB;AAAA,QAClB;AAAA,QACA,MAAM,KAAK,UAAU,CAAC,CAAC;AAAA,MACzB;AAAA,MACA;AAAA,IACF;AACA,WAAO,MAAM,SAAS,KAAK;AAAA,EAC7B;AAAA,EAEA,MAAM,mCAAuE;AAC3E,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB;AAAA,QAClB;AAAA,QACA,MAAM,KAAK,UAAU,CAAC,CAAC;AAAA,MACzB;AAAA,MACA;AAAA,IACF;AACA,WAAO,MAAM,SAAS,KAAK;AAAA,EAC7B;AAAA,EAEA,MAAM,kBAAkB,SAAqE;AAC3F,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB;AAAA,QAClB;AAAA,QACA,MAAM,KAAK,UAAU,OAAO;AAAA,MAC9B;AAAA,MACA;AAAA,IACF;AACA,UAAM,SAAS,MAAM,SAAS,KAAK;AACnC,WAAO,OAAO;AAAA,EAChB;AACF;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/interface/admin-interface.ts"],"sourcesContent":["import { InternalSession } from \"../sessions\";\nimport { ConfigCrud, ConfigOverrideCrud } from \"./crud/config\";\nimport { InternalEmailsCrud } from \"./crud/emails\";\nimport { InternalApiKeysCrud } from \"./crud/internal-api-keys\";\nimport { ProjectPermissionDefinitionsCrud } from \"./crud/project-permissions\";\nimport { ProjectsCrud } from \"./crud/projects\";\nimport { SvixTokenCrud } from \"./crud/svix-token\";\nimport { TeamPermissionDefinitionsCrud } from \"./crud/team-permissions\";\nimport { ServerAuthApplicationOptions, StackServerInterface } from \"./server-interface\";\n\nexport type ChatContent = Array<\n | { type: \"text\", text: string }\n | { type: \"tool-call\", toolName: string, toolCallId: string, args: any, argsText: string, result: any }\n>;\n\nexport type AdminAuthApplicationOptions = ServerAuthApplicationOptions &(\n | {\n superSecretAdminKey: string,\n }\n | {\n projectOwnerSession: InternalSession,\n }\n);\n\nexport type InternalApiKeyCreateCrudRequest = {\n has_publishable_client_key: boolean,\n has_secret_server_key: boolean,\n has_super_secret_admin_key: boolean,\n expires_at_millis: number,\n description: string,\n};\n\nexport type InternalApiKeyCreateCrudResponse = InternalApiKeysCrud[\"Admin\"][\"Read\"] & {\n publishable_client_key?: string,\n secret_server_key?: string,\n super_secret_admin_key?: string,\n};\n\nexport class StackAdminInterface extends StackServerInterface {\n constructor(public readonly options: AdminAuthApplicationOptions) {\n super(options);\n }\n\n public async sendAdminRequest(path: string, options: RequestInit, session: InternalSession | null, requestType: \"admin\" = \"admin\") {\n return await this.sendServerRequest(\n path,\n {\n ...options,\n headers: {\n \"x-stack-super-secret-admin-key\": \"superSecretAdminKey\" in this.options ? this.options.superSecretAdminKey : \"\",\n ...options.headers,\n },\n },\n session,\n requestType,\n );\n }\n\n async getProject(): Promise<ProjectsCrud[\"Admin\"][\"Read\"]> {\n const response = await this.sendAdminRequest(\n \"/internal/projects/current\",\n {\n method: \"GET\",\n },\n null,\n );\n return await response.json();\n }\n\n async updateProject(update: ProjectsCrud[\"Admin\"][\"Update\"]): Promise<ProjectsCrud[\"Admin\"][\"Read\"]> {\n const response = await this.sendAdminRequest(\n \"/internal/projects/current\",\n {\n method: \"PATCH\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(update),\n },\n null,\n );\n return await response.json();\n }\n\n async createInternalApiKey(\n options: InternalApiKeyCreateCrudRequest,\n ): Promise<InternalApiKeyCreateCrudResponse> {\n const response = await this.sendAdminRequest(\n \"/internal/api-keys\",\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(options),\n },\n null,\n );\n return await response.json();\n }\n\n async listInternalApiKeys(): Promise<InternalApiKeysCrud[\"Admin\"][\"Read\"][]> {\n const response = await this.sendAdminRequest(\"/internal/api-keys\", {}, null);\n const result = await response.json() as InternalApiKeysCrud[\"Admin\"][\"List\"];\n return result.items;\n }\n\n async revokeInternalApiKeyById(id: string) {\n await this.sendAdminRequest(\n `/internal/api-keys/${id}`, {\n method: \"PATCH\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({\n revoked: true,\n }),\n },\n null,\n );\n }\n\n async getInternalApiKey(id: string, session: InternalSession): Promise<InternalApiKeysCrud[\"Admin\"][\"Read\"]> {\n const response = await this.sendAdminRequest(`/internal/api-keys/${id}`, {}, session);\n return await response.json();\n }\n\n async listInternalEmailTemplates(): Promise<{ id: string, display_name: string, theme_id?: string, tsx_source: string }[]> {\n const response = await this.sendAdminRequest(`/internal/email-templates`, {}, null);\n const result = await response.json() as { templates: { id: string, display_name: string, theme_id?: string, tsx_source: string }[] };\n return result.templates;\n }\n\n async listEmailThemes(): Promise<{ id: string, display_name: string }[]> {\n const response = await this.sendAdminRequest(`/internal/email-themes`, {}, null);\n const result = await response.json() as { themes: { id: string, display_name: string }[] };\n return result.themes;\n }\n\n\n // Team permission definitions methods\n async listTeamPermissionDefinitions(): Promise<TeamPermissionDefinitionsCrud['Admin']['Read'][]> {\n const response = await this.sendAdminRequest(`/team-permission-definitions`, {}, null);\n const result = await response.json() as TeamPermissionDefinitionsCrud['Admin']['List'];\n return result.items;\n }\n\n async createTeamPermissionDefinition(data: TeamPermissionDefinitionsCrud['Admin']['Create']): Promise<TeamPermissionDefinitionsCrud['Admin']['Read']> {\n const response = await this.sendAdminRequest(\n \"/team-permission-definitions\",\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(data),\n },\n null,\n );\n return await response.json();\n }\n\n async updateTeamPermissionDefinition(permissionId: string, data: TeamPermissionDefinitionsCrud['Admin']['Update']): Promise<TeamPermissionDefinitionsCrud['Admin']['Read']> {\n const response = await this.sendAdminRequest(\n `/team-permission-definitions/${permissionId}`,\n {\n method: \"PATCH\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(data),\n },\n null,\n );\n return await response.json();\n }\n\n async deleteTeamPermissionDefinition(permissionId: string): Promise<void> {\n await this.sendAdminRequest(\n `/team-permission-definitions/${permissionId}`,\n { method: \"DELETE\" },\n null,\n );\n }\n\n async listProjectPermissionDefinitions(): Promise<ProjectPermissionDefinitionsCrud['Admin']['Read'][]> {\n const response = await this.sendAdminRequest(`/project-permission-definitions`, {}, null);\n const result = await response.json() as ProjectPermissionDefinitionsCrud['Admin']['List'];\n return result.items;\n }\n\n async createProjectPermissionDefinition(data: ProjectPermissionDefinitionsCrud['Admin']['Create']): Promise<ProjectPermissionDefinitionsCrud['Admin']['Read']> {\n const response = await this.sendAdminRequest(\n \"/project-permission-definitions\",\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(data),\n },\n null,\n );\n return await response.json();\n }\n\n async updateProjectPermissionDefinition(permissionId: string, data: ProjectPermissionDefinitionsCrud['Admin']['Update']): Promise<ProjectPermissionDefinitionsCrud['Admin']['Read']> {\n const response = await this.sendAdminRequest(\n `/project-permission-definitions/${permissionId}`,\n {\n method: \"PATCH\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(data),\n },\n null,\n );\n return await response.json();\n }\n\n async deleteProjectPermissionDefinition(permissionId: string): Promise<void> {\n await this.sendAdminRequest(\n `/project-permission-definitions/${permissionId}`,\n { method: \"DELETE\" },\n null,\n );\n }\n\n async getSvixToken(): Promise<SvixTokenCrud[\"Admin\"][\"Read\"]> {\n const response = await this.sendAdminRequest(\n \"/webhooks/svix-token\",\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({}),\n },\n null,\n );\n return await response.json();\n }\n\n async deleteProject(): Promise<void> {\n await this.sendAdminRequest(\n \"/internal/projects/current\",\n {\n method: \"DELETE\",\n },\n null,\n );\n }\n\n async transferProject(session: InternalSession, newTeamId: string): Promise<void> {\n await this.sendAdminRequest(\n \"/internal/projects/transfer\",\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({\n project_id: this.options.projectId,\n new_team_id: newTeamId,\n }),\n },\n session,\n );\n }\n\n async getMetrics(): Promise<any> {\n const response = await this.sendAdminRequest(\n \"/internal/metrics\",\n {\n method: \"GET\",\n },\n null,\n );\n return await response.json();\n }\n\n async sendTestEmail(data: {\n recipient_email: string,\n email_config: {\n host: string,\n port: number,\n username: string,\n password: string,\n sender_email: string,\n sender_name: string,\n },\n }): Promise<{ success: boolean, error_message?: string }> {\n const response = await this.sendAdminRequest(`/internal/send-test-email`, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(data),\n }, null);\n return await response.json();\n }\n\n async listSentEmails(): Promise<InternalEmailsCrud[\"Admin\"][\"List\"]> {\n const response = await this.sendAdminRequest(\"/internal/emails\", {\n method: \"GET\",\n }, null);\n return await response.json();\n }\n\n async sendSignInInvitationEmail(\n email: string,\n callbackUrl: string,\n ): Promise<void> {\n await this.sendAdminRequest(\n \"/internal/send-sign-in-invitation\",\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n email,\n callback_url: callbackUrl,\n }),\n },\n null,\n );\n }\n\n\n async sendChatMessage(\n threadId: string,\n contextType: \"email-theme\" | \"email-template\",\n messages: Array<{ role: string, content: any }>,\n abortSignal?: AbortSignal,\n ): Promise<{ content: ChatContent }> {\n const response = await this.sendAdminRequest(\n `/internal/ai-chat/${threadId}`,\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({ context_type: contextType, messages }),\n signal: abortSignal,\n },\n null,\n );\n return await response.json();\n }\n\n async saveChatMessage(threadId: string, message: any): Promise<void> {\n await this.sendAdminRequest(\n `/internal/ai-chat/${threadId}`,\n {\n method: \"PATCH\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({ message }),\n },\n null,\n );\n }\n\n async listChatMessages(threadId: string): Promise<{ messages: Array<any> }> {\n const response = await this.sendAdminRequest(\n `/internal/ai-chat/${threadId}`,\n { method: \"GET\" },\n null,\n );\n return await response.json();\n }\n\n async renderEmailPreview(options: { themeId?: string | null | false, themeTsxSource?: string, templateId?: string, templateTsxSource?: string }): Promise<{ html: string }> {\n const response = await this.sendAdminRequest(`/emails/render-email`, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({\n theme_id: options.themeId,\n theme_tsx_source: options.themeTsxSource,\n template_id: options.templateId,\n template_tsx_source: options.templateTsxSource,\n }),\n }, null);\n return await response.json();\n }\n\n async createEmailTheme(displayName: string): Promise<{ id: string }> {\n const response = await this.sendAdminRequest(\n `/internal/email-themes`,\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({\n display_name: displayName,\n }),\n },\n null,\n );\n return await response.json();\n }\n\n async getEmailTheme(id: string): Promise<{ display_name: string, tsx_source: string }> {\n const response = await this.sendAdminRequest(\n `/internal/email-themes/${id}`,\n { method: \"GET\" },\n null,\n );\n return await response.json();\n }\n\n async updateEmailTheme(id: string, tsxSource: string): Promise<void> {\n await this.sendAdminRequest(\n `/internal/email-themes/${id}`,\n {\n method: \"PATCH\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({\n tsx_source: tsxSource,\n }),\n },\n null,\n );\n }\n\n async updateEmailTemplate(id: string, tsxSource: string, themeId: string | null | false): Promise<{ rendered_html: string }> {\n const response = await this.sendAdminRequest(\n `/internal/email-templates/${id}`,\n {\n method: \"PATCH\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({ tsx_source: tsxSource, theme_id: themeId }),\n },\n null,\n );\n return await response.json();\n }\n\n async getConfig(): Promise<ConfigCrud[\"Admin\"][\"Read\"]> {\n const response = await this.sendAdminRequest(\n `/internal/config`,\n { method: \"GET\" },\n null,\n );\n return await response.json();\n }\n\n async updateConfig(data: { configOverride: any }): Promise<ConfigOverrideCrud[\"Admin\"][\"Read\"]> {\n const response = await this.sendAdminRequest(\n `/internal/config/override`,\n {\n method: \"PATCH\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({ config_override_string: JSON.stringify(data.configOverride) }),\n },\n null,\n );\n return await response.json();\n }\n async createEmailTemplate(displayName: string): Promise<{ id: string }> {\n const response = await this.sendAdminRequest(\n `/internal/email-templates`,\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({\n display_name: displayName,\n }),\n },\n null,\n );\n return await response.json();\n }\n\n async setupPayments(): Promise<{ url: string }> {\n const response = await this.sendAdminRequest(\n \"/internal/payments/setup\",\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({}),\n },\n null,\n );\n return await response.json();\n }\n\n async getStripeAccountInfo(): Promise<{ account_id: string, charges_enabled: boolean, details_submitted: boolean, payouts_enabled: boolean }> {\n const response = await this.sendAdminRequest(\n \"/internal/payments/stripe/account-info\",\n {},\n null,\n );\n return await response.json();\n }\n\n async createStripeWidgetAccountSession(): Promise<{ client_secret: string }> {\n const response = await this.sendAdminRequest(\n \"/internal/payments/stripe-widgets/account-session\",\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({}),\n },\n null,\n );\n return await response.json();\n }\n\n async testModePurchase(options: { price_id: string, full_code: string, quantity?: number }): Promise<void> {\n await this.sendAdminRequest(\n \"/internal/payments/test-mode-purchase-session\",\n {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(options),\n },\n null,\n );\n }\n\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as yup from 'yup';
|
|
2
2
|
import { KnownErrors } from '../known-errors.mjs';
|
|
3
|
+
import { inlineOfferSchema } from '../schema-fields.mjs';
|
|
3
4
|
import { InternalSession, RefreshToken, AccessToken } from '../sessions.mjs';
|
|
4
5
|
import { ReadonlyJson } from '../utils/json.mjs';
|
|
5
6
|
import { PublicKeyCredentialCreationOptionsJSON, RegistrationResponseJSON, PublicKeyCredentialRequestOptionsJSON, AuthenticationResponseJSON } from '@simplewebauthn/types';
|
|
@@ -17,14 +18,13 @@ import { TeamInvitationCrud } from './crud/team-invitation.mjs';
|
|
|
17
18
|
import { TeamMemberProfilesCrud } from './crud/team-member-profiles.mjs';
|
|
18
19
|
import { TeamPermissionsCrud } from './crud/team-permissions.mjs';
|
|
19
20
|
import { TeamsCrud } from './crud/teams.mjs';
|
|
20
|
-
import { inlineOfferSchema } from '../schema-fields.mjs';
|
|
21
21
|
import '../utils/errors.mjs';
|
|
22
|
+
import '../utils/currency-constants.mjs';
|
|
23
|
+
import '../utils/dates.mjs';
|
|
22
24
|
import 'jose';
|
|
23
25
|
import '../crud.mjs';
|
|
24
26
|
import '../utils/types.mjs';
|
|
25
27
|
import '../utils/strings.mjs';
|
|
26
|
-
import '../utils/currencies.mjs';
|
|
27
|
-
import '../utils/dates.mjs';
|
|
28
28
|
|
|
29
29
|
type ClientInterfaceOptions = {
|
|
30
30
|
clientVersion: string;
|
|
@@ -135,12 +135,12 @@ declare class StackClientInterface {
|
|
|
135
135
|
accessToken: string;
|
|
136
136
|
refreshToken: string;
|
|
137
137
|
}, never>>;
|
|
138
|
-
signInWithMagicLink(code: string): Promise<Result<{
|
|
138
|
+
signInWithMagicLink(code: string, session: InternalSession): Promise<Result<{
|
|
139
139
|
newUser: boolean;
|
|
140
140
|
accessToken: string;
|
|
141
141
|
refreshToken: string;
|
|
142
142
|
}, KnownErrors["VerificationCodeError"]>>;
|
|
143
|
-
signInWithMfa(totp: string, code: string): Promise<Result<{
|
|
143
|
+
signInWithMfa(totp: string, code: string, session: InternalSession): Promise<Result<{
|
|
144
144
|
newUser: boolean;
|
|
145
145
|
accessToken: string;
|
|
146
146
|
refreshToken: string;
|
|
@@ -148,7 +148,7 @@ declare class StackClientInterface {
|
|
|
148
148
|
signInWithPasskey(body: {
|
|
149
149
|
authentication_response: AuthenticationResponseJSON;
|
|
150
150
|
code: string;
|
|
151
|
-
}): Promise<Result<{
|
|
151
|
+
}, session: InternalSession): Promise<Result<{
|
|
152
152
|
accessToken: string;
|
|
153
153
|
refreshToken: string;
|
|
154
154
|
}, KnownErrors["PasskeyAuthenticationFailed"]>>;
|
|
@@ -161,12 +161,8 @@ declare class StackClientInterface {
|
|
|
161
161
|
state: string;
|
|
162
162
|
type: "authenticate" | "link";
|
|
163
163
|
providerScope?: string;
|
|
164
|
-
} & ({
|
|
165
|
-
type: "authenticate";
|
|
166
|
-
} | {
|
|
167
|
-
type: "link";
|
|
168
164
|
session: InternalSession;
|
|
169
|
-
})
|
|
165
|
+
}): Promise<string>;
|
|
170
166
|
callOAuthCallback(options: {
|
|
171
167
|
oauthParams: URLSearchParams;
|
|
172
168
|
redirectUri: string;
|
|
@@ -291,12 +287,17 @@ declare class StackClientInterface {
|
|
|
291
287
|
deleteOAuthProvider(userId: string, providerId: string, session: InternalSession | null, requestType?: "client" | "server" | "admin"): Promise<{
|
|
292
288
|
success: boolean;
|
|
293
289
|
}>;
|
|
294
|
-
getItem(options: {
|
|
295
|
-
|
|
296
|
-
userId
|
|
290
|
+
getItem(options: ({
|
|
291
|
+
itemId: string;
|
|
292
|
+
userId: string;
|
|
293
|
+
} | {
|
|
294
|
+
itemId: string;
|
|
295
|
+
teamId: string;
|
|
296
|
+
} | {
|
|
297
297
|
itemId: string;
|
|
298
|
-
|
|
299
|
-
|
|
298
|
+
customCustomerId: string;
|
|
299
|
+
}), session: InternalSession | null): Promise<ItemCrud['Client']['Read']>;
|
|
300
|
+
createCheckoutUrl(customer_type: "user" | "team" | "custom", customer_id: string, offerIdOrInline: string | yup.InferType<typeof inlineOfferSchema>, session: InternalSession | null): Promise<string>;
|
|
300
301
|
}
|
|
301
302
|
|
|
302
303
|
export { type ClientInterfaceOptions, StackClientInterface };
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as yup from 'yup';
|
|
2
2
|
import { KnownErrors } from '../known-errors.js';
|
|
3
|
+
import { inlineOfferSchema } from '../schema-fields.js';
|
|
3
4
|
import { InternalSession, RefreshToken, AccessToken } from '../sessions.js';
|
|
4
5
|
import { ReadonlyJson } from '../utils/json.js';
|
|
5
6
|
import { PublicKeyCredentialCreationOptionsJSON, RegistrationResponseJSON, PublicKeyCredentialRequestOptionsJSON, AuthenticationResponseJSON } from '@simplewebauthn/types';
|
|
@@ -17,14 +18,13 @@ import { TeamInvitationCrud } from './crud/team-invitation.js';
|
|
|
17
18
|
import { TeamMemberProfilesCrud } from './crud/team-member-profiles.js';
|
|
18
19
|
import { TeamPermissionsCrud } from './crud/team-permissions.js';
|
|
19
20
|
import { TeamsCrud } from './crud/teams.js';
|
|
20
|
-
import { inlineOfferSchema } from '../schema-fields.js';
|
|
21
21
|
import '../utils/errors.js';
|
|
22
|
+
import '../utils/currency-constants.js';
|
|
23
|
+
import '../utils/dates.js';
|
|
22
24
|
import 'jose';
|
|
23
25
|
import '../crud.js';
|
|
24
26
|
import '../utils/types.js';
|
|
25
27
|
import '../utils/strings.js';
|
|
26
|
-
import '../utils/currencies.js';
|
|
27
|
-
import '../utils/dates.js';
|
|
28
28
|
|
|
29
29
|
type ClientInterfaceOptions = {
|
|
30
30
|
clientVersion: string;
|
|
@@ -135,12 +135,12 @@ declare class StackClientInterface {
|
|
|
135
135
|
accessToken: string;
|
|
136
136
|
refreshToken: string;
|
|
137
137
|
}, never>>;
|
|
138
|
-
signInWithMagicLink(code: string): Promise<Result<{
|
|
138
|
+
signInWithMagicLink(code: string, session: InternalSession): Promise<Result<{
|
|
139
139
|
newUser: boolean;
|
|
140
140
|
accessToken: string;
|
|
141
141
|
refreshToken: string;
|
|
142
142
|
}, KnownErrors["VerificationCodeError"]>>;
|
|
143
|
-
signInWithMfa(totp: string, code: string): Promise<Result<{
|
|
143
|
+
signInWithMfa(totp: string, code: string, session: InternalSession): Promise<Result<{
|
|
144
144
|
newUser: boolean;
|
|
145
145
|
accessToken: string;
|
|
146
146
|
refreshToken: string;
|
|
@@ -148,7 +148,7 @@ declare class StackClientInterface {
|
|
|
148
148
|
signInWithPasskey(body: {
|
|
149
149
|
authentication_response: AuthenticationResponseJSON;
|
|
150
150
|
code: string;
|
|
151
|
-
}): Promise<Result<{
|
|
151
|
+
}, session: InternalSession): Promise<Result<{
|
|
152
152
|
accessToken: string;
|
|
153
153
|
refreshToken: string;
|
|
154
154
|
}, KnownErrors["PasskeyAuthenticationFailed"]>>;
|
|
@@ -161,12 +161,8 @@ declare class StackClientInterface {
|
|
|
161
161
|
state: string;
|
|
162
162
|
type: "authenticate" | "link";
|
|
163
163
|
providerScope?: string;
|
|
164
|
-
} & ({
|
|
165
|
-
type: "authenticate";
|
|
166
|
-
} | {
|
|
167
|
-
type: "link";
|
|
168
164
|
session: InternalSession;
|
|
169
|
-
})
|
|
165
|
+
}): Promise<string>;
|
|
170
166
|
callOAuthCallback(options: {
|
|
171
167
|
oauthParams: URLSearchParams;
|
|
172
168
|
redirectUri: string;
|
|
@@ -291,12 +287,17 @@ declare class StackClientInterface {
|
|
|
291
287
|
deleteOAuthProvider(userId: string, providerId: string, session: InternalSession | null, requestType?: "client" | "server" | "admin"): Promise<{
|
|
292
288
|
success: boolean;
|
|
293
289
|
}>;
|
|
294
|
-
getItem(options: {
|
|
295
|
-
|
|
296
|
-
userId
|
|
290
|
+
getItem(options: ({
|
|
291
|
+
itemId: string;
|
|
292
|
+
userId: string;
|
|
293
|
+
} | {
|
|
294
|
+
itemId: string;
|
|
295
|
+
teamId: string;
|
|
296
|
+
} | {
|
|
297
297
|
itemId: string;
|
|
298
|
-
|
|
299
|
-
|
|
298
|
+
customCustomerId: string;
|
|
299
|
+
}), session: InternalSession | null): Promise<ItemCrud['Client']['Read']>;
|
|
300
|
+
createCheckoutUrl(customer_type: "user" | "team" | "custom", customer_id: string, offerIdOrInline: string | yup.InferType<typeof inlineOfferSchema>, session: InternalSession | null): Promise<string>;
|
|
300
301
|
}
|
|
301
302
|
|
|
302
303
|
export { type ClientInterfaceOptions, StackClientInterface };
|
|
@@ -44,6 +44,7 @@ var import_objects = require("../utils/objects.js");
|
|
|
44
44
|
var import_promises = require("../utils/promises.js");
|
|
45
45
|
var import_results = require("../utils/results.js");
|
|
46
46
|
var import_strings = require("../utils/strings.js");
|
|
47
|
+
var import_urls = require("../utils/urls.js");
|
|
47
48
|
var StackClientInterface = class {
|
|
48
49
|
constructor(options) {
|
|
49
50
|
this.options = options;
|
|
@@ -236,6 +237,7 @@ var StackClientInterface = class {
|
|
|
236
237
|
...tokenObj?.refreshToken ? {
|
|
237
238
|
"X-Stack-Refresh-Token": tokenObj.refreshToken.token
|
|
238
239
|
} : {},
|
|
240
|
+
"X-Stack-Allow-Anonymous-User": "true",
|
|
239
241
|
..."publishableClientKey" in this.options ? {
|
|
240
242
|
"X-Stack-Publishable-Client-Key": this.options.publishableClientKey
|
|
241
243
|
} : {},
|
|
@@ -679,7 +681,7 @@ var StackClientInterface = class {
|
|
|
679
681
|
refreshToken: result.refresh_token
|
|
680
682
|
});
|
|
681
683
|
}
|
|
682
|
-
async signInWithMagicLink(code) {
|
|
684
|
+
async signInWithMagicLink(code, session) {
|
|
683
685
|
const res = await this.sendClientRequestAndCatchKnownError(
|
|
684
686
|
"/auth/otp/sign-in",
|
|
685
687
|
{
|
|
@@ -691,7 +693,7 @@ var StackClientInterface = class {
|
|
|
691
693
|
code
|
|
692
694
|
})
|
|
693
695
|
},
|
|
694
|
-
|
|
696
|
+
session,
|
|
695
697
|
[import_known_errors.KnownErrors.VerificationCodeError]
|
|
696
698
|
);
|
|
697
699
|
if (res.status === "error") {
|
|
@@ -704,7 +706,7 @@ var StackClientInterface = class {
|
|
|
704
706
|
newUser: result.is_new_user
|
|
705
707
|
});
|
|
706
708
|
}
|
|
707
|
-
async signInWithMfa(totp, code) {
|
|
709
|
+
async signInWithMfa(totp, code, session) {
|
|
708
710
|
const res = await this.sendClientRequestAndCatchKnownError(
|
|
709
711
|
"/auth/mfa/sign-in",
|
|
710
712
|
{
|
|
@@ -718,7 +720,7 @@ var StackClientInterface = class {
|
|
|
718
720
|
code
|
|
719
721
|
})
|
|
720
722
|
},
|
|
721
|
-
|
|
723
|
+
session,
|
|
722
724
|
[import_known_errors.KnownErrors.VerificationCodeError]
|
|
723
725
|
);
|
|
724
726
|
if (res.status === "error") {
|
|
@@ -731,7 +733,7 @@ var StackClientInterface = class {
|
|
|
731
733
|
newUser: result.is_new_user
|
|
732
734
|
});
|
|
733
735
|
}
|
|
734
|
-
async signInWithPasskey(body) {
|
|
736
|
+
async signInWithPasskey(body, session) {
|
|
735
737
|
const res = await this.sendClientRequestAndCatchKnownError(
|
|
736
738
|
"/auth/passkey/sign-in",
|
|
737
739
|
{
|
|
@@ -741,7 +743,7 @@ var StackClientInterface = class {
|
|
|
741
743
|
},
|
|
742
744
|
body: JSON.stringify(body)
|
|
743
745
|
},
|
|
744
|
-
|
|
746
|
+
session,
|
|
745
747
|
[import_known_errors.KnownErrors.PasskeyAuthenticationFailed]
|
|
746
748
|
);
|
|
747
749
|
if (res.status === "error") {
|
|
@@ -776,12 +778,14 @@ var StackClientInterface = class {
|
|
|
776
778
|
url.searchParams.set("response_type", "code");
|
|
777
779
|
url.searchParams.set("type", options.type);
|
|
778
780
|
url.searchParams.set("error_redirect_url", options.errorRedirectUrl);
|
|
781
|
+
const tokens = await options.session.getOrFetchLikelyValidTokens(2e4);
|
|
782
|
+
if (tokens) {
|
|
783
|
+
url.searchParams.set("token", tokens.accessToken.token);
|
|
784
|
+
}
|
|
779
785
|
if (options.afterCallbackRedirectUrl) {
|
|
780
786
|
url.searchParams.set("after_callback_redirect_url", options.afterCallbackRedirectUrl);
|
|
781
787
|
}
|
|
782
788
|
if (options.type === "link") {
|
|
783
|
-
const tokens = await options.session.getOrFetchLikelyValidTokens(2e4);
|
|
784
|
-
url.searchParams.set("token", tokens?.accessToken.token || "");
|
|
785
789
|
if (options.providerScope) {
|
|
786
790
|
url.searchParams.set("provider_scope", options.providerScope);
|
|
787
791
|
}
|
|
@@ -1330,15 +1334,28 @@ var StackClientInterface = class {
|
|
|
1330
1334
|
return response.json();
|
|
1331
1335
|
}
|
|
1332
1336
|
async getItem(options, session) {
|
|
1333
|
-
|
|
1337
|
+
let customerType;
|
|
1338
|
+
let customerId;
|
|
1339
|
+
if ("userId" in options) {
|
|
1340
|
+
customerType = "user";
|
|
1341
|
+
customerId = options.userId;
|
|
1342
|
+
} else if ("teamId" in options) {
|
|
1343
|
+
customerType = "team";
|
|
1344
|
+
customerId = options.teamId;
|
|
1345
|
+
} else if ("customCustomerId" in options) {
|
|
1346
|
+
customerType = "custom";
|
|
1347
|
+
customerId = options.customCustomerId;
|
|
1348
|
+
} else {
|
|
1349
|
+
throw new import_errors.StackAssertionError("getItem requires one of userId, teamId, or customCustomerId");
|
|
1350
|
+
}
|
|
1334
1351
|
const response = await this.sendClientRequest(
|
|
1335
|
-
`/payments/items/${customerId}/${options.itemId}`,
|
|
1352
|
+
import_urls.urlString`/payments/items/${customerType}/${customerId}/${options.itemId}`,
|
|
1336
1353
|
{},
|
|
1337
1354
|
session
|
|
1338
1355
|
);
|
|
1339
1356
|
return await response.json();
|
|
1340
1357
|
}
|
|
1341
|
-
async createCheckoutUrl(customer_id, offerIdOrInline, session) {
|
|
1358
|
+
async createCheckoutUrl(customer_type, customer_id, offerIdOrInline, session) {
|
|
1342
1359
|
const offerBody = typeof offerIdOrInline === "string" ? { offer_id: offerIdOrInline } : { inline_offer: offerIdOrInline };
|
|
1343
1360
|
const response = await this.sendClientRequest(
|
|
1344
1361
|
"/payments/purchases/create-purchase-url",
|
|
@@ -1347,7 +1364,7 @@ var StackClientInterface = class {
|
|
|
1347
1364
|
headers: {
|
|
1348
1365
|
"content-type": "application/json"
|
|
1349
1366
|
},
|
|
1350
|
-
body: JSON.stringify({ customer_id, ...offerBody })
|
|
1367
|
+
body: JSON.stringify({ customer_type, customer_id, ...offerBody })
|
|
1351
1368
|
},
|
|
1352
1369
|
session
|
|
1353
1370
|
);
|