{
  "version": 3,
  "sources": ["../../../../src/connect/walletconnect/crypto.ts", "../../../../src/utils/encoding.ts", "../../../../src/connect/walletconnect/relay.ts", "../../../../src/connect/walletconnect/session.ts", "../../../../src/connect/walletconnect/provider.ts", "../../../../src/connect/walletconnect/qr.ts", "../../../../src/errors/base.ts", "../../../../src/connect/provider.ts", "../../../../src/connect/walletconnect/modal.ts"],
  "sourcesContent": [
    "/** WalletConnect v2 envelope encryption (Type 0 + Type 1) + relay JWT auth */\n\nimport { gcm } from \"@noble/ciphers/aes.js\";\nimport { ed25519, x25519 } from \"@noble/curves/ed25519.js\";\nimport { hkdf } from \"@noble/hashes/hkdf.js\";\nimport { sha256 } from \"@noble/hashes/sha2.js\";\nimport { randomBytes } from \"@noble/hashes/utils.js\";\nimport { base58, base64urlnopad } from \"@scure/base\";\nimport { bytesToHex, hexToBytes } from \"../../utils/encoding.ts\";\n\nconst IV_LENGTH = 12;\nconst KEY_LENGTH = 32;\nconst TYPE_0 = 0x00;\nconst TYPE_1 = 0x01;\n\n// -- Key generation --\n\nexport function generateKeyPair() {\n\tconst privateKey = randomBytes(KEY_LENGTH);\n\tconst publicKey = x25519.getPublicKey(privateKey);\n\treturn { privateKey, publicKey };\n}\n\nexport function generateSymKey(): Uint8Array {\n\treturn randomBytes(KEY_LENGTH);\n}\n\n/** Derive symmetric key from X25519 shared secret via HKDF */\nexport function deriveSymKey(\n\tselfPrivate: Uint8Array,\n\tpeerPublic: Uint8Array,\n): Uint8Array {\n\tconst shared = x25519.getSharedSecret(selfPrivate, peerPublic);\n\treturn hkdf(sha256, shared, undefined, undefined, KEY_LENGTH);\n}\n\n/** Topic = first 32 bytes of SHA-256(symKey) as hex */\nexport function symKeyToTopic(symKey: Uint8Array): string {\n\treturn bytesToHex(sha256(symKey));\n}\n\n// -- Base64 helpers (browser-safe) --\n\nexport function encodeBase64(data: Uint8Array): string {\n\tlet binary = \"\";\n\t// biome-ignore lint/style/noNonNullAssertion: value is non-null after preceding check or by construction; TS narrowing limitation\n\tfor (let i = 0; i < data.length; i++) binary += String.fromCharCode(data[i]!);\n\treturn btoa(binary);\n}\n\nexport function decodeBase64(str: string): Uint8Array {\n\tconst binary = atob(str);\n\tconst bytes = new Uint8Array(binary.length);\n\tfor (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i);\n\treturn bytes;\n}\n\n// -- Type 0 envelope (symmetric, pairing) --\n// Layout: [0x00][12-byte IV][ciphertext + 16-byte tag]\n\nexport function encryptType0(\n\tsymKey: Uint8Array,\n\tplaintext: string,\n): Uint8Array {\n\tconst iv = randomBytes(IV_LENGTH);\n\tconst data = new TextEncoder().encode(plaintext);\n\tconst cipher = gcm(symKey, iv);\n\tconst sealed = cipher.encrypt(data);\n\tconst envelope = new Uint8Array(1 + IV_LENGTH + sealed.length);\n\tenvelope[0] = TYPE_0;\n\tenvelope.set(iv, 1);\n\tenvelope.set(sealed, 1 + IV_LENGTH);\n\treturn envelope;\n}\n\nexport function decryptType0(symKey: Uint8Array, envelope: Uint8Array): string {\n\tif (envelope[0] !== TYPE_0) throw new Error(\"Not a type-0 envelope\");\n\tconst iv = envelope.subarray(1, 1 + IV_LENGTH);\n\tconst sealed = envelope.subarray(1 + IV_LENGTH);\n\tconst cipher = gcm(symKey, iv);\n\tconst plain = cipher.decrypt(sealed);\n\treturn new TextDecoder().decode(plain);\n}\n\n// -- Type 1 envelope (asymmetric, session proposal) --\n// Layout: [0x01][32-byte sender pubkey][12-byte IV][ciphertext + 16-byte tag]\n\nexport function encryptType1(\n\tsenderPrivate: Uint8Array,\n\treceiverPublic: Uint8Array,\n\tplaintext: string,\n): Uint8Array {\n\tconst senderPublic = x25519.getPublicKey(senderPrivate);\n\tconst symKey = deriveSymKey(senderPrivate, receiverPublic);\n\tconst iv = randomBytes(IV_LENGTH);\n\tconst data = new TextEncoder().encode(plaintext);\n\tconst cipher = gcm(symKey, iv);\n\tconst sealed = cipher.encrypt(data);\n\tconst envelope = new Uint8Array(1 + KEY_LENGTH + IV_LENGTH + sealed.length);\n\tenvelope[0] = TYPE_1;\n\tenvelope.set(senderPublic, 1);\n\tenvelope.set(iv, 1 + KEY_LENGTH);\n\tenvelope.set(sealed, 1 + KEY_LENGTH + IV_LENGTH);\n\treturn envelope;\n}\n\nexport function decryptType1(\n\treceiverPrivate: Uint8Array,\n\tenvelope: Uint8Array,\n): string {\n\tif (envelope[0] !== TYPE_1) throw new Error(\"Not a type-1 envelope\");\n\tconst senderPublic = envelope.subarray(1, 1 + KEY_LENGTH);\n\tconst iv = envelope.subarray(1 + KEY_LENGTH, 1 + KEY_LENGTH + IV_LENGTH);\n\tconst sealed = envelope.subarray(1 + KEY_LENGTH + IV_LENGTH);\n\tconst symKey = deriveSymKey(receiverPrivate, senderPublic);\n\tconst cipher = gcm(symKey, iv);\n\tconst plain = cipher.decrypt(sealed);\n\treturn new TextDecoder().decode(plain);\n}\n\n// -- Unified decrypt --\n\nexport function decrypt(\n\tkeyOrPrivate: Uint8Array,\n\tenvelope: Uint8Array,\n): string {\n\treturn envelope[0] === TYPE_1\n\t\t? decryptType1(keyOrPrivate, envelope)\n\t\t: decryptType0(keyOrPrivate, envelope);\n}\n\n// -- Relay JWT auth (Ed25519 + did:key) --\n\n/** Ed25519 multicodec varint prefix */\nconst ED25519_MULTICODEC = new Uint8Array([0xed, 0x01]);\n\nfunction encodeDidKey(publicKey: Uint8Array): string {\n\tconst prefixed = new Uint8Array(ED25519_MULTICODEC.length + publicKey.length);\n\tprefixed.set(ED25519_MULTICODEC);\n\tprefixed.set(publicKey, ED25519_MULTICODEC.length);\n\treturn `did:key:z${base58.encode(prefixed)}`;\n}\n\nfunction base64urlEncode(data: Uint8Array | string): string {\n\tconst bytes =\n\t\ttypeof data === \"string\" ? new TextEncoder().encode(data) : data;\n\treturn base64urlnopad.encode(bytes);\n}\n\n/** Generate a signed JWT for WC relay authentication */\nexport function createRelayAuthJwt(relayUrl: string): {\n\tjwt: string;\n\tclientId: string;\n} {\n\tconst privateKey = ed25519.utils.randomSecretKey();\n\tconst publicKey = ed25519.getPublicKey(privateKey);\n\tconst clientId = encodeDidKey(publicKey);\n\n\tconst now = Math.floor(Date.now() / 1000);\n\tconst header = base64urlEncode(JSON.stringify({ alg: \"EdDSA\", typ: \"JWT\" }));\n\tconst payload = base64urlEncode(\n\t\tJSON.stringify({\n\t\t\tiss: clientId,\n\t\t\tsub: bytesToHex(randomBytes(32)),\n\t\t\taud: relayUrl,\n\t\t\tiat: now,\n\t\t\texp: now + 86400, // 24 hours\n\t\t\tact: \"client_auth\",\n\t\t}),\n\t);\n\n\tconst message = new TextEncoder().encode(`${header}.${payload}`);\n\tconst signature = base64urlEncode(ed25519.sign(message, privateKey));\n\n\treturn { jwt: `${header}.${payload}.${signature}`, clientId };\n}\n\nexport { bytesToHex, hexToBytes };\n",
    "const hexes = Array.from({ length: 256 }, (_, i) =>\n\ti.toString(16).padStart(2, \"0\"),\n);\n\nexport function bytesToHex(bytes: Uint8Array): string {\n\tlet hex = \"\";\n\tfor (const b of bytes) {\n\t\thex += hexes[b];\n\t}\n\treturn hex;\n}\n\nexport function hexToBytes(hex: string): Uint8Array {\n\tlet h = without0x(hex);\n\tif (h.length % 2) h = `0${h}`;\n\n\tconst array = new Uint8Array(h.length / 2);\n\tfor (let i = 0; i < array.length; i++) {\n\t\tconst j = i * 2;\n\t\tconst byte = Number.parseInt(h.slice(j, j + 2), 16);\n\t\tif (Number.isNaN(byte) || byte < 0)\n\t\t\tthrow new Error(\"Invalid byte sequence\");\n\t\tarray[i] = byte;\n\t}\n\treturn array;\n}\n\nexport function with0x(value: string): string {\n\treturn /^0x/i.test(value) ? value : `0x${value}`;\n}\n\nexport function without0x(value: string): string {\n\treturn /^0x/i.test(value) ? value.slice(2) : value;\n}\n\nexport function utf8ToBytes(str: string): Uint8Array {\n\treturn new TextEncoder().encode(str);\n}\n\nexport function bytesToUtf8(bytes: Uint8Array): string {\n\treturn new TextDecoder().decode(bytes);\n}\n\nexport function asciiToBytes(str: string): Uint8Array {\n\tconst bytes = new Uint8Array(str.length);\n\tfor (let i = 0; i < str.length; i++) {\n\t\tbytes[i] = str.charCodeAt(i) & 0xff;\n\t}\n\treturn bytes;\n}\n\nexport function bytesToAscii(bytes: Uint8Array): string {\n\treturn String.fromCharCode(...bytes);\n}\n\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n\t// biome-ignore lint/style/noNonNullAssertion: bit-encoding routine where index is provably bounded by surrounding loop/length checks\n\tif (arrays.length === 1) return arrays[0]!;\n\tconst length = arrays.reduce((a, arr) => a + arr.length, 0);\n\tconst result = new Uint8Array(length);\n\tlet pad = 0;\n\tfor (const arr of arrays) {\n\t\tresult.set(arr, pad);\n\t\tpad += arr.length;\n\t}\n\treturn result;\n}\n\nexport type IntegerType = number | string | bigint | Uint8Array;\n\nexport function intToBigInt(value: IntegerType): bigint {\n\tif (typeof value === \"bigint\") return value;\n\tif (typeof value === \"string\") return BigInt(value);\n\tif (typeof value === \"number\") {\n\t\tif (!Number.isInteger(value))\n\t\t\tthrow new RangeError(\"Values of type 'number' must be an integer.\");\n\t\tif (value > Number.MAX_SAFE_INTEGER)\n\t\t\tthrow new RangeError(\n\t\t\t\t`Values of type 'number' must be <= ${Number.MAX_SAFE_INTEGER}. Use BigInt instead.`,\n\t\t\t);\n\t\treturn BigInt(value);\n\t}\n\tif (value instanceof Uint8Array) return BigInt(`0x${bytesToHex(value)}`);\n\tthrow new TypeError(\"Must be a number, bigint, string, or Uint8Array.\");\n}\n\nexport function intToBytes(value: IntegerType, byteLength: number): Uint8Array {\n\treturn bigIntToBytes(intToBigInt(value), byteLength);\n}\n\nexport function bigIntToBytes(value: bigint, length = 16): Uint8Array {\n\tconst hex = value.toString(16).padStart(length * 2, \"0\");\n\treturn hexToBytes(hex);\n}\n\nexport function intToHex(integer: IntegerType, byteLength = 8): string {\n\tconst value = typeof integer === \"bigint\" ? integer : intToBigInt(integer);\n\treturn value.toString(16).padStart(byteLength * 2, \"0\");\n}\n\nexport function toTwos(value: bigint, width: bigint): bigint {\n\tconst limit = BigInt(1) << (width - BigInt(1));\n\tif (value < -limit || value > limit - BigInt(1)) {\n\t\tthrow new Error(`Unable to represent integer in width: ${width}`);\n\t}\n\tif (value >= BigInt(0)) return value;\n\treturn value + (BigInt(1) << width);\n}\n\nexport function fromTwos(value: bigint, width: bigint): bigint {\n\tif (value & (BigInt(1) << (width - BigInt(1)))) {\n\t\treturn value - (BigInt(1) << width);\n\t}\n\treturn value;\n}\n\nexport function bytesToTwosBigInt(bytes: Uint8Array): bigint {\n\tif (bytes.length === 0) return 0n;\n\tconst hex = bytesToHex(bytes);\n\tif (hex.length === 0) return 0n;\n\treturn fromTwos(BigInt(`0x${hex}`), BigInt(bytes.byteLength * 8));\n}\n\nexport function writeUInt32BE(value: number): Uint8Array {\n\tconst buf = new Uint8Array(4);\n\tbuf[0] = (value >>> 24) & 0xff;\n\tbuf[1] = (value >>> 16) & 0xff;\n\tbuf[2] = (value >>> 8) & 0xff;\n\tbuf[3] = value & 0xff;\n\treturn buf;\n}\n\nexport function readUInt32BE(bytes: Uint8Array, offset = 0): number {\n\treturn (\n\t\t// biome-ignore lint/style/noNonNullAssertion: bit-encoding routine where index is provably bounded by surrounding loop/length checks\n\t\t((bytes[offset]! << 24) |\n\t\t\t// biome-ignore lint/style/noNonNullAssertion: bit-encoding routine where index is provably bounded by surrounding loop/length checks\n\t\t\t(bytes[offset + 1]! << 16) |\n\t\t\t// biome-ignore lint/style/noNonNullAssertion: bit-encoding routine where index is provably bounded by surrounding loop/length checks\n\t\t\t(bytes[offset + 2]! << 8) |\n\t\t\t// biome-ignore lint/style/noNonNullAssertion: bit-encoding routine where index is provably bounded by surrounding loop/length checks\n\t\t\tbytes[offset + 3]!) >>>\n\t\t0\n\t);\n}\n\nexport function writeUInt16BE(value: number): Uint8Array {\n\tconst buf = new Uint8Array(2);\n\tbuf[0] = (value >>> 8) & 0xff;\n\tbuf[1] = value & 0xff;\n\treturn buf;\n}\n\nexport function readUInt16BE(bytes: Uint8Array, offset = 0): number {\n\t// biome-ignore lint/style/noNonNullAssertion: bit-encoding routine where index is provably bounded by surrounding loop/length checks\n\treturn ((bytes[offset]! << 8) | bytes[offset + 1]!) >>> 0;\n}\n\nexport function writeUInt8(value: number): Uint8Array {\n\treturn new Uint8Array([value & 0xff]);\n}\n",
    "/** WalletConnect v2 relay client (wss://relay.walletconnect.com) */\n\nimport { createRelayAuthJwt, encodeBase64, encryptType0 } from \"./crypto.ts\";\nimport type { WcRelayMessage } from \"./types.ts\";\n\nconst DEFAULT_RELAY = \"wss://relay.walletconnect.com\";\nconst DEFAULT_TTL = 300; // 5 minutes\n\ntype PendingRpc = {\n\tresolve: (v: unknown) => void;\n\treject: (e: Error) => void;\n};\n\ntype SubscriptionHandler = (message: WcRelayMessage) => void;\n\nexport class WcRelay {\n\tprivate ws: WebSocket | null = null;\n\tprivate url: string;\n\tprivate projectId: string;\n\tprivate nextId = Date.now() * 1000 + Math.floor(Math.random() * 1000);\n\tprivate pending = new Map<number, PendingRpc>();\n\tprivate subscriptions = new Map<string, SubscriptionHandler>();\n\t/** Map subscription ID (from server) → topic */\n\tprivate subIdToTopic = new Map<string, string>();\n\tprivate destroyed = false;\n\tprivate reconnecting = false;\n\tprivate reconnectAttempt = 0;\n\tprivate reconnectTimer: ReturnType<typeof setTimeout> | null = null;\n\tprivate connectPromise: Promise<void> | null = null;\n\tprivate connectReject: ((e: Error) => void) | null = null;\n\n\tconstructor(projectId: string, relayUrl?: string) {\n\t\tthis.projectId = projectId;\n\t\tthis.url = relayUrl ?? DEFAULT_RELAY;\n\t}\n\n\t// -- Connection --\n\n\tasync connect(): Promise<void> {\n\t\tif (this.ws?.readyState === WebSocket.OPEN) return;\n\t\tif (this.connectPromise) return this.connectPromise;\n\n\t\tthis.connectPromise = new Promise<void>((resolve, reject) => {\n\t\t\tthis.connectReject = reject;\n\t\t\tconst { jwt } = createRelayAuthJwt(this.url);\n\t\t\tconst wsUrl = `${this.url}/?auth=${jwt}&projectId=${this.projectId}`;\n\t\t\tthis.ws = new WebSocket(wsUrl);\n\n\t\t\tthis.ws.addEventListener(\n\t\t\t\t\"open\",\n\t\t\t\t() => {\n\t\t\t\t\tthis.reconnectAttempt = 0;\n\t\t\t\t\tthis.reconnecting = false;\n\t\t\t\t\tthis.connectPromise = null;\n\t\t\t\t\tthis.connectReject = null;\n\t\t\t\t\tresolve();\n\t\t\t\t},\n\t\t\t\t{ once: true },\n\t\t\t);\n\n\t\t\tthis.ws.addEventListener(\n\t\t\t\t\"error\",\n\t\t\t\t(e) => {\n\t\t\t\t\tthis.connectPromise = null;\n\t\t\t\t\tthis.connectReject = null;\n\t\t\t\t\treject(new Error(`WC relay connection failed: ${e}`));\n\t\t\t\t},\n\t\t\t\t{ once: true },\n\t\t\t);\n\n\t\t\tthis.ws.addEventListener(\"message\", (event) => {\n\t\t\t\tthis.handleMessage(\n\t\t\t\t\ttypeof event.data === \"string\"\n\t\t\t\t\t\t? event.data\n\t\t\t\t\t\t: new TextDecoder().decode(event.data as ArrayBuffer),\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tthis.ws.addEventListener(\"close\", () => {\n\t\t\t\tthis.connectPromise = null;\n\t\t\t\tif (!this.destroyed) this.handleDisconnect();\n\t\t\t});\n\t\t});\n\n\t\treturn this.connectPromise;\n\t}\n\n\t// -- Publish/Subscribe --\n\n\tasync subscribe(\n\t\ttopic: string,\n\t\thandler: SubscriptionHandler,\n\t): Promise<string> {\n\t\tawait this.connect();\n\t\tthis.subscriptions.set(topic, handler);\n\t\tconst subId = (await this.rpc(\"irn_subscribe\", { topic })) as string;\n\t\tthis.subIdToTopic.set(subId, topic);\n\t\treturn subId;\n\t}\n\n\tasync publish(\n\t\ttopic: string,\n\t\tmessage: string,\n\t\ttag: number,\n\t\tttl: number = DEFAULT_TTL,\n\t): Promise<void> {\n\t\tawait this.connect();\n\t\tawait this.rpc(\"irn_publish\", {\n\t\t\ttopic,\n\t\t\tmessage,\n\t\t\tttl,\n\t\t\ttag,\n\t\t\tprompt: false,\n\t\t});\n\t}\n\n\t/** Encrypt + publish a type-0 envelope */\n\tasync publishEncrypted(\n\t\ttopic: string,\n\t\tsymKey: Uint8Array,\n\t\tpayload: unknown,\n\t\ttag: number,\n\t\tttl: number = DEFAULT_TTL,\n\t): Promise<void> {\n\t\tconst plaintext = JSON.stringify(payload);\n\t\tconst envelope = encryptType0(symKey, plaintext);\n\t\tawait this.publish(topic, encodeBase64(envelope), tag, ttl);\n\t}\n\n\t// -- Internal --\n\n\tprivate rpc(\n\t\tmethod: string,\n\t\tparams: Record<string, unknown>,\n\t): Promise<unknown> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tif (!this.ws || this.ws.readyState !== WebSocket.OPEN) {\n\t\t\t\treturn reject(new Error(\"WC relay not connected\"));\n\t\t\t}\n\t\t\tconst id = this.nextId++;\n\t\t\tthis.pending.set(id, { resolve, reject });\n\t\t\tthis.ws.send(JSON.stringify({ id, jsonrpc: \"2.0\", method, params }));\n\t\t});\n\t}\n\n\tprivate handleMessage(raw: string) {\n\t\t// biome-ignore lint/suspicious/noExplicitAny: interop boundary or dynamic-shape value where typing adds friction without runtime safety\n\t\tlet msg: any;\n\t\ttry {\n\t\t\tmsg = JSON.parse(raw);\n\t\t} catch {\n\t\t\treturn;\n\t\t}\n\n\t\t// RPC response\n\t\tif (\"id\" in msg && msg.id != null && this.pending.has(msg.id)) {\n\t\t\t// biome-ignore lint/style/noNonNullAssertion: value is non-null after preceding check or by construction; TS narrowing limitation\n\t\t\tconst p = this.pending.get(msg.id)!;\n\t\t\tthis.pending.delete(msg.id);\n\t\t\tif (msg.error) {\n\t\t\t\tp.reject(new Error(`WC relay error: ${msg.error.message}`));\n\t\t\t} else {\n\t\t\t\tp.resolve(msg.result);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Server push (irn_subscription)\n\t\tif (msg.method === \"irn_subscription\" && msg.params) {\n\t\t\tconst { id: subId, data } = msg.params;\n\t\t\tconst topic = data?.topic ?? this.subIdToTopic.get(subId);\n\t\t\tconst handler = topic ? this.subscriptions.get(topic) : undefined;\n\t\t\tif (handler && data) {\n\t\t\t\thandler({\n\t\t\t\t\ttopic: data.topic,\n\t\t\t\t\tmessage: data.message,\n\t\t\t\t\tpublishedAt: data.publishedAt ?? Date.now(),\n\t\t\t\t\ttag: data.tag ?? 0,\n\t\t\t\t});\n\t\t\t}\n\t\t\t// Acknowledge\n\t\t\tif (msg.id != null) {\n\t\t\t\tthis.ws?.send(\n\t\t\t\t\tJSON.stringify({ id: msg.id, jsonrpc: \"2.0\", result: true }),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate handleDisconnect() {\n\t\tthis.ws = null;\n\t\tfor (const [, p] of this.pending) {\n\t\t\tp.reject(new Error(\"WC relay disconnected\"));\n\t\t}\n\t\tthis.pending.clear();\n\n\t\tif (this.subscriptions.size > 0 && this.reconnectAttempt < 5) {\n\t\t\tthis.scheduleReconnect();\n\t\t}\n\t}\n\n\tprivate scheduleReconnect() {\n\t\tif (this.destroyed || this.reconnecting) return;\n\t\tthis.reconnecting = true;\n\t\tconst delay = 1000 * 2 ** this.reconnectAttempt;\n\t\tthis.reconnectAttempt++;\n\n\t\tthis.reconnectTimer = setTimeout(async () => {\n\t\t\tthis.reconnecting = false;\n\t\t\ttry {\n\t\t\t\tawait this.connect();\n\t\t\t\t// Re-subscribe all topics\n\t\t\t\tfor (const [topic] of this.subscriptions) {\n\t\t\t\t\tconst subId = (await this.rpc(\"irn_subscribe\", { topic })) as string;\n\t\t\t\t\tthis.subIdToTopic.set(subId, topic);\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\tif (!this.destroyed && this.subscriptions.size > 0) {\n\t\t\t\t\tthis.handleDisconnect();\n\t\t\t\t}\n\t\t\t}\n\t\t}, delay);\n\t}\n\n\tdestroy(): void {\n\t\tthis.destroyed = true;\n\t\tif (this.reconnectTimer) clearTimeout(this.reconnectTimer);\n\t\tif (this.connectReject) {\n\t\t\tthis.connectReject(new Error(\"WC relay destroyed\"));\n\t\t\tthis.connectReject = null;\n\t\t\tthis.connectPromise = null;\n\t\t}\n\t\tfor (const [, p] of this.pending) {\n\t\t\tp.reject(new Error(\"WC relay destroyed\"));\n\t\t}\n\t\tthis.pending.clear();\n\t\tthis.subscriptions.clear();\n\t\tthis.subIdToTopic.clear();\n\t\tif (this.ws) {\n\t\t\tthis.ws.close();\n\t\t\tthis.ws = null;\n\t\t}\n\t}\n}\n",
    "/** WalletConnect v2 session state machine (pairing → proposal → settlement) */\n\nimport {\n\tbytesToHex,\n\tdecodeBase64,\n\tdecryptType0,\n\tdecryptType1,\n\tderiveSymKey,\n\tgenerateKeyPair,\n\tgenerateSymKey,\n\thexToBytes,\n\tsymKeyToTopic,\n} from \"./crypto.ts\";\nimport { WcRelay } from \"./relay.ts\";\nimport type {\n\tWcJsonRpc,\n\tWcPairResult,\n\tWcProposal,\n\tWcProviderConfig,\n\tWcSessionData,\n\tWcSessionSettled,\n} from \"./types.ts\";\n\nconst STORAGE_KEY = \"@secondlayer/wc:session\";\nconst SESSION_EXPIRY = 7 * 24 * 60 * 60; // 7 days in seconds\n\nconst STACKS_METHODS = [\n\t\"stx_getAddresses\",\n\t\"stx_transferStx\",\n\t\"stx_callContract\",\n\t\"stx_deployContract\",\n\t\"stx_signMessage\",\n\t\"stx_signTransaction\",\n];\n\nconst STACKS_EVENTS = [\"chainChanged\", \"accountsChanged\"];\n\ndeclare const localStorage:\n\t| {\n\t\t\tgetItem(key: string): string | null;\n\t\t\tsetItem(key: string, value: string): void;\n\t\t\tremoveItem(key: string): void;\n\t  }\n\t| undefined;\n\nfunction getStorage() {\n\treturn typeof localStorage !== \"undefined\" ? localStorage : undefined;\n}\n\nexport class WcSession {\n\tprivate relay: WcRelay;\n\tprivate config: WcProviderConfig;\n\tprivate chains: string[];\n\n\t// Pairing state\n\tprivate pairingSymKey: Uint8Array | null = null;\n\tprivate pairingTopic: string | null = null;\n\tprivate selfKeyPair: {\n\t\tprivateKey: Uint8Array;\n\t\tpublicKey: Uint8Array;\n\t} | null = null;\n\n\t// Session state\n\tprivate sessionData: WcSessionData | null = null;\n\tprivate sessionSymKey: Uint8Array | null = null;\n\tprivate pending = new Map<\n\t\tnumber,\n\t\t{ resolve: (v: unknown) => void; reject: (e: Error) => void }\n\t>();\n\tprivate nextId = Date.now();\n\n\tconstructor(config: WcProviderConfig) {\n\t\tthis.config = config;\n\t\tthis.chains = config.chains ?? [\"stacks:1\"];\n\t\tthis.relay = new WcRelay(config.projectId, config.relayUrl);\n\t}\n\n\t/** Try restoring a persisted session. Returns true if valid session found. */\n\trestore(): boolean {\n\t\ttry {\n\t\t\tconst raw = getStorage()?.getItem(STORAGE_KEY);\n\t\t\tif (!raw) return false;\n\t\t\tconst data = JSON.parse(raw) as WcSessionData;\n\t\t\tif (data.expiry < Date.now() / 1000) {\n\t\t\t\tgetStorage()?.removeItem(STORAGE_KEY);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis.sessionData = data;\n\t\t\tthis.sessionSymKey = hexToBytes(data.symKey);\n\t\t\t// Subscribe to session topic for incoming requests (fire-and-forget)\n\t\t\tthis.subscribeSession().catch(() => {});\n\t\t\treturn true;\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t/** Initiate pairing. Returns URI for QR code + approval promise. */\n\tasync pair(): Promise<WcPairResult> {\n\t\tthis.pairingSymKey = generateSymKey();\n\t\tthis.pairingTopic = symKeyToTopic(this.pairingSymKey);\n\t\tthis.selfKeyPair = generateKeyPair();\n\n\t\tconst symKeyHex = bytesToHex(this.pairingSymKey);\n\t\tconst uri = `wc:${this.pairingTopic}@2?relay-protocol=irn&symKey=${symKeyHex}`;\n\n\t\tconst approval = new Promise<WcSessionSettled>((resolve, reject) => {\n\t\t\tthis.relay\n\t\t\t\t// biome-ignore lint/style/noNonNullAssertion: value is non-null after preceding check or by construction; TS narrowing limitation\n\t\t\t\t.subscribe(this.pairingTopic!, (msg) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tthis.handlePairingMessage(msg.message, resolve, reject);\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\treject(err instanceof Error ? err : new Error(String(err)));\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.catch(reject);\n\t\t});\n\n\t\treturn { uri, approval };\n\t}\n\n\t/** Send a JSON-RPC request over the session. */\n\tasync request(method: string, params?: unknown): Promise<unknown> {\n\t\tif (!this.sessionData || !this.sessionSymKey) {\n\t\t\tthrow new Error(\"No active WC session\");\n\t\t}\n\n\t\tconst id = this.nextId++;\n\t\tconst payload = {\n\t\t\tid,\n\t\t\tjsonrpc: \"2.0\" as const,\n\t\t\tmethod: \"wc_sessionRequest\",\n\t\t\tparams: {\n\t\t\t\trequest: { method, params },\n\t\t\t\tchainId: this.chains[0],\n\t\t\t},\n\t\t};\n\n\t\tconst sessionData = this.sessionData;\n\t\tconst sessionSymKey = this.sessionSymKey;\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.pending.set(id, { resolve, reject });\n\t\t\tthis.relay\n\t\t\t\t.publishEncrypted(\n\t\t\t\t\tsessionData.topic,\n\t\t\t\t\tsessionSymKey,\n\t\t\t\t\tpayload,\n\t\t\t\t\t1108, // tag for session request\n\t\t\t\t\tSESSION_EXPIRY,\n\t\t\t\t)\n\t\t\t\t.catch((err) => {\n\t\t\t\t\tthis.pending.delete(id);\n\t\t\t\t\treject(err);\n\t\t\t\t});\n\t\t});\n\t}\n\n\tdisconnect(): void {\n\t\tif (this.sessionData && this.sessionSymKey) {\n\t\t\tconst id = this.nextId++;\n\t\t\tconst payload = {\n\t\t\t\tid,\n\t\t\t\tjsonrpc: \"2.0\",\n\t\t\t\tmethod: \"wc_sessionDelete\",\n\t\t\t\tparams: { code: 6000, message: \"User disconnected\" },\n\t\t\t};\n\t\t\t// Best-effort notify peer\n\t\t\tthis.relay\n\t\t\t\t.publishEncrypted(\n\t\t\t\t\tthis.sessionData.topic,\n\t\t\t\t\tthis.sessionSymKey,\n\t\t\t\t\tpayload,\n\t\t\t\t\t1112,\n\t\t\t\t)\n\t\t\t\t.catch(() => {});\n\t\t}\n\t\tthis.sessionData = null;\n\t\tthis.sessionSymKey = null;\n\t\tthis.pending.clear();\n\t\tgetStorage()?.removeItem(STORAGE_KEY);\n\t\tthis.relay.destroy();\n\t}\n\n\tget session(): WcSessionData | null {\n\t\treturn this.sessionData;\n\t}\n\n\t// -- Internal --\n\n\tprivate handlePairingMessage(\n\t\tmessage: string,\n\t\tresolve: (v: WcSessionSettled) => void,\n\t\treject: (e: Error) => void,\n\t) {\n\t\tconst envelope = decodeBase64(message);\n\t\tlet plaintext: string;\n\n\t\t// Could be type 0 (symmetric) or type 1 (asymmetric)\n\t\tif (envelope[0] === 0x01 && this.selfKeyPair) {\n\t\t\tplaintext = decryptType1(this.selfKeyPair.privateKey, envelope);\n\t\t} else if (this.pairingSymKey) {\n\t\t\tplaintext = decryptType0(this.pairingSymKey, envelope);\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\n\t\tlet rpc: WcJsonRpc;\n\t\ttry {\n\t\t\trpc = JSON.parse(plaintext) as WcJsonRpc;\n\t\t} catch {\n\t\t\treturn;\n\t\t}\n\n\t\tif (rpc.method === \"wc_sessionPropose\") {\n\t\t\tthis.handleProposal(rpc as WcJsonRpc<WcProposal>, resolve, reject).catch(\n\t\t\t\treject,\n\t\t\t);\n\t\t}\n\t}\n\n\tprivate async handleProposal(\n\t\trpc: WcJsonRpc<WcProposal>,\n\t\tresolve: (v: WcSessionSettled) => void,\n\t\treject: (e: Error) => void,\n\t) {\n\t\ttry {\n\t\t\tconst proposal = rpc.params;\n\t\t\tconst peerPublicKey = hexToBytes(proposal.proposer.publicKey);\n\n\t\t\t// Generate session key pair + derive session symmetric key\n\t\t\tconst sessionKp = generateKeyPair();\n\t\t\tconst sessionSymKey = deriveSymKey(sessionKp.privateKey, peerPublicKey);\n\t\t\tconst sessionTopic = symKeyToTopic(sessionSymKey);\n\n\t\t\tconst expiry = Math.floor(Date.now() / 1000) + SESSION_EXPIRY;\n\n\t\t\tconst settled: WcSessionSettled = {\n\t\t\t\trelay: { protocol: \"irn\" },\n\t\t\t\tnamespaces: {\n\t\t\t\t\tstacks: {\n\t\t\t\t\t\tchains: this.chains,\n\t\t\t\t\t\tmethods: STACKS_METHODS,\n\t\t\t\t\t\tevents: STACKS_EVENTS,\n\t\t\t\t\t\taccounts: this.chains.map((c) => `${c}:placeholder`),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tcontroller: {\n\t\t\t\t\tpublicKey: bytesToHex(sessionKp.publicKey),\n\t\t\t\t\tmetadata: this.config.metadata,\n\t\t\t\t},\n\t\t\t\texpiry,\n\t\t\t};\n\n\t\t\t// Approve the proposal on the pairing topic\n\t\t\tconst approvePayload = {\n\t\t\t\tid: rpc.id,\n\t\t\t\tjsonrpc: \"2.0\",\n\t\t\t\tresult: {\n\t\t\t\t\trelay: { protocol: \"irn\" },\n\t\t\t\t\tresponderPublicKey: bytesToHex(sessionKp.publicKey),\n\t\t\t\t},\n\t\t\t};\n\n\t\t\tawait this.relay.publishEncrypted(\n\t\t\t\t// biome-ignore lint/style/noNonNullAssertion: value is non-null after preceding check or by construction; TS narrowing limitation\n\t\t\t\tthis.pairingTopic!,\n\t\t\t\t// biome-ignore lint/style/noNonNullAssertion: value is non-null after preceding check or by construction; TS narrowing limitation\n\t\t\t\tthis.pairingSymKey!,\n\t\t\t\tapprovePayload,\n\t\t\t\t1101, // tag for session propose response\n\t\t\t);\n\n\t\t\t// Subscribe to session topic\n\t\t\tthis.sessionSymKey = sessionSymKey;\n\t\t\tthis.sessionData = {\n\t\t\t\ttopic: sessionTopic,\n\t\t\t\tsymKey: bytesToHex(sessionSymKey),\n\t\t\t\tpeerMeta: proposal.proposer.metadata,\n\t\t\t\texpiry,\n\t\t\t\taccounts: [],\n\t\t\t\tcontrollerPublicKey: proposal.proposer.publicKey,\n\t\t\t};\n\n\t\t\tawait this.subscribeSession();\n\n\t\t\t// Send session settle on the new session topic\n\t\t\tconst settlePayload = {\n\t\t\t\tid: this.nextId++,\n\t\t\t\tjsonrpc: \"2.0\",\n\t\t\t\tmethod: \"wc_sessionSettle\",\n\t\t\t\tparams: settled,\n\t\t\t};\n\n\t\t\tawait this.relay.publishEncrypted(\n\t\t\t\tsessionTopic,\n\t\t\t\tsessionSymKey,\n\t\t\t\tsettlePayload,\n\t\t\t\t1104, // tag for session settle\n\t\t\t);\n\n\t\t\t// Persist\n\t\t\tgetStorage()?.setItem(STORAGE_KEY, JSON.stringify(this.sessionData));\n\n\t\t\tresolve(settled);\n\t\t} catch (err) {\n\t\t\treject(err instanceof Error ? err : new Error(String(err)));\n\t\t}\n\t}\n\n\tprivate async subscribeSession() {\n\t\tif (!this.sessionData || !this.sessionSymKey) return;\n\n\t\tconst symKey = this.sessionSymKey;\n\t\tawait this.relay.subscribe(this.sessionData.topic, (msg) => {\n\t\t\ttry {\n\t\t\t\tconst envelope = decodeBase64(msg.message);\n\t\t\t\tconst plaintext = decryptType0(symKey, envelope);\n\t\t\t\tconst rpc = JSON.parse(plaintext);\n\n\t\t\t\t// Response to our request\n\t\t\t\tif (\"id\" in rpc && this.pending.has(rpc.id)) {\n\t\t\t\t\t// biome-ignore lint/style/noNonNullAssertion: value is non-null after preceding check or by construction; TS narrowing limitation\n\t\t\t\t\tconst p = this.pending.get(rpc.id)!;\n\t\t\t\t\tthis.pending.delete(rpc.id);\n\t\t\t\t\tif (rpc.error) {\n\t\t\t\t\t\tp.reject(new Error(rpc.error.message ?? \"WC request failed\"));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tp.resolve(rpc.result);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Session delete from peer\n\t\t\t\tif (rpc.method === \"wc_sessionDelete\") {\n\t\t\t\t\tthis.sessionData = null;\n\t\t\t\t\tthis.sessionSymKey = null;\n\t\t\t\t\tthis.pending.clear();\n\t\t\t\t\tgetStorage()?.removeItem(STORAGE_KEY);\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// ignore malformed messages\n\t\t\t}\n\t\t});\n\t}\n}\n",
    "/** WalletProvider adapter for WalletConnect v2 */\n\nimport type { WalletProvider } from \"../types.ts\";\nimport { WcSession } from \"./session.ts\";\nimport type { WcPairResult, WcProviderConfig, WcSessionData } from \"./types.ts\";\n\nexport class WalletConnectProvider implements WalletProvider {\n\tprivate session: WcSession;\n\n\tconstructor(config: WcProviderConfig) {\n\t\tthis.session = new WcSession(config);\n\t}\n\n\t/** Try restoring a persisted session. Returns true if valid. */\n\trestore(): boolean {\n\t\treturn this.session.restore();\n\t}\n\n\t/** Initiate pairing. Returns URI for QR + approval promise. */\n\tasync pair(): Promise<WcPairResult> {\n\t\treturn this.session.pair();\n\t}\n\n\t// biome-ignore lint/suspicious/noExplicitAny: interop boundary or dynamic-shape value where typing adds friction without runtime safety\n\tasync request(method: string, params?: any): Promise<any> {\n\t\treturn this.session.request(method, params);\n\t}\n\n\tdisconnect(): void {\n\t\tthis.session.disconnect();\n\t}\n\n\tget sessionData(): WcSessionData | null {\n\t\treturn this.session.session;\n\t}\n}\n",
    "/**\n * Minimal QR code generator for WalletConnect URIs.\n * Produces SVG string. Byte-mode encoding, error correction level L.\n * Supports versions 1-10 (up to 271 bytes — plenty for WC URIs).\n */\n\n// Version capacity table (byte mode, EC level L)\nconst CAPACITIES = [0, 17, 32, 53, 78, 106, 134, 154, 192, 230, 271];\n\n// Generator polynomials for EC codewords per version (L level)\n// [totalCodewords, ecCodewordsPerBlock, numBlocks]\nconst EC_PARAMS: [number, number, number][] = [\n\t[0, 0, 0], // v0 placeholder\n\t[26, 7, 1],\n\t[44, 10, 1],\n\t[70, 15, 1],\n\t[100, 20, 1],\n\t[134, 26, 1],\n\t[172, 18, 2],\n\t[196, 20, 2],\n\t[242, 24, 2],\n\t[292, 30, 2],\n\t[346, 18, 4],\n];\n\nfunction selectVersion(len: number): number {\n\tfor (let v = 1; v <= 10; v++) {\n\t\t// biome-ignore lint/style/noNonNullAssertion: bit-encoding routine where index is provably bounded by surrounding loop/length checks\n\t\tif (len <= CAPACITIES[v]!) return v;\n\t}\n\tthrow new Error(\"QR data too long\");\n}\n\n// GF(256) arithmetic for Reed-Solomon\nconst GF_EXP = new Uint8Array(512);\nconst GF_LOG = new Uint8Array(256);\n{\n\tlet x = 1;\n\tfor (let i = 0; i < 255; i++) {\n\t\tGF_EXP[i] = x;\n\t\tGF_LOG[x] = i;\n\t\tx = (x << 1) ^ (x >= 128 ? 0x11d : 0);\n\t}\n\t// biome-ignore lint/style/noNonNullAssertion: bit-encoding routine where index is provably bounded by surrounding loop/length checks\n\tfor (let i = 255; i < 512; i++) GF_EXP[i] = GF_EXP[i - 255]!;\n}\n\nfunction gfMul(a: number, b: number): number {\n\tif (a === 0 || b === 0) return 0;\n\t// biome-ignore lint/style/noNonNullAssertion: bit-encoding routine where index is provably bounded by surrounding loop/length checks\n\treturn GF_EXP[GF_LOG[a]! + GF_LOG[b]!]!;\n}\n\nfunction rsGenPoly(n: number): Uint8Array {\n\tlet poly = new Uint8Array([1]);\n\tfor (let i = 0; i < n; i++) {\n\t\tconst next = new Uint8Array(poly.length + 1);\n\t\tfor (let j = 0; j < poly.length; j++) {\n\t\t\t// biome-ignore lint/style/noNonNullAssertion: bit-encoding routine where index is provably bounded by surrounding loop/length checks\n\t\t\tnext[j] = next[j]! ^ poly[j]!;\n\t\t\t// biome-ignore lint/style/noNonNullAssertion: bit-encoding routine where index is provably bounded by surrounding loop/length checks\n\t\t\tnext[j + 1] = next[j + 1]! ^ gfMul(poly[j]!, GF_EXP[i]!);\n\t\t}\n\t\tpoly = next;\n\t}\n\treturn poly;\n}\n\nfunction rsEncode(data: Uint8Array, ecLen: number): Uint8Array {\n\tconst gen = rsGenPoly(ecLen);\n\tconst result = new Uint8Array(data.length + ecLen);\n\tresult.set(data);\n\tfor (let i = 0; i < data.length; i++) {\n\t\t// biome-ignore lint/style/noNonNullAssertion: bit-encoding routine where index is provably bounded by surrounding loop/length checks\n\t\tconst coef = result[i]!;\n\t\tif (coef === 0) continue;\n\t\tfor (let j = 0; j < gen.length; j++) {\n\t\t\t// biome-ignore lint/style/noNonNullAssertion: bit-encoding routine where index is provably bounded by surrounding loop/length checks\n\t\t\tresult[i + j] = result[i + j]! ^ gfMul(gen[j]!, coef);\n\t\t}\n\t}\n\treturn result.subarray(data.length);\n}\n\nfunction encodeData(bytes: Uint8Array, version: number): Uint8Array {\n\t// biome-ignore lint/style/noNonNullAssertion: bit-encoding routine where index is provably bounded by surrounding loop/length checks\n\tconst [totalCw, ecPerBlock, numBlocks] = EC_PARAMS[version]!;\n\tconst dataCw = totalCw - ecPerBlock * numBlocks;\n\n\t// Build byte-mode bitstream\n\tconst bits: number[] = [];\n\tconst push = (val: number, len: number) => {\n\t\tfor (let i = len - 1; i >= 0; i--) bits.push((val >> i) & 1);\n\t};\n\n\tpush(0b0100, 4); // byte mode indicator\n\tpush(bytes.length, version <= 9 ? 8 : 16); // character count\n\tfor (const b of bytes) push(b, 8);\n\tpush(0, 4); // terminator (up to 4 bits)\n\n\t// Pad to byte boundary\n\twhile (bits.length % 8 !== 0) bits.push(0);\n\n\t// Build codeword array\n\tconst codewords = new Uint8Array(dataCw);\n\tfor (let i = 0; i < dataCw; i++) {\n\t\tlet byte = 0;\n\t\tfor (let j = 0; j < 8; j++) {\n\t\t\tconst idx = i * 8 + j;\n\t\t\t// biome-ignore lint/style/noNonNullAssertion: bit-encoding routine where index is provably bounded by surrounding loop/length checks\n\t\t\tbyte = (byte << 1) | (idx < bits.length ? bits[idx]! : 0);\n\t\t}\n\t\tcodewords[i] = byte;\n\t}\n\n\t// Pad codewords\n\tlet padByte = 0xec;\n\tfor (let i = Math.ceil(bits.length / 8); i < dataCw; i++) {\n\t\tcodewords[i] = padByte;\n\t\tpadByte = padByte === 0xec ? 0x11 : 0xec;\n\t}\n\n\t// Reed-Solomon EC\n\tconst cwPerBlock = Math.floor(dataCw / numBlocks);\n\tconst dataBlocks: Uint8Array[] = [];\n\tconst ecBlocks: Uint8Array[] = [];\n\tlet offset = 0;\n\tfor (let b = 0; b < numBlocks; b++) {\n\t\tconst blockLen = cwPerBlock + (b < dataCw % numBlocks ? 1 : 0);\n\t\tconst block = codewords.subarray(offset, offset + blockLen);\n\t\tdataBlocks.push(block);\n\t\tecBlocks.push(rsEncode(block, ecPerBlock));\n\t\toffset += blockLen;\n\t}\n\n\t// Interleave\n\tconst result: number[] = [];\n\tconst maxDataLen = Math.max(...dataBlocks.map((b) => b.length));\n\tfor (let i = 0; i < maxDataLen; i++) {\n\t\tfor (const block of dataBlocks) {\n\t\t\t// biome-ignore lint/style/noNonNullAssertion: bit-encoding routine where index is provably bounded by surrounding loop/length checks\n\t\t\tif (i < block.length) result.push(block[i]!);\n\t\t}\n\t}\n\tfor (let i = 0; i < ecPerBlock; i++) {\n\t\tfor (const block of ecBlocks) {\n\t\t\t// biome-ignore lint/style/noNonNullAssertion: bit-encoding routine where index is provably bounded by surrounding loop/length checks\n\t\t\tif (i < block.length) result.push(block[i]!);\n\t\t}\n\t}\n\n\treturn new Uint8Array(result);\n}\n\n// QR matrix operations\n\ntype Matrix = Uint8Array[];\n\nfunction createMatrix(size: number): Matrix {\n\treturn Array.from({ length: size }, () => new Uint8Array(size));\n}\n\nfunction setModule(\n\tm: Matrix,\n\tr: number,\n\tc: number,\n\tval: number,\n\treserved: Matrix,\n) {\n\tif (r >= 0 && r < m.length && c >= 0 && c < m.length) {\n\t\t// biome-ignore lint/style/noNonNullAssertion: bit-encoding routine where index is provably bounded by surrounding loop/length checks\n\t\tm[r]![c] = val;\n\t\t// biome-ignore lint/style/noNonNullAssertion: bit-encoding routine where index is provably bounded by surrounding loop/length checks\n\t\treserved[r]![c] = 1;\n\t}\n}\n\nfunction addFinderPattern(m: Matrix, r: number, c: number, res: Matrix) {\n\tfor (let dr = -1; dr <= 7; dr++) {\n\t\tfor (let dc = -1; dc <= 7; dc++) {\n\t\t\tconst rr = r + dr;\n\t\t\tconst cc = c + dc;\n\t\t\tif (rr < 0 || rr >= m.length || cc < 0 || cc >= m.length) continue;\n\t\t\tconst inOuter = dr >= 0 && dr <= 6 && dc >= 0 && dc <= 6;\n\t\t\tconst inInner = dr >= 2 && dr <= 4 && dc >= 2 && dc <= 4;\n\t\t\tconst onBorder = dr === 0 || dr === 6 || dc === 0 || dc === 6;\n\t\t\tconst val = inInner || (inOuter && onBorder) ? 1 : 0;\n\t\t\tsetModule(m, rr, cc, val, res);\n\t\t}\n\t}\n}\n\nfunction addTimingPatterns(m: Matrix, res: Matrix) {\n\tfor (let i = 8; i < m.length - 8; i++) {\n\t\tconst val = i % 2 === 0 ? 1 : 0;\n\t\tif (!res[6]?.[i]) setModule(m, 6, i, val, res);\n\t\tif (!res[i]?.[6]) setModule(m, i, 6, val, res);\n\t}\n}\n\nfunction addFormatInfo(m: Matrix, res: Matrix) {\n\t// EC level L (01), mask 0 (000) → format bits 01000 → with BCH: 0x77C0 ... simplified\n\t// Use pre-computed format info for L/mask0: 111011111000100\n\tconst fmt = 0b111011111000100;\n\tconst n = m.length;\n\tfor (let i = 0; i < 15; i++) {\n\t\tconst bit = (fmt >> (14 - i)) & 1;\n\t\t// Around top-left finder\n\t\tif (i < 6) setModule(m, 8, i, bit, res);\n\t\telse if (i === 6) setModule(m, 8, 7, bit, res);\n\t\telse if (i === 7) setModule(m, 8, 8, bit, res);\n\t\telse if (i === 8) setModule(m, 7, 8, bit, res);\n\t\telse setModule(m, 14 - i, 8, bit, res);\n\n\t\t// Around other finders\n\t\tif (i < 8) setModule(m, n - 1 - i, 8, bit, res);\n\t\telse setModule(m, 8, n - 15 + i, bit, res);\n\t}\n\t// Dark module\n\tsetModule(m, n - 8, 8, 1, res);\n}\n\nfunction placeData(m: Matrix, res: Matrix, data: Uint8Array) {\n\tconst n = m.length;\n\tlet bitIdx = 0;\n\tconst totalBits = data.length * 8;\n\n\tlet col = n - 1;\n\tlet upward = true;\n\n\twhile (col >= 0) {\n\t\tif (col === 6) col--; // skip timing column\n\t\tconst rows = upward\n\t\t\t? Array.from({ length: n }, (_, i) => n - 1 - i)\n\t\t\t: Array.from({ length: n }, (_, i) => i);\n\n\t\tfor (const row of rows) {\n\t\t\tfor (const dc of [0, -1]) {\n\t\t\t\tconst c = col + dc;\n\t\t\t\tif (c < 0 || res[row]?.[c]) continue;\n\t\t\t\tif (bitIdx < totalBits) {\n\t\t\t\t\tconst byteIdx = bitIdx >> 3;\n\t\t\t\t\tconst bitPos = 7 - (bitIdx & 7);\n\t\t\t\t\t// biome-ignore lint/style/noNonNullAssertion: bit-encoding routine where index is provably bounded by surrounding loop/length checks\n\t\t\t\t\tconst bit = (data[byteIdx]! >> bitPos) & 1;\n\t\t\t\t\t// Apply mask 0: (row + col) % 2 === 0\n\t\t\t\t\t// biome-ignore lint/style/noNonNullAssertion: bit-encoding routine where index is provably bounded by surrounding loop/length checks\n\t\t\t\t\tm[row]![c] = bit ^ ((row + c) % 2 === 0 ? 1 : 0);\n\t\t\t\t\tbitIdx++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tcol -= 2;\n\t\tupward = !upward;\n\t}\n}\n\nfunction buildMatrix(version: number, codewords: Uint8Array): Matrix {\n\tconst n = version * 4 + 17;\n\tconst m = createMatrix(n);\n\tconst res = createMatrix(n); // reserved modules\n\n\t// Finder patterns\n\taddFinderPattern(m, 0, 0, res);\n\taddFinderPattern(m, 0, n - 7, res);\n\taddFinderPattern(m, n - 7, 0, res);\n\n\taddTimingPatterns(m, res);\n\taddFormatInfo(m, res);\n\n\t// Alignment patterns for v >= 2\n\tif (version >= 2) {\n\t\tconst pos = [6, version * 4 + 10]; // simplified for v2-v6\n\t\tfor (const r of pos) {\n\t\t\tfor (const c of pos) {\n\t\t\t\t// Skip if overlapping finder\n\t\t\t\tif (res[r]?.[c]) continue;\n\t\t\t\tfor (let dr = -2; dr <= 2; dr++) {\n\t\t\t\t\tfor (let dc = -2; dc <= 2; dc++) {\n\t\t\t\t\t\tconst val =\n\t\t\t\t\t\t\tMath.abs(dr) === 2 || Math.abs(dc) === 2 || (dr === 0 && dc === 0)\n\t\t\t\t\t\t\t\t? 1\n\t\t\t\t\t\t\t\t: 0;\n\t\t\t\t\t\tsetModule(m, r + dr, c + dc, val, res);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tplaceData(m, res, codewords);\n\treturn m;\n}\n\n/** Generate a QR code as an SVG string for the given data. */\nexport function qrSvg(\n\tdata: string,\n\topts?: { size?: number; dark?: string; light?: string },\n): string {\n\tconst size = opts?.size ?? 256;\n\tconst dark = opts?.dark ?? \"#000000\";\n\tconst light = opts?.light ?? \"#ffffff\";\n\n\tconst bytes = new TextEncoder().encode(data);\n\tconst version = selectVersion(bytes.length);\n\tconst codewords = encodeData(bytes, version);\n\tconst matrix = buildMatrix(version, codewords);\n\n\tconst n = matrix.length;\n\tconst quiet = 4; // quiet zone modules\n\tconst total = n + quiet * 2;\n\tconst scale = size / total;\n\n\tlet paths = \"\";\n\tfor (let r = 0; r < n; r++) {\n\t\tfor (let c = 0; c < n; c++) {\n\t\t\tif (matrix[r]?.[c]) {\n\t\t\t\tconst x = (c + quiet) * scale;\n\t\t\t\tconst y = (r + quiet) * scale;\n\t\t\t\tpaths += `M${x},${y}h${scale}v${scale}h-${scale}z`;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn [\n\t\t`<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 ${size} ${size}\" width=\"${size}\" height=\"${size}\">`,\n\t\t`<rect width=\"${size}\" height=\"${size}\" fill=\"${light}\"/>`,\n\t\t`<path d=\"${paths}\" fill=\"${dark}\"/>`,\n\t\t\"</svg>\",\n\t].join(\"\");\n}\n",
    "/**\n * Derive a stable machine-readable code from an error's `name` field:\n * `HttpRequestError` becomes `HTTP_REQUEST_ERROR`. `name` is a string\n * literal each class sets, so the code survives a bundler that mangles\n * class names. Branch on `code` instead of parsing `message`, which is\n * free to change.\n */\nfunction codeFromName(name: string): string {\n\treturn name\n\t\t.replace(/([a-z0-9])([A-Z])/g, \"$1_$2\")\n\t\t.replace(/([A-Z]+)([A-Z][a-z])/g, \"$1_$2\")\n\t\t.toUpperCase();\n}\n\nexport class BaseError extends Error {\n\toverride name = \"StacksError\";\n\t#code?: string;\n\tshortMessage: string;\n\tdetails?: string;\n\n\tconstructor(\n\t\tshortMessage: string,\n\t\toptions?: { cause?: Error; details?: string; code?: string },\n\t) {\n\t\tconst message = [\n\t\t\tshortMessage,\n\t\t\toptions?.details ? `\\n${options.details}` : \"\",\n\t\t].join(\"\");\n\n\t\tsuper(message, { cause: options?.cause });\n\t\tif (options?.code !== undefined) this.#code = options.code;\n\t\tthis.shortMessage = shortMessage;\n\t\tthis.details = options?.details;\n\t}\n\n\t/**\n\t * Stable identifier for programmatic handling; survives message\n\t * rewording and minification. An explicit `code` option wins, else it\n\t * is derived from `name` (`TimeoutError` gives `TIMEOUT_ERROR`).\n\t */\n\tget code(): string {\n\t\treturn this.#code ?? codeFromName(this.name);\n\t}\n\n\tset code(value: string) {\n\t\tthis.#code = value;\n\t}\n\n\ttoJSON(): {\n\t\tname: string;\n\t\tcode: string;\n\t\tmessage: string;\n\t\tshortMessage: string;\n\t\tdetails: string | undefined;\n\t\tcause: string | undefined;\n\t} {\n\t\treturn {\n\t\t\tname: this.name,\n\t\t\tcode: this.code,\n\t\t\tmessage: this.message,\n\t\t\tshortMessage: this.shortMessage,\n\t\t\tdetails: this.details,\n\t\t\tcause: this.cause instanceof Error ? this.cause.message : undefined,\n\t\t};\n\t}\n}\n",
    "import { ConnectError } from \"./errors.ts\";\nimport type { WalletProvider } from \"./types.ts\";\n\ndeclare const window:\n\t| {\n\t\t\tStacksProvider?: WalletProvider;\n\t\t\tLeatherProvider?: WalletProvider;\n\t\t\tXverseProvider?: WalletProvider;\n\t\t\tHiroWalletProvider?: WalletProvider;\n\t  }\n\t| undefined;\n\nlet customProvider: WalletProvider | null = null;\n\n/** Set a custom provider (e.g. WalletConnectProvider). Pass null to clear. */\nexport function setProvider(provider: WalletProvider | null): void {\n\tcustomProvider = provider;\n}\n\nexport function getProvider(): WalletProvider {\n\tif (customProvider) return customProvider;\n\n\tif (typeof window === \"undefined\") {\n\t\tthrow new ConnectError(\"No Stacks wallet found\");\n\t}\n\n\tconst provider =\n\t\twindow.StacksProvider ??\n\t\twindow.LeatherProvider ??\n\t\twindow.XverseProvider ??\n\t\twindow.HiroWalletProvider;\n\n\tif (!provider) throw new ConnectError(\"No Stacks wallet found\");\n\treturn provider;\n}\n\nexport function isWalletInstalled(): boolean {\n\treturn (\n\t\ttypeof window !== \"undefined\" &&\n\t\t!!(\n\t\t\twindow.StacksProvider ||\n\t\t\twindow.LeatherProvider ||\n\t\t\twindow.XverseProvider ||\n\t\t\twindow.HiroWalletProvider\n\t\t)\n\t);\n}\n",
    "/** Minimal wallet picker modal (injected wallets + WC QR) */\n\nimport { isWalletInstalled } from \"../provider.ts\";\nimport { qrSvg } from \"./qr.ts\";\n\n// biome-ignore lint/suspicious/noExplicitAny: interop boundary or dynamic-shape value where typing adds friction without runtime safety\ndeclare const document: any;\n\nconst MODAL_ID = \"sl-wc-modal\";\n\nconst STYLES = `\n  #${MODAL_ID} { position:fixed;inset:0;z-index:99999;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,.5) }\n  #${MODAL_ID} .sl-wc-box { background:#fff;border-radius:16px;padding:24px;max-width:360px;width:90%;text-align:center;font-family:system-ui,sans-serif }\n  #${MODAL_ID} .sl-wc-title { margin:0 0 16px;font-size:18px;font-weight:600;color:#1a1a1a }\n  #${MODAL_ID} .sl-wc-btn { display:block;width:100%;padding:12px;margin:8px 0;border:1px solid #e5e5e5;border-radius:12px;background:#fff;cursor:pointer;font-size:15px;font-weight:500;color:#1a1a1a;transition:background .15s }\n  #${MODAL_ID} .sl-wc-btn:hover { background:#f5f5f5 }\n  #${MODAL_ID} .sl-wc-divider { margin:16px 0;color:#999;font-size:13px }\n  #${MODAL_ID} .sl-wc-qr { margin:16px auto 0 }\n  #${MODAL_ID} .sl-wc-close { position:absolute;top:12px;right:16px;background:none;border:none;font-size:20px;cursor:pointer;color:#999 }\n`;\n\nexport interface ModalOptions {\n\twcUri?: string;\n\tonSelectInjected?: () => void;\n\tonClose?: () => void;\n}\n\nexport function showModal(opts: ModalOptions): () => void {\n\tif (typeof document === \"undefined\") return () => {};\n\n\t// Remove existing\n\tdocument.getElementById(MODAL_ID)?.remove();\n\n\tconst overlay = document.createElement(\"div\");\n\toverlay.id = MODAL_ID;\n\n\tconst style = document.createElement(\"style\");\n\tstyle.textContent = STYLES;\n\toverlay.appendChild(style);\n\n\tconst box = document.createElement(\"div\");\n\tbox.className = \"sl-wc-box\";\n\tbox.style.position = \"relative\";\n\n\t// Close button\n\tconst close = document.createElement(\"button\");\n\tclose.className = \"sl-wc-close\";\n\tclose.textContent = \"\\u00d7\";\n\tclose.onclick = dismiss;\n\tbox.appendChild(close);\n\n\t// Title\n\tconst title = document.createElement(\"h2\");\n\ttitle.className = \"sl-wc-title\";\n\ttitle.textContent = \"Connect Wallet\";\n\tbox.appendChild(title);\n\n\t// Injected wallet button\n\tif (isWalletInstalled()) {\n\t\tconst btn = document.createElement(\"button\");\n\t\tbtn.className = \"sl-wc-btn\";\n\t\tbtn.textContent = \"Browser Wallet\";\n\t\tbtn.onclick = () => {\n\t\t\tdismiss();\n\t\t\topts.onSelectInjected?.();\n\t\t};\n\t\tbox.appendChild(btn);\n\t}\n\n\t// QR code\n\tif (opts.wcUri) {\n\t\tif (isWalletInstalled()) {\n\t\t\tconst divider = document.createElement(\"div\");\n\t\t\tdivider.className = \"sl-wc-divider\";\n\t\t\tdivider.textContent = \"or scan with mobile wallet\";\n\t\t\tbox.appendChild(divider);\n\t\t}\n\n\t\tconst qr = document.createElement(\"div\");\n\t\tqr.className = \"sl-wc-qr\";\n\t\tqr.innerHTML = qrSvg(opts.wcUri, { size: 240 });\n\t\tbox.appendChild(qr);\n\t}\n\n\toverlay.appendChild(box);\n\t// biome-ignore lint/suspicious/noExplicitAny: interop boundary or dynamic-shape value where typing adds friction without runtime safety\n\toverlay.onclick = (e: any) => {\n\t\tif (e.target === overlay) dismiss();\n\t};\n\n\tdocument.body.appendChild(overlay);\n\n\tfunction dismiss() {\n\t\toverlay.remove();\n\t\topts.onClose?.();\n\t}\n\n\treturn dismiss;\n}\n\nexport function hideModal(): void {\n\tif (typeof document === \"undefined\") return;\n\tdocument.getElementById(MODAL_ID)?.remove();\n}\n"
  ],
  "mappings": "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",
  "debugId": "5660C55B8F249B5B64756E2164756E21",
  "names": []
}