@stackframe/stack-shared 2.8.21 → 2.8.25

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 (89) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/dist/config/schema.d.mts +121 -25
  3. package/dist/config/schema.d.ts +121 -25
  4. package/dist/config/schema.js +10 -4
  5. package/dist/config/schema.js.map +1 -1
  6. package/dist/esm/config/schema.js +10 -4
  7. package/dist/esm/config/schema.js.map +1 -1
  8. package/dist/esm/helpers/emails.js +79 -0
  9. package/dist/esm/helpers/emails.js.map +1 -0
  10. package/dist/esm/interface/admin-interface.js +104 -3
  11. package/dist/esm/interface/admin-interface.js.map +1 -1
  12. package/dist/esm/interface/client-interface.js +41 -0
  13. package/dist/esm/interface/client-interface.js.map +1 -1
  14. package/dist/esm/interface/crud/{oauth.js → connected-accounts.js} +2 -2
  15. package/dist/esm/interface/crud/connected-accounts.js.map +1 -0
  16. package/dist/esm/interface/crud/oauth-providers.js +87 -0
  17. package/dist/esm/interface/crud/oauth-providers.js.map +1 -0
  18. package/dist/esm/interface/crud/projects.js +7 -5
  19. package/dist/esm/interface/crud/projects.js.map +1 -1
  20. package/dist/esm/interface/server-interface.js +51 -0
  21. package/dist/esm/interface/server-interface.js.map +1 -1
  22. package/dist/esm/known-errors.js +23 -8
  23. package/dist/esm/known-errors.js.map +1 -1
  24. package/dist/esm/schema-fields.js +32 -1
  25. package/dist/esm/schema-fields.js.map +1 -1
  26. package/dist/esm/utils/esbuild.js +66 -47
  27. package/dist/esm/utils/esbuild.js.map +1 -1
  28. package/dist/esm/utils/oauth.js +1 -1
  29. package/dist/esm/utils/oauth.js.map +1 -1
  30. package/dist/esm/utils/react.js +26 -4
  31. package/dist/esm/utils/react.js.map +1 -1
  32. package/dist/helpers/emails.d.mts +24 -0
  33. package/dist/helpers/emails.d.ts +24 -0
  34. package/dist/helpers/emails.js +108 -0
  35. package/dist/helpers/emails.js.map +1 -0
  36. package/dist/index.d.mts +1 -1
  37. package/dist/index.d.ts +1 -1
  38. package/dist/interface/admin-interface.d.mts +50 -3
  39. package/dist/interface/admin-interface.d.ts +50 -3
  40. package/dist/interface/admin-interface.js +104 -3
  41. package/dist/interface/admin-interface.js.map +1 -1
  42. package/dist/interface/client-interface.d.mts +24 -1
  43. package/dist/interface/client-interface.d.ts +24 -1
  44. package/dist/interface/client-interface.js +41 -0
  45. package/dist/interface/client-interface.js.map +1 -1
  46. package/dist/interface/crud/{oauth.js → connected-accounts.js} +5 -5
  47. package/dist/interface/crud/connected-accounts.js.map +1 -0
  48. package/dist/interface/crud/oauth-providers.d.mts +172 -0
  49. package/dist/interface/crud/oauth-providers.d.ts +172 -0
  50. package/dist/interface/crud/oauth-providers.js +107 -0
  51. package/dist/interface/crud/oauth-providers.js.map +1 -0
  52. package/dist/interface/crud/project-api-keys.d.mts +2 -2
  53. package/dist/interface/crud/project-api-keys.d.ts +2 -2
  54. package/dist/interface/crud/projects.d.mts +22 -19
  55. package/dist/interface/crud/projects.d.ts +22 -19
  56. package/dist/interface/crud/projects.js +5 -3
  57. package/dist/interface/crud/projects.js.map +1 -1
  58. package/dist/interface/server-interface.d.mts +45 -1
  59. package/dist/interface/server-interface.d.ts +45 -1
  60. package/dist/interface/server-interface.js +51 -0
  61. package/dist/interface/server-interface.js.map +1 -1
  62. package/dist/known-errors.d.mts +5 -2
  63. package/dist/known-errors.d.ts +5 -2
  64. package/dist/known-errors.js +23 -8
  65. package/dist/known-errors.js.map +1 -1
  66. package/dist/schema-fields.d.mts +21 -4
  67. package/dist/schema-fields.d.ts +21 -4
  68. package/dist/schema-fields.js +40 -1
  69. package/dist/schema-fields.js.map +1 -1
  70. package/dist/utils/esbuild.d.mts +3 -0
  71. package/dist/utils/esbuild.d.ts +3 -0
  72. package/dist/utils/esbuild.js +66 -47
  73. package/dist/utils/esbuild.js.map +1 -1
  74. package/dist/utils/oauth.d.mts +2 -2
  75. package/dist/utils/oauth.d.ts +2 -2
  76. package/dist/utils/oauth.js +1 -1
  77. package/dist/utils/oauth.js.map +1 -1
  78. package/dist/utils/react.d.mts +21 -4
  79. package/dist/utils/react.d.ts +21 -4
  80. package/dist/utils/react.js +28 -5
  81. package/dist/utils/react.js.map +1 -1
  82. package/dist/utils/types.d.mts +3 -2
  83. package/dist/utils/types.d.ts +3 -2
  84. package/dist/utils/types.js.map +1 -1
  85. package/package.json +1 -1
  86. package/dist/esm/interface/crud/oauth.js.map +0 -1
  87. package/dist/interface/crud/oauth.js.map +0 -1
  88. /package/dist/interface/crud/{oauth.d.mts → connected-accounts.d.mts} +0 -0
  89. /package/dist/interface/crud/{oauth.d.ts → connected-accounts.d.ts} +0 -0
@@ -0,0 +1,24 @@
1
+ declare const previewTemplateSource = "\n export function EmailTemplate() {\n return (\n <div>\n <h2 className=\"mb-4 text-2xl font-bold\">\n Header text\n </h2>\n <p className=\"mb-4\">\n Body text content with some additional information.\n </p>\n </div>\n );\n }\n";
2
+ declare const LightEmailTheme = "import { Html, Tailwind, Body } from '@react-email/components';\nexport function EmailTheme({ children }: { children: React.ReactNode }) {\n return (\n <Html>\n <Tailwind>\n <Body>\n <div className=\"bg-white text-slate-800 p-4 rounded-lg max-w-[600px] mx-auto leading-relaxed\">\n {children}\n </div>\n </Body>\n </Tailwind>\n </Html>\n );\n}";
3
+ declare const DEFAULT_EMAIL_THEME_ID = "1df07ae6-abf3-4a40-83a5-a1a2cbe336ac";
4
+ declare const DEFAULT_EMAIL_THEMES: {
5
+ "1df07ae6-abf3-4a40-83a5-a1a2cbe336ac": {
6
+ displayName: string;
7
+ tsxSource: string;
8
+ };
9
+ "a0172b5d-cff0-463b-83bb-85124697373a": {
10
+ displayName: string;
11
+ tsxSource: string;
12
+ };
13
+ };
14
+ declare const DEFAULT_EMAIL_TEMPLATES: {
15
+ "e7d009ce-8d47-4528-b245-5bf119f2ffa3": {
16
+ displayName: string;
17
+ description: string;
18
+ variables: string[];
19
+ subject: string;
20
+ tsxSource: string;
21
+ };
22
+ };
23
+
24
+ export { DEFAULT_EMAIL_TEMPLATES, DEFAULT_EMAIL_THEMES, DEFAULT_EMAIL_THEME_ID, LightEmailTheme, previewTemplateSource };
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/helpers/emails.ts
21
+ var emails_exports = {};
22
+ __export(emails_exports, {
23
+ DEFAULT_EMAIL_TEMPLATES: () => DEFAULT_EMAIL_TEMPLATES,
24
+ DEFAULT_EMAIL_THEMES: () => DEFAULT_EMAIL_THEMES,
25
+ DEFAULT_EMAIL_THEME_ID: () => DEFAULT_EMAIL_THEME_ID,
26
+ LightEmailTheme: () => LightEmailTheme,
27
+ previewTemplateSource: () => previewTemplateSource
28
+ });
29
+ module.exports = __toCommonJS(emails_exports);
30
+ var previewTemplateSource = `
31
+ export function EmailTemplate() {
32
+ return (
33
+ <div>
34
+ <h2 className="mb-4 text-2xl font-bold">
35
+ Header text
36
+ </h2>
37
+ <p className="mb-4">
38
+ Body text content with some additional information.
39
+ </p>
40
+ </div>
41
+ );
42
+ }
43
+ `;
44
+ var LightEmailTheme = `import { Html, Tailwind, Body } from '@react-email/components';
45
+ export function EmailTheme({ children }: { children: React.ReactNode }) {
46
+ return (
47
+ <Html>
48
+ <Tailwind>
49
+ <Body>
50
+ <div className="bg-white text-slate-800 p-4 rounded-lg max-w-[600px] mx-auto leading-relaxed">
51
+ {children}
52
+ </div>
53
+ </Body>
54
+ </Tailwind>
55
+ </Html>
56
+ );
57
+ }`;
58
+ var DarkEmailTheme = `import { Html, Tailwind, Body } from '@react-email/components';
59
+ export function EmailTheme({ children }: { children: React.ReactNode }) {
60
+ return (
61
+ <Html>
62
+ <Tailwind>
63
+ <Body>
64
+ <div className="bg-slate-900 text-slate-100 p-4 rounded-lg max-w-[600px] mx-auto leading-relaxed">
65
+ {children}
66
+ </div>
67
+ </Body>
68
+ </Tailwind>
69
+ </Html>
70
+ );
71
+ }`;
72
+ var DEFAULT_EMAIL_THEME_ID = "1df07ae6-abf3-4a40-83a5-a1a2cbe336ac";
73
+ var DEFAULT_EMAIL_THEMES = {
74
+ [DEFAULT_EMAIL_THEME_ID]: {
75
+ displayName: "Default Light",
76
+ tsxSource: LightEmailTheme
77
+ },
78
+ "a0172b5d-cff0-463b-83bb-85124697373a": {
79
+ displayName: "Default Dark",
80
+ tsxSource: DarkEmailTheme
81
+ }
82
+ };
83
+ var DEFAULT_EMAIL_TEMPLATES = {
84
+ "e7d009ce-8d47-4528-b245-5bf119f2ffa3": {
85
+ displayName: "Email Verification",
86
+ description: "Will be sent to the user when they sign-up with email/password",
87
+ variables: ["projectDisplayName"],
88
+ subject: "Welcome to {{ projectDisplayName }}",
89
+ tsxSource: "export function EmailTemplate({ projectDisplayName }) {\n return <div>Email Verification for { projectDisplayName }</div>; \n}"
90
+ }
91
+ // "a70fb3a4-56c1-4e42-af25-49d25603abd0": {
92
+ // },
93
+ // "822687fe-8d0a-4467-a0d1-416b6e639478": {
94
+ // },
95
+ // "066dd73c-36da-4fd0-b6d6-ebf87683f8bc": {
96
+ // },
97
+ // "e84de395-2076-4831-9c19-8e9a96a868e4": {
98
+ // },
99
+ };
100
+ // Annotate the CommonJS export names for ESM import in node:
101
+ 0 && (module.exports = {
102
+ DEFAULT_EMAIL_TEMPLATES,
103
+ DEFAULT_EMAIL_THEMES,
104
+ DEFAULT_EMAIL_THEME_ID,
105
+ LightEmailTheme,
106
+ previewTemplateSource
107
+ });
108
+ //# sourceMappingURL=emails.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/helpers/emails.ts"],"sourcesContent":["export const previewTemplateSource = `\n export function EmailTemplate() {\n return (\n <div>\n <h2 className=\"mb-4 text-2xl font-bold\">\n Header text\n </h2>\n <p className=\"mb-4\">\n Body text content with some additional information.\n </p>\n </div>\n );\n }\n`;\n\nexport const LightEmailTheme = `import { Html, Tailwind, Body } from '@react-email/components';\nexport function EmailTheme({ children }: { children: React.ReactNode }) {\n return (\n <Html>\n <Tailwind>\n <Body>\n <div className=\"bg-white text-slate-800 p-4 rounded-lg max-w-[600px] mx-auto leading-relaxed\">\n {children}\n </div>\n </Body>\n </Tailwind>\n </Html>\n );\n}`;\n\n\nconst DarkEmailTheme = `import { Html, Tailwind, Body } from '@react-email/components';\nexport function EmailTheme({ children }: { children: React.ReactNode }) {\n return (\n <Html>\n <Tailwind>\n <Body>\n <div className=\"bg-slate-900 text-slate-100 p-4 rounded-lg max-w-[600px] mx-auto leading-relaxed\">\n {children}\n </div>\n </Body>\n </Tailwind>\n </Html>\n );\n}`;\n\nexport const DEFAULT_EMAIL_THEME_ID = \"1df07ae6-abf3-4a40-83a5-a1a2cbe336ac\";\n\nexport const DEFAULT_EMAIL_THEMES = {\n [DEFAULT_EMAIL_THEME_ID]: {\n displayName: 'Default Light',\n tsxSource: LightEmailTheme,\n },\n \"a0172b5d-cff0-463b-83bb-85124697373a\": {\n displayName: 'Default Dark',\n tsxSource: DarkEmailTheme,\n },\n};\n\nexport const DEFAULT_EMAIL_TEMPLATES = {\n \"e7d009ce-8d47-4528-b245-5bf119f2ffa3\": {\n displayName: \"Email Verification\",\n description: \"Will be sent to the user when they sign-up with email/password\",\n variables: [\"projectDisplayName\"],\n subject: \"Welcome to {{ projectDisplayName }}\",\n tsxSource: \"export function EmailTemplate({ projectDisplayName }) {\\n return <div>Email Verification for { projectDisplayName }</div>; \\n}\",\n },\n // \"a70fb3a4-56c1-4e42-af25-49d25603abd0\": {\n\n // },\n // \"822687fe-8d0a-4467-a0d1-416b6e639478\": {\n\n // },\n // \"066dd73c-36da-4fd0-b6d6-ebf87683f8bc\": {\n\n // },\n // \"e84de395-2076-4831-9c19-8e9a96a868e4\": {\n\n // },\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,IAAM,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAe9B,IAAM,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgB/B,IAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAehB,IAAM,yBAAyB;AAE/B,IAAM,uBAAuB;AAAA,EAClC,CAAC,sBAAsB,GAAG;AAAA,IACxB,aAAa;AAAA,IACb,WAAW;AAAA,EACb;AAAA,EACA,wCAAwC;AAAA,IACtC,aAAa;AAAA,IACb,WAAW;AAAA,EACb;AACF;AAEO,IAAM,0BAA0B;AAAA,EACrC,wCAAwC;AAAA,IACtC,aAAa;AAAA,IACb,aAAa;AAAA,IACb,WAAW,CAAC,oBAAoB;AAAA,IAChC,SAAS;AAAA,IACT,WAAW;AAAA,EACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAaF;","names":[]}
package/dist/index.d.mts CHANGED
@@ -15,10 +15,10 @@ import './interface/crud/projects.mjs';
15
15
  import './interface/crud/svix-token.mjs';
16
16
  import './interface/crud/team-permissions.mjs';
17
17
  import './utils/results.mjs';
18
+ import './interface/crud/connected-accounts.mjs';
18
19
  import './interface/crud/contact-channels.mjs';
19
20
  import './interface/crud/current-user.mjs';
20
21
  import './interface/crud/notification-preferences.mjs';
21
- import './interface/crud/oauth.mjs';
22
22
  import './interface/crud/sessions.mjs';
23
23
  import './interface/crud/team-invitation.mjs';
24
24
  import './interface/crud/team-member-profiles.mjs';
package/dist/index.d.ts CHANGED
@@ -15,10 +15,10 @@ import './interface/crud/projects.js';
15
15
  import './interface/crud/svix-token.js';
16
16
  import './interface/crud/team-permissions.js';
17
17
  import './utils/results.js';
18
+ import './interface/crud/connected-accounts.js';
18
19
  import './interface/crud/contact-channels.js';
19
20
  import './interface/crud/current-user.js';
20
21
  import './interface/crud/notification-preferences.js';
21
- import './interface/crud/oauth.js';
22
22
  import './interface/crud/sessions.js';
23
23
  import './interface/crud/team-invitation.js';
24
24
  import './interface/crud/team-member-profiles.js';
@@ -14,10 +14,10 @@ import '../crud.mjs';
14
14
  import 'yup';
15
15
  import '../utils/types.mjs';
16
16
  import '../utils/results.mjs';
17
+ import './crud/connected-accounts.mjs';
17
18
  import './crud/contact-channels.mjs';
18
19
  import './crud/current-user.mjs';
19
20
  import './crud/notification-preferences.mjs';
20
- import './crud/oauth.mjs';
21
21
  import './crud/sessions.mjs';
22
22
  import './crud/team-invitation.mjs';
23
23
  import './crud/team-member-profiles.mjs';
@@ -29,6 +29,17 @@ import '../utils/json.mjs';
29
29
  import '@simplewebauthn/types';
30
30
  import './crud/project-api-keys.mjs';
31
31
 
32
+ type ChatContent = Array<{
33
+ type: "text";
34
+ text: string;
35
+ } | {
36
+ type: "tool-call";
37
+ toolName: string;
38
+ toolCallId: string;
39
+ args: any;
40
+ argsText: string;
41
+ result: any;
42
+ }>;
32
43
  type AdminAuthApplicationOptions = ServerAuthApplicationOptions & ({
33
44
  superSecretAdminKey: string;
34
45
  } | {
@@ -62,6 +73,16 @@ declare class StackAdminInterface extends StackServerInterface {
62
73
  revokeInternalApiKeyById(id: string): Promise<void>;
63
74
  getInternalApiKey(id: string, session: InternalSession): Promise<InternalApiKeysCrud["Admin"]["Read"]>;
64
75
  listEmailTemplates(): Promise<EmailTemplateCrud['Admin']['Read'][]>;
76
+ listInternalEmailTemplatesNew(): Promise<{
77
+ id: string;
78
+ subject: string;
79
+ display_name: string;
80
+ tsx_source: string;
81
+ }[]>;
82
+ listEmailThemes(): Promise<{
83
+ id: string;
84
+ display_name: string;
85
+ }[]>;
65
86
  updateEmailTemplate(type: EmailTemplateType, data: EmailTemplateCrud['Admin']['Update']): Promise<EmailTemplateCrud['Admin']['Read']>;
66
87
  resetEmailTemplate(type: EmailTemplateType): Promise<void>;
67
88
  listTeamPermissionDefinitions(): Promise<TeamPermissionDefinitionsCrud['Admin']['Read'][]>;
@@ -97,9 +118,35 @@ declare class StackAdminInterface extends StackServerInterface {
97
118
  notification_category_name: string;
98
119
  }): Promise<void>;
99
120
  sendSignInInvitationEmail(email: string, callbackUrl: string): Promise<void>;
100
- renderEmailThemePreview(theme: string, content: string): Promise<{
121
+ sendChatMessage(threadId: string, contextType: "email-theme" | "email-template", messages: Array<{
122
+ role: string;
123
+ content: any;
124
+ }>, abortSignal?: AbortSignal): Promise<{
125
+ content: ChatContent;
126
+ }>;
127
+ saveChatMessage(threadId: string, message: any): Promise<void>;
128
+ listChatMessages(threadId: string): Promise<{
129
+ messages: Array<any>;
130
+ }>;
131
+ renderEmailPreview(options: {
132
+ themeId?: string;
133
+ themeTsxSource?: string;
134
+ templateId?: string;
135
+ templateTsxSource?: string;
136
+ }): Promise<{
101
137
  html: string;
102
138
  }>;
139
+ createEmailTheme(displayName: string): Promise<{
140
+ id: string;
141
+ }>;
142
+ getEmailTheme(id: string): Promise<{
143
+ display_name: string;
144
+ tsx_source: string;
145
+ }>;
146
+ updateEmailTheme(id: string, tsxSource: string): Promise<void>;
147
+ updateNewEmailTemplate(id: string, tsxSource: string): Promise<{
148
+ rendered_html: string;
149
+ }>;
103
150
  }
104
151
 
105
- export { type AdminAuthApplicationOptions, type InternalApiKeyCreateCrudRequest, type InternalApiKeyCreateCrudResponse, StackAdminInterface };
152
+ export { type AdminAuthApplicationOptions, type ChatContent, type InternalApiKeyCreateCrudRequest, type InternalApiKeyCreateCrudResponse, StackAdminInterface };
@@ -14,10 +14,10 @@ import '../crud.js';
14
14
  import 'yup';
15
15
  import '../utils/types.js';
16
16
  import '../utils/results.js';
17
+ import './crud/connected-accounts.js';
17
18
  import './crud/contact-channels.js';
18
19
  import './crud/current-user.js';
19
20
  import './crud/notification-preferences.js';
20
- import './crud/oauth.js';
21
21
  import './crud/sessions.js';
22
22
  import './crud/team-invitation.js';
23
23
  import './crud/team-member-profiles.js';
@@ -29,6 +29,17 @@ import '../utils/json.js';
29
29
  import '@simplewebauthn/types';
30
30
  import './crud/project-api-keys.js';
31
31
 
32
+ type ChatContent = Array<{
33
+ type: "text";
34
+ text: string;
35
+ } | {
36
+ type: "tool-call";
37
+ toolName: string;
38
+ toolCallId: string;
39
+ args: any;
40
+ argsText: string;
41
+ result: any;
42
+ }>;
32
43
  type AdminAuthApplicationOptions = ServerAuthApplicationOptions & ({
33
44
  superSecretAdminKey: string;
34
45
  } | {
@@ -62,6 +73,16 @@ declare class StackAdminInterface extends StackServerInterface {
62
73
  revokeInternalApiKeyById(id: string): Promise<void>;
63
74
  getInternalApiKey(id: string, session: InternalSession): Promise<InternalApiKeysCrud["Admin"]["Read"]>;
64
75
  listEmailTemplates(): Promise<EmailTemplateCrud['Admin']['Read'][]>;
76
+ listInternalEmailTemplatesNew(): Promise<{
77
+ id: string;
78
+ subject: string;
79
+ display_name: string;
80
+ tsx_source: string;
81
+ }[]>;
82
+ listEmailThemes(): Promise<{
83
+ id: string;
84
+ display_name: string;
85
+ }[]>;
65
86
  updateEmailTemplate(type: EmailTemplateType, data: EmailTemplateCrud['Admin']['Update']): Promise<EmailTemplateCrud['Admin']['Read']>;
66
87
  resetEmailTemplate(type: EmailTemplateType): Promise<void>;
67
88
  listTeamPermissionDefinitions(): Promise<TeamPermissionDefinitionsCrud['Admin']['Read'][]>;
@@ -97,9 +118,35 @@ declare class StackAdminInterface extends StackServerInterface {
97
118
  notification_category_name: string;
98
119
  }): Promise<void>;
99
120
  sendSignInInvitationEmail(email: string, callbackUrl: string): Promise<void>;
100
- renderEmailThemePreview(theme: string, content: string): Promise<{
121
+ sendChatMessage(threadId: string, contextType: "email-theme" | "email-template", messages: Array<{
122
+ role: string;
123
+ content: any;
124
+ }>, abortSignal?: AbortSignal): Promise<{
125
+ content: ChatContent;
126
+ }>;
127
+ saveChatMessage(threadId: string, message: any): Promise<void>;
128
+ listChatMessages(threadId: string): Promise<{
129
+ messages: Array<any>;
130
+ }>;
131
+ renderEmailPreview(options: {
132
+ themeId?: string;
133
+ themeTsxSource?: string;
134
+ templateId?: string;
135
+ templateTsxSource?: string;
136
+ }): Promise<{
101
137
  html: string;
102
138
  }>;
139
+ createEmailTheme(displayName: string): Promise<{
140
+ id: string;
141
+ }>;
142
+ getEmailTheme(id: string): Promise<{
143
+ display_name: string;
144
+ tsx_source: string;
145
+ }>;
146
+ updateEmailTheme(id: string, tsxSource: string): Promise<void>;
147
+ updateNewEmailTemplate(id: string, tsxSource: string): Promise<{
148
+ rendered_html: string;
149
+ }>;
103
150
  }
104
151
 
105
- export { type AdminAuthApplicationOptions, type InternalApiKeyCreateCrudRequest, type InternalApiKeyCreateCrudResponse, StackAdminInterface };
152
+ export { type AdminAuthApplicationOptions, type ChatContent, type InternalApiKeyCreateCrudRequest, type InternalApiKeyCreateCrudResponse, StackAdminInterface };
@@ -110,6 +110,16 @@ var StackAdminInterface = class extends import_server_interface.StackServerInter
110
110
  const result = await response.json();
111
111
  return result.items;
112
112
  }
113
+ async listInternalEmailTemplatesNew() {
114
+ const response = await this.sendAdminRequest(`/internal/email-templates`, {}, null);
115
+ const result = await response.json();
116
+ return result.templates;
117
+ }
118
+ async listEmailThemes() {
119
+ const response = await this.sendAdminRequest(`/internal/email-themes`, {}, null);
120
+ const result = await response.json();
121
+ return result.themes;
122
+ }
113
123
  async updateEmailTemplate(type, data) {
114
124
  const result = await this.sendAdminRequest(
115
125
  `/email-templates/${type}`,
@@ -286,19 +296,110 @@ var StackAdminInterface = class extends import_server_interface.StackServerInter
286
296
  null
287
297
  );
288
298
  }
289
- async renderEmailThemePreview(theme, content) {
299
+ async sendChatMessage(threadId, contextType, messages, abortSignal) {
300
+ const response = await this.sendAdminRequest(
301
+ `/internal/ai-chat/${threadId}`,
302
+ {
303
+ method: "POST",
304
+ headers: {
305
+ "content-type": "application/json"
306
+ },
307
+ body: JSON.stringify({ context_type: contextType, messages }),
308
+ signal: abortSignal
309
+ },
310
+ null
311
+ );
312
+ return await response.json();
313
+ }
314
+ async saveChatMessage(threadId, message) {
315
+ await this.sendAdminRequest(
316
+ `/internal/ai-chat/${threadId}`,
317
+ {
318
+ method: "PATCH",
319
+ headers: {
320
+ "content-type": "application/json"
321
+ },
322
+ body: JSON.stringify({ message })
323
+ },
324
+ null
325
+ );
326
+ }
327
+ async listChatMessages(threadId) {
328
+ const response = await this.sendAdminRequest(
329
+ `/internal/ai-chat/${threadId}`,
330
+ { method: "GET" },
331
+ null
332
+ );
333
+ return await response.json();
334
+ }
335
+ async renderEmailPreview(options) {
290
336
  const response = await this.sendAdminRequest(`/emails/render-email`, {
291
337
  method: "POST",
292
338
  headers: {
293
339
  "content-type": "application/json"
294
340
  },
295
341
  body: JSON.stringify({
296
- theme,
297
- preview_html: content
342
+ theme_id: options.themeId,
343
+ theme_tsx_source: options.themeTsxSource,
344
+ template_id: options.templateId,
345
+ template_tsx_source: options.templateTsxSource
298
346
  })
299
347
  }, null);
300
348
  return await response.json();
301
349
  }
350
+ async createEmailTheme(displayName) {
351
+ const response = await this.sendAdminRequest(
352
+ `/internal/email-themes`,
353
+ {
354
+ method: "POST",
355
+ headers: {
356
+ "content-type": "application/json"
357
+ },
358
+ body: JSON.stringify({
359
+ display_name: displayName
360
+ })
361
+ },
362
+ null
363
+ );
364
+ return await response.json();
365
+ }
366
+ async getEmailTheme(id) {
367
+ const response = await this.sendAdminRequest(
368
+ `/internal/email-themes/${id}`,
369
+ { method: "GET" },
370
+ null
371
+ );
372
+ return await response.json();
373
+ }
374
+ async updateEmailTheme(id, tsxSource) {
375
+ await this.sendAdminRequest(
376
+ `/internal/email-themes/${id}`,
377
+ {
378
+ method: "PATCH",
379
+ headers: {
380
+ "content-type": "application/json"
381
+ },
382
+ body: JSON.stringify({
383
+ tsx_source: tsxSource
384
+ })
385
+ },
386
+ null
387
+ );
388
+ }
389
+ async updateNewEmailTemplate(id, tsxSource) {
390
+ const response = await this.sendAdminRequest(
391
+ `/internal/email-templates/${id}`,
392
+ {
393
+ method: "PATCH",
394
+ headers: {
395
+ "content-type": "application/json"
396
+ },
397
+ body: JSON.stringify({ tsx_source: tsxSource })
398
+ },
399
+ null
400
+ );
401
+ return await response.json();
402
+ }
302
403
  };
303
404
  // Annotate the CommonJS export names for ESM import in node:
304
405
  0 && (module.exports = {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/interface/admin-interface.ts"],"sourcesContent":["import { InternalSession } from \"../sessions\";\nimport { EmailTemplateCrud, EmailTemplateType } from \"./crud/email-templates\";\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 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 listEmailTemplates(): Promise<EmailTemplateCrud['Admin']['Read'][]> {\n const response = await this.sendAdminRequest(`/email-templates`, {}, null);\n const result = await response.json() as EmailTemplateCrud['Admin']['List'];\n return result.items;\n }\n\n async updateEmailTemplate(type: EmailTemplateType, data: EmailTemplateCrud['Admin']['Update']): Promise<EmailTemplateCrud['Admin']['Read']> {\n const result = await this.sendAdminRequest(\n `/email-templates/${type}`,\n {\n method: \"PATCH\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(data),\n },\n null,\n );\n return await result.json();\n }\n\n async resetEmailTemplate(type: EmailTemplateType): Promise<void> {\n await this.sendAdminRequest(\n `/email-templates/${type}`,\n { method: \"DELETE\" },\n null\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 sendEmail(options: {\n user_ids: string[],\n subject: string,\n html: string,\n notification_category_name: string,\n }): Promise<void> {\n await this.sendAdminRequest(\"/emails/send-email\", {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(options),\n }, null);\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 async renderEmailThemePreview(theme: string, content: 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,\n preview_html: content,\n }),\n }, null);\n return await response.json();\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA,8BAAmE;AAyB5D,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,qBAAoE;AACxE,UAAM,WAAW,MAAM,KAAK,iBAAiB,oBAAoB,CAAC,GAAG,IAAI;AACzE,UAAM,SAAS,MAAM,SAAS,KAAK;AACnC,WAAO,OAAO;AAAA,EAChB;AAAA,EAEA,MAAM,oBAAoB,MAAyB,MAAyF;AAC1I,UAAM,SAAS,MAAM,KAAK;AAAA,MACxB,oBAAoB,IAAI;AAAA,MACxB;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,OAAO,KAAK;AAAA,EAC3B;AAAA,EAEA,MAAM,mBAAmB,MAAwC;AAC/D,UAAM,KAAK;AAAA,MACT,oBAAoB,IAAI;AAAA,MACxB,EAAE,QAAQ,SAAS;AAAA,MACnB;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,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,UAAU,SAKE;AAChB,UAAM,KAAK,iBAAiB,sBAAsB;AAAA,MAChD,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,gBAAgB;AAAA,MAClB;AAAA,MACA,MAAM,KAAK,UAAU,OAAO;AAAA,IAC9B,GAAG,IAAI;AAAA,EACT;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,EAEA,MAAM,wBAAwB,OAAe,SAA4C;AACvF,UAAM,WAAW,MAAM,KAAK,iBAAiB,wBAAwB;AAAA,MACnE,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,gBAAgB;AAAA,MAClB;AAAA,MACA,MAAM,KAAK,UAAU;AAAA,QACnB;AAAA,QACA,cAAc;AAAA,MAChB,CAAC;AAAA,IACH,GAAG,IAAI;AACP,WAAO,MAAM,SAAS,KAAK;AAAA,EAC7B;AACF;","names":[]}
1
+ {"version":3,"sources":["../../src/interface/admin-interface.ts"],"sourcesContent":["import { InternalSession } from \"../sessions\";\nimport { EmailTemplateCrud, EmailTemplateType } from \"./crud/email-templates\";\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 listEmailTemplates(): Promise<EmailTemplateCrud['Admin']['Read'][]> {\n const response = await this.sendAdminRequest(`/email-templates`, {}, null);\n const result = await response.json() as EmailTemplateCrud['Admin']['List'];\n return result.items;\n }\n\n async listInternalEmailTemplatesNew(): Promise<{ id: string, subject: string, display_name: string, tsx_source: string }[]> {\n const response = await this.sendAdminRequest(`/internal/email-templates`, {}, null);\n const result = await response.json() as { templates: { id: string, subject: string, display_name: 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 async updateEmailTemplate(type: EmailTemplateType, data: EmailTemplateCrud['Admin']['Update']): Promise<EmailTemplateCrud['Admin']['Read']> {\n const result = await this.sendAdminRequest(\n `/email-templates/${type}`,\n {\n method: \"PATCH\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(data),\n },\n null,\n );\n return await result.json();\n }\n\n async resetEmailTemplate(type: EmailTemplateType): Promise<void> {\n await this.sendAdminRequest(\n `/email-templates/${type}`,\n { method: \"DELETE\" },\n null\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 sendEmail(options: {\n user_ids: string[],\n subject: string,\n html: string,\n notification_category_name: string,\n }): Promise<void> {\n await this.sendAdminRequest(\"/emails/send-email\", {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(options),\n }, null);\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, 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 updateNewEmailTemplate(id: string, tsxSource: string): 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 }),\n },\n null,\n );\n return await response.json();\n }\n}\n"],"mappings":"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","names":[]}
@@ -4,10 +4,10 @@ import { InternalSession, RefreshToken, AccessToken } from '../sessions.mjs';
4
4
  import { ReadonlyJson } from '../utils/json.mjs';
5
5
  import { PublicKeyCredentialCreationOptionsJSON, RegistrationResponseJSON, PublicKeyCredentialRequestOptionsJSON, AuthenticationResponseJSON } from '@simplewebauthn/types';
6
6
  import { Result } from '../utils/results.mjs';
7
+ import { ConnectedAccountAccessTokenCrud } from './crud/connected-accounts.mjs';
7
8
  import { ContactChannelsCrud } from './crud/contact-channels.mjs';
8
9
  import { CurrentUserCrud } from './crud/current-user.mjs';
9
10
  import { NotificationPreferenceCrud } from './crud/notification-preferences.mjs';
10
- import { ConnectedAccountAccessTokenCrud } from './crud/oauth.mjs';
11
11
  import { UserApiKeysCrud, TeamApiKeysCrud, userApiKeysCreateInputSchema, userApiKeysCreateOutputSchema, teamApiKeysCreateInputSchema, teamApiKeysCreateOutputSchema } from './crud/project-api-keys.mjs';
12
12
  import { ProjectPermissionsCrud } from './crud/project-permissions.mjs';
13
13
  import { ClientProjectsCrud, AdminUserProjectsCrud } from './crud/projects.mjs';
@@ -263,6 +263,29 @@ declare class StackClientInterface {
263
263
  checkProjectApiKey(type: "user" | "team", apiKey: string, session: InternalSession | null, requestType: "client" | "server" | "admin"): Promise<UserApiKeysCrud['Client']['Read'] | TeamApiKeysCrud['Client']['Read'] | null>;
264
264
  listNotificationCategories(session: InternalSession): Promise<NotificationPreferenceCrud['Client']['Read'][]>;
265
265
  setNotificationsEnabled(notificationCategoryId: string, enabled: boolean, session: InternalSession): Promise<void>;
266
+ getOAuthProvider(userId: string, providerId: string, session: InternalSession | null, requestType?: "client" | "server" | "admin"): Promise<{
267
+ id: string;
268
+ type: string;
269
+ user_id: string;
270
+ account_id?: string;
271
+ email: string;
272
+ allow_sign_in: boolean;
273
+ allow_connected_accounts: boolean;
274
+ }>;
275
+ listOAuthProviders(options: {
276
+ user_id?: string | undefined;
277
+ } | undefined, session: InternalSession | null, requestType?: "client" | "server" | "admin"): Promise<{
278
+ id: string;
279
+ type: string;
280
+ user_id: string;
281
+ account_id?: string;
282
+ email: string;
283
+ allow_sign_in: boolean;
284
+ allow_connected_accounts: boolean;
285
+ }[]>;
286
+ deleteOAuthProvider(userId: string, providerId: string, session: InternalSession | null, requestType?: "client" | "server" | "admin"): Promise<{
287
+ success: boolean;
288
+ }>;
266
289
  }
267
290
 
268
291
  export { type ClientInterfaceOptions, StackClientInterface };
@@ -4,10 +4,10 @@ import { InternalSession, RefreshToken, AccessToken } from '../sessions.js';
4
4
  import { ReadonlyJson } from '../utils/json.js';
5
5
  import { PublicKeyCredentialCreationOptionsJSON, RegistrationResponseJSON, PublicKeyCredentialRequestOptionsJSON, AuthenticationResponseJSON } from '@simplewebauthn/types';
6
6
  import { Result } from '../utils/results.js';
7
+ import { ConnectedAccountAccessTokenCrud } from './crud/connected-accounts.js';
7
8
  import { ContactChannelsCrud } from './crud/contact-channels.js';
8
9
  import { CurrentUserCrud } from './crud/current-user.js';
9
10
  import { NotificationPreferenceCrud } from './crud/notification-preferences.js';
10
- import { ConnectedAccountAccessTokenCrud } from './crud/oauth.js';
11
11
  import { UserApiKeysCrud, TeamApiKeysCrud, userApiKeysCreateInputSchema, userApiKeysCreateOutputSchema, teamApiKeysCreateInputSchema, teamApiKeysCreateOutputSchema } from './crud/project-api-keys.js';
12
12
  import { ProjectPermissionsCrud } from './crud/project-permissions.js';
13
13
  import { ClientProjectsCrud, AdminUserProjectsCrud } from './crud/projects.js';
@@ -263,6 +263,29 @@ declare class StackClientInterface {
263
263
  checkProjectApiKey(type: "user" | "team", apiKey: string, session: InternalSession | null, requestType: "client" | "server" | "admin"): Promise<UserApiKeysCrud['Client']['Read'] | TeamApiKeysCrud['Client']['Read'] | null>;
264
264
  listNotificationCategories(session: InternalSession): Promise<NotificationPreferenceCrud['Client']['Read'][]>;
265
265
  setNotificationsEnabled(notificationCategoryId: string, enabled: boolean, session: InternalSession): Promise<void>;
266
+ getOAuthProvider(userId: string, providerId: string, session: InternalSession | null, requestType?: "client" | "server" | "admin"): Promise<{
267
+ id: string;
268
+ type: string;
269
+ user_id: string;
270
+ account_id?: string;
271
+ email: string;
272
+ allow_sign_in: boolean;
273
+ allow_connected_accounts: boolean;
274
+ }>;
275
+ listOAuthProviders(options: {
276
+ user_id?: string | undefined;
277
+ } | undefined, session: InternalSession | null, requestType?: "client" | "server" | "admin"): Promise<{
278
+ id: string;
279
+ type: string;
280
+ user_id: string;
281
+ account_id?: string;
282
+ email: string;
283
+ allow_sign_in: boolean;
284
+ allow_connected_accounts: boolean;
285
+ }[]>;
286
+ deleteOAuthProvider(userId: string, providerId: string, session: InternalSession | null, requestType?: "client" | "server" | "admin"): Promise<{
287
+ success: boolean;
288
+ }>;
266
289
  }
267
290
 
268
291
  export { type ClientInterfaceOptions, StackClientInterface };