@splitin/verification-adapter-stripe-identity 0.1.0-beta.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/constants.ts","../src/configuration.ts","../src/manifest.ts","../src/status.ts","../src/util.ts","../src/webhook.ts","../src/adapter.ts"],"names":["ProviderError","defineProviderManifest","VERIFICATION_ADAPTER_CONTRACT_VERSION","secretStringProperty","plainStringProperty","ProviderRequiredInformationError","idempotencyKey","isOpaqueSubjectReference","metadataContainsForbiddenIdentifier","ProviderUnavailableError"],"mappings":"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","file":"index.cjs","sourcesContent":["export const STRIPE_IDENTITY_API_VERSION = '2025-08-27.basil';\nexport const STRIPE_IDENTITY_API_HOST = 'api.stripe.com';\nexport const STRIPE_IDENTITY_HOSTED_HOST = 'verify.stripe.com';\nexport const STRIPE_IDENTITY_DISCLOSURE = 'Powered by Stripe';\n\nexport const STRIPE_IDENTITY_EVENTS = new Set([\n 'identity.verification_session.processing',\n 'identity.verification_session.verified',\n 'identity.verification_session.requires_input',\n 'identity.verification_session.canceled',\n 'identity.verification_session.redacted',\n]);\n\nexport const MANUAL_REVIEW_ERRORS = new Set([\n 'consent_declined',\n 'country_not_supported',\n 'device_unsupported',\n 'document_unverified_other',\n 'selfie_document_missing_photo',\n 'selfie_face_mismatch',\n 'selfie_manipulated',\n 'selfie_unverified_other',\n]);\n\nexport const TERMINAL_DECLINE_ERRORS = new Set(['under_supported_age']);\n","import { ProviderError } from '@splitin/verification-adapter-sdk';\n\nimport { STRIPE_IDENTITY_API_VERSION } from './constants.ts';\n\nexport interface StripeIdentityAdapterConfiguration {\n restrictedKey: string;\n accountId: string;\n webhookSecret: string;\n webhookSecretPrevious?: string;\n apiVersion: string;\n returnUrl?: string;\n webhookToleranceSeconds?: number;\n requireMatchingSelfie?: boolean;\n}\n\n/**\n * CLI/env mapping helper. Adapter logic never reads process.env.\n * Conventional field names are accepted alongside camelCase keys.\n */\nexport function createStripeIdentityConfiguration(\n values: Record<string, string | undefined>,\n): StripeIdentityAdapterConfiguration {\n return Object.freeze({\n restrictedKey: firstValue(values, 'restrictedKey', 'STRIPE_IDENTITY_RESTRICTED_KEY'),\n accountId: firstValue(values, 'accountId', 'STRIPE_IDENTITY_ACCOUNT_ID'),\n webhookSecret: firstValue(values, 'webhookSecret', 'STRIPE_IDENTITY_WEBHOOK_SECRET'),\n webhookSecretPrevious: optionalValue(values, 'webhookSecretPrevious', 'STRIPE_IDENTITY_WEBHOOK_SECRET_PREVIOUS'),\n apiVersion: firstValue(values, 'apiVersion', 'STRIPE_IDENTITY_API_VERSION') || STRIPE_IDENTITY_API_VERSION,\n returnUrl: optionalValue(values, 'returnUrl', 'STRIPE_IDENTITY_RETURN_URL'),\n webhookToleranceSeconds: parseTolerance(\n values.webhookToleranceSeconds ?? values.STRIPE_IDENTITY_WEBHOOK_TOLERANCE_SECONDS,\n ),\n requireMatchingSelfie: parseBoolean(\n values.requireMatchingSelfie ?? values.STRIPE_IDENTITY_REQUIRE_MATCHING_SELFIE,\n ),\n });\n}\n\nexport function webhookSecretsFromConfig(config: StripeIdentityAdapterConfiguration): string[] {\n return [config.webhookSecret, config.webhookSecretPrevious]\n .map((value) => value?.trim() ?? '')\n .filter((value) => value.startsWith('whsec_'));\n}\n\nexport function validateStripeIdentityConfiguration(\n config: StripeIdentityAdapterConfiguration,\n environment: 'sandbox' | 'production',\n): void {\n const expectedPrefix = environment === 'production' ? 'rk_live_' : 'rk_test_';\n if (!config.restrictedKey.startsWith(expectedPrefix)) {\n throw new ProviderError('INVALID_CONFIGURATION', 'Stripe Identity credentials do not match the pinned environment.', {\n safeCode: 'stripe_identity_credential_environment_mismatch',\n });\n }\n if (webhookSecretsFromConfig(config).length === 0) {\n throw new ProviderError('INVALID_CONFIGURATION', 'Stripe Identity webhook authentication is not configured.', {\n safeCode: 'stripe_identity_webhook_secret_missing',\n });\n }\n if (config.apiVersion !== STRIPE_IDENTITY_API_VERSION) {\n throw new ProviderError('INVALID_CONFIGURATION', 'Stripe Identity API version does not match the reviewed contract.', {\n safeCode: 'stripe_identity_api_version_mismatch',\n });\n }\n if (!/^acct_[A-Za-z0-9]{8,252}$/.test(config.accountId)) {\n throw new ProviderError('INVALID_CONFIGURATION', 'Stripe Identity account is invalid.', {\n safeCode: 'stripe_identity_account_invalid',\n });\n }\n if (config.returnUrl) assertHttpsReturnUrl(config.returnUrl);\n if (\n config.webhookToleranceSeconds !== undefined\n && (!Number.isInteger(config.webhookToleranceSeconds)\n || config.webhookToleranceSeconds < 60\n || config.webhookToleranceSeconds > 900)\n ) {\n throw new ProviderError('INVALID_CONFIGURATION', 'Stripe Identity webhook tolerance is invalid.', {\n safeCode: 'stripe_identity_webhook_tolerance_invalid',\n });\n }\n}\n\nfunction assertHttpsReturnUrl(value: string): void {\n let url: URL;\n try {\n url = new URL(value);\n } catch {\n throw new ProviderError('INVALID_CONFIGURATION', 'Stripe Identity return URL is invalid.', {\n safeCode: 'stripe_identity_return_url_invalid',\n });\n }\n if (url.protocol !== 'https:' || Boolean(url.username || url.password)) {\n throw new ProviderError('INVALID_CONFIGURATION', 'Stripe Identity return URL is invalid.', {\n safeCode: 'stripe_identity_return_url_invalid',\n });\n }\n}\n\nfunction firstValue(values: Record<string, string | undefined>, camel: string, conventional: string): string {\n return values[camel]?.trim() || values[conventional]?.trim() || '';\n}\n\nfunction optionalValue(\n values: Record<string, string | undefined>,\n camel: string,\n conventional: string,\n): string | undefined {\n const value = firstValue(values, camel, conventional);\n return value || undefined;\n}\n\nfunction parseTolerance(value: string | undefined): number | undefined {\n if (value == null || value === '') return undefined;\n const parsed = Number(value);\n return Number.isInteger(parsed) && parsed >= 60 && parsed <= 900 ? parsed : 300;\n}\n\nfunction parseBoolean(value: string | undefined): boolean | undefined {\n if (value == null || value === '') return undefined;\n const normalized = value.trim().toLowerCase();\n if (normalized === 'true' || normalized === '1' || normalized === 'yes') return true;\n if (normalized === 'false' || normalized === '0' || normalized === 'no') return false;\n return undefined;\n}\n","import {\n VERIFICATION_ADAPTER_CONTRACT_VERSION,\n defineProviderManifest,\n plainStringProperty,\n secretStringProperty,\n type ProviderManifestV1,\n} from '@splitin/verification-adapter-sdk';\n\nimport { STRIPE_IDENTITY_API_VERSION } from './constants.ts';\n\nexport const stripeIdentityProviderManifest: Readonly<ProviderManifestV1> = defineProviderManifest({\n contractVersion: VERIFICATION_ADAPTER_CONTRACT_VERSION,\n adapterVersion: '1.0.0',\n engineCompatibility: '1.0.0',\n provider: 'stripe_identity',\n displayName: 'Stripe Identity',\n description: 'Human document identity verification via Stripe Identity. Connect, Payments, banks, and payouts are out of scope.',\n supportedPackages: ['human_idv'],\n supportedCountries: ['US'],\n environments: ['sandbox', 'production'],\n capabilities: {\n presentations: ['embedded', 'hosted', 'none'],\n canResume: true,\n canRetry: true,\n canCancel: true,\n canRedact: true,\n },\n launcherKeys: ['stripe_identity', 'hosted'],\n launchPresentations: ['embedded', 'hosted', 'none'],\n configurationSchemaVersion: 'urn:splitin:verification:config:stripe-identity:v1',\n configurationSchema: {\n $schema: 'https://json-schema.org/draft/2020-12/schema',\n type: 'object',\n additionalProperties: false,\n required: ['restrictedKey', 'accountId', 'webhookSecret', 'apiVersion'],\n properties: {\n restrictedKey: secretStringProperty(),\n accountId: plainStringProperty(),\n webhookSecret: secretStringProperty(),\n webhookSecretPrevious: { type: 'string', minLength: 1, 'x-secret': true },\n apiVersion: { type: 'string', const: STRIPE_IDENTITY_API_VERSION },\n returnUrl: { type: 'string', format: 'uri', 'x-secret': false },\n webhookToleranceSeconds: { type: 'integer', minimum: 60, maximum: 900 },\n requireMatchingSelfie: { type: 'boolean' },\n },\n },\n webhook: {\n protocol: 'stripe_v1_hmac',\n eventFamilies: [\n 'identity.verification_session.processing',\n 'identity.verification_session.verified',\n 'identity.verification_session.requires_input',\n 'identity.verification_session.canceled',\n 'identity.verification_session.redacted',\n ],\n toleranceSeconds: 300,\n },\n dataPolicy: {\n classifications: ['provider_resource_id', 'normalized_status', 'reason_codes'],\n prohibitedPersistence: ['raw_webhook', 'launch_secret', 'document', 'selfie', 'client_secret'],\n rawPayloadPersistence: false,\n browserSecretPersistence: false,\n governmentIdentifierPersistence: false,\n },\n retry: { sameResourceWhenResumable: true, newAttemptAfterTerminal: true },\n cancellation: { supported: true, terminal: true },\n redaction: { supported: true, asynchronous: true },\n apiHosts: ['api.stripe.com'],\n testedApiVersions: [STRIPE_IDENTITY_API_VERSION],\n});\n","import type { VerificationCanonicalStatus } from '@splitin/verification-adapter-sdk';\n\nimport { MANUAL_REVIEW_ERRORS, TERMINAL_DECLINE_ERRORS } from './constants.ts';\n\nexport interface StripeStatusNormalization {\n canonicalStatus: VerificationCanonicalStatus;\n reasonCodes: string[];\n}\n\nexport function normalizeStripeIdentityStatus(\n status: string,\n lastErrorCode: string | null,\n eventType?: string,\n redactionStatus?: string | null,\n): StripeStatusNormalization {\n const reasonCodes = lastErrorCode && /^[a-z0-9_]{1,96}$/.test(lastErrorCode) ? [lastErrorCode] : [];\n if (eventType === 'identity.verification_session.redacted' || redactionStatus === 'redacted') {\n return { canonicalStatus: 'redacted', reasonCodes: [...reasonCodes, 'provider_redacted'] };\n }\n if (redactionStatus === 'processing') {\n return { canonicalStatus: 'processing', reasonCodes: [...reasonCodes, 'provider_redaction_processing'] };\n }\n if (status === 'verified') return { canonicalStatus: 'verified', reasonCodes };\n if (status === 'processing') return { canonicalStatus: 'processing', reasonCodes };\n if (status === 'canceled') return { canonicalStatus: 'canceled', reasonCodes };\n if (status === 'requires_input') {\n return {\n canonicalStatus: lastErrorCode && TERMINAL_DECLINE_ERRORS.has(lastErrorCode)\n ? 'declined'\n : lastErrorCode && MANUAL_REVIEW_ERRORS.has(lastErrorCode)\n ? 'manual_review_required'\n : 'pending_user_input',\n reasonCodes,\n };\n }\n return { canonicalStatus: 'manual_review_required', reasonCodes: ['stripe_unknown_status'] };\n}\n","import { ProviderError, ProviderRequiredInformationError } from '@splitin/verification-adapter-sdk';\n\nimport type { StripeVerificationSession } from './types.ts';\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nexport function requireSession(value: unknown): StripeVerificationSession {\n if (!isRecord(value)\n || typeof value.id !== 'string'\n || !/^vs_[A-Za-z0-9_]{8,252}$/.test(value.id)\n || typeof value.status !== 'string'\n || typeof value.created !== 'number'\n || typeof value.livemode !== 'boolean') {\n throw new ProviderError('UNKNOWN_PROVIDER_STATE', 'Stripe Identity returned an invalid session.', {\n safeCode: 'malformed_provider_response',\n });\n }\n return value as unknown as StripeVerificationSession;\n}\n\nexport function encodeSessionId(value: string): string {\n if (!/^vs_[A-Za-z0-9_]{8,252}$/.test(value)) throw new ProviderRequiredInformationError('Stripe Identity session id is invalid.');\n return encodeURIComponent(value);\n}\n\nexport function safeClientSecret(value: unknown): string | undefined {\n return typeof value === 'string' && /^vs_[A-Za-z0-9_]+_secret_[A-Za-z0-9_]+$/.test(value) ? value : undefined;\n}\n\nexport function safeStripeHostedUrl(value: unknown, hostedHost: string): string | undefined {\n if (typeof value !== 'string') return undefined;\n try {\n const url = new URL(value);\n return url.protocol === 'https:' && url.hostname === hostedHost && !url.username && !url.password\n ? url.toString()\n : undefined;\n } catch {\n return undefined;\n }\n}\n\nexport function safeEmail(value: string): string {\n const normalized = value.trim().toLowerCase();\n if (normalized.length > 254 || !/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(normalized)) {\n throw new ProviderRequiredInformationError();\n }\n return normalized;\n}\n\nexport function parseRetryAfter(value: string | null): number | undefined {\n if (!value || !/^\\d{1,6}$/.test(value)) return undefined;\n return Math.min(Number(value), 3600);\n}\n\nexport function isoExpiry(observedAt: Date, ttlSeconds: number): string {\n return new Date(observedAt.getTime() + ttlSeconds * 1000).toISOString();\n}\n\nexport async function sha256Hex(crypto: Crypto, payload: Uint8Array): Promise<string> {\n const digest = new Uint8Array(await crypto.subtle.digest('SHA-256', Uint8Array.from(payload)));\n return toHex(digest);\n}\n\nexport function timingSafeEqualHex(left: string, right: string): boolean {\n if (left.length !== right.length) return false;\n let difference = 0;\n for (let index = 0; index < left.length; index += 1) {\n difference |= left.charCodeAt(index)! ^ right.charCodeAt(index)!;\n }\n return difference === 0;\n}\n\nexport function toHex(value: Uint8Array): string {\n return Array.from(value, (byte) => byte.toString(16).padStart(2, '0')).join('');\n}\n\nexport function mapProviderHttpError(status: number, retryAfterHeader: string | null, providerLabel: string): ProviderError {\n const retryAfter = parseRetryAfter(retryAfterHeader);\n const code = status === 401 || status === 403 ? 'AUTHENTICATION_FAILED'\n : status === 429 ? 'RATE_LIMITED'\n : status === 408 || status === 504 ? 'TIMEOUT'\n : status >= 500 ? 'RETRYABLE_PROVIDER_FAILURE' : 'TERMINAL_INPUT_FAILURE';\n const prefix = providerLabel.replace(/[^a-z0-9]+/g, '_');\n return new ProviderError(code, `${providerLabel} request failed.`, {\n retryable: status === 408 || status === 429 || status >= 500,\n retryAfterSeconds: retryAfter,\n safeCode: code === 'AUTHENTICATION_FAILED' ? `${prefix}_authentication_failed`\n : code === 'RATE_LIMITED' ? `${prefix}_rate_limited`\n : code === 'TIMEOUT' ? `${prefix}_timeout`\n : code === 'RETRYABLE_PROVIDER_FAILURE' ? `${prefix}_provider_failure`\n : `${prefix}_terminal_input_failure`,\n });\n}\n","import { ProviderError, type VerifiedWebhookEnvelope } from '@splitin/verification-adapter-sdk';\n\nimport { STRIPE_IDENTITY_EVENTS } from './constants.ts';\nimport { normalizeStripeIdentityStatus } from './status.ts';\nimport type { StripeIdentityEvent, StripeVerificationSession } from './types.ts';\nimport { isRecord, requireSession, sha256Hex, timingSafeEqualHex } from './util.ts';\n\nexport async function verifyStripeIdentityWebhook(\n request: Request,\n options: {\n secrets: readonly string[];\n toleranceSeconds: number;\n now: Date;\n crypto: Crypto;\n environment: 'sandbox' | 'production';\n },\n): Promise<VerifiedWebhookEnvelope> {\n const rawBody = new Uint8Array(await request.arrayBuffer());\n if (rawBody.byteLength === 0 || rawBody.byteLength > 1_048_576) {\n throw new ProviderError('SIGNATURE_INVALID', 'Stripe Identity webhook body is invalid.', {\n safeCode: 'stripe_identity_webhook_body_invalid',\n });\n }\n const signature = parseStripeSignature(request.headers.get('stripe-signature'));\n const nowSeconds = Math.floor(options.now.getTime() / 1000);\n if (Math.abs(nowSeconds - signature.timestamp) > options.toleranceSeconds) {\n throw new ProviderError('SIGNATURE_INVALID', 'Stripe Identity webhook signature is stale.', {\n safeCode: 'stripe_identity_webhook_replay',\n });\n }\n const prefix = new TextEncoder().encode(`${signature.timestamp}.`);\n const signedPayload = new Uint8Array(prefix.length + rawBody.length);\n signedPayload.set(prefix);\n signedPayload.set(rawBody, prefix.length);\n let matched = false;\n for (const secret of options.secrets) {\n const digest = await hmacSha256Hex(options.crypto, secret, signedPayload);\n if (signature.v1.some((candidate) => timingSafeEqualHex(digest, candidate))) matched = true;\n }\n if (!matched) {\n throw new ProviderError('SIGNATURE_INVALID', 'Stripe Identity webhook signature is invalid.', {\n safeCode: 'stripe_identity_webhook_signature_invalid',\n });\n }\n const bodySha256 = await sha256Hex(options.crypto, rawBody);\n let providerEventKey = `stripe_${bodySha256}`;\n try {\n const parsed = parseStripeEvent(rawBody);\n assertLivemode(parsed.livemode, options.environment);\n providerEventKey = parsed.id;\n } catch (error) {\n if (!(error instanceof ProviderError) || error.safeCode !== 'stripe_webhook_payload_invalid') throw error;\n }\n return {\n providerEventKey,\n receivedAt: options.now.toISOString(),\n bodySha256,\n signatureIssuedAt: new Date(signature.timestamp * 1000).toISOString(),\n opaquePayload: rawBody,\n };\n}\n\nexport function parseStripeEvent(rawBody: Uint8Array): StripeIdentityEvent {\n let parsed: unknown;\n try {\n parsed = JSON.parse(new TextDecoder().decode(rawBody));\n } catch {\n throw new ProviderError('TERMINAL_INPUT_FAILURE', 'Stripe Identity webhook payload is invalid.', {\n safeCode: 'stripe_webhook_payload_invalid',\n });\n }\n if (!isRecord(parsed)\n || typeof parsed.id !== 'string'\n || !/^evt_[A-Za-z0-9_]{8,252}$/.test(parsed.id)\n || typeof parsed.type !== 'string'\n || typeof parsed.created !== 'number'\n || typeof parsed.livemode !== 'boolean'\n || !isRecord(parsed.data)\n || !isRecord(parsed.data.object)) {\n throw new ProviderError('TERMINAL_INPUT_FAILURE', 'Stripe Identity webhook event is invalid.', {\n safeCode: 'stripe_webhook_payload_invalid',\n });\n }\n return parsed as unknown as StripeIdentityEvent;\n}\n\nexport function eventIsAllowlisted(eventType: string): boolean {\n return STRIPE_IDENTITY_EVENTS.has(eventType);\n}\n\nexport function sessionFromEvent(event: StripeIdentityEvent): StripeVerificationSession {\n return requireSession(event.data.object);\n}\n\nexport function normalizeAllowlistedEvent(event: StripeIdentityEvent) {\n const session = sessionFromEvent(event);\n const allowlisted = eventIsAllowlisted(event.type);\n return allowlisted\n ? normalizeStripeIdentityStatus(\n session.status,\n session.last_error?.code ?? null,\n event.type,\n session.redaction?.status ?? null,\n )\n : { canonicalStatus: 'manual_review_required' as const, reasonCodes: ['stripe_unknown_event'] };\n}\n\nfunction parseStripeSignature(value: string | null): { timestamp: number; v1: string[] } {\n if (!value || value.length > 4096) {\n throw new ProviderError('SIGNATURE_INVALID', 'Stripe Identity signature is missing.', {\n safeCode: 'stripe_identity_signature_missing',\n });\n }\n let timestamp: number | null = null;\n const v1: string[] = [];\n for (const part of value.split(',')) {\n const [key, candidate] = part.trim().split('=', 2);\n if (key === 't' && /^\\d{1,16}$/.test(candidate ?? '')) timestamp = Number(candidate);\n if (key === 'v1' && /^[a-f0-9]{64}$/i.test(candidate ?? '')) v1.push((candidate ?? '').toLowerCase());\n }\n if (!timestamp || !Number.isSafeInteger(timestamp) || v1.length === 0) {\n throw new ProviderError('SIGNATURE_INVALID', 'Stripe Identity signature is invalid.', {\n safeCode: 'stripe_identity_signature_invalid',\n });\n }\n return { timestamp, v1 };\n}\n\nfunction assertLivemode(livemode: boolean, environment: 'sandbox' | 'production'): void {\n if (livemode !== (environment === 'production')) {\n throw new ProviderError('TERMINAL_INPUT_FAILURE', 'Stripe Identity mode does not match the pinned environment.', {\n safeCode: 'stripe_environment_mismatch',\n });\n }\n}\n\nasync function hmacSha256Hex(crypto: Crypto, secret: string, payload: Uint8Array): Promise<string> {\n const key = await crypto.subtle.importKey(\n 'raw',\n new TextEncoder().encode(secret),\n { name: 'HMAC', hash: 'SHA-256' },\n false,\n ['sign'],\n );\n const digest = new Uint8Array(await crypto.subtle.sign('HMAC', key, payload as BufferSource));\n return Array.from(digest, (byte) => byte.toString(16).padStart(2, '0')).join('');\n}\n","import {\n ProviderError,\n ProviderRequiredInformationError,\n ProviderUnavailableError,\n VERIFICATION_ADAPTER_CONTRACT_VERSION,\n isOpaqueSubjectReference,\n metadataContainsForbiddenIdentifier,\n type NormalizedProviderEvent,\n type NormalizedProviderSnapshot,\n type ProviderAttemptCommand,\n type ProviderAttemptResult,\n type ProviderLaunchEnvelope,\n type ProviderOperation,\n type ProviderOperationResult,\n type ProviderRedactionCommand,\n type ProviderRedactionResult,\n type ProviderResourceCommand,\n type ProviderResumeCommand,\n type ProviderRetryCommand,\n type ProviderRuntimeContext,\n type VerificationAdapterV1,\n type VerificationCanonicalStatus,\n type VerificationLaunchPresentation,\n type VerifiedWebhookEnvelope,\n} from '@splitin/verification-adapter-sdk';\n\nimport {\n type StripeIdentityAdapterConfiguration,\n validateStripeIdentityConfiguration,\n webhookSecretsFromConfig,\n} from './configuration.ts';\nimport {\n STRIPE_IDENTITY_API_HOST,\n STRIPE_IDENTITY_API_VERSION,\n STRIPE_IDENTITY_DISCLOSURE,\n STRIPE_IDENTITY_HOSTED_HOST,\n} from './constants.ts';\nimport { stripeIdentityProviderManifest } from './manifest.ts';\nimport { normalizeStripeIdentityStatus } from './status.ts';\nimport type { StripeVerificationSession } from './types.ts';\nimport {\n encodeSessionId,\n isoExpiry,\n mapProviderHttpError,\n requireSession,\n safeClientSecret,\n safeEmail,\n safeStripeHostedUrl,\n sha256Hex,\n} from './util.ts';\nimport {\n eventIsAllowlisted,\n normalizeAllowlistedEvent,\n parseStripeEvent,\n sessionFromEvent,\n verifyStripeIdentityWebhook,\n} from './webhook.ts';\n\nexport class StripeIdentityVerificationAdapter implements VerificationAdapterV1<StripeIdentityAdapterConfiguration> {\n readonly contractVersion = VERIFICATION_ADAPTER_CONTRACT_VERSION;\n readonly manifest = stripeIdentityProviderManifest;\n readonly provider = 'stripe_identity' as const;\n readonly environment: 'sandbox' | 'production';\n readonly runtime: ProviderRuntimeContext<StripeIdentityAdapterConfiguration>;\n\n constructor(runtime: ProviderRuntimeContext<StripeIdentityAdapterConfiguration>) {\n this.runtime = runtime;\n this.environment = runtime.environment;\n this.validateConfiguration();\n }\n\n validateConfiguration(): void {\n validateStripeIdentityConfiguration(this.runtime.configuration, this.environment);\n }\n\n async createAttempt(command: ProviderAttemptCommand): Promise<ProviderAttemptResult> {\n this.assertCommand(command);\n const body = new URLSearchParams();\n body.set('type', 'document');\n body.set('client_reference_id', await sha256Hex(this.runtime.crypto, new TextEncoder().encode(command.subjectReference)));\n body.set('metadata[attempt_id]', command.attemptId);\n body.set('options[document][require_matching_selfie]', this.runtime.configuration.requireMatchingSelfie === true ? 'true' : 'false');\n if (command.email) body.set('provided_details[email]', safeEmail(command.email));\n if (this.runtime.configuration.returnUrl) body.set('return_url', this.runtime.configuration.returnUrl);\n const session = await this.call('/identity/verification_sessions', {\n method: 'POST',\n operation: 'create',\n idempotencyScope: command.attemptId,\n body,\n idempotencyKey: command.idempotencyKey,\n });\n return this.toAttemptResult(command.attemptId, session);\n }\n\n async resumeAttempt(command: ProviderResumeCommand): Promise<ProviderLaunchEnvelope> {\n const session = await this.getSession(command.providerResourceId, 'resume');\n return this.launchFor(command.attemptId, session);\n }\n\n async retrieveAttempt(command: ProviderResourceCommand): Promise<NormalizedProviderSnapshot> {\n return this.normalizeSnapshot(await this.getSession(command.providerResourceId, 'retrieve'));\n }\n\n async retryAttempt(command: ProviderRetryCommand): Promise<ProviderAttemptResult> {\n this.assertCommand(command);\n if (command.previousProviderResourceId) {\n const previous = await this.getSession(command.previousProviderResourceId, 'retry');\n if (previous.status === 'requires_input') return this.toAttemptResult(command.attemptId, previous);\n if (previous.redaction?.status === 'redacted' || previous.status === 'canceled') {\n const idempotencyKey = this.runtime.idempotency.keyFor('retry', command.attemptId, command.idempotencyKey);\n return this.createAttempt({ ...command, idempotencyKey });\n }\n if (previous.status === 'processing') {\n throw new ProviderError('RETRYABLE_PROVIDER_FAILURE', 'Stripe Identity is still processing this attempt.', {\n retryable: true,\n retryAfterSeconds: 15,\n safeCode: 'stripe_identity_processing',\n });\n }\n if (previous.status === 'verified') {\n throw new ProviderError('TERMINAL_INPUT_FAILURE', 'A verified Stripe Identity attempt cannot be retried.', {\n safeCode: 'stripe_identity_already_verified',\n });\n }\n throw new ProviderError('UNKNOWN_PROVIDER_STATE', 'Stripe Identity retry state is not recognized.', {\n safeCode: 'stripe_identity_retry_state_unknown',\n });\n }\n const idempotencyKey = this.runtime.idempotency.keyFor('retry', command.attemptId, command.idempotencyKey);\n return this.createAttempt({ ...command, idempotencyKey });\n }\n\n async cancelAttempt(command: ProviderResourceCommand): Promise<ProviderOperationResult> {\n const current = await this.getSession(command.providerResourceId, 'cancel');\n if (current.status === 'canceled') return { accepted: true, providerStatus: current.status, canonicalStatus: 'canceled' };\n if (current.status === 'processing') {\n throw new ProviderError('RETRYABLE_PROVIDER_FAILURE', 'Stripe Identity is already processing this attempt.', {\n retryable: true,\n retryAfterSeconds: 15,\n safeCode: 'stripe_identity_processing',\n });\n }\n if (current.status !== 'requires_input') {\n throw new ProviderError('TERMINAL_INPUT_FAILURE', 'Stripe Identity cannot cancel this attempt state.', {\n safeCode: current.status === 'verified'\n ? 'stripe_identity_already_verified'\n : 'stripe_identity_cancel_state_invalid',\n });\n }\n const session = await this.call(`/identity/verification_sessions/${encodeSessionId(command.providerResourceId)}/cancel`, {\n method: 'POST',\n operation: 'cancel',\n idempotencyScope: command.attemptId,\n body: new URLSearchParams(),\n });\n return {\n accepted: session.status === 'canceled',\n providerStatus: session.status,\n canonicalStatus: session.status === 'canceled' ? 'canceled' : undefined,\n };\n }\n\n async redactSubject(command: ProviderRedactionCommand): Promise<ProviderRedactionResult> {\n if (!command.providerResourceId) throw new ProviderRequiredInformationError();\n const current = await this.getSession(command.providerResourceId, 'redact');\n if (current.redaction?.status === 'redacted') {\n return { completed: true, retryable: false, disposition: 'redacted' };\n }\n if (current.redaction?.status === 'processing' || current.status === 'processing') {\n return { completed: false, retryable: true, disposition: 'processing' };\n }\n if (current.status === 'canceled') {\n return { completed: true, retryable: false, disposition: 'not_applicable' };\n }\n if (current.status !== 'requires_input' && current.status !== 'verified') {\n return { completed: false, retryable: false, disposition: 'failed' };\n }\n const session = await this.call(`/identity/verification_sessions/${encodeSessionId(command.providerResourceId)}/redact`, {\n method: 'POST',\n operation: 'redact',\n idempotencyScope: command.requestReference,\n body: new URLSearchParams(),\n idempotencyKey: command.requestReference,\n });\n const status = session.redaction?.status ?? '';\n if (status === 'redacted') return { completed: true, retryable: false, disposition: 'redacted' };\n if (status === 'processing') return { completed: false, retryable: true, disposition: 'processing' };\n return { completed: false, retryable: false, disposition: 'failed' };\n }\n\n async verifyWebhook(request: Request): Promise<VerifiedWebhookEnvelope> {\n return verifyStripeIdentityWebhook(request, {\n secrets: webhookSecretsFromConfig(this.runtime.configuration),\n toleranceSeconds: this.runtime.configuration.webhookToleranceSeconds ?? this.manifest.webhook.toleranceSeconds ?? 300,\n now: this.runtime.now(),\n crypto: this.runtime.crypto,\n environment: this.environment,\n });\n }\n\n async normalizeWebhook(input: VerifiedWebhookEnvelope): Promise<NormalizedProviderEvent> {\n const event = parseStripeEvent(input.opaquePayload);\n if (event.id !== input.providerEventKey) {\n throw new ProviderError('TERMINAL_INPUT_FAILURE', 'Stripe Identity webhook event identity is inconsistent.', {\n safeCode: 'stripe_webhook_event_identity_mismatch',\n });\n }\n const session = sessionFromEvent(event);\n this.assertLivemode(event.livemode);\n this.assertLivemode(session.livemode);\n if (event.account && event.account !== this.runtime.configuration.accountId) {\n throw new ProviderError('TERMINAL_INPUT_FAILURE', 'Stripe Identity webhook account is inconsistent.', {\n safeCode: 'stripe_account_mismatch',\n });\n }\n if (event.livemode !== session.livemode) {\n throw new ProviderError('TERMINAL_INPUT_FAILURE', 'Stripe Identity webhook mode is inconsistent.', {\n safeCode: 'stripe_environment_mismatch',\n });\n }\n const eventAllowlisted = eventIsAllowlisted(event.type);\n const normalized = normalizeAllowlistedEvent(event);\n return {\n providerEventKey: event.id,\n providerResourceId: session.id,\n eventType: `verification.provider_event.${normalized.canonicalStatus}`,\n providerEventType: event.type,\n canonicalStatus: normalized.canonicalStatus,\n occurredAt: new Date(event.created * 1000).toISOString(),\n normalizedReasonCodes: normalized.reasonCodes,\n safeMetadata: {\n livemode: event.livemode,\n adapter_version: this.manifest.adapterVersion,\n normalization_version: 'stripe-identity-v1',\n event_allowlisted: eventAllowlisted,\n reconcile_required: !eventAllowlisted || normalized.reasonCodes.includes('stripe_unknown_status'),\n },\n };\n }\n\n private assertCommand(command: ProviderAttemptCommand): void {\n if (command.packageCode !== 'human_idv') {\n throw new ProviderError('UNSUPPORTED_CAPABILITY', 'Stripe Identity does not support this verification package.', {\n safeCode: 'unsupported_package',\n });\n }\n if (!isOpaqueSubjectReference(command.subjectReference)) {\n throw new ProviderError('TERMINAL_INPUT_FAILURE', 'The subject reference is not an opaque identifier.', {\n safeCode: 'subject_reference_invalid',\n });\n }\n if (metadataContainsForbiddenIdentifier(command.metadata)) {\n throw new ProviderError('TERMINAL_INPUT_FAILURE', 'Attempt metadata contains a forbidden identifier.', {\n safeCode: 'forbidden_identifier',\n });\n }\n }\n\n private assertLivemode(livemode: boolean): void {\n if (livemode !== (this.environment === 'production')) {\n throw new ProviderError('TERMINAL_INPUT_FAILURE', 'Stripe Identity mode does not match the pinned environment.', {\n safeCode: 'stripe_environment_mismatch',\n });\n }\n }\n\n private async getSession(\n providerResourceId: string,\n operation: ProviderOperation,\n ): Promise<StripeVerificationSession> {\n return this.call(`/identity/verification_sessions/${encodeSessionId(providerResourceId)}`, {\n method: 'GET',\n operation,\n });\n }\n\n private toAttemptResult(attemptId: string, session: StripeVerificationSession): ProviderAttemptResult {\n const normalized = normalizeStripeIdentityStatus(\n session.status,\n session.last_error?.code ?? null,\n undefined,\n session.redaction?.status ?? null,\n );\n return {\n attemptId,\n providerResourceId: session.id,\n providerStatus: session.status,\n canonicalStatus: normalized.canonicalStatus,\n launch: this.launchFor(attemptId, session, normalized.canonicalStatus),\n };\n }\n\n private launchFor(\n attemptId: string,\n session: StripeVerificationSession,\n canonicalStatus?: VerificationCanonicalStatus,\n ): ProviderLaunchEnvelope {\n const status = canonicalStatus ?? normalizeStripeIdentityStatus(\n session.status,\n session.last_error?.code ?? null,\n undefined,\n session.redaction?.status ?? null,\n ).canonicalStatus;\n if (session.status !== 'requires_input') {\n return {\n attemptId,\n canonicalStatus: status,\n presentation: 'none',\n launcherKey: 'hosted',\n providerDisclosure: STRIPE_IDENTITY_DISCLOSURE,\n continuationReference: session.id,\n };\n }\n const secret = safeClientSecret(session.client_secret);\n const hostedUrl = safeStripeHostedUrl(session.url, STRIPE_IDENTITY_HOSTED_HOST);\n const transientSecretExpiresAt = secret ? isoExpiry(this.runtime.now(), 86_400) : undefined;\n const hostedFallbackExpiresAt = hostedUrl ? isoExpiry(this.runtime.now(), 172_800) : undefined;\n if (!secret && !hostedUrl) {\n throw new ProviderUnavailableError('Stripe Identity did not return resumable launch material.', {\n safeCode: 'stripe_identity_launch_material_missing',\n });\n }\n const presentation: VerificationLaunchPresentation = secret ? 'embedded' : 'hosted';\n return {\n attemptId,\n canonicalStatus: status,\n presentation,\n launcherKey: secret ? 'stripe_identity' : 'hosted',\n providerDisclosure: STRIPE_IDENTITY_DISCLOSURE,\n transientSecret: secret,\n transientSecretExpiresAt,\n hostedUrl,\n hostedFallbackExpiresAt,\n continuationReference: session.id,\n };\n }\n\n private normalizeSnapshot(session: StripeVerificationSession): NormalizedProviderSnapshot {\n const normalized = normalizeStripeIdentityStatus(\n session.status,\n session.last_error?.code ?? null,\n undefined,\n session.redaction?.status ?? null,\n );\n return {\n providerResourceId: session.id,\n providerStatus: session.status,\n canonicalStatus: normalized.canonicalStatus,\n occurredAt: this.runtime.now().toISOString(),\n providerCreatedAt: new Date(session.created * 1000).toISOString(),\n normalizedReasonCodes: normalized.reasonCodes,\n safeMetadata: {\n source: 'retrieve',\n livemode: session.livemode,\n adapter_version: this.manifest.adapterVersion,\n normalization_version: 'stripe-identity-v1',\n },\n };\n }\n\n private async call(\n path: string,\n options: {\n method: 'GET' | 'POST';\n operation: ProviderOperation;\n idempotencyScope?: string;\n body?: URLSearchParams;\n idempotencyKey?: string;\n },\n ): Promise<StripeVerificationSession> {\n if (this.runtime.rateBudget) {\n const budget = await this.runtime.rateBudget.acquire(options.operation);\n if (!budget.allowed) {\n throw new ProviderError('RATE_LIMITED', 'Stripe Identity rate budget is exhausted.', {\n retryable: true,\n retryAfterSeconds: budget.retryAfterSeconds,\n safeCode: 'stripe_identity_rate_limited',\n });\n }\n }\n const startedAt = this.runtime.now().getTime();\n const idempotencyKey = options.method === 'GET'\n ? undefined\n : this.runtime.idempotency.keyFor(options.operation, options.idempotencyScope ?? path, options.idempotencyKey);\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), 10_000);\n const url = `https://${STRIPE_IDENTITY_API_HOST}/v1${path}`;\n try {\n const response = await this.runtime.http.fetch(url, {\n method: options.method,\n headers: {\n Authorization: `Bearer ${this.runtime.configuration.restrictedKey}`,\n 'Stripe-Version': this.runtime.configuration.apiVersion || STRIPE_IDENTITY_API_VERSION,\n ...(options.body ? { 'Content-Type': 'application/x-www-form-urlencoded' } : {}),\n ...(idempotencyKey ? { 'Idempotency-Key': idempotencyKey } : {}),\n },\n body: options.body,\n signal: controller.signal,\n });\n const payload = await response.json().catch(() => null) as unknown;\n if (!response.ok) throw mapProviderHttpError(response.status, response.headers.get('retry-after'), 'stripe_identity');\n const result = requireSession(payload);\n this.assertLivemode(result.livemode);\n const normalized = normalizeStripeIdentityStatus(\n result.status,\n result.last_error?.code ?? null,\n undefined,\n result.redaction?.status ?? null,\n );\n const unknown = normalized.reasonCodes.includes('stripe_unknown_status');\n await this.recordObservation(\n options.operation,\n unknown ? 'unknown_status' : 'success',\n unknown ? 'stripe_unknown_status' : `stripe_identity_${options.operation}_ok`,\n startedAt,\n );\n return result;\n } catch (error) {\n const failure = error instanceof ProviderError\n ? error\n : error instanceof DOMException && error.name === 'AbortError'\n ? new ProviderError('TIMEOUT', 'Stripe Identity request timed out.', {\n retryable: true, safeCode: 'stripe_timeout',\n })\n : new ProviderError('RETRYABLE_PROVIDER_FAILURE', 'Stripe Identity request failed.', {\n retryable: true, safeCode: 'stripe_provider_failure', cause: error,\n });\n await this.recordObservation(\n options.operation,\n failure.retryable ? 'retryable_failure' : 'terminal_failure',\n failure.safeCode,\n startedAt,\n );\n throw failure;\n } finally {\n clearTimeout(timeoutId);\n }\n }\n\n private async recordObservation(\n operation: ProviderOperation,\n outcome: 'success' | 'retryable_failure' | 'terminal_failure' | 'unknown_status',\n safeCode: string,\n startedAt: number,\n ): Promise<void> {\n const observedAt = this.runtime.now();\n const latencyMs = Math.max(0, observedAt.getTime() - startedAt);\n const metadata = {\n provider: this.provider,\n environment: this.environment,\n operation,\n outcome,\n safe_code: safeCode,\n latency_ms: latencyMs,\n };\n this.runtime.telemetry?.histogram?.('verification.provider.latency_ms', latencyMs, {\n provider: this.provider,\n operation,\n });\n this.runtime.telemetry?.counter?.('verification.provider.calls', 1, {\n provider: this.provider,\n operation,\n outcome,\n });\n try {\n await this.runtime.recordHealth({\n operation,\n outcome,\n safeCode,\n observedAt: observedAt.toISOString(),\n latencyMs,\n });\n if (outcome === 'success') this.runtime.logger.info('verification_provider_operation', metadata);\n else this.runtime.logger.warn('verification_provider_operation', metadata);\n } catch {\n this.runtime.logger.warn('verification_provider_health_record_failed', {\n provider: this.provider,\n environment: this.environment,\n operation,\n });\n }\n }\n}\n"]}
@@ -0,0 +1,56 @@
1
+ import * as _splitin_verification_adapter_sdk from '@splitin/verification-adapter-sdk';
2
+ import { VerificationAdapterV1, ProviderRuntimeContext, ProviderAttemptCommand, ProviderAttemptResult, ProviderResumeCommand, ProviderLaunchEnvelope, ProviderResourceCommand, NormalizedProviderSnapshot, ProviderRetryCommand, ProviderOperationResult, ProviderRedactionCommand, ProviderRedactionResult, VerifiedWebhookEnvelope, NormalizedProviderEvent, ProviderManifestV1, VerificationCanonicalStatus } from '@splitin/verification-adapter-sdk';
3
+
4
+ interface StripeIdentityAdapterConfiguration {
5
+ restrictedKey: string;
6
+ accountId: string;
7
+ webhookSecret: string;
8
+ webhookSecretPrevious?: string;
9
+ apiVersion: string;
10
+ returnUrl?: string;
11
+ webhookToleranceSeconds?: number;
12
+ requireMatchingSelfie?: boolean;
13
+ }
14
+ /**
15
+ * CLI/env mapping helper. Adapter logic never reads process.env.
16
+ * Conventional field names are accepted alongside camelCase keys.
17
+ */
18
+ declare function createStripeIdentityConfiguration(values: Record<string, string | undefined>): StripeIdentityAdapterConfiguration;
19
+
20
+ declare class StripeIdentityVerificationAdapter implements VerificationAdapterV1<StripeIdentityAdapterConfiguration> {
21
+ readonly contractVersion: "1.0.0";
22
+ readonly manifest: Readonly<_splitin_verification_adapter_sdk.ProviderManifestV1>;
23
+ readonly provider: "stripe_identity";
24
+ readonly environment: 'sandbox' | 'production';
25
+ readonly runtime: ProviderRuntimeContext<StripeIdentityAdapterConfiguration>;
26
+ constructor(runtime: ProviderRuntimeContext<StripeIdentityAdapterConfiguration>);
27
+ validateConfiguration(): void;
28
+ createAttempt(command: ProviderAttemptCommand): Promise<ProviderAttemptResult>;
29
+ resumeAttempt(command: ProviderResumeCommand): Promise<ProviderLaunchEnvelope>;
30
+ retrieveAttempt(command: ProviderResourceCommand): Promise<NormalizedProviderSnapshot>;
31
+ retryAttempt(command: ProviderRetryCommand): Promise<ProviderAttemptResult>;
32
+ cancelAttempt(command: ProviderResourceCommand): Promise<ProviderOperationResult>;
33
+ redactSubject(command: ProviderRedactionCommand): Promise<ProviderRedactionResult>;
34
+ verifyWebhook(request: Request): Promise<VerifiedWebhookEnvelope>;
35
+ normalizeWebhook(input: VerifiedWebhookEnvelope): Promise<NormalizedProviderEvent>;
36
+ private assertCommand;
37
+ private assertLivemode;
38
+ private getSession;
39
+ private toAttemptResult;
40
+ private launchFor;
41
+ private normalizeSnapshot;
42
+ private call;
43
+ private recordObservation;
44
+ }
45
+
46
+ declare const stripeIdentityProviderManifest: Readonly<ProviderManifestV1>;
47
+
48
+ interface StripeStatusNormalization {
49
+ canonicalStatus: VerificationCanonicalStatus;
50
+ reasonCodes: string[];
51
+ }
52
+ declare function normalizeStripeIdentityStatus(status: string, lastErrorCode: string | null, eventType?: string, redactionStatus?: string | null): StripeStatusNormalization;
53
+
54
+ declare const STRIPE_IDENTITY_API_VERSION = "2025-08-27.basil";
55
+
56
+ export { STRIPE_IDENTITY_API_VERSION, type StripeIdentityAdapterConfiguration, StripeIdentityVerificationAdapter, createStripeIdentityConfiguration, normalizeStripeIdentityStatus, stripeIdentityProviderManifest };
@@ -0,0 +1,56 @@
1
+ import * as _splitin_verification_adapter_sdk from '@splitin/verification-adapter-sdk';
2
+ import { VerificationAdapterV1, ProviderRuntimeContext, ProviderAttemptCommand, ProviderAttemptResult, ProviderResumeCommand, ProviderLaunchEnvelope, ProviderResourceCommand, NormalizedProviderSnapshot, ProviderRetryCommand, ProviderOperationResult, ProviderRedactionCommand, ProviderRedactionResult, VerifiedWebhookEnvelope, NormalizedProviderEvent, ProviderManifestV1, VerificationCanonicalStatus } from '@splitin/verification-adapter-sdk';
3
+
4
+ interface StripeIdentityAdapterConfiguration {
5
+ restrictedKey: string;
6
+ accountId: string;
7
+ webhookSecret: string;
8
+ webhookSecretPrevious?: string;
9
+ apiVersion: string;
10
+ returnUrl?: string;
11
+ webhookToleranceSeconds?: number;
12
+ requireMatchingSelfie?: boolean;
13
+ }
14
+ /**
15
+ * CLI/env mapping helper. Adapter logic never reads process.env.
16
+ * Conventional field names are accepted alongside camelCase keys.
17
+ */
18
+ declare function createStripeIdentityConfiguration(values: Record<string, string | undefined>): StripeIdentityAdapterConfiguration;
19
+
20
+ declare class StripeIdentityVerificationAdapter implements VerificationAdapterV1<StripeIdentityAdapterConfiguration> {
21
+ readonly contractVersion: "1.0.0";
22
+ readonly manifest: Readonly<_splitin_verification_adapter_sdk.ProviderManifestV1>;
23
+ readonly provider: "stripe_identity";
24
+ readonly environment: 'sandbox' | 'production';
25
+ readonly runtime: ProviderRuntimeContext<StripeIdentityAdapterConfiguration>;
26
+ constructor(runtime: ProviderRuntimeContext<StripeIdentityAdapterConfiguration>);
27
+ validateConfiguration(): void;
28
+ createAttempt(command: ProviderAttemptCommand): Promise<ProviderAttemptResult>;
29
+ resumeAttempt(command: ProviderResumeCommand): Promise<ProviderLaunchEnvelope>;
30
+ retrieveAttempt(command: ProviderResourceCommand): Promise<NormalizedProviderSnapshot>;
31
+ retryAttempt(command: ProviderRetryCommand): Promise<ProviderAttemptResult>;
32
+ cancelAttempt(command: ProviderResourceCommand): Promise<ProviderOperationResult>;
33
+ redactSubject(command: ProviderRedactionCommand): Promise<ProviderRedactionResult>;
34
+ verifyWebhook(request: Request): Promise<VerifiedWebhookEnvelope>;
35
+ normalizeWebhook(input: VerifiedWebhookEnvelope): Promise<NormalizedProviderEvent>;
36
+ private assertCommand;
37
+ private assertLivemode;
38
+ private getSession;
39
+ private toAttemptResult;
40
+ private launchFor;
41
+ private normalizeSnapshot;
42
+ private call;
43
+ private recordObservation;
44
+ }
45
+
46
+ declare const stripeIdentityProviderManifest: Readonly<ProviderManifestV1>;
47
+
48
+ interface StripeStatusNormalization {
49
+ canonicalStatus: VerificationCanonicalStatus;
50
+ reasonCodes: string[];
51
+ }
52
+ declare function normalizeStripeIdentityStatus(status: string, lastErrorCode: string | null, eventType?: string, redactionStatus?: string | null): StripeStatusNormalization;
53
+
54
+ declare const STRIPE_IDENTITY_API_VERSION = "2025-08-27.basil";
55
+
56
+ export { STRIPE_IDENTITY_API_VERSION, type StripeIdentityAdapterConfiguration, StripeIdentityVerificationAdapter, createStripeIdentityConfiguration, normalizeStripeIdentityStatus, stripeIdentityProviderManifest };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sources":["index.d.ts"],"names":[],"mappings":"AAAA"}