UNPKG

@clerk/shared

Version:

Internal package utils used by the Clerk SDKs

1,045 lines (1,044 loc) • 40.4 kB
import { CamelToSnake } from "./utils.mjs"; import { BillingPayerResourceType, BillingPaymentChargeType, BillingPaymentMethodStatus, BillingPaymentStatus, BillingStatementStatus, BillingSubscriptionPlanPeriod, BillingSubscriptionStatus } from "./billing.mjs"; import { CommerceSettingsJSON } from "./commerceSettings.mjs"; import { OAuthProvider } from "./oauth.mjs"; import { EmailCodeStrategy, EmailLinkStrategy, OAuthStrategy, PasswordStrategy, PhoneCodeStrategy, Web3Strategy } from "./strategies.mjs"; import { DisplayConfigJSON } from "./displayConfig.mjs"; import { OrganizationDomainOwnershipVerificationStatus, OrganizationDomainOwnershipVerificationStrategy, OrganizationDomainVerificationStatus, OrganizationEnrollmentMode } from "./organizationDomain.mjs"; import { OrganizationSettingsJSON } from "./organizationSettings.mjs"; import { ProtectConfigJSON } from "./protectConfig.mjs"; import { PhoneCodeChannel } from "./phoneCodeChannel.mjs"; import { UserSettingsJSON } from "./userSettings.mjs"; import { ClerkAPIErrorJSON } from "./errors.mjs"; import { VerificationStatus } from "./verification.mjs"; import { EmailAddressIdentifier, UsernameIdentifier } from "./identifiers.mjs"; import { SignInFirstFactor, SignInSecondFactor } from "./signInCommon.mjs"; import { SignUpField, SignUpIdentificationField, SignUpStatus } from "./signUpCommon.mjs"; import { SignInJSON } from "./signIn.mjs"; import { APIKeysSettingsJSON } from "./apiKeysSettings.mjs"; import { EnterpriseProtocol, EnterpriseProvider } from "./enterpriseAccount.mjs"; import { OrganizationInvitationStatus } from "./organizationInvitation.mjs"; import { SessionVerificationLevel, SessionVerificationStatus } from "./sessionVerification.mjs"; import { OrganizationSuggestionStatus } from "./organizationSuggestion.mjs"; import { SessionStatus, SessionTask } from "./session.mjs"; import { OrganizationCustomRoleKey, OrganizationPermissionKey } from "./organizationMembership.mjs"; import { ActClaim } from "./jwtv2.mjs"; import { BoxShadow, Color, EmUnit, FontWeight, HexColor } from "./theme.mjs"; //#region src/types/json.d.ts interface ClerkResourceJSON { id: string; object: string; } type PartialWithClerkResource<T extends ClerkResourceJSON> = Omit<Partial<ClerkResourceJSON>, 'id' | 'object'> & Pick<T, 'id' | 'object'>; interface DisplayThemeJSON { general: { color: HexColor; background_color: Color; font_family: string; font_color: HexColor; label_font_weight: FontWeight; padding: EmUnit; border_radius: EmUnit; box_shadow: BoxShadow; }; buttons: { font_color: HexColor; font_family: string; font_weight: FontWeight; }; accounts: { background_color: Color; }; } interface ImageJSON { object: 'image'; id: string; name: string; public_url: string; } interface EnvironmentJSON extends ClerkResourceJSON { api_keys_settings: APIKeysSettingsJSON; auth_config: AuthConfigJSON; client_debug_mode?: boolean; commerce_settings: CommerceSettingsJSON; display_config: DisplayConfigJSON; maintenance_mode: boolean; organization_settings: OrganizationSettingsJSON; partitioned_cookies?: boolean; user_settings: UserSettingsJSON; protect_config: ProtectConfigJSON; } type LastAuthenticationStrategy = EmailAddressIdentifier | EmailCodeStrategy | EmailLinkStrategy | PhoneCodeStrategy | PasswordStrategy | UsernameIdentifier | OAuthStrategy | Web3Strategy; type ClientTrustState = 'new' | 'known' | 'pending'; interface ClientJSON extends ClerkResourceJSON { object: 'client'; id: string; sessions: SessionJSON[]; sign_up: SignUpJSON | null; sign_in: SignInJSON | null; captcha_bypass?: boolean; last_active_session_id: string | null; last_authentication_strategy: LastAuthenticationStrategy | null; cookie_expires_at: number | null; created_at: number; updated_at: number; } interface SignUpJSON extends ClerkResourceJSON { object: 'sign_up'; status: SignUpStatus; required_fields: SignUpField[]; optional_fields: SignUpField[]; missing_fields: SignUpField[]; unverified_fields: SignUpIdentificationField[]; username: string | null; first_name: string | null; last_name: string | null; email_address: string | null; phone_number: string | null; web3_wallet: string | null; external_account_strategy: string | null; external_account: any; has_password: boolean; unsafe_metadata: SignUpUnsafeMetadata; created_session_id: string | null; created_user_id: string | null; abandon_at: number | null; legal_accepted_at: number | null; locale: string | null; verifications: SignUpVerificationsJSON | null; protect_check?: ProtectCheckJSON | null; } interface ProtectCheckJSON { /** * Always `'pending'` when surfaced to clients. Completed checks are never emitted on the wire. */ status: 'pending'; token: string; sdk_url: string; /** * Unix epoch timestamp in **milliseconds** at which the challenge expires. */ expires_at?: number; ui_hints?: Record<string, string>; } /** * @experimental */ interface SignUpEnterpriseConnectionJSON extends ClerkResourceJSON { id: string; name: string; } interface SessionJSON extends ClerkResourceJSON { object: 'session'; id: string; status: SessionStatus; /** * The tuple represents the minutes that have passed since the last time a first or second factor were verified. * * @experimental This API is experimental and may change at any moment. */ factor_verification_age: [firstFactorAge: number, secondFactorAge: number] | null; expire_at: number; abandon_at: number; last_active_at: number; last_active_token: TokenJSON; last_active_organization_id: string | null; actor: ActClaim | null; tasks: Array<SessionTask> | null; user: UserJSON; public_user_data: PublicUserDataJSON; created_at: number; updated_at: number; } interface SessionVerificationJSON extends ClerkResourceJSON { object: 'session_verification'; status: SessionVerificationStatus; first_factor_verification: VerificationJSON | null; session: SessionJSON; second_factor_verification: VerificationJSON | null; level: SessionVerificationLevel; supported_first_factors: SignInFirstFactorJSON[] | null; supported_second_factors: SignInSecondFactorJSON[] | null; } interface EmailAddressJSON extends ClerkResourceJSON { object: 'email_address'; email_address: string; verification: VerificationJSON | null; linked_to: IdentificationLinkJSON[]; matches_sso_connection: boolean; } interface IdentificationLinkJSON extends ClerkResourceJSON { id: string; type: string; } interface PhoneNumberJSON extends ClerkResourceJSON { object: 'phone_number'; id: string; phone_number: string; reserved_for_second_factor: boolean; default_second_factor: boolean; linked_to: IdentificationLinkJSON[]; verification: VerificationJSON | null; backup_codes?: string[]; } interface PasskeyJSON extends ClerkResourceJSON { object: 'passkey'; id: string; name: string | null; verification: VerificationJSON | null; last_used_at: number | null; updated_at: number; created_at: number; } interface Web3WalletJSON extends ClerkResourceJSON { object: 'web3_wallet'; id: string; web3_wallet: string; verification: VerificationJSON | null; } interface ExternalAccountJSON extends ClerkResourceJSON { object: 'external_account'; provider: OAuthProvider; identification_id: string; provider_user_id: string; approved_scopes: string; email_address: string; first_name: string; last_name: string; image_url: string; username: string; phone_number: string; public_metadata: Record<string, unknown>; label: string; verification?: VerificationJSON; } interface EnterpriseAccountJSON extends ClerkResourceJSON { object: 'enterprise_account'; active: boolean; email_address: string; enterprise_connection: EnterpriseAccountConnectionJSON | null; first_name: string | null; last_name: string | null; protocol: EnterpriseProtocol; provider: EnterpriseProvider; provider_user_id: string | null; public_metadata: Record<string, unknown>; verification: VerificationJSON | null; last_authenticated_at: number | null; enterprise_connection_id: string | null; } interface EnterpriseAccountConnectionJSON extends ClerkResourceJSON { active: boolean; allow_idp_initiated: boolean; allow_subdomains: boolean; disable_additional_identifications: boolean; domain: string; logo_public_url: string | null; name: string; protocol: EnterpriseProtocol; provider: EnterpriseProvider; sync_user_attributes: boolean; allow_organization_account_linking: boolean; created_at: number; updated_at: number; enterprise_connection_id: string | null; } interface UserJSON extends ClerkResourceJSON { object: 'user'; id: string; external_id: string | null; primary_email_address_id: string | null; primary_phone_number_id: string | null; primary_web3_wallet_id: string | null; image_url: string; has_image: boolean; username: string | null; email_addresses: EmailAddressJSON[]; phone_numbers: PhoneNumberJSON[]; web3_wallets: Web3WalletJSON[]; external_accounts: ExternalAccountJSON[]; enterprise_accounts: EnterpriseAccountJSON[]; passkeys: PasskeyJSON[]; organization_memberships: OrganizationMembershipJSON[]; password_enabled: boolean; profile_image_id: string; first_name: string | null; last_name: string | null; totp_enabled: boolean; backup_code_enabled: boolean; two_factor_enabled: boolean; public_metadata: UserPublicMetadata; unsafe_metadata: UserUnsafeMetadata; last_sign_in_at: number | null; create_organization_enabled: boolean; create_organizations_limit: number | null; delete_self_enabled: boolean; legal_accepted_at: number | null; updated_at: number; created_at: number; } interface PublicUserDataJSON { first_name: string | null; last_name: string | null; image_url: string; has_image: boolean; identifier: string; user_id?: string; username?: string; banned?: boolean; } interface SessionWithActivitiesJSON extends Omit<SessionJSON, 'user'> { user: null; latest_activity: SessionActivityJSON; } interface AuthConfigJSON extends ClerkResourceJSON { single_session_mode: boolean; claimed_at: number | null; reverification: boolean; preferred_channels?: Record<string, PhoneCodeChannel>; session_minter?: boolean; } interface VerificationJSON extends ClerkResourceJSON { status: VerificationStatus; verified_at_client: string; strategy: string; nonce?: string; message?: string; external_verification_redirect_url?: string; attempts: number; expire_at: number; channel?: PhoneCodeChannel; error: ClerkAPIErrorJSON; } interface SignUpVerificationsJSON { email_address: SignUpVerificationJSON; phone_number: SignUpVerificationJSON; web3_wallet: SignUpVerificationJSON; external_account: VerificationJSON; } interface SignUpVerificationJSON extends VerificationJSON { next_action: string; supported_strategies: string[]; channel?: PhoneCodeChannel; } interface TokenJSON extends ClerkResourceJSON { object: 'token'; jwt: string; } interface SessionActivityJSON extends ClerkResourceJSON { object: 'session_activity'; browser_name?: string; browser_version?: string; device_type?: string; ip_address?: string; city?: string; country?: string; is_mobile?: boolean; } interface OrganizationJSON extends ClerkResourceJSON { object: 'organization'; id: string; image_url: string; has_image: boolean; name: string; slug: string; public_metadata: OrganizationPublicMetadata; created_at: number; updated_at: number; members_count: number; pending_invitations_count: number; admin_delete_enabled: boolean; max_allowed_memberships: number; self_serve_sso_enabled?: boolean; exclusive_membership?: boolean; } interface OrganizationMembershipJSON extends ClerkResourceJSON { object: 'organization_membership'; id: string; organization: OrganizationJSON; permissions: OrganizationPermissionKey[]; public_metadata: OrganizationMembershipPublicMetadata; public_user_data?: PublicUserDataJSON; role: OrganizationCustomRoleKey; role_name: string; created_at: number; updated_at: number; } interface OrganizationInvitationJSON extends ClerkResourceJSON { object: 'organization_invitation'; id: string; email_address: string; organization_id: string; public_metadata: OrganizationInvitationPublicMetadata; status: OrganizationInvitationStatus; role: OrganizationCustomRoleKey; role_name: string; created_at: number; updated_at: number; } interface OrganizationDomainVerificationJSON { status: OrganizationDomainVerificationStatus; strategy: 'email_code'; attempts: number; expires_at: number; verified_at?: number | null; } interface OrganizationDomainOwnershipVerificationJSON { status: OrganizationDomainOwnershipVerificationStatus; strategy: OrganizationDomainOwnershipVerificationStrategy; attempts: number | null; expire_at: number | null; verified_at: number | null; /** * Present only on ownership verification responses immediately after * `prepare_ownership_verification`. The fully qualified DNS name the org admin * must publish the TXT record under. */ txt_record_name?: string | null; /** * Present only on ownership verification responses immediately after * `prepare_ownership_verification`. The exact value the org admin must publish * in the TXT record. */ txt_record_value?: string | null; } interface OrganizationDomainJSON extends ClerkResourceJSON { object: 'organization_domain'; id: string; name: string; organization_id: string; enrollment_mode: OrganizationEnrollmentMode; /** * @deprecated Use `affiliation_verification` instead. */ verification: OrganizationDomainVerificationJSON | null; affiliation_verification: OrganizationDomainVerificationJSON | null; ownership_verification: OrganizationDomainOwnershipVerificationJSON | null; affiliation_email_address: string | null; created_at: number; updated_at: number; total_pending_invitations: number; total_pending_suggestions: number; } /** * A per-domain failure entry returned by the bulk ownership verification * endpoints, carrying the `organization_domain_id` and the API error code that * caused it to be skipped. */ interface OrganizationDomainBulkOwnershipVerificationErrorJSON { id: string; code: string; } /** * Partial-success payload returned by the bulk `prepare`/`attempt` * ownership verification endpoints. Each requested domain id lands in either * `data` (with its current ownership state) or `errors`. */ interface OrganizationDomainsBulkOwnershipVerificationJSON { data: OrganizationDomainJSON[]; errors: OrganizationDomainBulkOwnershipVerificationErrorJSON[]; } interface RoleJSON extends ClerkResourceJSON { object: 'role'; id: string; key: string; name: string; description: string; permissions: PermissionJSON[]; created_at: number; updated_at: number; } interface PermissionJSON extends ClerkResourceJSON { object: 'permission'; id: string; key: string; name: string; description: string; type: 'system' | 'user'; created_at: number; updated_at: number; } interface PublicOrganizationDataJSON { id: string; name: string; slug: string | null; has_image: boolean; image_url: string; } interface OrganizationSuggestionJSON extends ClerkResourceJSON { object: 'organization_suggestion'; id: string; public_organization_data: PublicOrganizationDataJSON; status: OrganizationSuggestionStatus; created_at: number; updated_at: number; } interface OrganizationMembershipRequestJSON extends ClerkResourceJSON { object: 'organization_membership_request'; id: string; organization_id: string; status: OrganizationInvitationStatus; public_user_data: PublicUserDataJSON; created_at: number; updated_at: number; } interface UserOrganizationInvitationJSON extends ClerkResourceJSON { object: 'organization_invitation'; id: string; email_address: string; public_organization_data: PublicOrganizationDataJSON; public_metadata: OrganizationInvitationPublicMetadata; status: OrganizationInvitationStatus; role: OrganizationCustomRoleKey; created_at: number; updated_at: number; } interface UserDataJSON { first_name?: string; last_name?: string; image_url: string; has_image: boolean; } interface TOTPJSON extends ClerkResourceJSON { object: 'totp'; id: string; secret?: string; uri?: string; verified: boolean; backup_codes?: string[]; created_at: number; updated_at: number; } interface BackupCodeJSON extends ClerkResourceJSON { object: 'backup_code'; id: string; codes: string[]; created_at: number; updated_at: number; } interface DeletedObjectJSON { object: string; id?: string; slug?: string; deleted: boolean; } type SignInFirstFactorJSON = CamelToSnake<SignInFirstFactor>; type SignInSecondFactorJSON = CamelToSnake<SignInSecondFactor>; /** * Types for WebAuthN passkeys */ type Base64UrlString = string; interface PublicKeyCredentialUserEntityJSON { name: string; displayName: string; id: Base64UrlString; } interface PublicKeyCredentialDescriptorJSON { type: 'public-key'; id: Base64UrlString; transports?: ('ble' | 'hybrid' | 'internal' | 'nfc' | 'usb')[]; } interface AuthenticatorSelectionCriteriaJSON { requireResidentKey: boolean; residentKey: 'discouraged' | 'preferred' | 'required'; userVerification: 'discouraged' | 'preferred' | 'required'; } interface PublicKeyCredentialCreationOptionsJSON { rp: PublicKeyCredentialRpEntity; user: PublicKeyCredentialUserEntityJSON; challenge: Base64UrlString; pubKeyCredParams: PublicKeyCredentialParameters[]; timeout: number; excludeCredentials: PublicKeyCredentialDescriptorJSON[]; authenticatorSelection: AuthenticatorSelectionCriteriaJSON; attestation: 'direct' | 'enterprise' | 'indirect' | 'none'; } interface PublicKeyCredentialRequestOptionsJSON { allowCredentials: PublicKeyCredentialDescriptorJSON[]; challenge: Base64UrlString; rpId: string; timeout: number; userVerification: 'discouraged' | 'preferred' | 'required'; } interface WaitlistJSON extends ClerkResourceJSON { object: 'waitlist'; id: string; created_at: number; updated_at: number; } /** * @experimental This is an experimental API for the Billing feature that is available under a public beta, and the API is subject to change. It is advised to [pin](https://clerk.com/docs/pinning) the SDK version and the clerk-js version to avoid breaking changes. */ interface FeatureJSON extends ClerkResourceJSON { object: 'feature'; id: string; name: string; description: string | null; slug: string; avatar_url: string | null; } /** * @experimental This is an experimental API for the Billing feature that is available under a public beta, and the API is subject to change. It is advised to [pin](https://clerk.com/docs/pinning) the SDK version and the clerk-js version to avoid breaking changes. */ interface BillingSubscriptionItemSeatsJSON { /** * The number of seats available. `null` means unlimited. */ quantity: number | null; /** * The per-unit cost breakdown by pricing tier. */ tiers?: BillingPerUnitTotalTierJSON[]; } /** * @experimental This is an experimental API for the Billing feature that is available under a public beta, and the API is subject to change. It is advised to [pin](https://clerk.com/docs/pinning) the SDK version and the clerk-js version to avoid breaking changes. * * Represents a single pricing tier for a unit type on a plan. */ interface BillingPlanUnitPriceTierJSON extends ClerkResourceJSON { id: string; object: 'commerce_unit_price'; starts_at_block: number; /** * `null` means unlimited. */ ends_after_block: number | null; fee_per_block: BillingMoneyAmountJSON; } /** * @experimental This is an experimental API for the Billing feature that is available under a public beta, and the API is subject to change. It is advised to [pin](https://clerk.com/docs/pinning) the SDK version and the clerk-js version to avoid breaking changes. * * Represents unit pricing for a specific unit type (e.g., seats) on a plan. */ interface BillingPlanUnitPriceJSON { name: string; block_size: number; tiers: BillingPlanUnitPriceTierJSON[]; } /** * @experimental This is an experimental API for the Billing feature that is available under a public beta, and the API is subject to change. It is advised to [pin](https://clerk.com/docs/pinning) the SDK version and the clerk-js version to avoid breaking changes. * * Represents the cost breakdown for a single tier in checkout totals. */ interface BillingPerUnitTotalTierJSON { /** * `null` means unlimited. */ quantity: number | null; fee_per_block: BillingMoneyAmountJSON; total: BillingMoneyAmountJSON; } /** * @experimental This is an experimental API for the Billing feature that is available under a public beta, and the API is subject to change. It is advised to [pin](https://clerk.com/docs/pinning) the SDK version and the clerk-js version to avoid breaking changes. * * Represents the per-unit cost breakdown in checkout totals. */ interface BillingPerUnitTotalJSON { name: string; block_size: number; tiers: BillingPerUnitTotalTierJSON[]; } interface BillingPriceJSON extends ClerkResourceJSON { object: 'commerce_price'; fee: BillingMoneyAmountJSON | null; annual_monthly_fee: BillingMoneyAmountJSON | null; is_default: boolean; unit_prices?: BillingPlanUnitPriceJSON[]; } /** * @experimental This is an experimental API for the Billing feature that is available under a public beta, and the API is subject to change. It is advised to [pin](https://clerk.com/docs/pinning) the SDK version and the clerk-js version to avoid breaking changes. */ interface BillingPlanJSON extends ClerkResourceJSON { object: 'commerce_plan'; id: string; name: string; fee: BillingMoneyAmountJSON | null; annual_fee: BillingMoneyAmountJSON | null; annual_monthly_fee: BillingMoneyAmountJSON | null; description: string | null; is_default: boolean; is_recurring: boolean; has_base_fee: boolean; for_payer_type: BillingPayerResourceType; publicly_visible: boolean; slug: string; avatar_url: string | null; features?: FeatureJSON[]; free_trial_days?: number | null; free_trial_enabled?: boolean; /** * Per-unit pricing tiers for this plan (e.g., seats). */ unit_prices?: BillingPlanUnitPriceJSON[]; available_prices?: BillingPriceJSON[]; } /** * @experimental This is an experimental API for the Billing feature that is available under a public beta, and the API is subject to change. It is advised to [pin](https://clerk.com/docs/pinning) the SDK version and the clerk-js version to avoid breaking changes. */ interface BillingPaymentMethodJSON extends ClerkResourceJSON { object: 'commerce_payment_method'; id: string; last4: string | null; payment_type?: 'card'; card_type: string | null; is_default?: boolean; is_removable?: boolean; status: BillingPaymentMethodStatus; wallet_type?: string | null; expiry_year?: number | null; expiry_month?: number | null; created_at?: number | null; updated_at?: number | null; } /** * @experimental This is an experimental API for the Billing feature that is available under a public beta, and the API is subject to change. It is advised to [pin](https://clerk.com/docs/pinning) the SDK version and the clerk-js version to avoid breaking changes. */ interface BillingInitializedPaymentMethodJSON extends ClerkResourceJSON { object: 'commerce_payment_method_initialize'; external_client_secret: string; external_gateway_id: string; payment_method_order: string[]; } /** * @experimental This is an experimental API for the Billing feature that is available under a public beta, and the API is subject to change. It is advised to [pin](https://clerk.com/docs/pinning) the SDK version and the clerk-js version to avoid breaking changes. */ interface BillingStatementJSON extends ClerkResourceJSON { object: 'commerce_statement'; id: string; status: BillingStatementStatus; timestamp: number; groups: BillingStatementGroupJSON[]; totals: BillingStatementTotalsJSON; } /** * @experimental This is an experimental API for the Billing feature that is available under a public beta, and the API is subject to change. It is advised to [pin](https://clerk.com/docs/pinning) the SDK version and the clerk-js version to avoid breaking changes. */ interface BillingStatementGroupJSON extends ClerkResourceJSON { object: 'commerce_statement_group'; timestamp: number; items: BillingPaymentJSON[]; } /** * @experimental This is an experimental API for the Billing feature that is available under a public beta, and the API is subject to change. It is advised to [pin](https://clerk.com/docs/pinning) the SDK version and the clerk-js version to avoid breaking changes. * * Per-payment cost breakdown including optional base fee and per-unit (e.g., seats) subtotals. */ interface BillingPaymentTotalsJSON { subtotal: BillingMoneyAmountJSON; grand_total: BillingMoneyAmountJSON; tax_total: BillingMoneyAmountJSON; base_fee?: BillingMoneyAmountJSON | null; per_unit_totals?: BillingPerUnitTotalJSON[]; /** * Discounts applied to this payment such as mid-cycle prorated seat discounts. `null` when no discounts apply. */ discounts?: BillingDiscountsJSON | null; } /** * @experimental This is an experimental API for the Billing feature that is available under a public beta, and the API is subject to change. It is advised to [pin](https://clerk.com/docs/pinning) the SDK version and the clerk-js version to avoid breaking changes. */ interface BillingPaymentJSON extends ClerkResourceJSON { object: 'commerce_payment'; id: string; amount: BillingMoneyAmountJSON; paid_at: number | null; failed_at: number | null; updated_at: number; payment_method?: BillingPaymentMethodJSON | null; subscription_item: BillingSubscriptionItemJSON; charge_type: BillingPaymentChargeType; status: BillingPaymentStatus; /** * Per-payment breakdown with optional base fee and per-unit (e.g., seats) * subtotals. Absent on older responses. */ totals?: BillingPaymentTotalsJSON | null; } interface BillingTotalsJSON { subtotal: BillingMoneyAmountJSON; base_fee: BillingMoneyAmountJSON | null; tax_total: BillingMoneyAmountJSON; grand_total: BillingMoneyAmountJSON; total_due_after_free_trial?: BillingMoneyAmountJSON | null; credit?: BillingMoneyAmountJSON | null; credits: BillingCreditsJSON | null; discounts: BillingDiscountsJSON | null; past_due?: BillingMoneyAmountJSON | null; total_due_now?: BillingMoneyAmountJSON; per_unit_totals?: BillingPerUnitTotalJSON[]; totals_due_per_period?: BillingPeriodTotalsJSON; total_due_per_period?: BillingMoneyAmountJSON; } interface BillingSubscriptionItemNextPaymentJSON { amount: BillingMoneyAmountJSON; date: number; per_unit_totals?: BillingPerUnitTotalJSON[]; totals?: BillingTotalsJSON; } /** * @experimental This is an experimental API for the Billing feature that is available under a public beta, and the API is subject to change. It is advised to [pin](https://clerk.com/docs/pinning) the SDK version and the clerk-js version to avoid breaking changes. */ interface BillingSubscriptionItemJSON extends ClerkResourceJSON { object: 'commerce_subscription_item'; id: string; amount?: BillingMoneyAmountJSON; credit?: { amount: BillingMoneyAmountJSON; }; /** * Seat entitlement details for this subscription item. Only set for organization subscription items with * seat-based billing. */ seats?: BillingSubscriptionItemSeatsJSON; credits?: BillingCreditsJSON; plan: BillingPlanJSON; plan_period: BillingSubscriptionPlanPeriod; price_id: string; status: BillingSubscriptionStatus; created_at: number; period_start: number; /** * Period end is `null` for subscription items that are on the free plan. */ period_end: number | null; canceled_at: number | null; past_due_at: number | null; is_free_trial: boolean; next_payment?: BillingSubscriptionItemNextPaymentJSON | null; } interface BillingSubscriptionNextPaymentJSON { amount: BillingMoneyAmountJSON; date: number; per_unit_totals?: BillingPerUnitTotalJSON[]; totals?: BillingTotalsJSON; } /** * @experimental This is an experimental API for the Billing feature that is available under a public beta, and the API is subject to change. It is advised to [pin](https://clerk.com/docs/pinning) the SDK version and the clerk-js version to avoid breaking changes. */ interface BillingSubscriptionJSON extends ClerkResourceJSON { object: 'commerce_subscription'; id: string; /** * Describes the details for the next payment cycle. It is `undefined` for subscription items that are cancelled or on the free plan, and `null` when there is no upcoming payment. */ next_payment?: BillingSubscriptionNextPaymentJSON | null; /** * Due to the free plan subscription item, the top level subscription can either be `active` or `past_due`. */ status: Extract<BillingSubscriptionStatus, 'active' | 'past_due'>; created_at: number; active_at: number; updated_at: number | null; past_due_at: number | null; subscription_items: BillingSubscriptionItemJSON[] | null; eligible_for_free_trial: boolean; } /** * @experimental This is an experimental API for the Billing feature that is available under a public beta, and the API is subject to change. It is advised to [pin](https://clerk.com/docs/pinning) the SDK version and the clerk-js version to avoid breaking changes. */ interface BillingCreditBalanceJSON { object: 'commerce_credit_balance'; balance: BillingMoneyAmountJSON | null; } /** * @experimental This is an experimental API for the Billing feature that is available under a public beta, and the API is subject to change. It is advised to [pin](https://clerk.com/docs/pinning) the SDK version and the clerk-js version to avoid breaking changes. */ interface BillingCreditLedgerJSON { object: 'commerce_credit_ledger'; id: string; amount: BillingMoneyAmountJSON; source_type: string; source_id: string; created_at: number; } /** * @experimental This is an experimental API for the Billing feature that is available under a public beta, and the API is subject to change. It is advised to [pin](https://clerk.com/docs/pinning) the SDK version and the clerk-js version to avoid breaking changes. */ interface BillingMoneyAmountJSON { amount: number; amount_formatted: string; currency: string; currency_symbol: string; } /** * Contains proration credit details including billing cycle information. */ interface BillingProrationCreditDetailJSON { amount: BillingMoneyAmountJSON; cycle_days_remaining: number; cycle_days_total: number; cycle_remaining_percent: number; } /** * Contains payer credit details including the available balance and the amount applied to this checkout. */ interface BillingPayerCreditJSON { remaining_balance: BillingMoneyAmountJSON; applied_amount: BillingMoneyAmountJSON; } /** * Unified credits breakdown for checkout totals. Can be used instead of `credit` field. */ interface BillingCreditsJSON { proration: BillingProrationCreditDetailJSON | null; payer: BillingPayerCreditJSON | null; total: BillingMoneyAmountJSON; } /** * Details about a prorated discount applied when adding a seat mid-cycle. The discount covers the part of the * billing period that has already passed, so the payer is only charged for the time remaining in the cycle. */ interface BillingProrationDiscountJSON { amount: BillingMoneyAmountJSON; cycle_days_passed: number; cycle_days_total: number; cycle_passed_percent: number; } /** * Discounts applied to the checkout, such as prorated discounts for mid-cycle seat additions. * * @experimental This is an experimental API for the Billing feature that is available under a public beta, and the API is subject to change. It is advised to [pin](https://clerk.com/docs/pinning) the SDK version and the clerk-js version to avoid breaking changes. */ interface BillingDiscountsJSON { /** * The prorated discount for the part of the billing period that has already passed when adding a seat mid-cycle. * Unlike the proration credit (which refunds the unused remainder of a plan you already paid for), this discount * means you are not charged for the portion of the new seat's cycle that has already elapsed. */ proration: BillingProrationDiscountJSON | null; /** * The total of all discounts applied to the checkout. */ total: BillingMoneyAmountJSON; } /** * Per-period renewal totals, describing what the subscription renewal charge will look like after the current checkout. * Unlike the top-level checkout totals (which only reflect the items actively being purchased), * this object contains the full renewal breakdown including all seats and the base plan fee. * * @experimental This is an experimental API for the Billing feature that is available under a public beta, and the API is subject to change. It is advised to [pin](https://clerk.com/docs/pinning) the SDK version and the clerk-js version to avoid breaking changes. */ interface BillingPeriodTotalsJSON { subtotal: BillingMoneyAmountJSON; base_fee: BillingMoneyAmountJSON; tax_total: BillingMoneyAmountJSON; grand_total: BillingMoneyAmountJSON; /** * Per-unit cost breakdown for the renewal period, covering all units purchased to date * (not just the ones being added in this checkout). */ per_unit_totals?: BillingPerUnitTotalJSON[]; } /** * @experimental This is an experimental API for the Billing feature that is available under a public beta, and the API is subject to change. It is advised to [pin](https://clerk.com/docs/pinning) the SDK version and the clerk-js version to avoid breaking changes. */ interface BillingCheckoutTotalsJSON { grand_total: BillingMoneyAmountJSON; /** * The price of items actively being purchased in this checkout, before taxes and discounts. * When only adding seats mid-cycle, this reflects just the new seats and excludes the base plan fee and * seats that were already paid for. */ subtotal: BillingMoneyAmountJSON; /** * The base plan fee portion of the totals, before per-unit charges and adjustments. */ base_fee: BillingMoneyAmountJSON; tax_total: BillingMoneyAmountJSON; /** * Per-unit cost breakdown for items actively being purchased in this checkout (e.g., seats being added). * When only adding seats mid-cycle, this only covers the seats being added, not seats already paid for. * Omitted when the checkout is not seat-based. */ per_unit_totals?: BillingPerUnitTotalJSON[]; total_due_now: BillingMoneyAmountJSON; /** * Legacy credit field. Kept for backwards compatibility; prefer the unified `credits` breakdown. */ credit: BillingMoneyAmountJSON | null; credits: BillingCreditsJSON | null; account_credit: BillingMoneyAmountJSON | null; past_due: BillingMoneyAmountJSON | null; total_due_after_free_trial: BillingMoneyAmountJSON | null; /** * Discounts applied to this checkout such as mid-cycle prorated seat discounts. */ discounts: BillingDiscountsJSON | null; /** * The expected recurring payment for each future billing period. * Kept for backwards compatibility. Prefer `totals_due_per_period` for the full breakdown. */ total_due_per_period: BillingMoneyAmountJSON; /** * Full renewal period totals after this checkout completes. * Contains the complete breakdown of what the next recurring charge will look like, * including all seats and the base plan fee. */ totals_due_per_period: BillingPeriodTotalsJSON; } /** * @experimental This is an experimental API for the Billing feature that is available under a public beta, and the API is subject to change. It is advised to [pin](https://clerk.com/docs/pinning) the SDK version and the clerk-js version to avoid breaking changes. */ interface BillingStatementTotalsJSON { grand_total: BillingMoneyAmountJSON; subtotal: BillingMoneyAmountJSON; tax_total: BillingMoneyAmountJSON; } /** * @experimental This is an experimental API for the Billing feature that is available under a public beta, and the API is subject to change. It is advised to [pin](https://clerk.com/docs/pinning) the SDK version and the clerk-js version to avoid breaking changes. */ interface BillingCheckoutJSON extends ClerkResourceJSON { object: 'commerce_checkout'; id: string; external_client_secret: string; external_gateway_id: string; payment_method?: BillingPaymentMethodJSON; plan: BillingPlanJSON; plan_period: BillingSubscriptionPlanPeriod; plan_period_start?: number; status: 'needs_confirmation' | 'completed'; totals: BillingTotalsJSON; is_immediate_plan_change: boolean; free_trial_ends_at?: number; payer: BillingPayerJSON; needs_payment_method: boolean; } /** * @experimental This is an experimental API for the Billing feature that is available under a public beta, and the API is subject to change. It is advised to [pin](https://clerk.com/docs/pinning) the SDK version and the clerk-js version to avoid breaking changes. */ interface BillingPayerJSON extends ClerkResourceJSON { object: 'commerce_payer'; id: string; created_at?: number; updated_at?: number; image_url?: string; user_id: string | null; email?: string | null; first_name?: string | null; last_name?: string | null; organization_id: string | null; organization_name?: string | null; } interface ApiKeyJSON extends ClerkResourceJSON { id: string; type: string; name: string; subject: string; scopes: string[]; claims: Record<string, any> | null; revoked: boolean; revocation_reason: string | null; expired: boolean; expiration: number | null; created_by: string | null; description: string | null; /** * This property is only present in the response from `create()`. */ secret?: string; last_used_at: number | null; created_at: number; updated_at: number; } //#endregion export { ApiKeyJSON, AuthConfigJSON, BackupCodeJSON, BillingCheckoutJSON, BillingCheckoutTotalsJSON, BillingCreditBalanceJSON, BillingCreditLedgerJSON, BillingCreditsJSON, BillingDiscountsJSON, BillingInitializedPaymentMethodJSON, BillingMoneyAmountJSON, BillingPayerCreditJSON, BillingPayerJSON, BillingPaymentJSON, BillingPaymentMethodJSON, BillingPaymentTotalsJSON, BillingPerUnitTotalJSON, BillingPerUnitTotalTierJSON, BillingPeriodTotalsJSON, BillingPlanJSON, BillingPlanUnitPriceJSON, BillingPlanUnitPriceTierJSON, BillingPriceJSON, BillingProrationCreditDetailJSON, BillingProrationDiscountJSON, BillingStatementGroupJSON, BillingStatementJSON, BillingStatementTotalsJSON, BillingSubscriptionItemJSON, BillingSubscriptionItemNextPaymentJSON, BillingSubscriptionItemSeatsJSON, BillingSubscriptionJSON, BillingSubscriptionNextPaymentJSON, BillingTotalsJSON, ClerkResourceJSON, ClientJSON, ClientTrustState, DeletedObjectJSON, DisplayThemeJSON, EmailAddressJSON, EnterpriseAccountConnectionJSON, EnterpriseAccountJSON, EnvironmentJSON, ExternalAccountJSON, FeatureJSON, IdentificationLinkJSON, ImageJSON, LastAuthenticationStrategy, OrganizationDomainBulkOwnershipVerificationErrorJSON, OrganizationDomainJSON, OrganizationDomainOwnershipVerificationJSON, OrganizationDomainVerificationJSON, OrganizationDomainsBulkOwnershipVerificationJSON, OrganizationInvitationJSON, OrganizationJSON, OrganizationMembershipJSON, OrganizationMembershipRequestJSON, OrganizationSuggestionJSON, PartialWithClerkResource, PasskeyJSON, PermissionJSON, PhoneNumberJSON, ProtectCheckJSON, PublicKeyCredentialCreationOptionsJSON, PublicKeyCredentialRequestOptionsJSON, PublicOrganizationDataJSON, PublicUserDataJSON, RoleJSON, SessionActivityJSON, SessionJSON, SessionVerificationJSON, SessionWithActivitiesJSON, SignInFirstFactorJSON, SignInSecondFactorJSON, SignUpEnterpriseConnectionJSON, SignUpJSON, SignUpVerificationJSON, SignUpVerificationsJSON, TOTPJSON, TokenJSON, UserDataJSON, UserJSON, UserOrganizationInvitationJSON, VerificationJSON, WaitlistJSON, Web3WalletJSON };