@fleet-sdk/blockchain-providers 0.8.2 → 0.8.3

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../node_modules/.pnpm/@noble+hashes@1.7.1/node_modules/@noble/hashes/src/_assert.ts","../../../node_modules/.pnpm/@noble+hashes@1.7.1/node_modules/@noble/hashes/src/utils.ts","../../../node_modules/.pnpm/@noble+hashes@1.7.1/node_modules/@noble/hashes/src/_md.ts","../../../node_modules/.pnpm/@noble+hashes@1.7.1/node_modules/@noble/hashes/src/sha256.ts","../../../node_modules/.pnpm/@scure+base@1.2.4/node_modules/@scure/base/index.ts","../../crypto/src/coders/hex.ts","../../crypto/src/coders/index.ts","../../crypto/src/hashes.ts","../src/utils/networking.ts","../src/utils/graphql.ts","../src/ergo-graphql/queries.ts","../src/ergo-graphql/ergoGraphQLProvider.ts"],"names":["B","isBytes","sha256","hex","base58checkCoder","_sha256","response","some","isEmpty","query","chunk","ensureDefaults"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Internal assertion helpers.\n * @module\n */\n\n/** Asserts something is positive integer. */\nfunction anumber(n: number): void {\n if (!Number.isSafeInteger(n) || n < 0) throw new Error('positive integer expected, got ' + n);\n}\n\n/** Is number an Uint8Array? Copied from utils for perf. */\nfunction isBytes(a: unknown): a is Uint8Array {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n\n/** Asserts something is Uint8Array. */\nfunction abytes(b: Uint8Array | undefined, ...lengths: number[]): void {\n if (!isBytes(b)) throw new Error('Uint8Array expected');\n if (lengths.length > 0 && !lengths.includes(b.length))\n throw new Error('Uint8Array expected of length ' + lengths + ', got length=' + b.length);\n}\n\n/** Hash interface. */\nexport type Hash = {\n (data: Uint8Array): Uint8Array;\n blockLen: number;\n outputLen: number;\n create: any;\n};\n\n/** Asserts something is hash */\nfunction ahash(h: Hash): void {\n if (typeof h !== 'function' || typeof h.create !== 'function')\n throw new Error('Hash should be wrapped by utils.wrapConstructor');\n anumber(h.outputLen);\n anumber(h.blockLen);\n}\n\n/** Asserts a hash instance has not been destroyed / finished */\nfunction aexists(instance: any, checkFinished = true): void {\n if (instance.destroyed) throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished) throw new Error('Hash#digest() has already been called');\n}\n\n/** Asserts output is properly-sized byte array */\nfunction aoutput(out: any, instance: any): void {\n abytes(out);\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error('digestInto() expects output buffer of length at least ' + min);\n }\n}\n\nexport { anumber, abytes, ahash, aexists, aoutput };\n","/**\n * Utilities for hex, bytes, CSPRNG.\n * @module\n */\n/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n\n// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.json#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated (2025-04-30), we can just drop the import.\nimport { crypto } from '@noble/hashes/crypto';\nimport { abytes } from './_assert.js';\n// export { isBytes } from './_assert.js';\n// We can't reuse isBytes from _assert, because somehow this causes huge perf issues\nexport function isBytes(a: unknown): a is Uint8Array {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n\n// prettier-ignore\nexport type TypedArray = Int8Array | Uint8ClampedArray | Uint8Array |\n Uint16Array | Int16Array | Uint32Array | Int32Array;\n\n// Cast array to different type\nexport function u8(arr: TypedArray): Uint8Array {\n return new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\n}\nexport function u32(arr: TypedArray): Uint32Array {\n return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\n\n// Cast array to view\nexport function createView(arr: TypedArray): DataView {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n\n/** The rotate right (circular right shift) operation for uint32 */\nexport function rotr(word: number, shift: number): number {\n return (word << (32 - shift)) | (word >>> shift);\n}\n/** The rotate left (circular left shift) operation for uint32 */\nexport function rotl(word: number, shift: number): number {\n return (word << shift) | ((word >>> (32 - shift)) >>> 0);\n}\n\n/** Is current platform little-endian? Most are. Big-Endian platform: IBM */\nexport const isLE: boolean = /* @__PURE__ */ (() =>\n new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44)();\n// The byte swap operation for uint32\nexport function byteSwap(word: number): number {\n return (\n ((word << 24) & 0xff000000) |\n ((word << 8) & 0xff0000) |\n ((word >>> 8) & 0xff00) |\n ((word >>> 24) & 0xff)\n );\n}\n/** Conditionally byte swap if on a big-endian platform */\nexport const byteSwapIfBE: (n: number) => number = isLE\n ? (n: number) => n\n : (n: number) => byteSwap(n);\n\n/** In place byte swap for Uint32Array */\nexport function byteSwap32(arr: Uint32Array): void {\n for (let i = 0; i < arr.length; i++) {\n arr[i] = byteSwap(arr[i]);\n }\n}\n\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>\n i.toString(16).padStart(2, '0')\n);\n/**\n * Convert byte array to hex string.\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n abytes(bytes);\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\n\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 } as const;\nfunction asciiToBase16(ch: number): number | undefined {\n if (ch >= asciis._0 && ch <= asciis._9) return ch - asciis._0; // '2' => 50-48\n if (ch >= asciis.A && ch <= asciis.F) return ch - (asciis.A - 10); // 'B' => 66-(65-10)\n if (ch >= asciis.a && ch <= asciis.f) return ch - (asciis.a - 10); // 'b' => 98-(97-10)\n return;\n}\n\n/**\n * Convert hex string to byte array.\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex: string): Uint8Array {\n if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2) throw new Error('hex string expected, got unpadded hex of length ' + hl);\n const array = new Uint8Array(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n const n1 = asciiToBase16(hex.charCodeAt(hi));\n const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n if (n1 === undefined || n2 === undefined) {\n const char = hex[hi] + hex[hi + 1];\n throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n }\n array[ai] = n1 * 16 + n2; // multiply first octet, e.g. 'a3' => 10*16+3 => 160 + 3 => 163\n }\n return array;\n}\n\n/**\n * There is no setImmediate in browser and setTimeout is slow.\n * Call of async fn will return Promise, which will be fullfiled only on\n * next scheduler queue processing step and this is exactly what we need.\n */\nexport const nextTick = async (): Promise<void> => {};\n\n/** Returns control to thread each 'tick' ms to avoid blocking. */\nexport async function asyncLoop(\n iters: number,\n tick: number,\n cb: (i: number) => void\n): Promise<void> {\n let ts = Date.now();\n for (let i = 0; i < iters; i++) {\n cb(i);\n // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n const diff = Date.now() - ts;\n if (diff >= 0 && diff < tick) continue;\n await nextTick();\n ts += diff;\n }\n}\n\n// Global symbols in both browsers and Node.js since v11\n// See https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\n\n/**\n * Convert JS string to byte array.\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n if (typeof str !== 'string') throw new Error('utf8ToBytes expected string, got ' + typeof str);\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\n/** Accepted input of hash functions. Strings are converted to byte arrays. */\nexport type Input = Uint8Array | string;\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nexport function toBytes(data: Input): Uint8Array {\n if (typeof data === 'string') data = utf8ToBytes(data);\n abytes(data);\n return data;\n}\n\n/**\n * Copies several Uint8Arrays into one.\n */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n abytes(a);\n sum += a.length;\n }\n const res = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const a = arrays[i];\n res.set(a, pad);\n pad += a.length;\n }\n return res;\n}\n\n/** For runtime check if class implements interface */\nexport abstract class Hash<T extends Hash<T>> {\n abstract blockLen: number; // Bytes per block\n abstract outputLen: number; // Bytes in output\n abstract update(buf: Input): this;\n // Writes digest into buf\n abstract digestInto(buf: Uint8Array): void;\n abstract digest(): Uint8Array;\n /**\n * Resets internal state. Makes Hash instance unusable.\n * Reset is impossible for keyed hashes if key is consumed into state. If digest is not consumed\n * by user, they will need to manually call `destroy()` when zeroing is necessary.\n */\n abstract destroy(): void;\n /**\n * Clones hash instance. Unsafe: doesn't check whether `to` is valid. Can be used as `clone()`\n * when no options are passed.\n * Reasons to use `_cloneInto` instead of clone: 1) performance 2) reuse instance => all internal\n * buffers are overwritten => causes buffer overwrite which is used for digest in some cases.\n * There are no guarantees for clean-up because it's impossible in JS.\n */\n abstract _cloneInto(to?: T): T;\n // Safe version that clones internal state\n clone(): T {\n return this._cloneInto();\n }\n}\n\n/**\n * XOF: streaming API to read digest in chunks.\n * Same as 'squeeze' in keccak/k12 and 'seek' in blake3, but more generic name.\n * When hash used in XOF mode it is up to user to call '.destroy' afterwards, since we cannot\n * destroy state, next call can require more bytes.\n */\nexport type HashXOF<T extends Hash<T>> = Hash<T> & {\n xof(bytes: number): Uint8Array; // Read 'bytes' bytes from digest stream\n xofInto(buf: Uint8Array): Uint8Array; // read buf.length bytes from digest stream into buf\n};\n\ntype EmptyObj = {};\nexport function checkOpts<T1 extends EmptyObj, T2 extends EmptyObj>(\n defaults: T1,\n opts?: T2\n): T1 & T2 {\n if (opts !== undefined && {}.toString.call(opts) !== '[object Object]')\n throw new Error('Options should be object or undefined');\n const merged = Object.assign(defaults, opts);\n return merged as T1 & T2;\n}\n\n/** Hash function */\nexport type CHash = ReturnType<typeof wrapConstructor>;\n/** Hash function with output */\nexport type CHashO = ReturnType<typeof wrapConstructorWithOpts>;\n/** XOF with output */\nexport type CHashXO = ReturnType<typeof wrapXOFConstructorWithOpts>;\n\n/** Wraps hash function, creating an interface on top of it */\nexport function wrapConstructor<T extends Hash<T>>(\n hashCons: () => Hash<T>\n): {\n (msg: Input): Uint8Array;\n outputLen: number;\n blockLen: number;\n create(): Hash<T>;\n} {\n const hashC = (msg: Input): Uint8Array => hashCons().update(toBytes(msg)).digest();\n const tmp = hashCons();\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = () => hashCons();\n return hashC;\n}\n\nexport function wrapConstructorWithOpts<H extends Hash<H>, T extends Object>(\n hashCons: (opts?: T) => Hash<H>\n): {\n (msg: Input, opts?: T): Uint8Array;\n outputLen: number;\n blockLen: number;\n create(opts: T): Hash<H>;\n} {\n const hashC = (msg: Input, opts?: T): Uint8Array => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({} as T);\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts: T) => hashCons(opts);\n return hashC;\n}\n\nexport function wrapXOFConstructorWithOpts<H extends HashXOF<H>, T extends Object>(\n hashCons: (opts?: T) => HashXOF<H>\n): {\n (msg: Input, opts?: T): Uint8Array;\n outputLen: number;\n blockLen: number;\n create(opts: T): HashXOF<H>;\n} {\n const hashC = (msg: Input, opts?: T): Uint8Array => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({} as T);\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts: T) => hashCons(opts);\n return hashC;\n}\n\n/** Cryptographically secure PRNG. Uses internal OS-level `crypto.getRandomValues`. */\nexport function randomBytes(bytesLength = 32): Uint8Array {\n if (crypto && typeof crypto.getRandomValues === 'function') {\n return crypto.getRandomValues(new Uint8Array(bytesLength));\n }\n // Legacy Node.js compatibility\n if (crypto && typeof crypto.randomBytes === 'function') {\n return crypto.randomBytes(bytesLength);\n }\n throw new Error('crypto.getRandomValues must be defined');\n}\n","/**\n * Internal Merkle-Damgard hash utils.\n * @module\n */\nimport { aexists, aoutput } from './_assert.js';\nimport { type Input, Hash, createView, toBytes } from './utils.js';\n\n/** Polyfill for Safari 14. https://caniuse.com/mdn-javascript_builtins_dataview_setbiguint64 */\nexport function setBigUint64(\n view: DataView,\n byteOffset: number,\n value: bigint,\n isLE: boolean\n): void {\n if (typeof view.setBigUint64 === 'function') return view.setBigUint64(byteOffset, value, isLE);\n const _32n = BigInt(32);\n const _u32_max = BigInt(0xffffffff);\n const wh = Number((value >> _32n) & _u32_max);\n const wl = Number(value & _u32_max);\n const h = isLE ? 4 : 0;\n const l = isLE ? 0 : 4;\n view.setUint32(byteOffset + h, wh, isLE);\n view.setUint32(byteOffset + l, wl, isLE);\n}\n\n/** Choice: a ? b : c */\nexport function Chi(a: number, b: number, c: number): number {\n return (a & b) ^ (~a & c);\n}\n\n/** Majority function, true if any two inputs is true. */\nexport function Maj(a: number, b: number, c: number): number {\n return (a & b) ^ (a & c) ^ (b & c);\n}\n\n/**\n * Merkle-Damgard hash construction base class.\n * Could be used to create MD5, RIPEMD, SHA1, SHA2.\n */\nexport abstract class HashMD<T extends HashMD<T>> extends Hash<T> {\n protected abstract process(buf: DataView, offset: number): void;\n protected abstract get(): number[];\n protected abstract set(...args: number[]): void;\n abstract destroy(): void;\n protected abstract roundClean(): void;\n // For partial updates less than block size\n protected buffer: Uint8Array;\n protected view: DataView;\n protected finished = false;\n protected length = 0;\n protected pos = 0;\n protected destroyed = false;\n\n constructor(\n readonly blockLen: number,\n public outputLen: number,\n readonly padOffset: number,\n readonly isLE: boolean\n ) {\n super();\n this.buffer = new Uint8Array(blockLen);\n this.view = createView(this.buffer);\n }\n update(data: Input): this {\n aexists(this);\n const { view, buffer, blockLen } = this;\n data = toBytes(data);\n const len = data.length;\n for (let pos = 0; pos < len; ) {\n const take = Math.min(blockLen - this.pos, len - pos);\n // Fast path: we have at least one block in input, cast it to view and process\n if (take === blockLen) {\n const dataView = createView(data);\n for (; blockLen <= len - pos; pos += blockLen) this.process(dataView, pos);\n continue;\n }\n buffer.set(data.subarray(pos, pos + take), this.pos);\n this.pos += take;\n pos += take;\n if (this.pos === blockLen) {\n this.process(view, 0);\n this.pos = 0;\n }\n }\n this.length += data.length;\n this.roundClean();\n return this;\n }\n digestInto(out: Uint8Array): void {\n aexists(this);\n aoutput(out, this);\n this.finished = true;\n // Padding\n // We can avoid allocation of buffer for padding completely if it\n // was previously not allocated here. But it won't change performance.\n const { buffer, view, blockLen, isLE } = this;\n let { pos } = this;\n // append the bit '1' to the message\n buffer[pos++] = 0b10000000;\n this.buffer.subarray(pos).fill(0);\n // we have less than padOffset left in buffer, so we cannot put length in\n // current block, need process it and pad again\n if (this.padOffset > blockLen - pos) {\n this.process(view, 0);\n pos = 0;\n }\n // Pad until full block byte with zeros\n for (let i = pos; i < blockLen; i++) buffer[i] = 0;\n // Note: sha512 requires length to be 128bit integer, but length in JS will overflow before that\n // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen.\n // So we just write lowest 64 bits of that value.\n setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE);\n this.process(view, 0);\n const oview = createView(out);\n const len = this.outputLen;\n // NOTE: we do division by 4 later, which should be fused in single op with modulo by JIT\n if (len % 4) throw new Error('_sha2: outputLen should be aligned to 32bit');\n const outLen = len / 4;\n const state = this.get();\n if (outLen > state.length) throw new Error('_sha2: outputLen bigger than state');\n for (let i = 0; i < outLen; i++) oview.setUint32(4 * i, state[i], isLE);\n }\n digest(): Uint8Array {\n const { buffer, outputLen } = this;\n this.digestInto(buffer);\n const res = buffer.slice(0, outputLen);\n this.destroy();\n return res;\n }\n _cloneInto(to?: T): T {\n to ||= new (this.constructor as any)() as T;\n to.set(...this.get());\n const { blockLen, buffer, length, finished, destroyed, pos } = this;\n to.length = length;\n to.pos = pos;\n to.finished = finished;\n to.destroyed = destroyed;\n if (length % blockLen) to.buffer.set(buffer);\n return to;\n }\n}\n","/**\n * SHA2-256 a.k.a. sha256. In JS, it is the fastest hash, even faster than Blake3.\n *\n * To break sha256 using birthday attack, attackers need to try 2^128 hashes.\n * BTC network is doing 2^70 hashes/sec (2^95 hashes/year) as per 2025.\n *\n * Check out [FIPS 180-4](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf).\n * @module\n */\nimport { Chi, HashMD, Maj } from './_md.js';\nimport { type CHash, rotr, wrapConstructor } from './utils.js';\n\n/** Round constants: first 32 bits of fractional parts of the cube roots of the first 64 primes 2..311). */\n// prettier-ignore\nconst SHA256_K = /* @__PURE__ */ new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\n\n/** Initial state: first 32 bits of fractional parts of the square roots of the first 8 primes 2..19. */\n// prettier-ignore\nconst SHA256_IV = /* @__PURE__ */ new Uint32Array([\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n]);\n\n/**\n * Temporary buffer, not used to store anything between runs.\n * Named this way because it matches specification.\n */\nconst SHA256_W = /* @__PURE__ */ new Uint32Array(64);\nexport class SHA256 extends HashMD<SHA256> {\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n protected A: number = SHA256_IV[0] | 0;\n protected B: number = SHA256_IV[1] | 0;\n protected C: number = SHA256_IV[2] | 0;\n protected D: number = SHA256_IV[3] | 0;\n protected E: number = SHA256_IV[4] | 0;\n protected F: number = SHA256_IV[5] | 0;\n protected G: number = SHA256_IV[6] | 0;\n protected H: number = SHA256_IV[7] | 0;\n\n constructor() {\n super(64, 32, 8, false);\n }\n protected get(): [number, number, number, number, number, number, number, number] {\n const { A, B, C, D, E, F, G, H } = this;\n return [A, B, C, D, E, F, G, H];\n }\n // prettier-ignore\n protected set(\n A: number, B: number, C: number, D: number, E: number, F: number, G: number, H: number\n ): void {\n this.A = A | 0;\n this.B = B | 0;\n this.C = C | 0;\n this.D = D | 0;\n this.E = E | 0;\n this.F = F | 0;\n this.G = G | 0;\n this.H = H | 0;\n }\n protected process(view: DataView, offset: number): void {\n // Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4) SHA256_W[i] = view.getUint32(offset, false);\n for (let i = 16; i < 64; i++) {\n const W15 = SHA256_W[i - 15];\n const W2 = SHA256_W[i - 2];\n const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ (W15 >>> 3);\n const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ (W2 >>> 10);\n SHA256_W[i] = (s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16]) | 0;\n }\n // Compression function main loop, 64 rounds\n let { A, B, C, D, E, F, G, H } = this;\n for (let i = 0; i < 64; i++) {\n const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25);\n const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22);\n const T2 = (sigma0 + Maj(A, B, C)) | 0;\n H = G;\n G = F;\n F = E;\n E = (D + T1) | 0;\n D = C;\n C = B;\n B = A;\n A = (T1 + T2) | 0;\n }\n // Add the compressed chunk to the current hash value\n A = (A + this.A) | 0;\n B = (B + this.B) | 0;\n C = (C + this.C) | 0;\n D = (D + this.D) | 0;\n E = (E + this.E) | 0;\n F = (F + this.F) | 0;\n G = (G + this.G) | 0;\n H = (H + this.H) | 0;\n this.set(A, B, C, D, E, F, G, H);\n }\n protected roundClean(): void {\n SHA256_W.fill(0);\n }\n destroy(): void {\n this.set(0, 0, 0, 0, 0, 0, 0, 0);\n this.buffer.fill(0);\n }\n}\n\n/**\n * Constants taken from https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf.\n */\nclass SHA224 extends SHA256 {\n protected A = 0xc1059ed8 | 0;\n protected B = 0x367cd507 | 0;\n protected C = 0x3070dd17 | 0;\n protected D = 0xf70e5939 | 0;\n protected E = 0xffc00b31 | 0;\n protected F = 0x68581511 | 0;\n protected G = 0x64f98fa7 | 0;\n protected H = 0xbefa4fa4 | 0;\n constructor() {\n super();\n this.outputLen = 28;\n }\n}\n\n/** SHA2-256 hash function */\nexport const sha256: CHash = /* @__PURE__ */ wrapConstructor(() => new SHA256());\n/** SHA2-224 hash function */\nexport const sha224: CHash = /* @__PURE__ */ wrapConstructor(() => new SHA224());\n","/*! scure-base - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n\nexport interface Coder<F, T> {\n encode(from: F): T;\n decode(to: T): F;\n}\n\nexport interface BytesCoder extends Coder<Uint8Array, string> {\n encode: (data: Uint8Array) => string;\n decode: (str: string) => Uint8Array;\n}\n\nfunction isBytes(a: unknown): a is Uint8Array {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n\nfunction isArrayOf(isString: boolean, arr: any[]) {\n if (!Array.isArray(arr)) return false;\n if (arr.length === 0) return true;\n if (isString) {\n return arr.every((item) => typeof item === 'string');\n } else {\n return arr.every((item) => Number.isSafeInteger(item));\n }\n}\n\n// no abytes: seems to have 10% slowdown. Why?!\n\nfunction afn(input: Function): input is Function {\n if (typeof input !== 'function') throw new Error('function expected');\n return true;\n}\n\nfunction astr(label: string, input: unknown): input is string {\n if (typeof input !== 'string') throw new Error(`${label}: string expected`);\n return true;\n}\n\nfunction anumber(n: number): void {\n if (!Number.isSafeInteger(n)) throw new Error(`invalid integer: ${n}`);\n}\nexport const assertNumber: typeof anumber = anumber;\n\nfunction aArr(input: any[]) {\n if (!Array.isArray(input)) throw new Error('array expected');\n}\nfunction astrArr(label: string, input: string[]) {\n if (!isArrayOf(true, input)) throw new Error(`${label}: array of strings expected`);\n}\nfunction anumArr(label: string, input: number[]) {\n if (!isArrayOf(false, input)) throw new Error(`${label}: array of numbers expected`);\n}\n\n// TODO: some recusive type inference so it would check correct order of input/output inside rest?\n// like <string, number>, <number, bytes>, <bytes, float>\ntype Chain = [Coder<any, any>, ...Coder<any, any>[]];\n// Extract info from Coder type\ntype Input<F> = F extends Coder<infer T, any> ? T : never;\ntype Output<F> = F extends Coder<any, infer T> ? T : never;\n// Generic function for arrays\ntype First<T> = T extends [infer U, ...any[]] ? U : never;\ntype Last<T> = T extends [...any[], infer U] ? U : never;\ntype Tail<T> = T extends [any, ...infer U] ? U : never;\n\ntype AsChain<C extends Chain, Rest = Tail<C>> = {\n // C[K] = Coder<Input<C[K]>, Input<Rest[k]>>\n [K in keyof C]: Coder<Input<C[K]>, Input<K extends keyof Rest ? Rest[K] : any>>;\n};\n\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction chain<T extends Chain & AsChain<T>>(...args: T): Coder<Input<First<T>>, Output<Last<T>>> {\n const id = (a: any) => a;\n // Wrap call in closure so JIT can inline calls\n const wrap = (a: any, b: any) => (c: any) => a(b(c));\n // Construct chain of args[-1].encode(args[-2].encode([...]))\n const encode = args.map((x) => x.encode).reduceRight(wrap, id);\n // Construct chain of args[0].decode(args[1].decode(...))\n const decode = args.map((x) => x.decode).reduce(wrap, id);\n return { encode, decode };\n}\n\n/**\n * Encodes integer radix representation to array of strings using alphabet and back.\n * Could also be array of strings.\n * @__NO_SIDE_EFFECTS__\n */\nfunction alphabet(letters: string | string[]): Coder<number[], string[]> {\n // mapping 1 to \"b\"\n const lettersA = typeof letters === 'string' ? letters.split('') : letters;\n const len = lettersA.length;\n astrArr('alphabet', lettersA);\n\n // mapping \"b\" to 1\n const indexes = new Map(lettersA.map((l, i) => [l, i]));\n return {\n encode: (digits: number[]) => {\n aArr(digits);\n return digits.map((i) => {\n if (!Number.isSafeInteger(i) || i < 0 || i >= len)\n throw new Error(\n `alphabet.encode: digit index outside alphabet \"${i}\". Allowed: ${letters}`\n );\n return lettersA[i]!;\n });\n },\n decode: (input: string[]): number[] => {\n aArr(input);\n return input.map((letter) => {\n astr('alphabet.decode', letter);\n const i = indexes.get(letter);\n if (i === undefined) throw new Error(`Unknown letter: \"${letter}\". Allowed: ${letters}`);\n return i;\n });\n },\n };\n}\n\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction join(separator = ''): Coder<string[], string> {\n astr('join', separator);\n return {\n encode: (from) => {\n astrArr('join.decode', from);\n return from.join(separator);\n },\n decode: (to) => {\n astr('join.decode', to);\n return to.split(separator);\n },\n };\n}\n\n/**\n * Pad strings array so it has integer number of bits\n * @__NO_SIDE_EFFECTS__\n */\nfunction padding(bits: number, chr = '='): Coder<string[], string[]> {\n anumber(bits);\n astr('padding', chr);\n return {\n encode(data: string[]): string[] {\n astrArr('padding.encode', data);\n while ((data.length * bits) % 8) data.push(chr);\n return data;\n },\n decode(input: string[]): string[] {\n astrArr('padding.decode', input);\n let end = input.length;\n if ((end * bits) % 8)\n throw new Error('padding: invalid, string should have whole number of bytes');\n for (; end > 0 && input[end - 1] === chr; end--) {\n const last = end - 1;\n const byte = last * bits;\n if (byte % 8 === 0) throw new Error('padding: invalid, string has too much padding');\n }\n return input.slice(0, end);\n },\n };\n}\n\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction normalize<T>(fn: (val: T) => T): Coder<T, T> {\n afn(fn);\n return { encode: (from: T) => from, decode: (to: T) => fn(to) };\n}\n\n/**\n * Slow: O(n^2) time complexity\n */\nfunction convertRadix(data: number[], from: number, to: number): number[] {\n // base 1 is impossible\n if (from < 2) throw new Error(`convertRadix: invalid from=${from}, base cannot be less than 2`);\n if (to < 2) throw new Error(`convertRadix: invalid to=${to}, base cannot be less than 2`);\n aArr(data);\n if (!data.length) return [];\n let pos = 0;\n const res = [];\n const digits = Array.from(data, (d) => {\n anumber(d);\n if (d < 0 || d >= from) throw new Error(`invalid integer: ${d}`);\n return d;\n });\n const dlen = digits.length;\n while (true) {\n let carry = 0;\n let done = true;\n for (let i = pos; i < dlen; i++) {\n const digit = digits[i]!;\n const fromCarry = from * carry;\n const digitBase = fromCarry + digit;\n if (\n !Number.isSafeInteger(digitBase) ||\n fromCarry / from !== carry ||\n digitBase - digit !== fromCarry\n ) {\n throw new Error('convertRadix: carry overflow');\n }\n const div = digitBase / to;\n carry = digitBase % to;\n const rounded = Math.floor(div);\n digits[i] = rounded;\n if (!Number.isSafeInteger(rounded) || rounded * to + carry !== digitBase)\n throw new Error('convertRadix: carry overflow');\n if (!done) continue;\n else if (!rounded) pos = i;\n else done = false;\n }\n res.push(carry);\n if (done) break;\n }\n for (let i = 0; i < data.length - 1 && data[i] === 0; i++) res.push(0);\n return res.reverse();\n}\n\nconst gcd = (a: number, b: number): number => (b === 0 ? a : gcd(b, a % b));\nconst radix2carry = /* @__NO_SIDE_EFFECTS__ */ (from: number, to: number) =>\n from + (to - gcd(from, to));\nconst powers: number[] = /* @__PURE__ */ (() => {\n let res = [];\n for (let i = 0; i < 40; i++) res.push(2 ** i);\n return res;\n})();\n/**\n * Implemented with numbers, because BigInt is 5x slower\n */\nfunction convertRadix2(data: number[], from: number, to: number, padding: boolean): number[] {\n aArr(data);\n if (from <= 0 || from > 32) throw new Error(`convertRadix2: wrong from=${from}`);\n if (to <= 0 || to > 32) throw new Error(`convertRadix2: wrong to=${to}`);\n if (radix2carry(from, to) > 32) {\n throw new Error(\n `convertRadix2: carry overflow from=${from} to=${to} carryBits=${radix2carry(from, to)}`\n );\n }\n let carry = 0;\n let pos = 0; // bitwise position in current element\n const max = powers[from]!;\n const mask = powers[to]! - 1;\n const res: number[] = [];\n for (const n of data) {\n anumber(n);\n if (n >= max) throw new Error(`convertRadix2: invalid data word=${n} from=${from}`);\n carry = (carry << from) | n;\n if (pos + from > 32) throw new Error(`convertRadix2: carry overflow pos=${pos} from=${from}`);\n pos += from;\n for (; pos >= to; pos -= to) res.push(((carry >> (pos - to)) & mask) >>> 0);\n const pow = powers[pos];\n if (pow === undefined) throw new Error('invalid carry');\n carry &= pow - 1; // clean carry, otherwise it will cause overflow\n }\n carry = (carry << (to - pos)) & mask;\n if (!padding && pos >= from) throw new Error('Excess padding');\n if (!padding && carry > 0) throw new Error(`Non-zero padding: ${carry}`);\n if (padding && pos > 0) res.push(carry >>> 0);\n return res;\n}\n\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction radix(num: number): Coder<Uint8Array, number[]> {\n anumber(num);\n const _256 = 2 ** 8;\n return {\n encode: (bytes: Uint8Array) => {\n if (!isBytes(bytes)) throw new Error('radix.encode input should be Uint8Array');\n return convertRadix(Array.from(bytes), _256, num);\n },\n decode: (digits: number[]) => {\n anumArr('radix.decode', digits);\n return Uint8Array.from(convertRadix(digits, num, _256));\n },\n };\n}\n\n/**\n * If both bases are power of same number (like `2**8 <-> 2**64`),\n * there is a linear algorithm. For now we have implementation for power-of-two bases only.\n * @__NO_SIDE_EFFECTS__\n */\nfunction radix2(bits: number, revPadding = false): Coder<Uint8Array, number[]> {\n anumber(bits);\n if (bits <= 0 || bits > 32) throw new Error('radix2: bits should be in (0..32]');\n if (radix2carry(8, bits) > 32 || radix2carry(bits, 8) > 32)\n throw new Error('radix2: carry overflow');\n return {\n encode: (bytes: Uint8Array) => {\n if (!isBytes(bytes)) throw new Error('radix2.encode input should be Uint8Array');\n return convertRadix2(Array.from(bytes), 8, bits, !revPadding);\n },\n decode: (digits: number[]) => {\n anumArr('radix2.decode', digits);\n return Uint8Array.from(convertRadix2(digits, bits, 8, revPadding));\n },\n };\n}\n\ntype ArgumentTypes<F extends Function> = F extends (...args: infer A) => any ? A : never;\nfunction unsafeWrapper<T extends (...args: any) => any>(fn: T) {\n afn(fn);\n return function (...args: ArgumentTypes<T>): ReturnType<T> | void {\n try {\n return fn.apply(null, args);\n } catch (e) {}\n };\n}\n\nfunction checksum(\n len: number,\n fn: (data: Uint8Array) => Uint8Array\n): Coder<Uint8Array, Uint8Array> {\n anumber(len);\n afn(fn);\n return {\n encode(data: Uint8Array) {\n if (!isBytes(data)) throw new Error('checksum.encode: input should be Uint8Array');\n const sum = fn(data).slice(0, len);\n const res = new Uint8Array(data.length + len);\n res.set(data);\n res.set(sum, data.length);\n return res;\n },\n decode(data: Uint8Array) {\n if (!isBytes(data)) throw new Error('checksum.decode: input should be Uint8Array');\n const payload = data.slice(0, -len);\n const oldChecksum = data.slice(-len);\n const newChecksum = fn(payload).slice(0, len);\n for (let i = 0; i < len; i++)\n if (newChecksum[i] !== oldChecksum[i]) throw new Error('Invalid checksum');\n return payload;\n },\n };\n}\n\n// prettier-ignore\nexport const utils: { alphabet: typeof alphabet; chain: typeof chain; checksum: typeof checksum; convertRadix: typeof convertRadix; convertRadix2: typeof convertRadix2; radix: typeof radix; radix2: typeof radix2; join: typeof join; padding: typeof padding; } = {\n alphabet, chain, checksum, convertRadix, convertRadix2, radix, radix2, join, padding,\n};\n\n// RFC 4648 aka RFC 3548\n// ---------------------\n\n/**\n * base16 encoding.\n */\nexport const base16: BytesCoder = chain(radix2(4), alphabet('0123456789ABCDEF'), join(''));\nexport const base32: BytesCoder = chain(\n radix2(5),\n alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'),\n padding(5),\n join('')\n);\nexport const base32nopad: BytesCoder = chain(\n radix2(5),\n alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'),\n join('')\n);\nexport const base32hex: BytesCoder = chain(\n radix2(5),\n alphabet('0123456789ABCDEFGHIJKLMNOPQRSTUV'),\n padding(5),\n join('')\n);\nexport const base32hexnopad: BytesCoder = chain(\n radix2(5),\n alphabet('0123456789ABCDEFGHIJKLMNOPQRSTUV'),\n join('')\n);\nexport const base32crockford: BytesCoder = chain(\n radix2(5),\n alphabet('0123456789ABCDEFGHJKMNPQRSTVWXYZ'),\n join(''),\n normalize((s: string) => s.toUpperCase().replace(/O/g, '0').replace(/[IL]/g, '1'))\n);\n/**\n * base64 with padding. For no padding, use `base64nopad`.\n * @example\n * const b = base64.decode('A951'); // Uint8Array.from([ 3, 222, 117 ])\n * base64.encode(b); // 'A951'\n */\nexport const base64: BytesCoder = chain(\n radix2(6),\n alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'),\n padding(6),\n join('')\n);\n/**\n * base64 without padding.\n */\nexport const base64nopad: BytesCoder = chain(\n radix2(6),\n alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'),\n join('')\n);\nexport const base64url: BytesCoder = chain(\n radix2(6),\n alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'),\n padding(6),\n join('')\n);\nexport const base64urlnopad: BytesCoder = chain(\n radix2(6),\n alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'),\n join('')\n);\n\n// base58 code\n// -----------\nconst genBase58 = /* @__NO_SIDE_EFFECTS__ */ (abc: string) =>\n chain(radix(58), alphabet(abc), join(''));\n\n/**\n * Base58: base64 without characters +, /, 0, O, I, l.\n * Quadratic (O(n^2)) - so, can't be used on large inputs.\n */\nexport const base58: BytesCoder = genBase58(\n '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n);\nexport const base58flickr: BytesCoder = genBase58(\n '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'\n);\nexport const base58xrp: BytesCoder = genBase58(\n 'rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz'\n);\n\n// Data len (index) -> encoded block len\nconst XMR_BLOCK_LEN = [0, 2, 3, 5, 6, 7, 9, 10, 11];\n\n/**\n * XMR version of base58.\n * Done in 8-byte blocks (which equals 11 chars in decoding). Last (non-full) block padded with '1' to size in XMR_BLOCK_LEN.\n * Block encoding significantly reduces quadratic complexity of base58.\n */\nexport const base58xmr: BytesCoder = {\n encode(data: Uint8Array) {\n let res = '';\n for (let i = 0; i < data.length; i += 8) {\n const block = data.subarray(i, i + 8);\n res += base58.encode(block).padStart(XMR_BLOCK_LEN[block.length]!, '1');\n }\n return res;\n },\n decode(str: string) {\n let res: number[] = [];\n for (let i = 0; i < str.length; i += 11) {\n const slice = str.slice(i, i + 11);\n const blockLen = XMR_BLOCK_LEN.indexOf(slice.length);\n const block = base58.decode(slice);\n for (let j = 0; j < block.length - blockLen; j++) {\n if (block[j] !== 0) throw new Error('base58xmr: wrong padding');\n }\n res = res.concat(Array.from(block.slice(block.length - blockLen)));\n }\n return Uint8Array.from(res);\n },\n};\n\nexport const createBase58check = (sha256: (data: Uint8Array) => Uint8Array): BytesCoder =>\n chain(\n checksum(4, (data) => sha256(sha256(data))),\n base58\n );\n\n/**\n * Use `createBase58check` instead.\n * @deprecated\n */\nexport const base58check: (sha256: (data: Uint8Array) => Uint8Array) => BytesCoder =\n createBase58check;\n\n// Bech32 code\n// -----------\nexport interface Bech32Decoded<Prefix extends string = string> {\n prefix: Prefix;\n words: number[];\n}\nexport interface Bech32DecodedWithArray<Prefix extends string = string> {\n prefix: Prefix;\n words: number[];\n bytes: Uint8Array;\n}\n\nconst BECH_ALPHABET: Coder<number[], string> = chain(\n alphabet('qpzry9x8gf2tvdw0s3jn54khce6mua7l'),\n join('')\n);\n\nconst POLYMOD_GENERATORS = [0x3b6a57b2, 0x26508e6d, 0x1ea119fa, 0x3d4233dd, 0x2a1462b3];\nfunction bech32Polymod(pre: number): number {\n const b = pre >> 25;\n let chk = (pre & 0x1ffffff) << 5;\n for (let i = 0; i < POLYMOD_GENERATORS.length; i++) {\n if (((b >> i) & 1) === 1) chk ^= POLYMOD_GENERATORS[i]!;\n }\n return chk;\n}\n\nfunction bechChecksum(prefix: string, words: number[], encodingConst = 1): string {\n const len = prefix.length;\n let chk = 1;\n for (let i = 0; i < len; i++) {\n const c = prefix.charCodeAt(i);\n if (c < 33 || c > 126) throw new Error(`Invalid prefix (${prefix})`);\n chk = bech32Polymod(chk) ^ (c >> 5);\n }\n chk = bech32Polymod(chk);\n for (let i = 0; i < len; i++) chk = bech32Polymod(chk) ^ (prefix.charCodeAt(i) & 0x1f);\n for (let v of words) chk = bech32Polymod(chk) ^ v;\n for (let i = 0; i < 6; i++) chk = bech32Polymod(chk);\n chk ^= encodingConst;\n return BECH_ALPHABET.encode(convertRadix2([chk % powers[30]!], 30, 5, false));\n}\n\nexport interface Bech32 {\n encode<Prefix extends string>(\n prefix: Prefix,\n words: number[] | Uint8Array,\n limit?: number | false\n ): `${Lowercase<Prefix>}1${string}`;\n decode<Prefix extends string>(\n str: `${Prefix}1${string}`,\n limit?: number | false\n ): Bech32Decoded<Prefix>;\n encodeFromBytes(prefix: string, bytes: Uint8Array): string;\n decodeToBytes(str: string): Bech32DecodedWithArray;\n decodeUnsafe(str: string, limit?: number | false): void | Bech32Decoded<string>;\n fromWords(to: number[]): Uint8Array;\n fromWordsUnsafe(to: number[]): void | Uint8Array;\n toWords(from: Uint8Array): number[];\n}\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction genBech32(encoding: 'bech32' | 'bech32m'): Bech32 {\n const ENCODING_CONST = encoding === 'bech32' ? 1 : 0x2bc830a3;\n const _words = radix2(5);\n const fromWords = _words.decode;\n const toWords = _words.encode;\n const fromWordsUnsafe = unsafeWrapper(fromWords);\n\n function encode<Prefix extends string>(\n prefix: Prefix,\n words: number[] | Uint8Array,\n limit: number | false = 90\n ): `${Lowercase<Prefix>}1${string}` {\n astr('bech32.encode prefix', prefix);\n if (isBytes(words)) words = Array.from(words);\n anumArr('bech32.encode', words);\n const plen = prefix.length;\n if (plen === 0) throw new TypeError(`Invalid prefix length ${plen}`);\n const actualLength = plen + 7 + words.length;\n if (limit !== false && actualLength > limit)\n throw new TypeError(`Length ${actualLength} exceeds limit ${limit}`);\n const lowered = prefix.toLowerCase();\n const sum = bechChecksum(lowered, words, ENCODING_CONST);\n return `${lowered}1${BECH_ALPHABET.encode(words)}${sum}` as `${Lowercase<Prefix>}1${string}`;\n }\n\n function decode<Prefix extends string>(\n str: `${Prefix}1${string}`,\n limit?: number | false\n ): Bech32Decoded<Prefix>;\n function decode(str: string, limit?: number | false): Bech32Decoded;\n function decode(str: string, limit: number | false = 90): Bech32Decoded {\n astr('bech32.decode input', str);\n const slen = str.length;\n if (slen < 8 || (limit !== false && slen > limit))\n throw new TypeError(`invalid string length: ${slen} (${str}). Expected (8..${limit})`);\n // don't allow mixed case\n const lowered = str.toLowerCase();\n if (str !== lowered && str !== str.toUpperCase())\n throw new Error(`String must be lowercase or uppercase`);\n const sepIndex = lowered.lastIndexOf('1');\n if (sepIndex === 0 || sepIndex === -1)\n throw new Error(`Letter \"1\" must be present between prefix and data only`);\n const prefix = lowered.slice(0, sepIndex);\n const data = lowered.slice(sepIndex + 1);\n if (data.length < 6) throw new Error('Data must be at least 6 characters long');\n const words = BECH_ALPHABET.decode(data).slice(0, -6);\n const sum = bechChecksum(prefix, words, ENCODING_CONST);\n if (!data.endsWith(sum)) throw new Error(`Invalid checksum in ${str}: expected \"${sum}\"`);\n return { prefix, words };\n }\n\n const decodeUnsafe = unsafeWrapper(decode);\n\n function decodeToBytes(str: string): Bech32DecodedWithArray {\n const { prefix, words } = decode(str, false);\n return { prefix, words, bytes: fromWords(words) };\n }\n\n function encodeFromBytes(prefix: string, bytes: Uint8Array) {\n return encode(prefix, toWords(bytes));\n }\n\n return {\n encode,\n decode,\n encodeFromBytes,\n decodeToBytes,\n decodeUnsafe,\n fromWords,\n fromWordsUnsafe,\n toWords,\n };\n}\n\n/**\n * Low-level bech32 operations. Operates on words.\n */\nexport const bech32: Bech32 = genBech32('bech32');\nexport const bech32m: Bech32 = genBech32('bech32m');\n\ndeclare const TextEncoder: any;\ndeclare const TextDecoder: any;\n\n/**\n * UTF-8-to-byte decoder. Uses built-in TextDecoder / TextEncoder.\n * @example\n * const b = utf8.decode(\"hey\"); // => new Uint8Array([ 104, 101, 121 ])\n * const str = utf8.encode(b); // \"hey\"\n */\nexport const utf8: BytesCoder = {\n encode: (data) => new TextDecoder().decode(data),\n decode: (str) => new TextEncoder().encode(str),\n};\n\n/**\n * hex string decoder.\n * @example\n * const b = hex.decode(\"0102ff\"); // => new Uint8Array([ 1, 2, 255 ])\n * const str = hex.encode(b); // \"0102ff\"\n */\nexport const hex: BytesCoder = chain(\n radix2(4),\n alphabet('0123456789abcdef'),\n join(''),\n normalize((s: string) => {\n if (typeof s !== 'string' || s.length % 2 !== 0)\n throw new TypeError(`hex.decode: expected string, got ${typeof s} with length ${s.length}`);\n return s.toLowerCase();\n })\n);\n\n// prettier-ignore\nconst CODERS: { utf8: BytesCoder; hex: BytesCoder; base16: BytesCoder; base32: BytesCoder; base64: BytesCoder; base64url: BytesCoder; base58: BytesCoder; base58xmr: BytesCoder; } = {\n utf8, hex, base16, base32, base64, base64url, base58, base58xmr\n};\ntype CoderType = keyof typeof CODERS;\nconst coderTypeError =\n 'Invalid encoding type. Available types: utf8, hex, base16, base32, base64, base64url, base58, base58xmr';\n\nexport const bytesToString = (type: CoderType, bytes: Uint8Array): string => {\n if (typeof type !== 'string' || !CODERS.hasOwnProperty(type)) throw new TypeError(coderTypeError);\n if (!isBytes(bytes)) throw new TypeError('bytesToString() expects Uint8Array');\n return CODERS[type].encode(bytes);\n};\nexport const str: (type: CoderType, bytes: Uint8Array) => string = bytesToString; // as in python, but for bytes only\n\nexport const stringToBytes = (type: CoderType, str: string): Uint8Array => {\n if (!CODERS.hasOwnProperty(type)) throw new TypeError(coderTypeError);\n if (typeof str !== 'string') throw new TypeError('stringToBytes() expects string');\n return CODERS[type].decode(str);\n};\nexport const bytes: (type: CoderType, str: string) => Uint8Array = stringToBytes;\n","import { assert, assertInstanceOf, assertTypeOf } from \"@fleet-sdk/common\";\nimport type { BytesCoder } from \"../types\";\n\nconst HEXES = Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, \"0\"));\n\nconst HexChar = {\n ZERO: 48, // 0\n NINE: 57, // 9\n A_UP: 65, // A\n F_UP: 70, // F\n A_LO: 97, // a\n F_LO: 102 // f\n} as const;\n\nfunction bytesToHex(bytes: Uint8Array): string {\n assertInstanceOf(bytes, Uint8Array);\n\n let hex = \"\";\n for (let i = 0, len = bytes.length; i < len; i++) {\n hex += HEXES[bytes[i]];\n }\n\n return hex;\n}\n\nfunction hexToBytes(hex: string): Uint8Array {\n assertTypeOf(hex, \"string\");\n assert(hex.length % 2 === 0, \"Invalid hex padding.\");\n\n const len = hex.length / 2;\n const bytes = new Uint8Array(len);\n for (let i = 0, j = 0; i < len; i++) {\n const n1 = charCodeToBase16(hex.charCodeAt(j++));\n const n2 = charCodeToBase16(hex.charCodeAt(j++));\n bytes[i] = n1 * 16 + n2;\n }\n\n return bytes;\n}\n\nfunction charCodeToBase16(char: number) {\n if (char >= HexChar.ZERO && char <= HexChar.NINE) return char - HexChar.ZERO;\n if (char >= HexChar.A_UP && char <= HexChar.F_UP) return char - (HexChar.A_UP - 10);\n if (char >= HexChar.A_LO && char <= HexChar.F_LO) return char - (HexChar.A_LO - 10);\n\n throw new Error(\"Invalid byte sequence.\");\n}\n\nexport const hex: BytesCoder = {\n encode: bytesToHex,\n decode: hexToBytes\n};\n","import {\n base58check as base58checkCoder,\n base58 as base58Coder,\n base64 as base64Coder\n} from \"@scure/base\";\nimport { sha256 } from \"../hashes\";\nimport type { BytesCoder } from \"../types\";\n\nexport const base58check = base58checkCoder(sha256);\nexport const base58 = base58Coder as BytesCoder;\nexport const base64 = base64Coder as BytesCoder;\n\nexport { hex } from \"./hex\";\nexport { utf8 } from \"./utf8\";\nexport { bigintBE } from \"./bigintBE\";\n","import { blake2b as _blake2b } from \"@noble/hashes/blake2b\";\nimport { sha256 as _sha256 } from \"@noble/hashes/sha256\";\nimport { hex } from \"./coders\";\nimport type { ByteInput } from \"./types\";\n\nexport type Blake2b256Options = {\n key?: ByteInput;\n salt?: ByteInput;\n personalization?: ByteInput;\n};\n\nexport type Blake2bOptions = Blake2b256Options & {\n dkLen?: number;\n};\n\nexport function ensureBytes(input: ByteInput): Uint8Array {\n return typeof input === \"string\" ? hex.decode(input) : input;\n}\n\nexport function blake2b(message: ByteInput, options?: Blake2bOptions): Uint8Array {\n if (options?.key) options.key = ensureBytes(options.key);\n if (options?.salt) options.salt = ensureBytes(options.salt);\n if (options?.personalization)\n options.personalization = ensureBytes(options.personalization);\n\n return _blake2b(ensureBytes(message), options);\n}\n\nexport function blake2b256(message: ByteInput, options?: Blake2b256Options): Uint8Array {\n return blake2b(ensureBytes(message), { dkLen: 32, ...options });\n}\n\nexport function sha256(message: ByteInput): Uint8Array {\n return _sha256(ensureBytes(message));\n}\n","import { some } from \"@fleet-sdk/common\";\n\nexport interface ParserLike {\n parse<T>(text: string): T;\n stringify<T>(value: T): string;\n}\n\nexport type Route = { base: string; path: string; query?: Record<string, unknown> };\nexport type URLLike = string | Route;\nexport type FallbackRetryOptions = { fallbacks?: URLLike[] } & RetryOptions;\n\nexport type FetchOptions = {\n parser?: ParserLike;\n base?: string;\n query?: Record<string, unknown>;\n retry?: FallbackRetryOptions;\n httpOptions?: RequestInit;\n};\n\n// https://developer.mozilla.org/en-US/docs/Web/HTTP/Status\nconst RETRY_STATUS_CODES = new Set([\n 408, // Request Timeout\n 409, // Conflict\n 425, // Too Early (Experimental)\n 429, // Too Many Requests\n 500, // Internal Server Error\n 502, // Bad Gateway\n 503, // Service Unavailable\n 504 // Gateway Timeout\n]);\n\nexport async function request<T>(path: string, opt?: Partial<FetchOptions>): Promise<T> {\n const url = buildURL(path, opt?.query, opt?.base);\n\n let response: Response;\n if (opt?.retry) {\n const routes = some(opt.retry.fallbacks) ? [url, ...opt.retry.fallbacks] : [url];\n const attempts = opt.retry.attempts;\n response = await exponentialRetry(async (r) => {\n const response = await fetch(resolveUrl(routes, attempts - r), opt.httpOptions);\n if (RETRY_STATUS_CODES.has(response.status)) throw new Error(response.statusText);\n\n return response;\n }, opt.retry);\n } else {\n response = await fetch(url, opt?.httpOptions);\n }\n\n return (opt?.parser || JSON).parse(await response.text());\n}\n\nfunction resolveUrl(routes: URLLike[], attempt: number) {\n const route = routes[attempt % routes.length];\n return typeof route === \"string\"\n ? route\n : buildURL(route.path, route.query, route.base).toString();\n}\n\nfunction buildURL(path: string, query?: Record<string, unknown>, base?: string) {\n if (!base && !query) return path;\n\n const url = new URL(path, base);\n if (some(query)) {\n for (const key in query) url.searchParams.append(key, String(query[key]));\n }\n\n return url.toString();\n}\n\nexport type RetryOptions = {\n attempts: number;\n delay: number;\n};\n\n/**\n * Retries an asynchronous operation a specified number of times with a delay\n * growing exponentially between each attempt.\n * @param operation - The asynchronous operation to retry.\n * @param options - The retry options.\n * @returns A promise that resolves to the result of the operation, or undefined\n * if all attempts fail.\n */\nexport async function exponentialRetry<T>(\n operation: (remainingAttempts: number) => Promise<T>,\n { attempts, delay }: RetryOptions\n): Promise<T> {\n try {\n return await operation(attempts);\n } catch (e) {\n if (attempts > 0) {\n await new Promise((resolve) => setTimeout(resolve, delay));\n return exponentialRetry(operation, { attempts: attempts - 1, delay: delay * 2 });\n }\n\n throw e;\n }\n}\n","import {\n BlockchainProviderError,\n clearUndefined,\n ensureDefaults,\n isEmpty,\n some\n} from \"@fleet-sdk/common\";\nimport type { FallbackRetryOptions, ParserLike } from \"./networking\";\nimport { request } from \"./networking\";\n\nconst OP_NAME_REGEX = /(query|mutation)\\s?([\\w\\-_]+)?/;\nconst DEFAULT_HEADERS = {\n \"content-type\": \"application/json; charset=utf-8\",\n accept: \"application/graphql-response+json, application/json\"\n};\n\nexport type GraphQLVariables = Record<string, unknown> | null;\n\nexport interface GraphQLError {\n message: string;\n}\n\nexport interface GraphQLSuccessResponse<T = unknown> {\n data: T;\n errors: null;\n}\n\nexport interface GraphQLErrorResponse {\n data: null;\n errors: GraphQLError[];\n}\n\nexport type GraphQLResponse<T = unknown> =\n | GraphQLSuccessResponse<T>\n | GraphQLErrorResponse;\n\nexport type GraphQLOperation<R extends GraphQLResponse, V extends GraphQLVariables> = (\n variables?: V,\n url?: string\n) => Promise<R>;\n\nexport type GraphQLRequiredUrlOperation<\n R extends GraphQLResponse,\n V extends GraphQLVariables\n> = (variables: V | undefined, url: string) => Promise<R>;\n\ninterface RequestParams {\n operationName?: string | null;\n query: string;\n variables?: Record<string, unknown> | null;\n}\n\nexport interface GraphQLRequestOptions {\n url?: string;\n parser?: ParserLike;\n retry?: FallbackRetryOptions;\n throwOnNonNetworkErrors?: boolean;\n httpOptions?: Omit<RequestInit, \"body\" | \"method\">;\n}\n\nexport function createGqlOperation<R, V extends GraphQLVariables = GraphQLVariables>(\n query: string,\n options: GraphQLRequestOptions & { throwOnNonNetworkErrors: true }\n): GraphQLOperation<GraphQLSuccessResponse<R>, V>;\nexport function createGqlOperation<R, V extends GraphQLVariables = GraphQLVariables>(\n query: string,\n options?: GraphQLRequestOptions & { url: undefined }\n): GraphQLRequiredUrlOperation<GraphQLResponse<R>, V>;\nexport function createGqlOperation<R, V extends GraphQLVariables = GraphQLVariables>(\n query: string,\n options: GraphQLRequestOptions & { url: undefined; throwOnNonNetworkErrors: true }\n): GraphQLRequiredUrlOperation<GraphQLSuccessResponse<R>, V>;\nexport function createGqlOperation<R, V extends GraphQLVariables = GraphQLVariables>(\n query: string,\n options: GraphQLRequestOptions\n): GraphQLOperation<GraphQLResponse<R>, V>;\nexport function createGqlOperation<R, V extends GraphQLVariables = GraphQLVariables>(\n query: string,\n options?: GraphQLRequestOptions\n):\n | GraphQLOperation<GraphQLResponse<R>, V>\n | GraphQLRequiredUrlOperation<GraphQLResponse<R>, V> {\n return async (variables?: V, url?: string): Promise<GraphQLResponse<R>> => {\n url = url ?? options?.url;\n if (!url) throw new Error(\"URL is required\");\n\n const response = await request<GraphQLResponse<R>>(url, {\n ...options,\n httpOptions: {\n ...options?.httpOptions,\n method: \"POST\",\n headers: ensureDefaults(options?.httpOptions?.headers, DEFAULT_HEADERS),\n body: (options?.parser ?? JSON).stringify({\n operationName: getOpName(query),\n query,\n variables: variables ? clearUndefined(variables) : undefined\n } as RequestParams)\n }\n });\n\n if (\n options?.throwOnNonNetworkErrors &&\n some(response.errors) &&\n isEmpty(response.data)\n ) {\n const msg = response.errors[0].message;\n throw new BlockchainProviderError(msg, { cause: response.errors });\n }\n\n return response;\n };\n}\n\nexport function gql(query: TemplateStringsArray): string {\n return query[0];\n}\n\nexport function getOpName(query: string): string | undefined {\n return OP_NAME_REGEX.exec(query)?.at(2);\n}\n","const B = [\n \"$boxIds: [String!] $ergoTrees: [String!] $ergoTreeTemplateHash: String $tokenId: String $skip: Int $take: Int\",\n \"boxIds: $boxIds ergoTrees: $ergoTrees ergoTreeTemplateHash: $ergoTreeTemplateHash tokenId: $tokenId skip: $skip take: $take\",\n \"boxId transactionId index value creationHeight ergoTree assets { tokenId amount } additionalRegisters\"\n];\n\nexport const CONF_BOXES_QUERY = `query boxes($spent: Boolean! ${B[0]}) { boxes(spent: $spent ${B[1]}) { ${B[2]} beingSpent } }`;\nexport const UNCONF_BOXES_QUERY = `query boxes(${B[0]}) { mempool { boxes(${B[1]}) { ${B[2]} beingSpent } } }`;\nexport const ALL_BOXES_QUERY = `query boxes($spent: Boolean! ${B[0]}) { boxes(spent: $spent ${B[1]}) { ${B[2]} beingSpent } mempool { boxes(${B[1]}) { ${B[2]} beingSpent } } }`;\n\nexport const HEADERS_QUERY =\n \"query blockHeaders($take: Int) { blockHeaders(take: $take) {headerId timestamp version adProofsRoot stateRoot transactionsRoot nBits extensionHash powSolutions height difficulty parentId votes } }\";\nexport const CHECK_TX_MUTATION =\n \"mutation checkTransaction($signedTransaction: SignedTransaction!) { checkTransaction(signedTransaction: $signedTransaction) }\";\nexport const SEND_TX_MUTATION =\n \"mutation submitTransaction($signedTransaction: SignedTransaction!) { submitTransaction(signedTransaction: $signedTransaction) }\";\n\nconst T = [\n \"$addresses: [String!], $transactionIds: [String!], $skip: Int, $take: Int\",\n \"addresses: $addresses, transactionIds: $transactionIds, skip: $skip, take: $take\",\n `transactionId timestamp inputs { proofBytes extension index box { ${B[2]} } } dataInputs { boxId }`\n];\nexport const CONF_TX_QUERY = `query confirmedTransactions(${T[0]} $onlyRelevantOutputs: Boolean) { transactions(${T[1]}) { ${T[2]} outputs(relevantOnly: $onlyRelevantOutputs) { ${B[2]} } inclusionHeight headerId index } }`;\nexport const UNCONF_TX_QUERY = `query unconfirmedTransactions(${T[0]}) { mempool { transactions(${T[1]}) { ${T[2]} outputs { ${B[2]} } } } }`;\n","import type {\n Box as GQLBox,\n QueryBoxesArgs,\n Header,\n QueryBlockHeadersArgs,\n Transaction,\n QueryTransactionsArgs,\n MempoolTransactionsArgs,\n UnconfirmedTransaction,\n UnconfirmedBox as GQLUnconfirmedBox\n} from \"@ergo-graphql/types\";\nimport {\n type Base58String,\n type BlockHeader,\n type HexString,\n type SignedTransaction,\n ensureDefaults,\n isEmpty,\n isUndefined,\n NotSupportedError,\n orderBy,\n some,\n uniq,\n uniqBy,\n chunk\n} from \"@fleet-sdk/common\";\nimport { ErgoAddress } from \"@fleet-sdk/core\";\nimport { hex } from \"@fleet-sdk/crypto\";\nimport type {\n BoxQuery,\n BoxWhere,\n ChainProviderBox,\n ChainProviderConfirmedTransaction,\n ChainProviderUnconfirmedTransaction,\n HeaderQuery,\n IBlockchainProvider,\n TransactionEvaluationResult,\n TransactionQuery,\n TransactionReductionResult,\n ConfirmedTransactionWhere,\n UnconfirmedTransactionWhere\n} from \"../types/blockchainProvider\";\nimport {\n type GraphQLOperation,\n type GraphQLRequestOptions,\n type GraphQLSuccessResponse,\n type GraphQLVariables,\n createGqlOperation\n} from \"../utils\";\nimport {\n ALL_BOXES_QUERY,\n CHECK_TX_MUTATION,\n CONF_BOXES_QUERY,\n CONF_TX_QUERY,\n HEADERS_QUERY,\n SEND_TX_MUTATION,\n UNCONF_BOXES_QUERY,\n UNCONF_TX_QUERY\n} from \"./queries\";\n\ntype SkipAndTake = { skip?: number; take?: number };\n\nexport type GraphQLBoxWhere = BoxWhere & {\n /** Base16-encoded ErgoTrees */\n ergoTrees?: HexString[];\n\n /** Base58-encoded addresses or `ErgoAddress` objects */\n addresses?: (Base58String | ErgoAddress)[];\n};\n\nexport type GraphQLConfirmedTransactionWhere = ConfirmedTransactionWhere & {\n addresses?: (Base58String | ErgoAddress)[];\n ergoTrees?: HexString[];\n};\n\nexport type GraphQLUnconfirmedTransactionWhere = UnconfirmedTransactionWhere & {\n addresses?: (Base58String | ErgoAddress)[];\n ergoTrees?: HexString[];\n};\n\nexport type GraphQLBoxQuery = BoxQuery<GraphQLBoxWhere>;\nexport type ErgoGraphQLRequestOptions = Omit<\n GraphQLRequestOptions,\n \"throwOnNonNetworkErrors\"\n>;\n\ntype ConfirmedBoxesResponse = { boxes: GQLBox[] };\ntype UnconfirmedBoxesResponse = { mempool: { boxes: GQLBox[] } };\ntype CombinedBoxesResponse = ConfirmedBoxesResponse & UnconfirmedBoxesResponse;\ntype UnconfirmedTxResponse = { mempool: { transactions: UnconfirmedTransaction[] } };\ntype ConfirmedTxResponse = { transactions: Transaction[] };\ntype BlockHeadersResponse = { blockHeaders: Header[] };\ntype CheckTransactionResponse = { checkTransaction: string };\ntype TransactionSubmissionResponse = { submitTransaction: string };\ntype SignedTxArgsResp = { signedTransaction: SignedTransaction };\n\ntype GraphQLThrowableOptions = ErgoGraphQLRequestOptions & {\n throwOnNonNetworkErrors: true;\n};\n\ntype OP<R, V extends GraphQLVariables> = GraphQLOperation<GraphQLSuccessResponse<R>, V>;\ntype BiMapper<T> = (value: string) => T;\n\nconst PAGE_SIZE = 50;\nconst MAX_ARGS = 20;\n\nexport class ErgoGraphQLProvider<I = bigint> implements IBlockchainProvider<I> {\n #options: GraphQLThrowableOptions;\n #biMapper: BiMapper<I>;\n\n #getConfirmedBoxes: OP<ConfirmedBoxesResponse, QueryBoxesArgs>;\n #getUnconfirmedBoxes: OP<UnconfirmedBoxesResponse, QueryBoxesArgs>;\n #getAllBoxes: OP<CombinedBoxesResponse, QueryBoxesArgs>;\n #getConfirmedTransactions: OP<ConfirmedTxResponse, QueryTransactionsArgs>;\n #getUnconfirmedTransactions: OP<UnconfirmedTxResponse, MempoolTransactionsArgs>;\n #checkTransaction: OP<CheckTransactionResponse, SignedTxArgsResp>;\n #sendTransaction: OP<TransactionSubmissionResponse, SignedTxArgsResp>;\n #getHeaders!: OP<BlockHeadersResponse, QueryBlockHeadersArgs>;\n\n constructor(url: string);\n constructor(options: ErgoGraphQLRequestOptions);\n constructor(optOrUrl: ErgoGraphQLRequestOptions | string) {\n this.#biMapper = (value) => BigInt(value) as I;\n this.#options = {\n ...(isRequestParam(optOrUrl) ? optOrUrl : { url: optOrUrl }),\n throwOnNonNetworkErrors: true\n };\n\n this.#getConfirmedBoxes = this.createOperation(CONF_BOXES_QUERY);\n this.#getUnconfirmedBoxes = this.createOperation(UNCONF_BOXES_QUERY);\n this.#getAllBoxes = this.createOperation(ALL_BOXES_QUERY);\n this.#getConfirmedTransactions = this.createOperation(CONF_TX_QUERY);\n this.#getUnconfirmedTransactions = this.createOperation(UNCONF_TX_QUERY);\n this.#checkTransaction = this.createOperation(CHECK_TX_MUTATION);\n this.#sendTransaction = this.createOperation(SEND_TX_MUTATION);\n this.#getHeaders = this.createOperation(HEADERS_QUERY);\n }\n\n #fetchBoxes(args: QueryBoxesArgs, inclConf: boolean, inclUnconf: boolean) {\n return inclConf && inclUnconf\n ? this.#getAllBoxes(args)\n : inclUnconf\n ? this.#getUnconfirmedBoxes(args)\n : this.#getConfirmedBoxes(args);\n }\n\n setUrl(url: string): ErgoGraphQLProvider<I> {\n this.#options.url = url;\n return this;\n }\n\n setBigIntMapper<M>(mapper: BiMapper<M>): ErgoGraphQLProvider<M> {\n this.#biMapper = mapper as unknown as BiMapper<I>;\n return this as unknown as ErgoGraphQLProvider<M>;\n }\n\n async *streamBoxes(\n query: GraphQLBoxQuery & SkipAndTake\n ): AsyncGenerator<ChainProviderBox<I>[]> {\n if (isEmpty(query.where)) {\n throw new Error(\"Cannot fetch unspent boxes without a where clause.\");\n }\n\n const notBeingSpent = (box: GQLBox) => !box.beingSpent;\n const returnedBoxIds = new Set<string>();\n const { from, take } = query;\n const pageSize = take ?? PAGE_SIZE;\n const queries = buildGqlBoxQueries(query);\n const isMempoolAware = from !== \"blockchain\";\n\n for (const query of queries) {\n let inclChain = from !== \"mempool\";\n let inclPool = from !== \"blockchain\";\n\n while (inclChain || inclPool) {\n const { data } = await this.#fetchBoxes(query, inclChain, inclPool);\n let boxes: ChainProviderBox<I>[] = [];\n\n if (inclChain && hasConfirmed(data)) {\n if (some(data.boxes)) {\n const confirmedBoxes = (\n isMempoolAware ? data.boxes.filter(notBeingSpent) : data.boxes\n ).map((b) => mapConfirmedBox(b, this.#biMapper));\n\n boxes = boxes.concat(confirmedBoxes);\n }\n\n inclChain = data.boxes.length === pageSize;\n }\n\n if (isMempoolAware && hasMempool(data)) {\n if (some(data.mempool.boxes)) {\n const mempoolBoxes = data.mempool.boxes\n .filter(notBeingSpent)\n .map((b) => mapUnconfirmedBox(b, this.#biMapper));\n boxes = boxes.concat(mempoolBoxes);\n }\n\n inclPool = data.mempool.boxes.length === pageSize;\n }\n\n if (some(boxes)) {\n // boxes can be moved from the mempool to the blockchain while streaming,\n // so we need to filter out boxes that have already been returned.\n if (boxes.some((box) => returnedBoxIds.has(box.boxId))) {\n boxes = boxes.filter((b) => !returnedBoxIds.has(b.boxId));\n }\n\n if (some(boxes)) {\n boxes = uniqBy(boxes, (box) => box.boxId);\n for (const box of boxes) returnedBoxIds.add(box.boxId);\n yield boxes;\n }\n }\n\n if (inclChain || inclPool) query.skip += pageSize;\n }\n }\n }\n\n async getBoxes(query: GraphQLBoxQuery): Promise<ChainProviderBox<I>[]> {\n const boxes: ChainProviderBox<I>[][] = [];\n for await (const chunk of this.streamBoxes(query)) boxes.push(chunk);\n return orderBy(boxes.flat(), (box) => box.creationHeight);\n }\n\n async *streamUnconfirmedTransactions(\n query: TransactionQuery<GraphQLUnconfirmedTransactionWhere> & SkipAndTake\n ): AsyncGenerator<ChainProviderUnconfirmedTransaction<I>[]> {\n const pageSize = query.take ?? PAGE_SIZE;\n const queries = buildGqlUnconfirmedTxQueries(query);\n\n for (const query of queries) {\n let keepFetching = true;\n while (keepFetching) {\n const response = await this.#getUnconfirmedTransactions(query);\n if (some(response.data?.mempool?.transactions)) {\n yield response.data.mempool.transactions.map((t) =>\n mapUnconfirmedTransaction(t, this.#biMapper)\n );\n }\n\n keepFetching = response.data?.mempool?.transactions?.length === pageSize;\n if (keepFetching) query.skip += pageSize;\n }\n }\n }\n\n async getUnconfirmedTransactions(\n query: TransactionQuery<GraphQLUnconfirmedTransactionWhere>\n ): Promise<ChainProviderUnconfirmedTransaction<I>[]> {\n const transactions: ChainProviderUnconfirmedTransaction<I>[][] = [];\n for await (const chunk of this.streamUnconfirmedTransactions(query)) {\n transactions.push(chunk);\n }\n\n return transactions.flat();\n }\n\n async *streamConfirmedTransactions(\n query: TransactionQuery<GraphQLConfirmedTransactionWhere> & SkipAndTake\n ): AsyncGenerator<ChainProviderConfirmedTransaction<I>[]> {\n const pageSize = query.take ?? PAGE_SIZE;\n const queries = buildGqlConfirmedTxQueries(query);\n\n for (const query of queries) {\n let keepFetching = true;\n while (keepFetching) {\n const response = await this.#getConfirmedTransactions(query);\n if (some(response.data?.transactions)) {\n yield response.data.transactions.map((t) =>\n mapConfirmedTransaction(t, this.#biMapper)\n );\n }\n\n keepFetching = response.data?.transactions?.length === pageSize;\n if (keepFetching) query.skip += pageSize;\n }\n }\n }\n\n async getConfirmedTransactions(\n query: TransactionQuery<GraphQLConfirmedTransactionWhere>\n ): Promise<ChainProviderConfirmedTransaction<I>[]> {\n const transactions: ChainProviderConfirmedTransaction<I>[][] = [];\n for await (const chunk of this.streamConfirmedTransactions(query)) {\n transactions.push(chunk);\n }\n\n return transactions.flat();\n }\n\n async getHeaders(query: HeaderQuery): Promise<BlockHeader[]> {\n const response = await this.#getHeaders(query);\n\n return (\n response.data?.blockHeaders.map((h) => ({\n ...h,\n id: h.headerId,\n timestamp: Number(h.timestamp),\n nBits: Number(h.nBits),\n votes: hex.encode(Uint8Array.from(h.votes))\n })) ?? []\n );\n }\n\n createOperation<R, V extends GraphQLVariables = GraphQLVariables>(\n query: string,\n options?: Partial<ErgoGraphQLRequestOptions>\n ): GraphQLOperation<GraphQLSuccessResponse<R>, V> {\n const opt = ensureDefaults(options, this.#options);\n opt.throwOnNonNetworkErrors = true;\n\n return createGqlOperation(query, opt);\n }\n\n async checkTransaction(\n signedTransaction: SignedTransaction\n ): Promise<TransactionEvaluationResult> {\n try {\n const response = await this.#checkTransaction({ signedTransaction });\n return { success: true, transactionId: response.data.checkTransaction };\n } catch (e) {\n return { success: false, message: (e as Error).message };\n }\n }\n\n async submitTransaction(\n signedTransaction: SignedTransaction\n ): Promise<TransactionEvaluationResult> {\n try {\n const response = await this.#sendTransaction({ signedTransaction });\n return { success: true, transactionId: response.data.submitTransaction };\n } catch (e) {\n return { success: false, message: (e as Error).message };\n }\n }\n\n reduceTransaction(): Promise<TransactionReductionResult> {\n throw new NotSupportedError(\"Transaction reducing is not supported by ergo-graphql.\");\n }\n}\n\nfunction buildGqlBoxQueries(query: GraphQLBoxQuery & SkipAndTake) {\n const ergoTrees = uniq(\n [\n merge(query.where.ergoTrees, query.where.ergoTree) ?? [],\n merge(query.where.addresses, query.where.address)?.map((a) =>\n typeof a === \"string\" ? ErgoAddress.decode(a).ergoTree : a.ergoTree\n ) ?? []\n ].flat()\n );\n\n const baseQuery = {\n spent: false,\n boxIds: query.where.boxId ? [query.where.boxId] : undefined,\n ergoTreeTemplateHash: query.where.templateHash,\n tokenId: query.where.tokenId,\n skip: query.skip ?? 0,\n take: query.take ?? PAGE_SIZE\n };\n\n return isEmpty(ergoTrees)\n ? [baseQuery]\n : chunk(ergoTrees, MAX_ARGS).map((chunk) => ({ ergoTrees: chunk, ...baseQuery }));\n}\n\nfunction buildGqlUnconfirmedTxQueries(\n query: TransactionQuery<GraphQLUnconfirmedTransactionWhere> & SkipAndTake\n) {\n const addresses = uniq(\n [\n merge(query.where.addresses, query.where.address)?.map((address): string =>\n typeof address === \"string\" ? address : address.encode()\n ) ?? [],\n merge(query.where.ergoTrees, query.where.ergoTree)?.map((tree) =>\n ErgoAddress.fromErgoTree(tree).encode()\n ) ?? []\n ].flat()\n );\n\n const baseQuery = {\n transactionIds: query.where.transactionId ? [query.where.transactionId] : undefined,\n skip: query.skip ?? 0,\n take: query.take ?? PAGE_SIZE\n };\n\n return isEmpty(addresses)\n ? [baseQuery]\n : chunk(addresses, MAX_ARGS).map((chunk) => ({ addresses: chunk, ...baseQuery }));\n}\n\nfunction buildGqlConfirmedTxQueries(\n query: TransactionQuery<GraphQLConfirmedTransactionWhere> & SkipAndTake\n) {\n return buildGqlUnconfirmedTxQueries(\n query as TransactionQuery<GraphQLUnconfirmedTransactionWhere>\n ).map((baseQuery) => ({\n ...baseQuery,\n headerId: query.where.headerId,\n minHeight: query.where.minHeight,\n onlyRelevantOutputs: query.where.onlyRelevantOutputs\n }));\n}\n\nfunction merge<T>(array?: T[], el?: T) {\n if (isEmpty(array) && isUndefined(el)) return;\n\n const set = new Set<T>(array ?? []);\n if (!isUndefined(el)) set.add(el);\n return Array.from(set.values());\n}\n\nfunction hasMempool(data: unknown): data is UnconfirmedBoxesResponse {\n return !!(data as UnconfirmedBoxesResponse)?.mempool?.boxes;\n}\n\nfunction hasConfirmed(data: unknown): data is ConfirmedBoxesResponse {\n return !!(data as ConfirmedBoxesResponse)?.boxes;\n}\n\nfunction mapConfirmedBox<T>(box: GQLBox, mapper: BiMapper<T>): ChainProviderBox<T> {\n const mapped = mapBox(box, mapper) as ChainProviderBox<T>;\n mapped.confirmed = true;\n return mapped;\n}\n\nfunction mapUnconfirmedBox<T>(box: GQLBox, mapper: BiMapper<T>): ChainProviderBox<T> {\n const mapped = mapBox(box, mapper) as ChainProviderBox<T>;\n mapped.confirmed = false;\n return mapped;\n}\n\nfunction mapBox<T>(\n box: GQLBox | GQLUnconfirmedBox,\n mapper: BiMapper<T>\n): Omit<ChainProviderBox<T>, \"confirmed\"> {\n return {\n boxId: box.boxId,\n transactionId: box.transactionId,\n value: mapper(box.value),\n ergoTree: box.ergoTree,\n assets: box.assets.map((t) => ({ tokenId: t.tokenId, amount: mapper(t.amount) })),\n creationHeight: box.creationHeight,\n additionalRegisters: box.additionalRegisters,\n index: box.index\n };\n}\n\nfunction mapUnconfirmedTransaction<T>(\n tx: UnconfirmedTransaction,\n mapper: BiMapper<T>\n): ChainProviderUnconfirmedTransaction<T> {\n return {\n transactionId: tx.transactionId,\n timestamp: Number(tx.timestamp),\n inputs: tx.inputs.map((i) => ({\n spendingProof: {\n // biome-ignore lint/style/noNonNullAssertion: bad type declarations at '@ergo-graphql/type'\n extension: i.extension!,\n // biome-ignore lint/style/noNonNullAssertion: bad type declarations at '@ergo-graphql/type'\n proofBytes: i.proofBytes!\n },\n // biome-ignore lint/style/noNonNullAssertion: bad type declarations at '@ergo-graphql/type'\n ...mapBox(i.box!, mapper)\n })),\n dataInputs: tx.dataInputs.map((di) => ({ boxId: di.boxId })),\n outputs: tx.outputs.map((b) => mapBox(b, mapper)),\n confirmed: false\n };\n}\n\nfunction mapConfirmedTransaction<T>(\n tx: Transaction,\n mapper: BiMapper<T>\n): ChainProviderConfirmedTransaction<T> {\n return {\n transactionId: tx.transactionId,\n timestamp: Number(tx.timestamp),\n inputs: tx.inputs.map((i) => ({\n spendingProof: {\n // biome-ignore lint/style/noNonNullAssertion: bad type declarations at '@ergo-graphql/type'\n extension: i.extension!,\n // biome-ignore lint/style/noNonNullAssertion: bad type declarations at '@ergo-graphql/type'\n proofBytes: i.proofBytes!\n },\n // biome-ignore lint/style/noNonNullAssertion: bad type declarations at '@ergo-graphql/type'\n ...mapBox(i.box!, mapper)\n })),\n dataInputs: tx.dataInputs.map((di) => ({ boxId: di.boxId })),\n outputs: tx.outputs.map((b) => mapBox(b, mapper)),\n height: tx.inclusionHeight,\n headerId: tx.headerId,\n index: tx.index,\n confirmed: true\n };\n}\n\nexport function isRequestParam(obj: unknown): obj is ErgoGraphQLRequestOptions {\n return typeof obj === \"object\" && (obj as ErgoGraphQLRequestOptions).url !== undefined;\n}\n"]}
1
+ {"version":3,"sources":["../../../node_modules/.pnpm/@noble+hashes@1.7.2/node_modules/@noble/hashes/src/_assert.ts","../../../node_modules/.pnpm/@noble+hashes@1.7.2/node_modules/@noble/hashes/src/utils.ts","../../../node_modules/.pnpm/@noble+hashes@1.7.2/node_modules/@noble/hashes/src/_md.ts","../../../node_modules/.pnpm/@noble+hashes@1.7.2/node_modules/@noble/hashes/src/sha256.ts","../../../node_modules/.pnpm/@scure+base@1.2.4/node_modules/@scure/base/index.ts","../../crypto/src/coders/hex.ts","../../crypto/src/coders/index.ts","../../crypto/src/hashes.ts","../src/utils/networking.ts","../src/utils/graphql.ts","../src/ergo-graphql/queries.ts","../src/ergo-graphql/ergoGraphQLProvider.ts"],"names":["B","isBytes","sha256","hex","base58checkCoder","_sha256","response","some","isEmpty","query","chunk","ensureDefaults"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Internal assertion helpers.\n * @module\n */\n\n/** Asserts something is positive integer. */\nfunction anumber(n: number): void {\n if (!Number.isSafeInteger(n) || n < 0) throw new Error('positive integer expected, got ' + n);\n}\n\n/** Is number an Uint8Array? Copied from utils for perf. */\nfunction isBytes(a: unknown): a is Uint8Array {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n\n/** Asserts something is Uint8Array. */\nfunction abytes(b: Uint8Array | undefined, ...lengths: number[]): void {\n if (!isBytes(b)) throw new Error('Uint8Array expected');\n if (lengths.length > 0 && !lengths.includes(b.length))\n throw new Error('Uint8Array expected of length ' + lengths + ', got length=' + b.length);\n}\n\n/** Hash interface. */\nexport type Hash = {\n (data: Uint8Array): Uint8Array;\n blockLen: number;\n outputLen: number;\n create: any;\n};\n\n/** Asserts something is hash */\nfunction ahash(h: Hash): void {\n if (typeof h !== 'function' || typeof h.create !== 'function')\n throw new Error('Hash should be wrapped by utils.wrapConstructor');\n anumber(h.outputLen);\n anumber(h.blockLen);\n}\n\n/** Asserts a hash instance has not been destroyed / finished */\nfunction aexists(instance: any, checkFinished = true): void {\n if (instance.destroyed) throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished) throw new Error('Hash#digest() has already been called');\n}\n\n/** Asserts output is properly-sized byte array */\nfunction aoutput(out: any, instance: any): void {\n abytes(out);\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error('digestInto() expects output buffer of length at least ' + min);\n }\n}\n\nexport { anumber, abytes, ahash, aexists, aoutput };\n","/**\n * Utilities for hex, bytes, CSPRNG.\n * @module\n */\n/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n\n// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.json#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated (2025-04-30), we can just drop the import.\nimport { crypto } from '@noble/hashes/crypto';\nimport { abytes } from './_assert.ts';\n// export { isBytes } from './_assert.ts';\n// We can't reuse isBytes from _assert, because somehow this causes huge perf issues\nexport function isBytes(a: unknown): a is Uint8Array {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n\n// prettier-ignore\nexport type TypedArray = Int8Array | Uint8ClampedArray | Uint8Array |\n Uint16Array | Int16Array | Uint32Array | Int32Array;\n\n// Cast array to different type\nexport function u8(arr: TypedArray): Uint8Array {\n return new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\n}\nexport function u32(arr: TypedArray): Uint32Array {\n return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\n\n// Cast array to view\nexport function createView(arr: TypedArray): DataView {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n\n/** The rotate right (circular right shift) operation for uint32 */\nexport function rotr(word: number, shift: number): number {\n return (word << (32 - shift)) | (word >>> shift);\n}\n/** The rotate left (circular left shift) operation for uint32 */\nexport function rotl(word: number, shift: number): number {\n return (word << shift) | ((word >>> (32 - shift)) >>> 0);\n}\n\n/** Is current platform little-endian? Most are. Big-Endian platform: IBM */\nexport const isLE: boolean = /* @__PURE__ */ (() =>\n new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44)();\n// The byte swap operation for uint32\nexport function byteSwap(word: number): number {\n return (\n ((word << 24) & 0xff000000) |\n ((word << 8) & 0xff0000) |\n ((word >>> 8) & 0xff00) |\n ((word >>> 24) & 0xff)\n );\n}\n/** Conditionally byte swap if on a big-endian platform */\nexport const byteSwapIfBE: (n: number) => number = isLE\n ? (n: number) => n\n : (n: number) => byteSwap(n);\n\n/** In place byte swap for Uint32Array */\nexport function byteSwap32(arr: Uint32Array): void {\n for (let i = 0; i < arr.length; i++) {\n arr[i] = byteSwap(arr[i]);\n }\n}\n\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\nconst hasHexBuiltin: boolean =\n // @ts-ignore\n typeof Uint8Array.from([]).toHex === 'function' && typeof Uint8Array.fromHex === 'function';\n\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>\n i.toString(16).padStart(2, '0')\n);\n\n/**\n * Convert byte array to hex string. Uses built-in function, when available.\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n abytes(bytes);\n // @ts-ignore\n if (hasHexBuiltin) return bytes.toHex();\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\n\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 } as const;\nfunction asciiToBase16(ch: number): number | undefined {\n if (ch >= asciis._0 && ch <= asciis._9) return ch - asciis._0; // '2' => 50-48\n if (ch >= asciis.A && ch <= asciis.F) return ch - (asciis.A - 10); // 'B' => 66-(65-10)\n if (ch >= asciis.a && ch <= asciis.f) return ch - (asciis.a - 10); // 'b' => 98-(97-10)\n return;\n}\n\n/**\n * Convert hex string to byte array. Uses built-in function, when available.\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex: string): Uint8Array {\n if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n // @ts-ignore\n if (hasHexBuiltin) return Uint8Array.fromHex(hex);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2) throw new Error('hex string expected, got unpadded hex of length ' + hl);\n const array = new Uint8Array(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n const n1 = asciiToBase16(hex.charCodeAt(hi));\n const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n if (n1 === undefined || n2 === undefined) {\n const char = hex[hi] + hex[hi + 1];\n throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n }\n array[ai] = n1 * 16 + n2; // multiply first octet, e.g. 'a3' => 10*16+3 => 160 + 3 => 163\n }\n return array;\n}\n\n/**\n * There is no setImmediate in browser and setTimeout is slow.\n * Call of async fn will return Promise, which will be fullfiled only on\n * next scheduler queue processing step and this is exactly what we need.\n */\nexport const nextTick = async (): Promise<void> => {};\n\n/** Returns control to thread each 'tick' ms to avoid blocking. */\nexport async function asyncLoop(\n iters: number,\n tick: number,\n cb: (i: number) => void\n): Promise<void> {\n let ts = Date.now();\n for (let i = 0; i < iters; i++) {\n cb(i);\n // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n const diff = Date.now() - ts;\n if (diff >= 0 && diff < tick) continue;\n await nextTick();\n ts += diff;\n }\n}\n\n// Global symbols in both browsers and Node.js since v11\n// See https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\n\n/**\n * Convert JS string to byte array.\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n if (typeof str !== 'string') throw new Error('utf8ToBytes expected string, got ' + typeof str);\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\n/** Accepted input of hash functions. Strings are converted to byte arrays. */\nexport type Input = Uint8Array | string;\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nexport function toBytes(data: Input): Uint8Array {\n if (typeof data === 'string') data = utf8ToBytes(data);\n abytes(data);\n return data;\n}\n\n/**\n * Copies several Uint8Arrays into one.\n */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n abytes(a);\n sum += a.length;\n }\n const res = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const a = arrays[i];\n res.set(a, pad);\n pad += a.length;\n }\n return res;\n}\n\n/** For runtime check if class implements interface */\nexport abstract class Hash<T extends Hash<T>> {\n abstract blockLen: number; // Bytes per block\n abstract outputLen: number; // Bytes in output\n abstract update(buf: Input): this;\n // Writes digest into buf\n abstract digestInto(buf: Uint8Array): void;\n abstract digest(): Uint8Array;\n /**\n * Resets internal state. Makes Hash instance unusable.\n * Reset is impossible for keyed hashes if key is consumed into state. If digest is not consumed\n * by user, they will need to manually call `destroy()` when zeroing is necessary.\n */\n abstract destroy(): void;\n /**\n * Clones hash instance. Unsafe: doesn't check whether `to` is valid. Can be used as `clone()`\n * when no options are passed.\n * Reasons to use `_cloneInto` instead of clone: 1) performance 2) reuse instance => all internal\n * buffers are overwritten => causes buffer overwrite which is used for digest in some cases.\n * There are no guarantees for clean-up because it's impossible in JS.\n */\n abstract _cloneInto(to?: T): T;\n // Safe version that clones internal state\n clone(): T {\n return this._cloneInto();\n }\n}\n\n/**\n * XOF: streaming API to read digest in chunks.\n * Same as 'squeeze' in keccak/k12 and 'seek' in blake3, but more generic name.\n * When hash used in XOF mode it is up to user to call '.destroy' afterwards, since we cannot\n * destroy state, next call can require more bytes.\n */\nexport type HashXOF<T extends Hash<T>> = Hash<T> & {\n xof(bytes: number): Uint8Array; // Read 'bytes' bytes from digest stream\n xofInto(buf: Uint8Array): Uint8Array; // read buf.length bytes from digest stream into buf\n};\n\ntype EmptyObj = {};\nexport function checkOpts<T1 extends EmptyObj, T2 extends EmptyObj>(\n defaults: T1,\n opts?: T2\n): T1 & T2 {\n if (opts !== undefined && {}.toString.call(opts) !== '[object Object]')\n throw new Error('Options should be object or undefined');\n const merged = Object.assign(defaults, opts);\n return merged as T1 & T2;\n}\n\n/** Hash function */\nexport type CHash = ReturnType<typeof wrapConstructor>;\n/** Hash function with output */\nexport type CHashO = ReturnType<typeof wrapConstructorWithOpts>;\n/** XOF with output */\nexport type CHashXO = ReturnType<typeof wrapXOFConstructorWithOpts>;\n\n/** Wraps hash function, creating an interface on top of it */\nexport function wrapConstructor<T extends Hash<T>>(\n hashCons: () => Hash<T>\n): {\n (msg: Input): Uint8Array;\n outputLen: number;\n blockLen: number;\n create(): Hash<T>;\n} {\n const hashC = (msg: Input): Uint8Array => hashCons().update(toBytes(msg)).digest();\n const tmp = hashCons();\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = () => hashCons();\n return hashC;\n}\n\nexport function wrapConstructorWithOpts<H extends Hash<H>, T extends Object>(\n hashCons: (opts?: T) => Hash<H>\n): {\n (msg: Input, opts?: T): Uint8Array;\n outputLen: number;\n blockLen: number;\n create(opts: T): Hash<H>;\n} {\n const hashC = (msg: Input, opts?: T): Uint8Array => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({} as T);\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts: T) => hashCons(opts);\n return hashC;\n}\n\nexport function wrapXOFConstructorWithOpts<H extends HashXOF<H>, T extends Object>(\n hashCons: (opts?: T) => HashXOF<H>\n): {\n (msg: Input, opts?: T): Uint8Array;\n outputLen: number;\n blockLen: number;\n create(opts: T): HashXOF<H>;\n} {\n const hashC = (msg: Input, opts?: T): Uint8Array => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({} as T);\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts: T) => hashCons(opts);\n return hashC;\n}\n\n/** Cryptographically secure PRNG. Uses internal OS-level `crypto.getRandomValues`. */\nexport function randomBytes(bytesLength = 32): Uint8Array {\n if (crypto && typeof crypto.getRandomValues === 'function') {\n return crypto.getRandomValues(new Uint8Array(bytesLength));\n }\n // Legacy Node.js compatibility\n if (crypto && typeof crypto.randomBytes === 'function') {\n return Uint8Array.from(crypto.randomBytes(bytesLength));\n }\n throw new Error('crypto.getRandomValues must be defined');\n}\n","/**\n * Internal Merkle-Damgard hash utils.\n * @module\n */\nimport { aexists, aoutput } from './_assert.ts';\nimport { type Input, Hash, createView, toBytes } from './utils.ts';\n\n/** Polyfill for Safari 14. https://caniuse.com/mdn-javascript_builtins_dataview_setbiguint64 */\nexport function setBigUint64(\n view: DataView,\n byteOffset: number,\n value: bigint,\n isLE: boolean\n): void {\n if (typeof view.setBigUint64 === 'function') return view.setBigUint64(byteOffset, value, isLE);\n const _32n = BigInt(32);\n const _u32_max = BigInt(0xffffffff);\n const wh = Number((value >> _32n) & _u32_max);\n const wl = Number(value & _u32_max);\n const h = isLE ? 4 : 0;\n const l = isLE ? 0 : 4;\n view.setUint32(byteOffset + h, wh, isLE);\n view.setUint32(byteOffset + l, wl, isLE);\n}\n\n/** Choice: a ? b : c */\nexport function Chi(a: number, b: number, c: number): number {\n return (a & b) ^ (~a & c);\n}\n\n/** Majority function, true if any two inputs is true. */\nexport function Maj(a: number, b: number, c: number): number {\n return (a & b) ^ (a & c) ^ (b & c);\n}\n\n/**\n * Merkle-Damgard hash construction base class.\n * Could be used to create MD5, RIPEMD, SHA1, SHA2.\n */\nexport abstract class HashMD<T extends HashMD<T>> extends Hash<T> {\n protected abstract process(buf: DataView, offset: number): void;\n protected abstract get(): number[];\n protected abstract set(...args: number[]): void;\n abstract destroy(): void;\n protected abstract roundClean(): void;\n\n readonly blockLen: number;\n readonly outputLen: number;\n readonly padOffset: number;\n readonly isLE: boolean;\n\n // For partial updates less than block size\n protected buffer: Uint8Array;\n protected view: DataView;\n protected finished = false;\n protected length = 0;\n protected pos = 0;\n protected destroyed = false;\n\n constructor(blockLen: number, outputLen: number, padOffset: number, isLE: boolean) {\n super();\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.padOffset = padOffset;\n this.isLE = isLE;\n this.buffer = new Uint8Array(blockLen);\n this.view = createView(this.buffer);\n }\n update(data: Input): this {\n aexists(this);\n const { view, buffer, blockLen } = this;\n data = toBytes(data);\n const len = data.length;\n for (let pos = 0; pos < len; ) {\n const take = Math.min(blockLen - this.pos, len - pos);\n // Fast path: we have at least one block in input, cast it to view and process\n if (take === blockLen) {\n const dataView = createView(data);\n for (; blockLen <= len - pos; pos += blockLen) this.process(dataView, pos);\n continue;\n }\n buffer.set(data.subarray(pos, pos + take), this.pos);\n this.pos += take;\n pos += take;\n if (this.pos === blockLen) {\n this.process(view, 0);\n this.pos = 0;\n }\n }\n this.length += data.length;\n this.roundClean();\n return this;\n }\n digestInto(out: Uint8Array): void {\n aexists(this);\n aoutput(out, this);\n this.finished = true;\n // Padding\n // We can avoid allocation of buffer for padding completely if it\n // was previously not allocated here. But it won't change performance.\n const { buffer, view, blockLen, isLE } = this;\n let { pos } = this;\n // append the bit '1' to the message\n buffer[pos++] = 0b10000000;\n this.buffer.subarray(pos).fill(0);\n // we have less than padOffset left in buffer, so we cannot put length in\n // current block, need process it and pad again\n if (this.padOffset > blockLen - pos) {\n this.process(view, 0);\n pos = 0;\n }\n // Pad until full block byte with zeros\n for (let i = pos; i < blockLen; i++) buffer[i] = 0;\n // Note: sha512 requires length to be 128bit integer, but length in JS will overflow before that\n // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen.\n // So we just write lowest 64 bits of that value.\n setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE);\n this.process(view, 0);\n const oview = createView(out);\n const len = this.outputLen;\n // NOTE: we do division by 4 later, which should be fused in single op with modulo by JIT\n if (len % 4) throw new Error('_sha2: outputLen should be aligned to 32bit');\n const outLen = len / 4;\n const state = this.get();\n if (outLen > state.length) throw new Error('_sha2: outputLen bigger than state');\n for (let i = 0; i < outLen; i++) oview.setUint32(4 * i, state[i], isLE);\n }\n digest(): Uint8Array {\n const { buffer, outputLen } = this;\n this.digestInto(buffer);\n const res = buffer.slice(0, outputLen);\n this.destroy();\n return res;\n }\n _cloneInto(to?: T): T {\n to ||= new (this.constructor as any)() as T;\n to.set(...this.get());\n const { blockLen, buffer, length, finished, destroyed, pos } = this;\n to.length = length;\n to.pos = pos;\n to.finished = finished;\n to.destroyed = destroyed;\n if (length % blockLen) to.buffer.set(buffer);\n return to;\n }\n}\n","/**\n * SHA2-256 a.k.a. sha256. In JS, it is the fastest hash, even faster than Blake3.\n *\n * To break sha256 using birthday attack, attackers need to try 2^128 hashes.\n * BTC network is doing 2^70 hashes/sec (2^95 hashes/year) as per 2025.\n *\n * Check out [FIPS 180-4](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf).\n * @module\n */\nimport { Chi, HashMD, Maj } from './_md.ts';\nimport { type CHash, rotr, wrapConstructor } from './utils.ts';\n\n/** Round constants: first 32 bits of fractional parts of the cube roots of the first 64 primes 2..311). */\n// prettier-ignore\nconst SHA256_K = /* @__PURE__ */ new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\n\n/** Initial state: first 32 bits of fractional parts of the square roots of the first 8 primes 2..19. */\n// prettier-ignore\nconst SHA256_IV = /* @__PURE__ */ new Uint32Array([\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n]);\n\n/**\n * Temporary buffer, not used to store anything between runs.\n * Named this way because it matches specification.\n */\nconst SHA256_W = /* @__PURE__ */ new Uint32Array(64);\nexport class SHA256 extends HashMD<SHA256> {\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n protected A: number = SHA256_IV[0] | 0;\n protected B: number = SHA256_IV[1] | 0;\n protected C: number = SHA256_IV[2] | 0;\n protected D: number = SHA256_IV[3] | 0;\n protected E: number = SHA256_IV[4] | 0;\n protected F: number = SHA256_IV[5] | 0;\n protected G: number = SHA256_IV[6] | 0;\n protected H: number = SHA256_IV[7] | 0;\n\n constructor(outputLen: number = 32) {\n super(64, outputLen, 8, false);\n }\n protected get(): [number, number, number, number, number, number, number, number] {\n const { A, B, C, D, E, F, G, H } = this;\n return [A, B, C, D, E, F, G, H];\n }\n // prettier-ignore\n protected set(\n A: number, B: number, C: number, D: number, E: number, F: number, G: number, H: number\n ): void {\n this.A = A | 0;\n this.B = B | 0;\n this.C = C | 0;\n this.D = D | 0;\n this.E = E | 0;\n this.F = F | 0;\n this.G = G | 0;\n this.H = H | 0;\n }\n protected process(view: DataView, offset: number): void {\n // Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4) SHA256_W[i] = view.getUint32(offset, false);\n for (let i = 16; i < 64; i++) {\n const W15 = SHA256_W[i - 15];\n const W2 = SHA256_W[i - 2];\n const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ (W15 >>> 3);\n const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ (W2 >>> 10);\n SHA256_W[i] = (s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16]) | 0;\n }\n // Compression function main loop, 64 rounds\n let { A, B, C, D, E, F, G, H } = this;\n for (let i = 0; i < 64; i++) {\n const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25);\n const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22);\n const T2 = (sigma0 + Maj(A, B, C)) | 0;\n H = G;\n G = F;\n F = E;\n E = (D + T1) | 0;\n D = C;\n C = B;\n B = A;\n A = (T1 + T2) | 0;\n }\n // Add the compressed chunk to the current hash value\n A = (A + this.A) | 0;\n B = (B + this.B) | 0;\n C = (C + this.C) | 0;\n D = (D + this.D) | 0;\n E = (E + this.E) | 0;\n F = (F + this.F) | 0;\n G = (G + this.G) | 0;\n H = (H + this.H) | 0;\n this.set(A, B, C, D, E, F, G, H);\n }\n protected roundClean(): void {\n SHA256_W.fill(0);\n }\n destroy(): void {\n this.set(0, 0, 0, 0, 0, 0, 0, 0);\n this.buffer.fill(0);\n }\n}\n\n/**\n * Constants taken from https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf.\n */\nclass SHA224 extends SHA256 {\n protected A = 0xc1059ed8 | 0;\n protected B = 0x367cd507 | 0;\n protected C = 0x3070dd17 | 0;\n protected D = 0xf70e5939 | 0;\n protected E = 0xffc00b31 | 0;\n protected F = 0x68581511 | 0;\n protected G = 0x64f98fa7 | 0;\n protected H = 0xbefa4fa4 | 0;\n constructor() {\n super(28);\n }\n}\n\n/** SHA2-256 hash function */\nexport const sha256: CHash = /* @__PURE__ */ wrapConstructor(() => new SHA256());\n/** SHA2-224 hash function */\nexport const sha224: CHash = /* @__PURE__ */ wrapConstructor(() => new SHA224());\n","/*! scure-base - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n\nexport interface Coder<F, T> {\n encode(from: F): T;\n decode(to: T): F;\n}\n\nexport interface BytesCoder extends Coder<Uint8Array, string> {\n encode: (data: Uint8Array) => string;\n decode: (str: string) => Uint8Array;\n}\n\nfunction isBytes(a: unknown): a is Uint8Array {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n\nfunction isArrayOf(isString: boolean, arr: any[]) {\n if (!Array.isArray(arr)) return false;\n if (arr.length === 0) return true;\n if (isString) {\n return arr.every((item) => typeof item === 'string');\n } else {\n return arr.every((item) => Number.isSafeInteger(item));\n }\n}\n\n// no abytes: seems to have 10% slowdown. Why?!\n\nfunction afn(input: Function): input is Function {\n if (typeof input !== 'function') throw new Error('function expected');\n return true;\n}\n\nfunction astr(label: string, input: unknown): input is string {\n if (typeof input !== 'string') throw new Error(`${label}: string expected`);\n return true;\n}\n\nfunction anumber(n: number): void {\n if (!Number.isSafeInteger(n)) throw new Error(`invalid integer: ${n}`);\n}\nexport const assertNumber: typeof anumber = anumber;\n\nfunction aArr(input: any[]) {\n if (!Array.isArray(input)) throw new Error('array expected');\n}\nfunction astrArr(label: string, input: string[]) {\n if (!isArrayOf(true, input)) throw new Error(`${label}: array of strings expected`);\n}\nfunction anumArr(label: string, input: number[]) {\n if (!isArrayOf(false, input)) throw new Error(`${label}: array of numbers expected`);\n}\n\n// TODO: some recusive type inference so it would check correct order of input/output inside rest?\n// like <string, number>, <number, bytes>, <bytes, float>\ntype Chain = [Coder<any, any>, ...Coder<any, any>[]];\n// Extract info from Coder type\ntype Input<F> = F extends Coder<infer T, any> ? T : never;\ntype Output<F> = F extends Coder<any, infer T> ? T : never;\n// Generic function for arrays\ntype First<T> = T extends [infer U, ...any[]] ? U : never;\ntype Last<T> = T extends [...any[], infer U] ? U : never;\ntype Tail<T> = T extends [any, ...infer U] ? U : never;\n\ntype AsChain<C extends Chain, Rest = Tail<C>> = {\n // C[K] = Coder<Input<C[K]>, Input<Rest[k]>>\n [K in keyof C]: Coder<Input<C[K]>, Input<K extends keyof Rest ? Rest[K] : any>>;\n};\n\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction chain<T extends Chain & AsChain<T>>(...args: T): Coder<Input<First<T>>, Output<Last<T>>> {\n const id = (a: any) => a;\n // Wrap call in closure so JIT can inline calls\n const wrap = (a: any, b: any) => (c: any) => a(b(c));\n // Construct chain of args[-1].encode(args[-2].encode([...]))\n const encode = args.map((x) => x.encode).reduceRight(wrap, id);\n // Construct chain of args[0].decode(args[1].decode(...))\n const decode = args.map((x) => x.decode).reduce(wrap, id);\n return { encode, decode };\n}\n\n/**\n * Encodes integer radix representation to array of strings using alphabet and back.\n * Could also be array of strings.\n * @__NO_SIDE_EFFECTS__\n */\nfunction alphabet(letters: string | string[]): Coder<number[], string[]> {\n // mapping 1 to \"b\"\n const lettersA = typeof letters === 'string' ? letters.split('') : letters;\n const len = lettersA.length;\n astrArr('alphabet', lettersA);\n\n // mapping \"b\" to 1\n const indexes = new Map(lettersA.map((l, i) => [l, i]));\n return {\n encode: (digits: number[]) => {\n aArr(digits);\n return digits.map((i) => {\n if (!Number.isSafeInteger(i) || i < 0 || i >= len)\n throw new Error(\n `alphabet.encode: digit index outside alphabet \"${i}\". Allowed: ${letters}`\n );\n return lettersA[i]!;\n });\n },\n decode: (input: string[]): number[] => {\n aArr(input);\n return input.map((letter) => {\n astr('alphabet.decode', letter);\n const i = indexes.get(letter);\n if (i === undefined) throw new Error(`Unknown letter: \"${letter}\". Allowed: ${letters}`);\n return i;\n });\n },\n };\n}\n\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction join(separator = ''): Coder<string[], string> {\n astr('join', separator);\n return {\n encode: (from) => {\n astrArr('join.decode', from);\n return from.join(separator);\n },\n decode: (to) => {\n astr('join.decode', to);\n return to.split(separator);\n },\n };\n}\n\n/**\n * Pad strings array so it has integer number of bits\n * @__NO_SIDE_EFFECTS__\n */\nfunction padding(bits: number, chr = '='): Coder<string[], string[]> {\n anumber(bits);\n astr('padding', chr);\n return {\n encode(data: string[]): string[] {\n astrArr('padding.encode', data);\n while ((data.length * bits) % 8) data.push(chr);\n return data;\n },\n decode(input: string[]): string[] {\n astrArr('padding.decode', input);\n let end = input.length;\n if ((end * bits) % 8)\n throw new Error('padding: invalid, string should have whole number of bytes');\n for (; end > 0 && input[end - 1] === chr; end--) {\n const last = end - 1;\n const byte = last * bits;\n if (byte % 8 === 0) throw new Error('padding: invalid, string has too much padding');\n }\n return input.slice(0, end);\n },\n };\n}\n\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction normalize<T>(fn: (val: T) => T): Coder<T, T> {\n afn(fn);\n return { encode: (from: T) => from, decode: (to: T) => fn(to) };\n}\n\n/**\n * Slow: O(n^2) time complexity\n */\nfunction convertRadix(data: number[], from: number, to: number): number[] {\n // base 1 is impossible\n if (from < 2) throw new Error(`convertRadix: invalid from=${from}, base cannot be less than 2`);\n if (to < 2) throw new Error(`convertRadix: invalid to=${to}, base cannot be less than 2`);\n aArr(data);\n if (!data.length) return [];\n let pos = 0;\n const res = [];\n const digits = Array.from(data, (d) => {\n anumber(d);\n if (d < 0 || d >= from) throw new Error(`invalid integer: ${d}`);\n return d;\n });\n const dlen = digits.length;\n while (true) {\n let carry = 0;\n let done = true;\n for (let i = pos; i < dlen; i++) {\n const digit = digits[i]!;\n const fromCarry = from * carry;\n const digitBase = fromCarry + digit;\n if (\n !Number.isSafeInteger(digitBase) ||\n fromCarry / from !== carry ||\n digitBase - digit !== fromCarry\n ) {\n throw new Error('convertRadix: carry overflow');\n }\n const div = digitBase / to;\n carry = digitBase % to;\n const rounded = Math.floor(div);\n digits[i] = rounded;\n if (!Number.isSafeInteger(rounded) || rounded * to + carry !== digitBase)\n throw new Error('convertRadix: carry overflow');\n if (!done) continue;\n else if (!rounded) pos = i;\n else done = false;\n }\n res.push(carry);\n if (done) break;\n }\n for (let i = 0; i < data.length - 1 && data[i] === 0; i++) res.push(0);\n return res.reverse();\n}\n\nconst gcd = (a: number, b: number): number => (b === 0 ? a : gcd(b, a % b));\nconst radix2carry = /* @__NO_SIDE_EFFECTS__ */ (from: number, to: number) =>\n from + (to - gcd(from, to));\nconst powers: number[] = /* @__PURE__ */ (() => {\n let res = [];\n for (let i = 0; i < 40; i++) res.push(2 ** i);\n return res;\n})();\n/**\n * Implemented with numbers, because BigInt is 5x slower\n */\nfunction convertRadix2(data: number[], from: number, to: number, padding: boolean): number[] {\n aArr(data);\n if (from <= 0 || from > 32) throw new Error(`convertRadix2: wrong from=${from}`);\n if (to <= 0 || to > 32) throw new Error(`convertRadix2: wrong to=${to}`);\n if (radix2carry(from, to) > 32) {\n throw new Error(\n `convertRadix2: carry overflow from=${from} to=${to} carryBits=${radix2carry(from, to)}`\n );\n }\n let carry = 0;\n let pos = 0; // bitwise position in current element\n const max = powers[from]!;\n const mask = powers[to]! - 1;\n const res: number[] = [];\n for (const n of data) {\n anumber(n);\n if (n >= max) throw new Error(`convertRadix2: invalid data word=${n} from=${from}`);\n carry = (carry << from) | n;\n if (pos + from > 32) throw new Error(`convertRadix2: carry overflow pos=${pos} from=${from}`);\n pos += from;\n for (; pos >= to; pos -= to) res.push(((carry >> (pos - to)) & mask) >>> 0);\n const pow = powers[pos];\n if (pow === undefined) throw new Error('invalid carry');\n carry &= pow - 1; // clean carry, otherwise it will cause overflow\n }\n carry = (carry << (to - pos)) & mask;\n if (!padding && pos >= from) throw new Error('Excess padding');\n if (!padding && carry > 0) throw new Error(`Non-zero padding: ${carry}`);\n if (padding && pos > 0) res.push(carry >>> 0);\n return res;\n}\n\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction radix(num: number): Coder<Uint8Array, number[]> {\n anumber(num);\n const _256 = 2 ** 8;\n return {\n encode: (bytes: Uint8Array) => {\n if (!isBytes(bytes)) throw new Error('radix.encode input should be Uint8Array');\n return convertRadix(Array.from(bytes), _256, num);\n },\n decode: (digits: number[]) => {\n anumArr('radix.decode', digits);\n return Uint8Array.from(convertRadix(digits, num, _256));\n },\n };\n}\n\n/**\n * If both bases are power of same number (like `2**8 <-> 2**64`),\n * there is a linear algorithm. For now we have implementation for power-of-two bases only.\n * @__NO_SIDE_EFFECTS__\n */\nfunction radix2(bits: number, revPadding = false): Coder<Uint8Array, number[]> {\n anumber(bits);\n if (bits <= 0 || bits > 32) throw new Error('radix2: bits should be in (0..32]');\n if (radix2carry(8, bits) > 32 || radix2carry(bits, 8) > 32)\n throw new Error('radix2: carry overflow');\n return {\n encode: (bytes: Uint8Array) => {\n if (!isBytes(bytes)) throw new Error('radix2.encode input should be Uint8Array');\n return convertRadix2(Array.from(bytes), 8, bits, !revPadding);\n },\n decode: (digits: number[]) => {\n anumArr('radix2.decode', digits);\n return Uint8Array.from(convertRadix2(digits, bits, 8, revPadding));\n },\n };\n}\n\ntype ArgumentTypes<F extends Function> = F extends (...args: infer A) => any ? A : never;\nfunction unsafeWrapper<T extends (...args: any) => any>(fn: T) {\n afn(fn);\n return function (...args: ArgumentTypes<T>): ReturnType<T> | void {\n try {\n return fn.apply(null, args);\n } catch (e) {}\n };\n}\n\nfunction checksum(\n len: number,\n fn: (data: Uint8Array) => Uint8Array\n): Coder<Uint8Array, Uint8Array> {\n anumber(len);\n afn(fn);\n return {\n encode(data: Uint8Array) {\n if (!isBytes(data)) throw new Error('checksum.encode: input should be Uint8Array');\n const sum = fn(data).slice(0, len);\n const res = new Uint8Array(data.length + len);\n res.set(data);\n res.set(sum, data.length);\n return res;\n },\n decode(data: Uint8Array) {\n if (!isBytes(data)) throw new Error('checksum.decode: input should be Uint8Array');\n const payload = data.slice(0, -len);\n const oldChecksum = data.slice(-len);\n const newChecksum = fn(payload).slice(0, len);\n for (let i = 0; i < len; i++)\n if (newChecksum[i] !== oldChecksum[i]) throw new Error('Invalid checksum');\n return payload;\n },\n };\n}\n\n// prettier-ignore\nexport const utils: { alphabet: typeof alphabet; chain: typeof chain; checksum: typeof checksum; convertRadix: typeof convertRadix; convertRadix2: typeof convertRadix2; radix: typeof radix; radix2: typeof radix2; join: typeof join; padding: typeof padding; } = {\n alphabet, chain, checksum, convertRadix, convertRadix2, radix, radix2, join, padding,\n};\n\n// RFC 4648 aka RFC 3548\n// ---------------------\n\n/**\n * base16 encoding.\n */\nexport const base16: BytesCoder = chain(radix2(4), alphabet('0123456789ABCDEF'), join(''));\nexport const base32: BytesCoder = chain(\n radix2(5),\n alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'),\n padding(5),\n join('')\n);\nexport const base32nopad: BytesCoder = chain(\n radix2(5),\n alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'),\n join('')\n);\nexport const base32hex: BytesCoder = chain(\n radix2(5),\n alphabet('0123456789ABCDEFGHIJKLMNOPQRSTUV'),\n padding(5),\n join('')\n);\nexport const base32hexnopad: BytesCoder = chain(\n radix2(5),\n alphabet('0123456789ABCDEFGHIJKLMNOPQRSTUV'),\n join('')\n);\nexport const base32crockford: BytesCoder = chain(\n radix2(5),\n alphabet('0123456789ABCDEFGHJKMNPQRSTVWXYZ'),\n join(''),\n normalize((s: string) => s.toUpperCase().replace(/O/g, '0').replace(/[IL]/g, '1'))\n);\n/**\n * base64 with padding. For no padding, use `base64nopad`.\n * @example\n * const b = base64.decode('A951'); // Uint8Array.from([ 3, 222, 117 ])\n * base64.encode(b); // 'A951'\n */\nexport const base64: BytesCoder = chain(\n radix2(6),\n alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'),\n padding(6),\n join('')\n);\n/**\n * base64 without padding.\n */\nexport const base64nopad: BytesCoder = chain(\n radix2(6),\n alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'),\n join('')\n);\nexport const base64url: BytesCoder = chain(\n radix2(6),\n alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'),\n padding(6),\n join('')\n);\nexport const base64urlnopad: BytesCoder = chain(\n radix2(6),\n alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'),\n join('')\n);\n\n// base58 code\n// -----------\nconst genBase58 = /* @__NO_SIDE_EFFECTS__ */ (abc: string) =>\n chain(radix(58), alphabet(abc), join(''));\n\n/**\n * Base58: base64 without characters +, /, 0, O, I, l.\n * Quadratic (O(n^2)) - so, can't be used on large inputs.\n */\nexport const base58: BytesCoder = genBase58(\n '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n);\nexport const base58flickr: BytesCoder = genBase58(\n '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'\n);\nexport const base58xrp: BytesCoder = genBase58(\n 'rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz'\n);\n\n// Data len (index) -> encoded block len\nconst XMR_BLOCK_LEN = [0, 2, 3, 5, 6, 7, 9, 10, 11];\n\n/**\n * XMR version of base58.\n * Done in 8-byte blocks (which equals 11 chars in decoding). Last (non-full) block padded with '1' to size in XMR_BLOCK_LEN.\n * Block encoding significantly reduces quadratic complexity of base58.\n */\nexport const base58xmr: BytesCoder = {\n encode(data: Uint8Array) {\n let res = '';\n for (let i = 0; i < data.length; i += 8) {\n const block = data.subarray(i, i + 8);\n res += base58.encode(block).padStart(XMR_BLOCK_LEN[block.length]!, '1');\n }\n return res;\n },\n decode(str: string) {\n let res: number[] = [];\n for (let i = 0; i < str.length; i += 11) {\n const slice = str.slice(i, i + 11);\n const blockLen = XMR_BLOCK_LEN.indexOf(slice.length);\n const block = base58.decode(slice);\n for (let j = 0; j < block.length - blockLen; j++) {\n if (block[j] !== 0) throw new Error('base58xmr: wrong padding');\n }\n res = res.concat(Array.from(block.slice(block.length - blockLen)));\n }\n return Uint8Array.from(res);\n },\n};\n\nexport const createBase58check = (sha256: (data: Uint8Array) => Uint8Array): BytesCoder =>\n chain(\n checksum(4, (data) => sha256(sha256(data))),\n base58\n );\n\n/**\n * Use `createBase58check` instead.\n * @deprecated\n */\nexport const base58check: (sha256: (data: Uint8Array) => Uint8Array) => BytesCoder =\n createBase58check;\n\n// Bech32 code\n// -----------\nexport interface Bech32Decoded<Prefix extends string = string> {\n prefix: Prefix;\n words: number[];\n}\nexport interface Bech32DecodedWithArray<Prefix extends string = string> {\n prefix: Prefix;\n words: number[];\n bytes: Uint8Array;\n}\n\nconst BECH_ALPHABET: Coder<number[], string> = chain(\n alphabet('qpzry9x8gf2tvdw0s3jn54khce6mua7l'),\n join('')\n);\n\nconst POLYMOD_GENERATORS = [0x3b6a57b2, 0x26508e6d, 0x1ea119fa, 0x3d4233dd, 0x2a1462b3];\nfunction bech32Polymod(pre: number): number {\n const b = pre >> 25;\n let chk = (pre & 0x1ffffff) << 5;\n for (let i = 0; i < POLYMOD_GENERATORS.length; i++) {\n if (((b >> i) & 1) === 1) chk ^= POLYMOD_GENERATORS[i]!;\n }\n return chk;\n}\n\nfunction bechChecksum(prefix: string, words: number[], encodingConst = 1): string {\n const len = prefix.length;\n let chk = 1;\n for (let i = 0; i < len; i++) {\n const c = prefix.charCodeAt(i);\n if (c < 33 || c > 126) throw new Error(`Invalid prefix (${prefix})`);\n chk = bech32Polymod(chk) ^ (c >> 5);\n }\n chk = bech32Polymod(chk);\n for (let i = 0; i < len; i++) chk = bech32Polymod(chk) ^ (prefix.charCodeAt(i) & 0x1f);\n for (let v of words) chk = bech32Polymod(chk) ^ v;\n for (let i = 0; i < 6; i++) chk = bech32Polymod(chk);\n chk ^= encodingConst;\n return BECH_ALPHABET.encode(convertRadix2([chk % powers[30]!], 30, 5, false));\n}\n\nexport interface Bech32 {\n encode<Prefix extends string>(\n prefix: Prefix,\n words: number[] | Uint8Array,\n limit?: number | false\n ): `${Lowercase<Prefix>}1${string}`;\n decode<Prefix extends string>(\n str: `${Prefix}1${string}`,\n limit?: number | false\n ): Bech32Decoded<Prefix>;\n encodeFromBytes(prefix: string, bytes: Uint8Array): string;\n decodeToBytes(str: string): Bech32DecodedWithArray;\n decodeUnsafe(str: string, limit?: number | false): void | Bech32Decoded<string>;\n fromWords(to: number[]): Uint8Array;\n fromWordsUnsafe(to: number[]): void | Uint8Array;\n toWords(from: Uint8Array): number[];\n}\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction genBech32(encoding: 'bech32' | 'bech32m'): Bech32 {\n const ENCODING_CONST = encoding === 'bech32' ? 1 : 0x2bc830a3;\n const _words = radix2(5);\n const fromWords = _words.decode;\n const toWords = _words.encode;\n const fromWordsUnsafe = unsafeWrapper(fromWords);\n\n function encode<Prefix extends string>(\n prefix: Prefix,\n words: number[] | Uint8Array,\n limit: number | false = 90\n ): `${Lowercase<Prefix>}1${string}` {\n astr('bech32.encode prefix', prefix);\n if (isBytes(words)) words = Array.from(words);\n anumArr('bech32.encode', words);\n const plen = prefix.length;\n if (plen === 0) throw new TypeError(`Invalid prefix length ${plen}`);\n const actualLength = plen + 7 + words.length;\n if (limit !== false && actualLength > limit)\n throw new TypeError(`Length ${actualLength} exceeds limit ${limit}`);\n const lowered = prefix.toLowerCase();\n const sum = bechChecksum(lowered, words, ENCODING_CONST);\n return `${lowered}1${BECH_ALPHABET.encode(words)}${sum}` as `${Lowercase<Prefix>}1${string}`;\n }\n\n function decode<Prefix extends string>(\n str: `${Prefix}1${string}`,\n limit?: number | false\n ): Bech32Decoded<Prefix>;\n function decode(str: string, limit?: number | false): Bech32Decoded;\n function decode(str: string, limit: number | false = 90): Bech32Decoded {\n astr('bech32.decode input', str);\n const slen = str.length;\n if (slen < 8 || (limit !== false && slen > limit))\n throw new TypeError(`invalid string length: ${slen} (${str}). Expected (8..${limit})`);\n // don't allow mixed case\n const lowered = str.toLowerCase();\n if (str !== lowered && str !== str.toUpperCase())\n throw new Error(`String must be lowercase or uppercase`);\n const sepIndex = lowered.lastIndexOf('1');\n if (sepIndex === 0 || sepIndex === -1)\n throw new Error(`Letter \"1\" must be present between prefix and data only`);\n const prefix = lowered.slice(0, sepIndex);\n const data = lowered.slice(sepIndex + 1);\n if (data.length < 6) throw new Error('Data must be at least 6 characters long');\n const words = BECH_ALPHABET.decode(data).slice(0, -6);\n const sum = bechChecksum(prefix, words, ENCODING_CONST);\n if (!data.endsWith(sum)) throw new Error(`Invalid checksum in ${str}: expected \"${sum}\"`);\n return { prefix, words };\n }\n\n const decodeUnsafe = unsafeWrapper(decode);\n\n function decodeToBytes(str: string): Bech32DecodedWithArray {\n const { prefix, words } = decode(str, false);\n return { prefix, words, bytes: fromWords(words) };\n }\n\n function encodeFromBytes(prefix: string, bytes: Uint8Array) {\n return encode(prefix, toWords(bytes));\n }\n\n return {\n encode,\n decode,\n encodeFromBytes,\n decodeToBytes,\n decodeUnsafe,\n fromWords,\n fromWordsUnsafe,\n toWords,\n };\n}\n\n/**\n * Low-level bech32 operations. Operates on words.\n */\nexport const bech32: Bech32 = genBech32('bech32');\nexport const bech32m: Bech32 = genBech32('bech32m');\n\ndeclare const TextEncoder: any;\ndeclare const TextDecoder: any;\n\n/**\n * UTF-8-to-byte decoder. Uses built-in TextDecoder / TextEncoder.\n * @example\n * const b = utf8.decode(\"hey\"); // => new Uint8Array([ 104, 101, 121 ])\n * const str = utf8.encode(b); // \"hey\"\n */\nexport const utf8: BytesCoder = {\n encode: (data) => new TextDecoder().decode(data),\n decode: (str) => new TextEncoder().encode(str),\n};\n\n/**\n * hex string decoder.\n * @example\n * const b = hex.decode(\"0102ff\"); // => new Uint8Array([ 1, 2, 255 ])\n * const str = hex.encode(b); // \"0102ff\"\n */\nexport const hex: BytesCoder = chain(\n radix2(4),\n alphabet('0123456789abcdef'),\n join(''),\n normalize((s: string) => {\n if (typeof s !== 'string' || s.length % 2 !== 0)\n throw new TypeError(`hex.decode: expected string, got ${typeof s} with length ${s.length}`);\n return s.toLowerCase();\n })\n);\n\n// prettier-ignore\nconst CODERS: { utf8: BytesCoder; hex: BytesCoder; base16: BytesCoder; base32: BytesCoder; base64: BytesCoder; base64url: BytesCoder; base58: BytesCoder; base58xmr: BytesCoder; } = {\n utf8, hex, base16, base32, base64, base64url, base58, base58xmr\n};\ntype CoderType = keyof typeof CODERS;\nconst coderTypeError =\n 'Invalid encoding type. Available types: utf8, hex, base16, base32, base64, base64url, base58, base58xmr';\n\nexport const bytesToString = (type: CoderType, bytes: Uint8Array): string => {\n if (typeof type !== 'string' || !CODERS.hasOwnProperty(type)) throw new TypeError(coderTypeError);\n if (!isBytes(bytes)) throw new TypeError('bytesToString() expects Uint8Array');\n return CODERS[type].encode(bytes);\n};\nexport const str: (type: CoderType, bytes: Uint8Array) => string = bytesToString; // as in python, but for bytes only\n\nexport const stringToBytes = (type: CoderType, str: string): Uint8Array => {\n if (!CODERS.hasOwnProperty(type)) throw new TypeError(coderTypeError);\n if (typeof str !== 'string') throw new TypeError('stringToBytes() expects string');\n return CODERS[type].decode(str);\n};\nexport const bytes: (type: CoderType, str: string) => Uint8Array = stringToBytes;\n","import { assert, assertInstanceOf, assertTypeOf } from \"@fleet-sdk/common\";\nimport type { BytesCoder } from \"../types\";\n\nconst HEXES = Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, \"0\"));\n\nconst HexChar = {\n ZERO: 48, // 0\n NINE: 57, // 9\n A_UP: 65, // A\n F_UP: 70, // F\n A_LO: 97, // a\n F_LO: 102 // f\n} as const;\n\nfunction bytesToHex(bytes: Uint8Array): string {\n assertInstanceOf(bytes, Uint8Array);\n\n let hex = \"\";\n for (let i = 0, len = bytes.length; i < len; i++) {\n hex += HEXES[bytes[i]];\n }\n\n return hex;\n}\n\nfunction hexToBytes(hex: string): Uint8Array {\n assertTypeOf(hex, \"string\");\n assert(hex.length % 2 === 0, \"Invalid hex padding.\");\n\n const len = hex.length / 2;\n const bytes = new Uint8Array(len);\n for (let i = 0, j = 0; i < len; i++) {\n const n1 = charCodeToBase16(hex.charCodeAt(j++));\n const n2 = charCodeToBase16(hex.charCodeAt(j++));\n bytes[i] = n1 * 16 + n2;\n }\n\n return bytes;\n}\n\nfunction charCodeToBase16(char: number) {\n if (char >= HexChar.ZERO && char <= HexChar.NINE) return char - HexChar.ZERO;\n if (char >= HexChar.A_UP && char <= HexChar.F_UP) return char - (HexChar.A_UP - 10);\n if (char >= HexChar.A_LO && char <= HexChar.F_LO) return char - (HexChar.A_LO - 10);\n\n throw new Error(\"Invalid byte sequence.\");\n}\n\nexport const hex: BytesCoder = {\n encode: bytesToHex,\n decode: hexToBytes\n};\n","import {\n base58check as base58checkCoder,\n base58 as base58Coder,\n base64 as base64Coder\n} from \"@scure/base\";\nimport { sha256 } from \"../hashes\";\nimport type { BytesCoder } from \"../types\";\n\nexport const base58check = base58checkCoder(sha256);\nexport const base58 = base58Coder as BytesCoder;\nexport const base64 = base64Coder as BytesCoder;\n\nexport { hex } from \"./hex\";\nexport { utf8 } from \"./utf8\";\nexport { bigintBE } from \"./bigintBE\";\n","import { blake2b as _blake2b } from \"@noble/hashes/blake2b\";\nimport { sha256 as _sha256 } from \"@noble/hashes/sha256\";\nimport { hex } from \"./coders\";\nimport type { ByteInput } from \"./types\";\n\nexport type Blake2b256Options = {\n key?: ByteInput;\n salt?: ByteInput;\n personalization?: ByteInput;\n};\n\nexport type Blake2bOptions = Blake2b256Options & {\n dkLen?: number;\n};\n\nexport function ensureBytes(input: ByteInput): Uint8Array {\n return typeof input === \"string\" ? hex.decode(input) : input;\n}\n\nexport function blake2b(message: ByteInput, options?: Blake2bOptions): Uint8Array {\n if (options?.key) options.key = ensureBytes(options.key);\n if (options?.salt) options.salt = ensureBytes(options.salt);\n if (options?.personalization)\n options.personalization = ensureBytes(options.personalization);\n\n return _blake2b(ensureBytes(message), options);\n}\n\nexport function blake2b256(message: ByteInput, options?: Blake2b256Options): Uint8Array {\n return blake2b(ensureBytes(message), { dkLen: 32, ...options });\n}\n\nexport function sha256(message: ByteInput): Uint8Array {\n return _sha256(ensureBytes(message));\n}\n","import { some } from \"@fleet-sdk/common\";\n\nexport interface ParserLike {\n parse<T>(text: string): T;\n stringify<T>(value: T): string;\n}\n\nexport type Route = { base: string; path: string; query?: Record<string, unknown> };\nexport type URLLike = string | Route;\nexport type FallbackRetryOptions = { fallbacks?: URLLike[] } & RetryOptions;\n\nexport type FetchOptions = {\n parser?: ParserLike;\n base?: string;\n query?: Record<string, unknown>;\n retry?: FallbackRetryOptions;\n httpOptions?: RequestInit;\n};\n\n// https://developer.mozilla.org/en-US/docs/Web/HTTP/Status\nconst RETRY_STATUS_CODES = new Set([\n 408, // Request Timeout\n 409, // Conflict\n 425, // Too Early (Experimental)\n 429, // Too Many Requests\n 500, // Internal Server Error\n 502, // Bad Gateway\n 503, // Service Unavailable\n 504 // Gateway Timeout\n]);\n\nexport async function request<T>(path: string, opt?: Partial<FetchOptions>): Promise<T> {\n const url = buildURL(path, opt?.query, opt?.base);\n\n let response: Response;\n if (opt?.retry) {\n const routes = some(opt.retry.fallbacks) ? [url, ...opt.retry.fallbacks] : [url];\n const attempts = opt.retry.attempts;\n response = await exponentialRetry(async (r) => {\n const response = await fetch(resolveUrl(routes, attempts - r), opt.httpOptions);\n if (RETRY_STATUS_CODES.has(response.status)) throw new Error(response.statusText);\n\n return response;\n }, opt.retry);\n } else {\n response = await fetch(url, opt?.httpOptions);\n }\n\n return (opt?.parser || JSON).parse(await response.text());\n}\n\nfunction resolveUrl(routes: URLLike[], attempt: number) {\n const route = routes[attempt % routes.length];\n return typeof route === \"string\"\n ? route\n : buildURL(route.path, route.query, route.base).toString();\n}\n\nfunction buildURL(path: string, query?: Record<string, unknown>, base?: string) {\n if (!base && !query) return path;\n\n const url = new URL(path, base);\n if (some(query)) {\n for (const key in query) url.searchParams.append(key, String(query[key]));\n }\n\n return url.toString();\n}\n\nexport type RetryOptions = {\n attempts: number;\n delay: number;\n};\n\n/**\n * Retries an asynchronous operation a specified number of times with a delay\n * growing exponentially between each attempt.\n * @param operation - The asynchronous operation to retry.\n * @param options - The retry options.\n * @returns A promise that resolves to the result of the operation, or undefined\n * if all attempts fail.\n */\nexport async function exponentialRetry<T>(\n operation: (remainingAttempts: number) => Promise<T>,\n { attempts, delay }: RetryOptions\n): Promise<T> {\n try {\n return await operation(attempts);\n } catch (e) {\n if (attempts > 0) {\n await new Promise((resolve) => setTimeout(resolve, delay));\n return exponentialRetry(operation, { attempts: attempts - 1, delay: delay * 2 });\n }\n\n throw e;\n }\n}\n","import {\n BlockchainProviderError,\n clearUndefined,\n ensureDefaults,\n isEmpty,\n some\n} from \"@fleet-sdk/common\";\nimport type { FallbackRetryOptions, ParserLike } from \"./networking\";\nimport { request } from \"./networking\";\n\nconst OP_NAME_REGEX = /(query|mutation)\\s?([\\w\\-_]+)?/;\nconst DEFAULT_HEADERS = {\n \"content-type\": \"application/json; charset=utf-8\",\n accept: \"application/graphql-response+json, application/json\"\n};\n\nexport type GraphQLVariables = Record<string, unknown> | null;\n\nexport interface GraphQLError {\n message: string;\n}\n\nexport interface GraphQLSuccessResponse<T = unknown> {\n data: T;\n errors: null;\n}\n\nexport interface GraphQLErrorResponse {\n data: null;\n errors: GraphQLError[];\n}\n\nexport type GraphQLResponse<T = unknown> =\n | GraphQLSuccessResponse<T>\n | GraphQLErrorResponse;\n\nexport type GraphQLOperation<R extends GraphQLResponse, V extends GraphQLVariables> = (\n variables?: V,\n url?: string\n) => Promise<R>;\n\nexport type GraphQLRequiredUrlOperation<\n R extends GraphQLResponse,\n V extends GraphQLVariables\n> = (variables: V | undefined, url: string) => Promise<R>;\n\ninterface RequestParams {\n operationName?: string | null;\n query: string;\n variables?: Record<string, unknown> | null;\n}\n\nexport interface GraphQLRequestOptions {\n url?: string;\n parser?: ParserLike;\n retry?: FallbackRetryOptions;\n throwOnNonNetworkErrors?: boolean;\n httpOptions?: Omit<RequestInit, \"body\" | \"method\">;\n}\n\nexport function createGqlOperation<R, V extends GraphQLVariables = GraphQLVariables>(\n query: string,\n options: GraphQLRequestOptions & { throwOnNonNetworkErrors: true }\n): GraphQLOperation<GraphQLSuccessResponse<R>, V>;\nexport function createGqlOperation<R, V extends GraphQLVariables = GraphQLVariables>(\n query: string,\n options?: GraphQLRequestOptions & { url: undefined }\n): GraphQLRequiredUrlOperation<GraphQLResponse<R>, V>;\nexport function createGqlOperation<R, V extends GraphQLVariables = GraphQLVariables>(\n query: string,\n options: GraphQLRequestOptions & { url: undefined; throwOnNonNetworkErrors: true }\n): GraphQLRequiredUrlOperation<GraphQLSuccessResponse<R>, V>;\nexport function createGqlOperation<R, V extends GraphQLVariables = GraphQLVariables>(\n query: string,\n options: GraphQLRequestOptions\n): GraphQLOperation<GraphQLResponse<R>, V>;\nexport function createGqlOperation<R, V extends GraphQLVariables = GraphQLVariables>(\n query: string,\n options?: GraphQLRequestOptions\n):\n | GraphQLOperation<GraphQLResponse<R>, V>\n | GraphQLRequiredUrlOperation<GraphQLResponse<R>, V> {\n return async (variables?: V, url?: string): Promise<GraphQLResponse<R>> => {\n url = url ?? options?.url;\n if (!url) throw new Error(\"URL is required\");\n\n const response = await request<GraphQLResponse<R>>(url, {\n ...options,\n httpOptions: {\n ...options?.httpOptions,\n method: \"POST\",\n headers: ensureDefaults(options?.httpOptions?.headers, DEFAULT_HEADERS),\n body: (options?.parser ?? JSON).stringify({\n operationName: getOpName(query),\n query,\n variables: variables ? clearUndefined(variables) : undefined\n } as RequestParams)\n }\n });\n\n if (\n options?.throwOnNonNetworkErrors &&\n some(response.errors) &&\n isEmpty(response.data)\n ) {\n const msg = response.errors[0].message;\n throw new BlockchainProviderError(msg, { cause: response.errors });\n }\n\n return response;\n };\n}\n\nexport function gql(query: TemplateStringsArray): string {\n return query[0];\n}\n\nexport function getOpName(query: string): string | undefined {\n return OP_NAME_REGEX.exec(query)?.at(2);\n}\n","const B = [\n \"$boxIds: [String!] $ergoTrees: [String!] $ergoTreeTemplateHash: String $tokenId: String $skip: Int $take: Int\",\n \"boxIds: $boxIds ergoTrees: $ergoTrees ergoTreeTemplateHash: $ergoTreeTemplateHash tokenId: $tokenId skip: $skip take: $take\",\n \"boxId transactionId index value creationHeight ergoTree assets { tokenId amount } additionalRegisters\"\n];\n\nexport const CONF_BOXES_QUERY = `query boxes($spent: Boolean! ${B[0]}) { boxes(spent: $spent ${B[1]}) { ${B[2]} beingSpent } }`;\nexport const UNCONF_BOXES_QUERY = `query boxes(${B[0]}) { mempool { boxes(${B[1]}) { ${B[2]} beingSpent } } }`;\nexport const ALL_BOXES_QUERY = `query boxes($spent: Boolean! ${B[0]}) { boxes(spent: $spent ${B[1]}) { ${B[2]} beingSpent } mempool { boxes(${B[1]}) { ${B[2]} beingSpent } } }`;\n\nexport const HEADERS_QUERY =\n \"query blockHeaders($take: Int) { blockHeaders(take: $take) {headerId timestamp version adProofsRoot stateRoot transactionsRoot nBits extensionHash powSolutions height difficulty parentId votes } }\";\nexport const CHECK_TX_MUTATION =\n \"mutation checkTransaction($signedTransaction: SignedTransaction!) { checkTransaction(signedTransaction: $signedTransaction) }\";\nexport const SEND_TX_MUTATION =\n \"mutation submitTransaction($signedTransaction: SignedTransaction!) { submitTransaction(signedTransaction: $signedTransaction) }\";\n\nconst T = [\n \"$addresses: [String!], $transactionIds: [String!], $skip: Int, $take: Int\",\n \"addresses: $addresses, transactionIds: $transactionIds, skip: $skip, take: $take\",\n `transactionId timestamp inputs { proofBytes extension index box { ${B[2]} } } dataInputs { boxId }`\n];\nexport const CONF_TX_QUERY = `query confirmedTransactions(${T[0]} $onlyRelevantOutputs: Boolean) { transactions(${T[1]}) { ${T[2]} outputs(relevantOnly: $onlyRelevantOutputs) { ${B[2]} } inclusionHeight headerId index } }`;\nexport const UNCONF_TX_QUERY = `query unconfirmedTransactions(${T[0]}) { mempool { transactions(${T[1]}) { ${T[2]} outputs { ${B[2]} } } } }`;\n","import type {\n Box as GQLBox,\n QueryBoxesArgs,\n Header,\n QueryBlockHeadersArgs,\n Transaction,\n QueryTransactionsArgs,\n MempoolTransactionsArgs,\n UnconfirmedTransaction,\n UnconfirmedBox as GQLUnconfirmedBox\n} from \"@ergo-graphql/types\";\nimport {\n type Base58String,\n type BlockHeader,\n type HexString,\n type SignedTransaction,\n ensureDefaults,\n isEmpty,\n isUndefined,\n NotSupportedError,\n orderBy,\n some,\n uniq,\n uniqBy,\n chunk\n} from \"@fleet-sdk/common\";\nimport { ErgoAddress } from \"@fleet-sdk/core\";\nimport { hex } from \"@fleet-sdk/crypto\";\nimport type {\n BoxQuery,\n BoxWhere,\n ChainProviderBox,\n ChainProviderConfirmedTransaction,\n ChainProviderUnconfirmedTransaction,\n HeaderQuery,\n IBlockchainProvider,\n TransactionEvaluationResult,\n TransactionQuery,\n TransactionReductionResult,\n ConfirmedTransactionWhere,\n UnconfirmedTransactionWhere\n} from \"../types/blockchainProvider\";\nimport {\n type GraphQLOperation,\n type GraphQLRequestOptions,\n type GraphQLSuccessResponse,\n type GraphQLVariables,\n createGqlOperation\n} from \"../utils\";\nimport {\n ALL_BOXES_QUERY,\n CHECK_TX_MUTATION,\n CONF_BOXES_QUERY,\n CONF_TX_QUERY,\n HEADERS_QUERY,\n SEND_TX_MUTATION,\n UNCONF_BOXES_QUERY,\n UNCONF_TX_QUERY\n} from \"./queries\";\n\ntype SkipAndTake = { skip?: number; take?: number };\n\nexport type GraphQLBoxWhere = BoxWhere & {\n /** Base16-encoded ErgoTrees */\n ergoTrees?: HexString[];\n\n /** Base58-encoded addresses or `ErgoAddress` objects */\n addresses?: (Base58String | ErgoAddress)[];\n};\n\nexport type GraphQLConfirmedTransactionWhere = ConfirmedTransactionWhere & {\n addresses?: (Base58String | ErgoAddress)[];\n ergoTrees?: HexString[];\n};\n\nexport type GraphQLUnconfirmedTransactionWhere = UnconfirmedTransactionWhere & {\n addresses?: (Base58String | ErgoAddress)[];\n ergoTrees?: HexString[];\n};\n\nexport type GraphQLBoxQuery = BoxQuery<GraphQLBoxWhere>;\nexport type ErgoGraphQLRequestOptions = Omit<\n GraphQLRequestOptions,\n \"throwOnNonNetworkErrors\"\n>;\n\ntype ConfirmedBoxesResponse = { boxes: GQLBox[] };\ntype UnconfirmedBoxesResponse = { mempool: { boxes: GQLBox[] } };\ntype CombinedBoxesResponse = ConfirmedBoxesResponse & UnconfirmedBoxesResponse;\ntype UnconfirmedTxResponse = { mempool: { transactions: UnconfirmedTransaction[] } };\ntype ConfirmedTxResponse = { transactions: Transaction[] };\ntype BlockHeadersResponse = { blockHeaders: Header[] };\ntype CheckTransactionResponse = { checkTransaction: string };\ntype TransactionSubmissionResponse = { submitTransaction: string };\ntype SignedTxArgsResp = { signedTransaction: SignedTransaction };\n\ntype GraphQLThrowableOptions = ErgoGraphQLRequestOptions & {\n throwOnNonNetworkErrors: true;\n};\n\ntype OP<R, V extends GraphQLVariables> = GraphQLOperation<GraphQLSuccessResponse<R>, V>;\ntype BiMapper<T> = (value: string) => T;\n\nconst PAGE_SIZE = 50;\nconst MAX_ARGS = 20;\n\nexport class ErgoGraphQLProvider<I = bigint> implements IBlockchainProvider<I> {\n #options: GraphQLThrowableOptions;\n #biMapper: BiMapper<I>;\n\n #getConfirmedBoxes: OP<ConfirmedBoxesResponse, QueryBoxesArgs>;\n #getUnconfirmedBoxes: OP<UnconfirmedBoxesResponse, QueryBoxesArgs>;\n #getAllBoxes: OP<CombinedBoxesResponse, QueryBoxesArgs>;\n #getConfirmedTransactions: OP<ConfirmedTxResponse, QueryTransactionsArgs>;\n #getUnconfirmedTransactions: OP<UnconfirmedTxResponse, MempoolTransactionsArgs>;\n #checkTransaction: OP<CheckTransactionResponse, SignedTxArgsResp>;\n #sendTransaction: OP<TransactionSubmissionResponse, SignedTxArgsResp>;\n #getHeaders!: OP<BlockHeadersResponse, QueryBlockHeadersArgs>;\n\n constructor(url: string);\n constructor(options: ErgoGraphQLRequestOptions);\n constructor(optOrUrl: ErgoGraphQLRequestOptions | string) {\n this.#biMapper = (value) => BigInt(value) as I;\n this.#options = {\n ...(isRequestParam(optOrUrl) ? optOrUrl : { url: optOrUrl }),\n throwOnNonNetworkErrors: true\n };\n\n this.#getConfirmedBoxes = this.createOperation(CONF_BOXES_QUERY);\n this.#getUnconfirmedBoxes = this.createOperation(UNCONF_BOXES_QUERY);\n this.#getAllBoxes = this.createOperation(ALL_BOXES_QUERY);\n this.#getConfirmedTransactions = this.createOperation(CONF_TX_QUERY);\n this.#getUnconfirmedTransactions = this.createOperation(UNCONF_TX_QUERY);\n this.#checkTransaction = this.createOperation(CHECK_TX_MUTATION);\n this.#sendTransaction = this.createOperation(SEND_TX_MUTATION);\n this.#getHeaders = this.createOperation(HEADERS_QUERY);\n }\n\n #fetchBoxes(args: QueryBoxesArgs, inclConf: boolean, inclUnconf: boolean) {\n return inclConf && inclUnconf\n ? this.#getAllBoxes(args)\n : inclUnconf\n ? this.#getUnconfirmedBoxes(args)\n : this.#getConfirmedBoxes(args);\n }\n\n setUrl(url: string): ErgoGraphQLProvider<I> {\n this.#options.url = url;\n return this;\n }\n\n setBigIntMapper<M>(mapper: BiMapper<M>): ErgoGraphQLProvider<M> {\n this.#biMapper = mapper as unknown as BiMapper<I>;\n return this as unknown as ErgoGraphQLProvider<M>;\n }\n\n async *streamBoxes(\n query: GraphQLBoxQuery & SkipAndTake\n ): AsyncGenerator<ChainProviderBox<I>[]> {\n if (isEmpty(query.where)) {\n throw new Error(\"Cannot fetch unspent boxes without a where clause.\");\n }\n\n const notBeingSpent = (box: GQLBox) => !box.beingSpent;\n const returnedBoxIds = new Set<string>();\n const { from, take } = query;\n const pageSize = take ?? PAGE_SIZE;\n const queries = buildGqlBoxQueries(query);\n const isMempoolAware = from !== \"blockchain\";\n\n for (const query of queries) {\n let inclChain = from !== \"mempool\";\n let inclPool = from !== \"blockchain\";\n\n while (inclChain || inclPool) {\n const { data } = await this.#fetchBoxes(query, inclChain, inclPool);\n let boxes: ChainProviderBox<I>[] = [];\n\n if (inclChain && hasConfirmed(data)) {\n if (some(data.boxes)) {\n const confirmedBoxes = (\n isMempoolAware ? data.boxes.filter(notBeingSpent) : data.boxes\n ).map((b) => mapConfirmedBox(b, this.#biMapper));\n\n boxes = boxes.concat(confirmedBoxes);\n }\n\n inclChain = data.boxes.length === pageSize;\n }\n\n if (isMempoolAware && hasMempool(data)) {\n if (some(data.mempool.boxes)) {\n const mempoolBoxes = data.mempool.boxes\n .filter(notBeingSpent)\n .map((b) => mapUnconfirmedBox(b, this.#biMapper));\n boxes = boxes.concat(mempoolBoxes);\n }\n\n inclPool = data.mempool.boxes.length === pageSize;\n }\n\n if (some(boxes)) {\n // boxes can be moved from the mempool to the blockchain while streaming,\n // so we need to filter out boxes that have already been returned.\n if (boxes.some((box) => returnedBoxIds.has(box.boxId))) {\n boxes = boxes.filter((b) => !returnedBoxIds.has(b.boxId));\n }\n\n if (some(boxes)) {\n boxes = uniqBy(boxes, (box) => box.boxId);\n for (const box of boxes) returnedBoxIds.add(box.boxId);\n yield boxes;\n }\n }\n\n if (inclChain || inclPool) query.skip += pageSize;\n }\n }\n }\n\n async getBoxes(query: GraphQLBoxQuery): Promise<ChainProviderBox<I>[]> {\n const boxes: ChainProviderBox<I>[][] = [];\n for await (const chunk of this.streamBoxes(query)) boxes.push(chunk);\n return orderBy(boxes.flat(), (box) => box.creationHeight);\n }\n\n async *streamUnconfirmedTransactions(\n query: TransactionQuery<GraphQLUnconfirmedTransactionWhere> & SkipAndTake\n ): AsyncGenerator<ChainProviderUnconfirmedTransaction<I>[]> {\n const pageSize = query.take ?? PAGE_SIZE;\n const queries = buildGqlUnconfirmedTxQueries(query);\n\n for (const query of queries) {\n let keepFetching = true;\n while (keepFetching) {\n const response = await this.#getUnconfirmedTransactions(query);\n if (some(response.data?.mempool?.transactions)) {\n yield response.data.mempool.transactions.map((t) =>\n mapUnconfirmedTransaction(t, this.#biMapper)\n );\n }\n\n keepFetching = response.data?.mempool?.transactions?.length === pageSize;\n if (keepFetching) query.skip += pageSize;\n }\n }\n }\n\n async getUnconfirmedTransactions(\n query: TransactionQuery<GraphQLUnconfirmedTransactionWhere>\n ): Promise<ChainProviderUnconfirmedTransaction<I>[]> {\n const transactions: ChainProviderUnconfirmedTransaction<I>[][] = [];\n for await (const chunk of this.streamUnconfirmedTransactions(query)) {\n transactions.push(chunk);\n }\n\n return transactions.flat();\n }\n\n async *streamConfirmedTransactions(\n query: TransactionQuery<GraphQLConfirmedTransactionWhere> & SkipAndTake\n ): AsyncGenerator<ChainProviderConfirmedTransaction<I>[]> {\n const pageSize = query.take ?? PAGE_SIZE;\n const queries = buildGqlConfirmedTxQueries(query);\n\n for (const query of queries) {\n let keepFetching = true;\n while (keepFetching) {\n const response = await this.#getConfirmedTransactions(query);\n if (some(response.data?.transactions)) {\n yield response.data.transactions.map((t) =>\n mapConfirmedTransaction(t, this.#biMapper)\n );\n }\n\n keepFetching = response.data?.transactions?.length === pageSize;\n if (keepFetching) query.skip += pageSize;\n }\n }\n }\n\n async getConfirmedTransactions(\n query: TransactionQuery<GraphQLConfirmedTransactionWhere>\n ): Promise<ChainProviderConfirmedTransaction<I>[]> {\n const transactions: ChainProviderConfirmedTransaction<I>[][] = [];\n for await (const chunk of this.streamConfirmedTransactions(query)) {\n transactions.push(chunk);\n }\n\n return transactions.flat();\n }\n\n async getHeaders(query: HeaderQuery): Promise<BlockHeader[]> {\n const response = await this.#getHeaders(query);\n\n return (\n response.data?.blockHeaders.map((h) => ({\n ...h,\n id: h.headerId,\n timestamp: Number(h.timestamp),\n nBits: Number(h.nBits),\n votes: hex.encode(Uint8Array.from(h.votes))\n })) ?? []\n );\n }\n\n createOperation<R, V extends GraphQLVariables = GraphQLVariables>(\n query: string,\n options?: Partial<ErgoGraphQLRequestOptions>\n ): GraphQLOperation<GraphQLSuccessResponse<R>, V> {\n const opt = ensureDefaults(options, this.#options);\n opt.throwOnNonNetworkErrors = true;\n\n return createGqlOperation(query, opt);\n }\n\n async checkTransaction(\n signedTransaction: SignedTransaction\n ): Promise<TransactionEvaluationResult> {\n try {\n const response = await this.#checkTransaction({ signedTransaction });\n return { success: true, transactionId: response.data.checkTransaction };\n } catch (e) {\n return { success: false, message: (e as Error).message };\n }\n }\n\n async submitTransaction(\n signedTransaction: SignedTransaction\n ): Promise<TransactionEvaluationResult> {\n try {\n const response = await this.#sendTransaction({ signedTransaction });\n return { success: true, transactionId: response.data.submitTransaction };\n } catch (e) {\n return { success: false, message: (e as Error).message };\n }\n }\n\n reduceTransaction(): Promise<TransactionReductionResult> {\n throw new NotSupportedError(\"Transaction reducing is not supported by ergo-graphql.\");\n }\n}\n\nfunction buildGqlBoxQueries(query: GraphQLBoxQuery & SkipAndTake) {\n const ergoTrees = uniq(\n [\n merge(query.where.ergoTrees, query.where.ergoTree) ?? [],\n merge(query.where.addresses, query.where.address)?.map((a) =>\n typeof a === \"string\" ? ErgoAddress.decode(a).ergoTree : a.ergoTree\n ) ?? []\n ].flat()\n );\n\n const baseQuery = {\n spent: false,\n boxIds: query.where.boxId ? [query.where.boxId] : undefined,\n ergoTreeTemplateHash: query.where.templateHash,\n tokenId: query.where.tokenId,\n skip: query.skip ?? 0,\n take: query.take ?? PAGE_SIZE\n };\n\n return isEmpty(ergoTrees)\n ? [baseQuery]\n : chunk(ergoTrees, MAX_ARGS).map((chunk) => ({ ergoTrees: chunk, ...baseQuery }));\n}\n\nfunction buildGqlUnconfirmedTxQueries(\n query: TransactionQuery<GraphQLUnconfirmedTransactionWhere> & SkipAndTake\n) {\n const addresses = uniq(\n [\n merge(query.where.addresses, query.where.address)?.map((address): string =>\n typeof address === \"string\" ? address : address.encode()\n ) ?? [],\n merge(query.where.ergoTrees, query.where.ergoTree)?.map((tree) =>\n ErgoAddress.fromErgoTree(tree).encode()\n ) ?? []\n ].flat()\n );\n\n const baseQuery = {\n transactionIds: query.where.transactionId ? [query.where.transactionId] : undefined,\n skip: query.skip ?? 0,\n take: query.take ?? PAGE_SIZE\n };\n\n return isEmpty(addresses)\n ? [baseQuery]\n : chunk(addresses, MAX_ARGS).map((chunk) => ({ addresses: chunk, ...baseQuery }));\n}\n\nfunction buildGqlConfirmedTxQueries(\n query: TransactionQuery<GraphQLConfirmedTransactionWhere> & SkipAndTake\n) {\n return buildGqlUnconfirmedTxQueries(\n query as TransactionQuery<GraphQLUnconfirmedTransactionWhere>\n ).map((baseQuery) => ({\n ...baseQuery,\n headerId: query.where.headerId,\n minHeight: query.where.minHeight,\n onlyRelevantOutputs: query.where.onlyRelevantOutputs\n }));\n}\n\nfunction merge<T>(array?: T[], el?: T) {\n if (isEmpty(array) && isUndefined(el)) return;\n\n const set = new Set<T>(array ?? []);\n if (!isUndefined(el)) set.add(el);\n return Array.from(set.values());\n}\n\nfunction hasMempool(data: unknown): data is UnconfirmedBoxesResponse {\n return !!(data as UnconfirmedBoxesResponse)?.mempool?.boxes;\n}\n\nfunction hasConfirmed(data: unknown): data is ConfirmedBoxesResponse {\n return !!(data as ConfirmedBoxesResponse)?.boxes;\n}\n\nfunction mapConfirmedBox<T>(box: GQLBox, mapper: BiMapper<T>): ChainProviderBox<T> {\n const mapped = mapBox(box, mapper) as ChainProviderBox<T>;\n mapped.confirmed = true;\n return mapped;\n}\n\nfunction mapUnconfirmedBox<T>(box: GQLBox, mapper: BiMapper<T>): ChainProviderBox<T> {\n const mapped = mapBox(box, mapper) as ChainProviderBox<T>;\n mapped.confirmed = false;\n return mapped;\n}\n\nfunction mapBox<T>(\n box: GQLBox | GQLUnconfirmedBox,\n mapper: BiMapper<T>\n): Omit<ChainProviderBox<T>, \"confirmed\"> {\n return {\n boxId: box.boxId,\n transactionId: box.transactionId,\n value: mapper(box.value),\n ergoTree: box.ergoTree,\n assets: box.assets.map((t) => ({ tokenId: t.tokenId, amount: mapper(t.amount) })),\n creationHeight: box.creationHeight,\n additionalRegisters: box.additionalRegisters,\n index: box.index\n };\n}\n\nfunction mapUnconfirmedTransaction<T>(\n tx: UnconfirmedTransaction,\n mapper: BiMapper<T>\n): ChainProviderUnconfirmedTransaction<T> {\n return {\n transactionId: tx.transactionId,\n timestamp: Number(tx.timestamp),\n inputs: tx.inputs.map((i) => ({\n spendingProof: {\n // biome-ignore lint/style/noNonNullAssertion: bad type declarations at '@ergo-graphql/type'\n extension: i.extension!,\n // biome-ignore lint/style/noNonNullAssertion: bad type declarations at '@ergo-graphql/type'\n proofBytes: i.proofBytes!\n },\n // biome-ignore lint/style/noNonNullAssertion: bad type declarations at '@ergo-graphql/type'\n ...mapBox(i.box!, mapper)\n })),\n dataInputs: tx.dataInputs.map((di) => ({ boxId: di.boxId })),\n outputs: tx.outputs.map((b) => mapBox(b, mapper)),\n confirmed: false\n };\n}\n\nfunction mapConfirmedTransaction<T>(\n tx: Transaction,\n mapper: BiMapper<T>\n): ChainProviderConfirmedTransaction<T> {\n return {\n transactionId: tx.transactionId,\n timestamp: Number(tx.timestamp),\n inputs: tx.inputs.map((i) => ({\n spendingProof: {\n // biome-ignore lint/style/noNonNullAssertion: bad type declarations at '@ergo-graphql/type'\n extension: i.extension!,\n // biome-ignore lint/style/noNonNullAssertion: bad type declarations at '@ergo-graphql/type'\n proofBytes: i.proofBytes!\n },\n // biome-ignore lint/style/noNonNullAssertion: bad type declarations at '@ergo-graphql/type'\n ...mapBox(i.box!, mapper)\n })),\n dataInputs: tx.dataInputs.map((di) => ({ boxId: di.boxId })),\n outputs: tx.outputs.map((b) => mapBox(b, mapper)),\n height: tx.inclusionHeight,\n headerId: tx.headerId,\n index: tx.index,\n confirmed: true\n };\n}\n\nexport function isRequestParam(obj: unknown): obj is ErgoGraphQLRequestOptions {\n return typeof obj === \"object\" && (obj as ErgoGraphQLRequestOptions).url !== undefined;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fleet-sdk/blockchain-providers",
3
- "version": "0.8.2",
3
+ "version": "0.8.3",
4
4
  "description": "Blockchain data providers",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",
@@ -33,8 +33,8 @@
33
33
  "node": ">=18"
34
34
  },
35
35
  "dependencies": {
36
- "@fleet-sdk/common": "^0.8.0",
37
- "@fleet-sdk/core": "^0.8.2"
36
+ "@fleet-sdk/common": "^0.8.3",
37
+ "@fleet-sdk/core": "^0.8.3"
38
38
  },
39
39
  "files": [
40
40
  "src",