@secondlayer/stacks 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (178) hide show
  1. package/README.md +92 -0
  2. package/dist/shared/stacks-02actsrx.cjs +17 -0
  3. package/dist/shared/stacks-02actsrx.cjs.map +10 -0
  4. package/dist/shared/stacks-1aqm7c2h.cjs +110 -0
  5. package/dist/shared/stacks-1aqm7c2h.cjs.map +11 -0
  6. package/dist/shared/stacks-24h5k94q.cjs +74 -0
  7. package/dist/shared/stacks-24h5k94q.cjs.map +11 -0
  8. package/dist/shared/stacks-2ar4prfz.cjs +328 -0
  9. package/dist/shared/stacks-2ar4prfz.cjs.map +11 -0
  10. package/dist/shared/stacks-4py5pm0r.cjs +237 -0
  11. package/dist/shared/stacks-4py5pm0r.cjs.map +10 -0
  12. package/dist/shared/stacks-5tprhns9.cjs +54 -0
  13. package/dist/shared/stacks-5tprhns9.cjs.map +11 -0
  14. package/dist/shared/stacks-61rvzkz1.cjs +132 -0
  15. package/dist/shared/stacks-61rvzkz1.cjs.map +17 -0
  16. package/dist/shared/stacks-709tra19.js +30 -0
  17. package/dist/shared/stacks-709tra19.js.map +10 -0
  18. package/dist/shared/stacks-74k8cxgb.cjs +567 -0
  19. package/dist/shared/stacks-74k8cxgb.cjs.map +13 -0
  20. package/dist/shared/stacks-8m9byk2j.js +7 -0
  21. package/dist/shared/stacks-8m9byk2j.js.map +9 -0
  22. package/dist/shared/stacks-8yykgdww.js +125 -0
  23. package/dist/shared/stacks-8yykgdww.js.map +11 -0
  24. package/dist/shared/stacks-9g0jhab3.cjs +40 -0
  25. package/dist/shared/stacks-9g0jhab3.cjs.map +10 -0
  26. package/dist/shared/stacks-an5k8n4t.cjs +291 -0
  27. package/dist/shared/stacks-an5k8n4t.cjs.map +23 -0
  28. package/dist/shared/stacks-b008c3w8.cjs +214 -0
  29. package/dist/shared/stacks-b008c3w8.cjs.map +11 -0
  30. package/dist/shared/stacks-bnvfmt7y.cjs +31 -0
  31. package/dist/shared/stacks-bnvfmt7y.cjs.map +9 -0
  32. package/dist/shared/stacks-bycy6t9k.js +22 -0
  33. package/dist/shared/stacks-bycy6t9k.js.map +10 -0
  34. package/dist/shared/stacks-d1fmkv3p.js +258 -0
  35. package/dist/shared/stacks-d1fmkv3p.js.map +13 -0
  36. package/dist/shared/stacks-dr5en54r.cjs +119 -0
  37. package/dist/shared/stacks-dr5en54r.cjs.map +10 -0
  38. package/dist/shared/stacks-dxhntr76.js +278 -0
  39. package/dist/shared/stacks-dxhntr76.js.map +10 -0
  40. package/dist/shared/stacks-evnzth1q.cjs +35 -0
  41. package/dist/shared/stacks-evnzth1q.cjs.map +10 -0
  42. package/dist/shared/stacks-f3tk2k5s.js +27 -0
  43. package/dist/shared/stacks-f3tk2k5s.js.map +9 -0
  44. package/dist/shared/stacks-f7wdrzs3.js +285 -0
  45. package/dist/shared/stacks-f7wdrzs3.js.map +11 -0
  46. package/dist/shared/stacks-fcaefc5b.cjs +16 -0
  47. package/dist/shared/stacks-fcaefc5b.cjs.map +10 -0
  48. package/dist/shared/stacks-g9mcjcqg.cjs +3 -0
  49. package/dist/shared/stacks-g9mcjcqg.cjs.map +9 -0
  50. package/dist/shared/stacks-gck1sq7h.cjs +28 -0
  51. package/dist/shared/stacks-gck1sq7h.cjs.map +10 -0
  52. package/dist/shared/stacks-gjvbq6w7.js +46 -0
  53. package/dist/shared/stacks-gjvbq6w7.js.map +10 -0
  54. package/dist/shared/stacks-j2cy7qtt.js +237 -0
  55. package/dist/shared/stacks-j2cy7qtt.js.map +11 -0
  56. package/dist/shared/stacks-k08tgzyp.cjs +232 -0
  57. package/dist/shared/stacks-k08tgzyp.cjs.map +13 -0
  58. package/dist/shared/stacks-k2p5tv6x.js +37 -0
  59. package/dist/shared/stacks-k2p5tv6x.js.map +10 -0
  60. package/dist/shared/stacks-k58k970n.js +234 -0
  61. package/dist/shared/stacks-k58k970n.js.map +10 -0
  62. package/dist/shared/stacks-n2g56wgg.js +338 -0
  63. package/dist/shared/stacks-n2g56wgg.js.map +23 -0
  64. package/dist/shared/stacks-nqytwfcc.js +243 -0
  65. package/dist/shared/stacks-nqytwfcc.js.map +11 -0
  66. package/dist/shared/stacks-qcae5852.js +19 -0
  67. package/dist/shared/stacks-qcae5852.js.map +10 -0
  68. package/dist/shared/stacks-qt8ehebn.js +76 -0
  69. package/dist/shared/stacks-qt8ehebn.js.map +11 -0
  70. package/dist/shared/stacks-qvg7c24g.cjs +232 -0
  71. package/dist/shared/stacks-qvg7c24g.cjs.map +10 -0
  72. package/dist/shared/stacks-r1t6g3c3.cjs +241 -0
  73. package/dist/shared/stacks-r1t6g3c3.cjs.map +11 -0
  74. package/dist/shared/stacks-tjxmrssa.js +282 -0
  75. package/dist/shared/stacks-tjxmrssa.js.map +11 -0
  76. package/dist/shared/stacks-v9jqcpd4.js +18 -0
  77. package/dist/shared/stacks-v9jqcpd4.js.map +10 -0
  78. package/dist/shared/stacks-vdfag81a.cjs +121 -0
  79. package/dist/shared/stacks-vdfag81a.cjs.map +10 -0
  80. package/dist/shared/stacks-vdfs3e5v.js +134 -0
  81. package/dist/shared/stacks-vdfs3e5v.js.map +10 -0
  82. package/dist/shared/stacks-y3dh7hv1.js +60 -0
  83. package/dist/shared/stacks-y3dh7hv1.js.map +11 -0
  84. package/dist/shared/stacks-ya3x01yd.cjs +16 -0
  85. package/dist/shared/stacks-ya3x01yd.cjs.map +10 -0
  86. package/dist/shared/stacks-yfgsm6ap.js +599 -0
  87. package/dist/shared/stacks-yfgsm6ap.js.map +13 -0
  88. package/dist/shared/stacks-yfveb68e.js +121 -0
  89. package/dist/shared/stacks-yfveb68e.js.map +10 -0
  90. package/dist/shared/stacks-zm0b3tgy.js +160 -0
  91. package/dist/shared/stacks-zm0b3tgy.js.map +17 -0
  92. package/dist/shared/stacks-zyv9qqme.cjs +249 -0
  93. package/dist/shared/stacks-zyv9qqme.cjs.map +11 -0
  94. package/dist/src/accounts/index.cjs +90 -0
  95. package/dist/src/accounts/index.cjs.map +12 -0
  96. package/dist/src/accounts/index.d.cts +47 -0
  97. package/dist/src/accounts/index.d.ts +47 -0
  98. package/dist/src/accounts/index.js +104 -0
  99. package/dist/src/accounts/index.js.map +12 -0
  100. package/dist/src/actions/index.cjs +36 -0
  101. package/dist/src/actions/index.cjs.map +9 -0
  102. package/dist/src/actions/index.d.cts +886 -0
  103. package/dist/src/actions/index.d.ts +886 -0
  104. package/dist/src/actions/index.js +81 -0
  105. package/dist/src/actions/index.js.map +9 -0
  106. package/dist/src/bns/index.cjs +590 -0
  107. package/dist/src/bns/index.cjs.map +15 -0
  108. package/dist/src/bns/index.d.cts +241 -0
  109. package/dist/src/bns/index.d.ts +241 -0
  110. package/dist/src/bns/index.js +611 -0
  111. package/dist/src/bns/index.js.map +15 -0
  112. package/dist/src/chains/index.cjs +13 -0
  113. package/dist/src/chains/index.cjs.map +9 -0
  114. package/dist/src/chains/index.d.cts +53 -0
  115. package/dist/src/chains/index.d.ts +53 -0
  116. package/dist/src/chains/index.js +18 -0
  117. package/dist/src/chains/index.js.map +9 -0
  118. package/dist/src/clarity/index.cjs +3 -0
  119. package/dist/src/clarity/index.cjs.map +9 -0
  120. package/dist/src/clarity/index.d.cts +821 -0
  121. package/dist/src/clarity/index.d.ts +821 -0
  122. package/dist/src/clarity/index.js +145 -0
  123. package/dist/src/clarity/index.js.map +9 -0
  124. package/dist/src/connect/index.cjs +480 -0
  125. package/dist/src/connect/index.cjs.map +19 -0
  126. package/dist/src/connect/index.d.cts +110 -0
  127. package/dist/src/connect/index.d.ts +110 -0
  128. package/dist/src/connect/index.js +448 -0
  129. package/dist/src/connect/index.js.map +19 -0
  130. package/dist/src/connect/walletconnect/index.cjs +1322 -0
  131. package/dist/src/connect/walletconnect/index.cjs.map +18 -0
  132. package/dist/src/connect/walletconnect/index.d.cts +132 -0
  133. package/dist/src/connect/walletconnect/index.d.ts +132 -0
  134. package/dist/src/connect/walletconnect/index.js +1290 -0
  135. package/dist/src/connect/walletconnect/index.js.map +18 -0
  136. package/dist/src/index.cjs +557 -0
  137. package/dist/src/index.cjs.map +21 -0
  138. package/dist/src/index.d.cts +847 -0
  139. package/dist/src/index.d.ts +847 -0
  140. package/dist/src/index.js +629 -0
  141. package/dist/src/index.js.map +21 -0
  142. package/dist/src/postconditions/index.cjs +3 -0
  143. package/dist/src/postconditions/index.cjs.map +9 -0
  144. package/dist/src/postconditions/index.d.cts +91 -0
  145. package/dist/src/postconditions/index.d.ts +91 -0
  146. package/dist/src/postconditions/index.js +12 -0
  147. package/dist/src/postconditions/index.js.map +9 -0
  148. package/dist/src/pox/index.cjs +860 -0
  149. package/dist/src/pox/index.cjs.map +15 -0
  150. package/dist/src/pox/index.d.cts +244 -0
  151. package/dist/src/pox/index.d.ts +244 -0
  152. package/dist/src/pox/index.js +877 -0
  153. package/dist/src/pox/index.js.map +15 -0
  154. package/dist/src/stackingdao/index.cjs +300 -0
  155. package/dist/src/stackingdao/index.cjs.map +13 -0
  156. package/dist/src/stackingdao/index.d.cts +179 -0
  157. package/dist/src/stackingdao/index.d.ts +179 -0
  158. package/dist/src/stackingdao/index.js +318 -0
  159. package/dist/src/stackingdao/index.js.map +13 -0
  160. package/dist/src/subscriptions/index.cjs +14 -0
  161. package/dist/src/subscriptions/index.cjs.map +9 -0
  162. package/dist/src/subscriptions/index.d.cts +250 -0
  163. package/dist/src/subscriptions/index.d.ts +250 -0
  164. package/dist/src/subscriptions/index.js +21 -0
  165. package/dist/src/subscriptions/index.js.map +9 -0
  166. package/dist/src/transactions/index.cjs +50 -0
  167. package/dist/src/transactions/index.cjs.map +9 -0
  168. package/dist/src/transactions/index.d.cts +412 -0
  169. package/dist/src/transactions/index.d.ts +412 -0
  170. package/dist/src/transactions/index.js +101 -0
  171. package/dist/src/transactions/index.js.map +9 -0
  172. package/dist/src/utils/index.cjs +168 -0
  173. package/dist/src/utils/index.cjs.map +11 -0
  174. package/dist/src/utils/index.d.cts +140 -0
  175. package/dist/src/utils/index.d.ts +140 -0
  176. package/dist/src/utils/index.js +222 -0
  177. package/dist/src/utils/index.js.map +11 -0
  178. package/package.json +105 -0
@@ -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": "72D7A0CDC9AC36C164756E2164756E21",
10
+ "names": []
11
+ }
@@ -0,0 +1,237 @@
1
+ // src/transactions/wire/deserialize.ts
2
+ class Reader {
3
+ data;
4
+ offset = 0;
5
+ constructor(data) {
6
+ this.data = data;
7
+ }
8
+ readUInt8() {
9
+ return this.data[this.offset++];
10
+ }
11
+ readUInt16BE() {
12
+ const val = (this.data[this.offset] << 8 | this.data[this.offset + 1]) >>> 0;
13
+ this.offset += 2;
14
+ return val;
15
+ }
16
+ readUInt32BE() {
17
+ const val = (this.data[this.offset] << 24 | this.data[this.offset + 1] << 16 | this.data[this.offset + 2] << 8 | this.data[this.offset + 3]) >>> 0;
18
+ this.offset += 4;
19
+ return val;
20
+ }
21
+ readBytes(length) {
22
+ const slice = this.data.slice(this.offset, this.offset + length);
23
+ this.offset += length;
24
+ return slice;
25
+ }
26
+ readBigUInt64BE() {
27
+ return BigInt(`0x${bytesToHex(this.readBytes(8))}`);
28
+ }
29
+ }
30
+ function readAddress(r) {
31
+ const version = r.readUInt8();
32
+ const hash160 = bytesToHex(r.readBytes(20));
33
+ return c32address(version, hash160);
34
+ }
35
+ function readLPString(r, prefixBytes = 1) {
36
+ let length = 0;
37
+ for (let i = 0;i < prefixBytes; i++) {
38
+ length = length << 8 | r.readUInt8();
39
+ }
40
+ return bytesToUtf8(r.readBytes(length));
41
+ }
42
+ function readCV(r) {
43
+ const typeByte = r.readUInt8();
44
+ const type = clarityTypeFromByte(typeByte);
45
+ switch (type) {
46
+ case "int":
47
+ return intCV(bytesToTwosBigInt(r.readBytes(16)));
48
+ case "uint":
49
+ return uintCV(r.readBytes(16));
50
+ case "true":
51
+ return trueCV();
52
+ case "false":
53
+ return falseCV();
54
+ case "buffer": {
55
+ const len = r.readUInt32BE();
56
+ return bufferCV(r.readBytes(len));
57
+ }
58
+ case "none":
59
+ return noneCV();
60
+ case "some":
61
+ return someCV(readCV(r));
62
+ case "ok":
63
+ return responseOkCV(readCV(r));
64
+ case "err":
65
+ return responseErrorCV(readCV(r));
66
+ case "address":
67
+ return standardPrincipalCV(readAddress(r));
68
+ case "contract": {
69
+ const addr = readAddress(r);
70
+ const name = readLPString(r);
71
+ return contractPrincipalCV(addr, name);
72
+ }
73
+ case "list": {
74
+ const len = r.readUInt32BE();
75
+ const items = [];
76
+ for (let i = 0;i < len; i++)
77
+ items.push(readCV(r));
78
+ return listCV(items);
79
+ }
80
+ case "tuple": {
81
+ const len = r.readUInt32BE();
82
+ const data = {};
83
+ for (let i = 0;i < len; i++) {
84
+ const key = readLPString(r);
85
+ data[key] = readCV(r);
86
+ }
87
+ return tupleCV(data);
88
+ }
89
+ case "ascii": {
90
+ const len = r.readUInt32BE();
91
+ return stringAsciiCV(bytesToAscii(r.readBytes(len)));
92
+ }
93
+ case "utf8": {
94
+ const len = r.readUInt32BE();
95
+ return stringUtf8CV(bytesToUtf8(r.readBytes(len)));
96
+ }
97
+ default:
98
+ throw new Error(`Unknown clarity type: ${type}`);
99
+ }
100
+ }
101
+ function readSpendingCondition(r) {
102
+ const hashMode = r.readUInt8();
103
+ const signer = bytesToHex(r.readBytes(20));
104
+ const nonce = r.readBigUInt64BE();
105
+ const fee = r.readBigUInt64BE();
106
+ if (hashMode === AddressHashMode.P2PKH || hashMode === AddressHashMode.P2WPKH) {
107
+ const keyEncoding = r.readUInt8();
108
+ const signature = bytesToHex(r.readBytes(RECOVERABLE_ECDSA_SIG_LENGTH_BYTES));
109
+ return { hashMode, signer, nonce, fee, keyEncoding, signature };
110
+ }
111
+ const fieldCount = r.readUInt32BE();
112
+ const fields = [];
113
+ for (let i = 0;i < fieldCount; i++) {
114
+ const fieldType = r.readUInt8();
115
+ if (fieldType <= 1) {
116
+ const keyLen = fieldType === 0 ? 33 : 65;
117
+ fields.push({
118
+ type: "publicKey",
119
+ pubKeyEncoding: fieldType,
120
+ data: bytesToHex(r.readBytes(keyLen))
121
+ });
122
+ } else {
123
+ fields.push({
124
+ type: "signature",
125
+ pubKeyEncoding: fieldType === 2 ? 0 : 1,
126
+ data: bytesToHex(r.readBytes(RECOVERABLE_ECDSA_SIG_LENGTH_BYTES))
127
+ });
128
+ }
129
+ }
130
+ const signaturesRequired = r.readUInt16BE();
131
+ return { hashMode, signer, nonce, fee, fields, signaturesRequired };
132
+ }
133
+ function readAuthorization(r) {
134
+ const authType = r.readUInt8();
135
+ const spendingCondition = readSpendingCondition(r);
136
+ if (authType === AuthType.Standard) {
137
+ return { authType: AuthType.Standard, spendingCondition };
138
+ }
139
+ const sponsorSpendingCondition = readSpendingCondition(r);
140
+ return {
141
+ authType: AuthType.Sponsored,
142
+ spendingCondition,
143
+ sponsorSpendingCondition
144
+ };
145
+ }
146
+ function readAssetInfo(r) {
147
+ return {
148
+ address: readAddress(r),
149
+ contractName: readLPString(r),
150
+ assetName: readLPString(r)
151
+ };
152
+ }
153
+ function readPostConditionPrincipal(r) {
154
+ const type = r.readUInt8();
155
+ switch (type) {
156
+ case PostConditionPrincipalId.Origin:
157
+ return { type: "origin" };
158
+ case PostConditionPrincipalId.Standard:
159
+ return { type: "standard", address: readAddress(r) };
160
+ case PostConditionPrincipalId.Contract:
161
+ return { type: "contract", address: readAddress(r), contractName: readLPString(r) };
162
+ default:
163
+ throw new Error(`Unknown post condition principal type: ${type}`);
164
+ }
165
+ }
166
+ function readPostConditions(r) {
167
+ const count = r.readUInt32BE();
168
+ const pcs = [];
169
+ for (let i = 0;i < count; i++) {
170
+ const principal = readPostConditionPrincipal(r);
171
+ const assetType = r.readUInt8();
172
+ switch (assetType) {
173
+ case AssetType.STX:
174
+ pcs.push({ type: "stx", principal, conditionCode: r.readUInt8(), amount: r.readBigUInt64BE() });
175
+ break;
176
+ case AssetType.Fungible:
177
+ pcs.push({ type: "ft", principal, asset: readAssetInfo(r), conditionCode: r.readUInt8(), amount: r.readBigUInt64BE() });
178
+ break;
179
+ case AssetType.NonFungible:
180
+ pcs.push({ type: "nft", principal, asset: readAssetInfo(r), assetId: readCV(r), conditionCode: r.readUInt8() });
181
+ break;
182
+ }
183
+ }
184
+ return pcs;
185
+ }
186
+ function readPayload(r) {
187
+ const payloadType = r.readUInt8();
188
+ switch (payloadType) {
189
+ case PayloadType.TokenTransfer: {
190
+ const recipient = readCV(r);
191
+ const amount = r.readBigUInt64BE();
192
+ const memoContentLen = r.readUInt8();
193
+ const memoBytes = r.readBytes(MEMO_MAX_LENGTH_BYTES);
194
+ const memo = bytesToAscii(memoBytes.slice(0, memoContentLen)).replace(/\0+$/, "");
195
+ return { payloadType: PayloadType.TokenTransfer, recipient, amount, memo };
196
+ }
197
+ case PayloadType.ContractCall: {
198
+ const contractAddress = readAddress(r);
199
+ const contractName = readLPString(r);
200
+ const functionName = readLPString(r);
201
+ const numArgs = r.readUInt32BE();
202
+ const functionArgs = [];
203
+ for (let i = 0;i < numArgs; i++)
204
+ functionArgs.push(readCV(r));
205
+ return { payloadType: PayloadType.ContractCall, contractAddress, contractName, functionName, functionArgs };
206
+ }
207
+ case PayloadType.SmartContract: {
208
+ const contractName = readLPString(r);
209
+ const codeBody = readLPString(r, 4);
210
+ return { payloadType: PayloadType.SmartContract, contractName, codeBody };
211
+ }
212
+ case PayloadType.VersionedSmartContract: {
213
+ const clarityVersion = r.readUInt8();
214
+ const contractName = readLPString(r);
215
+ const codeBody = readLPString(r, 4);
216
+ return { payloadType: PayloadType.VersionedSmartContract, clarityVersion, contractName, codeBody };
217
+ }
218
+ default:
219
+ throw new Error(`Unknown payload type: ${payloadType}`);
220
+ }
221
+ }
222
+ function deserializeTransaction(input) {
223
+ const bytes = typeof input === "string" ? hexToBytes(without0x(input)) : input;
224
+ const r = new Reader(bytes);
225
+ return {
226
+ version: r.readUInt8(),
227
+ chainId: r.readUInt32BE(),
228
+ auth: readAuthorization(r),
229
+ anchorMode: r.readUInt8(),
230
+ postConditionMode: r.readUInt8(),
231
+ postConditions: readPostConditions(r),
232
+ payload: readPayload(r)
233
+ };
234
+ }
235
+
236
+ //# debugId=4529BFD45E5E5E8B64756E2164756E21
237
+ //# sourceMappingURL=stacks-4py5pm0r.cjs.map
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/transactions/wire/deserialize.ts"],
4
+ "sourcesContent": [
5
+ "import {\n bytesToHex,\n hexToBytes,\n bytesToAscii,\n bytesToUtf8,\n without0x,\n} from \"../../utils/encoding.ts\";\nimport { c32address } from \"../../utils/c32.ts\";\nimport {\n AuthType,\n PayloadType,\n AddressHashMode,\n PostConditionPrincipalId,\n AssetType,\n RECOVERABLE_ECDSA_SIG_LENGTH_BYTES,\n MEMO_MAX_LENGTH_BYTES,\n type StacksTransaction,\n type Authorization,\n type SpendingCondition,\n type TransactionPayload,\n type PostConditionWire,\n type PostConditionPrincipalWire,\n type AssetInfoWire,\n type TransactionAuthField,\n type AnchorMode,\n type PostConditionModeWire,\n type ClarityVersion,\n} from \"../types.ts\";\nimport type { ClarityValue } from \"../../clarity/types.ts\";\nimport { clarityTypeFromByte } from \"../../clarity/types.ts\";\nimport {\n intCV,\n uintCV,\n trueCV,\n falseCV,\n bufferCV,\n noneCV,\n someCV,\n responseOkCV,\n responseErrorCV,\n standardPrincipalCV,\n contractPrincipalCV,\n listCV,\n tupleCV,\n stringAsciiCV,\n stringUtf8CV,\n} from \"../../clarity/values.ts\";\nimport { bytesToTwosBigInt } from \"../../utils/encoding.ts\";\n\nclass Reader {\n private data: Uint8Array;\n public offset = 0;\n\n constructor(data: Uint8Array) {\n this.data = data;\n }\n\n readUInt8(): number {\n return this.data[this.offset++]!;\n }\n\n readUInt16BE(): number {\n const val = ((this.data[this.offset]! << 8) | this.data[this.offset + 1]!) >>> 0;\n this.offset += 2;\n return val;\n }\n\n readUInt32BE(): number {\n const val =\n ((this.data[this.offset]! << 24) |\n (this.data[this.offset + 1]! << 16) |\n (this.data[this.offset + 2]! << 8) |\n this.data[this.offset + 3]!) >>>\n 0;\n this.offset += 4;\n return val;\n }\n\n readBytes(length: number): Uint8Array {\n const slice = this.data.slice(this.offset, this.offset + length);\n this.offset += length;\n return slice;\n }\n\n readBigUInt64BE(): bigint {\n return BigInt(`0x${bytesToHex(this.readBytes(8))}`);\n }\n}\n\nfunction readAddress(r: Reader): string {\n const version = r.readUInt8();\n const hash160 = bytesToHex(r.readBytes(20));\n return c32address(version, hash160);\n}\n\nfunction readLPString(r: Reader, prefixBytes = 1): string {\n let length = 0;\n for (let i = 0; i < prefixBytes; i++) {\n length = (length << 8) | r.readUInt8();\n }\n return bytesToUtf8(r.readBytes(length));\n}\n\nfunction readCV(r: Reader): ClarityValue {\n const typeByte = r.readUInt8();\n const type = clarityTypeFromByte(typeByte);\n\n switch (type) {\n case \"int\":\n return intCV(bytesToTwosBigInt(r.readBytes(16)));\n case \"uint\":\n return uintCV(r.readBytes(16));\n case \"true\":\n return trueCV();\n case \"false\":\n return falseCV();\n case \"buffer\": {\n const len = r.readUInt32BE();\n return bufferCV(r.readBytes(len));\n }\n case \"none\":\n return noneCV();\n case \"some\":\n return someCV(readCV(r));\n case \"ok\":\n return responseOkCV(readCV(r));\n case \"err\":\n return responseErrorCV(readCV(r));\n case \"address\":\n return standardPrincipalCV(readAddress(r));\n case \"contract\": {\n const addr = readAddress(r);\n const name = readLPString(r);\n return contractPrincipalCV(addr, name);\n }\n case \"list\": {\n const len = r.readUInt32BE();\n const items: ClarityValue[] = [];\n for (let i = 0; i < len; i++) items.push(readCV(r));\n return listCV(items);\n }\n case \"tuple\": {\n const len = r.readUInt32BE();\n const data: Record<string, ClarityValue> = {};\n for (let i = 0; i < len; i++) {\n const key = readLPString(r);\n data[key] = readCV(r);\n }\n return tupleCV(data);\n }\n case \"ascii\": {\n const len = r.readUInt32BE();\n return stringAsciiCV(bytesToAscii(r.readBytes(len)));\n }\n case \"utf8\": {\n const len = r.readUInt32BE();\n return stringUtf8CV(bytesToUtf8(r.readBytes(len)));\n }\n default:\n throw new Error(`Unknown clarity type: ${type}`);\n }\n}\n\nfunction readSpendingCondition(r: Reader): SpendingCondition {\n const hashMode = r.readUInt8();\n const signer = bytesToHex(r.readBytes(20));\n const nonce = r.readBigUInt64BE();\n const fee = r.readBigUInt64BE();\n\n if (hashMode === AddressHashMode.P2PKH || hashMode === AddressHashMode.P2WPKH) {\n const keyEncoding = r.readUInt8();\n const signature = bytesToHex(r.readBytes(RECOVERABLE_ECDSA_SIG_LENGTH_BYTES));\n return { hashMode, signer, nonce, fee, keyEncoding, signature } as SpendingCondition;\n }\n\n const fieldCount = r.readUInt32BE();\n const fields: TransactionAuthField[] = [];\n for (let i = 0; i < fieldCount; i++) {\n const fieldType = r.readUInt8();\n if (fieldType <= 0x01) {\n const keyLen = fieldType === 0x00 ? 33 : 65;\n fields.push({\n type: \"publicKey\",\n pubKeyEncoding: fieldType as 0x00 | 0x01,\n data: bytesToHex(r.readBytes(keyLen)),\n });\n } else {\n fields.push({\n type: \"signature\",\n pubKeyEncoding: (fieldType === 0x02 ? 0x00 : 0x01) as 0x00 | 0x01,\n data: bytesToHex(r.readBytes(RECOVERABLE_ECDSA_SIG_LENGTH_BYTES)),\n });\n }\n }\n const signaturesRequired = r.readUInt16BE();\n\n return { hashMode, signer, nonce, fee, fields, signaturesRequired } as SpendingCondition;\n}\n\nfunction readAuthorization(r: Reader): Authorization {\n const authType = r.readUInt8();\n const spendingCondition = readSpendingCondition(r);\n\n if (authType === AuthType.Standard) {\n return { authType: AuthType.Standard, spendingCondition };\n }\n\n const sponsorSpendingCondition = readSpendingCondition(r);\n return {\n authType: AuthType.Sponsored,\n spendingCondition,\n sponsorSpendingCondition,\n };\n}\n\nfunction readAssetInfo(r: Reader): AssetInfoWire {\n return {\n address: readAddress(r),\n contractName: readLPString(r),\n assetName: readLPString(r),\n };\n}\n\nfunction readPostConditionPrincipal(r: Reader): PostConditionPrincipalWire {\n const type = r.readUInt8();\n switch (type) {\n case PostConditionPrincipalId.Origin:\n return { type: \"origin\" };\n case PostConditionPrincipalId.Standard:\n return { type: \"standard\", address: readAddress(r) };\n case PostConditionPrincipalId.Contract:\n return { type: \"contract\", address: readAddress(r), contractName: readLPString(r) };\n default:\n throw new Error(`Unknown post condition principal type: ${type}`);\n }\n}\n\nfunction readPostConditions(r: Reader): PostConditionWire[] {\n const count = r.readUInt32BE();\n const pcs: PostConditionWire[] = [];\n for (let i = 0; i < count; i++) {\n const principal = readPostConditionPrincipal(r);\n const assetType = r.readUInt8();\n switch (assetType) {\n case AssetType.STX:\n pcs.push({ type: \"stx\", principal, conditionCode: r.readUInt8(), amount: r.readBigUInt64BE() });\n break;\n case AssetType.Fungible:\n pcs.push({ type: \"ft\", principal, asset: readAssetInfo(r), conditionCode: r.readUInt8(), amount: r.readBigUInt64BE() });\n break;\n case AssetType.NonFungible:\n pcs.push({ type: \"nft\", principal, asset: readAssetInfo(r), assetId: readCV(r), conditionCode: r.readUInt8() });\n break;\n }\n }\n return pcs;\n}\n\nfunction readPayload(r: Reader): TransactionPayload {\n const payloadType = r.readUInt8();\n\n switch (payloadType) {\n case PayloadType.TokenTransfer: {\n const recipient = readCV(r);\n const amount = r.readBigUInt64BE();\n const memoContentLen = r.readUInt8();\n const memoBytes = r.readBytes(MEMO_MAX_LENGTH_BYTES);\n const memo = bytesToAscii(memoBytes.slice(0, memoContentLen)).replace(/\\0+$/, \"\");\n return { payloadType: PayloadType.TokenTransfer, recipient, amount, memo };\n }\n case PayloadType.ContractCall: {\n const contractAddress = readAddress(r);\n const contractName = readLPString(r);\n const functionName = readLPString(r);\n const numArgs = r.readUInt32BE();\n const functionArgs: ClarityValue[] = [];\n for (let i = 0; i < numArgs; i++) functionArgs.push(readCV(r));\n return { payloadType: PayloadType.ContractCall, contractAddress, contractName, functionName, functionArgs };\n }\n case PayloadType.SmartContract: {\n const contractName = readLPString(r);\n const codeBody = readLPString(r, 4);\n return { payloadType: PayloadType.SmartContract, contractName, codeBody };\n }\n case PayloadType.VersionedSmartContract: {\n const clarityVersion = r.readUInt8() as ClarityVersion;\n const contractName = readLPString(r);\n const codeBody = readLPString(r, 4);\n return { payloadType: PayloadType.VersionedSmartContract, clarityVersion, contractName, codeBody };\n }\n default:\n throw new Error(`Unknown payload type: ${payloadType}`);\n }\n}\n\nexport function deserializeTransaction(input: string | Uint8Array): StacksTransaction {\n const bytes = typeof input === \"string\" ? hexToBytes(without0x(input)) : input;\n const r = new Reader(bytes);\n\n return {\n version: r.readUInt8(),\n chainId: r.readUInt32BE(),\n auth: readAuthorization(r),\n anchorMode: r.readUInt8() as AnchorMode,\n postConditionMode: r.readUInt8() as PostConditionModeWire,\n postConditions: readPostConditions(r),\n payload: readPayload(r),\n };\n}\n"
6
+ ],
7
+ "mappings": "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",
8
+ "debugId": "4529BFD45E5E5E8B64756E2164756E21",
9
+ "names": []
10
+ }
@@ -0,0 +1,54 @@
1
+ // src/errors/websocket.ts
2
+ class WebSocketError extends BaseError {
3
+ name = "WebSocketError";
4
+ constructor(message, options) {
5
+ super(message, options);
6
+ }
7
+ }
8
+
9
+ // src/subscriptions/actions.ts
10
+ function getWsTransport(client) {
11
+ if (client.transport.type !== "webSocket") {
12
+ throw new WebSocketError("Watch actions require a webSocket transport. Use `webSocket()` when creating your client.");
13
+ }
14
+ return client.transport;
15
+ }
16
+ async function watchBlocks(client, params) {
17
+ const transport = getWsTransport(client);
18
+ return transport.subscribe({ event: "block" }, params.onBlock);
19
+ }
20
+ async function watchMempool(client, params) {
21
+ const transport = getWsTransport(client);
22
+ return transport.subscribe({ event: "mempool" }, params.onTransaction);
23
+ }
24
+ async function watchTransaction(client, params) {
25
+ const transport = getWsTransport(client);
26
+ return transport.subscribe({ event: "tx_update", tx_id: params.txId }, params.onUpdate);
27
+ }
28
+ async function watchAddress(client, params) {
29
+ const transport = getWsTransport(client);
30
+ return transport.subscribe({ event: "address_tx_update", address: params.address }, params.onTransaction);
31
+ }
32
+ async function watchAddressBalance(client, params) {
33
+ const transport = getWsTransport(client);
34
+ return transport.subscribe({ event: "address_balance_update", address: params.address }, params.onBalance);
35
+ }
36
+ async function watchNftEvent(client, params) {
37
+ const transport = getWsTransport(client);
38
+ let event;
39
+ if (params.assetIdentifier && params.value) {
40
+ event = "nft_event";
41
+ } else if (params.assetIdentifier) {
42
+ event = "nft_collection_event";
43
+ } else {
44
+ event = "nft_event";
45
+ }
46
+ return transport.subscribe({
47
+ event,
48
+ asset_identifier: params.assetIdentifier,
49
+ value: params.value
50
+ }, params.onEvent);
51
+ }
52
+
53
+ //# debugId=525245790E39F0C764756E2164756E21
54
+ //# sourceMappingURL=stacks-5tprhns9.cjs.map
@@ -0,0 +1,11 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/errors/websocket.ts", "../src/subscriptions/actions.ts"],
4
+ "sourcesContent": [
5
+ "import { BaseError } from \"./base.ts\";\n\nexport class WebSocketError extends BaseError {\n override name = \"WebSocketError\";\n\n constructor(message: string, options?: { cause?: Error; details?: string }) {\n super(message, options);\n }\n}\n",
6
+ "import type { Client } from \"../clients/types.ts\";\nimport type { WebSocketTransport } from \"../transports/webSocket.ts\";\nimport type {\n Subscription,\n BlockNotification,\n MempoolNotification,\n TxUpdateNotification,\n AddressTxNotification,\n AddressBalanceNotification,\n NftEventNotification,\n} from \"./types.ts\";\nimport { WebSocketError } from \"../errors/websocket.ts\";\n\nfunction getWsTransport(client: Client): WebSocketTransport {\n if (client.transport.type !== \"webSocket\") {\n throw new WebSocketError(\n \"Watch actions require a webSocket transport. Use `webSocket()` when creating your client.\"\n );\n }\n return client.transport as WebSocketTransport;\n}\n\nexport type WatchBlocksParams = {\n onBlock: (block: BlockNotification) => void;\n};\n\nexport async function watchBlocks(\n client: Client,\n params: WatchBlocksParams\n): Promise<Subscription> {\n const transport = getWsTransport(client);\n return transport.subscribe({ event: \"block\" }, params.onBlock);\n}\n\nexport type WatchMempoolParams = {\n onTransaction: (tx: MempoolNotification) => void;\n};\n\nexport async function watchMempool(\n client: Client,\n params: WatchMempoolParams\n): Promise<Subscription> {\n const transport = getWsTransport(client);\n return transport.subscribe({ event: \"mempool\" }, params.onTransaction);\n}\n\nexport type WatchTransactionParams = {\n txId: string;\n onUpdate: (update: TxUpdateNotification) => void;\n};\n\nexport async function watchTransaction(\n client: Client,\n params: WatchTransactionParams\n): Promise<Subscription> {\n const transport = getWsTransport(client);\n return transport.subscribe(\n { event: \"tx_update\", tx_id: params.txId },\n params.onUpdate\n );\n}\n\nexport type WatchAddressParams = {\n address: string;\n onTransaction: (tx: AddressTxNotification) => void;\n};\n\nexport async function watchAddress(\n client: Client,\n params: WatchAddressParams\n): Promise<Subscription> {\n const transport = getWsTransport(client);\n return transport.subscribe(\n { event: \"address_tx_update\", address: params.address },\n params.onTransaction\n );\n}\n\nexport type WatchAddressBalanceParams = {\n address: string;\n onBalance: (balance: AddressBalanceNotification) => void;\n};\n\nexport async function watchAddressBalance(\n client: Client,\n params: WatchAddressBalanceParams\n): Promise<Subscription> {\n const transport = getWsTransport(client);\n return transport.subscribe(\n { event: \"address_balance_update\", address: params.address },\n params.onBalance\n );\n}\n\nexport type WatchNftEventParams = {\n onEvent: (event: NftEventNotification) => void;\n assetIdentifier?: string;\n value?: string;\n};\n\nexport async function watchNftEvent(\n client: Client,\n params: WatchNftEventParams\n): Promise<Subscription> {\n const transport = getWsTransport(client);\n\n let event: \"nft_event\" | \"nft_asset_event\" | \"nft_collection_event\";\n if (params.assetIdentifier && params.value) {\n event = \"nft_event\";\n } else if (params.assetIdentifier) {\n event = \"nft_collection_event\";\n } else {\n event = \"nft_event\";\n }\n\n return transport.subscribe(\n {\n event,\n asset_identifier: params.assetIdentifier,\n value: params.value,\n },\n params.onEvent\n );\n}\n"
7
+ ],
8
+ "mappings": ";AAEO,MAAM,uBAAuB,UAAU;AAAA,EACnC,OAAO;AAAA,EAEhB,WAAW,CAAC,SAAiB,SAA+C;AAAA,IAC1E,MAAM,SAAS,OAAO;AAAA;AAE1B;;;ACKA,SAAS,cAAc,CAAC,QAAoC;AAAA,EAC1D,IAAI,OAAO,UAAU,SAAS,aAAa;AAAA,IACzC,MAAM,IAAI,eACR,2FACF;AAAA,EACF;AAAA,EACA,OAAO,OAAO;AAAA;AAOhB,eAAsB,WAAW,CAC/B,QACA,QACuB;AAAA,EACvB,MAAM,YAAY,eAAe,MAAM;AAAA,EACvC,OAAO,UAAU,UAAU,EAAE,OAAO,QAAQ,GAAG,OAAO,OAAO;AAAA;AAO/D,eAAsB,YAAY,CAChC,QACA,QACuB;AAAA,EACvB,MAAM,YAAY,eAAe,MAAM;AAAA,EACvC,OAAO,UAAU,UAAU,EAAE,OAAO,UAAU,GAAG,OAAO,aAAa;AAAA;AAQvE,eAAsB,gBAAgB,CACpC,QACA,QACuB;AAAA,EACvB,MAAM,YAAY,eAAe,MAAM;AAAA,EACvC,OAAO,UAAU,UACf,EAAE,OAAO,aAAa,OAAO,OAAO,KAAK,GACzC,OAAO,QACT;AAAA;AAQF,eAAsB,YAAY,CAChC,QACA,QACuB;AAAA,EACvB,MAAM,YAAY,eAAe,MAAM;AAAA,EACvC,OAAO,UAAU,UACf,EAAE,OAAO,qBAAqB,SAAS,OAAO,QAAQ,GACtD,OAAO,aACT;AAAA;AAQF,eAAsB,mBAAmB,CACvC,QACA,QACuB;AAAA,EACvB,MAAM,YAAY,eAAe,MAAM;AAAA,EACvC,OAAO,UAAU,UACf,EAAE,OAAO,0BAA0B,SAAS,OAAO,QAAQ,GAC3D,OAAO,SACT;AAAA;AASF,eAAsB,aAAa,CACjC,QACA,QACuB;AAAA,EACvB,MAAM,YAAY,eAAe,MAAM;AAAA,EAEvC,IAAI;AAAA,EACJ,IAAI,OAAO,mBAAmB,OAAO,OAAO;AAAA,IAC1C,QAAQ;AAAA,EACV,EAAO,SAAI,OAAO,iBAAiB;AAAA,IACjC,QAAQ;AAAA,EACV,EAAO;AAAA,IACL,QAAQ;AAAA;AAAA,EAGV,OAAO,UAAU,UACf;AAAA,IACE;AAAA,IACA,kBAAkB,OAAO;AAAA,IACzB,OAAO,OAAO;AAAA,EAChB,GACA,OAAO,OACT;AAAA;",
9
+ "debugId": "525245790E39F0C764756E2164756E21",
10
+ "names": []
11
+ }
@@ -0,0 +1,132 @@
1
+ // src/actions/public/getNonce.ts
2
+ async function getNonce(client, params) {
3
+ const data = await client.request(`/v2/accounts/${params.address}`, {
4
+ method: "GET"
5
+ });
6
+ return BigInt(data.nonce);
7
+ }
8
+
9
+ // src/actions/public/readContract.ts
10
+ async function readContract(client, params) {
11
+ const [address, name] = parseContractId(params.contract);
12
+ const sender = params.sender ?? address;
13
+ const serializedArgs = (params.args ?? []).map((arg) => with0x(bytesToHex(serializeCVBytes(arg))));
14
+ const data = await client.request(`/v2/contracts/call-read/${address}/${name}/${params.functionName}`, {
15
+ method: "POST",
16
+ body: {
17
+ sender,
18
+ arguments: serializedArgs
19
+ }
20
+ });
21
+ if (data.okay) {
22
+ return deserializeCVBytes(data.result);
23
+ }
24
+ throw new Error(data.cause ?? "Read-only call failed");
25
+ }
26
+
27
+ // src/actions/public/getMapEntry.ts
28
+ async function getMapEntry(client, params) {
29
+ const [address, name] = parseContractId(params.contract);
30
+ const serializedKey = with0x(bytesToHex(serializeCVBytes(params.key)));
31
+ const data = await client.request(`/v2/map_entry/${address}/${name}/${params.mapName}`, {
32
+ method: "POST",
33
+ body: serializedKey
34
+ });
35
+ return deserializeCVBytes(data.data);
36
+ }
37
+
38
+ // src/actions/public/estimateFee.ts
39
+ async function estimateFee(client, params) {
40
+ const payloadHex = bytesToHex(serializePayload(params.transaction.payload));
41
+ const txHex = bytesToHex(serializeTransaction(params.transaction));
42
+ const data = await client.request("/v2/fees/transaction", {
43
+ method: "POST",
44
+ body: {
45
+ estimated_len: Math.ceil(txHex.length / 2),
46
+ transaction_payload: "0x" + payloadHex
47
+ }
48
+ });
49
+ return (data.estimations ?? []).map((e) => ({
50
+ feeRate: e.fee_rate,
51
+ fee: e.fee
52
+ }));
53
+ }
54
+
55
+ // src/errors/transaction.ts
56
+ class BroadcastError extends BaseError {
57
+ name = "BroadcastError";
58
+ txid;
59
+ reason;
60
+ constructor(message, options) {
61
+ super(message, options);
62
+ this.txid = options?.txid;
63
+ this.reason = options?.reason;
64
+ }
65
+ }
66
+
67
+ // src/actions/wallet/sendTransaction.ts
68
+ async function sendTransaction(client, params) {
69
+ const hex = bytesToHex(serializeTransaction(params.transaction));
70
+ const body = { tx: hex };
71
+ if (params.attachment) {
72
+ body.attachment = typeof params.attachment === "string" ? params.attachment : bytesToHex(params.attachment);
73
+ }
74
+ const data = await client.request("/v2/transactions", {
75
+ method: "POST",
76
+ body
77
+ });
78
+ if (data.error) {
79
+ throw new BroadcastError(data.reason ?? data.error, {
80
+ reason: data.reason
81
+ });
82
+ }
83
+ const txid = typeof data === "string" ? data.replace(/"/g, "") : data.txid ?? getTransactionId(params.transaction);
84
+ return { txid };
85
+ }
86
+
87
+ // src/actions/wallet/utils.ts
88
+ function isProviderAccount(account) {
89
+ return account.type === "provider";
90
+ }
91
+
92
+ // src/actions/wallet/callContract.ts
93
+ async function callContract(client, params) {
94
+ const account = client.account;
95
+ if (!account)
96
+ throw new Error("Account required");
97
+ if (isProviderAccount(account)) {
98
+ const result2 = await account.provider.request("stx_callContract", {
99
+ contract: params.contract,
100
+ functionName: params.functionName,
101
+ functionArgs: params.functionArgs ?? []
102
+ });
103
+ return result2.txid;
104
+ }
105
+ const [contractAddress, contractName] = parseContractId(params.contract);
106
+ const nonce = params.nonce ?? await getNonce(client, { address: account.address });
107
+ const unsigned = buildContractCall({
108
+ contractAddress,
109
+ contractName,
110
+ functionName: params.functionName,
111
+ functionArgs: params.functionArgs ?? [],
112
+ fee: params.fee ?? 0n,
113
+ nonce,
114
+ publicKey: account.publicKey,
115
+ chain: client.chain,
116
+ postConditionMode: params.postConditionMode,
117
+ postConditions: params.postConditions
118
+ });
119
+ if (params.fee === undefined) {
120
+ const estimates = await estimateFee(client, { transaction: unsigned });
121
+ const mid = estimates[1] ?? estimates[0];
122
+ if (mid) {
123
+ unsigned.auth.spendingCondition.fee = BigInt(mid.fee);
124
+ }
125
+ }
126
+ const signed = await signTransactionWithAccount(unsigned, account);
127
+ const result = await sendTransaction(client, { transaction: signed });
128
+ return result.txid;
129
+ }
130
+
131
+ //# debugId=298B41CF751E957264756E2164756E21
132
+ //# sourceMappingURL=stacks-61rvzkz1.cjs.map
@@ -0,0 +1,17 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/actions/public/getNonce.ts", "../src/actions/public/readContract.ts", "../src/actions/public/getMapEntry.ts", "../src/actions/public/estimateFee.ts", "../src/errors/transaction.ts", "../src/actions/wallet/sendTransaction.ts", "../src/actions/wallet/utils.ts", "../src/actions/wallet/callContract.ts"],
4
+ "sourcesContent": [
5
+ "import type { Client } from \"../../clients/types.ts\";\n\nexport type GetNonceParams = {\n address: string;\n};\n\nexport type GetNonceResult = {\n nonce: bigint;\n possibleNextNonce: bigint;\n};\n\nexport async function getNonce(\n client: Client,\n params: GetNonceParams\n): Promise<bigint> {\n const data = await client.request(`/v2/accounts/${params.address}`, {\n method: \"GET\",\n });\n return BigInt(data.nonce);\n}\n",
6
+ "import type { Client } from \"../../clients/types.ts\";\nimport type { ClarityValue } from \"../../clarity/types.ts\";\nimport { serializeCVBytes } from \"../../clarity/serialize.ts\";\nimport { deserializeCVBytes } from \"../../clarity/deserialize.ts\";\nimport { bytesToHex, with0x } from \"../../utils/encoding.ts\";\nimport { parseContractId } from \"../../utils/address.ts\";\n\nexport type ReadContractParams = {\n contract: string; // \"address.name\"\n functionName: string;\n args?: ClarityValue[];\n sender?: string;\n};\n\nexport async function readContract<T extends ClarityValue = ClarityValue>(\n client: Client,\n params: ReadContractParams\n): Promise<T> {\n const [address, name] = parseContractId(params.contract);\n const sender = params.sender ?? address;\n\n const serializedArgs = (params.args ?? []).map((arg) =>\n with0x(bytesToHex(serializeCVBytes(arg)))\n );\n\n const data = await client.request(\n `/v2/contracts/call-read/${address}/${name}/${params.functionName}`,\n {\n method: \"POST\",\n body: {\n sender,\n arguments: serializedArgs,\n },\n }\n );\n\n if (data.okay) {\n return deserializeCVBytes<T>(data.result);\n }\n throw new Error(data.cause ?? \"Read-only call failed\");\n}\n",
7
+ "import type { Client } from \"../../clients/types.ts\";\nimport type { ClarityValue } from \"../../clarity/types.ts\";\nimport { serializeCVBytes } from \"../../clarity/serialize.ts\";\nimport { deserializeCVBytes } from \"../../clarity/deserialize.ts\";\nimport { bytesToHex, with0x } from \"../../utils/encoding.ts\";\nimport { parseContractId } from \"../../utils/address.ts\";\n\nexport type GetMapEntryParams = {\n contract: string; // \"address.name\"\n mapName: string;\n key: ClarityValue;\n};\n\nexport async function getMapEntry<T extends ClarityValue = ClarityValue>(\n client: Client,\n params: GetMapEntryParams\n): Promise<T> {\n const [address, name] = parseContractId(params.contract);\n const serializedKey = with0x(bytesToHex(serializeCVBytes(params.key)));\n\n const data = await client.request(\n `/v2/map_entry/${address}/${name}/${params.mapName}`,\n {\n method: \"POST\",\n body: serializedKey,\n }\n );\n\n return deserializeCVBytes<T>(data.data);\n}\n",
8
+ "import type { Client } from \"../../clients/types.ts\";\nimport { bytesToHex } from \"../../utils/encoding.ts\";\nimport { serializePayload, serializeTransaction } from \"../../transactions/wire/serialize.ts\";\nimport type { StacksTransaction } from \"../../transactions/types.ts\";\n\nexport type EstimateFeeParams = {\n transaction: StacksTransaction;\n};\n\nexport type FeeEstimation = {\n feeRate: number;\n fee: number;\n};\n\nexport async function estimateFee(\n client: Client,\n params: EstimateFeeParams\n): Promise<FeeEstimation[]> {\n const payloadHex = bytesToHex(serializePayload(params.transaction.payload));\n const txHex = bytesToHex(serializeTransaction(params.transaction));\n\n const data = await client.request(\"/v2/fees/transaction\", {\n method: \"POST\",\n body: {\n estimated_len: Math.ceil(txHex.length / 2),\n transaction_payload: \"0x\" + payloadHex,\n },\n });\n\n return (data.estimations ?? []).map((e: any) => ({\n feeRate: e.fee_rate,\n fee: e.fee,\n }));\n}\n",
9
+ "import { BaseError } from \"./base.ts\";\n\nexport class TransactionError extends BaseError {\n override name = \"TransactionError\";\n}\n\nexport class BroadcastError extends BaseError {\n override name = \"BroadcastError\";\n txid?: string;\n reason?: string;\n\n constructor(\n message: string,\n options?: { cause?: Error; txid?: string; reason?: string }\n ) {\n super(message, options);\n this.txid = options?.txid;\n this.reason = options?.reason;\n }\n}\n\nexport class SerializationError extends BaseError {\n override name = \"SerializationError\";\n}\n\nexport class SigningError extends BaseError {\n override name = \"SigningError\";\n}\n",
10
+ "import type { Client, WalletClient } from \"../../clients/types.ts\";\nimport { bytesToHex } from \"../../utils/encoding.ts\";\nimport { serializeTransaction } from \"../../transactions/wire/serialize.ts\";\nimport { getTransactionId } from \"../../transactions/signer.ts\";\nimport type { StacksTransaction } from \"../../transactions/types.ts\";\nimport { BroadcastError } from \"../../errors/transaction.ts\";\n\nexport type SendTransactionParams = {\n transaction: StacksTransaction;\n attachment?: Uint8Array | string;\n};\n\nexport type SendTransactionResult = {\n txid: string;\n};\n\n/** Broadcast a signed transaction to the network */\nexport async function sendTransaction(\n client: Client,\n params: SendTransactionParams\n): Promise<SendTransactionResult> {\n const hex = bytesToHex(serializeTransaction(params.transaction));\n\n const body: Record<string, string> = { tx: hex };\n if (params.attachment) {\n body.attachment =\n typeof params.attachment === \"string\"\n ? params.attachment\n : bytesToHex(params.attachment);\n }\n\n const data = await client.request(\"/v2/transactions\", {\n method: \"POST\",\n body,\n });\n\n if (data.error) {\n throw new BroadcastError(data.reason ?? data.error, {\n reason: data.reason,\n });\n }\n\n const txid =\n typeof data === \"string\"\n ? data.replace(/\"/g, \"\")\n : data.txid ?? getTransactionId(params.transaction);\n\n return { txid };\n}\n",
11
+ "import type { Account } from \"../../clients/types.ts\";\nimport type { ProviderAccount } from \"../../accounts/types.ts\";\n\nexport function isProviderAccount(account: Account): account is ProviderAccount {\n return account.type === \"provider\";\n}\n",
12
+ "import type { Client } from \"../../clients/types.ts\";\nimport type { ClarityValue } from \"../../clarity/types.ts\";\nimport type { PostCondition } from \"../../postconditions/types.ts\";\nimport type { IntegerType } from \"../../utils/encoding.ts\";\nimport { parseContractId } from \"../../utils/address.ts\";\nimport { buildContractCall } from \"../../transactions/build.ts\";\nimport { signTransactionWithAccount } from \"../../transactions/signer.ts\";\nimport { sendTransaction } from \"./sendTransaction.ts\";\nimport { getNonce } from \"../public/getNonce.ts\";\nimport { estimateFee } from \"../public/estimateFee.ts\";\nimport { isProviderAccount } from \"./utils.ts\";\n\nexport type CallContractParams = {\n contract: string; // \"address.name\"\n functionName: string;\n functionArgs?: ClarityValue[];\n fee?: IntegerType;\n nonce?: IntegerType;\n postConditionMode?: \"allow\" | \"deny\";\n postConditions?: PostCondition[];\n};\n\n/** Build, sign, and broadcast a contract call */\nexport async function callContract(\n client: Client,\n params: CallContractParams\n): Promise<string> {\n const account = client.account;\n if (!account) throw new Error(\"Account required\");\n\n // Provider: delegate to wallet\n if (isProviderAccount(account)) {\n const result = await account.provider.request(\"stx_callContract\", {\n contract: params.contract,\n functionName: params.functionName,\n functionArgs: params.functionArgs ?? [],\n });\n return result.txid;\n }\n\n // Local/Custom: build → sign → broadcast\n const [contractAddress, contractName] = parseContractId(params.contract);\n\n const nonce =\n params.nonce ?? await getNonce(client, { address: account.address });\n\n const unsigned = buildContractCall({\n contractAddress,\n contractName,\n functionName: params.functionName,\n functionArgs: params.functionArgs ?? [],\n fee: params.fee ?? 0n,\n nonce,\n publicKey: account.publicKey,\n chain: client.chain,\n postConditionMode: params.postConditionMode,\n postConditions: params.postConditions,\n });\n\n if (params.fee === undefined) {\n const estimates = await estimateFee(client, { transaction: unsigned });\n const mid = estimates[1] ?? estimates[0];\n if (mid) {\n (unsigned.auth.spendingCondition as any).fee = BigInt(mid.fee);\n }\n }\n\n const signed = await signTransactionWithAccount(unsigned, account);\n const result = await sendTransaction(client, { transaction: signed });\n return result.txid;\n}\n"
13
+ ],
14
+ "mappings": "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",
15
+ "debugId": "298B41CF751E957264756E2164756E21",
16
+ "names": []
17
+ }
@@ -0,0 +1,30 @@
1
+ // src/errors/base.ts
2
+ class BaseError extends Error {
3
+ name = "StacksError";
4
+ shortMessage;
5
+ details;
6
+ constructor(shortMessage, options) {
7
+ const message = [
8
+ shortMessage,
9
+ options?.details ? `
10
+ ${options.details}` : ""
11
+ ].join("");
12
+ super(message, { cause: options?.cause });
13
+ this.shortMessage = shortMessage;
14
+ this.details = options?.details;
15
+ }
16
+ toJSON() {
17
+ return {
18
+ name: this.name,
19
+ message: this.message,
20
+ shortMessage: this.shortMessage,
21
+ details: this.details,
22
+ cause: this.cause instanceof Error ? this.cause.message : undefined
23
+ };
24
+ }
25
+ }
26
+
27
+ export { BaseError };
28
+
29
+ //# debugId=1A3CE4B478FC032D64756E2164756E21
30
+ //# sourceMappingURL=stacks-709tra19.js.map
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/errors/base.ts"],
4
+ "sourcesContent": [
5
+ "export class BaseError extends Error {\n override name = \"StacksError\";\n shortMessage: string;\n details?: string;\n\n constructor(shortMessage: string, options?: { cause?: Error; details?: string }) {\n const message = [\n shortMessage,\n options?.details ? `\\n${options.details}` : \"\",\n ].join(\"\");\n\n super(message, { cause: options?.cause });\n this.shortMessage = shortMessage;\n this.details = options?.details;\n }\n\n toJSON() {\n return {\n name: this.name,\n message: this.message,\n shortMessage: this.shortMessage,\n details: this.details,\n cause: this.cause instanceof Error ? this.cause.message : undefined,\n };\n }\n}\n"
6
+ ],
7
+ "mappings": ";AAAO,MAAM,kBAAkB,MAAM;AAAA,EAC1B,OAAO;AAAA,EAChB;AAAA,EACA;AAAA,EAEA,WAAW,CAAC,cAAsB,SAA+C;AAAA,IAC/E,MAAM,UAAU;AAAA,MACd;AAAA,MACA,SAAS,UAAU;AAAA,EAAK,QAAQ,YAAY;AAAA,IAC9C,EAAE,KAAK,EAAE;AAAA,IAET,MAAM,SAAS,EAAE,OAAO,SAAS,MAAM,CAAC;AAAA,IACxC,KAAK,eAAe;AAAA,IACpB,KAAK,UAAU,SAAS;AAAA;AAAA,EAG1B,MAAM,GAAG;AAAA,IACP,OAAO;AAAA,MACL,MAAM,KAAK;AAAA,MACX,SAAS,KAAK;AAAA,MACd,cAAc,KAAK;AAAA,MACnB,SAAS,KAAK;AAAA,MACd,OAAO,KAAK,iBAAiB,QAAQ,KAAK,MAAM,UAAU;AAAA,IAC5D;AAAA;AAEJ;",
8
+ "debugId": "1A3CE4B478FC032D64756E2164756E21",
9
+ "names": []
10
+ }