@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.
package/README.md CHANGED
@@ -98,9 +98,14 @@ DiditSdk.shared.startVerification({
98
98
 
99
99
  Get your UniLink URL from the [Didit Console](https://business.didit.me) → Your Workflow → Copy Link.
100
100
 
101
+ **The session_id generated will be sent to you by an event.**
102
+ **[Check event reference here](#event-reference)**
103
+
101
104
  ### Method 2: Backend Session (Recommended for production)
102
105
 
103
106
  Your backend creates a session via the Didit API and returns the verification URL. This gives you more control over session creation, user tracking, and security.
107
+ Read more about how the create session API works here:
108
+ https://docs.didit.me/reference/create-session-verification-sessions
104
109
 
105
110
  ```typescript
106
111
  // Get the verification URL from your backend
@@ -114,28 +119,6 @@ DiditSdk.shared.startVerification({
114
119
  });
115
120
  ```
116
121
 
117
- #### Session Creation Options
118
-
119
- When creating sessions via your backend, you can include additional parameters:
120
-
121
- ```typescript
122
- // Example backend request body to Didit API
123
- {
124
- "vendor_data": "user-123", // Your user identifier
125
- "metadata": "{\"source\": \"web\"}", // Custom JSON metadata
126
- "contact_details": { // Prefill contact info
127
- "email": "user@example.com",
128
- "phone": "+14155552671",
129
- "send_notification_emails": true
130
- },
131
- "expected_details": { // Cross-validation data
132
- "first_name": "John",
133
- "last_name": "Doe",
134
- "date_of_birth": "1990-05-15",
135
- "country": "USA"
136
- }
137
- }
138
- ```
139
122
 
140
123
  ## Configuration
141
124
 
@@ -175,9 +158,39 @@ interface DiditSdkConfiguration {
175
158
  * @default false
176
159
  */
177
160
  closeModalOnComplete?: boolean;
161
+
162
+ /**
163
+ * Render verification inline instead of modal overlay
164
+ * @default false
165
+ */
166
+ embedded?: boolean;
167
+
168
+ /**
169
+ * Container element ID for embedded mode
170
+ * Required when embedded is true
171
+ */
172
+ embeddedContainerId?: string;
178
173
  }
179
174
  ```
180
175
 
176
+ ## Embedded Mode
177
+
178
+ Render verification inline instead of a modal overlay:
179
+
180
+ ```html
181
+ <div id="verification-container" style="width: 500px; height: 700px;"></div>
182
+ ```
183
+
184
+ ```typescript
185
+ DiditSdk.shared.startVerification({
186
+ url: 'https://verify.didit.me/u/...',
187
+ configuration: {
188
+ embedded: true,
189
+ embeddedContainerId: 'verification-container'
190
+ }
191
+ });
192
+ ```
193
+
181
194
  ## Verification Results
182
195
 
183
196
  The SDK returns three types of results:
@@ -191,9 +204,7 @@ Verification flow finished (approved, pending, or declined).
191
204
  type: 'completed',
192
205
  session: {
193
206
  sessionId: 'session-uuid',
194
- status: 'Approved' | 'Pending' | 'Declined',
195
- country: 'USA', // ISO 3166-1 alpha-3
196
- documentType: 'passport'
207
+ status: 'Approved' | 'Pending' | 'Declined'
197
208
  }
198
209
  }
199
210
  ```
@@ -207,8 +218,7 @@ User closed the verification modal.
207
218
  type: 'cancelled',
208
219
  session: {
209
220
  sessionId: 'session-uuid',
210
- status: 'Pending',
211
- // ...
221
+ status: 'Pending'
212
222
  }
213
223
  }
214
224
  ```
@@ -223,47 +233,7 @@ An error occurred during verification.
223
233
  error: {
224
234
  type: 'sessionExpired' | 'networkError' | 'cameraAccessDenied' | 'unknown',
225
235
  message: 'Your verification session has expired.'
226
- },
227
- session: { /* if available */ }
228
- }
229
- ```
230
-
231
- ## Contact Details
232
-
233
- When creating sessions via your backend, you can provide contact details to prefill verification forms and enable notifications:
234
-
235
- ```typescript
236
- interface ContactDetails {
237
- /** Email address for verification and notifications */
238
- email?: string;
239
-
240
- /** Send status update emails to user */
241
- sendNotificationEmails?: boolean;
242
-
243
- /** Language code (ISO 639-1) for emails */
244
- emailLang?: string;
245
-
246
- /** Phone number in E.164 format (e.g., "+14155552671") */
247
- phone?: string;
248
- }
249
- ```
250
-
251
- ## Expected Details
252
-
253
- When creating sessions via your backend, you can provide expected user details for cross-validation with extracted document data:
254
-
255
- ```typescript
256
- interface ExpectedDetails {
257
- firstName?: string; // Fuzzy comparison
258
- lastName?: string; // Fuzzy comparison
259
- dateOfBirth?: string; // YYYY-MM-DD format
260
- gender?: string; // "M" or "F"
261
- nationality?: string; // ISO 3166-1 alpha-3
262
- country?: string; // ISO 3166-1 alpha-3
263
- address?: string; // Full address
264
- identificationNumber?: string;
265
- ipAddress?: string; // Expected IP
266
- portraitImage?: string; // Base64 encoded (max 1MB)
236
+ }
267
237
  }
268
238
  ```
269
239
 
@@ -344,7 +314,7 @@ DiditSdk.shared.onEvent = (event) => {
344
314
 
345
315
  | Event | Description | Data Payload |
346
316
  |-------|-------------|--------------|
347
- | `didit:ready` | Verification iframe loaded | `{ sessionId? }` |
317
+ | `didit:ready` | The page is ready and the sessionId is available | `{ sessionId }` |
348
318
  | `didit:started` | User started verification | `{ sessionId? }` |
349
319
  | `didit:step_started` | A verification step began | `{ step, sessionId? }` |
350
320
  | `didit:step_completed` | A step finished successfully | `{ step, nextStep?, sessionId? }` |
@@ -1,5 +1,5 @@
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
  */
@@ -19,9 +19,10 @@ const CSS_CLASSES = {
19
19
  closeButton: "didit-close-button",
20
20
  loading: "didit-loading",
21
21
  confirmOverlay: "didit-confirm-overlay",
22
- confirmBox: "didit-confirm-box"
22
+ confirmBox: "didit-confirm-box",
23
+ embedded: "didit-embedded"
23
24
  };
24
- const SDK_VERSION = "0.1.0";
25
+ const SDK_VERSION = "0.1.4";
25
26
 
26
27
  class SDKLogger {
27
28
  static get isEnabled() {
@@ -86,6 +87,8 @@ class VerificationModal {
86
87
  this.confirmOverlay = null;
87
88
  this.boundHandleMessage = null;
88
89
  this.boundHandleKeydown = null;
90
+ this.embedded = false;
91
+ this.embeddedContainer = null;
89
92
  this.modalId = generateModalId();
90
93
  this.config = {
91
94
  zIndex: configuration?.zIndex ?? DEFAULT_CONFIG.zIndex,
@@ -94,6 +97,10 @@ class VerificationModal {
94
97
  };
95
98
  this.callbacks = callbacks;
96
99
  this.containerElement = configuration?.containerElement ?? document.body;
100
+ this.embedded = configuration?.embedded ?? false;
101
+ if (this.embedded && configuration?.embeddedContainerId) {
102
+ this.embeddedContainer = document.getElementById(configuration.embeddedContainerId);
103
+ }
97
104
  }
98
105
  injectStyles() {
99
106
  const styleId = "didit-sdk-styles";
@@ -303,11 +310,30 @@ class VerificationModal {
303
310
  height: 100vh;
304
311
  }
305
312
  }
313
+
314
+ .${CSS_CLASSES.embedded} {
315
+ position: relative;
316
+ width: 100%;
317
+ height: 100%;
318
+ }
319
+
320
+ .${CSS_CLASSES.embedded} .${CSS_CLASSES.iframe} {
321
+ width: 100%;
322
+ height: 100%;
323
+ }
324
+
325
+ .${CSS_CLASSES.embedded} .${CSS_CLASSES.loading} {
326
+ border-radius: 0;
327
+ }
306
328
  `;
307
329
  document.head.appendChild(styles);
308
330
  }
309
331
  createDOM() {
310
332
  this.injectStyles();
333
+ if (this.embedded && this.embeddedContainer) {
334
+ this.createEmbeddedDOM();
335
+ return;
336
+ }
311
337
  this.overlay = document.createElement("div");
312
338
  this.overlay.id = this.modalId;
313
339
  this.overlay.className = CSS_CLASSES.overlay;
@@ -371,6 +397,29 @@ class VerificationModal {
371
397
  });
372
398
  this.containerElement.appendChild(this.overlay);
373
399
  }
400
+ createEmbeddedDOM() {
401
+ if (!this.embeddedContainer)
402
+ return;
403
+ this.container = document.createElement("div");
404
+ this.container.id = this.modalId;
405
+ this.container.className = CSS_CLASSES.embedded;
406
+ this.loadingEl = document.createElement("div");
407
+ this.loadingEl.className = CSS_CLASSES.loading;
408
+ this.loadingEl.innerHTML = `
409
+ <svg viewBox="0 0 24 24">
410
+ <circle cx="12" cy="12" r="10" />
411
+ <path d="M12 2a10 10 0 0 1 10 10" />
412
+ </svg>
413
+ `;
414
+ this.iframe = document.createElement("iframe");
415
+ this.iframe.className = CSS_CLASSES.iframe;
416
+ this.iframe.setAttribute("allow", "camera; microphone; fullscreen; autoplay; encrypted-media; geolocation");
417
+ this.iframe.setAttribute("title", "Didit Verification");
418
+ this.iframe.addEventListener("load", () => this.handleIframeLoad());
419
+ this.container.appendChild(this.loadingEl);
420
+ this.container.appendChild(this.iframe);
421
+ this.embeddedContainer.appendChild(this.container);
422
+ }
374
423
  setupEventListeners() {
375
424
  this.boundHandleMessage = this.handleMessage.bind(this);
376
425
  window.addEventListener("message", this.boundHandleMessage);
@@ -453,11 +502,11 @@ class VerificationModal {
453
502
  this.callbacks.onCloseConfirmed();
454
503
  }
455
504
  open(verificationUrl) {
456
- if (!this.overlay) {
505
+ if (!this.overlay && !this.container) {
457
506
  this.createDOM();
458
507
  this.setupEventListeners();
459
508
  }
460
- SDKLogger.log("Opening modal with URL:", verificationUrl);
509
+ SDKLogger.log("Opening with URL:", verificationUrl);
461
510
  this.state.isLoading = true;
462
511
  this.state.showConfirmation = false;
463
512
  this.loadingEl?.classList.remove("hidden");
@@ -466,25 +515,34 @@ class VerificationModal {
466
515
  this.iframe.src = verificationUrl;
467
516
  }
468
517
  this.state.isOpen = true;
518
+ if (this.embedded) {
519
+ return;
520
+ }
469
521
  this.overlay?.classList.add("active");
470
522
  document.body.style.overflow = "hidden";
471
523
  }
472
524
  close() {
473
- SDKLogger.log("Closing modal");
525
+ SDKLogger.log("Closing");
474
526
  this.state.isOpen = false;
475
527
  this.state.isLoading = true;
476
528
  this.state.showConfirmation = false;
477
- this.overlay?.classList.remove("active");
478
529
  if (this.iframe) {
479
530
  this.iframe.src = "about:blank";
480
531
  }
532
+ if (this.embedded) {
533
+ return;
534
+ }
535
+ this.overlay?.classList.remove("active");
481
536
  document.body.style.overflow = "";
482
537
  }
483
538
  destroy() {
484
- SDKLogger.log("Destroying modal");
539
+ SDKLogger.log("Destroying");
485
540
  this.close();
486
541
  this.removeEventListeners();
487
- if (this.overlay && this.overlay.parentNode) {
542
+ if (this.embedded && this.container && this.container.parentNode) {
543
+ this.container.parentNode.removeChild(this.container);
544
+ }
545
+ else if (this.overlay && this.overlay.parentNode) {
488
546
  this.overlay.parentNode.removeChild(this.overlay);
489
547
  }
490
548
  this.overlay = null;
@@ -555,7 +613,6 @@ class DiditSdk {
555
613
  this.setState("loading");
556
614
  this.emitInternalEvent("didit:started", {});
557
615
  this._modal?.open(this._url);
558
- this.setState("ready");
559
616
  }
560
617
  catch (error) {
561
618
  this.handleError(error);
@@ -674,16 +731,6 @@ class DiditSdk {
674
731
  }
675
732
  handleVerificationError(event) {
676
733
  SDKLogger.log("Verification error:", event.data);
677
- const sessionData = this.buildSessionData(event.data);
678
- const error = createVerificationError("unknown", event.data?.error);
679
- this._modal?.close();
680
- this.reset();
681
- const result = {
682
- type: "failed",
683
- session: sessionData,
684
- error
685
- };
686
- this.onComplete?.(result);
687
734
  }
688
735
  handleError(error) {
689
736
  SDKLogger.error("SDK error:", error);
@@ -726,9 +773,7 @@ class DiditSdk {
726
773
  }
727
774
  return {
728
775
  sessionId,
729
- status: (eventData?.status || "Pending"),
730
- country: eventData?.country,
731
- documentType: eventData?.documentType
776
+ status: (eventData?.status || "Pending")
732
777
  };
733
778
  }
734
779
  }
@@ -1 +1 @@
1
- {"version":3,"file":"didit-sdk.cjs.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":"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"}
1
+ {"version":3,"file":"didit-sdk.cjs.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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"}