@hexclave/js 1.0.24 → 1.0.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/dist/dev-tool/dev-tool-core.d.ts.map +1 -1
  2. package/dist/dev-tool/dev-tool-core.js +4 -68
  3. package/dist/dev-tool/dev-tool-core.js.map +1 -1
  4. package/dist/esm/dev-tool/dev-tool-core.d.ts.map +1 -1
  5. package/dist/esm/dev-tool/dev-tool-core.js +4 -68
  6. package/dist/esm/dev-tool/dev-tool-core.js.map +1 -1
  7. package/dist/esm/lib/hexclave-app/apps/implementations/admin-app-impl.d.ts +6 -0
  8. package/dist/esm/lib/hexclave-app/apps/implementations/admin-app-impl.d.ts.map +1 -1
  9. package/dist/esm/lib/hexclave-app/apps/implementations/admin-app-impl.js +31 -1
  10. package/dist/esm/lib/hexclave-app/apps/implementations/admin-app-impl.js.map +1 -1
  11. package/dist/esm/lib/hexclave-app/apps/implementations/client-app-impl.d.ts +1 -0
  12. package/dist/esm/lib/hexclave-app/apps/implementations/client-app-impl.d.ts.map +1 -1
  13. package/dist/esm/lib/hexclave-app/apps/implementations/client-app-impl.js +18 -11
  14. package/dist/esm/lib/hexclave-app/apps/implementations/client-app-impl.js.map +1 -1
  15. package/dist/esm/lib/hexclave-app/apps/implementations/common.js +1 -1
  16. package/dist/esm/lib/hexclave-app/apps/implementations/event-tracker.d.ts.map +1 -1
  17. package/dist/esm/lib/hexclave-app/apps/implementations/event-tracker.js +2 -1
  18. package/dist/esm/lib/hexclave-app/apps/implementations/event-tracker.js.map +1 -1
  19. package/dist/esm/lib/hexclave-app/apps/implementations/event-tracker.test.js +26 -0
  20. package/dist/esm/lib/hexclave-app/apps/implementations/event-tracker.test.js.map +1 -1
  21. package/dist/esm/lib/hexclave-app/apps/implementations/session-replay.d.ts +7 -1
  22. package/dist/esm/lib/hexclave-app/apps/implementations/session-replay.d.ts.map +1 -1
  23. package/dist/esm/lib/hexclave-app/apps/implementations/session-replay.js +11 -1
  24. package/dist/esm/lib/hexclave-app/apps/implementations/session-replay.js.map +1 -1
  25. package/dist/esm/lib/hexclave-app/apps/implementations/session-replay.test.js +43 -0
  26. package/dist/esm/lib/hexclave-app/apps/implementations/session-replay.test.js.map +1 -1
  27. package/dist/esm/lib/hexclave-app/apps/interfaces/admin-app.d.ts +2 -1
  28. package/dist/esm/lib/hexclave-app/apps/interfaces/admin-app.d.ts.map +1 -1
  29. package/dist/esm/lib/hexclave-app/apps/interfaces/admin-app.js.map +1 -1
  30. package/dist/esm/lib/hexclave-app/apps/interfaces/client-app.d.ts +1 -0
  31. package/dist/esm/lib/hexclave-app/apps/interfaces/client-app.d.ts.map +1 -1
  32. package/dist/esm/lib/hexclave-app/apps/interfaces/client-app.js.map +1 -1
  33. package/dist/esm/lib/hexclave-app/index.d.ts +2 -1
  34. package/dist/esm/lib/hexclave-app/plan-usage/index.d.ts +27 -0
  35. package/dist/esm/lib/hexclave-app/plan-usage/index.d.ts.map +1 -0
  36. package/dist/esm/lib/hexclave-app/plan-usage/index.js +1 -0
  37. package/dist/esm/lib/hexclave-app/projects/index.d.ts +7 -0
  38. package/dist/esm/lib/hexclave-app/projects/index.d.ts.map +1 -1
  39. package/dist/esm/lib/hexclave-app/projects/index.js.map +1 -1
  40. package/dist/esm/pushed-config-error-overlay/index.d.ts +7 -0
  41. package/dist/esm/pushed-config-error-overlay/index.d.ts.map +1 -0
  42. package/dist/esm/pushed-config-error-overlay/index.js +464 -0
  43. package/dist/esm/pushed-config-error-overlay/index.js.map +1 -0
  44. package/dist/index.d.ts +2 -1
  45. package/dist/lib/hexclave-app/apps/implementations/admin-app-impl.d.ts +6 -0
  46. package/dist/lib/hexclave-app/apps/implementations/admin-app-impl.d.ts.map +1 -1
  47. package/dist/lib/hexclave-app/apps/implementations/admin-app-impl.js +31 -1
  48. package/dist/lib/hexclave-app/apps/implementations/admin-app-impl.js.map +1 -1
  49. package/dist/lib/hexclave-app/apps/implementations/client-app-impl.d.ts +1 -0
  50. package/dist/lib/hexclave-app/apps/implementations/client-app-impl.d.ts.map +1 -1
  51. package/dist/lib/hexclave-app/apps/implementations/client-app-impl.js +18 -11
  52. package/dist/lib/hexclave-app/apps/implementations/client-app-impl.js.map +1 -1
  53. package/dist/lib/hexclave-app/apps/implementations/common.js +1 -1
  54. package/dist/lib/hexclave-app/apps/implementations/event-tracker.d.ts.map +1 -1
  55. package/dist/lib/hexclave-app/apps/implementations/event-tracker.js +1 -0
  56. package/dist/lib/hexclave-app/apps/implementations/event-tracker.js.map +1 -1
  57. package/dist/lib/hexclave-app/apps/implementations/event-tracker.test.js +26 -0
  58. package/dist/lib/hexclave-app/apps/implementations/event-tracker.test.js.map +1 -1
  59. package/dist/lib/hexclave-app/apps/implementations/session-replay.d.ts +7 -1
  60. package/dist/lib/hexclave-app/apps/implementations/session-replay.d.ts.map +1 -1
  61. package/dist/lib/hexclave-app/apps/implementations/session-replay.js +11 -0
  62. package/dist/lib/hexclave-app/apps/implementations/session-replay.js.map +1 -1
  63. package/dist/lib/hexclave-app/apps/implementations/session-replay.test.js +43 -0
  64. package/dist/lib/hexclave-app/apps/implementations/session-replay.test.js.map +1 -1
  65. package/dist/lib/hexclave-app/apps/interfaces/admin-app.d.ts +2 -1
  66. package/dist/lib/hexclave-app/apps/interfaces/admin-app.d.ts.map +1 -1
  67. package/dist/lib/hexclave-app/apps/interfaces/admin-app.js.map +1 -1
  68. package/dist/lib/hexclave-app/apps/interfaces/client-app.d.ts +1 -0
  69. package/dist/lib/hexclave-app/apps/interfaces/client-app.d.ts.map +1 -1
  70. package/dist/lib/hexclave-app/apps/interfaces/client-app.js.map +1 -1
  71. package/dist/lib/hexclave-app/index.d.ts +2 -1
  72. package/dist/lib/hexclave-app/plan-usage/index.d.ts +27 -0
  73. package/dist/lib/hexclave-app/plan-usage/index.d.ts.map +1 -0
  74. package/dist/lib/hexclave-app/plan-usage/index.js +0 -0
  75. package/dist/lib/hexclave-app/projects/index.d.ts +7 -0
  76. package/dist/lib/hexclave-app/projects/index.d.ts.map +1 -1
  77. package/dist/lib/hexclave-app/projects/index.js.map +1 -1
  78. package/dist/pushed-config-error-overlay/index.d.ts +7 -0
  79. package/dist/pushed-config-error-overlay/index.d.ts.map +1 -0
  80. package/dist/pushed-config-error-overlay/index.js +466 -0
  81. package/dist/pushed-config-error-overlay/index.js.map +1 -0
  82. package/package.json +2 -2
  83. package/src/dev-tool/dev-tool-core.ts +5 -59
  84. package/src/lib/hexclave-app/apps/implementations/admin-app-impl.ts +40 -1
  85. package/src/lib/hexclave-app/apps/implementations/client-app-impl.ts +20 -11
  86. package/src/lib/hexclave-app/apps/implementations/event-tracker.test.ts +33 -0
  87. package/src/lib/hexclave-app/apps/implementations/event-tracker.ts +6 -1
  88. package/src/lib/hexclave-app/apps/implementations/session-replay.test.ts +52 -0
  89. package/src/lib/hexclave-app/apps/implementations/session-replay.ts +20 -0
  90. package/src/lib/hexclave-app/apps/interfaces/admin-app.ts +2 -0
  91. package/src/lib/hexclave-app/apps/interfaces/client-app.ts +1 -0
  92. package/src/lib/hexclave-app/index.ts +8 -0
  93. package/src/lib/hexclave-app/plan-usage/index.ts +29 -0
  94. package/src/lib/hexclave-app/projects/index.ts +3 -0
  95. package/src/pushed-config-error-overlay/index.ts +548 -0
@@ -68,6 +68,9 @@ var _HexclaveAdminAppImplIncomplete = class extends __server_app_impl_js._Hexcla
68
68
  this._adminProjectCache = (0, __common_js.createCache)(async () => {
69
69
  return await this._interface.getProject();
70
70
  });
71
+ this._planUsageCache = (0, __common_js.createCache)(async () => {
72
+ return await this._interface.getPlanUsage();
73
+ });
71
74
  this._internalApiKeysCache = (0, __common_js.createCache)(async () => {
72
75
  return await this._interface.listInternalApiKeys();
73
76
  });
@@ -163,10 +166,13 @@ var _HexclaveAdminAppImplIncomplete = class extends __server_app_impl_js._Hexcla
163
166
  isDevelopmentEnvironment: data.is_development_environment,
164
167
  ownerTeamId: data.owner_team_id,
165
168
  onboardingStatus: data.onboarding_status,
169
+ onboardingState: data.onboarding_state ?? null,
166
170
  logoUrl: data.logo_url,
167
171
  logoFullUrl: data.logo_full_url,
168
172
  logoDarkModeUrl: data.logo_dark_mode_url,
169
173
  logoFullDarkModeUrl: data.logo_full_dark_mode_url,
174
+ pushedConfigError: data.pushed_config_error == null ? null : { message: data.pushed_config_error.message },
175
+ configWarnings: data.config_warnings.map((warning) => ({ message: warning.message })),
170
176
  config: {
171
177
  signUpEnabled: data.config.sign_up_enabled,
172
178
  credentialEnabled: data.config.credential_enabled,
@@ -278,9 +284,33 @@ var _HexclaveAdminAppImplIncomplete = class extends __server_app_impl_js._Hexcla
278
284
  isDefault: data.is_default
279
285
  };
280
286
  }
287
+ _planUsageFromCrud(data) {
288
+ return {
289
+ ownerTeamId: data.owner_team_id,
290
+ ownerTeamDisplayName: data.owner_team_display_name,
291
+ planId: data.plan_id,
292
+ planDisplayName: data.plan_display_name,
293
+ periodStart: new Date(data.period_start_millis),
294
+ periodEnd: new Date(data.period_end_millis),
295
+ nextPlanId: data.next_plan_id,
296
+ rows: data.rows.map((row) => ({
297
+ itemId: row.item_id,
298
+ displayName: row.display_name,
299
+ kind: row.kind,
300
+ used: row.used,
301
+ limit: row.limit,
302
+ remaining: row.remaining,
303
+ overage: row.overage,
304
+ isUnlimited: row.is_unlimited
305
+ }))
306
+ };
307
+ }
281
308
  async getProject() {
282
309
  return this._adminProjectFromCrud(_hexclave_shared_dist_utils_results.Result.orThrow(await this._adminProjectCache.getOrWait([], "write-only")), () => this._refreshProject());
283
310
  }
311
+ async getPlanUsage() {
312
+ return this._planUsageFromCrud(_hexclave_shared_dist_utils_results.Result.orThrow(await this._planUsageCache.getOrWait([], "write-only")));
313
+ }
284
314
  _createInternalApiKeyBaseFromCrud(data) {
285
315
  const app = this;
286
316
  return {
@@ -820,7 +850,7 @@ var _HexclaveAdminAppImplIncomplete = class extends __server_app_impl_js._Hexcla
820
850
  return await this.updateOutboxEmail(id, { cancel: true });
821
851
  }
822
852
  async getStripeAccountInfo() {
823
- return await this._interface.getStripeAccountInfo();
853
+ return _hexclave_shared_dist_utils_results.Result.orThrow(await this._stripeAccountInfoCache.getOrWait([], "write-only"));
824
854
  }
825
855
  async queryAnalytics(options) {
826
856
  return await this._interface.queryAnalytics(options);
@@ -1 +1 @@
1
- {"version":3,"file":"admin-app-impl.js","names":["_HexclaveServerAppImplIncomplete","HexclaveAdminInterface","HexclaveAssertionError","Result","hexclaveAppInternalsSymbol","KnownErrors"],"sources":["../../../../../src/lib/hexclave-app/apps/implementations/admin-app-impl.ts"],"sourcesContent":["\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY UNLESS YOU ALSO EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\nimport { KnownErrors, HexclaveAdminInterface } from \"@hexclave/shared\";\nimport { getProductionModeErrors } from \"@hexclave/shared/dist/helpers/production-mode\";\nimport { InternalApiKeyCreateCrudResponse } from \"@hexclave/shared/dist/interface/admin-interface\";\nimport type { AnalyticsClickmapOptions, AnalyticsClickmapResponse, AnalyticsClickmapTokenResponse, MetricsResponse, MetricsUserCounts, UserActivityResponse } from \"@hexclave/shared/dist/interface/admin-metrics\";\nimport { AnalyticsQueryOptions, AnalyticsQueryResponse } from \"@hexclave/shared/dist/interface/crud/analytics\";\nimport { EmailTemplateCrud } from \"@hexclave/shared/dist/interface/crud/email-templates\";\nimport { InternalApiKeysCrud } from \"@hexclave/shared/dist/interface/crud/internal-api-keys\";\nimport { ProjectsCrud } from \"@hexclave/shared/dist/interface/crud/projects\";\nimport type { AdminGetSessionReplayChunkEventsResponse } from \"@hexclave/shared/dist/interface/crud/session-replays\";\nimport type { Transaction, TransactionType } from \"@hexclave/shared/dist/interface/crud/transactions\";\nimport type { RestrictedReason } from \"@hexclave/shared/dist/schema-fields\";\nimport type { MoneyAmount } from \"@hexclave/shared/dist/utils/currency-constants\";\nimport { HexclaveAssertionError, throwErr } from \"@hexclave/shared/dist/utils/errors\";\nimport type { Json } from \"@hexclave/shared/dist/utils/json\";\nimport { pick, typedEntries, typedValues } from \"@hexclave/shared/dist/utils/objects\";\nimport { Result } from \"@hexclave/shared/dist/utils/results\";\nimport { AdminEmailOutbox, AdminSentEmail } from \"../..\";\nimport { EmailConfig, hexclaveAppInternalsSymbol } from \"../../common\";\nimport { AdminEmailTemplate } from \"../../email-templates\";\nimport { InternalApiKey, InternalApiKeyBase, InternalApiKeyBaseCrudRead, InternalApiKeyCreateOptions, InternalApiKeyFirstView, internalApiKeyCreateOptionsToCrud } from \"../../internal-api-keys\";\nimport { AdminProjectPermission, AdminProjectPermissionDefinition, AdminProjectPermissionDefinitionCreateOptions, AdminProjectPermissionDefinitionUpdateOptions, AdminTeamPermission, AdminTeamPermissionDefinition, AdminTeamPermissionDefinitionCreateOptions, AdminTeamPermissionDefinitionUpdateOptions, adminProjectPermissionDefinitionCreateOptionsToCrud, adminProjectPermissionDefinitionUpdateOptionsToCrud, adminTeamPermissionDefinitionCreateOptionsToCrud, adminTeamPermissionDefinitionUpdateOptionsToCrud } from \"../../permissions\";\nimport { AdminOwnedProject, AdminProject, AdminProjectUpdateOptions, PushConfigOptions, adminProjectUpdateOptionsToCrud } from \"../../projects\";\nimport type { AdminSessionReplay, AdminSessionReplayChunk, ListSessionReplayChunksOptions, ListSessionReplayChunksResult, ListSessionReplaysOptions, ListSessionReplaysResult, SessionReplayAllEventsResult } from \"../../session-replays\";\nimport { ManagedEmailProviderListItem, ManagedEmailProviderSetupResult, ManagedEmailProviderStatus, EmailOutboxUpdateOptions, StackAdminApp, StackAdminAppConstructorOptions } from \"../interfaces/admin-app\";\nimport { clientVersion, createCache, getDefaultExtraRequestHeaders, getDefaultProjectId, getDefaultPublishableClientKey, getDefaultSecretServerKey, getDefaultSuperSecretAdminKey, resolveApiUrls, resolveConstructorOptions } from \"./common\";\nimport { _HexclaveServerAppImplIncomplete } from \"./server-app-impl\";\n\nimport { CompleteConfig, EnvironmentConfigOverrideOverride } from \"@hexclave/shared/dist/config/schema\";\nimport { branchConfigSourceSchema } from \"@hexclave/shared/dist/schema-fields\";\nimport * as yup from \"yup\";\nimport { PushedConfigSource } from \"../../projects\";\n\ntype BranchConfigSourceApi = yup.InferType<typeof branchConfigSourceSchema>;\n/**\n * Converts a PushedConfigSource (SDK camelCase) to BranchConfigSourceApi (API snake_case).\n */\nfunction pushedConfigSourceToApi(source: PushedConfigSource): BranchConfigSourceApi {\n if (source.type === \"pushed-from-github\") {\n return {\n type: \"pushed-from-github\",\n owner: source.owner,\n repo: source.repo,\n branch: source.branch,\n commit_hash: source.commitHash,\n config_file_path: source.configFilePath,\n workflow_path: source.workflowPath,\n };\n }\n return source;\n}\n\n/**\n * Converts a BranchConfigSourceApi (API snake_case) to PushedConfigSource (SDK camelCase).\n */\nfunction apiToPushedConfigSource(source: BranchConfigSourceApi): PushedConfigSource {\n if (source.type === \"pushed-from-github\") {\n return {\n type: \"pushed-from-github\",\n owner: source.owner,\n repo: source.repo,\n branch: source.branch,\n commitHash: source.commit_hash,\n configFilePath: source.config_file_path,\n workflowPath: source.workflow_path,\n };\n }\n return source;\n}\n\nexport class _HexclaveAdminAppImplIncomplete<HasTokenStore extends boolean, ProjectId extends string> extends _HexclaveServerAppImplIncomplete<HasTokenStore, ProjectId> implements StackAdminApp<HasTokenStore, ProjectId> {\n declare protected _interface: HexclaveAdminInterface;\n\n private readonly _adminProjectCache = createCache(async () => {\n return await this._interface.getProject();\n });\n private readonly _internalApiKeysCache = createCache(async () => {\n const res = await this._interface.listInternalApiKeys();\n return res;\n });\n private readonly _adminEmailThemeCache = createCache(async ([id]: [string]) => {\n return await this._interface.getEmailTheme(id);\n });\n private readonly _adminEmailThemesCache = createCache(async () => {\n return await this._interface.listEmailThemes();\n });\n private readonly _adminEmailTemplatesCache = createCache(async () => {\n return await this._interface.listInternalEmailTemplates();\n });\n private readonly _adminEmailDraftsCache = createCache(async () => {\n return await this._interface.listInternalEmailDrafts();\n });\n private readonly _adminTeamPermissionDefinitionsCache = createCache(async () => {\n return await this._interface.listTeamPermissionDefinitions();\n });\n private readonly _adminProjectPermissionDefinitionsCache = createCache(async () => {\n return await this._interface.listProjectPermissionDefinitions();\n });\n private readonly _svixTokenCache = createCache(async () => {\n return await this._interface.getSvixToken();\n });\n // Cache key serializes filters via URLSearchParams (sorted keys) so\n // DependenciesMap (identity-keyed per array slot) treats two equal\n // filter objects as the same deterministic string entry.\n private readonly _metricsCache = createCache(async ([includeAnonymous, filtersKey]: [boolean, string]) => {\n const filters = filtersKey ? Object.fromEntries(new URLSearchParams(filtersKey)) : undefined;\n return await this._interface.getMetrics(includeAnonymous, filters);\n });\n private readonly _userActivityCache = createCache(async ([userId]: [string]) => {\n return await this._interface.getUserActivity(userId);\n });\n private readonly _metricsUserCountsCache = createCache(async () => {\n return await this._interface.getMetricsUserCounts();\n });\n private readonly _emailPreviewCache = createCache(async ([themeId, themeTsxSource, templateId, templateTsxSource]: [string | null | false | undefined, string | undefined, string | undefined, string | undefined]) => {\n return await this._interface.renderEmailPreview({ themeId, themeTsxSource, templateId, templateTsxSource });\n });\n private readonly _emailPreviewWithEditableMarkersCache = createCache(async ([themeId, themeTsxSource, templateId, templateTsxSource, editableSource]: [string | null | false | undefined, string | undefined, string | undefined, string | undefined, 'template' | 'theme' | 'both' | undefined]) => {\n return await this._interface.renderEmailPreview({ themeId, themeTsxSource, templateId, templateTsxSource, editableMarkers: true, editableSource });\n });\n private readonly _configOverridesCache = createCache(async () => {\n return await this._interface.getConfig();\n });\n private readonly _stripeAccountInfoCache = createCache(async () => {\n try {\n return await this._interface.getStripeAccountInfo();\n } catch (error: any) {\n if (error?.status === 404) {\n return null;\n }\n throw error;\n }\n });\n private readonly _transactionsCache = createCache(async ([cursor, limit, type, customerType, customerId]: [string | undefined, number | undefined, TransactionType | undefined, 'user' | 'team' | 'custom' | undefined, string | undefined]) => {\n return await this._interface.listTransactions({ cursor, limit, type, customerType, customerId });\n });\n\n constructor(options: StackAdminAppConstructorOptions<HasTokenStore, ProjectId>, extraOptions?: { uniqueIdentifier?: string, checkString?: string, interface?: HexclaveAdminInterface }) {\n const resolvedOptions = resolveConstructorOptions(options);\n\n const publishableClientKey = resolvedOptions.publishableClientKey ?? getDefaultPublishableClientKey();\n\n super(resolvedOptions, {\n ...extraOptions,\n interface: extraOptions?.interface ?? (() => {\n const apiUrls = resolveApiUrls(resolvedOptions.baseUrl);\n return new HexclaveAdminInterface({\n getBaseUrl: () => apiUrls()[0],\n getApiUrls: apiUrls,\n projectId: resolvedOptions.projectId ?? getDefaultProjectId(),\n extraRequestHeaders: resolvedOptions.extraRequestHeaders ?? getDefaultExtraRequestHeaders(),\n clientVersion,\n ...resolvedOptions.projectOwnerSession ? {\n projectOwnerSession: resolvedOptions.projectOwnerSession,\n } : {\n ...(publishableClientKey ? { publishableClientKey } : {}),\n secretServerKey: resolvedOptions.secretServerKey ?? getDefaultSecretServerKey(),\n superSecretAdminKey: resolvedOptions.superSecretAdminKey ?? getDefaultSuperSecretAdminKey(),\n },\n });\n })(),\n });\n }\n\n _adminConfigFromCrud(data: { config_string: string }): CompleteConfig {\n return JSON.parse(data.config_string);\n }\n\n _adminOwnedProjectFromCrud(data: ProjectsCrud['Admin']['Read'], onRefresh: () => Promise<void>): AdminOwnedProject {\n if (this._tokenStoreInit !== null) {\n throw new HexclaveAssertionError(\"Owned apps must always have tokenStore === null — did you not create this project with app._createOwnedApp()?\");\n }\n return {\n ...this._adminProjectFromCrud(data, onRefresh),\n app: this as StackAdminApp<false>,\n };\n }\n\n _adminProjectFromCrud(data: ProjectsCrud['Admin']['Read'], onRefresh: () => Promise<void>): AdminProject {\n if (data.id !== this.projectId) {\n throw new HexclaveAssertionError(`The project ID of the provided project JSON (${data.id}) does not match the project ID of the app (${this.projectId})!`);\n }\n\n const app = this;\n return {\n id: data.id,\n displayName: data.display_name,\n description: data.description,\n createdAt: new Date(data.created_at_millis),\n isProductionMode: data.is_production_mode,\n isDevelopmentEnvironment: data.is_development_environment,\n ownerTeamId: data.owner_team_id,\n onboardingStatus: data.onboarding_status,\n logoUrl: data.logo_url,\n logoFullUrl: data.logo_full_url,\n logoDarkModeUrl: data.logo_dark_mode_url,\n logoFullDarkModeUrl: data.logo_full_dark_mode_url,\n config: {\n signUpEnabled: data.config.sign_up_enabled,\n credentialEnabled: data.config.credential_enabled,\n magicLinkEnabled: data.config.magic_link_enabled,\n passkeyEnabled: data.config.passkey_enabled,\n clientTeamCreationEnabled: data.config.client_team_creation_enabled,\n clientUserDeletionEnabled: data.config.client_user_deletion_enabled,\n allowLocalhost: data.config.allow_localhost,\n oauthAccountMergeStrategy: data.config.oauth_account_merge_strategy,\n allowUserApiKeys: data.config.allow_user_api_keys,\n allowTeamApiKeys: data.config.allow_team_api_keys,\n oauthProviders: data.config.oauth_providers.map((p) => ((p.type === 'shared' ? {\n id: p.id,\n type: 'shared',\n } as const : {\n id: p.id,\n type: 'standard',\n clientId: p.client_id ?? throwErr(\"Client ID is missing\"),\n clientSecret: p.client_secret ?? throwErr(\"Client secret is missing\"),\n facebookConfigId: p.facebook_config_id,\n microsoftTenantId: p.microsoft_tenant_id,\n appleBundleIds: p.apple_bundle_ids,\n } as const))),\n emailConfig: data.config.email_config.type === 'shared' ? {\n type: 'shared'\n } : {\n type: 'standard',\n host: data.config.email_config.host ?? throwErr(\"Email host is missing\"),\n port: data.config.email_config.port ?? throwErr(\"Email port is missing\"),\n username: data.config.email_config.username ?? throwErr(\"Email username is missing\"),\n password: data.config.email_config.password ?? throwErr(\"Email password is missing\"),\n senderName: data.config.email_config.sender_name ?? throwErr(\"Email sender name is missing\"),\n senderEmail: data.config.email_config.sender_email ?? throwErr(\"Email sender email is missing\"),\n },\n emailTheme: data.config.email_theme,\n domains: data.config.domains.map((d) => ({\n domain: d.domain,\n handlerPath: d.handler_path,\n })),\n createTeamOnSignUp: data.config.create_team_on_sign_up,\n teamCreatorDefaultPermissions: data.config.team_creator_default_permissions,\n teamMemberDefaultPermissions: data.config.team_member_default_permissions,\n userDefaultPermissions: data.config.user_default_permissions,\n },\n async getConfig() {\n return app._adminConfigFromCrud(await app._interface.getConfig());\n },\n async updateConfig(configOverride: EnvironmentConfigOverrideOverride) {\n await app._interface.updateConfigOverride(\"environment\", configOverride);\n await app._refreshProjectConfig();\n },\n async pushConfig(config: EnvironmentConfigOverrideOverride, options: PushConfigOptions) {\n await app._interface.setConfigOverride(\"branch\", config, pushedConfigSourceToApi(options.source));\n await app._refreshProjectConfig();\n },\n async updatePushedConfig(config: EnvironmentConfigOverrideOverride) {\n await app._interface.updateConfigOverride(\"branch\", config);\n await app._refreshProjectConfig();\n },\n async getPushedConfigSource(): Promise<PushedConfigSource> {\n const apiSource = await app._interface.getPushedConfigSource();\n return apiToPushedConfigSource(apiSource);\n },\n async unlinkPushedConfigSource(): Promise<void> {\n await app._interface.unlinkPushedConfigSource();\n await app._refreshProjectConfig();\n },\n async resetConfigOverrideKeys(level: \"branch\" | \"environment\", keys: string[]): Promise<void> {\n await app._interface.resetConfigOverrideKeys(level, keys);\n await app._refreshProjectConfig();\n },\n async getConfigOverride(level: \"branch\" | \"environment\"): Promise<Record<string, unknown>> {\n const result = await app._interface.getConfigOverride(level);\n return JSON.parse(result.config_string);\n },\n async replaceConfigOverride(level: \"branch\" | \"environment\", config: Record<string, unknown>): Promise<void> {\n if (level === \"branch\") {\n const source = await app._interface.getPushedConfigSource();\n await app._interface.setConfigOverride(level, config, source);\n } else {\n await app._interface.setConfigOverride(level, config);\n }\n await app._refreshProjectConfig();\n },\n async update(update: AdminProjectUpdateOptions) {\n const { requirePublishableClientKey, ...projectUpdate } = update;\n const updateOptions = adminProjectUpdateOptionsToCrud(projectUpdate);\n const hasConfigUpdate = !!updateOptions.config\n && typedValues(updateOptions.config).some((value) => value !== undefined);\n const hasProjectUpdate = typedEntries(updateOptions).some(([key, value]) => {\n if (key === \"config\") return hasConfigUpdate;\n return value !== undefined;\n });\n\n if (hasProjectUpdate) {\n await app._interface.updateProject(updateOptions);\n await onRefresh();\n }\n\n if (requirePublishableClientKey !== undefined) {\n await app._interface.updateConfigOverride(\"project\", {\n \"project.requirePublishableClientKey\": requirePublishableClientKey,\n });\n await app._refreshProjectConfig();\n }\n },\n async delete() {\n await app._interface.deleteProject();\n },\n async getProductionModeErrors() {\n return getProductionModeErrors(data);\n },\n };\n }\n\n _adminEmailTemplateFromCrud(data: EmailTemplateCrud['Admin']['Read']): AdminEmailTemplate {\n return {\n type: data.type,\n subject: data.subject,\n content: data.content,\n isDefault: data.is_default,\n };\n }\n\n override async getProject(): Promise<AdminProject> {\n return this._adminProjectFromCrud(\n Result.orThrow(await this._adminProjectCache.getOrWait([], \"write-only\")),\n () => this._refreshProject()\n );\n }\n\n\n protected _createInternalApiKeyBaseFromCrud(data: InternalApiKeyBaseCrudRead): InternalApiKeyBase {\n const app = this;\n return {\n id: data.id,\n description: data.description,\n expiresAt: new Date(data.expires_at_millis),\n manuallyRevokedAt: data.manually_revoked_at_millis ? new Date(data.manually_revoked_at_millis) : null,\n createdAt: new Date(data.created_at_millis),\n isValid() {\n return this.whyInvalid() === null;\n },\n whyInvalid() {\n if (this.expiresAt.getTime() < Date.now()) return \"expired\";\n if (this.manuallyRevokedAt) return \"manually-revoked\";\n return null;\n },\n async revoke() {\n const res = await app._interface.revokeInternalApiKeyById(data.id);\n await app._refreshInternalApiKeys();\n return res;\n }\n };\n }\n\n protected _createInternalApiKeyFromCrud(data: InternalApiKeysCrud[\"Admin\"][\"Read\"]): InternalApiKey {\n return {\n ...this._createInternalApiKeyBaseFromCrud(data),\n publishableClientKey: data.publishable_client_key ? { lastFour: data.publishable_client_key.last_four } : null,\n secretServerKey: data.secret_server_key ? { lastFour: data.secret_server_key.last_four } : null,\n superSecretAdminKey: data.super_secret_admin_key ? { lastFour: data.super_secret_admin_key.last_four } : null,\n };\n }\n\n protected _createInternalApiKeyFirstViewFromCrud(data: InternalApiKeyCreateCrudResponse): InternalApiKeyFirstView {\n return {\n ...this._createInternalApiKeyBaseFromCrud(data),\n publishableClientKey: data.publishable_client_key,\n secretServerKey: data.secret_server_key,\n superSecretAdminKey: data.super_secret_admin_key,\n };\n }\n\n async listInternalApiKeys(): Promise<InternalApiKey[]> {\n const crud = Result.orThrow(await this._internalApiKeysCache.getOrWait([], \"write-only\"));\n return crud.map((j) => this._createInternalApiKeyFromCrud(j));\n }\n\n\n async createInternalApiKey(options: InternalApiKeyCreateOptions): Promise<InternalApiKeyFirstView> {\n const crud = await this._interface.createInternalApiKey(internalApiKeyCreateOptionsToCrud(options));\n await this._refreshInternalApiKeys();\n return this._createInternalApiKeyFirstViewFromCrud(crud);\n }\n\n\n async listEmailThemes(): Promise<{ id: string, displayName: string }[]> {\n const crud = Result.orThrow(await this._adminEmailThemesCache.getOrWait([], \"write-only\"));\n return crud.map((theme) => ({\n id: theme.id,\n displayName: theme.display_name,\n }));\n }\n\n async listEmailTemplates(): Promise<{ id: string, displayName: string, themeId?: string, tsxSource: string }[]> {\n const crud = Result.orThrow(await this._adminEmailTemplatesCache.getOrWait([], \"write-only\"));\n return crud.map((template) => ({\n id: template.id,\n displayName: template.display_name,\n themeId: template.theme_id,\n tsxSource: template.tsx_source,\n }));\n }\n\n async listEmailDrafts(): Promise<{ id: string, displayName: string, themeId: string | undefined | false, tsxSource: string, sentAt: Date | null }[]> {\n const crud = Result.orThrow(await this._adminEmailDraftsCache.getOrWait([], \"write-only\"));\n return crud.map((draft) => ({\n id: draft.id,\n displayName: draft.display_name,\n themeId: draft.theme_id,\n tsxSource: draft.tsx_source,\n sentAt: draft.sent_at_millis ? new Date(draft.sent_at_millis) : null,\n }));\n }\n\n\n async createTeamPermissionDefinition(data: AdminTeamPermissionDefinitionCreateOptions): Promise<AdminTeamPermission> {\n const crud = await this._interface.createTeamPermissionDefinition(adminTeamPermissionDefinitionCreateOptionsToCrud(data));\n await this._adminTeamPermissionDefinitionsCache.refresh([]);\n return this._serverTeamPermissionDefinitionFromCrud(crud);\n }\n\n async updateTeamPermissionDefinition(permissionId: string, data: AdminTeamPermissionDefinitionUpdateOptions) {\n await this._interface.updateTeamPermissionDefinition(permissionId, adminTeamPermissionDefinitionUpdateOptionsToCrud(data));\n await this._adminTeamPermissionDefinitionsCache.refresh([]);\n }\n\n async deleteTeamPermissionDefinition(permissionId: string): Promise<void> {\n await this._interface.deleteTeamPermissionDefinition(permissionId);\n await this._adminTeamPermissionDefinitionsCache.refresh([]);\n }\n\n async listTeamPermissionDefinitions(): Promise<AdminTeamPermissionDefinition[]> {\n const crud = Result.orThrow(await this._adminTeamPermissionDefinitionsCache.getOrWait([], \"write-only\"));\n return crud.map((p) => this._serverTeamPermissionDefinitionFromCrud(p));\n }\n\n async listTeamPermissionDefinitionsPaginated(\n options: { limit: number, cursor?: string, query?: string },\n ): Promise<{ items: AdminTeamPermissionDefinition[], nextCursor: string | null }> {\n const result = await this._interface.listTeamPermissionDefinitionsPaginated(options);\n return {\n items: result.items.map((p) => this._serverTeamPermissionDefinitionFromCrud(p)),\n nextCursor: result.nextCursor,\n };\n }\n\n\n async createProjectPermissionDefinition(data: AdminProjectPermissionDefinitionCreateOptions): Promise<AdminProjectPermission> {\n const crud = await this._interface.createProjectPermissionDefinition(adminProjectPermissionDefinitionCreateOptionsToCrud(data));\n await this._adminProjectPermissionDefinitionsCache.refresh([]);\n return this._serverProjectPermissionDefinitionFromCrud(crud);\n }\n\n async updateProjectPermissionDefinition(permissionId: string, data: AdminProjectPermissionDefinitionUpdateOptions) {\n await this._interface.updateProjectPermissionDefinition(permissionId, adminProjectPermissionDefinitionUpdateOptionsToCrud(data));\n await this._adminProjectPermissionDefinitionsCache.refresh([]);\n }\n\n async deleteProjectPermissionDefinition(permissionId: string): Promise<void> {\n await this._interface.deleteProjectPermissionDefinition(permissionId);\n await this._adminProjectPermissionDefinitionsCache.refresh([]);\n }\n\n async listProjectPermissionDefinitions(): Promise<AdminProjectPermissionDefinition[]> {\n const crud = Result.orThrow(await this._adminProjectPermissionDefinitionsCache.getOrWait([], \"write-only\"));\n return crud.map((p) => this._serverProjectPermissionDefinitionFromCrud(p));\n }\n\n\n protected override async _refreshProject() {\n await Promise.all([\n super._refreshProject(),\n this._adminProjectCache.refresh([]),\n ]);\n }\n\n protected async _refreshProjectConfig() {\n await Promise.all([\n this._configOverridesCache.refresh([]),\n this._adminProjectCache.refresh([]),\n ]);\n }\n\n protected async _refreshInternalApiKeys() {\n await this._internalApiKeysCache.refresh([]);\n }\n\n protected override async _refreshUsers() {\n await Promise.all([\n super._refreshUsers(),\n this._metricsCache.refreshWhere(() => true),\n this._metricsUserCountsCache.refresh([]),\n ]);\n }\n\n get [hexclaveAppInternalsSymbol]() {\n return {\n ...super[hexclaveAppInternalsSymbol],\n };\n }\n\n async sendTestEmail(options: {\n recipientEmail: string,\n emailConfig: EmailConfig,\n }): Promise<Result<undefined, { errorMessage: string }>> {\n let response: { success: boolean, error_message?: string };\n try {\n response = await this._interface.sendTestEmail({\n recipient_email: options.recipientEmail,\n email_config: {\n ...(pick(options.emailConfig, ['host', 'port', 'username', 'password'])),\n sender_email: options.emailConfig.senderEmail,\n sender_name: options.emailConfig.senderName,\n },\n });\n } catch (error) {\n // Translate the quota-exhaustion KnownError into the existing\n // Result.error shape so SDK/dashboard callers don't need to branch on\n // exceptions. The backend throws `ItemQuantityInsufficientAmount`\n // (consistent with every other limit-rejection endpoint), but this\n // method's historical contract has always been a `Result`.\n if (error instanceof KnownErrors.ItemQuantityInsufficientAmount) {\n return Result.error({\n errorMessage: \"Monthly email sending limit exceeded for your plan. Please upgrade your plan or wait until next month before sending more test emails.\",\n });\n }\n throw error;\n }\n\n if (response.success) {\n return Result.ok(undefined);\n } else {\n return Result.error({ errorMessage: response.error_message ?? throwErr(\"Email test error not specified\") });\n }\n }\n\n async sendTestWebhook(options: { endpointId: string }): Promise<Result<undefined, { errorMessage: string }>> {\n const response = await this._interface.sendTestWebhook({\n endpoint_id: options.endpointId,\n });\n\n if (response.success) {\n return Result.ok(undefined);\n } else {\n return Result.error({ errorMessage: response.error_message ?? throwErr(\"Webhook test error not specified\") });\n }\n }\n\n async listSentEmails(): Promise<AdminSentEmail[]> {\n const response = await this._interface.listSentEmails();\n return response.items.map((email) => ({\n id: email.id,\n to: email.to ?? [],\n subject: email.subject,\n recipient: email.to?.[0] ?? \"\",\n sentAt: new Date(email.sent_at_millis),\n error: email.error,\n }));\n }\n\n async setupManagedEmailProvider(options: { subdomain: string, senderLocalPart: string }): Promise<ManagedEmailProviderSetupResult> {\n const response = await this._interface.setupManagedEmailProvider({\n subdomain: options.subdomain,\n sender_local_part: options.senderLocalPart,\n });\n return {\n domainId: response.domain_id,\n subdomain: response.subdomain,\n senderLocalPart: response.sender_local_part,\n nameServerRecords: response.name_server_records,\n status: response.status,\n };\n }\n\n async checkManagedEmailStatus(options: { domainId: string, subdomain: string, senderLocalPart: string }): Promise<ManagedEmailProviderStatus> {\n const response = await this._interface.checkManagedEmailStatus({\n domain_id: options.domainId,\n subdomain: options.subdomain,\n sender_local_part: options.senderLocalPart,\n });\n return {\n status: response.status,\n };\n }\n\n async listManagedEmailDomains(): Promise<ManagedEmailProviderListItem[]> {\n const response = await this._interface.listManagedEmailDomains();\n return response.items.map((item) => ({\n domainId: item.domain_id,\n subdomain: item.subdomain,\n senderLocalPart: item.sender_local_part,\n status: item.status,\n nameServerRecords: item.name_server_records,\n }));\n }\n\n async applyManagedEmailProvider(options: { domainId: string }): Promise<{ status: \"applied\" }> {\n const result = await this._interface.applyManagedEmailProvider({\n domain_id: options.domainId,\n });\n await this._refreshProjectConfig();\n return result;\n }\n\n async deleteManagedEmailDomain(options: { resendDomainId: string }): Promise<{ status: \"deleted\" }> {\n return await this._interface.deleteManagedEmailDomain({\n resend_domain_id: options.resendDomainId,\n });\n }\n\n async sendSignInInvitationEmail(email: string, callbackUrl: string): Promise<void> {\n await this._interface.sendSignInInvitationEmail(email, callbackUrl);\n }\n\n async createEmailTemplate(displayName: string): Promise<{ id: string }> {\n const result = await this._interface.createEmailTemplate(displayName);\n await this._adminEmailTemplatesCache.refresh([]);\n\n return result;\n }\n\n async deleteEmailTemplate(id: string): Promise<void> {\n await this._interface.deleteEmailTemplate(id);\n await this._adminEmailTemplatesCache.refresh([]);\n }\n\n async createEmailDraft(options: { displayName: string, themeId?: string | false, tsxSource?: string }): Promise<{ id: string }> {\n const result = await this._interface.createEmailDraft({\n display_name: options.displayName,\n theme_id: options.themeId,\n tsx_source: options.tsxSource,\n });\n await this._adminEmailDraftsCache.refresh([]);\n return result;\n }\n\n async updateEmailDraft(id: string, data: { displayName?: string, themeId?: string | undefined | false, tsxSource?: string }): Promise<void> {\n await this._interface.updateEmailDraft(id, {\n display_name: data.displayName,\n theme_id: data.themeId,\n tsx_source: data.tsxSource,\n });\n await this._adminEmailDraftsCache.refresh([]);\n }\n\n async deleteEmailDraft(id: string): Promise<void> {\n await this._interface.deleteEmailDraft(id);\n const current = this._adminEmailDraftsCache.getIfCached([]);\n if (current.status === \"ok\" && current.data.status === \"ok\") {\n this._adminEmailDraftsCache.forceSetCachedValue([], Result.ok(current.data.data.filter((d) => d.id !== id)));\n }\n await this._adminEmailDraftsCache.refresh([]);\n }\n\n async refreshEmailDrafts(): Promise<void> {\n await this._adminEmailDraftsCache.refresh([]);\n }\n\n async saveChatMessage(threadId: string, message: any): Promise<void> {\n await this._interface.saveChatMessage(threadId, message);\n }\n\n async listChatMessages(threadId: string): Promise<{ messages: Array<any> }> {\n return await this._interface.listChatMessages(threadId);\n }\n\n async rewriteTemplateSourceWithAI(templateTsxSource: string): Promise<{ tsxSource: string }> {\n const result = await this._interface.rewriteTemplateSourceWithAI(templateTsxSource);\n return { tsxSource: result.tsx_source };\n }\n\n async createEmailTheme(displayName: string): Promise<{ id: string }> {\n const result = await this._interface.createEmailTheme(displayName);\n await this._adminEmailThemesCache.refresh([]);\n return result;\n }\n\n async getEmailPreview(options: { themeId?: string | null | false, themeTsxSource?: string, templateId?: string, templateTsxSource?: string }): Promise<string> {\n return (await this._interface.renderEmailPreview(options)).html;\n }\n async getEmailPreviewWithEditableMarkers(options: { themeId?: string | null | false, themeTsxSource?: string, templateId?: string, templateTsxSource?: string, editableSource?: 'template' | 'theme' | 'both' }): Promise<{ html: string, editableRegions?: Record<string, unknown> }> {\n const result = await this._interface.renderEmailPreview({ ...options, editableMarkers: true, editableSource: options.editableSource });\n return { html: result.html, editableRegions: result.editable_regions };\n }\n async updateEmailTheme(id: string, tsxSource: string): Promise<void> {\n await this._interface.updateEmailTheme(id, tsxSource);\n await this._adminEmailThemesCache.refresh([]);\n await this._adminEmailThemeCache.invalidate([id]);\n }\n\n async deleteEmailTheme(id: string): Promise<void> {\n await this._interface.deleteEmailTheme(id);\n await this._adminEmailThemesCache.refresh([]);\n await this._adminEmailThemeCache.invalidate([id]);\n }\n\n async updateEmailTemplate(id: string, tsxSource: string, themeId: string | null | false): Promise<{ renderedHtml: string }> {\n const result = await this._interface.updateEmailTemplate(id, tsxSource, themeId);\n await this._adminEmailTemplatesCache.refresh([]);\n return { renderedHtml: result.rendered_html };\n }\n\n async setupPayments(): Promise<{ url: string }> {\n const result = await this._interface.setupPayments();\n await this._stripeAccountInfoCache.refresh([]);\n return result;\n }\n\n async createStripeWidgetAccountSession(): Promise<{ client_secret: string }> {\n return await this._interface.createStripeWidgetAccountSession();\n }\n\n async getPaymentMethodConfigs(): Promise<{ configId: string, methods: Array<{ id: string, name: string, enabled: boolean, available: boolean, overridable: boolean }> } | null> {\n return await this._interface.getPaymentMethodConfigs();\n }\n\n async updatePaymentMethodConfigs(configId: string, updates: Record<string, 'on' | 'off'>): Promise<void> {\n await this._interface.updatePaymentMethodConfigs(configId, updates);\n }\n\n async createItemQuantityChange(options: (\n { userId: string, itemId: string, quantity: number, expiresAt?: string, description?: string } |\n { teamId: string, itemId: string, quantity: number, expiresAt?: string, description?: string } |\n { customCustomerId: string, itemId: string, quantity: number, expiresAt?: string, description?: string }\n )): Promise<void> {\n await this._interface.updateItemQuantity(\n { itemId: options.itemId, ...(\"userId\" in options ? { userId: options.userId } : (\"teamId\" in options ? { teamId: options.teamId } : { customCustomerId: options.customCustomerId })) },\n {\n delta: options.quantity,\n expires_at: options.expiresAt,\n description: options.description,\n allow_negative: true,\n }\n );\n }\n\n async refundTransaction(options: {\n type: \"subscription\" | \"one-time-purchase\",\n id: string,\n invoiceId?: string,\n amountUsd: MoneyAmount,\n endAction?: \"now\" | \"at-period-end\",\n }): Promise<{ refundTransactionId: string }> {\n const result = await this._interface.refundTransaction({\n type: options.type,\n id: options.id,\n invoiceId: options.invoiceId,\n amountUsd: options.amountUsd,\n endAction: options.endAction,\n });\n await this._transactionsCache.invalidateWhere(() => true);\n return { refundTransactionId: result.refundTransactionId };\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 crud = Result.orThrow(await this._transactionsCache.getOrWait([params.cursor, params.limit, params.type, params.customerType, params.customerId] as const, \"write-only\"));\n return crud;\n }\n\n // Email Outbox methods\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Complex discriminated union conversion from API response\n private _emailOutboxCrudToAdmin(crud: any): AdminEmailOutbox {\n const recipient = crud.to;\n let to: AdminEmailOutbox[\"to\"];\n if (recipient.type === \"user-primary-email\") {\n to = { type: \"user-primary-email\", userId: recipient.user_id };\n } else if (recipient.type === \"user-custom-emails\") {\n to = { type: \"user-custom-emails\", userId: recipient.user_id, emails: recipient.emails };\n } else {\n to = { type: \"custom-emails\", emails: recipient.emails };\n }\n\n // Base fields present on all emails\n const base = {\n id: crud.id as string,\n createdAt: new Date(crud.created_at_millis),\n updatedAt: new Date(crud.updated_at_millis),\n tsxSource: crud.tsx_source as string,\n themeId: (crud.theme_id as string | null) ?? null,\n to,\n scheduledAt: new Date(crud.scheduled_at_millis),\n // Source tracking for grouping emails by template/draft\n createdWith: crud.created_with as \"draft\" | \"programmatic-call\",\n emailDraftId: crud.email_draft_id as string | null,\n emailProgrammaticCallTemplateId: crud.email_programmatic_call_template_id as string | null,\n variables: (crud.variables ?? {}) as Record<string, Json>,\n isPaused: false as const,\n hasRendered: false as const,\n hasDelivered: false as const,\n // Retry tracking fields\n sendRetries: crud.send_retries as number,\n nextSendRetryAt: crud.next_send_retry_at_millis ? new Date(crud.next_send_retry_at_millis) : null,\n sendAttemptErrors: crud.send_attempt_errors ? (crud.send_attempt_errors as Array<{\n attempt_number: number,\n timestamp: string,\n external_message: string,\n external_details: Record<string, unknown>,\n internal_message: string,\n internal_details: Record<string, unknown>,\n }>).map((e) => ({\n attemptNumber: e.attempt_number,\n timestamp: e.timestamp,\n externalMessage: e.external_message,\n externalDetails: e.external_details,\n internalMessage: e.internal_message,\n internalDetails: e.internal_details,\n })) : null,\n };\n\n // Rendered fields (available after rendering completes successfully)\n const rendered = crud.has_rendered ? {\n ...base,\n startedRenderingAt: new Date(crud.started_rendering_at_millis),\n renderedAt: new Date(crud.rendered_at_millis),\n subject: crud.subject as string,\n html: crud.html as string | null,\n text: crud.text as string | null,\n isTransactional: crud.is_transactional as boolean,\n isHighPriority: crud.is_high_priority as boolean,\n notificationCategoryId: crud.notification_category_id as string | null,\n hasRendered: true as const,\n } : null;\n\n // Started sending fields\n const startedSending = rendered && crud.started_sending_at_millis ? {\n ...rendered,\n startedSendingAt: new Date(crud.started_sending_at_millis),\n } : null;\n\n // Finished delivering fields\n const finishedDelivering = startedSending && crud.has_delivered ? {\n ...startedSending,\n deliveredAt: new Date(crud.delivered_at_millis),\n hasDelivered: true as const,\n } : null;\n\n // Use type assertion at the end because TypeScript has trouble with\n // spread + override patterns on discriminated unions with const literal types\n const result = (() => {\n switch (crud.status) {\n case \"paused\": {\n return {\n ...base,\n status: \"paused\" as const,\n simpleStatus: \"in-progress\" as const,\n isPaused: true as const,\n };\n }\n case \"preparing\": {\n return {\n ...base,\n status: \"preparing\" as const,\n simpleStatus: \"in-progress\" as const,\n };\n }\n case \"rendering\": {\n return {\n ...base,\n status: \"rendering\" as const,\n simpleStatus: \"in-progress\" as const,\n startedRenderingAt: new Date(crud.started_rendering_at_millis),\n };\n }\n case \"render-error\": {\n return {\n ...base,\n status: \"render-error\" as const,\n simpleStatus: \"error\" as const,\n startedRenderingAt: new Date(crud.started_rendering_at_millis),\n renderedAt: new Date(crud.rendered_at_millis),\n renderError: crud.render_error,\n };\n }\n case \"scheduled\": {\n return {\n ...rendered!,\n status: \"scheduled\" as const,\n simpleStatus: \"in-progress\" as const,\n };\n }\n case \"queued\": {\n return {\n ...rendered!,\n status: \"queued\" as const,\n simpleStatus: \"in-progress\" as const,\n };\n }\n case \"sending\": {\n return {\n ...startedSending!,\n status: \"sending\" as const,\n simpleStatus: \"in-progress\" as const,\n };\n }\n case \"server-error\": {\n return {\n ...startedSending!,\n status: \"server-error\" as const,\n simpleStatus: \"error\" as const,\n errorAt: new Date(crud.error_at_millis),\n serverError: crud.server_error,\n };\n }\n case \"skipped\": {\n return {\n ...base,\n status: \"skipped\" as const,\n simpleStatus: \"ok\" as const,\n skippedAt: new Date(crud.skipped_at_millis),\n skippedReason: crud.skipped_reason,\n skippedDetails: crud.skipped_details ?? {},\n hasRendered: crud.has_rendered as boolean,\n // Optional fields\n startedRenderingAt: crud.started_rendering_at_millis ? new Date(crud.started_rendering_at_millis) : undefined,\n renderedAt: crud.rendered_at_millis ? new Date(crud.rendered_at_millis) : undefined,\n subject: crud.subject,\n html: crud.html,\n text: crud.text,\n isTransactional: crud.is_transactional,\n isHighPriority: crud.is_high_priority,\n notificationCategoryId: crud.notification_category_id,\n startedSendingAt: crud.started_sending_at_millis ? new Date(crud.started_sending_at_millis) : undefined,\n };\n }\n case \"bounced\": {\n return {\n ...startedSending!,\n status: \"bounced\" as const,\n simpleStatus: \"error\" as const,\n bouncedAt: new Date(crud.bounced_at_millis),\n };\n }\n case \"delivery-delayed\": {\n return {\n ...startedSending!,\n status: \"delivery-delayed\" as const,\n simpleStatus: \"ok\" as const,\n deliveryDelayedAt: new Date(crud.delivery_delayed_at_millis),\n };\n }\n case \"sent\": {\n return {\n ...finishedDelivering!,\n status: \"sent\" as const,\n simpleStatus: \"ok\" as const,\n canHaveDeliveryInfo: crud.can_have_delivery_info,\n };\n }\n case \"opened\": {\n return {\n ...finishedDelivering!,\n status: \"opened\" as const,\n simpleStatus: \"ok\" as const,\n openedAt: new Date(crud.opened_at_millis),\n canHaveDeliveryInfo: true as const,\n };\n }\n case \"clicked\": {\n return {\n ...finishedDelivering!,\n status: \"clicked\" as const,\n simpleStatus: \"ok\" as const,\n clickedAt: new Date(crud.clicked_at_millis),\n canHaveDeliveryInfo: true as const,\n };\n }\n case \"marked-as-spam\": {\n return {\n ...finishedDelivering!,\n status: \"marked-as-spam\" as const,\n simpleStatus: \"ok\" as const,\n markedAsSpamAt: new Date(crud.marked_as_spam_at_millis),\n canHaveDeliveryInfo: true as const,\n };\n }\n default: {\n throw new HexclaveAssertionError(`Unknown email outbox status: ${crud.status}`, { status: crud.status });\n }\n }\n })();\n // The type system has difficulty with spread + override patterns on discriminated unions,\n // so we use a type assertion here. The switch statement above ensures we return the correct shape.\n return result as AdminEmailOutbox;\n }\n\n async listOutboxEmails(options?: { status?: string, simpleStatus?: string, userId?: string, limit?: number, cursor?: string }): Promise<{ items: AdminEmailOutbox[], nextCursor: string | null }> {\n const response = await this._interface.listOutboxEmails({\n status: options?.status,\n simple_status: options?.simpleStatus,\n user_id: options?.userId,\n limit: options?.limit,\n cursor: options?.cursor,\n });\n return {\n items: response.items.map((item) => this._emailOutboxCrudToAdmin(item)),\n nextCursor: response.pagination?.next_cursor ?? null,\n };\n }\n\n async getOutboxEmail(id: string): Promise<AdminEmailOutbox> {\n const response = await this._interface.getOutboxEmail(id);\n return this._emailOutboxCrudToAdmin(response);\n }\n\n async updateOutboxEmail(id: string, options: EmailOutboxUpdateOptions): Promise<AdminEmailOutbox> {\n const response = await this._interface.updateOutboxEmail(id, {\n is_paused: options.isPaused,\n scheduled_at_millis: options.scheduledAtMillis,\n cancel: options.cancel,\n tsx_source: options.tsxSource,\n theme_id: options.themeId,\n });\n return this._emailOutboxCrudToAdmin(response);\n }\n\n async pauseOutboxEmail(id: string): Promise<AdminEmailOutbox> {\n return await this.updateOutboxEmail(id, { isPaused: true });\n }\n\n async unpauseOutboxEmail(id: string): Promise<AdminEmailOutbox> {\n return await this.updateOutboxEmail(id, { isPaused: false });\n }\n\n async cancelOutboxEmail(id: string): Promise<AdminEmailOutbox> {\n return await this.updateOutboxEmail(id, { cancel: true });\n }\n\n\n async getStripeAccountInfo(): Promise<null | { account_id: string, charges_enabled: boolean, details_submitted: boolean, payouts_enabled: boolean }> {\n return await this._interface.getStripeAccountInfo();\n }\n\n\n async queryAnalytics(options: AnalyticsQueryOptions): Promise<AnalyticsQueryResponse> {\n return await this._interface.queryAnalytics(options);\n }\n\n async getAnalyticsClickmap(options: AnalyticsClickmapOptions): Promise<AnalyticsClickmapResponse> {\n return await this._interface.getAnalyticsClickmap({\n kind: options.kind,\n member_user_ids: options.memberUserIds,\n route_path: options.routePath,\n route_regex: options.routeRegex,\n url_pattern: options.urlPattern,\n user_id: options.userId,\n replay_id: options.replayId,\n device: options.device,\n viewport_width_min: options.viewportWidthMin,\n viewport_width_max: options.viewportWidthMax,\n sampling: options.sampling,\n since: options.since,\n until: options.until,\n });\n }\n\n async createAnalyticsClickmapToken(options: { origin: string }): Promise<AnalyticsClickmapTokenResponse> {\n return await this._interface.createAnalyticsClickmapToken(options);\n }\n\n async listSessionReplays(options?: ListSessionReplaysOptions): Promise<ListSessionReplaysResult> {\n const response = await this._interface.listSessionReplays({\n cursor: options?.cursor,\n limit: options?.limit,\n user_ids: options?.userIds,\n team_ids: options?.teamIds,\n duration_ms_min: options?.durationMsMin,\n duration_ms_max: options?.durationMsMax,\n last_event_at_from_millis: options?.lastEventAtFromMillis,\n last_event_at_to_millis: options?.lastEventAtToMillis,\n click_count_min: options?.clickCountMin,\n });\n\n const items: AdminSessionReplay[] = response.items.map((r) => ({\n id: r.id,\n projectUser: {\n id: r.project_user.id,\n displayName: r.project_user.display_name,\n primaryEmail: r.project_user.primary_email,\n },\n startedAt: new Date(r.started_at_millis),\n lastEventAt: new Date(r.last_event_at_millis),\n chunkCount: r.chunk_count,\n eventCount: r.event_count,\n }));\n\n return {\n items,\n nextCursor: response.pagination.next_cursor,\n };\n }\n\n async getSessionReplay(sessionReplayId: string): Promise<AdminSessionReplay> {\n const response = await this._interface.getSessionReplay(sessionReplayId);\n return {\n id: response.id,\n projectUser: {\n id: response.project_user.id,\n displayName: response.project_user.display_name,\n primaryEmail: response.project_user.primary_email,\n },\n startedAt: new Date(response.started_at_millis),\n lastEventAt: new Date(response.last_event_at_millis),\n chunkCount: response.chunk_count,\n eventCount: response.event_count,\n };\n }\n\n async listSessionReplayChunks(sessionReplayId: string, options?: ListSessionReplayChunksOptions): Promise<ListSessionReplayChunksResult> {\n const response = await this._interface.listSessionReplayChunks(sessionReplayId, {\n cursor: options?.cursor,\n limit: options?.limit,\n });\n\n const items: AdminSessionReplayChunk[] = response.items.map((c) => ({\n id: c.id,\n batchId: c.batch_id,\n sessionReplaySegmentId: c.session_replay_segment_id,\n browserSessionId: c.browser_session_id,\n eventCount: c.event_count,\n byteLength: c.byte_length,\n firstEventAt: new Date(c.first_event_at_millis),\n lastEventAt: new Date(c.last_event_at_millis),\n createdAt: new Date(c.created_at_millis),\n }));\n\n return {\n items,\n nextCursor: response.pagination.next_cursor,\n };\n }\n\n async getSessionReplayChunkEvents(sessionReplayId: string, chunkId: string): Promise<AdminGetSessionReplayChunkEventsResponse> {\n return await this._interface.getSessionReplayChunkEvents(sessionReplayId, chunkId);\n }\n\n async getSessionReplayEvents(sessionReplayId: string, options?: { offset?: number, limit?: number }): Promise<SessionReplayAllEventsResult> {\n const response = await this._interface.getSessionReplayEvents(sessionReplayId, options);\n return {\n chunks: response.chunks.map((c) => ({\n id: c.id,\n batchId: c.batch_id,\n sessionReplaySegmentId: c.session_replay_segment_id,\n eventCount: c.event_count,\n byteLength: c.byte_length,\n firstEventAt: new Date(c.first_event_at_millis),\n lastEventAt: new Date(c.last_event_at_millis),\n createdAt: new Date(c.created_at_millis),\n })),\n chunkEvents: response.chunk_events.map((ce) => ({\n chunkId: ce.chunk_id,\n events: ce.events,\n })),\n };\n }\n\n async previewAffectedUsersByOnboardingChange(\n onboarding: { requireEmailVerification?: boolean },\n limit?: number,\n ): Promise<{\n affectedUsers: Array<{\n id: string,\n displayName: string | null,\n primaryEmail: string | null,\n restrictedReason: RestrictedReason,\n }>,\n totalAffectedCount: number,\n }> {\n const result = await this._interface.previewAffectedUsersByOnboardingChange(\n { require_email_verification: onboarding.requireEmailVerification },\n limit,\n );\n return {\n affectedUsers: result.affected_users.map(u => ({\n id: u.id,\n displayName: u.display_name,\n primaryEmail: u.primary_email,\n restrictedReason: u.restricted_reason as RestrictedReason,\n })),\n totalAffectedCount: result.total_affected_count,\n };\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"admin-app-impl.js","names":["_HexclaveServerAppImplIncomplete","HexclaveAdminInterface","HexclaveAssertionError","Result","hexclaveAppInternalsSymbol","KnownErrors"],"sources":["../../../../../src/lib/hexclave-app/apps/implementations/admin-app-impl.ts"],"sourcesContent":["\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY UNLESS YOU ALSO EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\nimport { KnownErrors, HexclaveAdminInterface } from \"@hexclave/shared\";\nimport { getProductionModeErrors } from \"@hexclave/shared/dist/helpers/production-mode\";\nimport { InternalApiKeyCreateCrudResponse } from \"@hexclave/shared/dist/interface/admin-interface\";\nimport type { AnalyticsClickmapOptions, AnalyticsClickmapResponse, AnalyticsClickmapTokenResponse, MetricsResponse, MetricsUserCounts, UserActivityResponse } from \"@hexclave/shared/dist/interface/admin-metrics\";\nimport { AnalyticsQueryOptions, AnalyticsQueryResponse } from \"@hexclave/shared/dist/interface/crud/analytics\";\nimport { EmailTemplateCrud } from \"@hexclave/shared/dist/interface/crud/email-templates\";\nimport { InternalApiKeysCrud } from \"@hexclave/shared/dist/interface/crud/internal-api-keys\";\nimport { ProjectsCrud } from \"@hexclave/shared/dist/interface/crud/projects\";\nimport type { AdminGetSessionReplayChunkEventsResponse } from \"@hexclave/shared/dist/interface/crud/session-replays\";\nimport type { Transaction, TransactionType } from \"@hexclave/shared/dist/interface/crud/transactions\";\nimport type { RestrictedReason } from \"@hexclave/shared/dist/schema-fields\";\nimport type { MoneyAmount } from \"@hexclave/shared/dist/utils/currency-constants\";\nimport { HexclaveAssertionError, throwErr } from \"@hexclave/shared/dist/utils/errors\";\nimport type { Json } from \"@hexclave/shared/dist/utils/json\";\nimport { pick, typedEntries, typedValues } from \"@hexclave/shared/dist/utils/objects\";\nimport { Result } from \"@hexclave/shared/dist/utils/results\";\nimport { AdminEmailOutbox, AdminSentEmail } from \"../..\";\nimport { EmailConfig, hexclaveAppInternalsSymbol } from \"../../common\";\nimport { AdminEmailTemplate } from \"../../email-templates\";\nimport { InternalApiKey, InternalApiKeyBase, InternalApiKeyBaseCrudRead, InternalApiKeyCreateOptions, InternalApiKeyFirstView, internalApiKeyCreateOptionsToCrud } from \"../../internal-api-keys\";\nimport { AdminProjectPermission, AdminProjectPermissionDefinition, AdminProjectPermissionDefinitionCreateOptions, AdminProjectPermissionDefinitionUpdateOptions, AdminTeamPermission, AdminTeamPermissionDefinition, AdminTeamPermissionDefinitionCreateOptions, AdminTeamPermissionDefinitionUpdateOptions, adminProjectPermissionDefinitionCreateOptionsToCrud, adminProjectPermissionDefinitionUpdateOptionsToCrud, adminTeamPermissionDefinitionCreateOptionsToCrud, adminTeamPermissionDefinitionUpdateOptionsToCrud } from \"../../permissions\";\nimport type { PlanUsage } from \"../../plan-usage\";\nimport { AdminOwnedProject, AdminProject, AdminProjectUpdateOptions, PushConfigOptions, adminProjectUpdateOptionsToCrud } from \"../../projects\";\nimport type { AdminSessionReplay, AdminSessionReplayChunk, ListSessionReplayChunksOptions, ListSessionReplayChunksResult, ListSessionReplaysOptions, ListSessionReplaysResult, SessionReplayAllEventsResult } from \"../../session-replays\";\nimport { ManagedEmailProviderListItem, ManagedEmailProviderSetupResult, ManagedEmailProviderStatus, EmailOutboxUpdateOptions, StackAdminApp, StackAdminAppConstructorOptions } from \"../interfaces/admin-app\";\nimport { clientVersion, createCache, getDefaultExtraRequestHeaders, getDefaultProjectId, getDefaultPublishableClientKey, getDefaultSecretServerKey, getDefaultSuperSecretAdminKey, resolveApiUrls, resolveConstructorOptions } from \"./common\";\nimport { _HexclaveServerAppImplIncomplete } from \"./server-app-impl\";\n\nimport { CompleteConfig, EnvironmentConfigOverrideOverride } from \"@hexclave/shared/dist/config/schema\";\nimport { branchConfigSourceSchema } from \"@hexclave/shared/dist/schema-fields\";\nimport * as yup from \"yup\";\nimport { PushedConfigSource } from \"../../projects\";\n\ntype BranchConfigSourceApi = yup.InferType<typeof branchConfigSourceSchema>;\ntype PlanUsageResponse = Awaited<ReturnType<HexclaveAdminInterface[\"getPlanUsage\"]>>;\n/**\n * Converts a PushedConfigSource (SDK camelCase) to BranchConfigSourceApi (API snake_case).\n */\nfunction pushedConfigSourceToApi(source: PushedConfigSource): BranchConfigSourceApi {\n if (source.type === \"pushed-from-github\") {\n return {\n type: \"pushed-from-github\",\n owner: source.owner,\n repo: source.repo,\n branch: source.branch,\n commit_hash: source.commitHash,\n config_file_path: source.configFilePath,\n workflow_path: source.workflowPath,\n };\n }\n return source;\n}\n\n/**\n * Converts a BranchConfigSourceApi (API snake_case) to PushedConfigSource (SDK camelCase).\n */\nfunction apiToPushedConfigSource(source: BranchConfigSourceApi): PushedConfigSource {\n if (source.type === \"pushed-from-github\") {\n return {\n type: \"pushed-from-github\",\n owner: source.owner,\n repo: source.repo,\n branch: source.branch,\n commitHash: source.commit_hash,\n configFilePath: source.config_file_path,\n workflowPath: source.workflow_path,\n };\n }\n return source;\n}\n\nexport class _HexclaveAdminAppImplIncomplete<HasTokenStore extends boolean, ProjectId extends string> extends _HexclaveServerAppImplIncomplete<HasTokenStore, ProjectId> implements StackAdminApp<HasTokenStore, ProjectId> {\n declare protected _interface: HexclaveAdminInterface;\n\n private readonly _adminProjectCache = createCache(async () => {\n return await this._interface.getProject();\n });\n private readonly _planUsageCache = createCache(async () => {\n return await this._interface.getPlanUsage();\n });\n private readonly _internalApiKeysCache = createCache(async () => {\n const res = await this._interface.listInternalApiKeys();\n return res;\n });\n private readonly _adminEmailThemeCache = createCache(async ([id]: [string]) => {\n return await this._interface.getEmailTheme(id);\n });\n private readonly _adminEmailThemesCache = createCache(async () => {\n return await this._interface.listEmailThemes();\n });\n private readonly _adminEmailTemplatesCache = createCache(async () => {\n return await this._interface.listInternalEmailTemplates();\n });\n private readonly _adminEmailDraftsCache = createCache(async () => {\n return await this._interface.listInternalEmailDrafts();\n });\n private readonly _adminTeamPermissionDefinitionsCache = createCache(async () => {\n return await this._interface.listTeamPermissionDefinitions();\n });\n private readonly _adminProjectPermissionDefinitionsCache = createCache(async () => {\n return await this._interface.listProjectPermissionDefinitions();\n });\n private readonly _svixTokenCache = createCache(async () => {\n return await this._interface.getSvixToken();\n });\n // Cache key serializes filters via URLSearchParams (sorted keys) so\n // DependenciesMap (identity-keyed per array slot) treats two equal\n // filter objects as the same deterministic string entry.\n private readonly _metricsCache = createCache(async ([includeAnonymous, filtersKey]: [boolean, string]) => {\n const filters = filtersKey ? Object.fromEntries(new URLSearchParams(filtersKey)) : undefined;\n return await this._interface.getMetrics(includeAnonymous, filters);\n });\n private readonly _userActivityCache = createCache(async ([userId]: [string]) => {\n return await this._interface.getUserActivity(userId);\n });\n private readonly _metricsUserCountsCache = createCache(async () => {\n return await this._interface.getMetricsUserCounts();\n });\n private readonly _emailPreviewCache = createCache(async ([themeId, themeTsxSource, templateId, templateTsxSource]: [string | null | false | undefined, string | undefined, string | undefined, string | undefined]) => {\n return await this._interface.renderEmailPreview({ themeId, themeTsxSource, templateId, templateTsxSource });\n });\n private readonly _emailPreviewWithEditableMarkersCache = createCache(async ([themeId, themeTsxSource, templateId, templateTsxSource, editableSource]: [string | null | false | undefined, string | undefined, string | undefined, string | undefined, 'template' | 'theme' | 'both' | undefined]) => {\n return await this._interface.renderEmailPreview({ themeId, themeTsxSource, templateId, templateTsxSource, editableMarkers: true, editableSource });\n });\n private readonly _configOverridesCache = createCache(async () => {\n return await this._interface.getConfig();\n });\n private readonly _stripeAccountInfoCache = createCache(async () => {\n try {\n return await this._interface.getStripeAccountInfo();\n } catch (error: any) {\n if (error?.status === 404) {\n return null;\n }\n throw error;\n }\n });\n private readonly _transactionsCache = createCache(async ([cursor, limit, type, customerType, customerId]: [string | undefined, number | undefined, TransactionType | undefined, 'user' | 'team' | 'custom' | undefined, string | undefined]) => {\n return await this._interface.listTransactions({ cursor, limit, type, customerType, customerId });\n });\n\n constructor(options: StackAdminAppConstructorOptions<HasTokenStore, ProjectId>, extraOptions?: { uniqueIdentifier?: string, checkString?: string, interface?: HexclaveAdminInterface }) {\n const resolvedOptions = resolveConstructorOptions(options);\n\n const publishableClientKey = resolvedOptions.publishableClientKey ?? getDefaultPublishableClientKey();\n\n super(resolvedOptions, {\n ...extraOptions,\n interface: extraOptions?.interface ?? (() => {\n const apiUrls = resolveApiUrls(resolvedOptions.baseUrl);\n return new HexclaveAdminInterface({\n getBaseUrl: () => apiUrls()[0],\n getApiUrls: apiUrls,\n projectId: resolvedOptions.projectId ?? getDefaultProjectId(),\n extraRequestHeaders: resolvedOptions.extraRequestHeaders ?? getDefaultExtraRequestHeaders(),\n clientVersion,\n ...resolvedOptions.projectOwnerSession ? {\n projectOwnerSession: resolvedOptions.projectOwnerSession,\n } : {\n ...(publishableClientKey ? { publishableClientKey } : {}),\n secretServerKey: resolvedOptions.secretServerKey ?? getDefaultSecretServerKey(),\n superSecretAdminKey: resolvedOptions.superSecretAdminKey ?? getDefaultSuperSecretAdminKey(),\n },\n });\n })(),\n });\n }\n\n _adminConfigFromCrud(data: { config_string: string }): CompleteConfig {\n return JSON.parse(data.config_string);\n }\n\n _adminOwnedProjectFromCrud(data: ProjectsCrud['Admin']['Read'], onRefresh: () => Promise<void>): AdminOwnedProject {\n if (this._tokenStoreInit !== null) {\n throw new HexclaveAssertionError(\"Owned apps must always have tokenStore === null — did you not create this project with app._createOwnedApp()?\");\n }\n return {\n ...this._adminProjectFromCrud(data, onRefresh),\n app: this as StackAdminApp<false>,\n };\n }\n\n _adminProjectFromCrud(data: ProjectsCrud['Admin']['Read'], onRefresh: () => Promise<void>): AdminProject {\n if (data.id !== this.projectId) {\n throw new HexclaveAssertionError(`The project ID of the provided project JSON (${data.id}) does not match the project ID of the app (${this.projectId})!`);\n }\n\n const app = this;\n return {\n id: data.id,\n displayName: data.display_name,\n description: data.description,\n createdAt: new Date(data.created_at_millis),\n isProductionMode: data.is_production_mode,\n isDevelopmentEnvironment: data.is_development_environment,\n ownerTeamId: data.owner_team_id,\n onboardingStatus: data.onboarding_status,\n onboardingState: data.onboarding_state ?? null,\n logoUrl: data.logo_url,\n logoFullUrl: data.logo_full_url,\n logoDarkModeUrl: data.logo_dark_mode_url,\n logoFullDarkModeUrl: data.logo_full_dark_mode_url,\n pushedConfigError: data.pushed_config_error == null ? null : {\n message: data.pushed_config_error.message,\n },\n configWarnings: data.config_warnings.map((warning) => ({\n message: warning.message,\n })),\n config: {\n signUpEnabled: data.config.sign_up_enabled,\n credentialEnabled: data.config.credential_enabled,\n magicLinkEnabled: data.config.magic_link_enabled,\n passkeyEnabled: data.config.passkey_enabled,\n clientTeamCreationEnabled: data.config.client_team_creation_enabled,\n clientUserDeletionEnabled: data.config.client_user_deletion_enabled,\n allowLocalhost: data.config.allow_localhost,\n oauthAccountMergeStrategy: data.config.oauth_account_merge_strategy,\n allowUserApiKeys: data.config.allow_user_api_keys,\n allowTeamApiKeys: data.config.allow_team_api_keys,\n oauthProviders: data.config.oauth_providers.map((p) => ((p.type === 'shared' ? {\n id: p.id,\n type: 'shared',\n } as const : {\n id: p.id,\n type: 'standard',\n clientId: p.client_id ?? throwErr(\"Client ID is missing\"),\n clientSecret: p.client_secret ?? throwErr(\"Client secret is missing\"),\n facebookConfigId: p.facebook_config_id,\n microsoftTenantId: p.microsoft_tenant_id,\n appleBundleIds: p.apple_bundle_ids,\n } as const))),\n emailConfig: data.config.email_config.type === 'shared' ? {\n type: 'shared'\n } : {\n type: 'standard',\n host: data.config.email_config.host ?? throwErr(\"Email host is missing\"),\n port: data.config.email_config.port ?? throwErr(\"Email port is missing\"),\n username: data.config.email_config.username ?? throwErr(\"Email username is missing\"),\n password: data.config.email_config.password ?? throwErr(\"Email password is missing\"),\n senderName: data.config.email_config.sender_name ?? throwErr(\"Email sender name is missing\"),\n senderEmail: data.config.email_config.sender_email ?? throwErr(\"Email sender email is missing\"),\n },\n emailTheme: data.config.email_theme,\n domains: data.config.domains.map((d) => ({\n domain: d.domain,\n handlerPath: d.handler_path,\n })),\n createTeamOnSignUp: data.config.create_team_on_sign_up,\n teamCreatorDefaultPermissions: data.config.team_creator_default_permissions,\n teamMemberDefaultPermissions: data.config.team_member_default_permissions,\n userDefaultPermissions: data.config.user_default_permissions,\n },\n async getConfig() {\n return app._adminConfigFromCrud(await app._interface.getConfig());\n },\n async updateConfig(configOverride: EnvironmentConfigOverrideOverride) {\n await app._interface.updateConfigOverride(\"environment\", configOverride);\n await app._refreshProjectConfig();\n },\n async pushConfig(config: EnvironmentConfigOverrideOverride, options: PushConfigOptions) {\n await app._interface.setConfigOverride(\"branch\", config, pushedConfigSourceToApi(options.source));\n await app._refreshProjectConfig();\n },\n async updatePushedConfig(config: EnvironmentConfigOverrideOverride) {\n await app._interface.updateConfigOverride(\"branch\", config);\n await app._refreshProjectConfig();\n },\n async getPushedConfigSource(): Promise<PushedConfigSource> {\n const apiSource = await app._interface.getPushedConfigSource();\n return apiToPushedConfigSource(apiSource);\n },\n async unlinkPushedConfigSource(): Promise<void> {\n await app._interface.unlinkPushedConfigSource();\n await app._refreshProjectConfig();\n },\n async resetConfigOverrideKeys(level: \"branch\" | \"environment\", keys: string[]): Promise<void> {\n await app._interface.resetConfigOverrideKeys(level, keys);\n await app._refreshProjectConfig();\n },\n async getConfigOverride(level: \"branch\" | \"environment\"): Promise<Record<string, unknown>> {\n const result = await app._interface.getConfigOverride(level);\n return JSON.parse(result.config_string);\n },\n async replaceConfigOverride(level: \"branch\" | \"environment\", config: Record<string, unknown>): Promise<void> {\n if (level === \"branch\") {\n const source = await app._interface.getPushedConfigSource();\n await app._interface.setConfigOverride(level, config, source);\n } else {\n await app._interface.setConfigOverride(level, config);\n }\n await app._refreshProjectConfig();\n },\n async update(update: AdminProjectUpdateOptions) {\n const { requirePublishableClientKey, ...projectUpdate } = update;\n const updateOptions = adminProjectUpdateOptionsToCrud(projectUpdate);\n const hasConfigUpdate = !!updateOptions.config\n && typedValues(updateOptions.config).some((value) => value !== undefined);\n const hasProjectUpdate = typedEntries(updateOptions).some(([key, value]) => {\n if (key === \"config\") return hasConfigUpdate;\n return value !== undefined;\n });\n\n if (hasProjectUpdate) {\n await app._interface.updateProject(updateOptions);\n await onRefresh();\n }\n\n if (requirePublishableClientKey !== undefined) {\n await app._interface.updateConfigOverride(\"project\", {\n \"project.requirePublishableClientKey\": requirePublishableClientKey,\n });\n await app._refreshProjectConfig();\n }\n },\n async delete() {\n await app._interface.deleteProject();\n },\n async getProductionModeErrors() {\n return getProductionModeErrors(data);\n },\n };\n }\n\n _adminEmailTemplateFromCrud(data: EmailTemplateCrud['Admin']['Read']): AdminEmailTemplate {\n return {\n type: data.type,\n subject: data.subject,\n content: data.content,\n isDefault: data.is_default,\n };\n }\n\n _planUsageFromCrud(data: PlanUsageResponse): PlanUsage {\n return {\n ownerTeamId: data.owner_team_id,\n ownerTeamDisplayName: data.owner_team_display_name,\n planId: data.plan_id,\n planDisplayName: data.plan_display_name,\n periodStart: new Date(data.period_start_millis),\n periodEnd: new Date(data.period_end_millis),\n nextPlanId: data.next_plan_id,\n rows: data.rows.map((row) => ({\n itemId: row.item_id,\n displayName: row.display_name,\n kind: row.kind,\n used: row.used,\n limit: row.limit,\n remaining: row.remaining,\n overage: row.overage,\n isUnlimited: row.is_unlimited,\n })),\n };\n }\n\n override async getProject(): Promise<AdminProject> {\n return this._adminProjectFromCrud(\n Result.orThrow(await this._adminProjectCache.getOrWait([], \"write-only\")),\n () => this._refreshProject()\n );\n }\n\n\n async getPlanUsage(): Promise<PlanUsage> {\n return this._planUsageFromCrud(Result.orThrow(await this._planUsageCache.getOrWait([], \"write-only\")));\n }\n\n\n protected _createInternalApiKeyBaseFromCrud(data: InternalApiKeyBaseCrudRead): InternalApiKeyBase {\n const app = this;\n return {\n id: data.id,\n description: data.description,\n expiresAt: new Date(data.expires_at_millis),\n manuallyRevokedAt: data.manually_revoked_at_millis ? new Date(data.manually_revoked_at_millis) : null,\n createdAt: new Date(data.created_at_millis),\n isValid() {\n return this.whyInvalid() === null;\n },\n whyInvalid() {\n if (this.expiresAt.getTime() < Date.now()) return \"expired\";\n if (this.manuallyRevokedAt) return \"manually-revoked\";\n return null;\n },\n async revoke() {\n const res = await app._interface.revokeInternalApiKeyById(data.id);\n await app._refreshInternalApiKeys();\n return res;\n }\n };\n }\n\n protected _createInternalApiKeyFromCrud(data: InternalApiKeysCrud[\"Admin\"][\"Read\"]): InternalApiKey {\n return {\n ...this._createInternalApiKeyBaseFromCrud(data),\n publishableClientKey: data.publishable_client_key ? { lastFour: data.publishable_client_key.last_four } : null,\n secretServerKey: data.secret_server_key ? { lastFour: data.secret_server_key.last_four } : null,\n superSecretAdminKey: data.super_secret_admin_key ? { lastFour: data.super_secret_admin_key.last_four } : null,\n };\n }\n\n protected _createInternalApiKeyFirstViewFromCrud(data: InternalApiKeyCreateCrudResponse): InternalApiKeyFirstView {\n return {\n ...this._createInternalApiKeyBaseFromCrud(data),\n publishableClientKey: data.publishable_client_key,\n secretServerKey: data.secret_server_key,\n superSecretAdminKey: data.super_secret_admin_key,\n };\n }\n\n async listInternalApiKeys(): Promise<InternalApiKey[]> {\n const crud = Result.orThrow(await this._internalApiKeysCache.getOrWait([], \"write-only\"));\n return crud.map((j) => this._createInternalApiKeyFromCrud(j));\n }\n\n\n async createInternalApiKey(options: InternalApiKeyCreateOptions): Promise<InternalApiKeyFirstView> {\n const crud = await this._interface.createInternalApiKey(internalApiKeyCreateOptionsToCrud(options));\n await this._refreshInternalApiKeys();\n return this._createInternalApiKeyFirstViewFromCrud(crud);\n }\n\n\n async listEmailThemes(): Promise<{ id: string, displayName: string }[]> {\n const crud = Result.orThrow(await this._adminEmailThemesCache.getOrWait([], \"write-only\"));\n return crud.map((theme) => ({\n id: theme.id,\n displayName: theme.display_name,\n }));\n }\n\n async listEmailTemplates(): Promise<{ id: string, displayName: string, themeId?: string, tsxSource: string }[]> {\n const crud = Result.orThrow(await this._adminEmailTemplatesCache.getOrWait([], \"write-only\"));\n return crud.map((template) => ({\n id: template.id,\n displayName: template.display_name,\n themeId: template.theme_id,\n tsxSource: template.tsx_source,\n }));\n }\n\n async listEmailDrafts(): Promise<{ id: string, displayName: string, themeId: string | undefined | false, tsxSource: string, sentAt: Date | null }[]> {\n const crud = Result.orThrow(await this._adminEmailDraftsCache.getOrWait([], \"write-only\"));\n return crud.map((draft) => ({\n id: draft.id,\n displayName: draft.display_name,\n themeId: draft.theme_id,\n tsxSource: draft.tsx_source,\n sentAt: draft.sent_at_millis ? new Date(draft.sent_at_millis) : null,\n }));\n }\n\n\n async createTeamPermissionDefinition(data: AdminTeamPermissionDefinitionCreateOptions): Promise<AdminTeamPermission> {\n const crud = await this._interface.createTeamPermissionDefinition(adminTeamPermissionDefinitionCreateOptionsToCrud(data));\n await this._adminTeamPermissionDefinitionsCache.refresh([]);\n return this._serverTeamPermissionDefinitionFromCrud(crud);\n }\n\n async updateTeamPermissionDefinition(permissionId: string, data: AdminTeamPermissionDefinitionUpdateOptions) {\n await this._interface.updateTeamPermissionDefinition(permissionId, adminTeamPermissionDefinitionUpdateOptionsToCrud(data));\n await this._adminTeamPermissionDefinitionsCache.refresh([]);\n }\n\n async deleteTeamPermissionDefinition(permissionId: string): Promise<void> {\n await this._interface.deleteTeamPermissionDefinition(permissionId);\n await this._adminTeamPermissionDefinitionsCache.refresh([]);\n }\n\n async listTeamPermissionDefinitions(): Promise<AdminTeamPermissionDefinition[]> {\n const crud = Result.orThrow(await this._adminTeamPermissionDefinitionsCache.getOrWait([], \"write-only\"));\n return crud.map((p) => this._serverTeamPermissionDefinitionFromCrud(p));\n }\n\n async listTeamPermissionDefinitionsPaginated(\n options: { limit: number, cursor?: string, query?: string },\n ): Promise<{ items: AdminTeamPermissionDefinition[], nextCursor: string | null }> {\n const result = await this._interface.listTeamPermissionDefinitionsPaginated(options);\n return {\n items: result.items.map((p) => this._serverTeamPermissionDefinitionFromCrud(p)),\n nextCursor: result.nextCursor,\n };\n }\n\n\n async createProjectPermissionDefinition(data: AdminProjectPermissionDefinitionCreateOptions): Promise<AdminProjectPermission> {\n const crud = await this._interface.createProjectPermissionDefinition(adminProjectPermissionDefinitionCreateOptionsToCrud(data));\n await this._adminProjectPermissionDefinitionsCache.refresh([]);\n return this._serverProjectPermissionDefinitionFromCrud(crud);\n }\n\n async updateProjectPermissionDefinition(permissionId: string, data: AdminProjectPermissionDefinitionUpdateOptions) {\n await this._interface.updateProjectPermissionDefinition(permissionId, adminProjectPermissionDefinitionUpdateOptionsToCrud(data));\n await this._adminProjectPermissionDefinitionsCache.refresh([]);\n }\n\n async deleteProjectPermissionDefinition(permissionId: string): Promise<void> {\n await this._interface.deleteProjectPermissionDefinition(permissionId);\n await this._adminProjectPermissionDefinitionsCache.refresh([]);\n }\n\n async listProjectPermissionDefinitions(): Promise<AdminProjectPermissionDefinition[]> {\n const crud = Result.orThrow(await this._adminProjectPermissionDefinitionsCache.getOrWait([], \"write-only\"));\n return crud.map((p) => this._serverProjectPermissionDefinitionFromCrud(p));\n }\n\n\n protected override async _refreshProject() {\n await Promise.all([\n super._refreshProject(),\n this._adminProjectCache.refresh([]),\n ]);\n }\n\n protected async _refreshProjectConfig() {\n await Promise.all([\n this._configOverridesCache.refresh([]),\n this._adminProjectCache.refresh([]),\n ]);\n }\n\n protected async _refreshInternalApiKeys() {\n await this._internalApiKeysCache.refresh([]);\n }\n\n protected override async _refreshUsers() {\n await Promise.all([\n super._refreshUsers(),\n this._metricsCache.refreshWhere(() => true),\n this._metricsUserCountsCache.refresh([]),\n ]);\n }\n\n get [hexclaveAppInternalsSymbol]() {\n return {\n ...super[hexclaveAppInternalsSymbol],\n };\n }\n\n async sendTestEmail(options: {\n recipientEmail: string,\n emailConfig: EmailConfig,\n }): Promise<Result<undefined, { errorMessage: string }>> {\n let response: { success: boolean, error_message?: string };\n try {\n response = await this._interface.sendTestEmail({\n recipient_email: options.recipientEmail,\n email_config: {\n ...(pick(options.emailConfig, ['host', 'port', 'username', 'password'])),\n sender_email: options.emailConfig.senderEmail,\n sender_name: options.emailConfig.senderName,\n },\n });\n } catch (error) {\n // Translate the quota-exhaustion KnownError into the existing\n // Result.error shape so SDK/dashboard callers don't need to branch on\n // exceptions. The backend throws `ItemQuantityInsufficientAmount`\n // (consistent with every other limit-rejection endpoint), but this\n // method's historical contract has always been a `Result`.\n if (error instanceof KnownErrors.ItemQuantityInsufficientAmount) {\n return Result.error({\n errorMessage: \"Monthly email sending limit exceeded for your plan. Please upgrade your plan or wait until next month before sending more test emails.\",\n });\n }\n throw error;\n }\n\n if (response.success) {\n return Result.ok(undefined);\n } else {\n return Result.error({ errorMessage: response.error_message ?? throwErr(\"Email test error not specified\") });\n }\n }\n\n async sendTestWebhook(options: { endpointId: string }): Promise<Result<undefined, { errorMessage: string }>> {\n const response = await this._interface.sendTestWebhook({\n endpoint_id: options.endpointId,\n });\n\n if (response.success) {\n return Result.ok(undefined);\n } else {\n return Result.error({ errorMessage: response.error_message ?? throwErr(\"Webhook test error not specified\") });\n }\n }\n\n async listSentEmails(): Promise<AdminSentEmail[]> {\n const response = await this._interface.listSentEmails();\n return response.items.map((email) => ({\n id: email.id,\n to: email.to ?? [],\n subject: email.subject,\n recipient: email.to?.[0] ?? \"\",\n sentAt: new Date(email.sent_at_millis),\n error: email.error,\n }));\n }\n\n async setupManagedEmailProvider(options: { subdomain: string, senderLocalPart: string }): Promise<ManagedEmailProviderSetupResult> {\n const response = await this._interface.setupManagedEmailProvider({\n subdomain: options.subdomain,\n sender_local_part: options.senderLocalPart,\n });\n return {\n domainId: response.domain_id,\n subdomain: response.subdomain,\n senderLocalPart: response.sender_local_part,\n nameServerRecords: response.name_server_records,\n status: response.status,\n };\n }\n\n async checkManagedEmailStatus(options: { domainId: string, subdomain: string, senderLocalPart: string }): Promise<ManagedEmailProviderStatus> {\n const response = await this._interface.checkManagedEmailStatus({\n domain_id: options.domainId,\n subdomain: options.subdomain,\n sender_local_part: options.senderLocalPart,\n });\n return {\n status: response.status,\n };\n }\n\n async listManagedEmailDomains(): Promise<ManagedEmailProviderListItem[]> {\n const response = await this._interface.listManagedEmailDomains();\n return response.items.map((item) => ({\n domainId: item.domain_id,\n subdomain: item.subdomain,\n senderLocalPart: item.sender_local_part,\n status: item.status,\n nameServerRecords: item.name_server_records,\n }));\n }\n\n async applyManagedEmailProvider(options: { domainId: string }): Promise<{ status: \"applied\" }> {\n const result = await this._interface.applyManagedEmailProvider({\n domain_id: options.domainId,\n });\n await this._refreshProjectConfig();\n return result;\n }\n\n async deleteManagedEmailDomain(options: { resendDomainId: string }): Promise<{ status: \"deleted\" }> {\n return await this._interface.deleteManagedEmailDomain({\n resend_domain_id: options.resendDomainId,\n });\n }\n\n async sendSignInInvitationEmail(email: string, callbackUrl: string): Promise<void> {\n await this._interface.sendSignInInvitationEmail(email, callbackUrl);\n }\n\n async createEmailTemplate(displayName: string): Promise<{ id: string }> {\n const result = await this._interface.createEmailTemplate(displayName);\n await this._adminEmailTemplatesCache.refresh([]);\n\n return result;\n }\n\n async deleteEmailTemplate(id: string): Promise<void> {\n await this._interface.deleteEmailTemplate(id);\n await this._adminEmailTemplatesCache.refresh([]);\n }\n\n async createEmailDraft(options: { displayName: string, themeId?: string | false, tsxSource?: string }): Promise<{ id: string }> {\n const result = await this._interface.createEmailDraft({\n display_name: options.displayName,\n theme_id: options.themeId,\n tsx_source: options.tsxSource,\n });\n await this._adminEmailDraftsCache.refresh([]);\n return result;\n }\n\n async updateEmailDraft(id: string, data: { displayName?: string, themeId?: string | undefined | false, tsxSource?: string }): Promise<void> {\n await this._interface.updateEmailDraft(id, {\n display_name: data.displayName,\n theme_id: data.themeId,\n tsx_source: data.tsxSource,\n });\n await this._adminEmailDraftsCache.refresh([]);\n }\n\n async deleteEmailDraft(id: string): Promise<void> {\n await this._interface.deleteEmailDraft(id);\n const current = this._adminEmailDraftsCache.getIfCached([]);\n if (current.status === \"ok\" && current.data.status === \"ok\") {\n this._adminEmailDraftsCache.forceSetCachedValue([], Result.ok(current.data.data.filter((d) => d.id !== id)));\n }\n await this._adminEmailDraftsCache.refresh([]);\n }\n\n async refreshEmailDrafts(): Promise<void> {\n await this._adminEmailDraftsCache.refresh([]);\n }\n\n async saveChatMessage(threadId: string, message: any): Promise<void> {\n await this._interface.saveChatMessage(threadId, message);\n }\n\n async listChatMessages(threadId: string): Promise<{ messages: Array<any> }> {\n return await this._interface.listChatMessages(threadId);\n }\n\n async rewriteTemplateSourceWithAI(templateTsxSource: string): Promise<{ tsxSource: string }> {\n const result = await this._interface.rewriteTemplateSourceWithAI(templateTsxSource);\n return { tsxSource: result.tsx_source };\n }\n\n async createEmailTheme(displayName: string): Promise<{ id: string }> {\n const result = await this._interface.createEmailTheme(displayName);\n await this._adminEmailThemesCache.refresh([]);\n return result;\n }\n\n async getEmailPreview(options: { themeId?: string | null | false, themeTsxSource?: string, templateId?: string, templateTsxSource?: string }): Promise<string> {\n return (await this._interface.renderEmailPreview(options)).html;\n }\n async getEmailPreviewWithEditableMarkers(options: { themeId?: string | null | false, themeTsxSource?: string, templateId?: string, templateTsxSource?: string, editableSource?: 'template' | 'theme' | 'both' }): Promise<{ html: string, editableRegions?: Record<string, unknown> }> {\n const result = await this._interface.renderEmailPreview({ ...options, editableMarkers: true, editableSource: options.editableSource });\n return { html: result.html, editableRegions: result.editable_regions };\n }\n async updateEmailTheme(id: string, tsxSource: string): Promise<void> {\n await this._interface.updateEmailTheme(id, tsxSource);\n await this._adminEmailThemesCache.refresh([]);\n await this._adminEmailThemeCache.invalidate([id]);\n }\n\n async deleteEmailTheme(id: string): Promise<void> {\n await this._interface.deleteEmailTheme(id);\n await this._adminEmailThemesCache.refresh([]);\n await this._adminEmailThemeCache.invalidate([id]);\n }\n\n async updateEmailTemplate(id: string, tsxSource: string, themeId: string | null | false): Promise<{ renderedHtml: string }> {\n const result = await this._interface.updateEmailTemplate(id, tsxSource, themeId);\n await this._adminEmailTemplatesCache.refresh([]);\n return { renderedHtml: result.rendered_html };\n }\n\n async setupPayments(): Promise<{ url: string }> {\n const result = await this._interface.setupPayments();\n await this._stripeAccountInfoCache.refresh([]);\n return result;\n }\n\n async createStripeWidgetAccountSession(): Promise<{ client_secret: string }> {\n return await this._interface.createStripeWidgetAccountSession();\n }\n\n async getPaymentMethodConfigs(): Promise<{ configId: string, methods: Array<{ id: string, name: string, enabled: boolean, available: boolean, overridable: boolean }> } | null> {\n return await this._interface.getPaymentMethodConfigs();\n }\n\n async updatePaymentMethodConfigs(configId: string, updates: Record<string, 'on' | 'off'>): Promise<void> {\n await this._interface.updatePaymentMethodConfigs(configId, updates);\n }\n\n async createItemQuantityChange(options: (\n { userId: string, itemId: string, quantity: number, expiresAt?: string, description?: string } |\n { teamId: string, itemId: string, quantity: number, expiresAt?: string, description?: string } |\n { customCustomerId: string, itemId: string, quantity: number, expiresAt?: string, description?: string }\n )): Promise<void> {\n await this._interface.updateItemQuantity(\n { itemId: options.itemId, ...(\"userId\" in options ? { userId: options.userId } : (\"teamId\" in options ? { teamId: options.teamId } : { customCustomerId: options.customCustomerId })) },\n {\n delta: options.quantity,\n expires_at: options.expiresAt,\n description: options.description,\n allow_negative: true,\n }\n );\n }\n\n async refundTransaction(options: {\n type: \"subscription\" | \"one-time-purchase\",\n id: string,\n invoiceId?: string,\n amountUsd: MoneyAmount,\n endAction?: \"now\" | \"at-period-end\",\n }): Promise<{ refundTransactionId: string }> {\n const result = await this._interface.refundTransaction({\n type: options.type,\n id: options.id,\n invoiceId: options.invoiceId,\n amountUsd: options.amountUsd,\n endAction: options.endAction,\n });\n await this._transactionsCache.invalidateWhere(() => true);\n return { refundTransactionId: result.refundTransactionId };\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 crud = Result.orThrow(await this._transactionsCache.getOrWait([params.cursor, params.limit, params.type, params.customerType, params.customerId] as const, \"write-only\"));\n return crud;\n }\n\n // Email Outbox methods\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Complex discriminated union conversion from API response\n private _emailOutboxCrudToAdmin(crud: any): AdminEmailOutbox {\n const recipient = crud.to;\n let to: AdminEmailOutbox[\"to\"];\n if (recipient.type === \"user-primary-email\") {\n to = { type: \"user-primary-email\", userId: recipient.user_id };\n } else if (recipient.type === \"user-custom-emails\") {\n to = { type: \"user-custom-emails\", userId: recipient.user_id, emails: recipient.emails };\n } else {\n to = { type: \"custom-emails\", emails: recipient.emails };\n }\n\n // Base fields present on all emails\n const base = {\n id: crud.id as string,\n createdAt: new Date(crud.created_at_millis),\n updatedAt: new Date(crud.updated_at_millis),\n tsxSource: crud.tsx_source as string,\n themeId: (crud.theme_id as string | null) ?? null,\n to,\n scheduledAt: new Date(crud.scheduled_at_millis),\n // Source tracking for grouping emails by template/draft\n createdWith: crud.created_with as \"draft\" | \"programmatic-call\",\n emailDraftId: crud.email_draft_id as string | null,\n emailProgrammaticCallTemplateId: crud.email_programmatic_call_template_id as string | null,\n variables: (crud.variables ?? {}) as Record<string, Json>,\n isPaused: false as const,\n hasRendered: false as const,\n hasDelivered: false as const,\n // Retry tracking fields\n sendRetries: crud.send_retries as number,\n nextSendRetryAt: crud.next_send_retry_at_millis ? new Date(crud.next_send_retry_at_millis) : null,\n sendAttemptErrors: crud.send_attempt_errors ? (crud.send_attempt_errors as Array<{\n attempt_number: number,\n timestamp: string,\n external_message: string,\n external_details: Record<string, unknown>,\n internal_message: string,\n internal_details: Record<string, unknown>,\n }>).map((e) => ({\n attemptNumber: e.attempt_number,\n timestamp: e.timestamp,\n externalMessage: e.external_message,\n externalDetails: e.external_details,\n internalMessage: e.internal_message,\n internalDetails: e.internal_details,\n })) : null,\n };\n\n // Rendered fields (available after rendering completes successfully)\n const rendered = crud.has_rendered ? {\n ...base,\n startedRenderingAt: new Date(crud.started_rendering_at_millis),\n renderedAt: new Date(crud.rendered_at_millis),\n subject: crud.subject as string,\n html: crud.html as string | null,\n text: crud.text as string | null,\n isTransactional: crud.is_transactional as boolean,\n isHighPriority: crud.is_high_priority as boolean,\n notificationCategoryId: crud.notification_category_id as string | null,\n hasRendered: true as const,\n } : null;\n\n // Started sending fields\n const startedSending = rendered && crud.started_sending_at_millis ? {\n ...rendered,\n startedSendingAt: new Date(crud.started_sending_at_millis),\n } : null;\n\n // Finished delivering fields\n const finishedDelivering = startedSending && crud.has_delivered ? {\n ...startedSending,\n deliveredAt: new Date(crud.delivered_at_millis),\n hasDelivered: true as const,\n } : null;\n\n // Use type assertion at the end because TypeScript has trouble with\n // spread + override patterns on discriminated unions with const literal types\n const result = (() => {\n switch (crud.status) {\n case \"paused\": {\n return {\n ...base,\n status: \"paused\" as const,\n simpleStatus: \"in-progress\" as const,\n isPaused: true as const,\n };\n }\n case \"preparing\": {\n return {\n ...base,\n status: \"preparing\" as const,\n simpleStatus: \"in-progress\" as const,\n };\n }\n case \"rendering\": {\n return {\n ...base,\n status: \"rendering\" as const,\n simpleStatus: \"in-progress\" as const,\n startedRenderingAt: new Date(crud.started_rendering_at_millis),\n };\n }\n case \"render-error\": {\n return {\n ...base,\n status: \"render-error\" as const,\n simpleStatus: \"error\" as const,\n startedRenderingAt: new Date(crud.started_rendering_at_millis),\n renderedAt: new Date(crud.rendered_at_millis),\n renderError: crud.render_error,\n };\n }\n case \"scheduled\": {\n return {\n ...rendered!,\n status: \"scheduled\" as const,\n simpleStatus: \"in-progress\" as const,\n };\n }\n case \"queued\": {\n return {\n ...rendered!,\n status: \"queued\" as const,\n simpleStatus: \"in-progress\" as const,\n };\n }\n case \"sending\": {\n return {\n ...startedSending!,\n status: \"sending\" as const,\n simpleStatus: \"in-progress\" as const,\n };\n }\n case \"server-error\": {\n return {\n ...startedSending!,\n status: \"server-error\" as const,\n simpleStatus: \"error\" as const,\n errorAt: new Date(crud.error_at_millis),\n serverError: crud.server_error,\n };\n }\n case \"skipped\": {\n return {\n ...base,\n status: \"skipped\" as const,\n simpleStatus: \"ok\" as const,\n skippedAt: new Date(crud.skipped_at_millis),\n skippedReason: crud.skipped_reason,\n skippedDetails: crud.skipped_details ?? {},\n hasRendered: crud.has_rendered as boolean,\n // Optional fields\n startedRenderingAt: crud.started_rendering_at_millis ? new Date(crud.started_rendering_at_millis) : undefined,\n renderedAt: crud.rendered_at_millis ? new Date(crud.rendered_at_millis) : undefined,\n subject: crud.subject,\n html: crud.html,\n text: crud.text,\n isTransactional: crud.is_transactional,\n isHighPriority: crud.is_high_priority,\n notificationCategoryId: crud.notification_category_id,\n startedSendingAt: crud.started_sending_at_millis ? new Date(crud.started_sending_at_millis) : undefined,\n };\n }\n case \"bounced\": {\n return {\n ...startedSending!,\n status: \"bounced\" as const,\n simpleStatus: \"error\" as const,\n bouncedAt: new Date(crud.bounced_at_millis),\n };\n }\n case \"delivery-delayed\": {\n return {\n ...startedSending!,\n status: \"delivery-delayed\" as const,\n simpleStatus: \"ok\" as const,\n deliveryDelayedAt: new Date(crud.delivery_delayed_at_millis),\n };\n }\n case \"sent\": {\n return {\n ...finishedDelivering!,\n status: \"sent\" as const,\n simpleStatus: \"ok\" as const,\n canHaveDeliveryInfo: crud.can_have_delivery_info,\n };\n }\n case \"opened\": {\n return {\n ...finishedDelivering!,\n status: \"opened\" as const,\n simpleStatus: \"ok\" as const,\n openedAt: new Date(crud.opened_at_millis),\n canHaveDeliveryInfo: true as const,\n };\n }\n case \"clicked\": {\n return {\n ...finishedDelivering!,\n status: \"clicked\" as const,\n simpleStatus: \"ok\" as const,\n clickedAt: new Date(crud.clicked_at_millis),\n canHaveDeliveryInfo: true as const,\n };\n }\n case \"marked-as-spam\": {\n return {\n ...finishedDelivering!,\n status: \"marked-as-spam\" as const,\n simpleStatus: \"ok\" as const,\n markedAsSpamAt: new Date(crud.marked_as_spam_at_millis),\n canHaveDeliveryInfo: true as const,\n };\n }\n default: {\n throw new HexclaveAssertionError(`Unknown email outbox status: ${crud.status}`, { status: crud.status });\n }\n }\n })();\n // The type system has difficulty with spread + override patterns on discriminated unions,\n // so we use a type assertion here. The switch statement above ensures we return the correct shape.\n return result as AdminEmailOutbox;\n }\n\n async listOutboxEmails(options?: { status?: string, simpleStatus?: string, userId?: string, limit?: number, cursor?: string }): Promise<{ items: AdminEmailOutbox[], nextCursor: string | null }> {\n const response = await this._interface.listOutboxEmails({\n status: options?.status,\n simple_status: options?.simpleStatus,\n user_id: options?.userId,\n limit: options?.limit,\n cursor: options?.cursor,\n });\n return {\n items: response.items.map((item) => this._emailOutboxCrudToAdmin(item)),\n nextCursor: response.pagination?.next_cursor ?? null,\n };\n }\n\n async getOutboxEmail(id: string): Promise<AdminEmailOutbox> {\n const response = await this._interface.getOutboxEmail(id);\n return this._emailOutboxCrudToAdmin(response);\n }\n\n async updateOutboxEmail(id: string, options: EmailOutboxUpdateOptions): Promise<AdminEmailOutbox> {\n const response = await this._interface.updateOutboxEmail(id, {\n is_paused: options.isPaused,\n scheduled_at_millis: options.scheduledAtMillis,\n cancel: options.cancel,\n tsx_source: options.tsxSource,\n theme_id: options.themeId,\n });\n return this._emailOutboxCrudToAdmin(response);\n }\n\n async pauseOutboxEmail(id: string): Promise<AdminEmailOutbox> {\n return await this.updateOutboxEmail(id, { isPaused: true });\n }\n\n async unpauseOutboxEmail(id: string): Promise<AdminEmailOutbox> {\n return await this.updateOutboxEmail(id, { isPaused: false });\n }\n\n async cancelOutboxEmail(id: string): Promise<AdminEmailOutbox> {\n return await this.updateOutboxEmail(id, { cancel: true });\n }\n\n\n async getStripeAccountInfo(): Promise<null | { account_id: string, charges_enabled: boolean, details_submitted: boolean, payouts_enabled: boolean }> {\n return Result.orThrow(await this._stripeAccountInfoCache.getOrWait([], \"write-only\"));\n }\n\n\n async queryAnalytics(options: AnalyticsQueryOptions): Promise<AnalyticsQueryResponse> {\n return await this._interface.queryAnalytics(options);\n }\n\n async getAnalyticsClickmap(options: AnalyticsClickmapOptions): Promise<AnalyticsClickmapResponse> {\n return await this._interface.getAnalyticsClickmap({\n kind: options.kind,\n member_user_ids: options.memberUserIds,\n route_path: options.routePath,\n route_regex: options.routeRegex,\n url_pattern: options.urlPattern,\n user_id: options.userId,\n replay_id: options.replayId,\n device: options.device,\n viewport_width_min: options.viewportWidthMin,\n viewport_width_max: options.viewportWidthMax,\n sampling: options.sampling,\n since: options.since,\n until: options.until,\n });\n }\n\n async createAnalyticsClickmapToken(options: { origin: string }): Promise<AnalyticsClickmapTokenResponse> {\n return await this._interface.createAnalyticsClickmapToken(options);\n }\n\n async listSessionReplays(options?: ListSessionReplaysOptions): Promise<ListSessionReplaysResult> {\n const response = await this._interface.listSessionReplays({\n cursor: options?.cursor,\n limit: options?.limit,\n user_ids: options?.userIds,\n team_ids: options?.teamIds,\n duration_ms_min: options?.durationMsMin,\n duration_ms_max: options?.durationMsMax,\n last_event_at_from_millis: options?.lastEventAtFromMillis,\n last_event_at_to_millis: options?.lastEventAtToMillis,\n click_count_min: options?.clickCountMin,\n });\n\n const items: AdminSessionReplay[] = response.items.map((r) => ({\n id: r.id,\n projectUser: {\n id: r.project_user.id,\n displayName: r.project_user.display_name,\n primaryEmail: r.project_user.primary_email,\n },\n startedAt: new Date(r.started_at_millis),\n lastEventAt: new Date(r.last_event_at_millis),\n chunkCount: r.chunk_count,\n eventCount: r.event_count,\n }));\n\n return {\n items,\n nextCursor: response.pagination.next_cursor,\n };\n }\n\n async getSessionReplay(sessionReplayId: string): Promise<AdminSessionReplay> {\n const response = await this._interface.getSessionReplay(sessionReplayId);\n return {\n id: response.id,\n projectUser: {\n id: response.project_user.id,\n displayName: response.project_user.display_name,\n primaryEmail: response.project_user.primary_email,\n },\n startedAt: new Date(response.started_at_millis),\n lastEventAt: new Date(response.last_event_at_millis),\n chunkCount: response.chunk_count,\n eventCount: response.event_count,\n };\n }\n\n async listSessionReplayChunks(sessionReplayId: string, options?: ListSessionReplayChunksOptions): Promise<ListSessionReplayChunksResult> {\n const response = await this._interface.listSessionReplayChunks(sessionReplayId, {\n cursor: options?.cursor,\n limit: options?.limit,\n });\n\n const items: AdminSessionReplayChunk[] = response.items.map((c) => ({\n id: c.id,\n batchId: c.batch_id,\n sessionReplaySegmentId: c.session_replay_segment_id,\n browserSessionId: c.browser_session_id,\n eventCount: c.event_count,\n byteLength: c.byte_length,\n firstEventAt: new Date(c.first_event_at_millis),\n lastEventAt: new Date(c.last_event_at_millis),\n createdAt: new Date(c.created_at_millis),\n }));\n\n return {\n items,\n nextCursor: response.pagination.next_cursor,\n };\n }\n\n async getSessionReplayChunkEvents(sessionReplayId: string, chunkId: string): Promise<AdminGetSessionReplayChunkEventsResponse> {\n return await this._interface.getSessionReplayChunkEvents(sessionReplayId, chunkId);\n }\n\n async getSessionReplayEvents(sessionReplayId: string, options?: { offset?: number, limit?: number }): Promise<SessionReplayAllEventsResult> {\n const response = await this._interface.getSessionReplayEvents(sessionReplayId, options);\n return {\n chunks: response.chunks.map((c) => ({\n id: c.id,\n batchId: c.batch_id,\n sessionReplaySegmentId: c.session_replay_segment_id,\n eventCount: c.event_count,\n byteLength: c.byte_length,\n firstEventAt: new Date(c.first_event_at_millis),\n lastEventAt: new Date(c.last_event_at_millis),\n createdAt: new Date(c.created_at_millis),\n })),\n chunkEvents: response.chunk_events.map((ce) => ({\n chunkId: ce.chunk_id,\n events: ce.events,\n })),\n };\n }\n\n async previewAffectedUsersByOnboardingChange(\n onboarding: { requireEmailVerification?: boolean },\n limit?: number,\n ): Promise<{\n affectedUsers: Array<{\n id: string,\n displayName: string | null,\n primaryEmail: string | null,\n restrictedReason: RestrictedReason,\n }>,\n totalAffectedCount: number,\n }> {\n const result = await this._interface.previewAffectedUsersByOnboardingChange(\n { require_email_verification: onboarding.requireEmailVerification },\n limit,\n );\n return {\n affectedUsers: result.affected_users.map(u => ({\n id: u.id,\n displayName: u.display_name,\n primaryEmail: u.primary_email,\n restrictedReason: u.restricted_reason as RestrictedReason,\n })),\n totalAffectedCount: result.total_affected_count,\n };\n }\n}\n"],"mappings":"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"}
@@ -531,6 +531,7 @@ declare class _HexclaveClientAppImplIncomplete<HasTokenStore extends boolean, Pr
531
531
  refreshToken: _hexclave_shared_dist_sessions0.RefreshToken | null;
532
532
  } | null;
533
533
  }>;
534
+ getUrls: () => Readonly<ResolvedHandlerUrls>;
534
535
  getRedirectMethod: () => RedirectMethod;
535
536
  redirectToUrl: (url: string | URL, options?: {
536
537
  replace?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"client-app-impl.d.ts","names":[],"sources":["../../../../../src/lib/hexclave-app/apps/implementations/client-app-impl.ts"],"mappings":"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"}
1
+ {"version":3,"file":"client-app-impl.d.ts","names":[],"sources":["../../../../../src/lib/hexclave-app/apps/implementations/client-app-impl.ts"],"mappings":"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"}
@@ -15,17 +15,17 @@ let ______common_js = require("../../common.js");
15
15
  let ______projects_index_js = require("../../projects/index.js");
16
16
  let _hexclave_shared_dist_sessions = require("@hexclave/shared/dist/sessions");
17
17
  let _hexclave_shared_dist_utils_stores = require("@hexclave/shared/dist/utils/stores");
18
- let _simplewebauthn_browser = require("@simplewebauthn/browser");
19
18
  let _hexclave_shared_dist_utils_json = require("@hexclave/shared/dist/utils/json");
20
19
  let _hexclave_shared_dist_utils_maps = require("@hexclave/shared/dist/utils/maps");
21
20
  let _hexclave_shared_dist_utils_turnstile_flow = require("@hexclave/shared/dist/utils/turnstile-flow");
22
21
  let _hexclave_shared_dist_utils_uuids = require("@hexclave/shared/dist/utils/uuids");
22
+ let _simplewebauthn_browser = require("@simplewebauthn/browser");
23
23
  let cookie = require("cookie");
24
24
  cookie = require_chunk.__toESM(cookie);
25
+ let ____________generated_env_js = require("../../../../generated/env.js");
25
26
  let ____________utils_url_js = require("../../../../utils/url.js");
26
27
  let _________auth_js = require("../../../auth.js");
27
28
  let _________cookie_js = require("../../../cookie.js");
28
- let ____________generated_env_js = require("../../../../generated/env.js");
29
29
  let ______api_keys_index_js = require("../../api-keys/index.js");
30
30
  let ______contact_channels_index_js = require("../../contact-channels/index.js");
31
31
  let ______teams_index_js = require("../../teams/index.js");
@@ -36,6 +36,7 @@ let __redirect_page_urls_js = require("./redirect-page-urls.js");
36
36
  let __session_replay_js = require("./session-replay.js");
37
37
  let ____________clickmap_index_js = require("../../../../clickmap/index.js");
38
38
  let ____________dev_tool_index_js = require("../../../../dev-tool/index.js");
39
+ let ____________pushed_config_error_overlay_index_js = require("../../../../pushed-config-error-overlay/index.js");
39
40
 
40
41
  //#region src/lib/hexclave-app/apps/implementations/client-app-impl.ts
41
42
  const prefetchedCrossDomainHandoffTtlMs = 3300 * 1e3;
@@ -136,7 +137,7 @@ var _HexclaveClientAppImplIncomplete = class _HexclaveClientAppImplIncomplete {
136
137
  const location = await (0, _________auth_js.getNewOAuthProviderOrScopeUrl)(this._interface, {
137
138
  provider: options.providerId,
138
139
  redirectUrl: this._getOAuthCallbackRedirectUri(),
139
- errorRedirectUrl: this.urls.error,
140
+ errorRedirectUrl: this._getUrls().error,
140
141
  providerScope: (0, _hexclave_shared_dist_utils_strings.mergeScopeStrings)(options.scope || "", (this._oauthScopesOnSignIn[options.providerId] ?? []).join(" "))
141
142
  }, options.session);
142
143
  await this._redirectTo({ url: location });
@@ -247,7 +248,7 @@ var _HexclaveClientAppImplIncomplete = class _HexclaveClientAppImplIncomplete {
247
248
  const location = await (0, _________auth_js.getNewOAuthProviderOrScopeUrl)(this._interface, {
248
249
  provider,
249
250
  redirectUrl: this._getOAuthCallbackRedirectUri(),
250
- errorRedirectUrl: this.urls.error,
251
+ errorRedirectUrl: this._getUrls().error,
251
252
  providerScope: (0, _hexclave_shared_dist_utils_strings.mergeScopeStrings)(scopeString, (this._oauthScopesOnSignIn[provider] ?? []).join(" "))
252
253
  }, session);
253
254
  await this._redirectTo({ url: location });
@@ -430,7 +431,10 @@ var _HexclaveClientAppImplIncomplete = class _HexclaveClientAppImplIncomplete {
430
431
  });
431
432
  }
432
433
  if ((0, _hexclave_shared_dist_utils_env.isBrowserLike)() && resolvedOptions.devTool !== false) (0, ____________dev_tool_index_js.mountDevTool)(this, resolvedOptions.devTool);
433
- if ((0, _hexclave_shared_dist_utils_env.isBrowserLike)()) (0, ____________clickmap_index_js.mountClickmapOverlay)(this);
434
+ if ((0, _hexclave_shared_dist_utils_env.isBrowserLike)()) {
435
+ (0, ____________clickmap_index_js.mountClickmapOverlay)(this);
436
+ (0, ____________pushed_config_error_overlay_index_js.mountPushedConfigErrorOverlay)(this);
437
+ }
434
438
  }
435
439
  _initUniqueIdentifier() {
436
440
  if (!this._uniqueIdentifier) throw new _hexclave_shared_dist_utils_errors.HexclaveAssertionError("Unique identifier not initialized");
@@ -487,7 +491,7 @@ var _HexclaveClientAppImplIncomplete = class _HexclaveClientAppImplIncomplete {
487
491
  return currentUrl.searchParams.has("code") && currentUrl.searchParams.has("state") && currentUrl.searchParams.has(nestedCrossDomainAuthQueryParams.refreshTokenId);
488
492
  }
489
493
  _getOAuthCallbackRedirectUri() {
490
- if (!this._isOAuthCallbackUrlHosted()) return this.urls.oauthCallback;
494
+ if (!this._isOAuthCallbackUrlHosted()) return this._getUrls().oauthCallback;
491
495
  if (typeof window === "undefined") throw new _hexclave_shared_dist_utils_errors.HexclaveAssertionError("Hosted OAuth callback URLs require a browser environment to use the current URL as the redirect URI");
492
496
  const currentUrl = new URL(window.location.href);
493
497
  for (const param of oauthCallbackResponseQueryParams) currentUrl.searchParams.delete(param);
@@ -1007,6 +1011,8 @@ var _HexclaveClientAppImplIncomplete = class _HexclaveClientAppImplIncomplete {
1007
1011
  return {
1008
1012
  id: crud.id,
1009
1013
  displayName: crud.display_name,
1014
+ pushedConfigError: crud.pushed_config_error == null ? null : { message: crud.pushed_config_error.message },
1015
+ configWarnings: crud.config_warnings.map((warning) => ({ message: warning.message })),
1010
1016
  config: {
1011
1017
  signUpEnabled: crud.config.sign_up_enabled,
1012
1018
  credentialEnabled: crud.config.credential_enabled,
@@ -1991,10 +1997,10 @@ var _HexclaveClientAppImplIncomplete = class _HexclaveClientAppImplIncomplete {
1991
1997
  return await this._redirectToHandler("mfa", options);
1992
1998
  }
1993
1999
  async sendForgotPasswordEmail(email, options) {
1994
- return await this._interface.sendForgotPasswordEmail(email, options?.callbackUrl ?? (0, ____________utils_url_js.constructRedirectUrl)(this.urls.passwordReset, "callbackUrl"));
2000
+ return await this._interface.sendForgotPasswordEmail(email, options?.callbackUrl ?? (0, ____________utils_url_js.constructRedirectUrl)(this._getUrls().passwordReset, "callbackUrl"));
1995
2001
  }
1996
2002
  async sendMagicLinkEmail(email, options) {
1997
- const callbackUrl = options?.callbackUrl ?? (0, ____________utils_url_js.constructRedirectUrl)(this.urls.magicLinkCallback, "callbackUrl");
2003
+ const callbackUrl = options?.callbackUrl ?? (0, ____________utils_url_js.constructRedirectUrl)(this._getUrls().magicLinkCallback, "callbackUrl");
1998
2004
  return await this._executeResultWithBotChallengeFlow({
1999
2005
  action: "send_magic_link_email",
2000
2006
  execute: async (challenge) => {
@@ -2134,7 +2140,7 @@ var _HexclaveClientAppImplIncomplete = class _HexclaveClientAppImplIncomplete {
2134
2140
  return await this._interface.authorizeOAuth({
2135
2141
  provider,
2136
2142
  redirectUrl: (0, ____________utils_url_js.constructRedirectUrl)(this._getOAuthCallbackRedirectUri(), "redirectUrl"),
2137
- errorRedirectUrl: (0, ____________utils_url_js.constructRedirectUrl)(this.urls.error, "errorRedirectUrl"),
2143
+ errorRedirectUrl: (0, ____________utils_url_js.constructRedirectUrl)(this._getUrls().error, "errorRedirectUrl"),
2138
2144
  afterCallbackRedirectUrl,
2139
2145
  type: "authenticate",
2140
2146
  providerScope: this._oauthScopesOnSignIn[provider]?.join(" "),
@@ -2207,7 +2213,7 @@ var _HexclaveClientAppImplIncomplete = class _HexclaveClientAppImplIncomplete {
2207
2213
  if (options.noVerificationCallback && options.verificationCallbackUrl) throw new _hexclave_shared_dist_utils_errors.HexclaveAssertionError("verificationCallbackUrl is not allowed when noVerificationCallback is true");
2208
2214
  this._ensurePersistentTokenStore();
2209
2215
  const session = await this._getSession();
2210
- const emailVerificationRedirectUrl = options.noVerificationCallback ? void 0 : options.verificationCallbackUrl ?? (0, ____________utils_url_js.constructRedirectUrl)(this.urls.emailVerification, "verificationCallbackUrl");
2216
+ const emailVerificationRedirectUrl = options.noVerificationCallback ? void 0 : options.verificationCallbackUrl ?? (0, ____________utils_url_js.constructRedirectUrl)(this._getUrls().emailVerification, "verificationCallbackUrl");
2211
2217
  const executeSignUp = async (challenge) => {
2212
2218
  let result = await this._interface.signUpWithCredential(options.email, options.password, emailVerificationRedirectUrl, session, this._toInterfaceBotChallengeInput(challenge));
2213
2219
  if (result.status === "error" && result.error instanceof _hexclave_shared.KnownErrors.RedirectUrlNotWhitelisted && emailVerificationRedirectUrl !== void 0) {
@@ -2301,7 +2307,7 @@ var _HexclaveClientAppImplIncomplete = class _HexclaveClientAppImplIncomplete {
2301
2307
  const pollingCode = initResult.polling_code;
2302
2308
  const loginCode = initResult.login_code;
2303
2309
  const url = (0, ______url_targets_js.buildCliAuthConfirmUrl)({
2304
- cliAuthConfirmUrl: this.urls.cliAuthConfirm,
2310
+ cliAuthConfirmUrl: this._getUrls().cliAuthConfirm,
2305
2311
  appUrl: options.appUrl,
2306
2312
  loginCode
2307
2313
  });
@@ -2570,6 +2576,7 @@ var _HexclaveClientAppImplIncomplete = class _HexclaveClientAppImplIncomplete {
2570
2576
  sendRequest: async (path, requestOptions, requestType = "client") => {
2571
2577
  return await this._interface.sendClientRequest(path, requestOptions, await this._getSession(), requestType);
2572
2578
  },
2579
+ getUrls: () => this._getUrls(),
2573
2580
  getRedirectMethod: () => this._redirectMethod ?? (0, _hexclave_shared_dist_utils_errors.throwErr)("Redirect method should have been initialized in the Stack client app constructor"),
2574
2581
  redirectToUrl: async (url, options) => {
2575
2582
  await this._redirectTo({