@hexclave/next 1.0.93 → 1.0.94

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 (66) hide show
  1. package/dist/{admin-app-impl-PVoJQhtl.d.ts → admin-app-impl-Uk9FD5ef.d.ts} +7 -7
  2. package/dist/{admin-app-impl-PVoJQhtl.d.ts.map → admin-app-impl-Uk9FD5ef.d.ts.map} +1 -1
  3. package/dist/clickmap/clickmap-core.d.ts +1 -1
  4. package/dist/clickmap/index.d.ts +1 -1
  5. package/dist/{client-app-g3gQ078Q.d.ts → client-app-DViU7VSe.d.ts} +28 -25
  6. package/dist/{client-app-g3gQ078Q.d.ts.map → client-app-DViU7VSe.d.ts.map} +1 -1
  7. package/dist/components/selected-team-switcher.d.ts +1 -1
  8. package/dist/components/team-icon.d.ts +1 -1
  9. package/dist/components/team-switcher.d.ts +1 -1
  10. package/dist/components-page/account-settings/payments/payments-page.d.ts +1 -1
  11. package/dist/components-page/account-settings/teams/leave-team-section.d.ts +1 -1
  12. package/dist/components-page/account-settings/teams/team-api-keys-section.d.ts +1 -1
  13. package/dist/components-page/account-settings/teams/team-display-name-section.d.ts +1 -1
  14. package/dist/components-page/account-settings/teams/team-member-invitation-section.d.ts +1 -1
  15. package/dist/components-page/account-settings/teams/team-member-list-section.d.ts +1 -1
  16. package/dist/components-page/account-settings/teams/team-page.d.ts +1 -1
  17. package/dist/components-page/account-settings/teams/team-profile-image-section.d.ts +1 -1
  18. package/dist/components-page/account-settings/teams/team-profile-user-section.d.ts +1 -1
  19. package/dist/components-page/hexclave-handler-client.d.ts +1 -1
  20. package/dist/components-page/hexclave-handler.d.ts +1 -1
  21. package/dist/dev-tool/dev-tool-core.d.ts +1 -1
  22. package/dist/dev-tool/index.d.ts +1 -1
  23. package/dist/esm/index.d.ts +2 -2
  24. package/dist/esm/lib/hexclave-app/apps/implementations/admin-app-impl.d.ts +3 -3
  25. package/dist/esm/lib/hexclave-app/apps/implementations/admin-app-impl.d.ts.map +1 -1
  26. package/dist/esm/lib/hexclave-app/apps/implementations/admin-app-impl.js +13 -15
  27. package/dist/esm/lib/hexclave-app/apps/implementations/admin-app-impl.js.map +1 -1
  28. package/dist/esm/lib/hexclave-app/apps/implementations/client-app-impl.d.ts +2 -2
  29. package/dist/esm/lib/hexclave-app/apps/implementations/common.js +2 -2
  30. package/dist/esm/lib/hexclave-app/index.d.ts +2 -2
  31. package/dist/esm/lib/hexclave-app/projects/index.d.ts +27 -24
  32. package/dist/esm/lib/hexclave-app/projects/index.d.ts.map +1 -1
  33. package/dist/esm/lib/hexclave-app/projects/index.js.map +1 -1
  34. package/dist/{hexclave-provider-Bh_Bp-8K.d.ts → hexclave-provider-BgxFDn68.d.ts} +2 -2
  35. package/dist/{hexclave-provider-Bh_Bp-8K.d.ts.map → hexclave-provider-BgxFDn68.d.ts.map} +1 -1
  36. package/dist/{hooks-DhDTiWnb.d.ts → hooks-CoZaPgi_.d.ts} +2 -2
  37. package/dist/{hooks-DhDTiWnb.d.ts.map → hooks-CoZaPgi_.d.ts.map} +1 -1
  38. package/dist/{index-DXWuA5Zu.d.ts → index-BBOSkD39.d.ts} +4 -4
  39. package/dist/{index-DXWuA5Zu.d.ts.map → index-BBOSkD39.d.ts.map} +1 -1
  40. package/dist/index.d.ts +5 -5
  41. package/dist/lib/hexclave-app/apps/implementations/admin-app-impl.d.ts +1 -1
  42. package/dist/lib/hexclave-app/apps/implementations/admin-app-impl.js +13 -15
  43. package/dist/lib/hexclave-app/apps/implementations/admin-app-impl.js.map +1 -1
  44. package/dist/lib/hexclave-app/apps/implementations/client-app-impl.d.ts +1 -1
  45. package/dist/lib/hexclave-app/apps/implementations/common.js +2 -2
  46. package/dist/lib/hexclave-app/apps/implementations/index.d.ts +1 -1
  47. package/dist/lib/hexclave-app/apps/implementations/server-app-impl.d.ts +1 -1
  48. package/dist/lib/hexclave-app/apps/index.d.ts +1 -1
  49. package/dist/lib/hexclave-app/apps/interfaces/admin-app.d.ts +1 -1
  50. package/dist/lib/hexclave-app/apps/interfaces/client-app.d.ts +1 -1
  51. package/dist/lib/hexclave-app/apps/interfaces/server-app.d.ts +1 -1
  52. package/dist/lib/hexclave-app/index.d.ts +2 -2
  53. package/dist/lib/hexclave-app/projects/index.d.ts +2 -2
  54. package/dist/lib/hexclave-app/projects/index.js.map +1 -1
  55. package/dist/lib/hexclave-app/teams/index.d.ts +1 -1
  56. package/dist/lib/hexclave-app/users/index.d.ts +1 -1
  57. package/dist/lib/hooks.d.ts +1 -1
  58. package/dist/providers/hexclave-context.d.ts +1 -1
  59. package/dist/providers/hexclave-provider-client.d.ts +1 -1
  60. package/dist/providers/hexclave-provider.d.ts +1 -1
  61. package/dist/pushed-config-error-overlay/index.d.ts +1 -1
  62. package/package.json +4 -4
  63. package/src/index.ts +12 -0
  64. package/src/lib/hexclave-app/apps/implementations/admin-app-impl.ts +13 -15
  65. package/src/lib/hexclave-app/index.ts +3 -3
  66. package/src/lib/hexclave-app/projects/index.ts +27 -23
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../src/lib/hexclave-app/projects/index.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 { ProductionModeError } from \"@hexclave/shared/dist/helpers/production-mode\";\nimport { AdminUserProjectsCrud, ProjectsCrud } from \"@hexclave/shared/dist/interface/crud/projects\";\nimport { ProjectOnboardingStatus } from \"@hexclave/shared/dist/schema-fields\";\n\nimport { CompleteConfig, EnvironmentConfigNormalizedOverride, EnvironmentConfigOverrideOverride } from \"@hexclave/shared/dist/config/schema\";\nimport type { AdminDeploymentDomainJson, AdminDeploymentEnvVarOptions, AdminDeploymentRunJson, AdminDeploymentServiceBuildOptions, AdminDeploymentServiceJson } from \"@hexclave/shared/dist/interface/admin-interface\";\nimport { StackAdminApp } from \"../apps/interfaces/admin-app\";\nimport { AdminProjectConfig, AdminProjectConfigUpdateOptions, ProjectConfig } from \"../project-configs\";\n\nexport type { AdminDeploymentDomainJson, AdminDeploymentEnvVarJson, AdminDeploymentEnvVarOptions, AdminDeploymentRunJson, AdminDeploymentServiceBuildOptions, AdminDeploymentServiceJson } from \"@hexclave/shared/dist/interface/admin-interface\";\n\n/**\n * SDK type for pushed config source (camelCase for SDK).\n * Represents where the branch config was pushed from.\n */\nexport type PushedConfigSource =\n | { type: \"pushed-from-github\", owner: string, repo: string, branch: string, commitHash: string, configFilePath: string, workflowPath?: string }\n | { type: \"pushed-from-unknown\" }\n | { type: \"unlinked\" };\n\nexport type PushConfigOptions = {\n /**\n * The source of this config push.\n */\n source: PushedConfigSource,\n};\n\n\nexport type Project = {\n readonly id: string,\n readonly displayName: string,\n readonly isDevelopmentEnvironment: boolean,\n readonly pushedConfigError: { message: string } | null,\n readonly configWarnings: { message: string }[],\n readonly config: ProjectConfig,\n};\n\nexport type AdminProject = {\n readonly id: string,\n readonly displayName: string,\n readonly description: string | null,\n readonly createdAt: Date,\n readonly isProductionMode: boolean,\n readonly isDevelopmentEnvironment: boolean,\n readonly ownerTeamId: string | null,\n readonly onboardingStatus: ProjectOnboardingStatus,\n readonly onboardingState: NonNullable<ProjectsCrud[\"Admin\"][\"Read\"][\"onboarding_state\"]> | null,\n readonly logoUrl: string | null | undefined,\n readonly logoFullUrl: string | null | undefined,\n readonly logoDarkModeUrl: string | null | undefined,\n readonly logoFullDarkModeUrl: string | null | undefined,\n\n readonly config: AdminProjectConfig,\n\n update(this: AdminProject, update: AdminProjectUpdateOptions): Promise<void>,\n delete(this: AdminProject): Promise<void>,\n\n getConfig(this: AdminProject): Promise<CompleteConfig>,\n useConfig(this: AdminProject): CompleteConfig,\n\n /**\n * Updates the environment's config by merging the provided config into the existing config.\n *\n * Changes made with `updateConfig` always take precedence over those made with `pushConfig`, even if the `pushConfig`\n * config was pushed after the changes were made with `updateConfig`. This is best for environment-specific\n * configuration like secrets, API keys, and other values that you wouldn't push into a source repository.\n */\n // We have some strict types here in order to prevent accidental overwriting of a top-level property of a config object\n updateConfig(\n this: AdminProject,\n config: EnvironmentConfigOverrideOverride,\n ): Promise<void>,\n\n /**\n * Pushes a config, replacing any previous config pushed with `pushConfig`.\n *\n * **Note:** This function does **not** replace any changes made with `updateConfig`. Changes made with\n * `updateConfig` always take precedence over those made with `pushConfig`, even if the `pushConfig`\n * config was pushed after the changes were made with `updateConfig`.\n *\n * This is useful for programmatically deploying configuration. More often than not, you'll want to use\n * `updateConfig` instead.\n */\n pushConfig(\n this: AdminProject,\n config: EnvironmentConfigOverrideOverride,\n options: PushConfigOptions,\n ): Promise<void>,\n\n /**\n * Updates the pushed config by merging the provided config into the existing pushed config.\n *\n * **Warning:** This is almost always **not** the function you want to call. Changes made with\n * `updatePushedConfig` will be replaced entirely the next time `pushConfig` is called. Consider using\n * `pushConfig` to set the full pushed config, or `updateConfig` for environment-specific values that\n * should persist across pushes.\n *\n * This function is useful for making temporary modifications to the pushed config before the next push.\n */\n updatePushedConfig(\n this: AdminProject,\n config: EnvironmentConfigOverrideOverride\n ): Promise<void>,\n\n /**\n * Gets the source metadata for the pushed config, indicating where it was pushed from.\n *\n * The source can be:\n * - `pushed-from-github`: Config was pushed from a GitHub repository\n * - `pushed-from-unknown`: Config was pushed via CLI but source details unknown\n * - `unlinked`: Config can be edited directly on the dashboard\n */\n getPushedConfigSource(this: AdminProject): Promise<PushedConfigSource>,\n\n /**\n * Unlinks the pushed config source, setting it to \"unlinked\".\n * This allows the config to be edited directly on the dashboard without external push restrictions.\n */\n unlinkPushedConfigSource(this: AdminProject): Promise<void>,\n\n /**\n * Resets (removes) specific keys from the config override at the specified level.\n * Uses the same nested key logic as the override algorithm: resetting key \"a.b\" also resets \"a.b.c\".\n *\n * This is useful when updating the pushed config (branch level) and wanting to remove the same keys\n * from the environment config override so that the branch config values take precedence.\n */\n resetConfigOverrideKeys(this: AdminProject, level: \"branch\" | \"environment\", keys: string[]): Promise<void>,\n\n /**\n * Gets the raw config override at the specified level (before merging/defaults).\n * Useful for inspecting exactly what's been set at each level.\n */\n getConfigOverride(this: AdminProject, level: \"branch\" | \"environment\"): Promise<Record<string, unknown>>,\n\n /**\n * Replaces the entire config override at the specified level.\n * For branch level, preserves the existing source metadata.\n */\n replaceConfigOverride(this: AdminProject, level: \"branch\" | \"environment\", config: Record<string, unknown>): Promise<void>,\n\n getProductionModeErrors(this: AdminProject): Promise<ProductionModeError[]>,\n useProductionModeErrors(this: AdminProject): ProductionModeError[],\n\n /**\n * Lists the project's deployment services (definitions from the config,\n * merged with their operational state: deploy status, env vars, domains).\n */\n listDeploymentServices(this: AdminProject): Promise<AdminDeploymentServiceJson[]>,\n\n /**\n * Creates a new deployment service definition. Only available when the\n * project's config source is the dashboard (`unlinked`).\n */\n createDeploymentService(this: AdminProject, id: string, build: AdminDeploymentServiceBuildOptions): Promise<AdminDeploymentServiceJson>,\n\n /**\n * Updates a deployment service definition. Env vars are part of the\n * definition, so like the build fields they require the config source to be\n * the dashboard (`unlinked`); `env` replaces the service's whole env var\n * set. Secret env var VALUES are never set here — they are supplied at\n * deploy time via `hexclave deploy --secret <key>=<value>`.\n */\n updateDeploymentService(this: AdminProject, serviceId: string, update: AdminDeploymentServiceBuildOptions & {\n env?: Record<string, AdminDeploymentEnvVarOptions>,\n }): Promise<AdminDeploymentServiceJson>,\n\n /**\n * Deletes a deployment service, including its provisioned deployment target.\n * Only available when the project's config source is the dashboard.\n */\n deleteDeploymentService(this: AdminProject, serviceId: string): Promise<void>,\n\n /**\n * Lists the most recent deployment runs of a service, newest first.\n */\n listDeploymentRuns(this: AdminProject, serviceId: string, options?: { limit?: number }): Promise<AdminDeploymentRunJson[]>,\n\n /**\n * Returns the build logs of a deployment run collected so far (the server\n * follows a running build for a while before returning).\n */\n getDeploymentRunLogs(this: AdminProject, runId: string, options?: { signal?: AbortSignal }): Promise<string>,\n\n /**\n * Adds a custom domain to a deployment service.\n */\n addDeploymentServiceDomain(this: AdminProject, serviceId: string, hostname: string, options?: { isPrimary?: boolean }): Promise<void>,\n\n /**\n * Returns a domain's verification state and the DNS records the user must\n * create. Poll this until `verified` is true.\n */\n getDeploymentServiceDomain(this: AdminProject, serviceId: string, hostname: string): Promise<AdminDeploymentDomainJson>,\n\n /**\n * Removes a custom domain from a deployment service.\n */\n deleteDeploymentServiceDomain(this: AdminProject, serviceId: string, hostname: string): Promise<void>,\n} & Project;\n\nexport type AdminOwnedProject = {\n readonly app: StackAdminApp<false>,\n} & AdminProject;\n\nexport type AdminProjectUpdateOptions = {\n displayName?: string,\n description?: string,\n isProductionMode?: boolean,\n onboardingStatus?: ProjectOnboardingStatus,\n /**\n * Updates `project.requirePublishableClientKey` in the project-level config override.\n */\n requirePublishableClientKey?: boolean,\n logoUrl?: string | null,\n logoFullUrl?: string | null,\n logoDarkModeUrl?: string | null,\n logoFullDarkModeUrl?: string | null,\n config?: AdminProjectConfigUpdateOptions,\n};\nexport function adminProjectUpdateOptionsToCrud(options: AdminProjectUpdateOptions): ProjectsCrud[\"Admin\"][\"Update\"] {\n return {\n display_name: options.displayName,\n description: options.description,\n is_production_mode: options.isProductionMode,\n onboarding_status: options.onboardingStatus,\n logo_url: options.logoUrl,\n logo_full_url: options.logoFullUrl,\n logo_dark_mode_url: options.logoDarkModeUrl,\n logo_full_dark_mode_url: options.logoFullDarkModeUrl,\n /**\n * NOTE: Do not update this config anymore. It's been superseded by the new config in schema.ts.\n * @deprecated\n */\n config: {\n domains: options.config?.domains?.map((d) => ({\n domain: d.domain,\n handler_path: d.handlerPath\n })),\n oauth_providers: options.config?.oauthProviders\n ?.filter((p): p is Exclude<typeof p, { type: 'custom_oidc' }> => p.type !== 'custom_oidc')\n .map((p) => ({\n id: p.id as any,\n type: p.type,\n ...(p.type === 'standard' && {\n client_id: p.clientId,\n client_secret: p.clientSecret,\n facebook_config_id: p.facebookConfigId,\n microsoft_tenant_id: p.microsoftTenantId,\n apple_team_id: p.appleTeamId,\n apple_key_id: p.appleKeyId,\n apple_private_key: p.applePrivateKey,\n apple_bundle_ids: p.appleBundleIds,\n }),\n })),\n email_config: options.config?.emailConfig && (\n options.config.emailConfig.type === 'shared' ? {\n type: 'shared',\n } : {\n type: 'standard',\n host: options.config.emailConfig.host,\n port: options.config.emailConfig.port,\n username: options.config.emailConfig.username,\n password: options.config.emailConfig.password,\n sender_name: options.config.emailConfig.senderName,\n sender_email: options.config.emailConfig.senderEmail,\n }\n ),\n email_theme: options.config?.emailTheme,\n sign_up_enabled: options.config?.signUpEnabled,\n credential_enabled: options.config?.credentialEnabled,\n magic_link_enabled: options.config?.magicLinkEnabled,\n passkey_enabled: options.config?.passkeyEnabled,\n allow_localhost: options.config?.allowLocalhost,\n create_team_on_sign_up: options.config?.createTeamOnSignUp,\n client_team_creation_enabled: options.config?.clientTeamCreationEnabled,\n client_user_deletion_enabled: options.config?.clientUserDeletionEnabled,\n team_creator_default_permissions: options.config?.teamCreatorDefaultPermissions,\n team_member_default_permissions: options.config?.teamMemberDefaultPermissions,\n user_default_permissions: options.config?.userDefaultPermissions,\n oauth_account_merge_strategy: options.config?.oauthAccountMergeStrategy,\n allow_user_api_keys: options.config?.allowUserApiKeys,\n allow_team_api_keys: options.config?.allowTeamApiKeys,\n },\n };\n}\n\nexport type AdminProjectCreateOptions = Omit<AdminProjectUpdateOptions, 'displayName'> & {\n displayName: string,\n teamId: string,\n isDevelopmentEnvironment?: boolean,\n};\nexport function adminProjectCreateOptionsToCrud(options: AdminProjectCreateOptions): AdminUserProjectsCrud[\"Server\"][\"Create\"] {\n return {\n ...adminProjectUpdateOptionsToCrud(options),\n display_name: options.displayName,\n is_development_environment: options.isDevelopmentEnvironment,\n owner_team_id: options.teamId,\n };\n}\n"],"mappings":";;AAgOA,SAAgB,gCAAgC,SAAqE;CACnH,OAAO;EACL,cAAc,QAAQ;EACtB,aAAa,QAAQ;EACrB,oBAAoB,QAAQ;EAC5B,mBAAmB,QAAQ;EAC3B,UAAU,QAAQ;EAClB,eAAe,QAAQ;EACvB,oBAAoB,QAAQ;EAC5B,yBAAyB,QAAQ;;;;;EAKjC,QAAQ;GACN,SAAS,QAAQ,QAAQ,SAAS,KAAK,OAAO;IAC5C,QAAQ,EAAE;IACV,cAAc,EAAE;GAClB,EAAE;GACF,iBAAiB,QAAQ,QAAQ,gBAC7B,QAAQ,MAAuD,EAAE,SAAS,aAAa,CAAC,CACzF,KAAK,OAAO;IACX,IAAI,EAAE;IACN,MAAM,EAAE;IACR,GAAI,EAAE,SAAS,cAAc;KAC3B,WAAW,EAAE;KACb,eAAe,EAAE;KACjB,oBAAoB,EAAE;KACtB,qBAAqB,EAAE;KACvB,eAAe,EAAE;KACjB,cAAc,EAAE;KAChB,mBAAmB,EAAE;KACrB,kBAAkB,EAAE;IACtB;GACF,EAAE;GACJ,cAAc,QAAQ,QAAQ,gBAC5B,QAAQ,OAAO,YAAY,SAAS,WAAW,EAC7C,MAAM,SACR,IAAI;IACF,MAAM;IACN,MAAM,QAAQ,OAAO,YAAY;IACjC,MAAM,QAAQ,OAAO,YAAY;IACjC,UAAU,QAAQ,OAAO,YAAY;IACrC,UAAU,QAAQ,OAAO,YAAY;IACrC,aAAa,QAAQ,OAAO,YAAY;IACxC,cAAc,QAAQ,OAAO,YAAY;GAC3C;GAEF,aAAa,QAAQ,QAAQ;GAC7B,iBAAiB,QAAQ,QAAQ;GACjC,oBAAoB,QAAQ,QAAQ;GACpC,oBAAoB,QAAQ,QAAQ;GACpC,iBAAiB,QAAQ,QAAQ;GACjC,iBAAiB,QAAQ,QAAQ;GACjC,wBAAwB,QAAQ,QAAQ;GACxC,8BAA8B,QAAQ,QAAQ;GAC9C,8BAA8B,QAAQ,QAAQ;GAC9C,kCAAkC,QAAQ,QAAQ;GAClD,iCAAiC,QAAQ,QAAQ;GACjD,0BAA0B,QAAQ,QAAQ;GAC1C,8BAA8B,QAAQ,QAAQ;GAC9C,qBAAqB,QAAQ,QAAQ;GACrC,qBAAqB,QAAQ,QAAQ;EACvC;CACF;AACF;AAOA,SAAgB,gCAAgC,SAA+E;CAC7H,OAAO;EACL,GAAG,gCAAgC,OAAO;EAC1C,cAAc,QAAQ;EACtB,4BAA4B,QAAQ;EACpC,eAAe,QAAQ;CACzB;AACF"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/lib/hexclave-app/projects/index.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 { ProductionModeError } from \"@hexclave/shared/dist/helpers/production-mode\";\nimport { AdminUserProjectsCrud, ProjectsCrud } from \"@hexclave/shared/dist/interface/crud/projects\";\nimport { ProjectOnboardingStatus } from \"@hexclave/shared/dist/schema-fields\";\n\nimport { CompleteConfig, EnvironmentConfigNormalizedOverride, EnvironmentConfigOverrideOverride } from \"@hexclave/shared/dist/config/schema\";\nimport type { AdminDeploymentDomainJson, AdminDeploymentJson, AdminDeploymentServiceOutcomeJson, AdminProjectSecretJson, AdminDeploymentServiceJson } from \"@hexclave/shared/dist/interface/admin-interface\";\nimport { StackAdminApp } from \"../apps/interfaces/admin-app\";\nimport { AdminProjectConfig, AdminProjectConfigUpdateOptions, ProjectConfig } from \"../project-configs\";\n\nexport type { AdminDeploymentDomainJson, AdminDeploymentEnvVarJson, AdminDeploymentJson, AdminDeploymentServiceOutcomeJson, AdminProjectSecretJson, AdminDeploymentServiceJson } from \"@hexclave/shared/dist/interface/admin-interface\";\n\n/**\n * SDK type for pushed config source (camelCase for SDK).\n * Represents where the branch config was pushed from.\n */\nexport type PushedConfigSource =\n | { type: \"pushed-from-github\", owner: string, repo: string, branch: string, commitHash: string, configFilePath: string, workflowPath?: string }\n | { type: \"pushed-from-unknown\" }\n | { type: \"unlinked\" };\n\nexport type PushConfigOptions = {\n /**\n * The source of this config push.\n */\n source: PushedConfigSource,\n};\n\n\nexport type Project = {\n readonly id: string,\n readonly displayName: string,\n readonly isDevelopmentEnvironment: boolean,\n readonly pushedConfigError: { message: string } | null,\n readonly configWarnings: { message: string }[],\n readonly config: ProjectConfig,\n};\n\nexport type AdminProject = {\n readonly id: string,\n readonly displayName: string,\n readonly description: string | null,\n readonly createdAt: Date,\n readonly isProductionMode: boolean,\n readonly isDevelopmentEnvironment: boolean,\n readonly ownerTeamId: string | null,\n readonly onboardingStatus: ProjectOnboardingStatus,\n readonly onboardingState: NonNullable<ProjectsCrud[\"Admin\"][\"Read\"][\"onboarding_state\"]> | null,\n readonly logoUrl: string | null | undefined,\n readonly logoFullUrl: string | null | undefined,\n readonly logoDarkModeUrl: string | null | undefined,\n readonly logoFullDarkModeUrl: string | null | undefined,\n\n readonly config: AdminProjectConfig,\n\n update(this: AdminProject, update: AdminProjectUpdateOptions): Promise<void>,\n delete(this: AdminProject): Promise<void>,\n\n getConfig(this: AdminProject): Promise<CompleteConfig>,\n useConfig(this: AdminProject): CompleteConfig,\n\n /**\n * Updates the environment's config by merging the provided config into the existing config.\n *\n * Changes made with `updateConfig` always take precedence over those made with `pushConfig`, even if the `pushConfig`\n * config was pushed after the changes were made with `updateConfig`. This is best for environment-specific\n * configuration like secrets, API keys, and other values that you wouldn't push into a source repository.\n */\n // We have some strict types here in order to prevent accidental overwriting of a top-level property of a config object\n updateConfig(\n this: AdminProject,\n config: EnvironmentConfigOverrideOverride,\n ): Promise<void>,\n\n /**\n * Pushes a config, replacing any previous config pushed with `pushConfig`.\n *\n * **Note:** This function does **not** replace any changes made with `updateConfig`. Changes made with\n * `updateConfig` always take precedence over those made with `pushConfig`, even if the `pushConfig`\n * config was pushed after the changes were made with `updateConfig`.\n *\n * This is useful for programmatically deploying configuration. More often than not, you'll want to use\n * `updateConfig` instead.\n */\n pushConfig(\n this: AdminProject,\n config: EnvironmentConfigOverrideOverride,\n options: PushConfigOptions,\n ): Promise<void>,\n\n /**\n * Updates the pushed config by merging the provided config into the existing pushed config.\n *\n * **Warning:** This is almost always **not** the function you want to call. Changes made with\n * `updatePushedConfig` will be replaced entirely the next time `pushConfig` is called. Consider using\n * `pushConfig` to set the full pushed config, or `updateConfig` for environment-specific values that\n * should persist across pushes.\n *\n * This function is useful for making temporary modifications to the pushed config before the next push.\n */\n updatePushedConfig(\n this: AdminProject,\n config: EnvironmentConfigOverrideOverride\n ): Promise<void>,\n\n /**\n * Gets the source metadata for the pushed config, indicating where it was pushed from.\n *\n * The source can be:\n * - `pushed-from-github`: Config was pushed from a GitHub repository\n * - `pushed-from-unknown`: Config was pushed via CLI but source details unknown\n * - `unlinked`: Config can be edited directly on the dashboard\n */\n getPushedConfigSource(this: AdminProject): Promise<PushedConfigSource>,\n\n /**\n * Unlinks the pushed config source, setting it to \"unlinked\".\n * This allows the config to be edited directly on the dashboard without external push restrictions.\n */\n unlinkPushedConfigSource(this: AdminProject): Promise<void>,\n\n /**\n * Resets (removes) specific keys from the config override at the specified level.\n * Uses the same nested key logic as the override algorithm: resetting key \"a.b\" also resets \"a.b.c\".\n *\n * This is useful when updating the pushed config (branch level) and wanting to remove the same keys\n * from the environment config override so that the branch config values take precedence.\n */\n resetConfigOverrideKeys(this: AdminProject, level: \"branch\" | \"environment\", keys: string[]): Promise<void>,\n\n /**\n * Gets the raw config override at the specified level (before merging/defaults).\n * Useful for inspecting exactly what's been set at each level.\n */\n getConfigOverride(this: AdminProject, level: \"branch\" | \"environment\"): Promise<Record<string, unknown>>,\n\n /**\n * Replaces the entire config override at the specified level.\n * For branch level, preserves the existing source metadata.\n */\n replaceConfigOverride(this: AdminProject, level: \"branch\" | \"environment\", config: Record<string, unknown>): Promise<void>,\n\n getProductionModeErrors(this: AdminProject): Promise<ProductionModeError[]>,\n useProductionModeErrors(this: AdminProject): ProductionModeError[],\n\n /**\n * Lists the project's deployment services (definitions as synced from the\n * config file's `services` export by `hexclave deploy`, merged with their\n * operational state: deploy status, env vars, domains). Definitions are\n * read-only through the SDK — the config file is the source of truth.\n */\n listDeploymentServices(this: AdminProject): Promise<AdminDeploymentServiceJson[]>,\n\n /**\n * Lists the project's stored secrets (keys and timestamps only — values are\n * write-only and can never be read back).\n */\n listProjectSecrets(this: AdminProject): Promise<AdminProjectSecretJson[]>,\n\n /**\n * Sets (or overwrites) the value of a project secret. Values are only read\n * server-side by the feature that consumes them — today, a deploy filling\n * `secret()` env vars.\n */\n setProjectSecret(this: AdminProject, key: string, value: string): Promise<void>,\n\n /**\n * Deletes a stored project secret value.\n */\n deleteProjectSecret(this: AdminProject, key: string): Promise<void>,\n\n /**\n * Lists the project's deployments (one per `hexclave deploy`) newest first,\n * each with the services it deployed and their runs.\n */\n listDeployments(this: AdminProject, options?: { limit?: number }): Promise<AdminDeploymentJson[]>,\n\n /**\n * Reads one deployment, including what each of its services did.\n */\n getDeployment(this: AdminProject, deploymentId: string): Promise<AdminDeploymentJson>,\n\n /**\n * Returns the build logs of a deployment collected so far (the server follows\n * a running build for a while before returning). One deploy is one build, so\n * one log covers every service it shipped.\n */\n getDeploymentBuildLogs(this: AdminProject, deploymentId: string, options?: { signal?: AbortSignal }): Promise<string>,\n\n /**\n * Adds a custom domain to a deployment service.\n */\n addDeploymentServiceDomain(this: AdminProject, serviceId: string, hostname: string, options?: { isPrimary?: boolean }): Promise<void>,\n\n /**\n * Returns a domain's verification state and the DNS records the user must\n * create. Poll this until `verified` is true.\n */\n getDeploymentServiceDomain(this: AdminProject, serviceId: string, hostname: string): Promise<AdminDeploymentDomainJson>,\n\n /**\n * Removes a custom domain from a deployment service.\n */\n deleteDeploymentServiceDomain(this: AdminProject, serviceId: string, hostname: string): Promise<void>,\n} & Project;\n\nexport type AdminOwnedProject = {\n readonly app: StackAdminApp<false>,\n} & AdminProject;\n\nexport type AdminProjectUpdateOptions = {\n displayName?: string,\n description?: string,\n isProductionMode?: boolean,\n onboardingStatus?: ProjectOnboardingStatus,\n /**\n * Updates `project.requirePublishableClientKey` in the project-level config override.\n */\n requirePublishableClientKey?: boolean,\n logoUrl?: string | null,\n logoFullUrl?: string | null,\n logoDarkModeUrl?: string | null,\n logoFullDarkModeUrl?: string | null,\n config?: AdminProjectConfigUpdateOptions,\n};\nexport function adminProjectUpdateOptionsToCrud(options: AdminProjectUpdateOptions): ProjectsCrud[\"Admin\"][\"Update\"] {\n return {\n display_name: options.displayName,\n description: options.description,\n is_production_mode: options.isProductionMode,\n onboarding_status: options.onboardingStatus,\n logo_url: options.logoUrl,\n logo_full_url: options.logoFullUrl,\n logo_dark_mode_url: options.logoDarkModeUrl,\n logo_full_dark_mode_url: options.logoFullDarkModeUrl,\n /**\n * NOTE: Do not update this config anymore. It's been superseded by the new config in schema.ts.\n * @deprecated\n */\n config: {\n domains: options.config?.domains?.map((d) => ({\n domain: d.domain,\n handler_path: d.handlerPath\n })),\n oauth_providers: options.config?.oauthProviders\n ?.filter((p): p is Exclude<typeof p, { type: 'custom_oidc' }> => p.type !== 'custom_oidc')\n .map((p) => ({\n id: p.id as any,\n type: p.type,\n ...(p.type === 'standard' && {\n client_id: p.clientId,\n client_secret: p.clientSecret,\n facebook_config_id: p.facebookConfigId,\n microsoft_tenant_id: p.microsoftTenantId,\n apple_team_id: p.appleTeamId,\n apple_key_id: p.appleKeyId,\n apple_private_key: p.applePrivateKey,\n apple_bundle_ids: p.appleBundleIds,\n }),\n })),\n email_config: options.config?.emailConfig && (\n options.config.emailConfig.type === 'shared' ? {\n type: 'shared',\n } : {\n type: 'standard',\n host: options.config.emailConfig.host,\n port: options.config.emailConfig.port,\n username: options.config.emailConfig.username,\n password: options.config.emailConfig.password,\n sender_name: options.config.emailConfig.senderName,\n sender_email: options.config.emailConfig.senderEmail,\n }\n ),\n email_theme: options.config?.emailTheme,\n sign_up_enabled: options.config?.signUpEnabled,\n credential_enabled: options.config?.credentialEnabled,\n magic_link_enabled: options.config?.magicLinkEnabled,\n passkey_enabled: options.config?.passkeyEnabled,\n allow_localhost: options.config?.allowLocalhost,\n create_team_on_sign_up: options.config?.createTeamOnSignUp,\n client_team_creation_enabled: options.config?.clientTeamCreationEnabled,\n client_user_deletion_enabled: options.config?.clientUserDeletionEnabled,\n team_creator_default_permissions: options.config?.teamCreatorDefaultPermissions,\n team_member_default_permissions: options.config?.teamMemberDefaultPermissions,\n user_default_permissions: options.config?.userDefaultPermissions,\n oauth_account_merge_strategy: options.config?.oauthAccountMergeStrategy,\n allow_user_api_keys: options.config?.allowUserApiKeys,\n allow_team_api_keys: options.config?.allowTeamApiKeys,\n },\n };\n}\n\nexport type AdminProjectCreateOptions = Omit<AdminProjectUpdateOptions, 'displayName'> & {\n displayName: string,\n teamId: string,\n isDevelopmentEnvironment?: boolean,\n};\nexport function adminProjectCreateOptionsToCrud(options: AdminProjectCreateOptions): AdminUserProjectsCrud[\"Server\"][\"Create\"] {\n return {\n ...adminProjectUpdateOptionsToCrud(options),\n display_name: options.displayName,\n is_development_environment: options.isDevelopmentEnvironment,\n owner_team_id: options.teamId,\n };\n}\n"],"mappings":";;AAoOA,SAAgB,gCAAgC,SAAqE;CACnH,OAAO;EACL,cAAc,QAAQ;EACtB,aAAa,QAAQ;EACrB,oBAAoB,QAAQ;EAC5B,mBAAmB,QAAQ;EAC3B,UAAU,QAAQ;EAClB,eAAe,QAAQ;EACvB,oBAAoB,QAAQ;EAC5B,yBAAyB,QAAQ;;;;;EAKjC,QAAQ;GACN,SAAS,QAAQ,QAAQ,SAAS,KAAK,OAAO;IAC5C,QAAQ,EAAE;IACV,cAAc,EAAE;GAClB,EAAE;GACF,iBAAiB,QAAQ,QAAQ,gBAC7B,QAAQ,MAAuD,EAAE,SAAS,aAAa,CAAC,CACzF,KAAK,OAAO;IACX,IAAI,EAAE;IACN,MAAM,EAAE;IACR,GAAI,EAAE,SAAS,cAAc;KAC3B,WAAW,EAAE;KACb,eAAe,EAAE;KACjB,oBAAoB,EAAE;KACtB,qBAAqB,EAAE;KACvB,eAAe,EAAE;KACjB,cAAc,EAAE;KAChB,mBAAmB,EAAE;KACrB,kBAAkB,EAAE;IACtB;GACF,EAAE;GACJ,cAAc,QAAQ,QAAQ,gBAC5B,QAAQ,OAAO,YAAY,SAAS,WAAW,EAC7C,MAAM,SACR,IAAI;IACF,MAAM;IACN,MAAM,QAAQ,OAAO,YAAY;IACjC,MAAM,QAAQ,OAAO,YAAY;IACjC,UAAU,QAAQ,OAAO,YAAY;IACrC,UAAU,QAAQ,OAAO,YAAY;IACrC,aAAa,QAAQ,OAAO,YAAY;IACxC,cAAc,QAAQ,OAAO,YAAY;GAC3C;GAEF,aAAa,QAAQ,QAAQ;GAC7B,iBAAiB,QAAQ,QAAQ;GACjC,oBAAoB,QAAQ,QAAQ;GACpC,oBAAoB,QAAQ,QAAQ;GACpC,iBAAiB,QAAQ,QAAQ;GACjC,iBAAiB,QAAQ,QAAQ;GACjC,wBAAwB,QAAQ,QAAQ;GACxC,8BAA8B,QAAQ,QAAQ;GAC9C,8BAA8B,QAAQ,QAAQ;GAC9C,kCAAkC,QAAQ,QAAQ;GAClD,iCAAiC,QAAQ,QAAQ;GACjD,0BAA0B,QAAQ,QAAQ;GAC1C,8BAA8B,QAAQ,QAAQ;GAC9C,qBAAqB,QAAQ,QAAQ;GACrC,qBAAqB,QAAQ,QAAQ;EACvC;CACF;AACF;AAOA,SAAgB,gCAAgC,SAA+E;CAC7H,OAAO;EACL,GAAG,gCAAgC,OAAO;EAC1C,cAAc,QAAQ;EACtB,4BAA4B,QAAQ;EACpC,eAAe,QAAQ;CACzB;AACF"}
@@ -1,2 +1,2 @@
1
- import { $ as TeamCreateOptions, G as ServerListTeamsOptions, H as EditableTeamMemberProfile, J as ServerTeamCreateOptions, K as ServerListUsersOptions, Q as Team, U as ReceivedTeamInvitation, W as SentTeamInvitation, X as ServerTeamUpdateOptions, Y as ServerTeamMemberProfile, Z as ServerTeamUser, at as serverTeamCreateOptionsToCrud, ct as teamUpdateOptionsToCrud, et as TeamInvitation, it as TeamUser, nt as TeamMemberProfileUpdateOptions, ot as serverTeamUpdateOptionsToCrud, q as ServerTeam, rt as TeamUpdateOptions, st as teamCreateOptionsToCrud, tt as TeamMemberProfile } from "../../../client-app-g3gQ078Q.js";
1
+ import { $ as TeamCreateOptions, G as ServerListTeamsOptions, H as EditableTeamMemberProfile, J as ServerTeamCreateOptions, K as ServerListUsersOptions, Q as Team, U as ReceivedTeamInvitation, W as SentTeamInvitation, X as ServerTeamUpdateOptions, Y as ServerTeamMemberProfile, Z as ServerTeamUser, at as serverTeamCreateOptionsToCrud, ct as teamUpdateOptionsToCrud, et as TeamInvitation, it as TeamUser, nt as TeamMemberProfileUpdateOptions, ot as serverTeamUpdateOptionsToCrud, q as ServerTeam, rt as TeamUpdateOptions, st as teamCreateOptionsToCrud, tt as TeamMemberProfile } from "../../../client-app-DViU7VSe.js";
2
2
  export { EditableTeamMemberProfile, ReceivedTeamInvitation, SentTeamInvitation, ServerListTeamsOptions, ServerListUsersOptions, ServerTeam, ServerTeamCreateOptions, ServerTeamMemberProfile, ServerTeamUpdateOptions, ServerTeamUser, Team, TeamCreateOptions, TeamInvitation, TeamMemberProfile, TeamMemberProfileUpdateOptions, TeamUpdateOptions, TeamUser, serverTeamCreateOptionsToCrud, serverTeamUpdateOptionsToCrud, teamCreateOptionsToCrud, teamUpdateOptionsToCrud };
@@ -1,2 +1,2 @@
1
- import { At as UserUpdateOptions, Ct as ServerUserCreateOptions, Dt as TokenPartialUser, Et as SyncedPartialUser, Mt as serverUserUpdateOptionsToCrud, Nt as userUpdateOptionsToCrud, Ot as User, Pt as withUserDestructureGuard, St as ServerUser, Tt as SyncedPartialServerUser, _t as OAuthProvider, bt as ServerBaseUser, dt as BaseUser, ft as CurrentInternalServerUser, gt as InternalUserExtra, ht as CurrentUser, jt as serverUserCreateOptionsToCrud, kt as UserExtra, lt as ActiveSession, mt as CurrentServerUser, pt as CurrentInternalUser, ut as Auth, vt as ProjectCurrentServerUser, wt as ServerUserUpdateOptions, xt as ServerOAuthProvider, yt as ProjectCurrentUser } from "../../../client-app-g3gQ078Q.js";
1
+ import { At as UserUpdateOptions, Ct as ServerUserCreateOptions, Dt as TokenPartialUser, Et as SyncedPartialUser, Mt as serverUserUpdateOptionsToCrud, Nt as userUpdateOptionsToCrud, Ot as User, Pt as withUserDestructureGuard, St as ServerUser, Tt as SyncedPartialServerUser, _t as OAuthProvider, bt as ServerBaseUser, dt as BaseUser, ft as CurrentInternalServerUser, gt as InternalUserExtra, ht as CurrentUser, jt as serverUserCreateOptionsToCrud, kt as UserExtra, lt as ActiveSession, mt as CurrentServerUser, pt as CurrentInternalUser, ut as Auth, vt as ProjectCurrentServerUser, wt as ServerUserUpdateOptions, xt as ServerOAuthProvider, yt as ProjectCurrentUser } from "../../../client-app-DViU7VSe.js";
2
2
  export { ActiveSession, Auth, BaseUser, CurrentInternalServerUser, CurrentInternalUser, CurrentServerUser, CurrentUser, InternalUserExtra, OAuthProvider, ProjectCurrentServerUser, ProjectCurrentUser, ServerBaseUser, ServerOAuthProvider, ServerUser, ServerUserCreateOptions, ServerUserUpdateOptions, SyncedPartialServerUser, SyncedPartialUser, TokenPartialUser, User, UserExtra, UserUpdateOptions, serverUserCreateOptionsToCrud, serverUserUpdateOptionsToCrud, userUpdateOptionsToCrud, withUserDestructureGuard };
@@ -1,2 +1,2 @@
1
- import { n as useStackApp, r as useUser, t as useHexclaveApp } from "../hooks-DhDTiWnb.js";
1
+ import { n as useStackApp, r as useUser, t as useHexclaveApp } from "../hooks-CoZaPgi_.js";
2
2
  export { useHexclaveApp, useStackApp, useUser };
@@ -1,4 +1,4 @@
1
- import { a as StackClientApp } from "../client-app-g3gQ078Q.js";
1
+ import { a as StackClientApp } from "../client-app-DViU7VSe.js";
2
2
  import React from "react";
3
3
 
4
4
  //#region src/providers/hexclave-context.d.ts
@@ -1,4 +1,4 @@
1
- import { a as StackClientApp, c as StackClientAppJson } from "../client-app-g3gQ078Q.js";
1
+ import { a as StackClientApp, c as StackClientAppJson } from "../client-app-DViU7VSe.js";
2
2
  import { CurrentUserCrud } from "@hexclave/shared/dist/interface/crud/current-user";
3
3
  import React from "react";
4
4
 
@@ -1,2 +1,2 @@
1
- import { n as HexclaveProvider, r as StackProvider, t as ActiveProvider } from "../hexclave-provider-Bh_Bp-8K.js";
1
+ import { n as HexclaveProvider, r as StackProvider, t as ActiveProvider } from "../hexclave-provider-BgxFDn68.js";
2
2
  export { HexclaveProvider, StackProvider, ActiveProvider as default };
@@ -1,4 +1,4 @@
1
- import { a as StackClientApp } from "../client-app-g3gQ078Q.js";
1
+ import { a as StackClientApp } from "../client-app-DViU7VSe.js";
2
2
  //#region src/pushed-config-error-overlay/index.d.ts
3
3
  declare function mountPushedConfigErrorOverlay(app: StackClientApp<true>): () => void;
4
4
  //#endregion
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "//": "THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY UNLESS YOU ALSO EDIT THE CORRESPONDING FILE IN packages/template (FOR package.json FILES, PLEASE EDIT package-template.json)",
3
3
  "name": "@hexclave/next",
4
- "version": "1.0.93",
4
+ "version": "1.0.94",
5
5
  "repository": "https://github.com/hexclave/hexclave",
6
6
  "sideEffects": false,
7
7
  "main": "./dist/index.js",
@@ -74,9 +74,9 @@
74
74
  "tailwindcss-animate": "^1.0.7",
75
75
  "rrweb": "^1.1.3",
76
76
  "yup": "^1.7.1",
77
- "@hexclave/sc": "1.0.93",
78
- "@hexclave/shared": "1.0.93",
79
- "@hexclave/ui": "1.0.93"
77
+ "@hexclave/sc": "1.0.94",
78
+ "@hexclave/shared": "1.0.94",
79
+ "@hexclave/ui": "1.0.94"
80
80
  },
81
81
  "peerDependencies": {
82
82
  "@types/react": ">=18.0.0",
package/src/index.ts CHANGED
@@ -9,6 +9,18 @@ export { getConvexProvidersConfig } from "./integrations/convex";
9
9
  // (per-specifier JSDoc on re-exports does not).
10
10
  export type { HexclaveConfig, StackConfig } from "@hexclave/shared/config";
11
11
  export { defineHexclaveConfig, defineStackConfig } from "@hexclave/shared/config";
12
+ // The author-facing types for the config file's `deploy` export.
13
+ export type {
14
+ HexclaveDeploymentConfig,
15
+ HexclaveDeploymentContext,
16
+ HexclaveDeploymentReference,
17
+ HexclaveEnvVarValue,
18
+ HexclavePersistentVolume,
19
+ HexclaveServerService,
20
+ HexclaveServerlessService,
21
+ HexclaveService,
22
+ HexclaveServiceOutputs,
23
+ } from "@hexclave/shared/config";
12
24
 
13
25
  export type { AnalyticsOptions, AnalyticsReplayOptions } from "./lib/hexclave-app/apps/implementations/session-replay";
14
26
  // Hexclave aliases and legacy Stack* names — @deprecated JSDoc lives on the original
@@ -296,25 +296,23 @@ export class _HexclaveAdminAppImplIncomplete<HasTokenStore extends boolean, Proj
296
296
  async listDeploymentServices() {
297
297
  return await app._interface.listDeploymentServices();
298
298
  },
299
- async createDeploymentService(id, build) {
300
- const created = await app._interface.createDeploymentService(id, build);
301
- await app._refreshProjectConfig();
302
- return created;
299
+ async listProjectSecrets() {
300
+ return await app._interface.listProjectSecrets();
303
301
  },
304
- async updateDeploymentService(serviceId, update) {
305
- const updated = await app._interface.updateDeploymentService(serviceId, update);
306
- await app._refreshProjectConfig();
307
- return updated;
302
+ async setProjectSecret(key, value) {
303
+ await app._interface.setProjectSecret(key, value);
308
304
  },
309
- async deleteDeploymentService(serviceId) {
310
- await app._interface.deleteDeploymentService(serviceId);
311
- await app._refreshProjectConfig();
305
+ async deleteProjectSecret(key) {
306
+ await app._interface.deleteProjectSecret(key);
307
+ },
308
+ async listDeployments(options) {
309
+ return await app._interface.listDeployments(options);
312
310
  },
313
- async listDeploymentRuns(serviceId, options) {
314
- return await app._interface.listDeploymentRuns(serviceId, options);
311
+ async getDeployment(deploymentId) {
312
+ return await app._interface.getDeployment(deploymentId);
315
313
  },
316
- async getDeploymentRunLogs(runId, options) {
317
- return await app._interface.getDeploymentRunLogs(runId, options);
314
+ async getDeploymentBuildLogs(deploymentId, options) {
315
+ return await app._interface.getDeploymentBuildLogs(deploymentId, options);
318
316
  },
319
317
  async addDeploymentServiceDomain(serviceId, hostname, options) {
320
318
  await app._interface.addDeploymentServiceDomain(serviceId, hostname, options);
@@ -127,9 +127,9 @@ export type {
127
127
  export type {
128
128
  AdminDeploymentDomainJson,
129
129
  AdminDeploymentEnvVarJson,
130
- AdminDeploymentEnvVarOptions,
131
- AdminDeploymentRunJson,
132
- AdminDeploymentServiceBuildOptions,
130
+ AdminDeploymentJson,
131
+ AdminDeploymentServiceOutcomeJson,
132
+ AdminProjectSecretJson,
133
133
  AdminDeploymentServiceJson,
134
134
  AdminOwnedProject,
135
135
  AdminProject,
@@ -7,11 +7,11 @@ import { AdminUserProjectsCrud, ProjectsCrud } from "@hexclave/shared/dist/inter
7
7
  import { ProjectOnboardingStatus } from "@hexclave/shared/dist/schema-fields";
8
8
 
9
9
  import { CompleteConfig, EnvironmentConfigNormalizedOverride, EnvironmentConfigOverrideOverride } from "@hexclave/shared/dist/config/schema";
10
- import type { AdminDeploymentDomainJson, AdminDeploymentEnvVarOptions, AdminDeploymentRunJson, AdminDeploymentServiceBuildOptions, AdminDeploymentServiceJson } from "@hexclave/shared/dist/interface/admin-interface";
10
+ import type { AdminDeploymentDomainJson, AdminDeploymentJson, AdminDeploymentServiceOutcomeJson, AdminProjectSecretJson, AdminDeploymentServiceJson } from "@hexclave/shared/dist/interface/admin-interface";
11
11
  import { StackAdminApp } from "../apps/interfaces/admin-app";
12
12
  import { AdminProjectConfig, AdminProjectConfigUpdateOptions, ProjectConfig } from "../project-configs";
13
13
 
14
- export type { AdminDeploymentDomainJson, AdminDeploymentEnvVarJson, AdminDeploymentEnvVarOptions, AdminDeploymentRunJson, AdminDeploymentServiceBuildOptions, AdminDeploymentServiceJson } from "@hexclave/shared/dist/interface/admin-interface";
14
+ export type { AdminDeploymentDomainJson, AdminDeploymentEnvVarJson, AdminDeploymentJson, AdminDeploymentServiceOutcomeJson, AdminProjectSecretJson, AdminDeploymentServiceJson } from "@hexclave/shared/dist/interface/admin-interface";
15
15
 
16
16
  /**
17
17
  * SDK type for pushed config source (camelCase for SDK).
@@ -147,44 +147,48 @@ export type AdminProject = {
147
147
  useProductionModeErrors(this: AdminProject): ProductionModeError[],
148
148
 
149
149
  /**
150
- * Lists the project's deployment services (definitions from the config,
151
- * merged with their operational state: deploy status, env vars, domains).
150
+ * Lists the project's deployment services (definitions as synced from the
151
+ * config file's `services` export by `hexclave deploy`, merged with their
152
+ * operational state: deploy status, env vars, domains). Definitions are
153
+ * read-only through the SDK — the config file is the source of truth.
152
154
  */
153
155
  listDeploymentServices(this: AdminProject): Promise<AdminDeploymentServiceJson[]>,
154
156
 
155
157
  /**
156
- * Creates a new deployment service definition. Only available when the
157
- * project's config source is the dashboard (`unlinked`).
158
+ * Lists the project's stored secrets (keys and timestamps only — values are
159
+ * write-only and can never be read back).
158
160
  */
159
- createDeploymentService(this: AdminProject, id: string, build: AdminDeploymentServiceBuildOptions): Promise<AdminDeploymentServiceJson>,
161
+ listProjectSecrets(this: AdminProject): Promise<AdminProjectSecretJson[]>,
160
162
 
161
163
  /**
162
- * Updates a deployment service definition. Env vars are part of the
163
- * definition, so like the build fields they require the config source to be
164
- * the dashboard (`unlinked`); `env` replaces the service's whole env var
165
- * set. Secret env var VALUES are never set here — they are supplied at
166
- * deploy time via `hexclave deploy --secret <key>=<value>`.
164
+ * Sets (or overwrites) the value of a project secret. Values are only read
165
+ * server-side by the feature that consumes them — today, a deploy filling
166
+ * `secret()` env vars.
167
167
  */
168
- updateDeploymentService(this: AdminProject, serviceId: string, update: AdminDeploymentServiceBuildOptions & {
169
- env?: Record<string, AdminDeploymentEnvVarOptions>,
170
- }): Promise<AdminDeploymentServiceJson>,
168
+ setProjectSecret(this: AdminProject, key: string, value: string): Promise<void>,
171
169
 
172
170
  /**
173
- * Deletes a deployment service, including its provisioned deployment target.
174
- * Only available when the project's config source is the dashboard.
171
+ * Deletes a stored project secret value.
175
172
  */
176
- deleteDeploymentService(this: AdminProject, serviceId: string): Promise<void>,
173
+ deleteProjectSecret(this: AdminProject, key: string): Promise<void>,
177
174
 
178
175
  /**
179
- * Lists the most recent deployment runs of a service, newest first.
176
+ * Lists the project's deployments (one per `hexclave deploy`) newest first,
177
+ * each with the services it deployed and their runs.
180
178
  */
181
- listDeploymentRuns(this: AdminProject, serviceId: string, options?: { limit?: number }): Promise<AdminDeploymentRunJson[]>,
179
+ listDeployments(this: AdminProject, options?: { limit?: number }): Promise<AdminDeploymentJson[]>,
182
180
 
183
181
  /**
184
- * Returns the build logs of a deployment run collected so far (the server
185
- * follows a running build for a while before returning).
182
+ * Reads one deployment, including what each of its services did.
186
183
  */
187
- getDeploymentRunLogs(this: AdminProject, runId: string, options?: { signal?: AbortSignal }): Promise<string>,
184
+ getDeployment(this: AdminProject, deploymentId: string): Promise<AdminDeploymentJson>,
185
+
186
+ /**
187
+ * Returns the build logs of a deployment collected so far (the server follows
188
+ * a running build for a while before returning). One deploy is one build, so
189
+ * one log covers every service it shipped.
190
+ */
191
+ getDeploymentBuildLogs(this: AdminProject, deploymentId: string, options?: { signal?: AbortSignal }): Promise<string>,
188
192
 
189
193
  /**
190
194
  * Adds a custom domain to a deployment service.