import { t as GenericQueryCtx } from "./storage-CA867GtX.js"; import { _ as ResolvedHandlerUrls, a as EmailConfig, f as HandlerUrls, h as RedirectToOptions, m as RedirectMethod, n as AuthLike, o as GetCurrentPartialUserOptions, p as OAuthScopesOnSignIn, s as GetCurrentUserOptions, t as AsyncStoreProperty, u as HandlerUrlOptions, v as TokenStoreInit, y as hexclaveAppInternalsSymbol } from "./common-BDyEKSM6.js"; import { c as CustomerInvoicesRequestOptions, d as CustomerProductsList, g as ServerItem, h as Item, m as InlineProduct, o as CustomerInvoicesList, p as CustomerProductsRequestOptions, t as Customer } from "./index-ZiEXZJBF.js"; import { D as SendEmailOptions, S as AdminSentEmail, t as AdminEmailOutbox, w as EmailDeliveryInfo } from "./index-CBDR4cNg.js"; import { a as InternalApiKeyFirstView, i as InternalApiKeyCreateOptions, t as InternalApiKey } from "./index-TUtJOdMm.js"; import { a as AdminTeamPermission, c as AdminTeamPermissionDefinitionUpdateOptions, i as AdminProjectPermissionDefinitionUpdateOptions, n as AdminProjectPermissionDefinition, o as AdminTeamPermissionDefinition, r as AdminProjectPermissionDefinitionCreateOptions, s as AdminTeamPermissionDefinitionCreateOptions, t as AdminProjectPermission, u as TeamPermission } from "./index-DSzMf-rS.js"; import { t as PlanUsage } from "./index-B594jg4e.js"; import { d as AdminWorkflowUpgradeResult, f as AdminWorkflowVersion, i as AdminWorkflowRunDetails, l as AdminWorkflowSyncResult, o as AdminWorkflowRunsFilter, r as AdminWorkflowRun, t as AdminWorkflow } from "./workflows-2-MBWbGl.js"; import { t as DataVaultStore } from "./index-DLPccxVU.js"; import { a as TeamApiKey, c as UserApiKeyFirstView, n as ApiKeyCreationOptions, o as TeamApiKeyFirstView, s as UserApiKey } from "./index-fOYcs4NH.js"; import { n as DeprecatedOAuthConnection, r as OAuthConnection } from "./index-ClBTM-St.js"; import { a as ServerContactChannelCreateOptions, i as ServerContactChannel, n as ContactChannelCreateOptions, t as ContactChannel } from "./index-DN04TjLM.js"; import { t as NotificationCategory } from "./index-O3hJsHSl.js"; import { a as ListSessionReplaysOptions, i as ListSessionReplayChunksResult, o as ListSessionReplaysResult, r as ListSessionReplayChunksOptions, s as SessionReplayAllEventsResult, t as AdminSessionReplay } from "./index-Cf1wOohp.js"; import { a as AdminProjectConfigUpdateOptions, i as AdminProjectConfig, s as ProjectConfig } from "./index-B-MazpM_.js"; import { t as AnalyticsOptions } from "./session-replay-8_3WCrsZ.js"; import { KnownErrors } from "@hexclave/shared"; import { RequestListener } from "@hexclave/shared/dist/interface/client-interface"; import { CurrentUserCrud } from "@hexclave/shared/dist/interface/crud/current-user"; import { Result } from "@hexclave/shared/dist/utils/results"; import { ProviderType } from "@hexclave/shared/dist/utils/oauth"; import { ProjectOnboardingStatus, RestrictedReason } from "@hexclave/shared/dist/schema-fields"; import { ProductionModeError } from "@hexclave/shared/dist/helpers/production-mode"; import { AdminUserProjectsCrud, ProjectsCrud } from "@hexclave/shared/dist/interface/crud/projects"; import { CompleteConfig, EnvironmentConfigOverrideOverride } from "@hexclave/shared/dist/config/schema"; import { AdminDeploymentDomainJson, AdminDeploymentDomainJson as AdminDeploymentDomainJson$1, AdminDeploymentEnvVarJson, AdminDeploymentJson, AdminDeploymentJson as AdminDeploymentJson$1, AdminDeploymentServiceJson, AdminDeploymentServiceJson as AdminDeploymentServiceJson$1, AdminDeploymentServiceOutcomeJson, AdminProjectSecretJson, AdminProjectSecretJson as AdminProjectSecretJson$1 } from "@hexclave/shared/dist/interface/admin-interface"; import { AnalyticsClickmapOptions, AnalyticsClickmapResponse, AnalyticsClickmapTokenResponse } from "@hexclave/shared/dist/interface/admin-metrics"; import { AdminGetSessionReplayChunkEventsResponse } from "@hexclave/shared/dist/interface/crud/session-replays"; import { Transaction, TransactionType } from "@hexclave/shared/dist/interface/crud/transactions"; import { InternalSession } from "@hexclave/shared/dist/sessions"; import { MoneyAmount } from "@hexclave/shared/dist/utils/currency-constants"; import { ReadonlyJson } from "@hexclave/shared/dist/utils/json"; import { AnalyticsQueryOptions, AnalyticsQueryResponse } from "@hexclave/shared/dist/interface/crud/analytics"; import { TeamsCrud } from "@hexclave/shared/dist/interface/crud/teams"; import { UsersCrud } from "@hexclave/shared/dist/interface/crud/users"; import { GeoInfo } from "@hexclave/shared/dist/utils/geo"; //#region src/lib/hexclave-app/users/index.d.ts declare function withUserDestructureGuard(target: T): T; type OAuthProvider = { readonly id: string; readonly type: string; readonly userId: string; readonly accountId?: string; readonly email?: string; readonly allowSignIn: boolean; readonly allowConnectedAccounts: boolean; update(data: { allowSignIn?: boolean; allowConnectedAccounts?: boolean; }): Promise>>; delete(): Promise; }; type ServerOAuthProvider = { readonly id: string; readonly type: string; readonly userId: string; readonly accountId: string; readonly email?: string; readonly allowSignIn: boolean; readonly allowConnectedAccounts: boolean; update(data: { accountId?: string; email?: string; allowSignIn?: boolean; allowConnectedAccounts?: boolean; }): Promise>>; delete(): Promise; }; /** * Contains everything related to the current user session. */ type Auth = AuthLike<{}> & { readonly _internalSession: InternalSession; readonly currentSession: { getTokens(): Promise<{ accessToken: string | null; refreshToken: string | null; }>; }; }; /** * ``` * +----------+-------------+-------------------+ * | \ | !Server | Server | * +----------+-------------+-------------------+ * | !Session | User | ServerUser | * | Session | CurrentUser | CurrentServerUser | * +----------+-------------+-------------------+ * ``` * * The fields on each of these types are available iff: * BaseUser: true * Auth: Session * ServerBaseUser: Server * UserExtra: Session OR Server * * The types are defined as follows (in the typescript manner): * User = BaseUser * CurrentUser = BaseUser & Auth & UserExtra * ServerUser = BaseUser & ServerBaseUser & UserExtra * CurrentServerUser = BaseUser & ServerBaseUser & Auth & UserExtra **/ type BaseUser = { readonly id: string; readonly displayName: string | null; /** * The user's email address. * * Note: This might NOT be unique across multiple users, so always use `id` for unique identification. */ readonly primaryEmail: string | null; readonly primaryEmailVerified: boolean; readonly profileImageUrl: string | null; readonly signedUpAt: Date; readonly clientMetadata: any; readonly clientReadOnlyMetadata: any; /** * Whether the user has a password set. */ readonly hasPassword: boolean; readonly otpAuthEnabled: boolean; readonly passkeyAuthEnabled: boolean; readonly isMultiFactorRequired: boolean; readonly isAnonymous: boolean; /** * Whether the user is in restricted state (signed up but hasn't completed onboarding requirements). * For example, if email verification is required but the user hasn't verified their email yet. */ readonly isRestricted: boolean; /** * The reason why the user is restricted, e.g., { type: "email_not_verified" }, { type: "anonymous" }, or { type: "restricted_by_administrator" }. * Null if the user is not restricted. */ readonly restrictedReason: RestrictedReason | null; /** Whether the user is restricted by an administrator. Can be set manually or by sign-up rules. */ readonly restrictedByAdmin: boolean; /** * Public reason shown to the user explaining why an administrator restricted them, or null if none was given. * * This is intentionally readable by the user themselves (unlike `restrictedByAdminPrivateDetails`, which is * server-only), so onboarding screens can tell them why they can't continue. */ readonly restrictedByAdminReason: string | null; toClientJson(): CurrentUserCrud["Client"]["Read"]; /** * @deprecated, use contact channel's usedForAuth instead */ readonly emailAuthEnabled: boolean; /** * @deprecated */ readonly oauthProviders: readonly { id: string; }[]; }; type UserExtra = { setDisplayName(displayName: string | null): Promise; /** @deprecated Use contact channel's sendVerificationEmail instead */ sendVerificationEmail(): Promise; setClientMetadata(metadata: any): Promise; updatePassword(options: { oldPassword: string; newPassword: string; }): Promise; setPassword(options: { password: string; }): Promise; /** * A shorthand method to update multiple fields of the user at once. */ update(update: UserUpdateOptions): Promise; listContactChannels(): Promise; createContactChannel(data: ContactChannelCreateOptions): Promise; listNotificationCategories(): Promise; delete(): Promise; /** @deprecated Use `getOrLinkConnectedAccount` for redirect behavior, or `getConnectedAccount({ provider, providerAccountId })` for existence check. */ getConnectedAccount(id: ProviderType, options: { or: 'redirect'; scopes?: string[]; }): Promise; /** @deprecated Use `getConnectedAccount({ provider, providerAccountId })` for existence check, or `getOrLinkConnectedAccount` for redirect behavior. */ getConnectedAccount(id: ProviderType, options?: { or?: 'redirect' | 'throw' | 'return-null'; scopes?: string[]; }): Promise; /** Get a specific connected account by provider and providerAccountId. Returns null if not found. */ getConnectedAccount(account: { provider: string; providerAccountId: string; }): Promise; /** List all connected accounts for this user (only those with allowConnectedAccounts enabled). */ listConnectedAccounts(): Promise; /** React hook to list all connected accounts. */ /** Redirect the user to the OAuth flow to link a new connected account. Always redirects, never returns. */ linkConnectedAccount(provider: string, options?: { scopes?: string[]; }): Promise; /** Get a connected account for the given provider, or redirect to link one if none exists or the token/scopes are insufficient. */ getOrLinkConnectedAccount(provider: string, options?: { scopes?: string[]; }): Promise; /** React hook: get a connected account for the given provider, or redirect to link one if none exists or the token/scopes are insufficient. */ hasPermission(scope: Team, permissionId: string): Promise; hasPermission(permissionId: string): Promise; getPermission(scope: Team, permissionId: string): Promise; getPermission(permissionId: string): Promise; listPermissions(scope: Team, options?: { recursive?: boolean; }): Promise; listPermissions(options?: { recursive?: boolean; }): Promise; readonly selectedTeam: Team | null; setSelectedTeam(teamOrId: string | Team | null): Promise; createTeam(data: TeamCreateOptions): Promise; leaveTeam(team: Team): Promise; /** * Lists all pending team invitations sent to any of the current user's verified email addresses. * * This allows the user to discover which teams have invited them, even if they haven't * joined those teams yet. Only invitations sent to verified email addresses are included. * * @returns An array of `ReceivedTeamInvitation` objects, each containing the team ID, team * display name, recipient email, and expiration date. * * @example * ```ts * const invitations = await user.listTeamInvitations(); * for (const invitation of invitations) { * console.log(`Invited to ${invitation.teamDisplayName} via ${invitation.recipientEmail}`); * } * ``` */ listTeamInvitations(): Promise; /** * Lists all pending team invitations sent to any of the current user's verified email addresses. * * React hook version of `listTeamInvitations()`. Automatically re-renders when invitations change. */ getActiveSessions(): Promise; revokeSession(sessionId: string): Promise; getTeamProfile(team: Team): Promise; createApiKey(options: ApiKeyCreationOptions<"user">): Promise; listOAuthProviders(): Promise; getOAuthProvider(id: string): Promise; registerPasskey(options?: { hostname?: string; }): Promise>; } & AsyncStoreProperty<"apiKeys", [], UserApiKey[], true> & AsyncStoreProperty<"team", [id: string], Team | null, false> & AsyncStoreProperty<"teams", [], Team[], true> & AsyncStoreProperty<"teamInvitations", [], ReceivedTeamInvitation[], true> & AsyncStoreProperty<"permission", [scope: Team, permissionId: string, options?: { recursive?: boolean; }], TeamPermission | null, false> & AsyncStoreProperty<"permissions", [scope: Team, options?: { recursive?: boolean; }], TeamPermission[], true>; type InternalUserExtra = { createProject(newProject: AdminProjectCreateOptions): Promise; transferProject(projectIdToTransfer: string, newTeamId: string): Promise; } & AsyncStoreProperty<"ownedProjects", [], AdminOwnedProject[], true>; type User = BaseUser; type CurrentUser = BaseUser & Auth & UserExtra & Customer; type CurrentInternalUser = CurrentUser & InternalUserExtra; type ProjectCurrentUser = ProjectId extends "internal" ? CurrentInternalUser : CurrentUser; type TokenPartialUser = Pick; type SyncedPartialUser = TokenPartialUser & Pick; type ActiveSession = { id: string; userId: string; createdAt: Date; isImpersonation: boolean; lastUsedAt: Date | undefined; isCurrentSession: boolean; geoInfo?: GeoInfo; }; type UserUpdateOptions = { displayName?: string | null; clientMetadata?: ReadonlyJson; selectedTeamId?: string | null; totpMultiFactorSecret?: Uint8Array | null; profileImageUrl?: string | null; otpAuthEnabled?: boolean; passkeyAuthEnabled?: boolean; primaryEmail?: string | null; }; declare function userUpdateOptionsToCrud(options: UserUpdateOptions): CurrentUserCrud["Client"]["Update"]; type ServerBaseUser = { setPrimaryEmail(email: string | null, options?: { verified?: boolean | undefined; }): Promise; readonly lastActiveAt: Date; readonly serverMetadata: any; setServerMetadata(metadata: any): Promise; setClientReadOnlyMetadata(metadata: any): Promise; /** Private details about the restriction (e.g., which sign-up rule triggered). Only visible to server access and above. */ readonly restrictedByAdminPrivateDetails: string | null; /** Best-effort ISO country code captured at sign-up time from request geo headers. */ readonly countryCode: string | null; /** Server-only risk scores used during sign-up risk evaluation. */ readonly riskScores: { readonly signUp: { readonly bot: number; readonly freeTrialAbuse: number; }; }; createTeam(data: Omit): Promise; listContactChannels(): Promise; createContactChannel(data: ServerContactChannelCreateOptions): Promise; update(user: ServerUserUpdateOptions): Promise; grantPermission(scope: Team, permissionId: string): Promise; grantPermission(permissionId: string): Promise; revokePermission(scope: Team, permissionId: string): Promise; revokePermission(permissionId: string): Promise; getPermission(scope: Team, permissionId: string): Promise; getPermission(permissionId: string): Promise; hasPermission(scope: Team, permissionId: string): Promise; hasPermission(permissionId: string): Promise; listPermissions(scope: Team, options?: { recursive?: boolean; }): Promise; listPermissions(options?: { recursive?: boolean; }): Promise; listOAuthProviders(): Promise; getOAuthProvider(id: string): Promise; /** * Creates a new session object with a refresh token for this user. Can be used to impersonate them. */ createSession(options?: { expiresInMillis?: number; isImpersonation?: boolean; }): Promise<{ getTokens(): Promise<{ accessToken: string | null; refreshToken: string | null; }>; }>; } & AsyncStoreProperty<"team", [id: string], ServerTeam | null, false> & AsyncStoreProperty<"teams", [options?: ServerListTeamsOptions], ServerTeam[] & { nextCursor: string | null; }, true> & AsyncStoreProperty<"permission", [scope: Team, permissionId: string, options?: { direct?: boolean; }], AdminTeamPermission | null, false> & AsyncStoreProperty<"permissions", [scope: Team, options?: { direct?: boolean; }], AdminTeamPermission[], true>; /** * A user including sensitive fields that should only be used on the server, never sent to the client * (such as sensitive information and serverMetadata). */ type ServerUser = ServerBaseUser & BaseUser & UserExtra & Customer; type CurrentServerUser = Auth & ServerUser; type CurrentInternalServerUser = CurrentServerUser & InternalUserExtra; type ProjectCurrentServerUser = ProjectId extends "internal" ? CurrentInternalServerUser : CurrentServerUser; type SyncedPartialServerUser = SyncedPartialUser & Pick; type ServerUserUpdateOptions = { primaryEmail?: string | null; primaryEmailVerified?: boolean; primaryEmailAuthEnabled?: boolean; clientReadOnlyMetadata?: ReadonlyJson; serverMetadata?: ReadonlyJson; password?: string; restrictedByAdmin?: boolean; restrictedByAdminReason?: string | null; restrictedByAdminPrivateDetails?: string | null; countryCode?: string | null; riskScores?: { signUp: { bot: number; freeTrialAbuse: number; }; }; } & UserUpdateOptions; declare function serverUserUpdateOptionsToCrud(options: ServerUserUpdateOptions): CurrentUserCrud["Server"]["Update"]; type ServerUserCreateOptions = { primaryEmail?: string | null; primaryEmailAuthEnabled?: boolean; password?: string; otpAuthEnabled?: boolean; displayName?: string; primaryEmailVerified?: boolean; clientMetadata?: any; clientReadOnlyMetadata?: any; serverMetadata?: any; countryCode?: string | null; riskScores?: { signUp: { bot: number; freeTrialAbuse: number; }; }; }; declare function serverUserCreateOptionsToCrud(options: ServerUserCreateOptions): UsersCrud["Server"]["Create"]; //#endregion //#region src/lib/hexclave-app/teams/index.d.ts type TeamMemberProfile = { displayName: string | null; profileImageUrl: string | null; }; type TeamMemberProfileUpdateOptions = { displayName?: string; profileImageUrl?: string | null; }; type EditableTeamMemberProfile = TeamMemberProfile & { update(update: TeamMemberProfileUpdateOptions): Promise; }; type TeamUser = { id: string; teamProfile: TeamMemberProfile; }; /** * A team invitation as seen from the team's perspective (ie. the sender). * * Returned by `team.listInvitations()`. Contains the recipient email and allows * revoking the invitation. */ type SentTeamInvitation = { id: string; recipientEmail: string | null; expiresAt: Date; revoke(): Promise; }; /** * @deprecated Use `SentTeamInvitation` instead. */ type TeamInvitation = SentTeamInvitation; /** * A team invitation as seen from the invited user's perspective (ie. the receiver). * * Returned by `user.listTeamInvitations()`. Contains information about teams that have * sent invitations to any of the user's verified email addresses, and allows accepting * the invitation to join the team. */ type ReceivedTeamInvitation = { id: string; teamId: string; teamDisplayName: string; recipientEmail: string; expiresAt: Date; /** * Accepts the invitation, adding the current user to the team. * * The user must have a verified email address matching the invitation's recipient email. */ accept(): Promise; }; type Team = { id: string; displayName: string; profileImageUrl: string | null; clientMetadata: any; clientReadOnlyMetadata: any; inviteUser(options: { email: string; callbackUrl?: string; }): Promise; listUsers(): Promise; removeUser(userId: string): Promise; listInvitations(): Promise; update(update: TeamUpdateOptions): Promise; delete(): Promise; createApiKey(options: ApiKeyCreationOptions<"team">): Promise; } & AsyncStoreProperty<"apiKeys", [], TeamApiKey[], true> & Customer; type TeamUpdateOptions = { displayName?: string; profileImageUrl?: string | null; clientMetadata?: ReadonlyJson; }; declare function teamUpdateOptionsToCrud(options: TeamUpdateOptions): TeamsCrud["Client"]["Update"]; type TeamCreateOptions = { displayName: string; profileImageUrl?: string; }; declare function teamCreateOptionsToCrud(options: TeamCreateOptions, creatorUserId: string): TeamsCrud["Client"]["Create"]; type ServerTeamMemberProfile = TeamMemberProfile; type ServerTeamUser = ServerUser & { teamProfile: ServerTeamMemberProfile; }; type ServerTeam = { createdAt: Date; serverMetadata: any; listUsers(): Promise; update(update: ServerTeamUpdateOptions): Promise; delete(): Promise; addUser(userId: string): Promise; inviteUser(options: { email: string; callbackUrl?: string; }): Promise; removeUser(userId: string): Promise; } & Team; type ServerListUsersOptionsBase = { cursor?: string; /** * Maximum number of users to return per page. Must be at most 1000. */ limit?: number; orderBy?: 'signedUpAt' | 'lastActiveAt'; desc?: boolean; /** * Free-text search. Matches user ID (exact UUID), display name, and contact channels (e.g. primary email). */ query?: string; /** * Exclude users whose primary email domain matches one of these exact domains. */ excludedEmailDomains?: string[]; /** * Only return users who are members of the given team. */ teamId?: string; /** * Whether to include restricted users (users who haven't completed onboarding requirements). * Defaults to false. */ includeRestricted?: boolean; /** * Whether to include anonymous users (and restricted users). * Defaults to false. */ includeAnonymous?: boolean; }; type ServerListUsersOptions = ServerListUsersOptionsBase & ({ onlyAnonymous?: false; } | { /** * Whether to return only anonymous users. * Requires includeAnonymous=true. * Defaults to false. */ onlyAnonymous: true; includeAnonymous: true; }); type ServerListTeamsOptions = { orderBy?: 'createdAt'; desc?: boolean; cursor?: string; limit?: number; /** * Free-text search. Matches team ID (exact UUID) and display name. */ query?: string; }; type ServerTeamCreateOptions = TeamCreateOptions & { creatorUserId?: string; }; declare function serverTeamCreateOptionsToCrud(options: ServerTeamCreateOptions): TeamsCrud["Server"]["Create"]; type ServerTeamUpdateOptions = TeamUpdateOptions & { clientReadOnlyMetadata?: ReadonlyJson; serverMetadata?: ReadonlyJson; }; declare function serverTeamUpdateOptionsToCrud(options: ServerTeamUpdateOptions): TeamsCrud["Server"]["Update"]; //#endregion //#region src/lib/hexclave-app/apps/interfaces/server-app.d.ts /** @deprecated Use `HexclaveServerAppConstructorOptions` from the `@hexclave/*` package instead — same symbol, new brand name. See https://docs.hexclave.com/migration. */ type StackServerAppConstructorOptions = StackClientAppConstructorOptions & { secretServerKey?: string; }; /** @deprecated Use `HexclaveServerApp` from the `@hexclave/*` package instead — same symbol, new brand name. See https://docs.hexclave.com/migration. */ type StackServerApp = ({ createTeam(data: ServerTeamCreateOptions): Promise; /** * @deprecated use `getUser()` instead */ getServerUser(): Promise | null>; createUser(options: ServerUserCreateOptions): Promise; grantProduct(options: (({ userId: string; } | { teamId: string; } | { customCustomerId: string; }) & ({ productId: string; } | { product: InlineProduct; }) & { quantity?: number; })): Promise; createCheckoutUrl(options: (({ userId: string; } | { teamId: string; } | { customCustomerId: string; }) & ({ productId: string; } | { product: InlineProduct; }) & { returnUrl?: string; })): Promise; getUser(options: GetCurrentUserOptions & { or: 'redirect'; }): Promise>; getUser(options: GetCurrentUserOptions & { or: 'throw'; }): Promise>; getUser(options: GetCurrentUserOptions & { or: 'anonymous'; }): Promise>; getUser(options?: GetCurrentUserOptions): Promise | null>; getUser(id: string): Promise; getUser(options: { apiKey: string; or?: "return-null" | "anonymous"; }): Promise; getUser(options: { from: "convex"; ctx: GenericQueryCtx; or?: "return-null" | "anonymous"; }): Promise; getPartialUser(options: GetCurrentPartialUserOptions & { from: 'token'; }): Promise; getPartialUser(options: GetCurrentPartialUserOptions & { from: 'convex'; }): Promise; getPartialUser(options: GetCurrentPartialUserOptions): Promise; getTeam(id: string): Promise; getTeam(options: { apiKey: string; }): Promise; listUsers(options?: ServerListUsersOptions): Promise; /** * Returns every direct (or recursive) team permission grant for every * member of the given team in one request. Use this instead of calling * `user.listPermissions(team)` per row when rendering a roster — that * pattern produces an N+1 over the team-member endpoint. */ listTeamMemberPermissions(teamId: string, options?: { recursive?: boolean; }): Promise<{ userId: string; permissionId: string; }[]>; createOAuthProvider(options: { userId: string; accountId: string; providerConfigId: string; email: string; allowSignIn: boolean; allowConnectedAccounts: boolean; }): Promise>>; sendEmail(options: SendEmailOptions): Promise; getEmailDeliveryStats(): Promise; activateEmailCapacityBoost(): Promise; queryAnalytics(options: AnalyticsQueryOptions): Promise; } & AsyncStoreProperty<"user", [id: string], ServerUser | null, false> & Omit, "listUsers" | "useUsers"> & AsyncStoreProperty<"teams", [options?: ServerListTeamsOptions], ServerTeam[] & { nextCursor: string | null; }, true> & AsyncStoreProperty<"dataVaultStore", [id: string], DataVaultStore, false> & AsyncStoreProperty<"item", [{ itemId: string; userId: string; } | { itemId: string; teamId: string; } | { itemId: string; customCustomerId: string; }], ServerItem, false> & AsyncStoreProperty<"products", [options: CustomerProductsRequestOptions], CustomerProductsList, true> & StackClientApp); /** @deprecated Use `HexclaveServerAppConstructor` from the `@hexclave/*` package instead — same symbol, new brand name. See https://docs.hexclave.com/migration. */ type StackServerAppConstructor = { new (options: StackServerAppConstructorOptions): StackServerApp; new (options: StackServerAppConstructorOptions): StackServerApp; }; type HexclaveServerAppConstructorOptions = StackServerAppConstructorOptions; type HexclaveServerApp = StackServerApp; type HexclaveServerAppConstructor = StackServerAppConstructor; declare const HexclaveServerApp: HexclaveServerAppConstructor; /** @deprecated Use `HexclaveServerApp` from the `@hexclave/*` package instead — same symbol, new brand name. See https://docs.hexclave.com/migration. */ declare const StackServerApp: StackServerAppConstructor; //#endregion //#region src/lib/hexclave-app/apps/interfaces/admin-app.d.ts type EmailOutboxListOptions = { status?: string; simpleStatus?: string; userId?: string; limit?: number; cursor?: string; }; type EmailOutboxListResult = { items: AdminEmailOutbox[]; nextCursor: string | null; }; type EmailOutboxUpdateOptions = { isPaused?: boolean; scheduledAtMillis?: number; cancel?: boolean; tsxSource?: string; themeId?: string | null; }; type ManagedEmailProviderSetupResult = { domainId: string; subdomain: string; senderLocalPart: string; nameServerRecords: string[]; status: ManagedEmailProviderStatus["status"]; }; type ManagedEmailProviderStatus = { status: "pending_dns" | "pending_verification" | "verified" | "applied" | "failed"; }; type ManagedEmailProviderListItem = { domainId: string; subdomain: string; senderLocalPart: string; status: ManagedEmailProviderStatus["status"]; nameServerRecords: string[]; }; /** @deprecated Use `HexclaveAdminAppConstructorOptions` from the `@hexclave/*` package instead — same symbol, new brand name. See https://docs.hexclave.com/migration. */ type StackAdminAppConstructorOptions = (StackServerAppConstructorOptions & { superSecretAdminKey?: string; projectOwnerSession?: InternalSession | (() => Promise); }); /** @deprecated Use `HexclaveAdminApp` from the `@hexclave/*` package instead — same symbol, new brand name. See https://docs.hexclave.com/migration. */ type StackAdminApp = (AsyncStoreProperty<"project", [], AdminProject, false> & AsyncStoreProperty<"planUsage", [], PlanUsage, false> & AsyncStoreProperty<"internalApiKeys", [], InternalApiKey[], true> & AsyncStoreProperty<"teamPermissionDefinitions", [], AdminTeamPermissionDefinition[], true> & AsyncStoreProperty<"projectPermissionDefinitions", [], AdminProjectPermissionDefinition[], true> & AsyncStoreProperty<"emailThemes", [], { id: string; displayName: string; }[], true> & AsyncStoreProperty<"emailPreview", [{ themeId?: string | null | false; themeTsxSource?: string; templateId?: string; templateTsxSource?: string; }], string, false> & AsyncStoreProperty<"emailTemplates", [], { id: string; displayName: string; themeId?: string; tsxSource: string; }[], true> & AsyncStoreProperty<"emailDrafts", [], { id: string; displayName: string; themeId: string | undefined | false; tsxSource: string; sentAt: Date | null; }[], true> & AsyncStoreProperty<"workflows", [], AdminWorkflow[], true> & AsyncStoreProperty<"stripeAccountInfo", [], { account_id: string; charges_enabled: boolean; details_submitted: boolean; payouts_enabled: boolean; } | null, false> & AsyncStoreProperty<"transactions", [{ cursor?: string; limit?: number; type?: TransactionType; customerType?: 'user' | 'team' | 'custom'; customerId?: string; }], { transactions: Transaction[]; nextCursor: string | null; }, true> & { createInternalApiKey(options: InternalApiKeyCreateOptions): Promise; createTeamPermissionDefinition(data: AdminTeamPermissionDefinitionCreateOptions): Promise; updateTeamPermissionDefinition(permissionId: string, data: AdminTeamPermissionDefinitionUpdateOptions): Promise; deleteTeamPermissionDefinition(permissionId: string): Promise; /** * @param options.query Free-text search; matches against permission ID and description. */ listTeamPermissionDefinitionsPaginated(options: { limit: number; cursor?: string; query?: string; }): Promise<{ items: AdminTeamPermissionDefinition[]; nextCursor: string | null; }>; createProjectPermissionDefinition(data: AdminProjectPermissionDefinitionCreateOptions): Promise; updateProjectPermissionDefinition(permissionId: string, data: AdminProjectPermissionDefinitionUpdateOptions): Promise; deleteProjectPermissionDefinition(permissionId: string): Promise; sendTestEmail(options: { recipientEmail: string; emailConfig: EmailConfig; }): Promise>; sendTestWebhook(options: { endpointId: string; }): Promise>; sendSignInInvitationEmail(email: string, callbackUrl: string): Promise; listSentEmails(): Promise; setupManagedEmailProvider(options: { subdomain: string; senderLocalPart: string; }): Promise; checkManagedEmailStatus(options: { domainId: string; subdomain: string; senderLocalPart: string; }): Promise; listManagedEmailDomains(): Promise; applyManagedEmailProvider(options: { domainId: string; }): Promise<{ status: "applied"; }>; deleteManagedEmailDomain(options: { resendDomainId: string; }): Promise<{ status: "deleted"; }>; createEmailTheme(displayName: string): Promise<{ id: string; }>; updateEmailTheme(id: string, tsxSource: string): Promise; deleteEmailTheme(id: string): Promise; saveChatMessage(threadId: string, message: any): Promise; listChatMessages(threadId: string): Promise<{ messages: Array; }>; rewriteTemplateSourceWithAI(templateTsxSource: string): Promise<{ tsxSource: string; }>; updateEmailTemplate(id: string, tsxSource: string, themeId: string | null | false): Promise<{ renderedHtml: string; }>; createEmailTemplate(displayName: string): Promise<{ id: string; }>; deleteEmailTemplate(id: string): Promise; createWorkflow(options: { id: string; displayName?: string; source: string; }): Promise; updateWorkflowSource(workflowId: string, source: string): Promise; deleteWorkflow(workflowId: string): Promise; /** Pauses/resumes run creation. In-flight runs are unaffected. */ setWorkflowPaused(workflowId: string, isPaused: boolean): Promise; listWorkflowVersions(workflowId: string): Promise; listWorkflowRuns: { (workflowId: string, filter: AdminWorkflowRunsFilter & { includeState: true; }): Promise<{ runs: AdminWorkflowRunDetails[]; nextCursor: string | null; }>; (workflowId: string, filter?: AdminWorkflowRunsFilter): Promise<{ runs: AdminWorkflowRun[]; nextCursor: string | null; }>; }; getWorkflowRun(runId: string): Promise; cancelWorkflowRuns(workflowId: string, filter?: { runKey?: string; runId?: string; state?: "queued" | "running" | "sleeping"; version?: number; }): Promise<{ canceledCount: number; }>; upgradeWorkflowRuns(workflowId: string, options: { toVersion: number; runKey?: string; fromVersion?: number; }): Promise; retryWorkflowRun(runId: string): Promise; sendWorkflowEvent(name: string, data?: unknown): Promise<{ eventId: string; }>; setupPayments(): Promise<{ url: string; }>; createStripeWidgetAccountSession(): Promise<{ client_secret: string; }>; getPaymentMethodConfigs(): Promise<{ configId: string; methods: Array<{ id: string; name: string; enabled: boolean; available: boolean; overridable: boolean; }>; } | null>; updatePaymentMethodConfigs(configId: string, updates: Record): Promise; createEmailDraft(options: { displayName: string; themeId?: string | undefined | false; tsxSource?: string; }): Promise<{ id: string; }>; updateEmailDraft(id: string, data: { displayName?: string; themeId?: string | undefined | false; tsxSource?: string; }): Promise; deleteEmailDraft(id: string): Promise; refreshEmailDrafts(): Promise; createItemQuantityChange(options: ({ userId: string; itemId: string; quantity: number; expiresAt?: string; description?: string; } | { teamId: string; itemId: string; quantity: number; expiresAt?: string; description?: string; } | { customCustomerId: string; itemId: string; quantity: number; expiresAt?: string; description?: string; })): Promise; refundTransaction(options: { type: "subscription" | "one-time-purchase"; id: string; invoiceId?: string; amountUsd: MoneyAmount; endAction?: "now" | "at-period-end"; }): Promise<{ refundTransactionId: string; }>; getAnalyticsClickmap(options: AnalyticsClickmapOptions): Promise; createAnalyticsClickmapToken(options: { origin: string; }): Promise; listSessionReplays(options?: ListSessionReplaysOptions): Promise; getSessionReplay(sessionReplayId: string): Promise; listSessionReplayChunks(sessionReplayId: string, options?: ListSessionReplayChunksOptions): Promise; getSessionReplayChunkEvents(sessionReplayId: string, chunkId: string): Promise; getSessionReplayEvents(sessionReplayId: string, options?: { offset?: number; limit?: number; }): Promise; listOutboxEmails(options?: EmailOutboxListOptions): Promise; getOutboxEmail(id: string): Promise; updateOutboxEmail(id: string, options: EmailOutboxUpdateOptions): Promise; pauseOutboxEmail(id: string): Promise; unpauseOutboxEmail(id: string): Promise; cancelOutboxEmail(id: string): Promise; } & StackServerApp); /** @deprecated Use `HexclaveAdminAppConstructor` from the `@hexclave/*` package instead — same symbol, new brand name. See https://docs.hexclave.com/migration. */ type StackAdminAppConstructor = { new (options: StackAdminAppConstructorOptions): StackAdminApp; new (options: StackAdminAppConstructorOptions): StackAdminApp; }; type HexclaveAdminAppConstructorOptions = StackAdminAppConstructorOptions; type HexclaveAdminApp = StackAdminApp; type HexclaveAdminAppConstructor = StackAdminAppConstructor; declare const HexclaveAdminApp: HexclaveAdminAppConstructor; /** @deprecated Use `HexclaveAdminApp` from the `@hexclave/*` package instead — same symbol, new brand name. See https://docs.hexclave.com/migration. */ declare const StackAdminApp: StackAdminAppConstructor; //#endregion //#region src/lib/hexclave-app/projects/index.d.ts /** * SDK type for pushed config source (camelCase for SDK). * Represents where the branch config was pushed from. */ type PushedConfigSource = { type: "pushed-from-github"; owner: string; repo: string; branch: string; commitHash: string; configFilePath: string; workflowPath?: string; } | { type: "pushed-from-unknown"; } | { type: "unlinked"; }; type PushConfigOptions = { /** * The source of this config push. */ source: PushedConfigSource; }; type Project = { readonly id: string; readonly displayName: string; readonly isDevelopmentEnvironment: boolean; readonly pushedConfigError: { message: string; } | null; readonly configWarnings: { message: string; }[]; readonly config: ProjectConfig; }; type AdminProject = { readonly id: string; readonly displayName: string; readonly description: string | null; readonly createdAt: Date; readonly isProductionMode: boolean; readonly isDevelopmentEnvironment: boolean; readonly ownerTeamId: string | null; readonly onboardingStatus: ProjectOnboardingStatus; readonly onboardingState: NonNullable | null; readonly logoUrl: string | null | undefined; readonly logoFullUrl: string | null | undefined; readonly logoDarkModeUrl: string | null | undefined; readonly logoFullDarkModeUrl: string | null | undefined; readonly config: AdminProjectConfig; update(this: AdminProject, update: AdminProjectUpdateOptions): Promise; delete(this: AdminProject): Promise; getConfig(this: AdminProject): Promise; /** * Updates the environment's config by merging the provided config into the existing config. * * Changes made with `updateConfig` always take precedence over those made with `pushConfig`, even if the `pushConfig` * config was pushed after the changes were made with `updateConfig`. This is best for environment-specific * configuration like secrets, API keys, and other values that you wouldn't push into a source repository. */ updateConfig(this: AdminProject, config: EnvironmentConfigOverrideOverride): Promise; /** * Pushes a config, replacing any previous config pushed with `pushConfig`. * * **Note:** This function does **not** replace any changes made with `updateConfig`. Changes made with * `updateConfig` always take precedence over those made with `pushConfig`, even if the `pushConfig` * config was pushed after the changes were made with `updateConfig`. * * This is useful for programmatically deploying configuration. More often than not, you'll want to use * `updateConfig` instead. */ pushConfig(this: AdminProject, config: EnvironmentConfigOverrideOverride, options: PushConfigOptions): Promise; /** * Updates the pushed config by merging the provided config into the existing pushed config. * * **Warning:** This is almost always **not** the function you want to call. Changes made with * `updatePushedConfig` will be replaced entirely the next time `pushConfig` is called. Consider using * `pushConfig` to set the full pushed config, or `updateConfig` for environment-specific values that * should persist across pushes. * * This function is useful for making temporary modifications to the pushed config before the next push. */ updatePushedConfig(this: AdminProject, config: EnvironmentConfigOverrideOverride): Promise; /** * Gets the source metadata for the pushed config, indicating where it was pushed from. * * The source can be: * - `pushed-from-github`: Config was pushed from a GitHub repository * - `pushed-from-unknown`: Config was pushed via CLI but source details unknown * - `unlinked`: Config can be edited directly on the dashboard */ getPushedConfigSource(this: AdminProject): Promise; /** * Unlinks the pushed config source, setting it to "unlinked". * This allows the config to be edited directly on the dashboard without external push restrictions. */ unlinkPushedConfigSource(this: AdminProject): Promise; /** * Resets (removes) specific keys from the config override at the specified level. * Uses the same nested key logic as the override algorithm: resetting key "a.b" also resets "a.b.c". * * This is useful when updating the pushed config (branch level) and wanting to remove the same keys * from the environment config override so that the branch config values take precedence. */ resetConfigOverrideKeys(this: AdminProject, level: "branch" | "environment", keys: string[]): Promise; /** * Gets the raw config override at the specified level (before merging/defaults). * Useful for inspecting exactly what's been set at each level. */ getConfigOverride(this: AdminProject, level: "branch" | "environment"): Promise>; /** * Replaces the entire config override at the specified level. * For branch level, preserves the existing source metadata. */ replaceConfigOverride(this: AdminProject, level: "branch" | "environment", config: Record): Promise; getProductionModeErrors(this: AdminProject): Promise; /** * Lists the project's deployment services (definitions as synced from the * config file's `services` export by `hexclave deploy`, merged with their * operational state: deploy status, env vars, domains). Definitions are * read-only through the SDK — the config file is the source of truth. */ listDeploymentServices(this: AdminProject): Promise; /** * Lists the project's stored secrets (keys and timestamps only — values are * write-only and can never be read back). */ listProjectSecrets(this: AdminProject): Promise; /** * Sets (or overwrites) the value of a project secret. Values are only read * server-side by the feature that consumes them — today, a deploy filling * `secret()` env vars. */ setProjectSecret(this: AdminProject, key: string, value: string): Promise; /** * Deletes a stored project secret value. */ deleteProjectSecret(this: AdminProject, key: string): Promise; /** * Lists the project's deployments (one per `hexclave deploy`) newest first, * each with the services it deployed and their runs. */ listDeployments(this: AdminProject, options?: { limit?: number; }): Promise; /** * Reads one deployment, including what each of its services did. */ getDeployment(this: AdminProject, deploymentId: string): Promise; /** * Returns the build logs of a deployment collected so far (the server follows * a running build for a while before returning). One deploy is one build, so * one log covers every service it shipped. */ getDeploymentBuildLogs(this: AdminProject, deploymentId: string, options?: { signal?: AbortSignal; }): Promise; /** * Adds a custom domain to a deployment service. */ addDeploymentServiceDomain(this: AdminProject, serviceId: string, hostname: string, options?: { isPrimary?: boolean; }): Promise; /** * Returns a domain's verification state and the DNS records the user must * create. Poll this until `verified` is true. */ getDeploymentServiceDomain(this: AdminProject, serviceId: string, hostname: string): Promise; /** * Removes a custom domain from a deployment service. */ deleteDeploymentServiceDomain(this: AdminProject, serviceId: string, hostname: string): Promise; } & Project; type AdminOwnedProject = { readonly app: StackAdminApp; } & AdminProject; type AdminProjectUpdateOptions = { displayName?: string; description?: string; isProductionMode?: boolean; onboardingStatus?: ProjectOnboardingStatus; /** * Updates `project.requirePublishableClientKey` in the project-level config override. */ requirePublishableClientKey?: boolean; logoUrl?: string | null; logoFullUrl?: string | null; logoDarkModeUrl?: string | null; logoFullDarkModeUrl?: string | null; config?: AdminProjectConfigUpdateOptions; }; declare function adminProjectUpdateOptionsToCrud(options: AdminProjectUpdateOptions): ProjectsCrud["Admin"]["Update"]; type AdminProjectCreateOptions = Omit & { displayName: string; teamId: string; isDevelopmentEnvironment?: boolean; }; declare function adminProjectCreateOptionsToCrud(options: AdminProjectCreateOptions): AdminUserProjectsCrud["Server"]["Create"]; //#endregion //#region src/lib/hexclave-app/apps/interfaces/client-app.d.ts /** @deprecated Use `HexclaveClientAppConstructorOptions` from the `@hexclave/*` package instead — same symbol, new brand name. See https://docs.hexclave.com/migration. */ type StackClientAppConstructorOptions = { baseUrl?: string | { browser: string; server: string; }; extraRequestHeaders?: Record; projectId?: ProjectId; publishableClientKey?: string; urls?: HandlerUrlOptions; oauthScopesOnSignIn?: Partial; tokenStore?: TokenStoreInit; redirectMethod?: RedirectMethod; inheritsFrom?: StackClientApp; /** * Whether to show the Hexclave dev tool indicator in browser-like environments. * * - `true`: always show * - `false`: never show * - `"auto"` (default): show based on NODE_ENV or origin heuristics */ devTool?: boolean | "auto"; /** * By default, the Stack app will automatically prefetch some data from Stack's server when this app is first * constructed. This improves the performance of your app, but will create network requests that are unnecessary if * the app is never used or disposed of immediately. To disable this behavior, set this option to true. */ noAutomaticPrefetch?: boolean; /** * Whether the constructor starts browser integrations and other automatic side effects. Defaults to `true`. * * Set this to `false` when the app is instantiated inside a custom dashboard. Explicit method calls remain * available and can still perform their documented side effects. */ automaticSideEffects?: boolean; /** * Options for analytics and session recording. Replays are enabled by default; * set `{ replays: { enabled: false } }` to opt out. */ analytics?: AnalyticsOptions; } & ({ tokenStore: TokenStoreInit; } | { tokenStore?: undefined; inheritsFrom: StackClientApp; }) & (string extends ProjectId ? unknown : ({ projectId: ProjectId; } | { inheritsFrom: StackClientApp; })); /** @deprecated Use `HexclaveClientAppJson` from the `@hexclave/*` package instead — same symbol, new brand name. See https://docs.hexclave.com/migration. */ type StackClientAppJson = StackClientAppConstructorOptions & { inheritsFrom?: undefined; } & { uniqueIdentifier: string; }; /** @deprecated Use `HexclaveClientApp` from the `@hexclave/*` package instead — same symbol, new brand name. See https://docs.hexclave.com/migration. */ type StackClientApp = ({ readonly projectId: ProjectId; /** * The version of the Hexclave SDK. */ readonly version: string; /** * @deprecated Do not use `app.urls` for navigation. It is static and does not include runtime redirect-back, * cross-domain auth, or sign-out state. Use the matching `redirectToXyz()` method instead, for example * `redirectToSignIn()`, `redirectToSignUp()`, `redirectToSignOut()`, or `redirectToAccountSettings()`. */ readonly urls: Readonly; signInWithOAuth(provider: string, options?: { returnTo?: string; }): Promise; signInWithCredential(options: { email: string; password: string; noRedirect?: boolean; }): Promise>; signUpWithCredential(options: { email: string; password: string; noRedirect?: boolean; } & ({ noVerificationCallback: true; } | { noVerificationCallback?: false; verificationCallbackUrl?: string; })): Promise>; signInWithPasskey(): Promise>; callOAuthCallback(): Promise; promptCliLogin(options: { appUrl: string; expiresInMillis?: number; anonRefreshToken?: string; promptLink?: (url: string, loginCode: string) => void; }): Promise>; sendForgotPasswordEmail(email: string, options?: { callbackUrl?: string; }): Promise>; sendMagicLinkEmail(email: string, options?: { callbackUrl?: string; }): Promise>; resetPassword(options: { code: string; password: string; }): Promise>; verifyPasswordResetCode(code: string): Promise>; verifyTeamInvitationCode(code: string): Promise>; acceptTeamInvitation(code: string): Promise>; getTeamInvitationDetails(code: string): Promise>; verifyEmail(code: string): Promise>; signInWithMagicLink(code: string, options?: { noRedirect?: boolean; }): Promise>; signInWithMfa(otp: string, code: string, options?: { noRedirect?: boolean; }): Promise>; redirectToOAuthCallback(): Promise; getConvexClientAuth(options: HasTokenStore extends false ? { tokenStore: TokenStoreInit; } : { tokenStore?: TokenStoreInit; }): (args: { forceRefreshToken: boolean; }) => Promise; getConvexHttpClientAuth(options: { tokenStore: TokenStoreInit; }): Promise; getUser(options: GetCurrentUserOptions & { or: 'redirect'; }): Promise>; getUser(options: GetCurrentUserOptions & { or: 'throw'; }): Promise>; getUser(options: GetCurrentUserOptions & { or: 'anonymous'; }): Promise>; getUser(options?: GetCurrentUserOptions): Promise | null>; cancelSubscription(options: { productId: string; subscriptionId?: string; } | { productId: string; subscriptionId?: string; teamId: string; }): Promise; getPartialUser(options: GetCurrentPartialUserOptions & { from: 'token'; }): Promise; getPartialUser(options: GetCurrentPartialUserOptions & { from: 'convex'; }): Promise; getPartialUser(options: GetCurrentPartialUserOptions): Promise; [hexclaveAppInternalsSymbol]: { toClientJson(): StackClientAppJson; setCurrentUser(userJsonPromise: Promise): void; getConstructorOptions(): StackClientAppConstructorOptions & { inheritsFrom?: undefined; }; sendSessionReplayBatch(body: string, options: { keepalive: boolean; }): Promise>; sendAnalyticsEventBatch(body: string, options: { keepalive: boolean; }): Promise>; addRequestListener(listener: RequestListener): () => void; sendRequest(path: string, requestOptions: RequestInit, requestType?: "client" | "server" | "admin"): Promise; getUrls(): Readonly; getRedirectMethod(): RedirectMethod; redirectToUrl(url: string | URL, options?: { replace?: boolean; }): Promise; getRedirectToHandlerUrl(handlerName: keyof HandlerUrls, options?: RedirectToOptions): Promise; redirectToHandler(handlerName: keyof HandlerUrls, options?: RedirectToOptions): Promise; /** Raw flow metadata only. Never navigate to this value without normal redirect validation. */ getRawAfterAuthReturnTo(): string | null; signInWithTokens(tokens: { accessToken: string; refreshToken: string; }): Promise; awaitPendingAuthResolutions(): Promise; isTrustedRedirectUrl(url: string): Promise; }; } & AsyncStoreProperty<"project", [], Project, false> & AsyncStoreProperty<"item", [{ itemId: string; userId: string; } | { itemId: string; teamId: string; } | { itemId: string; customCustomerId: string; }], Item, false> & AsyncStoreProperty<"products", [options: CustomerProductsRequestOptions], CustomerProductsList, true> & AsyncStoreProperty<"invoices", [options: CustomerInvoicesRequestOptions], CustomerInvoicesList, true> & { [K in `redirectTo${Capitalize>}`]: (options?: RedirectToOptions) => Promise } & AuthLike); /** @deprecated Use `HexclaveClientAppConstructor` from the `@hexclave/*` package instead — same symbol, new brand name. See https://docs.hexclave.com/migration. */ type StackClientAppConstructor = { new (options: StackClientAppConstructorOptions): StackClientApp; new (options: StackClientAppConstructorOptions): StackClientApp; [hexclaveAppInternalsSymbol]: { fromClientJson(json: StackClientAppJson): StackClientApp; }; }; type HexclaveClientAppConstructorOptions = StackClientAppConstructorOptions; type HexclaveClientAppJson = StackClientAppJson; type HexclaveClientApp = StackClientApp; type HexclaveClientAppConstructor = StackClientAppConstructor; declare const HexclaveClientApp: HexclaveClientAppConstructor; /** @deprecated Use `HexclaveClientApp` from the `@hexclave/*` package instead — same symbol, new brand name. See https://docs.hexclave.com/migration. */ declare const StackClientApp: StackClientAppConstructor; //#endregion export { TeamCreateOptions as $, ManagedEmailProviderListItem as A, UserUpdateOptions as At, StackServerAppConstructor as B, adminProjectUpdateOptionsToCrud as C, ServerUserCreateOptions as Ct, HexclaveAdminApp as D, TokenPartialUser as Dt, EmailOutboxUpdateOptions as E, SyncedPartialUser as Et, StackAdminAppConstructorOptions as F, ServerListTeamsOptions as G, EditableTeamMemberProfile as H, HexclaveServerApp as I, ServerTeamCreateOptions as J, ServerListUsersOptions as K, HexclaveServerAppConstructor as L, ManagedEmailProviderStatus as M, serverUserUpdateOptionsToCrud as Mt, StackAdminApp as N, userUpdateOptionsToCrud as Nt, HexclaveAdminAppConstructor as O, User as Ot, StackAdminAppConstructor as P, withUserDestructureGuard as Pt, Team as Q, HexclaveServerAppConstructorOptions as R, adminProjectCreateOptionsToCrud as S, ServerUser as St, EmailOutboxListResult as T, SyncedPartialServerUser as Tt, ReceivedTeamInvitation as U, StackServerAppConstructorOptions as V, SentTeamInvitation as W, ServerTeamUpdateOptions as X, ServerTeamMemberProfile as Y, ServerTeamUser as Z, AdminProjectSecretJson$1 as _, OAuthProvider as _t, StackClientApp as a, serverTeamCreateOptionsToCrud as at, PushConfigOptions as b, ServerBaseUser as bt, StackClientAppJson as c, teamUpdateOptionsToCrud as ct, AdminDeploymentJson$1 as d, BaseUser as dt, TeamInvitation as et, AdminDeploymentServiceJson$1 as f, CurrentInternalServerUser as ft, AdminProjectCreateOptions as g, InternalUserExtra as gt, AdminProject as h, CurrentUser as ht, HexclaveClientAppJson as i, TeamUser as it, ManagedEmailProviderSetupResult as j, serverUserCreateOptionsToCrud as jt, HexclaveAdminAppConstructorOptions as k, UserExtra as kt, AdminDeploymentDomainJson$1 as l, ActiveSession as lt, AdminOwnedProject as m, CurrentServerUser as mt, HexclaveClientAppConstructor as n, TeamMemberProfileUpdateOptions as nt, StackClientAppConstructor as o, serverTeamUpdateOptionsToCrud as ot, AdminDeploymentServiceOutcomeJson as p, CurrentInternalUser as pt, ServerTeam as q, HexclaveClientAppConstructorOptions as r, TeamUpdateOptions as rt, StackClientAppConstructorOptions as s, teamCreateOptionsToCrud as st, HexclaveClientApp as t, TeamMemberProfile as tt, AdminDeploymentEnvVarJson as u, Auth as ut, AdminProjectUpdateOptions as v, ProjectCurrentServerUser as vt, EmailOutboxListOptions as w, ServerUserUpdateOptions as wt, PushedConfigSource as x, ServerOAuthProvider as xt, Project as y, ProjectCurrentUser as yt, StackServerApp as z }; //# sourceMappingURL=client-app-CdAaCL3p.d.ts.map