@secondlayer/stacks 2.0.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/shared/{stacks-0nfexv24.cjs → stacks-0jk7vd8r.cjs} +9 -8
- package/dist/shared/{stacks-0nfexv24.cjs.map → stacks-0jk7vd8r.cjs.map} +5 -5
- package/dist/shared/{stacks-wjem3xw9.js → stacks-0zysn74p.js} +11 -10
- package/dist/shared/{stacks-wjem3xw9.js.map → stacks-0zysn74p.js.map} +5 -5
- package/dist/shared/stacks-14pgpkrr.cjs.map +6 -6
- package/dist/shared/{stacks-s7z5q8be.js → stacks-2h8d2y27.js} +29 -28
- package/dist/shared/stacks-2h8d2y27.js.map +11 -0
- package/dist/shared/{stacks-96d6m1zy.js → stacks-3erxq8wh.js} +6 -6
- package/dist/shared/{stacks-96d6m1zy.js.map → stacks-3erxq8wh.js.map} +4 -4
- package/dist/shared/{stacks-ra02bpny.cjs → stacks-3y058qda.cjs} +29 -28
- package/dist/shared/stacks-3y058qda.cjs.map +11 -0
- package/dist/shared/{stacks-s10yb9gz.js → stacks-6xmk24yw.js} +2 -2
- package/dist/shared/{stacks-70p84bgg.js → stacks-7tn3zsbe.js} +3 -3
- package/dist/shared/stacks-7tn3zsbe.js.map +10 -0
- package/dist/shared/{stacks-y5262j0z.cjs → stacks-8e4k5qnm.cjs} +4 -4
- package/dist/shared/{stacks-y5262j0z.cjs.map → stacks-8e4k5qnm.cjs.map} +4 -4
- package/dist/shared/{stacks-5tprhns9.cjs → stacks-dpxnxhqb.cjs} +2 -5
- package/dist/shared/{stacks-5tprhns9.cjs.map → stacks-dpxnxhqb.cjs.map} +3 -3
- package/dist/shared/{stacks-4x2bcc2k.js → stacks-fy5h5qyx.js} +7 -7
- package/dist/shared/{stacks-4x2bcc2k.js.map → stacks-fy5h5qyx.js.map} +6 -6
- package/dist/shared/{stacks-zf7rbpzp.js → stacks-g7ffp8aj.js} +3 -3
- package/dist/shared/{stacks-zf7rbpzp.js.map → stacks-g7ffp8aj.js.map} +2 -2
- package/dist/shared/{stacks-1s5w4ncf.js → stacks-g7ys594x.js} +7 -7
- package/dist/shared/{stacks-1s5w4ncf.js.map → stacks-g7ys594x.js.map} +4 -4
- package/dist/shared/{stacks-09wa7ewe.js → stacks-kmnthgj7.js} +12 -12
- package/dist/shared/stacks-kmnthgj7.js.map +15 -0
- package/dist/shared/{stacks-je937aas.js → stacks-kmshch4q.js} +3 -3
- package/dist/shared/{stacks-y3dh7hv1.js → stacks-tjjnkt3r.js} +2 -5
- package/dist/shared/{stacks-y3dh7hv1.js.map → stacks-tjjnkt3r.js.map} +3 -3
- package/dist/shared/stacks-vdfag81a.cjs.map +2 -2
- package/dist/shared/stacks-wyxj879g.cjs.map +2 -2
- package/dist/shared/{stacks-rwfgts3s.js → stacks-xxn5ma6g.js} +2 -2
- package/dist/shared/{stacks-17sdtaxg.cjs → stacks-xxvz1x0f.cjs} +8 -8
- package/dist/shared/stacks-xxvz1x0f.cjs.map +15 -0
- package/dist/shared/{stacks-s30kkvm8.js → stacks-y2p4h5ks.js} +4 -4
- package/dist/shared/{stacks-znrb59ce.cjs → stacks-y3nbm8bw.cjs} +3 -3
- package/dist/shared/{stacks-znrb59ce.cjs.map → stacks-y3nbm8bw.cjs.map} +4 -4
- package/dist/src/accounts/index.cjs +3 -2
- package/dist/src/accounts/index.cjs.map +3 -3
- package/dist/src/accounts/index.js +5 -4
- package/dist/src/accounts/index.js.map +3 -3
- package/dist/src/actions/index.js +11 -11
- package/dist/src/bns/index.cjs +2 -4
- package/dist/src/bns/index.cjs.map +4 -4
- package/dist/src/bns/index.js +12 -14
- package/dist/src/bns/index.js.map +4 -4
- package/dist/src/clarity/index.js +5 -5
- package/dist/src/connect/index.cjs +17 -17
- package/dist/src/connect/index.cjs.map +7 -7
- package/dist/src/connect/index.js +17 -17
- package/dist/src/connect/index.js.map +7 -7
- package/dist/src/connect/walletconnect/index.cjs +16 -13
- package/dist/src/connect/walletconnect/index.cjs.map +9 -9
- package/dist/src/connect/walletconnect/index.js +16 -13
- package/dist/src/connect/walletconnect/index.js.map +9 -9
- package/dist/src/index.cjs +4 -4
- package/dist/src/index.cjs.map +8 -8
- package/dist/src/index.d.cts +0 -4
- package/dist/src/index.d.ts +0 -4
- package/dist/src/index.js +13 -13
- package/dist/src/index.js.map +8 -8
- package/dist/src/postconditions/index.js +3 -3
- package/dist/src/pox/index.cjs +2 -2
- package/dist/src/pox/index.cjs.map +3 -3
- package/dist/src/pox/index.js +11 -11
- package/dist/src/pox/index.js.map +3 -3
- package/dist/src/stackingdao/index.cjs +7 -7
- package/dist/src/stackingdao/index.cjs.map +3 -3
- package/dist/src/stackingdao/index.js +16 -16
- package/dist/src/stackingdao/index.js.map +3 -3
- package/dist/src/subscriptions/index.js +1 -1
- package/dist/src/tools/btc/index.cjs.map +2 -2
- package/dist/src/tools/btc/index.js.map +2 -2
- package/dist/src/tools/index.cjs +42 -43
- package/dist/src/tools/index.cjs.map +23 -23
- package/dist/src/tools/index.js +42 -43
- package/dist/src/tools/index.js.map +23 -23
- package/dist/src/transactions/index.js +6 -6
- package/dist/src/utils/index.js +3 -3
- package/package.json +1 -1
- package/dist/shared/stacks-09wa7ewe.js.map +0 -15
- package/dist/shared/stacks-17sdtaxg.cjs.map +0 -15
- package/dist/shared/stacks-70p84bgg.js.map +0 -10
- package/dist/shared/stacks-ra02bpny.cjs.map +0 -11
- package/dist/shared/stacks-s7z5q8be.js.map +0 -11
- /package/dist/shared/{stacks-s10yb9gz.js.map → stacks-6xmk24yw.js.map} +0 -0
- /package/dist/shared/{stacks-je937aas.js.map → stacks-kmshch4q.js.map} +0 -0
- /package/dist/shared/{stacks-rwfgts3s.js.map → stacks-xxn5ma6g.js.map} +0 -0
- /package/dist/shared/{stacks-s30kkvm8.js.map → stacks-y2p4h5ks.js.map} +0 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/utils/encoding.ts", "../src/utils/c32.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"const hexes = Array.from({ length: 256 }, (_, i) =>\n\ti.toString(16).padStart(2, \"0\"),\n);\n\nexport function bytesToHex(bytes: Uint8Array): string {\n\tlet hex = \"\";\n\tfor (const b of bytes) {\n\t\thex += hexes[b];\n\t}\n\treturn hex;\n}\n\nexport function hexToBytes(hex: string): Uint8Array {\n\tlet h = without0x(hex);\n\tif (h.length % 2) h = `0${h}`;\n\n\tconst array = new Uint8Array(h.length / 2);\n\tfor (let i = 0; i < array.length; i++) {\n\t\tconst j = i * 2;\n\t\tconst byte = Number.parseInt(h.slice(j, j + 2), 16);\n\t\tif (Number.isNaN(byte) || byte < 0)\n\t\t\tthrow new Error(\"Invalid byte sequence\");\n\t\tarray[i] = byte;\n\t}\n\treturn array;\n}\n\nexport function with0x(value: string): string {\n\treturn /^0x/i.test(value) ? value : `0x${value}`;\n}\n\nexport function without0x(value: string): string {\n\treturn /^0x/i.test(value) ? value.slice(2) : value;\n}\n\nexport function utf8ToBytes(str: string): Uint8Array {\n\treturn new TextEncoder().encode(str);\n}\n\nexport function bytesToUtf8(bytes: Uint8Array): string {\n\treturn new TextDecoder().decode(bytes);\n}\n\nexport function asciiToBytes(str: string): Uint8Array {\n\tconst bytes = new Uint8Array(str.length);\n\tfor (let i = 0; i < str.length; i++) {\n\t\tbytes[i] = str.charCodeAt(i) & 0xff;\n\t}\n\treturn bytes;\n}\n\nexport function bytesToAscii(bytes: Uint8Array): string {\n\treturn String.fromCharCode(...bytes);\n}\n\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n\t// biome-ignore lint/style/noNonNullAssertion: bit-encoding routine where index is provably bounded by surrounding loop/length checks\n\tif (arrays.length === 1) return arrays[0]!;\n\tconst length = arrays.reduce((a, arr) => a + arr.length, 0);\n\tconst result = new Uint8Array(length);\n\tlet pad = 0;\n\tfor (const arr of arrays) {\n\t\tresult.set(arr, pad);\n\t\tpad += arr.length;\n\t}\n\treturn result;\n}\n\nexport type IntegerType = number | string | bigint | Uint8Array;\n\nexport function intToBigInt(value: IntegerType): bigint {\n\tif (typeof value === \"bigint\") return value;\n\tif (typeof value === \"string\") return BigInt(value);\n\tif (typeof value === \"number\") {\n\t\tif (!Number.isInteger(value))\n\t\t\tthrow new RangeError(\"Values of type 'number' must be an integer.\");\n\t\tif (value > Number.MAX_SAFE_INTEGER)\n\t\t\tthrow new RangeError(\n\t\t\t\t`Values of type 'number' must be <= ${Number.MAX_SAFE_INTEGER}. Use BigInt instead.`,\n\t\t\t);\n\t\treturn BigInt(value);\n\t}\n\tif (value instanceof Uint8Array) return BigInt(`0x${bytesToHex(value)}`);\n\tthrow new TypeError(\"Must be a number, bigint, string, or Uint8Array.\");\n}\n\nexport function intToBytes(value: IntegerType, byteLength: number): Uint8Array {\n\treturn bigIntToBytes(intToBigInt(value), byteLength);\n}\n\nexport function bigIntToBytes(value: bigint, length = 16): Uint8Array {\n\tconst hex = value.toString(16).padStart(length * 2, \"0\");\n\treturn hexToBytes(hex);\n}\n\nexport function intToHex(integer: IntegerType, byteLength = 8): string {\n\tconst value = typeof integer === \"bigint\" ? integer : intToBigInt(integer);\n\treturn value.toString(16).padStart(byteLength * 2, \"0\");\n}\n\nexport function toTwos(value: bigint, width: bigint): bigint {\n\tconst limit = BigInt(1) << (width - BigInt(1));\n\tif (value < -limit || value > limit - BigInt(1)) {\n\t\tthrow new Error(`Unable to represent integer in width: ${width}`);\n\t}\n\tif (value >= BigInt(0)) return value;\n\treturn value + (BigInt(1) << width);\n}\n\nexport function fromTwos(value: bigint, width: bigint): bigint {\n\tif (value & (BigInt(1) << (width - BigInt(1)))) {\n\t\treturn value - (BigInt(1) << width);\n\t}\n\treturn value;\n}\n\nexport function bytesToTwosBigInt(bytes: Uint8Array): bigint {\n\tif (bytes.length === 0) return 0n;\n\tconst hex = bytesToHex(bytes);\n\tif (hex.length === 0) return 0n;\n\treturn fromTwos(BigInt(`0x${hex}`), BigInt(bytes.byteLength * 8));\n}\n\nexport function writeUInt32BE(value: number): Uint8Array {\n\tconst buf = new Uint8Array(4);\n\tbuf[0] = (value >>> 24) & 0xff;\n\tbuf[1] = (value >>> 16) & 0xff;\n\tbuf[2] = (value >>> 8) & 0xff;\n\tbuf[3] = value & 0xff;\n\treturn buf;\n}\n\nexport function readUInt32BE(bytes: Uint8Array, offset = 0): number {\n\treturn (\n\t\t// biome-ignore lint/style/noNonNullAssertion: bit-encoding routine where index is provably bounded by surrounding loop/length checks\n\t\t((bytes[offset]! << 24) |\n\t\t\t// biome-ignore lint/style/noNonNullAssertion: bit-encoding routine where index is provably bounded by surrounding loop/length checks\n\t\t\t(bytes[offset + 1]! << 16) |\n\t\t\t// biome-ignore lint/style/noNonNullAssertion: bit-encoding routine where index is provably bounded by surrounding loop/length checks\n\t\t\t(bytes[offset + 2]! << 8) |\n\t\t\t// biome-ignore lint/style/noNonNullAssertion: bit-encoding routine where index is provably bounded by surrounding loop/length checks\n\t\t\tbytes[offset + 3]!) >>>\n\t\t0\n\t);\n}\n\nexport function writeUInt16BE(value: number): Uint8Array {\n\tconst buf = new Uint8Array(2);\n\tbuf[0] = (value >>> 8) & 0xff;\n\tbuf[1] = value & 0xff;\n\treturn buf;\n}\n\nexport function readUInt16BE(bytes: Uint8Array, offset = 0): number {\n\t// biome-ignore lint/style/noNonNullAssertion: bit-encoding routine where index is provably bounded by surrounding loop/length checks\n\treturn ((bytes[offset]! << 8) | bytes[offset + 1]!) >>> 0;\n}\n\nexport function writeUInt8(value: number): Uint8Array {\n\treturn new Uint8Array([value & 0xff]);\n}\n",
|
|
6
|
+
"import { sha256 } from \"@noble/hashes/sha2.js\";\nimport { bytesToHex, hexToBytes } from \"./encoding.ts\";\n\nconst C32 = \"0123456789ABCDEFGHJKMNPQRSTVWXYZ\";\nconst HEX = \"0123456789abcdef\";\n\nfunction c32normalize(input: string): string {\n\treturn input.toUpperCase().replace(/O/g, \"0\").replace(/L|I/g, \"1\");\n}\n\nfunction c32encode(inputHex: string): string {\n\tlet hex = inputHex;\n\tif (hex.length % 2 !== 0) hex = `0${hex}`;\n\thex = hex.toLowerCase();\n\n\tconst res: string[] = [];\n\tlet carry = 0;\n\tfor (let i = hex.length - 1; i >= 0; i--) {\n\t\tif (carry < 4) {\n\t\t\t// biome-ignore lint/style/noNonNullAssertion: bit-encoding routine where index is provably bounded by surrounding loop/length checks\n\t\t\tconst currentCode = HEX.indexOf(hex[i]!) >> carry;\n\t\t\t// biome-ignore lint/style/noNonNullAssertion: bit-encoding routine where index is provably bounded by surrounding loop/length checks\n\t\t\tconst nextCode = i !== 0 ? HEX.indexOf(hex[i - 1]!) : 0;\n\t\t\tconst nextBits = 1 + carry;\n\t\t\tconst nextLowBits = (nextCode % (1 << nextBits)) << (5 - nextBits);\n\t\t\t// biome-ignore lint/style/noNonNullAssertion: bit-encoding routine where index is provably bounded by surrounding loop/length checks\n\t\t\tres.unshift(C32[currentCode + nextLowBits]!);\n\t\t\tcarry = nextBits;\n\t\t} else {\n\t\t\tcarry = 0;\n\t\t}\n\t}\n\n\t// Strip leading c32 zeros\n\tlet leadingZeros = 0;\n\twhile (leadingZeros < res.length && res[leadingZeros] === \"0\") leadingZeros++;\n\tconst stripped = res.slice(leadingZeros);\n\n\t// Preserve leading zero bytes from hex\n\tconst bytes = hexToBytes(hex);\n\tlet zeroBytesCount = 0;\n\twhile (zeroBytesCount < bytes.length && bytes[zeroBytesCount] === 0)\n\t\tzeroBytesCount++;\n\tconst prefix = Array(zeroBytesCount).fill(C32[0]) as string[];\n\n\treturn [...prefix, ...stripped].join(\"\");\n}\n\nfunction c32decode(c32input: string): string {\n\tconst input = c32normalize(c32input);\n\tif (!input.match(`^[${C32}]*$`)) throw new Error(\"Not a c32-encoded string\");\n\n\tconst zeroPrefix = input.match(`^${C32[0]}*`);\n\tconst numLeadingZeroBytes = zeroPrefix ? zeroPrefix[0]?.length : 0;\n\n\tconst res: string[] = [];\n\tlet carry = 0;\n\tlet carryBits = 0;\n\tfor (let i = input.length - 1; i >= 0; i--) {\n\t\tif (carryBits === 4) {\n\t\t\t// biome-ignore lint/style/noNonNullAssertion: bit-encoding routine where index is provably bounded by surrounding loop/length checks\n\t\t\tres.unshift(HEX[carry]!);\n\t\t\tcarryBits = 0;\n\t\t\tcarry = 0;\n\t\t}\n\t\t// biome-ignore lint/style/noNonNullAssertion: bit-encoding routine where index is provably bounded by surrounding loop/length checks\n\t\tconst currentValue = (C32.indexOf(input[i]!) << carryBits) + carry;\n\t\t// biome-ignore lint/style/noNonNullAssertion: bit-encoding routine where index is provably bounded by surrounding loop/length checks\n\t\tres.unshift(HEX[currentValue % 16]!);\n\t\tcarryBits += 1;\n\t\tcarry = currentValue >> 4;\n\t\tif (carry > 1 << carryBits) throw new Error(\"Panic error in c32 decoding\");\n\t}\n\t// biome-ignore lint/style/noNonNullAssertion: bit-encoding routine where index is provably bounded by surrounding loop/length checks\n\tres.unshift(HEX[carry]!);\n\n\tif (res.length % 2 === 1) res.unshift(\"0\");\n\n\t// Strip leading hex zeros\n\tlet hexLeadingZeros = 0;\n\twhile (hexLeadingZeros < res.length && res[hexLeadingZeros] === \"0\")\n\t\thexLeadingZeros++;\n\tlet hexStr = res.slice(hexLeadingZeros - (hexLeadingZeros % 2)).join(\"\");\n\n\tfor (let i = 0; i < numLeadingZeroBytes; i++) hexStr = `00${hexStr}`;\n\n\treturn hexStr;\n}\n\nfunction c32checksum(dataHex: string): string {\n\treturn bytesToHex(sha256(sha256(hexToBytes(dataHex))).slice(0, 4));\n}\n\nfunction c32checkEncode(version: number, data: string): string {\n\tif (version < 0 || version >= 32)\n\t\tthrow new Error(\"Invalid version (must be between 0 and 31)\");\n\tif (!data.match(/^[0-9a-fA-F]*$/))\n\t\tthrow new Error(\"Invalid data (not a hex string)\");\n\n\tlet d = data.toLowerCase();\n\tif (d.length % 2 !== 0) d = `0${d}`;\n\n\tlet versionHex = version.toString(16);\n\tif (versionHex.length === 1) versionHex = `0${versionHex}`;\n\n\tconst checksumHex = c32checksum(`${versionHex}${d}`);\n\treturn `${C32[version]}${c32encode(`${d}${checksumHex}`)}`;\n}\n\nfunction c32checkDecode(c32data: string): [number, string] {\n\tconst normalized = c32normalize(c32data);\n\tconst dataHex = c32decode(normalized.slice(1));\n\t// biome-ignore lint/style/noNonNullAssertion: bit-encoding routine where index is provably bounded by surrounding loop/length checks\n\tconst version = C32.indexOf(normalized[0]!);\n\tconst checksum = dataHex.slice(-8);\n\n\tlet versionHex = version.toString(16);\n\tif (versionHex.length === 1) versionHex = `0${versionHex}`;\n\n\tif (\n\t\tc32checksum(`${versionHex}${dataHex.substring(0, dataHex.length - 8)}`) !==\n\t\tchecksum\n\t) {\n\t\tthrow new Error(\"Invalid c32check string: checksum mismatch\");\n\t}\n\n\treturn [version, dataHex.substring(0, dataHex.length - 8)];\n}\n\nexport function c32address(version: number, hash160hex: string): string {\n\tif (!hash160hex.match(/^[0-9a-fA-F]{40}$/)) {\n\t\tthrow new Error(\"Invalid argument: not a hash160 hex string\");\n\t}\n\treturn `S${c32checkEncode(version, hash160hex)}`;\n}\n\nexport function c32addressDecode(c32addr: string): [number, string] {\n\tif (c32addr.length <= 5)\n\t\tthrow new Error(\"Invalid c32 address: invalid length\");\n\tif (c32addr[0] !== \"S\")\n\t\tthrow new Error('Invalid c32 address: must start with \"S\"');\n\treturn c32checkDecode(c32addr.slice(1));\n}\n"
|
|
7
|
+
],
|
|
8
|
+
"mappings": "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",
|
|
9
|
+
"debugId": "C3BE22D0D85483C864756E2164756E21",
|
|
10
|
+
"names": []
|
|
11
|
+
}
|
|
@@ -13,13 +13,13 @@ import {
|
|
|
13
13
|
isUint128,
|
|
14
14
|
isUint8Array,
|
|
15
15
|
toCamelCase
|
|
16
|
-
} from "./stacks-
|
|
16
|
+
} from "./stacks-g7ffp8aj.js";
|
|
17
17
|
import {
|
|
18
18
|
asciiToBytes,
|
|
19
19
|
bytesToAscii,
|
|
20
20
|
hexToBytes,
|
|
21
21
|
utf8ToBytes
|
|
22
|
-
} from "./stacks-
|
|
22
|
+
} from "./stacks-2h8d2y27.js";
|
|
23
23
|
// src/clarity/prettyPrint.ts
|
|
24
24
|
function prettyPrint(val, encoding = "hex") {
|
|
25
25
|
switch (val.type) {
|
|
@@ -77,7 +77,7 @@ function cvToJSON(val) {
|
|
|
77
77
|
case "none":
|
|
78
78
|
return { type: "(optional none)", value: null };
|
|
79
79
|
case "some":
|
|
80
|
-
return { type:
|
|
80
|
+
return { type: "(optional)", value: cvToJSON(val.value) };
|
|
81
81
|
case "ok":
|
|
82
82
|
return { type: "(response)", value: cvToJSON(val.value), success: true };
|
|
83
83
|
case "err":
|
|
@@ -259,7 +259,7 @@ function jsToClarity(type, value) {
|
|
|
259
259
|
}
|
|
260
260
|
throw new ClarityConversionError("Response must have exactly 'ok' or 'err' property", type, value);
|
|
261
261
|
}
|
|
262
|
-
throw new ClarityConversionError(
|
|
262
|
+
throw new ClarityConversionError("Unknown Clarity type", type, value);
|
|
263
263
|
}
|
|
264
264
|
function prepareArgs(func, args) {
|
|
265
265
|
return func.args.map((arg) => {
|
|
@@ -287,5 +287,5 @@ function validateArgsArray(func, args) {
|
|
|
287
287
|
}
|
|
288
288
|
export { prettyPrint, cvToJSON, cvToValue, ClarityConversionError, jsToClarity, prepareArgs, validateArgs, validateArgsArray };
|
|
289
289
|
|
|
290
|
-
//# debugId=
|
|
291
|
-
//# sourceMappingURL=stacks-
|
|
290
|
+
//# debugId=0815F4CBCC6F821164756E2164756E21
|
|
291
|
+
//# sourceMappingURL=stacks-3erxq8wh.js.map
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/clarity/prettyPrint.ts", "../src/clarity/abi/converters.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"import {\n\tasciiToBytes,\n\tbytesToAscii,\n\thexToBytes,\n\tutf8ToBytes,\n} from \"../utils/encoding.ts\";\nimport type { ClarityValue } from \"./types.ts\";\n\nexport function prettyPrint(\n\tval: ClarityValue,\n\tencoding: \"tryAscii\" | \"hex\" = \"hex\",\n): string | undefined {\n\tswitch (val.type) {\n\t\tcase \"true\":\n\t\t\treturn \"true\";\n\t\tcase \"false\":\n\t\t\treturn \"false\";\n\t\tcase \"int\":\n\t\t\treturn val.value.toString();\n\t\tcase \"uint\":\n\t\t\treturn `u${val.value.toString()}`;\n\t\tcase \"buffer\":\n\t\t\tif (encoding === \"tryAscii\") {\n\t\t\t\tconst str = bytesToAscii(hexToBytes(val.value));\n\t\t\t\tif (/^[ -~]*$/.test(str)) return JSON.stringify(str);\n\t\t\t}\n\t\t\treturn `0x${val.value}`;\n\t\tcase \"none\":\n\t\t\treturn \"none\";\n\t\tcase \"some\":\n\t\t\treturn `(some ${prettyPrint(val.value, encoding)})`;\n\t\tcase \"ok\":\n\t\t\treturn `(ok ${prettyPrint(val.value, encoding)})`;\n\t\tcase \"err\":\n\t\t\treturn `(err ${prettyPrint(val.value, encoding)})`;\n\t\tcase \"address\":\n\t\tcase \"contract\":\n\t\t\treturn val.value;\n\t\tcase \"list\":\n\t\t\treturn `(list ${val.value.map((v) => prettyPrint(v, encoding)).join(\" \")})`;\n\t\tcase \"tuple\":\n\t\t\treturn `(tuple ${Object.keys(val.value)\n\t\t\t\t.map((key) => `(${key} ${prettyPrint(val.value[key]!, encoding)})`)\n\t\t\t\t.join(\" \")})`;\n\t\tcase \"ascii\":\n\t\t\treturn `\"${val.value}\"`;\n\t\tcase \"utf8\":\n\t\t\treturn `u\"${val.value}\"`;\n\t}\n}\n\nexport function cvToJSON(val: ClarityValue): any {\n\tswitch (val.type) {\n\t\tcase \"true\":\n\t\t\treturn { type: \"bool\", value: true };\n\t\tcase \"false\":\n\t\t\treturn { type: \"bool\", value: false };\n\t\tcase \"int\":\n\t\t\treturn { type: \"int\", value: val.value.toString() };\n\t\tcase \"uint\":\n\t\t\treturn { type: \"uint\", value: val.value.toString() };\n\t\tcase \"buffer\":\n\t\t\treturn {\n\t\t\t\ttype: `(buff ${Math.ceil(val.value.length / 2)})`,\n\t\t\t\tvalue: `0x${val.value}`,\n\t\t\t};\n\t\tcase \"none\":\n\t\t\treturn { type: \"(optional none)\", value: null };\n\t\tcase \"some\":\n\t\t\treturn { type:
|
|
6
|
-
"import type { AbiFunction } from \"./contract.ts\";\nimport {\n\tisAbiBuffer,\n\tisAbiList,\n\tisAbiOptional,\n\tisAbiResponse,\n\tisAbiStringAscii,\n\tisAbiStringUtf8,\n\tisAbiTuple,\n\tisBool,\n\tisInt128,\n\tisPrincipal,\n\tisString,\n\tisUint8Array,\n\tisUint128,\n} from \"./guards.ts\";\nimport type { AbiType } from \"./types.ts\";\nimport { toCamelCase } from \"./utils.ts\";\n\nexport class ClarityConversionError extends Error {\n\tconstructor(\n\t\tmessage: string,\n\t\tpublic readonly type: AbiType,\n\t\tpublic readonly value: unknown,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"ClarityConversionError\";\n\t}\n}\n\nexport function jsToClarity(type: AbiType, value: unknown): unknown {\n\tif (type === \"none\") return null;\n\n\tif (type === \"uint128\") {\n\t\tif (!isUint128(value))\n\t\t\tthrow new ClarityConversionError(\"Invalid uint128 value\", type, value);\n\t\treturn value;\n\t}\n\n\tif (type === \"int128\") {\n\t\tif (!isInt128(value))\n\t\t\tthrow new ClarityConversionError(\"Invalid int128 value\", type, value);\n\t\treturn value;\n\t}\n\n\tif (type === \"bool\") {\n\t\tif (!isBool(value))\n\t\t\tthrow new ClarityConversionError(\"Invalid bool value\", type, value);\n\t\treturn value;\n\t}\n\n\tif (type === \"principal\") {\n\t\tif (!isPrincipal(value))\n\t\t\tthrow new ClarityConversionError(\"Invalid principal value\", type, value);\n\t\treturn value;\n\t}\n\n\tif (type === \"trait_reference\") {\n\t\tif (!isPrincipal(value))\n\t\t\tthrow new ClarityConversionError(\n\t\t\t\t\"Invalid trait_reference value\",\n\t\t\t\ttype,\n\t\t\t\tvalue,\n\t\t\t);\n\t\treturn value;\n\t}\n\n\tif (isAbiStringAscii(type)) {\n\t\tif (!isString(value))\n\t\t\tthrow new ClarityConversionError(\n\t\t\t\t\"Invalid string-ascii value\",\n\t\t\t\ttype,\n\t\t\t\tvalue,\n\t\t\t);\n\t\tconst str = value as string;\n\t\tfor (let i = 0; i < str.length; i++) {\n\t\t\tif (str.charCodeAt(i) > 127) {\n\t\t\t\tthrow new ClarityConversionError(\n\t\t\t\t\t`Non-ASCII character at position ${i}: '${str[i]}' (code ${str.charCodeAt(i)})`,\n\t\t\t\t\ttype,\n\t\t\t\t\tvalue,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (str.length > type[\"string-ascii\"].length) {\n\t\t\tthrow new ClarityConversionError(\n\t\t\t\t`String length ${str.length} exceeds max ${type[\"string-ascii\"].length}`,\n\t\t\t\ttype,\n\t\t\t\tvalue,\n\t\t\t);\n\t\t}\n\t\treturn value;\n\t}\n\n\tif (isAbiStringUtf8(type)) {\n\t\tif (!isString(value))\n\t\t\tthrow new ClarityConversionError(\n\t\t\t\t\"Invalid string-utf8 value\",\n\t\t\t\ttype,\n\t\t\t\tvalue,\n\t\t\t);\n\t\tconst str = value as string;\n\t\tconst byteLength = new TextEncoder().encode(str).length;\n\t\tif (byteLength > type[\"string-utf8\"].length) {\n\t\t\tthrow new ClarityConversionError(\n\t\t\t\t`String byte length ${byteLength} exceeds max ${type[\"string-utf8\"].length}`,\n\t\t\t\ttype,\n\t\t\t\tvalue,\n\t\t\t);\n\t\t}\n\t\treturn value;\n\t}\n\n\tif (isAbiBuffer(type)) {\n\t\tif (!isUint8Array(value))\n\t\t\tthrow new ClarityConversionError(\"Invalid buffer value\", type, value);\n\t\tconst buff = value as Uint8Array;\n\t\tif (buff.length > type.buff.length) {\n\t\t\tthrow new ClarityConversionError(\n\t\t\t\t`Buffer length ${buff.length} exceeds max ${type.buff.length}`,\n\t\t\t\ttype,\n\t\t\t\tvalue,\n\t\t\t);\n\t\t}\n\t\treturn value;\n\t}\n\n\tif (isAbiList(type)) {\n\t\tif (!Array.isArray(value))\n\t\t\tthrow new ClarityConversionError(\n\t\t\t\t\"Expected array for list type\",\n\t\t\t\ttype,\n\t\t\t\tvalue,\n\t\t\t);\n\t\tif (value.length > type.list.length) {\n\t\t\tthrow new ClarityConversionError(\n\t\t\t\t`List length ${value.length} exceeds max ${type.list.length}`,\n\t\t\t\ttype,\n\t\t\t\tvalue,\n\t\t\t);\n\t\t}\n\t\treturn value.map((item) => jsToClarity(type.list.type, item));\n\t}\n\n\tif (isAbiTuple(type)) {\n\t\tif (typeof value !== \"object\" || value === null)\n\t\t\tthrow new ClarityConversionError(\n\t\t\t\t\"Expected object for tuple type\",\n\t\t\t\ttype,\n\t\t\t\tvalue,\n\t\t\t);\n\t\tconst result: Record<string, unknown> = {};\n\t\tfor (const field of type.tuple) {\n\t\t\tconst camelKey = toCamelCase(field.name);\n\t\t\tconst hasOriginal = field.name in (value as object);\n\t\t\tconst hasCamel = camelKey in (value as object);\n\t\t\tif (!hasOriginal && !hasCamel) {\n\t\t\t\tthrow new ClarityConversionError(\n\t\t\t\t\t`Missing tuple field: ${field.name}`,\n\t\t\t\t\ttype,\n\t\t\t\t\tvalue,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst fieldValue = hasOriginal\n\t\t\t\t? (value as Record<string, unknown>)[field.name]\n\t\t\t\t: (value as Record<string, unknown>)[camelKey];\n\t\t\tresult[field.name] = jsToClarity(field.type, fieldValue);\n\t\t}\n\t\treturn result;\n\t}\n\n\tif (isAbiOptional(type)) {\n\t\tif (value === null || value === undefined) return null;\n\t\treturn jsToClarity(type.optional, value);\n\t}\n\n\tif (isAbiResponse(type)) {\n\t\tif (typeof value !== \"object\" || value === null)\n\t\t\tthrow new ClarityConversionError(\n\t\t\t\t\"Expected object for response type\",\n\t\t\t\ttype,\n\t\t\t\tvalue,\n\t\t\t);\n\t\tconst hasOk = \"ok\" in value;\n\t\tconst hasErr = \"err\" in value;\n\t\tif (hasOk && !hasErr) {\n\t\t\treturn {\n\t\t\t\tok: jsToClarity(type.response.ok, (value as { ok: unknown }).ok),\n\t\t\t};\n\t\t}\n\t\tif (hasErr && !hasOk) {\n\t\t\treturn {\n\t\t\t\terr: jsToClarity(type.response.error, (value as { err: unknown }).err),\n\t\t\t};\n\t\t}\n\t\tthrow new ClarityConversionError(\n\t\t\t\"Response must have exactly 'ok' or 'err' property\",\n\t\t\ttype,\n\t\t\tvalue,\n\t\t);\n\t}\n\n\tthrow new ClarityConversionError(
|
|
5
|
+
"import {\n\tasciiToBytes,\n\tbytesToAscii,\n\thexToBytes,\n\tutf8ToBytes,\n} from \"../utils/encoding.ts\";\nimport type { ClarityValue } from \"./types.ts\";\n\nexport function prettyPrint(\n\tval: ClarityValue,\n\tencoding: \"tryAscii\" | \"hex\" = \"hex\",\n): string | undefined {\n\tswitch (val.type) {\n\t\tcase \"true\":\n\t\t\treturn \"true\";\n\t\tcase \"false\":\n\t\t\treturn \"false\";\n\t\tcase \"int\":\n\t\t\treturn val.value.toString();\n\t\tcase \"uint\":\n\t\t\treturn `u${val.value.toString()}`;\n\t\tcase \"buffer\":\n\t\t\tif (encoding === \"tryAscii\") {\n\t\t\t\tconst str = bytesToAscii(hexToBytes(val.value));\n\t\t\t\tif (/^[ -~]*$/.test(str)) return JSON.stringify(str);\n\t\t\t}\n\t\t\treturn `0x${val.value}`;\n\t\tcase \"none\":\n\t\t\treturn \"none\";\n\t\tcase \"some\":\n\t\t\treturn `(some ${prettyPrint(val.value, encoding)})`;\n\t\tcase \"ok\":\n\t\t\treturn `(ok ${prettyPrint(val.value, encoding)})`;\n\t\tcase \"err\":\n\t\t\treturn `(err ${prettyPrint(val.value, encoding)})`;\n\t\tcase \"address\":\n\t\tcase \"contract\":\n\t\t\treturn val.value;\n\t\tcase \"list\":\n\t\t\treturn `(list ${val.value.map((v) => prettyPrint(v, encoding)).join(\" \")})`;\n\t\tcase \"tuple\":\n\t\t\treturn `(tuple ${Object.keys(val.value)\n\t\t\t\t// biome-ignore lint/style/noNonNullAssertion: value is non-null after preceding check or by construction; TS narrowing limitation\n\t\t\t\t.map((key) => `(${key} ${prettyPrint(val.value[key]!, encoding)})`)\n\t\t\t\t.join(\" \")})`;\n\t\tcase \"ascii\":\n\t\t\treturn `\"${val.value}\"`;\n\t\tcase \"utf8\":\n\t\t\treturn `u\"${val.value}\"`;\n\t}\n}\n\n// biome-ignore lint/suspicious/noExplicitAny: interop boundary or dynamic-shape value where typing adds friction without runtime safety\nexport function cvToJSON(val: ClarityValue): any {\n\tswitch (val.type) {\n\t\tcase \"true\":\n\t\t\treturn { type: \"bool\", value: true };\n\t\tcase \"false\":\n\t\t\treturn { type: \"bool\", value: false };\n\t\tcase \"int\":\n\t\t\treturn { type: \"int\", value: val.value.toString() };\n\t\tcase \"uint\":\n\t\t\treturn { type: \"uint\", value: val.value.toString() };\n\t\tcase \"buffer\":\n\t\t\treturn {\n\t\t\t\ttype: `(buff ${Math.ceil(val.value.length / 2)})`,\n\t\t\t\tvalue: `0x${val.value}`,\n\t\t\t};\n\t\tcase \"none\":\n\t\t\treturn { type: \"(optional none)\", value: null };\n\t\tcase \"some\":\n\t\t\treturn { type: \"(optional)\", value: cvToJSON(val.value) };\n\t\tcase \"ok\":\n\t\t\treturn { type: \"(response)\", value: cvToJSON(val.value), success: true };\n\t\tcase \"err\":\n\t\t\treturn { type: \"(response)\", value: cvToJSON(val.value), success: false };\n\t\tcase \"address\":\n\t\tcase \"contract\":\n\t\t\treturn { type: \"principal\", value: val.value };\n\t\tcase \"list\":\n\t\t\treturn { type: \"(list)\", value: val.value.map(cvToJSON) };\n\t\tcase \"tuple\": {\n\t\t\t// biome-ignore lint/suspicious/noExplicitAny: interop boundary or dynamic-shape value where typing adds friction without runtime safety\n\t\t\tconst result: Record<string, any> = {};\n\t\t\tfor (const key of Object.keys(val.value)) {\n\t\t\t\t// biome-ignore lint/style/noNonNullAssertion: value is non-null after preceding check or by construction; TS narrowing limitation\n\t\t\t\tresult[key] = cvToJSON(val.value[key]!);\n\t\t\t}\n\t\t\treturn { type: \"(tuple)\", value: result };\n\t\t}\n\t\tcase \"ascii\":\n\t\t\treturn {\n\t\t\t\ttype: `(string-ascii ${asciiToBytes(val.value).length})`,\n\t\t\t\tvalue: val.value,\n\t\t\t};\n\t\tcase \"utf8\":\n\t\t\treturn {\n\t\t\t\ttype: `(string-utf8 ${utf8ToBytes(val.value).length})`,\n\t\t\t\tvalue: val.value,\n\t\t\t};\n\t}\n}\n\n// biome-ignore lint/suspicious/noExplicitAny: interop boundary or dynamic-shape value where typing adds friction without runtime safety\nexport function cvToValue(val: ClarityValue): any {\n\tswitch (val.type) {\n\t\tcase \"true\":\n\t\t\treturn true;\n\t\tcase \"false\":\n\t\t\treturn false;\n\t\tcase \"int\":\n\t\tcase \"uint\":\n\t\t\treturn val.value;\n\t\tcase \"buffer\":\n\t\t\treturn `0x${val.value}`;\n\t\tcase \"none\":\n\t\t\treturn null;\n\t\tcase \"some\":\n\t\t\treturn cvToValue(val.value);\n\t\tcase \"ok\":\n\t\tcase \"err\":\n\t\t\treturn cvToValue(val.value);\n\t\tcase \"address\":\n\t\tcase \"contract\":\n\t\t\treturn val.value;\n\t\tcase \"list\":\n\t\t\treturn val.value.map(cvToValue);\n\t\tcase \"tuple\": {\n\t\t\t// biome-ignore lint/suspicious/noExplicitAny: interop boundary or dynamic-shape value where typing adds friction without runtime safety\n\t\t\tconst result: Record<string, any> = {};\n\t\t\tfor (const key of Object.keys(val.value)) {\n\t\t\t\t// biome-ignore lint/style/noNonNullAssertion: value is non-null after preceding check or by construction; TS narrowing limitation\n\t\t\t\tresult[key] = cvToValue(val.value[key]!);\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t\tcase \"ascii\":\n\t\tcase \"utf8\":\n\t\t\treturn val.value;\n\t}\n}\n",
|
|
6
|
+
"import type { AbiFunction } from \"./contract.ts\";\nimport {\n\tisAbiBuffer,\n\tisAbiList,\n\tisAbiOptional,\n\tisAbiResponse,\n\tisAbiStringAscii,\n\tisAbiStringUtf8,\n\tisAbiTuple,\n\tisBool,\n\tisInt128,\n\tisPrincipal,\n\tisString,\n\tisUint8Array,\n\tisUint128,\n} from \"./guards.ts\";\nimport type { AbiType } from \"./types.ts\";\nimport { toCamelCase } from \"./utils.ts\";\n\nexport class ClarityConversionError extends Error {\n\tconstructor(\n\t\tmessage: string,\n\t\tpublic readonly type: AbiType,\n\t\tpublic readonly value: unknown,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"ClarityConversionError\";\n\t}\n}\n\nexport function jsToClarity(type: AbiType, value: unknown): unknown {\n\tif (type === \"none\") return null;\n\n\tif (type === \"uint128\") {\n\t\tif (!isUint128(value))\n\t\t\tthrow new ClarityConversionError(\"Invalid uint128 value\", type, value);\n\t\treturn value;\n\t}\n\n\tif (type === \"int128\") {\n\t\tif (!isInt128(value))\n\t\t\tthrow new ClarityConversionError(\"Invalid int128 value\", type, value);\n\t\treturn value;\n\t}\n\n\tif (type === \"bool\") {\n\t\tif (!isBool(value))\n\t\t\tthrow new ClarityConversionError(\"Invalid bool value\", type, value);\n\t\treturn value;\n\t}\n\n\tif (type === \"principal\") {\n\t\tif (!isPrincipal(value))\n\t\t\tthrow new ClarityConversionError(\"Invalid principal value\", type, value);\n\t\treturn value;\n\t}\n\n\tif (type === \"trait_reference\") {\n\t\tif (!isPrincipal(value))\n\t\t\tthrow new ClarityConversionError(\n\t\t\t\t\"Invalid trait_reference value\",\n\t\t\t\ttype,\n\t\t\t\tvalue,\n\t\t\t);\n\t\treturn value;\n\t}\n\n\tif (isAbiStringAscii(type)) {\n\t\tif (!isString(value))\n\t\t\tthrow new ClarityConversionError(\n\t\t\t\t\"Invalid string-ascii value\",\n\t\t\t\ttype,\n\t\t\t\tvalue,\n\t\t\t);\n\t\tconst str = value as string;\n\t\tfor (let i = 0; i < str.length; i++) {\n\t\t\tif (str.charCodeAt(i) > 127) {\n\t\t\t\tthrow new ClarityConversionError(\n\t\t\t\t\t`Non-ASCII character at position ${i}: '${str[i]}' (code ${str.charCodeAt(i)})`,\n\t\t\t\t\ttype,\n\t\t\t\t\tvalue,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (str.length > type[\"string-ascii\"].length) {\n\t\t\tthrow new ClarityConversionError(\n\t\t\t\t`String length ${str.length} exceeds max ${type[\"string-ascii\"].length}`,\n\t\t\t\ttype,\n\t\t\t\tvalue,\n\t\t\t);\n\t\t}\n\t\treturn value;\n\t}\n\n\tif (isAbiStringUtf8(type)) {\n\t\tif (!isString(value))\n\t\t\tthrow new ClarityConversionError(\n\t\t\t\t\"Invalid string-utf8 value\",\n\t\t\t\ttype,\n\t\t\t\tvalue,\n\t\t\t);\n\t\tconst str = value as string;\n\t\tconst byteLength = new TextEncoder().encode(str).length;\n\t\tif (byteLength > type[\"string-utf8\"].length) {\n\t\t\tthrow new ClarityConversionError(\n\t\t\t\t`String byte length ${byteLength} exceeds max ${type[\"string-utf8\"].length}`,\n\t\t\t\ttype,\n\t\t\t\tvalue,\n\t\t\t);\n\t\t}\n\t\treturn value;\n\t}\n\n\tif (isAbiBuffer(type)) {\n\t\tif (!isUint8Array(value))\n\t\t\tthrow new ClarityConversionError(\"Invalid buffer value\", type, value);\n\t\tconst buff = value as Uint8Array;\n\t\tif (buff.length > type.buff.length) {\n\t\t\tthrow new ClarityConversionError(\n\t\t\t\t`Buffer length ${buff.length} exceeds max ${type.buff.length}`,\n\t\t\t\ttype,\n\t\t\t\tvalue,\n\t\t\t);\n\t\t}\n\t\treturn value;\n\t}\n\n\tif (isAbiList(type)) {\n\t\tif (!Array.isArray(value))\n\t\t\tthrow new ClarityConversionError(\n\t\t\t\t\"Expected array for list type\",\n\t\t\t\ttype,\n\t\t\t\tvalue,\n\t\t\t);\n\t\tif (value.length > type.list.length) {\n\t\t\tthrow new ClarityConversionError(\n\t\t\t\t`List length ${value.length} exceeds max ${type.list.length}`,\n\t\t\t\ttype,\n\t\t\t\tvalue,\n\t\t\t);\n\t\t}\n\t\treturn value.map((item) => jsToClarity(type.list.type, item));\n\t}\n\n\tif (isAbiTuple(type)) {\n\t\tif (typeof value !== \"object\" || value === null)\n\t\t\tthrow new ClarityConversionError(\n\t\t\t\t\"Expected object for tuple type\",\n\t\t\t\ttype,\n\t\t\t\tvalue,\n\t\t\t);\n\t\tconst result: Record<string, unknown> = {};\n\t\tfor (const field of type.tuple) {\n\t\t\tconst camelKey = toCamelCase(field.name);\n\t\t\tconst hasOriginal = field.name in (value as object);\n\t\t\tconst hasCamel = camelKey in (value as object);\n\t\t\tif (!hasOriginal && !hasCamel) {\n\t\t\t\tthrow new ClarityConversionError(\n\t\t\t\t\t`Missing tuple field: ${field.name}`,\n\t\t\t\t\ttype,\n\t\t\t\t\tvalue,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst fieldValue = hasOriginal\n\t\t\t\t? (value as Record<string, unknown>)[field.name]\n\t\t\t\t: (value as Record<string, unknown>)[camelKey];\n\t\t\tresult[field.name] = jsToClarity(field.type, fieldValue);\n\t\t}\n\t\treturn result;\n\t}\n\n\tif (isAbiOptional(type)) {\n\t\tif (value === null || value === undefined) return null;\n\t\treturn jsToClarity(type.optional, value);\n\t}\n\n\tif (isAbiResponse(type)) {\n\t\tif (typeof value !== \"object\" || value === null)\n\t\t\tthrow new ClarityConversionError(\n\t\t\t\t\"Expected object for response type\",\n\t\t\t\ttype,\n\t\t\t\tvalue,\n\t\t\t);\n\t\tconst hasOk = \"ok\" in value;\n\t\tconst hasErr = \"err\" in value;\n\t\tif (hasOk && !hasErr) {\n\t\t\treturn {\n\t\t\t\tok: jsToClarity(type.response.ok, (value as { ok: unknown }).ok),\n\t\t\t};\n\t\t}\n\t\tif (hasErr && !hasOk) {\n\t\t\treturn {\n\t\t\t\terr: jsToClarity(type.response.error, (value as { err: unknown }).err),\n\t\t\t};\n\t\t}\n\t\tthrow new ClarityConversionError(\n\t\t\t\"Response must have exactly 'ok' or 'err' property\",\n\t\t\ttype,\n\t\t\tvalue,\n\t\t);\n\t}\n\n\tthrow new ClarityConversionError(\"Unknown Clarity type\", type, value);\n}\n\nexport function prepareArgs<F extends AbiFunction>(\n\tfunc: F,\n\targs: Record<string, unknown>,\n): unknown[] {\n\treturn func.args.map((arg) => {\n\t\tif (!(arg.name in args)) {\n\t\t\tthrow new ClarityConversionError(\n\t\t\t\t`Missing argument: ${arg.name}`,\n\t\t\t\targ.type,\n\t\t\t\tundefined,\n\t\t\t);\n\t\t}\n\t\treturn jsToClarity(arg.type, args[arg.name]);\n\t});\n}\n\nexport function validateArgs<F extends AbiFunction>(\n\tfunc: F,\n\targs: Record<string, unknown>,\n): void {\n\tfor (const arg of func.args) {\n\t\tif (!(arg.name in args)) {\n\t\t\tthrow new ClarityConversionError(\n\t\t\t\t`Missing argument: ${arg.name}`,\n\t\t\t\targ.type,\n\t\t\t\tundefined,\n\t\t\t);\n\t\t}\n\t\tjsToClarity(arg.type, args[arg.name]);\n\t}\n}\n\nexport function validateArgsArray<F extends AbiFunction>(\n\tfunc: F,\n\targs: unknown[],\n): void {\n\tif (args.length !== func.args.length) {\n\t\tthrow new ClarityConversionError(\n\t\t\t`Expected ${func.args.length} arguments, got ${args.length}`,\n\t\t\tfunc.args[0]?.type ?? \"bool\",\n\t\t\targs,\n\t\t);\n\t}\n\tfunc.args.forEach((arg, i) => {\n\t\tjsToClarity(arg.type, args[i]);\n\t});\n}\n"
|
|
7
7
|
],
|
|
8
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;AAQO,SAAS,WAAW,CAC1B,KACA,WAA+B,OACV;AAAA,EACrB,QAAQ,IAAI;AAAA,SACN;AAAA,MACJ,OAAO;AAAA,SACH;AAAA,MACJ,OAAO;AAAA,SACH;AAAA,MACJ,OAAO,IAAI,MAAM,SAAS;AAAA,SACtB;AAAA,MACJ,OAAO,IAAI,IAAI,MAAM,SAAS;AAAA,SAC1B;AAAA,MACJ,IAAI,aAAa,YAAY;AAAA,QAC5B,MAAM,MAAM,aAAa,WAAW,IAAI,KAAK,CAAC;AAAA,QAC9C,IAAI,WAAW,KAAK,GAAG;AAAA,UAAG,OAAO,KAAK,UAAU,GAAG;AAAA,MACpD;AAAA,MACA,OAAO,KAAK,IAAI;AAAA,SACZ;AAAA,MACJ,OAAO;AAAA,SACH;AAAA,MACJ,OAAO,SAAS,YAAY,IAAI,OAAO,QAAQ;AAAA,SAC3C;AAAA,MACJ,OAAO,OAAO,YAAY,IAAI,OAAO,QAAQ;AAAA,SACzC;AAAA,MACJ,OAAO,QAAQ,YAAY,IAAI,OAAO,QAAQ;AAAA,SAC1C;AAAA,SACA;AAAA,MACJ,OAAO,IAAI;AAAA,SACP;AAAA,MACJ,OAAO,SAAS,IAAI,MAAM,IAAI,CAAC,MAAM,YAAY,GAAG,QAAQ,CAAC,EAAE,KAAK,GAAG;AAAA,SACnE;AAAA,MACJ,OAAO,UAAU,OAAO,KAAK,IAAI,KAAK,
|
|
9
|
-
"debugId": "
|
|
8
|
+
"mappings": "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",
|
|
9
|
+
"debugId": "0815F4CBCC6F821164756E2164756E21",
|
|
10
10
|
"names": []
|
|
11
11
|
}
|
|
@@ -8,13 +8,13 @@ function bytesToHex(bytes) {
|
|
|
8
8
|
return hex;
|
|
9
9
|
}
|
|
10
10
|
function hexToBytes(hex) {
|
|
11
|
-
|
|
12
|
-
if (
|
|
13
|
-
|
|
14
|
-
const array = new Uint8Array(
|
|
11
|
+
let h = without0x(hex);
|
|
12
|
+
if (h.length % 2)
|
|
13
|
+
h = `0${h}`;
|
|
14
|
+
const array = new Uint8Array(h.length / 2);
|
|
15
15
|
for (let i = 0;i < array.length; i++) {
|
|
16
16
|
const j = i * 2;
|
|
17
|
-
const byte = Number.parseInt(
|
|
17
|
+
const byte = Number.parseInt(h.slice(j, j + 2), 16);
|
|
18
18
|
if (Number.isNaN(byte) || byte < 0)
|
|
19
19
|
throw new Error("Invalid byte sequence");
|
|
20
20
|
array[i] = byte;
|
|
@@ -137,15 +137,16 @@ function c32normalize(input) {
|
|
|
137
137
|
return input.toUpperCase().replace(/O/g, "0").replace(/L|I/g, "1");
|
|
138
138
|
}
|
|
139
139
|
function c32encode(inputHex) {
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
140
|
+
let hex = inputHex;
|
|
141
|
+
if (hex.length % 2 !== 0)
|
|
142
|
+
hex = `0${hex}`;
|
|
143
|
+
hex = hex.toLowerCase();
|
|
143
144
|
const res = [];
|
|
144
145
|
let carry = 0;
|
|
145
|
-
for (let i =
|
|
146
|
+
for (let i = hex.length - 1;i >= 0; i--) {
|
|
146
147
|
if (carry < 4) {
|
|
147
|
-
const currentCode = HEX.indexOf(
|
|
148
|
-
const nextCode = i !== 0 ? HEX.indexOf(
|
|
148
|
+
const currentCode = HEX.indexOf(hex[i]) >> carry;
|
|
149
|
+
const nextCode = i !== 0 ? HEX.indexOf(hex[i - 1]) : 0;
|
|
149
150
|
const nextBits = 1 + carry;
|
|
150
151
|
const nextLowBits = nextCode % (1 << nextBits) << 5 - nextBits;
|
|
151
152
|
res.unshift(C32[currentCode + nextLowBits]);
|
|
@@ -158,7 +159,7 @@ function c32encode(inputHex) {
|
|
|
158
159
|
while (leadingZeros < res.length && res[leadingZeros] === "0")
|
|
159
160
|
leadingZeros++;
|
|
160
161
|
const stripped = res.slice(leadingZeros);
|
|
161
|
-
const bytes = hexToBytes(
|
|
162
|
+
const bytes = hexToBytes(hex);
|
|
162
163
|
let zeroBytesCount = 0;
|
|
163
164
|
while (zeroBytesCount < bytes.length && bytes[zeroBytesCount] === 0)
|
|
164
165
|
zeroBytesCount++;
|
|
@@ -166,21 +167,21 @@ function c32encode(inputHex) {
|
|
|
166
167
|
return [...prefix, ...stripped].join("");
|
|
167
168
|
}
|
|
168
169
|
function c32decode(c32input) {
|
|
169
|
-
|
|
170
|
-
if (!
|
|
170
|
+
const input = c32normalize(c32input);
|
|
171
|
+
if (!input.match(`^[${C32}]*$`))
|
|
171
172
|
throw new Error("Not a c32-encoded string");
|
|
172
|
-
const zeroPrefix =
|
|
173
|
-
const numLeadingZeroBytes = zeroPrefix ? zeroPrefix[0]
|
|
173
|
+
const zeroPrefix = input.match(`^${C32[0]}*`);
|
|
174
|
+
const numLeadingZeroBytes = zeroPrefix ? zeroPrefix[0]?.length : 0;
|
|
174
175
|
const res = [];
|
|
175
176
|
let carry = 0;
|
|
176
177
|
let carryBits = 0;
|
|
177
|
-
for (let i =
|
|
178
|
+
for (let i = input.length - 1;i >= 0; i--) {
|
|
178
179
|
if (carryBits === 4) {
|
|
179
180
|
res.unshift(HEX[carry]);
|
|
180
181
|
carryBits = 0;
|
|
181
182
|
carry = 0;
|
|
182
183
|
}
|
|
183
|
-
const currentValue = (C32.indexOf(
|
|
184
|
+
const currentValue = (C32.indexOf(input[i]) << carryBits) + carry;
|
|
184
185
|
res.unshift(HEX[currentValue % 16]);
|
|
185
186
|
carryBits += 1;
|
|
186
187
|
carry = currentValue >> 4;
|
|
@@ -206,19 +207,19 @@ function c32checkEncode(version, data) {
|
|
|
206
207
|
throw new Error("Invalid version (must be between 0 and 31)");
|
|
207
208
|
if (!data.match(/^[0-9a-fA-F]*$/))
|
|
208
209
|
throw new Error("Invalid data (not a hex string)");
|
|
209
|
-
|
|
210
|
-
if (
|
|
211
|
-
|
|
210
|
+
let d = data.toLowerCase();
|
|
211
|
+
if (d.length % 2 !== 0)
|
|
212
|
+
d = `0${d}`;
|
|
212
213
|
let versionHex = version.toString(16);
|
|
213
214
|
if (versionHex.length === 1)
|
|
214
215
|
versionHex = `0${versionHex}`;
|
|
215
|
-
const checksumHex = c32checksum(`${versionHex}${
|
|
216
|
-
return `${C32[version]}${c32encode(`${
|
|
216
|
+
const checksumHex = c32checksum(`${versionHex}${d}`);
|
|
217
|
+
return `${C32[version]}${c32encode(`${d}${checksumHex}`)}`;
|
|
217
218
|
}
|
|
218
219
|
function c32checkDecode(c32data) {
|
|
219
|
-
|
|
220
|
-
const dataHex = c32decode(
|
|
221
|
-
const version = C32.indexOf(
|
|
220
|
+
const normalized = c32normalize(c32data);
|
|
221
|
+
const dataHex = c32decode(normalized.slice(1));
|
|
222
|
+
const version = C32.indexOf(normalized[0]);
|
|
222
223
|
const checksum = dataHex.slice(-8);
|
|
223
224
|
let versionHex = version.toString(16);
|
|
224
225
|
if (versionHex.length === 1)
|
|
@@ -242,5 +243,5 @@ function c32addressDecode(c32addr) {
|
|
|
242
243
|
return c32checkDecode(c32addr.slice(1));
|
|
243
244
|
}
|
|
244
245
|
|
|
245
|
-
//# debugId=
|
|
246
|
-
//# sourceMappingURL=stacks-
|
|
246
|
+
//# debugId=5BCBB8B7E9A859DB64756E2164756E21
|
|
247
|
+
//# sourceMappingURL=stacks-3y058qda.cjs.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/utils/encoding.ts", "../src/utils/c32.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"const hexes = Array.from({ length: 256 }, (_, i) =>\n\ti.toString(16).padStart(2, \"0\"),\n);\n\nexport function bytesToHex(bytes: Uint8Array): string {\n\tlet hex = \"\";\n\tfor (const b of bytes) {\n\t\thex += hexes[b];\n\t}\n\treturn hex;\n}\n\nexport function hexToBytes(hex: string): Uint8Array {\n\tlet h = without0x(hex);\n\tif (h.length % 2) h = `0${h}`;\n\n\tconst array = new Uint8Array(h.length / 2);\n\tfor (let i = 0; i < array.length; i++) {\n\t\tconst j = i * 2;\n\t\tconst byte = Number.parseInt(h.slice(j, j + 2), 16);\n\t\tif (Number.isNaN(byte) || byte < 0)\n\t\t\tthrow new Error(\"Invalid byte sequence\");\n\t\tarray[i] = byte;\n\t}\n\treturn array;\n}\n\nexport function with0x(value: string): string {\n\treturn /^0x/i.test(value) ? value : `0x${value}`;\n}\n\nexport function without0x(value: string): string {\n\treturn /^0x/i.test(value) ? value.slice(2) : value;\n}\n\nexport function utf8ToBytes(str: string): Uint8Array {\n\treturn new TextEncoder().encode(str);\n}\n\nexport function bytesToUtf8(bytes: Uint8Array): string {\n\treturn new TextDecoder().decode(bytes);\n}\n\nexport function asciiToBytes(str: string): Uint8Array {\n\tconst bytes = new Uint8Array(str.length);\n\tfor (let i = 0; i < str.length; i++) {\n\t\tbytes[i] = str.charCodeAt(i) & 0xff;\n\t}\n\treturn bytes;\n}\n\nexport function bytesToAscii(bytes: Uint8Array): string {\n\treturn String.fromCharCode(...bytes);\n}\n\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n\t// biome-ignore lint/style/noNonNullAssertion: bit-encoding routine where index is provably bounded by surrounding loop/length checks\n\tif (arrays.length === 1) return arrays[0]!;\n\tconst length = arrays.reduce((a, arr) => a + arr.length, 0);\n\tconst result = new Uint8Array(length);\n\tlet pad = 0;\n\tfor (const arr of arrays) {\n\t\tresult.set(arr, pad);\n\t\tpad += arr.length;\n\t}\n\treturn result;\n}\n\nexport type IntegerType = number | string | bigint | Uint8Array;\n\nexport function intToBigInt(value: IntegerType): bigint {\n\tif (typeof value === \"bigint\") return value;\n\tif (typeof value === \"string\") return BigInt(value);\n\tif (typeof value === \"number\") {\n\t\tif (!Number.isInteger(value))\n\t\t\tthrow new RangeError(\"Values of type 'number' must be an integer.\");\n\t\tif (value > Number.MAX_SAFE_INTEGER)\n\t\t\tthrow new RangeError(\n\t\t\t\t`Values of type 'number' must be <= ${Number.MAX_SAFE_INTEGER}. Use BigInt instead.`,\n\t\t\t);\n\t\treturn BigInt(value);\n\t}\n\tif (value instanceof Uint8Array) return BigInt(`0x${bytesToHex(value)}`);\n\tthrow new TypeError(\"Must be a number, bigint, string, or Uint8Array.\");\n}\n\nexport function intToBytes(value: IntegerType, byteLength: number): Uint8Array {\n\treturn bigIntToBytes(intToBigInt(value), byteLength);\n}\n\nexport function bigIntToBytes(value: bigint, length = 16): Uint8Array {\n\tconst hex = value.toString(16).padStart(length * 2, \"0\");\n\treturn hexToBytes(hex);\n}\n\nexport function intToHex(integer: IntegerType, byteLength = 8): string {\n\tconst value = typeof integer === \"bigint\" ? integer : intToBigInt(integer);\n\treturn value.toString(16).padStart(byteLength * 2, \"0\");\n}\n\nexport function toTwos(value: bigint, width: bigint): bigint {\n\tconst limit = BigInt(1) << (width - BigInt(1));\n\tif (value < -limit || value > limit - BigInt(1)) {\n\t\tthrow new Error(`Unable to represent integer in width: ${width}`);\n\t}\n\tif (value >= BigInt(0)) return value;\n\treturn value + (BigInt(1) << width);\n}\n\nexport function fromTwos(value: bigint, width: bigint): bigint {\n\tif (value & (BigInt(1) << (width - BigInt(1)))) {\n\t\treturn value - (BigInt(1) << width);\n\t}\n\treturn value;\n}\n\nexport function bytesToTwosBigInt(bytes: Uint8Array): bigint {\n\tif (bytes.length === 0) return 0n;\n\tconst hex = bytesToHex(bytes);\n\tif (hex.length === 0) return 0n;\n\treturn fromTwos(BigInt(`0x${hex}`), BigInt(bytes.byteLength * 8));\n}\n\nexport function writeUInt32BE(value: number): Uint8Array {\n\tconst buf = new Uint8Array(4);\n\tbuf[0] = (value >>> 24) & 0xff;\n\tbuf[1] = (value >>> 16) & 0xff;\n\tbuf[2] = (value >>> 8) & 0xff;\n\tbuf[3] = value & 0xff;\n\treturn buf;\n}\n\nexport function readUInt32BE(bytes: Uint8Array, offset = 0): number {\n\treturn (\n\t\t// biome-ignore lint/style/noNonNullAssertion: bit-encoding routine where index is provably bounded by surrounding loop/length checks\n\t\t((bytes[offset]! << 24) |\n\t\t\t// biome-ignore lint/style/noNonNullAssertion: bit-encoding routine where index is provably bounded by surrounding loop/length checks\n\t\t\t(bytes[offset + 1]! << 16) |\n\t\t\t// biome-ignore lint/style/noNonNullAssertion: bit-encoding routine where index is provably bounded by surrounding loop/length checks\n\t\t\t(bytes[offset + 2]! << 8) |\n\t\t\t// biome-ignore lint/style/noNonNullAssertion: bit-encoding routine where index is provably bounded by surrounding loop/length checks\n\t\t\tbytes[offset + 3]!) >>>\n\t\t0\n\t);\n}\n\nexport function writeUInt16BE(value: number): Uint8Array {\n\tconst buf = new Uint8Array(2);\n\tbuf[0] = (value >>> 8) & 0xff;\n\tbuf[1] = value & 0xff;\n\treturn buf;\n}\n\nexport function readUInt16BE(bytes: Uint8Array, offset = 0): number {\n\t// biome-ignore lint/style/noNonNullAssertion: bit-encoding routine where index is provably bounded by surrounding loop/length checks\n\treturn ((bytes[offset]! << 8) | bytes[offset + 1]!) >>> 0;\n}\n\nexport function writeUInt8(value: number): Uint8Array {\n\treturn new Uint8Array([value & 0xff]);\n}\n",
|
|
6
|
+
"import { sha256 } from \"@noble/hashes/sha2.js\";\nimport { bytesToHex, hexToBytes } from \"./encoding.ts\";\n\nconst C32 = \"0123456789ABCDEFGHJKMNPQRSTVWXYZ\";\nconst HEX = \"0123456789abcdef\";\n\nfunction c32normalize(input: string): string {\n\treturn input.toUpperCase().replace(/O/g, \"0\").replace(/L|I/g, \"1\");\n}\n\nfunction c32encode(inputHex: string): string {\n\tlet hex = inputHex;\n\tif (hex.length % 2 !== 0) hex = `0${hex}`;\n\thex = hex.toLowerCase();\n\n\tconst res: string[] = [];\n\tlet carry = 0;\n\tfor (let i = hex.length - 1; i >= 0; i--) {\n\t\tif (carry < 4) {\n\t\t\t// biome-ignore lint/style/noNonNullAssertion: bit-encoding routine where index is provably bounded by surrounding loop/length checks\n\t\t\tconst currentCode = HEX.indexOf(hex[i]!) >> carry;\n\t\t\t// biome-ignore lint/style/noNonNullAssertion: bit-encoding routine where index is provably bounded by surrounding loop/length checks\n\t\t\tconst nextCode = i !== 0 ? HEX.indexOf(hex[i - 1]!) : 0;\n\t\t\tconst nextBits = 1 + carry;\n\t\t\tconst nextLowBits = (nextCode % (1 << nextBits)) << (5 - nextBits);\n\t\t\t// biome-ignore lint/style/noNonNullAssertion: bit-encoding routine where index is provably bounded by surrounding loop/length checks\n\t\t\tres.unshift(C32[currentCode + nextLowBits]!);\n\t\t\tcarry = nextBits;\n\t\t} else {\n\t\t\tcarry = 0;\n\t\t}\n\t}\n\n\t// Strip leading c32 zeros\n\tlet leadingZeros = 0;\n\twhile (leadingZeros < res.length && res[leadingZeros] === \"0\") leadingZeros++;\n\tconst stripped = res.slice(leadingZeros);\n\n\t// Preserve leading zero bytes from hex\n\tconst bytes = hexToBytes(hex);\n\tlet zeroBytesCount = 0;\n\twhile (zeroBytesCount < bytes.length && bytes[zeroBytesCount] === 0)\n\t\tzeroBytesCount++;\n\tconst prefix = Array(zeroBytesCount).fill(C32[0]) as string[];\n\n\treturn [...prefix, ...stripped].join(\"\");\n}\n\nfunction c32decode(c32input: string): string {\n\tconst input = c32normalize(c32input);\n\tif (!input.match(`^[${C32}]*$`)) throw new Error(\"Not a c32-encoded string\");\n\n\tconst zeroPrefix = input.match(`^${C32[0]}*`);\n\tconst numLeadingZeroBytes = zeroPrefix ? zeroPrefix[0]?.length : 0;\n\n\tconst res: string[] = [];\n\tlet carry = 0;\n\tlet carryBits = 0;\n\tfor (let i = input.length - 1; i >= 0; i--) {\n\t\tif (carryBits === 4) {\n\t\t\t// biome-ignore lint/style/noNonNullAssertion: bit-encoding routine where index is provably bounded by surrounding loop/length checks\n\t\t\tres.unshift(HEX[carry]!);\n\t\t\tcarryBits = 0;\n\t\t\tcarry = 0;\n\t\t}\n\t\t// biome-ignore lint/style/noNonNullAssertion: bit-encoding routine where index is provably bounded by surrounding loop/length checks\n\t\tconst currentValue = (C32.indexOf(input[i]!) << carryBits) + carry;\n\t\t// biome-ignore lint/style/noNonNullAssertion: bit-encoding routine where index is provably bounded by surrounding loop/length checks\n\t\tres.unshift(HEX[currentValue % 16]!);\n\t\tcarryBits += 1;\n\t\tcarry = currentValue >> 4;\n\t\tif (carry > 1 << carryBits) throw new Error(\"Panic error in c32 decoding\");\n\t}\n\t// biome-ignore lint/style/noNonNullAssertion: bit-encoding routine where index is provably bounded by surrounding loop/length checks\n\tres.unshift(HEX[carry]!);\n\n\tif (res.length % 2 === 1) res.unshift(\"0\");\n\n\t// Strip leading hex zeros\n\tlet hexLeadingZeros = 0;\n\twhile (hexLeadingZeros < res.length && res[hexLeadingZeros] === \"0\")\n\t\thexLeadingZeros++;\n\tlet hexStr = res.slice(hexLeadingZeros - (hexLeadingZeros % 2)).join(\"\");\n\n\tfor (let i = 0; i < numLeadingZeroBytes; i++) hexStr = `00${hexStr}`;\n\n\treturn hexStr;\n}\n\nfunction c32checksum(dataHex: string): string {\n\treturn bytesToHex(sha256(sha256(hexToBytes(dataHex))).slice(0, 4));\n}\n\nfunction c32checkEncode(version: number, data: string): string {\n\tif (version < 0 || version >= 32)\n\t\tthrow new Error(\"Invalid version (must be between 0 and 31)\");\n\tif (!data.match(/^[0-9a-fA-F]*$/))\n\t\tthrow new Error(\"Invalid data (not a hex string)\");\n\n\tlet d = data.toLowerCase();\n\tif (d.length % 2 !== 0) d = `0${d}`;\n\n\tlet versionHex = version.toString(16);\n\tif (versionHex.length === 1) versionHex = `0${versionHex}`;\n\n\tconst checksumHex = c32checksum(`${versionHex}${d}`);\n\treturn `${C32[version]}${c32encode(`${d}${checksumHex}`)}`;\n}\n\nfunction c32checkDecode(c32data: string): [number, string] {\n\tconst normalized = c32normalize(c32data);\n\tconst dataHex = c32decode(normalized.slice(1));\n\t// biome-ignore lint/style/noNonNullAssertion: bit-encoding routine where index is provably bounded by surrounding loop/length checks\n\tconst version = C32.indexOf(normalized[0]!);\n\tconst checksum = dataHex.slice(-8);\n\n\tlet versionHex = version.toString(16);\n\tif (versionHex.length === 1) versionHex = `0${versionHex}`;\n\n\tif (\n\t\tc32checksum(`${versionHex}${dataHex.substring(0, dataHex.length - 8)}`) !==\n\t\tchecksum\n\t) {\n\t\tthrow new Error(\"Invalid c32check string: checksum mismatch\");\n\t}\n\n\treturn [version, dataHex.substring(0, dataHex.length - 8)];\n}\n\nexport function c32address(version: number, hash160hex: string): string {\n\tif (!hash160hex.match(/^[0-9a-fA-F]{40}$/)) {\n\t\tthrow new Error(\"Invalid argument: not a hash160 hex string\");\n\t}\n\treturn `S${c32checkEncode(version, hash160hex)}`;\n}\n\nexport function c32addressDecode(c32addr: string): [number, string] {\n\tif (c32addr.length <= 5)\n\t\tthrow new Error(\"Invalid c32 address: invalid length\");\n\tif (c32addr[0] !== \"S\")\n\t\tthrow new Error('Invalid c32 address: must start with \"S\"');\n\treturn c32checkDecode(c32addr.slice(1));\n}\n"
|
|
7
|
+
],
|
|
8
|
+
"mappings": "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",
|
|
9
|
+
"debugId": "5BCBB8B7E9A859DB64756E2164756E21",
|
|
10
|
+
"names": []
|
|
11
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
c32addressDecode
|
|
3
|
-
} from "./stacks-
|
|
3
|
+
} from "./stacks-2h8d2y27.js";
|
|
4
4
|
|
|
5
5
|
// src/utils/address.ts
|
|
6
6
|
function validateStacksAddress(address) {
|
|
@@ -43,4 +43,4 @@ function getContractAddress(deployer, contractName) {
|
|
|
43
43
|
export { validateStacksAddress, isValidAddress, parseContractId, isClarityName, isAddressEqual, addressToVersion, getContractAddress };
|
|
44
44
|
|
|
45
45
|
//# debugId=899D2CA267B89FE364756E2164756E21
|
|
46
|
-
//# sourceMappingURL=stacks-
|
|
46
|
+
//# sourceMappingURL=stacks-6xmk24yw.js.map
|
|
@@ -2,12 +2,12 @@ import {
|
|
|
2
2
|
callContract,
|
|
3
3
|
getMapEntry,
|
|
4
4
|
readContract
|
|
5
|
-
} from "./stacks-
|
|
5
|
+
} from "./stacks-g7ys594x.js";
|
|
6
6
|
import {
|
|
7
7
|
clarityValueToJSUntyped,
|
|
8
8
|
jsToClarityValue,
|
|
9
9
|
toCamelCase
|
|
10
|
-
} from "./stacks-
|
|
10
|
+
} from "./stacks-g7ffp8aj.js";
|
|
11
11
|
|
|
12
12
|
// src/actions/getContract.ts
|
|
13
13
|
function getContract(params) {
|
|
@@ -131,4 +131,4 @@ class ContractResponseError extends Error {
|
|
|
131
131
|
export { getContract, ContractResponseError };
|
|
132
132
|
|
|
133
133
|
//# debugId=C71C39F2B8094B6864756E2164756E21
|
|
134
|
-
//# sourceMappingURL=stacks-
|
|
134
|
+
//# sourceMappingURL=stacks-7tn3zsbe.js.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/actions/getContract.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import type {\n\tAbiContract,\n\tAbiFunction,\n\tAbiMap,\n\tAbiType,\n\tExtractFunctionArgs,\n\tExtractFunctionOutput,\n\tExtractMapKey,\n\tExtractMapNames,\n\tExtractMapValue,\n\tExtractPublicFunctions,\n\tExtractReadOnlyFunctions,\n} from \"../clarity/abi/index.ts\";\nimport { type ToCamelCase, toCamelCase } from \"../clarity/abi/utils.ts\";\nimport {\n\tclarityValueToJSUntyped,\n\tjsToClarityValue,\n} from \"../clarity/bridge.ts\";\nimport type { ClarityValue } from \"../clarity/types.ts\";\nimport type { Client } from \"../clients/types.ts\";\nimport type { PostCondition } from \"../postconditions/types.ts\";\nimport type { IntegerType } from \"../utils/encoding.ts\";\nimport { getMapEntry } from \"./public/getMapEntry.ts\";\nimport { readContract } from \"./public/readContract.ts\";\nimport { callContract } from \"./wallet/callContract.ts\";\n\n// --- Type helpers for unwrapping response types ---\n\n/** Unwrap `(response ok err)` → just the `ok` branch type */\n// biome-ignore lint/suspicious/noExplicitAny: interop boundary or dynamic-shape value where typing adds friction without runtime safety\ntype UnwrapResponse<T> = T extends { ok: infer O } | { err: any } ? O : T;\n\ntype ReadMethodReturn<\n\tC extends AbiContract,\n\tN extends ExtractReadOnlyFunctions<C>,\n> = UnwrapResponse<ExtractFunctionOutput<C, N>>;\n\n// --- Public type for the contract instance ---\n\ntype ReadMethods<C extends AbiContract> = {\n\t[N in ExtractReadOnlyFunctions<C> as ToCamelCase<N>]: (\n\t\targs: ExtractFunctionArgs<C, N>,\n\t) => Promise<ReadMethodReturn<C, N>>;\n};\n\ntype CallMethods<C extends AbiContract> = {\n\t[N in ExtractPublicFunctions<C> as ToCamelCase<N>]: (\n\t\targs: ExtractFunctionArgs<C, N>,\n\t\toptions?: ContractCallOptions,\n\t) => Promise<string>;\n};\n\ntype MapMethods<C extends AbiContract> = {\n\t[N in ExtractMapNames<C> as ToCamelCase<N>]: (\n\t\tkey: ExtractMapKey<C, N>,\n\t) => Promise<ExtractMapValue<C, N> | null>;\n};\n\nexport type ContractCallOptions = {\n\tfee?: IntegerType;\n\tnonce?: IntegerType;\n\tpostConditionMode?: \"allow\" | \"deny\";\n\tpostConditions?: PostCondition[];\n};\n\nexport type ContractInstance<C extends AbiContract> = {\n\tread: ReadMethods<C>;\n\tcall: CallMethods<C>;\n\tmaps: MapMethods<C>;\n};\n\nexport type GetContractParams<C extends AbiContract> = {\n\tclient: Client;\n\taddress: string;\n\tname: string;\n\tabi: C;\n};\n\nexport function getContract<const TAbi extends AbiContract>(\n\tparams: GetContractParams<TAbi>,\n): ContractInstance<TAbi> {\n\tconst { client, address, name: contractName, abi } = params;\n\tconst contractId = `${address}.${contractName}`;\n\n\t// Index functions/maps by name for fast lookup\n\tconst fnByName = new Map<string, AbiFunction>();\n\tfor (const fn of abi.functions) {\n\t\tfnByName.set(fn.name, fn as AbiFunction);\n\t}\n\n\tconst mapByName = new Map<string, AbiMap>();\n\tif (abi.maps) {\n\t\tfor (const m of abi.maps) {\n\t\t\tmapByName.set(m.name, m as AbiMap);\n\t\t}\n\t}\n\n\t// Build kebab→camel reverse map for function/map names\n\tconst camelToKebab = new Map<string, string>();\n\tfor (const fn of abi.functions) {\n\t\tcamelToKebab.set(toCamelCase(fn.name), fn.name);\n\t}\n\tif (abi.maps) {\n\t\tfor (const m of abi.maps) {\n\t\t\tcamelToKebab.set(toCamelCase(m.name), m.name);\n\t\t}\n\t}\n\n\tconst read = new Proxy({} as ReadMethods<TAbi>, {\n\t\tget(_target, prop: string) {\n\t\t\tconst fnName = camelToKebab.get(prop) ?? prop;\n\t\t\tconst fn = fnByName.get(fnName);\n\t\t\tif (!fn || fn.access !== \"read-only\") return undefined;\n\n\t\t\treturn async (args: Record<string, unknown>) => {\n\t\t\t\tconst clarityArgs = buildFunctionArgs(fn, args);\n\t\t\t\tconst result = await readContract(client, {\n\t\t\t\t\tcontract: contractId,\n\t\t\t\t\tfunctionName: fn.name,\n\t\t\t\t\targs: clarityArgs,\n\t\t\t\t});\n\n\t\t\t\tconst jsValue = clarityValueToJSUntyped(fn.outputs as AbiType, result);\n\n\t\t\t\t// Auto-unwrap: if output is response type, unwrap ok / throw on err\n\t\t\t\tif (isResponseOutput(fn.outputs as AbiType)) {\n\t\t\t\t\tconst resp = jsValue as { ok?: unknown; err?: unknown };\n\t\t\t\t\tif (\"ok\" in resp) return resp.ok;\n\t\t\t\t\tthrow new ContractResponseError(\n\t\t\t\t\t\t`${contractId}::${fn.name} returned (err ${formatErrValue(resp.err)})`,\n\t\t\t\t\t\tresp.err,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn jsValue;\n\t\t\t};\n\t\t},\n\t});\n\n\tconst call = new Proxy({} as CallMethods<TAbi>, {\n\t\tget(_target, prop: string) {\n\t\t\tconst fnName = camelToKebab.get(prop) ?? prop;\n\t\t\tconst fn = fnByName.get(fnName);\n\t\t\tif (!fn || fn.access !== \"public\") return undefined;\n\n\t\t\treturn async (\n\t\t\t\targs: Record<string, unknown>,\n\t\t\t\toptions?: ContractCallOptions,\n\t\t\t) => {\n\t\t\t\tconst clarityArgs = buildFunctionArgs(fn, args);\n\t\t\t\treturn callContract(client, {\n\t\t\t\t\tcontract: contractId,\n\t\t\t\t\tfunctionName: fn.name,\n\t\t\t\t\tfunctionArgs: clarityArgs,\n\t\t\t\t\t...options,\n\t\t\t\t});\n\t\t\t};\n\t\t},\n\t});\n\n\tconst maps = new Proxy({} as MapMethods<TAbi>, {\n\t\tget(_target, prop: string) {\n\t\t\tconst mapName = camelToKebab.get(prop) ?? prop;\n\t\t\tconst map = mapByName.get(mapName);\n\t\t\tif (!map) return undefined;\n\n\t\t\treturn async (key: unknown) => {\n\t\t\t\tconst clarityKey = jsToClarityValue(map.key as AbiType, key);\n\t\t\t\tconst result = await getMapEntry(client, {\n\t\t\t\t\tcontract: contractId,\n\t\t\t\t\tmapName: map.name,\n\t\t\t\t\tkey: clarityKey,\n\t\t\t\t});\n\n\t\t\t\t// Map entries come back as (optional ...). If none, return null.\n\t\t\t\tif (result.type === \"none\") return null;\n\t\t\t\tif (result.type === \"some\") {\n\t\t\t\t\treturn clarityValueToJSUntyped(map.value as AbiType, result.value);\n\t\t\t\t}\n\t\t\t\t// Direct value (shouldn't normally happen, but handle gracefully)\n\t\t\t\treturn clarityValueToJSUntyped(map.value as AbiType, result);\n\t\t\t};\n\t\t},\n\t});\n\n\treturn { read, call, maps };\n}\n\n// --- Helpers ---\n\nfunction buildFunctionArgs(\n\tfn: AbiFunction,\n\targs: Record<string, unknown>,\n): ClarityValue[] {\n\treturn fn.args.map((arg) => {\n\t\tconst camelKey = toCamelCase(arg.name);\n\t\tconst hasOriginal = arg.name in args;\n\t\tconst hasCamel = camelKey in args;\n\t\tconst value = hasOriginal\n\t\t\t? args[arg.name]\n\t\t\t: hasCamel\n\t\t\t\t? args[camelKey]\n\t\t\t\t: undefined;\n\t\tif (value === undefined) throw new Error(`Missing argument: ${arg.name}`);\n\t\treturn jsToClarityValue(arg.type as AbiType, value);\n\t});\n}\n\nfunction isResponseOutput(type: AbiType): boolean {\n\treturn typeof type === \"object\" && type !== null && \"response\" in type;\n}\n\nfunction formatErrValue(value: unknown): string {\n\tif (typeof value === \"bigint\") return value.toString();\n\tif (typeof value === \"string\") return `\"${value}\"`;\n\treturn String(value);\n}\n\nexport class ContractResponseError extends Error {\n\toverride name = \"ContractResponseError\";\n\tconstructor(\n\t\tmessage: string,\n\t\tpublic readonly errorValue: unknown,\n\t) {\n\t\tsuper(message);\n\t}\n}\n"
|
|
6
|
+
],
|
|
7
|
+
"mappings": "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",
|
|
8
|
+
"debugId": "C71C39F2B8094B6864756E2164756E21",
|
|
9
|
+
"names": []
|
|
10
|
+
}
|
|
@@ -124,7 +124,7 @@ function cvToJSON(val) {
|
|
|
124
124
|
case "none":
|
|
125
125
|
return { type: "(optional none)", value: null };
|
|
126
126
|
case "some":
|
|
127
|
-
return { type:
|
|
127
|
+
return { type: "(optional)", value: cvToJSON(val.value) };
|
|
128
128
|
case "ok":
|
|
129
129
|
return { type: "(response)", value: cvToJSON(val.value), success: true };
|
|
130
130
|
case "err":
|
|
@@ -306,7 +306,7 @@ function jsToClarity(type, value) {
|
|
|
306
306
|
}
|
|
307
307
|
throw new ClarityConversionError("Response must have exactly 'ok' or 'err' property", type, value);
|
|
308
308
|
}
|
|
309
|
-
throw new ClarityConversionError(
|
|
309
|
+
throw new ClarityConversionError("Unknown Clarity type", type, value);
|
|
310
310
|
}
|
|
311
311
|
function prepareArgs(func, args) {
|
|
312
312
|
return func.args.map((arg) => {
|
|
@@ -333,5 +333,5 @@ function validateArgsArray(func, args) {
|
|
|
333
333
|
});
|
|
334
334
|
}
|
|
335
335
|
|
|
336
|
-
//# debugId=
|
|
337
|
-
//# sourceMappingURL=stacks-
|
|
336
|
+
//# debugId=56784A8071A0FAF364756E2164756E21
|
|
337
|
+
//# sourceMappingURL=stacks-8e4k5qnm.cjs.map
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/clarity/prettyPrint.ts", "../src/clarity/abi/converters.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"import {\n\tasciiToBytes,\n\tbytesToAscii,\n\thexToBytes,\n\tutf8ToBytes,\n} from \"../utils/encoding.ts\";\nimport type { ClarityValue } from \"./types.ts\";\n\nexport function prettyPrint(\n\tval: ClarityValue,\n\tencoding: \"tryAscii\" | \"hex\" = \"hex\",\n): string | undefined {\n\tswitch (val.type) {\n\t\tcase \"true\":\n\t\t\treturn \"true\";\n\t\tcase \"false\":\n\t\t\treturn \"false\";\n\t\tcase \"int\":\n\t\t\treturn val.value.toString();\n\t\tcase \"uint\":\n\t\t\treturn `u${val.value.toString()}`;\n\t\tcase \"buffer\":\n\t\t\tif (encoding === \"tryAscii\") {\n\t\t\t\tconst str = bytesToAscii(hexToBytes(val.value));\n\t\t\t\tif (/^[ -~]*$/.test(str)) return JSON.stringify(str);\n\t\t\t}\n\t\t\treturn `0x${val.value}`;\n\t\tcase \"none\":\n\t\t\treturn \"none\";\n\t\tcase \"some\":\n\t\t\treturn `(some ${prettyPrint(val.value, encoding)})`;\n\t\tcase \"ok\":\n\t\t\treturn `(ok ${prettyPrint(val.value, encoding)})`;\n\t\tcase \"err\":\n\t\t\treturn `(err ${prettyPrint(val.value, encoding)})`;\n\t\tcase \"address\":\n\t\tcase \"contract\":\n\t\t\treturn val.value;\n\t\tcase \"list\":\n\t\t\treturn `(list ${val.value.map((v) => prettyPrint(v, encoding)).join(\" \")})`;\n\t\tcase \"tuple\":\n\t\t\treturn `(tuple ${Object.keys(val.value)\n\t\t\t\t.map((key) => `(${key} ${prettyPrint(val.value[key]!, encoding)})`)\n\t\t\t\t.join(\" \")})`;\n\t\tcase \"ascii\":\n\t\t\treturn `\"${val.value}\"`;\n\t\tcase \"utf8\":\n\t\t\treturn `u\"${val.value}\"`;\n\t}\n}\n\nexport function cvToJSON(val: ClarityValue): any {\n\tswitch (val.type) {\n\t\tcase \"true\":\n\t\t\treturn { type: \"bool\", value: true };\n\t\tcase \"false\":\n\t\t\treturn { type: \"bool\", value: false };\n\t\tcase \"int\":\n\t\t\treturn { type: \"int\", value: val.value.toString() };\n\t\tcase \"uint\":\n\t\t\treturn { type: \"uint\", value: val.value.toString() };\n\t\tcase \"buffer\":\n\t\t\treturn {\n\t\t\t\ttype: `(buff ${Math.ceil(val.value.length / 2)})`,\n\t\t\t\tvalue: `0x${val.value}`,\n\t\t\t};\n\t\tcase \"none\":\n\t\t\treturn { type: \"(optional none)\", value: null };\n\t\tcase \"some\":\n\t\t\treturn { type:
|
|
6
|
-
"import type { AbiFunction } from \"./contract.ts\";\nimport {\n\tisAbiBuffer,\n\tisAbiList,\n\tisAbiOptional,\n\tisAbiResponse,\n\tisAbiStringAscii,\n\tisAbiStringUtf8,\n\tisAbiTuple,\n\tisBool,\n\tisInt128,\n\tisPrincipal,\n\tisString,\n\tisUint8Array,\n\tisUint128,\n} from \"./guards.ts\";\nimport type { AbiType } from \"./types.ts\";\nimport { toCamelCase } from \"./utils.ts\";\n\nexport class ClarityConversionError extends Error {\n\tconstructor(\n\t\tmessage: string,\n\t\tpublic readonly type: AbiType,\n\t\tpublic readonly value: unknown,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"ClarityConversionError\";\n\t}\n}\n\nexport function jsToClarity(type: AbiType, value: unknown): unknown {\n\tif (type === \"none\") return null;\n\n\tif (type === \"uint128\") {\n\t\tif (!isUint128(value))\n\t\t\tthrow new ClarityConversionError(\"Invalid uint128 value\", type, value);\n\t\treturn value;\n\t}\n\n\tif (type === \"int128\") {\n\t\tif (!isInt128(value))\n\t\t\tthrow new ClarityConversionError(\"Invalid int128 value\", type, value);\n\t\treturn value;\n\t}\n\n\tif (type === \"bool\") {\n\t\tif (!isBool(value))\n\t\t\tthrow new ClarityConversionError(\"Invalid bool value\", type, value);\n\t\treturn value;\n\t}\n\n\tif (type === \"principal\") {\n\t\tif (!isPrincipal(value))\n\t\t\tthrow new ClarityConversionError(\"Invalid principal value\", type, value);\n\t\treturn value;\n\t}\n\n\tif (type === \"trait_reference\") {\n\t\tif (!isPrincipal(value))\n\t\t\tthrow new ClarityConversionError(\n\t\t\t\t\"Invalid trait_reference value\",\n\t\t\t\ttype,\n\t\t\t\tvalue,\n\t\t\t);\n\t\treturn value;\n\t}\n\n\tif (isAbiStringAscii(type)) {\n\t\tif (!isString(value))\n\t\t\tthrow new ClarityConversionError(\n\t\t\t\t\"Invalid string-ascii value\",\n\t\t\t\ttype,\n\t\t\t\tvalue,\n\t\t\t);\n\t\tconst str = value as string;\n\t\tfor (let i = 0; i < str.length; i++) {\n\t\t\tif (str.charCodeAt(i) > 127) {\n\t\t\t\tthrow new ClarityConversionError(\n\t\t\t\t\t`Non-ASCII character at position ${i}: '${str[i]}' (code ${str.charCodeAt(i)})`,\n\t\t\t\t\ttype,\n\t\t\t\t\tvalue,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (str.length > type[\"string-ascii\"].length) {\n\t\t\tthrow new ClarityConversionError(\n\t\t\t\t`String length ${str.length} exceeds max ${type[\"string-ascii\"].length}`,\n\t\t\t\ttype,\n\t\t\t\tvalue,\n\t\t\t);\n\t\t}\n\t\treturn value;\n\t}\n\n\tif (isAbiStringUtf8(type)) {\n\t\tif (!isString(value))\n\t\t\tthrow new ClarityConversionError(\n\t\t\t\t\"Invalid string-utf8 value\",\n\t\t\t\ttype,\n\t\t\t\tvalue,\n\t\t\t);\n\t\tconst str = value as string;\n\t\tconst byteLength = new TextEncoder().encode(str).length;\n\t\tif (byteLength > type[\"string-utf8\"].length) {\n\t\t\tthrow new ClarityConversionError(\n\t\t\t\t`String byte length ${byteLength} exceeds max ${type[\"string-utf8\"].length}`,\n\t\t\t\ttype,\n\t\t\t\tvalue,\n\t\t\t);\n\t\t}\n\t\treturn value;\n\t}\n\n\tif (isAbiBuffer(type)) {\n\t\tif (!isUint8Array(value))\n\t\t\tthrow new ClarityConversionError(\"Invalid buffer value\", type, value);\n\t\tconst buff = value as Uint8Array;\n\t\tif (buff.length > type.buff.length) {\n\t\t\tthrow new ClarityConversionError(\n\t\t\t\t`Buffer length ${buff.length} exceeds max ${type.buff.length}`,\n\t\t\t\ttype,\n\t\t\t\tvalue,\n\t\t\t);\n\t\t}\n\t\treturn value;\n\t}\n\n\tif (isAbiList(type)) {\n\t\tif (!Array.isArray(value))\n\t\t\tthrow new ClarityConversionError(\n\t\t\t\t\"Expected array for list type\",\n\t\t\t\ttype,\n\t\t\t\tvalue,\n\t\t\t);\n\t\tif (value.length > type.list.length) {\n\t\t\tthrow new ClarityConversionError(\n\t\t\t\t`List length ${value.length} exceeds max ${type.list.length}`,\n\t\t\t\ttype,\n\t\t\t\tvalue,\n\t\t\t);\n\t\t}\n\t\treturn value.map((item) => jsToClarity(type.list.type, item));\n\t}\n\n\tif (isAbiTuple(type)) {\n\t\tif (typeof value !== \"object\" || value === null)\n\t\t\tthrow new ClarityConversionError(\n\t\t\t\t\"Expected object for tuple type\",\n\t\t\t\ttype,\n\t\t\t\tvalue,\n\t\t\t);\n\t\tconst result: Record<string, unknown> = {};\n\t\tfor (const field of type.tuple) {\n\t\t\tconst camelKey = toCamelCase(field.name);\n\t\t\tconst hasOriginal = field.name in (value as object);\n\t\t\tconst hasCamel = camelKey in (value as object);\n\t\t\tif (!hasOriginal && !hasCamel) {\n\t\t\t\tthrow new ClarityConversionError(\n\t\t\t\t\t`Missing tuple field: ${field.name}`,\n\t\t\t\t\ttype,\n\t\t\t\t\tvalue,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst fieldValue = hasOriginal\n\t\t\t\t? (value as Record<string, unknown>)[field.name]\n\t\t\t\t: (value as Record<string, unknown>)[camelKey];\n\t\t\tresult[field.name] = jsToClarity(field.type, fieldValue);\n\t\t}\n\t\treturn result;\n\t}\n\n\tif (isAbiOptional(type)) {\n\t\tif (value === null || value === undefined) return null;\n\t\treturn jsToClarity(type.optional, value);\n\t}\n\n\tif (isAbiResponse(type)) {\n\t\tif (typeof value !== \"object\" || value === null)\n\t\t\tthrow new ClarityConversionError(\n\t\t\t\t\"Expected object for response type\",\n\t\t\t\ttype,\n\t\t\t\tvalue,\n\t\t\t);\n\t\tconst hasOk = \"ok\" in value;\n\t\tconst hasErr = \"err\" in value;\n\t\tif (hasOk && !hasErr) {\n\t\t\treturn {\n\t\t\t\tok: jsToClarity(type.response.ok, (value as { ok: unknown }).ok),\n\t\t\t};\n\t\t}\n\t\tif (hasErr && !hasOk) {\n\t\t\treturn {\n\t\t\t\terr: jsToClarity(type.response.error, (value as { err: unknown }).err),\n\t\t\t};\n\t\t}\n\t\tthrow new ClarityConversionError(\n\t\t\t\"Response must have exactly 'ok' or 'err' property\",\n\t\t\ttype,\n\t\t\tvalue,\n\t\t);\n\t}\n\n\tthrow new ClarityConversionError(
|
|
5
|
+
"import {\n\tasciiToBytes,\n\tbytesToAscii,\n\thexToBytes,\n\tutf8ToBytes,\n} from \"../utils/encoding.ts\";\nimport type { ClarityValue } from \"./types.ts\";\n\nexport function prettyPrint(\n\tval: ClarityValue,\n\tencoding: \"tryAscii\" | \"hex\" = \"hex\",\n): string | undefined {\n\tswitch (val.type) {\n\t\tcase \"true\":\n\t\t\treturn \"true\";\n\t\tcase \"false\":\n\t\t\treturn \"false\";\n\t\tcase \"int\":\n\t\t\treturn val.value.toString();\n\t\tcase \"uint\":\n\t\t\treturn `u${val.value.toString()}`;\n\t\tcase \"buffer\":\n\t\t\tif (encoding === \"tryAscii\") {\n\t\t\t\tconst str = bytesToAscii(hexToBytes(val.value));\n\t\t\t\tif (/^[ -~]*$/.test(str)) return JSON.stringify(str);\n\t\t\t}\n\t\t\treturn `0x${val.value}`;\n\t\tcase \"none\":\n\t\t\treturn \"none\";\n\t\tcase \"some\":\n\t\t\treturn `(some ${prettyPrint(val.value, encoding)})`;\n\t\tcase \"ok\":\n\t\t\treturn `(ok ${prettyPrint(val.value, encoding)})`;\n\t\tcase \"err\":\n\t\t\treturn `(err ${prettyPrint(val.value, encoding)})`;\n\t\tcase \"address\":\n\t\tcase \"contract\":\n\t\t\treturn val.value;\n\t\tcase \"list\":\n\t\t\treturn `(list ${val.value.map((v) => prettyPrint(v, encoding)).join(\" \")})`;\n\t\tcase \"tuple\":\n\t\t\treturn `(tuple ${Object.keys(val.value)\n\t\t\t\t// biome-ignore lint/style/noNonNullAssertion: value is non-null after preceding check or by construction; TS narrowing limitation\n\t\t\t\t.map((key) => `(${key} ${prettyPrint(val.value[key]!, encoding)})`)\n\t\t\t\t.join(\" \")})`;\n\t\tcase \"ascii\":\n\t\t\treturn `\"${val.value}\"`;\n\t\tcase \"utf8\":\n\t\t\treturn `u\"${val.value}\"`;\n\t}\n}\n\n// biome-ignore lint/suspicious/noExplicitAny: interop boundary or dynamic-shape value where typing adds friction without runtime safety\nexport function cvToJSON(val: ClarityValue): any {\n\tswitch (val.type) {\n\t\tcase \"true\":\n\t\t\treturn { type: \"bool\", value: true };\n\t\tcase \"false\":\n\t\t\treturn { type: \"bool\", value: false };\n\t\tcase \"int\":\n\t\t\treturn { type: \"int\", value: val.value.toString() };\n\t\tcase \"uint\":\n\t\t\treturn { type: \"uint\", value: val.value.toString() };\n\t\tcase \"buffer\":\n\t\t\treturn {\n\t\t\t\ttype: `(buff ${Math.ceil(val.value.length / 2)})`,\n\t\t\t\tvalue: `0x${val.value}`,\n\t\t\t};\n\t\tcase \"none\":\n\t\t\treturn { type: \"(optional none)\", value: null };\n\t\tcase \"some\":\n\t\t\treturn { type: \"(optional)\", value: cvToJSON(val.value) };\n\t\tcase \"ok\":\n\t\t\treturn { type: \"(response)\", value: cvToJSON(val.value), success: true };\n\t\tcase \"err\":\n\t\t\treturn { type: \"(response)\", value: cvToJSON(val.value), success: false };\n\t\tcase \"address\":\n\t\tcase \"contract\":\n\t\t\treturn { type: \"principal\", value: val.value };\n\t\tcase \"list\":\n\t\t\treturn { type: \"(list)\", value: val.value.map(cvToJSON) };\n\t\tcase \"tuple\": {\n\t\t\t// biome-ignore lint/suspicious/noExplicitAny: interop boundary or dynamic-shape value where typing adds friction without runtime safety\n\t\t\tconst result: Record<string, any> = {};\n\t\t\tfor (const key of Object.keys(val.value)) {\n\t\t\t\t// biome-ignore lint/style/noNonNullAssertion: value is non-null after preceding check or by construction; TS narrowing limitation\n\t\t\t\tresult[key] = cvToJSON(val.value[key]!);\n\t\t\t}\n\t\t\treturn { type: \"(tuple)\", value: result };\n\t\t}\n\t\tcase \"ascii\":\n\t\t\treturn {\n\t\t\t\ttype: `(string-ascii ${asciiToBytes(val.value).length})`,\n\t\t\t\tvalue: val.value,\n\t\t\t};\n\t\tcase \"utf8\":\n\t\t\treturn {\n\t\t\t\ttype: `(string-utf8 ${utf8ToBytes(val.value).length})`,\n\t\t\t\tvalue: val.value,\n\t\t\t};\n\t}\n}\n\n// biome-ignore lint/suspicious/noExplicitAny: interop boundary or dynamic-shape value where typing adds friction without runtime safety\nexport function cvToValue(val: ClarityValue): any {\n\tswitch (val.type) {\n\t\tcase \"true\":\n\t\t\treturn true;\n\t\tcase \"false\":\n\t\t\treturn false;\n\t\tcase \"int\":\n\t\tcase \"uint\":\n\t\t\treturn val.value;\n\t\tcase \"buffer\":\n\t\t\treturn `0x${val.value}`;\n\t\tcase \"none\":\n\t\t\treturn null;\n\t\tcase \"some\":\n\t\t\treturn cvToValue(val.value);\n\t\tcase \"ok\":\n\t\tcase \"err\":\n\t\t\treturn cvToValue(val.value);\n\t\tcase \"address\":\n\t\tcase \"contract\":\n\t\t\treturn val.value;\n\t\tcase \"list\":\n\t\t\treturn val.value.map(cvToValue);\n\t\tcase \"tuple\": {\n\t\t\t// biome-ignore lint/suspicious/noExplicitAny: interop boundary or dynamic-shape value where typing adds friction without runtime safety\n\t\t\tconst result: Record<string, any> = {};\n\t\t\tfor (const key of Object.keys(val.value)) {\n\t\t\t\t// biome-ignore lint/style/noNonNullAssertion: value is non-null after preceding check or by construction; TS narrowing limitation\n\t\t\t\tresult[key] = cvToValue(val.value[key]!);\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t\tcase \"ascii\":\n\t\tcase \"utf8\":\n\t\t\treturn val.value;\n\t}\n}\n",
|
|
6
|
+
"import type { AbiFunction } from \"./contract.ts\";\nimport {\n\tisAbiBuffer,\n\tisAbiList,\n\tisAbiOptional,\n\tisAbiResponse,\n\tisAbiStringAscii,\n\tisAbiStringUtf8,\n\tisAbiTuple,\n\tisBool,\n\tisInt128,\n\tisPrincipal,\n\tisString,\n\tisUint8Array,\n\tisUint128,\n} from \"./guards.ts\";\nimport type { AbiType } from \"./types.ts\";\nimport { toCamelCase } from \"./utils.ts\";\n\nexport class ClarityConversionError extends Error {\n\tconstructor(\n\t\tmessage: string,\n\t\tpublic readonly type: AbiType,\n\t\tpublic readonly value: unknown,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"ClarityConversionError\";\n\t}\n}\n\nexport function jsToClarity(type: AbiType, value: unknown): unknown {\n\tif (type === \"none\") return null;\n\n\tif (type === \"uint128\") {\n\t\tif (!isUint128(value))\n\t\t\tthrow new ClarityConversionError(\"Invalid uint128 value\", type, value);\n\t\treturn value;\n\t}\n\n\tif (type === \"int128\") {\n\t\tif (!isInt128(value))\n\t\t\tthrow new ClarityConversionError(\"Invalid int128 value\", type, value);\n\t\treturn value;\n\t}\n\n\tif (type === \"bool\") {\n\t\tif (!isBool(value))\n\t\t\tthrow new ClarityConversionError(\"Invalid bool value\", type, value);\n\t\treturn value;\n\t}\n\n\tif (type === \"principal\") {\n\t\tif (!isPrincipal(value))\n\t\t\tthrow new ClarityConversionError(\"Invalid principal value\", type, value);\n\t\treturn value;\n\t}\n\n\tif (type === \"trait_reference\") {\n\t\tif (!isPrincipal(value))\n\t\t\tthrow new ClarityConversionError(\n\t\t\t\t\"Invalid trait_reference value\",\n\t\t\t\ttype,\n\t\t\t\tvalue,\n\t\t\t);\n\t\treturn value;\n\t}\n\n\tif (isAbiStringAscii(type)) {\n\t\tif (!isString(value))\n\t\t\tthrow new ClarityConversionError(\n\t\t\t\t\"Invalid string-ascii value\",\n\t\t\t\ttype,\n\t\t\t\tvalue,\n\t\t\t);\n\t\tconst str = value as string;\n\t\tfor (let i = 0; i < str.length; i++) {\n\t\t\tif (str.charCodeAt(i) > 127) {\n\t\t\t\tthrow new ClarityConversionError(\n\t\t\t\t\t`Non-ASCII character at position ${i}: '${str[i]}' (code ${str.charCodeAt(i)})`,\n\t\t\t\t\ttype,\n\t\t\t\t\tvalue,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (str.length > type[\"string-ascii\"].length) {\n\t\t\tthrow new ClarityConversionError(\n\t\t\t\t`String length ${str.length} exceeds max ${type[\"string-ascii\"].length}`,\n\t\t\t\ttype,\n\t\t\t\tvalue,\n\t\t\t);\n\t\t}\n\t\treturn value;\n\t}\n\n\tif (isAbiStringUtf8(type)) {\n\t\tif (!isString(value))\n\t\t\tthrow new ClarityConversionError(\n\t\t\t\t\"Invalid string-utf8 value\",\n\t\t\t\ttype,\n\t\t\t\tvalue,\n\t\t\t);\n\t\tconst str = value as string;\n\t\tconst byteLength = new TextEncoder().encode(str).length;\n\t\tif (byteLength > type[\"string-utf8\"].length) {\n\t\t\tthrow new ClarityConversionError(\n\t\t\t\t`String byte length ${byteLength} exceeds max ${type[\"string-utf8\"].length}`,\n\t\t\t\ttype,\n\t\t\t\tvalue,\n\t\t\t);\n\t\t}\n\t\treturn value;\n\t}\n\n\tif (isAbiBuffer(type)) {\n\t\tif (!isUint8Array(value))\n\t\t\tthrow new ClarityConversionError(\"Invalid buffer value\", type, value);\n\t\tconst buff = value as Uint8Array;\n\t\tif (buff.length > type.buff.length) {\n\t\t\tthrow new ClarityConversionError(\n\t\t\t\t`Buffer length ${buff.length} exceeds max ${type.buff.length}`,\n\t\t\t\ttype,\n\t\t\t\tvalue,\n\t\t\t);\n\t\t}\n\t\treturn value;\n\t}\n\n\tif (isAbiList(type)) {\n\t\tif (!Array.isArray(value))\n\t\t\tthrow new ClarityConversionError(\n\t\t\t\t\"Expected array for list type\",\n\t\t\t\ttype,\n\t\t\t\tvalue,\n\t\t\t);\n\t\tif (value.length > type.list.length) {\n\t\t\tthrow new ClarityConversionError(\n\t\t\t\t`List length ${value.length} exceeds max ${type.list.length}`,\n\t\t\t\ttype,\n\t\t\t\tvalue,\n\t\t\t);\n\t\t}\n\t\treturn value.map((item) => jsToClarity(type.list.type, item));\n\t}\n\n\tif (isAbiTuple(type)) {\n\t\tif (typeof value !== \"object\" || value === null)\n\t\t\tthrow new ClarityConversionError(\n\t\t\t\t\"Expected object for tuple type\",\n\t\t\t\ttype,\n\t\t\t\tvalue,\n\t\t\t);\n\t\tconst result: Record<string, unknown> = {};\n\t\tfor (const field of type.tuple) {\n\t\t\tconst camelKey = toCamelCase(field.name);\n\t\t\tconst hasOriginal = field.name in (value as object);\n\t\t\tconst hasCamel = camelKey in (value as object);\n\t\t\tif (!hasOriginal && !hasCamel) {\n\t\t\t\tthrow new ClarityConversionError(\n\t\t\t\t\t`Missing tuple field: ${field.name}`,\n\t\t\t\t\ttype,\n\t\t\t\t\tvalue,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst fieldValue = hasOriginal\n\t\t\t\t? (value as Record<string, unknown>)[field.name]\n\t\t\t\t: (value as Record<string, unknown>)[camelKey];\n\t\t\tresult[field.name] = jsToClarity(field.type, fieldValue);\n\t\t}\n\t\treturn result;\n\t}\n\n\tif (isAbiOptional(type)) {\n\t\tif (value === null || value === undefined) return null;\n\t\treturn jsToClarity(type.optional, value);\n\t}\n\n\tif (isAbiResponse(type)) {\n\t\tif (typeof value !== \"object\" || value === null)\n\t\t\tthrow new ClarityConversionError(\n\t\t\t\t\"Expected object for response type\",\n\t\t\t\ttype,\n\t\t\t\tvalue,\n\t\t\t);\n\t\tconst hasOk = \"ok\" in value;\n\t\tconst hasErr = \"err\" in value;\n\t\tif (hasOk && !hasErr) {\n\t\t\treturn {\n\t\t\t\tok: jsToClarity(type.response.ok, (value as { ok: unknown }).ok),\n\t\t\t};\n\t\t}\n\t\tif (hasErr && !hasOk) {\n\t\t\treturn {\n\t\t\t\terr: jsToClarity(type.response.error, (value as { err: unknown }).err),\n\t\t\t};\n\t\t}\n\t\tthrow new ClarityConversionError(\n\t\t\t\"Response must have exactly 'ok' or 'err' property\",\n\t\t\ttype,\n\t\t\tvalue,\n\t\t);\n\t}\n\n\tthrow new ClarityConversionError(\"Unknown Clarity type\", type, value);\n}\n\nexport function prepareArgs<F extends AbiFunction>(\n\tfunc: F,\n\targs: Record<string, unknown>,\n): unknown[] {\n\treturn func.args.map((arg) => {\n\t\tif (!(arg.name in args)) {\n\t\t\tthrow new ClarityConversionError(\n\t\t\t\t`Missing argument: ${arg.name}`,\n\t\t\t\targ.type,\n\t\t\t\tundefined,\n\t\t\t);\n\t\t}\n\t\treturn jsToClarity(arg.type, args[arg.name]);\n\t});\n}\n\nexport function validateArgs<F extends AbiFunction>(\n\tfunc: F,\n\targs: Record<string, unknown>,\n): void {\n\tfor (const arg of func.args) {\n\t\tif (!(arg.name in args)) {\n\t\t\tthrow new ClarityConversionError(\n\t\t\t\t`Missing argument: ${arg.name}`,\n\t\t\t\targ.type,\n\t\t\t\tundefined,\n\t\t\t);\n\t\t}\n\t\tjsToClarity(arg.type, args[arg.name]);\n\t}\n}\n\nexport function validateArgsArray<F extends AbiFunction>(\n\tfunc: F,\n\targs: unknown[],\n): void {\n\tif (args.length !== func.args.length) {\n\t\tthrow new ClarityConversionError(\n\t\t\t`Expected ${func.args.length} arguments, got ${args.length}`,\n\t\t\tfunc.args[0]?.type ?? \"bool\",\n\t\t\targs,\n\t\t);\n\t}\n\tfunc.args.forEach((arg, i) => {\n\t\tjsToClarity(arg.type, args[i]);\n\t});\n}\n"
|
|
7
7
|
],
|
|
8
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQO,SAAS,WAAW,CAC1B,KACA,WAA+B,OACV;AAAA,EACrB,QAAQ,IAAI;AAAA,SACN;AAAA,MACJ,OAAO;AAAA,SACH;AAAA,MACJ,OAAO;AAAA,SACH;AAAA,MACJ,OAAO,IAAI,MAAM,SAAS;AAAA,SACtB;AAAA,MACJ,OAAO,IAAI,IAAI,MAAM,SAAS;AAAA,SAC1B;AAAA,MACJ,IAAI,aAAa,YAAY;AAAA,QAC5B,MAAM,MAAM,aAAa,WAAW,IAAI,KAAK,CAAC;AAAA,QAC9C,IAAI,WAAW,KAAK,GAAG;AAAA,UAAG,OAAO,KAAK,UAAU,GAAG;AAAA,MACpD;AAAA,MACA,OAAO,KAAK,IAAI;AAAA,SACZ;AAAA,MACJ,OAAO;AAAA,SACH;AAAA,MACJ,OAAO,SAAS,YAAY,IAAI,OAAO,QAAQ;AAAA,SAC3C;AAAA,MACJ,OAAO,OAAO,YAAY,IAAI,OAAO,QAAQ;AAAA,SACzC;AAAA,MACJ,OAAO,QAAQ,YAAY,IAAI,OAAO,QAAQ;AAAA,SAC1C;AAAA,SACA;AAAA,MACJ,OAAO,IAAI;AAAA,SACP;AAAA,MACJ,OAAO,SAAS,IAAI,MAAM,IAAI,CAAC,MAAM,YAAY,GAAG,QAAQ,CAAC,EAAE,KAAK,GAAG;AAAA,SACnE;AAAA,MACJ,OAAO,UAAU,OAAO,KAAK,IAAI,KAAK,
|
|
9
|
-
"debugId": "
|
|
8
|
+
"mappings": "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",
|
|
9
|
+
"debugId": "56784A8071A0FAF364756E2164756E21",
|
|
10
10
|
"names": []
|
|
11
11
|
}
|
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
// src/errors/websocket.ts
|
|
2
2
|
class WebSocketError extends BaseError {
|
|
3
3
|
name = "WebSocketError";
|
|
4
|
-
constructor(message, options) {
|
|
5
|
-
super(message, options);
|
|
6
|
-
}
|
|
7
4
|
}
|
|
8
5
|
|
|
9
6
|
// src/subscriptions/actions.ts
|
|
@@ -50,5 +47,5 @@ async function watchNftEvent(client, params) {
|
|
|
50
47
|
}, params.onEvent);
|
|
51
48
|
}
|
|
52
49
|
|
|
53
|
-
//# debugId=
|
|
54
|
-
//# sourceMappingURL=stacks-
|
|
50
|
+
//# debugId=5512A15F010E3B8E64756E2164756E21
|
|
51
|
+
//# sourceMappingURL=stacks-dpxnxhqb.cjs.map
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/errors/websocket.ts", "../src/subscriptions/actions.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"import { BaseError } from \"./base.ts\";\n\nexport class WebSocketError extends BaseError {\n\toverride name = \"WebSocketError\";\n
|
|
5
|
+
"import { BaseError } from \"./base.ts\";\n\nexport class WebSocketError extends BaseError {\n\toverride name = \"WebSocketError\";\n}\n",
|
|
6
6
|
"import type { Client } from \"../clients/types.ts\";\nimport { WebSocketError } from \"../errors/websocket.ts\";\nimport type { WebSocketTransport } from \"../transports/webSocket.ts\";\nimport type {\n\tAddressBalanceNotification,\n\tAddressTxNotification,\n\tBlockNotification,\n\tMempoolNotification,\n\tNftEventNotification,\n\tSubscription,\n\tTxUpdateNotification,\n} from \"./types.ts\";\n\nfunction getWsTransport(client: Client): WebSocketTransport {\n\tif (client.transport.type !== \"webSocket\") {\n\t\tthrow new WebSocketError(\n\t\t\t\"Watch actions require a webSocket transport. Use `webSocket()` when creating your client.\",\n\t\t);\n\t}\n\treturn client.transport as WebSocketTransport;\n}\n\nexport type WatchBlocksParams = {\n\tonBlock: (block: BlockNotification) => void;\n};\n\nexport async function watchBlocks(\n\tclient: Client,\n\tparams: WatchBlocksParams,\n): Promise<Subscription> {\n\tconst transport = getWsTransport(client);\n\treturn transport.subscribe({ event: \"block\" }, params.onBlock);\n}\n\nexport type WatchMempoolParams = {\n\tonTransaction: (tx: MempoolNotification) => void;\n};\n\nexport async function watchMempool(\n\tclient: Client,\n\tparams: WatchMempoolParams,\n): Promise<Subscription> {\n\tconst transport = getWsTransport(client);\n\treturn transport.subscribe({ event: \"mempool\" }, params.onTransaction);\n}\n\nexport type WatchTransactionParams = {\n\ttxId: string;\n\tonUpdate: (update: TxUpdateNotification) => void;\n};\n\nexport async function watchTransaction(\n\tclient: Client,\n\tparams: WatchTransactionParams,\n): Promise<Subscription> {\n\tconst transport = getWsTransport(client);\n\treturn transport.subscribe(\n\t\t{ event: \"tx_update\", tx_id: params.txId },\n\t\tparams.onUpdate,\n\t);\n}\n\nexport type WatchAddressParams = {\n\taddress: string;\n\tonTransaction: (tx: AddressTxNotification) => void;\n};\n\nexport async function watchAddress(\n\tclient: Client,\n\tparams: WatchAddressParams,\n): Promise<Subscription> {\n\tconst transport = getWsTransport(client);\n\treturn transport.subscribe(\n\t\t{ event: \"address_tx_update\", address: params.address },\n\t\tparams.onTransaction,\n\t);\n}\n\nexport type WatchAddressBalanceParams = {\n\taddress: string;\n\tonBalance: (balance: AddressBalanceNotification) => void;\n};\n\nexport async function watchAddressBalance(\n\tclient: Client,\n\tparams: WatchAddressBalanceParams,\n): Promise<Subscription> {\n\tconst transport = getWsTransport(client);\n\treturn transport.subscribe(\n\t\t{ event: \"address_balance_update\", address: params.address },\n\t\tparams.onBalance,\n\t);\n}\n\nexport type WatchNftEventParams = {\n\tonEvent: (event: NftEventNotification) => void;\n\tassetIdentifier?: string;\n\tvalue?: string;\n};\n\nexport async function watchNftEvent(\n\tclient: Client,\n\tparams: WatchNftEventParams,\n): Promise<Subscription> {\n\tconst transport = getWsTransport(client);\n\n\tlet event: \"nft_event\" | \"nft_asset_event\" | \"nft_collection_event\";\n\tif (params.assetIdentifier && params.value) {\n\t\tevent = \"nft_event\";\n\t} else if (params.assetIdentifier) {\n\t\tevent = \"nft_collection_event\";\n\t} else {\n\t\tevent = \"nft_event\";\n\t}\n\n\treturn transport.subscribe(\n\t\t{\n\t\t\tevent,\n\t\t\tasset_identifier: params.assetIdentifier,\n\t\t\tvalue: params.value,\n\t\t},\n\t\tparams.onEvent,\n\t);\n}\n"
|
|
7
7
|
],
|
|
8
|
-
"mappings": ";AAEO,MAAM,uBAAuB,UAAU;AAAA,EACpC,OAAO;
|
|
9
|
-
"debugId": "
|
|
8
|
+
"mappings": ";AAEO,MAAM,uBAAuB,UAAU;AAAA,EACpC,OAAO;AACjB;;;ACSA,SAAS,cAAc,CAAC,QAAoC;AAAA,EAC3D,IAAI,OAAO,UAAU,SAAS,aAAa;AAAA,IAC1C,MAAM,IAAI,eACT,2FACD;AAAA,EACD;AAAA,EACA,OAAO,OAAO;AAAA;AAOf,eAAsB,WAAW,CAChC,QACA,QACwB;AAAA,EACxB,MAAM,YAAY,eAAe,MAAM;AAAA,EACvC,OAAO,UAAU,UAAU,EAAE,OAAO,QAAQ,GAAG,OAAO,OAAO;AAAA;AAO9D,eAAsB,YAAY,CACjC,QACA,QACwB;AAAA,EACxB,MAAM,YAAY,eAAe,MAAM;AAAA,EACvC,OAAO,UAAU,UAAU,EAAE,OAAO,UAAU,GAAG,OAAO,aAAa;AAAA;AAQtE,eAAsB,gBAAgB,CACrC,QACA,QACwB;AAAA,EACxB,MAAM,YAAY,eAAe,MAAM;AAAA,EACvC,OAAO,UAAU,UAChB,EAAE,OAAO,aAAa,OAAO,OAAO,KAAK,GACzC,OAAO,QACR;AAAA;AAQD,eAAsB,YAAY,CACjC,QACA,QACwB;AAAA,EACxB,MAAM,YAAY,eAAe,MAAM;AAAA,EACvC,OAAO,UAAU,UAChB,EAAE,OAAO,qBAAqB,SAAS,OAAO,QAAQ,GACtD,OAAO,aACR;AAAA;AAQD,eAAsB,mBAAmB,CACxC,QACA,QACwB;AAAA,EACxB,MAAM,YAAY,eAAe,MAAM;AAAA,EACvC,OAAO,UAAU,UAChB,EAAE,OAAO,0BAA0B,SAAS,OAAO,QAAQ,GAC3D,OAAO,SACR;AAAA;AASD,eAAsB,aAAa,CAClC,QACA,QACwB;AAAA,EACxB,MAAM,YAAY,eAAe,MAAM;AAAA,EAEvC,IAAI;AAAA,EACJ,IAAI,OAAO,mBAAmB,OAAO,OAAO;AAAA,IAC3C,QAAQ;AAAA,EACT,EAAO,SAAI,OAAO,iBAAiB;AAAA,IAClC,QAAQ;AAAA,EACT,EAAO;AAAA,IACN,QAAQ;AAAA;AAAA,EAGT,OAAO,UAAU,UAChB;AAAA,IACC;AAAA,IACA,kBAAkB,OAAO;AAAA,IACzB,OAAO,OAAO;AAAA,EACf,GACA,OAAO,OACR;AAAA;",
|
|
9
|
+
"debugId": "5512A15F010E3B8E64756E2164756E21",
|
|
10
10
|
"names": []
|
|
11
11
|
}
|