@secondlayer/stacks 2.10.0 → 2.12.0

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 (118) hide show
  1. package/README.md +24 -0
  2. package/dist/shared/{stacks-4t2vmp4y.js → stacks-01pbr7gf.js} +17 -16
  3. package/dist/shared/stacks-01pbr7gf.js.map +11 -0
  4. package/dist/shared/{stacks-wyxj879g.cjs → stacks-18jv9aen.js} +83 -4
  5. package/dist/shared/stacks-18jv9aen.js.map +13 -0
  6. package/dist/shared/{stacks-0zysn74p.js → stacks-2mm20wqf.js} +3 -3
  7. package/dist/shared/{stacks-hxm7r5ay.cjs → stacks-44y18a8e.cjs} +3 -10
  8. package/dist/shared/stacks-44y18a8e.cjs.map +10 -0
  9. package/dist/shared/{stacks-2dhf79w5.js → stacks-59xy6t1p.js} +33 -31
  10. package/dist/shared/{stacks-2dhf79w5.js.map → stacks-59xy6t1p.js.map} +6 -6
  11. package/dist/shared/{stacks-99ghanwx.js → stacks-6n2m9hyk.js} +56 -6
  12. package/dist/shared/stacks-6n2m9hyk.js.map +10 -0
  13. package/dist/shared/{stacks-g7ffp8aj.js → stacks-6xt8py97.cjs} +59 -30
  14. package/dist/shared/stacks-6xt8py97.cjs.map +13 -0
  15. package/dist/shared/stacks-azp00pve.js +70 -0
  16. package/dist/shared/stacks-azp00pve.js.map +11 -0
  17. package/dist/shared/{stacks-vk8fwz0t.cjs → stacks-b9904rc2.cjs} +3 -2
  18. package/dist/shared/{stacks-vk8fwz0t.cjs.map → stacks-b9904rc2.cjs.map} +2 -2
  19. package/dist/shared/stacks-esn3wcw5.cjs +416 -0
  20. package/dist/shared/stacks-esn3wcw5.cjs.map +18 -0
  21. package/dist/shared/{stacks-3y058qda.cjs → stacks-fhzwsn5d.cjs} +16 -2
  22. package/dist/shared/{stacks-3y058qda.cjs.map → stacks-fhzwsn5d.cjs.map} +5 -4
  23. package/dist/shared/{stacks-e60vrr34.js → stacks-g11v9a35.js} +4 -4
  24. package/dist/shared/{stacks-0ek3cyt8.js → stacks-g67f4w1d.js} +7 -14
  25. package/dist/shared/stacks-g67f4w1d.js.map +10 -0
  26. package/dist/shared/{stacks-6xmk24yw.js → stacks-gfm3r397.cjs} +20 -7
  27. package/dist/shared/stacks-gfm3r397.cjs.map +11 -0
  28. package/dist/shared/{stacks-43cxvnr7.js → stacks-jbmcwky5.js} +3 -3
  29. package/dist/shared/stacks-kjg7fw4y.js +434 -0
  30. package/dist/shared/stacks-kjg7fw4y.js.map +18 -0
  31. package/dist/shared/{stacks-q1mjkt15.js → stacks-msmgyerb.js} +4 -4
  32. package/dist/shared/{stacks-2h8d2y27.js → stacks-qs5fzts5.js} +17 -3
  33. package/dist/shared/{stacks-2h8d2y27.js.map → stacks-qs5fzts5.js.map} +5 -4
  34. package/dist/shared/{stacks-xw0j252s.cjs → stacks-shn9zw99.cjs} +43 -3
  35. package/dist/shared/stacks-shn9zw99.cjs.map +10 -0
  36. package/dist/shared/{stacks-vf0ekgwb.js → stacks-ssndnbbd.js} +8 -10
  37. package/dist/shared/{stacks-vf0ekgwb.js.map → stacks-ssndnbbd.js.map} +2 -2
  38. package/dist/shared/{stacks-maamjqma.cjs → stacks-tbv5p6pn.cjs} +7 -9
  39. package/dist/shared/stacks-tbv5p6pn.cjs.map +11 -0
  40. package/dist/shared/{stacks-a36n7sjz.js → stacks-x94a1d6s.js} +3 -3
  41. package/dist/shared/{stacks-k5an9zcw.cjs → stacks-y5epf0sb.cjs} +19 -22
  42. package/dist/shared/{stacks-k5an9zcw.cjs.map → stacks-y5epf0sb.cjs.map} +6 -6
  43. package/dist/src/accounts/index.js +3 -5
  44. package/dist/src/accounts/index.js.map +2 -2
  45. package/dist/src/actions/index.cjs +8 -1
  46. package/dist/src/actions/index.cjs.map +1 -1
  47. package/dist/src/actions/index.d.cts +198 -13
  48. package/dist/src/actions/index.d.ts +198 -13
  49. package/dist/src/actions/index.js +29 -17
  50. package/dist/src/actions/index.js.map +1 -1
  51. package/dist/src/bitcoin/index.js +8 -11
  52. package/dist/src/bitcoin/index.js.map +2 -2
  53. package/dist/src/bns/index.js +12 -14
  54. package/dist/src/bns/index.js.map +2 -2
  55. package/dist/src/clarity/index.d.cts +50 -1
  56. package/dist/src/clarity/index.d.ts +50 -1
  57. package/dist/src/clarity/index.js +8 -7
  58. package/dist/src/clarity/index.js.map +1 -1
  59. package/dist/src/index.cjs +10 -1
  60. package/dist/src/index.cjs.map +3 -3
  61. package/dist/src/index.d.cts +167 -9
  62. package/dist/src/index.d.ts +167 -9
  63. package/dist/src/index.js +30 -17
  64. package/dist/src/index.js.map +3 -3
  65. package/dist/src/postconditions/index.js +3 -3
  66. package/dist/src/pox/index.js +11 -13
  67. package/dist/src/pox/index.js.map +2 -2
  68. package/dist/src/sbtc/index.js +10 -12
  69. package/dist/src/sbtc/index.js.map +2 -2
  70. package/dist/src/stackingdao/index.js +11 -13
  71. package/dist/src/stackingdao/index.js.map +2 -2
  72. package/dist/src/tools/index.cjs +348 -63
  73. package/dist/src/tools/index.cjs.map +18 -15
  74. package/dist/src/tools/index.js +348 -63
  75. package/dist/src/tools/index.js.map +18 -15
  76. package/dist/src/transactions/index.js +6 -7
  77. package/dist/src/transactions/index.js.map +1 -1
  78. package/dist/src/utils/index.cjs +2 -1
  79. package/dist/src/utils/index.cjs.map +2 -2
  80. package/dist/src/utils/index.d.cts +5 -1
  81. package/dist/src/utils/index.d.ts +5 -1
  82. package/dist/src/utils/index.js +12 -14
  83. package/dist/src/utils/index.js.map +2 -2
  84. package/dist/src/x402/index.cjs +5 -2
  85. package/dist/src/x402/index.cjs.map +3 -3
  86. package/dist/src/x402/index.d.cts +36 -0
  87. package/dist/src/x402/index.d.ts +36 -0
  88. package/dist/src/x402/index.js +13 -11
  89. package/dist/src/x402/index.js.map +3 -3
  90. package/package.json +1 -1
  91. package/dist/shared/stacks-0ek3cyt8.js.map +0 -10
  92. package/dist/shared/stacks-4t2vmp4y.js.map +0 -11
  93. package/dist/shared/stacks-6xmk24yw.js.map +0 -10
  94. package/dist/shared/stacks-99ghanwx.js.map +0 -10
  95. package/dist/shared/stacks-9g0jhab3.cjs +0 -40
  96. package/dist/shared/stacks-9g0jhab3.cjs.map +0 -10
  97. package/dist/shared/stacks-9t68zmpn.js +0 -210
  98. package/dist/shared/stacks-9t68zmpn.js.map +0 -15
  99. package/dist/shared/stacks-fcaefc5b.cjs +0 -16
  100. package/dist/shared/stacks-fcaefc5b.cjs.map +0 -10
  101. package/dist/shared/stacks-g7ffp8aj.js.map +0 -13
  102. package/dist/shared/stacks-hxm7r5ay.cjs.map +0 -10
  103. package/dist/shared/stacks-maamjqma.cjs.map +0 -11
  104. package/dist/shared/stacks-v9jqcpd4.js +0 -18
  105. package/dist/shared/stacks-v9jqcpd4.js.map +0 -10
  106. package/dist/shared/stacks-wyxj879g.cjs.map +0 -13
  107. package/dist/shared/stacks-xmsms921.cjs +0 -196
  108. package/dist/shared/stacks-xmsms921.cjs.map +0 -15
  109. package/dist/shared/stacks-xw0j252s.cjs.map +0 -10
  110. package/dist/shared/stacks-xxn5ma6g.js +0 -22
  111. package/dist/shared/stacks-xxn5ma6g.js.map +0 -10
  112. package/dist/shared/stacks-ya3x01yd.cjs +0 -16
  113. package/dist/shared/stacks-ya3x01yd.cjs.map +0 -10
  114. /package/dist/shared/{stacks-0zysn74p.js.map → stacks-2mm20wqf.js.map} +0 -0
  115. /package/dist/shared/{stacks-e60vrr34.js.map → stacks-g11v9a35.js.map} +0 -0
  116. /package/dist/shared/{stacks-43cxvnr7.js.map → stacks-jbmcwky5.js.map} +0 -0
  117. /package/dist/shared/{stacks-q1mjkt15.js.map → stacks-msmgyerb.js.map} +0 -0
  118. /package/dist/shared/{stacks-a36n7sjz.js.map → stacks-x94a1d6s.js.map} +0 -0
@@ -6,7 +6,7 @@
6
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
  "import type { AbiContract, AbiFunction } from \"./contract.ts\";\nimport { SIP009_ABI, SIP010_ABI, SIP013_ABI } from \"./standards.ts\";\n\n/**\n * Static conformance classification — \"does this contract's ABI look like a\n * SIP-009/010/013 token?\". Powers trait-based discovery for the (many) contracts\n * that conform to a standard without declaring its trait. Lean match: every\n * REQUIRED standard function must be present with the same access + arg arity\n * (optional functions like get-token-uri are ignored). Loose on exact arg/return\n * types to catch real-world variants; consumers wanting certainty use the\n * `declared` traits parsed from source instead.\n */\n\n/** The canonical SIP trait standards this package can classify/scaffold against.\n * Single source of truth — the `SipStandard` type, CLI `--trait` validation, and\n * the MCP traits resource all derive from this so the vocabulary can't drift. */\nexport const TRAIT_STANDARDS = [\"sip-009\", \"sip-010\", \"sip-013\"] as const;\n\nexport type SipStandard = (typeof TRAIT_STANDARDS)[number];\n\ninterface StandardSpec {\n\tid: SipStandard;\n\tabi: AbiContract;\n\t/** Functions in the reference ABI that real tokens may omit. */\n\toptional: ReadonlySet<string>;\n}\n\nconst STANDARDS: ReadonlyArray<StandardSpec> = [\n\t{ id: \"sip-010\", abi: SIP010_ABI, optional: new Set([\"get-token-uri\"]) },\n\t{ id: \"sip-009\", abi: SIP009_ABI, optional: new Set([\"get-token-uri\"]) },\n\t{\n\t\tid: \"sip-013\",\n\t\tabi: SIP013_ABI,\n\t\toptional: new Set([\n\t\t\t\"transfer-memo\",\n\t\t\t\"transfer-many\",\n\t\t\t\"transfer-many-memo\",\n\t\t\t\"get-token-uri\",\n\t\t\t\"get-overall-balance\",\n\t\t\t\"get-overall-supply\",\n\t\t]),\n\t},\n];\n\nfunction indexByName(abi: AbiContract): Map<string, AbiFunction> {\n\tconst m = new Map<string, AbiFunction>();\n\tfor (const f of abi.functions) m.set(f.name, f);\n\treturn m;\n}\n\nfunction conformsTo(candidate: AbiContract, spec: StandardSpec): boolean {\n\tconst fns = indexByName(candidate);\n\tfor (const required of spec.abi.functions) {\n\t\tif (spec.optional.has(required.name)) continue;\n\t\tconst got = fns.get(required.name);\n\t\tif (!got) return false;\n\t\tif (got.access !== required.access) return false;\n\t\tif (got.args.length !== required.args.length) return false;\n\t}\n\treturn true;\n}\n\n/** Return the SIP standards a contract's ABI statically conforms to. */\nexport function classifyContract(abi: AbiContract): SipStandard[] {\n\tif (!abi || !Array.isArray(abi.functions)) return [];\n\treturn STANDARDS.filter((s) => conformsTo(abi, s)).map((s) => s.id);\n}\n\n/**\n * Parse the standards a contract *declares* via `(impl-trait …)` in its Clarity\n * source. Matched heuristically on the trait-reference name (robust across\n * mainnet/testnet principals + community variants) rather than an exact principal\n * allowlist. The ABI/RPC doesn't carry trait info, so source is the only declared\n * signal. `declared` is the high-confidence signal; `classifyContract` is the\n * catch-all for conforming-but-undeclared contracts.\n */\nexport function parseDeclaredStandards(claritySource: string): SipStandard[] {\n\tconst out = new Set<SipStandard>();\n\tconst matches = claritySource.matchAll(/\\(impl-trait\\s+[^)]+\\)/gi);\n\tfor (const m of matches) {\n\t\tconst ref = m[0].toLowerCase();\n\t\tif (ref.includes(\"sip-010\") || ref.includes(\".ft-trait\"))\n\t\t\tout.add(\"sip-010\");\n\t\tif (ref.includes(\"sip-009\") || ref.includes(\"nft-trait\"))\n\t\t\tout.add(\"sip-009\");\n\t\tif (ref.includes(\"sip-013\") || ref.includes(\"semi-fungible\"))\n\t\t\tout.add(\"sip-013\");\n\t}\n\treturn [...out];\n}\n"
8
8
  ],
9
- "mappings": "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",
10
- "debugId": "D03CED766895F1B064756E2164756E21",
9
+ "mappings": "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",
10
+ "debugId": "9EE714ED8462F68A64756E2164756E21",
11
11
  "names": []
12
12
  }
@@ -0,0 +1,416 @@
1
+ // src/actions/public/estimateFee.ts
2
+ async function estimateFee(client, params) {
3
+ const payloadHex = bytesToHex(serializePayload(params.transaction.payload));
4
+ const txHex = bytesToHex(serializeTransaction(params.transaction));
5
+ const data = await client.request("/v2/fees/transaction", {
6
+ method: "POST",
7
+ body: {
8
+ estimated_len: Math.ceil(txHex.length / 2),
9
+ transaction_payload: `0x${payloadHex}`
10
+ }
11
+ });
12
+ return (data.estimations ?? []).map((e) => ({
13
+ feeRate: e.fee_rate,
14
+ fee: e.fee
15
+ }));
16
+ }
17
+
18
+ // src/actions/public/getBlockHeight.ts
19
+ async function getBlockHeight(client) {
20
+ const data = await client.request("/v2/info", { method: "GET" });
21
+ return data.stacks_tip_height;
22
+ }
23
+
24
+ // src/actions/public/getNonce.ts
25
+ async function getNonce(client, params) {
26
+ const data = await client.request(`/v2/accounts/${params.address}`, {
27
+ method: "GET"
28
+ });
29
+ const nonce = data?.nonce;
30
+ if (typeof nonce !== "number" && typeof nonce !== "string") {
31
+ throw new Error(`getNonce: unexpected /v2/accounts response for ${params.address} (missing numeric nonce)`);
32
+ }
33
+ return BigInt(nonce);
34
+ }
35
+
36
+ // src/actions/public/txSources.ts
37
+ function resolveFetch(fetchImpl) {
38
+ const f = fetchImpl ?? globalThis.fetch;
39
+ if (!f)
40
+ throw new Error("No fetch implementation available; pass `fetchImpl`");
41
+ return f;
42
+ }
43
+ function normalizeTxid(txid) {
44
+ return txid.startsWith("0x") ? txid : `0x${txid}`;
45
+ }
46
+ function decodeResultHex(hex) {
47
+ if (!hex)
48
+ return {};
49
+ try {
50
+ return { result: deserializeCVBytes(hex), resultHex: hex };
51
+ } catch {
52
+ return { resultHex: hex };
53
+ }
54
+ }
55
+ function normalizeStatus(txStatus) {
56
+ switch (txStatus) {
57
+ case "pending":
58
+ case "success":
59
+ case "abort_by_response":
60
+ case "abort_by_post_condition":
61
+ return txStatus;
62
+ default:
63
+ return txStatus.startsWith("dropped") ? "dropped" : undefined;
64
+ }
65
+ }
66
+ function extendedApiSource() {
67
+ return {
68
+ async get({ client, txid }) {
69
+ const data = await client.request(`/extended/v1/tx/${normalizeTxid(txid)}`, { method: "GET" });
70
+ const txStatus = typeof data?.tx_status === "string" ? data.tx_status : undefined;
71
+ if (!txStatus)
72
+ return { receipt: null };
73
+ const status = normalizeStatus(txStatus);
74
+ if (!status)
75
+ return { receipt: null };
76
+ return {
77
+ receipt: {
78
+ txid: normalizeTxid(txid),
79
+ status,
80
+ blockHeight: typeof data.block_height === "number" && data.block_height > 0 ? data.block_height : undefined,
81
+ blockHash: data.block_hash ?? undefined,
82
+ ...decodeResultHex(data.tx_result?.hex),
83
+ events: Array.isArray(data.events) ? data.events : [],
84
+ raw: data
85
+ }
86
+ };
87
+ }
88
+ };
89
+ }
90
+ function indexTxSource(params = {}) {
91
+ const baseUrl = (params.baseUrl ?? "https://api.secondlayer.tools").replace(/\/$/, "");
92
+ const fetchImpl = resolveFetch(params.fetchImpl);
93
+ return {
94
+ async get({ txid }) {
95
+ const res = await fetchImpl(`${baseUrl}/v1/index/transactions/${normalizeTxid(txid)}`, {
96
+ headers: params.apiKey ? { "x-api-key": params.apiKey } : undefined
97
+ });
98
+ if (res.status === 404) {
99
+ return { receipt: null };
100
+ }
101
+ if (!res.ok) {
102
+ throw new Error(`indexTxSource: /v1/index/transactions ${res.status}`);
103
+ }
104
+ const data = await res.json();
105
+ const tx = data.transaction;
106
+ const tip = data.tip?.block_height;
107
+ if (!tx)
108
+ return { receipt: null, tip };
109
+ const status = normalizeStatus(tx.status) ?? "success";
110
+ return {
111
+ receipt: {
112
+ txid: normalizeTxid(tx.tx_id),
113
+ status,
114
+ blockHeight: tx.block_height,
115
+ ...decodeResultHex(tx.contract_call?.result_hex),
116
+ events: [],
117
+ raw: data
118
+ },
119
+ tip
120
+ };
121
+ }
122
+ };
123
+ }
124
+
125
+ // src/errors/transaction.ts
126
+ class TransactionError extends BaseError {
127
+ name = "TransactionError";
128
+ }
129
+
130
+ class BroadcastError extends BaseError {
131
+ name = "BroadcastError";
132
+ txid;
133
+ reason;
134
+ reasonData;
135
+ constructor(message, options) {
136
+ super(message, options);
137
+ this.txid = options?.txid;
138
+ this.reason = options?.reason;
139
+ this.reasonData = options?.reasonData;
140
+ }
141
+ }
142
+
143
+ class TransactionAbortedError extends BaseError {
144
+ name = "TransactionAbortedError";
145
+ receipt;
146
+ constructor(message, options) {
147
+ super(message, options);
148
+ this.receipt = options.receipt;
149
+ }
150
+ }
151
+
152
+ class TransactionDroppedError extends BaseError {
153
+ name = "TransactionDroppedError";
154
+ txid;
155
+ constructor(message, options) {
156
+ super(message, options);
157
+ this.txid = options.txid;
158
+ }
159
+ }
160
+
161
+ class WaitForTransactionTimeoutError extends BaseError {
162
+ name = "WaitForTransactionTimeoutError";
163
+ txid;
164
+ constructor(message, options) {
165
+ super(message, options);
166
+ this.txid = options.txid;
167
+ }
168
+ }
169
+
170
+ class SerializationError extends BaseError {
171
+ name = "SerializationError";
172
+ }
173
+
174
+ class SigningError extends BaseError {
175
+ name = "SigningError";
176
+ }
177
+
178
+ // src/actions/public/waitForTransactionReceipt.ts
179
+ var sleep = (ms) => new Promise((r) => setTimeout(r, ms));
180
+ async function waitForTransactionReceipt(client, params) {
181
+ const {
182
+ txid,
183
+ confirmations = 1,
184
+ timeout = 180000,
185
+ pollingInterval = 3000,
186
+ droppedGracePeriod = 30000
187
+ } = params;
188
+ const source = params.source ?? extendedApiSource();
189
+ const startedAt = Date.now();
190
+ let unknownSince = null;
191
+ let everPending = false;
192
+ while (true) {
193
+ const snapshot = await source.get({ client, txid });
194
+ const receipt = snapshot.receipt;
195
+ if (receipt === null) {
196
+ unknownSince ??= Date.now();
197
+ if (Date.now() - unknownSince >= droppedGracePeriod) {
198
+ throw new TransactionDroppedError(everPending ? `Transaction ${txid} left the mempool without being mined` : `Transaction ${txid} was never observed by the status source`, { txid });
199
+ }
200
+ } else {
201
+ unknownSince = null;
202
+ switch (receipt.status) {
203
+ case "dropped":
204
+ throw new TransactionDroppedError(`Transaction ${txid} was dropped from the mempool`, { txid });
205
+ case "abort_by_response":
206
+ case "abort_by_post_condition":
207
+ throw new TransactionAbortedError(`Transaction ${txid} aborted (${receipt.status})`, { receipt });
208
+ case "pending":
209
+ everPending = true;
210
+ break;
211
+ case "success": {
212
+ if (confirmations <= 1)
213
+ return receipt;
214
+ if (receipt.blockHeight !== undefined) {
215
+ const tip = snapshot.tip ?? await getBlockHeight(client);
216
+ if (tip - receipt.blockHeight + 1 >= confirmations)
217
+ return receipt;
218
+ }
219
+ break;
220
+ }
221
+ }
222
+ }
223
+ if (Date.now() - startedAt >= timeout) {
224
+ throw new WaitForTransactionTimeoutError(`Timed out after ${timeout}ms waiting for transaction ${txid}`, { txid });
225
+ }
226
+ await sleep(pollingInterval);
227
+ }
228
+ }
229
+
230
+ // src/actions/wallet/sendTransaction.ts
231
+ async function sendTransaction(client, params) {
232
+ const hex = bytesToHex(serializeTransaction(params.transaction));
233
+ const body = { tx: hex };
234
+ if (params.attachment) {
235
+ body.attachment = typeof params.attachment === "string" ? params.attachment : bytesToHex(params.attachment);
236
+ }
237
+ const data = await client.request("/v2/transactions", {
238
+ method: "POST",
239
+ body
240
+ });
241
+ if (data.error) {
242
+ throw new BroadcastError(data.reason ?? data.error, {
243
+ reason: data.reason,
244
+ reasonData: data.reason_data,
245
+ txid: data.txid ?? getTransactionId(params.transaction)
246
+ });
247
+ }
248
+ const txid = typeof data === "string" ? data.replace(/"/g, "") : data.txid ?? getTransactionId(params.transaction);
249
+ if (params.wait) {
250
+ const confirmations = params.wait === true ? 1 : params.wait;
251
+ const receipt = await waitForTransactionReceipt(client, {
252
+ txid,
253
+ confirmations
254
+ });
255
+ return { txid, receipt };
256
+ }
257
+ return { txid };
258
+ }
259
+
260
+ // src/actions/wallet/nonceManager.ts
261
+ function jsonRpcSource() {
262
+ return {
263
+ get: ({ client, address }) => getNonce(client, { address })
264
+ };
265
+ }
266
+ function memoryStore() {
267
+ const next = new Map;
268
+ const locks = new Map;
269
+ function withLock(key, fn) {
270
+ const prev = locks.get(key) ?? Promise.resolve();
271
+ const run = prev.then(fn, fn);
272
+ locks.set(key, run.catch(() => {}));
273
+ return run;
274
+ }
275
+ return {
276
+ reserve(key, getFloor) {
277
+ return withLock(key, async () => {
278
+ let current = next.get(key);
279
+ if (current === undefined)
280
+ current = await getFloor();
281
+ next.set(key, current + 1n);
282
+ return current;
283
+ });
284
+ },
285
+ reset(key) {
286
+ next.delete(key);
287
+ },
288
+ peek(key) {
289
+ return next.get(key);
290
+ }
291
+ };
292
+ }
293
+ function nonceKey(client, address) {
294
+ return `${client.chain?.id ?? "stacks"}:${address}`;
295
+ }
296
+ function createNonceManager(params = {}) {
297
+ const source = params.source ?? jsonRpcSource();
298
+ const store = params.store ?? memoryStore();
299
+ return {
300
+ consume({ client, address }) {
301
+ return store.reserve(nonceKey(client, address), () => source.get({ client, address }));
302
+ },
303
+ reset({ client, address }) {
304
+ return store.reset(nonceKey(client, address));
305
+ },
306
+ async peek({ client, address }) {
307
+ return store.peek?.(nonceKey(client, address));
308
+ }
309
+ };
310
+ }
311
+ async function resolveNonce(client, address) {
312
+ if (client.nonceManager)
313
+ return client.nonceManager.consume({ client, address });
314
+ return getNonce(client, { address });
315
+ }
316
+ async function reconcileNonce(manager, params) {
317
+ const { client, address, source } = params;
318
+ const downward = params.downward ?? true;
319
+ const authoritative = await source.get({ client, address });
320
+ const tracked = await manager.peek({ client, address });
321
+ if (tracked === undefined || authoritative === tracked) {
322
+ return { reset: false, authoritative, tracked };
323
+ }
324
+ if (authoritative < tracked && !downward) {
325
+ return { reset: false, authoritative, tracked };
326
+ }
327
+ await manager.reset({ client, address });
328
+ return { reset: true, authoritative, tracked };
329
+ }
330
+ function startNonceReconciler(manager, params) {
331
+ const { client, addresses, source } = params;
332
+ const intervalMs = params.intervalMs ?? 60000;
333
+ const tick = async () => {
334
+ for (const address of addresses) {
335
+ try {
336
+ const result = await reconcileNonce(manager, {
337
+ client,
338
+ address,
339
+ source,
340
+ downward: params.downward
341
+ });
342
+ params.onReconcile?.(address, result);
343
+ } catch (error) {
344
+ try {
345
+ params.onError?.(address, error);
346
+ } catch {}
347
+ }
348
+ }
349
+ };
350
+ const timer = setInterval(tick, intervalMs);
351
+ timer.unref?.();
352
+ return {
353
+ stop: () => clearInterval(timer)
354
+ };
355
+ }
356
+ function isNonceConflictError(error) {
357
+ if (!(error instanceof BroadcastError))
358
+ return false;
359
+ if (error.reason === "ConflictingNonceInMempool" || error.reason === "BadNonce") {
360
+ return true;
361
+ }
362
+ if (error.reason !== undefined)
363
+ return false;
364
+ return error.message.toLowerCase().includes("nonce");
365
+ }
366
+ async function broadcastWithNonceReset(client, params) {
367
+ try {
368
+ const result = await sendTransaction(client, {
369
+ transaction: params.transaction
370
+ });
371
+ return result.txid;
372
+ } catch (error) {
373
+ if (client.nonceManager && isNonceConflictError(error)) {
374
+ await client.nonceManager.reset({ client, address: params.address });
375
+ }
376
+ throw error;
377
+ }
378
+ }
379
+
380
+ // src/actions/wallet/utils.ts
381
+ function isProviderAccount(account) {
382
+ return account.type === "provider";
383
+ }
384
+ var FEE_TIERS = ["min", "low", "mid", "high"];
385
+ var TIER_INDEX = { low: 0, mid: 1, high: 2 };
386
+ function isFeeTier(fee) {
387
+ return typeof fee === "string" && FEE_TIERS.includes(fee);
388
+ }
389
+ function minimumFee(transaction) {
390
+ return BigInt(serializeTransaction(transaction).length);
391
+ }
392
+ async function resolveFee(client, transaction, fee) {
393
+ if (fee !== undefined && !isFeeTier(fee))
394
+ return intToBigInt(fee);
395
+ const tier = fee ?? "mid";
396
+ if (tier === "min")
397
+ return minimumFee(transaction);
398
+ try {
399
+ const estimates = await estimateFee(client, { transaction });
400
+ const pick = estimates[TIER_INDEX[tier]] ?? estimates[estimates.length - 1];
401
+ if (pick)
402
+ return BigInt(pick.fee);
403
+ } catch {}
404
+ return minimumFee(transaction);
405
+ }
406
+ function setUnsignedFee(transaction, fee) {
407
+ transaction.auth.spendingCondition.fee = fee;
408
+ }
409
+ function assertNoFeeTierForProvider(fee) {
410
+ if (isFeeTier(fee)) {
411
+ throw new Error(`Fee tier '${fee}' requires local signing; provider (wallet) accounts set their own fee`);
412
+ }
413
+ }
414
+
415
+ //# debugId=0308D1877DC5243864756E2164756E21
416
+ //# sourceMappingURL=stacks-esn3wcw5.cjs.map
@@ -0,0 +1,18 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/actions/public/estimateFee.ts", "../src/actions/public/getBlockHeight.ts", "../src/actions/public/getNonce.ts", "../src/actions/public/txSources.ts", "../src/errors/transaction.ts", "../src/actions/public/waitForTransactionReceipt.ts", "../src/actions/wallet/sendTransaction.ts", "../src/actions/wallet/nonceManager.ts", "../src/actions/wallet/utils.ts"],
4
+ "sourcesContent": [
5
+ "import type { Client } from \"../../clients/types.ts\";\nimport type { StacksTransaction } from \"../../transactions/types.ts\";\nimport {\n\tserializePayload,\n\tserializeTransaction,\n} from \"../../transactions/wire/serialize.ts\";\nimport { bytesToHex } from \"../../utils/encoding.ts\";\n\nexport type EstimateFeeParams = {\n\ttransaction: StacksTransaction;\n};\n\nexport type FeeEstimation = {\n\tfeeRate: number;\n\tfee: number;\n};\n\nexport async function estimateFee(\n\tclient: Client,\n\tparams: EstimateFeeParams,\n): Promise<FeeEstimation[]> {\n\tconst payloadHex = bytesToHex(serializePayload(params.transaction.payload));\n\tconst txHex = bytesToHex(serializeTransaction(params.transaction));\n\n\tconst data = await client.request(\"/v2/fees/transaction\", {\n\t\tmethod: \"POST\",\n\t\tbody: {\n\t\t\testimated_len: Math.ceil(txHex.length / 2),\n\t\t\ttransaction_payload: `0x${payloadHex}`,\n\t\t},\n\t});\n\n\t// biome-ignore lint/suspicious/noExplicitAny: interop boundary or dynamic-shape value where typing adds friction without runtime safety\n\treturn (data.estimations ?? []).map((e: any) => ({\n\t\tfeeRate: e.fee_rate,\n\t\tfee: e.fee,\n\t}));\n}\n",
6
+ "import type { Client } from \"../../clients/types.ts\";\n\nexport async function getBlockHeight(client: Client): Promise<number> {\n\tconst data = await client.request(\"/v2/info\", { method: \"GET\" });\n\treturn data.stacks_tip_height;\n}\n",
7
+ "import type { Client } from \"../../clients/types.ts\";\n\nexport type GetNonceParams = {\n\taddress: string;\n};\n\nexport type GetNonceResult = {\n\tnonce: bigint;\n\tpossibleNextNonce: bigint;\n};\n\nexport async function getNonce(\n\tclient: Client,\n\tparams: GetNonceParams,\n): Promise<bigint> {\n\tconst data = await client.request(`/v2/accounts/${params.address}`, {\n\t\tmethod: \"GET\",\n\t});\n\tconst nonce = (data as { nonce?: unknown })?.nonce;\n\tif (typeof nonce !== \"number\" && typeof nonce !== \"string\") {\n\t\tthrow new Error(\n\t\t\t`getNonce: unexpected /v2/accounts response for ${params.address} (missing numeric nonce)`,\n\t\t);\n\t}\n\treturn BigInt(nonce);\n}\n",
8
+ "import { deserializeCVBytes } from \"../../clarity/deserialize.ts\";\nimport type { ClarityValue } from \"../../clarity/types.ts\";\nimport type { Client } from \"../../clients/types.ts\";\n\n/**\n * Pluggable transaction-status sources for {@link getTransaction} /\n * `waitForTransactionReceipt`.\n *\n * A bare stacks-node has no confirmed-transaction endpoint, so status reads\n * need a host that indexes transactions. Where that data comes from is\n * pluggable, mirroring the nonce sources:\n *\n * - {@link extendedApiSource} — default; `/extended/v1/tx/{txid}` on the\n * client's transport host (Hiro API or any extended-API-compatible host).\n * - {@link indexTxSource} — Secondlayer's `/v1/index/transactions/{txid}`;\n * returns the chain tip in the same response, so N-confirmation waits\n * need no second request.\n */\n\nexport type TransactionStatus =\n\t| \"pending\"\n\t| \"success\"\n\t| \"abort_by_response\"\n\t| \"abort_by_post_condition\"\n\t| \"dropped\";\n\nexport type TransactionReceipt = {\n\ttxid: string;\n\tstatus: TransactionStatus;\n\t/** Anchor block height; absent while pending. */\n\tblockHeight?: number;\n\tblockHash?: string;\n\t/** Decoded Clarity result; absent while pending or when the source omits it. */\n\tresult?: ClarityValue;\n\tresultHex?: string;\n\tevents: unknown[];\n\t/** The source's unnormalized response, for fields the receipt doesn't model. */\n\traw: unknown;\n};\n\nexport type TransactionSnapshot = {\n\t/** `null` when the source has no record of the tx (mempool + chain). */\n\treceipt: TransactionReceipt | null;\n\t/** Chain tip height, when the source knows it (saves a round-trip). */\n\ttip?: number;\n};\n\nexport type TransactionStatusSource = {\n\tget(args: { client: Client; txid: string }): Promise<TransactionSnapshot>;\n};\n\ntype FetchImpl = typeof globalThis.fetch;\n\nfunction resolveFetch(fetchImpl?: FetchImpl): FetchImpl {\n\tconst f = fetchImpl ?? globalThis.fetch;\n\tif (!f)\n\t\tthrow new Error(\"No fetch implementation available; pass `fetchImpl`\");\n\treturn f;\n}\n\nfunction normalizeTxid(txid: string): string {\n\treturn txid.startsWith(\"0x\") ? txid : `0x${txid}`;\n}\n\nfunction decodeResultHex(hex: string | null | undefined): {\n\tresult?: ClarityValue;\n\tresultHex?: string;\n} {\n\tif (!hex) return {};\n\ttry {\n\t\treturn { result: deserializeCVBytes(hex), resultHex: hex };\n\t} catch {\n\t\treturn { resultHex: hex };\n\t}\n}\n\n/** Map a Hiro `tx_status` string onto the receipt vocabulary. */\nfunction normalizeStatus(txStatus: string): TransactionStatus | undefined {\n\tswitch (txStatus) {\n\t\tcase \"pending\":\n\t\tcase \"success\":\n\t\tcase \"abort_by_response\":\n\t\tcase \"abort_by_post_condition\":\n\t\t\treturn txStatus;\n\t\tdefault:\n\t\t\treturn txStatus.startsWith(\"dropped\") ? \"dropped\" : undefined;\n\t}\n}\n\n/**\n * Default source: `GET /extended/v1/tx/{txid}` via the client's transport.\n * Requires a host that serves Hiro's extended API (a bare stacks-node does\n * not). Does not report the chain tip — the wait action fetches it separately\n * when `confirmations > 1`.\n */\nexport function extendedApiSource(): TransactionStatusSource {\n\treturn {\n\t\tasync get({ client, txid }) {\n\t\t\tconst data = await client.request(\n\t\t\t\t`/extended/v1/tx/${normalizeTxid(txid)}`,\n\t\t\t\t{ method: \"GET\" },\n\t\t\t);\n\n\t\t\tconst txStatus =\n\t\t\t\ttypeof data?.tx_status === \"string\" ? data.tx_status : undefined;\n\t\t\tif (!txStatus) return { receipt: null }; // 404 body or unexpected shape\n\n\t\t\tconst status = normalizeStatus(txStatus);\n\t\t\tif (!status) return { receipt: null };\n\n\t\t\treturn {\n\t\t\t\treceipt: {\n\t\t\t\t\ttxid: normalizeTxid(txid),\n\t\t\t\t\tstatus,\n\t\t\t\t\tblockHeight:\n\t\t\t\t\t\ttypeof data.block_height === \"number\" && data.block_height > 0\n\t\t\t\t\t\t\t? data.block_height\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\tblockHash: data.block_hash ?? undefined,\n\t\t\t\t\t...decodeResultHex(data.tx_result?.hex),\n\t\t\t\t\tevents: Array.isArray(data.events) ? data.events : [],\n\t\t\t\t\traw: data,\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t};\n}\n\nexport type IndexTxSourceParams = {\n\t/** Base URL of a Secondlayer-shaped index API. */\n\tbaseUrl?: string;\n\tapiKey?: string;\n\tfetchImpl?: FetchImpl;\n};\n\n/**\n * Source backed by Secondlayer's `/v1/index/transactions/{txid}`. The response\n * embeds the chain tip, so N-confirmation math needs no extra request. The\n * index only returns canonical (mined) transactions — while a tx is in the\n * mempool this source reports `receipt: null`, and the wait action's grace\n * window carries it until inclusion.\n */\nexport function indexTxSource(\n\tparams: IndexTxSourceParams = {},\n): TransactionStatusSource {\n\tconst baseUrl = (params.baseUrl ?? \"https://api.secondlayer.tools\").replace(\n\t\t/\\/$/,\n\t\t\"\",\n\t);\n\tconst fetchImpl = resolveFetch(params.fetchImpl);\n\n\treturn {\n\t\tasync get({ txid }) {\n\t\t\tconst res = await fetchImpl(\n\t\t\t\t`${baseUrl}/v1/index/transactions/${normalizeTxid(txid)}`,\n\t\t\t\t{\n\t\t\t\t\theaders: params.apiKey ? { \"x-api-key\": params.apiKey } : undefined,\n\t\t\t\t},\n\t\t\t);\n\t\t\tif (res.status === 404) {\n\t\t\t\treturn { receipt: null };\n\t\t\t}\n\t\t\tif (!res.ok) {\n\t\t\t\tthrow new Error(`indexTxSource: /v1/index/transactions ${res.status}`);\n\t\t\t}\n\n\t\t\tconst data = (await res.json()) as {\n\t\t\t\ttransaction?: {\n\t\t\t\t\ttx_id: string;\n\t\t\t\t\tblock_height: number;\n\t\t\t\t\tstatus: string;\n\t\t\t\t\tcontract_call?: { result_hex: string | null };\n\t\t\t\t};\n\t\t\t\ttip?: { block_height: number };\n\t\t\t};\n\t\t\tconst tx = data.transaction;\n\t\t\tconst tip = data.tip?.block_height;\n\t\t\tif (!tx) return { receipt: null, tip };\n\n\t\t\tconst status = normalizeStatus(tx.status) ?? \"success\";\n\t\t\treturn {\n\t\t\t\treceipt: {\n\t\t\t\t\ttxid: normalizeTxid(tx.tx_id),\n\t\t\t\t\tstatus,\n\t\t\t\t\tblockHeight: tx.block_height,\n\t\t\t\t\t...decodeResultHex(tx.contract_call?.result_hex),\n\t\t\t\t\tevents: [],\n\t\t\t\t\traw: data,\n\t\t\t\t},\n\t\t\t\ttip,\n\t\t\t};\n\t\t},\n\t};\n}\n",
9
+ "import { BaseError } from \"./base.ts\";\n\nexport class TransactionError extends BaseError {\n\toverride name = \"TransactionError\";\n}\n\n/**\n * Rejection reasons a stacks-node returns from `POST /v2/transactions`.\n * Wire strings from stacks-core `MemPoolRejection::into_json`\n * (`stackslib/src/chainstate/stacks/db/blocks.rs`).\n */\nexport type TxRejectionReason =\n\t| \"Serialization\"\n\t| \"Deserialization\"\n\t| \"SignatureValidation\"\n\t| \"BadNonce\"\n\t| \"ConflictingNonceInMempool\"\n\t| \"TooMuchChaining\"\n\t| \"FeeTooLow\"\n\t| \"NotEnoughFunds\"\n\t| \"NoSuchContract\"\n\t| \"NoSuchPublicFunction\"\n\t| \"BadFunctionArgument\"\n\t| \"ContractAlreadyExists\"\n\t| \"BadTransactionVersion\"\n\t| \"TransferRecipientCannotEqualSender\"\n\t| \"TransferAmountMustBePositive\"\n\t| \"PoisonMicroblocksDoNotConflict\"\n\t| \"PoisonMicroblockHasUnknownPubKeyHash\"\n\t| \"PoisonMicroblockIsInvalid\"\n\t| \"BadAddressVersionByte\"\n\t| \"NoCoinbaseViaMempool\"\n\t| \"NoTenureChangeViaMempool\"\n\t| \"EstimatorError\"\n\t| \"TemporarilyBlacklisted\"\n\t| \"ServerFailureNoSuchChainTip\"\n\t| \"ServerFailureDatabase\"\n\t| \"ServerFailureOther\";\n\nexport class BroadcastError extends BaseError {\n\toverride name = \"BroadcastError\";\n\ttxid?: string;\n\t// `(string & {})` keeps forward-compat with reasons newer nodes may add\n\t// while preserving literal-union completions.\n\treason?: TxRejectionReason | (string & {});\n\t/** Node-provided detail; shape varies per reason (see stacks-core RPC docs). */\n\treasonData?: unknown;\n\n\tconstructor(\n\t\tmessage: string,\n\t\toptions?: {\n\t\t\tcause?: Error;\n\t\t\ttxid?: string;\n\t\t\treason?: string;\n\t\t\treasonData?: unknown;\n\t\t},\n\t) {\n\t\tsuper(message, options);\n\t\tthis.txid = options?.txid;\n\t\tthis.reason = options?.reason;\n\t\tthis.reasonData = options?.reasonData;\n\t}\n}\n\n/** The transaction was mined but its execution aborted (runtime error or failed post-condition). */\nexport class TransactionAbortedError extends BaseError {\n\toverride name = \"TransactionAbortedError\";\n\t/** The abort receipt (status, block info, raw source response). */\n\treceipt: unknown;\n\n\tconstructor(message: string, options: { receipt: unknown; cause?: Error }) {\n\t\tsuper(message, options);\n\t\tthis.receipt = options.receipt;\n\t}\n}\n\n/** The transaction left the mempool without being mined (dropped/replaced). */\nexport class TransactionDroppedError extends BaseError {\n\toverride name = \"TransactionDroppedError\";\n\ttxid: string;\n\n\tconstructor(message: string, options: { txid: string; cause?: Error }) {\n\t\tsuper(message, options);\n\t\tthis.txid = options.txid;\n\t}\n}\n\n/** waitForTransactionReceipt gave up before the tx reached the requested state. */\nexport class WaitForTransactionTimeoutError extends BaseError {\n\toverride name = \"WaitForTransactionTimeoutError\";\n\ttxid: string;\n\n\tconstructor(message: string, options: { txid: string; cause?: Error }) {\n\t\tsuper(message, options);\n\t\tthis.txid = options.txid;\n\t}\n}\n\nexport class SerializationError extends BaseError {\n\toverride name = \"SerializationError\";\n}\n\nexport class SigningError extends BaseError {\n\toverride name = \"SigningError\";\n}\n",
10
+ "import type { Client } from \"../../clients/types.ts\";\nimport {\n\tTransactionAbortedError,\n\tTransactionDroppedError,\n\tWaitForTransactionTimeoutError,\n} from \"../../errors/transaction.ts\";\nimport { getBlockHeight } from \"./getBlockHeight.ts\";\nimport {\n\ttype TransactionReceipt,\n\ttype TransactionStatusSource,\n\textendedApiSource,\n} from \"./txSources.ts\";\n\nexport type WaitForTransactionReceiptParams = {\n\ttxid: string;\n\t/** Anchor-block confirmations to wait for. Default 1 (mined). */\n\tconfirmations?: number;\n\t/** Give up after this many ms. Default 180_000 (3 min). */\n\ttimeout?: number;\n\t/** Delay between status polls, ms. Default 3_000. */\n\tpollingInterval?: number;\n\t/**\n\t * How long a tx may be unknown to the source before it counts as dropped,\n\t * ms. Covers broadcast propagation lag and canonical-only sources that\n\t * can't see the mempool. Default 30_000.\n\t */\n\tdroppedGracePeriod?: number;\n\t/** Where to read status from. Defaults to {@link extendedApiSource}. */\n\tsource?: TransactionStatusSource;\n};\n\nconst sleep = (ms: number) => new Promise((r) => setTimeout(r, ms));\n\n/**\n * Poll until a transaction is mined with N confirmations, then return its\n * receipt.\n *\n * Rejects with {@link TransactionAbortedError} when the tx mines but aborts\n * (`abort_by_response` / `abort_by_post_condition`) — the receipt is attached.\n * Rejects with {@link TransactionDroppedError} when the tx leaves the mempool\n * unmined or stays unknown past `droppedGracePeriod`, and\n * {@link WaitForTransactionTimeoutError} at `timeout`.\n *\n * Reorg-tolerant: every cycle re-reads the receipt (block height may change)\n * and recomputes confirmations from the current tip.\n */\nexport async function waitForTransactionReceipt(\n\tclient: Client,\n\tparams: WaitForTransactionReceiptParams,\n): Promise<TransactionReceipt> {\n\tconst {\n\t\ttxid,\n\t\tconfirmations = 1,\n\t\ttimeout = 180_000,\n\t\tpollingInterval = 3_000,\n\t\tdroppedGracePeriod = 30_000,\n\t} = params;\n\tconst source = params.source ?? extendedApiSource();\n\n\tconst startedAt = Date.now();\n\tlet unknownSince: number | null = null;\n\tlet everPending = false;\n\n\twhile (true) {\n\t\tconst snapshot = await source.get({ client, txid });\n\t\tconst receipt = snapshot.receipt;\n\n\t\tif (receipt === null) {\n\t\t\t// Unknown to the source: propagation lag, a canonical-only source\n\t\t\t// looking at a mempool tx, or a genuine drop. Only the grace clock\n\t\t\t// distinguishes them.\n\t\t\tunknownSince ??= Date.now();\n\t\t\tif (Date.now() - unknownSince >= droppedGracePeriod) {\n\t\t\t\tthrow new TransactionDroppedError(\n\t\t\t\t\teverPending\n\t\t\t\t\t\t? `Transaction ${txid} left the mempool without being mined`\n\t\t\t\t\t\t: `Transaction ${txid} was never observed by the status source`,\n\t\t\t\t\t{ txid },\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\tunknownSince = null;\n\n\t\t\tswitch (receipt.status) {\n\t\t\t\tcase \"dropped\":\n\t\t\t\t\tthrow new TransactionDroppedError(\n\t\t\t\t\t\t`Transaction ${txid} was dropped from the mempool`,\n\t\t\t\t\t\t{ txid },\n\t\t\t\t\t);\n\t\t\t\tcase \"abort_by_response\":\n\t\t\t\tcase \"abort_by_post_condition\":\n\t\t\t\t\tthrow new TransactionAbortedError(\n\t\t\t\t\t\t`Transaction ${txid} aborted (${receipt.status})`,\n\t\t\t\t\t\t{ receipt },\n\t\t\t\t\t);\n\t\t\t\tcase \"pending\":\n\t\t\t\t\teverPending = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"success\": {\n\t\t\t\t\tif (confirmations <= 1) return receipt;\n\t\t\t\t\tif (receipt.blockHeight !== undefined) {\n\t\t\t\t\t\tconst tip = snapshot.tip ?? (await getBlockHeight(client));\n\t\t\t\t\t\tif (tip - receipt.blockHeight + 1 >= confirmations) return receipt;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (Date.now() - startedAt >= timeout) {\n\t\t\tthrow new WaitForTransactionTimeoutError(\n\t\t\t\t`Timed out after ${timeout}ms waiting for transaction ${txid}`,\n\t\t\t\t{ txid },\n\t\t\t);\n\t\t}\n\t\tawait sleep(pollingInterval);\n\t}\n}\n",
11
+ "import type { TransactionReceipt } from \"../../actions/public/txSources.ts\";\nimport { waitForTransactionReceipt } from \"../../actions/public/waitForTransactionReceipt.ts\";\nimport type { Client } from \"../../clients/types.ts\";\nimport { BroadcastError } from \"../../errors/transaction.ts\";\nimport { getTransactionId } from \"../../transactions/signer.ts\";\nimport type { StacksTransaction } from \"../../transactions/types.ts\";\nimport { serializeTransaction } from \"../../transactions/wire/serialize.ts\";\nimport { bytesToHex } from \"../../utils/encoding.ts\";\n\nexport type SendTransactionParams = {\n\ttransaction: StacksTransaction;\n\tattachment?: Uint8Array | string;\n\t/**\n\t * Wait for the transaction to be mined before returning. `true` waits for\n\t * 1 confirmation; a number waits for that many. The receipt lands on the\n\t * result. Rejects if the tx aborts, is dropped, or the wait times out.\n\t */\n\twait?: boolean | number;\n};\n\nexport type SendTransactionResult = {\n\ttxid: string;\n\t/** Present when `wait` was requested. */\n\treceipt?: TransactionReceipt;\n};\n\n/** Broadcast a signed transaction to the network */\nexport async function sendTransaction(\n\tclient: Client,\n\tparams: SendTransactionParams,\n): Promise<SendTransactionResult> {\n\tconst hex = bytesToHex(serializeTransaction(params.transaction));\n\n\tconst body: Record<string, string> = { tx: hex };\n\tif (params.attachment) {\n\t\tbody.attachment =\n\t\t\ttypeof params.attachment === \"string\"\n\t\t\t\t? params.attachment\n\t\t\t\t: bytesToHex(params.attachment);\n\t}\n\n\tconst data = await client.request(\"/v2/transactions\", {\n\t\tmethod: \"POST\",\n\t\tbody,\n\t});\n\n\tif (data.error) {\n\t\tthrow new BroadcastError(data.reason ?? data.error, {\n\t\t\treason: data.reason,\n\t\t\treasonData: data.reason_data,\n\t\t\ttxid: data.txid ?? getTransactionId(params.transaction),\n\t\t});\n\t}\n\n\tconst txid =\n\t\ttypeof data === \"string\"\n\t\t\t? data.replace(/\"/g, \"\")\n\t\t\t: (data.txid ?? getTransactionId(params.transaction));\n\n\tif (params.wait) {\n\t\tconst confirmations = params.wait === true ? 1 : params.wait;\n\t\tconst receipt = await waitForTransactionReceipt(client, {\n\t\t\ttxid,\n\t\t\tconfirmations,\n\t\t});\n\t\treturn { txid, receipt };\n\t}\n\n\treturn { txid };\n}\n",
12
+ "import type { Client } from \"../../clients/types.ts\";\nimport { BroadcastError } from \"../../errors/transaction.ts\";\nimport type { StacksTransaction } from \"../../transactions/types.ts\";\nimport { getNonce } from \"../public/getNonce.ts\";\nimport { sendTransaction } from \"./sendTransaction.ts\";\n\n/**\n * Provides the confirmed on-chain nonce floor for an address.\n *\n * The default {@link jsonRpcSource} reads the configured node's `/v2/accounts`\n * endpoint — node-agnostic, no Hiro dependency. Other sources (mempool-aware,\n * first-party Index) can be swapped in without touching the manager.\n */\nexport type NonceManagerSource = {\n\tget(params: { client: Client; address: string }): Promise<bigint>;\n};\n\n/**\n * Holds per-address allocation state and hands out the next nonce.\n *\n * `reserve` MUST be atomic per `key`: two concurrent reservations for the same\n * key must never return the same value. The in-memory {@link memoryStore}\n * serializes with a per-key promise chain; a persisted store (Redis `INCR`,\n * Postgres `SELECT ... FOR UPDATE`) becomes the cross-process lock for the\n * multi-builder / smart-wallet-as-a-service case.\n */\nexport type NonceStore = {\n\t/**\n\t * Reserve the next nonce for `key`. `getFloor` reads the confirmed on-chain\n\t * nonce; it is only invoked when the store has no tracked value (cold start\n\t * or after {@link NonceStore.reset}).\n\t */\n\treserve(key: string, getFloor: () => Promise<bigint>): Promise<bigint>;\n\t/** Forget tracked state for `key` so the next reserve re-syncs from the floor. */\n\treset(key: string): void | Promise<void>;\n\t/**\n\t * Return the next nonce that {@link NonceStore.reserve} would hand out for\n\t * `key` WITHOUT consuming it, or `undefined` if `key` is untracked. Used by\n\t * {@link reconcileNonce} to detect drift. Optional — stores that omit it\n\t * simply opt out of reconciliation.\n\t */\n\tpeek?(key: string): Promise<bigint | undefined> | bigint | undefined;\n};\n\n/** Allocates mempool-safe sequential nonces across rapid broadcasts from one account. */\nexport type NonceManager = {\n\tconsume(params: { client: Client; address: string }): Promise<bigint>;\n\treset(params: { client: Client; address: string }): void | Promise<void>;\n\t/** Next nonce that {@link NonceManager.consume} would return without consuming it, or `undefined` if untracked. */\n\tpeek(params: {\n\t\tclient: Client;\n\t\taddress: string;\n\t}): Promise<bigint | undefined>;\n};\n\nexport type CreateNonceManagerParams = {\n\tsource?: NonceManagerSource;\n\tstore?: NonceStore;\n};\n\n/** Confirmed-nonce source backed by the configured node's `/v2/accounts` RPC (no Hiro dependency). */\nexport function jsonRpcSource(): NonceManagerSource {\n\treturn {\n\t\tget: ({ client, address }) => getNonce(client, { address }),\n\t};\n}\n\n/**\n * In-memory, single-process store. Tracks the next nonce per key and serializes\n * concurrent reservations with a per-key promise chain.\n *\n * Correct only within one process — swap in a persisted store for multi-process\n * deployments that share a signing key.\n */\nexport function memoryStore(): NonceStore {\n\tconst next = new Map<string, bigint>();\n\tconst locks = new Map<string, Promise<unknown>>();\n\n\tfunction withLock<T>(key: string, fn: () => Promise<T>): Promise<T> {\n\t\tconst prev = locks.get(key) ?? Promise.resolve();\n\t\t// Chain onto the prior reservation regardless of how it settled, so a\n\t\t// rejected reserve never wedges the key.\n\t\tconst run = prev.then(fn, fn);\n\t\tlocks.set(\n\t\t\tkey,\n\t\t\trun.catch(() => {}),\n\t\t);\n\t\treturn run;\n\t}\n\n\treturn {\n\t\treserve(key, getFloor) {\n\t\t\treturn withLock(key, async () => {\n\t\t\t\tlet current = next.get(key);\n\t\t\t\tif (current === undefined) current = await getFloor();\n\t\t\t\tnext.set(key, current + 1n);\n\t\t\t\treturn current;\n\t\t\t});\n\t\t},\n\t\treset(key) {\n\t\t\tnext.delete(key);\n\t\t},\n\t\tpeek(key) {\n\t\t\treturn next.get(key);\n\t\t},\n\t};\n}\n\nfunction nonceKey(client: Client, address: string): string {\n\treturn `${client.chain?.id ?? \"stacks\"}:${address}`;\n}\n\n/**\n * Create a nonce manager that floors on a confirmed-nonce {@link NonceManagerSource}\n * and increments a {@link NonceStore} on every {@link NonceManager.consume}.\n *\n * Defaults to {@link jsonRpcSource} + {@link memoryStore} — node-agnostic,\n * single-process, zero external dependencies.\n */\nexport function createNonceManager(\n\tparams: CreateNonceManagerParams = {},\n): NonceManager {\n\tconst source = params.source ?? jsonRpcSource();\n\tconst store = params.store ?? memoryStore();\n\n\treturn {\n\t\tconsume({ client, address }) {\n\t\t\treturn store.reserve(nonceKey(client, address), () =>\n\t\t\t\tsource.get({ client, address }),\n\t\t\t);\n\t\t},\n\t\treset({ client, address }) {\n\t\t\treturn store.reset(nonceKey(client, address));\n\t\t},\n\t\tasync peek({ client, address }) {\n\t\t\treturn store.peek?.(nonceKey(client, address));\n\t\t},\n\t};\n}\n\n/** Resolve the next nonce via the client's nonce manager, falling back to a confirmed read. */\nexport async function resolveNonce(\n\tclient: Client,\n\taddress: string,\n): Promise<bigint> {\n\tif (client.nonceManager)\n\t\treturn client.nonceManager.consume({ client, address });\n\treturn getNonce(client, { address });\n}\n\nexport type ReconcileNonceParams = {\n\tclient: Client;\n\taddress: string;\n\t/** Authoritative (ideally mempool-aware) source to reconcile against. */\n\tsource: NonceManagerSource;\n\t/**\n\t * Allow resetting DOWNWARD when the source's next nonce is below what the\n\t * store tracks — i.e. a previously-allocated tx is no longer pending or\n\t * confirmed (dropped/GC'd), so its nonce should be reused. Default `true`.\n\t *\n\t * Downward resets rely on `source` being current: with a go-forward mempool\n\t * source that lags broadcast, run reconciliation on an interval comfortably\n\t * longer than mempool propagation so a still-missing tx is genuinely dropped.\n\t * Set `false` for upward-only reconciliation (always safe).\n\t */\n\tdownward?: boolean;\n};\n\nexport type ReconcileNonceResult = {\n\t/** Whether the manager was reset (drift detected). */\n\treset: boolean;\n\t/** Authoritative next nonce from `source`. */\n\tauthoritative: bigint;\n\t/** Next nonce the store tracked, or `undefined` if untracked. */\n\ttracked: bigint | undefined;\n};\n\n/**\n * Reconcile a tracked nonce against an authoritative source, healing silent\n * drift that produces no broadcast error (a dropped/GC'd mempool tx leaving the\n * counter overshot, or the chain advancing past the local view).\n *\n * When the source's next nonce differs from the tracked value, the manager is\n * {@link NonceManager.reset}; the next `consume` re-seeds from `source`. A no-op\n * if the store is untracked or does not implement `peek`.\n */\nexport async function reconcileNonce(\n\tmanager: NonceManager,\n\tparams: ReconcileNonceParams,\n): Promise<ReconcileNonceResult> {\n\tconst { client, address, source } = params;\n\tconst downward = params.downward ?? true;\n\n\tconst authoritative = await source.get({ client, address });\n\tconst tracked = await manager.peek({ client, address });\n\n\tif (tracked === undefined || authoritative === tracked) {\n\t\treturn { reset: false, authoritative, tracked };\n\t}\n\tif (authoritative < tracked && !downward) {\n\t\treturn { reset: false, authoritative, tracked };\n\t}\n\n\tawait manager.reset({ client, address });\n\treturn { reset: true, authoritative, tracked };\n}\n\nexport type StartNonceReconcilerParams = {\n\tclient: Client;\n\taddresses: string[];\n\tsource: NonceManagerSource;\n\t/** Reconcile interval in ms. Default 60_000. Keep well above mempool propagation. */\n\tintervalMs?: number;\n\tdownward?: boolean;\n\t/** Per-address callback after each reconcile (observability). */\n\tonReconcile?: (address: string, result: ReconcileNonceResult) => void;\n\t/** Per-address error callback; reconciliation continues on the next tick. */\n\tonError?: (address: string, error: unknown) => void;\n};\n\n/**\n * Run {@link reconcileNonce} on a timer for a set of addresses.\n *\n * SINGLE-WRITER: run this in exactly ONE process. With a shared persisted store,\n * a reconciler resetting the counter while other workers allocate is racy — keep\n * reconciliation on one designated process and let the others only allocate.\n *\n * Returns a handle; call `stop()` to clear the timer.\n */\nexport function startNonceReconciler(\n\tmanager: NonceManager,\n\tparams: StartNonceReconcilerParams,\n): { stop: () => void } {\n\tconst { client, addresses, source } = params;\n\tconst intervalMs = params.intervalMs ?? 60_000;\n\n\tconst tick = async () => {\n\t\tfor (const address of addresses) {\n\t\t\ttry {\n\t\t\t\tconst result = await reconcileNonce(manager, {\n\t\t\t\t\tclient,\n\t\t\t\t\taddress,\n\t\t\t\t\tsource,\n\t\t\t\t\tdownward: params.downward,\n\t\t\t\t});\n\t\t\t\tparams.onReconcile?.(address, result);\n\t\t\t} catch (error) {\n\t\t\t\ttry {\n\t\t\t\t\tparams.onError?.(address, error);\n\t\t\t\t} catch {\n\t\t\t\t\t// A throwing onError callback must not abort the reconcile loop\n\t\t\t\t\t// or surface as an unhandled rejection on the interval timer.\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tconst timer = setInterval(tick, intervalMs);\n\t// Don't keep the event loop alive solely for reconciliation (Node/Bun).\n\t(timer as { unref?: () => void }).unref?.();\n\n\treturn {\n\t\tstop: () => clearInterval(timer),\n\t};\n}\n\n/** True when a broadcast was rejected for a nonce conflict (`ConflictingNonceInMempool`, `BadNonce`). */\nexport function isNonceConflictError(error: unknown): boolean {\n\tif (!(error instanceof BroadcastError)) return false;\n\tif (\n\t\terror.reason === \"ConflictingNonceInMempool\" ||\n\t\terror.reason === \"BadNonce\"\n\t) {\n\t\treturn true;\n\t}\n\t// Typed reason present but not nonce-related — trust it over the message\n\t// (e.g. a FeeTooLow message mentioning \"nonce\" must not trigger a reset).\n\tif (error.reason !== undefined) return false;\n\t// No structured reason (older nodes/proxies) — fall back to message match.\n\treturn error.message.toLowerCase().includes(\"nonce\");\n}\n\n/**\n * Broadcast a signed transaction; on a nonce-conflict rejection, reset the\n * manager so the next build re-syncs to the confirmed floor.\n */\nexport async function broadcastWithNonceReset(\n\tclient: Client,\n\tparams: { transaction: StacksTransaction; address: string },\n): Promise<string> {\n\ttry {\n\t\tconst result = await sendTransaction(client, {\n\t\t\ttransaction: params.transaction,\n\t\t});\n\t\treturn result.txid;\n\t} catch (error) {\n\t\tif (client.nonceManager && isNonceConflictError(error)) {\n\t\t\tawait client.nonceManager.reset({ client, address: params.address });\n\t\t}\n\t\tthrow error;\n\t}\n}\n",
13
+ "import type { ProviderAccount } from \"../../accounts/types.ts\";\nimport type { Account, Client } from \"../../clients/types.ts\";\nimport type { StacksTransaction } from \"../../transactions/types.ts\";\nimport { serializeTransaction } from \"../../transactions/wire/serialize.ts\";\nimport type { IntegerType } from \"../../utils/encoding.ts\";\nimport { intToBigInt } from \"../../utils/encoding.ts\";\nimport { estimateFee } from \"../public/estimateFee.ts\";\n\nexport function isProviderAccount(\n\taccount: Account,\n): account is ProviderAccount {\n\treturn account.type === \"provider\";\n}\n\n/**\n * Named fee tiers. `'low' | 'mid' | 'high'` map to the node's three fee\n * estimations; `'min'` is the node's minimum relay fee — 1 uSTX per byte of\n * the serialized transaction, computable offline.\n */\nexport type FeeTier = \"min\" | \"low\" | \"mid\" | \"high\";\n\n/** Fee input accepted by wallet actions: an explicit amount or a named tier. */\nexport type FeeParam = IntegerType | FeeTier;\n\nconst FEE_TIERS: readonly FeeTier[] = [\"min\", \"low\", \"mid\", \"high\"];\nconst TIER_INDEX = { low: 0, mid: 1, high: 2 } as const;\n\nexport function isFeeTier(fee: FeeParam | undefined): fee is FeeTier {\n\treturn typeof fee === \"string\" && FEE_TIERS.includes(fee as FeeTier);\n}\n\n/**\n * Minimum relay fee: 1 uSTX per byte of the serialized transaction. The fee\n * field is fixed-width (8 bytes), so the size — and therefore this floor — is\n * stable regardless of the fee value later set on the spending condition.\n */\nexport function minimumFee(transaction: StacksTransaction): bigint {\n\treturn BigInt(serializeTransaction(transaction).length);\n}\n\n/**\n * Resolve a fee param to a concrete amount. Numeric input passes through.\n * Tiers `'low' | 'mid' | 'high'` index the node's estimations (nearest\n * available when fewer than three are returned); `'min'` — and any estimation\n * failure (e.g. NoEstimateAvailable) — resolves to {@link minimumFee}, which\n * needs no network round-trip.\n */\nexport async function resolveFee(\n\tclient: Client,\n\ttransaction: StacksTransaction,\n\tfee: FeeParam | undefined,\n): Promise<bigint> {\n\tif (fee !== undefined && !isFeeTier(fee)) return intToBigInt(fee);\n\n\tconst tier = fee ?? \"mid\";\n\tif (tier === \"min\") return minimumFee(transaction);\n\n\ttry {\n\t\tconst estimates = await estimateFee(client, { transaction });\n\t\tconst pick = estimates[TIER_INDEX[tier]] ?? estimates[estimates.length - 1];\n\t\tif (pick) return BigInt(pick.fee);\n\t} catch {\n\t\t// Node could not produce an estimate — fall through to the relay floor.\n\t}\n\treturn minimumFee(transaction);\n}\n\n/** Set the resolved fee on an unsigned transaction's origin spending condition. */\nexport function setUnsignedFee(\n\ttransaction: StacksTransaction,\n\tfee: bigint,\n): void {\n\t// biome-ignore lint/suspicious/noExplicitAny: interop boundary or dynamic-shape value where typing adds friction without runtime safety\n\t(transaction.auth.spendingCondition as any).fee = fee;\n}\n\n/** Throw when a named fee tier is used with a provider (wallet) account. */\nexport function assertNoFeeTierForProvider(fee: FeeParam | undefined): void {\n\tif (isFeeTier(fee)) {\n\t\tthrow new Error(\n\t\t\t`Fee tier '${fee}' requires local signing; provider (wallet) accounts set their own fee`,\n\t\t);\n\t}\n}\n"
14
+ ],
15
+ "mappings": "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",
16
+ "debugId": "0308D1877DC5243864756E2164756E21",
17
+ "names": []
18
+ }
@@ -243,5 +243,19 @@ function c32addressDecode(c32addr) {
243
243
  return c32checkDecode(c32addr.slice(1));
244
244
  }
245
245
 
246
- //# debugId=5BCBB8B7E9A859DB64756E2164756E21
247
- //# sourceMappingURL=stacks-3y058qda.cjs.map
246
+ // src/utils/hash.ts
247
+ var import_legacy = require("@noble/hashes/legacy.js");
248
+ var import_sha22 = require("@noble/hashes/sha2.js");
249
+ var import_sha23 = require("@noble/hashes/sha2.js");
250
+ function hash160(input) {
251
+ return import_legacy.ripemd160(import_sha22.sha256(input));
252
+ }
253
+ function txidFromBytes(data) {
254
+ return bytesToHex(import_sha23.sha512_256(data));
255
+ }
256
+ function hashP2PKH(input) {
257
+ return bytesToHex(hash160(input));
258
+ }
259
+
260
+ //# debugId=3FA4EC7C19249DA464756E2164756E21
261
+ //# sourceMappingURL=stacks-fhzwsn5d.cjs.map