@didit-protocol/sdk-web 0.1.2 → 0.1.4

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.
@@ -1 +1 @@
1
- {"version":3,"file":"didit-sdk.umd.js","sources":["../src/constants.ts","../src/utils.ts","../src/modal.ts","../src/DiditSdk.ts"],"sourcesContent":["export const DEFAULT_CONFIG = {\n zIndex: 9999,\n showCloseButton: true,\n showExitConfirmation: true,\n loggingEnabled: false,\n closeModalOnComplete: false\n} as const;\n\nexport const CSS_CLASSES = {\n overlay: \"didit-modal-overlay\",\n container: \"didit-modal-container\",\n content: \"didit-modal-content\",\n iframe: \"didit-verification-iframe\",\n closeButton: \"didit-close-button\",\n loading: \"didit-loading\",\n confirmOverlay: \"didit-confirm-overlay\",\n confirmBox: \"didit-confirm-box\"\n} as const;\n\nexport const SDK_VERSION = \"0.1.0\";\n","class SDKLogger {\n private static _enabled = false;\n\n static get isEnabled(): boolean {\n return this._enabled;\n }\n\n static set isEnabled(value: boolean) {\n this._enabled = value;\n }\n\n static log(...args: unknown[]): void {\n if (this._enabled) {\n console.log(\"[DiditSDK]\", ...args);\n }\n }\n\n static warn(...args: unknown[]): void {\n if (this._enabled) {\n console.warn(\"[DiditSDK]\", ...args);\n }\n }\n\n static error(...args: unknown[]): void {\n if (this._enabled) {\n console.error(\"[DiditSDK]\", ...args);\n }\n }\n}\n\nexport { SDKLogger };\n\nexport function generateModalId(): string {\n return `didit-modal-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n}\n\nexport function isAllowedOrigin(origin: string): boolean {\n try {\n const url = new URL(origin);\n return url.hostname.endsWith('.didit.me');\n } catch {\n return false;\n }\n}\n\nexport function createVerificationError(\n type: \"sessionExpired\" | \"networkError\" | \"cameraAccessDenied\" | \"unknown\",\n customMessage?: string\n): { type: typeof type; message: string } {\n const messages = {\n sessionExpired: \"Your verification session has expired.\",\n networkError: \"A network error occurred. Please try again.\",\n cameraAccessDenied: \"Camera access is required for verification.\",\n unknown: customMessage || \"An unknown error occurred.\"\n };\n\n return {\n type,\n message: customMessage || messages[type]\n };\n}\n","import type { DiditSdkConfiguration, VerificationEvent } from \"./types\";\nimport { DEFAULT_CONFIG, CSS_CLASSES } from \"./constants\";\nimport { SDKLogger, generateModalId, isAllowedOrigin } from \"./utils\";\n\nexport interface ModalState {\n isOpen: boolean;\n isLoading: boolean;\n showConfirmation: boolean;\n}\n\nexport interface ModalCallbacks {\n onClose: () => void;\n onCloseConfirmed: () => void;\n onMessage: (event: VerificationEvent) => void;\n onIframeLoad: () => void;\n}\n\nexport class VerificationModal {\n private modalId: string;\n private config: Required<Pick<DiditSdkConfiguration, \"zIndex\" | \"showCloseButton\" | \"showExitConfirmation\">>;\n private callbacks: ModalCallbacks;\n private state: ModalState = {\n isOpen: false,\n isLoading: true,\n showConfirmation: false\n };\n\n private overlay: HTMLDivElement | null = null;\n private container: HTMLDivElement | null = null;\n private iframe: HTMLIFrameElement | null = null;\n private loadingEl: HTMLDivElement | null = null;\n private confirmOverlay: HTMLDivElement | null = null;\n private containerElement: HTMLElement;\n\n private boundHandleMessage: ((event: MessageEvent) => void) | null = null;\n private boundHandleKeydown: ((event: KeyboardEvent) => void) | null = null;\n\n constructor(configuration: DiditSdkConfiguration | undefined, callbacks: ModalCallbacks) {\n this.modalId = generateModalId();\n this.config = {\n zIndex: configuration?.zIndex ?? DEFAULT_CONFIG.zIndex,\n showCloseButton: configuration?.showCloseButton ?? DEFAULT_CONFIG.showCloseButton,\n showExitConfirmation: configuration?.showExitConfirmation ?? DEFAULT_CONFIG.showExitConfirmation\n };\n this.callbacks = callbacks;\n this.containerElement = configuration?.containerElement ?? document.body;\n }\n\n private injectStyles(): void {\n const styleId = \"didit-sdk-styles\";\n if (document.getElementById(styleId)) {\n return;\n }\n\n const styles = document.createElement(\"style\");\n styles.id = styleId;\n styles.textContent = `\n .${CSS_CLASSES.overlay} {\n display: none;\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.6);\n z-index: ${this.config.zIndex};\n justify-content: center;\n align-items: center;\n padding: 1rem;\n opacity: 0;\n transition: opacity 0.2s ease-out;\n }\n\n .${CSS_CLASSES.overlay}.active {\n display: flex;\n opacity: 1;\n }\n\n .${CSS_CLASSES.container} {\n position: relative;\n width: 100%;\n max-width: 500px;\n max-height: 90vh;\n border-radius: 16px;\n overflow: hidden;\n background: transparent;\n }\n\n .${CSS_CLASSES.overlay}.active .${CSS_CLASSES.container} {\n transform: scale(1);\n }\n\n .${CSS_CLASSES.iframe} {\n width: 100%;\n height: 700px;\n border: none;\n display: block;\n }\n\n .${CSS_CLASSES.closeButton} {\n position: absolute;\n top: 12px;\n right: 12px;\n width: 24px;\n height: 24px;\n background: transparent;\n border: none;\n cursor: pointer;\n padding: 0;\n z-index: 10;\n outline: none;\n }\n\n .${CSS_CLASSES.closeButton}:hover,\n .${CSS_CLASSES.closeButton}:focus {\n background: transparent;\n opacity: 0.5;\n }\n\n .${CSS_CLASSES.closeButton} svg {\n stroke: #666;\n stroke-width: 2;\n stroke-linecap: round;\n }\n\n .${CSS_CLASSES.loading} {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background: #fafafa;\n z-index: 5;\n }\n\n .${CSS_CLASSES.loading}.hidden {\n display: none;\n }\n\n .${CSS_CLASSES.loading} svg {\n width: 48px;\n height: 48px;\n animation: didit-spin 1s linear infinite;\n }\n\n .${CSS_CLASSES.loading} circle {\n stroke: #e5e5e5;\n stroke-width: 3;\n fill: none;\n }\n\n .${CSS_CLASSES.loading} path {\n stroke: #525252;\n stroke-width: 3;\n stroke-linecap: round;\n fill: none;\n }\n\n @keyframes didit-spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n\n .${CSS_CLASSES.confirmOverlay} {\n display: none;\n position: absolute;\n inset: 0;\n background: rgba(0, 0, 0, 0.5);\n z-index: 20;\n justify-content: center;\n align-items: center;\n opacity: 0;\n transition: opacity 0.15s ease-out;\n }\n\n .${CSS_CLASSES.confirmOverlay}.active {\n display: flex;\n opacity: 1;\n }\n\n .${CSS_CLASSES.confirmBox} {\n background: #fff;\n border-radius: 12px;\n padding: 1.5rem;\n text-align: center;\n max-width: 300px;\n margin: 1rem;\n transform: scale(0.95);\n transition: transform 0.15s ease-out;\n box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);\n }\n\n .${CSS_CLASSES.confirmOverlay}.active .${CSS_CLASSES.confirmBox} {\n transform: scale(1);\n }\n\n .${CSS_CLASSES.confirmBox} h3 {\n color: #1a1a2e;\n margin: 0 0 0.5rem 0;\n font-size: 1.125rem;\n font-weight: 600;\n }\n\n .${CSS_CLASSES.confirmBox} p {\n color: #666;\n font-size: 0.875rem;\n margin: 0 0 1.25rem 0;\n line-height: 1.5;\n }\n\n .didit-confirm-actions {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 1rem;\n }\n\n .didit-confirm-actions button {\n background: #2563eb;\n color: #fff;\n border: none;\n padding: 0.625rem 1.25rem;\n border-radius: 8px;\n font-size: 0.875rem;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.15s ease;\n }\n\n .didit-confirm-actions button:hover {\n background: #1d4ed8;\n }\n\n .didit-confirm-actions span {\n color: #666;\n font-size: 0.875rem;\n cursor: pointer;\n padding: 0.625rem;\n transition: color 0.15s ease;\n }\n\n .didit-confirm-actions span:hover {\n color: #1a1a2e;\n }\n\n @media (max-width: 540px) {\n .${CSS_CLASSES.overlay} {\n padding: 0;\n }\n\n .${CSS_CLASSES.container} {\n max-width: 100%;\n max-height: 100vh;\n border-radius: 0;\n }\n\n .${CSS_CLASSES.iframe} {\n height: 100vh;\n }\n }\n `;\n\n document.head.appendChild(styles);\n }\n\n private createDOM(): void {\n this.injectStyles();\n\n this.overlay = document.createElement(\"div\");\n this.overlay.id = this.modalId;\n this.overlay.className = CSS_CLASSES.overlay;\n this.overlay.setAttribute(\"role\", \"dialog\");\n this.overlay.setAttribute(\"aria-modal\", \"true\");\n this.overlay.setAttribute(\"aria-label\", \"Didit Verification\");\n\n this.container = document.createElement(\"div\");\n this.container.className = CSS_CLASSES.container;\n\n this.loadingEl = document.createElement(\"div\");\n this.loadingEl.className = CSS_CLASSES.loading;\n this.loadingEl.innerHTML = `\n <svg viewBox=\"0 0 24 24\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 2a10 10 0 0 1 10 10\" />\n </svg>\n `;\n\n if (this.config.showCloseButton) {\n const closeBtn = document.createElement(\"button\");\n closeBtn.className = CSS_CLASSES.closeButton;\n closeBtn.setAttribute(\"aria-label\", \"Close verification\");\n closeBtn.innerHTML = `\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\">\n <line x1=\"1\" y1=\"1\" x2=\"13\" y2=\"13\" />\n <line x1=\"13\" y1=\"1\" x2=\"1\" y2=\"13\" />\n </svg>\n `;\n closeBtn.addEventListener(\"click\", () => this.handleCloseRequest());\n this.container.appendChild(closeBtn);\n }\n\n this.iframe = document.createElement(\"iframe\");\n this.iframe.className = CSS_CLASSES.iframe;\n this.iframe.setAttribute(\"allow\", \"camera; microphone; fullscreen; autoplay; encrypted-media; geolocation\");\n this.iframe.setAttribute(\"title\", \"Didit Verification\");\n this.iframe.addEventListener(\"load\", () => this.handleIframeLoad());\n\n this.confirmOverlay = document.createElement(\"div\");\n this.confirmOverlay.className = CSS_CLASSES.confirmOverlay;\n this.confirmOverlay.innerHTML = `\n <div class=\"${CSS_CLASSES.confirmBox}\">\n <h3>Exit verification?</h3>\n <p>Exiting will end your verification process. Are you sure?</p>\n <div class=\"didit-confirm-actions\">\n <button type=\"button\" data-action=\"continue\">Continue</button>\n <span data-action=\"exit\">Exit</span>\n </div>\n </div>\n `;\n\n this.confirmOverlay.querySelector('[data-action=\"continue\"]')?.addEventListener(\"click\", () => {\n this.hideConfirmation();\n });\n this.confirmOverlay.querySelector('[data-action=\"exit\"]')?.addEventListener(\"click\", () => {\n this.confirmExit();\n });\n\n this.container.appendChild(this.loadingEl);\n this.container.appendChild(this.iframe);\n this.container.appendChild(this.confirmOverlay);\n this.overlay.appendChild(this.container);\n\n this.overlay.addEventListener(\"click\", (e) => {\n if (e.target === this.overlay) {\n this.handleCloseRequest();\n }\n });\n\n this.containerElement.appendChild(this.overlay);\n }\n\n private setupEventListeners(): void {\n this.boundHandleMessage = this.handleMessage.bind(this);\n window.addEventListener(\"message\", this.boundHandleMessage);\n\n this.boundHandleKeydown = this.handleKeydown.bind(this);\n document.addEventListener(\"keydown\", this.boundHandleKeydown);\n }\n\n private removeEventListeners(): void {\n if (this.boundHandleMessage) {\n window.removeEventListener(\"message\", this.boundHandleMessage);\n this.boundHandleMessage = null;\n }\n if (this.boundHandleKeydown) {\n document.removeEventListener(\"keydown\", this.boundHandleKeydown);\n this.boundHandleKeydown = null;\n }\n }\n\n private handleMessage(event: MessageEvent): void {\n if (!isAllowedOrigin(event.origin)) {\n return;\n }\n\n SDKLogger.log(\"Received postMessage:\", event.data);\n\n let messageData: VerificationEvent;\n try {\n if (typeof event.data === \"string\") {\n messageData = JSON.parse(event.data);\n } else {\n messageData = event.data;\n }\n } catch {\n SDKLogger.warn(\"Failed to parse postMessage:\", event.data);\n return;\n }\n\n if (messageData.type === \"didit:close_request\") {\n this.handleCloseRequest();\n return;\n }\n\n this.callbacks.onMessage(messageData);\n }\n\n private handleKeydown(event: KeyboardEvent): void {\n if (!this.state.isOpen) return;\n\n if (event.key === \"Escape\") {\n event.preventDefault();\n if (this.state.showConfirmation) {\n this.hideConfirmation();\n } else {\n this.handleCloseRequest();\n }\n }\n }\n\n private handleIframeLoad(): void {\n if (this.iframe?.src && this.iframe.src !== \"about:blank\") {\n this.state.isLoading = false;\n this.loadingEl?.classList.add(\"hidden\");\n this.callbacks.onIframeLoad();\n }\n }\n\n private handleCloseRequest(): void {\n if (this.config.showExitConfirmation) {\n this.showConfirmation();\n } else {\n this.callbacks.onCloseConfirmed();\n }\n }\n\n private showConfirmation(): void {\n this.state.showConfirmation = true;\n this.confirmOverlay?.classList.add(\"active\");\n this.callbacks.onClose();\n }\n\n private hideConfirmation(): void {\n this.state.showConfirmation = false;\n this.confirmOverlay?.classList.remove(\"active\");\n }\n\n private confirmExit(): void {\n this.hideConfirmation();\n this.callbacks.onCloseConfirmed();\n }\n\n open(verificationUrl: string): void {\n if (!this.overlay) {\n this.createDOM();\n this.setupEventListeners();\n }\n\n SDKLogger.log(\"Opening modal with URL:\", verificationUrl);\n\n this.state.isLoading = true;\n this.state.showConfirmation = false;\n this.loadingEl?.classList.remove(\"hidden\");\n this.confirmOverlay?.classList.remove(\"active\");\n\n if (this.iframe) {\n this.iframe.src = verificationUrl;\n }\n\n this.state.isOpen = true;\n this.overlay?.classList.add(\"active\");\n\n document.body.style.overflow = \"hidden\";\n }\n\n close(): void {\n SDKLogger.log(\"Closing modal\");\n\n this.state.isOpen = false;\n this.state.isLoading = true;\n this.state.showConfirmation = false;\n\n this.overlay?.classList.remove(\"active\");\n\n if (this.iframe) {\n this.iframe.src = \"about:blank\";\n }\n\n document.body.style.overflow = \"\";\n }\n\n destroy(): void {\n SDKLogger.log(\"Destroying modal\");\n\n this.close();\n this.removeEventListeners();\n\n if (this.overlay && this.overlay.parentNode) {\n this.overlay.parentNode.removeChild(this.overlay);\n }\n\n this.overlay = null;\n this.container = null;\n this.iframe = null;\n this.loadingEl = null;\n this.confirmOverlay = null;\n }\n\n isOpen(): boolean {\n return this.state.isOpen;\n }\n\n isLoading(): boolean {\n return this.state.isLoading;\n }\n}\n","import type {\n DiditSdkState,\n DiditSdkConfiguration,\n VerificationResult,\n VerificationCallback,\n StateChangeCallback,\n EventCallback,\n VerificationEvent,\n SessionData,\n VerificationStatus,\n StartVerificationOptions\n} from \"./types\";\n\nimport { VerificationModal } from \"./modal\";\nimport { DEFAULT_CONFIG } from \"./constants\";\nimport { SDKLogger, createVerificationError } from \"./utils\";\n\nexport class DiditSdk {\n private static _instance: DiditSdk | null = null;\n\n public static get shared(): DiditSdk {\n if (!DiditSdk._instance) {\n DiditSdk._instance = new DiditSdk();\n }\n return DiditSdk._instance;\n }\n\n public static reset(): void {\n if (DiditSdk._instance) {\n DiditSdk._instance.destroy();\n DiditSdk._instance = null;\n }\n }\n\n private _state: DiditSdkState = \"idle\";\n private _configuration: DiditSdkConfiguration | undefined;\n private _sessionId: string | undefined;\n private _url: string | undefined;\n private _modal: VerificationModal | null = null;\n private _errorMessage: string | undefined;\n\n public onComplete: VerificationCallback | undefined;\n public onStateChange: StateChangeCallback | undefined;\n public onEvent: EventCallback | undefined;\n\n public get state(): DiditSdkState {\n return this._state;\n }\n\n public get configuration(): DiditSdkConfiguration | undefined {\n return this._configuration;\n }\n\n public get isPresented(): boolean {\n return this._modal?.isOpen() ?? false;\n }\n\n public get errorMessage(): string | undefined {\n return this._errorMessage;\n }\n\n private constructor() {\n SDKLogger.log(\"DiditSdk initialized\");\n }\n\n public async startVerification(options: StartVerificationOptions): Promise<void> {\n const config = options.configuration;\n this._configuration = config;\n\n SDKLogger.isEnabled = config?.loggingEnabled ?? DEFAULT_CONFIG.loggingEnabled;\n\n SDKLogger.log(\"Starting verification with options:\", options);\n if (this._modal) {\n this._modal.destroy();\n this._modal = null;\n }\n this._modal = new VerificationModal(config, {\n onClose: () => this.handleModalClose(),\n onCloseConfirmed: () => this.handleModalCloseConfirmed(),\n onMessage: (event) => this.handleVerificationEvent(event),\n onIframeLoad: () => this.handleIframeLoad()\n });\n\n try {\n const { url } = options;\n\n if (!url || typeof url !== \"string\") {\n throw new Error(\"Invalid options: url is required\");\n }\n\n this._url = url;\n this.setState(\"loading\");\n\n this.emitInternalEvent(\"didit:started\", {});\n\n this._modal?.open(this._url);\n this.setState(\"ready\");\n } catch (error) {\n this.handleError(error);\n }\n }\n\n public close(): void {\n SDKLogger.log(\"Closing verification programmatically\");\n this.handleModalCloseConfirmed();\n }\n\n public destroy(): void {\n SDKLogger.log(\"Destroying SDK instance\");\n this._modal?.destroy();\n this._modal = null;\n this.reset();\n }\n\n private handleModalClose(): void {\n SDKLogger.log(\"Modal close requested\");\n }\n\n private handleModalCloseConfirmed(): void {\n SDKLogger.log(\"Modal close confirmed\");\n\n const sessionData = this.buildSessionData();\n\n this._modal?.close();\n this.reset();\n\n const result: VerificationResult = {\n type: \"cancelled\",\n session: sessionData\n };\n\n this.onComplete?.(result);\n }\n\n private handleIframeLoad(): void {\n SDKLogger.log(\"Iframe loaded\");\n }\n\n private emitInternalEvent(type: VerificationEvent[\"type\"], data?: VerificationEvent[\"data\"]): void {\n const event: VerificationEvent = {\n type,\n data,\n timestamp: Date.now()\n };\n\n SDKLogger.log(\"Emitting internal event:\", event);\n this.onEvent?.(event);\n }\n\n private handleVerificationEvent(event: VerificationEvent): void {\n SDKLogger.log(\"Verification event:\", event);\n\n this.onEvent?.(event);\n\n switch (event.type) {\n case \"didit:ready\":\n SDKLogger.log(\"Verification iframe ready\");\n break;\n\n case \"didit:started\":\n SDKLogger.log(\"User started verification\");\n break;\n\n case \"didit:step_started\":\n SDKLogger.log(\"Step started:\", event.data?.step);\n break;\n\n case \"didit:step_completed\":\n SDKLogger.log(\"Step completed:\", event.data?.step, \"-> next:\", event.data?.nextStep);\n break;\n\n case \"didit:media_started\":\n SDKLogger.log(\"Media started:\", event.data?.mediaType, \"for step:\", event.data?.step);\n break;\n\n case \"didit:media_captured\":\n SDKLogger.log(\"Media captured for step:\", event.data?.step, \"isAuto:\", event.data?.isAuto);\n break;\n\n case \"didit:document_selected\":\n SDKLogger.log(\"Document selected:\", event.data?.documentType, \"country:\", event.data?.country);\n break;\n\n case \"didit:verification_submitted\":\n SDKLogger.log(\"Verification submitted for step:\", event.data?.step);\n break;\n\n case \"didit:code_sent\":\n SDKLogger.log(\"Code sent via:\", event.data?.channel, \"codeSize:\", event.data?.codeSize);\n break;\n\n case \"didit:code_verified\":\n SDKLogger.log(\"Code verified via:\", event.data?.channel);\n break;\n\n case \"didit:status_updated\":\n SDKLogger.log(\"Status updated:\", event.data?.status, \"step:\", event.data?.step);\n break;\n\n case \"didit:completed\":\n this.handleVerificationCompleted(event);\n break;\n\n case \"didit:cancelled\":\n this.handleVerificationCancelled(event);\n break;\n\n case \"didit:error\":\n this.handleVerificationError(event);\n break;\n\n case \"didit:step_changed\":\n SDKLogger.log(\"Step changed:\", event.data?.step);\n break;\n\n case \"didit:close_request\":\n break;\n }\n }\n\n private handleVerificationCompleted(event: VerificationEvent): void {\n SDKLogger.log(\"Verification completed:\", event.data);\n\n const sessionData = this.buildSessionData(event.data);\n\n if (this._configuration?.closeModalOnComplete) {\n this._modal?.close();\n this.reset();\n }\n\n const result: VerificationResult = {\n type: \"completed\",\n session: sessionData\n };\n\n this.onComplete?.(result);\n }\n\n private handleVerificationCancelled(event: VerificationEvent): void {\n SDKLogger.log(\"Verification cancelled:\", event.data);\n\n const sessionData = this.buildSessionData(event.data);\n\n this._modal?.close();\n this.reset();\n\n const result: VerificationResult = {\n type: \"cancelled\",\n session: sessionData\n };\n\n this.onComplete?.(result);\n }\n\n private handleVerificationError(event: VerificationEvent): void {\n SDKLogger.log(\"Verification error:\", event.data);\n\n const sessionData = this.buildSessionData(event.data);\n const error = createVerificationError(\"unknown\", event.data?.error);\n\n this._modal?.close();\n this.reset();\n\n const result: VerificationResult = {\n type: \"failed\",\n session: sessionData,\n error\n };\n\n this.onComplete?.(result);\n }\n\n private handleError(error: unknown): void {\n SDKLogger.error(\"SDK error:\", error);\n\n let verificationError;\n\n if (error instanceof Error) {\n verificationError = createVerificationError(\"unknown\", error.message);\n } else {\n verificationError = createVerificationError(\"unknown\", \"An unknown error occurred\");\n }\n\n this._errorMessage = verificationError.message;\n this.setState(\"error\");\n\n this._modal?.close();\n this.reset();\n\n const result: VerificationResult = {\n type: \"failed\",\n error: verificationError\n };\n\n this.onComplete?.(result);\n }\n\n private setState(state: DiditSdkState): void {\n const previousState = this._state;\n this._state = state;\n\n if (previousState !== state) {\n SDKLogger.log(\"State changed:\", previousState, \"->\", state);\n this.onStateChange?.(state, this._errorMessage);\n }\n }\n\n private reset(): void {\n this._state = \"idle\";\n this._sessionId = undefined;\n this._url = undefined;\n this._errorMessage = undefined;\n this._configuration = undefined;\n }\n\n private buildSessionData(eventData?: VerificationEvent[\"data\"]): SessionData | undefined {\n const sessionId = eventData?.sessionId || this._sessionId;\n\n if (!sessionId) {\n return undefined;\n }\n\n return {\n sessionId,\n status: (eventData?.status || \"Pending\") as VerificationStatus,\n country: eventData?.country,\n documentType: eventData?.documentType\n };\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;;IAAO,MAAM,cAAc,GAAG;IAC5B,IAAA,MAAM,EAAE,IAAI;IACZ,IAAA,eAAe,EAAE,IAAI;IACrB,IAAA,oBAAoB,EAAE,IAAI;IAC1B,IAAA,cAAc,EAAE,MAER;IAEH,MAAM,WAAW,GAAG;IACzB,IAAA,OAAO,EAAE,qBAAqB;IAC9B,IAAA,SAAS,EAAE,uBAAuB;IAClC,IACA,MAAM,EAAE,2BAA2B;IACnC,IAAA,WAAW,EAAE,oBAAoB;IACjC,IAAA,OAAO,EAAE,eAAe;IACxB,IAAA,cAAc,EAAE,uBAAuB;IACvC,IAAA,UAAU,EAAE;KACJ;AAEH,UAAM,WAAW,GAAG;;ICnB3B,MAAM,SAAS,CAAA;IAGb,IAAA,WAAW,SAAS,GAAA;YAClB,OAAO,IAAI,CAAC,QAAQ;QACtB;QAEA,WAAW,SAAS,CAAC,KAAc,EAAA;IACjC,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;QACvB;IAEA,IAAA,OAAO,GAAG,CAAC,GAAG,IAAe,EAAA;IAC3B,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACjB,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC;YACpC;QACF;IAEA,IAAA,OAAO,IAAI,CAAC,GAAG,IAAe,EAAA;IAC5B,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACjB,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC;YACrC;QACF;IAEA,IAAA,OAAO,KAAK,CAAC,GAAG,IAAe,EAAA;IAC7B,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACjB,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC;YACtC;QACF;;IA1Be,SAAA,CAAA,QAAQ,GAAG,KAAK;aA+BjB,eAAe,GAAA;QAC7B,OAAO,CAAA,YAAA,EAAe,IAAI,CAAC,GAAG,EAAE,CAAA,CAAA,EAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA,CAAE;IAC/E;IAEM,SAAU,eAAe,CAAC,MAAc,EAAA;IAC5C,IAAA,IAAI;IACF,QAAA,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC;YAC3B,OAAO,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC;QAC3C;IAAE,IAAA,MAAM;IACN,QAAA,OAAO,KAAK;QACd;IACF;IAEM,SAAU,uBAAuB,CACrC,IAA0E,EAC1E,aAAsB,EAAA;IAEtB,IAAA,MAAM,QAAQ,GAAG;IACf,QAAA,cAAc,EAAE,wCAAwC;IACxD,QAAA,YAAY,EAAE,6CAA6C;IAC3D,QAAA,kBAAkB,EAAE,6CAA6C;YACjE,OAAO,EAAE,aAAa,IAAI;SAC3B;QAED,OAAO;YACL,IAAI;IACJ,QAAA,OAAO,EAAE,aAAa,IAAI,QAAQ,CAAC,IAAI;SACxC;IACH;;UC3Ca,iBAAiB,CAAA;QAoB5B,WAAA,CAAY,aAAgD,EAAE,SAAyB,EAAA;IAhB/E,QAAA,IAAA,CAAA,KAAK,GAAe;IAC1B,YAAA,MAAM,EAAE,KAAK;IACb,YAAA,SAAS,EAAE,IAAI;IACf,YAAA,gBAAgB,EAAE;aACnB;YAEO,IAAA,CAAA,OAAO,GAA0B,IAAI;YACrC,IAAA,CAAA,SAAS,GAA0B,IAAI;YACvC,IAAA,CAAA,MAAM,GAA6B,IAAI;YACvC,IAAA,CAAA,SAAS,GAA0B,IAAI;YACvC,IAAA,CAAA,cAAc,GAA0B,IAAI;YAG5C,IAAA,CAAA,kBAAkB,GAA2C,IAAI;YACjE,IAAA,CAAA,kBAAkB,GAA4C,IAAI;IAGxE,QAAA,IAAI,CAAC,OAAO,GAAG,eAAe,EAAE;YAChC,IAAI,CAAC,MAAM,GAAG;IACZ,YAAA,MAAM,EAAE,aAAa,EAAE,MAAM,IAAI,cAAc,CAAC,MAAM;IACtD,YAAA,eAAe,EAAE,aAAa,EAAE,eAAe,IAAI,cAAc,CAAC,eAAe;IACjF,YAAA,oBAAoB,EAAE,aAAa,EAAE,oBAAoB,IAAI,cAAc,CAAC;aAC7E;IACD,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;YAC1B,IAAI,CAAC,gBAAgB,GAAG,aAAa,EAAE,gBAAgB,IAAI,QAAQ,CAAC,IAAI;QAC1E;QAEQ,YAAY,GAAA;YAClB,MAAM,OAAO,GAAG,kBAAkB;IAClC,QAAA,IAAI,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE;gBACpC;YACF;YAEA,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;IAC9C,QAAA,MAAM,CAAC,EAAE,GAAG,OAAO;YACnB,MAAM,CAAC,WAAW,GAAG;AAChB,OAAA,EAAA,WAAW,CAAC,OAAO,CAAA;;;;;mBAKT,IAAI,CAAC,MAAM,CAAC,MAAM,CAAA;;;;;;;;AAQ5B,OAAA,EAAA,WAAW,CAAC,OAAO,CAAA;;;;;AAKnB,OAAA,EAAA,WAAW,CAAC,SAAS,CAAA;;;;;;;;;;AAUrB,OAAA,EAAA,WAAW,CAAC,OAAO,CAAA,SAAA,EAAY,WAAW,CAAC,SAAS,CAAA;;;;AAIpD,OAAA,EAAA,WAAW,CAAC,MAAM,CAAA;;;;;;;AAOlB,OAAA,EAAA,WAAW,CAAC,WAAW,CAAA;;;;;;;;;;;;;;AAcvB,OAAA,EAAA,WAAW,CAAC,WAAW,CAAA;AACvB,OAAA,EAAA,WAAW,CAAC,WAAW,CAAA;;;;;AAKvB,OAAA,EAAA,WAAW,CAAC,WAAW,CAAA;;;;;;AAMvB,OAAA,EAAA,WAAW,CAAC,OAAO,CAAA;;;;;;;;;;AAUnB,OAAA,EAAA,WAAW,CAAC,OAAO,CAAA;;;;AAInB,OAAA,EAAA,WAAW,CAAC,OAAO,CAAA;;;;;;AAMnB,OAAA,EAAA,WAAW,CAAC,OAAO,CAAA;;;;;;AAMnB,OAAA,EAAA,WAAW,CAAC,OAAO,CAAA;;;;;;;;;;;;AAYnB,OAAA,EAAA,WAAW,CAAC,cAAc,CAAA;;;;;;;;;;;;AAY1B,OAAA,EAAA,WAAW,CAAC,cAAc,CAAA;;;;;AAK1B,OAAA,EAAA,WAAW,CAAC,UAAU,CAAA;;;;;;;;;;;;AAYtB,OAAA,EAAA,WAAW,CAAC,cAAc,CAAA,SAAA,EAAY,WAAW,CAAC,UAAU,CAAA;;;;AAI5D,OAAA,EAAA,WAAW,CAAC,UAAU,CAAA;;;;;;;AAOtB,OAAA,EAAA,WAAW,CAAC,UAAU,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CpB,SAAA,EAAA,WAAW,CAAC,OAAO,CAAA;;;;AAInB,SAAA,EAAA,WAAW,CAAC,SAAS,CAAA;;;;;;AAMrB,SAAA,EAAA,WAAW,CAAC,MAAM,CAAA;;;;KAIxB;IAED,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;QACnC;QAEQ,SAAS,GAAA;YACf,IAAI,CAAC,YAAY,EAAE;YAEnB,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;YAC5C,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO;YAC9B,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,WAAW,CAAC,OAAO;YAC5C,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC;YAC3C,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC;YAC/C,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,YAAY,EAAE,oBAAoB,CAAC;YAE7D,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;YAC9C,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,WAAW,CAAC,SAAS;YAEhD,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;YAC9C,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,WAAW,CAAC,OAAO;IAC9C,QAAA,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG;;;;;KAK1B;IAED,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE;gBAC/B,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;IACjD,YAAA,QAAQ,CAAC,SAAS,GAAG,WAAW,CAAC,WAAW;IAC5C,YAAA,QAAQ,CAAC,YAAY,CAAC,YAAY,EAAE,oBAAoB,CAAC;gBACzD,QAAQ,CAAC,SAAS,GAAG;;;;;OAKpB;IACD,YAAA,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;IACnE,YAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC;YACtC;YAEA,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;YAC9C,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,WAAW,CAAC,MAAM;YAC1C,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,wEAAwE,CAAC;YAC3G,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,oBAAoB,CAAC;IACvD,QAAA,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAEnE,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;YACnD,IAAI,CAAC,cAAc,CAAC,SAAS,GAAG,WAAW,CAAC,cAAc;IAC1D,QAAA,IAAI,CAAC,cAAc,CAAC,SAAS,GAAG;AAChB,kBAAA,EAAA,WAAW,CAAC,UAAU,CAAA;;;;;;;;KAQrC;IAED,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,0BAA0B,CAAC,EAAE,gBAAgB,CAAC,OAAO,EAAE,MAAK;gBAC5F,IAAI,CAAC,gBAAgB,EAAE;IACzB,QAAA,CAAC,CAAC;IACF,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,sBAAsB,CAAC,EAAE,gBAAgB,CAAC,OAAO,EAAE,MAAK;gBACxF,IAAI,CAAC,WAAW,EAAE;IACpB,QAAA,CAAC,CAAC;YAEF,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;YAC1C,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC;YACvC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC;YAC/C,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;YAExC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,KAAI;gBAC3C,IAAI,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,OAAO,EAAE;oBAC7B,IAAI,CAAC,kBAAkB,EAAE;gBAC3B;IACF,QAAA,CAAC,CAAC;YAEF,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;QACjD;QAEQ,mBAAmB,GAAA;YACzB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;YACvD,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC;YAE3D,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;YACvD,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC;QAC/D;QAEQ,oBAAoB,GAAA;IAC1B,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;gBAC3B,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC;IAC9D,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;YAChC;IACA,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;gBAC3B,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC;IAChE,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;YAChC;QACF;IAEQ,IAAA,aAAa,CAAC,KAAmB,EAAA;YACvC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;gBAClC;YACF;YAEA,SAAS,CAAC,GAAG,CAAC,uBAAuB,EAAE,KAAK,CAAC,IAAI,CAAC;IAElD,QAAA,IAAI,WAA8B;IAClC,QAAA,IAAI;IACF,YAAA,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE;oBAClC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;gBACtC;qBAAO;IACL,gBAAA,WAAW,GAAG,KAAK,CAAC,IAAI;gBAC1B;YACF;IAAE,QAAA,MAAM;gBACN,SAAS,CAAC,IAAI,CAAC,8BAA8B,EAAE,KAAK,CAAC,IAAI,CAAC;gBAC1D;YACF;IAEA,QAAA,IAAI,WAAW,CAAC,IAAI,KAAK,qBAAqB,EAAE;gBAC9C,IAAI,CAAC,kBAAkB,EAAE;gBACzB;YACF;IAEA,QAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC;QACvC;IAEQ,IAAA,aAAa,CAAC,KAAoB,EAAA;IACxC,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM;gBAAE;IAExB,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;gBAC1B,KAAK,CAAC,cAAc,EAAE;IACtB,YAAA,IAAI,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE;oBAC/B,IAAI,CAAC,gBAAgB,EAAE;gBACzB;qBAAO;oBACL,IAAI,CAAC,kBAAkB,EAAE;gBAC3B;YACF;QACF;QAEQ,gBAAgB,GAAA;IACtB,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,KAAK,aAAa,EAAE;IACzD,YAAA,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK;gBAC5B,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;IACvC,YAAA,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE;YAC/B;QACF;QAEQ,kBAAkB,GAAA;IACxB,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE;gBACpC,IAAI,CAAC,gBAAgB,EAAE;YACzB;iBAAO;IACL,YAAA,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE;YACnC;QACF;QAEQ,gBAAgB,GAAA;IACtB,QAAA,IAAI,CAAC,KAAK,CAAC,gBAAgB,GAAG,IAAI;YAClC,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;IAC5C,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;QAC1B;QAEQ,gBAAgB,GAAA;IACtB,QAAA,IAAI,CAAC,KAAK,CAAC,gBAAgB,GAAG,KAAK;YACnC,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC;QACjD;QAEQ,WAAW,GAAA;YACjB,IAAI,CAAC,gBAAgB,EAAE;IACvB,QAAA,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE;QACnC;IAEA,IAAA,IAAI,CAAC,eAAuB,EAAA;IAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACjB,IAAI,CAAC,SAAS,EAAE;gBAChB,IAAI,CAAC,mBAAmB,EAAE;YAC5B;IAEA,QAAA,SAAS,CAAC,GAAG,CAAC,yBAAyB,EAAE,eAAe,CAAC;IAEzD,QAAA,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI;IAC3B,QAAA,IAAI,CAAC,KAAK,CAAC,gBAAgB,GAAG,KAAK;YACnC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC;YAC1C,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC;IAE/C,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;IACf,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,eAAe;YACnC;IAEA,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI;YACxB,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;YAErC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ;QACzC;QAEA,KAAK,GAAA;IACH,QAAA,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC;IAE9B,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK;IACzB,QAAA,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI;IAC3B,QAAA,IAAI,CAAC,KAAK,CAAC,gBAAgB,GAAG,KAAK;YAEnC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC;IAExC,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;IACf,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,aAAa;YACjC;YAEA,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE;QACnC;QAEA,OAAO,GAAA;IACL,QAAA,SAAS,CAAC,GAAG,CAAC,kBAAkB,CAAC;YAEjC,IAAI,CAAC,KAAK,EAAE;YACZ,IAAI,CAAC,oBAAoB,EAAE;YAE3B,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;gBAC3C,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;YACnD;IAEA,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;IACnB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;IACrB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;IAClB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;IACrB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;QAC5B;QAEA,MAAM,GAAA;IACJ,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM;QAC1B;QAEA,SAAS,GAAA;IACP,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS;QAC7B;IACD;;UC3dY,QAAQ,CAAA;IAGZ,IAAA,WAAW,MAAM,GAAA;IACtB,QAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE;IACvB,YAAA,QAAQ,CAAC,SAAS,GAAG,IAAI,QAAQ,EAAE;YACrC;YACA,OAAO,QAAQ,CAAC,SAAS;QAC3B;IAEO,IAAA,OAAO,KAAK,GAAA;IACjB,QAAA,IAAI,QAAQ,CAAC,SAAS,EAAE;IACtB,YAAA,QAAQ,CAAC,SAAS,CAAC,OAAO,EAAE;IAC5B,YAAA,QAAQ,CAAC,SAAS,GAAG,IAAI;YAC3B;QACF;IAaA,IAAA,IAAW,KAAK,GAAA;YACd,OAAO,IAAI,CAAC,MAAM;QACpB;IAEA,IAAA,IAAW,aAAa,GAAA;YACtB,OAAO,IAAI,CAAC,cAAc;QAC5B;IAEA,IAAA,IAAW,WAAW,GAAA;YACpB,OAAO,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,KAAK;QACvC;IAEA,IAAA,IAAW,YAAY,GAAA;YACrB,OAAO,IAAI,CAAC,aAAa;QAC3B;IAEA,IAAA,WAAA,GAAA;YA3BQ,IAAA,CAAA,MAAM,GAAkB,MAAM;YAI9B,IAAA,CAAA,MAAM,GAA6B,IAAI;IAwB7C,QAAA,SAAS,CAAC,GAAG,CAAC,sBAAsB,CAAC;QACvC;QAEO,MAAM,iBAAiB,CAAC,OAAiC,EAAA;IAC9D,QAAA,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa;IACpC,QAAA,IAAI,CAAC,cAAc,GAAG,MAAM;YAE5B,SAAS,CAAC,SAAS,GAAG,MAAM,EAAE,cAAc,IAAI,cAAc,CAAC,cAAc;IAE7E,QAAA,SAAS,CAAC,GAAG,CAAC,qCAAqC,EAAE,OAAO,CAAC;IAC7D,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;IACf,YAAA,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;IACrB,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI;YACpB;IACA,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,iBAAiB,CAAC,MAAM,EAAE;IAC1C,YAAA,OAAO,EAAE,MAAM,IAAI,CAAC,gBAAgB,EAAE;IACtC,YAAA,gBAAgB,EAAE,MAAM,IAAI,CAAC,yBAAyB,EAAE;gBACxD,SAAS,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC;IACzD,YAAA,YAAY,EAAE,MAAM,IAAI,CAAC,gBAAgB;IAC1C,SAAA,CAAC;IAEF,QAAA,IAAI;IACF,YAAA,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO;gBAEvB,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;IACnC,gBAAA,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC;gBACrD;IAEA,YAAA,IAAI,CAAC,IAAI,GAAG,GAAG;IACf,YAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;IAExB,YAAA,IAAI,CAAC,iBAAiB,CAAC,eAAe,EAAE,EAAE,CAAC;gBAE3C,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5B,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YACxB;YAAE,OAAO,KAAK,EAAE;IACd,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;YACzB;QACF;QAEO,KAAK,GAAA;IACV,QAAA,SAAS,CAAC,GAAG,CAAC,uCAAuC,CAAC;YACtD,IAAI,CAAC,yBAAyB,EAAE;QAClC;QAEO,OAAO,GAAA;IACZ,QAAA,SAAS,CAAC,GAAG,CAAC,yBAAyB,CAAC;IACxC,QAAA,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE;IACtB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;YAClB,IAAI,CAAC,KAAK,EAAE;QACd;QAEQ,gBAAgB,GAAA;IACtB,QAAA,SAAS,CAAC,GAAG,CAAC,uBAAuB,CAAC;QACxC;QAEQ,yBAAyB,GAAA;IAC/B,QAAA,SAAS,CAAC,GAAG,CAAC,uBAAuB,CAAC;IAEtC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,EAAE;IAE3C,QAAA,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE;YACpB,IAAI,CAAC,KAAK,EAAE;IAEZ,QAAA,MAAM,MAAM,GAAuB;IACjC,YAAA,IAAI,EAAE,WAAW;IACjB,YAAA,OAAO,EAAE;aACV;IAED,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;QAC3B;QAEQ,gBAAgB,GAAA;IACtB,QAAA,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC;QAChC;QAEQ,iBAAiB,CAAC,IAA+B,EAAE,IAAgC,EAAA;IACzF,QAAA,MAAM,KAAK,GAAsB;gBAC/B,IAAI;gBACJ,IAAI;IACJ,YAAA,SAAS,EAAE,IAAI,CAAC,GAAG;aACpB;IAED,QAAA,SAAS,CAAC,GAAG,CAAC,0BAA0B,EAAE,KAAK,CAAC;IAChD,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACvB;IAEQ,IAAA,uBAAuB,CAAC,KAAwB,EAAA;IACtD,QAAA,SAAS,CAAC,GAAG,CAAC,qBAAqB,EAAE,KAAK,CAAC;IAE3C,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;IAErB,QAAA,QAAQ,KAAK,CAAC,IAAI;IAChB,YAAA,KAAK,aAAa;IAChB,gBAAA,SAAS,CAAC,GAAG,CAAC,2BAA2B,CAAC;oBAC1C;IAEF,YAAA,KAAK,eAAe;IAClB,gBAAA,SAAS,CAAC,GAAG,CAAC,2BAA2B,CAAC;oBAC1C;IAEF,YAAA,KAAK,oBAAoB;oBACvB,SAAS,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC;oBAChD;IAEF,YAAA,KAAK,sBAAsB;IACzB,gBAAA,SAAS,CAAC,GAAG,CAAC,iBAAiB,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC;oBACpF;IAEF,YAAA,KAAK,qBAAqB;IACxB,gBAAA,SAAS,CAAC,GAAG,CAAC,gBAAgB,EAAE,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC;oBACrF;IAEF,YAAA,KAAK,sBAAsB;IACzB,gBAAA,SAAS,CAAC,GAAG,CAAC,0BAA0B,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC;oBAC1F;IAEF,YAAA,KAAK,yBAAyB;IAC5B,gBAAA,SAAS,CAAC,GAAG,CAAC,oBAAoB,EAAE,KAAK,CAAC,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC;oBAC9F;IAEF,YAAA,KAAK,8BAA8B;oBACjC,SAAS,CAAC,GAAG,CAAC,kCAAkC,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC;oBACnE;IAEF,YAAA,KAAK,iBAAiB;IACpB,gBAAA,SAAS,CAAC,GAAG,CAAC,gBAAgB,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC;oBACvF;IAEF,YAAA,KAAK,qBAAqB;oBACxB,SAAS,CAAC,GAAG,CAAC,oBAAoB,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC;oBACxD;IAEF,YAAA,KAAK,sBAAsB;IACzB,gBAAA,SAAS,CAAC,GAAG,CAAC,iBAAiB,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC;oBAC/E;IAEF,YAAA,KAAK,iBAAiB;IACpB,gBAAA,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC;oBACvC;IAEF,YAAA,KAAK,iBAAiB;IACpB,gBAAA,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC;oBACvC;IAEF,YAAA,KAAK,aAAa;IAChB,gBAAA,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC;oBACnC;IAEF,YAAA,KAAK,oBAAoB;oBACvB,SAAS,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC;oBAChD;;QAKN;IAEQ,IAAA,2BAA2B,CAAC,KAAwB,EAAA;YAC1D,SAAS,CAAC,GAAG,CAAC,yBAAyB,EAAE,KAAK,CAAC,IAAI,CAAC;YAEpD,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC;IAErD,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE,oBAAoB,EAAE;IAC7C,YAAA,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE;gBACpB,IAAI,CAAC,KAAK,EAAE;YACd;IAEA,QAAA,MAAM,MAAM,GAAuB;IACjC,YAAA,IAAI,EAAE,WAAW;IACjB,YAAA,OAAO,EAAE;aACV;IAED,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;QAC3B;IAEQ,IAAA,2BAA2B,CAAC,KAAwB,EAAA;YAC1D,SAAS,CAAC,GAAG,CAAC,yBAAyB,EAAE,KAAK,CAAC,IAAI,CAAC;YAEpD,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC;IAErD,QAAA,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE;YACpB,IAAI,CAAC,KAAK,EAAE;IAEZ,QAAA,MAAM,MAAM,GAAuB;IACjC,YAAA,IAAI,EAAE,WAAW;IACjB,YAAA,OAAO,EAAE;aACV;IAED,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;QAC3B;IAEQ,IAAA,uBAAuB,CAAC,KAAwB,EAAA;YACtD,SAAS,CAAC,GAAG,CAAC,qBAAqB,EAAE,KAAK,CAAC,IAAI,CAAC;YAEhD,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC;IACrD,QAAA,MAAM,KAAK,GAAG,uBAAuB,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC;IAEnE,QAAA,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE;YACpB,IAAI,CAAC,KAAK,EAAE;IAEZ,QAAA,MAAM,MAAM,GAAuB;IACjC,YAAA,IAAI,EAAE,QAAQ;IACd,YAAA,OAAO,EAAE,WAAW;gBACpB;aACD;IAED,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;QAC3B;IAEQ,IAAA,WAAW,CAAC,KAAc,EAAA;IAChC,QAAA,SAAS,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC;IAEpC,QAAA,IAAI,iBAAiB;IAErB,QAAA,IAAI,KAAK,YAAY,KAAK,EAAE;gBAC1B,iBAAiB,GAAG,uBAAuB,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC;YACvE;iBAAO;IACL,YAAA,iBAAiB,GAAG,uBAAuB,CAAC,SAAS,EAAE,2BAA2B,CAAC;YACrF;IAEA,QAAA,IAAI,CAAC,aAAa,GAAG,iBAAiB,CAAC,OAAO;IAC9C,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;IAEtB,QAAA,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE;YACpB,IAAI,CAAC,KAAK,EAAE;IAEZ,QAAA,MAAM,MAAM,GAAuB;IACjC,YAAA,IAAI,EAAE,QAAQ;IACd,YAAA,KAAK,EAAE;aACR;IAED,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;QAC3B;IAEQ,IAAA,QAAQ,CAAC,KAAoB,EAAA;IACnC,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM;IACjC,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;IAEnB,QAAA,IAAI,aAAa,KAAK,KAAK,EAAE;gBAC3B,SAAS,CAAC,GAAG,CAAC,gBAAgB,EAAE,aAAa,EAAE,IAAI,EAAE,KAAK,CAAC;gBAC3D,IAAI,CAAC,aAAa,GAAG,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC;YACjD;QACF;QAEQ,KAAK,GAAA;IACX,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;IACpB,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS;IAC3B,QAAA,IAAI,CAAC,IAAI,GAAG,SAAS;IACrB,QAAA,IAAI,CAAC,aAAa,GAAG,SAAS;IAC9B,QAAA,IAAI,CAAC,cAAc,GAAG,SAAS;QACjC;IAEQ,IAAA,gBAAgB,CAAC,SAAqC,EAAA;YAC5D,MAAM,SAAS,GAAG,SAAS,EAAE,SAAS,IAAI,IAAI,CAAC,UAAU;YAEzD,IAAI,CAAC,SAAS,EAAE;IACd,YAAA,OAAO,SAAS;YAClB;YAEA,OAAO;gBACL,SAAS;IACT,YAAA,MAAM,GAAG,SAAS,EAAE,MAAM,IAAI,SAAS,CAAuB;gBAC9D,OAAO,EAAE,SAAS,EAAE,OAAO;gBAC3B,YAAY,EAAE,SAAS,EAAE;aAC1B;QACH;;IAtTe,QAAA,CAAA,SAAS,GAAoB,IAApB;;;;;;;;;;;;"}
1
+ {"version":3,"file":"didit-sdk.umd.js","sources":["../src/constants.ts","../src/utils.ts","../src/modal.ts","../src/DiditSdk.ts"],"sourcesContent":["export const DEFAULT_CONFIG = {\n zIndex: 9999,\n showCloseButton: true,\n showExitConfirmation: true,\n loggingEnabled: false,\n closeModalOnComplete: false\n} as const;\n\nexport const CSS_CLASSES = {\n overlay: \"didit-modal-overlay\",\n container: \"didit-modal-container\",\n content: \"didit-modal-content\",\n iframe: \"didit-verification-iframe\",\n closeButton: \"didit-close-button\",\n loading: \"didit-loading\",\n confirmOverlay: \"didit-confirm-overlay\",\n confirmBox: \"didit-confirm-box\",\n embedded: \"didit-embedded\"\n} as const;\n\nexport const SDK_VERSION = \"0.1.4\";\n","class SDKLogger {\n private static _enabled = false;\n\n static get isEnabled(): boolean {\n return this._enabled;\n }\n\n static set isEnabled(value: boolean) {\n this._enabled = value;\n }\n\n static log(...args: unknown[]): void {\n if (this._enabled) {\n console.log(\"[DiditSDK]\", ...args);\n }\n }\n\n static warn(...args: unknown[]): void {\n if (this._enabled) {\n console.warn(\"[DiditSDK]\", ...args);\n }\n }\n\n static error(...args: unknown[]): void {\n if (this._enabled) {\n console.error(\"[DiditSDK]\", ...args);\n }\n }\n}\n\nexport { SDKLogger };\n\nexport function generateModalId(): string {\n return `didit-modal-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n}\n\nexport function isAllowedOrigin(origin: string): boolean {\n try {\n const url = new URL(origin);\n return url.hostname.endsWith('.didit.me');\n } catch {\n return false;\n }\n}\n\nexport function createVerificationError(\n type: \"sessionExpired\" | \"networkError\" | \"cameraAccessDenied\" | \"unknown\",\n customMessage?: string\n): { type: typeof type; message: string } {\n const messages = {\n sessionExpired: \"Your verification session has expired.\",\n networkError: \"A network error occurred. Please try again.\",\n cameraAccessDenied: \"Camera access is required for verification.\",\n unknown: customMessage || \"An unknown error occurred.\"\n };\n\n return {\n type,\n message: customMessage || messages[type]\n };\n}\n","import type { DiditSdkConfiguration, VerificationEvent } from \"./types\";\nimport { DEFAULT_CONFIG, CSS_CLASSES } from \"./constants\";\nimport { SDKLogger, generateModalId, isAllowedOrigin } from \"./utils\";\n\nexport interface ModalState {\n isOpen: boolean;\n isLoading: boolean;\n showConfirmation: boolean;\n}\n\nexport interface ModalCallbacks {\n onClose: () => void;\n onCloseConfirmed: () => void;\n onMessage: (event: VerificationEvent) => void;\n onIframeLoad: () => void;\n}\n\nexport class VerificationModal {\n private modalId: string;\n private config: Required<Pick<DiditSdkConfiguration, \"zIndex\" | \"showCloseButton\" | \"showExitConfirmation\">>;\n private callbacks: ModalCallbacks;\n private state: ModalState = {\n isOpen: false,\n isLoading: true,\n showConfirmation: false\n };\n\n private overlay: HTMLDivElement | null = null;\n private container: HTMLDivElement | null = null;\n private iframe: HTMLIFrameElement | null = null;\n private loadingEl: HTMLDivElement | null = null;\n private confirmOverlay: HTMLDivElement | null = null;\n private containerElement: HTMLElement;\n\n private boundHandleMessage: ((event: MessageEvent) => void) | null = null;\n private boundHandleKeydown: ((event: KeyboardEvent) => void) | null = null;\n\n private embedded: boolean = false;\n private embeddedContainer: HTMLElement | null = null;\n\n constructor(configuration: DiditSdkConfiguration | undefined, callbacks: ModalCallbacks) {\n this.modalId = generateModalId();\n this.config = {\n zIndex: configuration?.zIndex ?? DEFAULT_CONFIG.zIndex,\n showCloseButton: configuration?.showCloseButton ?? DEFAULT_CONFIG.showCloseButton,\n showExitConfirmation: configuration?.showExitConfirmation ?? DEFAULT_CONFIG.showExitConfirmation\n };\n this.callbacks = callbacks;\n this.containerElement = configuration?.containerElement ?? document.body;\n this.embedded = configuration?.embedded ?? false;\n if (this.embedded && configuration?.embeddedContainerId) {\n this.embeddedContainer = document.getElementById(configuration.embeddedContainerId);\n }\n }\n\n private injectStyles(): void {\n const styleId = \"didit-sdk-styles\";\n if (document.getElementById(styleId)) {\n return;\n }\n\n const styles = document.createElement(\"style\");\n styles.id = styleId;\n styles.textContent = `\n .${CSS_CLASSES.overlay} {\n display: none;\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.6);\n z-index: ${this.config.zIndex};\n justify-content: center;\n align-items: center;\n padding: 1rem;\n opacity: 0;\n transition: opacity 0.2s ease-out;\n }\n\n .${CSS_CLASSES.overlay}.active {\n display: flex;\n opacity: 1;\n }\n\n .${CSS_CLASSES.container} {\n position: relative;\n width: 100%;\n max-width: 500px;\n max-height: 90vh;\n border-radius: 16px;\n overflow: hidden;\n background: transparent;\n }\n\n .${CSS_CLASSES.overlay}.active .${CSS_CLASSES.container} {\n transform: scale(1);\n }\n\n .${CSS_CLASSES.iframe} {\n width: 100%;\n height: 700px;\n border: none;\n display: block;\n }\n\n .${CSS_CLASSES.closeButton} {\n position: absolute;\n top: 12px;\n right: 12px;\n width: 24px;\n height: 24px;\n background: transparent;\n border: none;\n cursor: pointer;\n padding: 0;\n z-index: 10;\n outline: none;\n }\n\n .${CSS_CLASSES.closeButton}:hover,\n .${CSS_CLASSES.closeButton}:focus {\n background: transparent;\n opacity: 0.5;\n }\n\n .${CSS_CLASSES.closeButton} svg {\n stroke: #666;\n stroke-width: 2;\n stroke-linecap: round;\n }\n\n .${CSS_CLASSES.loading} {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background: #fafafa;\n z-index: 5;\n }\n\n .${CSS_CLASSES.loading}.hidden {\n display: none;\n }\n\n .${CSS_CLASSES.loading} svg {\n width: 48px;\n height: 48px;\n animation: didit-spin 1s linear infinite;\n }\n\n .${CSS_CLASSES.loading} circle {\n stroke: #e5e5e5;\n stroke-width: 3;\n fill: none;\n }\n\n .${CSS_CLASSES.loading} path {\n stroke: #525252;\n stroke-width: 3;\n stroke-linecap: round;\n fill: none;\n }\n\n @keyframes didit-spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n\n .${CSS_CLASSES.confirmOverlay} {\n display: none;\n position: absolute;\n inset: 0;\n background: rgba(0, 0, 0, 0.5);\n z-index: 20;\n justify-content: center;\n align-items: center;\n opacity: 0;\n transition: opacity 0.15s ease-out;\n }\n\n .${CSS_CLASSES.confirmOverlay}.active {\n display: flex;\n opacity: 1;\n }\n\n .${CSS_CLASSES.confirmBox} {\n background: #fff;\n border-radius: 12px;\n padding: 1.5rem;\n text-align: center;\n max-width: 300px;\n margin: 1rem;\n transform: scale(0.95);\n transition: transform 0.15s ease-out;\n box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);\n }\n\n .${CSS_CLASSES.confirmOverlay}.active .${CSS_CLASSES.confirmBox} {\n transform: scale(1);\n }\n\n .${CSS_CLASSES.confirmBox} h3 {\n color: #1a1a2e;\n margin: 0 0 0.5rem 0;\n font-size: 1.125rem;\n font-weight: 600;\n }\n\n .${CSS_CLASSES.confirmBox} p {\n color: #666;\n font-size: 0.875rem;\n margin: 0 0 1.25rem 0;\n line-height: 1.5;\n }\n\n .didit-confirm-actions {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 1rem;\n }\n\n .didit-confirm-actions button {\n background: #2563eb;\n color: #fff;\n border: none;\n padding: 0.625rem 1.25rem;\n border-radius: 8px;\n font-size: 0.875rem;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.15s ease;\n }\n\n .didit-confirm-actions button:hover {\n background: #1d4ed8;\n }\n\n .didit-confirm-actions span {\n color: #666;\n font-size: 0.875rem;\n cursor: pointer;\n padding: 0.625rem;\n transition: color 0.15s ease;\n }\n\n .didit-confirm-actions span:hover {\n color: #1a1a2e;\n }\n\n @media (max-width: 540px) {\n .${CSS_CLASSES.overlay} {\n padding: 0;\n }\n\n .${CSS_CLASSES.container} {\n max-width: 100%;\n max-height: 100vh;\n border-radius: 0;\n }\n\n .${CSS_CLASSES.iframe} {\n height: 100vh;\n }\n }\n\n .${CSS_CLASSES.embedded} {\n position: relative;\n width: 100%;\n height: 100%;\n }\n\n .${CSS_CLASSES.embedded} .${CSS_CLASSES.iframe} {\n width: 100%;\n height: 100%;\n }\n\n .${CSS_CLASSES.embedded} .${CSS_CLASSES.loading} {\n border-radius: 0;\n }\n `;\n\n document.head.appendChild(styles);\n }\n\n private createDOM(): void {\n this.injectStyles();\n\n if (this.embedded && this.embeddedContainer) {\n this.createEmbeddedDOM();\n return;\n }\n\n this.overlay = document.createElement(\"div\");\n this.overlay.id = this.modalId;\n this.overlay.className = CSS_CLASSES.overlay;\n this.overlay.setAttribute(\"role\", \"dialog\");\n this.overlay.setAttribute(\"aria-modal\", \"true\");\n this.overlay.setAttribute(\"aria-label\", \"Didit Verification\");\n\n this.container = document.createElement(\"div\");\n this.container.className = CSS_CLASSES.container;\n\n this.loadingEl = document.createElement(\"div\");\n this.loadingEl.className = CSS_CLASSES.loading;\n this.loadingEl.innerHTML = `\n <svg viewBox=\"0 0 24 24\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 2a10 10 0 0 1 10 10\" />\n </svg>\n `;\n\n if (this.config.showCloseButton) {\n const closeBtn = document.createElement(\"button\");\n closeBtn.className = CSS_CLASSES.closeButton;\n closeBtn.setAttribute(\"aria-label\", \"Close verification\");\n closeBtn.innerHTML = `\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\">\n <line x1=\"1\" y1=\"1\" x2=\"13\" y2=\"13\" />\n <line x1=\"13\" y1=\"1\" x2=\"1\" y2=\"13\" />\n </svg>\n `;\n closeBtn.addEventListener(\"click\", () => this.handleCloseRequest());\n this.container.appendChild(closeBtn);\n }\n\n this.iframe = document.createElement(\"iframe\");\n this.iframe.className = CSS_CLASSES.iframe;\n this.iframe.setAttribute(\"allow\", \"camera; microphone; fullscreen; autoplay; encrypted-media; geolocation\");\n this.iframe.setAttribute(\"title\", \"Didit Verification\");\n this.iframe.addEventListener(\"load\", () => this.handleIframeLoad());\n\n this.confirmOverlay = document.createElement(\"div\");\n this.confirmOverlay.className = CSS_CLASSES.confirmOverlay;\n this.confirmOverlay.innerHTML = `\n <div class=\"${CSS_CLASSES.confirmBox}\">\n <h3>Exit verification?</h3>\n <p>Exiting will end your verification process. Are you sure?</p>\n <div class=\"didit-confirm-actions\">\n <button type=\"button\" data-action=\"continue\">Continue</button>\n <span data-action=\"exit\">Exit</span>\n </div>\n </div>\n `;\n\n this.confirmOverlay.querySelector('[data-action=\"continue\"]')?.addEventListener(\"click\", () => {\n this.hideConfirmation();\n });\n this.confirmOverlay.querySelector('[data-action=\"exit\"]')?.addEventListener(\"click\", () => {\n this.confirmExit();\n });\n\n this.container.appendChild(this.loadingEl);\n this.container.appendChild(this.iframe);\n this.container.appendChild(this.confirmOverlay);\n this.overlay.appendChild(this.container);\n\n this.overlay.addEventListener(\"click\", (e) => {\n if (e.target === this.overlay) {\n this.handleCloseRequest();\n }\n });\n\n this.containerElement.appendChild(this.overlay);\n }\n\n private createEmbeddedDOM(): void {\n if (!this.embeddedContainer) return;\n\n this.container = document.createElement(\"div\");\n this.container.id = this.modalId;\n this.container.className = CSS_CLASSES.embedded;\n\n this.loadingEl = document.createElement(\"div\");\n this.loadingEl.className = CSS_CLASSES.loading;\n this.loadingEl.innerHTML = `\n <svg viewBox=\"0 0 24 24\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 2a10 10 0 0 1 10 10\" />\n </svg>\n `;\n\n this.iframe = document.createElement(\"iframe\");\n this.iframe.className = CSS_CLASSES.iframe;\n this.iframe.setAttribute(\"allow\", \"camera; microphone; fullscreen; autoplay; encrypted-media; geolocation\");\n this.iframe.setAttribute(\"title\", \"Didit Verification\");\n this.iframe.addEventListener(\"load\", () => this.handleIframeLoad());\n\n this.container.appendChild(this.loadingEl);\n this.container.appendChild(this.iframe);\n this.embeddedContainer.appendChild(this.container);\n }\n\n private setupEventListeners(): void {\n this.boundHandleMessage = this.handleMessage.bind(this);\n window.addEventListener(\"message\", this.boundHandleMessage);\n\n this.boundHandleKeydown = this.handleKeydown.bind(this);\n document.addEventListener(\"keydown\", this.boundHandleKeydown);\n }\n\n private removeEventListeners(): void {\n if (this.boundHandleMessage) {\n window.removeEventListener(\"message\", this.boundHandleMessage);\n this.boundHandleMessage = null;\n }\n if (this.boundHandleKeydown) {\n document.removeEventListener(\"keydown\", this.boundHandleKeydown);\n this.boundHandleKeydown = null;\n }\n }\n\n private handleMessage(event: MessageEvent): void {\n if (!isAllowedOrigin(event.origin)) {\n return;\n }\n\n SDKLogger.log(\"Received postMessage:\", event.data);\n\n let messageData: VerificationEvent;\n try {\n if (typeof event.data === \"string\") {\n messageData = JSON.parse(event.data);\n } else {\n messageData = event.data;\n }\n } catch {\n SDKLogger.warn(\"Failed to parse postMessage:\", event.data);\n return;\n }\n\n if (messageData.type === \"didit:close_request\") {\n this.handleCloseRequest();\n return;\n }\n\n this.callbacks.onMessage(messageData);\n }\n\n private handleKeydown(event: KeyboardEvent): void {\n if (!this.state.isOpen) return;\n\n if (event.key === \"Escape\") {\n event.preventDefault();\n if (this.state.showConfirmation) {\n this.hideConfirmation();\n } else {\n this.handleCloseRequest();\n }\n }\n }\n\n private handleIframeLoad(): void {\n if (this.iframe?.src && this.iframe.src !== \"about:blank\") {\n this.state.isLoading = false;\n this.loadingEl?.classList.add(\"hidden\");\n this.callbacks.onIframeLoad();\n }\n }\n\n private handleCloseRequest(): void {\n if (this.config.showExitConfirmation) {\n this.showConfirmation();\n } else {\n this.callbacks.onCloseConfirmed();\n }\n }\n\n private showConfirmation(): void {\n this.state.showConfirmation = true;\n this.confirmOverlay?.classList.add(\"active\");\n this.callbacks.onClose();\n }\n\n private hideConfirmation(): void {\n this.state.showConfirmation = false;\n this.confirmOverlay?.classList.remove(\"active\");\n }\n\n private confirmExit(): void {\n this.hideConfirmation();\n this.callbacks.onCloseConfirmed();\n }\n\n open(verificationUrl: string): void {\n if (!this.overlay && !this.container) {\n this.createDOM();\n this.setupEventListeners();\n }\n\n SDKLogger.log(\"Opening with URL:\", verificationUrl);\n\n this.state.isLoading = true;\n this.state.showConfirmation = false;\n this.loadingEl?.classList.remove(\"hidden\");\n this.confirmOverlay?.classList.remove(\"active\");\n\n if (this.iframe) {\n this.iframe.src = verificationUrl;\n }\n\n this.state.isOpen = true;\n\n if (this.embedded) {\n return;\n }\n\n this.overlay?.classList.add(\"active\");\n document.body.style.overflow = \"hidden\";\n }\n\n close(): void {\n SDKLogger.log(\"Closing\");\n\n this.state.isOpen = false;\n this.state.isLoading = true;\n this.state.showConfirmation = false;\n\n if (this.iframe) {\n this.iframe.src = \"about:blank\";\n }\n\n if (this.embedded) {\n return;\n }\n\n this.overlay?.classList.remove(\"active\");\n document.body.style.overflow = \"\";\n }\n\n destroy(): void {\n SDKLogger.log(\"Destroying\");\n\n this.close();\n this.removeEventListeners();\n\n if (this.embedded && this.container && this.container.parentNode) {\n this.container.parentNode.removeChild(this.container);\n } else if (this.overlay && this.overlay.parentNode) {\n this.overlay.parentNode.removeChild(this.overlay);\n }\n\n this.overlay = null;\n this.container = null;\n this.iframe = null;\n this.loadingEl = null;\n this.confirmOverlay = null;\n }\n\n isOpen(): boolean {\n return this.state.isOpen;\n }\n\n isLoading(): boolean {\n return this.state.isLoading;\n }\n}\n","import type {\n DiditSdkState,\n DiditSdkConfiguration,\n VerificationResult,\n VerificationCallback,\n StateChangeCallback,\n EventCallback,\n VerificationEvent,\n SessionData,\n VerificationStatus,\n StartVerificationOptions\n} from \"./types\";\n\nimport { VerificationModal } from \"./modal\";\nimport { DEFAULT_CONFIG } from \"./constants\";\nimport { SDKLogger, createVerificationError } from \"./utils\";\n\nexport class DiditSdk {\n private static _instance: DiditSdk | null = null;\n\n public static get shared(): DiditSdk {\n if (!DiditSdk._instance) {\n DiditSdk._instance = new DiditSdk();\n }\n return DiditSdk._instance;\n }\n\n public static reset(): void {\n if (DiditSdk._instance) {\n DiditSdk._instance.destroy();\n DiditSdk._instance = null;\n }\n }\n\n private _state: DiditSdkState = \"idle\";\n private _configuration: DiditSdkConfiguration | undefined;\n private _sessionId: string | undefined;\n private _url: string | undefined;\n private _modal: VerificationModal | null = null;\n private _errorMessage: string | undefined;\n\n public onComplete: VerificationCallback | undefined;\n public onStateChange: StateChangeCallback | undefined;\n public onEvent: EventCallback | undefined;\n\n public get state(): DiditSdkState {\n return this._state;\n }\n\n public get configuration(): DiditSdkConfiguration | undefined {\n return this._configuration;\n }\n\n public get isPresented(): boolean {\n return this._modal?.isOpen() ?? false;\n }\n\n public get errorMessage(): string | undefined {\n return this._errorMessage;\n }\n\n private constructor() {\n SDKLogger.log(\"DiditSdk initialized\");\n }\n\n public async startVerification(options: StartVerificationOptions): Promise<void> {\n const config = options.configuration;\n this._configuration = config;\n\n SDKLogger.isEnabled = config?.loggingEnabled ?? DEFAULT_CONFIG.loggingEnabled;\n\n SDKLogger.log(\"Starting verification with options:\", options);\n if (this._modal) {\n this._modal.destroy();\n this._modal = null;\n }\n this._modal = new VerificationModal(config, {\n onClose: () => this.handleModalClose(),\n onCloseConfirmed: () => this.handleModalCloseConfirmed(),\n onMessage: (event) => this.handleVerificationEvent(event),\n onIframeLoad: () => this.handleIframeLoad()\n });\n\n try {\n const { url } = options;\n\n if (!url || typeof url !== \"string\") {\n throw new Error(\"Invalid options: url is required\");\n }\n\n this._url = url;\n this.setState(\"loading\");\n\n this.emitInternalEvent(\"didit:started\", {});\n\n this._modal?.open(this._url);\n } catch (error) {\n this.handleError(error);\n }\n }\n\n public close(): void {\n SDKLogger.log(\"Closing verification programmatically\");\n this.handleModalCloseConfirmed();\n }\n\n public destroy(): void {\n SDKLogger.log(\"Destroying SDK instance\");\n this._modal?.destroy();\n this._modal = null;\n this.reset();\n }\n\n private handleModalClose(): void {\n SDKLogger.log(\"Modal close requested\");\n }\n\n private handleModalCloseConfirmed(): void {\n SDKLogger.log(\"Modal close confirmed\");\n\n const sessionData = this.buildSessionData();\n\n this._modal?.close();\n this.reset();\n\n const result: VerificationResult = {\n type: \"cancelled\",\n session: sessionData\n };\n\n this.onComplete?.(result);\n }\n\n private handleIframeLoad(): void {\n SDKLogger.log(\"Iframe loaded\");\n }\n\n private emitInternalEvent(type: VerificationEvent[\"type\"], data?: VerificationEvent[\"data\"]): void {\n const event: VerificationEvent = {\n type,\n data,\n timestamp: Date.now()\n };\n\n SDKLogger.log(\"Emitting internal event:\", event);\n this.onEvent?.(event);\n }\n\n private handleVerificationEvent(event: VerificationEvent): void {\n SDKLogger.log(\"Verification event:\", event);\n\n this.onEvent?.(event);\n\n switch (event.type) {\n case \"didit:ready\":\n SDKLogger.log(\"Verification iframe ready\");\n break;\n\n case \"didit:started\":\n SDKLogger.log(\"User started verification\");\n break;\n\n case \"didit:step_started\":\n SDKLogger.log(\"Step started:\", event.data?.step);\n break;\n\n case \"didit:step_completed\":\n SDKLogger.log(\"Step completed:\", event.data?.step, \"-> next:\", event.data?.nextStep);\n break;\n\n case \"didit:media_started\":\n SDKLogger.log(\"Media started:\", event.data?.mediaType, \"for step:\", event.data?.step);\n break;\n\n case \"didit:media_captured\":\n SDKLogger.log(\"Media captured for step:\", event.data?.step, \"isAuto:\", event.data?.isAuto);\n break;\n\n case \"didit:document_selected\":\n SDKLogger.log(\"Document selected:\", event.data?.documentType, \"country:\", event.data?.country);\n break;\n\n case \"didit:verification_submitted\":\n SDKLogger.log(\"Verification submitted for step:\", event.data?.step);\n break;\n\n case \"didit:code_sent\":\n SDKLogger.log(\"Code sent via:\", event.data?.channel, \"codeSize:\", event.data?.codeSize);\n break;\n\n case \"didit:code_verified\":\n SDKLogger.log(\"Code verified via:\", event.data?.channel);\n break;\n\n case \"didit:status_updated\":\n SDKLogger.log(\"Status updated:\", event.data?.status, \"step:\", event.data?.step);\n break;\n\n case \"didit:completed\":\n this.handleVerificationCompleted(event);\n break;\n\n case \"didit:cancelled\":\n this.handleVerificationCancelled(event);\n break;\n\n case \"didit:error\":\n this.handleVerificationError(event);\n break;\n\n case \"didit:step_changed\":\n SDKLogger.log(\"Step changed:\", event.data?.step);\n break;\n\n case \"didit:close_request\":\n break;\n }\n }\n\n private handleVerificationCompleted(event: VerificationEvent): void {\n SDKLogger.log(\"Verification completed:\", event.data);\n\n const sessionData = this.buildSessionData(event.data);\n\n if (this._configuration?.closeModalOnComplete) {\n this._modal?.close();\n this.reset();\n }\n\n const result: VerificationResult = {\n type: \"completed\",\n session: sessionData\n };\n\n this.onComplete?.(result);\n }\n\n private handleVerificationCancelled(event: VerificationEvent): void {\n SDKLogger.log(\"Verification cancelled:\", event.data);\n\n const sessionData = this.buildSessionData(event.data);\n\n this._modal?.close();\n this.reset();\n\n const result: VerificationResult = {\n type: \"cancelled\",\n session: sessionData\n };\n\n this.onComplete?.(result);\n }\n\n private handleVerificationError(event: VerificationEvent): void {\n SDKLogger.log(\"Verification error:\", event.data);\n }\n\n private handleError(error: unknown): void {\n SDKLogger.error(\"SDK error:\", error);\n\n let verificationError;\n\n if (error instanceof Error) {\n verificationError = createVerificationError(\"unknown\", error.message);\n } else {\n verificationError = createVerificationError(\"unknown\", \"An unknown error occurred\");\n }\n\n this._errorMessage = verificationError.message;\n this.setState(\"error\");\n\n this._modal?.close();\n this.reset();\n\n const result: VerificationResult = {\n type: \"failed\",\n error: verificationError\n };\n\n this.onComplete?.(result);\n }\n\n private setState(state: DiditSdkState): void {\n const previousState = this._state;\n this._state = state;\n\n if (previousState !== state) {\n SDKLogger.log(\"State changed:\", previousState, \"->\", state);\n this.onStateChange?.(state, this._errorMessage);\n }\n }\n\n private reset(): void {\n this._state = \"idle\";\n this._sessionId = undefined;\n this._url = undefined;\n this._errorMessage = undefined;\n this._configuration = undefined;\n }\n\n private buildSessionData(eventData?: VerificationEvent[\"data\"]): SessionData | undefined {\n const sessionId = eventData?.sessionId || this._sessionId;\n\n if (!sessionId) {\n return undefined;\n }\n\n return {\n sessionId,\n status: (eventData?.status || \"Pending\") as VerificationStatus\n };\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  /**
2
- * Didit SDK for Web v0.1.2
2
+ * Didit SDK for Web v0.1.4
3
3
  * (c) 2026 Didit
4
4
  * @license MIT
5
5
  */
6
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).DiditSDK={})}(this,function(e){"use strict";const t=9999,n=!0,i=!0,s=!1,a="didit-modal-overlay",o="didit-modal-container",r="didit-verification-iframe",d="didit-close-button",l="didit-loading",c="didit-confirm-overlay",h="didit-confirm-box";class m{static get isEnabled(){return this._enabled}static set isEnabled(e){this._enabled=e}static log(...e){this._enabled&&console.log("[DiditSDK]",...e)}static warn(...e){this._enabled&&console.warn("[DiditSDK]",...e)}static error(...e){this._enabled&&console.error("[DiditSDK]",...e)}}function u(e,t){return{type:e,message:t||{sessionExpired:"Your verification session has expired.",networkError:"A network error occurred. Please try again.",cameraAccessDenied:"Camera access is required for verification.",unknown:t||"An unknown error occurred."}[e]}}m._enabled=!1;class f{constructor(e,s){this.state={isOpen:!1,isLoading:!0,showConfirmation:!1},this.overlay=null,this.container=null,this.iframe=null,this.loadingEl=null,this.confirmOverlay=null,this.boundHandleMessage=null,this.boundHandleKeydown=null,this.modalId=`didit-modal-${Date.now()}-${Math.random().toString(36).substr(2,9)}`,this.config={zIndex:e?.zIndex??t,showCloseButton:e?.showCloseButton??n,showExitConfirmation:e?.showExitConfirmation??i},this.callbacks=s,this.containerElement=e?.containerElement??document.body}injectStyles(){const e="didit-sdk-styles";if(document.getElementById(e))return;const t=document.createElement("style");t.id=e,t.textContent=`\n .${a} {\n display: none;\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.6);\n z-index: ${this.config.zIndex};\n justify-content: center;\n align-items: center;\n padding: 1rem;\n opacity: 0;\n transition: opacity 0.2s ease-out;\n }\n\n .${a}.active {\n display: flex;\n opacity: 1;\n }\n\n .${o} {\n position: relative;\n width: 100%;\n max-width: 500px;\n max-height: 90vh;\n border-radius: 16px;\n overflow: hidden;\n background: transparent;\n }\n\n .${a}.active .${o} {\n transform: scale(1);\n }\n\n .${r} {\n width: 100%;\n height: 700px;\n border: none;\n display: block;\n }\n\n .${d} {\n position: absolute;\n top: 12px;\n right: 12px;\n width: 24px;\n height: 24px;\n background: transparent;\n border: none;\n cursor: pointer;\n padding: 0;\n z-index: 10;\n outline: none;\n }\n\n .${d}:hover,\n .${d}:focus {\n background: transparent;\n opacity: 0.5;\n }\n\n .${d} svg {\n stroke: #666;\n stroke-width: 2;\n stroke-linecap: round;\n }\n\n .${l} {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background: #fafafa;\n z-index: 5;\n }\n\n .${l}.hidden {\n display: none;\n }\n\n .${l} svg {\n width: 48px;\n height: 48px;\n animation: didit-spin 1s linear infinite;\n }\n\n .${l} circle {\n stroke: #e5e5e5;\n stroke-width: 3;\n fill: none;\n }\n\n .${l} path {\n stroke: #525252;\n stroke-width: 3;\n stroke-linecap: round;\n fill: none;\n }\n\n @keyframes didit-spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n\n .${c} {\n display: none;\n position: absolute;\n inset: 0;\n background: rgba(0, 0, 0, 0.5);\n z-index: 20;\n justify-content: center;\n align-items: center;\n opacity: 0;\n transition: opacity 0.15s ease-out;\n }\n\n .${c}.active {\n display: flex;\n opacity: 1;\n }\n\n .${h} {\n background: #fff;\n border-radius: 12px;\n padding: 1.5rem;\n text-align: center;\n max-width: 300px;\n margin: 1rem;\n transform: scale(0.95);\n transition: transform 0.15s ease-out;\n box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);\n }\n\n .${c}.active .${h} {\n transform: scale(1);\n }\n\n .${h} h3 {\n color: #1a1a2e;\n margin: 0 0 0.5rem 0;\n font-size: 1.125rem;\n font-weight: 600;\n }\n\n .${h} p {\n color: #666;\n font-size: 0.875rem;\n margin: 0 0 1.25rem 0;\n line-height: 1.5;\n }\n\n .didit-confirm-actions {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 1rem;\n }\n\n .didit-confirm-actions button {\n background: #2563eb;\n color: #fff;\n border: none;\n padding: 0.625rem 1.25rem;\n border-radius: 8px;\n font-size: 0.875rem;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.15s ease;\n }\n\n .didit-confirm-actions button:hover {\n background: #1d4ed8;\n }\n\n .didit-confirm-actions span {\n color: #666;\n font-size: 0.875rem;\n cursor: pointer;\n padding: 0.625rem;\n transition: color 0.15s ease;\n }\n\n .didit-confirm-actions span:hover {\n color: #1a1a2e;\n }\n\n @media (max-width: 540px) {\n .${a} {\n padding: 0;\n }\n\n .${o} {\n max-width: 100%;\n max-height: 100vh;\n border-radius: 0;\n }\n\n .${r} {\n height: 100vh;\n }\n }\n `,document.head.appendChild(t)}createDOM(){if(this.injectStyles(),this.overlay=document.createElement("div"),this.overlay.id=this.modalId,this.overlay.className=a,this.overlay.setAttribute("role","dialog"),this.overlay.setAttribute("aria-modal","true"),this.overlay.setAttribute("aria-label","Didit Verification"),this.container=document.createElement("div"),this.container.className=o,this.loadingEl=document.createElement("div"),this.loadingEl.className=l,this.loadingEl.innerHTML='\n <svg viewBox="0 0 24 24">\n <circle cx="12" cy="12" r="10" />\n <path d="M12 2a10 10 0 0 1 10 10" />\n </svg>\n ',this.config.showCloseButton){const e=document.createElement("button");e.className=d,e.setAttribute("aria-label","Close verification"),e.innerHTML='\n <svg width="14" height="14" viewBox="0 0 14 14">\n <line x1="1" y1="1" x2="13" y2="13" />\n <line x1="13" y1="1" x2="1" y2="13" />\n </svg>\n ',e.addEventListener("click",()=>this.handleCloseRequest()),this.container.appendChild(e)}this.iframe=document.createElement("iframe"),this.iframe.className=r,this.iframe.setAttribute("allow","camera; microphone; fullscreen; autoplay; encrypted-media; geolocation"),this.iframe.setAttribute("title","Didit Verification"),this.iframe.addEventListener("load",()=>this.handleIframeLoad()),this.confirmOverlay=document.createElement("div"),this.confirmOverlay.className=c,this.confirmOverlay.innerHTML=`\n <div class="${h}">\n <h3>Exit verification?</h3>\n <p>Exiting will end your verification process. Are you sure?</p>\n <div class="didit-confirm-actions">\n <button type="button" data-action="continue">Continue</button>\n <span data-action="exit">Exit</span>\n </div>\n </div>\n `,this.confirmOverlay.querySelector('[data-action="continue"]')?.addEventListener("click",()=>{this.hideConfirmation()}),this.confirmOverlay.querySelector('[data-action="exit"]')?.addEventListener("click",()=>{this.confirmExit()}),this.container.appendChild(this.loadingEl),this.container.appendChild(this.iframe),this.container.appendChild(this.confirmOverlay),this.overlay.appendChild(this.container),this.overlay.addEventListener("click",e=>{e.target===this.overlay&&this.handleCloseRequest()}),this.containerElement.appendChild(this.overlay)}setupEventListeners(){this.boundHandleMessage=this.handleMessage.bind(this),window.addEventListener("message",this.boundHandleMessage),this.boundHandleKeydown=this.handleKeydown.bind(this),document.addEventListener("keydown",this.boundHandleKeydown)}removeEventListeners(){this.boundHandleMessage&&(window.removeEventListener("message",this.boundHandleMessage),this.boundHandleMessage=null),this.boundHandleKeydown&&(document.removeEventListener("keydown",this.boundHandleKeydown),this.boundHandleKeydown=null)}handleMessage(e){if(!function(e){try{return new URL(e).hostname.endsWith(".didit.me")}catch{return!1}}(e.origin))return;let t;m.log("Received postMessage:",e.data);try{t="string"==typeof e.data?JSON.parse(e.data):e.data}catch{return void m.warn("Failed to parse postMessage:",e.data)}"didit:close_request"!==t.type?this.callbacks.onMessage(t):this.handleCloseRequest()}handleKeydown(e){this.state.isOpen&&"Escape"===e.key&&(e.preventDefault(),this.state.showConfirmation?this.hideConfirmation():this.handleCloseRequest())}handleIframeLoad(){this.iframe?.src&&"about:blank"!==this.iframe.src&&(this.state.isLoading=!1,this.loadingEl?.classList.add("hidden"),this.callbacks.onIframeLoad())}handleCloseRequest(){this.config.showExitConfirmation?this.showConfirmation():this.callbacks.onCloseConfirmed()}showConfirmation(){this.state.showConfirmation=!0,this.confirmOverlay?.classList.add("active"),this.callbacks.onClose()}hideConfirmation(){this.state.showConfirmation=!1,this.confirmOverlay?.classList.remove("active")}confirmExit(){this.hideConfirmation(),this.callbacks.onCloseConfirmed()}open(e){this.overlay||(this.createDOM(),this.setupEventListeners()),m.log("Opening modal with URL:",e),this.state.isLoading=!0,this.state.showConfirmation=!1,this.loadingEl?.classList.remove("hidden"),this.confirmOverlay?.classList.remove("active"),this.iframe&&(this.iframe.src=e),this.state.isOpen=!0,this.overlay?.classList.add("active"),document.body.style.overflow="hidden"}close(){m.log("Closing modal"),this.state.isOpen=!1,this.state.isLoading=!0,this.state.showConfirmation=!1,this.overlay?.classList.remove("active"),this.iframe&&(this.iframe.src="about:blank"),document.body.style.overflow=""}destroy(){m.log("Destroying modal"),this.close(),this.removeEventListeners(),this.overlay&&this.overlay.parentNode&&this.overlay.parentNode.removeChild(this.overlay),this.overlay=null,this.container=null,this.iframe=null,this.loadingEl=null,this.confirmOverlay=null}isOpen(){return this.state.isOpen}isLoading(){return this.state.isLoading}}class p{static get shared(){return p._instance||(p._instance=new p),p._instance}static reset(){p._instance&&(p._instance.destroy(),p._instance=null)}get state(){return this._state}get configuration(){return this._configuration}get isPresented(){return this._modal?.isOpen()??!1}get errorMessage(){return this._errorMessage}constructor(){this._state="idle",this._modal=null,m.log("DiditSdk initialized")}async startVerification(e){const t=e.configuration;this._configuration=t,m.isEnabled=t?.loggingEnabled??s,m.log("Starting verification with options:",e),this._modal&&(this._modal.destroy(),this._modal=null),this._modal=new f(t,{onClose:()=>this.handleModalClose(),onCloseConfirmed:()=>this.handleModalCloseConfirmed(),onMessage:e=>this.handleVerificationEvent(e),onIframeLoad:()=>this.handleIframeLoad()});try{const{url:t}=e;if(!t||"string"!=typeof t)throw new Error("Invalid options: url is required");this._url=t,this.setState("loading"),this.emitInternalEvent("didit:started",{}),this._modal?.open(this._url),this.setState("ready")}catch(e){this.handleError(e)}}close(){m.log("Closing verification programmatically"),this.handleModalCloseConfirmed()}destroy(){m.log("Destroying SDK instance"),this._modal?.destroy(),this._modal=null,this.reset()}handleModalClose(){m.log("Modal close requested")}handleModalCloseConfirmed(){m.log("Modal close confirmed");const e=this.buildSessionData();this._modal?.close(),this.reset();const t={type:"cancelled",session:e};this.onComplete?.(t)}handleIframeLoad(){m.log("Iframe loaded")}emitInternalEvent(e,t){const n={type:e,data:t,timestamp:Date.now()};m.log("Emitting internal event:",n),this.onEvent?.(n)}handleVerificationEvent(e){switch(m.log("Verification event:",e),this.onEvent?.(e),e.type){case"didit:ready":m.log("Verification iframe ready");break;case"didit:started":m.log("User started verification");break;case"didit:step_started":m.log("Step started:",e.data?.step);break;case"didit:step_completed":m.log("Step completed:",e.data?.step,"-> next:",e.data?.nextStep);break;case"didit:media_started":m.log("Media started:",e.data?.mediaType,"for step:",e.data?.step);break;case"didit:media_captured":m.log("Media captured for step:",e.data?.step,"isAuto:",e.data?.isAuto);break;case"didit:document_selected":m.log("Document selected:",e.data?.documentType,"country:",e.data?.country);break;case"didit:verification_submitted":m.log("Verification submitted for step:",e.data?.step);break;case"didit:code_sent":m.log("Code sent via:",e.data?.channel,"codeSize:",e.data?.codeSize);break;case"didit:code_verified":m.log("Code verified via:",e.data?.channel);break;case"didit:status_updated":m.log("Status updated:",e.data?.status,"step:",e.data?.step);break;case"didit:completed":this.handleVerificationCompleted(e);break;case"didit:cancelled":this.handleVerificationCancelled(e);break;case"didit:error":this.handleVerificationError(e);break;case"didit:step_changed":m.log("Step changed:",e.data?.step)}}handleVerificationCompleted(e){m.log("Verification completed:",e.data);const t=this.buildSessionData(e.data);this._configuration?.closeModalOnComplete&&(this._modal?.close(),this.reset());const n={type:"completed",session:t};this.onComplete?.(n)}handleVerificationCancelled(e){m.log("Verification cancelled:",e.data);const t=this.buildSessionData(e.data);this._modal?.close(),this.reset();const n={type:"cancelled",session:t};this.onComplete?.(n)}handleVerificationError(e){m.log("Verification error:",e.data);const t=this.buildSessionData(e.data),n=u("unknown",e.data?.error);this._modal?.close(),this.reset();const i={type:"failed",session:t,error:n};this.onComplete?.(i)}handleError(e){let t;m.error("SDK error:",e),t=e instanceof Error?u("unknown",e.message):u("unknown","An unknown error occurred"),this._errorMessage=t.message,this.setState("error"),this._modal?.close(),this.reset();const n={type:"failed",error:t};this.onComplete?.(n)}setState(e){const t=this._state;this._state=e,t!==e&&(m.log("State changed:",t,"->",e),this.onStateChange?.(e,this._errorMessage))}reset(){this._state="idle",this._sessionId=void 0,this._url=void 0,this._errorMessage=void 0,this._configuration=void 0}buildSessionData(e){const t=e?.sessionId||this._sessionId;if(t)return{sessionId:t,status:e?.status||"Pending",country:e?.country,documentType:e?.documentType}}}p._instance=null,e.DiditSdk=p,e.SDK_VERSION="0.1.0",e.default=p,Object.defineProperty(e,"__esModule",{value:!0})});
6
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).DiditSDK={})}(this,function(e){"use strict";const t=9999,n=!0,i=!0,a=!1,s="didit-modal-overlay",o="didit-modal-container",d="didit-verification-iframe",r="didit-close-button",l="didit-loading",c="didit-confirm-overlay",h="didit-confirm-box",m="didit-embedded";class u{static get isEnabled(){return this._enabled}static set isEnabled(e){this._enabled=e}static log(...e){this._enabled&&console.log("[DiditSDK]",...e)}static warn(...e){this._enabled&&console.warn("[DiditSDK]",...e)}static error(...e){this._enabled&&console.error("[DiditSDK]",...e)}}function f(e,t){return{type:e,message:t||{sessionExpired:"Your verification session has expired.",networkError:"A network error occurred. Please try again.",cameraAccessDenied:"Camera access is required for verification.",unknown:t||"An unknown error occurred."}[e]}}u._enabled=!1;class p{constructor(e,a){this.state={isOpen:!1,isLoading:!0,showConfirmation:!1},this.overlay=null,this.container=null,this.iframe=null,this.loadingEl=null,this.confirmOverlay=null,this.boundHandleMessage=null,this.boundHandleKeydown=null,this.embedded=!1,this.embeddedContainer=null,this.modalId=`didit-modal-${Date.now()}-${Math.random().toString(36).substr(2,9)}`,this.config={zIndex:e?.zIndex??t,showCloseButton:e?.showCloseButton??n,showExitConfirmation:e?.showExitConfirmation??i},this.callbacks=a,this.containerElement=e?.containerElement??document.body,this.embedded=e?.embedded??!1,this.embedded&&e?.embeddedContainerId&&(this.embeddedContainer=document.getElementById(e.embeddedContainerId))}injectStyles(){const e="didit-sdk-styles";if(document.getElementById(e))return;const t=document.createElement("style");t.id=e,t.textContent=`\n .${s} {\n display: none;\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.6);\n z-index: ${this.config.zIndex};\n justify-content: center;\n align-items: center;\n padding: 1rem;\n opacity: 0;\n transition: opacity 0.2s ease-out;\n }\n\n .${s}.active {\n display: flex;\n opacity: 1;\n }\n\n .${o} {\n position: relative;\n width: 100%;\n max-width: 500px;\n max-height: 90vh;\n border-radius: 16px;\n overflow: hidden;\n background: transparent;\n }\n\n .${s}.active .${o} {\n transform: scale(1);\n }\n\n .${d} {\n width: 100%;\n height: 700px;\n border: none;\n display: block;\n }\n\n .${r} {\n position: absolute;\n top: 12px;\n right: 12px;\n width: 24px;\n height: 24px;\n background: transparent;\n border: none;\n cursor: pointer;\n padding: 0;\n z-index: 10;\n outline: none;\n }\n\n .${r}:hover,\n .${r}:focus {\n background: transparent;\n opacity: 0.5;\n }\n\n .${r} svg {\n stroke: #666;\n stroke-width: 2;\n stroke-linecap: round;\n }\n\n .${l} {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background: #fafafa;\n z-index: 5;\n }\n\n .${l}.hidden {\n display: none;\n }\n\n .${l} svg {\n width: 48px;\n height: 48px;\n animation: didit-spin 1s linear infinite;\n }\n\n .${l} circle {\n stroke: #e5e5e5;\n stroke-width: 3;\n fill: none;\n }\n\n .${l} path {\n stroke: #525252;\n stroke-width: 3;\n stroke-linecap: round;\n fill: none;\n }\n\n @keyframes didit-spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n\n .${c} {\n display: none;\n position: absolute;\n inset: 0;\n background: rgba(0, 0, 0, 0.5);\n z-index: 20;\n justify-content: center;\n align-items: center;\n opacity: 0;\n transition: opacity 0.15s ease-out;\n }\n\n .${c}.active {\n display: flex;\n opacity: 1;\n }\n\n .${h} {\n background: #fff;\n border-radius: 12px;\n padding: 1.5rem;\n text-align: center;\n max-width: 300px;\n margin: 1rem;\n transform: scale(0.95);\n transition: transform 0.15s ease-out;\n box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);\n }\n\n .${c}.active .${h} {\n transform: scale(1);\n }\n\n .${h} h3 {\n color: #1a1a2e;\n margin: 0 0 0.5rem 0;\n font-size: 1.125rem;\n font-weight: 600;\n }\n\n .${h} p {\n color: #666;\n font-size: 0.875rem;\n margin: 0 0 1.25rem 0;\n line-height: 1.5;\n }\n\n .didit-confirm-actions {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 1rem;\n }\n\n .didit-confirm-actions button {\n background: #2563eb;\n color: #fff;\n border: none;\n padding: 0.625rem 1.25rem;\n border-radius: 8px;\n font-size: 0.875rem;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.15s ease;\n }\n\n .didit-confirm-actions button:hover {\n background: #1d4ed8;\n }\n\n .didit-confirm-actions span {\n color: #666;\n font-size: 0.875rem;\n cursor: pointer;\n padding: 0.625rem;\n transition: color 0.15s ease;\n }\n\n .didit-confirm-actions span:hover {\n color: #1a1a2e;\n }\n\n @media (max-width: 540px) {\n .${s} {\n padding: 0;\n }\n\n .${o} {\n max-width: 100%;\n max-height: 100vh;\n border-radius: 0;\n }\n\n .${d} {\n height: 100vh;\n }\n }\n\n .${m} {\n position: relative;\n width: 100%;\n height: 100%;\n }\n\n .${m} .${d} {\n width: 100%;\n height: 100%;\n }\n\n .${m} .${l} {\n border-radius: 0;\n }\n `,document.head.appendChild(t)}createDOM(){if(this.injectStyles(),this.embedded&&this.embeddedContainer)this.createEmbeddedDOM();else{if(this.overlay=document.createElement("div"),this.overlay.id=this.modalId,this.overlay.className=s,this.overlay.setAttribute("role","dialog"),this.overlay.setAttribute("aria-modal","true"),this.overlay.setAttribute("aria-label","Didit Verification"),this.container=document.createElement("div"),this.container.className=o,this.loadingEl=document.createElement("div"),this.loadingEl.className=l,this.loadingEl.innerHTML='\n <svg viewBox="0 0 24 24">\n <circle cx="12" cy="12" r="10" />\n <path d="M12 2a10 10 0 0 1 10 10" />\n </svg>\n ',this.config.showCloseButton){const e=document.createElement("button");e.className=r,e.setAttribute("aria-label","Close verification"),e.innerHTML='\n <svg width="14" height="14" viewBox="0 0 14 14">\n <line x1="1" y1="1" x2="13" y2="13" />\n <line x1="13" y1="1" x2="1" y2="13" />\n </svg>\n ',e.addEventListener("click",()=>this.handleCloseRequest()),this.container.appendChild(e)}this.iframe=document.createElement("iframe"),this.iframe.className=d,this.iframe.setAttribute("allow","camera; microphone; fullscreen; autoplay; encrypted-media; geolocation"),this.iframe.setAttribute("title","Didit Verification"),this.iframe.addEventListener("load",()=>this.handleIframeLoad()),this.confirmOverlay=document.createElement("div"),this.confirmOverlay.className=c,this.confirmOverlay.innerHTML=`\n <div class="${h}">\n <h3>Exit verification?</h3>\n <p>Exiting will end your verification process. Are you sure?</p>\n <div class="didit-confirm-actions">\n <button type="button" data-action="continue">Continue</button>\n <span data-action="exit">Exit</span>\n </div>\n </div>\n `,this.confirmOverlay.querySelector('[data-action="continue"]')?.addEventListener("click",()=>{this.hideConfirmation()}),this.confirmOverlay.querySelector('[data-action="exit"]')?.addEventListener("click",()=>{this.confirmExit()}),this.container.appendChild(this.loadingEl),this.container.appendChild(this.iframe),this.container.appendChild(this.confirmOverlay),this.overlay.appendChild(this.container),this.overlay.addEventListener("click",e=>{e.target===this.overlay&&this.handleCloseRequest()}),this.containerElement.appendChild(this.overlay)}}createEmbeddedDOM(){this.embeddedContainer&&(this.container=document.createElement("div"),this.container.id=this.modalId,this.container.className=m,this.loadingEl=document.createElement("div"),this.loadingEl.className=l,this.loadingEl.innerHTML='\n <svg viewBox="0 0 24 24">\n <circle cx="12" cy="12" r="10" />\n <path d="M12 2a10 10 0 0 1 10 10" />\n </svg>\n ',this.iframe=document.createElement("iframe"),this.iframe.className=d,this.iframe.setAttribute("allow","camera; microphone; fullscreen; autoplay; encrypted-media; geolocation"),this.iframe.setAttribute("title","Didit Verification"),this.iframe.addEventListener("load",()=>this.handleIframeLoad()),this.container.appendChild(this.loadingEl),this.container.appendChild(this.iframe),this.embeddedContainer.appendChild(this.container))}setupEventListeners(){this.boundHandleMessage=this.handleMessage.bind(this),window.addEventListener("message",this.boundHandleMessage),this.boundHandleKeydown=this.handleKeydown.bind(this),document.addEventListener("keydown",this.boundHandleKeydown)}removeEventListeners(){this.boundHandleMessage&&(window.removeEventListener("message",this.boundHandleMessage),this.boundHandleMessage=null),this.boundHandleKeydown&&(document.removeEventListener("keydown",this.boundHandleKeydown),this.boundHandleKeydown=null)}handleMessage(e){if(!function(e){try{return new URL(e).hostname.endsWith(".didit.me")}catch{return!1}}(e.origin))return;let t;u.log("Received postMessage:",e.data);try{t="string"==typeof e.data?JSON.parse(e.data):e.data}catch{return void u.warn("Failed to parse postMessage:",e.data)}"didit:close_request"!==t.type?this.callbacks.onMessage(t):this.handleCloseRequest()}handleKeydown(e){this.state.isOpen&&"Escape"===e.key&&(e.preventDefault(),this.state.showConfirmation?this.hideConfirmation():this.handleCloseRequest())}handleIframeLoad(){this.iframe?.src&&"about:blank"!==this.iframe.src&&(this.state.isLoading=!1,this.loadingEl?.classList.add("hidden"),this.callbacks.onIframeLoad())}handleCloseRequest(){this.config.showExitConfirmation?this.showConfirmation():this.callbacks.onCloseConfirmed()}showConfirmation(){this.state.showConfirmation=!0,this.confirmOverlay?.classList.add("active"),this.callbacks.onClose()}hideConfirmation(){this.state.showConfirmation=!1,this.confirmOverlay?.classList.remove("active")}confirmExit(){this.hideConfirmation(),this.callbacks.onCloseConfirmed()}open(e){this.overlay||this.container||(this.createDOM(),this.setupEventListeners()),u.log("Opening with URL:",e),this.state.isLoading=!0,this.state.showConfirmation=!1,this.loadingEl?.classList.remove("hidden"),this.confirmOverlay?.classList.remove("active"),this.iframe&&(this.iframe.src=e),this.state.isOpen=!0,this.embedded||(this.overlay?.classList.add("active"),document.body.style.overflow="hidden")}close(){u.log("Closing"),this.state.isOpen=!1,this.state.isLoading=!0,this.state.showConfirmation=!1,this.iframe&&(this.iframe.src="about:blank"),this.embedded||(this.overlay?.classList.remove("active"),document.body.style.overflow="")}destroy(){u.log("Destroying"),this.close(),this.removeEventListeners(),this.embedded&&this.container&&this.container.parentNode?this.container.parentNode.removeChild(this.container):this.overlay&&this.overlay.parentNode&&this.overlay.parentNode.removeChild(this.overlay),this.overlay=null,this.container=null,this.iframe=null,this.loadingEl=null,this.confirmOverlay=null}isOpen(){return this.state.isOpen}isLoading(){return this.state.isLoading}}class g{static get shared(){return g._instance||(g._instance=new g),g._instance}static reset(){g._instance&&(g._instance.destroy(),g._instance=null)}get state(){return this._state}get configuration(){return this._configuration}get isPresented(){return this._modal?.isOpen()??!1}get errorMessage(){return this._errorMessage}constructor(){this._state="idle",this._modal=null,u.log("DiditSdk initialized")}async startVerification(e){const t=e.configuration;this._configuration=t,u.isEnabled=t?.loggingEnabled??a,u.log("Starting verification with options:",e),this._modal&&(this._modal.destroy(),this._modal=null),this._modal=new p(t,{onClose:()=>this.handleModalClose(),onCloseConfirmed:()=>this.handleModalCloseConfirmed(),onMessage:e=>this.handleVerificationEvent(e),onIframeLoad:()=>this.handleIframeLoad()});try{const{url:t}=e;if(!t||"string"!=typeof t)throw new Error("Invalid options: url is required");this._url=t,this.setState("loading"),this.emitInternalEvent("didit:started",{}),this._modal?.open(this._url)}catch(e){this.handleError(e)}}close(){u.log("Closing verification programmatically"),this.handleModalCloseConfirmed()}destroy(){u.log("Destroying SDK instance"),this._modal?.destroy(),this._modal=null,this.reset()}handleModalClose(){u.log("Modal close requested")}handleModalCloseConfirmed(){u.log("Modal close confirmed");const e=this.buildSessionData();this._modal?.close(),this.reset();const t={type:"cancelled",session:e};this.onComplete?.(t)}handleIframeLoad(){u.log("Iframe loaded")}emitInternalEvent(e,t){const n={type:e,data:t,timestamp:Date.now()};u.log("Emitting internal event:",n),this.onEvent?.(n)}handleVerificationEvent(e){switch(u.log("Verification event:",e),this.onEvent?.(e),e.type){case"didit:ready":u.log("Verification iframe ready");break;case"didit:started":u.log("User started verification");break;case"didit:step_started":u.log("Step started:",e.data?.step);break;case"didit:step_completed":u.log("Step completed:",e.data?.step,"-> next:",e.data?.nextStep);break;case"didit:media_started":u.log("Media started:",e.data?.mediaType,"for step:",e.data?.step);break;case"didit:media_captured":u.log("Media captured for step:",e.data?.step,"isAuto:",e.data?.isAuto);break;case"didit:document_selected":u.log("Document selected:",e.data?.documentType,"country:",e.data?.country);break;case"didit:verification_submitted":u.log("Verification submitted for step:",e.data?.step);break;case"didit:code_sent":u.log("Code sent via:",e.data?.channel,"codeSize:",e.data?.codeSize);break;case"didit:code_verified":u.log("Code verified via:",e.data?.channel);break;case"didit:status_updated":u.log("Status updated:",e.data?.status,"step:",e.data?.step);break;case"didit:completed":this.handleVerificationCompleted(e);break;case"didit:cancelled":this.handleVerificationCancelled(e);break;case"didit:error":this.handleVerificationError(e);break;case"didit:step_changed":u.log("Step changed:",e.data?.step)}}handleVerificationCompleted(e){u.log("Verification completed:",e.data);const t=this.buildSessionData(e.data);this._configuration?.closeModalOnComplete&&(this._modal?.close(),this.reset());const n={type:"completed",session:t};this.onComplete?.(n)}handleVerificationCancelled(e){u.log("Verification cancelled:",e.data);const t=this.buildSessionData(e.data);this._modal?.close(),this.reset();const n={type:"cancelled",session:t};this.onComplete?.(n)}handleVerificationError(e){u.log("Verification error:",e.data)}handleError(e){let t;u.error("SDK error:",e),t=e instanceof Error?f("unknown",e.message):f("unknown","An unknown error occurred"),this._errorMessage=t.message,this.setState("error"),this._modal?.close(),this.reset();const n={type:"failed",error:t};this.onComplete?.(n)}setState(e){const t=this._state;this._state=e,t!==e&&(u.log("State changed:",t,"->",e),this.onStateChange?.(e,this._errorMessage))}reset(){this._state="idle",this._sessionId=void 0,this._url=void 0,this._errorMessage=void 0,this._configuration=void 0}buildSessionData(e){const t=e?.sessionId||this._sessionId;if(t)return{sessionId:t,status:e?.status||"Pending"}}}g._instance=null,e.DiditSdk=g,e.SDK_VERSION="0.1.4",e.default=g,Object.defineProperty(e,"__esModule",{value:!0})});
7
7
  //# sourceMappingURL=didit-sdk.umd.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"didit-sdk.umd.min.js","sources":["../src/constants.ts","../src/utils.ts","../src/modal.ts","../src/DiditSdk.ts"],"sourcesContent":["export const DEFAULT_CONFIG = {\n zIndex: 9999,\n showCloseButton: true,\n showExitConfirmation: true,\n loggingEnabled: false,\n closeModalOnComplete: false\n} as const;\n\nexport const CSS_CLASSES = {\n overlay: \"didit-modal-overlay\",\n container: \"didit-modal-container\",\n content: \"didit-modal-content\",\n iframe: \"didit-verification-iframe\",\n closeButton: \"didit-close-button\",\n loading: \"didit-loading\",\n confirmOverlay: \"didit-confirm-overlay\",\n confirmBox: \"didit-confirm-box\"\n} as const;\n\nexport const SDK_VERSION = \"0.1.0\";\n","class SDKLogger {\n private static _enabled = false;\n\n static get isEnabled(): boolean {\n return this._enabled;\n }\n\n static set isEnabled(value: boolean) {\n this._enabled = value;\n }\n\n static log(...args: unknown[]): void {\n if (this._enabled) {\n console.log(\"[DiditSDK]\", ...args);\n }\n }\n\n static warn(...args: unknown[]): void {\n if (this._enabled) {\n console.warn(\"[DiditSDK]\", ...args);\n }\n }\n\n static error(...args: unknown[]): void {\n if (this._enabled) {\n console.error(\"[DiditSDK]\", ...args);\n }\n }\n}\n\nexport { SDKLogger };\n\nexport function generateModalId(): string {\n return `didit-modal-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n}\n\nexport function isAllowedOrigin(origin: string): boolean {\n try {\n const url = new URL(origin);\n return url.hostname.endsWith('.didit.me');\n } catch {\n return false;\n }\n}\n\nexport function createVerificationError(\n type: \"sessionExpired\" | \"networkError\" | \"cameraAccessDenied\" | \"unknown\",\n customMessage?: string\n): { type: typeof type; message: string } {\n const messages = {\n sessionExpired: \"Your verification session has expired.\",\n networkError: \"A network error occurred. Please try again.\",\n cameraAccessDenied: \"Camera access is required for verification.\",\n unknown: customMessage || \"An unknown error occurred.\"\n };\n\n return {\n type,\n message: customMessage || messages[type]\n };\n}\n","import type { DiditSdkConfiguration, VerificationEvent } from \"./types\";\nimport { DEFAULT_CONFIG, CSS_CLASSES } from \"./constants\";\nimport { SDKLogger, generateModalId, isAllowedOrigin } from \"./utils\";\n\nexport interface ModalState {\n isOpen: boolean;\n isLoading: boolean;\n showConfirmation: boolean;\n}\n\nexport interface ModalCallbacks {\n onClose: () => void;\n onCloseConfirmed: () => void;\n onMessage: (event: VerificationEvent) => void;\n onIframeLoad: () => void;\n}\n\nexport class VerificationModal {\n private modalId: string;\n private config: Required<Pick<DiditSdkConfiguration, \"zIndex\" | \"showCloseButton\" | \"showExitConfirmation\">>;\n private callbacks: ModalCallbacks;\n private state: ModalState = {\n isOpen: false,\n isLoading: true,\n showConfirmation: false\n };\n\n private overlay: HTMLDivElement | null = null;\n private container: HTMLDivElement | null = null;\n private iframe: HTMLIFrameElement | null = null;\n private loadingEl: HTMLDivElement | null = null;\n private confirmOverlay: HTMLDivElement | null = null;\n private containerElement: HTMLElement;\n\n private boundHandleMessage: ((event: MessageEvent) => void) | null = null;\n private boundHandleKeydown: ((event: KeyboardEvent) => void) | null = null;\n\n constructor(configuration: DiditSdkConfiguration | undefined, callbacks: ModalCallbacks) {\n this.modalId = generateModalId();\n this.config = {\n zIndex: configuration?.zIndex ?? DEFAULT_CONFIG.zIndex,\n showCloseButton: configuration?.showCloseButton ?? DEFAULT_CONFIG.showCloseButton,\n showExitConfirmation: configuration?.showExitConfirmation ?? DEFAULT_CONFIG.showExitConfirmation\n };\n this.callbacks = callbacks;\n this.containerElement = configuration?.containerElement ?? document.body;\n }\n\n private injectStyles(): void {\n const styleId = \"didit-sdk-styles\";\n if (document.getElementById(styleId)) {\n return;\n }\n\n const styles = document.createElement(\"style\");\n styles.id = styleId;\n styles.textContent = `\n .${CSS_CLASSES.overlay} {\n display: none;\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.6);\n z-index: ${this.config.zIndex};\n justify-content: center;\n align-items: center;\n padding: 1rem;\n opacity: 0;\n transition: opacity 0.2s ease-out;\n }\n\n .${CSS_CLASSES.overlay}.active {\n display: flex;\n opacity: 1;\n }\n\n .${CSS_CLASSES.container} {\n position: relative;\n width: 100%;\n max-width: 500px;\n max-height: 90vh;\n border-radius: 16px;\n overflow: hidden;\n background: transparent;\n }\n\n .${CSS_CLASSES.overlay}.active .${CSS_CLASSES.container} {\n transform: scale(1);\n }\n\n .${CSS_CLASSES.iframe} {\n width: 100%;\n height: 700px;\n border: none;\n display: block;\n }\n\n .${CSS_CLASSES.closeButton} {\n position: absolute;\n top: 12px;\n right: 12px;\n width: 24px;\n height: 24px;\n background: transparent;\n border: none;\n cursor: pointer;\n padding: 0;\n z-index: 10;\n outline: none;\n }\n\n .${CSS_CLASSES.closeButton}:hover,\n .${CSS_CLASSES.closeButton}:focus {\n background: transparent;\n opacity: 0.5;\n }\n\n .${CSS_CLASSES.closeButton} svg {\n stroke: #666;\n stroke-width: 2;\n stroke-linecap: round;\n }\n\n .${CSS_CLASSES.loading} {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background: #fafafa;\n z-index: 5;\n }\n\n .${CSS_CLASSES.loading}.hidden {\n display: none;\n }\n\n .${CSS_CLASSES.loading} svg {\n width: 48px;\n height: 48px;\n animation: didit-spin 1s linear infinite;\n }\n\n .${CSS_CLASSES.loading} circle {\n stroke: #e5e5e5;\n stroke-width: 3;\n fill: none;\n }\n\n .${CSS_CLASSES.loading} path {\n stroke: #525252;\n stroke-width: 3;\n stroke-linecap: round;\n fill: none;\n }\n\n @keyframes didit-spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n\n .${CSS_CLASSES.confirmOverlay} {\n display: none;\n position: absolute;\n inset: 0;\n background: rgba(0, 0, 0, 0.5);\n z-index: 20;\n justify-content: center;\n align-items: center;\n opacity: 0;\n transition: opacity 0.15s ease-out;\n }\n\n .${CSS_CLASSES.confirmOverlay}.active {\n display: flex;\n opacity: 1;\n }\n\n .${CSS_CLASSES.confirmBox} {\n background: #fff;\n border-radius: 12px;\n padding: 1.5rem;\n text-align: center;\n max-width: 300px;\n margin: 1rem;\n transform: scale(0.95);\n transition: transform 0.15s ease-out;\n box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);\n }\n\n .${CSS_CLASSES.confirmOverlay}.active .${CSS_CLASSES.confirmBox} {\n transform: scale(1);\n }\n\n .${CSS_CLASSES.confirmBox} h3 {\n color: #1a1a2e;\n margin: 0 0 0.5rem 0;\n font-size: 1.125rem;\n font-weight: 600;\n }\n\n .${CSS_CLASSES.confirmBox} p {\n color: #666;\n font-size: 0.875rem;\n margin: 0 0 1.25rem 0;\n line-height: 1.5;\n }\n\n .didit-confirm-actions {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 1rem;\n }\n\n .didit-confirm-actions button {\n background: #2563eb;\n color: #fff;\n border: none;\n padding: 0.625rem 1.25rem;\n border-radius: 8px;\n font-size: 0.875rem;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.15s ease;\n }\n\n .didit-confirm-actions button:hover {\n background: #1d4ed8;\n }\n\n .didit-confirm-actions span {\n color: #666;\n font-size: 0.875rem;\n cursor: pointer;\n padding: 0.625rem;\n transition: color 0.15s ease;\n }\n\n .didit-confirm-actions span:hover {\n color: #1a1a2e;\n }\n\n @media (max-width: 540px) {\n .${CSS_CLASSES.overlay} {\n padding: 0;\n }\n\n .${CSS_CLASSES.container} {\n max-width: 100%;\n max-height: 100vh;\n border-radius: 0;\n }\n\n .${CSS_CLASSES.iframe} {\n height: 100vh;\n }\n }\n `;\n\n document.head.appendChild(styles);\n }\n\n private createDOM(): void {\n this.injectStyles();\n\n this.overlay = document.createElement(\"div\");\n this.overlay.id = this.modalId;\n this.overlay.className = CSS_CLASSES.overlay;\n this.overlay.setAttribute(\"role\", \"dialog\");\n this.overlay.setAttribute(\"aria-modal\", \"true\");\n this.overlay.setAttribute(\"aria-label\", \"Didit Verification\");\n\n this.container = document.createElement(\"div\");\n this.container.className = CSS_CLASSES.container;\n\n this.loadingEl = document.createElement(\"div\");\n this.loadingEl.className = CSS_CLASSES.loading;\n this.loadingEl.innerHTML = `\n <svg viewBox=\"0 0 24 24\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 2a10 10 0 0 1 10 10\" />\n </svg>\n `;\n\n if (this.config.showCloseButton) {\n const closeBtn = document.createElement(\"button\");\n closeBtn.className = CSS_CLASSES.closeButton;\n closeBtn.setAttribute(\"aria-label\", \"Close verification\");\n closeBtn.innerHTML = `\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\">\n <line x1=\"1\" y1=\"1\" x2=\"13\" y2=\"13\" />\n <line x1=\"13\" y1=\"1\" x2=\"1\" y2=\"13\" />\n </svg>\n `;\n closeBtn.addEventListener(\"click\", () => this.handleCloseRequest());\n this.container.appendChild(closeBtn);\n }\n\n this.iframe = document.createElement(\"iframe\");\n this.iframe.className = CSS_CLASSES.iframe;\n this.iframe.setAttribute(\"allow\", \"camera; microphone; fullscreen; autoplay; encrypted-media; geolocation\");\n this.iframe.setAttribute(\"title\", \"Didit Verification\");\n this.iframe.addEventListener(\"load\", () => this.handleIframeLoad());\n\n this.confirmOverlay = document.createElement(\"div\");\n this.confirmOverlay.className = CSS_CLASSES.confirmOverlay;\n this.confirmOverlay.innerHTML = `\n <div class=\"${CSS_CLASSES.confirmBox}\">\n <h3>Exit verification?</h3>\n <p>Exiting will end your verification process. Are you sure?</p>\n <div class=\"didit-confirm-actions\">\n <button type=\"button\" data-action=\"continue\">Continue</button>\n <span data-action=\"exit\">Exit</span>\n </div>\n </div>\n `;\n\n this.confirmOverlay.querySelector('[data-action=\"continue\"]')?.addEventListener(\"click\", () => {\n this.hideConfirmation();\n });\n this.confirmOverlay.querySelector('[data-action=\"exit\"]')?.addEventListener(\"click\", () => {\n this.confirmExit();\n });\n\n this.container.appendChild(this.loadingEl);\n this.container.appendChild(this.iframe);\n this.container.appendChild(this.confirmOverlay);\n this.overlay.appendChild(this.container);\n\n this.overlay.addEventListener(\"click\", (e) => {\n if (e.target === this.overlay) {\n this.handleCloseRequest();\n }\n });\n\n this.containerElement.appendChild(this.overlay);\n }\n\n private setupEventListeners(): void {\n this.boundHandleMessage = this.handleMessage.bind(this);\n window.addEventListener(\"message\", this.boundHandleMessage);\n\n this.boundHandleKeydown = this.handleKeydown.bind(this);\n document.addEventListener(\"keydown\", this.boundHandleKeydown);\n }\n\n private removeEventListeners(): void {\n if (this.boundHandleMessage) {\n window.removeEventListener(\"message\", this.boundHandleMessage);\n this.boundHandleMessage = null;\n }\n if (this.boundHandleKeydown) {\n document.removeEventListener(\"keydown\", this.boundHandleKeydown);\n this.boundHandleKeydown = null;\n }\n }\n\n private handleMessage(event: MessageEvent): void {\n if (!isAllowedOrigin(event.origin)) {\n return;\n }\n\n SDKLogger.log(\"Received postMessage:\", event.data);\n\n let messageData: VerificationEvent;\n try {\n if (typeof event.data === \"string\") {\n messageData = JSON.parse(event.data);\n } else {\n messageData = event.data;\n }\n } catch {\n SDKLogger.warn(\"Failed to parse postMessage:\", event.data);\n return;\n }\n\n if (messageData.type === \"didit:close_request\") {\n this.handleCloseRequest();\n return;\n }\n\n this.callbacks.onMessage(messageData);\n }\n\n private handleKeydown(event: KeyboardEvent): void {\n if (!this.state.isOpen) return;\n\n if (event.key === \"Escape\") {\n event.preventDefault();\n if (this.state.showConfirmation) {\n this.hideConfirmation();\n } else {\n this.handleCloseRequest();\n }\n }\n }\n\n private handleIframeLoad(): void {\n if (this.iframe?.src && this.iframe.src !== \"about:blank\") {\n this.state.isLoading = false;\n this.loadingEl?.classList.add(\"hidden\");\n this.callbacks.onIframeLoad();\n }\n }\n\n private handleCloseRequest(): void {\n if (this.config.showExitConfirmation) {\n this.showConfirmation();\n } else {\n this.callbacks.onCloseConfirmed();\n }\n }\n\n private showConfirmation(): void {\n this.state.showConfirmation = true;\n this.confirmOverlay?.classList.add(\"active\");\n this.callbacks.onClose();\n }\n\n private hideConfirmation(): void {\n this.state.showConfirmation = false;\n this.confirmOverlay?.classList.remove(\"active\");\n }\n\n private confirmExit(): void {\n this.hideConfirmation();\n this.callbacks.onCloseConfirmed();\n }\n\n open(verificationUrl: string): void {\n if (!this.overlay) {\n this.createDOM();\n this.setupEventListeners();\n }\n\n SDKLogger.log(\"Opening modal with URL:\", verificationUrl);\n\n this.state.isLoading = true;\n this.state.showConfirmation = false;\n this.loadingEl?.classList.remove(\"hidden\");\n this.confirmOverlay?.classList.remove(\"active\");\n\n if (this.iframe) {\n this.iframe.src = verificationUrl;\n }\n\n this.state.isOpen = true;\n this.overlay?.classList.add(\"active\");\n\n document.body.style.overflow = \"hidden\";\n }\n\n close(): void {\n SDKLogger.log(\"Closing modal\");\n\n this.state.isOpen = false;\n this.state.isLoading = true;\n this.state.showConfirmation = false;\n\n this.overlay?.classList.remove(\"active\");\n\n if (this.iframe) {\n this.iframe.src = \"about:blank\";\n }\n\n document.body.style.overflow = \"\";\n }\n\n destroy(): void {\n SDKLogger.log(\"Destroying modal\");\n\n this.close();\n this.removeEventListeners();\n\n if (this.overlay && this.overlay.parentNode) {\n this.overlay.parentNode.removeChild(this.overlay);\n }\n\n this.overlay = null;\n this.container = null;\n this.iframe = null;\n this.loadingEl = null;\n this.confirmOverlay = null;\n }\n\n isOpen(): boolean {\n return this.state.isOpen;\n }\n\n isLoading(): boolean {\n return this.state.isLoading;\n }\n}\n","import type {\n DiditSdkState,\n DiditSdkConfiguration,\n VerificationResult,\n VerificationCallback,\n StateChangeCallback,\n EventCallback,\n VerificationEvent,\n SessionData,\n VerificationStatus,\n StartVerificationOptions\n} from \"./types\";\n\nimport { VerificationModal } from \"./modal\";\nimport { DEFAULT_CONFIG } from \"./constants\";\nimport { SDKLogger, createVerificationError } from \"./utils\";\n\nexport class DiditSdk {\n private static _instance: DiditSdk | null = null;\n\n public static get shared(): DiditSdk {\n if (!DiditSdk._instance) {\n DiditSdk._instance = new DiditSdk();\n }\n return DiditSdk._instance;\n }\n\n public static reset(): void {\n if (DiditSdk._instance) {\n DiditSdk._instance.destroy();\n DiditSdk._instance = null;\n }\n }\n\n private _state: DiditSdkState = \"idle\";\n private _configuration: DiditSdkConfiguration | undefined;\n private _sessionId: string | undefined;\n private _url: string | undefined;\n private _modal: VerificationModal | null = null;\n private _errorMessage: string | undefined;\n\n public onComplete: VerificationCallback | undefined;\n public onStateChange: StateChangeCallback | undefined;\n public onEvent: EventCallback | undefined;\n\n public get state(): DiditSdkState {\n return this._state;\n }\n\n public get configuration(): DiditSdkConfiguration | undefined {\n return this._configuration;\n }\n\n public get isPresented(): boolean {\n return this._modal?.isOpen() ?? false;\n }\n\n public get errorMessage(): string | undefined {\n return this._errorMessage;\n }\n\n private constructor() {\n SDKLogger.log(\"DiditSdk initialized\");\n }\n\n public async startVerification(options: StartVerificationOptions): Promise<void> {\n const config = options.configuration;\n this._configuration = config;\n\n SDKLogger.isEnabled = config?.loggingEnabled ?? DEFAULT_CONFIG.loggingEnabled;\n\n SDKLogger.log(\"Starting verification with options:\", options);\n if (this._modal) {\n this._modal.destroy();\n this._modal = null;\n }\n this._modal = new VerificationModal(config, {\n onClose: () => this.handleModalClose(),\n onCloseConfirmed: () => this.handleModalCloseConfirmed(),\n onMessage: (event) => this.handleVerificationEvent(event),\n onIframeLoad: () => this.handleIframeLoad()\n });\n\n try {\n const { url } = options;\n\n if (!url || typeof url !== \"string\") {\n throw new Error(\"Invalid options: url is required\");\n }\n\n this._url = url;\n this.setState(\"loading\");\n\n this.emitInternalEvent(\"didit:started\", {});\n\n this._modal?.open(this._url);\n this.setState(\"ready\");\n } catch (error) {\n this.handleError(error);\n }\n }\n\n public close(): void {\n SDKLogger.log(\"Closing verification programmatically\");\n this.handleModalCloseConfirmed();\n }\n\n public destroy(): void {\n SDKLogger.log(\"Destroying SDK instance\");\n this._modal?.destroy();\n this._modal = null;\n this.reset();\n }\n\n private handleModalClose(): void {\n SDKLogger.log(\"Modal close requested\");\n }\n\n private handleModalCloseConfirmed(): void {\n SDKLogger.log(\"Modal close confirmed\");\n\n const sessionData = this.buildSessionData();\n\n this._modal?.close();\n this.reset();\n\n const result: VerificationResult = {\n type: \"cancelled\",\n session: sessionData\n };\n\n this.onComplete?.(result);\n }\n\n private handleIframeLoad(): void {\n SDKLogger.log(\"Iframe loaded\");\n }\n\n private emitInternalEvent(type: VerificationEvent[\"type\"], data?: VerificationEvent[\"data\"]): void {\n const event: VerificationEvent = {\n type,\n data,\n timestamp: Date.now()\n };\n\n SDKLogger.log(\"Emitting internal event:\", event);\n this.onEvent?.(event);\n }\n\n private handleVerificationEvent(event: VerificationEvent): void {\n SDKLogger.log(\"Verification event:\", event);\n\n this.onEvent?.(event);\n\n switch (event.type) {\n case \"didit:ready\":\n SDKLogger.log(\"Verification iframe ready\");\n break;\n\n case \"didit:started\":\n SDKLogger.log(\"User started verification\");\n break;\n\n case \"didit:step_started\":\n SDKLogger.log(\"Step started:\", event.data?.step);\n break;\n\n case \"didit:step_completed\":\n SDKLogger.log(\"Step completed:\", event.data?.step, \"-> next:\", event.data?.nextStep);\n break;\n\n case \"didit:media_started\":\n SDKLogger.log(\"Media started:\", event.data?.mediaType, \"for step:\", event.data?.step);\n break;\n\n case \"didit:media_captured\":\n SDKLogger.log(\"Media captured for step:\", event.data?.step, \"isAuto:\", event.data?.isAuto);\n break;\n\n case \"didit:document_selected\":\n SDKLogger.log(\"Document selected:\", event.data?.documentType, \"country:\", event.data?.country);\n break;\n\n case \"didit:verification_submitted\":\n SDKLogger.log(\"Verification submitted for step:\", event.data?.step);\n break;\n\n case \"didit:code_sent\":\n SDKLogger.log(\"Code sent via:\", event.data?.channel, \"codeSize:\", event.data?.codeSize);\n break;\n\n case \"didit:code_verified\":\n SDKLogger.log(\"Code verified via:\", event.data?.channel);\n break;\n\n case \"didit:status_updated\":\n SDKLogger.log(\"Status updated:\", event.data?.status, \"step:\", event.data?.step);\n break;\n\n case \"didit:completed\":\n this.handleVerificationCompleted(event);\n break;\n\n case \"didit:cancelled\":\n this.handleVerificationCancelled(event);\n break;\n\n case \"didit:error\":\n this.handleVerificationError(event);\n break;\n\n case \"didit:step_changed\":\n SDKLogger.log(\"Step changed:\", event.data?.step);\n break;\n\n case \"didit:close_request\":\n break;\n }\n }\n\n private handleVerificationCompleted(event: VerificationEvent): void {\n SDKLogger.log(\"Verification completed:\", event.data);\n\n const sessionData = this.buildSessionData(event.data);\n\n if (this._configuration?.closeModalOnComplete) {\n this._modal?.close();\n this.reset();\n }\n\n const result: VerificationResult = {\n type: \"completed\",\n session: sessionData\n };\n\n this.onComplete?.(result);\n }\n\n private handleVerificationCancelled(event: VerificationEvent): void {\n SDKLogger.log(\"Verification cancelled:\", event.data);\n\n const sessionData = this.buildSessionData(event.data);\n\n this._modal?.close();\n this.reset();\n\n const result: VerificationResult = {\n type: \"cancelled\",\n session: sessionData\n };\n\n this.onComplete?.(result);\n }\n\n private handleVerificationError(event: VerificationEvent): void {\n SDKLogger.log(\"Verification error:\", event.data);\n\n const sessionData = this.buildSessionData(event.data);\n const error = createVerificationError(\"unknown\", event.data?.error);\n\n this._modal?.close();\n this.reset();\n\n const result: VerificationResult = {\n type: \"failed\",\n session: sessionData,\n error\n };\n\n this.onComplete?.(result);\n }\n\n private handleError(error: unknown): void {\n SDKLogger.error(\"SDK error:\", error);\n\n let verificationError;\n\n if (error instanceof Error) {\n verificationError = createVerificationError(\"unknown\", error.message);\n } else {\n verificationError = createVerificationError(\"unknown\", \"An unknown error occurred\");\n }\n\n this._errorMessage = verificationError.message;\n this.setState(\"error\");\n\n this._modal?.close();\n this.reset();\n\n const result: VerificationResult = {\n type: \"failed\",\n error: verificationError\n };\n\n this.onComplete?.(result);\n }\n\n private setState(state: DiditSdkState): void {\n const previousState = this._state;\n this._state = state;\n\n if (previousState !== state) {\n SDKLogger.log(\"State changed:\", previousState, \"->\", state);\n this.onStateChange?.(state, this._errorMessage);\n }\n }\n\n private reset(): void {\n this._state = \"idle\";\n this._sessionId = undefined;\n this._url = undefined;\n this._errorMessage = undefined;\n this._configuration = undefined;\n }\n\n private buildSessionData(eventData?: VerificationEvent[\"data\"]): SessionData | undefined {\n const sessionId = eventData?.sessionId || this._sessionId;\n\n if (!sessionId) {\n return undefined;\n }\n\n return {\n sessionId,\n status: (eventData?.status || \"Pending\") as VerificationStatus,\n country: eventData?.country,\n documentType: eventData?.documentType\n };\n }\n}\n"],"names":["DEFAULT_CONFIG","CSS_CLASSES","SDKLogger","isEnabled","this","_enabled","value","log","args","console","warn","error","createVerificationError","type","customMessage","message","sessionExpired","networkError","cameraAccessDenied","unknown","VerificationModal","constructor","configuration","callbacks","state","isOpen","isLoading","showConfirmation","overlay","container","iframe","loadingEl","confirmOverlay","boundHandleMessage","boundHandleKeydown","modalId","Date","now","Math","random","toString","substr","config","zIndex","showCloseButton","showExitConfirmation","containerElement","document","body","injectStyles","styleId","getElementById","styles","createElement","id","textContent","head","appendChild","createDOM","className","setAttribute","innerHTML","closeBtn","addEventListener","handleCloseRequest","handleIframeLoad","querySelector","hideConfirmation","confirmExit","e","target","setupEventListeners","handleMessage","bind","window","handleKeydown","removeEventListeners","removeEventListener","event","origin","URL","hostname","endsWith","isAllowedOrigin","messageData","data","JSON","parse","onMessage","key","preventDefault","src","classList","add","onIframeLoad","onCloseConfirmed","onClose","remove","open","verificationUrl","style","overflow","close","destroy","parentNode","removeChild","DiditSdk","shared","_instance","reset","_state","_configuration","isPresented","_modal","errorMessage","_errorMessage","startVerification","options","loggingEnabled","handleModalClose","handleModalCloseConfirmed","handleVerificationEvent","url","Error","_url","setState","emitInternalEvent","handleError","sessionData","buildSessionData","result","session","onComplete","timestamp","onEvent","step","nextStep","mediaType","isAuto","documentType","country","channel","codeSize","status","handleVerificationCompleted","handleVerificationCancelled","handleVerificationError","closeModalOnComplete","verificationError","previousState","onStateChange","_sessionId","undefined","eventData","sessionId"],"mappings":";;;;;+OAAO,MAAMA,EACH,KADGA,GAEM,EAFNA,GAGW,EAHXA,GAIK,EAILC,EACF,sBADEA,EAEA,wBAFAA,EAIH,4BAJGA,EAKE,qBALFA,EAMF,gBANEA,EAOK,wBAPLA,EAQC,oBChBd,MAAMC,EAGJ,oBAAWC,GACT,OAAOC,KAAKC,QACd,CAEA,oBAAWF,CAAUG,GACnBF,KAAKC,SAAWC,CAClB,CAEA,UAAOC,IAAOC,GACRJ,KAAKC,UACPI,QAAQF,IAAI,gBAAiBC,EAEjC,CAEA,WAAOE,IAAQF,GACTJ,KAAKC,UACPI,QAAQC,KAAK,gBAAiBF,EAElC,CAEA,YAAOG,IAASH,GACVJ,KAAKC,UACPI,QAAQE,MAAM,gBAAiBH,EAEnC,EAkBI,SAAUI,EACdC,EACAC,GASA,MAAO,CACLD,OACAE,QAASD,GATM,CACfE,eAAgB,yCAChBC,aAAc,8CACdC,mBAAoB,8CACpBC,QAASL,GAAiB,8BAKSD,GAEvC,CA3DiBX,EAAAG,UAAW,QCgBfe,EAoBX,WAAAC,CAAYC,EAAkDC,GAhBtDnB,KAAAoB,MAAoB,CAC1BC,QAAQ,EACRC,WAAW,EACXC,kBAAkB,GAGZvB,KAAAwB,QAAiC,KACjCxB,KAAAyB,UAAmC,KACnCzB,KAAA0B,OAAmC,KACnC1B,KAAA2B,UAAmC,KACnC3B,KAAA4B,eAAwC,KAGxC5B,KAAA6B,mBAA6D,KAC7D7B,KAAA8B,mBAA8D,KAGpE9B,KAAK+B,QDLA,eAAeC,KAAKC,SAASC,KAAKC,SAASC,SAAS,IAAIC,OAAO,EAAG,KCMvErC,KAAKsC,OAAS,CACZC,OAAQrB,GAAeqB,QAAU3C,EACjC4C,gBAAiBtB,GAAesB,iBAAmB5C,EACnD6C,qBAAsBvB,GAAeuB,sBAAwB7C,GAE/DI,KAAKmB,UAAYA,EACjBnB,KAAK0C,iBAAmBxB,GAAewB,kBAAoBC,SAASC,IACtE,CAEQ,YAAAC,GACN,MAAMC,EAAU,mBAChB,GAAIH,SAASI,eAAeD,GAC1B,OAGF,MAAME,EAASL,SAASM,cAAc,SACtCD,EAAOE,GAAKJ,EACZE,EAAOG,YAAc,YAChBtD,uIAKUG,KAAKsC,OAAOC,uLAQtB1C,8EAKAA,8NAUAA,aAA+BA,wDAI/BA,wHAOAA,oSAcAA,oBACAA,yFAKAA,+GAMAA,qNAUAA,yDAIAA,8HAMAA,0GAMAA,wQAYAA,mSAYAA,8EAKAA,iUAYAA,aAAsCA,wDAItCA,8IAOAA,0+BA2CEA,qDAIAA,qHAMAA,0DAMP8C,SAASS,KAAKC,YAAYL,EAC5B,CAEQ,SAAAM,GAsBN,GArBAtD,KAAK6C,eAEL7C,KAAKwB,QAAUmB,SAASM,cAAc,OACtCjD,KAAKwB,QAAQ0B,GAAKlD,KAAK+B,QACvB/B,KAAKwB,QAAQ+B,UAAY1D,EACzBG,KAAKwB,QAAQgC,aAAa,OAAQ,UAClCxD,KAAKwB,QAAQgC,aAAa,aAAc,QACxCxD,KAAKwB,QAAQgC,aAAa,aAAc,sBAExCxD,KAAKyB,UAAYkB,SAASM,cAAc,OACxCjD,KAAKyB,UAAU8B,UAAY1D,EAE3BG,KAAK2B,UAAYgB,SAASM,cAAc,OACxCjD,KAAK2B,UAAU4B,UAAY1D,EAC3BG,KAAK2B,UAAU8B,UAAY,iJAOvBzD,KAAKsC,OAAOE,gBAAiB,CAC/B,MAAMkB,EAAWf,SAASM,cAAc,UACxCS,EAASH,UAAY1D,EACrB6D,EAASF,aAAa,aAAc,sBACpCE,EAASD,UAAY,yLAMrBC,EAASC,iBAAiB,QAAS,IAAM3D,KAAK4D,sBAC9C5D,KAAKyB,UAAU4B,YAAYK,EAC7B,CAEA1D,KAAK0B,OAASiB,SAASM,cAAc,UACrCjD,KAAK0B,OAAO6B,UAAY1D,EACxBG,KAAK0B,OAAO8B,aAAa,QAAS,0EAClCxD,KAAK0B,OAAO8B,aAAa,QAAS,sBAClCxD,KAAK0B,OAAOiC,iBAAiB,OAAQ,IAAM3D,KAAK6D,oBAEhD7D,KAAK4B,eAAiBe,SAASM,cAAc,OAC7CjD,KAAK4B,eAAe2B,UAAY1D,EAChCG,KAAK4B,eAAe6B,UAAY,uBAChB5D,gUAUhBG,KAAK4B,eAAekC,cAAc,6BAA6BH,iBAAiB,QAAS,KACvF3D,KAAK+D,qBAEP/D,KAAK4B,eAAekC,cAAc,yBAAyBH,iBAAiB,QAAS,KACnF3D,KAAKgE,gBAGPhE,KAAKyB,UAAU4B,YAAYrD,KAAK2B,WAChC3B,KAAKyB,UAAU4B,YAAYrD,KAAK0B,QAChC1B,KAAKyB,UAAU4B,YAAYrD,KAAK4B,gBAChC5B,KAAKwB,QAAQ6B,YAAYrD,KAAKyB,WAE9BzB,KAAKwB,QAAQmC,iBAAiB,QAAUM,IAClCA,EAAEC,SAAWlE,KAAKwB,SACpBxB,KAAK4D,uBAIT5D,KAAK0C,iBAAiBW,YAAYrD,KAAKwB,QACzC,CAEQ,mBAAA2C,GACNnE,KAAK6B,mBAAqB7B,KAAKoE,cAAcC,KAAKrE,MAClDsE,OAAOX,iBAAiB,UAAW3D,KAAK6B,oBAExC7B,KAAK8B,mBAAqB9B,KAAKuE,cAAcF,KAAKrE,MAClD2C,SAASgB,iBAAiB,UAAW3D,KAAK8B,mBAC5C,CAEQ,oBAAA0C,GACFxE,KAAK6B,qBACPyC,OAAOG,oBAAoB,UAAWzE,KAAK6B,oBAC3C7B,KAAK6B,mBAAqB,MAExB7B,KAAK8B,qBACPa,SAAS8B,oBAAoB,UAAWzE,KAAK8B,oBAC7C9B,KAAK8B,mBAAqB,KAE9B,CAEQ,aAAAsC,CAAcM,GACpB,IDlUE,SAA0BC,GAC9B,IAEE,OADY,IAAIC,IAAID,GACTE,SAASC,SAAS,YAC/B,CAAE,MACA,OAAO,CACT,CACF,CC2TSC,CAAgBL,EAAMC,QACzB,OAKF,IAAIK,EAFJlF,EAAUK,IAAI,wBAAyBuE,EAAMO,MAG7C,IAEID,EADwB,iBAAfN,EAAMO,KACDC,KAAKC,MAAMT,EAAMO,MAEjBP,EAAMO,IAExB,CAAE,MAEA,YADAnF,EAAUQ,KAAK,+BAAgCoE,EAAMO,KAEvD,CAEyB,wBAArBD,EAAYvE,KAKhBT,KAAKmB,UAAUiE,UAAUJ,GAJvBhF,KAAK4D,oBAKT,CAEQ,aAAAW,CAAcG,GACf1E,KAAKoB,MAAMC,QAEE,WAAdqD,EAAMW,MACRX,EAAMY,iBACFtF,KAAKoB,MAAMG,iBACbvB,KAAK+D,mBAEL/D,KAAK4D,qBAGX,CAEQ,gBAAAC,GACF7D,KAAK0B,QAAQ6D,KAA2B,gBAApBvF,KAAK0B,OAAO6D,MAClCvF,KAAKoB,MAAME,WAAY,EACvBtB,KAAK2B,WAAW6D,UAAUC,IAAI,UAC9BzF,KAAKmB,UAAUuE,eAEnB,CAEQ,kBAAA9B,GACF5D,KAAKsC,OAAOG,qBACdzC,KAAKuB,mBAELvB,KAAKmB,UAAUwE,kBAEnB,CAEQ,gBAAApE,GACNvB,KAAKoB,MAAMG,kBAAmB,EAC9BvB,KAAK4B,gBAAgB4D,UAAUC,IAAI,UACnCzF,KAAKmB,UAAUyE,SACjB,CAEQ,gBAAA7B,GACN/D,KAAKoB,MAAMG,kBAAmB,EAC9BvB,KAAK4B,gBAAgB4D,UAAUK,OAAO,SACxC,CAEQ,WAAA7B,GACNhE,KAAK+D,mBACL/D,KAAKmB,UAAUwE,kBACjB,CAEA,IAAAG,CAAKC,GACE/F,KAAKwB,UACRxB,KAAKsD,YACLtD,KAAKmE,uBAGPrE,EAAUK,IAAI,0BAA2B4F,GAEzC/F,KAAKoB,MAAME,WAAY,EACvBtB,KAAKoB,MAAMG,kBAAmB,EAC9BvB,KAAK2B,WAAW6D,UAAUK,OAAO,UACjC7F,KAAK4B,gBAAgB4D,UAAUK,OAAO,UAElC7F,KAAK0B,SACP1B,KAAK0B,OAAO6D,IAAMQ,GAGpB/F,KAAKoB,MAAMC,QAAS,EACpBrB,KAAKwB,SAASgE,UAAUC,IAAI,UAE5B9C,SAASC,KAAKoD,MAAMC,SAAW,QACjC,CAEA,KAAAC,GACEpG,EAAUK,IAAI,iBAEdH,KAAKoB,MAAMC,QAAS,EACpBrB,KAAKoB,MAAME,WAAY,EACvBtB,KAAKoB,MAAMG,kBAAmB,EAE9BvB,KAAKwB,SAASgE,UAAUK,OAAO,UAE3B7F,KAAK0B,SACP1B,KAAK0B,OAAO6D,IAAM,eAGpB5C,SAASC,KAAKoD,MAAMC,SAAW,EACjC,CAEA,OAAAE,GACErG,EAAUK,IAAI,oBAEdH,KAAKkG,QACLlG,KAAKwE,uBAEDxE,KAAKwB,SAAWxB,KAAKwB,QAAQ4E,YAC/BpG,KAAKwB,QAAQ4E,WAAWC,YAAYrG,KAAKwB,SAG3CxB,KAAKwB,QAAU,KACfxB,KAAKyB,UAAY,KACjBzB,KAAK0B,OAAS,KACd1B,KAAK2B,UAAY,KACjB3B,KAAK4B,eAAiB,IACxB,CAEA,MAAAP,GACE,OAAOrB,KAAKoB,MAAMC,MACpB,CAEA,SAAAC,GACE,OAAOtB,KAAKoB,MAAME,SACpB,QC1dWgF,EAGJ,iBAAWC,GAIhB,OAHKD,EAASE,YACZF,EAASE,UAAY,IAAIF,GAEpBA,EAASE,SAClB,CAEO,YAAOC,GACRH,EAASE,YACXF,EAASE,UAAUL,UACnBG,EAASE,UAAY,KAEzB,CAaA,SAAWpF,GACT,OAAOpB,KAAK0G,MACd,CAEA,iBAAWxF,GACT,OAAOlB,KAAK2G,cACd,CAEA,eAAWC,GACT,OAAO5G,KAAK6G,QAAQxF,WAAY,CAClC,CAEA,gBAAWyF,GACT,OAAO9G,KAAK+G,aACd,CAEA,WAAA9F,GA3BQjB,KAAA0G,OAAwB,OAIxB1G,KAAA6G,OAAmC,KAwBzC/G,EAAUK,IAAI,uBAChB,CAEO,uBAAM6G,CAAkBC,GAC7B,MAAM3E,EAAS2E,EAAQ/F,cACvBlB,KAAK2G,eAAiBrE,EAEtBxC,EAAUC,UAAYuC,GAAQ4E,gBAAkBtH,EAEhDE,EAAUK,IAAI,sCAAuC8G,GACjDjH,KAAK6G,SACP7G,KAAK6G,OAAOV,UACZnG,KAAK6G,OAAS,MAEhB7G,KAAK6G,OAAS,IAAI7F,EAAkBsB,EAAQ,CAC1CsD,QAAS,IAAM5F,KAAKmH,mBACpBxB,iBAAkB,IAAM3F,KAAKoH,4BAC7BhC,UAAYV,GAAU1E,KAAKqH,wBAAwB3C,GACnDgB,aAAc,IAAM1F,KAAK6D,qBAG3B,IACE,MAAMyD,IAAEA,GAAQL,EAEhB,IAAKK,GAAsB,iBAARA,EACjB,MAAM,IAAIC,MAAM,oCAGlBvH,KAAKwH,KAAOF,EACZtH,KAAKyH,SAAS,WAEdzH,KAAK0H,kBAAkB,gBAAiB,IAExC1H,KAAK6G,QAAQf,KAAK9F,KAAKwH,MACvBxH,KAAKyH,SAAS,QAChB,CAAE,MAAOlH,GACPP,KAAK2H,YAAYpH,EACnB,CACF,CAEO,KAAA2F,GACLpG,EAAUK,IAAI,yCACdH,KAAKoH,2BACP,CAEO,OAAAjB,GACLrG,EAAUK,IAAI,2BACdH,KAAK6G,QAAQV,UACbnG,KAAK6G,OAAS,KACd7G,KAAKyG,OACP,CAEQ,gBAAAU,GACNrH,EAAUK,IAAI,wBAChB,CAEQ,yBAAAiH,GACNtH,EAAUK,IAAI,yBAEd,MAAMyH,EAAc5H,KAAK6H,mBAEzB7H,KAAK6G,QAAQX,QACblG,KAAKyG,QAEL,MAAMqB,EAA6B,CACjCrH,KAAM,YACNsH,QAASH,GAGX5H,KAAKgI,aAAaF,EACpB,CAEQ,gBAAAjE,GACN/D,EAAUK,IAAI,gBAChB,CAEQ,iBAAAuH,CAAkBjH,EAAiCwE,GACzD,MAAMP,EAA2B,CAC/BjE,OACAwE,OACAgD,UAAWjG,KAAKC,OAGlBnC,EAAUK,IAAI,2BAA4BuE,GAC1C1E,KAAKkI,UAAUxD,EACjB,CAEQ,uBAAA2C,CAAwB3C,GAK9B,OAJA5E,EAAUK,IAAI,sBAAuBuE,GAErC1E,KAAKkI,UAAUxD,GAEPA,EAAMjE,MACZ,IAAK,cACHX,EAAUK,IAAI,6BACd,MAEF,IAAK,gBACHL,EAAUK,IAAI,6BACd,MAEF,IAAK,qBACHL,EAAUK,IAAI,gBAAiBuE,EAAMO,MAAMkD,MAC3C,MAEF,IAAK,uBACHrI,EAAUK,IAAI,kBAAmBuE,EAAMO,MAAMkD,KAAM,WAAYzD,EAAMO,MAAMmD,UAC3E,MAEF,IAAK,sBACHtI,EAAUK,IAAI,iBAAkBuE,EAAMO,MAAMoD,UAAW,YAAa3D,EAAMO,MAAMkD,MAChF,MAEF,IAAK,uBACHrI,EAAUK,IAAI,2BAA4BuE,EAAMO,MAAMkD,KAAM,UAAWzD,EAAMO,MAAMqD,QACnF,MAEF,IAAK,0BACHxI,EAAUK,IAAI,qBAAsBuE,EAAMO,MAAMsD,aAAc,WAAY7D,EAAMO,MAAMuD,SACtF,MAEF,IAAK,+BACH1I,EAAUK,IAAI,mCAAoCuE,EAAMO,MAAMkD,MAC9D,MAEF,IAAK,kBACHrI,EAAUK,IAAI,iBAAkBuE,EAAMO,MAAMwD,QAAS,YAAa/D,EAAMO,MAAMyD,UAC9E,MAEF,IAAK,sBACH5I,EAAUK,IAAI,qBAAsBuE,EAAMO,MAAMwD,SAChD,MAEF,IAAK,uBACH3I,EAAUK,IAAI,kBAAmBuE,EAAMO,MAAM0D,OAAQ,QAASjE,EAAMO,MAAMkD,MAC1E,MAEF,IAAK,kBACHnI,KAAK4I,4BAA4BlE,GACjC,MAEF,IAAK,kBACH1E,KAAK6I,4BAA4BnE,GACjC,MAEF,IAAK,cACH1E,KAAK8I,wBAAwBpE,GAC7B,MAEF,IAAK,qBACH5E,EAAUK,IAAI,gBAAiBuE,EAAMO,MAAMkD,MAMjD,CAEQ,2BAAAS,CAA4BlE,GAClC5E,EAAUK,IAAI,0BAA2BuE,EAAMO,MAE/C,MAAM2C,EAAc5H,KAAK6H,iBAAiBnD,EAAMO,MAE5CjF,KAAK2G,gBAAgBoC,uBACvB/I,KAAK6G,QAAQX,QACblG,KAAKyG,SAGP,MAAMqB,EAA6B,CACjCrH,KAAM,YACNsH,QAASH,GAGX5H,KAAKgI,aAAaF,EACpB,CAEQ,2BAAAe,CAA4BnE,GAClC5E,EAAUK,IAAI,0BAA2BuE,EAAMO,MAE/C,MAAM2C,EAAc5H,KAAK6H,iBAAiBnD,EAAMO,MAEhDjF,KAAK6G,QAAQX,QACblG,KAAKyG,QAEL,MAAMqB,EAA6B,CACjCrH,KAAM,YACNsH,QAASH,GAGX5H,KAAKgI,aAAaF,EACpB,CAEQ,uBAAAgB,CAAwBpE,GAC9B5E,EAAUK,IAAI,sBAAuBuE,EAAMO,MAE3C,MAAM2C,EAAc5H,KAAK6H,iBAAiBnD,EAAMO,MAC1C1E,EAAQC,EAAwB,UAAWkE,EAAMO,MAAM1E,OAE7DP,KAAK6G,QAAQX,QACblG,KAAKyG,QAEL,MAAMqB,EAA6B,CACjCrH,KAAM,SACNsH,QAASH,EACTrH,SAGFP,KAAKgI,aAAaF,EACpB,CAEQ,WAAAH,CAAYpH,GAGlB,IAAIyI,EAFJlJ,EAAUS,MAAM,aAAcA,GAK5ByI,EADEzI,aAAiBgH,MACC/G,EAAwB,UAAWD,EAAMI,SAEzCH,EAAwB,UAAW,6BAGzDR,KAAK+G,cAAgBiC,EAAkBrI,QACvCX,KAAKyH,SAAS,SAEdzH,KAAK6G,QAAQX,QACblG,KAAKyG,QAEL,MAAMqB,EAA6B,CACjCrH,KAAM,SACNF,MAAOyI,GAGThJ,KAAKgI,aAAaF,EACpB,CAEQ,QAAAL,CAASrG,GACf,MAAM6H,EAAgBjJ,KAAK0G,OAC3B1G,KAAK0G,OAAStF,EAEV6H,IAAkB7H,IACpBtB,EAAUK,IAAI,iBAAkB8I,EAAe,KAAM7H,GACrDpB,KAAKkJ,gBAAgB9H,EAAOpB,KAAK+G,eAErC,CAEQ,KAAAN,GACNzG,KAAK0G,OAAS,OACd1G,KAAKmJ,gBAAaC,EAClBpJ,KAAKwH,UAAO4B,EACZpJ,KAAK+G,mBAAgBqC,EACrBpJ,KAAK2G,oBAAiByC,CACxB,CAEQ,gBAAAvB,CAAiBwB,GACvB,MAAMC,EAAYD,GAAWC,WAAatJ,KAAKmJ,WAE/C,GAAKG,EAIL,MAAO,CACLA,YACAX,OAASU,GAAWV,QAAU,UAC9BH,QAASa,GAAWb,QACpBD,aAAcc,GAAWd,aAE7B,EAtTejC,EAAAE,UAA6B,gCHCnB"}
1
+ {"version":3,"file":"didit-sdk.umd.min.js","sources":["../src/constants.ts","../src/utils.ts","../src/modal.ts","../src/DiditSdk.ts"],"sourcesContent":["export const DEFAULT_CONFIG = {\n zIndex: 9999,\n showCloseButton: true,\n showExitConfirmation: true,\n loggingEnabled: false,\n closeModalOnComplete: false\n} as const;\n\nexport const CSS_CLASSES = {\n overlay: \"didit-modal-overlay\",\n container: \"didit-modal-container\",\n content: \"didit-modal-content\",\n iframe: \"didit-verification-iframe\",\n closeButton: \"didit-close-button\",\n loading: \"didit-loading\",\n confirmOverlay: \"didit-confirm-overlay\",\n confirmBox: \"didit-confirm-box\",\n embedded: \"didit-embedded\"\n} as const;\n\nexport const SDK_VERSION = \"0.1.4\";\n","class SDKLogger {\n private static _enabled = false;\n\n static get isEnabled(): boolean {\n return this._enabled;\n }\n\n static set isEnabled(value: boolean) {\n this._enabled = value;\n }\n\n static log(...args: unknown[]): void {\n if (this._enabled) {\n console.log(\"[DiditSDK]\", ...args);\n }\n }\n\n static warn(...args: unknown[]): void {\n if (this._enabled) {\n console.warn(\"[DiditSDK]\", ...args);\n }\n }\n\n static error(...args: unknown[]): void {\n if (this._enabled) {\n console.error(\"[DiditSDK]\", ...args);\n }\n }\n}\n\nexport { SDKLogger };\n\nexport function generateModalId(): string {\n return `didit-modal-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n}\n\nexport function isAllowedOrigin(origin: string): boolean {\n try {\n const url = new URL(origin);\n return url.hostname.endsWith('.didit.me');\n } catch {\n return false;\n }\n}\n\nexport function createVerificationError(\n type: \"sessionExpired\" | \"networkError\" | \"cameraAccessDenied\" | \"unknown\",\n customMessage?: string\n): { type: typeof type; message: string } {\n const messages = {\n sessionExpired: \"Your verification session has expired.\",\n networkError: \"A network error occurred. Please try again.\",\n cameraAccessDenied: \"Camera access is required for verification.\",\n unknown: customMessage || \"An unknown error occurred.\"\n };\n\n return {\n type,\n message: customMessage || messages[type]\n };\n}\n","import type { DiditSdkConfiguration, VerificationEvent } from \"./types\";\nimport { DEFAULT_CONFIG, CSS_CLASSES } from \"./constants\";\nimport { SDKLogger, generateModalId, isAllowedOrigin } from \"./utils\";\n\nexport interface ModalState {\n isOpen: boolean;\n isLoading: boolean;\n showConfirmation: boolean;\n}\n\nexport interface ModalCallbacks {\n onClose: () => void;\n onCloseConfirmed: () => void;\n onMessage: (event: VerificationEvent) => void;\n onIframeLoad: () => void;\n}\n\nexport class VerificationModal {\n private modalId: string;\n private config: Required<Pick<DiditSdkConfiguration, \"zIndex\" | \"showCloseButton\" | \"showExitConfirmation\">>;\n private callbacks: ModalCallbacks;\n private state: ModalState = {\n isOpen: false,\n isLoading: true,\n showConfirmation: false\n };\n\n private overlay: HTMLDivElement | null = null;\n private container: HTMLDivElement | null = null;\n private iframe: HTMLIFrameElement | null = null;\n private loadingEl: HTMLDivElement | null = null;\n private confirmOverlay: HTMLDivElement | null = null;\n private containerElement: HTMLElement;\n\n private boundHandleMessage: ((event: MessageEvent) => void) | null = null;\n private boundHandleKeydown: ((event: KeyboardEvent) => void) | null = null;\n\n private embedded: boolean = false;\n private embeddedContainer: HTMLElement | null = null;\n\n constructor(configuration: DiditSdkConfiguration | undefined, callbacks: ModalCallbacks) {\n this.modalId = generateModalId();\n this.config = {\n zIndex: configuration?.zIndex ?? DEFAULT_CONFIG.zIndex,\n showCloseButton: configuration?.showCloseButton ?? DEFAULT_CONFIG.showCloseButton,\n showExitConfirmation: configuration?.showExitConfirmation ?? DEFAULT_CONFIG.showExitConfirmation\n };\n this.callbacks = callbacks;\n this.containerElement = configuration?.containerElement ?? document.body;\n this.embedded = configuration?.embedded ?? false;\n if (this.embedded && configuration?.embeddedContainerId) {\n this.embeddedContainer = document.getElementById(configuration.embeddedContainerId);\n }\n }\n\n private injectStyles(): void {\n const styleId = \"didit-sdk-styles\";\n if (document.getElementById(styleId)) {\n return;\n }\n\n const styles = document.createElement(\"style\");\n styles.id = styleId;\n styles.textContent = `\n .${CSS_CLASSES.overlay} {\n display: none;\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.6);\n z-index: ${this.config.zIndex};\n justify-content: center;\n align-items: center;\n padding: 1rem;\n opacity: 0;\n transition: opacity 0.2s ease-out;\n }\n\n .${CSS_CLASSES.overlay}.active {\n display: flex;\n opacity: 1;\n }\n\n .${CSS_CLASSES.container} {\n position: relative;\n width: 100%;\n max-width: 500px;\n max-height: 90vh;\n border-radius: 16px;\n overflow: hidden;\n background: transparent;\n }\n\n .${CSS_CLASSES.overlay}.active .${CSS_CLASSES.container} {\n transform: scale(1);\n }\n\n .${CSS_CLASSES.iframe} {\n width: 100%;\n height: 700px;\n border: none;\n display: block;\n }\n\n .${CSS_CLASSES.closeButton} {\n position: absolute;\n top: 12px;\n right: 12px;\n width: 24px;\n height: 24px;\n background: transparent;\n border: none;\n cursor: pointer;\n padding: 0;\n z-index: 10;\n outline: none;\n }\n\n .${CSS_CLASSES.closeButton}:hover,\n .${CSS_CLASSES.closeButton}:focus {\n background: transparent;\n opacity: 0.5;\n }\n\n .${CSS_CLASSES.closeButton} svg {\n stroke: #666;\n stroke-width: 2;\n stroke-linecap: round;\n }\n\n .${CSS_CLASSES.loading} {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background: #fafafa;\n z-index: 5;\n }\n\n .${CSS_CLASSES.loading}.hidden {\n display: none;\n }\n\n .${CSS_CLASSES.loading} svg {\n width: 48px;\n height: 48px;\n animation: didit-spin 1s linear infinite;\n }\n\n .${CSS_CLASSES.loading} circle {\n stroke: #e5e5e5;\n stroke-width: 3;\n fill: none;\n }\n\n .${CSS_CLASSES.loading} path {\n stroke: #525252;\n stroke-width: 3;\n stroke-linecap: round;\n fill: none;\n }\n\n @keyframes didit-spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n\n .${CSS_CLASSES.confirmOverlay} {\n display: none;\n position: absolute;\n inset: 0;\n background: rgba(0, 0, 0, 0.5);\n z-index: 20;\n justify-content: center;\n align-items: center;\n opacity: 0;\n transition: opacity 0.15s ease-out;\n }\n\n .${CSS_CLASSES.confirmOverlay}.active {\n display: flex;\n opacity: 1;\n }\n\n .${CSS_CLASSES.confirmBox} {\n background: #fff;\n border-radius: 12px;\n padding: 1.5rem;\n text-align: center;\n max-width: 300px;\n margin: 1rem;\n transform: scale(0.95);\n transition: transform 0.15s ease-out;\n box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);\n }\n\n .${CSS_CLASSES.confirmOverlay}.active .${CSS_CLASSES.confirmBox} {\n transform: scale(1);\n }\n\n .${CSS_CLASSES.confirmBox} h3 {\n color: #1a1a2e;\n margin: 0 0 0.5rem 0;\n font-size: 1.125rem;\n font-weight: 600;\n }\n\n .${CSS_CLASSES.confirmBox} p {\n color: #666;\n font-size: 0.875rem;\n margin: 0 0 1.25rem 0;\n line-height: 1.5;\n }\n\n .didit-confirm-actions {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 1rem;\n }\n\n .didit-confirm-actions button {\n background: #2563eb;\n color: #fff;\n border: none;\n padding: 0.625rem 1.25rem;\n border-radius: 8px;\n font-size: 0.875rem;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.15s ease;\n }\n\n .didit-confirm-actions button:hover {\n background: #1d4ed8;\n }\n\n .didit-confirm-actions span {\n color: #666;\n font-size: 0.875rem;\n cursor: pointer;\n padding: 0.625rem;\n transition: color 0.15s ease;\n }\n\n .didit-confirm-actions span:hover {\n color: #1a1a2e;\n }\n\n @media (max-width: 540px) {\n .${CSS_CLASSES.overlay} {\n padding: 0;\n }\n\n .${CSS_CLASSES.container} {\n max-width: 100%;\n max-height: 100vh;\n border-radius: 0;\n }\n\n .${CSS_CLASSES.iframe} {\n height: 100vh;\n }\n }\n\n .${CSS_CLASSES.embedded} {\n position: relative;\n width: 100%;\n height: 100%;\n }\n\n .${CSS_CLASSES.embedded} .${CSS_CLASSES.iframe} {\n width: 100%;\n height: 100%;\n }\n\n .${CSS_CLASSES.embedded} .${CSS_CLASSES.loading} {\n border-radius: 0;\n }\n `;\n\n document.head.appendChild(styles);\n }\n\n private createDOM(): void {\n this.injectStyles();\n\n if (this.embedded && this.embeddedContainer) {\n this.createEmbeddedDOM();\n return;\n }\n\n this.overlay = document.createElement(\"div\");\n this.overlay.id = this.modalId;\n this.overlay.className = CSS_CLASSES.overlay;\n this.overlay.setAttribute(\"role\", \"dialog\");\n this.overlay.setAttribute(\"aria-modal\", \"true\");\n this.overlay.setAttribute(\"aria-label\", \"Didit Verification\");\n\n this.container = document.createElement(\"div\");\n this.container.className = CSS_CLASSES.container;\n\n this.loadingEl = document.createElement(\"div\");\n this.loadingEl.className = CSS_CLASSES.loading;\n this.loadingEl.innerHTML = `\n <svg viewBox=\"0 0 24 24\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 2a10 10 0 0 1 10 10\" />\n </svg>\n `;\n\n if (this.config.showCloseButton) {\n const closeBtn = document.createElement(\"button\");\n closeBtn.className = CSS_CLASSES.closeButton;\n closeBtn.setAttribute(\"aria-label\", \"Close verification\");\n closeBtn.innerHTML = `\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\">\n <line x1=\"1\" y1=\"1\" x2=\"13\" y2=\"13\" />\n <line x1=\"13\" y1=\"1\" x2=\"1\" y2=\"13\" />\n </svg>\n `;\n closeBtn.addEventListener(\"click\", () => this.handleCloseRequest());\n this.container.appendChild(closeBtn);\n }\n\n this.iframe = document.createElement(\"iframe\");\n this.iframe.className = CSS_CLASSES.iframe;\n this.iframe.setAttribute(\"allow\", \"camera; microphone; fullscreen; autoplay; encrypted-media; geolocation\");\n this.iframe.setAttribute(\"title\", \"Didit Verification\");\n this.iframe.addEventListener(\"load\", () => this.handleIframeLoad());\n\n this.confirmOverlay = document.createElement(\"div\");\n this.confirmOverlay.className = CSS_CLASSES.confirmOverlay;\n this.confirmOverlay.innerHTML = `\n <div class=\"${CSS_CLASSES.confirmBox}\">\n <h3>Exit verification?</h3>\n <p>Exiting will end your verification process. Are you sure?</p>\n <div class=\"didit-confirm-actions\">\n <button type=\"button\" data-action=\"continue\">Continue</button>\n <span data-action=\"exit\">Exit</span>\n </div>\n </div>\n `;\n\n this.confirmOverlay.querySelector('[data-action=\"continue\"]')?.addEventListener(\"click\", () => {\n this.hideConfirmation();\n });\n this.confirmOverlay.querySelector('[data-action=\"exit\"]')?.addEventListener(\"click\", () => {\n this.confirmExit();\n });\n\n this.container.appendChild(this.loadingEl);\n this.container.appendChild(this.iframe);\n this.container.appendChild(this.confirmOverlay);\n this.overlay.appendChild(this.container);\n\n this.overlay.addEventListener(\"click\", (e) => {\n if (e.target === this.overlay) {\n this.handleCloseRequest();\n }\n });\n\n this.containerElement.appendChild(this.overlay);\n }\n\n private createEmbeddedDOM(): void {\n if (!this.embeddedContainer) return;\n\n this.container = document.createElement(\"div\");\n this.container.id = this.modalId;\n this.container.className = CSS_CLASSES.embedded;\n\n this.loadingEl = document.createElement(\"div\");\n this.loadingEl.className = CSS_CLASSES.loading;\n this.loadingEl.innerHTML = `\n <svg viewBox=\"0 0 24 24\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 2a10 10 0 0 1 10 10\" />\n </svg>\n `;\n\n this.iframe = document.createElement(\"iframe\");\n this.iframe.className = CSS_CLASSES.iframe;\n this.iframe.setAttribute(\"allow\", \"camera; microphone; fullscreen; autoplay; encrypted-media; geolocation\");\n this.iframe.setAttribute(\"title\", \"Didit Verification\");\n this.iframe.addEventListener(\"load\", () => this.handleIframeLoad());\n\n this.container.appendChild(this.loadingEl);\n this.container.appendChild(this.iframe);\n this.embeddedContainer.appendChild(this.container);\n }\n\n private setupEventListeners(): void {\n this.boundHandleMessage = this.handleMessage.bind(this);\n window.addEventListener(\"message\", this.boundHandleMessage);\n\n this.boundHandleKeydown = this.handleKeydown.bind(this);\n document.addEventListener(\"keydown\", this.boundHandleKeydown);\n }\n\n private removeEventListeners(): void {\n if (this.boundHandleMessage) {\n window.removeEventListener(\"message\", this.boundHandleMessage);\n this.boundHandleMessage = null;\n }\n if (this.boundHandleKeydown) {\n document.removeEventListener(\"keydown\", this.boundHandleKeydown);\n this.boundHandleKeydown = null;\n }\n }\n\n private handleMessage(event: MessageEvent): void {\n if (!isAllowedOrigin(event.origin)) {\n return;\n }\n\n SDKLogger.log(\"Received postMessage:\", event.data);\n\n let messageData: VerificationEvent;\n try {\n if (typeof event.data === \"string\") {\n messageData = JSON.parse(event.data);\n } else {\n messageData = event.data;\n }\n } catch {\n SDKLogger.warn(\"Failed to parse postMessage:\", event.data);\n return;\n }\n\n if (messageData.type === \"didit:close_request\") {\n this.handleCloseRequest();\n return;\n }\n\n this.callbacks.onMessage(messageData);\n }\n\n private handleKeydown(event: KeyboardEvent): void {\n if (!this.state.isOpen) return;\n\n if (event.key === \"Escape\") {\n event.preventDefault();\n if (this.state.showConfirmation) {\n this.hideConfirmation();\n } else {\n this.handleCloseRequest();\n }\n }\n }\n\n private handleIframeLoad(): void {\n if (this.iframe?.src && this.iframe.src !== \"about:blank\") {\n this.state.isLoading = false;\n this.loadingEl?.classList.add(\"hidden\");\n this.callbacks.onIframeLoad();\n }\n }\n\n private handleCloseRequest(): void {\n if (this.config.showExitConfirmation) {\n this.showConfirmation();\n } else {\n this.callbacks.onCloseConfirmed();\n }\n }\n\n private showConfirmation(): void {\n this.state.showConfirmation = true;\n this.confirmOverlay?.classList.add(\"active\");\n this.callbacks.onClose();\n }\n\n private hideConfirmation(): void {\n this.state.showConfirmation = false;\n this.confirmOverlay?.classList.remove(\"active\");\n }\n\n private confirmExit(): void {\n this.hideConfirmation();\n this.callbacks.onCloseConfirmed();\n }\n\n open(verificationUrl: string): void {\n if (!this.overlay && !this.container) {\n this.createDOM();\n this.setupEventListeners();\n }\n\n SDKLogger.log(\"Opening with URL:\", verificationUrl);\n\n this.state.isLoading = true;\n this.state.showConfirmation = false;\n this.loadingEl?.classList.remove(\"hidden\");\n this.confirmOverlay?.classList.remove(\"active\");\n\n if (this.iframe) {\n this.iframe.src = verificationUrl;\n }\n\n this.state.isOpen = true;\n\n if (this.embedded) {\n return;\n }\n\n this.overlay?.classList.add(\"active\");\n document.body.style.overflow = \"hidden\";\n }\n\n close(): void {\n SDKLogger.log(\"Closing\");\n\n this.state.isOpen = false;\n this.state.isLoading = true;\n this.state.showConfirmation = false;\n\n if (this.iframe) {\n this.iframe.src = \"about:blank\";\n }\n\n if (this.embedded) {\n return;\n }\n\n this.overlay?.classList.remove(\"active\");\n document.body.style.overflow = \"\";\n }\n\n destroy(): void {\n SDKLogger.log(\"Destroying\");\n\n this.close();\n this.removeEventListeners();\n\n if (this.embedded && this.container && this.container.parentNode) {\n this.container.parentNode.removeChild(this.container);\n } else if (this.overlay && this.overlay.parentNode) {\n this.overlay.parentNode.removeChild(this.overlay);\n }\n\n this.overlay = null;\n this.container = null;\n this.iframe = null;\n this.loadingEl = null;\n this.confirmOverlay = null;\n }\n\n isOpen(): boolean {\n return this.state.isOpen;\n }\n\n isLoading(): boolean {\n return this.state.isLoading;\n }\n}\n","import type {\n DiditSdkState,\n DiditSdkConfiguration,\n VerificationResult,\n VerificationCallback,\n StateChangeCallback,\n EventCallback,\n VerificationEvent,\n SessionData,\n VerificationStatus,\n StartVerificationOptions\n} from \"./types\";\n\nimport { VerificationModal } from \"./modal\";\nimport { DEFAULT_CONFIG } from \"./constants\";\nimport { SDKLogger, createVerificationError } from \"./utils\";\n\nexport class DiditSdk {\n private static _instance: DiditSdk | null = null;\n\n public static get shared(): DiditSdk {\n if (!DiditSdk._instance) {\n DiditSdk._instance = new DiditSdk();\n }\n return DiditSdk._instance;\n }\n\n public static reset(): void {\n if (DiditSdk._instance) {\n DiditSdk._instance.destroy();\n DiditSdk._instance = null;\n }\n }\n\n private _state: DiditSdkState = \"idle\";\n private _configuration: DiditSdkConfiguration | undefined;\n private _sessionId: string | undefined;\n private _url: string | undefined;\n private _modal: VerificationModal | null = null;\n private _errorMessage: string | undefined;\n\n public onComplete: VerificationCallback | undefined;\n public onStateChange: StateChangeCallback | undefined;\n public onEvent: EventCallback | undefined;\n\n public get state(): DiditSdkState {\n return this._state;\n }\n\n public get configuration(): DiditSdkConfiguration | undefined {\n return this._configuration;\n }\n\n public get isPresented(): boolean {\n return this._modal?.isOpen() ?? false;\n }\n\n public get errorMessage(): string | undefined {\n return this._errorMessage;\n }\n\n private constructor() {\n SDKLogger.log(\"DiditSdk initialized\");\n }\n\n public async startVerification(options: StartVerificationOptions): Promise<void> {\n const config = options.configuration;\n this._configuration = config;\n\n SDKLogger.isEnabled = config?.loggingEnabled ?? DEFAULT_CONFIG.loggingEnabled;\n\n SDKLogger.log(\"Starting verification with options:\", options);\n if (this._modal) {\n this._modal.destroy();\n this._modal = null;\n }\n this._modal = new VerificationModal(config, {\n onClose: () => this.handleModalClose(),\n onCloseConfirmed: () => this.handleModalCloseConfirmed(),\n onMessage: (event) => this.handleVerificationEvent(event),\n onIframeLoad: () => this.handleIframeLoad()\n });\n\n try {\n const { url } = options;\n\n if (!url || typeof url !== \"string\") {\n throw new Error(\"Invalid options: url is required\");\n }\n\n this._url = url;\n this.setState(\"loading\");\n\n this.emitInternalEvent(\"didit:started\", {});\n\n this._modal?.open(this._url);\n } catch (error) {\n this.handleError(error);\n }\n }\n\n public close(): void {\n SDKLogger.log(\"Closing verification programmatically\");\n this.handleModalCloseConfirmed();\n }\n\n public destroy(): void {\n SDKLogger.log(\"Destroying SDK instance\");\n this._modal?.destroy();\n this._modal = null;\n this.reset();\n }\n\n private handleModalClose(): void {\n SDKLogger.log(\"Modal close requested\");\n }\n\n private handleModalCloseConfirmed(): void {\n SDKLogger.log(\"Modal close confirmed\");\n\n const sessionData = this.buildSessionData();\n\n this._modal?.close();\n this.reset();\n\n const result: VerificationResult = {\n type: \"cancelled\",\n session: sessionData\n };\n\n this.onComplete?.(result);\n }\n\n private handleIframeLoad(): void {\n SDKLogger.log(\"Iframe loaded\");\n }\n\n private emitInternalEvent(type: VerificationEvent[\"type\"], data?: VerificationEvent[\"data\"]): void {\n const event: VerificationEvent = {\n type,\n data,\n timestamp: Date.now()\n };\n\n SDKLogger.log(\"Emitting internal event:\", event);\n this.onEvent?.(event);\n }\n\n private handleVerificationEvent(event: VerificationEvent): void {\n SDKLogger.log(\"Verification event:\", event);\n\n this.onEvent?.(event);\n\n switch (event.type) {\n case \"didit:ready\":\n SDKLogger.log(\"Verification iframe ready\");\n break;\n\n case \"didit:started\":\n SDKLogger.log(\"User started verification\");\n break;\n\n case \"didit:step_started\":\n SDKLogger.log(\"Step started:\", event.data?.step);\n break;\n\n case \"didit:step_completed\":\n SDKLogger.log(\"Step completed:\", event.data?.step, \"-> next:\", event.data?.nextStep);\n break;\n\n case \"didit:media_started\":\n SDKLogger.log(\"Media started:\", event.data?.mediaType, \"for step:\", event.data?.step);\n break;\n\n case \"didit:media_captured\":\n SDKLogger.log(\"Media captured for step:\", event.data?.step, \"isAuto:\", event.data?.isAuto);\n break;\n\n case \"didit:document_selected\":\n SDKLogger.log(\"Document selected:\", event.data?.documentType, \"country:\", event.data?.country);\n break;\n\n case \"didit:verification_submitted\":\n SDKLogger.log(\"Verification submitted for step:\", event.data?.step);\n break;\n\n case \"didit:code_sent\":\n SDKLogger.log(\"Code sent via:\", event.data?.channel, \"codeSize:\", event.data?.codeSize);\n break;\n\n case \"didit:code_verified\":\n SDKLogger.log(\"Code verified via:\", event.data?.channel);\n break;\n\n case \"didit:status_updated\":\n SDKLogger.log(\"Status updated:\", event.data?.status, \"step:\", event.data?.step);\n break;\n\n case \"didit:completed\":\n this.handleVerificationCompleted(event);\n break;\n\n case \"didit:cancelled\":\n this.handleVerificationCancelled(event);\n break;\n\n case \"didit:error\":\n this.handleVerificationError(event);\n break;\n\n case \"didit:step_changed\":\n SDKLogger.log(\"Step changed:\", event.data?.step);\n break;\n\n case \"didit:close_request\":\n break;\n }\n }\n\n private handleVerificationCompleted(event: VerificationEvent): void {\n SDKLogger.log(\"Verification completed:\", event.data);\n\n const sessionData = this.buildSessionData(event.data);\n\n if (this._configuration?.closeModalOnComplete) {\n this._modal?.close();\n this.reset();\n }\n\n const result: VerificationResult = {\n type: \"completed\",\n session: sessionData\n };\n\n this.onComplete?.(result);\n }\n\n private handleVerificationCancelled(event: VerificationEvent): void {\n SDKLogger.log(\"Verification cancelled:\", event.data);\n\n const sessionData = this.buildSessionData(event.data);\n\n this._modal?.close();\n this.reset();\n\n const result: VerificationResult = {\n type: \"cancelled\",\n session: sessionData\n };\n\n this.onComplete?.(result);\n }\n\n private handleVerificationError(event: VerificationEvent): void {\n SDKLogger.log(\"Verification error:\", event.data);\n }\n\n private handleError(error: unknown): void {\n SDKLogger.error(\"SDK error:\", error);\n\n let verificationError;\n\n if (error instanceof Error) {\n verificationError = createVerificationError(\"unknown\", error.message);\n } else {\n verificationError = createVerificationError(\"unknown\", \"An unknown error occurred\");\n }\n\n this._errorMessage = verificationError.message;\n this.setState(\"error\");\n\n this._modal?.close();\n this.reset();\n\n const result: VerificationResult = {\n type: \"failed\",\n error: verificationError\n };\n\n this.onComplete?.(result);\n }\n\n private setState(state: DiditSdkState): void {\n const previousState = this._state;\n this._state = state;\n\n if (previousState !== state) {\n SDKLogger.log(\"State changed:\", previousState, \"->\", state);\n this.onStateChange?.(state, this._errorMessage);\n }\n }\n\n private reset(): void {\n this._state = \"idle\";\n this._sessionId = undefined;\n this._url = undefined;\n this._errorMessage = undefined;\n this._configuration = undefined;\n }\n\n private buildSessionData(eventData?: VerificationEvent[\"data\"]): SessionData | undefined {\n const sessionId = eventData?.sessionId || this._sessionId;\n\n if (!sessionId) {\n return undefined;\n }\n\n return {\n sessionId,\n status: (eventData?.status || \"Pending\") as VerificationStatus\n };\n }\n}\n"],"names":["DEFAULT_CONFIG","CSS_CLASSES","SDKLogger","isEnabled","this","_enabled","value","log","args","console","warn","error","createVerificationError","type","customMessage","message","sessionExpired","networkError","cameraAccessDenied","unknown","VerificationModal","constructor","configuration","callbacks","state","isOpen","isLoading","showConfirmation","overlay","container","iframe","loadingEl","confirmOverlay","boundHandleMessage","boundHandleKeydown","embedded","embeddedContainer","modalId","Date","now","Math","random","toString","substr","config","zIndex","showCloseButton","showExitConfirmation","containerElement","document","body","embeddedContainerId","getElementById","injectStyles","styleId","styles","createElement","id","textContent","head","appendChild","createDOM","createEmbeddedDOM","className","setAttribute","innerHTML","closeBtn","addEventListener","handleCloseRequest","handleIframeLoad","querySelector","hideConfirmation","confirmExit","e","target","setupEventListeners","handleMessage","bind","window","handleKeydown","removeEventListeners","removeEventListener","event","origin","URL","hostname","endsWith","isAllowedOrigin","messageData","data","JSON","parse","onMessage","key","preventDefault","src","classList","add","onIframeLoad","onCloseConfirmed","onClose","remove","open","verificationUrl","style","overflow","close","destroy","parentNode","removeChild","DiditSdk","shared","_instance","reset","_state","_configuration","isPresented","_modal","errorMessage","_errorMessage","startVerification","options","loggingEnabled","handleModalClose","handleModalCloseConfirmed","handleVerificationEvent","url","Error","_url","setState","emitInternalEvent","handleError","sessionData","buildSessionData","result","session","onComplete","timestamp","onEvent","step","nextStep","mediaType","isAuto","documentType","country","channel","codeSize","status","handleVerificationCompleted","handleVerificationCancelled","handleVerificationError","closeModalOnComplete","verificationError","previousState","onStateChange","_sessionId","undefined","eventData","sessionId"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -3,8 +3,6 @@ type VerificationStatus = "Approved" | "Pending" | "Declined";
3
3
  interface SessionData {
4
4
  sessionId: string;
5
5
  status: VerificationStatus;
6
- country?: string;
7
- documentType?: string;
8
6
  }
9
7
  type VerificationErrorType = "sessionExpired" | "networkError" | "cameraAccessDenied" | "unknown";
10
8
  interface VerificationError {
@@ -24,6 +22,8 @@ interface DiditSdkConfiguration {
24
22
  showCloseButton?: boolean;
25
23
  showExitConfirmation?: boolean;
26
24
  closeModalOnComplete?: boolean;
25
+ embedded?: boolean;
26
+ embeddedContainerId?: string;
27
27
  }
28
28
  interface StartVerificationOptions {
29
29
  url: string;
@@ -89,7 +89,7 @@ declare class DiditSdk {
89
89
  private buildSessionData;
90
90
  }
91
91
 
92
- declare const SDK_VERSION = "0.1.0";
92
+ declare const SDK_VERSION = "0.1.4";
93
93
 
94
94
  export { DiditSdk, SDK_VERSION, DiditSdk as default };
95
95
  export type { DiditSdkConfiguration, DiditSdkState, EventCallback, SessionData, StartVerificationOptions, StateChangeCallback, VerificationCallback, VerificationError, VerificationErrorType, VerificationEvent, VerificationEventData, VerificationEventType, VerificationResult, VerificationResultType, VerificationStatus };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@didit-protocol/sdk-web",
3
- "version": "0.1.2",
3
+ "version": "0.1.4",
4
4
  "description": "Didit Identity Verification SDK for Web Applications",
5
5
  "main": "dist/didit-sdk.cjs.js",
6
6
  "module": "dist/didit-sdk.esm.js",