@auth-link/web 0.0.0-stage → 0.0.1
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/CHANGELOG.md +47 -0
- package/README.md +785 -2
- package/THIRD_PARTY_NOTICES.md +29 -0
- package/dist/index.js +2533 -0
- package/dist/index.js.map +7 -0
- package/dist/react.js +2519 -0
- package/dist/react.js.map +7 -0
- package/dist/styles.css +126 -0
- package/dist/types/core.d.ts +29 -0
- package/dist/types/i18n.d.ts +7 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/modal.d.ts +19 -0
- package/dist/types/react.d.ts +11 -0
- package/dist/types/types.d.ts +71 -0
- package/dist/types/view.d.ts +19 -0
- package/dist/types/vue.d.ts +12 -0
- package/dist/vue.js +2541 -0
- package/dist/vue.js.map +7 -0
- package/docs/README.en.md +250 -0
- package/docs/README.ja.md +250 -0
- package/docs/README.zh-CN.md +282 -0
- package/package.json +88 -4
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/react.tsx", "../node_modules/qrcode-generator/dist/qrcode.mjs", "../src/core.ts", "../src/locales/en.json", "../src/locales/zh-CN.json", "../src/locales/zh-TW.json", "../src/locales/ja.json", "../src/locales/bn.json", "../src/locales/es.json", "../src/locales/fil.json", "../src/locales/hi.json", "../src/locales/id.json", "../src/locales/ms.json", "../src/locales/pt.json", "../src/locales/th.json", "../src/locales/vi.json", "../src/i18n.ts", "../src/view.ts", "../src/modal.ts"],
|
|
4
|
+
"sourcesContent": ["\"use client\";\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { initialSnapshot, observeRequest } from './core.js';\nimport type { Mode, Snapshot, WidgetOptions } from './types.js';\nimport { openAuthLink } from './modal.js';\nimport type { AuthLinkModal, AuthLinkModalOptions } from './modal.js';\nexport type { Ticket, Confirmation, Rejection, Snapshot, AuthLinkClient, Locale, DialogVariant } from './types.js';\n\nexport function useAuthLink(options: WidgetOptions) {\n const latest = useRef(options); latest.current = options;\n const delivered = useRef(new Set<string>());\n const [snapshot, setSnapshot] = useState<Snapshot>(initialSnapshot);\n const [attempt, setAttempt] = useState(0);\n const retry = useCallback(() => setAttempt(value => value + 1), []);\n const { ticket, client, intervalMs, mode } = options;\n useEffect(() => {\n const abort = new AbortController();\n setSnapshot(initialSnapshot());\n const once = (status: string, callback: () => void | Promise<void>) => {\n const key = `${ticket.requestId}:${status}`;\n if (delivered.current.has(key)) return;\n delivered.current.add(key); return callback();\n };\n void observeRequest(ticket, { client, intervalMs, expectedMode: mode, signal: abort.signal,\n onUpdate: setSnapshot,\n onConfirmed: result => once('confirmed', () => latest.current.onConfirmed?.(result)),\n onRejected: result => once('rejected', () => latest.current.onRejected?.(result)),\n onExpired: () => once('expired', () => latest.current.onExpired?.()),\n onError: error => latest.current.onError?.(error),\n });\n return () => abort.abort();\n }, [ticket, client, intervalMs, mode, attempt]);\n return { snapshot, retry };\n}\n\nexport interface AuthLinkWidgetProps extends AuthLinkModalOptions {}\nfunction Widget(props: AuthLinkWidgetProps & { mode: Mode }) {\n const latest = useRef(props); latest.current = props;\n const modal = useRef<AuthLinkModal | undefined>(undefined);\n const delivered = useRef(new Set<string>());\n const hasRefresh = Boolean(props.onRefresh);\n useEffect(() => {\n const once = (status: string, callback: () => void | Promise<void>) => {\n const key = `${props.ticket.requestId}:${status}`;\n if (delivered.current.has(key)) return;\n delivered.current.add(key); return callback();\n };\n const handle = openAuthLink({ ...props,\n onConfirmed: result => once('confirmed', () => latest.current.onConfirmed?.(result)),\n onRejected: result => once('rejected', () => latest.current.onRejected?.(result)),\n onExpired: () => once('expired', () => latest.current.onExpired?.()),\n onError: error => latest.current.onError?.(error),\n onRefresh: hasRefresh ? () => latest.current.onRefresh?.() : undefined,\n onClose: () => latest.current.onClose?.(),\n });\n modal.current = handle;\n return () => { handle.destroy(); if (modal.current === handle) modal.current = undefined; };\n }, [props.ticket, props.client, props.intervalMs, props.mode, props.showQr, props.className, hasRefresh]);\n useEffect(() => { modal.current?.setLocale(props.locale); }, [props.locale]);\n useEffect(() => { modal.current?.setVariant(props.variant); }, [props.variant]);\n return null;\n}\nexport function AuthLinkBind(props: AuthLinkWidgetProps) { return <Widget {...props} mode=\"bind\" />; }\nexport function AuthLinkConfirm(props: AuthLinkWidgetProps) { return <Widget {...props} mode=\"confirm\" />; }\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 '\u2588\u2588': '\u2588',\n '\u2588 ': '\u2580',\n ' \u2588': '\u2584',\n ' ': ' '\n };\n\n const blocksLastLineNoMargin = {\n '\u2588\u2588': '\u2580',\n '\u2588 ': '\u2580',\n ' \u2588': ' ',\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 = '\u2588';\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 += '\u2588';\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('\u2580');\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('\u2588\u2588');\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", "import qrcode from 'qrcode-generator';\nimport type { AuthLinkClient, Confirmation, DisplayCode, Events, Mode, Result, Snapshot, Ticket } from './types.js';\n\nconst token = /^[A-Za-z0-9_-]{43}$/;\nexport class AuthLinkError extends Error {\n constructor(public readonly code: string) { super(code); this.name = 'AuthLinkError'; }\n}\nfunction fail(code: string): never { throw new AuthLinkError(code); }\nfunction object(value: unknown): Record<string, unknown> {\n if (!value || typeof value !== 'object' || Array.isArray(value)) fail('INVALID_RESPONSE');\n return value as Record<string, unknown>;\n}\nexport function validateDisplayCode(value: unknown): DisplayCode {\n const m = object(value);\n const span = Date.parse(String(m.validUntil)) - Date.parse(String(m.serverTime));\n if (typeof m.value !== 'string' || !/^\\d{6}$/.test(m.value) || m.periodSeconds !== 30 ||\n !Number.isFinite(span) || span <= 0 || span > 30_000 ||\n 'seed' in m || 'secret' in m || 'key' in m) fail('INVALID_DISPLAY_CODE');\n return { value: m.value, serverTime: String(m.serverTime), validUntil: String(m.validUntil), periodSeconds: 30 };\n}\nexport function validateTicket(value: unknown, expectedMode?: Mode, trustedOrigin?: string): Ticket {\n const m = object(value);\n if ('pairing' in m || 'seed' in m || 'apiKey' in m) fail('SERVER_SECRET_FORBIDDEN');\n if (typeof m.requestId !== 'string' || !token.test(m.requestId) ||\n !['bind', 'confirm'].includes(String(m.purpose)) || (expectedMode && m.purpose !== expectedMode) ||\n typeof m.qr !== 'string' || m.qr.length > 4096 ||\n typeof m.pairingCode !== 'string' || !/^\\d{6}$/.test(m.pairingCode)) fail('INVALID_TICKET');\n let qr: Record<string, unknown>;\n try { qr = object(JSON.parse(m.qr)); } catch { return fail('INVALID_QR'); }\n let origin: URL;\n try { origin = new URL(String(qr.origin)); } catch { return fail('INVALID_QR'); }\n if (qr.v !== 1 || qr.requestId !== m.requestId || typeof qr.token !== 'string' || !token.test(qr.token) ||\n origin.protocol !== 'https:' || origin.origin !== qr.origin || origin.origin.length > 512 || origin.username || origin.password ||\n (trustedOrigin && origin.origin !== trustedOrigin)) fail('UNTRUSTED_QR');\n const displayCode = m.displayCode === undefined ? undefined : validateDisplayCode(m.displayCode);\n if (m.purpose === 'confirm' && !displayCode) fail('DYNAMIC_CODE_REQUIRED');\n const expiry = Date.parse(String(m.expiresAt));\n const now = displayCode ? Date.parse(displayCode.serverTime) : Date.now();\n if (!Number.isFinite(expiry) || expiry > now + 180_000) fail('INVALID_EXPIRY');\n return { requestId: m.requestId, purpose: m.purpose as Mode, qr: m.qr, pairingCode: m.pairingCode,\n expiresAt: String(m.expiresAt), ...(displayCode ? { displayCode } : {}) };\n}\nexport function qrImage(ticket: Ticket): string {\n const value = validateTicket(ticket);\n const payload = JSON.parse(value.qr) as { v: number; origin: string; requestId: string; token: string };\n const qr = qrcode(0, 'M');\n qr.addData(JSON.stringify({ v: 1, origin: payload.origin, requestId: payload.requestId, token: payload.token }), 'Byte');\n qr.make();\n return `data:image/svg+xml;charset=utf-8,${encodeURIComponent(qr.createSvgTag({ cellSize: 4, margin: 16, scalable: true }))}`;\n}\n\nexport interface ClientOptions {\n /** Same-origin application backend, never the AuthLink tenant API. */\n baseUrl?: string;\n csrfToken: () => string | Promise<string>;\n authLinkOrigin?: string;\n fetch?: typeof fetch;\n}\nasync function limitedJson(response: Response): Promise<unknown> {\n const reader = response.body?.getReader();\n if (!reader) fail('INVALID_RESPONSE');\n const chunks: Uint8Array[] = []; let size = 0;\n try {\n for (;;) {\n const { done, value } = await reader.read();\n if (done) break;\n size += value.length;\n if (size > 65_536) { await reader.cancel(); fail('RESPONSE_TOO_LARGE'); }\n chunks.push(value);\n }\n } finally { reader.releaseLock(); }\n const bytes = new Uint8Array(size); let at = 0;\n for (const chunk of chunks) { bytes.set(chunk, at); at += chunk.length; }\n try { return JSON.parse(new TextDecoder('utf-8', { fatal: true }).decode(bytes)); }\n catch { return fail('INVALID_RESPONSE'); }\n}\nexport function createAuthLinkClient(options: ClientOptions): AuthLinkClient {\n if ('apiKey' in options || 'secret' in options) fail('SERVER_SECRET_FORBIDDEN');\n const base = options.baseUrl ?? '/api/authlink';\n const call = async (path: string, body: unknown, signal?: AbortSignal, key?: string): Promise<unknown> => {\n if (typeof window === 'undefined') fail('BROWSER_REQUIRED');\n const url = new URL(base.replace(/\\/$/, '') + path, window.location.href);\n if (url.origin !== window.location.origin || url.username || url.password || url.search || url.hash ||\n (url.protocol !== 'https:' && !['localhost', '127.0.0.1', '[::1]'].includes(url.hostname))) fail('CMS_ORIGIN_REQUIRED');\n const csrf = await options.csrfToken();\n if (typeof csrf !== 'string' || !csrf || csrf.length > 1024 || /[\\r\\n]/.test(csrf)) fail('CSRF_REQUIRED');\n signal?.throwIfAborted();\n const controller = new AbortController();\n const cancel = () => controller.abort(signal?.reason);\n signal?.addEventListener('abort', cancel, { once: true });\n const timeout = setTimeout(() => controller.abort(), 10_000);\n try {\n const response = await (options.fetch ?? globalThis.fetch)(url, { method: 'POST', credentials: 'same-origin',\n redirect: 'error', cache: 'no-store', signal: controller.signal,\n headers: { Accept: 'application/json', 'Content-Type': 'application/json', 'X-CSRF-Token': csrf,\n ...(key ? { 'Idempotency-Key': key } : {}) }, body: JSON.stringify(body) });\n if (!response.ok) fail(response.status === 401 || response.status === 403 ? 'CMS_UNAUTHORIZED' : 'CMS_REQUEST_FAILED');\n return await limitedJson(response);\n } catch (error) {\n if (error instanceof AuthLinkError) throw error;\n if (signal?.aborted) throw signal.reason;\n return fail('NETWORK_ERROR');\n } finally { clearTimeout(timeout); signal?.removeEventListener('abort', cancel); }\n };\n return {\n async create(mode, { idempotencyKey, signal }) {\n if (!['bind', 'confirm'].includes(mode) || !token.test(idempotencyKey)) fail('INVALID_CREATE_OPTIONS');\n return validateTicket(await call('/requests', { purpose: mode }, signal, idempotencyKey), mode, options.authLinkOrigin);\n },\n async result(ticket, signal) {\n if (!token.test(ticket.requestId)) fail('INVALID_TICKET');\n return await call(`/requests/${ticket.requestId}/result`, {}, signal) as Result;\n },\n };\n}\n\nexport function requestKey(): string {\n const bytes = globalThis.crypto.getRandomValues(new Uint8Array(32));\n return btoa(String.fromCharCode(...bytes)).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '');\n}\nexport function initialSnapshot(): Snapshot {\n return { status: 'idle', code: null, secondsRemaining: 0, codeSecondsRemaining: 0, error: null };\n}\nfunction abortable<T>(promise: Promise<T>, signal: AbortSignal): Promise<T> {\n signal.throwIfAborted();\n let cancel: () => void;\n const abort = new Promise<never>((_, reject) => {\n cancel = () => reject(signal.reason);\n signal.addEventListener('abort', cancel, { once: true });\n });\n return Promise.race([promise, abort]).finally(() => signal.removeEventListener('abort', cancel));\n}\nexport interface ObserveOptions extends Events {\n /** Presentation-only timing from the same monotonic clock as code expiry. */\n onCodeTiming?: (remainingMs: number) => void;\n expectedMode?: Mode;\n client: AuthLinkClient;\n signal: AbortSignal;\n intervalMs?: number;\n onUpdate: (value: Snapshot) => void;\n}\n/** Observe a request CREATED BY your backend. Mounting widgets never creates requests. */\nexport async function observeRequest(input: Ticket, options: ObserveOptions): Promise<void> {\n const { client, signal, onUpdate } = options;\n const interval = options.intervalMs ?? 1500;\n let ticket: Ticket;\n try {\n if (interval < 250 || interval > 10_000 || !Number.isFinite(interval)) fail('INVALID_INTERVAL');\n ticket = validateTicket(input, options.expectedMode);\n } catch (error) {\n if (!signal.aborted) {\n const e = error instanceof Error ? error : new AuthLinkError('INVALID_TICKET');\n onUpdate({ ...initialSnapshot(), status: 'error', error: e }); options.onError?.(e);\n }\n return;\n }\n let frame = ticket.displayCode;\n let serverAnchor = frame ? Date.parse(frame.serverTime) : Date.now();\n let monotonicAnchor = performance.now();\n const serverNow = () => serverAnchor + performance.now() - monotonicAnchor;\n const expiry = Date.parse(ticket.expiresAt);\n let ended = false;\n const controller = new AbortController();\n const cancel = () => controller.abort(signal.reason);\n signal.addEventListener('abort', cancel, { once: true });\n if (signal.aborted) cancel();\n let last = initialSnapshot();\n const update = (value: Snapshot) => {\n if (signal.aborted) return;\n if (JSON.stringify(value) !== JSON.stringify(last)) { last = value; onUpdate(value); }\n };\n const tick = () => {\n if (ended || signal.aborted) return;\n const now = serverNow();\n if (now >= expiry) { controller.abort(new AuthLinkError('REQUEST_EXPIRED')); return; }\n const codeRemaining = Math.max(0, ((frame ? Date.parse(frame.validUntil) : expiry) - now) / 1000);\n options.onCodeTiming?.(codeRemaining * 1000);\n update({ status: 'pending', code: codeRemaining > 0 ? (frame?.value ?? ticket.pairingCode) : null,\n secondsRemaining: Math.max(0, Math.ceil((expiry - now) / 1000)),\n codeSecondsRemaining: Math.ceil(codeRemaining), error: null });\n };\n const timer = setInterval(tick, 200);\n const finish = (status: 'confirmed' | 'rejected' | 'expired' | 'error', result?: Confirmation, error?: Error) => {\n if (ended || signal.aborted) return;\n ended = true;\n update({ ...last, status, code: null, error: error ?? null });\n try {\n let effect: void | Promise<void> = undefined;\n if (status === 'confirmed') effect = options.onConfirmed?.(result!);\n else if (status === 'rejected') effect = options.onRejected?.({ status: 'rejected', code: 'REJECTED', requestId: ticket.requestId, purpose: ticket.purpose });\n else if (status === 'expired') effect = options.onExpired?.();\n else options.onError?.(error!);\n void Promise.resolve(effect).catch(() => {\n if (!signal.aborted) options.onError?.(new AuthLinkError('CALLBACK_FAILED'));\n });\n } catch { if (status !== 'error') options.onError?.(new AuthLinkError('CALLBACK_FAILED')); }\n };\n try {\n tick();\n for (;;) {\n controller.signal.throwIfAborted();\n const value = object(await abortable(client.result(ticket, controller.signal), controller.signal));\n controller.signal.throwIfAborted();\n if (value.requestId !== ticket.requestId) fail('REQUEST_MISMATCH');\n if (value.status === 'confirmed') {\n if (!token.test(String(value.verificationId)) || !['device-presence.v1'].includes(String(value.authenticationPolicy)) ||\n value.expiresAt !== ticket.expiresAt || value.purpose !== ticket.purpose || serverNow() >= expiry ||\n 'action' in value || 'transactionHash' in value) fail('INVALID_CONFIRMATION');\n finish('confirmed', value as unknown as Confirmation); return;\n }\n if (value.status === 'rejected' || value.status === 'expired') { finish(value.status); return; }\n if (!['new', 'pending', 'approved', 'consumed'].includes(String(value.status))) fail('INVALID_RESPONSE');\n if (value.displayCode !== undefined) {\n const nextFrame = validateDisplayCode(value.displayCode);\n const nextExpiry = Date.parse(nextFrame.validUntil);\n const currentExpiry = frame ? Date.parse(frame.validUntil) : 0;\n // Keep this period's deadline fixed: second-precision timestamps and\n // variable response latency must not move the running countdown.\n if (!frame || nextExpiry > currentExpiry) {\n serverAnchor = Math.max(serverNow(), Date.parse(nextFrame.serverTime));\n monotonicAnchor = performance.now();\n }\n // A late response for an older period cannot restore a stale code.\n if (!frame || nextExpiry >= currentExpiry) frame = nextFrame;\n }\n tick();\n let pause: ReturnType<typeof setTimeout> | undefined;\n try { await abortable(new Promise<void>(resolve => { pause = setTimeout(resolve, interval); }), controller.signal); }\n finally { clearTimeout(pause); }\n }\n } catch (error) {\n if (!signal.aborted && !ended) {\n if (error instanceof AuthLinkError && error.code === 'REQUEST_EXPIRED') finish('expired');\n else finish('error', undefined, error instanceof AuthLinkError ? error : new AuthLinkError('NETWORK_ERROR'));\n }\n } finally {\n ended = true; clearInterval(timer); controller.abort(); signal.removeEventListener('abort', cancel);\n }\n}\n", "{\n \"bind\": \"Bind your phone\",\n \"confirm\": \"Confirm verification\",\n \"scan\": \"Scan with AuthLink\",\n \"code\": \"Matching code\",\n \"help\": \"Check that the numbers match in the app, then confirm on your phone.\",\n \"waiting\": \"Waiting for your phone\",\n \"loading\": \"Connecting\",\n \"confirmed\": \"Confirmed\",\n \"rejected\": \"Rejected\",\n \"expired\": \"Request expired\",\n \"error\": \"Verification is unavailable\",\n \"retry\": \"Retry\",\n \"refresh\": \"New request\",\n \"updating\": \"Updating code\",\n \"close\": \"Close\",\n \"cancel\": \"Cancel\",\n \"autoUpdate\": \"Code updates automatically every 30 seconds\",\n \"expiring\": \"Request expiring soon\"\n}\n", "{\n \"bind\": \"\u7ED1\u5B9A\u624B\u673A\",\n \"confirm\": \"\u786E\u8BA4\u8EAB\u4EFD\u9A8C\u8BC1\",\n \"scan\": \"\u4F7F\u7528 AuthLink \u626B\u63CF\u4E8C\u7EF4\u7801\",\n \"code\": \"\u52A8\u6001\u6838\u5BF9\u7801\",\n \"help\": \"\u6838\u5BF9 App \u4E2D\u7684\u6570\u5B57\u4E00\u81F4\u540E\uFF0C\u5728\u624B\u673A\u4E0A\u786E\u8BA4\u3002\",\n \"waiting\": \"\u7B49\u5F85\u624B\u673A\u786E\u8BA4\",\n \"loading\": \"\u6B63\u5728\u8FDE\u63A5\",\n \"confirmed\": \"\u5DF2\u786E\u8BA4\",\n \"rejected\": \"\u5DF2\u62D2\u7EDD\",\n \"expired\": \"\u8BF7\u6C42\u5DF2\u8FC7\u671F\",\n \"error\": \"\u6682\u65F6\u65E0\u6CD5\u5B8C\u6210\u9A8C\u8BC1\",\n \"retry\": \"\u91CD\u8BD5\",\n \"refresh\": \"\u91CD\u65B0\u53D1\u8D77\",\n \"updating\": \"\u6B63\u5728\u66F4\u65B0\u6570\u5B57\",\n \"close\": \"\u5173\u95ED\",\n \"cancel\": \"\u53D6\u6D88\",\n \"autoUpdate\": \"\u6838\u5BF9\u7801\u6BCF 30 \u79D2\u81EA\u52A8\u66F4\u65B0\",\n \"expiring\": \"\u8BF7\u6C42\u5373\u5C06\u8FC7\u671F\"\n}\n", "{\n \"bind\": \"\u7D81\u5B9A\u624B\u6A5F\",\n \"confirm\": \"\u78BA\u8A8D\u8EAB\u5206\u9A57\u8B49\",\n \"scan\": \"\u4F7F\u7528 AuthLink \u6383\u63CF QR \u78BC\",\n \"code\": \"\u52D5\u614B\u6838\u5C0D\u78BC\",\n \"help\": \"\u6838\u5C0D App \u4E2D\u7684\u6578\u5B57\u4E00\u81F4\u5F8C\uFF0C\u5728\u624B\u6A5F\u4E0A\u78BA\u8A8D\u3002\",\n \"waiting\": \"\u7B49\u5F85\u624B\u6A5F\u78BA\u8A8D\",\n \"loading\": \"\u6B63\u5728\u9023\u7DDA\",\n \"confirmed\": \"\u5DF2\u78BA\u8A8D\",\n \"rejected\": \"\u5DF2\u62D2\u7D55\",\n \"expired\": \"\u8ACB\u6C42\u5DF2\u904E\u671F\",\n \"error\": \"\u66AB\u6642\u7121\u6CD5\u5B8C\u6210\u9A57\u8B49\",\n \"retry\": \"\u91CD\u8A66\",\n \"refresh\": \"\u91CD\u65B0\u767C\u8D77\",\n \"updating\": \"\u6B63\u5728\u66F4\u65B0\u6578\u5B57\",\n \"close\": \"\u95DC\u9589\",\n \"cancel\": \"\u53D6\u6D88\",\n \"autoUpdate\": \"\u6838\u5C0D\u78BC\u6BCF 30 \u79D2\u81EA\u52D5\u66F4\u65B0\",\n \"expiring\": \"\u8ACB\u6C42\u5373\u5C07\u5230\u671F\"\n}\n", "{\n \"bind\": \"\u30B9\u30DE\u30FC\u30C8\u30D5\u30A9\u30F3\u3092\u767B\u9332\",\n \"confirm\": \"\u672C\u4EBA\u78BA\u8A8D\",\n \"scan\": \"AuthLink \u3067 QR \u30B3\u30FC\u30C9\u3092\u30B9\u30AD\u30E3\u30F3\",\n \"code\": \"\u7167\u5408\u30B3\u30FC\u30C9\",\n \"help\": \"\u30A2\u30D7\u30EA\u306E\u6570\u5B57\u304C\u4E00\u81F4\u3059\u308B\u3053\u3068\u3092\u78BA\u8A8D\u3057\u3001\u30B9\u30DE\u30FC\u30C8\u30D5\u30A9\u30F3\u3067\u627F\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002\",\n \"waiting\": \"\u30B9\u30DE\u30FC\u30C8\u30D5\u30A9\u30F3\u306E\u78BA\u8A8D\u3092\u5F85\u3063\u3066\u3044\u307E\u3059\",\n \"loading\": \"\u63A5\u7D9A\u4E2D\",\n \"confirmed\": \"\u78BA\u8A8D\u6E08\u307F\",\n \"rejected\": \"\u62D2\u5426\u3055\u308C\u307E\u3057\u305F\",\n \"expired\": \"\u6709\u52B9\u671F\u9650\u304C\u5207\u308C\u307E\u3057\u305F\",\n \"error\": \"\u672C\u4EBA\u78BA\u8A8D\u3092\u5B8C\u4E86\u3067\u304D\u307E\u305B\u3093\",\n \"retry\": \"\u518D\u8A66\u884C\",\n \"refresh\": \"\u65B0\u3057\u3044\u30EA\u30AF\u30A8\u30B9\u30C8\",\n \"updating\": \"\u30B3\u30FC\u30C9\u3092\u66F4\u65B0\u4E2D\",\n \"close\": \"\u9589\u3058\u308B\",\n \"cancel\": \"\u30AD\u30E3\u30F3\u30BB\u30EB\",\n \"autoUpdate\": \"\u7167\u5408\u30B3\u30FC\u30C9\u306F30\u79D2\u3054\u3068\u306B\u81EA\u52D5\u66F4\u65B0\",\n \"expiring\": \"\u30EA\u30AF\u30A8\u30B9\u30C8\u306E\u6709\u52B9\u671F\u9650\u304C\u307E\u3082\u306A\u304F\u5207\u308C\u307E\u3059\"\n}\n", "{\n \"bind\": \"\u0986\u09AA\u09A8\u09BE\u09B0 \u09AB\u09CB\u09A8 \u09AF\u09C1\u0995\u09CD\u09A4 \u0995\u09B0\u09C1\u09A8\",\n \"confirm\": \"\u09AF\u09BE\u099A\u09BE\u0987\u0995\u09B0\u09A3 \u09A8\u09BF\u09B6\u09CD\u099A\u09BF\u09A4 \u0995\u09B0\u09C1\u09A8\",\n \"scan\": \"AuthLink \u09A6\u09BF\u09AF\u09BC\u09C7 \u09B8\u09CD\u0995\u09CD\u09AF\u09BE\u09A8 \u0995\u09B0\u09C1\u09A8\",\n \"code\": \"\u09AE\u09BF\u09B2\u09BF\u09AF\u09BC\u09C7 \u09A6\u09C7\u0996\u09BE\u09B0 \u0995\u09CB\u09A1\",\n \"help\": \"\u0985\u09CD\u09AF\u09BE\u09AA\u09C7\u09B0 \u09B8\u0982\u0996\u09CD\u09AF\u09BE\u0997\u09C1\u09B2\u09CB \u09AE\u09BF\u09B2\u09C7 \u0997\u09C7\u09B2\u09C7 \u09AB\u09CB\u09A8\u09C7 \u09A8\u09BF\u09B6\u09CD\u099A\u09BF\u09A4 \u0995\u09B0\u09C1\u09A8\u0964\",\n \"waiting\": \"\u09AB\u09CB\u09A8\u09C7 \u09A8\u09BF\u09B6\u09CD\u099A\u09BF\u09A4\u0995\u09B0\u09A3\u09C7\u09B0 \u0985\u09AA\u09C7\u0995\u09CD\u09B7\u09BE\u09AF\u09BC\",\n \"loading\": \"\u09B8\u0982\u09AF\u09CB\u0997 \u0995\u09B0\u09BE \u09B9\u099A\u09CD\u099B\u09C7\",\n \"confirmed\": \"\u09A8\u09BF\u09B6\u09CD\u099A\u09BF\u09A4 \u09B9\u09AF\u09BC\u09C7\u099B\u09C7\",\n \"rejected\": \"\u09AA\u09CD\u09B0\u09A4\u09CD\u09AF\u09BE\u0996\u09CD\u09AF\u09BE\u09A4\",\n \"expired\": \"\u0985\u09A8\u09C1\u09B0\u09CB\u09A7\u09C7\u09B0 \u09AE\u09C7\u09AF\u09BC\u09BE\u09A6 \u09B6\u09C7\u09B7\",\n \"error\": \"\u09AF\u09BE\u099A\u09BE\u0987\u0995\u09B0\u09A3 \u098F\u0996\u09A8 \u09B8\u09AE\u09CD\u09AD\u09AC \u09A8\u09AF\u09BC\",\n \"retry\": \"\u0986\u09AC\u09BE\u09B0 \u099A\u09C7\u09B7\u09CD\u099F\u09BE \u0995\u09B0\u09C1\u09A8\",\n \"refresh\": \"\u09A8\u09A4\u09C1\u09A8 \u0985\u09A8\u09C1\u09B0\u09CB\u09A7\",\n \"updating\": \"\u0995\u09CB\u09A1 \u0986\u09AA\u09A1\u09C7\u099F \u09B9\u099A\u09CD\u099B\u09C7\",\n \"close\": \"\u09AC\u09A8\u09CD\u09A7 \u0995\u09B0\u09C1\u09A8\",\n \"cancel\": \"\u09AC\u09BE\u09A4\u09BF\u09B2\",\n \"autoUpdate\": \"\u0995\u09CB\u09A1 \u09AA\u09CD\u09B0\u09A4\u09BF \u09E9\u09E6 \u09B8\u09C7\u0995\u09C7\u09A8\u09CD\u09A1\u09C7 \u09B8\u09CD\u09AC\u09AF\u09BC\u0982\u0995\u09CD\u09B0\u09BF\u09AF\u09BC\u09AD\u09BE\u09AC\u09C7 \u09AC\u09A6\u09B2\u09BE\u09AF\u09BC\",\n \"expiring\": \"\u0985\u09A8\u09C1\u09B0\u09CB\u09A7\u09C7\u09B0 \u09AE\u09C7\u09AF\u09BC\u09BE\u09A6 \u09B6\u09C0\u0998\u09CD\u09B0\u0987 \u09B6\u09C7\u09B7 \u09B9\u09AC\u09C7\"\n}\n", "{\n \"bind\": \"Vincula tu tel\u00E9fono\",\n \"confirm\": \"Confirma la verificaci\u00F3n\",\n \"scan\": \"Escanea con AuthLink\",\n \"code\": \"C\u00F3digo de comparaci\u00F3n\",\n \"help\": \"Comprueba que los n\u00FAmeros coincidan en la aplicaci\u00F3n y confirma en tu tel\u00E9fono.\",\n \"waiting\": \"Esperando la confirmaci\u00F3n del tel\u00E9fono\",\n \"loading\": \"Conectando\",\n \"confirmed\": \"Confirmado\",\n \"rejected\": \"Rechazado\",\n \"expired\": \"La solicitud ha caducado\",\n \"error\": \"La verificaci\u00F3n no est\u00E1 disponible\",\n \"retry\": \"Reintentar\",\n \"refresh\": \"Nueva solicitud\",\n \"updating\": \"Actualizando el c\u00F3digo\",\n \"close\": \"Cerrar\",\n \"cancel\": \"Cancelar\",\n \"autoUpdate\": \"El c\u00F3digo se actualiza autom\u00E1ticamente cada 30 segundos\",\n \"expiring\": \"La solicitud est\u00E1 por caducar\"\n}\n", "{\n \"bind\": \"Iugnay ang iyong telepono\",\n \"confirm\": \"Kumpirmahin ang pagpapatunay\",\n \"scan\": \"Mag-scan gamit ang AuthLink\",\n \"code\": \"Code na paghahambingin\",\n \"help\": \"Tiyaking magkapareho ang mga numero sa app, pagkatapos ay kumpirmahin sa iyong telepono.\",\n \"waiting\": \"Hinihintay ang kumpirmasyon sa telepono\",\n \"loading\": \"Kumokonekta\",\n \"confirmed\": \"Nakumpirma\",\n \"rejected\": \"Tinanggihan\",\n \"expired\": \"Nag-expire ang kahilingan\",\n \"error\": \"Hindi available ang pagpapatunay\",\n \"retry\": \"Subukan muli\",\n \"refresh\": \"Bagong kahilingan\",\n \"updating\": \"Ina-update ang code\",\n \"close\": \"Isara\",\n \"cancel\": \"Kanselahin\",\n \"autoUpdate\": \"Awtomatikong nagbabago ang code kada 30 segundo\",\n \"expiring\": \"Malapit nang mag-expire ang kahilingan\"\n}\n", "{\n \"bind\": \"\u0905\u092A\u0928\u093E \u092B\u093C\u094B\u0928 \u091C\u094B\u0921\u093C\u0947\u0902\",\n \"confirm\": \"\u0938\u0924\u094D\u092F\u093E\u092A\u0928 \u0915\u0940 \u092A\u0941\u0937\u094D\u091F\u093F \u0915\u0930\u0947\u0902\",\n \"scan\": \"AuthLink \u0938\u0947 \u0938\u094D\u0915\u0948\u0928 \u0915\u0930\u0947\u0902\",\n \"code\": \"\u092E\u093F\u0932\u093E\u0928 \u0915\u094B\u0921\",\n \"help\": \"\u0910\u092A \u092E\u0947\u0902 \u0938\u0902\u0916\u094D\u092F\u093E\u0913\u0902 \u0915\u093E \u092E\u093F\u0932\u093E\u0928 \u0915\u0930\u0947\u0902, \u092B\u093F\u0930 \u0905\u092A\u0928\u0947 \u092B\u093C\u094B\u0928 \u092A\u0930 \u092A\u0941\u0937\u094D\u091F\u093F \u0915\u0930\u0947\u0902\u0964\",\n \"waiting\": \"\u092B\u093C\u094B\u0928 \u092A\u0930 \u092A\u0941\u0937\u094D\u091F\u093F \u0915\u0940 \u092A\u094D\u0930\u0924\u0940\u0915\u094D\u0937\u093E \u0939\u0948\",\n \"loading\": \"\u0915\u0928\u0947\u0915\u094D\u091F \u0939\u094B \u0930\u0939\u093E \u0939\u0948\",\n \"confirmed\": \"\u092A\u0941\u0937\u094D\u091F\u093F \u0939\u094B \u0917\u0908\",\n \"rejected\": \"\u0905\u0938\u094D\u0935\u0940\u0915\u0943\u0924\",\n \"expired\": \"\u0905\u0928\u0941\u0930\u094B\u0927 \u0915\u0940 \u0938\u092E\u092F \u0938\u0940\u092E\u093E \u0938\u092E\u093E\u092A\u094D\u0924\",\n \"error\": \"\u0938\u0924\u094D\u092F\u093E\u092A\u0928 \u0909\u092A\u0932\u092C\u094D\u0927 \u0928\u0939\u0940\u0902 \u0939\u0948\",\n \"retry\": \"\u092B\u093F\u0930 \u0915\u094B\u0936\u093F\u0936 \u0915\u0930\u0947\u0902\",\n \"refresh\": \"\u0928\u092F\u093E \u0905\u0928\u0941\u0930\u094B\u0927\",\n \"updating\": \"\u0915\u094B\u0921 \u0905\u092A\u0921\u0947\u091F \u0939\u094B \u0930\u0939\u093E \u0939\u0948\",\n \"close\": \"\u092C\u0902\u0926 \u0915\u0930\u0947\u0902\",\n \"cancel\": \"\u0930\u0926\u094D\u0926 \u0915\u0930\u0947\u0902\",\n \"autoUpdate\": \"\u0915\u094B\u0921 \u0939\u0930 30 \u0938\u0947\u0915\u0902\u0921 \u092E\u0947\u0902 \u0905\u092A\u0928\u0947 \u0906\u092A \u092C\u0926\u0932\u0924\u093E \u0939\u0948\",\n \"expiring\": \"\u0905\u0928\u0941\u0930\u094B\u0927 \u0915\u0940 \u0938\u092E\u092F-\u0938\u0940\u092E\u093E \u0938\u092E\u093E\u092A\u094D\u0924 \u0939\u094B\u0928\u0947 \u0935\u093E\u0932\u0940 \u0939\u0948\"\n}\n", "{\n \"bind\": \"Tautkan ponsel Anda\",\n \"confirm\": \"Konfirmasi verifikasi\",\n \"scan\": \"Pindai dengan AuthLink\",\n \"code\": \"Kode pencocokan\",\n \"help\": \"Pastikan angka di aplikasi cocok, lalu konfirmasi di ponsel Anda.\",\n \"waiting\": \"Menunggu konfirmasi dari ponsel\",\n \"loading\": \"Menghubungkan\",\n \"confirmed\": \"Dikonfirmasi\",\n \"rejected\": \"Ditolak\",\n \"expired\": \"Permintaan kedaluwarsa\",\n \"error\": \"Verifikasi tidak tersedia\",\n \"retry\": \"Coba lagi\",\n \"refresh\": \"Permintaan baru\",\n \"updating\": \"Memperbarui kode\",\n \"close\": \"Tutup\",\n \"cancel\": \"Batal\",\n \"autoUpdate\": \"Kode diperbarui otomatis setiap 30 detik\",\n \"expiring\": \"Permintaan akan segera kedaluwarsa\"\n}\n", "{\n \"bind\": \"Pautkan telefon anda\",\n \"confirm\": \"Sahkan pengesahan\",\n \"scan\": \"Imbas dengan AuthLink\",\n \"code\": \"Kod padanan\",\n \"help\": \"Pastikan nombor dalam aplikasi sepadan, kemudian sahkan pada telefon anda.\",\n \"waiting\": \"Menunggu pengesahan daripada telefon\",\n \"loading\": \"Sedang menyambung\",\n \"confirmed\": \"Disahkan\",\n \"rejected\": \"Ditolak\",\n \"expired\": \"Permintaan telah tamat tempoh\",\n \"error\": \"Pengesahan tidak tersedia\",\n \"retry\": \"Cuba lagi\",\n \"refresh\": \"Permintaan baharu\",\n \"updating\": \"Sedang mengemas kini kod\",\n \"close\": \"Tutup\",\n \"cancel\": \"Batal\",\n \"autoUpdate\": \"Kod dikemas kini secara automatik setiap 30 saat\",\n \"expiring\": \"Permintaan akan tamat tempoh tidak lama lagi\"\n}\n", "{\n \"bind\": \"Vincule seu celular\",\n \"confirm\": \"Confirme a verifica\u00E7\u00E3o\",\n \"scan\": \"Escaneie com o AuthLink\",\n \"code\": \"C\u00F3digo de compara\u00E7\u00E3o\",\n \"help\": \"Confira se os n\u00FAmeros no aplicativo coincidem e confirme no celular.\",\n \"waiting\": \"Aguardando confirma\u00E7\u00E3o no celular\",\n \"loading\": \"Conectando\",\n \"confirmed\": \"Confirmado\",\n \"rejected\": \"Recusado\",\n \"expired\": \"A solicita\u00E7\u00E3o expirou\",\n \"error\": \"A verifica\u00E7\u00E3o est\u00E1 indispon\u00EDvel\",\n \"retry\": \"Tentar novamente\",\n \"refresh\": \"Nova solicita\u00E7\u00E3o\",\n \"updating\": \"Atualizando o c\u00F3digo\",\n \"close\": \"Fechar\",\n \"cancel\": \"Cancelar\",\n \"autoUpdate\": \"O c\u00F3digo \u00E9 atualizado automaticamente a cada 30 segundos\",\n \"expiring\": \"A solicita\u00E7\u00E3o est\u00E1 prestes a expirar\"\n}\n", "{\n \"bind\": \"\u0E1C\u0E39\u0E01\u0E42\u0E17\u0E23\u0E28\u0E31\u0E1E\u0E17\u0E4C\u0E02\u0E2D\u0E07\u0E04\u0E38\u0E13\",\n \"confirm\": \"\u0E22\u0E37\u0E19\u0E22\u0E31\u0E19\u0E01\u0E32\u0E23\u0E15\u0E23\u0E27\u0E08\u0E2A\u0E2D\u0E1A\",\n \"scan\": \"\u0E2A\u0E41\u0E01\u0E19\u0E14\u0E49\u0E27\u0E22 AuthLink\",\n \"code\": \"\u0E23\u0E2B\u0E31\u0E2A\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E40\u0E1B\u0E23\u0E35\u0E22\u0E1A\u0E40\u0E17\u0E35\u0E22\u0E1A\",\n \"help\": \"\u0E15\u0E23\u0E27\u0E08\u0E2A\u0E2D\u0E1A\u0E27\u0E48\u0E32\u0E15\u0E31\u0E27\u0E40\u0E25\u0E02\u0E43\u0E19\u0E41\u0E2D\u0E1B\u0E15\u0E23\u0E07\u0E01\u0E31\u0E19 \u0E41\u0E25\u0E49\u0E27\u0E08\u0E36\u0E07\u0E22\u0E37\u0E19\u0E22\u0E31\u0E19\u0E1A\u0E19\u0E42\u0E17\u0E23\u0E28\u0E31\u0E1E\u0E17\u0E4C\u0E02\u0E2D\u0E07\u0E04\u0E38\u0E13\",\n \"waiting\": \"\u0E01\u0E33\u0E25\u0E31\u0E07\u0E23\u0E2D\u0E01\u0E32\u0E23\u0E22\u0E37\u0E19\u0E22\u0E31\u0E19\u0E08\u0E32\u0E01\u0E42\u0E17\u0E23\u0E28\u0E31\u0E1E\u0E17\u0E4C\",\n \"loading\": \"\u0E01\u0E33\u0E25\u0E31\u0E07\u0E40\u0E0A\u0E37\u0E48\u0E2D\u0E21\u0E15\u0E48\u0E2D\",\n \"confirmed\": \"\u0E22\u0E37\u0E19\u0E22\u0E31\u0E19\u0E41\u0E25\u0E49\u0E27\",\n \"rejected\": \"\u0E1B\u0E0F\u0E34\u0E40\u0E2A\u0E18\u0E41\u0E25\u0E49\u0E27\",\n \"expired\": \"\u0E04\u0E33\u0E02\u0E2D\u0E2B\u0E21\u0E14\u0E2D\u0E32\u0E22\u0E38\",\n \"error\": \"\u0E44\u0E21\u0E48\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E15\u0E23\u0E27\u0E08\u0E2A\u0E2D\u0E1A\u0E44\u0E14\u0E49\u0E43\u0E19\u0E02\u0E13\u0E30\u0E19\u0E35\u0E49\",\n \"retry\": \"\u0E25\u0E2D\u0E07\u0E2D\u0E35\u0E01\u0E04\u0E23\u0E31\u0E49\u0E07\",\n \"refresh\": \"\u0E04\u0E33\u0E02\u0E2D\u0E43\u0E2B\u0E21\u0E48\",\n \"updating\": \"\u0E01\u0E33\u0E25\u0E31\u0E07\u0E2D\u0E31\u0E1B\u0E40\u0E14\u0E15\u0E23\u0E2B\u0E31\u0E2A\",\n \"close\": \"\u0E1B\u0E34\u0E14\",\n \"cancel\": \"\u0E22\u0E01\u0E40\u0E25\u0E34\u0E01\",\n \"autoUpdate\": \"\u0E23\u0E2B\u0E31\u0E2A\u0E08\u0E30\u0E2D\u0E31\u0E1B\u0E40\u0E14\u0E15\u0E2D\u0E31\u0E15\u0E42\u0E19\u0E21\u0E31\u0E15\u0E34\u0E17\u0E38\u0E01 30 \u0E27\u0E34\u0E19\u0E32\u0E17\u0E35\",\n \"expiring\": \"\u0E04\u0E33\u0E02\u0E2D\u0E43\u0E01\u0E25\u0E49\u0E2B\u0E21\u0E14\u0E2D\u0E32\u0E22\u0E38\"\n}\n", "{\n \"bind\": \"Li\u00EAn k\u1EBFt \u0111i\u1EC7n tho\u1EA1i\",\n \"confirm\": \"X\u00E1c nh\u1EADn x\u00E1c th\u1EF1c\",\n \"scan\": \"Qu\u00E9t b\u1EB1ng AuthLink\",\n \"code\": \"M\u00E3 \u0111\u1ED1i chi\u1EBFu\",\n \"help\": \"Ki\u1EC3m tra c\u00E1c ch\u1EEF s\u1ED1 trong \u1EE9ng d\u1EE5ng c\u00F3 kh\u1EDBp kh\u00F4ng, r\u1ED3i x\u00E1c nh\u1EADn tr\u00EAn \u0111i\u1EC7n tho\u1EA1i.\",\n \"waiting\": \"\u0110ang ch\u1EDD x\u00E1c nh\u1EADn t\u1EEB \u0111i\u1EC7n tho\u1EA1i\",\n \"loading\": \"\u0110ang k\u1EBFt n\u1ED1i\",\n \"confirmed\": \"\u0110\u00E3 x\u00E1c nh\u1EADn\",\n \"rejected\": \"\u0110\u00E3 t\u1EEB ch\u1ED1i\",\n \"expired\": \"Y\u00EAu c\u1EA7u \u0111\u00E3 h\u1EBFt h\u1EA1n\",\n \"error\": \"Hi\u1EC7n kh\u00F4ng th\u1EC3 x\u00E1c th\u1EF1c\",\n \"retry\": \"Th\u1EED l\u1EA1i\",\n \"refresh\": \"Y\u00EAu c\u1EA7u m\u1EDBi\",\n \"updating\": \"\u0110ang c\u1EADp nh\u1EADt m\u00E3\",\n \"close\": \"\u0110\u00F3ng\",\n \"cancel\": \"H\u1EE7y\",\n \"autoUpdate\": \"M\u00E3 t\u1EF1 \u0111\u1ED9ng c\u1EADp nh\u1EADt m\u1ED7i 30 gi\u00E2y\",\n \"expiring\": \"Y\u00EAu c\u1EA7u s\u1EAFp h\u1EBFt h\u1EA1n\"\n}\n", "import type { Locale } from './types.js';\nimport l0 from './locales/en.json';\nimport l1 from './locales/zh-CN.json';\nimport l2 from './locales/zh-TW.json';\nimport l3 from './locales/ja.json';\nimport l4 from './locales/bn.json';\nimport l5 from './locales/es.json';\nimport l6 from './locales/fil.json';\nimport l7 from './locales/hi.json';\nimport l8 from './locales/id.json';\nimport l9 from './locales/ms.json';\nimport l10 from './locales/pt.json';\nimport l11 from './locales/th.json';\nimport l12 from './locales/vi.json';\n\nexport const supportedLocales = [\"en\", \"zh-CN\", \"zh-TW\", \"ja\", \"bn\", \"es\", \"fil\", \"hi\", \"id\", \"ms\", \"pt\", \"th\", \"vi\"] as const satisfies readonly Locale[];\ntype Messages = Record<\"cancel\" | \"close\" | \"bind\" | \"confirm\" | \"scan\" | \"code\" | \"help\" | \"waiting\" | \"loading\" | \"confirmed\" | \"rejected\" | \"expired\" | \"error\" | \"retry\" | \"refresh\" | \"autoUpdate\" | \"expiring\" | \"updating\", string>;\nconst messages = {\n \"en\": l0,\n \"zh-CN\": l1,\n \"zh-TW\": l2,\n \"ja\": l3,\n \"bn\": l4,\n \"es\": l5,\n \"fil\": l6,\n \"hi\": l7,\n \"id\": l8,\n \"ms\": l9,\n \"pt\": l10,\n \"th\": l11,\n \"vi\": l12\n} satisfies Record<Locale, Messages>;\n\nexport const defaultLocale: Locale = 'zh-CN';\n\nexport function resolveLocale(locale?: string): Locale {\n return locale && Object.hasOwn(messages, locale) ? locale as Locale : defaultLocale;\n}\nexport function getMessages(locale?: string): Messages {\n return messages[resolveLocale(locale)];\n}\n", "import { getMessages, resolveLocale } from './i18n.js';\nimport type { DialogVariant, Locale, Mode, Snapshot } from './types.js';\n\nexport interface ViewNode { tag: string; props: Record<string, unknown>; children: (ViewNode | string)[] }\nconst node = (tag: string, props: Record<string, unknown>, ...children: (ViewNode | string)[]): ViewNode => ({ tag, props, children });\nexport function resolveVariant(variant?: string): DialogVariant {\n return variant === 'B' || variant === 'C' ? variant : 'A';\n}\nexport function widgetView(options: { mode: Mode; locale?: Locale; variant?: DialogVariant; snapshot: Snapshot;\n qr?: string; showQr?: boolean; retry: () => void; refresh?: () => void; close?: () => void; className?: string }): ViewNode {\n const { snapshot: s, mode, retry, refresh } = options;\n const locale = resolveLocale(options.locale), variant = resolveVariant(options.variant);\n const l = getMessages(locale);\n const pending = s.status === 'pending', hasQr = pending && (mode === 'bind' || Boolean(options.showQr)) && Boolean(options.qr);\n const status = ({ idle: l.loading, pending: l.waiting, confirmed: l.confirmed, rejected: l.rejected, expired: l.expired, error: l.error })[s.status];\n const expiring = pending && s.secondsRemaining <= 30;\n const expiryTime = `00:${String(Math.max(0, Math.ceil(s.secondsRemaining))).padStart(2, '0')}`;\n const statusNode = () => node('p', { class: 'authlink-status', role: s.status === 'error' ? 'alert' : 'status',\n 'data-expiring': String(expiring) },\n node('span', { class: 'authlink-status-dot', 'aria-hidden': 'true' }), expiring ? l.expiring : status,\n ...(expiring ? [node('span', { class: 'authlink-expiry', 'aria-hidden': 'true' }, ` \u00B7 ${expiryTime}`)] : []));\n const cancel = () => options.close ? [node('button', { type: 'button', class: 'authlink-cancel',\n 'data-authlink-focus': 'cancel', onClick: options.close }, l.cancel)] : [];\n const children: (ViewNode | string)[] = [node('h3', { class: 'authlink-title' }, l[mode])];\n if (hasQr) children.push(node('p', { class: 'authlink-subtitle' }, l.scan));\n if (pending) {\n const qr = hasQr ? [node('figure', { class: 'authlink-qr-wrap' },\n node('img', { class: 'authlink-qr', src: options.qr, alt: l.scan, width: 240, height: 240 }),\n node('figcaption', { class: 'authlink-qr-caption' }, l.scan))] : [];\n const seconds = Math.max(0, Math.min(30, s.codeSecondsRemaining));\n const code = node('output', { class: 'authlink-code',\n 'aria-label': s.code ? `${l.code}: ${s.code.split('').join(' ')}` : l.updating,\n 'aria-live': 'polite', 'data-testid': 'authlink-code' },\n node('span', { class: 'authlink-code-group' }, s.code?.slice(0, 3) ?? '---'),\n node('span', { class: 'authlink-code-group' }, s.code?.slice(3) ?? '---'));\n const panel = node('div', { class: 'authlink-code-panel' },\n node('div', { class: 'authlink-code-values' }, node('div', { class: 'authlink-code-label' }, l.code), code),\n node('div', { class: 'authlink-progress', role: 'progressbar', 'aria-valuemin': 0, 'aria-valuemax': 30,\n 'aria-valuenow': seconds, 'aria-label': l.autoUpdate },\n node('span', { class: 'authlink-progress-fill', 'aria-hidden': 'true', style: `transform:scaleX(${seconds / 30})` })),\n node('p', { class: 'authlink-code-caption' }, s.code ? l.autoUpdate : l.updating));\n const detail: (ViewNode | string)[] = [panel, node('p', { class: 'authlink-help' }, l.help)];\n children.push(node('div', { class: 'authlink-body' }, ...qr, node('div', { class: 'authlink-details' }, ...detail)));\n if (variant === 'A') children.push(node('div', { class: 'authlink-footer' }, statusNode()));\n if (variant === 'B') children.push(node('div', { class: 'authlink-footer' }, statusNode(), ...cancel()));\n if (variant === 'C') children.push(node('div', { class: 'authlink-footer' }, statusNode(), ...cancel()));\n } else {\n children.push(statusNode());\n if (s.status === 'error') children.push(node('button', { type: 'button', class: 'authlink-button',\n 'data-authlink-focus': 'retry', onClick: retry }, l.retry));\n if (refresh && ['expired', 'rejected'].includes(s.status)) children.push(node('button', { type: 'button',\n class: 'authlink-button', 'data-authlink-focus': 'refresh', onClick: refresh }, l.refresh));\n }\n return node('section', { lang: locale, class: `authlink-widget ${options.className ?? ''}`.trim(), 'data-status': s.status,\n 'data-variant': variant, 'data-has-qr': String(hasQr), 'aria-label': l[mode] }, ...children);\n}\n", "import { initialSnapshot, observeRequest, qrImage, validateTicket, AuthLinkError } from './core.js';\nimport { getMessages, resolveLocale } from './i18n.js';\nimport { resolveVariant, widgetView } from './view.js';\nimport type { ViewNode } from './view.js';\nimport type { DialogVariant, Locale, Snapshot, WidgetOptions } from './types.js';\n\nexport interface AuthLinkModalOptions extends WidgetOptions {\n className?: string;\n onClose?: () => void;\n}\nexport interface AuthLinkModal {\n /** Close the UI and abort observation. Does not reject or delete the server request. */\n close(): void;\n /** Component cleanup: close without delivering a user-close callback. */\n destroy(): void;\n setLocale(locale?: Locale): void;\n /** Change presentation without creating or restarting a request. */\n setVariant(variant?: DialogVariant): void;\n retry(): void;\n}\nfunction element(value: ViewNode | string, svg = false): Node {\n if (typeof value === 'string') return document.createTextNode(value);\n svg ||= value.tag === 'svg';\n const result = svg ? document.createElementNS('http://www.w3.org/2000/svg', value.tag) : document.createElement(value.tag);\n for (const [key, v] of Object.entries(value.props)) {\n if (key === 'onClick' && typeof v === 'function') result.addEventListener('click', v as EventListener);\n else if (v !== undefined && v !== null) result.setAttribute(key, String(v));\n }\n result.append(...value.children.map(child => element(child, svg)));\n return result;\n}\n/** Show a backend-created request. This function never creates or authorizes a request. */\nexport function openAuthLink(options: AuthLinkModalOptions): AuthLinkModal {\n if (typeof document === 'undefined' || !document.body) throw new AuthLinkError('BROWSER_REQUIRED');\n const mode = options.mode ?? options.ticket.purpose;\n const ticket = validateTicket(options.ticket, mode);\n const dialog = document.createElement('dialog');\n if (typeof dialog.showModal !== 'function') throw new AuthLinkError('DIALOG_UNSUPPORTED');\n const previousFocus = document.activeElement instanceof HTMLElement ? document.activeElement : null;\n dialog.className = `authlink-dialog ${options.className ?? ''}`.trim();\n dialog.setAttribute('aria-modal', 'true');\n const header = document.createElement('div'); header.className = 'authlink-header';\n const brand = document.createElement('span'); brand.className = 'authlink-brand';\n brand.textContent = 'AuthLink'; brand.tabIndex = -1;\n const closeButton = document.createElement('button');\n closeButton.type = 'button'; closeButton.className = 'authlink-close';\n const closeIcon = document.createElement('span'); closeIcon.className = 'authlink-close-icon';\n closeIcon.setAttribute('aria-hidden', 'true'); closeButton.append(closeIcon);\n const content = document.createElement('div'); content.className = 'authlink-modal-content';\n header.append(brand, closeButton); dialog.append(header, content);\n let locale = options.locale, variant = resolveVariant(options.variant), snapshot: Snapshot = initialSnapshot(), closed = false;\n let abort: AbortController | undefined;\n const image = qrImage(ticket);\n let progressFill: HTMLElement | undefined, progressFrame: number | undefined, progressDeadline = 0;\n const motion = window.matchMedia?.('(prefers-reduced-motion: reduce)');\n const stopProgress = () => {\n if (progressFrame !== undefined) window.cancelAnimationFrame(progressFrame);\n progressFrame = undefined;\n };\n const drawProgress = () => {\n stopProgress();\n if (closed || !progressFill?.isConnected) return;\n const remaining = Math.max(0, progressDeadline - performance.now());\n progressFill.style.transform = `scaleX(${Math.min(1, remaining / 30_000)})`;\n if (remaining > 0 && !motion?.matches && typeof window.requestAnimationFrame === 'function') {\n progressFrame = window.requestAnimationFrame(drawProgress);\n }\n };\n const syncProgress = (remainingMs: number) => {\n progressDeadline = performance.now() + remainingMs;\n drawProgress();\n };\n motion?.addEventListener?.('change', drawProgress);\n const render = () => {\n if (closed) return;\n const language = resolveLocale(locale), messages = getMessages(language);\n dialog.lang = language; dialog.setAttribute('aria-label', messages[mode]);\n dialog.dataset.variant = variant; dialog.dataset.mode = mode;\n dialog.dataset.hasQr = String(snapshot.status === 'pending' && (mode === 'bind' || Boolean(options.showQr)));\n closeButton.setAttribute('aria-label', messages.close);\n const focused = document.activeElement;\n const focusKey = focused instanceof HTMLElement && content.contains(focused) ? focused.dataset.authlinkFocus : undefined;\n const next = element(widgetView({ mode, locale, variant, snapshot, qr: image,\n showQr: options.showQr, retry, refresh: options.onRefresh, close: () => dispose(true) })) as HTMLElement;\n const oldCode = content.querySelector<HTMLElement>('.authlink-code');\n const nextCode = next.querySelector<HTMLElement>('.authlink-code');\n const codeChanged = Boolean(oldCode && nextCode && snapshot.code && oldCode.textContent !== nextCode.textContent);\n // Preserve the number between ticks; only a new server-supplied code fades in.\n if (oldCode && nextCode && oldCode.textContent === nextCode.textContent) {\n oldCode.setAttribute('aria-label', nextCode.getAttribute('aria-label')!);\n nextCode.replaceWith(oldCode);\n }\n const oldProgress = content.querySelector<HTMLElement>('.authlink-progress');\n const nextProgress = next.querySelector<HTMLElement>('.authlink-progress');\n if (oldProgress && nextProgress) {\n oldProgress.setAttribute('aria-valuenow', nextProgress.getAttribute('aria-valuenow')!);\n oldProgress.setAttribute('aria-label', nextProgress.getAttribute('aria-label')!);\n nextProgress.replaceWith(oldProgress);\n }\n content.replaceChildren(next);\n progressFill = content.querySelector<HTMLElement>('.authlink-progress-fill') ?? undefined;\n drawProgress();\n if (codeChanged && !window.matchMedia?.('(prefers-reduced-motion: reduce)').matches) {\n nextCode?.animate?.([{ opacity: .5 }, { opacity: 1 }], { duration: 180, easing: 'ease-out' });\n }\n // Polling must not steal keyboard focus from a footer or retry control.\n if (focusKey) (Array.from(content.querySelectorAll<HTMLElement>('[data-authlink-focus]'))\n .find(item => item.dataset.authlinkFocus === focusKey) ?? brand).focus({ preventScroll: true });\n };\n const dispose = (notify: boolean) => {\n if (closed) return;\n closed = true; abort?.abort(); stopProgress(); progressFill = undefined;\n motion?.removeEventListener?.('change', drawProgress);\n if (dialog.open) dialog.close();\n dialog.remove();\n if (!document.querySelector('dialog.authlink-dialog[open]')) {\n if (document.body.style.overflow === 'hidden') document.body.style.overflow = document.body.dataset.authlinkOverflow ?? '';\n delete document.body.dataset.authlinkOverflow;\n }\n if (previousFocus?.isConnected) previousFocus.focus();\n if (notify) options.onClose?.();\n };\n const delivered = new Set<string>();\n const once = (status: string, callback: () => void | Promise<void>) => {\n if (delivered.has(status)) return;\n delivered.add(status); return callback();\n };\n const retry = () => {\n if (closed) return;\n abort?.abort(); abort = new AbortController(); snapshot = initialSnapshot(); render();\n void observeRequest(ticket, { client: options.client, intervalMs: options.intervalMs, expectedMode: mode,\n signal: abort.signal, onCodeTiming: syncProgress, onUpdate: value => { snapshot = value; if (value.status !== 'rejected') render(); },\n onConfirmed: value => once('confirmed', () => {\n dispose(false);\n try {\n return Promise.resolve(options.onConfirmed?.(value)).catch(() => options.onError?.(new AuthLinkError('CALLBACK_FAILED')));\n } catch { options.onError?.(new AuthLinkError('CALLBACK_FAILED')); }\n }),\n onRejected: value => once('rejected', () => {\n dispose(false);\n try {\n return Promise.resolve(options.onRejected?.(value)).catch(() => options.onError?.(new AuthLinkError('CALLBACK_FAILED')));\n } catch { options.onError?.(new AuthLinkError('CALLBACK_FAILED')); }\n }),\n onExpired: () => once('expired', () => options.onExpired?.()), onError: options.onError });\n };\n closeButton.addEventListener('click', () => dispose(true));\n dialog.addEventListener('cancel', event => { event.preventDefault(); dispose(true); });\n dialog.addEventListener('close', () => dispose(true));\n render(); document.body.append(dialog);\n try { dialog.showModal(); } catch (error) { dialog.remove(); throw error; }\n // Avoid an oversized focus ring on first open; Tab still reaches the close button.\n brand.focus({ preventScroll: true });\n if (document.body.dataset.authlinkOverflow === undefined) document.body.dataset.authlinkOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n retry();\n return { close: () => dispose(true), destroy: () => dispose(false),\n setLocale: value => { locale = value; render(); },\n setVariant: value => { variant = resolveVariant(value); render(); }, retry };\n}\nexport const openAuthLinkBind = (options: AuthLinkModalOptions): AuthLinkModal => openAuthLink({ ...options, mode: 'bind' });\nexport const openAuthLinkConfirm = (options: AuthLinkModalOptions): AuthLinkModal => openAuthLink({ ...options, mode: 'confirm' });\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["typeNumber", "errorCorrectionLevel", "unicodeMap", "qrcode", "_num", "num", "_this", "data", "stringToBytes", "messages"]
|
|
7
|
+
}
|
package/dist/styles.css
ADDED
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/* All variants share the same protocol, accessible controls, and theme tokens. */
|
|
2
|
+
.authlink-dialog {
|
|
3
|
+
--authlink-line: #e7ebe9;
|
|
4
|
+
--authlink-soft: #f0f5f2;
|
|
5
|
+
box-sizing: border-box; width: min(420px, calc(100vw - 32px)); max-width: 650px;
|
|
6
|
+
max-height: calc(100vh - 32px); max-height: calc(100dvh - 32px);
|
|
7
|
+
margin: auto; padding: 0; border: 1px solid var(--authlink-line); border-radius: 20px;
|
|
8
|
+
overflow-y: auto; overscroll-behavior: contain;
|
|
9
|
+
background: var(--authlink-background, #fff); color: var(--authlink-foreground, #173f35);
|
|
10
|
+
font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
|
11
|
+
font-size: 14px; line-height: 1.5; text-align: left;
|
|
12
|
+
box-shadow: 0 24px 80px #162d2530;
|
|
13
|
+
}
|
|
14
|
+
.authlink-dialog *, .authlink-dialog *::before, .authlink-dialog *::after { box-sizing: border-box; }
|
|
15
|
+
.authlink-dialog::backdrop { background: #1c2c3b66; backdrop-filter: blur(4px); }
|
|
16
|
+
.authlink-header { position: sticky; top: 0; z-index: 2; background: var(--authlink-background, #fff); display: flex; align-items: center; justify-content: space-between; gap: 16px;
|
|
17
|
+
min-height: 68px; margin: 0 24px; padding: 10px 0; border-bottom: 1px solid var(--authlink-line); }
|
|
18
|
+
.authlink-brand { font: 650 16px/1.4 system-ui, sans-serif; letter-spacing: -.4px; }
|
|
19
|
+
.authlink-brand:focus { outline: none; }
|
|
20
|
+
.authlink-dialog .authlink-close { position: relative; display: grid; place-items: center; flex: 0 0 44px;
|
|
21
|
+
width: 44px; height: 44px; margin: 0 -10px 0 0; padding: 0;
|
|
22
|
+
border: 0; border-radius: 8px; background: transparent; color: var(--authlink-muted, #697780);
|
|
23
|
+
cursor: pointer; -webkit-tap-highlight-color: transparent; }
|
|
24
|
+
.authlink-close-icon { position: relative; width: 18px; height: 18px; z-index: 1; }
|
|
25
|
+
.authlink-close-icon::before, .authlink-close-icon::after { content: ''; position: absolute;
|
|
26
|
+
top: 8px; left: 1px; width: 16px; height: 1.5px; border-radius: 1px; background: currentColor; transform: rotate(45deg); }
|
|
27
|
+
.authlink-close-icon::after { transform: rotate(-45deg); }
|
|
28
|
+
.authlink-dialog .authlink-close:hover { background: var(--authlink-soft); color: var(--authlink-foreground, #173f35); }
|
|
29
|
+
.authlink-dialog .authlink-close:focus-visible, .authlink-cancel:focus-visible, .authlink-button:focus-visible {
|
|
30
|
+
outline: 2px solid var(--authlink-accent, #277456); outline-offset: 2px; }
|
|
31
|
+
.authlink-widget { box-sizing: border-box; width: 100%; min-width: 0; padding: 24px;
|
|
32
|
+
color: var(--authlink-foreground, #173f35); background: var(--authlink-background, #fff);
|
|
33
|
+
font-family: inherit; line-height: 1.5; text-align: center; }
|
|
34
|
+
.authlink-widget *, .authlink-widget *::before, .authlink-widget *::after { box-sizing: border-box; }
|
|
35
|
+
.authlink-title { margin: 0; font-size: 24px; font-weight: 650; letter-spacing: -.6px; line-height: 1.35; overflow-wrap: anywhere; }
|
|
36
|
+
.authlink-subtitle { margin: 8px 0 0; color: var(--authlink-muted, #697780); font-size: 13px; }
|
|
37
|
+
.authlink-body { min-width: 0; margin-top: 22px; }
|
|
38
|
+
.authlink-qr-wrap { margin: 0 auto 22px; width: fit-content; max-width: 100%; }
|
|
39
|
+
.authlink-qr { display: block; width: min(100%, 196px); height: auto; margin: auto; padding: 8px;
|
|
40
|
+
border: 1px solid var(--authlink-line, #e7ebe9); border-radius: 10px; background: #fff; }
|
|
41
|
+
.authlink-qr-caption { display: none; margin-top: 10px; font-size: 12px; color: var(--authlink-muted, #697780); }
|
|
42
|
+
.authlink-code-panel { position: relative; display: grid; grid-template-columns: minmax(0, 1fr);
|
|
43
|
+
align-items: center; gap: 0 12px; padding: 16px 20px; border-radius: 10px;
|
|
44
|
+
text-align: left; background: var(--authlink-soft, #f0f5f2); }
|
|
45
|
+
.authlink-code-values { min-width: 0; }
|
|
46
|
+
.authlink-code-label { font-size: 12px; color: var(--authlink-muted, #697780); overflow-wrap: anywhere; }
|
|
47
|
+
.authlink-code { display: inline-flex; gap: .28em; margin: 3px 0 0; padding: 0;
|
|
48
|
+
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: clamp(28px, 7.8vw, 36px); font-weight: 600; line-height: 1.25;
|
|
49
|
+
letter-spacing: .025em; font-variant-numeric: tabular-nums; white-space: nowrap; }
|
|
50
|
+
.authlink-progress { display: block; width: 100%; height: 3px; border: 0; border-radius: 5px;
|
|
51
|
+
background: #dce5e0; overflow: hidden; }
|
|
52
|
+
.authlink-progress-fill { display: block; width: 100%; height: 100%; border-radius: inherit;
|
|
53
|
+
background: var(--authlink-accent, #277456); transform-origin: left center; }
|
|
54
|
+
.authlink-code-panel .authlink-progress { margin-top: 14px; }
|
|
55
|
+
.authlink-code-caption { font-size: 11px; color: var(--authlink-muted, #697780); margin: 8px 0 0; overflow-wrap: anywhere; }
|
|
56
|
+
.authlink-help { font-size: 12px; color: var(--authlink-muted, #697780); margin: 16px 0 0; line-height: 1.65; overflow-wrap: anywhere; }
|
|
57
|
+
.authlink-expiry { font-variant-numeric: tabular-nums; white-space: nowrap; }
|
|
58
|
+
.authlink-status[data-expiring="true"] { color: var(--authlink-warning, #92652e); }
|
|
59
|
+
.authlink-status[data-expiring="true"] .authlink-status-dot { background: currentColor; }
|
|
60
|
+
.authlink-status { display: flex; align-items: center; justify-content: center; gap: 6px; flex-wrap: wrap; margin: 0;
|
|
61
|
+
font-size: 13px; line-height: 1.5; overflow-wrap: anywhere; }
|
|
62
|
+
.authlink-status-dot { display: none; flex: 0 0 7px; width: 7px; height: 7px; border-radius: 50%; background: var(--authlink-accent, #277456); }
|
|
63
|
+
.authlink-widget[data-status="pending"] .authlink-status-dot { display: inline-block; }
|
|
64
|
+
.authlink-widget[data-status="error"] .authlink-status, .authlink-widget[data-status="rejected"] .authlink-status { color: #a04432; }
|
|
65
|
+
.authlink-widget[data-status="confirmed"] .authlink-status { color: var(--authlink-accent, #277456); }
|
|
66
|
+
.authlink-footer { margin-top: 20px; }
|
|
67
|
+
.authlink-widget[data-variant="A"] .authlink-footer .authlink-status { border-top: 1px solid var(--authlink-line, #e7ebe9); padding-top: 16px; }
|
|
68
|
+
.authlink-button { margin-top: 18px; border: 0; border-radius: 8px; min-height: 44px; padding: 10px 20px; font: inherit;
|
|
69
|
+
cursor: pointer; color: #fff; background: var(--authlink-accent, #277456); }
|
|
70
|
+
.authlink-cancel { display: inline-flex; align-items: center; justify-content: flex-start; min-height: 44px;
|
|
71
|
+
min-width: 44px; padding: 8px 0; border: 0; border-radius: 4px; background: transparent;
|
|
72
|
+
color: var(--authlink-muted, #697780); font: inherit; font-size: 12px; text-align: start; cursor: pointer; }
|
|
73
|
+
.authlink-cancel:hover { color: var(--authlink-accent, #277456); text-decoration: underline; text-underline-offset: 3px; }
|
|
74
|
+
/* B: wide desktop layout, vertical layout on narrow viewports. */
|
|
75
|
+
.authlink-dialog[data-variant="B"] { width: min(650px, calc(100vw - 32px)); border-radius: 16px; }
|
|
76
|
+
.authlink-dialog[data-variant="B"][data-has-qr="false"] { width: min(460px, calc(100vw - 32px)); }
|
|
77
|
+
.authlink-dialog[data-variant="B"] .authlink-header { margin: 0; padding: 10px 24px; }
|
|
78
|
+
.authlink-dialog[data-variant="B"] .authlink-close { margin-right: -6px; }
|
|
79
|
+
.authlink-dialog[data-variant="B"] .authlink-close::before { content: ''; position: absolute; inset: 7px; border-radius: 7px; background: #f0f2f3; }
|
|
80
|
+
.authlink-widget[data-variant="B"] { text-align: left; }
|
|
81
|
+
.authlink-widget[data-variant="B"] .authlink-title { font-size: 24px; }
|
|
82
|
+
.authlink-widget[data-variant="B"] .authlink-subtitle { display: none; }
|
|
83
|
+
.authlink-widget[data-variant="B"][data-has-qr="true"] .authlink-body { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.3fr); align-items: center; gap: 24px; }
|
|
84
|
+
.authlink-widget[data-variant="B"] .authlink-qr-wrap { width: 100%; margin: 0; text-align: center; }
|
|
85
|
+
.authlink-widget[data-variant="B"] .authlink-qr { width: min(100%, 196px); }
|
|
86
|
+
.authlink-widget[data-variant="B"] .authlink-qr-caption { display: block; }
|
|
87
|
+
.authlink-widget[data-variant="B"][data-has-qr="true"] .authlink-details { min-width: 0; padding-left: 24px; border-left: 1px solid var(--authlink-line, #e7ebe9); }
|
|
88
|
+
.authlink-widget[data-variant="B"] .authlink-code-panel { display: block; padding: 0; background: transparent; }
|
|
89
|
+
.authlink-widget[data-variant="B"] .authlink-code { margin: 10px 0 0; font-size: clamp(30px, 5vw, 40px); }
|
|
90
|
+
.authlink-widget[data-variant="B"] .authlink-status { justify-content: flex-start; }
|
|
91
|
+
.authlink-widget[data-variant="B"] .authlink-footer { display: flex; flex-wrap: wrap; gap: 8px 20px; align-items: center;
|
|
92
|
+
justify-content: space-between; border-top: 1px solid var(--authlink-line, #e7ebe9); padding-top: 8px; margin-top: 24px; }
|
|
93
|
+
/* C: compact card; becomes a bottom sheet on mobile. */
|
|
94
|
+
.authlink-dialog[data-variant="C"] { width: min(390px, calc(100vw - 32px)); border-radius: 14px; }
|
|
95
|
+
.authlink-dialog[data-variant="C"] .authlink-header { min-height: 58px; border: 0; padding-bottom: 0; }
|
|
96
|
+
.authlink-widget[data-variant="C"] { padding-top: 12px; text-align: left; }
|
|
97
|
+
.authlink-widget[data-variant="C"] .authlink-title { font-size: 22px; }
|
|
98
|
+
.authlink-widget[data-variant="C"] .authlink-qr { width: min(100%, 180px); }
|
|
99
|
+
.authlink-widget[data-variant="C"] .authlink-qr-wrap { margin-bottom: 18px; }
|
|
100
|
+
.authlink-widget[data-variant="C"] .authlink-code-panel { grid-template-columns: minmax(0, 1fr); padding: 14px 16px; gap: 10px; background: #f5f7f8; }
|
|
101
|
+
.authlink-widget[data-variant="C"] .authlink-code { font-size: clamp(22px, 6.8vw, 26px); margin: 4px 0 0; }
|
|
102
|
+
.authlink-widget[data-variant="C"] .authlink-progress { grid-column: 1 / -1; }
|
|
103
|
+
.authlink-widget[data-variant="C"] .authlink-help { font-size: 11px; margin-top: 12px; }
|
|
104
|
+
.authlink-widget[data-variant="C"] .authlink-footer { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 8px 16px; border-top: 1px solid var(--authlink-line, #e7ebe9); padding-top: 16px; margin-top: 18px; }
|
|
105
|
+
.authlink-widget[data-variant="C"] .authlink-status { justify-content: flex-start; margin: 0; }
|
|
106
|
+
@media (max-width: 560px) {
|
|
107
|
+
.authlink-dialog, .authlink-dialog[data-variant="B"], .authlink-dialog[data-variant="B"][data-has-qr="false"] { width: calc(100vw - 24px); max-height: calc(100dvh - 24px); }
|
|
108
|
+
.authlink-header { margin: 0 20px; }
|
|
109
|
+
.authlink-widget { padding: 20px; }
|
|
110
|
+
.authlink-title, .authlink-widget[data-variant="B"] .authlink-title { font-size: 22px; }
|
|
111
|
+
.authlink-code-panel { padding: 14px 16px; gap: 0 10px; }
|
|
112
|
+
.authlink-widget[data-variant="B"][data-has-qr="true"] .authlink-body { display: block; }
|
|
113
|
+
.authlink-widget[data-variant="B"][data-has-qr="true"] .authlink-details { border: 0; padding: 22px 0 0; }
|
|
114
|
+
.authlink-widget[data-variant="B"] .authlink-code { font-size: 36px; }
|
|
115
|
+
.authlink-widget[data-variant="B"] .authlink-qr { width: min(100%, 180px); }
|
|
116
|
+
.authlink-dialog[data-variant="C"] { width: 100%; max-width: none; margin: auto 0 0; max-height: calc(100dvh - 12px); border-radius: 20px 20px 0 0; border-bottom: 0; }
|
|
117
|
+
.authlink-dialog[data-variant="C"] .authlink-widget { padding-bottom: max(16px, env(safe-area-inset-bottom)); }
|
|
118
|
+
}
|
|
119
|
+
@media (max-width: 350px) {
|
|
120
|
+
.authlink-widget { padding: 16px; }
|
|
121
|
+
.authlink-header { margin: 0 16px; }
|
|
122
|
+
.authlink-code-panel { padding: 12px; }
|
|
123
|
+
.authlink-widget[data-variant="C"] .authlink-code-panel { grid-template-columns: minmax(0, 1fr); }
|
|
124
|
+
.authlink-widget[data-variant="C"] .authlink-code { margin-bottom: 4px; }
|
|
125
|
+
}
|
|
126
|
+
@media (prefers-reduced-motion: reduce) { .authlink-dialog * { animation: none !important; transition: none !important; } }
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { AuthLinkClient, DisplayCode, Events, Mode, Snapshot, Ticket } from './types.js';
|
|
2
|
+
export declare class AuthLinkError extends Error {
|
|
3
|
+
readonly code: string;
|
|
4
|
+
constructor(code: string);
|
|
5
|
+
}
|
|
6
|
+
export declare function validateDisplayCode(value: unknown): DisplayCode;
|
|
7
|
+
export declare function validateTicket(value: unknown, expectedMode?: Mode, trustedOrigin?: string): Ticket;
|
|
8
|
+
export declare function qrImage(ticket: Ticket): string;
|
|
9
|
+
export interface ClientOptions {
|
|
10
|
+
/** Same-origin application backend, never the AuthLink tenant API. */
|
|
11
|
+
baseUrl?: string;
|
|
12
|
+
csrfToken: () => string | Promise<string>;
|
|
13
|
+
authLinkOrigin?: string;
|
|
14
|
+
fetch?: typeof fetch;
|
|
15
|
+
}
|
|
16
|
+
export declare function createAuthLinkClient(options: ClientOptions): AuthLinkClient;
|
|
17
|
+
export declare function requestKey(): string;
|
|
18
|
+
export declare function initialSnapshot(): Snapshot;
|
|
19
|
+
export interface ObserveOptions extends Events {
|
|
20
|
+
/** Presentation-only timing from the same monotonic clock as code expiry. */
|
|
21
|
+
onCodeTiming?: (remainingMs: number) => void;
|
|
22
|
+
expectedMode?: Mode;
|
|
23
|
+
client: AuthLinkClient;
|
|
24
|
+
signal: AbortSignal;
|
|
25
|
+
intervalMs?: number;
|
|
26
|
+
onUpdate: (value: Snapshot) => void;
|
|
27
|
+
}
|
|
28
|
+
/** Observe a request CREATED BY your backend. Mounting widgets never creates requests. */
|
|
29
|
+
export declare function observeRequest(input: Ticket, options: ObserveOptions): Promise<void>;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Locale } from './types.js';
|
|
2
|
+
export declare const supportedLocales: readonly ["en", "zh-CN", "zh-TW", "ja", "bn", "es", "fil", "hi", "id", "ms", "pt", "th", "vi"];
|
|
3
|
+
type Messages = Record<"cancel" | "close" | "bind" | "confirm" | "scan" | "code" | "help" | "waiting" | "loading" | "confirmed" | "rejected" | "expired" | "error" | "retry" | "refresh" | "autoUpdate" | "expiring" | "updating", string>;
|
|
4
|
+
export declare const defaultLocale: Locale;
|
|
5
|
+
export declare function resolveLocale(locale?: string): Locale;
|
|
6
|
+
export declare function getMessages(locale?: string): Messages;
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export * from './types.js';
|
|
2
|
+
export { AuthLinkError, createAuthLinkClient, requestKey, validateTicket, qrImage, observeRequest, initialSnapshot } from './core.js';
|
|
3
|
+
export { supportedLocales } from './i18n.js';
|
|
4
|
+
export { openAuthLink, openAuthLinkBind, openAuthLinkConfirm } from './modal.js';
|
|
5
|
+
export type { AuthLinkModal, AuthLinkModalOptions } from './modal.js';
|