@zippypay/checkout 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +270 -0
- package/dist/index.cjs +951 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +265 -0
- package/dist/index.d.ts +265 -0
- package/dist/index.min.js +951 -0
- package/dist/index.min.js.map +1 -0
- package/dist/index.mjs +951 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +69 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/types.ts","../src/config/environments.ts","../src/utils.ts","../src/api/client.ts","../src/theme/index.ts","../src/embed/host.ts","../src/session/poller.ts","../../../node_modules/qrcode-generator/dist/qrcode.mjs","../src/qr/zippy-logo.ts","../src/qr/render-qr.ts","../src/session/timing.ts","../src/ui/checkout-ui.ts","../src/checkout-controller.ts","../src/element/zippy-pay-checkout.ts","../src/index.ts"],"names":["TERMINAL_STATUSES","POLLABLE_STATUSES","ZippyPayError","problem","detail","ZIPPY_API_BASE_URLS","ZIPPY_API_PATH_PREFIX","isZippyEnvironment","value","resolveApiBaseUrl","environment","parseZippyEnvironment","normalized","PAYMENT_ID_PATTERN","normalizePaymentId","isValidPaymentId","paymentIdValidationMessage","isUuidV4","CURRENCY_LOCALES","formatAmount","amount","currency","parsed","locale","TERMINAL_EXIT_COUNTDOWN_SEC","terminalExitLeadText","exitMode","embedMode","outcome","outcomeTerminalCopy","phase","formatCountdown","ms","totalSec","min","sec","formatDisplayInitials","displayName","parts","resolveContainer","container","element","normalizeBaseUrl","baseUrl","appendRedirectQueryParams","url","params","isAbsolute","base","key","PaymentSessionClient","config","paymentId","method","path","body","response","attachPayerWithRetry","client","error","session","DEFAULT_THEME","DARK_THEME_OVERRIDES","resolveTheme","theme","merged","prefersDark","effectiveMode","applyThemeToHost","host","resolved","DM_SANS_IMPORT","CHECKOUT_STYLES","MODAL_STYLES","createEmbedHost","createModalHost","overlay","style","panel","event","embedHost","showModal","embed","onClose","hideModal","SessionPoller","fetchSession","options","initialSession","hidden","isTerminalStatus","status","phaseFromSession","qrcode","typeNumber","errorCorrectionLevel","_typeNumber","_errorCorrectionLevel","QRErrorCorrectionLevel","_modules","_moduleCount","_dataCache","_dataList","_this","makeImpl","test","maskPattern","moduleCount","modules","row","col","setupPositionProbePattern","setupPositionAdjustPattern","setupTimingPattern","setupTypeInfo","setupTypeNumber","createData","mapData","r","c","getBestMaskPattern","minLostPoint","pattern","i","lostPoint","QRUtil","pos","j","bits","mod","data","inc","bitIndex","byteIndex","maskFunc","dark","createBytes","buffer","rsBlocks","offset","maxDcCount","maxEcCount","dcdata","ecdata","dcCount","ecCount","rsPoly","modPoly","qrPolynomial","modIndex","totalCodeCount","index","dataList","QRRSBlock","qrBitBuffer","totalDataCount","mode","newData","qrNumber","qrAlphaNum","qr8BitByte","qrKanji","cellSize","margin","qrHtml","alt","title","opts","size","mc","mr","qrSvg","rect","escapeXml","max","createDataURL","y","img","s","escaped","_createHalfASCII","x","r1","r2","p","blocks","blocksLastLineNoMargin","ascii","white","black","line","context","length","bytes","unicodeData","numChars","unicodeMap","bin","base64DecodeInputStream","read","b","count","b0","b1","b2","b3","k","v","unknownChar","QRMode","QRMaskPattern","PATTERN_POSITION_TABLE","G15","G18","G15_MASK","getBCHDigit","digit","d","errorCorrectLength","a","QRMath","type","sameCount","darkCount","ratio","EXP_TABLE","LOG_TABLE","n","num","shift","_num","e","RS_BLOCK_TABLE","qrRSBlock","totalCount","dataCount","getRsBlockTable","rsBlock","list","_buffer","_length","bufIndex","bit","_mode","_data","strToNum","chatToNum","getCode","_bytes","stringToBytes","code","byteArrayOutputStream","off","len","base64EncodeOutputStream","_buflen","_base64","writeEncoded","encode","padlen","str","_str","_pos","decode","gifImage","width","height","_width","_height","pixel","out","lzwMinCodeSize","raster","getLZWRaster","bitOutputStream","_out","_bitLength","_bitBuffer","clearCode","endCode","bitLength","table","lzwTable","byteOut","bitOut","dataIndex","_map","_size","getPixel","gif","base64","qrcode_default","ZIPPY_BRAND_COLOR","Z_MARK_VIEW_BOX","Z_MARK_PATH","parseViewBoxSize","svg","match","buildLogoBadge","qrSize","badge","plate","plateOffset","markInset","embedLogoInQrSvg","renderSecureLockSvg","MERCHANT_PAYMENT_DEEP_LINK_PATH","buildPaymentQrPayload","sessionId","renderQrSvg","payload","errorCorrection","qr","renderPaymentQrSvg","renderBrandedPaymentQrSvg","renderPaymentQrMarkup","getCountdownTarget","PAY_PROGRESS_PHASES","NO_PROGRESS_PHASES","shouldShowPayProgress","msUntil","getPayWindowRemainingRatio","expiresAt","end","start","total","getSoftIdleHint","iso","CheckoutUi","initialState","callbacks","extraStyles","partial","next","prev","state","active","focus","focusState","errorMessage","loading","verifiedPayer","committedMethod","isTerminal","showPayProgress","isQrPayFlow","mount","subtitle","header","business","sub","footer","inner","secure","divider","brand","wrap","icon","spinner","card","copy","description","isAwaiting","qrWrap","frame","slot","timer","label","form","field","input","verifyBtn","payBtn","isVerifiedForInput","syncActionState","trimmed","verified","isVerifying","existingSpinner","renderVerifiedCheckSvg","message","payer","identity","avatar","name","handle","initials","profileImage","steps","guide","text","item","bar","fill","tick","pct","countdownEl","remaining","updateDisplay","footnote","kind","titleText","detailText","transactionId","resolvedExitMode","exit","lead","countdown","suffix","CheckoutController","shouldSync","uiMethodFromApi","terminalSessionError","failureUrl","redirectUrl","reason","normalizeError","normalizeAttachId","fallbackPhase","formatFlowErrorMessage","createCheckout","ELEMENT_TAG","THEME_ATTRIBUTE_MAP","ZippyPayCheckoutElement","environmentAttr","clientToken","attr","defineZippyPayCheckoutElement","ZippyPay","instance","index_default"],"mappings":"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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AA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","file":"index.min.js","sourcesContent":["export type PaymentSessionStatus =\n | 'CREATED'\n | 'AWAITING_PAYMENT'\n | 'COMPLETED'\n | 'EXPIRED'\n | 'CANCELLED'\n | 'FAILED';\n\nexport type PaymentSessionPhase = 'IDLE' | 'PAYING';\n\n/** Server checkout method — locks after checkout start. */\nexport type ApiCheckoutMethod = 'QR' | 'MANUAL';\n\nexport type PaymentSessionPayer = {\n paymentId: string;\n displayName: string;\n profileImage: string | null;\n};\n\nexport type PaymentSession = {\n sessionId: string;\n amount: string;\n currency: 'USD';\n status: PaymentSessionStatus;\n successUrl: string | null;\n failureUrl: string | null;\n businessName: string;\n transactionId: string | null;\n transactionStatus: string | null;\n payer: PaymentSessionPayer | null;\n /** Idle shelf — customer must start checkout before this. */\n expiresAt: string;\n /** Hard max — session + client token expire here. */\n absoluteExpiresAt: string;\n phase: PaymentSessionPhase;\n checkoutMethod: ApiCheckoutMethod | null;\n paymentStartAt: string | null;\n /** Pay window countdown — only meaningful when phase is PAYING. */\n paymentExpiryAt: string | null;\n createdAt: string;\n};\n\nexport type VerifyPayerResponse = PaymentSessionPayer;\n\nexport type ProblemJson = {\n type?: string;\n title?: string;\n status?: number;\n detail?: string;\n instance?: string;\n code?: string;\n correlationId?: string;\n errors?: Record<string, string[]>;\n};\n\nimport type { ZippyEnvironment } from './config/environments';\n\nexport type { ZippyEnvironment };\n\nexport type ZippyTheme = {\n primary?: string;\n primaryForeground?: string;\n background?: string;\n surface?: string;\n text?: string;\n textMuted?: string;\n border?: string;\n error?: string;\n success?: string;\n borderRadius?: string;\n fontFamily?: string;\n mode?: 'light' | 'dark' | 'auto';\n};\n\nexport type EmbedMode = 'inline' | 'modal';\n\nexport type ZippyPayConfig = {\n environment: ZippyEnvironment;\n sessionId: string;\n clientToken: string;\n mode?: EmbedMode;\n container?: HTMLElement | string;\n theme?: ZippyTheme;\n locale?: 'en';\n redirectOnComplete?: boolean;\n redirectOnFailure?: boolean;\n closeOnBackdropClick?: boolean;\n closeOnEscape?: boolean;\n onReady?: (session: PaymentSession) => void;\n onSessionUpdate?: (session: PaymentSession) => void;\n onComplete?: (session: PaymentSession) => void;\n onExpired?: (session: PaymentSession) => void;\n onError?: (error: ZippyPayError) => void;\n onClose?: () => void;\n};\n\nexport type CheckoutMethod = 'qr' | 'manual';\n\nexport type CheckoutPhase =\n | 'loading'\n | 'choose-method'\n | 'qr-active'\n | 'manual-entry'\n | 'manual-confirm'\n | 'awaiting'\n | 'success'\n | 'expired'\n | 'cancelled'\n | 'declined'\n | 'failed'\n | 'error'\n | 'invalid-session';\n\n\nexport const TERMINAL_STATUSES: readonly PaymentSessionStatus[] = [\n 'COMPLETED',\n 'EXPIRED',\n 'CANCELLED',\n 'FAILED',\n] as const;\n\nexport const POLLABLE_STATUSES: readonly PaymentSessionStatus[] = [\n 'CREATED',\n 'AWAITING_PAYMENT',\n] as const;\n\nexport class ZippyPayError extends Error {\n readonly code: string;\n readonly status: number;\n readonly detail: string;\n readonly correlationId?: string;\n\n constructor(problem: ProblemJson) {\n const detail = problem.detail ?? problem.title ?? 'An unexpected error occurred';\n super(detail);\n this.name = 'ZippyPayError';\n this.code = problem.code ?? 'unknown';\n this.status = problem.status ?? 500;\n this.detail = detail;\n this.correlationId = problem.correlationId;\n }\n}\n\nexport type ZippyPayCheckoutInstance = {\n open(): void;\n close(): void;\n destroy(): void;\n};\n","export type ZippyEnvironment = 'production' | 'staging' | 'development';\n\n/** API origin per environment. Paths such as `/api/v1/...` are appended by the SDK client. */\nexport const ZIPPY_API_BASE_URLS: Record<ZippyEnvironment, string> = {\n production: 'https://api.zippypay.io',\n staging: 'https://staging.api.zippypay.io',\n /** Same-origin — local demo proxies `/api/*` to the backend (avoids CORS). */\n development: '',\n};\n\nexport const ZIPPY_API_PATH_PREFIX = '/api/v1';\n\nexport function isZippyEnvironment(value: string): value is ZippyEnvironment {\n return value in ZIPPY_API_BASE_URLS;\n}\n\nexport function resolveApiBaseUrl(environment: ZippyEnvironment): string {\n return ZIPPY_API_BASE_URLS[environment].replace(/\\/+$/, '');\n}\n\nexport function parseZippyEnvironment(value: string): ZippyEnvironment {\n const normalized = value.trim().toLowerCase();\n if (!isZippyEnvironment(normalized)) {\n throw new Error(\n `Zippy Pay: invalid environment \"${value}\". Expected one of: ${Object.keys(ZIPPY_API_BASE_URLS).join(', ')}.`,\n );\n }\n return normalized;\n}\n","import type { CheckoutPhase } from './types';\n\n/** Personal Zippy handles: 3–20 chars, optional single dot, no leading/trailing dot. */\nexport const PAYMENT_ID_PATTERN = /^(?=.{3,20}$)[a-z0-9]+(?:\\.[a-z0-9]+)?$/;\n\nexport function normalizePaymentId(value: string): string {\n return value.trim().toLowerCase();\n}\n\nexport function isValidPaymentId(value: string): boolean {\n return PAYMENT_ID_PATTERN.test(normalizePaymentId(value));\n}\n\nexport function paymentIdValidationMessage(): string {\n return 'Enter 3–20 lowercase letters or digits, with at most one dot (e.g. john.doe12).';\n}\n\nexport function isUuidV4(value: string): boolean {\n return /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(\n value,\n );\n}\n\n/** Locale per currency so amounts use the standard symbol (e.g. USD → $1.00, not US$1.00). */\nconst CURRENCY_LOCALES: Partial<Record<string, string>> = {\n USD: 'en-US',\n};\n\nexport function formatAmount(amount: string, currency: string): string {\n const parsed = Number.parseFloat(amount);\n if (Number.isNaN(parsed)) {\n return `${amount} ${currency}`;\n }\n const locale = CURRENCY_LOCALES[currency] ?? 'en-US';\n return new Intl.NumberFormat(locale, {\n style: 'currency',\n currency,\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n }).format(parsed);\n}\n\nexport const TERMINAL_EXIT_COUNTDOWN_SEC = 7;\n\nexport type TerminalExitMode = 'redirect' | 'close';\n\nexport function terminalExitLeadText(\n exitMode: TerminalExitMode,\n embedMode: 'inline' | 'modal',\n outcome: 'success' | 'failure' = 'success',\n): string {\n if (exitMode === 'redirect') {\n return outcome === 'failure'\n ? 'You will be redirected shortly in'\n : 'You will be redirected in';\n }\n if (embedMode === 'modal') {\n return 'This window will close automatically in';\n }\n return 'This checkout will close automatically in';\n}\n\nexport function outcomeTerminalCopy(\n phase: CheckoutPhase,\n): { kind: 'success' | 'failure'; title: string; detail: string } {\n switch (phase) {\n case 'success':\n return {\n kind: 'success',\n title: 'Payment complete',\n detail: 'Your payment was successful.',\n };\n case 'expired':\n return {\n kind: 'failure',\n title: 'Session expired',\n detail: 'This checkout session has expired. Please start a new checkout to try again.',\n };\n case 'failed':\n return {\n kind: 'failure',\n title: 'Payment failed',\n detail: 'Your payment could not be completed. Please try again or contact the merchant.',\n };\n case 'cancelled':\n return {\n kind: 'failure',\n title: 'Payment cancelled',\n detail: 'This payment was cancelled.',\n };\n case 'declined':\n return {\n kind: 'failure',\n title: 'Payment declined',\n detail: 'Your payment was declined. Please try again or contact the merchant.',\n };\n case 'invalid-session':\n return {\n kind: 'failure',\n title: 'Session unavailable',\n detail:\n 'This checkout session is no longer valid. Please ask the merchant for a new checkout link.',\n };\n default:\n return {\n kind: 'failure',\n title: 'Something went wrong',\n detail: 'Please try again or contact the merchant.',\n };\n }\n}\n\nexport function formatCountdown(ms: number): string {\n const totalSec = Math.max(0, Math.ceil(ms / 1000));\n const min = Math.floor(totalSec / 60);\n const sec = totalSec % 60;\n return `${min.toString().padStart(2, '0')}:${sec.toString().padStart(2, '0')}`;\n}\n\n/** Up to two initials from a display name for avatar fallbacks. */\nexport function formatDisplayInitials(displayName: string): string {\n const parts = displayName.trim().split(/\\s+/).filter(Boolean);\n if (parts.length === 0) {\n return '?';\n }\n if (parts.length === 1) {\n return parts[0].charAt(0).toUpperCase();\n }\n return `${parts[0].charAt(0)}${parts[parts.length - 1].charAt(0)}`.toUpperCase();\n}\n\nexport function formatIdleDeadline(iso: string): string {\n try {\n return new Intl.DateTimeFormat(undefined, {\n hour: 'numeric',\n minute: '2-digit',\n }).format(new Date(iso));\n } catch {\n return iso;\n }\n}\n\nexport function resolveContainer(container: HTMLElement | string): HTMLElement {\n if (typeof container !== 'string') {\n return container;\n }\n const element = document.querySelector<HTMLElement>(container);\n if (!element) {\n throw new Error(`Zippy Pay: container not found: ${container}`);\n }\n return element;\n}\n\nexport function normalizeBaseUrl(baseUrl: string): string {\n return baseUrl.replace(/\\/+$/, '');\n}\n\n/** Appends checkout redirect query params, preserving any existing search string. */\nexport function appendRedirectQueryParams(\n url: string,\n params: Record<string, string | null | undefined>,\n): string {\n const isAbsolute = /^https?:\\/\\//i.test(url);\n const base = typeof window !== 'undefined' ? window.location.href : 'https://localhost/';\n const parsed = new URL(url, base);\n\n for (const [key, value] of Object.entries(params)) {\n if (value != null && value !== '') {\n parsed.searchParams.set(key, value);\n }\n }\n\n if (isAbsolute) {\n return parsed.toString();\n }\n\n return `${parsed.pathname}${parsed.search}${parsed.hash}`;\n}\n","import type {\n ApiCheckoutMethod,\n PaymentSession,\n ProblemJson,\n VerifyPayerResponse,\n ZippyPayError,\n} from '../types';\nimport { ZippyPayError as ZippyPayErrorClass } from '../types';\nimport { ZIPPY_API_PATH_PREFIX } from '../config/environments';\nimport { normalizeBaseUrl, normalizePaymentId } from '../utils';\n\nexport type ApiClientConfig = {\n baseUrl: string;\n sessionId: string;\n clientToken: string;\n};\n\nexport class PaymentSessionClient {\n private readonly baseUrl: string;\n private readonly sessionId: string;\n private readonly clientToken: string;\n\n constructor(config: ApiClientConfig) {\n this.baseUrl = normalizeBaseUrl(config.baseUrl);\n this.sessionId = config.sessionId;\n this.clientToken = config.clientToken;\n }\n\n async getSession(): Promise<PaymentSession> {\n return this.request<PaymentSession>('GET', this.sessionPath());\n }\n\n async verifyPayer(paymentId: string): Promise<VerifyPayerResponse> {\n return this.request<VerifyPayerResponse>('POST', `${this.sessionPath()}/payer/verify`, {\n paymentId: normalizePaymentId(paymentId),\n });\n }\n\n async attachPayer(paymentId: string): Promise<PaymentSession> {\n return this.request<PaymentSession>('POST', `${this.sessionPath()}/payer`, {\n paymentId: normalizePaymentId(paymentId),\n });\n }\n\n async startCheckout(method: ApiCheckoutMethod): Promise<PaymentSession> {\n return this.request<PaymentSession>('POST', `${this.sessionPath()}/checkout/start`, {\n method,\n });\n }\n\n startQrCheckout(): Promise<PaymentSession> {\n return this.startCheckout('QR');\n }\n\n startManualCheckout(): Promise<PaymentSession> {\n return this.startCheckout('MANUAL');\n }\n\n private sessionPath(): string {\n return `${ZIPPY_API_PATH_PREFIX}/payment-sessions/${this.sessionId}`;\n }\n\n private headers(): Record<string, string> {\n return {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n 'X-Payment-Session-Token': this.clientToken,\n };\n }\n\n private async request<T>(method: string, path: string, body?: unknown): Promise<T> {\n const response = await fetch(`${this.baseUrl}${path}`, {\n method,\n headers: this.headers(),\n body: body === undefined ? undefined : JSON.stringify(body),\n });\n\n if (response.ok) {\n return (await response.json()) as T;\n }\n\n throw await this.parseError(response);\n }\n\n private async parseError(response: Response): Promise<ZippyPayError> {\n const contentType = response.headers.get('content-type') ?? '';\n if (contentType.includes('application/problem+json')) {\n const problem = (await response.json()) as ProblemJson;\n return new ZippyPayErrorClass({ ...problem, status: problem.status ?? response.status });\n }\n\n return new ZippyPayErrorClass({\n status: response.status,\n code: 'unknown',\n title: 'Request failed',\n detail: response.statusText || 'Request failed',\n });\n }\n}\n\nexport async function attachPayerWithRetry(\n client: PaymentSessionClient,\n paymentId: string,\n): Promise<PaymentSession> {\n try {\n return await client.attachPayer(paymentId);\n } catch (error) {\n if (!(error instanceof ZippyPayErrorClass) || error.code !== 'payment-session.payer-attached') {\n throw error;\n }\n const session = await client.getSession();\n if (session.payer?.paymentId === normalizePaymentId(paymentId)) {\n return session;\n }\n throw error;\n }\n}\n","import type { ZippyTheme } from '../types';\n\n/** Aligned with zippy-kyc-web-sdk `src/styles/tokens.css` */\nexport const DEFAULT_THEME: Required<Omit<ZippyTheme, 'mode'>> & {\n mode: ZippyTheme['mode'];\n primaryGradientEnd: string;\n primaryHover: string;\n primarySoft: string;\n surfaceMuted: string;\n radiusButton: string;\n radiusInput: string;\n radiusCard: string;\n} = {\n primary: '#3f63f3',\n primaryForeground: '#ffffff',\n primaryGradientEnd: '#6b84ff',\n primaryHover: '#2f4fd1',\n primarySoft: '#eef2ff',\n background: '#ffffff',\n surface: '#ffffff',\n surfaceMuted: '#f6f8fb',\n text: '#0f172a',\n textMuted: '#64748b',\n border: '#e2e8f0',\n error: '#dc2626',\n success: '#059669',\n borderRadius: '20px',\n radiusButton: '24px',\n radiusInput: '12px',\n radiusCard: '20px',\n fontFamily: \"'DM Sans', system-ui, -apple-system, sans-serif\",\n mode: 'light',\n};\n\nconst DARK_THEME_OVERRIDES: Partial<ZippyTheme> = {\n background: '#0f172a',\n surface: '#1e293b',\n text: '#f8fafc',\n textMuted: '#94a3b8',\n border: '#334155',\n};\n\nexport type ResolvedTheme = typeof DEFAULT_THEME;\n\nexport function resolveTheme(theme?: ZippyTheme): ResolvedTheme {\n const merged = { ...DEFAULT_THEME, ...theme };\n const prefersDark =\n typeof window !== 'undefined' &&\n window.matchMedia?.('(prefers-color-scheme: dark)').matches;\n\n const effectiveMode =\n merged.mode === 'auto' ? (prefersDark ? 'dark' : 'light') : (merged.mode ?? 'light');\n\n if (effectiveMode === 'dark') {\n return { ...merged, ...DARK_THEME_OVERRIDES, mode: effectiveMode };\n }\n\n return { ...merged, mode: effectiveMode };\n}\n\nexport function applyThemeToHost(host: HTMLElement, theme?: ZippyTheme): void {\n const resolved = resolveTheme(theme);\n host.style.setProperty('--zippy-primary', resolved.primary);\n host.style.setProperty('--zippy-primary-foreground', resolved.primaryForeground);\n host.style.setProperty('--zippy-primary-gradient-end', resolved.primaryGradientEnd);\n host.style.setProperty('--zippy-primary-hover', resolved.primaryHover);\n host.style.setProperty('--zippy-primary-soft', resolved.primarySoft);\n host.style.setProperty('--zippy-background', resolved.background);\n host.style.setProperty('--zippy-surface', resolved.surface);\n host.style.setProperty('--zippy-surface-muted', resolved.surfaceMuted);\n host.style.setProperty('--zippy-text', resolved.text);\n host.style.setProperty('--zippy-text-muted', resolved.textMuted);\n host.style.setProperty('--zippy-border', resolved.border);\n host.style.setProperty('--zippy-error', resolved.error);\n host.style.setProperty('--zippy-success', resolved.success);\n host.style.setProperty('--zippy-radius', resolved.borderRadius);\n host.style.setProperty('--zippy-radius-button', resolved.radiusButton);\n host.style.setProperty('--zippy-radius-input', resolved.radiusInput);\n host.style.setProperty('--zippy-radius-card', resolved.radiusCard);\n host.style.setProperty('--zippy-font-family', resolved.fontFamily);\n}\n\nconst DM_SANS_IMPORT =\n \"@import url('https://fonts.googleapis.com/css2?family=DM+Sans:ital,opsz,wght@0,9..40,400;0,9..40,500;0,9..40,600;0,9..40,700&display=swap');\";\n\nexport const CHECKOUT_STYLES = `\n${DM_SANS_IMPORT}\n\n:host {\n display: block;\n font-family: var(--zippy-font-family);\n color: var(--zippy-text);\n box-sizing: border-box;\n -webkit-font-smoothing: antialiased;\n}\n\n*, *::before, *::after {\n box-sizing: border-box;\n}\n\nbutton,\ninput {\n font-family: inherit;\n}\n\n.zippy-root {\n position: relative;\n display: flex;\n flex-direction: column;\n background: var(--zippy-background);\n border: 1px solid var(--zippy-border);\n border-radius: var(--zippy-radius-card);\n padding: 0;\n max-width: 420px;\n width: 100%;\n overflow: hidden;\n box-shadow:\n 0 1px 2px rgba(15, 23, 42, 0.04),\n 0 16px 48px -20px rgba(15, 23, 42, 0.18);\n}\n\n.zippy-root--terminal {\n display: block;\n padding: 32px 24px 28px;\n overflow: visible;\n}\n\n.zippy-root--paying {\n display: flex;\n flex-direction: column;\n padding: 0;\n overflow: hidden;\n}\n\n.zippy-root-body {\n flex: 1 1 auto;\n display: flex;\n flex-direction: column;\n min-height: 0;\n padding: 24px 24px 20px;\n}\n\n.zippy-payment-hero {\n margin-bottom: 22px;\n padding-bottom: 20px;\n text-align: center;\n border-bottom: 1px solid color-mix(in srgb, var(--zippy-border) 80%, transparent);\n}\n\n.zippy-payment-merchant {\n margin: 0 0 6px;\n font-size: 0.9375rem;\n font-weight: 500;\n color: var(--zippy-text-muted);\n line-height: 1.35;\n}\n\n.zippy-payment-amount {\n margin: 0;\n font-size: 2rem;\n font-weight: 700;\n letter-spacing: -0.04em;\n line-height: 1.05;\n color: var(--zippy-text);\n}\n\n.zippy-payment-subtitle {\n margin: 10px 0 0;\n font-size: 0.875rem;\n font-weight: 600;\n color: var(--zippy-primary);\n letter-spacing: -0.01em;\n}\n\n.zippy-choose {\n margin: 0;\n}\n\n.zippy-choose-options {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 10px;\n}\n\n.zippy-method-card {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 10px;\n width: 100%;\n min-height: 7.5rem;\n padding: 16px 10px;\n border: 1px solid var(--zippy-border);\n border-radius: 16px;\n background: var(--zippy-surface-muted);\n color: var(--zippy-text);\n cursor: pointer;\n text-align: center;\n transition:\n border-color 160ms ease,\n box-shadow 160ms ease,\n transform 160ms ease,\n background 160ms ease;\n}\n\n.zippy-method-card:hover {\n border-color: color-mix(in srgb, var(--zippy-primary) 40%, var(--zippy-border));\n background: color-mix(in srgb, var(--zippy-primary-soft) 55%, white);\n box-shadow: 0 10px 28px -16px rgba(63, 99, 243, 0.45);\n transform: translateY(-1px);\n}\n\n.zippy-method-card:active {\n transform: translateY(0) scale(0.985);\n}\n\n.zippy-method-card:focus-visible {\n outline: 2px solid var(--zippy-primary);\n outline-offset: 2px;\n}\n\n.zippy-method-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 44px;\n height: 44px;\n border-radius: 50%;\n color: var(--zippy-primary);\n background: #ffffff;\n box-shadow: 0 0 0 1px color-mix(in srgb, var(--zippy-primary) 12%, var(--zippy-border));\n}\n\n.zippy-method-copy {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n}\n\n.zippy-method-title {\n font-size: 0.875rem;\n font-weight: 700;\n letter-spacing: -0.01em;\n}\n\n.zippy-method-hint {\n font-size: 0.75rem;\n font-weight: 500;\n color: var(--zippy-text-muted);\n line-height: 1.35;\n}\n\n.zippy-flow {\n display: flex;\n flex-direction: column;\n gap: 18px;\n}\n\n.zippy-flow-awaiting {\n align-items: center;\n text-align: center;\n padding: 8px 0 4px;\n}\n\n.zippy-flow-awaiting .zippy-identity-card {\n width: 100%;\n text-align: left;\n}\n\n.zippy-pay-progress {\n flex-shrink: 0;\n width: 100%;\n height: 2px;\n margin: 0;\n border-radius: 0;\n background: color-mix(in srgb, var(--zippy-border) 55%, transparent);\n overflow: hidden;\n}\n\n.zippy-root--qr .zippy-pay-progress {\n height: 4px;\n}\n\n.zippy-pay-progress-fill {\n display: block;\n width: 100%;\n height: 100%;\n transform: scaleX(1);\n transform-origin: left center;\n background: var(--zippy-primary);\n transition: transform 1s linear;\n will-change: transform;\n}\n\n.zippy-step-guide {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.zippy-step-guide-item {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n}\n\n.zippy-step-guide-num {\n flex-shrink: 0;\n width: 22px;\n height: 22px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 0.6875rem;\n font-weight: 700;\n color: var(--zippy-primary);\n background: var(--zippy-primary-soft);\n}\n\n.zippy-step-guide-text {\n font-size: 0.8125rem;\n line-height: 1.45;\n color: var(--zippy-text-muted);\n padding-top: 2px;\n}\n\n.zippy-qr-section {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n padding: 2px 0 4px;\n}\n\n.zippy-pay-timer-slot {\n display: flex;\n justify-content: center;\n width: 100%;\n min-height: 3.5rem;\n margin: -6px 0 10px;\n}\n\n.zippy-qr-section .zippy-pay-timer-slot {\n margin: 0;\n}\n\n.zippy-pay-timer {\n display: inline-flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 0.125rem;\n min-width: 5.5rem;\n padding: 0.5rem 1.125rem 0.4375rem;\n border-radius: 16px;\n background: var(--zippy-primary-soft);\n color: var(--zippy-primary);\n}\n\n.zippy-pay-timer-value {\n width: 5ch;\n font-size: 1.125rem;\n font-weight: 700;\n font-variant-numeric: tabular-nums;\n letter-spacing: 0;\n text-align: center;\n line-height: 1;\n}\n\n.zippy-pay-timer-label {\n font-size: 0.6875rem;\n font-weight: 600;\n line-height: 1;\n letter-spacing: 0.02em;\n text-transform: uppercase;\n white-space: nowrap;\n color: color-mix(in srgb, var(--zippy-primary) 72%, var(--zippy-text-muted));\n}\n\n.zippy-qr-frame {\n display: inline-block;\n padding: 16px;\n background: #ffffff;\n border: 1px solid var(--zippy-border);\n border-radius: 20px;\n line-height: 0;\n box-shadow:\n 0 1px 2px rgba(15, 23, 42, 0.04),\n 0 12px 32px -14px rgba(63, 99, 243, 0.22);\n}\n\n.zippy-qr-stack {\n position: relative;\n display: inline-block;\n line-height: 0;\n}\n\n.zippy-qr-stack > svg {\n display: block;\n width: 196px;\n height: 196px;\n}\n\n.zippy-qr-awaiting {\n display: flex;\n align-items: center;\n justify-content: center;\n padding-top: 4px;\n}\n\n.zippy-qr-awaiting-spinner {\n display: block;\n width: 1.25rem;\n height: 1.25rem;\n border: 2px solid var(--zippy-border);\n border-top-color: var(--zippy-primary);\n border-radius: 50%;\n animation: zippy-spin 0.8s linear infinite;\n}\n\n.zippy-id-form {\n display: flex;\n flex-direction: column;\n gap: 12px;\n margin: 0;\n}\n\n.zippy-input-combo {\n display: flex;\n align-items: stretch;\n width: 100%;\n min-height: 3rem;\n border: 1px solid var(--zippy-border);\n border-radius: var(--zippy-radius-button);\n background: var(--zippy-surface-muted);\n overflow: hidden;\n transition:\n border-color 150ms ease,\n box-shadow 150ms ease,\n background 150ms ease;\n}\n\n.zippy-input-combo:focus-within {\n border-color: var(--zippy-primary);\n background: var(--zippy-background);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--zippy-primary) 14%, transparent);\n}\n\n.zippy-input-combo--verified {\n border-color: color-mix(in srgb, var(--zippy-success) 35%, var(--zippy-border));\n background: color-mix(in srgb, var(--zippy-success) 6%, var(--zippy-background));\n}\n\n.zippy-input-combo--verified:focus-within {\n border-color: color-mix(in srgb, var(--zippy-success) 45%, var(--zippy-primary));\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--zippy-success) 12%, transparent);\n}\n\n.zippy-input-combo-field {\n flex: 1;\n min-width: 0;\n width: 100%;\n padding: 0.75rem 0.875rem;\n font-family: inherit;\n font-size: 1rem;\n line-height: 1.25;\n color: var(--zippy-text);\n border: none;\n background: transparent;\n outline: none;\n}\n\n.zippy-input-combo-field::placeholder {\n color: var(--zippy-text-muted);\n}\n\n.zippy-input-combo-field:focus,\n.zippy-input-combo-field:focus-visible {\n outline: none;\n}\n\n.zippy-input-combo-field:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n.zippy-input-combo-divider {\n flex-shrink: 0;\n align-self: center;\n width: 1px;\n height: 1.375rem;\n background: var(--zippy-border);\n}\n\n.zippy-input-combo--verified .zippy-input-combo-divider {\n background: color-mix(in srgb, var(--zippy-success) 25%, var(--zippy-border));\n}\n\n.zippy-input-combo-action {\n flex-shrink: 0;\n min-width: 5.25rem;\n padding: 0 1rem;\n font-family: inherit;\n font-size: 0.875rem;\n font-weight: 600;\n letter-spacing: -0.01em;\n color: var(--zippy-primary);\n background: transparent;\n border: none;\n cursor: pointer;\n transition:\n background 150ms ease,\n color 150ms ease,\n opacity 150ms ease;\n}\n\n.zippy-input-combo-action:hover:not(:disabled) {\n background: color-mix(in srgb, var(--zippy-primary) 8%, transparent);\n}\n\n.zippy-input-combo-action:disabled {\n color: var(--zippy-text-muted);\n cursor: default;\n}\n\n.zippy-input-combo--verified .zippy-input-combo-action:disabled {\n color: var(--zippy-success);\n}\n\n.zippy-input-combo-action--verified {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 3rem;\n padding: 0 0.875rem;\n color: var(--zippy-success);\n}\n\n.zippy-input-combo-action--verified:disabled {\n opacity: 1;\n}\n\n.zippy-input-combo-check {\n display: block;\n width: 1.125rem;\n height: 1.125rem;\n}\n\n.zippy-input-combo-action--loading {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.zippy-input-combo-action--loading:disabled {\n opacity: 1;\n color: var(--zippy-primary);\n}\n\n.zippy-spinner-inline {\n width: 1rem;\n height: 1rem;\n border: 2px solid color-mix(in srgb, var(--zippy-primary) 18%, transparent);\n border-top-color: var(--zippy-primary);\n border-radius: 50%;\n animation: zippy-spin 0.7s linear infinite;\n}\n\n.zippy-input-combo--error {\n border-color: color-mix(in srgb, var(--zippy-error) 55%, var(--zippy-border));\n background: color-mix(in srgb, var(--zippy-error) 5%, var(--zippy-background));\n}\n\n.zippy-input-combo--error:focus-within {\n border-color: var(--zippy-error);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--zippy-error) 14%, transparent);\n}\n\n.zippy-input-combo--error .zippy-input-combo-divider {\n background: color-mix(in srgb, var(--zippy-error) 25%, var(--zippy-border));\n}\n\n.zippy-field-error {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n margin: -4px 0 0;\n padding: 0.5rem 0.875rem;\n font-size: 0.8125rem;\n line-height: 1.45;\n color: var(--zippy-error);\n background: color-mix(in srgb, var(--zippy-error) 8%, var(--zippy-background));\n border: 1px solid color-mix(in srgb, var(--zippy-error) 18%, var(--zippy-border));\n border-radius: 999px;\n}\n\n.zippy-field-error-icon {\n flex-shrink: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 1rem;\n height: 1rem;\n border-radius: 50%;\n font-size: 0.6875rem;\n font-weight: 700;\n line-height: 1;\n color: #fff;\n background: var(--zippy-error);\n}\n\n.zippy-idle-hint {\n margin: -6px 0 0;\n font-size: 0.8125rem;\n color: var(--zippy-text-muted);\n text-align: center;\n line-height: 1.45;\n}\n\n.zippy-identity-card {\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 16px;\n border-radius: 16px;\n background: var(--zippy-surface-muted);\n border: 1px solid var(--zippy-border);\n}\n\n.zippy-identity-avatar {\n flex-shrink: 0;\n width: 48px;\n height: 48px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 1.0625rem;\n font-weight: 700;\n color: var(--zippy-primary);\n background: #fff;\n box-shadow: 0 0 0 1px color-mix(in srgb, var(--zippy-primary) 14%, var(--zippy-border));\n}\n\n.zippy-identity-avatar--photo {\n padding: 0;\n overflow: hidden;\n color: transparent;\n background: var(--zippy-surface-muted);\n}\n\n.zippy-identity-avatar-image {\n display: block;\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n\n.zippy-identity-label {\n margin: 0 0 2px;\n font-size: 0.6875rem;\n font-weight: 600;\n letter-spacing: 0.04em;\n text-transform: uppercase;\n color: var(--zippy-text-muted);\n}\n\n.zippy-identity-name {\n margin: 0 0 2px;\n font-size: 1rem;\n font-weight: 700;\n color: var(--zippy-text);\n letter-spacing: -0.01em;\n}\n\n.zippy-identity-handle {\n margin: 0;\n font-size: 0.8125rem;\n color: var(--zippy-text-muted);\n}\n\n.zippy-identity-chip {\n padding: 0.45rem 0.875rem;\n border-radius: 999px;\n font-size: 0.8125rem;\n font-weight: 600;\n color: var(--zippy-primary);\n background: var(--zippy-primary-soft);\n}\n\n.zippy-awaiting-status {\n padding: 4px 0 8px;\n}\n\n.zippy-awaiting-ring {\n position: relative;\n width: 56px;\n height: 56px;\n margin: 0 auto;\n}\n\n.zippy-awaiting-ring::before,\n.zippy-awaiting-ring span {\n content: '';\n position: absolute;\n inset: 0;\n border-radius: 50%;\n}\n\n.zippy-awaiting-ring::before {\n border: 2px solid var(--zippy-primary-soft);\n}\n\n.zippy-awaiting-ring span {\n border: 2px solid transparent;\n border-top-color: var(--zippy-primary);\n animation: zippy-spin 0.9s linear infinite;\n}\n\n.zippy-awaiting-message {\n margin: 0;\n max-width: 18rem;\n font-size: 0.875rem;\n line-height: 1.5;\n color: var(--zippy-text-muted);\n}\n\n.zippy-footnote {\n margin: 0;\n font-size: 0.75rem;\n line-height: 1.5;\n color: var(--zippy-text-muted);\n text-align: center;\n}\n\n.zippy-flow .zippy-footnote {\n text-align: left;\n}\n\n.zippy-flow-awaiting .zippy-footnote {\n text-align: center;\n}\n\n.zippy-brand-footer {\n display: flex;\n align-items: center;\n justify-content: center;\n margin-top: auto;\n padding-top: 12px;\n}\n\n.zippy-root--terminal .zippy-brand-footer {\n margin-top: 20px;\n padding-top: 18px;\n border-top: 1px solid color-mix(in srgb, var(--zippy-border) 80%, transparent);\n}\n\n.zippy-brand-footer-inner {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n min-height: 1.375rem;\n padding: 0.1875rem 0.5rem;\n border-radius: 999px;\n color: var(--zippy-text-muted);\n background: color-mix(in srgb, var(--zippy-text-muted) 6%, transparent);\n opacity: 0.72;\n}\n\n.zippy-brand-secure {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n.zippy-brand-divider {\n flex-shrink: 0;\n align-self: center;\n width: 1px;\n height: 0.625rem;\n background: color-mix(in srgb, var(--zippy-text-muted) 24%, transparent);\n}\n\n.zippy-brand-lock {\n flex-shrink: 0;\n display: block;\n width: 0.625rem;\n height: 0.625rem;\n}\n\n.zippy-brand-copy,\n.zippy-brand-name {\n font-size: 0.625rem;\n font-weight: 500;\n letter-spacing: 0.01em;\n line-height: 1;\n white-space: nowrap;\n}\n\n.zippy-brand-name {\n font-weight: 600;\n}\n\n.zippy-label {\n display: block;\n font-size: 0.8125rem;\n font-weight: 600;\n margin: 0;\n color: var(--zippy-text);\n}\n\n.zippy-input {\n width: 100%;\n min-height: 2.875rem;\n padding: 0.6875rem 0.875rem;\n font-size: 1rem;\n border: 1px solid var(--zippy-border);\n border-radius: var(--zippy-radius-input);\n background: var(--zippy-background);\n color: var(--zippy-text);\n outline: none;\n transition: border-color 150ms ease, box-shadow 150ms ease;\n}\n\n.zippy-input:focus {\n border-color: var(--zippy-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--zippy-primary) 16%, transparent);\n}\n\n.zippy-input:focus-visible {\n outline: 2px solid var(--zippy-primary);\n outline-offset: 2px;\n}\n\n.zippy-input:disabled {\n opacity: 0.55;\n cursor: not-allowed;\n}\n\n.zippy-error-text {\n font-size: 0.8125rem;\n color: var(--zippy-error);\n margin: 0;\n}\n\n.zippy-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-height: 2.875rem;\n padding: 0.6875rem 1.25rem;\n font-size: 0.9375rem;\n font-weight: 600;\n border-radius: var(--zippy-radius-button);\n border: none;\n cursor: pointer;\n transition:\n background 150ms ease,\n transform 150ms ease,\n box-shadow 150ms ease;\n}\n\n.zippy-btn:disabled {\n opacity: 0.55;\n cursor: not-allowed;\n}\n\n.zippy-btn:not(:disabled):active {\n transform: scale(0.985);\n}\n\n.zippy-btn-block {\n width: 100%;\n}\n\n.zippy-btn-primary {\n background: linear-gradient(\n 135deg,\n var(--zippy-primary) 0%,\n var(--zippy-primary-gradient-end) 100%\n );\n color: var(--zippy-primary-foreground);\n box-shadow: 0 4px 14px -4px color-mix(in srgb, var(--zippy-primary) 45%, transparent);\n}\n\n.zippy-btn-primary:hover:not(:disabled) {\n background: linear-gradient(\n 135deg,\n var(--zippy-primary-hover) 0%,\n var(--zippy-primary) 100%\n );\n}\n\n.zippy-status {\n text-align: center;\n padding: 16px 0 8px;\n}\n\n.zippy-status-icon {\n width: 56px;\n height: 56px;\n margin: 0 auto 18px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.zippy-status-icon.loading {\n background: var(--zippy-surface-muted);\n}\n\n.zippy-status-icon.success {\n background: color-mix(in srgb, var(--zippy-success) 14%, transparent);\n color: var(--zippy-success);\n}\n\n.zippy-status-icon.failure,\n.zippy-status-icon.error {\n background: color-mix(in srgb, var(--zippy-error) 12%, transparent);\n color: var(--zippy-error);\n}\n\n.zippy-status-title {\n font-size: 1.125rem;\n font-weight: 700;\n margin: 0 0 8px;\n letter-spacing: -0.02em;\n}\n\n.zippy-status-detail {\n font-size: 0.875rem;\n color: var(--zippy-text-muted);\n margin: 0;\n line-height: 1.5;\n}\n\n.zippy-transaction-ref {\n margin: 18px auto 0;\n max-width: 100%;\n padding: 12px 14px;\n border-radius: calc(var(--zippy-radius) * 0.75);\n background: var(--zippy-surface-muted);\n text-align: center;\n}\n\n.zippy-transaction-ref-label {\n margin: 0 0 4px;\n font-size: 0.75rem;\n font-weight: 500;\n color: var(--zippy-text-muted);\n letter-spacing: 0.04em;\n text-transform: uppercase;\n}\n\n.zippy-transaction-ref-value {\n margin: 0;\n font-size: 0.875rem;\n font-weight: 600;\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n color: var(--zippy-text);\n word-break: break-all;\n}\n\n.zippy-status-exit {\n margin: 20px 0 0;\n font-size: 0.875rem;\n color: var(--zippy-text-muted);\n line-height: 1.5;\n}\n\n.zippy-status-exit-countdown {\n font-weight: 700;\n font-variant-numeric: tabular-nums;\n color: var(--zippy-text);\n}\n\n.zippy-spinner {\n width: 24px;\n height: 24px;\n border: 3px solid var(--zippy-border);\n border-top-color: var(--zippy-primary);\n border-radius: 50%;\n animation: zippy-spin 0.8s linear infinite;\n}\n\n@keyframes zippy-spin {\n to { transform: rotate(360deg); }\n}\n`;\n\nexport const MODAL_STYLES = `\n.zippy-overlay {\n position: fixed;\n inset: 0;\n background: rgba(15, 23, 42, 0.55);\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 16px;\n z-index: 2147483000;\n}\n\n.zippy-modal-panel {\n max-width: 460px;\n width: 100%;\n animation: zippy-modal-in 0.2s ease-out;\n}\n\n@keyframes zippy-modal-in {\n from {\n opacity: 0;\n transform: translateY(8px) scale(0.98);\n }\n to {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n}\n`;\n","import type { ZippyPayConfig } from '../types';\nimport { resolveContainer } from '../utils';\nimport { MODAL_STYLES } from '../theme';\n\nexport type EmbedHost = {\n host: HTMLElement;\n overlay: HTMLElement | null;\n escapeHandler: ((event: KeyboardEvent) => void) | null;\n destroy: () => void;\n};\n\nexport function createEmbedHost(config: ZippyPayConfig): EmbedHost {\n const mode = config.mode ?? 'inline';\n\n if (mode === 'modal') {\n return createModalHost(config);\n }\n\n if (!config.container) {\n throw new Error('Zippy Pay: `container` is required when mode is \"inline\".');\n }\n\n const container = resolveContainer(config.container);\n container.innerHTML = '';\n const host = document.createElement('div');\n host.className = 'zippy-inline-host';\n container.appendChild(host);\n\n return {\n host,\n overlay: null,\n escapeHandler: null,\n destroy: () => {\n host.remove();\n },\n };\n}\n\nfunction createModalHost(config: ZippyPayConfig): EmbedHost {\n const overlay = document.createElement('div');\n overlay.className = 'zippy-overlay';\n overlay.setAttribute('role', 'dialog');\n overlay.setAttribute('aria-modal', 'true');\n overlay.setAttribute('aria-label', 'Zippy Pay checkout');\n overlay.style.display = 'none';\n\n const style = document.createElement('style');\n style.textContent = MODAL_STYLES;\n overlay.appendChild(style);\n\n const panel = document.createElement('div');\n panel.className = 'zippy-modal-panel';\n const host = document.createElement('div');\n host.className = 'zippy-modal-host';\n panel.appendChild(host);\n overlay.appendChild(panel);\n document.body.appendChild(overlay);\n\n const closeOnBackdrop = config.closeOnBackdropClick ?? false;\n if (closeOnBackdrop) {\n overlay.addEventListener('click', (event) => {\n if (event.target === overlay) {\n config.onClose?.();\n }\n });\n }\n\n const embedHost: EmbedHost = {\n host,\n overlay,\n escapeHandler: null,\n destroy: () => {\n if (embedHost.escapeHandler) {\n document.removeEventListener('keydown', embedHost.escapeHandler);\n }\n overlay.remove();\n document.body.style.overflow = '';\n },\n };\n\n return embedHost;\n}\n\nexport function showModal(embed: EmbedHost, config: ZippyPayConfig, onClose: () => void): void {\n if (!embed.overlay) {\n return;\n }\n embed.overlay.style.display = 'flex';\n document.body.style.overflow = 'hidden';\n\n const closeOnEscape = config.closeOnEscape ?? false;\n if (closeOnEscape && !embed.escapeHandler) {\n embed.escapeHandler = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n onClose();\n }\n };\n document.addEventListener('keydown', embed.escapeHandler);\n }\n\n const focusable = embed.host.querySelector<HTMLElement>('input, button');\n focusable?.focus();\n}\n\nexport function hideModal(embed: EmbedHost): void {\n if (!embed.overlay) {\n return;\n }\n embed.overlay.style.display = 'none';\n document.body.style.overflow = '';\n if (embed.escapeHandler) {\n document.removeEventListener('keydown', embed.escapeHandler);\n embed.escapeHandler = null;\n }\n}\n","import type { PaymentSession, PaymentSessionStatus } from '../types';\nimport { POLLABLE_STATUSES, TERMINAL_STATUSES } from '../types';\n\nexport type PollerOptions = {\n intervalMs?: number;\n hiddenIntervalMs?: number;\n onUpdate: (session: PaymentSession) => void;\n onError?: (error: unknown) => void;\n shouldPoll?: (session: PaymentSession) => boolean;\n};\n\nexport class SessionPoller {\n private timer: ReturnType<typeof setTimeout> | null = null;\n private running = false;\n private stopped = false;\n\n constructor(\n private readonly fetchSession: () => Promise<PaymentSession>,\n private readonly options: PollerOptions,\n ) {}\n\n start(initialSession?: PaymentSession): void {\n if (this.running) {\n return;\n }\n this.running = true;\n this.stopped = false;\n if (initialSession) {\n this.options.onUpdate(initialSession);\n if (!this.shouldContinue(initialSession)) {\n this.stop();\n return;\n }\n }\n void this.tick();\n }\n\n stop(): void {\n this.stopped = true;\n this.running = false;\n if (this.timer !== null) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n }\n\n private shouldContinue(session: PaymentSession): boolean {\n if (this.options.shouldPoll) {\n return this.options.shouldPoll(session);\n }\n return POLLABLE_STATUSES.includes(session.status);\n }\n\n private intervalMs(): number {\n const base = this.options.intervalMs ?? 3000;\n const hidden = this.options.hiddenIntervalMs ?? 10000;\n return typeof document !== 'undefined' && document.hidden ? hidden : base;\n }\n\n private scheduleNext(): void {\n if (this.stopped) {\n return;\n }\n this.timer = setTimeout(() => {\n void this.tick();\n }, this.intervalMs());\n }\n\n private async tick(): Promise<void> {\n if (this.stopped) {\n return;\n }\n try {\n const session = await this.fetchSession();\n this.options.onUpdate(session);\n if (!this.shouldContinue(session)) {\n this.stop();\n return;\n }\n } catch (error) {\n this.options.onError?.(error);\n this.stop();\n return;\n }\n this.scheduleNext();\n }\n}\n\nexport function isTerminalStatus(status: PaymentSessionStatus): boolean {\n return TERMINAL_STATUSES.includes(status);\n}\n\nexport function phaseFromSession(status: PaymentSessionStatus): import('../types').CheckoutPhase {\n switch (status) {\n case 'CREATED':\n return 'choose-method';\n case 'AWAITING_PAYMENT':\n return 'awaiting';\n case 'COMPLETED':\n return 'success';\n case 'EXPIRED':\n return 'expired';\n case 'CANCELLED':\n return 'cancelled';\n case 'FAILED':\n return 'failed';\n default:\n return 'error';\n }\n}\n\nexport function msUntilExpiry(expiresAt: string): number {\n return Math.max(0, new Date(expiresAt).getTime() - Date.now());\n}\n","//---------------------------------------------------------------------\n//\n// QR Code Generator for JavaScript\n//\n// Copyright (c) 2009 Kazuhiko Arase\n//\n// URL: http://www.d-project.com/\n//\n// Licensed under the MIT license:\n// http://www.opensource.org/licenses/mit-license.php\n//\n// The word 'QR Code' is registered trademark of\n// DENSO WAVE INCORPORATED\n// http://www.denso-wave.com/qrcode/faqpatent-e.html\n//\n//---------------------------------------------------------------------\n\n//---------------------------------------------------------------------\n// qrcode\n//---------------------------------------------------------------------\n\n/**\n * qrcode\n * @param typeNumber 1 to 40\n * @param errorCorrectionLevel 'L','M','Q','H'\n */\nexport const qrcode = function(typeNumber, errorCorrectionLevel) {\n\n const PAD0 = 0xEC;\n const PAD1 = 0x11;\n\n let _typeNumber = typeNumber;\n const _errorCorrectionLevel = QRErrorCorrectionLevel[errorCorrectionLevel];\n let _modules = null;\n let _moduleCount = 0;\n let _dataCache = null;\n const _dataList = [];\n\n const _this = {};\n\n const makeImpl = function(test, maskPattern) {\n\n _moduleCount = _typeNumber * 4 + 17;\n _modules = function(moduleCount) {\n const modules = new Array(moduleCount);\n for (let row = 0; row < moduleCount; row += 1) {\n modules[row] = new Array(moduleCount);\n for (let col = 0; col < moduleCount; col += 1) {\n modules[row][col] = null;\n }\n }\n return modules;\n }(_moduleCount);\n\n setupPositionProbePattern(0, 0);\n setupPositionProbePattern(_moduleCount - 7, 0);\n setupPositionProbePattern(0, _moduleCount - 7);\n setupPositionAdjustPattern();\n setupTimingPattern();\n setupTypeInfo(test, maskPattern);\n\n if (_typeNumber >= 7) {\n setupTypeNumber(test);\n }\n\n if (_dataCache == null) {\n _dataCache = createData(_typeNumber, _errorCorrectionLevel, _dataList);\n }\n\n mapData(_dataCache, maskPattern);\n };\n\n const setupPositionProbePattern = function(row, col) {\n\n for (let r = -1; r <= 7; r += 1) {\n\n if (row + r <= -1 || _moduleCount <= row + r) continue;\n\n for (let c = -1; c <= 7; c += 1) {\n\n if (col + c <= -1 || _moduleCount <= col + c) continue;\n\n if ( (0 <= r && r <= 6 && (c == 0 || c == 6) )\n || (0 <= c && c <= 6 && (r == 0 || r == 6) )\n || (2 <= r && r <= 4 && 2 <= c && c <= 4) ) {\n _modules[row + r][col + c] = true;\n } else {\n _modules[row + r][col + c] = false;\n }\n }\n }\n };\n\n const getBestMaskPattern = function() {\n\n let minLostPoint = 0;\n let pattern = 0;\n\n for (let i = 0; i < 8; i += 1) {\n\n makeImpl(true, i);\n\n const lostPoint = QRUtil.getLostPoint(_this);\n\n if (i == 0 || minLostPoint > lostPoint) {\n minLostPoint = lostPoint;\n pattern = i;\n }\n }\n\n return pattern;\n };\n\n const setupTimingPattern = function() {\n\n for (let r = 8; r < _moduleCount - 8; r += 1) {\n if (_modules[r][6] != null) {\n continue;\n }\n _modules[r][6] = (r % 2 == 0);\n }\n\n for (let c = 8; c < _moduleCount - 8; c += 1) {\n if (_modules[6][c] != null) {\n continue;\n }\n _modules[6][c] = (c % 2 == 0);\n }\n };\n\n const setupPositionAdjustPattern = function() {\n\n const pos = QRUtil.getPatternPosition(_typeNumber);\n\n for (let i = 0; i < pos.length; i += 1) {\n\n for (let j = 0; j < pos.length; j += 1) {\n\n const row = pos[i];\n const col = pos[j];\n\n if (_modules[row][col] != null) {\n continue;\n }\n\n for (let r = -2; r <= 2; r += 1) {\n\n for (let c = -2; c <= 2; c += 1) {\n\n if (r == -2 || r == 2 || c == -2 || c == 2\n || (r == 0 && c == 0) ) {\n _modules[row + r][col + c] = true;\n } else {\n _modules[row + r][col + c] = false;\n }\n }\n }\n }\n }\n };\n\n const setupTypeNumber = function(test) {\n\n const bits = QRUtil.getBCHTypeNumber(_typeNumber);\n\n for (let i = 0; i < 18; i += 1) {\n const mod = (!test && ( (bits >> i) & 1) == 1);\n _modules[Math.floor(i / 3)][i % 3 + _moduleCount - 8 - 3] = mod;\n }\n\n for (let i = 0; i < 18; i += 1) {\n const mod = (!test && ( (bits >> i) & 1) == 1);\n _modules[i % 3 + _moduleCount - 8 - 3][Math.floor(i / 3)] = mod;\n }\n };\n\n const setupTypeInfo = function(test, maskPattern) {\n\n const data = (_errorCorrectionLevel << 3) | maskPattern;\n const bits = QRUtil.getBCHTypeInfo(data);\n\n // vertical\n for (let i = 0; i < 15; i += 1) {\n\n const mod = (!test && ( (bits >> i) & 1) == 1);\n\n if (i < 6) {\n _modules[i][8] = mod;\n } else if (i < 8) {\n _modules[i + 1][8] = mod;\n } else {\n _modules[_moduleCount - 15 + i][8] = mod;\n }\n }\n\n // horizontal\n for (let i = 0; i < 15; i += 1) {\n\n const mod = (!test && ( (bits >> i) & 1) == 1);\n\n if (i < 8) {\n _modules[8][_moduleCount - i - 1] = mod;\n } else if (i < 9) {\n _modules[8][15 - i - 1 + 1] = mod;\n } else {\n _modules[8][15 - i - 1] = mod;\n }\n }\n\n // fixed module\n _modules[_moduleCount - 8][8] = (!test);\n };\n\n const mapData = function(data, maskPattern) {\n\n let inc = -1;\n let row = _moduleCount - 1;\n let bitIndex = 7;\n let byteIndex = 0;\n const maskFunc = QRUtil.getMaskFunction(maskPattern);\n\n for (let col = _moduleCount - 1; col > 0; col -= 2) {\n\n if (col == 6) col -= 1;\n\n while (true) {\n\n for (let c = 0; c < 2; c += 1) {\n\n if (_modules[row][col - c] == null) {\n\n let dark = false;\n\n if (byteIndex < data.length) {\n dark = ( ( (data[byteIndex] >>> bitIndex) & 1) == 1);\n }\n\n const mask = maskFunc(row, col - c);\n\n if (mask) {\n dark = !dark;\n }\n\n _modules[row][col - c] = dark;\n bitIndex -= 1;\n\n if (bitIndex == -1) {\n byteIndex += 1;\n bitIndex = 7;\n }\n }\n }\n\n row += inc;\n\n if (row < 0 || _moduleCount <= row) {\n row -= inc;\n inc = -inc;\n break;\n }\n }\n }\n };\n\n const createBytes = function(buffer, rsBlocks) {\n\n let offset = 0;\n\n let maxDcCount = 0;\n let maxEcCount = 0;\n\n const dcdata = new Array(rsBlocks.length);\n const ecdata = new Array(rsBlocks.length);\n\n for (let r = 0; r < rsBlocks.length; r += 1) {\n\n const dcCount = rsBlocks[r].dataCount;\n const ecCount = rsBlocks[r].totalCount - dcCount;\n\n maxDcCount = Math.max(maxDcCount, dcCount);\n maxEcCount = Math.max(maxEcCount, ecCount);\n\n dcdata[r] = new Array(dcCount);\n\n for (let i = 0; i < dcdata[r].length; i += 1) {\n dcdata[r][i] = 0xff & buffer.getBuffer()[i + offset];\n }\n offset += dcCount;\n\n const rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount);\n const rawPoly = qrPolynomial(dcdata[r], rsPoly.getLength() - 1);\n\n const modPoly = rawPoly.mod(rsPoly);\n ecdata[r] = new Array(rsPoly.getLength() - 1);\n for (let i = 0; i < ecdata[r].length; i += 1) {\n const modIndex = i + modPoly.getLength() - ecdata[r].length;\n ecdata[r][i] = (modIndex >= 0)? modPoly.getAt(modIndex) : 0;\n }\n }\n\n let totalCodeCount = 0;\n for (let i = 0; i < rsBlocks.length; i += 1) {\n totalCodeCount += rsBlocks[i].totalCount;\n }\n\n const data = new Array(totalCodeCount);\n let index = 0;\n\n for (let i = 0; i < maxDcCount; i += 1) {\n for (let r = 0; r < rsBlocks.length; r += 1) {\n if (i < dcdata[r].length) {\n data[index] = dcdata[r][i];\n index += 1;\n }\n }\n }\n\n for (let i = 0; i < maxEcCount; i += 1) {\n for (let r = 0; r < rsBlocks.length; r += 1) {\n if (i < ecdata[r].length) {\n data[index] = ecdata[r][i];\n index += 1;\n }\n }\n }\n\n return data;\n };\n\n const createData = function(typeNumber, errorCorrectionLevel, dataList) {\n\n const rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectionLevel);\n\n const buffer = qrBitBuffer();\n\n for (let i = 0; i < dataList.length; i += 1) {\n const data = dataList[i];\n buffer.put(data.getMode(), 4);\n buffer.put(data.getLength(), QRUtil.getLengthInBits(data.getMode(), typeNumber) );\n data.write(buffer);\n }\n\n // calc num max data.\n let totalDataCount = 0;\n for (let i = 0; i < rsBlocks.length; i += 1) {\n totalDataCount += rsBlocks[i].dataCount;\n }\n\n if (buffer.getLengthInBits() > totalDataCount * 8) {\n throw 'code length overflow. ('\n + buffer.getLengthInBits()\n + '>'\n + totalDataCount * 8\n + ')';\n }\n\n // end code\n if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {\n buffer.put(0, 4);\n }\n\n // padding\n while (buffer.getLengthInBits() % 8 != 0) {\n buffer.putBit(false);\n }\n\n // padding\n while (true) {\n\n if (buffer.getLengthInBits() >= totalDataCount * 8) {\n break;\n }\n buffer.put(PAD0, 8);\n\n if (buffer.getLengthInBits() >= totalDataCount * 8) {\n break;\n }\n buffer.put(PAD1, 8);\n }\n\n return createBytes(buffer, rsBlocks);\n };\n\n _this.addData = function(data, mode) {\n\n mode = mode || 'Byte';\n\n let newData = null;\n\n switch(mode) {\n case 'Numeric' :\n newData = qrNumber(data);\n break;\n case 'Alphanumeric' :\n newData = qrAlphaNum(data);\n break;\n case 'Byte' :\n newData = qr8BitByte(data);\n break;\n case 'Kanji' :\n newData = qrKanji(data);\n break;\n default :\n throw 'mode:' + mode;\n }\n\n _dataList.push(newData);\n _dataCache = null;\n };\n\n _this.isDark = function(row, col) {\n if (row < 0 || _moduleCount <= row || col < 0 || _moduleCount <= col) {\n throw row + ',' + col;\n }\n return _modules[row][col];\n };\n\n _this.getModuleCount = function() {\n return _moduleCount;\n };\n\n _this.make = function() {\n if (_typeNumber < 1) {\n let typeNumber = 1;\n\n for (; typeNumber < 40; typeNumber++) {\n const rsBlocks = QRRSBlock.getRSBlocks(typeNumber, _errorCorrectionLevel);\n const buffer = qrBitBuffer();\n\n for (let i = 0; i < _dataList.length; i++) {\n const data = _dataList[i];\n buffer.put(data.getMode(), 4);\n buffer.put(data.getLength(), QRUtil.getLengthInBits(data.getMode(), typeNumber) );\n data.write(buffer);\n }\n\n let totalDataCount = 0;\n for (let i = 0; i < rsBlocks.length; i++) {\n totalDataCount += rsBlocks[i].dataCount;\n }\n\n if (buffer.getLengthInBits() <= totalDataCount * 8) {\n break;\n }\n }\n\n _typeNumber = typeNumber;\n }\n\n makeImpl(false, getBestMaskPattern() );\n };\n\n _this.createTableTag = function(cellSize, margin) {\n\n cellSize = cellSize || 2;\n margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n let qrHtml = '';\n\n qrHtml += '<table style=\"';\n qrHtml += ' border-width: 0px; border-style: none;';\n qrHtml += ' border-collapse: collapse;';\n qrHtml += ' padding: 0px; margin: ' + margin + 'px;';\n qrHtml += '\">';\n qrHtml += '<tbody>';\n\n for (let r = 0; r < _this.getModuleCount(); r += 1) {\n\n qrHtml += '<tr>';\n\n for (let c = 0; c < _this.getModuleCount(); c += 1) {\n qrHtml += '<td style=\"';\n qrHtml += ' border-width: 0px; border-style: none;';\n qrHtml += ' border-collapse: collapse;';\n qrHtml += ' padding: 0px; margin: 0px;';\n qrHtml += ' width: ' + cellSize + 'px;';\n qrHtml += ' height: ' + cellSize + 'px;';\n qrHtml += ' background-color: ';\n qrHtml += _this.isDark(r, c)? '#000000' : '#ffffff';\n qrHtml += ';';\n qrHtml += '\"/>';\n }\n\n qrHtml += '</tr>';\n }\n\n qrHtml += '</tbody>';\n qrHtml += '</table>';\n\n return qrHtml;\n };\n\n _this.createSvgTag = function(cellSize, margin, alt, title) {\n\n let opts = {};\n if (typeof arguments[0] == 'object') {\n // Called by options.\n opts = arguments[0];\n // overwrite cellSize and margin.\n cellSize = opts.cellSize;\n margin = opts.margin;\n alt = opts.alt;\n title = opts.title;\n }\n\n cellSize = cellSize || 2;\n margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n // Compose alt property surrogate\n alt = (typeof alt === 'string') ? {text: alt} : alt || {};\n alt.text = alt.text || null;\n alt.id = (alt.text) ? alt.id || 'qrcode-description' : null;\n\n // Compose title property surrogate\n title = (typeof title === 'string') ? {text: title} : title || {};\n title.text = title.text || null;\n title.id = (title.text) ? title.id || 'qrcode-title' : null;\n\n const size = _this.getModuleCount() * cellSize + margin * 2;\n let c, mc, r, mr, qrSvg='', rect;\n\n rect = 'l' + cellSize + ',0 0,' + cellSize +\n ' -' + cellSize + ',0 0,-' + cellSize + 'z ';\n\n qrSvg += '<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"';\n qrSvg += !opts.scalable ? ' width=\"' + size + 'px\" height=\"' + size + 'px\"' : '';\n qrSvg += ' viewBox=\"0 0 ' + size + ' ' + size + '\" ';\n qrSvg += ' preserveAspectRatio=\"xMinYMin meet\"';\n qrSvg += (title.text || alt.text) ? ' role=\"img\" aria-labelledby=\"' +\n escapeXml([title.id, alt.id].join(' ').trim() ) + '\"' : '';\n qrSvg += '>';\n qrSvg += (title.text) ? '<title id=\"' + escapeXml(title.id) + '\">' +\n escapeXml(title.text) + '</title>' : '';\n qrSvg += (alt.text) ? '<description id=\"' + escapeXml(alt.id) + '\">' +\n escapeXml(alt.text) + '</description>' : '';\n qrSvg += '<rect width=\"100%\" height=\"100%\" fill=\"white\" cx=\"0\" cy=\"0\"/>';\n qrSvg += '<path d=\"';\n\n for (r = 0; r < _this.getModuleCount(); r += 1) {\n mr = r * cellSize + margin;\n for (c = 0; c < _this.getModuleCount(); c += 1) {\n if (_this.isDark(r, c) ) {\n mc = c*cellSize+margin;\n qrSvg += 'M' + mc + ',' + mr + rect;\n }\n }\n }\n\n qrSvg += '\" stroke=\"transparent\" fill=\"black\"/>';\n qrSvg += '</svg>';\n\n return qrSvg;\n };\n\n _this.createDataURL = function(cellSize, margin) {\n\n cellSize = cellSize || 2;\n margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n const size = _this.getModuleCount() * cellSize + margin * 2;\n const min = margin;\n const max = size - margin;\n\n return createDataURL(size, size, function(x, y) {\n if (min <= x && x < max && min <= y && y < max) {\n const c = Math.floor( (x - min) / cellSize);\n const r = Math.floor( (y - min) / cellSize);\n return _this.isDark(r, c)? 0 : 1;\n } else {\n return 1;\n }\n } );\n };\n\n _this.createImgTag = function(cellSize, margin, alt) {\n\n cellSize = cellSize || 2;\n margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n const size = _this.getModuleCount() * cellSize + margin * 2;\n\n let img = '';\n img += '<img';\n img += '\\u0020src=\"';\n img += _this.createDataURL(cellSize, margin);\n img += '\"';\n img += '\\u0020width=\"';\n img += size;\n img += '\"';\n img += '\\u0020height=\"';\n img += size;\n img += '\"';\n if (alt) {\n img += '\\u0020alt=\"';\n img += escapeXml(alt);\n img += '\"';\n }\n img += '/>';\n\n return img;\n };\n\n const escapeXml = function(s) {\n let escaped = '';\n for (let i = 0; i < s.length; i += 1) {\n const c = s.charAt(i);\n switch(c) {\n case '<': escaped += '<'; break;\n case '>': escaped += '>'; break;\n case '&': escaped += '&'; break;\n case '\"': escaped += '"'; break;\n default : escaped += c; break;\n }\n }\n return escaped;\n };\n\n const _createHalfASCII = function(margin) {\n const cellSize = 1;\n margin = (typeof margin == 'undefined')? cellSize * 2 : margin;\n\n const size = _this.getModuleCount() * cellSize + margin * 2;\n const min = margin;\n const max = size - margin;\n\n let y, x, r1, r2, p;\n\n const blocks = {\n '██': '█',\n '█ ': '▀',\n ' █': '▄',\n ' ': ' '\n };\n\n const blocksLastLineNoMargin = {\n '██': '▀',\n '█ ': '▀',\n ' █': ' ',\n ' ': ' '\n };\n\n let ascii = '';\n for (y = 0; y < size; y += 2) {\n r1 = Math.floor((y - min) / cellSize);\n r2 = Math.floor((y + 1 - min) / cellSize);\n for (x = 0; x < size; x += 1) {\n p = '█';\n\n if (min <= x && x < max && min <= y && y < max && _this.isDark(r1, Math.floor((x - min) / cellSize))) {\n p = ' ';\n }\n\n if (min <= x && x < max && min <= y+1 && y+1 < max && _this.isDark(r2, Math.floor((x - min) / cellSize))) {\n p += ' ';\n }\n else {\n p += '█';\n }\n\n // Output 2 characters per pixel, to create full square. 1 character per pixels gives only half width of square.\n ascii += (margin < 1 && y+1 >= max) ? blocksLastLineNoMargin[p] : blocks[p];\n }\n\n ascii += '\\n';\n }\n\n if (size % 2 && margin > 0) {\n return ascii.substring(0, ascii.length - size - 1) + Array(size+1).join('▀');\n }\n\n return ascii.substring(0, ascii.length-1);\n };\n\n _this.createASCII = function(cellSize, margin) {\n cellSize = cellSize || 1;\n\n if (cellSize < 2) {\n return _createHalfASCII(margin);\n }\n\n cellSize -= 1;\n margin = (typeof margin == 'undefined')? cellSize * 2 : margin;\n\n const size = _this.getModuleCount() * cellSize + margin * 2;\n const min = margin;\n const max = size - margin;\n\n let y, x, r, p;\n\n const white = Array(cellSize+1).join('██');\n const black = Array(cellSize+1).join(' ');\n\n let ascii = '';\n let line = '';\n for (y = 0; y < size; y += 1) {\n r = Math.floor( (y - min) / cellSize);\n line = '';\n for (x = 0; x < size; x += 1) {\n p = 1;\n\n if (min <= x && x < max && min <= y && y < max && _this.isDark(r, Math.floor((x - min) / cellSize))) {\n p = 0;\n }\n\n // Output 2 characters per pixel, to create full square. 1 character per pixels gives only half width of square.\n line += p ? white : black;\n }\n\n for (r = 0; r < cellSize; r += 1) {\n ascii += line + '\\n';\n }\n }\n\n return ascii.substring(0, ascii.length-1);\n };\n\n _this.renderTo2dContext = function(context, cellSize) {\n cellSize = cellSize || 2;\n const length = _this.getModuleCount();\n for (let row = 0; row < length; row++) {\n for (let col = 0; col < length; col++) {\n context.fillStyle = _this.isDark(row, col) ? 'black' : 'white';\n context.fillRect(col * cellSize, row * cellSize, cellSize, cellSize);\n }\n }\n }\n\n return _this;\n};\n\n//---------------------------------------------------------------------\n// qrcode.stringToBytes\n//---------------------------------------------------------------------\n\nqrcode.stringToBytes = function(s) {\n const bytes = [];\n for (let i = 0; i < s.length; i += 1) {\n const c = s.charCodeAt(i);\n bytes.push(c & 0xff);\n }\n return bytes;\n};\n\n//---------------------------------------------------------------------\n// qrcode.createStringToBytes\n//---------------------------------------------------------------------\n\n/**\n * @param unicodeData base64 string of byte array.\n * [16bit Unicode],[16bit Bytes], ...\n * @param numChars\n */\nqrcode.createStringToBytes = function(unicodeData, numChars) {\n\n // create conversion map.\n\n const unicodeMap = function() {\n\n const bin = base64DecodeInputStream(unicodeData);\n const read = function() {\n const b = bin.read();\n if (b == -1) throw 'eof';\n return b;\n };\n\n let count = 0;\n const unicodeMap = {};\n while (true) {\n const b0 = bin.read();\n if (b0 == -1) break;\n const b1 = read();\n const b2 = read();\n const b3 = read();\n const k = String.fromCharCode( (b0 << 8) | b1);\n const v = (b2 << 8) | b3;\n unicodeMap[k] = v;\n count += 1;\n }\n if (count != numChars) {\n throw count + ' != ' + numChars;\n }\n\n return unicodeMap;\n }();\n\n const unknownChar = '?'.charCodeAt(0);\n\n return function(s) {\n const bytes = [];\n for (let i = 0; i < s.length; i += 1) {\n const c = s.charCodeAt(i);\n if (c < 128) {\n bytes.push(c);\n } else {\n const b = unicodeMap[s.charAt(i)];\n if (typeof b == 'number') {\n if ( (b & 0xff) == b) {\n // 1byte\n bytes.push(b);\n } else {\n // 2bytes\n bytes.push(b >>> 8);\n bytes.push(b & 0xff);\n }\n } else {\n bytes.push(unknownChar);\n }\n }\n }\n return bytes;\n };\n};\n\n//---------------------------------------------------------------------\n// QRMode\n//---------------------------------------------------------------------\n\nconst QRMode = {\n MODE_NUMBER : 1 << 0,\n MODE_ALPHA_NUM : 1 << 1,\n MODE_8BIT_BYTE : 1 << 2,\n MODE_KANJI : 1 << 3\n};\n\n//---------------------------------------------------------------------\n// QRErrorCorrectionLevel\n//---------------------------------------------------------------------\n\nconst QRErrorCorrectionLevel = {\n L : 1,\n M : 0,\n Q : 3,\n H : 2\n};\n\n//---------------------------------------------------------------------\n// QRMaskPattern\n//---------------------------------------------------------------------\n\nconst QRMaskPattern = {\n PATTERN000 : 0,\n PATTERN001 : 1,\n PATTERN010 : 2,\n PATTERN011 : 3,\n PATTERN100 : 4,\n PATTERN101 : 5,\n PATTERN110 : 6,\n PATTERN111 : 7\n};\n\n//---------------------------------------------------------------------\n// QRUtil\n//---------------------------------------------------------------------\n\nconst QRUtil = function() {\n\n const PATTERN_POSITION_TABLE = [\n [],\n [6, 18],\n [6, 22],\n [6, 26],\n [6, 30],\n [6, 34],\n [6, 22, 38],\n [6, 24, 42],\n [6, 26, 46],\n [6, 28, 50],\n [6, 30, 54],\n [6, 32, 58],\n [6, 34, 62],\n [6, 26, 46, 66],\n [6, 26, 48, 70],\n [6, 26, 50, 74],\n [6, 30, 54, 78],\n [6, 30, 56, 82],\n [6, 30, 58, 86],\n [6, 34, 62, 90],\n [6, 28, 50, 72, 94],\n [6, 26, 50, 74, 98],\n [6, 30, 54, 78, 102],\n [6, 28, 54, 80, 106],\n [6, 32, 58, 84, 110],\n [6, 30, 58, 86, 114],\n [6, 34, 62, 90, 118],\n [6, 26, 50, 74, 98, 122],\n [6, 30, 54, 78, 102, 126],\n [6, 26, 52, 78, 104, 130],\n [6, 30, 56, 82, 108, 134],\n [6, 34, 60, 86, 112, 138],\n [6, 30, 58, 86, 114, 142],\n [6, 34, 62, 90, 118, 146],\n [6, 30, 54, 78, 102, 126, 150],\n [6, 24, 50, 76, 102, 128, 154],\n [6, 28, 54, 80, 106, 132, 158],\n [6, 32, 58, 84, 110, 136, 162],\n [6, 26, 54, 82, 110, 138, 166],\n [6, 30, 58, 86, 114, 142, 170]\n ];\n const G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0);\n const G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0);\n const G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1);\n\n const _this = {};\n\n const getBCHDigit = function(data) {\n let digit = 0;\n while (data != 0) {\n digit += 1;\n data >>>= 1;\n }\n return digit;\n };\n\n _this.getBCHTypeInfo = function(data) {\n let d = data << 10;\n while (getBCHDigit(d) - getBCHDigit(G15) >= 0) {\n d ^= (G15 << (getBCHDigit(d) - getBCHDigit(G15) ) );\n }\n return ( (data << 10) | d) ^ G15_MASK;\n };\n\n _this.getBCHTypeNumber = function(data) {\n let d = data << 12;\n while (getBCHDigit(d) - getBCHDigit(G18) >= 0) {\n d ^= (G18 << (getBCHDigit(d) - getBCHDigit(G18) ) );\n }\n return (data << 12) | d;\n };\n\n _this.getPatternPosition = function(typeNumber) {\n return PATTERN_POSITION_TABLE[typeNumber - 1];\n };\n\n _this.getMaskFunction = function(maskPattern) {\n\n switch (maskPattern) {\n\n case QRMaskPattern.PATTERN000 :\n return function(i, j) { return (i + j) % 2 == 0; };\n case QRMaskPattern.PATTERN001 :\n return function(i, j) { return i % 2 == 0; };\n case QRMaskPattern.PATTERN010 :\n return function(i, j) { return j % 3 == 0; };\n case QRMaskPattern.PATTERN011 :\n return function(i, j) { return (i + j) % 3 == 0; };\n case QRMaskPattern.PATTERN100 :\n return function(i, j) { return (Math.floor(i / 2) + Math.floor(j / 3) ) % 2 == 0; };\n case QRMaskPattern.PATTERN101 :\n return function(i, j) { return (i * j) % 2 + (i * j) % 3 == 0; };\n case QRMaskPattern.PATTERN110 :\n return function(i, j) { return ( (i * j) % 2 + (i * j) % 3) % 2 == 0; };\n case QRMaskPattern.PATTERN111 :\n return function(i, j) { return ( (i * j) % 3 + (i + j) % 2) % 2 == 0; };\n\n default :\n throw 'bad maskPattern:' + maskPattern;\n }\n };\n\n _this.getErrorCorrectPolynomial = function(errorCorrectLength) {\n let a = qrPolynomial([1], 0);\n for (let i = 0; i < errorCorrectLength; i += 1) {\n a = a.multiply(qrPolynomial([1, QRMath.gexp(i)], 0) );\n }\n return a;\n };\n\n _this.getLengthInBits = function(mode, type) {\n\n if (1 <= type && type < 10) {\n\n // 1 - 9\n\n switch(mode) {\n case QRMode.MODE_NUMBER : return 10;\n case QRMode.MODE_ALPHA_NUM : return 9;\n case QRMode.MODE_8BIT_BYTE : return 8;\n case QRMode.MODE_KANJI : return 8;\n default :\n throw 'mode:' + mode;\n }\n\n } else if (type < 27) {\n\n // 10 - 26\n\n switch(mode) {\n case QRMode.MODE_NUMBER : return 12;\n case QRMode.MODE_ALPHA_NUM : return 11;\n case QRMode.MODE_8BIT_BYTE : return 16;\n case QRMode.MODE_KANJI : return 10;\n default :\n throw 'mode:' + mode;\n }\n\n } else if (type < 41) {\n\n // 27 - 40\n\n switch(mode) {\n case QRMode.MODE_NUMBER : return 14;\n case QRMode.MODE_ALPHA_NUM : return 13;\n case QRMode.MODE_8BIT_BYTE : return 16;\n case QRMode.MODE_KANJI : return 12;\n default :\n throw 'mode:' + mode;\n }\n\n } else {\n throw 'type:' + type;\n }\n };\n\n _this.getLostPoint = function(qrcode) {\n\n const moduleCount = qrcode.getModuleCount();\n\n let lostPoint = 0;\n\n // LEVEL1\n\n for (let row = 0; row < moduleCount; row += 1) {\n for (let col = 0; col < moduleCount; col += 1) {\n\n let sameCount = 0;\n const dark = qrcode.isDark(row, col);\n\n for (let r = -1; r <= 1; r += 1) {\n\n if (row + r < 0 || moduleCount <= row + r) {\n continue;\n }\n\n for (let c = -1; c <= 1; c += 1) {\n\n if (col + c < 0 || moduleCount <= col + c) {\n continue;\n }\n\n if (r == 0 && c == 0) {\n continue;\n }\n\n if (dark == qrcode.isDark(row + r, col + c) ) {\n sameCount += 1;\n }\n }\n }\n\n if (sameCount > 5) {\n lostPoint += (3 + sameCount - 5);\n }\n }\n };\n\n // LEVEL2\n\n for (let row = 0; row < moduleCount - 1; row += 1) {\n for (let col = 0; col < moduleCount - 1; col += 1) {\n let count = 0;\n if (qrcode.isDark(row, col) ) count += 1;\n if (qrcode.isDark(row + 1, col) ) count += 1;\n if (qrcode.isDark(row, col + 1) ) count += 1;\n if (qrcode.isDark(row + 1, col + 1) ) count += 1;\n if (count == 0 || count == 4) {\n lostPoint += 3;\n }\n }\n }\n\n // LEVEL3\n\n for (let row = 0; row < moduleCount; row += 1) {\n for (let col = 0; col < moduleCount - 6; col += 1) {\n if (qrcode.isDark(row, col)\n && !qrcode.isDark(row, col + 1)\n && qrcode.isDark(row, col + 2)\n && qrcode.isDark(row, col + 3)\n && qrcode.isDark(row, col + 4)\n && !qrcode.isDark(row, col + 5)\n && qrcode.isDark(row, col + 6) ) {\n lostPoint += 40;\n }\n }\n }\n\n for (let col = 0; col < moduleCount; col += 1) {\n for (let row = 0; row < moduleCount - 6; row += 1) {\n if (qrcode.isDark(row, col)\n && !qrcode.isDark(row + 1, col)\n && qrcode.isDark(row + 2, col)\n && qrcode.isDark(row + 3, col)\n && qrcode.isDark(row + 4, col)\n && !qrcode.isDark(row + 5, col)\n && qrcode.isDark(row + 6, col) ) {\n lostPoint += 40;\n }\n }\n }\n\n // LEVEL4\n\n let darkCount = 0;\n\n for (let col = 0; col < moduleCount; col += 1) {\n for (let row = 0; row < moduleCount; row += 1) {\n if (qrcode.isDark(row, col) ) {\n darkCount += 1;\n }\n }\n }\n\n const ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5;\n lostPoint += ratio * 10;\n\n return lostPoint;\n };\n\n return _this;\n}();\n\n//---------------------------------------------------------------------\n// QRMath\n//---------------------------------------------------------------------\n\nconst QRMath = function() {\n\n const EXP_TABLE = new Array(256);\n const LOG_TABLE = new Array(256);\n\n // initialize tables\n for (let i = 0; i < 8; i += 1) {\n EXP_TABLE[i] = 1 << i;\n }\n for (let i = 8; i < 256; i += 1) {\n EXP_TABLE[i] = EXP_TABLE[i - 4]\n ^ EXP_TABLE[i - 5]\n ^ EXP_TABLE[i - 6]\n ^ EXP_TABLE[i - 8];\n }\n for (let i = 0; i < 255; i += 1) {\n LOG_TABLE[EXP_TABLE[i] ] = i;\n }\n\n const _this = {};\n\n _this.glog = function(n) {\n\n if (n < 1) {\n throw 'glog(' + n + ')';\n }\n\n return LOG_TABLE[n];\n };\n\n _this.gexp = function(n) {\n\n while (n < 0) {\n n += 255;\n }\n\n while (n >= 256) {\n n -= 255;\n }\n\n return EXP_TABLE[n];\n };\n\n return _this;\n}();\n\n//---------------------------------------------------------------------\n// qrPolynomial\n//---------------------------------------------------------------------\n\nconst qrPolynomial = function(num, shift) {\n\n if (typeof num.length == 'undefined') {\n throw num.length + '/' + shift;\n }\n\n const _num = function() {\n let offset = 0;\n while (offset < num.length && num[offset] == 0) {\n offset += 1;\n }\n const _num = new Array(num.length - offset + shift);\n for (let i = 0; i < num.length - offset; i += 1) {\n _num[i] = num[i + offset];\n }\n return _num;\n }();\n\n const _this = {};\n\n _this.getAt = function(index) {\n return _num[index];\n };\n\n _this.getLength = function() {\n return _num.length;\n };\n\n _this.multiply = function(e) {\n\n const num = new Array(_this.getLength() + e.getLength() - 1);\n\n for (let i = 0; i < _this.getLength(); i += 1) {\n for (let j = 0; j < e.getLength(); j += 1) {\n num[i + j] ^= QRMath.gexp(QRMath.glog(_this.getAt(i) ) + QRMath.glog(e.getAt(j) ) );\n }\n }\n\n return qrPolynomial(num, 0);\n };\n\n _this.mod = function(e) {\n\n if (_this.getLength() - e.getLength() < 0) {\n return _this;\n }\n\n const ratio = QRMath.glog(_this.getAt(0) ) - QRMath.glog(e.getAt(0) );\n\n const num = new Array(_this.getLength() );\n for (let i = 0; i < _this.getLength(); i += 1) {\n num[i] = _this.getAt(i);\n }\n\n for (let i = 0; i < e.getLength(); i += 1) {\n num[i] ^= QRMath.gexp(QRMath.glog(e.getAt(i) ) + ratio);\n }\n\n // recursive call\n return qrPolynomial(num, 0).mod(e);\n };\n\n return _this;\n};\n\n//---------------------------------------------------------------------\n// QRRSBlock\n//---------------------------------------------------------------------\n\nconst QRRSBlock = function() {\n\n const RS_BLOCK_TABLE = [\n\n // L\n // M\n // Q\n // H\n\n // 1\n [1, 26, 19],\n [1, 26, 16],\n [1, 26, 13],\n [1, 26, 9],\n\n // 2\n [1, 44, 34],\n [1, 44, 28],\n [1, 44, 22],\n [1, 44, 16],\n\n // 3\n [1, 70, 55],\n [1, 70, 44],\n [2, 35, 17],\n [2, 35, 13],\n\n // 4\n [1, 100, 80],\n [2, 50, 32],\n [2, 50, 24],\n [4, 25, 9],\n\n // 5\n [1, 134, 108],\n [2, 67, 43],\n [2, 33, 15, 2, 34, 16],\n [2, 33, 11, 2, 34, 12],\n\n // 6\n [2, 86, 68],\n [4, 43, 27],\n [4, 43, 19],\n [4, 43, 15],\n\n // 7\n [2, 98, 78],\n [4, 49, 31],\n [2, 32, 14, 4, 33, 15],\n [4, 39, 13, 1, 40, 14],\n\n // 8\n [2, 121, 97],\n [2, 60, 38, 2, 61, 39],\n [4, 40, 18, 2, 41, 19],\n [4, 40, 14, 2, 41, 15],\n\n // 9\n [2, 146, 116],\n [3, 58, 36, 2, 59, 37],\n [4, 36, 16, 4, 37, 17],\n [4, 36, 12, 4, 37, 13],\n\n // 10\n [2, 86, 68, 2, 87, 69],\n [4, 69, 43, 1, 70, 44],\n [6, 43, 19, 2, 44, 20],\n [6, 43, 15, 2, 44, 16],\n\n // 11\n [4, 101, 81],\n [1, 80, 50, 4, 81, 51],\n [4, 50, 22, 4, 51, 23],\n [3, 36, 12, 8, 37, 13],\n\n // 12\n [2, 116, 92, 2, 117, 93],\n [6, 58, 36, 2, 59, 37],\n [4, 46, 20, 6, 47, 21],\n [7, 42, 14, 4, 43, 15],\n\n // 13\n [4, 133, 107],\n [8, 59, 37, 1, 60, 38],\n [8, 44, 20, 4, 45, 21],\n [12, 33, 11, 4, 34, 12],\n\n // 14\n [3, 145, 115, 1, 146, 116],\n [4, 64, 40, 5, 65, 41],\n [11, 36, 16, 5, 37, 17],\n [11, 36, 12, 5, 37, 13],\n\n // 15\n [5, 109, 87, 1, 110, 88],\n [5, 65, 41, 5, 66, 42],\n [5, 54, 24, 7, 55, 25],\n [11, 36, 12, 7, 37, 13],\n\n // 16\n [5, 122, 98, 1, 123, 99],\n [7, 73, 45, 3, 74, 46],\n [15, 43, 19, 2, 44, 20],\n [3, 45, 15, 13, 46, 16],\n\n // 17\n [1, 135, 107, 5, 136, 108],\n [10, 74, 46, 1, 75, 47],\n [1, 50, 22, 15, 51, 23],\n [2, 42, 14, 17, 43, 15],\n\n // 18\n [5, 150, 120, 1, 151, 121],\n [9, 69, 43, 4, 70, 44],\n [17, 50, 22, 1, 51, 23],\n [2, 42, 14, 19, 43, 15],\n\n // 19\n [3, 141, 113, 4, 142, 114],\n [3, 70, 44, 11, 71, 45],\n [17, 47, 21, 4, 48, 22],\n [9, 39, 13, 16, 40, 14],\n\n // 20\n [3, 135, 107, 5, 136, 108],\n [3, 67, 41, 13, 68, 42],\n [15, 54, 24, 5, 55, 25],\n [15, 43, 15, 10, 44, 16],\n\n // 21\n [4, 144, 116, 4, 145, 117],\n [17, 68, 42],\n [17, 50, 22, 6, 51, 23],\n [19, 46, 16, 6, 47, 17],\n\n // 22\n [2, 139, 111, 7, 140, 112],\n [17, 74, 46],\n [7, 54, 24, 16, 55, 25],\n [34, 37, 13],\n\n // 23\n [4, 151, 121, 5, 152, 122],\n [4, 75, 47, 14, 76, 48],\n [11, 54, 24, 14, 55, 25],\n [16, 45, 15, 14, 46, 16],\n\n // 24\n [6, 147, 117, 4, 148, 118],\n [6, 73, 45, 14, 74, 46],\n [11, 54, 24, 16, 55, 25],\n [30, 46, 16, 2, 47, 17],\n\n // 25\n [8, 132, 106, 4, 133, 107],\n [8, 75, 47, 13, 76, 48],\n [7, 54, 24, 22, 55, 25],\n [22, 45, 15, 13, 46, 16],\n\n // 26\n [10, 142, 114, 2, 143, 115],\n [19, 74, 46, 4, 75, 47],\n [28, 50, 22, 6, 51, 23],\n [33, 46, 16, 4, 47, 17],\n\n // 27\n [8, 152, 122, 4, 153, 123],\n [22, 73, 45, 3, 74, 46],\n [8, 53, 23, 26, 54, 24],\n [12, 45, 15, 28, 46, 16],\n\n // 28\n [3, 147, 117, 10, 148, 118],\n [3, 73, 45, 23, 74, 46],\n [4, 54, 24, 31, 55, 25],\n [11, 45, 15, 31, 46, 16],\n\n // 29\n [7, 146, 116, 7, 147, 117],\n [21, 73, 45, 7, 74, 46],\n [1, 53, 23, 37, 54, 24],\n [19, 45, 15, 26, 46, 16],\n\n // 30\n [5, 145, 115, 10, 146, 116],\n [19, 75, 47, 10, 76, 48],\n [15, 54, 24, 25, 55, 25],\n [23, 45, 15, 25, 46, 16],\n\n // 31\n [13, 145, 115, 3, 146, 116],\n [2, 74, 46, 29, 75, 47],\n [42, 54, 24, 1, 55, 25],\n [23, 45, 15, 28, 46, 16],\n\n // 32\n [17, 145, 115],\n [10, 74, 46, 23, 75, 47],\n [10, 54, 24, 35, 55, 25],\n [19, 45, 15, 35, 46, 16],\n\n // 33\n [17, 145, 115, 1, 146, 116],\n [14, 74, 46, 21, 75, 47],\n [29, 54, 24, 19, 55, 25],\n [11, 45, 15, 46, 46, 16],\n\n // 34\n [13, 145, 115, 6, 146, 116],\n [14, 74, 46, 23, 75, 47],\n [44, 54, 24, 7, 55, 25],\n [59, 46, 16, 1, 47, 17],\n\n // 35\n [12, 151, 121, 7, 152, 122],\n [12, 75, 47, 26, 76, 48],\n [39, 54, 24, 14, 55, 25],\n [22, 45, 15, 41, 46, 16],\n\n // 36\n [6, 151, 121, 14, 152, 122],\n [6, 75, 47, 34, 76, 48],\n [46, 54, 24, 10, 55, 25],\n [2, 45, 15, 64, 46, 16],\n\n // 37\n [17, 152, 122, 4, 153, 123],\n [29, 74, 46, 14, 75, 47],\n [49, 54, 24, 10, 55, 25],\n [24, 45, 15, 46, 46, 16],\n\n // 38\n [4, 152, 122, 18, 153, 123],\n [13, 74, 46, 32, 75, 47],\n [48, 54, 24, 14, 55, 25],\n [42, 45, 15, 32, 46, 16],\n\n // 39\n [20, 147, 117, 4, 148, 118],\n [40, 75, 47, 7, 76, 48],\n [43, 54, 24, 22, 55, 25],\n [10, 45, 15, 67, 46, 16],\n\n // 40\n [19, 148, 118, 6, 149, 119],\n [18, 75, 47, 31, 76, 48],\n [34, 54, 24, 34, 55, 25],\n [20, 45, 15, 61, 46, 16]\n ];\n\n const qrRSBlock = function(totalCount, dataCount) {\n const _this = {};\n _this.totalCount = totalCount;\n _this.dataCount = dataCount;\n return _this;\n };\n\n const _this = {};\n\n const getRsBlockTable = function(typeNumber, errorCorrectionLevel) {\n\n switch(errorCorrectionLevel) {\n case QRErrorCorrectionLevel.L :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];\n case QRErrorCorrectionLevel.M :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];\n case QRErrorCorrectionLevel.Q :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];\n case QRErrorCorrectionLevel.H :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];\n default :\n return undefined;\n }\n };\n\n _this.getRSBlocks = function(typeNumber, errorCorrectionLevel) {\n\n const rsBlock = getRsBlockTable(typeNumber, errorCorrectionLevel);\n\n if (typeof rsBlock == 'undefined') {\n throw 'bad rs block @ typeNumber:' + typeNumber +\n '/errorCorrectionLevel:' + errorCorrectionLevel;\n }\n\n const length = rsBlock.length / 3;\n\n const list = [];\n\n for (let i = 0; i < length; i += 1) {\n\n const count = rsBlock[i * 3 + 0];\n const totalCount = rsBlock[i * 3 + 1];\n const dataCount = rsBlock[i * 3 + 2];\n\n for (let j = 0; j < count; j += 1) {\n list.push(qrRSBlock(totalCount, dataCount) );\n }\n }\n\n return list;\n };\n\n return _this;\n}();\n\n//---------------------------------------------------------------------\n// qrBitBuffer\n//---------------------------------------------------------------------\n\nconst qrBitBuffer = function() {\n\n const _buffer = [];\n let _length = 0;\n\n const _this = {};\n\n _this.getBuffer = function() {\n return _buffer;\n };\n\n _this.getAt = function(index) {\n const bufIndex = Math.floor(index / 8);\n return ( (_buffer[bufIndex] >>> (7 - index % 8) ) & 1) == 1;\n };\n\n _this.put = function(num, length) {\n for (let i = 0; i < length; i += 1) {\n _this.putBit( ( (num >>> (length - i - 1) ) & 1) == 1);\n }\n };\n\n _this.getLengthInBits = function() {\n return _length;\n };\n\n _this.putBit = function(bit) {\n\n const bufIndex = Math.floor(_length / 8);\n if (_buffer.length <= bufIndex) {\n _buffer.push(0);\n }\n\n if (bit) {\n _buffer[bufIndex] |= (0x80 >>> (_length % 8) );\n }\n\n _length += 1;\n };\n\n return _this;\n};\n\n//---------------------------------------------------------------------\n// qrNumber\n//---------------------------------------------------------------------\n\nconst qrNumber = function(data) {\n\n const _mode = QRMode.MODE_NUMBER;\n const _data = data;\n\n const _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return _data.length;\n };\n\n _this.write = function(buffer) {\n\n const data = _data;\n\n let i = 0;\n\n while (i + 2 < data.length) {\n buffer.put(strToNum(data.substring(i, i + 3) ), 10);\n i += 3;\n }\n\n if (i < data.length) {\n if (data.length - i == 1) {\n buffer.put(strToNum(data.substring(i, i + 1) ), 4);\n } else if (data.length - i == 2) {\n buffer.put(strToNum(data.substring(i, i + 2) ), 7);\n }\n }\n };\n\n const strToNum = function(s) {\n let num = 0;\n for (let i = 0; i < s.length; i += 1) {\n num = num * 10 + chatToNum(s.charAt(i) );\n }\n return num;\n };\n\n const chatToNum = function(c) {\n if ('0' <= c && c <= '9') {\n return c.charCodeAt(0) - '0'.charCodeAt(0);\n }\n throw 'illegal char :' + c;\n };\n\n return _this;\n};\n\n//---------------------------------------------------------------------\n// qrAlphaNum\n//---------------------------------------------------------------------\n\nconst qrAlphaNum = function(data) {\n\n const _mode = QRMode.MODE_ALPHA_NUM;\n const _data = data;\n\n const _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return _data.length;\n };\n\n _this.write = function(buffer) {\n\n const s = _data;\n\n let i = 0;\n\n while (i + 1 < s.length) {\n buffer.put(\n getCode(s.charAt(i) ) * 45 +\n getCode(s.charAt(i + 1) ), 11);\n i += 2;\n }\n\n if (i < s.length) {\n buffer.put(getCode(s.charAt(i) ), 6);\n }\n };\n\n const getCode = function(c) {\n\n if ('0' <= c && c <= '9') {\n return c.charCodeAt(0) - '0'.charCodeAt(0);\n } else if ('A' <= c && c <= 'Z') {\n return c.charCodeAt(0) - 'A'.charCodeAt(0) + 10;\n } else {\n switch (c) {\n case '\\u0020' : return 36;\n case '$' : return 37;\n case '%' : return 38;\n case '*' : return 39;\n case '+' : return 40;\n case '-' : return 41;\n case '.' : return 42;\n case '/' : return 43;\n case ':' : return 44;\n default :\n throw 'illegal char :' + c;\n }\n }\n };\n\n return _this;\n};\n\n//---------------------------------------------------------------------\n// qr8BitByte\n//---------------------------------------------------------------------\n\nconst qr8BitByte = function(data) {\n\n const _mode = QRMode.MODE_8BIT_BYTE;\n const _data = data;\n const _bytes = qrcode.stringToBytes(data);\n\n const _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return _bytes.length;\n };\n\n _this.write = function(buffer) {\n for (let i = 0; i < _bytes.length; i += 1) {\n buffer.put(_bytes[i], 8);\n }\n };\n\n return _this;\n};\n\n//---------------------------------------------------------------------\n// qrKanji\n//---------------------------------------------------------------------\n\nconst qrKanji = function(data) {\n\n const _mode = QRMode.MODE_KANJI;\n const _data = data;\n\n const stringToBytes = qrcode.stringToBytes;\n !function(c, code) {\n // self test for sjis support.\n const test = stringToBytes(c);\n if (test.length != 2 || ( (test[0] << 8) | test[1]) != code) {\n throw 'sjis not supported.';\n }\n }('\\u53cb', 0x9746);\n\n const _bytes = stringToBytes(data);\n\n const _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return ~~(_bytes.length / 2);\n };\n\n _this.write = function(buffer) {\n\n const data = _bytes;\n\n let i = 0;\n\n while (i + 1 < data.length) {\n\n let c = ( (0xff & data[i]) << 8) | (0xff & data[i + 1]);\n\n if (0x8140 <= c && c <= 0x9FFC) {\n c -= 0x8140;\n } else if (0xE040 <= c && c <= 0xEBBF) {\n c -= 0xC140;\n } else {\n throw 'illegal char at ' + (i + 1) + '/' + c;\n }\n\n c = ( (c >>> 8) & 0xff) * 0xC0 + (c & 0xff);\n\n buffer.put(c, 13);\n\n i += 2;\n }\n\n if (i < data.length) {\n throw 'illegal char at ' + (i + 1);\n }\n };\n\n return _this;\n};\n\n//=====================================================================\n// GIF Support etc.\n//\n\n//---------------------------------------------------------------------\n// byteArrayOutputStream\n//---------------------------------------------------------------------\n\nconst byteArrayOutputStream = function() {\n\n const _bytes = [];\n\n const _this = {};\n\n _this.writeByte = function(b) {\n _bytes.push(b & 0xff);\n };\n\n _this.writeShort = function(i) {\n _this.writeByte(i);\n _this.writeByte(i >>> 8);\n };\n\n _this.writeBytes = function(b, off, len) {\n off = off || 0;\n len = len || b.length;\n for (let i = 0; i < len; i += 1) {\n _this.writeByte(b[i + off]);\n }\n };\n\n _this.writeString = function(s) {\n for (let i = 0; i < s.length; i += 1) {\n _this.writeByte(s.charCodeAt(i) );\n }\n };\n\n _this.toByteArray = function() {\n return _bytes;\n };\n\n _this.toString = function() {\n let s = '';\n s += '[';\n for (let i = 0; i < _bytes.length; i += 1) {\n if (i > 0) {\n s += ',';\n }\n s += _bytes[i];\n }\n s += ']';\n return s;\n };\n\n return _this;\n};\n\n//---------------------------------------------------------------------\n// base64EncodeOutputStream\n//---------------------------------------------------------------------\n\nconst base64EncodeOutputStream = function() {\n\n let _buffer = 0;\n let _buflen = 0;\n let _length = 0;\n let _base64 = '';\n\n const _this = {};\n\n const writeEncoded = function(b) {\n _base64 += String.fromCharCode(encode(b & 0x3f) );\n };\n\n const encode = function(n) {\n if (n < 0) {\n throw 'n:' + n;\n } else if (n < 26) {\n return 0x41 + n;\n } else if (n < 52) {\n return 0x61 + (n - 26);\n } else if (n < 62) {\n return 0x30 + (n - 52);\n } else if (n == 62) {\n return 0x2b;\n } else if (n == 63) {\n return 0x2f;\n } else {\n throw 'n:' + n;\n }\n };\n\n _this.writeByte = function(n) {\n\n _buffer = (_buffer << 8) | (n & 0xff);\n _buflen += 8;\n _length += 1;\n\n while (_buflen >= 6) {\n writeEncoded(_buffer >>> (_buflen - 6) );\n _buflen -= 6;\n }\n };\n\n _this.flush = function() {\n\n if (_buflen > 0) {\n writeEncoded(_buffer << (6 - _buflen) );\n _buffer = 0;\n _buflen = 0;\n }\n\n if (_length % 3 != 0) {\n // padding\n const padlen = 3 - _length % 3;\n for (let i = 0; i < padlen; i += 1) {\n _base64 += '=';\n }\n }\n };\n\n _this.toString = function() {\n return _base64;\n };\n\n return _this;\n};\n\n//---------------------------------------------------------------------\n// base64DecodeInputStream\n//---------------------------------------------------------------------\n\nconst base64DecodeInputStream = function(str) {\n\n const _str = str;\n let _pos = 0;\n let _buffer = 0;\n let _buflen = 0;\n\n const _this = {};\n\n _this.read = function() {\n\n while (_buflen < 8) {\n\n if (_pos >= _str.length) {\n if (_buflen == 0) {\n return -1;\n }\n throw 'unexpected end of file./' + _buflen;\n }\n\n const c = _str.charAt(_pos);\n _pos += 1;\n\n if (c == '=') {\n _buflen = 0;\n return -1;\n } else if (c.match(/^\\s$/) ) {\n // ignore if whitespace.\n continue;\n }\n\n _buffer = (_buffer << 6) | decode(c.charCodeAt(0) );\n _buflen += 6;\n }\n\n const n = (_buffer >>> (_buflen - 8) ) & 0xff;\n _buflen -= 8;\n return n;\n };\n\n const decode = function(c) {\n if (0x41 <= c && c <= 0x5a) {\n return c - 0x41;\n } else if (0x61 <= c && c <= 0x7a) {\n return c - 0x61 + 26;\n } else if (0x30 <= c && c <= 0x39) {\n return c - 0x30 + 52;\n } else if (c == 0x2b) {\n return 62;\n } else if (c == 0x2f) {\n return 63;\n } else {\n throw 'c:' + c;\n }\n };\n\n return _this;\n};\n\n//---------------------------------------------------------------------\n// gifImage (B/W)\n//---------------------------------------------------------------------\n\nconst gifImage = function(width, height) {\n\n const _width = width;\n const _height = height;\n const _data = new Array(width * height);\n\n const _this = {};\n\n _this.setPixel = function(x, y, pixel) {\n _data[y * _width + x] = pixel;\n };\n\n _this.write = function(out) {\n\n //---------------------------------\n // GIF Signature\n\n out.writeString('GIF87a');\n\n //---------------------------------\n // Screen Descriptor\n\n out.writeShort(_width);\n out.writeShort(_height);\n\n out.writeByte(0x80); // 2bit\n out.writeByte(0);\n out.writeByte(0);\n\n //---------------------------------\n // Global Color Map\n\n // black\n out.writeByte(0x00);\n out.writeByte(0x00);\n out.writeByte(0x00);\n\n // white\n out.writeByte(0xff);\n out.writeByte(0xff);\n out.writeByte(0xff);\n\n //---------------------------------\n // Image Descriptor\n\n out.writeString(',');\n out.writeShort(0);\n out.writeShort(0);\n out.writeShort(_width);\n out.writeShort(_height);\n out.writeByte(0);\n\n //---------------------------------\n // Local Color Map\n\n //---------------------------------\n // Raster Data\n\n const lzwMinCodeSize = 2;\n const raster = getLZWRaster(lzwMinCodeSize);\n\n out.writeByte(lzwMinCodeSize);\n\n let offset = 0;\n\n while (raster.length - offset > 255) {\n out.writeByte(255);\n out.writeBytes(raster, offset, 255);\n offset += 255;\n }\n\n out.writeByte(raster.length - offset);\n out.writeBytes(raster, offset, raster.length - offset);\n out.writeByte(0x00);\n\n //---------------------------------\n // GIF Terminator\n out.writeString(';');\n };\n\n const bitOutputStream = function(out) {\n\n const _out = out;\n let _bitLength = 0;\n let _bitBuffer = 0;\n\n const _this = {};\n\n _this.write = function(data, length) {\n\n if ( (data >>> length) != 0) {\n throw 'length over';\n }\n\n while (_bitLength + length >= 8) {\n _out.writeByte(0xff & ( (data << _bitLength) | _bitBuffer) );\n length -= (8 - _bitLength);\n data >>>= (8 - _bitLength);\n _bitBuffer = 0;\n _bitLength = 0;\n }\n\n _bitBuffer = (data << _bitLength) | _bitBuffer;\n _bitLength = _bitLength + length;\n };\n\n _this.flush = function() {\n if (_bitLength > 0) {\n _out.writeByte(_bitBuffer);\n }\n };\n\n return _this;\n };\n\n const getLZWRaster = function(lzwMinCodeSize) {\n\n const clearCode = 1 << lzwMinCodeSize;\n const endCode = (1 << lzwMinCodeSize) + 1;\n let bitLength = lzwMinCodeSize + 1;\n\n // Setup LZWTable\n const table = lzwTable();\n\n for (let i = 0; i < clearCode; i += 1) {\n table.add(String.fromCharCode(i) );\n }\n table.add(String.fromCharCode(clearCode) );\n table.add(String.fromCharCode(endCode) );\n\n const byteOut = byteArrayOutputStream();\n const bitOut = bitOutputStream(byteOut);\n\n // clear code\n bitOut.write(clearCode, bitLength);\n\n let dataIndex = 0;\n\n let s = String.fromCharCode(_data[dataIndex]);\n dataIndex += 1;\n\n while (dataIndex < _data.length) {\n\n const c = String.fromCharCode(_data[dataIndex]);\n dataIndex += 1;\n\n if (table.contains(s + c) ) {\n\n s = s + c;\n\n } else {\n\n bitOut.write(table.indexOf(s), bitLength);\n\n if (table.size() < 0xfff) {\n\n if (table.size() == (1 << bitLength) ) {\n bitLength += 1;\n }\n\n table.add(s + c);\n }\n\n s = c;\n }\n }\n\n bitOut.write(table.indexOf(s), bitLength);\n\n // end code\n bitOut.write(endCode, bitLength);\n\n bitOut.flush();\n\n return byteOut.toByteArray();\n };\n\n const lzwTable = function() {\n\n const _map = {};\n let _size = 0;\n\n const _this = {};\n\n _this.add = function(key) {\n if (_this.contains(key) ) {\n throw 'dup key:' + key;\n }\n _map[key] = _size;\n _size += 1;\n };\n\n _this.size = function() {\n return _size;\n };\n\n _this.indexOf = function(key) {\n return _map[key];\n };\n\n _this.contains = function(key) {\n return typeof _map[key] != 'undefined';\n };\n\n return _this;\n };\n\n return _this;\n};\n\nconst createDataURL = function(width, height, getPixel) {\n const gif = gifImage(width, height);\n for (let y = 0; y < height; y += 1) {\n for (let x = 0; x < width; x += 1) {\n gif.setPixel(x, y, getPixel(x, y) );\n }\n }\n\n const b = byteArrayOutputStream();\n gif.write(b);\n\n const base64 = base64EncodeOutputStream();\n const bytes = b.toByteArray();\n for (let i = 0; i < bytes.length; i += 1) {\n base64.writeByte(bytes[i]);\n }\n base64.flush();\n\n return 'data:image/gif;base64,' + base64;\n};\n\nexport default qrcode;\n\nexport const stringToBytes = qrcode.stringToBytes;\n","export const ZIPPY_BRAND_COLOR = '#476CEB';\n\n/**\n * Z mark lifted from product logo assets, with a square viewBox centred on the\n * glyph so it can be dropped into any square slot. Matches merchant dashboard.\n */\nconst Z_MARK_VIEW_BOX = '-1 20.86 60 60';\nconst Z_MARK_PATH =\n 'M16.8831 21.5476C16.3856 21.5476 15.9085 21.7452 15.5567 22.097L0.549704 37.104C0.0132083 37.6405 -0.147283 38.4474 0.143066 39.1483C0.433416 39.8493 1.11743 40.3063 1.87615 40.3063H26.5982L2.74743 64.1571C0.0649471 66.8395 -0.737512 70.8738 0.714236 74.3786C2.16598 77.8834 5.58604 80.1686 9.37964 80.1686H41.7385C42.236 80.1686 42.7131 79.971 43.0649 79.6192L58.0719 64.6122C58.6084 64.0757 58.7689 63.2689 58.4785 62.5679C58.1882 61.867 57.5042 61.4099 56.7455 61.4099H32.0234L55.8742 37.5592C58.5567 34.8767 59.3591 30.8425 57.9074 27.3376C56.4556 23.8328 53.0356 21.5476 49.242 21.5476H16.8831ZM5.11632 64.1759L28.3783 40.3812H30.6653L5.11632 64.1759ZM30.1464 61.4059L53.4083 37.6111L27.8594 61.4059H30.1464Z';\n\n/** Share of the QR width taken by the logo badge. Safe at error level H. */\nconst BADGE_RATIO = 0.24;\n\nfunction parseViewBoxSize(svg: string): number | null {\n const match = /viewBox=\"0 0 ([\\d.]+) [\\d.]+\"/.exec(svg);\n return match ? Number(match[1]) : null;\n}\n\n/** White plate + centred Z mark, sized relative to the QR viewBox. */\nexport function buildLogoBadge(qrSize: number): string {\n const badge = qrSize * BADGE_RATIO;\n const offset = (qrSize - badge) / 2;\n const plate = badge * 1.18;\n const plateOffset = (qrSize - plate) / 2;\n const markInset = badge * 0.16;\n\n return [\n '<g shape-rendering=\"geometricPrecision\">',\n `<rect x=\"${plateOffset}\" y=\"${plateOffset}\" width=\"${plate}\" height=\"${plate}\" rx=\"${plate * 0.22}\" fill=\"#ffffff\"/>`,\n `<svg x=\"${offset + markInset}\" y=\"${offset + markInset}\" width=\"${badge - markInset * 2}\" height=\"${badge - markInset * 2}\" viewBox=\"${Z_MARK_VIEW_BOX}\">`,\n `<path d=\"${Z_MARK_PATH}\" fill=\"${ZIPPY_BRAND_COLOR}\"/>`,\n '</svg>',\n '</g>',\n ].join('');\n}\n\n/** Injects the branded logo badge into a QR SVG string before the closing tag. */\nexport function embedLogoInQrSvg(svg: string): string {\n const size = parseViewBoxSize(svg);\n if (!size) {\n return svg;\n }\n return svg.replace('</svg>', `${buildLogoBadge(size)}</svg>`);\n}\n\n/** Muted footer lock icon — uses currentColor. */\nexport function renderSecureLockSvg(): string {\n return `<svg class=\"zippy-brand-lock\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\"><path d=\"M7 10V8a5 5 0 0 1 10 0v2\" stroke=\"currentColor\" stroke-width=\"1.75\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><rect x=\"5\" y=\"10\" width=\"14\" height=\"11\" rx=\"2.5\" stroke=\"currentColor\" stroke-width=\"1.75\"/><circle cx=\"12\" cy=\"15.5\" r=\"1.25\" fill=\"currentColor\"/></svg>`;\n}\n","import qrcode from 'qrcode-generator';\nimport { embedLogoInQrSvg } from './zippy-logo';\n\n/** Deep link path scanned by the Zippy app — sessionId only, never clientToken. */\nexport const MERCHANT_PAYMENT_DEEP_LINK_PATH = 'merchant-payment';\n\n/** Deep link scanned by the Zippy app — sessionId only, never clientToken. */\nexport function buildPaymentQrPayload(sessionId: string): string {\n return `zippy://${MERCHANT_PAYMENT_DEEP_LINK_PATH}/${sessionId}`;\n}\n\ntype QrErrorCorrection = 'L' | 'M' | 'Q' | 'H';\n\n/** Renders a QR code as an SVG string for embedding in the checkout UI. */\nexport function renderQrSvg(\n payload: string,\n cellSize = 4,\n errorCorrection: QrErrorCorrection = 'H',\n margin = 2,\n): string {\n const qr = qrcode(0, errorCorrection);\n qr.addData(payload);\n qr.make();\n return qr.createSvgTag(cellSize, margin);\n}\n\nexport function renderPaymentQrSvg(\n sessionId: string,\n cellSize = 4,\n errorCorrection: QrErrorCorrection = 'H',\n): string {\n return renderQrSvg(buildPaymentQrPayload(sessionId), cellSize, errorCorrection);\n}\n\n/** Branded QR SVG with centred Zippy mark — matches merchant dashboard rendering. */\nexport function renderBrandedPaymentQrSvg(sessionId: string, cellSize = 4): string {\n return embedLogoInQrSvg(renderPaymentQrSvg(sessionId, cellSize, 'H'));\n}\n\n/** QR markup wrapper for the checkout UI. */\nexport function renderPaymentQrMarkup(sessionId: string, cellSize = 4): string {\n const svg = renderBrandedPaymentQrSvg(sessionId, cellSize);\n return `<div class=\"zippy-qr-stack\">${svg}</div>`;\n}\n","import type { CheckoutPhase, PaymentSession } from '../types';\nimport { TERMINAL_STATUSES } from '../types';\n\n/** Pay countdown target — only after checkout has started. */\nexport function getCountdownTarget(session: PaymentSession): string | null {\n if (session.phase === 'PAYING' && session.paymentExpiryAt) {\n return session.paymentExpiryAt;\n }\n return null;\n}\n\nconst PAY_PROGRESS_PHASES: CheckoutPhase[] = ['qr-active', 'awaiting', 'manual-confirm'];\n\nconst NO_PROGRESS_PHASES: CheckoutPhase[] = [\n 'loading',\n 'choose-method',\n 'success',\n 'expired',\n 'cancelled',\n 'declined',\n 'failed',\n 'invalid-session',\n 'error',\n];\n\n/** Whether the checkout UI should show the pay-window progress bar. */\nexport function shouldShowPayProgress(\n session: PaymentSession | null,\n phase: CheckoutPhase,\n): boolean {\n if (!session?.paymentExpiryAt || NO_PROGRESS_PHASES.includes(phase)) {\n return false;\n }\n\n if (TERMINAL_STATUSES.includes(session.status)) {\n return false;\n }\n\n if (msUntil(session.paymentExpiryAt) <= 0) {\n return false;\n }\n\n if (getCountdownTarget(session)) {\n return true;\n }\n\n return PAY_PROGRESS_PHASES.includes(phase);\n}\n\n/** Remaining pay-window ratio (1 = full time left, 0 = expired). */\nexport function getPayWindowRemainingRatio(session: PaymentSession): number | null {\n if (!session.paymentExpiryAt) {\n return null;\n }\n\n const expiresAt = session.paymentExpiryAt;\n const end = new Date(expiresAt).getTime();\n const start = session.paymentStartAt\n ? new Date(session.paymentStartAt).getTime()\n : end - 5 * 60 * 1000;\n const total = end - start;\n\n if (total <= 0) {\n return 0;\n }\n\n return Math.min(1, Math.max(0, msUntil(expiresAt) / total));\n}\n\n/** Idle shelf deadline — show soft hint only, not a pay countdown. */\nexport function getSoftIdleHint(session: PaymentSession): string | null {\n if (session.phase === 'IDLE' && session.expiresAt) {\n return session.expiresAt;\n }\n return null;\n}\n\nexport function msUntil(iso: string): number {\n return Math.max(0, new Date(iso).getTime() - Date.now());\n}\n","import type { CheckoutMethod, CheckoutPhase, PaymentSession, PaymentSessionPayer, VerifyPayerResponse } from '../types';\nimport { renderPaymentQrMarkup } from '../qr/render-qr';\nimport { renderSecureLockSvg } from '../qr/zippy-logo';\nimport { getPayWindowRemainingRatio, msUntil, shouldShowPayProgress } from '../session/timing';\nimport {\n formatAmount,\n formatCountdown,\n formatDisplayInitials,\n outcomeTerminalCopy,\n TERMINAL_EXIT_COUNTDOWN_SEC,\n terminalExitLeadText,\n type TerminalExitMode,\n} from '../utils';\nimport { CHECKOUT_STYLES } from '../theme';\n\nexport type UiCallbacks = {\n onChooseMethod: (method: CheckoutMethod) => void;\n onVerify: (paymentId: string) => Promise<void>;\n onPay: (paymentId: string) => Promise<void>;\n onPaymentIdChange?: (paymentId: string) => void;\n onTerminalExit?: () => void;\n};\n\nexport type UiState = {\n phase: CheckoutPhase;\n session: PaymentSession | null;\n sessionId: string;\n committedMethod: CheckoutMethod | null;\n paymentId: string;\n verifiedPayer: VerifyPayerResponse | null;\n errorMessage: string | null;\n loading: boolean;\n mode: 'inline' | 'modal';\n exitMode?: TerminalExitMode | null;\n};\n\nexport class CheckoutUi {\n private readonly shadow: ShadowRoot;\n private readonly root: HTMLElement;\n private state: UiState;\n private readonly callbacks: UiCallbacks;\n private expiryTimer: ReturnType<typeof setInterval> | null = null;\n private terminalExitTimer: ReturnType<typeof setInterval> | null = null;\n\n constructor(\n host: HTMLElement,\n initialState: UiState,\n callbacks: UiCallbacks,\n extraStyles = '',\n ) {\n this.callbacks = callbacks;\n this.state = initialState;\n this.shadow = host.attachShadow({ mode: 'open' });\n const style = document.createElement('style');\n style.textContent = CHECKOUT_STYLES + extraStyles;\n this.shadow.appendChild(style);\n this.root = document.createElement('div');\n this.root.className = 'zippy-root';\n this.root.setAttribute('role', 'region');\n this.root.setAttribute('aria-label', 'Zippy Pay checkout');\n this.shadow.appendChild(this.root);\n this.render();\n }\n\n update(partial: Partial<UiState>): void {\n const next = { ...this.state, ...partial };\n if (this.shouldSkipRender(this.state, next)) {\n this.state = next;\n return;\n }\n this.state = next;\n this.render();\n }\n\n private shouldSkipRender(prev: UiState, next: UiState): boolean {\n return this.renderSnapshot(prev) === this.renderSnapshot(next);\n }\n\n private renderSnapshot(state: UiState): string {\n const session = state.session;\n return JSON.stringify({\n phase: state.phase,\n sessionId: state.sessionId,\n committedMethod: state.committedMethod,\n paymentId: state.paymentId,\n errorMessage: state.errorMessage,\n loading: state.loading,\n mode: state.mode,\n exitMode: state.exitMode ?? null,\n verifiedPayer: state.verifiedPayer,\n session: session\n ? {\n status: session.status,\n phase: session.phase,\n amount: session.amount,\n currency: session.currency,\n businessName: session.businessName,\n paymentExpiryAt: session.paymentExpiryAt,\n paymentStartAt: session.paymentStartAt,\n payer: session.payer,\n transactionStatus: session.transactionStatus,\n checkoutMethod: session.checkoutMethod,\n expiresAt: session.expiresAt,\n transactionId: session.transactionId,\n }\n : null,\n });\n }\n\n private restoreFocusState(): { id: string | null; selection: number | null } {\n const active = this.shadow.activeElement;\n if (active instanceof HTMLInputElement && active.id) {\n return { id: active.id, selection: active.selectionStart };\n }\n return { id: null, selection: null };\n }\n\n private applyFocusState(focus: { id: string | null; selection: number | null }): void {\n if (!focus.id) {\n return;\n }\n const element = this.shadow.getElementById(focus.id);\n if (!(element instanceof HTMLInputElement)) {\n return;\n }\n element.focus();\n if (focus.selection !== null) {\n element.setSelectionRange(focus.selection, focus.selection);\n }\n }\n\n destroy(): void {\n this.clearExpiryTimer();\n this.clearTerminalExitTimer();\n }\n\n getShadowRoot(): ShadowRoot {\n return this.shadow;\n }\n\n private render(): void {\n const focusState = this.restoreFocusState();\n this.clearExpiryTimer();\n this.clearTerminalExitTimer();\n\n const {\n phase,\n session,\n errorMessage,\n loading,\n verifiedPayer,\n paymentId,\n sessionId,\n committedMethod,\n exitMode,\n mode,\n } = this.state;\n const isTerminal =\n phase === 'success' ||\n phase === 'expired' ||\n phase === 'cancelled' ||\n phase === 'declined' ||\n phase === 'failed' ||\n phase === 'invalid-session' ||\n phase === 'error';\n const showPayProgress =\n !isTerminal && shouldShowPayProgress(session, phase);\n const isQrPayFlow =\n phase === 'qr-active' ||\n (phase === 'awaiting' && committedMethod === 'qr');\n\n this.root.className =\n showPayProgress\n ? isQrPayFlow\n ? 'zippy-root zippy-root--paying zippy-root--qr'\n : 'zippy-root zippy-root--paying'\n : isTerminal\n ? 'zippy-root zippy-root--terminal'\n : 'zippy-root';\n\n this.root.innerHTML = '';\n\n const mount = isTerminal ? this.root : document.createElement('div');\n if (!isTerminal) {\n mount.className = 'zippy-root-body';\n this.root.appendChild(mount);\n }\n\n if (phase === 'loading') {\n mount.appendChild(this.renderLoading());\n mount.appendChild(this.renderBrandFooter());\n if (showPayProgress) {\n const ratio = session ? getPayWindowRemainingRatio(session) : null;\n if (ratio !== null && ratio > 0) {\n this.root.appendChild(this.renderPayProgress());\n }\n }\n this.applyFocusState(focusState);\n return;\n }\n\n if (session && !isTerminal) {\n mount.appendChild(this.renderPaymentHero(session, this.heroSubtitle(phase, session)));\n }\n\n const showInlinePayTimer =\n showPayProgress &&\n phase !== 'qr-active' &&\n session?.paymentExpiryAt &&\n msUntil(session.paymentExpiryAt) > 0;\n\n if (showInlinePayTimer) {\n mount.appendChild(this.renderPayTimer(session.paymentExpiryAt));\n }\n\n switch (phase) {\n case 'choose-method':\n mount.appendChild(this.renderChooseMethod());\n break;\n case 'qr-active':\n mount.appendChild(this.renderQrActive(sessionId, session));\n break;\n case 'manual-entry':\n case 'manual-confirm':\n mount.appendChild(\n this.renderManualFlow(paymentId, verifiedPayer, errorMessage, loading),\n );\n break;\n case 'awaiting':\n mount.appendChild(\n this.renderAwaiting(session, committedMethod ?? 'qr', verifiedPayer),\n );\n break;\n case 'success':\n case 'expired':\n case 'cancelled':\n case 'declined':\n case 'failed':\n case 'invalid-session':\n mount.appendChild(this.renderOutcomeScreen(phase, session, exitMode, mode));\n this.mountTerminalExitTimer();\n break;\n case 'error':\n mount.appendChild(\n this.renderTerminal(\n 'error',\n 'Something went wrong',\n errorMessage ?? 'Please try again or contact the merchant.',\n ),\n );\n break;\n default:\n break;\n }\n\n if (!isTerminal) {\n mount.appendChild(this.renderBrandFooter());\n } else {\n this.root.appendChild(this.renderBrandFooter());\n }\n\n if (showPayProgress) {\n const ratio = session ? getPayWindowRemainingRatio(session) : null;\n if (ratio !== null && ratio > 0) {\n this.root.appendChild(this.renderPayProgress());\n }\n }\n\n this.applyFocusState(focusState);\n }\n\n private heroSubtitle(phase: CheckoutPhase, session: PaymentSession | null): string {\n switch (phase) {\n case 'choose-method':\n return 'Choose how to pay';\n case 'qr-active':\n return session?.status === 'AWAITING_PAYMENT'\n ? 'Waiting for confirmation'\n : 'Scan with the Zippy app';\n case 'manual-entry':\n return 'Pay with your Zippy ID';\n case 'manual-confirm':\n return 'Review and confirm';\n case 'awaiting':\n return 'Waiting for confirmation';\n default:\n return '';\n }\n }\n\n private renderPaymentHero(session: PaymentSession, subtitle: string): HTMLElement {\n const header = document.createElement('div');\n header.className = 'zippy-payment-hero';\n\n const business = document.createElement('p');\n business.className = 'zippy-payment-merchant';\n business.textContent = session.businessName;\n\n const amount = document.createElement('p');\n amount.className = 'zippy-payment-amount';\n amount.textContent = formatAmount(session.amount, session.currency);\n\n header.appendChild(business);\n header.appendChild(amount);\n\n if (subtitle) {\n const sub = document.createElement('p');\n sub.className = 'zippy-payment-subtitle';\n sub.textContent = subtitle;\n header.appendChild(sub);\n }\n\n return header;\n }\n\n private renderBrandFooter(): HTMLElement {\n const footer = document.createElement('div');\n footer.className = 'zippy-brand-footer';\n footer.setAttribute('aria-label', 'Secured by Zippy');\n\n const inner = document.createElement('div');\n inner.className = 'zippy-brand-footer-inner';\n\n const secure = document.createElement('span');\n secure.className = 'zippy-brand-secure';\n secure.innerHTML = `${renderSecureLockSvg()}<span class=\"zippy-brand-copy\">Secured by</span>`;\n\n const divider = document.createElement('span');\n divider.className = 'zippy-brand-divider';\n divider.setAttribute('aria-hidden', 'true');\n\n const brand = document.createElement('span');\n brand.className = 'zippy-brand-name';\n brand.textContent = 'Zippy';\n\n inner.appendChild(secure);\n inner.appendChild(divider);\n inner.appendChild(brand);\n\n footer.appendChild(inner);\n return footer;\n }\n\n private renderLoading(): HTMLElement {\n const wrap = document.createElement('div');\n wrap.className = 'zippy-status';\n const icon = document.createElement('div');\n icon.className = 'zippy-status-icon loading';\n const spinner = document.createElement('div');\n spinner.className = 'zippy-spinner';\n icon.appendChild(spinner);\n const title = document.createElement('p');\n title.className = 'zippy-status-title';\n title.textContent = 'Loading checkout…';\n wrap.appendChild(icon);\n wrap.appendChild(title);\n return wrap;\n }\n\n private renderChooseMethod(): HTMLElement {\n const wrap = document.createElement('div');\n wrap.className = 'zippy-choose';\n\n const options = document.createElement('div');\n options.className = 'zippy-choose-options';\n\n options.appendChild(\n this.renderMethodCard({\n method: 'qr',\n title: 'QR code',\n description: 'Open Zippy and scan',\n icon: this.qrIconSvg(),\n }),\n );\n\n options.appendChild(\n this.renderMethodCard({\n method: 'manual',\n title: 'Zippy ID',\n description: 'Enter your handle',\n icon: this.idIconSvg(),\n }),\n );\n\n wrap.appendChild(options);\n return wrap;\n }\n\n private renderMethodCard(params: {\n method: CheckoutMethod;\n title: string;\n description: string;\n icon: string;\n }): HTMLElement {\n const card = document.createElement('button');\n card.type = 'button';\n card.className = `zippy-method-card zippy-method-card--${params.method}`;\n card.setAttribute(\n 'aria-label',\n params.method === 'qr' ? 'Pay by scanning a QR code in the Zippy app' : 'Pay with your Zippy ID',\n );\n\n const icon = document.createElement('span');\n icon.className = 'zippy-method-icon';\n icon.innerHTML = params.icon;\n\n const copy = document.createElement('span');\n copy.className = 'zippy-method-copy';\n\n const title = document.createElement('span');\n title.className = 'zippy-method-title';\n title.textContent = params.title;\n\n const description = document.createElement('span');\n description.className = 'zippy-method-hint';\n description.textContent = params.description;\n\n copy.appendChild(title);\n copy.appendChild(description);\n card.appendChild(icon);\n card.appendChild(copy);\n card.addEventListener('click', () => this.callbacks.onChooseMethod(params.method));\n\n return card;\n }\n\n private renderQrActive(sessionId: string, session: PaymentSession | null): HTMLElement {\n const wrap = document.createElement('div');\n wrap.className = 'zippy-flow';\n const isAwaiting = session?.status === 'AWAITING_PAYMENT';\n\n const qrWrap = document.createElement('div');\n qrWrap.className = 'zippy-qr-section';\n const frame = document.createElement('div');\n frame.className = 'zippy-qr-frame';\n frame.innerHTML = renderPaymentQrMarkup(sessionId);\n qrWrap.appendChild(frame);\n\n if (session?.paymentExpiryAt && msUntil(session.paymentExpiryAt) > 0) {\n qrWrap.appendChild(this.renderPayTimer(session.paymentExpiryAt));\n }\n\n if (isAwaiting) {\n qrWrap.appendChild(this.renderQrAwaitingLoader());\n }\n\n wrap.appendChild(qrWrap);\n\n if (isAwaiting) {\n if (session?.payer) {\n wrap.appendChild(this.renderIdentityCard(session.payer));\n }\n wrap.appendChild(\n this.renderFootnote('Complete the payment in the Zippy app to finish checkout.'),\n );\n } else {\n wrap.appendChild(\n this.renderStepGuide([\n 'Open Zippy Pay on your phone',\n 'Tap Scan and point at the code',\n 'Confirm the amount shown',\n ]),\n );\n wrap.appendChild(this.renderFootnote('Keep this page open until payment completes.'));\n }\n\n return wrap;\n }\n\n private renderQrAwaitingLoader(): HTMLElement {\n const slot = document.createElement('div');\n slot.className = 'zippy-qr-awaiting';\n slot.setAttribute('aria-live', 'polite');\n slot.setAttribute('aria-label', 'Waiting for payment confirmation');\n\n const spinner = document.createElement('span');\n spinner.className = 'zippy-qr-awaiting-spinner';\n spinner.setAttribute('aria-hidden', 'true');\n\n slot.appendChild(spinner);\n return slot;\n }\n\n private renderPayTimer(expiresAt: string): HTMLElement {\n const slot = document.createElement('div');\n slot.className = 'zippy-pay-timer-slot';\n\n const timer = document.createElement('div');\n timer.className = 'zippy-pay-timer';\n\n const value = document.createElement('span');\n value.className = 'zippy-pay-timer-value';\n value.setAttribute('aria-live', 'polite');\n value.textContent = formatCountdown(msUntil(expiresAt));\n\n const label = document.createElement('span');\n label.className = 'zippy-pay-timer-label';\n label.textContent = 'To pay';\n\n timer.appendChild(value);\n timer.appendChild(label);\n slot.appendChild(timer);\n return slot;\n }\n\n private renderManualFlow(\n paymentId: string,\n verifiedPayer: VerifyPayerResponse | null,\n errorMessage: string | null,\n loading: boolean,\n ): HTMLElement {\n const wrap = document.createElement('div');\n wrap.className = 'zippy-flow';\n\n const form = document.createElement('form');\n form.className = 'zippy-id-form';\n form.addEventListener('submit', (event) => {\n event.preventDefault();\n });\n\n const field = document.createElement('div');\n field.className = 'zippy-input-combo';\n\n const input = document.createElement('input');\n input.id = 'zippy-payment-id';\n input.className = 'zippy-input-combo-field';\n input.type = 'text';\n input.placeholder = 'your.zippy.id';\n input.autocomplete = 'off';\n input.spellcheck = false;\n input.inputMode = 'text';\n input.value = paymentId;\n input.disabled = loading;\n input.setAttribute('aria-label', 'Zippy payment ID');\n\n const divider = document.createElement('span');\n divider.className = 'zippy-input-combo-divider';\n divider.setAttribute('aria-hidden', 'true');\n\n const verifyBtn = document.createElement('button');\n verifyBtn.type = 'button';\n verifyBtn.className = 'zippy-input-combo-action';\n verifyBtn.textContent = 'Verify';\n verifyBtn.setAttribute('aria-label', 'Verify Zippy ID');\n\n const payBtn = document.createElement('button');\n payBtn.type = 'button';\n payBtn.className = 'zippy-btn zippy-btn-primary zippy-btn-block';\n payBtn.textContent = loading && verifiedPayer ? 'Processing…' : 'Proceed';\n\n const isVerifiedForInput = (value: string): boolean =>\n Boolean(\n verifiedPayer &&\n verifiedPayer.paymentId === value.trim().toLowerCase(),\n );\n\n const syncActionState = (): void => {\n const trimmed = input.value.trim();\n const verified = isVerifiedForInput(input.value);\n const isVerifying = loading && !verified;\n field.classList.toggle('zippy-input-combo--verified', verified);\n verifyBtn.disabled = loading || trimmed.length === 0 || verified;\n verifyBtn.classList.toggle('zippy-input-combo-action--loading', isVerifying);\n\n const existingSpinner = verifyBtn.querySelector('.zippy-spinner-inline');\n if (isVerifying) {\n verifyBtn.textContent = '';\n if (!existingSpinner) {\n const spinner = document.createElement('span');\n spinner.className = 'zippy-spinner-inline';\n spinner.setAttribute('aria-hidden', 'true');\n verifyBtn.appendChild(spinner);\n }\n verifyBtn.setAttribute('aria-label', 'Verifying Zippy ID');\n } else {\n existingSpinner?.remove();\n verifyBtn.classList.remove('zippy-input-combo-action--verified');\n if (verified) {\n verifyBtn.textContent = '';\n verifyBtn.classList.add('zippy-input-combo-action--verified');\n verifyBtn.innerHTML = renderVerifiedCheckSvg();\n verifyBtn.setAttribute('aria-label', 'Zippy ID verified');\n } else {\n verifyBtn.textContent = 'Verify';\n verifyBtn.setAttribute('aria-label', 'Verify Zippy ID');\n }\n }\n\n payBtn.disabled = loading || !verified;\n };\n\n verifyBtn.addEventListener('click', () => {\n void this.callbacks.onVerify(input.value);\n });\n\n payBtn.addEventListener('click', () => {\n if (verifiedPayer) {\n void this.callbacks.onPay(paymentId || verifiedPayer.paymentId);\n }\n });\n\n input.addEventListener('input', () => {\n this.state.paymentId = input.value;\n this.callbacks.onPaymentIdChange?.(input.value);\n syncActionState();\n });\n\n syncActionState();\n\n if (errorMessage) {\n field.classList.add('zippy-input-combo--error');\n }\n\n field.appendChild(input);\n field.appendChild(divider);\n field.appendChild(verifyBtn);\n form.appendChild(field);\n\n if (errorMessage) {\n form.appendChild(this.renderFieldError(errorMessage));\n }\n\n if (verifiedPayer && isVerifiedForInput(paymentId)) {\n form.appendChild(this.renderIdentityCard(verifiedPayer));\n }\n\n form.appendChild(payBtn);\n\n wrap.appendChild(form);\n return wrap;\n }\n\n private renderFieldError(message: string): HTMLElement {\n const error = document.createElement('p');\n error.className = 'zippy-field-error';\n error.setAttribute('role', 'alert');\n\n const icon = document.createElement('span');\n icon.className = 'zippy-field-error-icon';\n icon.setAttribute('aria-hidden', 'true');\n icon.textContent = '!';\n\n const copy = document.createElement('span');\n copy.textContent = message;\n\n error.appendChild(icon);\n error.appendChild(copy);\n return error;\n }\n\n private renderIdentityCard(payer: PaymentSessionPayer): HTMLElement {\n const identity = document.createElement('div');\n identity.className = 'zippy-identity-card';\n\n const avatar = this.renderIdentityAvatar(payer);\n\n const copy = document.createElement('div');\n copy.className = 'zippy-identity-copy';\n\n const label = document.createElement('p');\n label.className = 'zippy-identity-label';\n label.textContent = 'Paying as';\n\n const name = document.createElement('p');\n name.className = 'zippy-identity-name';\n name.textContent = payer.displayName;\n\n const handle = document.createElement('p');\n handle.className = 'zippy-identity-handle';\n handle.textContent = payer.paymentId;\n\n copy.appendChild(label);\n copy.appendChild(name);\n copy.appendChild(handle);\n identity.appendChild(avatar);\n identity.appendChild(copy);\n return identity;\n }\n\n private renderIdentityAvatar(payer: PaymentSessionPayer): HTMLElement {\n const avatar = document.createElement('div');\n avatar.className = 'zippy-identity-avatar';\n const initials = formatDisplayInitials(payer.displayName);\n const profileImage = payer.profileImage?.trim();\n\n if (profileImage) {\n avatar.classList.add('zippy-identity-avatar--photo');\n const img = document.createElement('img');\n img.className = 'zippy-identity-avatar-image';\n img.src = profileImage;\n img.alt = '';\n img.addEventListener('error', () => {\n avatar.classList.remove('zippy-identity-avatar--photo');\n img.remove();\n avatar.textContent = initials;\n });\n avatar.appendChild(img);\n } else {\n avatar.textContent = initials;\n }\n\n return avatar;\n }\n\n private renderAwaiting(\n session: PaymentSession | null,\n method: CheckoutMethod,\n verifiedPayer: VerifyPayerResponse | null,\n ): HTMLElement {\n const wrap = document.createElement('div');\n wrap.className = 'zippy-flow zippy-flow-awaiting';\n\n const status = document.createElement('div');\n status.className = 'zippy-awaiting-status';\n status.innerHTML = `<div class=\"zippy-awaiting-ring\" aria-hidden=\"true\"><span></span></div>`;\n wrap.appendChild(status);\n\n const payer = session?.payer ?? verifiedPayer ?? null;\n if (payer) {\n wrap.appendChild(this.renderIdentityCard(payer));\n }\n\n const message = document.createElement('p');\n message.className = 'zippy-awaiting-message';\n message.textContent =\n method === 'qr'\n ? 'Complete the payment in the Zippy app to finish checkout.'\n : 'Tap the notification in Zippy Pay to approve this payment.';\n wrap.appendChild(message);\n\n wrap.appendChild(this.renderFootnote('Do not close or refresh this page.'));\n return wrap;\n }\n\n private renderStepGuide(steps: string[]): HTMLElement {\n const guide = document.createElement('div');\n guide.className = 'zippy-step-guide';\n\n steps.forEach((text, index) => {\n const item = document.createElement('div');\n item.className = 'zippy-step-guide-item';\n\n const num = document.createElement('span');\n num.className = 'zippy-step-guide-num';\n num.textContent = String(index + 1);\n\n const copy = document.createElement('span');\n copy.className = 'zippy-step-guide-text';\n copy.textContent = text;\n\n item.appendChild(num);\n item.appendChild(copy);\n guide.appendChild(item);\n });\n\n return guide;\n }\n\n private renderPayProgress(): HTMLElement {\n const bar = document.createElement('div');\n bar.className = 'zippy-pay-progress';\n bar.setAttribute('role', 'progressbar');\n bar.setAttribute('aria-label', 'Payment time remaining');\n bar.setAttribute('aria-valuemin', '0');\n bar.setAttribute('aria-valuemax', '100');\n\n const fill = document.createElement('div');\n fill.className = 'zippy-pay-progress-fill';\n bar.appendChild(fill);\n this.mountPayProgress(fill, bar);\n return bar;\n }\n\n private mountPayProgress(fill: HTMLElement, bar: HTMLElement): void {\n const tick = (): void => {\n const session = this.state.session;\n if (!session) {\n return;\n }\n\n const ratio = getPayWindowRemainingRatio(session);\n if (ratio === null || ratio <= 0) {\n bar.style.display = 'none';\n bar.setAttribute('aria-valuenow', '0');\n this.clearExpiryTimer();\n return;\n }\n\n bar.style.display = '';\n const pct = Math.round(ratio * 100);\n fill.style.transform = `scaleX(${ratio})`;\n bar.setAttribute('aria-valuenow', String(pct));\n\n const countdownEl = this.shadow.querySelector('.zippy-pay-timer-value');\n if (countdownEl instanceof HTMLElement && session.paymentExpiryAt) {\n countdownEl.textContent = formatCountdown(msUntil(session.paymentExpiryAt));\n }\n };\n\n tick();\n this.expiryTimer = setInterval(tick, 1000);\n }\n\n private clearExpiryTimer(): void {\n if (this.expiryTimer !== null) {\n clearInterval(this.expiryTimer);\n this.expiryTimer = null;\n }\n }\n\n private mountTerminalExitTimer(): void {\n this.clearTerminalExitTimer();\n let remaining = TERMINAL_EXIT_COUNTDOWN_SEC;\n\n const updateDisplay = (): void => {\n const countdownEl = this.shadow.querySelector('.zippy-status-exit-countdown');\n if (countdownEl instanceof HTMLElement) {\n countdownEl.textContent = String(remaining);\n }\n };\n\n updateDisplay();\n this.terminalExitTimer = setInterval(() => {\n remaining -= 1;\n if (remaining <= 0) {\n this.clearTerminalExitTimer();\n this.callbacks.onTerminalExit?.();\n return;\n }\n updateDisplay();\n }, 1000);\n }\n\n private clearTerminalExitTimer(): void {\n if (this.terminalExitTimer !== null) {\n clearInterval(this.terminalExitTimer);\n this.terminalExitTimer = null;\n }\n }\n\n private renderFootnote(text: string): HTMLElement {\n const footnote = document.createElement('p');\n footnote.className = 'zippy-footnote';\n footnote.textContent = text;\n return footnote;\n }\n\n private renderOutcomeScreen(\n phase: CheckoutPhase,\n session: PaymentSession | null,\n exitMode: TerminalExitMode | null | undefined,\n embedMode: 'inline' | 'modal',\n ): HTMLElement {\n const copy = outcomeTerminalCopy(phase);\n return this.renderOutcomeStatus(\n copy.kind,\n copy.title,\n copy.detail,\n copy.kind,\n exitMode,\n embedMode,\n session?.transactionId ?? null,\n );\n }\n\n private renderOutcomeStatus(\n kind: 'success' | 'failure',\n titleText: string,\n detailText: string,\n outcome: 'success' | 'failure',\n exitMode: TerminalExitMode | null | undefined,\n embedMode: 'inline' | 'modal',\n transactionId: string | null,\n ): HTMLElement {\n const wrap = this.renderTerminal(kind, titleText, detailText);\n\n if (transactionId) {\n wrap.appendChild(this.renderTransactionReference(transactionId));\n }\n\n const resolvedExitMode = exitMode ?? 'close';\n const exit = document.createElement('p');\n exit.className = 'zippy-status-exit';\n\n const lead = document.createElement('span');\n lead.className = 'zippy-status-exit-lead';\n lead.textContent = terminalExitLeadText(resolvedExitMode, embedMode, outcome);\n\n const countdown = document.createElement('span');\n countdown.className = 'zippy-status-exit-countdown';\n countdown.textContent = String(TERMINAL_EXIT_COUNTDOWN_SEC);\n\n const suffix = document.createElement('span');\n suffix.className = 'zippy-status-exit-suffix';\n suffix.textContent = ' seconds…';\n\n exit.appendChild(lead);\n exit.appendChild(document.createTextNode(' '));\n exit.appendChild(countdown);\n exit.appendChild(suffix);\n wrap.appendChild(exit);\n\n return wrap;\n }\n\n private renderTransactionReference(transactionId: string): HTMLElement {\n const wrap = document.createElement('div');\n wrap.className = 'zippy-transaction-ref';\n\n const label = document.createElement('p');\n label.className = 'zippy-transaction-ref-label';\n label.textContent = 'Transaction ID';\n\n const value = document.createElement('p');\n value.className = 'zippy-transaction-ref-value';\n value.textContent = transactionId;\n\n wrap.appendChild(label);\n wrap.appendChild(value);\n return wrap;\n }\n\n private renderTerminal(\n kind: 'success' | 'failure' | 'error',\n titleText: string,\n detailText: string,\n ): HTMLElement {\n const wrap = document.createElement('div');\n wrap.className = 'zippy-status';\n\n const icon = document.createElement('div');\n icon.className = `zippy-status-icon ${kind}`;\n icon.innerHTML =\n kind === 'success'\n ? `<svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" fill=\"none\" aria-hidden=\"true\"><path d=\"M7 14.5l4.5 4.5L21 9.5\" stroke=\"currentColor\" stroke-width=\"2.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>`\n : kind === 'failure'\n ? `<svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" fill=\"none\" aria-hidden=\"true\"><path d=\"M10 10l8 8M18 10l-8 8\" stroke=\"currentColor\" stroke-width=\"2.25\" stroke-linecap=\"round\"/></svg>`\n : `<svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" fill=\"none\" aria-hidden=\"true\"><path d=\"M10 10l8 8M18 10l-8 8\" stroke=\"currentColor\" stroke-width=\"2.25\" stroke-linecap=\"round\"/></svg>`;\n\n const title = document.createElement('p');\n title.className = 'zippy-status-title';\n title.textContent = titleText;\n\n const detail = document.createElement('p');\n detail.className = 'zippy-status-detail';\n detail.textContent = detailText;\n\n wrap.appendChild(icon);\n wrap.appendChild(title);\n wrap.appendChild(detail);\n return wrap;\n }\n\n private qrIconSvg(): string {\n return `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <rect x=\"3\" y=\"3\" width=\"7\" height=\"7\" rx=\"1.25\" stroke=\"currentColor\" stroke-width=\"1.6\"/>\n <rect x=\"14\" y=\"3\" width=\"7\" height=\"7\" rx=\"1.25\" stroke=\"currentColor\" stroke-width=\"1.6\"/>\n <rect x=\"3\" y=\"14\" width=\"7\" height=\"7\" rx=\"1.25\" stroke=\"currentColor\" stroke-width=\"1.6\"/>\n <rect x=\"14\" y=\"14\" width=\"3\" height=\"3\" rx=\"0.5\" fill=\"currentColor\"/>\n <rect x=\"18\" y=\"14\" width=\"3\" height=\"3\" rx=\"0.5\" fill=\"currentColor\"/>\n <rect x=\"14\" y=\"18\" width=\"3\" height=\"3\" rx=\"0.5\" fill=\"currentColor\"/>\n <rect x=\"18\" y=\"18\" width=\"3\" height=\"3\" rx=\"0.5\" fill=\"currentColor\"/>\n </svg>`;\n }\n\n private idIconSvg(): string {\n return `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <circle cx=\"12\" cy=\"9\" r=\"3.5\" stroke=\"currentColor\" stroke-width=\"1.6\"/>\n <path d=\"M5 20c0-3.87 3.13-7 7-7s7 3.13 7 7\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\"/>\n </svg>`;\n }\n}\n\nfunction renderVerifiedCheckSvg(): string {\n return `<svg class=\"zippy-input-combo-check\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\"><path d=\"M6.5 12.5 10 16l7.5-7.5\" stroke=\"currentColor\" stroke-width=\"2.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>`;\n}\n","import { attachPayerWithRetry, PaymentSessionClient } from './api/client';\nimport { createEmbedHost, hideModal, showModal, type EmbedHost } from './embed/host';\nimport { isTerminalStatus, SessionPoller } from './session/poller';\nimport { applyThemeToHost } from './theme';\nimport { CheckoutUi } from './ui/checkout-ui';\nimport type {\n ApiCheckoutMethod,\n CheckoutMethod,\n CheckoutPhase,\n PaymentSession,\n VerifyPayerResponse,\n ZippyPayCheckoutInstance,\n ZippyPayConfig,\n ZippyPayError,\n} from './types';\nimport { ZippyPayError as ZippyPayErrorClass } from './types';\nimport { parseZippyEnvironment, resolveApiBaseUrl } from './config/environments';\nimport { isValidPaymentId, isUuidV4, paymentIdValidationMessage, appendRedirectQueryParams, type TerminalExitMode } from './utils';\n\nexport class CheckoutController implements ZippyPayCheckoutInstance {\n private readonly config: ZippyPayConfig;\n private readonly client: PaymentSessionClient;\n private readonly embed: EmbedHost;\n private readonly poller: SessionPoller;\n private ui: CheckoutUi | null = null;\n private session: PaymentSession | null = null;\n private paymentId = '';\n private verifiedPayer: VerifyPayerResponse | null = null;\n private committedMethod: CheckoutMethod | null = null;\n private phase: CheckoutPhase = 'loading';\n private errorMessage: string | null = null;\n private loading = true;\n private destroyed = false;\n private modalOpen = false;\n private exitMode: TerminalExitMode | null = null;\n private terminalFailureReason: 'expired' | 'invalid-session' | 'failed' | 'cancelled' | 'declined' | null = null;\n\n constructor(config: ZippyPayConfig) {\n this.config = {\n mode: 'inline',\n closeOnBackdropClick: false,\n closeOnEscape: false,\n ...config,\n };\n\n if (!isUuidV4(this.config.sessionId)) {\n throw new Error('Zippy Pay: sessionId must be a UUID v4.');\n }\n\n parseZippyEnvironment(this.config.environment);\n\n this.client = new PaymentSessionClient({\n baseUrl: resolveApiBaseUrl(this.config.environment),\n sessionId: this.config.sessionId,\n clientToken: this.config.clientToken,\n });\n\n this.embed = createEmbedHost(this.config);\n applyThemeToHost(this.embed.host, this.config.theme);\n\n this.poller = new SessionPoller(() => this.client.getSession(), {\n onUpdate: (session) => this.handleSessionUpdate(session),\n onError: (error) => this.handleError(error),\n });\n\n this.ui = new CheckoutUi(\n this.embed.host,\n this.snapshotUiState(),\n {\n onChooseMethod: (method) => {\n void this.chooseMethod(method);\n },\n onVerify: (paymentId) => this.verify(paymentId),\n onPay: (paymentId) => this.attach(paymentId),\n onPaymentIdChange: (paymentId) => {\n const normalized = paymentId.trim().toLowerCase();\n let shouldSync = false;\n\n if (\n this.verifiedPayer &&\n normalized !== this.verifiedPayer.paymentId.toLowerCase()\n ) {\n this.verifiedPayer = null;\n if (this.phase === 'manual-confirm') {\n this.phase = 'manual-entry';\n }\n shouldSync = true;\n }\n\n if (this.errorMessage) {\n this.errorMessage = null;\n shouldSync = true;\n }\n\n this.paymentId = paymentId;\n\n if (shouldSync) {\n this.syncUi();\n }\n },\n onTerminalExit: () => this.executeTerminalExit(),\n },\n );\n\n void this.bootstrap();\n\n if (this.config.mode === 'inline') {\n this.modalOpen = true;\n }\n }\n\n open(): void {\n if (this.config.mode !== 'modal' || this.modalOpen) {\n return;\n }\n this.modalOpen = true;\n showModal(this.embed, this.config, () => this.close());\n }\n\n close(): void {\n if (this.config.mode !== 'modal') {\n return;\n }\n this.modalOpen = false;\n hideModal(this.embed);\n this.config.onClose?.();\n }\n\n destroy(): void {\n if (this.destroyed) {\n return;\n }\n this.destroyed = true;\n this.poller.stop();\n this.ui?.destroy();\n this.embed.destroy();\n this.ui = null;\n }\n\n private snapshotUiState() {\n return {\n phase: this.phase,\n session: this.session,\n sessionId: this.config.sessionId,\n committedMethod: this.committedMethod,\n paymentId: this.paymentId,\n verifiedPayer: this.verifiedPayer,\n errorMessage: this.errorMessage,\n loading: this.loading,\n mode: this.config.mode ?? 'inline',\n exitMode: this.exitMode,\n };\n }\n\n private syncUi(partial?: {\n errorMessage?: string | null;\n loading?: boolean;\n exitMode?: TerminalExitMode | null;\n }): void {\n if (this.destroyed) {\n return;\n }\n\n if (partial && 'errorMessage' in partial) {\n this.errorMessage = partial.errorMessage ?? null;\n }\n if (partial && 'loading' in partial) {\n this.loading = partial.loading ?? false;\n }\n if (partial && 'exitMode' in partial) {\n this.exitMode = partial.exitMode ?? null;\n }\n\n this.ui?.update({\n phase: this.phase,\n session: this.session,\n sessionId: this.config.sessionId,\n committedMethod: this.committedMethod,\n paymentId: this.paymentId,\n verifiedPayer: this.verifiedPayer,\n errorMessage: this.errorMessage,\n loading: this.loading,\n mode: this.config.mode ?? 'inline',\n exitMode: this.exitMode,\n });\n }\n\n private async bootstrap(): Promise<void> {\n try {\n const session = await this.client.getSession();\n this.applySession(session);\n if (this.destroyed) {\n return;\n }\n\n this.config.onReady?.(session);\n\n if (!isTerminalStatus(session.status)) {\n this.poller.start(session);\n }\n } catch (error) {\n this.handleBootstrapError(error);\n }\n }\n\n private applySession(session: PaymentSession): void {\n this.session = session;\n this.config.onSessionUpdate?.(session);\n\n this.committedMethod = uiMethodFromApi(session.checkoutMethod) ?? this.committedMethod;\n\n if (session.transactionStatus === 'DECLINED' && session.status !== 'COMPLETED') {\n this.handleFailure({ reason: 'declined', session });\n return;\n }\n\n if (session.status === 'COMPLETED') {\n this.handleSuccess(session);\n return;\n }\n\n if (session.status === 'EXPIRED') {\n this.handleFailure({ reason: 'expired', session });\n return;\n }\n\n if (session.status === 'FAILED') {\n this.handleFailure({ reason: 'failed', session });\n return;\n }\n\n if (session.status === 'CANCELLED') {\n this.handleFailure({ reason: 'cancelled', session });\n return;\n }\n\n this.phase = this.resolveActivePhase(session);\n this.syncUi();\n }\n\n private resolveActivePhase(session: PaymentSession): CheckoutPhase {\n if (session.status === 'AWAITING_PAYMENT') {\n if (session.checkoutMethod === 'QR' || this.committedMethod === 'qr') {\n return 'qr-active';\n }\n return 'awaiting';\n }\n\n if (session.phase === 'PAYING' && session.checkoutMethod === 'QR') {\n return 'qr-active';\n }\n\n if (session.phase === 'PAYING' && session.checkoutMethod === 'MANUAL') {\n if (this.phase === 'manual-confirm' && this.verifiedPayer) {\n return 'manual-confirm';\n }\n return 'manual-entry';\n }\n\n if (session.phase === 'IDLE') {\n if (this.phase === 'manual-confirm' && this.verifiedPayer && this.committedMethod === 'manual') {\n return 'manual-confirm';\n }\n if (this.phase === 'manual-entry' && this.committedMethod === 'manual') {\n return 'manual-entry';\n }\n if (this.phase === 'qr-active' && this.committedMethod === 'qr') {\n return 'qr-active';\n }\n return 'choose-method';\n }\n\n return this.phase === 'loading' ? 'choose-method' : this.phase;\n }\n\n private handleSessionUpdate(session: PaymentSession): void {\n if (this.destroyed) {\n return;\n }\n\n this.applySession(session);\n }\n\n private handleFailure(params: {\n reason: 'expired' | 'invalid-session' | 'failed' | 'cancelled' | 'declined';\n session?: PaymentSession | null;\n error?: ZippyPayError;\n }): void {\n if (this.destroyed) {\n return;\n }\n\n this.poller.stop();\n this.loading = false;\n\n const session = params.session ?? this.session;\n\n if (params.reason === 'expired') {\n if (session) {\n this.config.onExpired?.(session);\n }\n } else {\n const error =\n params.error ??\n (params.reason === 'failed' ||\n params.reason === 'cancelled' ||\n params.reason === 'declined'\n ? terminalSessionError(params.reason)\n : undefined);\n if (error) {\n this.config.onError?.(error);\n }\n }\n\n this.terminalFailureReason = params.reason;\n this.phase = this.failurePhaseFromReason(params.reason);\n this.exitMode = this.resolveExitMode('failure', session);\n this.syncUi();\n }\n\n private handleSuccess(session: PaymentSession): void {\n if (this.destroyed) {\n return;\n }\n\n this.poller.stop();\n this.loading = false;\n this.config.onComplete?.(session);\n\n this.terminalFailureReason = null;\n this.phase = 'success';\n this.exitMode = this.resolveExitMode('success', session);\n this.syncUi();\n }\n\n private executeTerminalExit(): void {\n if (this.destroyed) {\n return;\n }\n\n const session = this.session;\n\n if (this.phase === 'success' && session) {\n if (this.config.redirectOnComplete && session.successUrl) {\n window.location.assign(\n appendRedirectQueryParams(session.successUrl, {\n sessionId: session.sessionId,\n status: session.status,\n transactionId: session.transactionId,\n }),\n );\n return;\n }\n } else if (\n this.phase === 'expired' ||\n this.phase === 'failed' ||\n this.phase === 'cancelled' ||\n this.phase === 'declined' ||\n this.phase === 'invalid-session'\n ) {\n const failureUrl = session?.failureUrl ?? null;\n if (this.config.redirectOnFailure && failureUrl) {\n const redirectUrl =\n this.terminalFailureReason === 'expired'\n ? appendRedirectQueryParams(failureUrl, {\n sessionId: session?.sessionId ?? this.config.sessionId,\n status: session?.status ?? 'EXPIRED',\n })\n : failureUrl;\n window.location.assign(redirectUrl);\n return;\n }\n }\n\n this.teardownView();\n }\n\n private resolveExitMode(\n kind: 'success' | 'failure',\n session: PaymentSession | null | undefined,\n ): TerminalExitMode {\n if (kind === 'success') {\n return this.config.redirectOnComplete && session?.successUrl ? 'redirect' : 'close';\n }\n return this.config.redirectOnFailure && session?.failureUrl ? 'redirect' : 'close';\n }\n\n private failurePhaseFromReason(\n reason: 'expired' | 'invalid-session' | 'failed' | 'cancelled' | 'declined',\n ): CheckoutPhase {\n switch (reason) {\n case 'expired':\n return 'expired';\n case 'failed':\n return 'failed';\n case 'cancelled':\n return 'cancelled';\n case 'declined':\n return 'declined';\n case 'invalid-session':\n return 'invalid-session';\n }\n }\n\n private teardownView(): void {\n if (this.config.mode === 'modal' && this.modalOpen) {\n this.close();\n }\n this.destroy();\n }\n\n private handleBootstrapError(error: unknown): void {\n if (error instanceof ZippyPayErrorClass && error.status === 401) {\n this.handleFailure({\n reason: 'invalid-session',\n error,\n session: this.session,\n });\n return;\n }\n this.handleError(error);\n }\n\n private handleError(error: unknown): void {\n const normalized = normalizeError(error);\n if (normalized.status === 401) {\n this.handleFailure({\n reason: 'invalid-session',\n error: normalized,\n session: this.session,\n });\n return;\n }\n if (normalized.code === 'payment-session.not-attachable') {\n this.handleFailure({ reason: 'expired', session: this.session });\n return;\n }\n if (this.phase === 'loading' || this.phase === 'choose-method') {\n this.phase = 'error';\n }\n this.syncUi({ errorMessage: normalized.detail, loading: false });\n this.config.onError?.(normalized);\n this.poller.stop();\n }\n\n private async chooseMethod(method: CheckoutMethod): Promise<void> {\n if (this.committedMethod) {\n return;\n }\n\n this.committedMethod = method;\n this.verifiedPayer = null;\n this.syncUi({ errorMessage: null, loading: true });\n\n try {\n if (method === 'qr') {\n const session = await this.client.startQrCheckout();\n this.applySession(session);\n if (this.destroyed) {\n return;\n }\n this.syncUi({ loading: false });\n } else {\n this.phase = 'manual-entry';\n this.syncUi({ loading: false });\n }\n } catch (error) {\n this.committedMethod = null;\n this.handleFlowError(error, 'choose-method');\n }\n }\n\n private async verify(paymentId: string): Promise<void> {\n this.paymentId = paymentId;\n if (!isValidPaymentId(paymentId)) {\n this.syncUi({ errorMessage: paymentIdValidationMessage(), loading: false });\n return;\n }\n\n this.syncUi({ errorMessage: null, loading: true });\n try {\n const verified = await this.client.verifyPayer(paymentId);\n this.verifiedPayer = verified;\n this.phase = 'manual-confirm';\n this.syncUi({ loading: false });\n } catch (error) {\n this.handleFlowError(error, 'manual-entry');\n }\n }\n\n private async attach(paymentId: string): Promise<void> {\n if (!this.verifiedPayer || normalizeAttachId(paymentId) !== this.verifiedPayer.paymentId) {\n this.syncUi({\n errorMessage: 'Verify your Zippy ID before proceeding to pay.',\n loading: false,\n });\n return;\n }\n\n this.syncUi({ errorMessage: null, loading: true });\n try {\n const session = await attachPayerWithRetry(this.client, paymentId);\n this.committedMethod = 'manual';\n this.applySession(session);\n if (this.destroyed) {\n return;\n }\n if (session.status === 'AWAITING_PAYMENT') {\n this.poller.start(session);\n }\n this.syncUi({ loading: false });\n } catch (error) {\n this.handleFlowError(error, 'manual-confirm');\n }\n }\n\n private handleFlowError(error: unknown, fallbackPhase: CheckoutPhase): void {\n const normalized = normalizeError(error);\n const message = formatFlowErrorMessage(normalized, fallbackPhase);\n\n if (normalized.code === 'payment-session.not-attachable') {\n this.handleFailure({ reason: 'expired', session: this.session });\n return;\n } else if (normalized.code === 'payment-session.checkout-method-conflict') {\n void this.refreshAfterConflict();\n this.syncUi({ errorMessage: message, loading: false });\n this.config.onError?.(normalized);\n return;\n } else {\n this.phase = fallbackPhase;\n }\n\n this.syncUi({ errorMessage: message, loading: false });\n this.config.onError?.(normalized);\n }\n\n private async refreshAfterConflict(): Promise<void> {\n try {\n const session = await this.client.getSession();\n this.applySession(session);\n } catch {\n // keep current error state\n }\n }\n}\n\nfunction terminalSessionError(reason: 'failed' | 'cancelled' | 'declined'): ZippyPayError {\n if (reason === 'failed') {\n return new ZippyPayErrorClass({\n code: 'payment-session.failed',\n status: 400,\n title: 'Payment failed',\n detail: 'Something went wrong with this payment.',\n });\n }\n\n if (reason === 'declined') {\n return new ZippyPayErrorClass({\n code: 'payment-session.declined',\n status: 400,\n title: 'Payment declined',\n detail: 'Your payment was declined.',\n });\n }\n\n return new ZippyPayErrorClass({\n code: 'payment-session.cancelled',\n status: 400,\n title: 'Payment cancelled',\n detail: 'This payment was cancelled.',\n });\n}\n\nfunction uiMethodFromApi(method: ApiCheckoutMethod | null): CheckoutMethod | null {\n if (method === 'QR') {\n return 'qr';\n }\n if (method === 'MANUAL') {\n return 'manual';\n }\n return null;\n}\n\nfunction normalizeAttachId(paymentId: string): string {\n return paymentId.trim().toLowerCase();\n}\n\nfunction formatFlowErrorMessage(error: ZippyPayError, phase: CheckoutPhase): string {\n const isVerifyFailure =\n phase === 'manual-entry' &&\n (error.status === 404 ||\n error.code.includes('not-found') ||\n error.code.includes('payer-not-found') ||\n error.code === 'payer.not-found');\n\n if (isVerifyFailure) {\n return 'Zippy ID not found';\n }\n\n return error.detail?.trim() || 'Something went wrong. Please try again.';\n}\n\nfunction normalizeError(error: unknown): ZippyPayError {\n if (error instanceof ZippyPayErrorClass) {\n return error;\n }\n return new ZippyPayErrorClass({\n code: 'unknown',\n status: 500,\n title: 'Unexpected error',\n detail: error instanceof Error ? error.message : 'An unexpected error occurred',\n });\n}\n\nexport function createCheckout(config: ZippyPayConfig): ZippyPayCheckoutInstance {\n return new CheckoutController(config);\n}\n","import { createCheckout } from '../checkout-controller';\nimport { parseZippyEnvironment } from '../config/environments';\nimport type {\n PaymentSession,\n ZippyEnvironment,\n ZippyPayCheckoutInstance,\n ZippyPayConfig,\n ZippyPayError,\n ZippyTheme,\n} from '../types';\n\nconst ELEMENT_TAG = 'zippy-pay-checkout';\n\nconst THEME_ATTRIBUTE_MAP: Record<string, keyof ZippyTheme> = {\n 'theme-primary': 'primary',\n 'theme-primary-foreground': 'primaryForeground',\n 'theme-background': 'background',\n 'theme-surface': 'surface',\n 'theme-text': 'text',\n 'theme-text-muted': 'textMuted',\n 'theme-border': 'border',\n 'theme-error': 'error',\n 'theme-success': 'success',\n 'theme-border-radius': 'borderRadius',\n 'theme-font-family': 'fontFamily',\n 'theme-mode': 'mode',\n};\n\nexport class ZippyPayCheckoutElement extends HTMLElement {\n private instance: ZippyPayCheckoutInstance | null = null;\n\n static get observedAttributes(): string[] {\n return ['mode', 'session-id', 'environment', ...Object.keys(THEME_ATTRIBUTE_MAP)];\n }\n\n connectedCallback(): void {\n this.mount();\n }\n\n disconnectedCallback(): void {\n this.unmount();\n }\n\n attributeChangedCallback(): void {\n if (this.isConnected) {\n this.unmount();\n this.mount();\n }\n }\n\n set clientToken(value: string) {\n this.dataset.clientToken = value;\n if (this.isConnected) {\n this.unmount();\n this.mount();\n }\n }\n\n get clientToken(): string {\n return this.dataset.clientToken ?? this.getAttribute('client-token') ?? '';\n }\n\n private mount(): void {\n const config = this.readConfig();\n if (!config) {\n return;\n }\n\n this.innerHTML = '';\n const mode = config.mode ?? 'inline';\n let container: HTMLElement | undefined;\n\n if (mode === 'inline') {\n const host = document.createElement('div');\n this.appendChild(host);\n container = host;\n }\n\n this.instance = createCheckout({\n ...config,\n container,\n mode,\n onReady: (session: PaymentSession) => this.dispatch('zippy-ready', session),\n onSessionUpdate: (session: PaymentSession) =>\n this.dispatch('zippy-session-update', session),\n onComplete: (session: PaymentSession) => this.dispatch('zippy-complete', session),\n onExpired: (session: PaymentSession) => this.dispatch('zippy-expired', session),\n onError: (error: ZippyPayError) => this.dispatch('zippy-error', error),\n onClose: () => this.dispatch('zippy-close', null),\n });\n\n if (config.mode === 'modal') {\n this.instance.open();\n }\n }\n\n private unmount(): void {\n this.instance?.destroy();\n this.instance = null;\n this.innerHTML = '';\n }\n\n private readConfig(): ZippyPayConfig | null {\n const environmentAttr = this.getAttribute('environment') ?? 'production';\n const sessionId = this.getAttribute('session-id') ?? '';\n const clientToken = this.clientToken;\n const mode = (this.getAttribute('mode') as ZippyPayConfig['mode']) ?? 'inline';\n\n if (!sessionId || !clientToken) {\n return null;\n }\n\n let environment: ZippyEnvironment;\n try {\n environment = parseZippyEnvironment(environmentAttr);\n } catch {\n return null;\n }\n\n const theme: ZippyTheme = {};\n for (const [attr, key] of Object.entries(THEME_ATTRIBUTE_MAP)) {\n const value = this.getAttribute(attr);\n if (value) {\n if (key === 'mode') {\n theme.mode = value as ZippyTheme['mode'];\n } else {\n theme[key] = value;\n }\n }\n }\n\n return { environment, sessionId, clientToken, mode, theme };\n }\n\n private dispatch<T>(name: string, detail: T): void {\n this.dispatchEvent(\n new CustomEvent(name, {\n detail,\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n open(): void {\n this.instance?.open();\n }\n\n close(): void {\n this.instance?.close();\n }\n\n destroy(): void {\n this.instance?.destroy();\n this.instance = null;\n }\n}\n\nexport function defineZippyPayCheckoutElement(): void {\n if (typeof customElements === 'undefined') {\n return;\n }\n if (!customElements.get(ELEMENT_TAG)) {\n customElements.define(ELEMENT_TAG, ZippyPayCheckoutElement);\n }\n}\n\nexport { ELEMENT_TAG };\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'zippy-pay-checkout': ZippyPayCheckoutElement;\n }\n}\n","import { createCheckout } from './checkout-controller';\nimport { defineZippyPayCheckoutElement } from './element/zippy-pay-checkout';\n\nexport { PaymentSessionClient, attachPayerWithRetry } from './api/client';\nexport { SessionPoller, isTerminalStatus, phaseFromSession } from './session/poller';\nexport {\n getCountdownTarget,\n getPayWindowRemainingRatio,\n getSoftIdleHint,\n msUntil,\n shouldShowPayProgress,\n} from './session/timing';\nexport { CheckoutController, createCheckout } from './checkout-controller';\nexport {\n defineZippyPayCheckoutElement,\n ZippyPayCheckoutElement,\n ELEMENT_TAG,\n} from './element/zippy-pay-checkout';\nexport {\n PAYMENT_ID_PATTERN,\n normalizePaymentId,\n isValidPaymentId,\n paymentIdValidationMessage,\n formatAmount,\n} from './utils';\nexport {\n ZIPPY_API_BASE_URLS,\n ZIPPY_API_PATH_PREFIX,\n isZippyEnvironment,\n parseZippyEnvironment,\n resolveApiBaseUrl,\n} from './config/environments';\n\nexport {\n buildPaymentQrPayload,\n renderPaymentQrSvg,\n renderBrandedPaymentQrSvg,\n renderPaymentQrMarkup,\n renderQrSvg,\n} from './qr/render-qr';\nexport { resolveTheme, DEFAULT_THEME, applyThemeToHost } from './theme';\n\nexport type {\n PaymentSession,\n PaymentSessionPayer,\n PaymentSessionStatus,\n PaymentSessionPhase,\n ApiCheckoutMethod,\n VerifyPayerResponse,\n ZippyPayCheckoutInstance,\n ZippyPayConfig,\n ZippyEnvironment,\n ZippyTheme,\n CheckoutPhase,\n CheckoutMethod,\n EmbedMode,\n ProblemJson,\n} from './types';\n\nexport { ZippyPayError, TERMINAL_STATUSES, POLLABLE_STATUSES } from './types';\n\nimport type { ZippyPayConfig, ZippyPayCheckoutInstance } from './types';\n\nexport const ZippyPay = {\n create(config: ZippyPayConfig): ZippyPayCheckoutInstance {\n const instance = createCheckout(config);\n if ((config.mode ?? 'inline') === 'modal') {\n instance.open();\n }\n return instance;\n },\n};\n\ndefineZippyPayCheckoutElement();\n\nexport default ZippyPay;\n"]}
|