@hexclave/shared 1.0.44 → 1.0.45
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/{admin-interface-BSW1mzGs.d.ts → admin-interface-B-UjGQ0i.d.ts} +11 -13
- package/dist/admin-interface-B-UjGQ0i.d.ts.map +1 -0
- package/dist/{admin-metrics-bsOkw4YQ.d.ts → admin-metrics-1yiWGq9z.d.ts} +15 -15
- package/dist/{admin-metrics-bsOkw4YQ.d.ts.map → admin-metrics-1yiWGq9z.d.ts.map} +1 -1
- package/dist/ai/unified-prompts/reminders.js +1 -2
- package/dist/ai/unified-prompts/reminders.js.map +1 -1
- package/dist/{client-interface-iIw4nU5k.d.ts → client-interface-DjVtlQix.d.ts} +10 -10
- package/dist/{client-interface-iIw4nU5k.d.ts.map → client-interface-DjVtlQix.d.ts.map} +1 -1
- package/dist/config/schema.d.ts +1 -1
- package/dist/config-authoring.d.ts +1 -1
- package/dist/{current-user-BBoN3hsn.d.ts → current-user-BCkMYzHx.d.ts} +17 -17
- package/dist/{current-user-BBoN3hsn.d.ts.map → current-user-BCkMYzHx.d.ts.map} +1 -1
- package/dist/{email-outbox-B1wmVPRG.d.ts → email-outbox-BRZiK0ZG.d.ts} +221 -221
- package/dist/{email-outbox-B1wmVPRG.d.ts.map → email-outbox-BRZiK0ZG.d.ts.map} +1 -1
- package/dist/esm/ai/unified-prompts/reminders.js +1 -1
- package/dist/esm/config/schema.d.ts +116 -116
- package/dist/esm/interface/admin-interface.d.ts +0 -2
- package/dist/esm/interface/admin-interface.d.ts.map +1 -1
- package/dist/esm/interface/admin-interface.js +0 -12
- package/dist/esm/interface/admin-interface.js.map +1 -1
- package/dist/esm/interface/admin-metrics.d.ts +14 -14
- package/dist/esm/interface/conversations.d.ts +18 -18
- package/dist/esm/interface/crud/current-user.d.ts +16 -16
- package/dist/esm/interface/crud/email-outbox.d.ts +220 -220
- package/dist/esm/interface/crud/invoices.d.ts +2 -2
- package/dist/esm/interface/crud/products.d.ts +21 -21
- package/dist/esm/interface/crud/project-api-keys.d.ts +4 -4
- package/dist/esm/interface/crud/projects.d.ts +59 -59
- package/dist/esm/interface/crud/team-member-profiles.d.ts +32 -32
- package/dist/esm/interface/crud/transactions.d.ts +17 -17
- package/dist/esm/interface/crud/transactions.d.ts.map +1 -1
- package/dist/esm/interface/crud/users.d.ts +22 -22
- package/dist/esm/interface/plan-usage.d.ts +1 -1
- package/dist/esm/interface/server-interface.d.ts +2 -0
- package/dist/esm/interface/server-interface.d.ts.map +1 -1
- package/dist/esm/interface/server-interface.js +12 -0
- package/dist/esm/interface/server-interface.js.map +1 -1
- package/dist/esm/interface/webhooks.d.ts +4 -4
- package/dist/esm/known-errors.d.ts +3 -3
- package/dist/esm/schema-fields.d.ts +12 -12
- package/dist/esm/sessions.d.ts +9 -9
- package/dist/helpers/password.d.ts +1 -1
- package/dist/helpers/production-mode.d.ts +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/interface/admin-interface.d.ts +2 -2
- package/dist/interface/admin-interface.js +0 -12
- package/dist/interface/admin-interface.js.map +1 -1
- package/dist/interface/admin-metrics.d.ts +1 -1
- package/dist/interface/client-interface.d.ts +1 -1
- package/dist/interface/conversations.d.ts +18 -18
- package/dist/interface/crud/current-user.d.ts +1 -1
- package/dist/interface/crud/email-outbox.d.ts +1 -1
- package/dist/interface/crud/invoices.d.ts +1 -1
- package/dist/interface/crud/products.d.ts +1 -1
- package/dist/interface/crud/project-api-keys.d.ts +1 -1
- package/dist/interface/crud/projects.d.ts +1 -1
- package/dist/interface/crud/team-member-profiles.d.ts +1 -1
- package/dist/interface/crud/transactions.d.ts +1 -1
- package/dist/interface/crud/users.d.ts +1 -1
- package/dist/interface/plan-usage.d.ts +1 -1
- package/dist/interface/server-interface.d.ts +1 -1
- package/dist/interface/server-interface.js +12 -0
- package/dist/interface/server-interface.js.map +1 -1
- package/dist/interface/webhooks.d.ts +1 -1
- package/dist/{invoices-CHo9YKbI.d.ts → invoices-BGLLnTlR.d.ts} +3 -3
- package/dist/{invoices-CHo9YKbI.d.ts.map → invoices-BGLLnTlR.d.ts.map} +1 -1
- package/dist/{known-errors-Bm4a61wL.d.ts → known-errors-g7JC8z58.d.ts} +4 -4
- package/dist/{known-errors-Bm4a61wL.d.ts.map → known-errors-g7JC8z58.d.ts.map} +1 -1
- package/dist/known-errors.d.ts +1 -1
- package/dist/{plan-usage-ChUZqQWw.d.ts → plan-usage-BigvGIcT.d.ts} +2 -2
- package/dist/{plan-usage-ChUZqQWw.d.ts.map → plan-usage-BigvGIcT.d.ts.map} +1 -1
- package/dist/{products-Bs74ld-v.d.ts → products-D_fcxfR0.d.ts} +22 -22
- package/dist/{products-Bs74ld-v.d.ts.map → products-D_fcxfR0.d.ts.map} +1 -1
- package/dist/{project-api-keys--7V5X_UW.d.ts → project-api-keys-OQqmKtMS.d.ts} +5 -5
- package/dist/{project-api-keys--7V5X_UW.d.ts.map → project-api-keys-OQqmKtMS.d.ts.map} +1 -1
- package/dist/{projects-CFTNXRfG.d.ts → projects-C42SVFvm.d.ts} +60 -60
- package/dist/{projects-CFTNXRfG.d.ts.map → projects-C42SVFvm.d.ts.map} +1 -1
- package/dist/{schema-DIefUvKi.d.ts → schema-Bgy-GC70.d.ts} +117 -117
- package/dist/{schema-DIefUvKi.d.ts.map → schema-Bgy-GC70.d.ts.map} +1 -1
- package/dist/{schema-fields-DqGQ4kF7.d.ts → schema-fields-BljhsWsa.d.ts} +13 -13
- package/dist/{schema-fields-DqGQ4kF7.d.ts.map → schema-fields-BljhsWsa.d.ts.map} +1 -1
- package/dist/schema-fields.d.ts +1 -1
- package/dist/{server-interface-CgpxsLT_.d.ts → server-interface-C1W1tZ_y.d.ts} +10 -8
- package/dist/server-interface-C1W1tZ_y.d.ts.map +1 -0
- package/dist/{sessions-d8qtvBUB.d.ts → sessions-C0nM8bE_.d.ts} +11 -11
- package/dist/{sessions-d8qtvBUB.d.ts.map → sessions-C0nM8bE_.d.ts.map} +1 -1
- package/dist/sessions.d.ts +1 -1
- package/dist/{team-member-profiles-BoDEqx-0.d.ts → team-member-profiles-CgYXR-Rx.d.ts} +33 -33
- package/dist/{team-member-profiles-BoDEqx-0.d.ts.map → team-member-profiles-CgYXR-Rx.d.ts.map} +1 -1
- package/dist/{transactions-DhnbvGH5.d.ts → transactions-BomBBiph.d.ts} +18 -18
- package/dist/transactions-BomBBiph.d.ts.map +1 -0
- package/dist/{users-DHNRwoSz.d.ts → users-7MKfEyyq.d.ts} +24 -24
- package/dist/{users-DHNRwoSz.d.ts.map → users-7MKfEyyq.d.ts.map} +1 -1
- package/dist/{webhooks-8Ts1Clcb.d.ts → webhooks-C5gG85Ce.d.ts} +5 -5
- package/dist/{webhooks-8Ts1Clcb.d.ts.map → webhooks-C5gG85Ce.d.ts.map} +1 -1
- package/package.json +1 -1
- package/src/interface/admin-interface.ts +0 -20
- package/src/interface/server-interface.ts +20 -0
- package/dist/admin-interface-BSW1mzGs.d.ts.map +0 -1
- package/dist/server-interface-CgpxsLT_.d.ts.map +0 -1
- package/dist/transactions-DhnbvGH5.d.ts.map +0 -1
|
@@ -8,7 +8,6 @@ import { AccessToken, InternalSession, RefreshToken } from "../sessions.js";
|
|
|
8
8
|
import { TeamPermissionDefinitionsCrud } from "./crud/team-permissions.js";
|
|
9
9
|
import { EnvironmentConfigOverrideOverride } from "../config/schema.js";
|
|
10
10
|
import { AnalyticsClickmapDevice, AnalyticsClickmapKind, AnalyticsClickmapResponse, AnalyticsClickmapTokenResponse, MetricsResponse, MetricsUserCounts, UserActivityResponse } from "./admin-metrics.js";
|
|
11
|
-
import { AnalyticsQueryOptions, AnalyticsQueryResponse } from "./crud/analytics.js";
|
|
12
11
|
import { EmailOutboxCrud } from "./crud/email-outbox.js";
|
|
13
12
|
import { InternalEmailsCrud } from "./crud/emails.js";
|
|
14
13
|
import { InternalApiKeysCrud } from "./crud/internal-api-keys.js";
|
|
@@ -363,7 +362,6 @@ declare class HexclaveAdminInterface extends HexclaveServerInterface {
|
|
|
363
362
|
}>;
|
|
364
363
|
total_affected_count: number;
|
|
365
364
|
}>;
|
|
366
|
-
queryAnalytics(options: AnalyticsQueryOptions): Promise<AnalyticsQueryResponse>;
|
|
367
365
|
listOutboxEmails(options?: {
|
|
368
366
|
status?: string;
|
|
369
367
|
simple_status?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin-interface.d.ts","names":[],"sources":["../../../src/interface/admin-interface.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"admin-interface.d.ts","names":[],"sources":["../../../src/interface/admin-interface.ts"],"mappings":"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"}
|
|
@@ -527,18 +527,6 @@ var HexclaveAdminInterface = class extends HexclaveServerInterface {
|
|
|
527
527
|
body: JSON.stringify({ onboarding })
|
|
528
528
|
}, null)).json();
|
|
529
529
|
}
|
|
530
|
-
async queryAnalytics(options) {
|
|
531
|
-
return await (await this.sendAdminRequest("/internal/analytics/query", {
|
|
532
|
-
method: "POST",
|
|
533
|
-
headers: { "content-type": "application/json" },
|
|
534
|
-
body: JSON.stringify({
|
|
535
|
-
query: options.query,
|
|
536
|
-
params: options.params ?? {},
|
|
537
|
-
timeout_ms: options.timeout_ms ?? 1e3,
|
|
538
|
-
include_all_branches: options.include_all_branches ?? false
|
|
539
|
-
})
|
|
540
|
-
}, null)).json();
|
|
541
|
-
}
|
|
542
530
|
async listOutboxEmails(options) {
|
|
543
531
|
const qs = new URLSearchParams();
|
|
544
532
|
if (options?.status) qs.set("status", options.status);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin-interface.js","names":[],"sources":["../../../src/interface/admin-interface.ts"],"sourcesContent":["import * as yup from \"yup\";\nimport type { EnvironmentConfigOverrideOverride } from \"../config/schema\";\nimport { KnownErrors } from \"../known-errors\";\nimport { branchConfigSourceSchema, type ConfigAgentRunApi, type RestrictedReason } from \"../schema-fields\";\nimport { AccessToken, InternalSession, RefreshToken } from \"../sessions\";\nimport type { MoneyAmount } from \"../utils/currency-constants\";\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 AdminGetSessionReplayAllEventsResponse,\n AdminGetSessionReplayChunkEventsResponse,\n AdminGetSessionReplayResponse,\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 type { PlanUsageResponse } from \"./plan-usage\";\nimport { HexclaveServerInterface, ServerAuthApplicationOptions } from \"./server-interface\";\n\nexport type { PlanUsageResponse } from \"./plan-usage\";\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 getPlanUsage(): Promise<PlanUsageResponse> {\n const response = await this.sendAdminRequest(\n \"/internal/plan-usage\",\n {\n method: \"GET\",\n },\n null,\n );\n return await response.json();\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 /**\n * Reads a specific config-agent run's state (or `null`) for the linked GitHub\n * repo. Polled by the dashboard — using the id returned by `applyConfigViaAgent`\n * — for live progress and the review diff. Runs are independent, so each is\n * addressed by its own id rather than \"the\" run on the branch.\n */\n async getConfigAgentRun(runId: string): Promise<ConfigAgentRunApi | null> {\n const response = await this.sendAdminRequest(\n `/internal/config/github/run?run_id=${encodeURIComponent(runId)}`,\n { method: \"GET\" },\n null,\n );\n const data = await response.json();\n return data.agent_run ?? null;\n }\n\n /**\n * Applies a dashboard config change to the linked GitHub repo by running the\n * config agent in a sandbox (server-side). Returns immediately with the new run's\n * `id`; poll `getConfigAgentRun(id)` for progress. The GitHub access token is the\n * caller's own OAuth token and is used transiently server-side.\n */\n async applyConfigViaAgent(options: { configUpdate: EnvironmentConfigOverrideOverride, githubAccessToken: string }): Promise<{ status: \"started\", id: string }> {\n const response = await this.sendAdminRequest(\n `/internal/config/github/apply`,\n {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({\n github_access_token: options.githubAccessToken,\n config_update_string: JSON.stringify(options.configUpdate),\n }),\n },\n null,\n );\n return await response.json();\n }\n\n /**\n * Cancels a specific in-flight agent-driven config write: hard-stops the sandbox\n * so the agent stops mid-work. Also cancels runs in `awaiting_review`. No revert\n * — if the agent already pushed, the commit stays. Returns `not-running` if the\n * run is gone or already terminal.\n */\n async cancelConfigAgentRun(runId: string): Promise<{ status: \"cancelling\" | \"not-running\" }> {\n const response = await this.sendAdminRequest(\n `/internal/config/github/cancel`,\n {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ run_id: runId }),\n },\n null,\n );\n return await response.json();\n }\n\n /**\n * Commits a specific run's reviewed change to GitHub. Only valid when that run is in\n * `awaiting_review` status; the change (diff + base commit) was captured at apply time\n * and is rebuilt + pushed via the GitHub API here, so no live sandbox is involved.\n * Returns `not-awaiting-review` if the run isn't in a committable state.\n */\n async commitConfigAgentRun(runId: string, options: { githubAccessToken: string, commitMessage?: string }): Promise<{ status: \"committing\" | \"not-awaiting-review\" }> {\n const response = await this.sendAdminRequest(\n `/internal/config/github/commit`,\n {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({\n run_id: runId,\n github_access_token: options.githubAccessToken,\n ...(options.commitMessage ? { commit_message: options.commitMessage } : {}),\n }),\n },\n null,\n );\n return await response.json();\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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"}
|
|
1
|
+
{"version":3,"file":"admin-interface.js","names":[],"sources":["../../../src/interface/admin-interface.ts"],"sourcesContent":["import * as yup from \"yup\";\nimport type { EnvironmentConfigOverrideOverride } from \"../config/schema\";\nimport { KnownErrors } from \"../known-errors\";\nimport { branchConfigSourceSchema, type ConfigAgentRunApi, type RestrictedReason } from \"../schema-fields\";\nimport { AccessToken, InternalSession, RefreshToken } from \"../sessions\";\nimport type { MoneyAmount } from \"../utils/currency-constants\";\nimport { Result } from \"../utils/results\";\nimport { urlString } from \"../utils/urls\";\nimport type { AnalyticsClickmapDevice, AnalyticsClickmapKind, AnalyticsClickmapResponse, AnalyticsClickmapTokenResponse, MetricsResponse, MetricsUserCounts, UserActivityResponse } from \"./admin-metrics\";\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 AdminGetSessionReplayAllEventsResponse,\n AdminGetSessionReplayChunkEventsResponse,\n AdminGetSessionReplayResponse,\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 type { PlanUsageResponse } from \"./plan-usage\";\nimport { HexclaveServerInterface, ServerAuthApplicationOptions } from \"./server-interface\";\n\nexport type { PlanUsageResponse } from \"./plan-usage\";\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 getPlanUsage(): Promise<PlanUsageResponse> {\n const response = await this.sendAdminRequest(\n \"/internal/plan-usage\",\n {\n method: \"GET\",\n },\n null,\n );\n return await response.json();\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 /**\n * Reads a specific config-agent run's state (or `null`) for the linked GitHub\n * repo. Polled by the dashboard — using the id returned by `applyConfigViaAgent`\n * — for live progress and the review diff. Runs are independent, so each is\n * addressed by its own id rather than \"the\" run on the branch.\n */\n async getConfigAgentRun(runId: string): Promise<ConfigAgentRunApi | null> {\n const response = await this.sendAdminRequest(\n `/internal/config/github/run?run_id=${encodeURIComponent(runId)}`,\n { method: \"GET\" },\n null,\n );\n const data = await response.json();\n return data.agent_run ?? null;\n }\n\n /**\n * Applies a dashboard config change to the linked GitHub repo by running the\n * config agent in a sandbox (server-side). Returns immediately with the new run's\n * `id`; poll `getConfigAgentRun(id)` for progress. The GitHub access token is the\n * caller's own OAuth token and is used transiently server-side.\n */\n async applyConfigViaAgent(options: { configUpdate: EnvironmentConfigOverrideOverride, githubAccessToken: string }): Promise<{ status: \"started\", id: string }> {\n const response = await this.sendAdminRequest(\n `/internal/config/github/apply`,\n {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({\n github_access_token: options.githubAccessToken,\n config_update_string: JSON.stringify(options.configUpdate),\n }),\n },\n null,\n );\n return await response.json();\n }\n\n /**\n * Cancels a specific in-flight agent-driven config write: hard-stops the sandbox\n * so the agent stops mid-work. Also cancels runs in `awaiting_review`. No revert\n * — if the agent already pushed, the commit stays. Returns `not-running` if the\n * run is gone or already terminal.\n */\n async cancelConfigAgentRun(runId: string): Promise<{ status: \"cancelling\" | \"not-running\" }> {\n const response = await this.sendAdminRequest(\n `/internal/config/github/cancel`,\n {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ run_id: runId }),\n },\n null,\n );\n return await response.json();\n }\n\n /**\n * Commits a specific run's reviewed change to GitHub. Only valid when that run is in\n * `awaiting_review` status; the change (diff + base commit) was captured at apply time\n * and is rebuilt + pushed via the GitHub API here, so no live sandbox is involved.\n * Returns `not-awaiting-review` if the run isn't in a committable state.\n */\n async commitConfigAgentRun(runId: string, options: { githubAccessToken: string, commitMessage?: string }): Promise<{ status: \"committing\" | \"not-awaiting-review\" }> {\n const response = await this.sendAdminRequest(\n `/internal/config/github/commit`,\n {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({\n run_id: runId,\n github_access_token: options.githubAccessToken,\n ...(options.commitMessage ? { commit_message: options.commitMessage } : {}),\n }),\n },\n null,\n );\n return await response.json();\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 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":";;;;;AA8DA,IAAa,yBAAb,cAA4C,wBAAwB;CAClE,YAAY,SAAsD;EAChE,MAAM,OAAO;EADa,KAAA,UAAA;CAE5B;CAEA,MAAa,iBAAiB,MAAc,SAAsB,SAAiC,cAAuB,SAAS;EACjI,OAAO,MAAM,KAAK,kBAChB,MACA;GACE,GAAG;GACH,SAAS;IAEP,qCAAqC,yBAAyB,KAAK,UAAU,KAAK,QAAQ,sBAAsB;IAChH,GAAG,QAAQ;GACb;EACF,GACA,SACA,WACF;CACF;CAEA,MAAgB,mCACd,MACA,gBACA,kBACA,eASC;EACD,IAAI;GACF,OAAO,OAAO,GAAG,MAAM,KAAK,iBAAiB,MAAM,gBAAgB,gBAAgB,CAAC;EACtF,SAAS,GAAG;GACV,KAAK,MAAM,aAAa,eACtB,IAAI,UAAU,WAAW,CAAC,GACxB,OAAO,OAAO,MAAM,CAAoB;GAG5C,MAAM;EACR;CACF;CAEA,MAAM,aAAqD;EAQzD,OAAO,OAAM,MAPU,KAAK,iBAC1B,8BACA,EACE,QAAQ,MACV,GACA,IACF,EAAA,CACsB,KAAK;CAC7B;CAEA,MAAM,cAAc,QAAiF;EAYnG,OAAO,OAAM,MAXU,KAAK,iBAC1B,8BACA;GACE,QAAQ;GACR,SAAS,EACP,gBAAgB,mBAClB;GACA,MAAM,KAAK,UAAU,MAAM;EAC7B,GACA,IACF,EAAA,CACsB,KAAK;CAC7B;CAEA,MAAM,qBACJ,SAC2C;EAY3C,OAAO,OAAM,MAXU,KAAK,iBAC1B,sBACA;GACE,QAAQ;GACR,SAAS,EACP,gBAAgB,mBAClB;GACA,MAAM,KAAK,UAAU,OAAO;EAC9B,GACA,IACF,EAAA,CACsB,KAAK;CAC7B;CAEA,MAAM,sBAAuE;EAG3E,QAAO,OADc,MADE,KAAK,iBAAiB,sBAAsB,CAAC,GAAG,IAAI,EAAA,CAC7C,KAAK,EAAA,CACrB;CAChB;CAEA,MAAM,yBAAyB,IAAY;EACzC,MAAM,KAAK,iBACT,sBAAsB,MAAM;GAC1B,QAAQ;GACR,SAAS,EACP,gBAAgB,mBAClB;GACA,MAAM,KAAK,UAAU,EACnB,SAAS,KACX,CAAC;EACH,GACA,IACF;CACF;CAEA,MAAM,kBAAkB,IAAY,SAAyE;EAE3G,OAAO,OAAM,MADU,KAAK,iBAAiB,sBAAsB,MAAM,CAAC,GAAG,OAAO,EAAA,CAC9D,KAAK;CAC7B;CAEA,MAAM,6BAAqH;EAGzH,QAAO,OADc,MADE,KAAK,iBAAiB,6BAA6B,CAAC,GAAG,IAAI,EAAA,CACpD,KAAK,EAAA,CACrB;CAChB;CAEA,MAAM,0BAAsK;EAG1K,QAAO,OADc,MADE,KAAK,iBAAiB,0BAA0B,CAAC,GAAG,IAAI,EAAA,CACjD,KAAK,EAAA,CACrB;CAChB;CAEA,MAAM,iBAAiB,SAA6G;EAYlI,OAAO,OAAM,MAXU,KAAK,iBAC1B,0BACA;GACE,QAAQ;GACR,SAAS,EACP,gBAAgB,mBAClB;GACA,MAAM,KAAK,UAAU,OAAO;EAC9B,GACA,IACF,EAAA,CACsB,KAAK;CAC7B;CAEA,MAAM,iBAAiB,IAAY,MAAuI;EACxK,MAAM,KAAK,iBACT,0BAA0B,MAC1B;GACE,QAAQ;GACR,SAAS,EACP,gBAAgB,mBAClB;GACA,MAAM,KAAK,UAAU,IAAI;EAC3B,GACA,IACF;CACF;CAEA,MAAM,iBAAiB,IAA2B;EAChD,MAAM,KAAK,iBACT,0BAA0B,MAC1B,EACE,QAAQ,SACV,GACA,IACF;CACF;CAEA,MAAM,kBAAmE;EAGvE,QAAO,OADc,MADE,KAAK,iBAAiB,0BAA0B,CAAC,GAAG,IAAI,EAAA,CACjD,KAAK,EAAA,CACrB;CAChB;CAIA,MAAM,gCAA2F;EAG/F,QAAO,OADc,MADE,KAAK,iBAAiB,gCAAgC,CAAC,GAAG,IAAI,EAAA,CACvD,KAAK,EAAA,CACrB;CAChB;CAEA,MAAM,uCACJ,SACiG;EACjG,MAAM,SAAS,IAAI,gBAAgB;EACnC,OAAO,IAAI,SAAS,OAAO,QAAQ,KAAK,CAAC;EACzC,IAAI,QAAQ,QAAQ,OAAO,IAAI,UAAU,QAAQ,MAAM;EACvD,IAAI,QAAQ,OAAO,OAAO,IAAI,SAAS,QAAQ,KAAK;EAEpD,MAAM,SAAS,OAAM,MADE,KAAK,iBAAiB,gCAAgC,OAAO,SAAS,KAAK,CAAC,GAAG,IAAI,EAAA,CAC5E,KAAK;EACnC,OAAO;GACL,OAAO,OAAO;GACd,YAAY,OAAO,YAAY,eAAe;EAChD;CACF;CAEA,MAAM,+BAA+B,MAAiH;EAYpJ,OAAO,OAAM,MAXU,KAAK,iBAC1B,gCACA;GACE,QAAQ;GACR,SAAS,EACP,gBAAgB,mBAClB;GACA,MAAM,KAAK,UAAU,IAAI;EAC3B,GACA,IACF,EAAA,CACsB,KAAK;CAC7B;CAEA,MAAM,+BAA+B,cAAsB,MAAiH;EAY1K,OAAO,OAAM,MAXU,KAAK,iBAC1B,gCAAgC,gBAChC;GACE,QAAQ;GACR,SAAS,EACP,gBAAgB,mBAClB;GACA,MAAM,KAAK,UAAU,IAAI;EAC3B,GACA,IACF,EAAA,CACsB,KAAK;CAC7B;CAEA,MAAM,+BAA+B,cAAqC;EACxE,MAAM,KAAK,iBACT,gCAAgC,gBAChC,EAAE,QAAQ,SAAS,GACnB,IACF;CACF;CAEA,MAAM,mCAAiG;EAGrG,QAAO,OADc,MADE,KAAK,iBAAiB,mCAAmC,CAAC,GAAG,IAAI,EAAA,CAC1D,KAAK,EAAA,CACrB;CAChB;CAEA,MAAM,kCAAkC,MAAuH;EAY7J,OAAO,OAAM,MAXU,KAAK,iBAC1B,mCACA;GACE,QAAQ;GACR,SAAS,EACP,gBAAgB,mBAClB;GACA,MAAM,KAAK,UAAU,IAAI;EAC3B,GACA,IACF,EAAA,CACsB,KAAK;CAC7B;CAEA,MAAM,kCAAkC,cAAsB,MAAuH;EAYnL,OAAO,OAAM,MAXU,KAAK,iBAC1B,mCAAmC,gBACnC;GACE,QAAQ;GACR,SAAS,EACP,gBAAgB,mBAClB;GACA,MAAM,KAAK,UAAU,IAAI;EAC3B,GACA,IACF,EAAA,CACsB,KAAK;CAC7B;CAEA,MAAM,kCAAkC,cAAqC;EAC3E,MAAM,KAAK,iBACT,mCAAmC,gBACnC,EAAE,QAAQ,SAAS,GACnB,IACF;CACF;CAEA,MAAM,eAAwD;EAY5D,OAAO,OAAM,MAXU,KAAK,iBAC1B,wBACA;GACE,QAAQ;GACR,SAAS,EACP,gBAAgB,mBAClB;GACA,MAAM,KAAK,UAAU,CAAC,CAAC;EACzB,GACA,IACF,EAAA,CACsB,KAAK;CAC7B;CAEA,MAAM,gBAA+B;EACnC,MAAM,KAAK,iBACT,8BACA,EACE,QAAQ,SACV,GACA,IACF;CACF;CAEA,MAAM,WACJ,mBAA4B,OAC5B,SAS0B;EAC1B,MAAM,SAAS,IAAI,gBAAgB;EACnC,IAAI,kBACF,OAAO,OAAO,qBAAqB,MAAM;EAE3C,IAAI,SAAS,cAAc,OAAO,OAAO,uBAAuB,QAAQ,YAAY;EACpF,IAAI,SAAS,UAAU,OAAO,OAAO,mBAAmB,QAAQ,QAAQ;EACxE,IAAI,SAAS,SAAS,OAAO,OAAO,kBAAkB,QAAQ,OAAO;EACrE,IAAI,SAAS,IAAI,OAAO,OAAO,aAAa,QAAQ,EAAE;EACtD,IAAI,SAAS,QAAQ,OAAO,OAAO,iBAAiB,QAAQ,MAAM;EAClE,IAAI,SAAS,OAAO,OAAO,OAAO,gBAAgB,QAAQ,KAAK;EAC/D,IAAI,SAAS,OAAO,OAAO,OAAO,gBAAgB,QAAQ,KAAK;EAC/D,MAAM,cAAc,OAAO,SAAS;EAQpC,MAAM,OAAQ,OAAM,MAPG,KAAK,iBAC1B,oBAAoB,cAAc,IAAI,gBAAgB,MACtD,EACE,QAAQ,MACV,GACA,IACF,EAAA,CAC6B,KAAK;EAOlC,MAAM,UAAoC;EAC1C,MAAM,eAA+D,KAAK;EAC1E,OAAO;GACL,GAAG;GACH,YAAY,QAAQ,cAAc;GAClC,cAAc,QAAQ,gBAAgB,CAAC;GACvC,qBAAqB,QAAQ,uBAAuB,CAAC;GACrD,oBAAoB;IAClB,GAAG,KAAK;IACR,mBAAmB,aAAa,qBAAqB,CAAC;IACtD,qBAAqB,aAAa,uBAAuB,CAAC;IAC1D,iBAAiB,aAAa,mBAAmB,CAAC;IAClD,mCAAmC,aAAa,qCAAqC,CAAC;IACtF,6BAA6B,aAAa,+BAA+B;IACzE,aAAa,aAAa,eAAe,CAAC;IAC1C,aAAa,aAAa,eAAe;IACzC,mBAAmB,aAAa,qBAAqB,CAAC;IACtD,2BAA2B,aAAa,6BAA6B,CAAC;IACtE,cAAc,aAAa,gBAAgB,CAAC;IAC5C,uBAAuB,aAAa,yBAAyB,CAAC;IAC9D,aAAa,aAAa,eAAe,CAAC;GAC5C;EACF;CACF;CAEA,MAAM,eAA2C;EAQ/C,OAAO,OAAM,MAPU,KAAK,iBAC1B,wBACA,EACE,QAAQ,MACV,GACA,IACF,EAAA,CACsB,KAAK;CAC7B;CAEA,MAAM,gBAAgB,QAA+C;EAQnE,OAAQ,OAAM,MAPS,KAAK,iBAC1B,SAAS,mCAAmC,UAC5C,EACE,QAAQ,MACV,GACA,IACF,EAAA,CACuB,KAAK;CAC9B;CAEA,MAAM,qBAAqB,SAcY;EAUrC,OAAQ,OAAM,MATS,KAAK,iBAC1B,gCACA;GACE,QAAQ;GACR,SAAS,EAAE,gBAAgB,mBAAmB;GAC9C,MAAM,KAAK,UAAU,OAAO;EAC9B,GACA,IACF,EAAA,CACuB,KAAK;CAC9B;CAEA,MAAM,6BAA6B,SAES;EAU1C,OAAQ,OAAM,MATS,KAAK,iBAC1B,sCACA;GACE,QAAQ;GACR,SAAS,EAAE,gBAAgB,mBAAmB;GAC9C,MAAM,KAAK,UAAU,OAAO;EAC9B,GACA,IACF,EAAA,CACuB,KAAK;CAC9B;CAEA,MAAM,uBAAmD;EAQvD,OAAQ,OAAM,MAPS,KAAK,iBAC1B,iCACA,EACE,QAAQ,MACV,GACA,IACF,EAAA,CACuB,KAAK;CAC9B;CAEA,MAAM,cAAc,MAUsC;EAQxD,OAAO,OAAM,MAPU,KAAK,iBAAiB,6BAA6B;GACxE,QAAQ;GACR,SAAS,EACP,gBAAgB,mBAClB;GACA,MAAM,KAAK,UAAU,IAAI;EAC3B,GAAG,IAAI,EAAA,CACe,KAAK;CAC7B;CAEA,MAAM,gBAAgB,MAEoC;EAQxD,OAAO,OAAM,MAPU,KAAK,iBAAiB,+BAA+B;GAC1E,QAAQ;GACR,SAAS,EACP,gBAAgB,mBAClB;GACA,MAAM,KAAK,UAAU,IAAI;EAC3B,GAAG,IAAI,EAAA,CACe,KAAK;CAC7B;CAEA,MAAM,iBAA+D;EAInE,OAAO,OAAM,MAHU,KAAK,iBAAiB,oBAAoB,EAC/D,QAAQ,MACV,GAAG,IAAI,EAAA,CACe,KAAK;CAC7B;CAEA,MAAM,0BAA0B,MAS3B;EAQH,OAAO,OAAM,MAPU,KAAK,iBAAiB,6CAA6C;GACxF,QAAQ;GACR,SAAS,EACP,gBAAgB,mBAClB;GACA,MAAM,KAAK,UAAU,IAAI;EAC3B,GAAG,IAAI,EAAA,CACe,KAAK;CAC7B;CAEA,MAAM,wBAAwB,MAIsE;EAQlG,OAAO,OAAM,MAPU,KAAK,iBAAiB,6CAA6C;GACxF,QAAQ;GACR,SAAS,EACP,gBAAgB,mBAClB;GACA,MAAM,KAAK,UAAU,IAAI;EAC3B,GAAG,IAAI,EAAA,CACe,KAAK;CAC7B;CAEA,MAAM,0BAQD;EAIH,OAAO,OAAM,MAHU,KAAK,iBAAiB,4CAA4C,EACvF,QAAQ,MACV,GAAG,IAAI,EAAA,CACe,KAAK;CAC7B;CAEA,MAAM,yBAAyB,MAEI;EAQjC,OAAO,OAAM,MAPU,KAAK,iBAAiB,8CAA8C;GACzF,QAAQ;GACR,SAAS,EACP,gBAAgB,mBAClB;GACA,MAAM,KAAK,UAAU,IAAI;EAC3B,GAAG,IAAI,EAAA,CACe,KAAK;CAC7B;CAEA,MAAM,0BAA0B,MAEG;EAQjC,OAAO,OAAM,MAPU,KAAK,iBAAiB,6CAA6C;GACxF,QAAQ;GACR,SAAS,EACP,gBAAgB,mBAClB;GACA,MAAM,KAAK,UAAU,IAAI;EAC3B,GAAG,IAAI,EAAA,CACe,KAAK;CAC7B;CAEA,MAAM,0BACJ,OACA,aACe;EACf,MAAM,KAAK,iBACT,qCACA;GACE,QAAQ;GACR,SAAS,EACP,gBAAgB,mBAClB;GACA,MAAM,KAAK,UAAU;IACnB;IACA,cAAc;GAChB,CAAC;EACH,GACA,IACF;CACF;CAEA,MAAM,gBAAgB,UAAkB,SAA6B;EACnE,MAAM,KAAK,iBACT,qBAAqB,YACrB;GACE,QAAQ;GACR,SAAS,EACP,gBAAgB,mBAClB;GACA,MAAM,KAAK,UAAU,EAAE,QAAQ,CAAC;EAClC,GACA,IACF;CACF;CAEA,MAAM,iBAAiB,UAAqD;EAM1E,OAAO,OAAM,MALU,KAAK,iBAC1B,qBAAqB,YACrB,EAAE,QAAQ,MAAM,GAChB,IACF,EAAA,CACsB,KAAK;CAC7B;CAEA,MAAM,mBAAmB,SAOiD;EAexE,OAAO,OAAM,MAdU,KAAK,iBAAiB,wBAAwB;GACnE,QAAQ;GACR,SAAS,EACP,gBAAgB,mBAClB;GACA,MAAM,KAAK,UAAU;IACnB,UAAU,QAAQ;IAClB,kBAAkB,QAAQ;IAC1B,aAAa,QAAQ;IACrB,qBAAqB,QAAQ;IAC7B,kBAAkB,QAAQ;IAC1B,iBAAiB,QAAQ;GAC3B,CAAC;EACH,GAAG,IAAI,EAAA,CACe,KAAK;CAC7B;CAEA,MAAM,4BAA4B,mBAA4D;EAU5F,OAAO,OAAM,MATU,KAAK,iBAAiB,qCAAqC;GAChF,QAAQ;GACR,SAAS,EACP,gBAAgB,mBAClB;GACA,MAAM,KAAK,UAAU,EACnB,qBAAqB,kBACvB,CAAC;EACH,GAAG,IAAI,EAAA,CACe,KAAK;CAC7B;CAEA,MAAM,iBAAiB,aAA8C;EAcnE,OAAO,OAAM,MAbU,KAAK,iBAC1B,0BACA;GACE,QAAQ;GACR,SAAS,EACP,gBAAgB,mBAClB;GACA,MAAM,KAAK,UAAU,EACnB,cAAc,YAChB,CAAC;EACH,GACA,IACF,EAAA,CACsB,KAAK;CAC7B;CAEA,MAAM,cAAc,IAAmE;EAMrF,OAAO,OAAM,MALU,KAAK,iBAC1B,0BAA0B,MAC1B,EAAE,QAAQ,MAAM,GAChB,IACF,EAAA,CACsB,KAAK;CAC7B;CAEA,MAAM,iBAAiB,IAAY,WAAkC;EACnE,MAAM,KAAK,iBACT,0BAA0B,MAC1B;GACE,QAAQ;GACR,SAAS,EACP,gBAAgB,mBAClB;GACA,MAAM,KAAK,UAAU,EACnB,YAAY,UACd,CAAC;EACH,GACA,IACF;CACF;CAEA,MAAM,iBAAiB,IAA2B;EAChD,MAAM,KAAK,iBACT,0BAA0B,MAC1B,EACE,QAAQ,SACV,GACA,IACF;CACF;CAEA,MAAM,oBAAoB,IAAY,WAAmB,SAAoE;EAY3H,OAAO,OAAM,MAXU,KAAK,iBAC1B,6BAA6B,MAC7B;GACE,QAAQ;GACR,SAAS,EACP,gBAAgB,mBAClB;GACA,MAAM,KAAK,UAAU;IAAE,YAAY;IAAW,UAAU;GAAQ,CAAC;EACnE,GACA,IACF,EAAA,CACsB,KAAK;CAC7B;CAEA,MAAM,YAAgD;EAMpD,OAAO,OAAM,MALU,KAAK,iBAC1B,oBACA,EAAE,QAAQ,MAAM,GAChB,IACF,EAAA,CACsB,KAAK;CAC7B;CAEA,MAAM,kBAAkB,OAAiF;EAMvG,OAAO,OAAM,MALU,KAAK,iBAC1B,6BAA6B,SAC7B,EAAE,QAAQ,MAAM,GAChB,IACF,EAAA,CACsB,KAAK;CAC7B;CAEA,MAAM,kBAAkB,OAA6C,gBAAqB,QAA+C;EACvI,MAAM,KAAK,iBACT,6BAA6B,SAC7B;GACE,QAAQ;GACR,SAAS,EACP,gBAAgB,mBAClB;GACA,MAAM,KAAK,UAAU;IACnB,eAAe,KAAK,UAAU,cAAc;IAC5C,GAAI,UAAU,EAAE,OAAO;GACzB,CAAC;EACH,GACA,IACF;CACF;CAEA,MAAM,qBAAqB,OAA6C,wBAA4C;EAClH,MAAM,KAAK,iBACT,6BAA6B,SAC7B;GACE,QAAQ;GACR,SAAS,EACP,gBAAgB,mBAClB;GACA,MAAM,KAAK,UAAU,EAAE,wBAAwB,KAAK,UAAU,sBAAsB,EAAE,CAAC;EACzF,GACA,IACF;CACF;CAEA,MAAM,wBAAwD;EAO5D,QAAO,OADY,MALI,KAAK,iBAC1B,2BACA,EAAE,QAAQ,MAAM,GAChB,IACF,EAAA,CAC4B,KAAK,EAAA,CACrB;CACd;CAEA,MAAM,2BAA0C;EAC9C,MAAM,KAAK,iBACT,2BACA,EAAE,QAAQ,SAAS,GACnB,IACF;CACF;;;;;;;CAQA,MAAM,kBAAkB,OAAkD;EAOxE,QAAO,OADY,MALI,KAAK,iBAC1B,sCAAsC,mBAAmB,KAAK,KAC9D,EAAE,QAAQ,MAAM,GAChB,IACF,EAAA,CAC4B,KAAK,EAAA,CACrB,aAAa;CAC3B;;;;;;;CAQA,MAAM,oBAAoB,SAAqI;EAa7J,OAAO,OAAM,MAZU,KAAK,iBAC1B,iCACA;GACE,QAAQ;GACR,SAAS,EAAE,gBAAgB,mBAAmB;GAC9C,MAAM,KAAK,UAAU;IACnB,qBAAqB,QAAQ;IAC7B,sBAAsB,KAAK,UAAU,QAAQ,YAAY;GAC3D,CAAC;EACH,GACA,IACF,EAAA,CACsB,KAAK;CAC7B;;;;;;;CAQA,MAAM,qBAAqB,OAAkE;EAU3F,OAAO,OAAM,MATU,KAAK,iBAC1B,kCACA;GACE,QAAQ;GACR,SAAS,EAAE,gBAAgB,mBAAmB;GAC9C,MAAM,KAAK,UAAU,EAAE,QAAQ,MAAM,CAAC;EACxC,GACA,IACF,EAAA,CACsB,KAAK;CAC7B;;;;;;;CAQA,MAAM,qBAAqB,OAAe,SAA2H;EAcnK,OAAO,OAAM,MAbU,KAAK,iBAC1B,kCACA;GACE,QAAQ;GACR,SAAS,EAAE,gBAAgB,mBAAmB;GAC9C,MAAM,KAAK,UAAU;IACnB,QAAQ;IACR,qBAAqB,QAAQ;IAC7B,GAAI,QAAQ,gBAAgB,EAAE,gBAAgB,QAAQ,cAAc,IAAI,CAAC;GAC3E,CAAC;EACH,GACA,IACF,EAAA,CACsB,KAAK;CAC7B;CAEA,MAAM,wBAAwB,OAAiC,MAA+B;EAC5F,MAAM,KAAK,iBACT,6BAA6B,MAAM,cACnC;GACE,QAAQ;GACR,SAAS,EACP,gBAAgB,mBAClB;GACA,MAAM,KAAK,UAAU,EAAE,KAAK,CAAC;EAC/B,GACA,IACF;CACF;CACA,MAAM,oBAAoB,aAA8C;EActE,OAAO,OAAM,MAbU,KAAK,iBAC1B,6BACA;GACE,QAAQ;GACR,SAAS,EACP,gBAAgB,mBAClB;GACA,MAAM,KAAK,UAAU,EACnB,cAAc,YAChB,CAAC;EACH,GACA,IACF,EAAA,CACsB,KAAK;CAC7B;CAEA,MAAM,oBAAoB,IAA2B;EACnD,MAAM,KAAK,iBACT,6BAA6B,MAC7B,EACE,QAAQ,SACV,GACA,IACF;CACF;CAEA,MAAM,gBAA0C;EAY9C,OAAO,OAAM,MAXU,KAAK,iBAC1B,4BACA;GACE,QAAQ;GACR,SAAS,EACP,gBAAgB,mBAClB;GACA,MAAM,KAAK,UAAU,CAAC,CAAC;EACzB,GACA,IACF,EAAA,CACsB,KAAK;CAC7B;CAEA,MAAM,uBAA+I;EACnJ,MAAM,WAAW,MAAM,KAAK,mCAC1B,0CACA,CAAC,GACD,MACA,CAAC,YAAY,yBAAyB,CACxC;EACA,IAAI,SAAS,WAAW,SACtB,OAAO;EAET,OAAO,MAAM,SAAS,KAAK,KAAK;CAClC;CAEA,MAAM,0BAA0K;EAC9K,MAAM,WAAW,MAAM,KAAK,mCAC1B,qCACA,EAAE,QAAQ,MAAM,GAChB,MACA,CAAC,YAAY,yBAAyB,CACxC;EACA,IAAI,SAAS,WAAW,SACtB,OAAO;EAET,MAAM,OAAO,MAAM,SAAS,KAAK,KAAK;EACtC,OAAO;GACL,UAAU,KAAK;GACf,SAAS,KAAK;EAChB;CACF;CAEA,MAAM,2BAA2B,UAAkB,SAAsD;EACvG,MAAM,KAAK,iBACT,qCACA;GACE,QAAQ;GACR,SAAS,EAAE,gBAAgB,mBAAmB;GAC9C,MAAM,KAAK,UAAU;IAAE,WAAW;IAAU;GAAQ,CAAC;EACvD,GACA,IACF;CACF;CAEA,MAAM,mCAAuE;EAY3E,OAAO,OAAM,MAXU,KAAK,iBAC1B,qDACA;GACE,QAAQ;GACR,SAAS,EACP,gBAAgB,mBAClB;GACA,MAAM,KAAK,UAAU,CAAC,CAAC;EACzB,GACA,IACF,EAAA,CACsB,KAAK;CAC7B;CAEA,MAAM,iBAAiB,QAA2M;EAChO,MAAM,KAAK,IAAI,gBAAgB;EAC/B,IAAI,QAAQ,QAAQ,GAAG,IAAI,UAAU,OAAO,MAAM;EAClD,IAAI,OAAO,QAAQ,UAAU,UAAU,GAAG,IAAI,SAAS,OAAO,OAAO,KAAK,CAAC;EAC3E,IAAI,QAAQ,MAAM,GAAG,IAAI,QAAQ,OAAO,IAAI;EAC5C,IAAI,QAAQ,cAAc,GAAG,IAAI,iBAAiB,OAAO,YAAY;EACrE,IAAI,QAAQ,YAAY,GAAG,IAAI,eAAe,OAAO,UAAU;EAM/D,MAAM,OAAO,OAAM,MALI,KAAK,iBAC1B,kCAAkC,GAAG,OAAO,IAAI,GAAG,SAAS,MAAM,MAClE,EAAE,QAAQ,MAAM,GAChB,IACF,EAAA,CAC4B,KAAK;EACjC,OAAO;GAAE,cAAc,KAAK;GAAc,YAAY,KAAK;EAAY;CACzE;CAEA,MAAM,mBAAmB,QAAmF;EAC1G,MAAM,KAAK,IAAI,gBAAgB;EAC/B,IAAI,QAAQ,QAAQ,GAAG,IAAI,UAAU,OAAO,MAAM;EAClD,IAAI,OAAO,QAAQ,UAAU,UAAU,GAAG,IAAI,SAAS,OAAO,OAAO,KAAK,CAAC;EAC3E,IAAI,QAAQ,YAAY,OAAO,SAAS,SAAS,GAAG,GAAG,IAAI,YAAY,OAAO,SAAS,KAAK,GAAG,CAAC;EAChG,IAAI,QAAQ,YAAY,OAAO,SAAS,SAAS,GAAG,GAAG,IAAI,YAAY,OAAO,SAAS,KAAK,GAAG,CAAC;EAChG,IAAI,OAAO,QAAQ,oBAAoB,UAAU,GAAG,IAAI,mBAAmB,OAAO,OAAO,eAAe,CAAC;EACzG,IAAI,OAAO,QAAQ,oBAAoB,UAAU,GAAG,IAAI,mBAAmB,OAAO,OAAO,eAAe,CAAC;EACzG,IAAI,OAAO,QAAQ,8BAA8B,UAAU,GAAG,IAAI,6BAA6B,OAAO,OAAO,yBAAyB,CAAC;EACvI,IAAI,OAAO,QAAQ,4BAA4B,UAAU,GAAG,IAAI,2BAA2B,OAAO,OAAO,uBAAuB,CAAC;EACjI,IAAI,OAAO,QAAQ,oBAAoB,UAAU,GAAG,IAAI,mBAAmB,OAAO,OAAO,eAAe,CAAC;EAMzG,OAAO,OAAM,MALU,KAAK,iBAC1B,4BAA4B,GAAG,OAAO,IAAI,GAAG,SAAS,MAAM,MAC5D,EAAE,QAAQ,MAAM,GAChB,IACF,EAAA,CACsB,KAAK;CAC7B;CAEA,MAAM,iBAAiB,iBAAiE;EAMtF,OAAO,OAAM,MALU,KAAK,iBAC1B,6BAA6B,mBAAmB,eAAe,KAC/D,EAAE,QAAQ,MAAM,GAChB,IACF,EAAA,CACsB,KAAK;CAC7B;CAEA,MAAM,wBAAwB,iBAAyB,QAA6F;EAClJ,MAAM,KAAK,IAAI,gBAAgB;EAC/B,IAAI,QAAQ,QAAQ,GAAG,IAAI,UAAU,OAAO,MAAM;EAClD,IAAI,OAAO,QAAQ,UAAU,UAAU,GAAG,IAAI,SAAS,OAAO,OAAO,KAAK,CAAC;EAM3E,OAAO,OAAM,MALU,KAAK,iBAC1B,6BAA6B,mBAAmB,eAAe,EAAE,SAAS,GAAG,OAAO,IAAI,GAAG,SAAS,MAAM,MAC1G,EAAE,QAAQ,MAAM,GAChB,IACF,EAAA,CACsB,KAAK;CAC7B;CAEA,MAAM,4BAA4B,iBAAyB,SAAoE;EAM7H,OAAO,OAAM,MALU,KAAK,iBAC1B,6BAA6B,mBAAmB,eAAe,EAAE,UAAU,mBAAmB,OAAO,EAAE,UACvG,EAAE,QAAQ,MAAM,GAChB,IACF,EAAA,CACsB,KAAK;CAC7B;CAEA,MAAM,uBAAuB,iBAAyB,SAAgG;EACpJ,MAAM,KAAK,IAAI,gBAAgB;EAC/B,IAAI,OAAO,SAAS,WAAW,UAAU,GAAG,IAAI,UAAU,OAAO,QAAQ,MAAM,CAAC;EAChF,IAAI,OAAO,SAAS,UAAU,UAAU,GAAG,IAAI,SAAS,OAAO,QAAQ,KAAK,CAAC;EAM7E,OAAO,OAAM,MALU,KAAK,iBAC1B,6BAA6B,mBAAmB,eAAe,EAAE,SAAS,GAAG,OAAO,IAAI,GAAG,SAAS,MAAM,MAC1G,EAAE,QAAQ,MAAM,GAChB,IACF,EAAA,CACsB,KAAK;CAC7B;CAEA,MAAM,kBAAkB,SAcuC;EAkB7D,MAAM,OAAO,OAAM,MAjBI,KAAK,iBAC1B,0CACA;GACE,QAAQ;GACR,SAAS,EACP,gBAAgB,mBAClB;GACA,MAAM,KAAK,UAAU;IACnB,MAAM,QAAQ;IACd,IAAI,QAAQ;IACZ,GAAI,QAAQ,cAAc,KAAA,IAAY,EAAE,YAAY,QAAQ,UAAU,IAAI,CAAC;IAC3E,YAAY,QAAQ;IACpB,GAAI,QAAQ,cAAc,KAAA,IAAY,EAAE,YAAY,QAAQ,UAAU,IAAI,CAAC;GAC7E,CAAC;EACH,GACA,IACF,EAAA,CAC4B,KAAK;EACjC,OAAO;GAAE,SAAS,KAAK;GAAS,qBAAqB,KAAK;EAAsB;CAClF;CAGA,MAAM,uCACJ,YACA,OASC;EAYD,OAAO,OAAM,MAXU,KAAK,iBAC1B,8CAA8C,QAAQ,UAAU,UAAU,MAC1E;GACE,QAAQ;GACR,SAAS,EACP,gBAAgB,mBAClB;GACA,MAAM,KAAK,UAAU,EAAE,WAAW,CAAC;EACrC,GACA,IACF,EAAA,CACsB,KAAK;CAC7B;CAEA,MAAM,iBAAiB,SAAsJ;EAC3K,MAAM,KAAK,IAAI,gBAAgB;EAC/B,IAAI,SAAS,QAAQ,GAAG,IAAI,UAAU,QAAQ,MAAM;EACpD,IAAI,SAAS,eAAe,GAAG,IAAI,iBAAiB,QAAQ,aAAa;EACzE,IAAI,SAAS,SAAS,GAAG,IAAI,WAAW,QAAQ,OAAO;EACvD,IAAI,SAAS,UAAU,KAAA,GAAW,GAAG,IAAI,SAAS,QAAQ,MAAM,SAAS,CAAC;EAC1E,IAAI,SAAS,QAAQ,GAAG,IAAI,UAAU,QAAQ,MAAM;EAMpD,OAAO,OAAM,MALU,KAAK,kBAC1B,iBAAiB,GAAG,OAAO,IAAI,GAAG,SAAS,MAAM,MACjD,EAAE,QAAQ,MAAM,GAChB,IACF,EAAA,CACsB,KAAK;CAC7B;CAEA,MAAM,eAAe,IAAwD;EAM3E,OAAO,OAAM,MALU,KAAK,kBAC1B,kBAAkB,MAClB,EAAE,QAAQ,MAAM,GAChB,IACF,EAAA,CACsB,KAAK;CAC7B;CAEA,MAAM,kBAAkB,IAAY,MAAuF;EAYzH,OAAO,OAAM,MAXU,KAAK,kBAC1B,kBAAkB,MAClB;GACE,QAAQ;GACR,SAAS,EACP,gBAAgB,mBAClB;GACA,MAAM,KAAK,UAAU,IAAI;EAC3B,GACA,IACF,EAAA,CACsB,KAAK;CAC7B;AAEF"}
|
|
@@ -150,23 +150,23 @@ declare const MetricsEmailOverviewSchema: yup.ObjectSchema<{
|
|
|
150
150
|
activity: number;
|
|
151
151
|
}[];
|
|
152
152
|
daily_emails_by_status: {
|
|
153
|
+
ok: number;
|
|
153
154
|
error: number;
|
|
154
155
|
date: string;
|
|
155
|
-
ok: number;
|
|
156
156
|
in_progress: number;
|
|
157
157
|
}[];
|
|
158
158
|
emails_sent: number;
|
|
159
159
|
recent_emails: {
|
|
160
|
-
status: string;
|
|
161
160
|
id: string;
|
|
162
|
-
subject: string;
|
|
163
161
|
created_at_millis: number;
|
|
162
|
+
status: string;
|
|
163
|
+
subject: string;
|
|
164
164
|
}[];
|
|
165
165
|
deliverability_status: {
|
|
166
166
|
error: number;
|
|
167
|
+
bounced: number;
|
|
167
168
|
in_progress: number;
|
|
168
169
|
delivered: number;
|
|
169
|
-
bounced: number;
|
|
170
170
|
};
|
|
171
171
|
deliverability_rate: number;
|
|
172
172
|
bounce_rate: number;
|
|
@@ -369,7 +369,7 @@ declare const UserActivityResponseBodySchema: yup.ObjectSchema<{
|
|
|
369
369
|
data_points: undefined;
|
|
370
370
|
}, "">;
|
|
371
371
|
declare const AnalyticsClickmapKindSchema: yup.StringSchema<"team_user_hour_of_week" | "session_replay_clicks", yup.AnyObject, undefined, "">;
|
|
372
|
-
declare const AnalyticsClickmapDeviceSchema: yup.StringSchema<"tv" | "widescreen" | "desktop" | "laptop" | "tablet"
|
|
372
|
+
declare const AnalyticsClickmapDeviceSchema: yup.StringSchema<"mobile" | "tv" | "widescreen" | "desktop" | "laptop" | "tablet", yup.AnyObject, undefined, "">;
|
|
373
373
|
declare const AnalyticsClickmapTokenResponseBodySchema: yup.ObjectSchema<{
|
|
374
374
|
token: string;
|
|
375
375
|
origin: string;
|
|
@@ -403,9 +403,9 @@ declare const AnalyticsClickmapResponseBodySchema: yup.ObjectSchema<{
|
|
|
403
403
|
replays: number;
|
|
404
404
|
}[];
|
|
405
405
|
users: {
|
|
406
|
+
id: string;
|
|
406
407
|
primary_email: string | null;
|
|
407
408
|
display_name: string | null;
|
|
408
|
-
id: string;
|
|
409
409
|
profile_image_url: string | null;
|
|
410
410
|
clicks: number;
|
|
411
411
|
replays: number;
|
|
@@ -443,9 +443,9 @@ declare const AnalyticsClickmapResponseBodySchema: yup.ObjectSchema<{
|
|
|
443
443
|
elements: never[];
|
|
444
444
|
}, "">;
|
|
445
445
|
declare const MetricsActiveUsersByCountrySchema: yup.MixedSchema<Record<string, {
|
|
446
|
+
id: string;
|
|
446
447
|
primary_email: string | null;
|
|
447
448
|
display_name: string | null;
|
|
448
|
-
id: string;
|
|
449
449
|
profile_image_url: string | null;
|
|
450
450
|
signed_up_at_millis: number;
|
|
451
451
|
last_active_at_millis: number | null;
|
|
@@ -471,25 +471,25 @@ declare const MetricsResponseBodySchema: yup.ObjectSchema<{
|
|
|
471
471
|
}[];
|
|
472
472
|
users_by_country: Record<string, number>;
|
|
473
473
|
active_users_by_country: Record<string, {
|
|
474
|
+
id: string;
|
|
474
475
|
primary_email: string | null;
|
|
475
476
|
display_name: string | null;
|
|
476
|
-
id: string;
|
|
477
477
|
profile_image_url: string | null;
|
|
478
478
|
signed_up_at_millis: number;
|
|
479
479
|
last_active_at_millis: number | null;
|
|
480
480
|
}[]>;
|
|
481
481
|
recently_registered: {
|
|
482
|
+
id: string;
|
|
482
483
|
primary_email: string | null;
|
|
483
484
|
display_name: string | null;
|
|
484
|
-
id: string;
|
|
485
485
|
profile_image_url: string | null;
|
|
486
486
|
signed_up_at_millis: number;
|
|
487
487
|
last_active_at_millis: number | null;
|
|
488
488
|
}[];
|
|
489
489
|
recently_active: {
|
|
490
|
+
id: string;
|
|
490
491
|
primary_email: string | null;
|
|
491
492
|
display_name: string | null;
|
|
492
|
-
id: string;
|
|
493
493
|
profile_image_url: string | null;
|
|
494
494
|
signed_up_at_millis: number;
|
|
495
495
|
last_active_at_millis: number | null;
|
|
@@ -563,23 +563,23 @@ declare const MetricsResponseBodySchema: yup.ObjectSchema<{
|
|
|
563
563
|
emails_by_status: Record<string, number>;
|
|
564
564
|
total_emails: number;
|
|
565
565
|
daily_emails_by_status: {
|
|
566
|
+
ok: number;
|
|
566
567
|
error: number;
|
|
567
568
|
date: string;
|
|
568
|
-
ok: number;
|
|
569
569
|
in_progress: number;
|
|
570
570
|
}[];
|
|
571
571
|
emails_sent: number;
|
|
572
572
|
recent_emails: {
|
|
573
|
-
status: string;
|
|
574
573
|
id: string;
|
|
575
|
-
subject: string;
|
|
576
574
|
created_at_millis: number;
|
|
575
|
+
status: string;
|
|
576
|
+
subject: string;
|
|
577
577
|
}[];
|
|
578
578
|
deliverability_status: {
|
|
579
579
|
error: number;
|
|
580
|
+
bounced: number;
|
|
580
581
|
in_progress: number;
|
|
581
582
|
delivered: number;
|
|
582
|
-
bounced: number;
|
|
583
583
|
};
|
|
584
584
|
deliverability_rate: number;
|
|
585
585
|
bounce_rate: number;
|
|
@@ -49,16 +49,16 @@ declare const conversationSummarySchema: yup$1.ObjectSchema<{
|
|
|
49
49
|
userPrimaryEmail: string | null;
|
|
50
50
|
userProfileImageUrl: string | null;
|
|
51
51
|
subject: string;
|
|
52
|
-
status: "
|
|
52
|
+
status: "pending" | "open" | "closed";
|
|
53
53
|
priority: "low" | "normal" | "high" | "urgent";
|
|
54
54
|
source: "email" | "manual" | "chat" | "api";
|
|
55
55
|
lastMessageType: "message" | "internal-note" | "status-change";
|
|
56
56
|
preview: string | null;
|
|
57
57
|
lastActivityAt: string;
|
|
58
58
|
metadata: {
|
|
59
|
+
tags: string[];
|
|
59
60
|
assignedToUserId: string | null;
|
|
60
61
|
assignedToDisplayName: string | null;
|
|
61
|
-
tags: string[];
|
|
62
62
|
firstResponseDueAt: string | null;
|
|
63
63
|
firstResponseAt: string | null;
|
|
64
64
|
nextResponseDueAt: string | null;
|
|
@@ -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: "pending" | "open" | "closed";
|
|
133
133
|
priority: "low" | "normal" | "high" | "urgent";
|
|
134
134
|
source: "email" | "manual" | "chat" | "api";
|
|
135
135
|
messageType: "message" | "internal-note" | "status-change";
|
|
@@ -139,8 +139,8 @@ declare const conversationMessageSchema: yup$1.ObjectSchema<{
|
|
|
139
139
|
createdAt: string;
|
|
140
140
|
sender: {
|
|
141
141
|
type: "user" | "agent" | "system";
|
|
142
|
-
displayName: string | null;
|
|
143
142
|
id: string | null;
|
|
143
|
+
displayName: string | null;
|
|
144
144
|
primaryEmail: string | null;
|
|
145
145
|
};
|
|
146
146
|
}, yup$1.AnyObject, {
|
|
@@ -173,20 +173,20 @@ 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: "open" | "pending" | "closed";
|
|
177
|
-
priority: "low" | "normal" | "high" | "urgent";
|
|
178
|
-
subject: string;
|
|
179
176
|
source: "email" | "manual" | "chat" | "api";
|
|
180
177
|
metadata: {
|
|
178
|
+
tags: string[];
|
|
181
179
|
assignedToUserId: string | null;
|
|
182
180
|
assignedToDisplayName: string | null;
|
|
183
|
-
tags: string[];
|
|
184
181
|
firstResponseDueAt: string | null;
|
|
185
182
|
firstResponseAt: string | null;
|
|
186
183
|
nextResponseDueAt: string | null;
|
|
187
184
|
lastCustomerReplyAt: string | null;
|
|
188
185
|
lastAgentReplyAt: string | null;
|
|
189
186
|
};
|
|
187
|
+
status: "pending" | "open" | "closed";
|
|
188
|
+
subject: string;
|
|
189
|
+
priority: "low" | "normal" | "high" | "urgent";
|
|
190
190
|
conversationId: string;
|
|
191
191
|
userId: string | null;
|
|
192
192
|
teamId: string | null;
|
|
@@ -211,20 +211,20 @@ 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: "open" | "pending" | "closed";
|
|
215
|
-
priority: "low" | "normal" | "high" | "urgent";
|
|
216
|
-
subject: string;
|
|
217
214
|
source: "email" | "manual" | "chat" | "api";
|
|
218
215
|
metadata: {
|
|
216
|
+
tags: string[];
|
|
219
217
|
assignedToUserId: string | null;
|
|
220
218
|
assignedToDisplayName: string | null;
|
|
221
|
-
tags: string[];
|
|
222
219
|
firstResponseDueAt: string | null;
|
|
223
220
|
firstResponseAt: string | null;
|
|
224
221
|
nextResponseDueAt: string | null;
|
|
225
222
|
lastCustomerReplyAt: string | null;
|
|
226
223
|
lastAgentReplyAt: string | null;
|
|
227
224
|
};
|
|
225
|
+
status: "pending" | "open" | "closed";
|
|
226
|
+
subject: string;
|
|
227
|
+
priority: "low" | "normal" | "high" | "urgent";
|
|
228
228
|
conversationId: string;
|
|
229
229
|
userId: string | null;
|
|
230
230
|
teamId: string | null;
|
|
@@ -236,13 +236,13 @@ declare const conversationDetailResponseSchema: yup$1.ObjectSchema<{
|
|
|
236
236
|
lastActivityAt: string;
|
|
237
237
|
};
|
|
238
238
|
messages: {
|
|
239
|
-
status: "open" | "pending" | "closed";
|
|
240
|
-
id: string;
|
|
241
|
-
priority: "low" | "normal" | "high" | "urgent";
|
|
242
|
-
subject: string;
|
|
243
239
|
body: string | null;
|
|
244
240
|
source: "email" | "manual" | "chat" | "api";
|
|
245
241
|
metadata: {} | null;
|
|
242
|
+
id: string;
|
|
243
|
+
status: "pending" | "open" | "closed";
|
|
244
|
+
subject: string;
|
|
245
|
+
priority: "low" | "normal" | "high" | "urgent";
|
|
246
246
|
conversationId: string;
|
|
247
247
|
userId: string | null;
|
|
248
248
|
teamId: string | null;
|
|
@@ -251,14 +251,14 @@ declare const conversationDetailResponseSchema: yup$1.ObjectSchema<{
|
|
|
251
251
|
attachments: {}[];
|
|
252
252
|
sender: {
|
|
253
253
|
type: "user" | "agent" | "system";
|
|
254
|
-
displayName: string | null;
|
|
255
254
|
id: string | null;
|
|
255
|
+
displayName: string | null;
|
|
256
256
|
primaryEmail: string | null;
|
|
257
257
|
};
|
|
258
258
|
}[];
|
|
259
259
|
entryPoints: {
|
|
260
|
-
id: string;
|
|
261
260
|
metadata: {} | null;
|
|
261
|
+
id: string;
|
|
262
262
|
createdAt: string;
|
|
263
263
|
updatedAt: string;
|
|
264
264
|
channelType: string;
|