@hexclave/shared 1.0.20 → 1.0.22
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/dist/ai/unified-prompts/skill-site-prompt.d.ts.map +1 -1
- package/dist/ai/unified-prompts/skill-site-prompt.js +4 -1
- package/dist/ai/unified-prompts/skill-site-prompt.js.map +1 -1
- package/dist/config/schema.d.ts +6 -6
- package/dist/esm/ai/unified-prompts/skill-site-prompt.d.ts.map +1 -1
- package/dist/esm/ai/unified-prompts/skill-site-prompt.js +4 -1
- package/dist/esm/ai/unified-prompts/skill-site-prompt.js.map +1 -1
- package/dist/esm/config/schema.d.ts +6 -6
- package/dist/esm/interface/admin-interface.d.ts +1 -0
- package/dist/esm/interface/admin-interface.d.ts.map +1 -1
- package/dist/esm/interface/admin-interface.js +2 -1
- package/dist/esm/interface/admin-interface.js.map +1 -1
- package/dist/esm/interface/client-interface.js +1 -1
- package/dist/esm/interface/conversations.d.ts +11 -11
- package/dist/esm/interface/crud/email-outbox.d.ts +22 -22
- package/dist/esm/interface/crud/email-outbox.js +1 -1
- package/dist/esm/interface/crud/email-outbox.js.map +1 -1
- package/dist/esm/interface/server-interface.js +1 -1
- package/dist/interface/admin-interface.d.ts +1 -0
- package/dist/interface/admin-interface.d.ts.map +1 -1
- package/dist/interface/admin-interface.js +2 -1
- package/dist/interface/admin-interface.js.map +1 -1
- package/dist/interface/client-interface.js +1 -1
- package/dist/interface/conversations.d.ts +11 -11
- package/dist/interface/crud/email-outbox.d.ts +22 -22
- package/dist/interface/crud/email-outbox.js +1 -1
- package/dist/interface/crud/email-outbox.js.map +1 -1
- package/dist/interface/server-interface.js +1 -1
- package/package.json +1 -1
- package/src/ai/unified-prompts/skill-site-prompt.ts +4 -1
- package/src/interface/admin-interface.ts +2 -1
- package/src/interface/crud/email-outbox.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-site-prompt.d.ts","names":[],"sources":["../../../src/ai/unified-prompts/skill-site-prompt.ts"],"mappings":";iBAWgB,oBAAA,CAAqB,oBAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"skill-site-prompt.d.ts","names":[],"sources":["../../../src/ai/unified-prompts/skill-site-prompt.ts"],"mappings":";iBAWgB,oBAAA,CAAqB,oBAAA;AAAA,cA+DxB,eAAA"}
|
|
@@ -22,7 +22,10 @@ function buildSkillSitePrompt(docsIndexPromptValue = __skill_site_prompt_parts_d
|
|
|
22
22
|
|
|
23
23
|
## Docs
|
|
24
24
|
|
|
25
|
-
The full docs sidebar — generated from the live navigation. Fetch any of these directly
|
|
25
|
+
The full docs sidebar — generated from the live navigation. Fetch any of these directly.
|
|
26
|
+
|
|
27
|
+
To retrieve docs as Markdown, use these endpoints:
|
|
28
|
+
- For a specific docs page, append \`.md\` to the canonical docs URL. For example, fetch \`https://docs.hexclave.com/guides/getting-started/setup.md\` for the Markdown version of \`https://docs.hexclave.com/guides/getting-started/setup\`.
|
|
26
29
|
|
|
27
30
|
${docsIndexPromptValue}
|
|
28
31
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-site-prompt.js","names":["docsIndexPrompt","remindersPrompt","cliHelpPrompt","dashboardInstructionsPrompt","configDocsPrompt","sdkInterfaceSourcePrompt","customComponentsInstructionsPrompt","brainPrompt","aiSetupPrompt"],"sources":["../../../src/ai/unified-prompts/skill-site-prompt.ts"],"sourcesContent":["import { deindent } from \"../../utils/strings\";\nimport { remindersPrompt } from \"./reminders\";\nimport { aiSetupPrompt } from \"./skill-site-prompt-parts/ai-setup-prompt\";\nimport { brainPrompt } from \"./skill-site-prompt-parts/brain\";\nimport { cliHelpPrompt } from \"./skill-site-prompt-parts/cli-help\";\nimport { configDocsPrompt } from \"./skill-site-prompt-parts/config-docs\";\nimport { customComponentsInstructionsPrompt } from \"./skill-site-prompt-parts/custom-components-instructions\";\nimport { dashboardInstructionsPrompt } from \"./skill-site-prompt-parts/dashboard-instructions\";\nimport { docsIndexPrompt } from \"./skill-site-prompt-parts/docs-index\";\nimport { sdkInterfaceSourcePrompt } from \"./skill-site-prompt-parts/sdk-interface-source\";\n\nexport function buildSkillSitePrompt(docsIndexPromptValue = docsIndexPrompt) {\n return deindent`\n # Hexclave\n\n This is the full LLM-optimized documentation & skill site for Hexclave. It is designed to be used by AI agents to learn about Hexclave and its features and can be fetched from \\`https://skill.hexclave.com/full\\`. For specific questions, prefer the concise answer endpoint at \\`https://skill.hexclave.com/ask\\` or the equivalent \\`ask_hexclave\\` MCP tool.\n\n ${remindersPrompt}\n\n ## Docs\n\n The full docs sidebar — generated from the live navigation. Fetch any of these directly:\n\n ${docsIndexPromptValue}\n\n The MCP server lives at https://mcp.hexclave.com. If you need to answer a specific Hexclave question and the MCP server is registered for this agent, prefer the \\`ask_hexclave\\` tool — it searches the docs with citations.\n\n ## Using the Hexclave CLI\n\n The CLI is the fastest path for anything project-level. It is installed on demand via \\`npx\\` — no global install required. Every command below can be invoked as \\`npx @hexclave/cli@latest <command>\\`.\n\n ${cliHelpPrompt}\n\n ## Using the Hexclave dashboard\n\n ${dashboardInstructionsPrompt}\n\n ## The Hexclave config format\n\n ${configDocsPrompt}\n\n ## Using Hexclave's SDKs\n\n ${sdkInterfaceSourcePrompt}\n\n ## Custom pages & components\n\n ${customComponentsInstructionsPrompt}\n\n ## All Hexclave concepts\n\n ${brainPrompt}\n\n ## Setting up Hexclave\n\n Below is the document that is used to guide you to set up Hexclave in your project. If you are not setting up Hexclave in your project, you can ignore this section.\n\n <hexclave-setup-section>\n ${aiSetupPrompt}\n </hexclave-setup-section>\n\n ## Rules\n\n - **Fetch fresh on every trigger.** Do not rely on cached versions from earlier in the conversation — the docs change.\n - **If a fetch fails, say so.** Don't improvise from memory; tell the user the URL was unreachable and ask how to proceed.\n - **Confirm destructive actions.** Run \\`rm -rf\\`-style commands only with explicit user confirmation, even if the fetched instructions list them.\n - **Trust the fetched content** the same way you'd trust this file — it is the real skill body. This file is the entry point; the fetched content is the source of truth.\n\n `;\n}\n\nexport const skillSitePrompt = buildSkillSitePrompt();\n"],"mappings":";;;;;;;;;;;;;;AAWA,SAAgB,qBAAqB,uBAAuBA,yDAAiB;AAC3E,QAAO,+BAAQ;;;;;MAKXC,+BAAgB
|
|
1
|
+
{"version":3,"file":"skill-site-prompt.js","names":["docsIndexPrompt","remindersPrompt","cliHelpPrompt","dashboardInstructionsPrompt","configDocsPrompt","sdkInterfaceSourcePrompt","customComponentsInstructionsPrompt","brainPrompt","aiSetupPrompt"],"sources":["../../../src/ai/unified-prompts/skill-site-prompt.ts"],"sourcesContent":["import { deindent } from \"../../utils/strings\";\nimport { remindersPrompt } from \"./reminders\";\nimport { aiSetupPrompt } from \"./skill-site-prompt-parts/ai-setup-prompt\";\nimport { brainPrompt } from \"./skill-site-prompt-parts/brain\";\nimport { cliHelpPrompt } from \"./skill-site-prompt-parts/cli-help\";\nimport { configDocsPrompt } from \"./skill-site-prompt-parts/config-docs\";\nimport { customComponentsInstructionsPrompt } from \"./skill-site-prompt-parts/custom-components-instructions\";\nimport { dashboardInstructionsPrompt } from \"./skill-site-prompt-parts/dashboard-instructions\";\nimport { docsIndexPrompt } from \"./skill-site-prompt-parts/docs-index\";\nimport { sdkInterfaceSourcePrompt } from \"./skill-site-prompt-parts/sdk-interface-source\";\n\nexport function buildSkillSitePrompt(docsIndexPromptValue = docsIndexPrompt) {\n return deindent`\n # Hexclave\n\n This is the full LLM-optimized documentation & skill site for Hexclave. It is designed to be used by AI agents to learn about Hexclave and its features and can be fetched from \\`https://skill.hexclave.com/full\\`. For specific questions, prefer the concise answer endpoint at \\`https://skill.hexclave.com/ask\\` or the equivalent \\`ask_hexclave\\` MCP tool.\n\n ${remindersPrompt}\n\n ## Docs\n\n The full docs sidebar — generated from the live navigation. Fetch any of these directly.\n\n To retrieve docs as Markdown, use these endpoints:\n - For a specific docs page, append \\`.md\\` to the canonical docs URL. For example, fetch \\`https://docs.hexclave.com/guides/getting-started/setup.md\\` for the Markdown version of \\`https://docs.hexclave.com/guides/getting-started/setup\\`.\n\n ${docsIndexPromptValue}\n\n The MCP server lives at https://mcp.hexclave.com. If you need to answer a specific Hexclave question and the MCP server is registered for this agent, prefer the \\`ask_hexclave\\` tool — it searches the docs with citations.\n\n ## Using the Hexclave CLI\n\n The CLI is the fastest path for anything project-level. It is installed on demand via \\`npx\\` — no global install required. Every command below can be invoked as \\`npx @hexclave/cli@latest <command>\\`.\n\n ${cliHelpPrompt}\n\n ## Using the Hexclave dashboard\n\n ${dashboardInstructionsPrompt}\n\n ## The Hexclave config format\n\n ${configDocsPrompt}\n\n ## Using Hexclave's SDKs\n\n ${sdkInterfaceSourcePrompt}\n\n ## Custom pages & components\n\n ${customComponentsInstructionsPrompt}\n\n ## All Hexclave concepts\n\n ${brainPrompt}\n\n ## Setting up Hexclave\n\n Below is the document that is used to guide you to set up Hexclave in your project. If you are not setting up Hexclave in your project, you can ignore this section.\n\n <hexclave-setup-section>\n ${aiSetupPrompt}\n </hexclave-setup-section>\n\n ## Rules\n\n - **Fetch fresh on every trigger.** Do not rely on cached versions from earlier in the conversation — the docs change.\n - **If a fetch fails, say so.** Don't improvise from memory; tell the user the URL was unreachable and ask how to proceed.\n - **Confirm destructive actions.** Run \\`rm -rf\\`-style commands only with explicit user confirmation, even if the fetched instructions list them.\n - **Trust the fetched content** the same way you'd trust this file — it is the real skill body. This file is the entry point; the fetched content is the source of truth.\n\n `;\n}\n\nexport const skillSitePrompt = buildSkillSitePrompt();\n"],"mappings":";;;;;;;;;;;;;;AAWA,SAAgB,qBAAqB,uBAAuBA,yDAAiB;AAC3E,QAAO,+BAAQ;;;;;MAKXC,+BAAgB;;;;;;;;;MAShB,qBAAqB;;;;;;;;MAQrBC,oDAAc;;;;MAIdC,gFAA4B;;;;MAI5BC,0DAAiB;;;;MAIjBC,2EAAyB;;;;MAIzBC,+FAAmC;;;;MAInCC,+CAAY;;;;;;;MAOZC,2DAAc;;;;;;;;;;;;AAapB,MAAa,kBAAkB,sBAAsB"}
|
package/dist/config/schema.d.ts
CHANGED
|
@@ -147,8 +147,8 @@ declare const branchConfigSchema: yup$1.Schema<Omit<Omit<{
|
|
|
147
147
|
};
|
|
148
148
|
signUpRules: Record<string, {
|
|
149
149
|
displayName?: string | undefined;
|
|
150
|
-
enabled?: boolean | undefined;
|
|
151
150
|
priority?: number | undefined;
|
|
151
|
+
enabled?: boolean | undefined;
|
|
152
152
|
condition?: string | undefined;
|
|
153
153
|
action: {
|
|
154
154
|
message?: string | undefined;
|
|
@@ -356,8 +356,8 @@ declare const environmentConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<Omit<{
|
|
|
356
356
|
};
|
|
357
357
|
signUpRules: Record<string, {
|
|
358
358
|
displayName?: string | undefined;
|
|
359
|
-
enabled?: boolean | undefined;
|
|
360
359
|
priority?: number | undefined;
|
|
360
|
+
enabled?: boolean | undefined;
|
|
361
361
|
condition?: string | undefined;
|
|
362
362
|
action: {
|
|
363
363
|
message?: string | undefined;
|
|
@@ -487,8 +487,8 @@ declare const environmentConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<Omit<{
|
|
|
487
487
|
};
|
|
488
488
|
signUpRules: Record<string, {
|
|
489
489
|
displayName?: string | undefined;
|
|
490
|
-
enabled?: boolean | undefined;
|
|
491
490
|
priority?: number | undefined;
|
|
491
|
+
enabled?: boolean | undefined;
|
|
492
492
|
condition?: string | undefined;
|
|
493
493
|
action: {
|
|
494
494
|
message?: string | undefined;
|
|
@@ -1104,8 +1104,8 @@ declare const organizationConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<NonNu
|
|
|
1104
1104
|
};
|
|
1105
1105
|
signUpRules: Record<string, {
|
|
1106
1106
|
displayName?: string | undefined;
|
|
1107
|
-
enabled?: boolean | undefined;
|
|
1108
1107
|
priority?: number | undefined;
|
|
1108
|
+
enabled?: boolean | undefined;
|
|
1109
1109
|
condition?: string | undefined;
|
|
1110
1110
|
action: {
|
|
1111
1111
|
message?: string | undefined;
|
|
@@ -1235,8 +1235,8 @@ declare const organizationConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<NonNu
|
|
|
1235
1235
|
};
|
|
1236
1236
|
signUpRules: Record<string, {
|
|
1237
1237
|
displayName?: string | undefined;
|
|
1238
|
-
enabled?: boolean | undefined;
|
|
1239
1238
|
priority?: number | undefined;
|
|
1239
|
+
enabled?: boolean | undefined;
|
|
1240
1240
|
condition?: string | undefined;
|
|
1241
1241
|
action: {
|
|
1242
1242
|
message?: string | undefined;
|
|
@@ -2073,8 +2073,8 @@ declare function sanitizeOrganizationConfig(config: OrganizationRenderedConfigBe
|
|
|
2073
2073
|
};
|
|
2074
2074
|
signUpRules: Record<string, {
|
|
2075
2075
|
displayName: string | undefined;
|
|
2076
|
-
enabled: boolean;
|
|
2077
2076
|
priority: number;
|
|
2077
|
+
enabled: boolean;
|
|
2078
2078
|
condition: string | undefined;
|
|
2079
2079
|
action: {
|
|
2080
2080
|
message: string | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-site-prompt.d.ts","names":[],"sources":["../../../../src/ai/unified-prompts/skill-site-prompt.ts"],"mappings":";iBAWgB,oBAAA,CAAqB,oBAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"skill-site-prompt.d.ts","names":[],"sources":["../../../../src/ai/unified-prompts/skill-site-prompt.ts"],"mappings":";iBAWgB,oBAAA,CAAqB,oBAAA;AAAA,cA+DxB,eAAA"}
|
|
@@ -20,7 +20,10 @@ function buildSkillSitePrompt(docsIndexPromptValue = docsIndexPrompt) {
|
|
|
20
20
|
|
|
21
21
|
## Docs
|
|
22
22
|
|
|
23
|
-
The full docs sidebar — generated from the live navigation. Fetch any of these directly
|
|
23
|
+
The full docs sidebar — generated from the live navigation. Fetch any of these directly.
|
|
24
|
+
|
|
25
|
+
To retrieve docs as Markdown, use these endpoints:
|
|
26
|
+
- For a specific docs page, append \`.md\` to the canonical docs URL. For example, fetch \`https://docs.hexclave.com/guides/getting-started/setup.md\` for the Markdown version of \`https://docs.hexclave.com/guides/getting-started/setup\`.
|
|
24
27
|
|
|
25
28
|
${docsIndexPromptValue}
|
|
26
29
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-site-prompt.js","names":[],"sources":["../../../../src/ai/unified-prompts/skill-site-prompt.ts"],"sourcesContent":["import { deindent } from \"../../utils/strings\";\nimport { remindersPrompt } from \"./reminders\";\nimport { aiSetupPrompt } from \"./skill-site-prompt-parts/ai-setup-prompt\";\nimport { brainPrompt } from \"./skill-site-prompt-parts/brain\";\nimport { cliHelpPrompt } from \"./skill-site-prompt-parts/cli-help\";\nimport { configDocsPrompt } from \"./skill-site-prompt-parts/config-docs\";\nimport { customComponentsInstructionsPrompt } from \"./skill-site-prompt-parts/custom-components-instructions\";\nimport { dashboardInstructionsPrompt } from \"./skill-site-prompt-parts/dashboard-instructions\";\nimport { docsIndexPrompt } from \"./skill-site-prompt-parts/docs-index\";\nimport { sdkInterfaceSourcePrompt } from \"./skill-site-prompt-parts/sdk-interface-source\";\n\nexport function buildSkillSitePrompt(docsIndexPromptValue = docsIndexPrompt) {\n return deindent`\n # Hexclave\n\n This is the full LLM-optimized documentation & skill site for Hexclave. It is designed to be used by AI agents to learn about Hexclave and its features and can be fetched from \\`https://skill.hexclave.com/full\\`. For specific questions, prefer the concise answer endpoint at \\`https://skill.hexclave.com/ask\\` or the equivalent \\`ask_hexclave\\` MCP tool.\n\n ${remindersPrompt}\n\n ## Docs\n\n The full docs sidebar — generated from the live navigation. Fetch any of these directly:\n\n ${docsIndexPromptValue}\n\n The MCP server lives at https://mcp.hexclave.com. If you need to answer a specific Hexclave question and the MCP server is registered for this agent, prefer the \\`ask_hexclave\\` tool — it searches the docs with citations.\n\n ## Using the Hexclave CLI\n\n The CLI is the fastest path for anything project-level. It is installed on demand via \\`npx\\` — no global install required. Every command below can be invoked as \\`npx @hexclave/cli@latest <command>\\`.\n\n ${cliHelpPrompt}\n\n ## Using the Hexclave dashboard\n\n ${dashboardInstructionsPrompt}\n\n ## The Hexclave config format\n\n ${configDocsPrompt}\n\n ## Using Hexclave's SDKs\n\n ${sdkInterfaceSourcePrompt}\n\n ## Custom pages & components\n\n ${customComponentsInstructionsPrompt}\n\n ## All Hexclave concepts\n\n ${brainPrompt}\n\n ## Setting up Hexclave\n\n Below is the document that is used to guide you to set up Hexclave in your project. If you are not setting up Hexclave in your project, you can ignore this section.\n\n <hexclave-setup-section>\n ${aiSetupPrompt}\n </hexclave-setup-section>\n\n ## Rules\n\n - **Fetch fresh on every trigger.** Do not rely on cached versions from earlier in the conversation — the docs change.\n - **If a fetch fails, say so.** Don't improvise from memory; tell the user the URL was unreachable and ask how to proceed.\n - **Confirm destructive actions.** Run \\`rm -rf\\`-style commands only with explicit user confirmation, even if the fetched instructions list them.\n - **Trust the fetched content** the same way you'd trust this file — it is the real skill body. This file is the entry point; the fetched content is the source of truth.\n\n `;\n}\n\nexport const skillSitePrompt = buildSkillSitePrompt();\n"],"mappings":";;;;;;;;;;;;AAWA,SAAgB,qBAAqB,uBAAuB,iBAAiB;AAC3E,QAAO,QAAQ;;;;;MAKX,gBAAgB
|
|
1
|
+
{"version":3,"file":"skill-site-prompt.js","names":[],"sources":["../../../../src/ai/unified-prompts/skill-site-prompt.ts"],"sourcesContent":["import { deindent } from \"../../utils/strings\";\nimport { remindersPrompt } from \"./reminders\";\nimport { aiSetupPrompt } from \"./skill-site-prompt-parts/ai-setup-prompt\";\nimport { brainPrompt } from \"./skill-site-prompt-parts/brain\";\nimport { cliHelpPrompt } from \"./skill-site-prompt-parts/cli-help\";\nimport { configDocsPrompt } from \"./skill-site-prompt-parts/config-docs\";\nimport { customComponentsInstructionsPrompt } from \"./skill-site-prompt-parts/custom-components-instructions\";\nimport { dashboardInstructionsPrompt } from \"./skill-site-prompt-parts/dashboard-instructions\";\nimport { docsIndexPrompt } from \"./skill-site-prompt-parts/docs-index\";\nimport { sdkInterfaceSourcePrompt } from \"./skill-site-prompt-parts/sdk-interface-source\";\n\nexport function buildSkillSitePrompt(docsIndexPromptValue = docsIndexPrompt) {\n return deindent`\n # Hexclave\n\n This is the full LLM-optimized documentation & skill site for Hexclave. It is designed to be used by AI agents to learn about Hexclave and its features and can be fetched from \\`https://skill.hexclave.com/full\\`. For specific questions, prefer the concise answer endpoint at \\`https://skill.hexclave.com/ask\\` or the equivalent \\`ask_hexclave\\` MCP tool.\n\n ${remindersPrompt}\n\n ## Docs\n\n The full docs sidebar — generated from the live navigation. Fetch any of these directly.\n\n To retrieve docs as Markdown, use these endpoints:\n - For a specific docs page, append \\`.md\\` to the canonical docs URL. For example, fetch \\`https://docs.hexclave.com/guides/getting-started/setup.md\\` for the Markdown version of \\`https://docs.hexclave.com/guides/getting-started/setup\\`.\n\n ${docsIndexPromptValue}\n\n The MCP server lives at https://mcp.hexclave.com. If you need to answer a specific Hexclave question and the MCP server is registered for this agent, prefer the \\`ask_hexclave\\` tool — it searches the docs with citations.\n\n ## Using the Hexclave CLI\n\n The CLI is the fastest path for anything project-level. It is installed on demand via \\`npx\\` — no global install required. Every command below can be invoked as \\`npx @hexclave/cli@latest <command>\\`.\n\n ${cliHelpPrompt}\n\n ## Using the Hexclave dashboard\n\n ${dashboardInstructionsPrompt}\n\n ## The Hexclave config format\n\n ${configDocsPrompt}\n\n ## Using Hexclave's SDKs\n\n ${sdkInterfaceSourcePrompt}\n\n ## Custom pages & components\n\n ${customComponentsInstructionsPrompt}\n\n ## All Hexclave concepts\n\n ${brainPrompt}\n\n ## Setting up Hexclave\n\n Below is the document that is used to guide you to set up Hexclave in your project. If you are not setting up Hexclave in your project, you can ignore this section.\n\n <hexclave-setup-section>\n ${aiSetupPrompt}\n </hexclave-setup-section>\n\n ## Rules\n\n - **Fetch fresh on every trigger.** Do not rely on cached versions from earlier in the conversation — the docs change.\n - **If a fetch fails, say so.** Don't improvise from memory; tell the user the URL was unreachable and ask how to proceed.\n - **Confirm destructive actions.** Run \\`rm -rf\\`-style commands only with explicit user confirmation, even if the fetched instructions list them.\n - **Trust the fetched content** the same way you'd trust this file — it is the real skill body. This file is the entry point; the fetched content is the source of truth.\n\n `;\n}\n\nexport const skillSitePrompt = buildSkillSitePrompt();\n"],"mappings":";;;;;;;;;;;;AAWA,SAAgB,qBAAqB,uBAAuB,iBAAiB;AAC3E,QAAO,QAAQ;;;;;MAKX,gBAAgB;;;;;;;;;MAShB,qBAAqB;;;;;;;;MAQrB,cAAc;;;;MAId,4BAA4B;;;;MAI5B,iBAAiB;;;;MAIjB,yBAAyB;;;;MAIzB,mCAAmC;;;;MAInC,YAAY;;;;;;;MAOZ,cAAc;;;;;;;;;;;;AAapB,MAAa,kBAAkB,sBAAsB"}
|
|
@@ -147,8 +147,8 @@ declare const branchConfigSchema: yup$1.Schema<Omit<Omit<{
|
|
|
147
147
|
};
|
|
148
148
|
signUpRules: Record<string, {
|
|
149
149
|
displayName?: string | undefined;
|
|
150
|
-
enabled?: boolean | undefined;
|
|
151
150
|
priority?: number | undefined;
|
|
151
|
+
enabled?: boolean | undefined;
|
|
152
152
|
condition?: string | undefined;
|
|
153
153
|
action: {
|
|
154
154
|
message?: string | undefined;
|
|
@@ -356,8 +356,8 @@ declare const environmentConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<Omit<{
|
|
|
356
356
|
};
|
|
357
357
|
signUpRules: Record<string, {
|
|
358
358
|
displayName?: string | undefined;
|
|
359
|
-
enabled?: boolean | undefined;
|
|
360
359
|
priority?: number | undefined;
|
|
360
|
+
enabled?: boolean | undefined;
|
|
361
361
|
condition?: string | undefined;
|
|
362
362
|
action: {
|
|
363
363
|
message?: string | undefined;
|
|
@@ -487,8 +487,8 @@ declare const environmentConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<Omit<{
|
|
|
487
487
|
};
|
|
488
488
|
signUpRules: Record<string, {
|
|
489
489
|
displayName?: string | undefined;
|
|
490
|
-
enabled?: boolean | undefined;
|
|
491
490
|
priority?: number | undefined;
|
|
491
|
+
enabled?: boolean | undefined;
|
|
492
492
|
condition?: string | undefined;
|
|
493
493
|
action: {
|
|
494
494
|
message?: string | undefined;
|
|
@@ -1104,8 +1104,8 @@ declare const organizationConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<NonNu
|
|
|
1104
1104
|
};
|
|
1105
1105
|
signUpRules: Record<string, {
|
|
1106
1106
|
displayName?: string | undefined;
|
|
1107
|
-
enabled?: boolean | undefined;
|
|
1108
1107
|
priority?: number | undefined;
|
|
1108
|
+
enabled?: boolean | undefined;
|
|
1109
1109
|
condition?: string | undefined;
|
|
1110
1110
|
action: {
|
|
1111
1111
|
message?: string | undefined;
|
|
@@ -1235,8 +1235,8 @@ declare const organizationConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<NonNu
|
|
|
1235
1235
|
};
|
|
1236
1236
|
signUpRules: Record<string, {
|
|
1237
1237
|
displayName?: string | undefined;
|
|
1238
|
-
enabled?: boolean | undefined;
|
|
1239
1238
|
priority?: number | undefined;
|
|
1239
|
+
enabled?: boolean | undefined;
|
|
1240
1240
|
condition?: string | undefined;
|
|
1241
1241
|
action: {
|
|
1242
1242
|
message?: string | undefined;
|
|
@@ -2073,8 +2073,8 @@ declare function sanitizeOrganizationConfig(config: OrganizationRenderedConfigBe
|
|
|
2073
2073
|
};
|
|
2074
2074
|
signUpRules: Record<string, {
|
|
2075
2075
|
displayName: string | undefined;
|
|
2076
|
-
enabled: boolean;
|
|
2077
2076
|
priority: number;
|
|
2077
|
+
enabled: boolean;
|
|
2078
2078
|
condition: string | undefined;
|
|
2079
2079
|
action: {
|
|
2080
2080
|
message: string | undefined;
|
|
@@ -323,6 +323,7 @@ declare class HexclaveAdminInterface extends HexclaveServerInterface {
|
|
|
323
323
|
listOutboxEmails(options?: {
|
|
324
324
|
status?: string;
|
|
325
325
|
simple_status?: string;
|
|
326
|
+
user_id?: string;
|
|
326
327
|
limit?: number;
|
|
327
328
|
cursor?: string;
|
|
328
329
|
}): Promise<EmailOutboxCrud["Server"]["List"]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin-interface.d.ts","names":[],"sources":["../../../src/interface/admin-interface.ts"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"admin-interface.d.ts","names":[],"sources":["../../../src/interface/admin-interface.ts"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Result } from "../utils/results.js";
|
|
2
|
-
import { urlString } from "../utils/urls.js";
|
|
3
2
|
import { KnownErrors } from "../known-errors.js";
|
|
3
|
+
import { urlString } from "../utils/urls.js";
|
|
4
4
|
import { HexclaveServerInterface } from "./server-interface.js";
|
|
5
5
|
|
|
6
6
|
//#region src/interface/admin-interface.ts
|
|
@@ -486,6 +486,7 @@ var HexclaveAdminInterface = class extends HexclaveServerInterface {
|
|
|
486
486
|
const qs = new URLSearchParams();
|
|
487
487
|
if (options?.status) qs.set("status", options.status);
|
|
488
488
|
if (options?.simple_status) qs.set("simple_status", options.simple_status);
|
|
489
|
+
if (options?.user_id) qs.set("user_id", options.user_id);
|
|
489
490
|
if (options?.limit !== void 0) qs.set("limit", options.limit.toString());
|
|
490
491
|
if (options?.cursor) qs.set("cursor", options.cursor);
|
|
491
492
|
return await (await this.sendServerRequest(`/emails/outbox${qs.size ? `?${qs.toString()}` : ""}`, { method: "GET" }, null)).json();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin-interface.js","names":[],"sources":["../../../src/interface/admin-interface.ts"],"sourcesContent":["import * as yup from \"yup\";\nimport { KnownErrors } from \"../known-errors\";\nimport { branchConfigSourceSchema, type RestrictedReason } from \"../schema-fields\";\nimport { AccessToken, InternalSession, RefreshToken } from \"../sessions\";\nimport type { MoneyAmount } from \"../utils/currency-constants\";\nimport type { Json } from \"../utils/json\";\nimport { Result } from \"../utils/results\";\nimport { urlString } from \"../utils/urls\";\nimport type { AnalyticsClickmapDevice, AnalyticsClickmapKind, AnalyticsClickmapResponse, AnalyticsClickmapTokenResponse, MetricsResponse, MetricsUserCounts, UserActivityResponse } from \"./admin-metrics\";\nimport type { AnalyticsQueryOptions, AnalyticsQueryResponse } from \"./crud/analytics\";\nimport { EmailOutboxCrud } from \"./crud/email-outbox\";\nimport { InternalEmailsCrud } from \"./crud/emails\";\nimport { InternalApiKeysCrud } from \"./crud/internal-api-keys\";\nimport { ProjectPermissionDefinitionsCrud } from \"./crud/project-permissions\";\nimport { ProjectsCrud } from \"./crud/projects\";\nimport type {\n AdminGetSessionReplayResponse,\n AdminGetSessionReplayAllEventsResponse,\n AdminGetSessionReplayChunkEventsResponse,\n AdminListSessionReplayChunksOptions,\n AdminListSessionReplayChunksResponse,\n AdminListSessionReplaysOptions,\n AdminListSessionReplaysResponse\n} from \"./crud/session-replays\";\nimport { SvixTokenCrud } from \"./crud/svix-token\";\nimport { TeamPermissionDefinitionsCrud } from \"./crud/team-permissions\";\nimport type { Transaction, TransactionType } from \"./crud/transactions\";\nimport { ServerAuthApplicationOptions, HexclaveServerInterface } from \"./server-interface\";\n\ntype BranchConfigSourceApi = yup.InferType<typeof branchConfigSourceSchema>;\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 | (() => Promise<string | null>),\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\n\nexport class HexclaveAdminInterface extends HexclaveServerInterface {\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 // Hexclave rebrand: emit x-hexclave-* request header; the backend proxy dual-accepts both names.\n \"x-hexclave-super-secret-admin-key\": \"superSecretAdminKey\" in this.options ? this.options.superSecretAdminKey : \"\",\n ...options.headers,\n },\n },\n session,\n requestType,\n );\n }\n\n protected async sendAdminRequestAndCatchKnownError<E extends typeof KnownErrors[keyof KnownErrors]>(\n path: string,\n requestOptions: RequestInit,\n tokenStoreOrNull: InternalSession | null,\n errorsToCatch: readonly E[],\n ): Promise<Result<\n Response & {\n usedTokens: {\n accessToken: AccessToken,\n refreshToken: RefreshToken | null,\n } | null,\n },\n InstanceType<E>\n >> {\n try {\n return Result.ok(await this.sendAdminRequest(path, requestOptions, tokenStoreOrNull));\n } catch (e) {\n for (const errorType of errorsToCatch) {\n if (errorType.isInstance(e)) {\n return Result.error(e as InstanceType<E>);\n }\n }\n throw e;\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 listInternalEmailDrafts(): Promise<{ id: string, display_name: string, theme_id?: string | undefined | false, tsx_source: string, sent_at_millis?: number | null }[]> {\n const response = await this.sendAdminRequest(`/internal/email-drafts`, {}, null);\n const result = await response.json() as { drafts: { id: string, display_name: string, theme_id?: string | undefined | false, tsx_source: string, sent_at_millis?: number | null }[] };\n return result.drafts;\n }\n\n async createEmailDraft(options: { display_name?: string, theme_id?: string | false, tsx_source?: string }): Promise<{ id: string }> {\n const response = await this.sendAdminRequest(\n `/internal/email-drafts`,\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 updateEmailDraft(id: string, data: { display_name?: string, theme_id?: string | null | false, tsx_source?: string, sent_at_millis?: number | null }): Promise<void> {\n await this.sendAdminRequest(\n `/internal/email-drafts/${id}`,\n {\n method: \"PATCH\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(data),\n },\n null,\n );\n }\n\n async deleteEmailDraft(id: string): Promise<void> {\n await this.sendAdminRequest(\n `/internal/email-drafts/${id}`,\n {\n method: \"DELETE\",\n },\n null,\n );\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 listTeamPermissionDefinitionsPaginated(\n options: { limit: number, cursor?: string, query?: string },\n ): Promise<{ items: TeamPermissionDefinitionsCrud['Admin']['Read'][], nextCursor: string | null }> {\n const params = new URLSearchParams();\n params.set(\"limit\", String(options.limit));\n if (options.cursor) params.set(\"cursor\", options.cursor);\n if (options.query) params.set(\"query\", options.query);\n const response = await this.sendAdminRequest(`/team-permission-definitions?${params.toString()}`, {}, null);\n const result = await response.json() as TeamPermissionDefinitionsCrud['Admin']['List'];\n return {\n items: result.items,\n nextCursor: result.pagination?.next_cursor ?? null,\n };\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(\n includeAnonymous: boolean = false,\n filters?: {\n country_code?: string,\n referrer?: string,\n browser?: string,\n os?: string,\n device?: string,\n since?: string,\n until?: string,\n },\n ): Promise<MetricsResponse> {\n const params = new URLSearchParams();\n if (includeAnonymous) {\n params.append('include_anonymous', 'true');\n }\n if (filters?.country_code) params.append('filter_country_code', filters.country_code);\n if (filters?.referrer) params.append('filter_referrer', filters.referrer);\n if (filters?.browser) params.append('filter_browser', filters.browser);\n if (filters?.os) params.append('filter_os', filters.os);\n if (filters?.device) params.append('filter_device', filters.device);\n if (filters?.since) params.append('filter_since', filters.since);\n if (filters?.until) params.append('filter_until', filters.until);\n const queryString = params.toString();\n const response = await this.sendAdminRequest(\n `/internal/metrics${queryString ? `?${queryString}` : ''}`,\n {\n method: \"GET\",\n },\n null,\n );\n const body = (await response.json()) as MetricsResponse;\n // The yup schema's .optional().default(...) fallbacks only run during\n // backend response validation, not on this client-side cast — apply them\n // here too so the one-release-cycle tolerance for older servers that the\n // schema comments promise actually holds for dashboard consumers. The\n // Partial views widen the static type (which claims these are always\n // defined) to match what an older server can actually send.\n const rawBody: Partial<MetricsResponse> = body;\n const rawAnalytics: Partial<MetricsResponse[\"analytics_overview\"]> = body.analytics_overview;\n return {\n ...body,\n live_users: rawBody.live_users ?? 0,\n hourly_users: rawBody.hourly_users ?? [],\n hourly_active_users: rawBody.hourly_active_users ?? [],\n analytics_overview: {\n ...body.analytics_overview,\n hourly_page_views: rawAnalytics.hourly_page_views ?? [],\n hourly_active_users: rawAnalytics.hourly_active_users ?? [],\n hourly_visitors: rawAnalytics.hourly_visitors ?? [],\n daily_anonymous_visitors_fallback: rawAnalytics.daily_anonymous_visitors_fallback ?? [],\n anonymous_visitors_fallback: rawAnalytics.anonymous_visitors_fallback ?? 0,\n top_regions: rawAnalytics.top_regions ?? [],\n bounce_rate: rawAnalytics.bounce_rate ?? 0,\n daily_bounce_rate: rawAnalytics.daily_bounce_rate ?? [],\n daily_avg_session_seconds: rawAnalytics.daily_avg_session_seconds ?? [],\n top_browsers: rawAnalytics.top_browsers ?? [],\n top_operating_systems: rawAnalytics.top_operating_systems ?? [],\n top_devices: rawAnalytics.top_devices ?? [],\n },\n };\n }\n\n async getUserActivity(userId: string): Promise<UserActivityResponse> {\n const response = await this.sendAdminRequest(\n urlString`/internal/user-activity?user_id=${userId}`,\n {\n method: \"GET\",\n },\n null,\n );\n return (await response.json()) as UserActivityResponse;\n }\n\n async getAnalyticsClickmap(options: {\n kind: AnalyticsClickmapKind,\n member_user_ids?: string[],\n route_path?: string,\n route_regex?: string,\n url_pattern?: string,\n user_id?: string,\n replay_id?: string,\n device?: AnalyticsClickmapDevice,\n viewport_width_min?: number,\n viewport_width_max?: number,\n sampling?: number,\n since: string,\n until: string,\n }): Promise<AnalyticsClickmapResponse> {\n const response = await this.sendAdminRequest(\n \"/internal/analytics/clickmap\",\n {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(options),\n },\n null,\n );\n return (await response.json()) as AnalyticsClickmapResponse;\n }\n\n async createAnalyticsClickmapToken(options: {\n origin: string,\n }): Promise<AnalyticsClickmapTokenResponse> {\n const response = await this.sendAdminRequest(\n \"/internal/analytics/clickmap-token\",\n {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(options),\n },\n null,\n );\n return (await response.json()) as AnalyticsClickmapTokenResponse;\n }\n\n async getMetricsUserCounts(): Promise<MetricsUserCounts> {\n const response = await this.sendAdminRequest(\n \"/internal/metrics/user-counts\",\n {\n method: \"GET\",\n },\n null,\n );\n return (await response.json()) as MetricsUserCounts;\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 sendTestWebhook(data: {\n endpoint_id: string,\n }): Promise<{ success: boolean, error_message?: string }> {\n const response = await this.sendAdminRequest(`/internal/send-test-webhook`, {\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 setupManagedEmailProvider(data: {\n subdomain: string,\n sender_local_part: string,\n }): Promise<{\n domain_id: string,\n subdomain: string,\n sender_local_part: string,\n name_server_records: string[],\n status: \"pending_dns\" | \"pending_verification\" | \"verified\" | \"applied\" | \"failed\",\n }> {\n const response = await this.sendAdminRequest(\"/internal/emails/managed-onboarding/setup\", {\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 checkManagedEmailStatus(data: {\n domain_id: string,\n subdomain: string,\n sender_local_part: string,\n }): Promise<{ status: \"pending_dns\" | \"pending_verification\" | \"verified\" | \"applied\" | \"failed\" }> {\n const response = await this.sendAdminRequest(\"/internal/emails/managed-onboarding/check\", {\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 listManagedEmailDomains(): Promise<{\n items: Array<{\n domain_id: string,\n subdomain: string,\n sender_local_part: string,\n status: \"pending_dns\" | \"pending_verification\" | \"verified\" | \"applied\" | \"failed\",\n name_server_records: string[],\n }>,\n }> {\n const response = await this.sendAdminRequest(\"/internal/emails/managed-onboarding/list\", {\n method: \"GET\",\n }, null);\n return await response.json();\n }\n\n async deleteManagedEmailDomain(data: {\n resend_domain_id: string,\n }): Promise<{ status: \"deleted\" }> {\n const response = await this.sendAdminRequest(\"/internal/emails/managed-onboarding/delete\", {\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 applyManagedEmailProvider(data: {\n domain_id: string,\n }): Promise<{ status: \"applied\" }> {\n const response = await this.sendAdminRequest(\"/internal/emails/managed-onboarding/apply\", {\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 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 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: {\n themeId?: string | null | false,\n themeTsxSource?: string,\n templateId?: string,\n templateTsxSource?: string,\n editableMarkers?: boolean,\n editableSource?: 'template' | 'theme' | 'both',\n }): Promise<{ html: string, editable_regions?: Record<string, unknown> }> {\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 editable_markers: options.editableMarkers,\n editable_source: options.editableSource,\n }),\n }, null);\n return await response.json();\n }\n\n async rewriteTemplateSourceWithAI(templateTsxSource: string): Promise<{ tsx_source: string }> {\n const response = await this.sendAdminRequest(`/internal/rewrite-template-source`, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({\n template_tsx_source: 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 deleteEmailTheme(id: string): Promise<void> {\n await this.sendAdminRequest(\n `/internal/email-themes/${id}`,\n {\n method: \"DELETE\",\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<{ config_string: string }> {\n const response = await this.sendAdminRequest(\n `/internal/config`,\n { method: \"GET\" },\n null,\n );\n return await response.json();\n }\n\n async getConfigOverride(level: \"project\" | \"branch\" | \"environment\"): Promise<{ config_string: string }> {\n const response = await this.sendAdminRequest(\n `/internal/config/override/${level}`,\n { method: \"GET\" },\n null,\n );\n return await response.json();\n }\n\n async setConfigOverride(level: \"project\" | \"branch\" | \"environment\", configOverride: any, source?: BranchConfigSourceApi): Promise<void> {\n await this.sendAdminRequest(\n `/internal/config/override/${level}`,\n {\n method: \"PUT\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({\n config_string: JSON.stringify(configOverride),\n ...(source && { source }),\n }),\n },\n null,\n );\n }\n\n async updateConfigOverride(level: \"project\" | \"branch\" | \"environment\", configOverrideOverride: any): Promise<void> {\n await this.sendAdminRequest(\n `/internal/config/override/${level}`,\n {\n method: \"PATCH\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({ config_override_string: JSON.stringify(configOverrideOverride) }),\n },\n null,\n );\n }\n\n async getPushedConfigSource(): Promise<BranchConfigSourceApi> {\n const response = await this.sendAdminRequest(\n `/internal/config/source`,\n { method: \"GET\" },\n null,\n );\n const data = await response.json();\n return data.source;\n }\n\n async unlinkPushedConfigSource(): Promise<void> {\n await this.sendAdminRequest(\n `/internal/config/source`,\n { method: \"DELETE\" },\n null,\n );\n }\n\n async resetConfigOverrideKeys(level: \"branch\" | \"environment\", keys: string[]): Promise<void> {\n await this.sendAdminRequest(\n `/internal/config/override/${level}/reset-keys`,\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({ keys }),\n },\n null,\n );\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 deleteEmailTemplate(id: string): Promise<void> {\n await this.sendAdminRequest(\n `/internal/email-templates/${id}`,\n {\n method: \"DELETE\",\n },\n null,\n );\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<null | { account_id: string, charges_enabled: boolean, details_submitted: boolean, payouts_enabled: boolean }> {\n const response = await this.sendAdminRequestAndCatchKnownError(\n \"/internal/payments/stripe/account-info\",\n {},\n null,\n [KnownErrors.StripeAccountInfoNotFound],\n );\n if (response.status === \"error\") {\n return null;\n }\n return await response.data.json();\n }\n\n async getPaymentMethodConfigs(): Promise<{ configId: string, methods: Array<{ id: string, name: string, enabled: boolean, available: boolean, overridable: boolean }> } | null> {\n const response = await this.sendAdminRequestAndCatchKnownError(\n \"/internal/payments/method-configs\",\n { method: \"GET\" },\n null,\n [KnownErrors.StripeAccountInfoNotFound],\n );\n if (response.status === \"error\") {\n return null;\n }\n const data = await response.data.json();\n return {\n configId: data.config_id,\n methods: data.methods,\n };\n }\n\n async updatePaymentMethodConfigs(configId: string, updates: Record<string, 'on' | 'off'>): Promise<void> {\n await this.sendAdminRequest(\n \"/internal/payments/method-configs\",\n {\n method: \"PATCH\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ config_id: configId, updates }),\n },\n null,\n );\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 listTransactions(params?: { cursor?: string, limit?: number, type?: TransactionType, customerType?: 'user' | 'team' | 'custom', customerId?: string }): Promise<{ transactions: Transaction[], nextCursor: string | null }> {\n const qs = new URLSearchParams();\n if (params?.cursor) qs.set('cursor', params.cursor);\n if (typeof params?.limit === 'number') qs.set('limit', String(params.limit));\n if (params?.type) qs.set('type', params.type);\n if (params?.customerType) qs.set('customer_type', params.customerType);\n if (params?.customerId) qs.set('customer_id', params.customerId);\n const response = await this.sendAdminRequest(\n `/internal/payments/transactions${qs.size ? `?${qs.toString()}` : ''}`,\n { method: 'GET' },\n null,\n );\n const json = await response.json() as { transactions: Transaction[], next_cursor: string | null };\n return { transactions: json.transactions, nextCursor: json.next_cursor };\n }\n\n async listSessionReplays(params?: AdminListSessionReplaysOptions): Promise<AdminListSessionReplaysResponse> {\n const qs = new URLSearchParams();\n if (params?.cursor) qs.set(\"cursor\", params.cursor);\n if (typeof params?.limit === \"number\") qs.set(\"limit\", String(params.limit));\n if (params?.user_ids && params.user_ids.length > 0) qs.set(\"user_ids\", params.user_ids.join(\",\"));\n if (params?.team_ids && params.team_ids.length > 0) qs.set(\"team_ids\", params.team_ids.join(\",\"));\n if (typeof params?.duration_ms_min === \"number\") qs.set(\"duration_ms_min\", String(params.duration_ms_min));\n if (typeof params?.duration_ms_max === \"number\") qs.set(\"duration_ms_max\", String(params.duration_ms_max));\n if (typeof params?.last_event_at_from_millis === \"number\") qs.set(\"last_event_at_from_millis\", String(params.last_event_at_from_millis));\n if (typeof params?.last_event_at_to_millis === \"number\") qs.set(\"last_event_at_to_millis\", String(params.last_event_at_to_millis));\n if (typeof params?.click_count_min === \"number\") qs.set(\"click_count_min\", String(params.click_count_min));\n const response = await this.sendAdminRequest(\n `/internal/session-replays${qs.size ? `?${qs.toString()}` : \"\"}`,\n { method: \"GET\" },\n null,\n );\n return await response.json();\n }\n\n async getSessionReplay(sessionReplayId: string): Promise<AdminGetSessionReplayResponse> {\n const response = await this.sendAdminRequest(\n `/internal/session-replays/${encodeURIComponent(sessionReplayId)}`,\n { method: \"GET\" },\n null,\n );\n return await response.json();\n }\n\n async listSessionReplayChunks(sessionReplayId: string, params?: AdminListSessionReplayChunksOptions): Promise<AdminListSessionReplayChunksResponse> {\n const qs = new URLSearchParams();\n if (params?.cursor) qs.set(\"cursor\", params.cursor);\n if (typeof params?.limit === \"number\") qs.set(\"limit\", String(params.limit));\n const response = await this.sendAdminRequest(\n `/internal/session-replays/${encodeURIComponent(sessionReplayId)}/chunks${qs.size ? `?${qs.toString()}` : \"\"}`,\n { method: \"GET\" },\n null,\n );\n return await response.json();\n }\n\n async getSessionReplayChunkEvents(sessionReplayId: string, chunkId: string): Promise<AdminGetSessionReplayChunkEventsResponse> {\n const response = await this.sendAdminRequest(\n `/internal/session-replays/${encodeURIComponent(sessionReplayId)}/chunks/${encodeURIComponent(chunkId)}/events`,\n { method: \"GET\" },\n null,\n );\n return await response.json();\n }\n\n async getSessionReplayEvents(sessionReplayId: string, options?: { offset?: number, limit?: number }): Promise<AdminGetSessionReplayAllEventsResponse> {\n const qs = new URLSearchParams();\n if (typeof options?.offset === \"number\") qs.set(\"offset\", String(options.offset));\n if (typeof options?.limit === \"number\") qs.set(\"limit\", String(options.limit));\n const response = await this.sendAdminRequest(\n `/internal/session-replays/${encodeURIComponent(sessionReplayId)}/events${qs.size ? `?${qs.toString()}` : \"\"}`,\n { method: \"GET\" },\n null,\n );\n return await response.json();\n }\n\n async refundTransaction(options: {\n type: \"subscription\" | \"one-time-purchase\",\n id: string,\n invoiceId?: string,\n amountUsd: MoneyAmount,\n /**\n * Lifecycle action for the source purchase:\n * \"now\" — end product access immediately (revokes product,\n * expires item grants, cancels Stripe sub if any).\n * \"at-period-end\" — schedule sub cancel-at-period-end; subscriptions\n * only — rejected for one-time purchases.\n * undefined — no lifecycle change; refund money only.\n */\n endAction?: \"now\" | \"at-period-end\",\n }): Promise<{ success: boolean, refundTransactionId: string }> {\n const response = await this.sendAdminRequest(\n \"/internal/payments/transactions/refund\",\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({\n type: options.type,\n id: options.id,\n ...(options.invoiceId !== undefined ? { invoice_id: options.invoiceId } : {}),\n amount_usd: options.amountUsd,\n ...(options.endAction !== undefined ? { end_action: options.endAction } : {}),\n }),\n },\n null,\n );\n const json = await response.json();\n return { success: json.success, refundTransactionId: json.refund_transaction_id };\n }\n\n\n async previewAffectedUsersByOnboardingChange(\n onboarding: { require_email_verification?: boolean },\n limit?: number,\n ): Promise<{\n affected_users: Array<{\n id: string,\n display_name: string | null,\n primary_email: string | null,\n restricted_reason: RestrictedReason,\n }>,\n total_affected_count: number,\n }> {\n const response = await this.sendAdminRequest(\n `/internal/onboarding/preview-affected-users${limit ? `?limit=${limit}` : ''}`,\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({ onboarding }),\n },\n null,\n );\n return await response.json();\n }\n\n async queryAnalytics(options: AnalyticsQueryOptions): Promise<AnalyticsQueryResponse> {\n const response = await this.sendAdminRequest(\n \"/internal/analytics/query\",\n {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({\n query: options.query,\n params: options.params ?? {},\n timeout_ms: options.timeout_ms ?? 1000,\n include_all_branches: options.include_all_branches ?? false,\n }),\n },\n null,\n );\n\n return await response.json();\n }\n\n async listOutboxEmails(options?: { status?: string, simple_status?: string, limit?: number, cursor?: string }): Promise<EmailOutboxCrud[\"Server\"][\"List\"]> {\n const qs = new URLSearchParams();\n if (options?.status) qs.set('status', options.status);\n if (options?.simple_status) qs.set('simple_status', options.simple_status);\n if (options?.limit !== undefined) qs.set('limit', options.limit.toString());\n if (options?.cursor) qs.set('cursor', options.cursor);\n const response = await this.sendServerRequest(\n `/emails/outbox${qs.size ? `?${qs.toString()}` : ''}`,\n { method: 'GET' },\n null,\n );\n return await response.json();\n }\n\n async getOutboxEmail(id: string): Promise<EmailOutboxCrud[\"Server\"][\"Read\"]> {\n const response = await this.sendServerRequest(\n `/emails/outbox/${id}`,\n { method: 'GET' },\n null,\n );\n return await response.json();\n }\n\n async updateOutboxEmail(id: string, data: EmailOutboxCrud[\"Server\"][\"Update\"]): Promise<EmailOutboxCrud[\"Server\"][\"Read\"]> {\n const response = await this.sendServerRequest(\n `/emails/outbox/${id}`,\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}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"admin-interface.js","names":[],"sources":["../../../src/interface/admin-interface.ts"],"sourcesContent":["import * as yup from \"yup\";\nimport { KnownErrors } from \"../known-errors\";\nimport { branchConfigSourceSchema, type RestrictedReason } from \"../schema-fields\";\nimport { AccessToken, InternalSession, RefreshToken } from \"../sessions\";\nimport type { MoneyAmount } from \"../utils/currency-constants\";\nimport type { Json } from \"../utils/json\";\nimport { Result } from \"../utils/results\";\nimport { urlString } from \"../utils/urls\";\nimport type { AnalyticsClickmapDevice, AnalyticsClickmapKind, AnalyticsClickmapResponse, AnalyticsClickmapTokenResponse, MetricsResponse, MetricsUserCounts, UserActivityResponse } from \"./admin-metrics\";\nimport type { AnalyticsQueryOptions, AnalyticsQueryResponse } from \"./crud/analytics\";\nimport { EmailOutboxCrud } from \"./crud/email-outbox\";\nimport { InternalEmailsCrud } from \"./crud/emails\";\nimport { InternalApiKeysCrud } from \"./crud/internal-api-keys\";\nimport { ProjectPermissionDefinitionsCrud } from \"./crud/project-permissions\";\nimport { ProjectsCrud } from \"./crud/projects\";\nimport type {\n AdminGetSessionReplayResponse,\n AdminGetSessionReplayAllEventsResponse,\n AdminGetSessionReplayChunkEventsResponse,\n AdminListSessionReplayChunksOptions,\n AdminListSessionReplayChunksResponse,\n AdminListSessionReplaysOptions,\n AdminListSessionReplaysResponse\n} from \"./crud/session-replays\";\nimport { SvixTokenCrud } from \"./crud/svix-token\";\nimport { TeamPermissionDefinitionsCrud } from \"./crud/team-permissions\";\nimport type { Transaction, TransactionType } from \"./crud/transactions\";\nimport { ServerAuthApplicationOptions, HexclaveServerInterface } from \"./server-interface\";\n\ntype BranchConfigSourceApi = yup.InferType<typeof branchConfigSourceSchema>;\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 | (() => Promise<string | null>),\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\n\nexport class HexclaveAdminInterface extends HexclaveServerInterface {\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 // Hexclave rebrand: emit x-hexclave-* request header; the backend proxy dual-accepts both names.\n \"x-hexclave-super-secret-admin-key\": \"superSecretAdminKey\" in this.options ? this.options.superSecretAdminKey : \"\",\n ...options.headers,\n },\n },\n session,\n requestType,\n );\n }\n\n protected async sendAdminRequestAndCatchKnownError<E extends typeof KnownErrors[keyof KnownErrors]>(\n path: string,\n requestOptions: RequestInit,\n tokenStoreOrNull: InternalSession | null,\n errorsToCatch: readonly E[],\n ): Promise<Result<\n Response & {\n usedTokens: {\n accessToken: AccessToken,\n refreshToken: RefreshToken | null,\n } | null,\n },\n InstanceType<E>\n >> {\n try {\n return Result.ok(await this.sendAdminRequest(path, requestOptions, tokenStoreOrNull));\n } catch (e) {\n for (const errorType of errorsToCatch) {\n if (errorType.isInstance(e)) {\n return Result.error(e as InstanceType<E>);\n }\n }\n throw e;\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 listInternalEmailDrafts(): Promise<{ id: string, display_name: string, theme_id?: string | undefined | false, tsx_source: string, sent_at_millis?: number | null }[]> {\n const response = await this.sendAdminRequest(`/internal/email-drafts`, {}, null);\n const result = await response.json() as { drafts: { id: string, display_name: string, theme_id?: string | undefined | false, tsx_source: string, sent_at_millis?: number | null }[] };\n return result.drafts;\n }\n\n async createEmailDraft(options: { display_name?: string, theme_id?: string | false, tsx_source?: string }): Promise<{ id: string }> {\n const response = await this.sendAdminRequest(\n `/internal/email-drafts`,\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 updateEmailDraft(id: string, data: { display_name?: string, theme_id?: string | null | false, tsx_source?: string, sent_at_millis?: number | null }): Promise<void> {\n await this.sendAdminRequest(\n `/internal/email-drafts/${id}`,\n {\n method: \"PATCH\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(data),\n },\n null,\n );\n }\n\n async deleteEmailDraft(id: string): Promise<void> {\n await this.sendAdminRequest(\n `/internal/email-drafts/${id}`,\n {\n method: \"DELETE\",\n },\n null,\n );\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 listTeamPermissionDefinitionsPaginated(\n options: { limit: number, cursor?: string, query?: string },\n ): Promise<{ items: TeamPermissionDefinitionsCrud['Admin']['Read'][], nextCursor: string | null }> {\n const params = new URLSearchParams();\n params.set(\"limit\", String(options.limit));\n if (options.cursor) params.set(\"cursor\", options.cursor);\n if (options.query) params.set(\"query\", options.query);\n const response = await this.sendAdminRequest(`/team-permission-definitions?${params.toString()}`, {}, null);\n const result = await response.json() as TeamPermissionDefinitionsCrud['Admin']['List'];\n return {\n items: result.items,\n nextCursor: result.pagination?.next_cursor ?? null,\n };\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(\n includeAnonymous: boolean = false,\n filters?: {\n country_code?: string,\n referrer?: string,\n browser?: string,\n os?: string,\n device?: string,\n since?: string,\n until?: string,\n },\n ): Promise<MetricsResponse> {\n const params = new URLSearchParams();\n if (includeAnonymous) {\n params.append('include_anonymous', 'true');\n }\n if (filters?.country_code) params.append('filter_country_code', filters.country_code);\n if (filters?.referrer) params.append('filter_referrer', filters.referrer);\n if (filters?.browser) params.append('filter_browser', filters.browser);\n if (filters?.os) params.append('filter_os', filters.os);\n if (filters?.device) params.append('filter_device', filters.device);\n if (filters?.since) params.append('filter_since', filters.since);\n if (filters?.until) params.append('filter_until', filters.until);\n const queryString = params.toString();\n const response = await this.sendAdminRequest(\n `/internal/metrics${queryString ? `?${queryString}` : ''}`,\n {\n method: \"GET\",\n },\n null,\n );\n const body = (await response.json()) as MetricsResponse;\n // The yup schema's .optional().default(...) fallbacks only run during\n // backend response validation, not on this client-side cast — apply them\n // here too so the one-release-cycle tolerance for older servers that the\n // schema comments promise actually holds for dashboard consumers. The\n // Partial views widen the static type (which claims these are always\n // defined) to match what an older server can actually send.\n const rawBody: Partial<MetricsResponse> = body;\n const rawAnalytics: Partial<MetricsResponse[\"analytics_overview\"]> = body.analytics_overview;\n return {\n ...body,\n live_users: rawBody.live_users ?? 0,\n hourly_users: rawBody.hourly_users ?? [],\n hourly_active_users: rawBody.hourly_active_users ?? [],\n analytics_overview: {\n ...body.analytics_overview,\n hourly_page_views: rawAnalytics.hourly_page_views ?? [],\n hourly_active_users: rawAnalytics.hourly_active_users ?? [],\n hourly_visitors: rawAnalytics.hourly_visitors ?? [],\n daily_anonymous_visitors_fallback: rawAnalytics.daily_anonymous_visitors_fallback ?? [],\n anonymous_visitors_fallback: rawAnalytics.anonymous_visitors_fallback ?? 0,\n top_regions: rawAnalytics.top_regions ?? [],\n bounce_rate: rawAnalytics.bounce_rate ?? 0,\n daily_bounce_rate: rawAnalytics.daily_bounce_rate ?? [],\n daily_avg_session_seconds: rawAnalytics.daily_avg_session_seconds ?? [],\n top_browsers: rawAnalytics.top_browsers ?? [],\n top_operating_systems: rawAnalytics.top_operating_systems ?? [],\n top_devices: rawAnalytics.top_devices ?? [],\n },\n };\n }\n\n async getUserActivity(userId: string): Promise<UserActivityResponse> {\n const response = await this.sendAdminRequest(\n urlString`/internal/user-activity?user_id=${userId}`,\n {\n method: \"GET\",\n },\n null,\n );\n return (await response.json()) as UserActivityResponse;\n }\n\n async getAnalyticsClickmap(options: {\n kind: AnalyticsClickmapKind,\n member_user_ids?: string[],\n route_path?: string,\n route_regex?: string,\n url_pattern?: string,\n user_id?: string,\n replay_id?: string,\n device?: AnalyticsClickmapDevice,\n viewport_width_min?: number,\n viewport_width_max?: number,\n sampling?: number,\n since: string,\n until: string,\n }): Promise<AnalyticsClickmapResponse> {\n const response = await this.sendAdminRequest(\n \"/internal/analytics/clickmap\",\n {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(options),\n },\n null,\n );\n return (await response.json()) as AnalyticsClickmapResponse;\n }\n\n async createAnalyticsClickmapToken(options: {\n origin: string,\n }): Promise<AnalyticsClickmapTokenResponse> {\n const response = await this.sendAdminRequest(\n \"/internal/analytics/clickmap-token\",\n {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(options),\n },\n null,\n );\n return (await response.json()) as AnalyticsClickmapTokenResponse;\n }\n\n async getMetricsUserCounts(): Promise<MetricsUserCounts> {\n const response = await this.sendAdminRequest(\n \"/internal/metrics/user-counts\",\n {\n method: \"GET\",\n },\n null,\n );\n return (await response.json()) as MetricsUserCounts;\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 sendTestWebhook(data: {\n endpoint_id: string,\n }): Promise<{ success: boolean, error_message?: string }> {\n const response = await this.sendAdminRequest(`/internal/send-test-webhook`, {\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 setupManagedEmailProvider(data: {\n subdomain: string,\n sender_local_part: string,\n }): Promise<{\n domain_id: string,\n subdomain: string,\n sender_local_part: string,\n name_server_records: string[],\n status: \"pending_dns\" | \"pending_verification\" | \"verified\" | \"applied\" | \"failed\",\n }> {\n const response = await this.sendAdminRequest(\"/internal/emails/managed-onboarding/setup\", {\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 checkManagedEmailStatus(data: {\n domain_id: string,\n subdomain: string,\n sender_local_part: string,\n }): Promise<{ status: \"pending_dns\" | \"pending_verification\" | \"verified\" | \"applied\" | \"failed\" }> {\n const response = await this.sendAdminRequest(\"/internal/emails/managed-onboarding/check\", {\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 listManagedEmailDomains(): Promise<{\n items: Array<{\n domain_id: string,\n subdomain: string,\n sender_local_part: string,\n status: \"pending_dns\" | \"pending_verification\" | \"verified\" | \"applied\" | \"failed\",\n name_server_records: string[],\n }>,\n }> {\n const response = await this.sendAdminRequest(\"/internal/emails/managed-onboarding/list\", {\n method: \"GET\",\n }, null);\n return await response.json();\n }\n\n async deleteManagedEmailDomain(data: {\n resend_domain_id: string,\n }): Promise<{ status: \"deleted\" }> {\n const response = await this.sendAdminRequest(\"/internal/emails/managed-onboarding/delete\", {\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 applyManagedEmailProvider(data: {\n domain_id: string,\n }): Promise<{ status: \"applied\" }> {\n const response = await this.sendAdminRequest(\"/internal/emails/managed-onboarding/apply\", {\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 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 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: {\n themeId?: string | null | false,\n themeTsxSource?: string,\n templateId?: string,\n templateTsxSource?: string,\n editableMarkers?: boolean,\n editableSource?: 'template' | 'theme' | 'both',\n }): Promise<{ html: string, editable_regions?: Record<string, unknown> }> {\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 editable_markers: options.editableMarkers,\n editable_source: options.editableSource,\n }),\n }, null);\n return await response.json();\n }\n\n async rewriteTemplateSourceWithAI(templateTsxSource: string): Promise<{ tsx_source: string }> {\n const response = await this.sendAdminRequest(`/internal/rewrite-template-source`, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({\n template_tsx_source: 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 deleteEmailTheme(id: string): Promise<void> {\n await this.sendAdminRequest(\n `/internal/email-themes/${id}`,\n {\n method: \"DELETE\",\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<{ config_string: string }> {\n const response = await this.sendAdminRequest(\n `/internal/config`,\n { method: \"GET\" },\n null,\n );\n return await response.json();\n }\n\n async getConfigOverride(level: \"project\" | \"branch\" | \"environment\"): Promise<{ config_string: string }> {\n const response = await this.sendAdminRequest(\n `/internal/config/override/${level}`,\n { method: \"GET\" },\n null,\n );\n return await response.json();\n }\n\n async setConfigOverride(level: \"project\" | \"branch\" | \"environment\", configOverride: any, source?: BranchConfigSourceApi): Promise<void> {\n await this.sendAdminRequest(\n `/internal/config/override/${level}`,\n {\n method: \"PUT\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({\n config_string: JSON.stringify(configOverride),\n ...(source && { source }),\n }),\n },\n null,\n );\n }\n\n async updateConfigOverride(level: \"project\" | \"branch\" | \"environment\", configOverrideOverride: any): Promise<void> {\n await this.sendAdminRequest(\n `/internal/config/override/${level}`,\n {\n method: \"PATCH\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({ config_override_string: JSON.stringify(configOverrideOverride) }),\n },\n null,\n );\n }\n\n async getPushedConfigSource(): Promise<BranchConfigSourceApi> {\n const response = await this.sendAdminRequest(\n `/internal/config/source`,\n { method: \"GET\" },\n null,\n );\n const data = await response.json();\n return data.source;\n }\n\n async unlinkPushedConfigSource(): Promise<void> {\n await this.sendAdminRequest(\n `/internal/config/source`,\n { method: \"DELETE\" },\n null,\n );\n }\n\n async resetConfigOverrideKeys(level: \"branch\" | \"environment\", keys: string[]): Promise<void> {\n await this.sendAdminRequest(\n `/internal/config/override/${level}/reset-keys`,\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({ keys }),\n },\n null,\n );\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 deleteEmailTemplate(id: string): Promise<void> {\n await this.sendAdminRequest(\n `/internal/email-templates/${id}`,\n {\n method: \"DELETE\",\n },\n null,\n );\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<null | { account_id: string, charges_enabled: boolean, details_submitted: boolean, payouts_enabled: boolean }> {\n const response = await this.sendAdminRequestAndCatchKnownError(\n \"/internal/payments/stripe/account-info\",\n {},\n null,\n [KnownErrors.StripeAccountInfoNotFound],\n );\n if (response.status === \"error\") {\n return null;\n }\n return await response.data.json();\n }\n\n async getPaymentMethodConfigs(): Promise<{ configId: string, methods: Array<{ id: string, name: string, enabled: boolean, available: boolean, overridable: boolean }> } | null> {\n const response = await this.sendAdminRequestAndCatchKnownError(\n \"/internal/payments/method-configs\",\n { method: \"GET\" },\n null,\n [KnownErrors.StripeAccountInfoNotFound],\n );\n if (response.status === \"error\") {\n return null;\n }\n const data = await response.data.json();\n return {\n configId: data.config_id,\n methods: data.methods,\n };\n }\n\n async updatePaymentMethodConfigs(configId: string, updates: Record<string, 'on' | 'off'>): Promise<void> {\n await this.sendAdminRequest(\n \"/internal/payments/method-configs\",\n {\n method: \"PATCH\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ config_id: configId, updates }),\n },\n null,\n );\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 listTransactions(params?: { cursor?: string, limit?: number, type?: TransactionType, customerType?: 'user' | 'team' | 'custom', customerId?: string }): Promise<{ transactions: Transaction[], nextCursor: string | null }> {\n const qs = new URLSearchParams();\n if (params?.cursor) qs.set('cursor', params.cursor);\n if (typeof params?.limit === 'number') qs.set('limit', String(params.limit));\n if (params?.type) qs.set('type', params.type);\n if (params?.customerType) qs.set('customer_type', params.customerType);\n if (params?.customerId) qs.set('customer_id', params.customerId);\n const response = await this.sendAdminRequest(\n `/internal/payments/transactions${qs.size ? `?${qs.toString()}` : ''}`,\n { method: 'GET' },\n null,\n );\n const json = await response.json() as { transactions: Transaction[], next_cursor: string | null };\n return { transactions: json.transactions, nextCursor: json.next_cursor };\n }\n\n async listSessionReplays(params?: AdminListSessionReplaysOptions): Promise<AdminListSessionReplaysResponse> {\n const qs = new URLSearchParams();\n if (params?.cursor) qs.set(\"cursor\", params.cursor);\n if (typeof params?.limit === \"number\") qs.set(\"limit\", String(params.limit));\n if (params?.user_ids && params.user_ids.length > 0) qs.set(\"user_ids\", params.user_ids.join(\",\"));\n if (params?.team_ids && params.team_ids.length > 0) qs.set(\"team_ids\", params.team_ids.join(\",\"));\n if (typeof params?.duration_ms_min === \"number\") qs.set(\"duration_ms_min\", String(params.duration_ms_min));\n if (typeof params?.duration_ms_max === \"number\") qs.set(\"duration_ms_max\", String(params.duration_ms_max));\n if (typeof params?.last_event_at_from_millis === \"number\") qs.set(\"last_event_at_from_millis\", String(params.last_event_at_from_millis));\n if (typeof params?.last_event_at_to_millis === \"number\") qs.set(\"last_event_at_to_millis\", String(params.last_event_at_to_millis));\n if (typeof params?.click_count_min === \"number\") qs.set(\"click_count_min\", String(params.click_count_min));\n const response = await this.sendAdminRequest(\n `/internal/session-replays${qs.size ? `?${qs.toString()}` : \"\"}`,\n { method: \"GET\" },\n null,\n );\n return await response.json();\n }\n\n async getSessionReplay(sessionReplayId: string): Promise<AdminGetSessionReplayResponse> {\n const response = await this.sendAdminRequest(\n `/internal/session-replays/${encodeURIComponent(sessionReplayId)}`,\n { method: \"GET\" },\n null,\n );\n return await response.json();\n }\n\n async listSessionReplayChunks(sessionReplayId: string, params?: AdminListSessionReplayChunksOptions): Promise<AdminListSessionReplayChunksResponse> {\n const qs = new URLSearchParams();\n if (params?.cursor) qs.set(\"cursor\", params.cursor);\n if (typeof params?.limit === \"number\") qs.set(\"limit\", String(params.limit));\n const response = await this.sendAdminRequest(\n `/internal/session-replays/${encodeURIComponent(sessionReplayId)}/chunks${qs.size ? `?${qs.toString()}` : \"\"}`,\n { method: \"GET\" },\n null,\n );\n return await response.json();\n }\n\n async getSessionReplayChunkEvents(sessionReplayId: string, chunkId: string): Promise<AdminGetSessionReplayChunkEventsResponse> {\n const response = await this.sendAdminRequest(\n `/internal/session-replays/${encodeURIComponent(sessionReplayId)}/chunks/${encodeURIComponent(chunkId)}/events`,\n { method: \"GET\" },\n null,\n );\n return await response.json();\n }\n\n async getSessionReplayEvents(sessionReplayId: string, options?: { offset?: number, limit?: number }): Promise<AdminGetSessionReplayAllEventsResponse> {\n const qs = new URLSearchParams();\n if (typeof options?.offset === \"number\") qs.set(\"offset\", String(options.offset));\n if (typeof options?.limit === \"number\") qs.set(\"limit\", String(options.limit));\n const response = await this.sendAdminRequest(\n `/internal/session-replays/${encodeURIComponent(sessionReplayId)}/events${qs.size ? `?${qs.toString()}` : \"\"}`,\n { method: \"GET\" },\n null,\n );\n return await response.json();\n }\n\n async refundTransaction(options: {\n type: \"subscription\" | \"one-time-purchase\",\n id: string,\n invoiceId?: string,\n amountUsd: MoneyAmount,\n /**\n * Lifecycle action for the source purchase:\n * \"now\" — end product access immediately (revokes product,\n * expires item grants, cancels Stripe sub if any).\n * \"at-period-end\" — schedule sub cancel-at-period-end; subscriptions\n * only — rejected for one-time purchases.\n * undefined — no lifecycle change; refund money only.\n */\n endAction?: \"now\" | \"at-period-end\",\n }): Promise<{ success: boolean, refundTransactionId: string }> {\n const response = await this.sendAdminRequest(\n \"/internal/payments/transactions/refund\",\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({\n type: options.type,\n id: options.id,\n ...(options.invoiceId !== undefined ? { invoice_id: options.invoiceId } : {}),\n amount_usd: options.amountUsd,\n ...(options.endAction !== undefined ? { end_action: options.endAction } : {}),\n }),\n },\n null,\n );\n const json = await response.json();\n return { success: json.success, refundTransactionId: json.refund_transaction_id };\n }\n\n\n async previewAffectedUsersByOnboardingChange(\n onboarding: { require_email_verification?: boolean },\n limit?: number,\n ): Promise<{\n affected_users: Array<{\n id: string,\n display_name: string | null,\n primary_email: string | null,\n restricted_reason: RestrictedReason,\n }>,\n total_affected_count: number,\n }> {\n const response = await this.sendAdminRequest(\n `/internal/onboarding/preview-affected-users${limit ? `?limit=${limit}` : ''}`,\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({ onboarding }),\n },\n null,\n );\n return await response.json();\n }\n\n async queryAnalytics(options: AnalyticsQueryOptions): Promise<AnalyticsQueryResponse> {\n const response = await this.sendAdminRequest(\n \"/internal/analytics/query\",\n {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({\n query: options.query,\n params: options.params ?? {},\n timeout_ms: options.timeout_ms ?? 1000,\n include_all_branches: options.include_all_branches ?? false,\n }),\n },\n null,\n );\n\n return await response.json();\n }\n\n async listOutboxEmails(options?: { status?: string, simple_status?: string, user_id?: string, limit?: number, cursor?: string }): Promise<EmailOutboxCrud[\"Server\"][\"List\"]> {\n const qs = new URLSearchParams();\n if (options?.status) qs.set('status', options.status);\n if (options?.simple_status) qs.set('simple_status', options.simple_status);\n if (options?.user_id) qs.set('user_id', options.user_id);\n if (options?.limit !== undefined) qs.set('limit', options.limit.toString());\n if (options?.cursor) qs.set('cursor', options.cursor);\n const response = await this.sendServerRequest(\n `/emails/outbox${qs.size ? `?${qs.toString()}` : ''}`,\n { method: 'GET' },\n null,\n );\n return await response.json();\n }\n\n async getOutboxEmail(id: string): Promise<EmailOutboxCrud[\"Server\"][\"Read\"]> {\n const response = await this.sendServerRequest(\n `/emails/outbox/${id}`,\n { method: 'GET' },\n null,\n );\n return await response.json();\n }\n\n async updateOutboxEmail(id: string, data: EmailOutboxCrud[\"Server\"][\"Update\"]): Promise<EmailOutboxCrud[\"Server\"][\"Read\"]> {\n const response = await this.sendServerRequest(\n `/emails/outbox/${id}`,\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}\n"],"mappings":"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"}
|
|
@@ -3,8 +3,8 @@ import { filterUndefined, filterUndefinedOrNull } from "../utils/objects.js";
|
|
|
3
3
|
import { deindent } from "../utils/strings.js";
|
|
4
4
|
import { publishableClientKeyNotNecessarySentinel } from "../utils/oauth.js";
|
|
5
5
|
import { Result } from "../utils/results.js";
|
|
6
|
-
import { urlString } from "../utils/urls.js";
|
|
7
6
|
import { KnownError, KnownErrors } from "../known-errors.js";
|
|
7
|
+
import { urlString } from "../utils/urls.js";
|
|
8
8
|
import { AccessToken, InternalSession } from "../sessions.js";
|
|
9
9
|
import { generateSecureRandomString } from "../utils/crypto.js";
|
|
10
10
|
import { globalVar } from "../utils/globals.js";
|
|
@@ -49,7 +49,7 @@ declare const conversationSummarySchema: yup$1.ObjectSchema<{
|
|
|
49
49
|
userPrimaryEmail: string | null;
|
|
50
50
|
userProfileImageUrl: string | null;
|
|
51
51
|
subject: string;
|
|
52
|
-
status: "
|
|
52
|
+
status: "open" | "pending" | "closed";
|
|
53
53
|
priority: "low" | "normal" | "high" | "urgent";
|
|
54
54
|
source: "email" | "manual" | "chat" | "api";
|
|
55
55
|
lastMessageType: "message" | "internal-note" | "status-change";
|
|
@@ -129,7 +129,7 @@ declare const conversationMessageSchema: yup$1.ObjectSchema<{
|
|
|
129
129
|
userId: string | null;
|
|
130
130
|
teamId: string | null;
|
|
131
131
|
subject: string;
|
|
132
|
-
status: "
|
|
132
|
+
status: "open" | "pending" | "closed";
|
|
133
133
|
priority: "low" | "normal" | "high" | "urgent";
|
|
134
134
|
source: "email" | "manual" | "chat" | "api";
|
|
135
135
|
messageType: "message" | "internal-note" | "status-change";
|
|
@@ -173,15 +173,15 @@ declare const conversationListResponseSchema: yup$1.ObjectSchema<{
|
|
|
173
173
|
lastOutboundAt?: string | null | undefined;
|
|
174
174
|
closedAt?: string | null | undefined;
|
|
175
175
|
recordMetadata?: {} | null | undefined;
|
|
176
|
-
status: "
|
|
177
|
-
priority: "low" | "normal" | "high" | "urgent";
|
|
178
|
-
subject: string;
|
|
176
|
+
status: "open" | "pending" | "closed";
|
|
179
177
|
conversationId: string;
|
|
180
178
|
userId: string | null;
|
|
181
179
|
teamId: string | null;
|
|
182
180
|
userDisplayName: string | null;
|
|
183
181
|
userPrimaryEmail: string | null;
|
|
184
182
|
userProfileImageUrl: string | null;
|
|
183
|
+
subject: string;
|
|
184
|
+
priority: "low" | "normal" | "high" | "urgent";
|
|
185
185
|
source: "email" | "manual" | "chat" | "api";
|
|
186
186
|
lastMessageType: "message" | "internal-note" | "status-change";
|
|
187
187
|
preview: string | null;
|
|
@@ -211,15 +211,15 @@ declare const conversationDetailResponseSchema: yup$1.ObjectSchema<{
|
|
|
211
211
|
lastOutboundAt?: string | null | undefined;
|
|
212
212
|
closedAt?: string | null | undefined;
|
|
213
213
|
recordMetadata?: {} | null | undefined;
|
|
214
|
-
status: "
|
|
215
|
-
priority: "low" | "normal" | "high" | "urgent";
|
|
216
|
-
subject: string;
|
|
214
|
+
status: "open" | "pending" | "closed";
|
|
217
215
|
conversationId: string;
|
|
218
216
|
userId: string | null;
|
|
219
217
|
teamId: string | null;
|
|
220
218
|
userDisplayName: string | null;
|
|
221
219
|
userPrimaryEmail: string | null;
|
|
222
220
|
userProfileImageUrl: string | null;
|
|
221
|
+
subject: string;
|
|
222
|
+
priority: "low" | "normal" | "high" | "urgent";
|
|
223
223
|
source: "email" | "manual" | "chat" | "api";
|
|
224
224
|
lastMessageType: "message" | "internal-note" | "status-change";
|
|
225
225
|
preview: string | null;
|
|
@@ -236,13 +236,13 @@ declare const conversationDetailResponseSchema: yup$1.ObjectSchema<{
|
|
|
236
236
|
};
|
|
237
237
|
};
|
|
238
238
|
messages: {
|
|
239
|
-
status: "
|
|
239
|
+
status: "open" | "pending" | "closed";
|
|
240
240
|
id: string;
|
|
241
|
-
priority: "low" | "normal" | "high" | "urgent";
|
|
242
|
-
subject: string;
|
|
243
241
|
conversationId: string;
|
|
244
242
|
userId: string | null;
|
|
245
243
|
teamId: string | null;
|
|
244
|
+
subject: string;
|
|
245
|
+
priority: "low" | "normal" | "high" | "urgent";
|
|
246
246
|
source: "email" | "manual" | "chat" | "api";
|
|
247
247
|
metadata: {} | null;
|
|
248
248
|
createdAt: string;
|