{"version":3,"file":"didit-sdk.cjs","sources":["../../src/constants.ts","../../src/utils.ts","../../src/translations.ts","../../src/modal.ts","../../src/transactions.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  closeIcon: \"didit-close-icon\",\n  closeIconLegacy: \"didit-close-icon-legacy\",\n  flowSized: \"didit-flow-sized\",\n  sizeAnimated: \"didit-size-animated\",\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 = \"__SDK_PACKAGE_VERSION__\";\n\n/**\n * The permissions the verification iframe gets, in a modal and embedded:\n * camera and microphone for capture, clipboard-write for the flow's copy\n * buttons, and digital-credentials-get so the flow can ask a digital ID wallet\n * (Google Wallet) through the W3C Digital Credentials API from inside the iframe.\n */\nexport const IFRAME_ALLOW =\n  \"camera; microphone; fullscreen; autoplay; encrypted-media; geolocation; clipboard-write; digital-credentials-get\";\n\n/** The verification-URL query parameter each camera option is forwarded as. */\nexport const CAMERA_QUERY_PARAMS = {\n  defaultDocumentCamera: \"document_camera\",\n  defaultLivenessCamera: \"liveness_camera\",\n  showDocumentCameraSwitchButton: \"document_camera_switch\",\n  showLivenessCameraSwitchButton: \"liveness_camera_switch\"\n} as const;\n\nexport const CAMERA_LENSES = [\"front\", \"back\"] as const;\n\n/**\n * The verification-URL query parameters that tell the hosted flow how the SDK\n * presents it: `sdk_presentation=modal|embedded` and, in a modal,\n * `sdk_close_button=true|false` (whether the SDK draws its close button over\n * the flow's top bar).\n */\nexport const PRESENTATION_QUERY_PARAMS = {\n  presentation: \"sdk_presentation\",\n  closeButton: \"sdk_close_button\"\n} as const;\n\n/**\n * Posted by the hosted flow when it lays itself out for the modal, with\n * `data: { contentHeight, colorScheme?, dir?, kind? }` (`kind` is `handoff` or `step`, `step` when missing). The modal then grows to the\n * handoff card on a computer and follows the content height in a narrow\n * window. Handled by the modal and never delivered to `onEvent`.\n */\nexport const LAYOUT_MESSAGE_TYPE = \"didit:layout\";\n\n/** Languages the hosted flow lays out right to left. */\nexport const RTL_LANGUAGES = [\"ar\", \"fa\", \"he\"];\n\nexport const languages  = [\n    \"ar\",\n    \"bg\",\n    \"bn\",\n    \"ca\",\n    \"cnr\",\n    \"cs\",\n    \"da\",\n    \"de\",\n    \"el\",\n    \"en\",\n    \"es\",\n    \"et\",\n    \"fa\",\n    \"fi\",\n    \"fr\",\n    \"he\",\n    \"hi\",\n    \"hr\",\n    \"hu\",\n    \"hy\",\n    \"id\",\n    \"it\",\n    \"ja\",\n    \"ka\",\n    \"ko\",\n    \"lt\",\n    \"lv\",\n    \"mk\",\n    \"mn\",\n    \"ms\",\n    \"nl\",\n    \"no\",\n    \"pl\",\n    \"pt-BR\",\n    \"pt\",\n    \"ro\",\n    \"ru\",\n    \"sk\",\n    \"sl\",\n    \"so\",\n    \"sr\",\n    \"sv\",\n    \"th\",\n    \"tr\",\n    \"uk\",\n    \"uz\",\n    \"vi\",\n    \"zh-CN\",\n    \"zh-TW\",\n    \"zh\",\n]\n","import {\n  CAMERA_LENSES,\n  CAMERA_QUERY_PARAMS,\n  DEFAULT_CONFIG,\n  PRESENTATION_QUERY_PARAMS,\n  RTL_LANGUAGES,\n  languages\n} from \"./constants\";\nimport type { CameraLens, DiditSdkConfiguration } from \"./types\";\n\nclass 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, url: string): boolean {\n  try {\n    const originURL = new URL(origin);\n    const urlURL = new URL(url);\n    return originURL.hostname.endsWith(\".didit.me\") || originURL.hostname === urlURL.hostname;\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\nfunction isCameraLens(value: unknown): value is CameraLens {\n  return (CAMERA_LENSES as readonly unknown[]).includes(value);\n}\n\nconst CAMERA_LENS_OPTIONS = [\"defaultDocumentCamera\", \"defaultLivenessCamera\"] as const;\nconst CAMERA_SWITCH_OPTIONS = [\"showDocumentCameraSwitchButton\", \"showLivenessCameraSwitchButton\"] as const;\n\n/**\n * The URL the verification iframe loads: the integrator's URL with the\n * configuration options the hosted page reads from its query string.\n *\n * The camera options (the same four the native SDKs expose) become query\n * parameters: `defaultDocumentCamera` -> `document_camera=<lens>`,\n * `defaultLivenessCamera` -> `liveness_camera=<lens>`,\n * `showDocumentCameraSwitchButton` -> `document_camera_switch=true|false`,\n * `showLivenessCameraSwitchButton` -> `liveness_camera_switch=true|false`.\n * How the SDK presents the flow is always added: `sdk_presentation=modal|embedded`\n * and, in a modal, `sdk_close_button=true|false`.\n * Each parameter is set (not appended) so the configuration wins over a value\n * already on the URL; existing query parameters and the hash are kept. A\n * value of the wrong shape is ignored with a warning rather than forwarded,\n * and a URL the browser cannot parse is returned as it came (the modal\n * reports it when it loads).\n */\nexport function buildVerificationUrl(url: string, configuration: DiditSdkConfiguration = {}): string {\n  const params = presentationParams(configuration);\n  for (const option of CAMERA_LENS_OPTIONS) {\n    const value = configuration[option];\n    if (value === undefined) continue;\n    if (!isCameraLens(value)) {\n      SDKLogger.warn(`Ignoring ${option}: expected \"front\" or \"back\", got`, value);\n      continue;\n    }\n    params.push([CAMERA_QUERY_PARAMS[option], value]);\n  }\n  for (const option of CAMERA_SWITCH_OPTIONS) {\n    const value = configuration[option];\n    if (value === undefined) continue;\n    if (typeof value !== \"boolean\") {\n      SDKLogger.warn(`Ignoring ${option}: expected a boolean, got`, value);\n      continue;\n    }\n    params.push([CAMERA_QUERY_PARAMS[option], value ? \"true\" : \"false\"]);\n  }\n  try {\n    const parsed = new URL(url);\n    params.forEach(([name, value]) => parsed.searchParams.set(name, value));\n    return parsed.toString();\n  } catch {\n    return url;\n  }\n}\n\nfunction presentationParams(configuration: DiditSdkConfiguration): Array<[string, string]> {\n  if (configuration.embedded) {\n    return [[PRESENTATION_QUERY_PARAMS.presentation, \"embedded\"]];\n  }\n  const closeButton = configuration.showCloseButton ?? DEFAULT_CONFIG.showCloseButton;\n  return [\n    [PRESENTATION_QUERY_PARAMS.presentation, \"modal\"],\n    [PRESENTATION_QUERY_PARAMS.closeButton, closeButton ? \"true\" : \"false\"]\n  ];\n}\n\nexport function isRtlLanguage(language: string): boolean {\n  return RTL_LANGUAGES.includes(language.split(\"-\")[0]);\n}\n\nexport function detectLanguageFromUrl(url: string): string {\n  try {\n    const { pathname } = new URL(url);\n    const firstSegment = pathname.split(\"/\").filter(Boolean)[0];\n    if (firstSegment && languages.includes(firstSegment)) {\n      return firstSegment;\n    }\n  } catch {\n    // we get it from the browser\n  }\n\n  const browserLang = navigator.language;\n  if (languages.includes(browserLang)) return browserLang;\n  const baseLang = browserLang.split(\"-\")[0];\n  if (languages.includes(baseLang)) return baseLang;\n\n  return \"en\";\n}\n","export interface ModalTranslations {\n  exitTitle: string;\n  exitMessage: string;\n  continueButton: string;\n  exitButton: string;\n  ariaLabelModal: string;\n  ariaLabelClose: string;\n}\n\nconst EN: ModalTranslations = {\n  exitTitle: \"Exit verification?\",\n  exitMessage: \"Exiting will end your verification process. Are you sure?\",\n  continueButton: \"Continue\",\n  exitButton: \"Exit\",\n  ariaLabelModal: \"Didit Verification\",\n  ariaLabelClose: \"Close verification\"\n};\n\nconst translationsMap: Record<string, ModalTranslations> = {\n  ar: {\n    exitTitle: \"الخروج من التحقق؟\",\n    exitMessage: \"سيؤدي الخروج إلى إنهاء عملية التحقق الخاصة بك. هل أنت متأكد؟\",\n    continueButton: \"متابعة\",\n    exitButton: \"خروج\",\n    ariaLabelModal: \"التحقق من Didit\",\n    ariaLabelClose: \"إغلاق التحقق\"\n  },\n  bg: {\n    exitTitle: \"Излизане от верификацията?\",\n    exitMessage: \"Излизането ще прекрати процеса на верификация. Сигурни ли сте?\",\n    continueButton: \"Продължи\",\n    exitButton: \"Изход\",\n    ariaLabelModal: \"Верификация Didit\",\n    ariaLabelClose: \"Затваряне на верификацията\"\n  },\n  bn: {\n    exitTitle: \"যাচাইকরণ থেকে বের হবেন?\",\n    exitMessage: \"বের হলে আপনার যাচাইকরণ প্রক্রিয়া শেষ হয়ে যাবে। আপনি কি নিশ্চিত?\",\n    continueButton: \"চালিয়ে যান\",\n    exitButton: \"বের হন\",\n    ariaLabelModal: \"Didit যাচাইকরণ\",\n    ariaLabelClose: \"যাচাইকরণ বন্ধ করুন\"\n  },\n  bs: {\n    exitTitle: \"Izaći iz verifikacije?\",\n    exitMessage: \"Izlaskom ćete prekinuti proces verifikacije. Jeste li sigurni?\",\n    continueButton: \"Nastavi\",\n    exitButton: \"Izađi\",\n    ariaLabelModal: \"Didit verifikacija\",\n    ariaLabelClose: \"Zatvori verifikaciju\"\n  },\n  ca: {\n    exitTitle: \"Sortir de la verificació?\",\n    exitMessage: \"Sortir finalitzarà el procés de verificació. N'esteu segur?\",\n    continueButton: \"Continua\",\n    exitButton: \"Sortir\",\n    ariaLabelModal: \"Verificació Didit\",\n    ariaLabelClose: \"Tancar verificació\"\n  },\n  cnr: {\n    exitTitle: \"Izaći iz verifikacije?\",\n    exitMessage: \"Izlaskom ćete prekinuti proces verifikacije. Jeste li sigurni?\",\n    continueButton: \"Nastavi\",\n    exitButton: \"Izađi\",\n    ariaLabelModal: \"Didit verifikacija\",\n    ariaLabelClose: \"Zatvori verifikaciju\"\n  },\n  cs: {\n    exitTitle: \"Opravdu chcete odejít?\",\n    exitMessage: \"Když odejdete, proces ověření se přeruší. Opravdu chcete skončit?\",\n    continueButton: \"Zůstat\",\n    exitButton: \"Odejít\",\n    ariaLabelModal: \"Ověření Didit\",\n    ariaLabelClose: \"Zavřít ověření\"\n  },\n  da: {\n    exitTitle: \"Forlad verifikation?\",\n    exitMessage: \"Hvis du forlader, afsluttes din verifikationsproces. Er du sikker?\",\n    continueButton: \"Fortsæt\",\n    exitButton: \"Forlad\",\n    ariaLabelModal: \"Didit-verifikation\",\n    ariaLabelClose: \"Luk verifikation\"\n  },\n  de: {\n    exitTitle: \"Verifizierung verlassen?\",\n    exitMessage: \"Das Verlassen beendet Ihren Verifizierungsprozess. Sind Sie sicher?\",\n    continueButton: \"Fortfahren\",\n    exitButton: \"Verlassen\",\n    ariaLabelModal: \"Didit-Verifizierung\",\n    ariaLabelClose: \"Verifizierung schließen\"\n  },\n  el: {\n    exitTitle: \"Έξοδος από την επαλήθευση;\",\n    exitMessage: \"Η έξοδος θα τερματίσει τη διαδικασία επαλήθευσης. Είστε σίγουροι;\",\n    continueButton: \"Συνέχεια\",\n    exitButton: \"Έξοδος\",\n    ariaLabelModal: \"Επαλήθευση Didit\",\n    ariaLabelClose: \"Κλείσιμο επαλήθευσης\"\n  },\n  en: EN,\n  es: {\n    exitTitle: \"¿Salir de la verificación?\",\n    exitMessage: \"Salir terminará tu proceso de verificación. ¿Estás seguro?\",\n    continueButton: \"Continuar\",\n    exitButton: \"Salir\",\n    ariaLabelModal: \"Verificación Didit\",\n    ariaLabelClose: \"Cerrar verificación\"\n  },\n  et: {\n    exitTitle: \"Lahkuda kinnitamisest?\",\n    exitMessage: \"Lahkumine lõpetab teie kinnitamisprotsessi. Kas olete kindel?\",\n    continueButton: \"Jätka\",\n    exitButton: \"Lahku\",\n    ariaLabelModal: \"Didit kinnitus\",\n    ariaLabelClose: \"Sulge kinnitus\"\n  },\n  fa: {\n    exitTitle: \"خروج از تأیید هویت؟\",\n    exitMessage: \"خروج باعث پایان فرآیند تأیید هویت شما می‌شود. آیا مطمئن هستید؟\",\n    continueButton: \"ادامه\",\n    exitButton: \"خروج\",\n    ariaLabelModal: \"تأیید هویت Didit\",\n    ariaLabelClose: \"بستن تأیید هویت\"\n  },\n  fi: {\n    exitTitle: \"Poistu vahvistuksesta?\",\n    exitMessage: \"Poistuminen päättää vahvistusprosessisi. Oletko varma?\",\n    continueButton: \"Jatka\",\n    exitButton: \"Poistu\",\n    ariaLabelModal: \"Didit-vahvistus\",\n    ariaLabelClose: \"Sulje vahvistus\"\n  },\n  fr: {\n    exitTitle: \"Quitter la vérification ?\",\n    exitMessage: \"Quitter mettra fin à votre processus de vérification. Êtes-vous sûr ?\",\n    continueButton: \"Continuer\",\n    exitButton: \"Quitter\",\n    ariaLabelModal: \"Vérification Didit\",\n    ariaLabelClose: \"Fermer la vérification\"\n  },\n  he: {\n    exitTitle: \"לצאת מהאימות?\",\n    exitMessage: \"יציאה תסיים את תהליך האימות שלך. האם אתה בטוח?\",\n    continueButton: \"המשך\",\n    exitButton: \"יציאה\",\n    ariaLabelModal: \"אימות Didit\",\n    ariaLabelClose: \"סגירת אימות\"\n  },\n  hi: {\n    exitTitle: \"सत्यापन से बाहर निकलें?\",\n    exitMessage: \"बाहर निकलने से आपकी सत्यापन प्रक्रिया समाप्त हो जाएगी। क्या आप सुनिश्चित हैं?\",\n    continueButton: \"जारी रखें\",\n    exitButton: \"बाहर निकलें\",\n    ariaLabelModal: \"Didit सत्यापन\",\n    ariaLabelClose: \"सत्यापन बंद करें\"\n  },\n  hr: {\n    exitTitle: \"Izaći iz verifikacije?\",\n    exitMessage: \"Izlaskom ćete prekinuti proces verifikacije. Jeste li sigurni?\",\n    continueButton: \"Nastavi\",\n    exitButton: \"Izađi\",\n    ariaLabelModal: \"Didit verifikacija\",\n    ariaLabelClose: \"Zatvori verifikaciju\"\n  },\n  hu: {\n    exitTitle: \"Kilépés az ellenőrzésből?\",\n    exitMessage: \"A kilépés befejezi az ellenőrzési folyamatot. Biztos benne?\",\n    continueButton: \"Folytatás\",\n    exitButton: \"Kilépés\",\n    ariaLabelModal: \"Didit ellenőrzés\",\n    ariaLabelClose: \"Ellenőrzés bezárása\"\n  },\n  hy: {\n    exitTitle: \"Դուրս գա՞լ ստուգումից\",\n    exitMessage: \"Դուրս գալը կավարտի ձեր ստուգման գործընթացը։ Համոզված ե՞ք?\",\n    continueButton: \"Շարունակել\",\n    exitButton: \"Դուրս գալ\",\n    ariaLabelModal: \"Didit ստուգում\",\n    ariaLabelClose: \"Փակել ստուգումը\"\n  },\n  id: {\n    exitTitle: \"Keluar dari verifikasi?\",\n    exitMessage: \"Keluar akan mengakhiri proses verifikasi Anda. Apakah Anda yakin?\",\n    continueButton: \"Lanjutkan\",\n    exitButton: \"Keluar\",\n    ariaLabelModal: \"Verifikasi Didit\",\n    ariaLabelClose: \"Tutup verifikasi\"\n  },\n  it: {\n    exitTitle: \"Uscire dalla verifica?\",\n    exitMessage: \"L'uscita terminerà il processo di verifica. Sei sicuro?\",\n    continueButton: \"Continua\",\n    exitButton: \"Esci\",\n    ariaLabelModal: \"Verifica Didit\",\n    ariaLabelClose: \"Chiudi verifica\"\n  },\n  ja: {\n    exitTitle: \"認証を終了しますか？\",\n    exitMessage: \"終了すると認証プロセスが中断されます。よろしいですか？\",\n    continueButton: \"続ける\",\n    exitButton: \"終了\",\n    ariaLabelModal: \"Didit 認証\",\n    ariaLabelClose: \"認証を閉じる\"\n  },\n  ka: {\n    exitTitle: \"გამოსვლა შემოწმებიდან?\",\n    exitMessage: \"გამოსვლა დაასრულებს თქვენს შემოწმების პროცესს. დარწმუნებული ხართ?\",\n    continueButton: \"გაგრძელება\",\n    exitButton: \"გამოსვლა\",\n    ariaLabelModal: \"Didit შემოწმება\",\n    ariaLabelClose: \"შემოწმების დახურვა\"\n  },\n  kk: {\n    exitTitle: \"Растаудан шығасыз ба?\",\n    exitMessage: \"Шығу растау процесін аяқтайды. Сенімдісіз бе?\",\n    continueButton: \"Жалғастыру\",\n    exitButton: \"Шығу\",\n    ariaLabelModal: \"Didit растауы\",\n    ariaLabelClose: \"Растауды жабу\"\n  },\n  ko: {\n    exitTitle: \"인증을 종료하시겠습니까?\",\n    exitMessage: \"종료하면 인증 절차가 중단됩니다. 확실하십니까?\",\n    continueButton: \"계속\",\n    exitButton: \"종료\",\n    ariaLabelModal: \"Didit 인증\",\n    ariaLabelClose: \"인증 닫기\"\n  },\n  ky: {\n    exitTitle: \"Текшерүүдөн чыгасызбы?\",\n    exitMessage: \"Чыгуу текшерүү процессин токтотот. Ишенесизби?\",\n    continueButton: \"Улантуу\",\n    exitButton: \"Чыгуу\",\n    ariaLabelModal: \"Didit текшерүүсү\",\n    ariaLabelClose: \"Текшерүүнү жабуу\"\n  },\n  lt: {\n    exitTitle: \"Išeiti iš patvirtinimo?\",\n    exitMessage: \"Išėjimas nutrauks jūsų patvirtinimo procesą. Ar esate tikri?\",\n    continueButton: \"Tęsti\",\n    exitButton: \"Išeiti\",\n    ariaLabelModal: \"Didit patvirtinimas\",\n    ariaLabelClose: \"Uždaryti patvirtinimą\"\n  },\n  lv: {\n    exitTitle: \"Iziet no verifikācijas?\",\n    exitMessage: \"Iziešana pārtrauks jūsu verifikācijas procesu. Vai esat pārliecināts?\",\n    continueButton: \"Turpināt\",\n    exitButton: \"Iziet\",\n    ariaLabelModal: \"Didit verifikācija\",\n    ariaLabelClose: \"Aizvērt verifikāciju\"\n  },\n  mk: {\n    exitTitle: \"Излези од верификацијата?\",\n    exitMessage: \"Излегувањето ќе го прекине процесот на верификација. Дали сте сигурни?\",\n    continueButton: \"Продолжи\",\n    exitButton: \"Излези\",\n    ariaLabelModal: \"Верификација Didit\",\n    ariaLabelClose: \"Затвори верификација\"\n  },\n  mn: {\n    exitTitle: \"Баталгаажуулалтаас гарах уу?\",\n    exitMessage: \"Гарвал таны баталгаажуулалтын процесс дуусна. Та итгэлтэй байна уу?\",\n    continueButton: \"Үргэлжлүүлэх\",\n    exitButton: \"Гарах\",\n    ariaLabelModal: \"Didit баталгаажуулалт\",\n    ariaLabelClose: \"Баталгаажуулалтыг хаах\"\n  },\n  ms: {\n    exitTitle: \"Keluar dari pengesahan?\",\n    exitMessage: \"Keluar akan menamatkan proses pengesahan anda. Adakah anda pasti?\",\n    continueButton: \"Teruskan\",\n    exitButton: \"Keluar\",\n    ariaLabelModal: \"Pengesahan Didit\",\n    ariaLabelClose: \"Tutup pengesahan\"\n  },\n  nl: {\n    exitTitle: \"Verificatie verlaten?\",\n    exitMessage: \"Verlaten beëindigt uw verificatieproces. Weet u het zeker?\",\n    continueButton: \"Doorgaan\",\n    exitButton: \"Verlaten\",\n    ariaLabelModal: \"Didit-verificatie\",\n    ariaLabelClose: \"Verificatie sluiten\"\n  },\n  no: {\n    exitTitle: \"Forlat verifisering?\",\n    exitMessage: \"Å forlate vil avslutte verifiseringsprosessen. Er du sikker?\",\n    continueButton: \"Fortsett\",\n    exitButton: \"Forlat\",\n    ariaLabelModal: \"Didit-verifisering\",\n    ariaLabelClose: \"Lukk verifisering\"\n  },\n  pl: {\n    exitTitle: \"Czy wyjść z weryfikacji?\",\n    exitMessage: \"Wyjście zakończy proces weryfikacji. Czy na pewno?\",\n    continueButton: \"Kontynuuj\",\n    exitButton: \"Wyjdź\",\n    ariaLabelModal: \"Weryfikacja Didit\",\n    ariaLabelClose: \"Zamknij weryfikację\"\n  },\n  \"pt-BR\": {\n    exitTitle: \"Sair da verificação?\",\n    exitMessage: \"Sair encerrará seu processo de verificação. Tem certeza?\",\n    continueButton: \"Continuar\",\n    exitButton: \"Sair\",\n    ariaLabelModal: \"Verificação Didit\",\n    ariaLabelClose: \"Fechar verificação\"\n  },\n  pt: {\n    exitTitle: \"Sair da verificação?\",\n    exitMessage: \"Sair terminará o seu processo de verificação. Tem a certeza?\",\n    continueButton: \"Continuar\",\n    exitButton: \"Sair\",\n    ariaLabelModal: \"Verificação Didit\",\n    ariaLabelClose: \"Fechar verificação\"\n  },\n  ro: {\n    exitTitle: \"Ieși din verificare?\",\n    exitMessage: \"Ieșirea va încheia procesul de verificare. Ești sigur?\",\n    continueButton: \"Continuă\",\n    exitButton: \"Ieși\",\n    ariaLabelModal: \"Verificare Didit\",\n    ariaLabelClose: \"Închide verificarea\"\n  },\n  ru: {\n    exitTitle: \"Выйти из верификации?\",\n    exitMessage: \"Выход завершит процесс верификации. Вы уверены?\",\n    continueButton: \"Продолжить\",\n    exitButton: \"Выйти\",\n    ariaLabelModal: \"Верификация Didit\",\n    ariaLabelClose: \"Закрыть верификацию\"\n  },\n  sk: {\n    exitTitle: \"Opustiť overenie?\",\n    exitMessage: \"Odchodom ukončíte proces overenia. Ste si istí?\",\n    continueButton: \"Pokračovať\",\n    exitButton: \"Odísť\",\n    ariaLabelModal: \"Overenie Didit\",\n    ariaLabelClose: \"Zavrieť overenie\"\n  },\n  sl: {\n    exitTitle: \"Zapustiti preverjanje?\",\n    exitMessage: \"Izhod bo prekinil postopek preverjanja. Ali ste prepričani?\",\n    continueButton: \"Nadaljuj\",\n    exitButton: \"Izhod\",\n    ariaLabelModal: \"Preverjanje Didit\",\n    ariaLabelClose: \"Zapri preverjanje\"\n  },\n  so: {\n    exitTitle: \"Ka baxdo xaqiijinta?\",\n    exitMessage: \"Ka bixitaanku wuxuu dhammayn doonaa habka xaqiijintaada. Ma hubtaa?\",\n    continueButton: \"Sii wad\",\n    exitButton: \"Ka bax\",\n    ariaLabelModal: \"Xaqiijinta Didit\",\n    ariaLabelClose: \"Xir xaqiijinta\"\n  },\n  sq: {\n    exitTitle: \"Dilni nga verifikimi?\",\n    exitMessage: \"Dalja do të përfundojë procesin tuaj të verifikimit. A jeni të sigurt?\",\n    continueButton: \"Vazhdo\",\n    exitButton: \"Dil\",\n    ariaLabelModal: \"Verifikimi Didit\",\n    ariaLabelClose: \"Mbyll verifikimin\"\n  },\n  sr: {\n    exitTitle: \"Изаћи из верификације?\",\n    exitMessage: \"Изласком ћете прекинути процес верификације. Да ли сте сигурни?\",\n    continueButton: \"Настави\",\n    exitButton: \"Изађи\",\n    ariaLabelModal: \"Верификација Didit\",\n    ariaLabelClose: \"Затвори верификацију\"\n  },\n  sv: {\n    exitTitle: \"Lämna verifiering?\",\n    exitMessage: \"Att lämna avslutar din verifieringsprocess. Är du säker?\",\n    continueButton: \"Fortsätt\",\n    exitButton: \"Lämna\",\n    ariaLabelModal: \"Didit-verifiering\",\n    ariaLabelClose: \"Stäng verifiering\"\n  },\n  th: {\n    exitTitle: \"ออกจากการยืนยันตัวตน?\",\n    exitMessage: \"การออกจะสิ้นสุดกระบวนการยืนยันตัวตนของคุณ คุณแน่ใจหรือไม่?\",\n    continueButton: \"ดำเนินการต่อ\",\n    exitButton: \"ออก\",\n    ariaLabelModal: \"การยืนยันตัวตน Didit\",\n    ariaLabelClose: \"ปิดการยืนยันตัวตน\"\n  },\n  tr: {\n    exitTitle: \"Doğrulamadan çıkmak istiyor musunuz?\",\n    exitMessage: \"Çıkış, doğrulama sürecinizi sonlandıracak. Emin misiniz?\",\n    continueButton: \"Devam et\",\n    exitButton: \"Çıkış\",\n    ariaLabelModal: \"Didit doğrulama\",\n    ariaLabelClose: \"Doğrulamayı kapat\"\n  },\n  uk: {\n    exitTitle: \"Вийти з верифікації?\",\n    exitMessage: \"Вихід завершить процес верифікації. Ви впевнені?\",\n    continueButton: \"Продовжити\",\n    exitButton: \"Вийти\",\n    ariaLabelModal: \"Верифікація Didit\",\n    ariaLabelClose: \"Закрити верифікацію\"\n  },\n  uz: {\n    exitTitle: \"Tekshiruvdan chiqasizmi?\",\n    exitMessage: \"Chiqish tekshiruv jarayonini tugatadi. Ishonchingiz komilmi?\",\n    continueButton: \"Davom etish\",\n    exitButton: \"Chiqish\",\n    ariaLabelModal: \"Didit tekshiruvi\",\n    ariaLabelClose: \"Tekshiruvni yopish\"\n  },\n  vi: {\n    exitTitle: \"Thoát khỏi xác minh?\",\n    exitMessage: \"Thoát sẽ kết thúc quá trình xác minh của bạn. Bạn có chắc không?\",\n    continueButton: \"Tiếp tục\",\n    exitButton: \"Thoát\",\n    ariaLabelModal: \"Xác minh Didit\",\n    ariaLabelClose: \"Đóng xác minh\"\n  },\n  \"zh-CN\": {\n    exitTitle: \"退出验证？\",\n    exitMessage: \"退出将结束您的验证流程。确定要退出吗？\",\n    continueButton: \"继续\",\n    exitButton: \"退出\",\n    ariaLabelModal: \"Didit 验证\",\n    ariaLabelClose: \"关闭验证\"\n  },\n  \"zh-TW\": {\n    exitTitle: \"退出驗證？\",\n    exitMessage: \"退出將結束您的驗證流程。確定要退出嗎？\",\n    continueButton: \"繼續\",\n    exitButton: \"退出\",\n    ariaLabelModal: \"Didit 驗證\",\n    ariaLabelClose: \"關閉驗證\"\n  },\n  zh: {\n    exitTitle: \"退出验证？\",\n    exitMessage: \"退出将结束您的验证流程。确定要退出吗？\",\n    continueButton: \"继续\",\n    exitButton: \"退出\",\n    ariaLabelModal: \"Didit 验证\",\n    ariaLabelClose: \"关闭验证\"\n  }\n};\n\nexport function getTranslations(language: string): ModalTranslations {\n  return translationsMap[language] ?? EN;\n}\n","import type { DiditSdkConfiguration, VerificationEvent } from \"./types\";\nimport { DEFAULT_CONFIG, CSS_CLASSES, IFRAME_ALLOW, LAYOUT_MESSAGE_TYPE } from \"./constants\";\nimport { SDKLogger, generateModalId, isAllowedOrigin, detectLanguageFromUrl, isRtlLanguage } from \"./utils\";\nimport { getTranslations } from \"./translations\";\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 type FlowKind = \"handoff\" | \"step\";\n\n/** Until the flow reports its first layout the modal waits (hidden) at the size the handoff card needs. */\ntype ModalKind = FlowKind | \"pending\";\n\n/** The length of the one animation when the flow moves from the handoff card to a step or back. */\nconst SIZE_ANIMATION_MS = 300;\n\n/** How long the modal waits for the first layout before it shows at step size, so it can never hang. */\nexport const FIRST_LAYOUT_TIMEOUT_MS = 3000;\n\n/** The layout the hosted flow reports in a didit:layout message. */\nexport interface FlowLayout {\n  /**\n   * What the flow is showing: the computer handoff card, or a step (phone-sized). A flow that does\n   * not say gets \"step\", the size every earlier version of the modal used.\n   */\n  kind: FlowKind;\n  /** Height of the flow's content in CSS pixels, its top bar included. */\n  contentHeight: number;\n  colorScheme: \"light\" | \"dark\";\n  dir: \"ltr\" | \"rtl\";\n}\n\nexport class VerificationModal {\n  /**\n   * Every currently-open modal, oldest first. Used so a single Escape\n   * keypress (or other document-level shortcut) only acts on the topmost\n   * modal when multiple VerificationModal instances are open at once (e.g.\n   * a transaction action modal stacked over the verification modal).\n   */\n  private static openModals: VerificationModal[] = [];\n\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 confirmationTrigger: HTMLElement | null = null;\n  private containerElement: HTMLElement;\n\n  private boundHandleMessage: ((event: MessageEvent) => void) | null = null;\n  private boundHandleKeydown: ((event: KeyboardEvent) => void) | null = null;\n  private boundHandleFocusChange: (() => void) | null = null;\n  private confirmationFocusTimeout: number | null = null;\n  private firstLayoutTimeout: number | null = null;\n  private sizeTimeout: number | null = null;\n\n  private embedded: boolean = false;\n  private embeddedContainer: HTMLElement | null = null;\n  private language: string = \"en\";\n\n  /** The page's own background colours, kept while a full-screen modal paints over them. */\n  private pageBackground: { root: string; body: string } | null = null;\n  /** body.style.overflow value observed right before this modal locked scroll, restored on close(). */\n  private previousBodyOverflow: string | 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: 440px;\n        height: min(860px, calc(100vh - 2rem));\n        height: min(860px, calc(100dvh - 2rem));\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: 100%;\n        border: none;\n        display: block;\n      }\n\n      .${CSS_CLASSES.closeButton} {\n        position: absolute;\n        top: 4px;\n        right: 4px;\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      @media (prefers-color-scheme: dark) {\n        .${CSS_CLASSES.loading} {\n          background: #0b0b0d;\n        }\n      }\n\n      .${CSS_CLASSES.loading}.hidden {\n        display: none;\n      }\n\n      .${CSS_CLASSES.loading} svg {\n        width: 4rem;\n        height: 4rem;\n        animation: didit-spin 1s linear infinite;\n      }\n\n      .${CSS_CLASSES.loading} circle {\n        stroke: #e5e5e5;\n        stroke-width: 2.5;\n        fill: none;\n      }\n\n      .${CSS_CLASSES.loading} path {\n        stroke: #525252;\n        stroke-width: 2.5;\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        outline: none;\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 [data-action=\"continue\"] {\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 [data-action=\"continue\"]:hover {\n        background: #1d4ed8;\n      }\n\n      .didit-confirm-actions [data-action=\"exit\"] {\n        background: transparent;\n        border: none;\n        font-family: inherit;\n        font-weight: inherit;\n        line-height: inherit;\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 [data-action=\"exit\"]:hover {\n        color: #1a1a2e;\n      }\n\n      .didit-confirm-actions button:focus-visible {\n        outline: 2px solid #2567ff;\n        outline-offset: 2px;\n      }\n\n      /*\n       * Steps are phone-sized (440 x 860, above). On a computer the handoff card is wider\n       * (board Start-Embedded): 960 x 660 on a window of 1000px or more, never wider than the\n       * window less its margin and never taller than 90% of it. In a narrower window the\n       * page stacks and the height follows its content (--didit-content-height, set from the\n       * flow's layout message). Until the flow reports what it shows, the modal is the handoff\n       * card at its final size with the spinner inside it (the flow stays hidden and lays itself\n       * out for that size): it never opens small and grows. The first change of kind (a step\n       * instead of the handoff, or the person continues on this computer) animates once.\n       */\n      @media (min-width: 541px) {\n        .${CSS_CLASSES.container}[data-didit-kind=\"handoff\"],\n        .${CSS_CLASSES.container}[data-didit-kind=\"pending\"] {\n          max-width: min(960px, calc(100vw - 2rem));\n          height: min(var(--didit-content-height, 660px), calc(100vh * 0.9));\n          height: min(var(--didit-content-height, 660px), calc(100dvh * 0.9));\n        }\n\n        .${CSS_CLASSES.container}.${CSS_CLASSES.sizeAnimated} {\n          transition: max-width 0.25s ease, height 0.25s ease;\n        }\n\n        .${CSS_CLASSES.container}[data-didit-kind=\"pending\"] .${CSS_CLASSES.iframe} {\n          visibility: hidden;\n        }\n      }\n\n      /*\n       * While pending the card already looks like the first screen (ground, radius, shadow and\n       * close button come from the flow-sized rules below, with the device theme); the loader\n       * sits inside it on the card's own ground.\n       */\n      .${CSS_CLASSES.container}[data-didit-kind=\"pending\"] .${CSS_CLASSES.loading} {\n        background: transparent;\n      }\n\n      .${CSS_CLASSES.container}[data-didit-kind=\"pending\"][data-didit-theme=\"dark\"] .${CSS_CLASSES.loading} circle {\n        stroke: rgba(255, 255, 255, 0.16);\n      }\n\n      .${CSS_CLASSES.container}[data-didit-kind=\"pending\"][data-didit-theme=\"dark\"] .${CSS_CLASSES.loading} path {\n        stroke: #f5f5f7;\n      }\n\n      @media (min-width: 1000px) {\n        .${CSS_CLASSES.container}[data-didit-kind=\"handoff\"],\n        .${CSS_CLASSES.container}[data-didit-kind=\"pending\"] {\n          height: min(660px, calc(100vh * 0.9));\n          height: min(660px, calc(100dvh * 0.9));\n        }\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          height: 100vh;\n          height: 100dvh;\n          border-radius: 0;\n        }\n      }\n\n      /*\n       * The hosted flow's layout message (didit:layout) brings the modal's size\n       * (see above), theme and direction. Colours are the design system tokens\n       * named beside them.\n       */\n      .${CSS_CLASSES.container}.${CSS_CLASSES.flowSized} {\n        --didit-ground: #ffffff; /* site-ground */\n        --didit-heading: #1a1a1a; /* c-heading */\n        --didit-accent: #2567ff; /* c-accent */\n        --didit-hover: rgba(120, 120, 128, 0.08); /* c-hover */\n        --didit-close-fill: rgba(0, 0, 0, 0.06);\n        --didit-drop: rgba(17, 24, 39, 0.35);\n        --didit-ring: rgba(0, 0, 0, 0.06);\n        background: var(--didit-ground);\n        box-shadow: 0 30px 80px -24px var(--didit-drop), 0 0 0 1px var(--didit-ring);\n      }\n\n      .${CSS_CLASSES.container}.${CSS_CLASSES.flowSized}[data-didit-theme=\"dark\"] {\n        --didit-ground: #0b0b0d;\n        --didit-heading: #f5f5f7;\n        --didit-accent: #4d8bff;\n        --didit-hover: rgba(255, 255, 255, 0.06);\n        --didit-close-fill: rgba(255, 255, 255, 0.06);\n        --didit-drop: rgba(0, 0, 0, 0.55); /* c-shadow-pop, dark */\n        --didit-ring: rgba(255, 255, 255, 0.08); /* c-shadow-pop, dark */\n      }\n\n      .${CSS_CLASSES.closeIcon} {\n        display: none;\n      }\n\n      .${CSS_CLASSES.flowSized} .${CSS_CLASSES.closeButton} {\n        top: 8px;\n        right: 8px;\n        width: 44px;\n        height: 44px;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        border-radius: 50%;\n        background: var(--didit-close-fill);\n        color: var(--didit-heading);\n      }\n\n      .${CSS_CLASSES.flowSized}[data-didit-dir=\"rtl\"] .${CSS_CLASSES.closeButton} {\n        right: auto;\n        left: 8px;\n      }\n\n      .${CSS_CLASSES.flowSized} .${CSS_CLASSES.closeButton}:hover,\n      .${CSS_CLASSES.flowSized} .${CSS_CLASSES.closeButton}:focus {\n        background: var(--didit-close-fill);\n        opacity: 1;\n      }\n\n      .${CSS_CLASSES.flowSized} .${CSS_CLASSES.closeButton}:hover {\n        background-image: linear-gradient(var(--didit-hover), var(--didit-hover));\n      }\n\n      .${CSS_CLASSES.flowSized} .${CSS_CLASSES.closeButton}:focus-visible {\n        outline: 2px solid var(--didit-accent);\n        outline-offset: 2px;\n      }\n\n      .${CSS_CLASSES.flowSized} .${CSS_CLASSES.closeIconLegacy} {\n        display: none;\n      }\n\n      .${CSS_CLASSES.flowSized} .${CSS_CLASSES.closeButton} .${CSS_CLASSES.closeIcon} {\n        display: block;\n        stroke: currentColor;\n        stroke-width: 1.75;\n        stroke-linejoin: round;\n      }\n\n      /*\n       * The exit confirmation is sized in rem, so with a large text size it\n       * can be taller than a short flow: it scrolls inside the modal instead\n       * of being clipped, and its width and actions follow a larger text size.\n       * It never grows wider than the modal: a long word wraps instead.\n       */\n      .${CSS_CLASSES.flowSized} .${CSS_CLASSES.confirmOverlay} {\n        padding: 1rem;\n        overflow-y: auto;\n      }\n\n      .${CSS_CLASSES.flowSized} .${CSS_CLASSES.confirmBox} {\n        min-width: 0;\n        max-width: max(300px, 18.75rem);\n        margin: auto;\n        overflow-wrap: anywhere;\n        /* Focusing the dialog scrolls it into view start-aligned; this keeps\n         * the overlay's top padding visible so the title is never clipped. */\n        scroll-margin-top: 1rem;\n      }\n\n      .${CSS_CLASSES.flowSized} .didit-confirm-actions {\n        flex-wrap: wrap;\n      }\n\n      @media (max-width: 540px) {\n        .${CSS_CLASSES.container}.${CSS_CLASSES.flowSized} {\n          max-width: 100%;\n          box-shadow: none;\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        max-height: none;\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    const t = getTranslations(this.language);\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\", t.ariaLabelModal);\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\", t.ariaLabelClose);\n      closeBtn.innerHTML = `\n        <svg class=\"${CSS_CLASSES.closeIconLegacy}\" 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        <svg class=\"${CSS_CLASSES.closeIcon}\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\">\n          <path d=\"M7 7.03882L17 16.9611\" />\n          <path d=\"M7.03968 17L16.9619 7\" />\n        </svg>\n      `;\n      closeBtn.addEventListener(\"click\", () => this.handleCloseRequest(closeBtn));\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\", IFRAME_ALLOW);\n    this.iframe.setAttribute(\"title\", t.ariaLabelModal);\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}\" role=\"dialog\" aria-modal=\"true\" tabindex=\"-1\"\n        aria-labelledby=\"${this.modalId}-exit-title\" aria-describedby=\"${this.modalId}-exit-message\">\n        <h3 id=\"${this.modalId}-exit-title\">${t.exitTitle}</h3>\n        <p id=\"${this.modalId}-exit-message\">${t.exitMessage}</p>\n        <div class=\"didit-confirm-actions\">\n          <button type=\"button\" data-action=\"continue\">${t.continueButton}</button>\n          <button type=\"button\" data-action=\"exit\">${t.exitButton}</button>\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\", IFRAME_ALLOW);\n    this.iframe.setAttribute(\"title\", getTranslations(this.language).ariaLabelModal);\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    // Idempotent: open() calls this every time it presents the modal, but a\n    // modal that was already open (or re-opened without an intervening\n    // close()) must not accumulate duplicate listeners.\n    if (this.boundHandleMessage || this.boundHandleKeydown) {\n      return;\n    }\n\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    this.boundHandleFocusChange = () => {\n      if (!this.state.showConfirmation || !this.isTopmost()) return;\n      // An iframe can take focus without a focusin event in its parent document.\n      // Wait until its focus transition finishes before moving focus back.\n      if (this.confirmationFocusTimeout !== null) window.clearTimeout(this.confirmationFocusTimeout);\n      this.confirmationFocusTimeout = window.setTimeout(() => {\n        this.confirmationFocusTimeout = null;\n        if (this.state.showConfirmation && this.isTopmost() && !this.confirmOverlay?.contains(document.activeElement)) {\n          this.focusConfirmation();\n        }\n      }, 0);\n    };\n    document.addEventListener(\"focusin\", this.boundHandleFocusChange);\n    document.addEventListener(\"focusout\", this.boundHandleFocusChange);\n    window.addEventListener(\"blur\", this.boundHandleFocusChange);\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    if (this.boundHandleFocusChange) {\n      document.removeEventListener(\"focusin\", this.boundHandleFocusChange);\n      document.removeEventListener(\"focusout\", this.boundHandleFocusChange);\n      window.removeEventListener(\"blur\", this.boundHandleFocusChange);\n      this.boundHandleFocusChange = null;\n    }\n  }\n\n  private pushToTop(): void {\n    const modals = VerificationModal.openModals;\n    const existingIndex = modals.indexOf(this);\n    if (existingIndex !== -1) {\n      modals.splice(existingIndex, 1);\n    }\n    modals.push(this);\n  }\n\n  private removeFromStack(): void {\n    const modals = VerificationModal.openModals;\n    const existingIndex = modals.indexOf(this);\n    if (existingIndex !== -1) {\n      modals.splice(existingIndex, 1);\n    }\n  }\n\n  private isTopmost(): boolean {\n    const modals = VerificationModal.openModals;\n    return modals.length > 0 && modals[modals.length - 1] === this;\n  }\n\n  private handleMessage(event: MessageEvent): void {\n    if (!this.iframe?.src) return;\n    if (!isAllowedOrigin(event.origin, this.iframe.src )) {\n      return SDKLogger.warn(\"Received postMessage from unallowed origin:\", event.origin);\n    }\n\n    // Scope every message to this modal's own iframe. Without this check, a\n    // second VerificationModal open at the same time (e.g. a transaction\n    // action modal stacked over the verification modal) would also react to\n    // postMessages meant for the other iframe.\n    if (!this.iframe || event.source !== this.iframe.contentWindow) {\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    if ((messageData.type as string) === LAYOUT_MESSAGE_TYPE) {\n      const layout = this.readFlowLayout(messageData.data);\n      if (layout) {\n        this.applyFlowLayout(layout);\n      } else {\n        SDKLogger.warn(\"Ignoring a layout message without a positive contentHeight:\", messageData.data);\n      }\n      return;\n    }\n\n    this.callbacks.onMessage(messageData);\n  }\n\n  /**\n   * Reads a didit:layout message's data. Without a positive contentHeight the\n   * message is ignored; a missing or unknown colorScheme follows the device,\n   * and a missing or unknown dir follows the verification URL's language.\n   */\n  private readFlowLayout(data: unknown): FlowLayout | null {\n    const fields = typeof data === \"object\" && data !== null ? (data as Record<string, unknown>) : {};\n    const { contentHeight, colorScheme, dir, kind } = fields;\n    if (typeof contentHeight !== \"number\" || !Number.isFinite(contentHeight) || contentHeight <= 0) {\n      return null;\n    }\n    const prefersDark = window.matchMedia?.(\"(prefers-color-scheme: dark)\").matches ?? false;\n    return {\n      kind: kind === \"handoff\" ? \"handoff\" : \"step\",\n      contentHeight: Math.ceil(contentHeight),\n      colorScheme: colorScheme === \"light\" || colorScheme === \"dark\" ? colorScheme : prefersDark ? \"dark\" : \"light\",\n      dir: dir === \"ltr\" || dir === \"rtl\" ? dir : isRtlLanguage(this.language) ? \"rtl\" : \"ltr\"\n    };\n  }\n\n  /** Embedded mode keeps filling the integrator's host element, whatever the flow reports. */\n  private applyFlowLayout(layout: FlowLayout): void {\n    if (this.embedded || !this.container) return;\n    SDKLogger.log(\"Flow layout:\", layout);\n    this.container.classList.add(CSS_CLASSES.flowSized);\n    this.container.dataset.diditTheme = layout.colorScheme;\n    this.container.dataset.diditDir = layout.dir;\n    // The height the person sees now, before the reported content height can change it.\n    const shownHeight = this.container.offsetHeight;\n    this.container.style.setProperty(\"--didit-content-height\", `${layout.contentHeight}px`);\n    this.matchPageBackground(layout.colorScheme);\n    this.setModalKind(layout.kind, layout.kind === \"handoff\" && this.handoffHeight(layout) === shownHeight);\n  }\n\n  /** Whether the window is a computer-sized one: a phone is full screen and never waits for a layout. */\n  private isPhoneWindow(): boolean {\n    return window.matchMedia?.(\"(max-width: 540px)\").matches ?? false;\n  }\n\n  /** The height the handoff card takes for a layout, as the size rules above compute it (rounded like offsetHeight). */\n  private handoffHeight(layout: FlowLayout): number {\n    const cap = window.innerHeight * 0.9;\n    return Math.round(Math.min(window.innerWidth >= 1000 ? 660 : layout.contentHeight, cap));\n  }\n\n  /**\n   * Sets what the modal is sized for. Leaving \"pending\" shows the modal at its final size with no\n   * transition; any later change animates once.\n   */\n  private setModalKind(kind: ModalKind, sizeUnchanged = false): void {\n    if (!this.container) return;\n    const previous = this.container.dataset.diditKind;\n    if (previous === kind) return;\n    if (this.firstLayoutTimeout !== null && kind !== \"pending\") {\n      window.clearTimeout(this.firstLayoutTimeout);\n      this.firstLayoutTimeout = null;\n    }\n    // Every change of kind animates, the pending card included (it is on screen), and only for the\n    // length of the change, so resizing the window never lags behind.\n    // Pending already is the handoff card: a handoff first layout of the same size moves nothing,\n    // while a different reported height (a narrow window) animates the correction once.\n    const staysPut = previous === \"pending\" && kind === \"handoff\" && sizeUnchanged;\n    if (previous !== undefined && !staysPut) this.animateSizeOnce();\n    this.container.dataset.diditKind = kind;\n    // The final size is in place before the loader goes; a flow still loading keeps its loader.\n    if (previous === \"pending\" && !this.state.isLoading) this.loadingEl?.classList.add(\"hidden\");\n  }\n\n  private animateSizeOnce(): void {\n    this.container?.classList.add(CSS_CLASSES.sizeAnimated);\n    if (this.sizeTimeout !== null) window.clearTimeout(this.sizeTimeout);\n    this.sizeTimeout = window.setTimeout(() => {\n      this.sizeTimeout = null;\n      this.container?.classList.remove(CSS_CLASSES.sizeAnimated);\n    }, SIZE_ANIMATION_MS);\n  }\n\n  /** A flow that reports no layout (an older one) still shows, at step size, after a short wait. */\n  private waitForFirstLayout(): void {\n    if (!this.container) return;\n    // The card looks like the first screen from the first frame, in the device's theme.\n    this.container.classList.add(CSS_CLASSES.flowSized);\n    this.container.dataset.diditTheme = window.matchMedia?.(\"(prefers-color-scheme: dark)\").matches ? \"dark\" : \"light\";\n    this.setModalKind(\"pending\");\n    this.firstLayoutTimeout = window.setTimeout(() => {\n      this.firstLayoutTimeout = null;\n      // A flow that never reported is an older one that paints itself: no card look around it.\n      this.container?.classList.remove(CSS_CLASSES.flowSized);\n      delete this.container?.dataset.diditTheme;\n      this.setModalKind(\"step\");\n    }, FIRST_LAYOUT_TIMEOUT_MS);\n  }\n\n  /**\n   * On a phone Safari paints the bottom edge of the screen with the page's own background, past\n   * any fixed overlay, and shows it when the keyboard moves the page. A full-screen modal lends\n   * the page its ground colour while it is open, so no strip of the host page shows around it.\n   */\n  private matchPageBackground(colorScheme: FlowLayout[\"colorScheme\"]): void {\n    if (!window.matchMedia?.(\"(max-width: 540px)\").matches) return;\n    const root = document.documentElement;\n    this.pageBackground ??= { root: root.style.backgroundColor, body: document.body.style.backgroundColor };\n    const ground = colorScheme === \"dark\" ? \"#0b0b0d\" : \"#ffffff\";\n    root.style.backgroundColor = ground;\n    document.body.style.backgroundColor = ground;\n  }\n\n  private restorePageBackground(): void {\n    if (!this.pageBackground) return;\n    document.documentElement.style.backgroundColor = this.pageBackground.root;\n    document.body.style.backgroundColor = this.pageBackground.body;\n    this.pageBackground = null;\n  }\n\n  /** Back to the neutral look until the newly loaded flow reports its theme and direction. */\n  private resetFlowLayout(): void {\n    if (this.embedded || !this.container) return;\n    this.restorePageBackground();\n    this.container.classList.remove(CSS_CLASSES.flowSized, CSS_CLASSES.sizeAnimated);\n    delete this.container.dataset.diditTheme;\n    delete this.container.dataset.diditDir;\n    delete this.container.dataset.diditKind;\n    this.container.style.removeProperty(\"--didit-content-height\");\n    if (this.firstLayoutTimeout !== null) {\n      window.clearTimeout(this.firstLayoutTimeout);\n      this.firstLayoutTimeout = null;\n    }\n    if (this.sizeTimeout !== null) {\n      window.clearTimeout(this.sizeTimeout);\n      this.sizeTimeout = null;\n    }\n  }\n\n  private handleKeydown(event: KeyboardEvent): void {\n    if (!this.state.isOpen) return;\n\n    // When multiple modals are open at once, only the topmost one should\n    // react to a keypress aimed at it (e.g. Escape closing a stacked\n    // transaction action modal must not also trigger the exit confirmation\n    // of the verification modal underneath it).\n    if (!this.isTopmost()) return;\n\n    if (event.key === \"Tab\" && this.state.showConfirmation) {\n      const buttons = Array.from(this.confirmOverlay?.querySelectorAll<HTMLButtonElement>(\"button\") ?? []);\n      if (buttons.length) {\n        event.preventDefault();\n        const current = buttons.findIndex((button) => button === document.activeElement);\n        const next = event.shiftKey\n          ? (current <= 0 ? buttons.length - 1 : current - 1)\n          : (current + 1) % buttons.length;\n        buttons[next].focus();\n      }\n      return;\n    }\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      // A modal still waiting for its first layout keeps the loader over the hidden flow.\n      if (this.container?.dataset.diditKind !== \"pending\") this.loadingEl?.classList.add(\"hidden\");\n      this.callbacks.onIframeLoad();\n    }\n  }\n\n  private handleCloseRequest(trigger?: HTMLElement): void {\n    if (this.config.showExitConfirmation) {\n      this.showConfirmation(trigger);\n    } else {\n      this.callbacks.onCloseConfirmed();\n    }\n  }\n\n  private showConfirmation(trigger?: HTMLElement): void {\n    if (!this.confirmOverlay || this.state.showConfirmation) return;\n    const activeElement = document.activeElement;\n    this.confirmationTrigger = trigger ?? (activeElement instanceof HTMLElement && activeElement !== document.body\n      ? activeElement\n      : this.container?.querySelector<HTMLButtonElement>(`.${CSS_CLASSES.closeButton}`) ?? this.iframe);\n    this.state.showConfirmation = true;\n    this.confirmOverlay.classList.add(\"active\");\n    if (this.iframe) this.iframe.inert = true;\n    const close = this.container?.querySelector<HTMLButtonElement>(`.${CSS_CLASSES.closeButton}`);\n    if (close) close.inert = true;\n    // A confirmation scrolled at a large text size opens again at its title.\n    this.confirmOverlay.scrollTop = 0;\n    if (this.isTopmost()) this.focusConfirmation();\n    this.callbacks.onClose();\n  }\n\n  private focusConfirmation(): void {\n    this.confirmOverlay?.querySelector<HTMLDivElement>(`.${CSS_CLASSES.confirmBox}`)?.focus({ preventScroll: true });\n  }\n\n  private hideConfirmation(restoreFocus = true): void {\n    if (this.confirmationFocusTimeout !== null) {\n      window.clearTimeout(this.confirmationFocusTimeout);\n      this.confirmationFocusTimeout = null;\n    }\n    if (!this.state.showConfirmation) return;\n    this.state.showConfirmation = false;\n    this.confirmOverlay?.classList.remove(\"active\");\n    if (this.iframe) this.iframe.inert = false;\n    const close = this.container?.querySelector<HTMLButtonElement>(`.${CSS_CLASSES.closeButton}`);\n    if (close) close.inert = false;\n    const trigger = this.confirmationTrigger;\n    this.confirmationTrigger = null;\n    if (restoreFocus && this.isTopmost() && trigger?.isConnected) {\n      if (trigger === this.iframe) {\n        // Firefox needs a browser task to reactivate an inert cross-origin frame.\n        this.confirmationFocusTimeout = window.setTimeout(() => {\n          this.confirmationFocusTimeout = null;\n          if (this.state.isOpen && !this.state.showConfirmation && this.isTopmost() && trigger.isConnected) {\n            trigger.focus({ preventScroll: true });\n          }\n        }, 0);\n      } else {\n        trigger.focus({ preventScroll: true });\n      }\n    }\n  }\n\n  private confirmExit(): void {\n    this.hideConfirmation();\n    this.callbacks.onCloseConfirmed();\n  }\n\n  open(verificationUrl: string): void {\n    // Whether this modal already held its scroll lock before this call. Re-opening\n    // an already-open instance must not re-capture previousBodyOverflow, or it\n    // would record this modal's own \"hidden\" lock and close() could never restore\n    // the real pre-lock value.\n    const wasAlreadyOpen = this.state.isOpen;\n\n    this.language = detectLanguageFromUrl(verificationUrl);\n\n    if (!this.overlay && !this.container) {\n      this.createDOM();\n    }\n    // Re-attach listeners every open() (idempotent) since close() now tears\n    // them down; this lets the same instance be re-opened without a\n    // destroy()/re-create cycle.\n    this.setupEventListeners();\n\n    SDKLogger.log(\"Opening with URL:\", verificationUrl);\n\n    this.state.isLoading = true;\n    this.hideConfirmation();\n    this.loadingEl?.classList.remove(\"hidden\");\n    this.resetFlowLayout();\n    if (!this.embedded && !this.isPhoneWindow()) this.waitForFirstLayout();\n\n    if (this.iframe) {\n      this.iframe.src = verificationUrl;\n    }\n\n    this.state.isOpen = true;\n    this.pushToTop();\n\n    if (this.embedded) {\n      return;\n    }\n\n    this.overlay?.classList.add(\"active\");\n    // Capture whatever overflow value is currently in effect (which may\n    // already be \"hidden\" because another modal is open) so close() can\n    // restore exactly that value instead of clobbering a scroll lock owned\n    // by a concurrently open modal. Skip the capture on a re-open: the value\n    // in effect is this modal's own lock, and previousBodyOverflow already\n    // holds the correct pre-lock value.\n    if (!wasAlreadyOpen) {\n      this.previousBodyOverflow = document.body.style.overflow;\n    }\n    document.body.style.overflow = \"hidden\";\n  }\n\n  close(): void {\n    SDKLogger.log(\"Closing\");\n\n    this.hideConfirmation(false);\n    this.state.isOpen = false;\n    this.state.isLoading = true;\n    this.state.showConfirmation = false;\n    this.removeFromStack();\n    this.removeEventListeners();\n    this.resetFlowLayout();\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 = this.previousBodyOverflow ?? \"\";\n    this.previousBodyOverflow = null;\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  DiditTransactionDetails,\n  DiditTransactionParticipant,\n  DiditTransactionPayload,\n  DiditTravelRuleDetails,\n  SubmitTransactionResult,\n  TransactionActionRequired,\n  TransactionErrorType\n} from \"./types\";\n\nimport { buildFingerprintHeaders, getDeviceFingerprintPayload } from \"@didit-protocol/signals\";\n\nexport const DEFAULT_TRANSACTION_BASE_URL = \"https://verification.didit.me\";\n\nconst ACTION_POLL_INTERVAL_MS = 1500;\nconst ACTION_POLL_MAX_ATTEMPTS = 10;\n\nconst TRANSACTION_ERROR_MESSAGES: Record<TransactionErrorType, string> = {\n  invalid_token: \"The transaction token is invalid.\",\n  expired_token: \"The transaction token has expired.\",\n  validation: \"The transaction payload failed validation.\",\n  network: \"A network error occurred while contacting the Didit API.\"\n};\n\n/**\n * Typed error thrown by DiditSdk.submitTransaction.\n *\n * - \"invalid_token\": the X-Transaction-Token was rejected (missing, revoked, over max uses)\n * - \"expired_token\": the transaction token TTL has elapsed\n * - \"validation\": the payload failed validation; see fieldErrors for per-field details\n * - \"network\": the request could not complete or the API returned an unexpected error\n */\nexport class DiditTransactionError extends Error {\n  public readonly type: TransactionErrorType;\n  public readonly status?: number;\n  public readonly fieldErrors?: Record<string, unknown>;\n\n  constructor(\n    type: TransactionErrorType,\n    message?: string,\n    options?: { status?: number; fieldErrors?: Record<string, unknown> }\n  ) {\n    super(message || TRANSACTION_ERROR_MESSAGES[type]);\n    this.name = \"DiditTransactionError\";\n    this.type = type;\n    this.status = options?.status;\n    this.fieldErrors = options?.fieldErrors;\n  }\n}\n\nfunction isPlainRecord(value: unknown): value is Record<string, unknown> {\n  return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction compact(record: Record<string, unknown>): Record<string, unknown> {\n  const result: Record<string, unknown> = {};\n  for (const [key, value] of Object.entries(record)) {\n    if (value !== undefined) result[key] = value;\n  }\n  return result;\n}\n\nfunction mapDetails(details: DiditTransactionDetails): Record<string, unknown> {\n  return compact({\n    direction: details.direction,\n    amount: details.amount,\n    currency: details.currency,\n    currencyType: details.currencyType,\n    amountInDefaultCurrency: details.amountInDefaultCurrency,\n    defaultCurrencyCode: details.defaultCurrencyCode,\n    paymentDetails: details.paymentDetails,\n    paymentTxnId: details.paymentTxnId,\n    type: details.actionType,\n    cryptoParams: details.cryptoParams\n  });\n}\n\nfunction mapParticipant(participant: DiditTransactionParticipant | undefined): Record<string, unknown> | undefined {\n  if (!participant) return undefined;\n  return compact({\n    type: participant.type,\n    externalUserId: participant.externalUserId,\n    fullName: participant.fullName,\n    firstName: participant.firstName,\n    lastName: participant.lastName,\n    dob: participant.dob,\n    address: participant.address,\n    institutionInfo: participant.institutionInfo,\n    device: participant.device,\n    paymentMethod: participant.paymentMethod\n      ? compact({\n          type: participant.paymentMethod.type,\n          accountId: participant.paymentMethod.accountId,\n          issuingCountry: participant.paymentMethod.issuingCountry\n        })\n      : undefined\n  });\n}\n\nfunction mapTravelRule(travelRule: DiditTravelRuleDetails | undefined): Record<string, unknown> | undefined {\n  if (!travelRule) return undefined;\n  return compact({\n    status: travelRule.status,\n    protocol: travelRule.protocol,\n    required: travelRule.required,\n    obligationsCount: travelRule.obligationsCount,\n    originatorData: travelRule.originatorData,\n    beneficiaryData: travelRule.beneficiaryData,\n    metadata: travelRule.metadata\n  });\n}\n\n/**\n * Maps the SDK-friendly camelCase payload onto the wire aliases accepted by the\n * Didit transactions API (txnId, txnDate, zoneId, type, info, subject,\n * counterparty, props, travelRule, includeCryptoScreening).\n */\nexport function buildTransactionRequestBody(transaction: DiditTransactionPayload): Record<string, unknown> {\n  return compact({\n    txnId: transaction.txnId,\n    txnDate: transaction.txnDate,\n    zoneId: transaction.zoneId,\n    type: transaction.category,\n    info: mapDetails(transaction.details),\n    subject: mapParticipant(transaction.subject),\n    counterparty: mapParticipant(transaction.counterparty),\n    props: transaction.customProperties,\n    travelRule: mapTravelRule(transaction.travelRule),\n    includeCryptoScreening: transaction.includeCryptoScreening\n  });\n}\n\nfunction pickString(record: Record<string, unknown>, ...keys: string[]): string | undefined {\n  for (const key of keys) {\n    const value = record[key];\n    if (typeof value === \"string\" && value) return value;\n  }\n  return undefined;\n}\n\nfunction mapActionRequired(raw: unknown): TransactionActionRequired | undefined {\n  if (!isPlainRecord(raw)) return undefined;\n  const type = pickString(raw, \"type\");\n  const url = pickString(raw, \"url\");\n  if (!type || !url) return undefined;\n  const action: TransactionActionRequired = { type, url };\n  const sessionId = pickString(raw, \"session_id\", \"sessionId\");\n  if (sessionId) action.sessionId = sessionId;\n  const sessionToken = pickString(raw, \"session_token\", \"sessionToken\");\n  if (sessionToken) action.sessionToken = sessionToken;\n  const status = pickString(raw, \"status\");\n  if (status) action.status = status;\n  const widgetSessionId = pickString(raw, \"widget_session_id\", \"widgetSessionId\");\n  if (widgetSessionId) action.widgetSessionId = widgetSessionId;\n  const expiresAt = pickString(raw, \"expires_at\", \"expiresAt\");\n  if (expiresAt) action.expiresAt = expiresAt;\n  return action;\n}\n\nfunction mapTravelRuleStatus(raw: Record<string, unknown>): string | undefined {\n  const travelRule = raw.travel_rule ?? raw.travelRule;\n  if (isPlainRecord(travelRule)) {\n    const status = pickString(travelRule, \"status\");\n    if (status) return status;\n  }\n  const props = raw.props;\n  if (isPlainRecord(props)) {\n    const status = pickString(props, \"travel_rule_status\", \"travelRuleStatus\");\n    if (status) return status;\n  }\n  return pickString(raw, \"travel_rule_status\", \"travelRuleStatus\");\n}\n\nexport function mapTransactionResponse(raw: Record<string, unknown>): SubmitTransactionResult {\n  const transactionId = pickString(raw, \"uuid\", \"transaction_id\", \"transactionId\");\n  const status = pickString(raw, \"status\");\n  if (!transactionId || !status) {\n    // A missing id/status is not a valid transaction snapshot: fabricating\n    // empty strings here would let a malformed response (envelope,\n    // intercepting proxy, contract drift) look like a real result to\n    // callers - e.g. the poll's statusMoved early-exit would trigger on an\n    // empty status that merely differs from a real initialStatus.\n    throw new DiditTransactionError(\n      \"network\",\n      \"Unexpected response shape from the Didit API: missing transaction id or status.\"\n    );\n  }\n  const result: SubmitTransactionResult = { transactionId, status };\n  const travelRuleStatus = mapTravelRuleStatus(raw);\n  if (travelRuleStatus) result.travelRuleStatus = travelRuleStatus;\n  const actionRequired = mapActionRequired(raw.action_required ?? raw.actionRequired);\n  if (actionRequired) result.actionRequired = actionRequired;\n  return result;\n}\n\nfunction extractDetailMessage(body: unknown): string | undefined {\n  if (!isPlainRecord(body)) return undefined;\n  return pickString(body, \"detail\", \"message\", \"error\");\n}\n\nexport function classifyTransactionError(status: number, body: unknown): DiditTransactionError {\n  const detail = extractDetailMessage(body);\n  if (status === 401 || status === 403) {\n    const serialized = `${detail ?? \"\"} ${pickString(isPlainRecord(body) ? body : {}, \"code\") ?? \"\"}`;\n    if (/expired/i.test(serialized)) {\n      return new DiditTransactionError(\"expired_token\", detail, { status });\n    }\n    return new DiditTransactionError(\"invalid_token\", detail, { status });\n  }\n  if (status === 400 || status === 422) {\n    return new DiditTransactionError(\"validation\", detail, {\n      status,\n      fieldErrors: isPlainRecord(body) ? body : undefined\n    });\n  }\n  return new DiditTransactionError(\"network\", `Request failed with status ${status}.`, { status });\n}\n\nasync function readJsonBody(response: Response): Promise<unknown> {\n  try {\n    return await response.json();\n  } catch {\n    return null;\n  }\n}\n\nasync function performRequest(url: string, init: RequestInit): Promise<SubmitTransactionResult> {\n  if (typeof fetch !== \"function\") {\n    throw new DiditTransactionError(\"network\", \"fetch is not available in this environment.\");\n  }\n\n  let response: Response;\n  try {\n    response = await fetch(url, init);\n  } catch {\n    throw new DiditTransactionError(\"network\");\n  }\n\n  const body = await readJsonBody(response);\n  if (!response.ok) {\n    throw classifyTransactionError(response.status, body);\n  }\n  if (!isPlainRecord(body)) {\n    throw new DiditTransactionError(\"network\", \"Unexpected empty response from the Didit API.\", {\n      status: response.status\n    });\n  }\n  return mapTransactionResponse(body);\n}\n\nexport interface TransactionRequestArgs {\n  baseUrl: string;\n  transactionToken: string;\n}\n\nexport async function submitTransactionRequest(\n  args: TransactionRequestArgs & { transaction: DiditTransactionPayload }\n): Promise<SubmitTransactionResult> {\n  const fingerprint = await getDeviceFingerprintPayload().catch(() => null);\n  const body = buildTransactionRequestBody(args.transaction);\n  if (fingerprint) {\n    body.fingerprint_v2 = fingerprint;\n  }\n  return performRequest(`${args.baseUrl}/v1/transactions/`, {\n    method: \"POST\",\n    headers: {\n      \"Content-Type\": \"application/json\",\n      \"X-Transaction-Token\": args.transactionToken,\n      ...buildFingerprintHeaders(fingerprint)\n    },\n    body: JSON.stringify(body)\n  });\n}\n\nexport async function fetchTransaction(\n  args: TransactionRequestArgs & { transactionId: string }\n): Promise<SubmitTransactionResult> {\n  return performRequest(`${args.baseUrl}/v1/transactions/${args.transactionId}/`, {\n    method: \"GET\",\n    headers: { \"X-Transaction-Token\": args.transactionToken }\n  });\n}\n\nfunction delay(ms: number): Promise<void> {\n  return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/** Terminal auth failures that will never succeed on retry: keep polling would just burn the token's remaining uses. */\nfunction isTerminalPollError(error: unknown): error is DiditTransactionError {\n  return error instanceof DiditTransactionError && (error.type === \"invalid_token\" || error.type === \"expired_token\");\n}\n\n/**\n * Re-fetches the transaction after an action flow finished or its modal was\n * closed. Polls with a bounded retry (never relies on a single event/attempt)\n * and stops early once the required action is cleared or the status moved on.\n * Returns the latest successfully fetched result, or null when every attempt\n * failed.\n *\n * A terminal auth failure (invalid_token/expired_token - e.g. a maxUses\n * token exhausted by the poll's own GETs, or the token TTL elapsing while\n * the user was in the action flow) aborts immediately instead of retrying:\n * it can never succeed, and each attempt would otherwise still count\n * against the token's use_count server-side. The error is rethrown so the\n * caller can surface it instead of silently returning a stale result.\n *\n * `isAborted` is polled between attempts so a caller that tears down (e.g.\n * DiditSdk.destroy()) can stop the loop from making further network calls.\n */\nexport async function pollTransactionAfterAction(\n  args: TransactionRequestArgs & {\n    transactionId: string;\n    initialStatus?: string;\n    intervalMs?: number;\n    maxAttempts?: number;\n    isAborted?: () => boolean;\n  }\n): Promise<SubmitTransactionResult | null> {\n  const intervalMs = args.intervalMs ?? ACTION_POLL_INTERVAL_MS;\n  const maxAttempts = Math.max(1, args.maxAttempts ?? ACTION_POLL_MAX_ATTEMPTS);\n  let latest: SubmitTransactionResult | null = null;\n\n  for (let attempt = 0; attempt < maxAttempts; attempt++) {\n    if (args.isAborted?.()) return latest;\n    if (attempt > 0) {\n      await delay(intervalMs);\n    }\n    if (args.isAborted?.()) return latest;\n    try {\n      latest = await fetchTransaction(args);\n      const actionResolved = !latest.actionRequired;\n      const statusMoved = args.initialStatus !== undefined && latest.status !== args.initialStatus;\n      if (actionResolved || statusMoved) {\n        return latest;\n      }\n    } catch (error) {\n      if (isTerminalPollError(error)) {\n        throw error;\n      }\n      // Transient failure; keep polling until the bound is reached.\n    }\n  }\n  return latest;\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  SubmitTransactionOptions,\n  SubmitTransactionResult,\n  TransactionActionCompletedCallback,\n  TransactionActionCompletedError\n} from \"./types\";\nimport type { SubmitEventOptions } from \"@didit-protocol/signals\";\n\nimport { submitEvent } from \"@didit-protocol/signals\";\nimport { VerificationModal } from \"./modal\";\nimport { DEFAULT_CONFIG } from \"./constants\";\nimport { SDKLogger, buildVerificationUrl, createVerificationError } from \"./utils\";\nimport {\n  DEFAULT_TRANSACTION_BASE_URL,\n  DiditTransactionError,\n  pollTransactionAfterAction,\n  submitTransactionRequest\n} from \"./transactions\";\n\ntype TransactionActionOutcome = \"finished\" | \"aborted\";\n\n/**\n * Embedded mode renders inside an element that already exists on the\n * integrator's page. Without it the modal never shows anything (embedded mode\n * never activates the overlay), so the launch fails with a message the\n * integrator can act on instead of silently presenting nothing.\n */\nfunction assertEmbeddedHostExists(configuration: DiditSdkConfiguration | undefined): void {\n  if (!configuration?.embedded) return;\n  const containerId = configuration.embeddedContainerId;\n  if (!containerId) {\n    throw new Error(\"Embedded mode requires embeddedContainerId: the id of the element that hosts the verification.\");\n  }\n  if (typeof document === \"undefined\" || !document.getElementById(containerId)) {\n    throw new Error(`Embedded container \"#${containerId}\" was not found in the page.`);\n  }\n}\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  private _actionModal: VerificationModal | null = null;\n  private _actionModalSettle: ((outcome: TransactionActionOutcome) => void) | null = null;\n  /**\n   * Bumped by destroy() to invalidate any transaction action in flight\n   * (pending action modal and/or its follow-up poll) so a torn-down SDK\n   * instance can never deliver a late onActionCompleted. A new\n   * submitTransaction call always reads the current generation, so it is\n   * unaffected by a destroy() that happened before it started.\n   */\n  private _actionGeneration = 0;\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  /**\n   * True while a transaction's wallet-ownership action modal (auto-launched\n   * by submitTransaction) is on screen. verification_session actions are\n   * never auto-launched, so they never affect this flag - see\n   * {@link submitTransaction}. Tracked separately from {@link isPresented},\n   * which reflects the verification modal only.\n   */\n  public get isActionModalPresented(): boolean {\n    return this._actionModal?.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    // A new launch is not in an error state any more, whatever the last one did.\n    this._errorMessage = undefined;\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      assertEmbeddedHostExists(config);\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      this._url = buildVerificationUrl(url, config);\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  /**\n   * Submits a transaction (including travel-rule and crypto-monitoring payloads)\n   * directly from the end-user device.\n   *\n   * The request is authenticated with a short-lived transaction token minted by\n   * your backend (POST /v3/transactions/sdk-token/) and sent via the\n   * X-Transaction-Token header. Device intelligence is attached automatically:\n   * the SDK collects a didit-fp-v2 fingerprint and sends it as the X-Didit-PID /\n   * X-Didit-FP-Hash headers plus a `fingerprint_v2` body field.\n   *\n   * When the response contains an `actionRequired` block, the contract differs\n   * by type:\n   * - `wallet_ownership` (a same-origin, Didit-hosted widget): when\n   *   `autoLaunchAction` is not false, the SDK opens the action URL in the\n   *   verification modal itself. Once the flow completes or the modal is\n   *   closed, the transaction is re-fetched with a bounded poll (never a\n   *   single event) and `onActionCompleted` is invoked with the refreshed\n   *   result.\n   * - `verification_session` (a biometric verification session): never\n   *   auto-launched, regardless of `autoLaunchAction`. It is only ever\n   *   returned in `result.actionRequired` for the host application to launch\n   *   with its own verification integration (e.g. `startVerification`).\n   *\n   * @param options Submission options: transactionToken, transaction payload,\n   * optional baseUrl (defaults to https://verification.didit.me),\n   * autoLaunchAction (defaults to true, applies to wallet_ownership actions\n   * only) and onActionCompleted callback.\n   * @returns The created transaction: transactionId, status, travelRuleStatus\n   * and actionRequired when a user action is pending.\n   * @throws {DiditTransactionError} Typed as \"invalid_token\", \"expired_token\",\n   * \"validation\" (with fieldErrors) or \"network\".\n   */\n  public async submitTransaction(options: SubmitTransactionOptions): Promise<SubmitTransactionResult> {\n    if (!options?.transactionToken || typeof options.transactionToken !== \"string\") {\n      throw new DiditTransactionError(\"invalid_token\", \"transactionToken is required.\");\n    }\n    if (!options.transaction || typeof options.transaction !== \"object\") {\n      throw new DiditTransactionError(\"validation\", \"transaction payload is required.\");\n    }\n    if (!options.transaction.txnId || typeof options.transaction.txnId !== \"string\") {\n      throw new DiditTransactionError(\"validation\", \"transaction.txnId is required.\");\n    }\n    if (!options.transaction.details || typeof options.transaction.details !== \"object\") {\n      throw new DiditTransactionError(\"validation\", \"transaction.details is required.\");\n    }\n\n    const baseUrl = (options.baseUrl ?? DEFAULT_TRANSACTION_BASE_URL).replace(/\\/+$/, \"\");\n    SDKLogger.log(\"Submitting transaction:\", options.transaction.txnId);\n\n    const result = await submitTransactionRequest({\n      baseUrl,\n      transactionToken: options.transactionToken,\n      transaction: options.transaction\n    });\n\n    SDKLogger.log(\"Transaction submitted:\", result);\n\n    // Only wallet_ownership is a same-origin, Didit-hosted widget that is\n    // safe for the SDK to open on the integrator's behalf. verification_session\n    // is never auto-launched: it is already returned in result.actionRequired\n    // above for the host to launch with its own verification integration.\n    const autoLaunchAction = options.autoLaunchAction ?? true;\n    if (autoLaunchAction && result.actionRequired?.type === \"wallet_ownership\" && result.actionRequired.url) {\n      void this.runTransactionAction(baseUrl, options.transactionToken, result, options.onActionCompleted);\n    }\n\n    return result;\n  }\n\n  /**\n   * Queues an end-user event (sign-up, login, failed login, logout, password\n   * reset, MFA, device change...) for Didit's event monitoring, so it appears\n   * in the console tied to the same person as their verifications and\n   * transactions. Returns the event id.\n   *\n   * The request is authenticated with a short-lived monitoring token minted by\n   * your backend for that person (POST /v3/events/sdk-token/) and sent via the\n   * X-Monitoring-Token header; the person always comes from the token. Events\n   * are batched to /v1/events/batch/ with the device fingerprint attached, and\n   * sent when 25 are waiting, every 5 seconds and when the page is hidden or\n   * closed. Tune the queue with `configureEvents` and send right away with\n   * `flush`, both exported by this package.\n   *\n   * @param options monitoringToken, the event and an optional baseUrl\n   * (defaults to https://verification.didit.me).\n   * @returns The event id: yours when you set event.eventId, otherwise a new UUID.\n   * @throws {DiditEventError} \"invalid_token\" without a monitoringToken,\n   * \"validation\" without an event category and action type.\n   */\n  public submitEvent(options: SubmitEventOptions): string {\n    SDKLogger.log(\"Submitting event:\", options?.event?.category, options?.event?.actionType);\n    return submitEvent(options);\n  }\n\n  /**\n   * Dismisses everything currently on screen in one deterministic call: a\n   * pending transaction action modal is treated as an abort (no follow-up\n   * poll, no onActionCompleted) and the verification modal is always closed\n   * afterwards, regardless of whether an action modal was present.\n   */\n  public close(): void {\n    SDKLogger.log(\"Closing verification programmatically\");\n    this._actionModalSettle?.(\"aborted\");\n    this.handleModalCloseConfirmed();\n  }\n\n  public destroy(): void {\n    SDKLogger.log(\"Destroying SDK instance\");\n    // Invalidate any transaction action in flight so a poll that is already\n    // running cannot deliver onActionCompleted after teardown.\n    this._actionGeneration++;\n    this._actionModalSettle?.(\"aborted\");\n    this._modal?.destroy();\n    this._modal = null;\n    this.reset();\n    this.setState(\"idle\");\n  }\n\n  private async runTransactionAction(\n    baseUrl: string,\n    transactionToken: string,\n    submitResult: SubmitTransactionResult,\n    onActionCompleted: TransactionActionCompletedCallback | undefined\n  ): Promise<void> {\n    const generation = this._actionGeneration;\n    let delivered = false;\n\n    // Guarantees at-most-once delivery: a throwing integrator callback must\n    // not be re-invoked by a surrounding catch, and a destroy() that\n    // happened while we were awaiting the modal/poll must suppress delivery\n    // entirely rather than calling back into a torn-down integration.\n    const deliver = (result: SubmitTransactionResult, error?: TransactionActionCompletedError): void => {\n      if (delivered || generation !== this._actionGeneration) return;\n      delivered = true;\n      try {\n        onActionCompleted?.(result, error);\n      } catch (callbackError) {\n        SDKLogger.error(\"onActionCompleted callback threw:\", callbackError);\n      }\n    };\n\n    try {\n      const outcome = await this.presentTransactionActionModal(submitResult.actionRequired!.url);\n      if (outcome === \"aborted\" || generation !== this._actionGeneration) {\n        return;\n      }\n      if (!submitResult.transactionId) {\n        deliver(submitResult);\n        return;\n      }\n\n      let refreshed: SubmitTransactionResult | null = null;\n      let pollError: DiditTransactionError | undefined;\n      try {\n        refreshed = await pollTransactionAfterAction({\n          baseUrl,\n          transactionToken,\n          transactionId: submitResult.transactionId,\n          initialStatus: submitResult.status,\n          isAborted: () => generation !== this._actionGeneration\n        });\n      } catch (error) {\n        if (error instanceof DiditTransactionError) {\n          pollError = error;\n        } else {\n          throw error;\n        }\n      }\n\n      if (pollError) {\n        // Terminal auth failure (invalid_token/expired_token): surface it\n        // instead of silently handing back the stale pre-action result.\n        deliver(submitResult, { type: pollError.type, message: pollError.message });\n        return;\n      }\n      deliver(refreshed ?? submitResult);\n    } catch (error) {\n      SDKLogger.error(\"Transaction action follow-up failed:\", error);\n      deliver(submitResult);\n    }\n  }\n\n  private presentTransactionActionModal(url: string): Promise<TransactionActionOutcome> {\n    // Abort any previous action modal before opening a new one.\n    this._actionModalSettle?.(\"aborted\");\n\n    return new Promise<TransactionActionOutcome>((resolve) => {\n      let settled = false;\n      const settle = (outcome: TransactionActionOutcome): void => {\n        if (settled) return;\n        settled = true;\n        const modal = this._actionModal;\n        this._actionModal = null;\n        this._actionModalSettle = null;\n        modal?.destroy();\n        resolve(outcome);\n      };\n\n      // this._actionModalSettle is assigned only after the modal is\n      // successfully constructed and opened. If either throws (e.g. no\n      // `document` in Node/SSR, or document.body not ready yet), the\n      // settle callback must not be left dangling: a later close() would\n      // otherwise find a stale this._actionModalSettle for a modal that\n      // was never presented, \"settle\" it, and return early without ever\n      // closing the actual verification modal.\n      let modal: VerificationModal;\n      try {\n        modal = new VerificationModal(undefined, {\n          onClose: () => {},\n          onCloseConfirmed: () => settle(\"finished\"),\n          onMessage: (event) => {\n            this.onEvent?.(event);\n            if (event.type === \"didit:completed\" || event.type === \"didit:cancelled\") {\n              settle(\"finished\");\n            }\n          },\n          onIframeLoad: () => {}\n        });\n\n        SDKLogger.log(\"Launching required transaction action:\", url);\n        modal.open(url);\n      } catch (error) {\n        this._actionModal = null;\n        this._actionModalSettle = null;\n        throw error;\n      }\n\n      this._actionModal = modal;\n      this._actionModalSettle = settle;\n    });\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    this.setState(\"idle\");\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    // Keep the session the flow told us about so a modal the user closes by\n    // hand still reports the session it belongs to in the cancelled result.\n    if (event.data?.sessionId) {\n      this._sessionId = event.data.sessionId;\n    }\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      this.setState(\"idle\");\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    this.setState(\"idle\");\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._modal?.close();\n    this._modal = null;\n    // Clear what the failed launch left behind, then report the error as the\n    // state the SDK is in: reset() alone would leave callers reading \"idle\"\n    // with no error message right after onStateChange(\"error\").\n    this.reset();\n    this._errorMessage = verificationError.message;\n    this.setState(\"error\");\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._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":["getDeviceFingerprintPayload","buildFingerprintHeaders","submitEvent"],"mappings":"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"}