@secondlayer/stacks 0.1.0 → 0.2.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.
Files changed (93) hide show
  1. package/dist/shared/stacks-2ar4prfz.cjs +328 -0
  2. package/dist/shared/stacks-2ar4prfz.cjs.map +11 -0
  3. package/dist/shared/stacks-61rvzkz1.cjs.map +1 -1
  4. package/dist/shared/{stacks-d1fmkv3p.js → stacks-9avax1yf.js} +2 -2
  5. package/dist/shared/{stacks-ph4a6322.js → stacks-9mdk86wp.js} +16 -18
  6. package/dist/shared/{stacks-ph4a6322.js.map → stacks-9mdk86wp.js.map} +2 -2
  7. package/dist/shared/stacks-an5k8n4t.cjs.map +2 -2
  8. package/dist/shared/stacks-dr5en54r.cjs +119 -0
  9. package/dist/shared/stacks-dr5en54r.cjs.map +10 -0
  10. package/dist/shared/{stacks-b008c3w8.cjs → stacks-fedzr2ka.js} +134 -2
  11. package/dist/shared/stacks-fedzr2ka.js.map +13 -0
  12. package/dist/shared/{stacks-j2cy7qtt.js → stacks-ky14tdf6.cjs} +109 -24
  13. package/dist/shared/stacks-ky14tdf6.cjs.map +13 -0
  14. package/dist/shared/stacks-mrk6tkkh.cjs +41 -0
  15. package/dist/shared/{stacks-2gdt3aqj.cjs.map → stacks-mrk6tkkh.cjs.map} +1 -1
  16. package/dist/shared/{stacks-1ddg6mbv.js → stacks-qcx67vqa.js} +3 -3
  17. package/dist/shared/stacks-qcx67vqa.js.map +10 -0
  18. package/dist/shared/stacks-qyt8m5v0.js +282 -0
  19. package/dist/shared/stacks-qyt8m5v0.js.map +11 -0
  20. package/dist/shared/{stacks-hfem9dck.cjs → stacks-vbke9mqw.cjs} +328 -87
  21. package/dist/shared/stacks-vbke9mqw.cjs.map +15 -0
  22. package/dist/shared/{stacks-md6e5ta0.js → stacks-vd9jcp0b.js} +13 -17
  23. package/dist/shared/{stacks-md6e5ta0.js.map → stacks-vd9jcp0b.js.map} +3 -3
  24. package/dist/shared/stacks-vdfag81a.cjs.map +2 -2
  25. package/dist/shared/{stacks-xtz0n62y.js → stacks-vyb9rx8q.js} +341 -106
  26. package/dist/shared/stacks-vyb9rx8q.js.map +15 -0
  27. package/dist/shared/{stacks-m2dc5xwg.js → stacks-wrb1es85.js} +7 -11
  28. package/dist/shared/{stacks-m2dc5xwg.js.map → stacks-wrb1es85.js.map} +3 -3
  29. package/dist/shared/stacks-yfveb68e.js +121 -0
  30. package/dist/shared/stacks-yfveb68e.js.map +10 -0
  31. package/dist/src/accounts/index.js +1 -2
  32. package/dist/src/accounts/index.js.map +2 -2
  33. package/dist/src/actions/index.d.cts +3 -5
  34. package/dist/src/actions/index.d.ts +3 -5
  35. package/dist/src/actions/index.js +8 -11
  36. package/dist/src/actions/index.js.map +1 -1
  37. package/dist/src/bns/index.cjs +13 -13
  38. package/dist/src/bns/index.cjs.map +3 -3
  39. package/dist/src/bns/index.js +22 -25
  40. package/dist/src/bns/index.js.map +3 -3
  41. package/dist/src/chains/index.js +1 -2
  42. package/dist/src/chains/index.js.map +1 -1
  43. package/dist/src/clarity/index.cjs +1 -326
  44. package/dist/src/clarity/index.cjs.map +3 -5
  45. package/dist/src/clarity/index.js +18 -272
  46. package/dist/src/clarity/index.js.map +3 -5
  47. package/dist/src/connect/index.cjs +19 -9
  48. package/dist/src/connect/index.cjs.map +2 -2
  49. package/dist/src/connect/walletconnect/index.cjs +19 -9
  50. package/dist/src/connect/walletconnect/index.cjs.map +4 -4
  51. package/dist/src/connect/walletconnect/index.js +1 -1
  52. package/dist/src/connect/walletconnect/index.js.map +4 -4
  53. package/dist/src/index.cjs +1 -2
  54. package/dist/src/index.cjs.map +5 -5
  55. package/dist/src/index.js +9 -16
  56. package/dist/src/index.js.map +5 -5
  57. package/dist/src/postconditions/index.cjs +1 -117
  58. package/dist/src/postconditions/index.cjs.map +3 -4
  59. package/dist/src/postconditions/index.js +5 -119
  60. package/dist/src/postconditions/index.js.map +3 -4
  61. package/dist/src/pox/index.cjs +9 -9
  62. package/dist/src/pox/index.cjs.map +4 -4
  63. package/dist/src/pox/index.js +17 -20
  64. package/dist/src/pox/index.js.map +4 -4
  65. package/dist/src/stackingdao/index.cjs +13 -13
  66. package/dist/src/stackingdao/index.cjs.map +3 -3
  67. package/dist/src/stackingdao/index.js +21 -24
  68. package/dist/src/stackingdao/index.js.map +3 -3
  69. package/dist/src/subscriptions/index.js +1 -2
  70. package/dist/src/subscriptions/index.js.map +1 -1
  71. package/dist/src/transactions/index.js +18 -22
  72. package/dist/src/transactions/index.js.map +1 -1
  73. package/dist/src/utils/index.cjs.map +2 -2
  74. package/dist/src/utils/index.js +4 -5
  75. package/dist/src/utils/index.js.map +3 -3
  76. package/package.json +1 -1
  77. package/dist/shared/stacks-1aqm7c2h.cjs +0 -110
  78. package/dist/shared/stacks-1aqm7c2h.cjs.map +0 -11
  79. package/dist/shared/stacks-1ddg6mbv.js.map +0 -10
  80. package/dist/shared/stacks-2gdt3aqj.cjs +0 -44
  81. package/dist/shared/stacks-8yykgdww.js +0 -125
  82. package/dist/shared/stacks-8yykgdww.js.map +0 -11
  83. package/dist/shared/stacks-b008c3w8.cjs.map +0 -11
  84. package/dist/shared/stacks-hfem9dck.cjs.map +0 -13
  85. package/dist/shared/stacks-j2cy7qtt.js.map +0 -11
  86. package/dist/shared/stacks-njvyj3ab.js +0 -23
  87. package/dist/shared/stacks-njvyj3ab.js.map +0 -9
  88. package/dist/shared/stacks-pz73cn97.js +0 -285
  89. package/dist/shared/stacks-pz73cn97.js.map +0 -11
  90. package/dist/shared/stacks-xtz0n62y.js.map +0 -13
  91. package/dist/shared/stacks-zyv9qqme.cjs +0 -249
  92. package/dist/shared/stacks-zyv9qqme.cjs.map +0 -11
  93. /package/dist/shared/{stacks-d1fmkv3p.js.map → stacks-9avax1yf.js.map} +0 -0
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/actions/getContract.ts"],
4
+ "sourcesContent": [
5
+ "import type { Client } from \"../clients/types.ts\";\nimport type {\n AbiContract,\n AbiFunction,\n AbiMap,\n AbiType,\n ExtractReadOnlyFunctions,\n ExtractPublicFunctions,\n ExtractFunctionArgs,\n ExtractFunctionOutput,\n ExtractMapNames,\n ExtractMapKey,\n ExtractMapValue,\n} from \"../clarity/abi/index.ts\";\nimport { toCamelCase, type ToCamelCase } from \"../clarity/abi/utils.ts\";\nimport { jsToClarityValue, clarityValueToJSUntyped } from \"../clarity/bridge.ts\";\nimport { readContract } from \"./public/readContract.ts\";\nimport { callContract } from \"./wallet/callContract.ts\";\nimport { getMapEntry } from \"./public/getMapEntry.ts\";\nimport type { ClarityValue } from \"../clarity/types.ts\";\nimport type { PostCondition } from \"../postconditions/types.ts\";\nimport type { IntegerType } from \"../utils/encoding.ts\";\n\n// --- Type helpers for unwrapping response types ---\n\n/** Unwrap `(response ok err)` → just the `ok` branch type */\ntype UnwrapResponse<T> = T extends { ok: infer O } | { err: any } ? O : T;\n\ntype ReadMethodReturn<\n C extends AbiContract,\n N extends ExtractReadOnlyFunctions<C>,\n> = UnwrapResponse<ExtractFunctionOutput<C, N>>;\n\n// --- Public type for the contract instance ---\n\ntype ReadMethods<C extends AbiContract> = {\n [N in ExtractReadOnlyFunctions<C> as ToCamelCase<N>]: (\n args: ExtractFunctionArgs<C, N>,\n ) => Promise<ReadMethodReturn<C, N>>;\n};\n\ntype CallMethods<C extends AbiContract> = {\n [N in ExtractPublicFunctions<C> as ToCamelCase<N>]: (\n args: ExtractFunctionArgs<C, N>,\n options?: ContractCallOptions,\n ) => Promise<string>;\n};\n\ntype MapMethods<C extends AbiContract> = {\n [N in ExtractMapNames<C> as ToCamelCase<N>]: (\n key: ExtractMapKey<C, N>,\n ) => Promise<ExtractMapValue<C, N> | null>;\n};\n\nexport type ContractCallOptions = {\n fee?: IntegerType;\n nonce?: IntegerType;\n postConditionMode?: \"allow\" | \"deny\";\n postConditions?: PostCondition[];\n};\n\nexport type ContractInstance<C extends AbiContract> = {\n read: ReadMethods<C>;\n call: CallMethods<C>;\n maps: MapMethods<C>;\n};\n\nexport type GetContractParams<C extends AbiContract> = {\n client: Client;\n address: string;\n name: string;\n abi: C;\n};\n\nexport function getContract<const TAbi extends AbiContract>(\n params: GetContractParams<TAbi>,\n): ContractInstance<TAbi> {\n const { client, address, name: contractName, abi } = params;\n const contractId = `${address}.${contractName}`;\n\n // Index functions/maps by name for fast lookup\n const fnByName = new Map<string, AbiFunction>();\n for (const fn of abi.functions) {\n fnByName.set(fn.name, fn as AbiFunction);\n }\n\n const mapByName = new Map<string, AbiMap>();\n if (abi.maps) {\n for (const m of abi.maps) {\n mapByName.set(m.name, m as AbiMap);\n }\n }\n\n // Build kebab→camel reverse map for function/map names\n const camelToKebab = new Map<string, string>();\n for (const fn of abi.functions) {\n camelToKebab.set(toCamelCase(fn.name), fn.name);\n }\n if (abi.maps) {\n for (const m of abi.maps) {\n camelToKebab.set(toCamelCase(m.name), m.name);\n }\n }\n\n const read = new Proxy({} as ReadMethods<TAbi>, {\n get(_target, prop: string) {\n const fnName = camelToKebab.get(prop) ?? prop;\n const fn = fnByName.get(fnName);\n if (!fn || fn.access !== \"read-only\") return undefined;\n\n return async (args: Record<string, unknown>) => {\n const clarityArgs = buildFunctionArgs(fn, args);\n const result = await readContract(client, {\n contract: contractId,\n functionName: fn.name,\n args: clarityArgs,\n });\n\n const jsValue = clarityValueToJSUntyped(fn.outputs as AbiType, result);\n\n // Auto-unwrap: if output is response type, unwrap ok / throw on err\n if (isResponseOutput(fn.outputs as AbiType)) {\n const resp = jsValue as { ok?: unknown; err?: unknown };\n if (\"ok\" in resp) return resp.ok;\n throw new ContractResponseError(\n `${contractId}::${fn.name} returned (err ${formatErrValue(resp.err)})`,\n resp.err,\n );\n }\n\n return jsValue;\n };\n },\n });\n\n const call = new Proxy({} as CallMethods<TAbi>, {\n get(_target, prop: string) {\n const fnName = camelToKebab.get(prop) ?? prop;\n const fn = fnByName.get(fnName);\n if (!fn || fn.access !== \"public\") return undefined;\n\n return async (\n args: Record<string, unknown>,\n options?: ContractCallOptions,\n ) => {\n const clarityArgs = buildFunctionArgs(fn, args);\n return callContract(client, {\n contract: contractId,\n functionName: fn.name,\n functionArgs: clarityArgs,\n ...options,\n });\n };\n },\n });\n\n const maps = new Proxy({} as MapMethods<TAbi>, {\n get(_target, prop: string) {\n const mapName = camelToKebab.get(prop) ?? prop;\n const map = mapByName.get(mapName);\n if (!map) return undefined;\n\n return async (key: unknown) => {\n const clarityKey = jsToClarityValue(map.key as AbiType, key);\n const result = await getMapEntry(client, {\n contract: contractId,\n mapName: map.name,\n key: clarityKey,\n });\n\n // Map entries come back as (optional ...). If none, return null.\n if (result.type === \"none\") return null;\n if (result.type === \"some\") {\n return clarityValueToJSUntyped(map.value as AbiType, result.value);\n }\n // Direct value (shouldn't normally happen, but handle gracefully)\n return clarityValueToJSUntyped(map.value as AbiType, result);\n };\n },\n });\n\n return { read, call, maps };\n}\n\n// --- Helpers ---\n\nfunction buildFunctionArgs(\n fn: AbiFunction,\n args: Record<string, unknown>,\n): ClarityValue[] {\n return fn.args.map((arg) => {\n const camelKey = toCamelCase(arg.name);\n const hasOriginal = arg.name in args;\n const hasCamel = camelKey in args;\n const value = hasOriginal ? args[arg.name] : hasCamel ? args[camelKey] : undefined;\n if (value === undefined) throw new Error(`Missing argument: ${arg.name}`);\n return jsToClarityValue(arg.type as AbiType, value);\n });\n}\n\nfunction isResponseOutput(type: AbiType): boolean {\n return typeof type === \"object\" && type !== null && \"response\" in type;\n}\n\nfunction formatErrValue(value: unknown): string {\n if (typeof value === \"bigint\") return value.toString();\n if (typeof value === \"string\") return `\"${value}\"`;\n return String(value);\n}\n\nexport class ContractResponseError extends Error {\n override name = \"ContractResponseError\";\n constructor(\n message: string,\n public readonly errorValue: unknown,\n ) {\n super(message);\n }\n}\n"
6
+ ],
7
+ "mappings": "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",
8
+ "debugId": "C71C39F2B8094B6864756E2164756E21",
9
+ "names": []
10
+ }
@@ -0,0 +1,282 @@
1
+ import {
2
+ isAbiBuffer,
3
+ isAbiList,
4
+ isAbiOptional,
5
+ isAbiResponse,
6
+ isAbiStringAscii,
7
+ isAbiStringUtf8,
8
+ isAbiTuple,
9
+ isBool,
10
+ isInt128,
11
+ isPrincipal,
12
+ isString,
13
+ isUint128,
14
+ isUint8Array,
15
+ toCamelCase
16
+ } from "./stacks-9avax1yf.js";
17
+ import {
18
+ asciiToBytes,
19
+ bytesToAscii,
20
+ hexToBytes,
21
+ utf8ToBytes
22
+ } from "./stacks-nqytwfcc.js";
23
+ // src/clarity/prettyPrint.ts
24
+ function prettyPrint(val, encoding = "hex") {
25
+ switch (val.type) {
26
+ case "true":
27
+ return "true";
28
+ case "false":
29
+ return "false";
30
+ case "int":
31
+ return val.value.toString();
32
+ case "uint":
33
+ return `u${val.value.toString()}`;
34
+ case "buffer":
35
+ if (encoding === "tryAscii") {
36
+ const str = bytesToAscii(hexToBytes(val.value));
37
+ if (/^[ -~]*$/.test(str))
38
+ return JSON.stringify(str);
39
+ }
40
+ return `0x${val.value}`;
41
+ case "none":
42
+ return "none";
43
+ case "some":
44
+ return `(some ${prettyPrint(val.value, encoding)})`;
45
+ case "ok":
46
+ return `(ok ${prettyPrint(val.value, encoding)})`;
47
+ case "err":
48
+ return `(err ${prettyPrint(val.value, encoding)})`;
49
+ case "address":
50
+ case "contract":
51
+ return val.value;
52
+ case "list":
53
+ return `(list ${val.value.map((v) => prettyPrint(v, encoding)).join(" ")})`;
54
+ case "tuple":
55
+ return `(tuple ${Object.keys(val.value).map((key) => `(${key} ${prettyPrint(val.value[key], encoding)})`).join(" ")})`;
56
+ case "ascii":
57
+ return `"${val.value}"`;
58
+ case "utf8":
59
+ return `u"${val.value}"`;
60
+ }
61
+ }
62
+ function cvToJSON(val) {
63
+ switch (val.type) {
64
+ case "true":
65
+ return { type: "bool", value: true };
66
+ case "false":
67
+ return { type: "bool", value: false };
68
+ case "int":
69
+ return { type: "int", value: val.value.toString() };
70
+ case "uint":
71
+ return { type: "uint", value: val.value.toString() };
72
+ case "buffer":
73
+ return { type: `(buff ${Math.ceil(val.value.length / 2)})`, value: `0x${val.value}` };
74
+ case "none":
75
+ return { type: "(optional none)", value: null };
76
+ case "some":
77
+ return { type: `(optional)`, value: cvToJSON(val.value) };
78
+ case "ok":
79
+ return { type: "(response)", value: cvToJSON(val.value), success: true };
80
+ case "err":
81
+ return { type: "(response)", value: cvToJSON(val.value), success: false };
82
+ case "address":
83
+ case "contract":
84
+ return { type: "principal", value: val.value };
85
+ case "list":
86
+ return { type: "(list)", value: val.value.map(cvToJSON) };
87
+ case "tuple": {
88
+ const result = {};
89
+ for (const key of Object.keys(val.value)) {
90
+ result[key] = cvToJSON(val.value[key]);
91
+ }
92
+ return { type: "(tuple)", value: result };
93
+ }
94
+ case "ascii":
95
+ return { type: `(string-ascii ${asciiToBytes(val.value).length})`, value: val.value };
96
+ case "utf8":
97
+ return { type: `(string-utf8 ${utf8ToBytes(val.value).length})`, value: val.value };
98
+ }
99
+ }
100
+ function cvToValue(val) {
101
+ switch (val.type) {
102
+ case "true":
103
+ return true;
104
+ case "false":
105
+ return false;
106
+ case "int":
107
+ case "uint":
108
+ return val.value;
109
+ case "buffer":
110
+ return `0x${val.value}`;
111
+ case "none":
112
+ return null;
113
+ case "some":
114
+ return cvToValue(val.value);
115
+ case "ok":
116
+ case "err":
117
+ return cvToValue(val.value);
118
+ case "address":
119
+ case "contract":
120
+ return val.value;
121
+ case "list":
122
+ return val.value.map(cvToValue);
123
+ case "tuple": {
124
+ const result = {};
125
+ for (const key of Object.keys(val.value)) {
126
+ result[key] = cvToValue(val.value[key]);
127
+ }
128
+ return result;
129
+ }
130
+ case "ascii":
131
+ case "utf8":
132
+ return val.value;
133
+ }
134
+ }
135
+ // src/clarity/abi/converters.ts
136
+ class ClarityConversionError extends Error {
137
+ type;
138
+ value;
139
+ constructor(message, type, value) {
140
+ super(message);
141
+ this.type = type;
142
+ this.value = value;
143
+ this.name = "ClarityConversionError";
144
+ }
145
+ }
146
+ function jsToClarity(type, value) {
147
+ if (type === "none")
148
+ return null;
149
+ if (type === "uint128") {
150
+ if (!isUint128(value))
151
+ throw new ClarityConversionError("Invalid uint128 value", type, value);
152
+ return value;
153
+ }
154
+ if (type === "int128") {
155
+ if (!isInt128(value))
156
+ throw new ClarityConversionError("Invalid int128 value", type, value);
157
+ return value;
158
+ }
159
+ if (type === "bool") {
160
+ if (!isBool(value))
161
+ throw new ClarityConversionError("Invalid bool value", type, value);
162
+ return value;
163
+ }
164
+ if (type === "principal") {
165
+ if (!isPrincipal(value))
166
+ throw new ClarityConversionError("Invalid principal value", type, value);
167
+ return value;
168
+ }
169
+ if (type === "trait_reference") {
170
+ if (!isPrincipal(value))
171
+ throw new ClarityConversionError("Invalid trait_reference value", type, value);
172
+ return value;
173
+ }
174
+ if (isAbiStringAscii(type)) {
175
+ if (!isString(value))
176
+ throw new ClarityConversionError("Invalid string-ascii value", type, value);
177
+ const str = value;
178
+ for (let i = 0;i < str.length; i++) {
179
+ if (str.charCodeAt(i) > 127) {
180
+ throw new ClarityConversionError(`Non-ASCII character at position ${i}: '${str[i]}' (code ${str.charCodeAt(i)})`, type, value);
181
+ }
182
+ }
183
+ if (str.length > type["string-ascii"].length) {
184
+ throw new ClarityConversionError(`String length ${str.length} exceeds max ${type["string-ascii"].length}`, type, value);
185
+ }
186
+ return value;
187
+ }
188
+ if (isAbiStringUtf8(type)) {
189
+ if (!isString(value))
190
+ throw new ClarityConversionError("Invalid string-utf8 value", type, value);
191
+ const str = value;
192
+ const byteLength = new TextEncoder().encode(str).length;
193
+ if (byteLength > type["string-utf8"].length) {
194
+ throw new ClarityConversionError(`String byte length ${byteLength} exceeds max ${type["string-utf8"].length}`, type, value);
195
+ }
196
+ return value;
197
+ }
198
+ if (isAbiBuffer(type)) {
199
+ if (!isUint8Array(value))
200
+ throw new ClarityConversionError("Invalid buffer value", type, value);
201
+ const buff = value;
202
+ if (buff.length > type.buff.length) {
203
+ throw new ClarityConversionError(`Buffer length ${buff.length} exceeds max ${type.buff.length}`, type, value);
204
+ }
205
+ return value;
206
+ }
207
+ if (isAbiList(type)) {
208
+ if (!Array.isArray(value))
209
+ throw new ClarityConversionError("Expected array for list type", type, value);
210
+ if (value.length > type.list.length) {
211
+ throw new ClarityConversionError(`List length ${value.length} exceeds max ${type.list.length}`, type, value);
212
+ }
213
+ return value.map((item) => jsToClarity(type.list.type, item));
214
+ }
215
+ if (isAbiTuple(type)) {
216
+ if (typeof value !== "object" || value === null)
217
+ throw new ClarityConversionError("Expected object for tuple type", type, value);
218
+ const result = {};
219
+ for (const field of type.tuple) {
220
+ const camelKey = toCamelCase(field.name);
221
+ const hasOriginal = field.name in value;
222
+ const hasCamel = camelKey in value;
223
+ if (!hasOriginal && !hasCamel) {
224
+ throw new ClarityConversionError(`Missing tuple field: ${field.name}`, type, value);
225
+ }
226
+ const fieldValue = hasOriginal ? value[field.name] : value[camelKey];
227
+ result[field.name] = jsToClarity(field.type, fieldValue);
228
+ }
229
+ return result;
230
+ }
231
+ if (isAbiOptional(type)) {
232
+ if (value === null || value === undefined)
233
+ return null;
234
+ return jsToClarity(type.optional, value);
235
+ }
236
+ if (isAbiResponse(type)) {
237
+ if (typeof value !== "object" || value === null)
238
+ throw new ClarityConversionError("Expected object for response type", type, value);
239
+ const hasOk = "ok" in value;
240
+ const hasErr = "err" in value;
241
+ if (hasOk && !hasErr) {
242
+ return {
243
+ ok: jsToClarity(type.response.ok, value.ok)
244
+ };
245
+ }
246
+ if (hasErr && !hasOk) {
247
+ return {
248
+ err: jsToClarity(type.response.error, value.err)
249
+ };
250
+ }
251
+ throw new ClarityConversionError("Response must have exactly 'ok' or 'err' property", type, value);
252
+ }
253
+ throw new ClarityConversionError(`Unknown Clarity type`, type, value);
254
+ }
255
+ function prepareArgs(func, args) {
256
+ return func.args.map((arg) => {
257
+ if (!(arg.name in args)) {
258
+ throw new ClarityConversionError(`Missing argument: ${arg.name}`, arg.type, undefined);
259
+ }
260
+ return jsToClarity(arg.type, args[arg.name]);
261
+ });
262
+ }
263
+ function validateArgs(func, args) {
264
+ for (const arg of func.args) {
265
+ if (!(arg.name in args)) {
266
+ throw new ClarityConversionError(`Missing argument: ${arg.name}`, arg.type, undefined);
267
+ }
268
+ jsToClarity(arg.type, args[arg.name]);
269
+ }
270
+ }
271
+ function validateArgsArray(func, args) {
272
+ if (args.length !== func.args.length) {
273
+ throw new ClarityConversionError(`Expected ${func.args.length} arguments, got ${args.length}`, func.args[0]?.type ?? "bool", args);
274
+ }
275
+ func.args.forEach((arg, i) => {
276
+ jsToClarity(arg.type, args[i]);
277
+ });
278
+ }
279
+ export { prettyPrint, cvToJSON, cvToValue, ClarityConversionError, jsToClarity, prepareArgs, validateArgs, validateArgsArray };
280
+
281
+ //# debugId=DAD8B8065D272C2164756E2164756E21
282
+ //# sourceMappingURL=stacks-qyt8m5v0.js.map
@@ -0,0 +1,11 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/clarity/prettyPrint.ts", "../src/clarity/abi/converters.ts"],
4
+ "sourcesContent": [
5
+ "import { hexToBytes, bytesToAscii, asciiToBytes, utf8ToBytes } from \"../utils/encoding.ts\";\nimport type { ClarityValue } from \"./types.ts\";\n\nexport function prettyPrint(val: ClarityValue, encoding: \"tryAscii\" | \"hex\" = \"hex\"): string | undefined {\n switch (val.type) {\n case \"true\":\n return \"true\";\n case \"false\":\n return \"false\";\n case \"int\":\n return val.value.toString();\n case \"uint\":\n return `u${val.value.toString()}`;\n case \"buffer\":\n if (encoding === \"tryAscii\") {\n const str = bytesToAscii(hexToBytes(val.value));\n if (/^[ -~]*$/.test(str)) return JSON.stringify(str);\n }\n return `0x${val.value}`;\n case \"none\":\n return \"none\";\n case \"some\":\n return `(some ${prettyPrint(val.value, encoding)})`;\n case \"ok\":\n return `(ok ${prettyPrint(val.value, encoding)})`;\n case \"err\":\n return `(err ${prettyPrint(val.value, encoding)})`;\n case \"address\":\n case \"contract\":\n return val.value;\n case \"list\":\n return `(list ${val.value.map((v) => prettyPrint(v, encoding)).join(\" \")})`;\n case \"tuple\":\n return `(tuple ${Object.keys(val.value)\n .map((key) => `(${key} ${prettyPrint(val.value[key]!, encoding)})`)\n .join(\" \")})`;\n case \"ascii\":\n return `\"${val.value}\"`;\n case \"utf8\":\n return `u\"${val.value}\"`;\n }\n}\n\nexport function cvToJSON(val: ClarityValue): any {\n switch (val.type) {\n case \"true\":\n return { type: \"bool\", value: true };\n case \"false\":\n return { type: \"bool\", value: false };\n case \"int\":\n return { type: \"int\", value: val.value.toString() };\n case \"uint\":\n return { type: \"uint\", value: val.value.toString() };\n case \"buffer\":\n return { type: `(buff ${Math.ceil(val.value.length / 2)})`, value: `0x${val.value}` };\n case \"none\":\n return { type: \"(optional none)\", value: null };\n case \"some\":\n return { type: `(optional)`, value: cvToJSON(val.value) };\n case \"ok\":\n return { type: \"(response)\", value: cvToJSON(val.value), success: true };\n case \"err\":\n return { type: \"(response)\", value: cvToJSON(val.value), success: false };\n case \"address\":\n case \"contract\":\n return { type: \"principal\", value: val.value };\n case \"list\":\n return { type: \"(list)\", value: val.value.map(cvToJSON) };\n case \"tuple\": {\n const result: Record<string, any> = {};\n for (const key of Object.keys(val.value)) {\n result[key] = cvToJSON(val.value[key]!);\n }\n return { type: \"(tuple)\", value: result };\n }\n case \"ascii\":\n return { type: `(string-ascii ${asciiToBytes(val.value).length})`, value: val.value };\n case \"utf8\":\n return { type: `(string-utf8 ${utf8ToBytes(val.value).length})`, value: val.value };\n }\n}\n\nexport function cvToValue(val: ClarityValue): any {\n switch (val.type) {\n case \"true\":\n return true;\n case \"false\":\n return false;\n case \"int\":\n case \"uint\":\n return val.value;\n case \"buffer\":\n return `0x${val.value}`;\n case \"none\":\n return null;\n case \"some\":\n return cvToValue(val.value);\n case \"ok\":\n case \"err\":\n return cvToValue(val.value);\n case \"address\":\n case \"contract\":\n return val.value;\n case \"list\":\n return val.value.map(cvToValue);\n case \"tuple\": {\n const result: Record<string, any> = {};\n for (const key of Object.keys(val.value)) {\n result[key] = cvToValue(val.value[key]!);\n }\n return result;\n }\n case \"ascii\":\n case \"utf8\":\n return val.value;\n }\n}\n",
6
+ "import type { AbiType } from \"./types.ts\";\nimport type { AbiFunction } from \"./contract.ts\";\nimport {\n isUint128,\n isInt128,\n isBool,\n isPrincipal,\n isString,\n isUint8Array,\n isAbiList,\n isAbiTuple,\n isAbiOptional,\n isAbiResponse,\n isAbiBuffer,\n isAbiStringAscii,\n isAbiStringUtf8,\n} from \"./guards.ts\";\nimport { toCamelCase } from \"./utils.ts\";\n\nexport class ClarityConversionError extends Error {\n constructor(\n message: string,\n public readonly type: AbiType,\n public readonly value: unknown,\n ) {\n super(message);\n this.name = \"ClarityConversionError\";\n }\n}\n\nexport function jsToClarity(type: AbiType, value: unknown): unknown {\n if (type === \"none\") return null;\n\n if (type === \"uint128\") {\n if (!isUint128(value))\n throw new ClarityConversionError(\"Invalid uint128 value\", type, value);\n return value;\n }\n\n if (type === \"int128\") {\n if (!isInt128(value))\n throw new ClarityConversionError(\"Invalid int128 value\", type, value);\n return value;\n }\n\n if (type === \"bool\") {\n if (!isBool(value))\n throw new ClarityConversionError(\"Invalid bool value\", type, value);\n return value;\n }\n\n if (type === \"principal\") {\n if (!isPrincipal(value))\n throw new ClarityConversionError(\"Invalid principal value\", type, value);\n return value;\n }\n\n if (type === \"trait_reference\") {\n if (!isPrincipal(value))\n throw new ClarityConversionError(\n \"Invalid trait_reference value\",\n type,\n value,\n );\n return value;\n }\n\n if (isAbiStringAscii(type)) {\n if (!isString(value))\n throw new ClarityConversionError(\n \"Invalid string-ascii value\",\n type,\n value,\n );\n const str = value as string;\n for (let i = 0; i < str.length; i++) {\n if (str.charCodeAt(i) > 127) {\n throw new ClarityConversionError(\n `Non-ASCII character at position ${i}: '${str[i]}' (code ${str.charCodeAt(i)})`,\n type,\n value,\n );\n }\n }\n if (str.length > type[\"string-ascii\"].length) {\n throw new ClarityConversionError(\n `String length ${str.length} exceeds max ${type[\"string-ascii\"].length}`,\n type,\n value,\n );\n }\n return value;\n }\n\n if (isAbiStringUtf8(type)) {\n if (!isString(value))\n throw new ClarityConversionError(\n \"Invalid string-utf8 value\",\n type,\n value,\n );\n const str = value as string;\n const byteLength = new TextEncoder().encode(str).length;\n if (byteLength > type[\"string-utf8\"].length) {\n throw new ClarityConversionError(\n `String byte length ${byteLength} exceeds max ${type[\"string-utf8\"].length}`,\n type,\n value,\n );\n }\n return value;\n }\n\n if (isAbiBuffer(type)) {\n if (!isUint8Array(value))\n throw new ClarityConversionError(\"Invalid buffer value\", type, value);\n const buff = value as Uint8Array;\n if (buff.length > type.buff.length) {\n throw new ClarityConversionError(\n `Buffer length ${buff.length} exceeds max ${type.buff.length}`,\n type,\n value,\n );\n }\n return value;\n }\n\n if (isAbiList(type)) {\n if (!Array.isArray(value))\n throw new ClarityConversionError(\n \"Expected array for list type\",\n type,\n value,\n );\n if (value.length > type.list.length) {\n throw new ClarityConversionError(\n `List length ${value.length} exceeds max ${type.list.length}`,\n type,\n value,\n );\n }\n return value.map((item) => jsToClarity(type.list.type, item));\n }\n\n if (isAbiTuple(type)) {\n if (typeof value !== \"object\" || value === null)\n throw new ClarityConversionError(\n \"Expected object for tuple type\",\n type,\n value,\n );\n const result: Record<string, unknown> = {};\n for (const field of type.tuple) {\n const camelKey = toCamelCase(field.name);\n const hasOriginal = field.name in (value as object);\n const hasCamel = camelKey in (value as object);\n if (!hasOriginal && !hasCamel) {\n throw new ClarityConversionError(\n `Missing tuple field: ${field.name}`,\n type,\n value,\n );\n }\n const fieldValue = hasOriginal\n ? (value as Record<string, unknown>)[field.name]\n : (value as Record<string, unknown>)[camelKey];\n result[field.name] = jsToClarity(field.type, fieldValue);\n }\n return result;\n }\n\n if (isAbiOptional(type)) {\n if (value === null || value === undefined) return null;\n return jsToClarity(type.optional, value);\n }\n\n if (isAbiResponse(type)) {\n if (typeof value !== \"object\" || value === null)\n throw new ClarityConversionError(\n \"Expected object for response type\",\n type,\n value,\n );\n const hasOk = \"ok\" in value;\n const hasErr = \"err\" in value;\n if (hasOk && !hasErr) {\n return {\n ok: jsToClarity(type.response.ok, (value as { ok: unknown }).ok),\n };\n }\n if (hasErr && !hasOk) {\n return {\n err: jsToClarity(\n type.response.error,\n (value as { err: unknown }).err,\n ),\n };\n }\n throw new ClarityConversionError(\n \"Response must have exactly 'ok' or 'err' property\",\n type,\n value,\n );\n }\n\n throw new ClarityConversionError(`Unknown Clarity type`, type, value);\n}\n\nexport function prepareArgs<F extends AbiFunction>(\n func: F,\n args: Record<string, unknown>,\n): unknown[] {\n return func.args.map((arg) => {\n if (!(arg.name in args)) {\n throw new ClarityConversionError(\n `Missing argument: ${arg.name}`,\n arg.type,\n undefined,\n );\n }\n return jsToClarity(arg.type, args[arg.name]);\n });\n}\n\nexport function validateArgs<F extends AbiFunction>(\n func: F,\n args: Record<string, unknown>,\n): void {\n for (const arg of func.args) {\n if (!(arg.name in args)) {\n throw new ClarityConversionError(\n `Missing argument: ${arg.name}`,\n arg.type,\n undefined,\n );\n }\n jsToClarity(arg.type, args[arg.name]);\n }\n}\n\nexport function validateArgsArray<F extends AbiFunction>(\n func: F,\n args: unknown[],\n): void {\n if (args.length !== func.args.length) {\n throw new ClarityConversionError(\n `Expected ${func.args.length} arguments, got ${args.length}`,\n func.args[0]?.type ?? \"bool\",\n args,\n );\n }\n func.args.forEach((arg, i) => {\n jsToClarity(arg.type, args[i]);\n });\n}\n"
7
+ ],
8
+ "mappings": "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",
9
+ "debugId": "DAD8B8065D272C2164756E2164756E21",
10
+ "names": []
11
+ }