@safepassage/sdk
Version:
SafePassage SDK - Lightweight redirect-based age verification
136 lines (135 loc) • 3.85 kB
TypeScript
/**
* Verification SDK - Redirect-based age verification
*
* Lightweight SDK for integrating age verification using redirect flow.
* Provides a secure, easy-to-implement solution with comprehensive
* security features and flexible integration options.
*/
import type { SDKConfig, VerificationOptions } from '../types/base';
export interface UrlConfig {
apiUrl: string;
verifyUiUrl: string;
engineUrl: string;
wsUrl: string;
trustedOrigins: string[];
}
export interface BrandUrls {
production: UrlConfig;
staging: UrlConfig;
}
export interface BrandConstants {
name: string;
hmacSecretProd: string;
hmacSecretStaging: string;
messageType: string;
legacyMessageType?: string;
popupName: string;
docsUrl: string;
}
/**
* SDK Main Class
*
* Primary SDK class that manages verification sessions with comprehensive
* security and error handling. Supports both redirect and new-tab modes with
* automatic session management and PostMessage communication.
*/
export declare class VerificationSDK {
private config;
private readonly brandUrls;
private readonly brandConstants;
private popupWindow;
private messageListener;
private popupMonitorInterval;
private unloadListener;
private isVerificationInProgress;
private currentSessionId;
private hasReceivedResult;
private lastVerifyUrl;
private lastSessionToken;
private lastExternalUserId;
private lastSandboxMode;
private temporaryHandoffToken;
private static readonly LOCAL_HOSTNAMES;
/**
* Initialize SDK
*
* Validates configuration, sets up security measures, and prepares the SDK
* for verification operations. Performs comprehensive environment validation
* and security initialization.
*/
constructor(config: SDKConfig, brandUrls: BrandUrls, brandConstants: BrandConstants);
/**
* Initiate verification with race condition protection
*/
verify(options?: VerificationOptions): Promise<void>;
/**
* Build verification URL with HMAC-signed state
*/
private buildVerificationUrl;
/**
* Redirect in same tab
*/
private redirect;
/**
* Open in new tab with PostMessage communication and proper cleanup
*/
private openNewTab;
/**
* Set up automatic cleanup on page unload to prevent memory leaks
*/
private setupAutoCleanup;
/**
* Auto-detect environment based on current URL
*/
private detectEnvironment;
/**
* Get the current environment
*/
getEnvironment(): 'production' | 'staging';
/**
* Unlock verification process to allow new verifications
*/
private unlockVerification;
/**
* Internal cleanup method to prevent memory leaks
*/
private cleanup;
private handleCancellation;
private redirectToCancelUrl;
/**
* Remove auto-cleanup listeners
*/
private removeAutoCleanupListeners;
/**
* Public cleanup method for manual resource management
*/
destroy(): void;
/**
* Get Portal API URL based on environment and brand
*/
private getPortalApiUrl;
/**
* Get Engine URL based on environment and brand
*/
private getEngineUrl;
/**
* Get WebSocket URL based on environment and brand
*/
private getWebSocketUrl;
/**
* Detect if this is a public key (pk_ prefix) vs private key (sk_ prefix)
*/
private isPublicKey;
/**
* Create session internally for public keys
*/
private createInternalSession;
private isBillingBlockError;
private openBillingBlockPage;
private getUrlConfig;
private getTrustedOrigins;
private getAllowedCustomOrigins;
private getLocalOrigin;
private applyLocalVerifyOverride;
private getHmacSecret;
}