@sundaeswap/sprinkles 0.7.0 → 0.8.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 (95) hide show
  1. package/README.md +178 -181
  2. package/dist/cjs/Sprinkle/__tests__/builtin-actions.test.js +4 -4
  3. package/dist/cjs/Sprinkle/__tests__/builtin-actions.test.js.map +1 -1
  4. package/dist/cjs/Sprinkle/__tests__/cli-adapter.test.js +25 -3
  5. package/dist/cjs/Sprinkle/__tests__/cli-adapter.test.js.map +1 -1
  6. package/dist/cjs/Sprinkle/__tests__/fill-in-struct.test.js +15 -1
  7. package/dist/cjs/Sprinkle/__tests__/fill-in-struct.test.js.map +1 -1
  8. package/dist/cjs/Sprinkle/__tests__/mcp-adapter.test.js +7 -9
  9. package/dist/cjs/Sprinkle/__tests__/mcp-adapter.test.js.map +1 -1
  10. package/dist/cjs/Sprinkle/__tests__/native-script.test.js +390 -0
  11. package/dist/cjs/Sprinkle/__tests__/native-script.test.js.map +1 -0
  12. package/dist/cjs/Sprinkle/__tests__/utility-actions.test.js +367 -0
  13. package/dist/cjs/Sprinkle/__tests__/utility-actions.test.js.map +1 -0
  14. package/dist/cjs/Sprinkle/actions/builtin/addressbook-actions.js +164 -0
  15. package/dist/cjs/Sprinkle/actions/builtin/addressbook-actions.js.map +1 -0
  16. package/dist/cjs/Sprinkle/actions/builtin/index.js +60 -3
  17. package/dist/cjs/Sprinkle/actions/builtin/index.js.map +1 -1
  18. package/dist/cjs/Sprinkle/actions/builtin/native-script.js +139 -0
  19. package/dist/cjs/Sprinkle/actions/builtin/native-script.js.map +1 -0
  20. package/dist/cjs/Sprinkle/actions/builtin/utility-actions.js +218 -0
  21. package/dist/cjs/Sprinkle/actions/builtin/utility-actions.js.map +1 -0
  22. package/dist/cjs/Sprinkle/actions/cli-adapter.js +20 -2
  23. package/dist/cjs/Sprinkle/actions/cli-adapter.js.map +1 -1
  24. package/dist/cjs/Sprinkle/actions/index.js +12 -0
  25. package/dist/cjs/Sprinkle/actions/index.js.map +1 -1
  26. package/dist/cjs/Sprinkle/actions/mcp-adapter.js +146 -4
  27. package/dist/cjs/Sprinkle/actions/mcp-adapter.js.map +1 -1
  28. package/dist/cjs/Sprinkle/index.js +267 -5
  29. package/dist/cjs/Sprinkle/index.js.map +1 -1
  30. package/dist/cjs/Sprinkle/schemas.js +17 -1
  31. package/dist/cjs/Sprinkle/schemas.js.map +1 -1
  32. package/dist/esm/Sprinkle/__tests__/builtin-actions.test.js +4 -4
  33. package/dist/esm/Sprinkle/__tests__/builtin-actions.test.js.map +1 -1
  34. package/dist/esm/Sprinkle/__tests__/cli-adapter.test.js +25 -3
  35. package/dist/esm/Sprinkle/__tests__/cli-adapter.test.js.map +1 -1
  36. package/dist/esm/Sprinkle/__tests__/fill-in-struct.test.js +15 -1
  37. package/dist/esm/Sprinkle/__tests__/fill-in-struct.test.js.map +1 -1
  38. package/dist/esm/Sprinkle/__tests__/mcp-adapter.test.js +7 -9
  39. package/dist/esm/Sprinkle/__tests__/mcp-adapter.test.js.map +1 -1
  40. package/dist/esm/Sprinkle/__tests__/native-script.test.js +388 -0
  41. package/dist/esm/Sprinkle/__tests__/native-script.test.js.map +1 -0
  42. package/dist/esm/Sprinkle/__tests__/utility-actions.test.js +365 -0
  43. package/dist/esm/Sprinkle/__tests__/utility-actions.test.js.map +1 -0
  44. package/dist/esm/Sprinkle/actions/builtin/addressbook-actions.js +159 -0
  45. package/dist/esm/Sprinkle/actions/builtin/addressbook-actions.js.map +1 -0
  46. package/dist/esm/Sprinkle/actions/builtin/index.js +8 -3
  47. package/dist/esm/Sprinkle/actions/builtin/index.js.map +1 -1
  48. package/dist/esm/Sprinkle/actions/builtin/native-script.js +133 -0
  49. package/dist/esm/Sprinkle/actions/builtin/native-script.js.map +1 -0
  50. package/dist/esm/Sprinkle/actions/builtin/utility-actions.js +213 -0
  51. package/dist/esm/Sprinkle/actions/builtin/utility-actions.js.map +1 -0
  52. package/dist/esm/Sprinkle/actions/cli-adapter.js +20 -2
  53. package/dist/esm/Sprinkle/actions/cli-adapter.js.map +1 -1
  54. package/dist/esm/Sprinkle/actions/index.js +1 -1
  55. package/dist/esm/Sprinkle/actions/index.js.map +1 -1
  56. package/dist/esm/Sprinkle/actions/mcp-adapter.js +145 -5
  57. package/dist/esm/Sprinkle/actions/mcp-adapter.js.map +1 -1
  58. package/dist/esm/Sprinkle/index.js +259 -8
  59. package/dist/esm/Sprinkle/index.js.map +1 -1
  60. package/dist/esm/Sprinkle/schemas.js +16 -0
  61. package/dist/esm/Sprinkle/schemas.js.map +1 -1
  62. package/dist/types/Sprinkle/actions/builtin/addressbook-actions.d.ts +50 -0
  63. package/dist/types/Sprinkle/actions/builtin/addressbook-actions.d.ts.map +1 -0
  64. package/dist/types/Sprinkle/actions/builtin/index.d.ts +6 -2
  65. package/dist/types/Sprinkle/actions/builtin/index.d.ts.map +1 -1
  66. package/dist/types/Sprinkle/actions/builtin/native-script.d.ts +27 -0
  67. package/dist/types/Sprinkle/actions/builtin/native-script.d.ts.map +1 -0
  68. package/dist/types/Sprinkle/actions/builtin/utility-actions.d.ts +48 -0
  69. package/dist/types/Sprinkle/actions/builtin/utility-actions.d.ts.map +1 -0
  70. package/dist/types/Sprinkle/actions/cli-adapter.d.ts.map +1 -1
  71. package/dist/types/Sprinkle/actions/index.d.ts +2 -1
  72. package/dist/types/Sprinkle/actions/index.d.ts.map +1 -1
  73. package/dist/types/Sprinkle/actions/mcp-adapter.d.ts +24 -0
  74. package/dist/types/Sprinkle/actions/mcp-adapter.d.ts.map +1 -1
  75. package/dist/types/Sprinkle/index.d.ts +3 -1
  76. package/dist/types/Sprinkle/index.d.ts.map +1 -1
  77. package/dist/types/Sprinkle/schemas.d.ts +72 -0
  78. package/dist/types/Sprinkle/schemas.d.ts.map +1 -1
  79. package/dist/types/tsconfig.build.tsbuildinfo +1 -1
  80. package/package.json +1 -1
  81. package/src/Sprinkle/__tests__/builtin-actions.test.ts +4 -4
  82. package/src/Sprinkle/__tests__/cli-adapter.test.ts +24 -3
  83. package/src/Sprinkle/__tests__/fill-in-struct.test.ts +23 -1
  84. package/src/Sprinkle/__tests__/mcp-adapter.test.ts +7 -5
  85. package/src/Sprinkle/__tests__/native-script.test.ts +341 -0
  86. package/src/Sprinkle/__tests__/utility-actions.test.ts +348 -0
  87. package/src/Sprinkle/actions/builtin/addressbook-actions.ts +168 -0
  88. package/src/Sprinkle/actions/builtin/index.ts +41 -2
  89. package/src/Sprinkle/actions/builtin/native-script.ts +165 -0
  90. package/src/Sprinkle/actions/builtin/utility-actions.ts +285 -0
  91. package/src/Sprinkle/actions/cli-adapter.ts +18 -2
  92. package/src/Sprinkle/actions/index.ts +2 -1
  93. package/src/Sprinkle/actions/mcp-adapter.ts +179 -4
  94. package/src/Sprinkle/index.ts +261 -3
  95. package/src/Sprinkle/schemas.ts +20 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native-script.test.js","names":["_bunTest","require","_types","_interopRequireWildcard","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_defineProperty","_toPropertyKey","value","enumerable","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","provideScriptCalls","mockCompletedTx","toCbor","mock","module","Core","Ed25519KeyHashHex","h","Slot","HexBlob","s","ScriptPubkey","constructor","hash","ScriptAll","scripts","ScriptAny","ScriptNOfK","TimelockExpiry","slot","TimelockStart","NativeScript","fromCbor","hex","Error","__fromCbor","newScriptPubkey","sp","__type","newScriptAll","sa","newScriptAny","newScriptNOfK","sn","newTimelockExpiry","te","newTimelockStart","ts","Script","newNativeScript","ns","__nativeScript","repeat","toNativeScript","completeWithScripts","Promise","resolve","then","describe","test","result","expect","toEqual","toBe","toThrow","ActionError","err","code","keyHash","Signature","key_hash","AllOf","toHaveLength","AnyOf","AtLeast","required","Before","time","After","script_hash","makeTxBuilder","builder","provideScript","script","push","complete","tx","rejects","toMatchObject","expectedScriptHash","attempt","context","sprinkle","addressbook","settings","undefined"],"sources":["../../../../src/Sprinkle/__tests__/native-script.test.ts"],"sourcesContent":["import { describe, expect, test, mock } from \"bun:test\";\nimport { ActionError } from \"../actions/types.js\";\n\n// ---------------------------------------------------------------------------\n// Mocks — mirror the Blaze SDK surface used by native-script.ts\n// ---------------------------------------------------------------------------\n\nlet provideScriptCalls: any[] = [];\nconst mockCompletedTx = { toCbor: () => \"mock-tx-cbor\" };\n\nmock.module(\"@blaze-cardano/sdk\", () => ({\n Core: {\n Ed25519KeyHashHex: (h: string) => h,\n Slot: (n: number) => n,\n HexBlob: (s: string) => s,\n ScriptPubkey: class {\n hash: string;\n constructor(h: string) {\n this.hash = h;\n }\n },\n ScriptAll: class {\n scripts: any[];\n constructor(s: any[]) {\n this.scripts = s;\n }\n },\n ScriptAny: class {\n scripts: any[];\n constructor(s: any[]) {\n this.scripts = s;\n }\n },\n ScriptNOfK: class {\n scripts: any[];\n n: number;\n constructor(s: any[], n: number) {\n this.scripts = s;\n this.n = n;\n }\n },\n TimelockExpiry: class {\n slot: number;\n constructor(s: number) {\n this.slot = s;\n }\n },\n TimelockStart: class {\n slot: number;\n constructor(s: number) {\n this.slot = s;\n }\n },\n NativeScript: {\n fromCbor: (hex: string) => {\n if (hex === \"invalid\") throw new Error(\"Invalid CBOR\");\n return { __fromCbor: hex };\n },\n newScriptPubkey: (sp: any) => ({ __type: \"pubkey\", value: sp }),\n newScriptAll: (sa: any) => ({ __type: \"all\", value: sa }),\n newScriptAny: (sa: any) => ({ __type: \"any\", value: sa }),\n newScriptNOfK: (sn: any) => ({ __type: \"nofk\", value: sn }),\n newTimelockExpiry: (te: any) => ({ __type: \"timelockExpiry\", value: te }),\n newTimelockStart: (ts: any) => ({ __type: \"timelockStart\", value: ts }),\n },\n Script: {\n newNativeScript: (ns: any) => ({\n __nativeScript: ns,\n hash: () => {\n // Produce a deterministic hex hash from the native script content\n if (ns?.__type === \"pubkey\") return ns.value.hash;\n if (ns?.__fromCbor) return \"cbor\" + ns.__fromCbor;\n return \"0\".repeat(56);\n },\n }),\n },\n },\n}));\n\nconst { toNativeScript, completeWithScripts } = await import(\n \"../actions/builtin/native-script.js\"\n);\n\n// ---------------------------------------------------------------------------\n// toNativeScript — CBOR hex input\n// ---------------------------------------------------------------------------\n\ndescribe(\"toNativeScript — CBOR hex\", () => {\n test(\"converts valid CBOR hex string\", () => {\n const result = toNativeScript(\"82018200\");\n expect(result.__nativeScript).toEqual({ __fromCbor: \"82018200\" });\n expect(typeof result.hash).toBe(\"function\");\n });\n\n test(\"throws INVALID_NATIVE_SCRIPT for invalid CBOR\", () => {\n expect(() => toNativeScript(\"invalid\")).toThrow(ActionError);\n try {\n toNativeScript(\"invalid\");\n } catch (err: any) {\n expect(err.code).toBe(\"INVALID_NATIVE_SCRIPT\");\n }\n });\n});\n\n// ---------------------------------------------------------------------------\n// toNativeScript — MultisigScript JSON input\n// ---------------------------------------------------------------------------\n\ndescribe(\"toNativeScript — MultisigScript JSON\", () => {\n const keyHash = \"a\".repeat(56);\n\n test(\"converts Signature\", () => {\n const result = toNativeScript({ Signature: { key_hash: keyHash } });\n expect(result.__nativeScript.__type).toBe(\"pubkey\");\n expect(result.__nativeScript.value.hash).toBe(keyHash);\n });\n\n test(\"converts AllOf with nested scripts\", () => {\n const result = toNativeScript({\n AllOf: {\n scripts: [\n { Signature: { key_hash: keyHash } },\n { Signature: { key_hash: \"b\".repeat(56) } },\n ],\n },\n });\n expect(result.__nativeScript.__type).toBe(\"all\");\n expect(result.__nativeScript.value.scripts).toHaveLength(2);\n });\n\n test(\"converts AnyOf\", () => {\n const result = toNativeScript({\n AnyOf: {\n scripts: [{ Signature: { key_hash: keyHash } }],\n },\n });\n expect(result.__nativeScript.__type).toBe(\"any\");\n });\n\n test(\"converts AtLeast\", () => {\n const result = toNativeScript({\n AtLeast: {\n required: 2n,\n scripts: [\n { Signature: { key_hash: keyHash } },\n { Signature: { key_hash: \"b\".repeat(56) } },\n { Signature: { key_hash: \"c\".repeat(56) } },\n ],\n },\n });\n expect(result.__nativeScript.__type).toBe(\"nofk\");\n expect(result.__nativeScript.value.n).toBe(2);\n expect(result.__nativeScript.value.scripts).toHaveLength(3);\n });\n\n test(\"converts Before (TimelockExpiry)\", () => {\n const result = toNativeScript({ Before: { time: 1000n } });\n expect(result.__nativeScript.__type).toBe(\"timelockExpiry\");\n expect(result.__nativeScript.value.slot).toBe(1000);\n });\n\n test(\"converts After (TimelockStart)\", () => {\n const result = toNativeScript({ After: { time: 500n } });\n expect(result.__nativeScript.__type).toBe(\"timelockStart\");\n expect(result.__nativeScript.value.slot).toBe(500);\n });\n\n test(\"converts Script (script hash reference)\", () => {\n const result = toNativeScript({ Script: { script_hash: keyHash } });\n expect(result.__nativeScript.__type).toBe(\"pubkey\");\n expect(result.__nativeScript.value.hash).toBe(keyHash);\n });\n\n test(\"handles deeply nested structures\", () => {\n const result = toNativeScript({\n AllOf: {\n scripts: [\n {\n AtLeast: {\n required: 1n,\n scripts: [\n { Signature: { key_hash: keyHash } },\n {\n AnyOf: {\n scripts: [{ Signature: { key_hash: \"b\".repeat(56) } }],\n },\n },\n ],\n },\n },\n { After: { time: 100n } },\n ],\n },\n });\n expect(result.__nativeScript.__type).toBe(\"all\");\n expect(result.__nativeScript.value.scripts).toHaveLength(2);\n });\n});\n\n// ---------------------------------------------------------------------------\n// completeWithScripts\n// ---------------------------------------------------------------------------\n\ndescribe(\"completeWithScripts\", () => {\n function makeTxBuilder() {\n provideScriptCalls = [];\n const builder: any = {\n provideScript: (script: any) => {\n provideScriptCalls.push(script);\n return builder;\n },\n complete: async () => mockCompletedTx,\n };\n return builder;\n }\n\n test(\"completes without scripts when none provided\", async () => {\n const builder = makeTxBuilder();\n const tx = await completeWithScripts(builder);\n expect(tx).toBe(mockCompletedTx);\n expect(provideScriptCalls).toHaveLength(0);\n });\n\n test(\"completes without scripts when empty array provided\", async () => {\n const builder = makeTxBuilder();\n const tx = await completeWithScripts(builder, []);\n expect(tx).toBe(mockCompletedTx);\n expect(provideScriptCalls).toHaveLength(0);\n });\n\n test(\"attaches scripts before completing\", async () => {\n const builder = makeTxBuilder();\n const keyHash = \"a\".repeat(56);\n const tx = await completeWithScripts(builder, [\n { Signature: { key_hash: keyHash } },\n \"82018200\",\n ]);\n expect(tx).toBe(mockCompletedTx);\n expect(provideScriptCalls).toHaveLength(2);\n });\n\n test(\"propagates ActionError from invalid script input\", async () => {\n const builder = makeTxBuilder();\n await expect(\n completeWithScripts(builder, [\"invalid\"]),\n ).rejects.toMatchObject({ code: \"INVALID_NATIVE_SCRIPT\" });\n });\n\n test(\"retries with addressbook script on missing script hash error\", async () => {\n const keyHash = \"a\".repeat(56);\n const expectedScriptHash = keyHash;\n let attempt = 0;\n provideScriptCalls = [];\n const builder: any = {\n provideScript: (script: any) => {\n provideScriptCalls.push(script);\n return builder;\n },\n complete: async () => {\n attempt++;\n if (attempt === 1) {\n throw new Error(\n `complete: Could not resolve script hash ${expectedScriptHash}`,\n );\n }\n return mockCompletedTx;\n },\n };\n\n const context = {\n sprinkle: {\n addressbook: {\n \"my-multisig\": { Signature: { key_hash: keyHash } },\n },\n },\n settings: {},\n } as any;\n\n const tx = await completeWithScripts(builder, undefined, context);\n expect(tx).toBe(mockCompletedTx);\n expect(attempt).toBe(2);\n expect(provideScriptCalls).toHaveLength(1);\n });\n\n test(\"throws original error when script hash not in addressbook\", async () => {\n const builder: any = {\n provideScript: () => builder,\n complete: async () => {\n throw new Error(\"complete: Could not resolve script hash deadbeef1234\");\n },\n };\n\n const context = {\n sprinkle: {\n addressbook: {\n \"unrelated\": { Signature: { key_hash: \"b\".repeat(56) } },\n },\n },\n settings: {},\n } as any;\n\n await expect(\n completeWithScripts(builder, undefined, context),\n ).rejects.toThrow(\"Could not resolve script hash deadbeef1234\");\n });\n\n test(\"throws original error when no addressbook in context\", async () => {\n const builder: any = {\n provideScript: () => builder,\n complete: async () => {\n throw new Error(\"complete: Could not resolve script hash deadbeef1234\");\n },\n };\n\n await expect(\n completeWithScripts(builder, undefined, undefined),\n ).rejects.toThrow(\"Could not resolve script hash deadbeef1234\");\n });\n\n test(\"throws non-script errors without retry\", async () => {\n const builder: any = {\n provideScript: () => builder,\n complete: async () => {\n throw new Error(\"some other error\");\n },\n };\n\n const context = {\n sprinkle: {\n addressbook: {\n \"my-sig\": { Signature: { key_hash: \"a\".repeat(56) } },\n },\n },\n settings: {},\n } as any;\n\n await expect(\n completeWithScripts(builder, undefined, context),\n ).rejects.toThrow(\"some other error\");\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,367 @@
1
+ "use strict";
2
+
3
+ var _bunTest = require("bun:test");
4
+ var _types = require("../actions/types.js");
5
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
6
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
7
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
8
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
9
+ // ---------------------------------------------------------------------------
10
+ // Mocks
11
+ // ---------------------------------------------------------------------------
12
+
13
+ // Controllable mock state
14
+ let mockBlaze = {};
15
+ let mockIsHot = true;
16
+ let mockBlazeError = null;
17
+ _bunTest.mock.module("../actions/builtin/blaze-helper.js", () => ({
18
+ getBlazeFromContext: async () => {
19
+ if (mockBlazeError) throw mockBlazeError;
20
+ return mockBlaze;
21
+ },
22
+ isHotWallet: () => mockIsHot
23
+ }));
24
+
25
+ // Track calls to blaze transaction builder
26
+ let mintCalls = [];
27
+ let provideScriptCalls = [];
28
+ let payAssetsCalls = [];
29
+ let registerStakeCalls = [];
30
+
31
+ // Mock transaction returned by complete()
32
+ const mockCompletedTx = {
33
+ toCbor: () => "mock-tx-cbor-hex"
34
+ };
35
+
36
+ // Mock transaction builder chain
37
+ function makeTxBuilder() {
38
+ return {
39
+ addMint: (policyId, mints) => {
40
+ mintCalls.push({
41
+ policyId,
42
+ mints
43
+ });
44
+ return makeTxBuilder();
45
+ },
46
+ provideScript: script => {
47
+ provideScriptCalls.push(script);
48
+ return makeTxBuilder();
49
+ },
50
+ payAssets: (address, value) => {
51
+ payAssetsCalls.push({
52
+ address,
53
+ value
54
+ });
55
+ return makeTxBuilder();
56
+ },
57
+ addRegisterStake: credential => {
58
+ registerStakeCalls.push(credential);
59
+ return makeTxBuilder();
60
+ },
61
+ complete: async () => mockCompletedTx
62
+ };
63
+ }
64
+
65
+ // Mock address with payment credential
66
+ function makeMockAddress(hash = "abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234") {
67
+ return {
68
+ toBech32: () => "addr_test1qzmock",
69
+ asBase: () => ({
70
+ getPaymentCredential: () => ({
71
+ hash: {
72
+ toString: () => hash
73
+ }
74
+ })
75
+ })
76
+ };
77
+ }
78
+ _bunTest.mock.module("@blaze-cardano/sdk", () => ({
79
+ Core: {
80
+ Ed25519KeyHashHex: h => h,
81
+ ScriptPubkey: class ScriptPubkey {
82
+ constructor(h) {
83
+ _defineProperty(this, "hash", void 0);
84
+ this.hash = h;
85
+ }
86
+ },
87
+ Script: {
88
+ newNativeScript: ns => ({
89
+ hash: () => "mock-policy-id-hash"
90
+ })
91
+ },
92
+ NativeScript: {
93
+ newScriptPubkey: sp => sp
94
+ },
95
+ PolicyId: s => s,
96
+ AssetName: s => s,
97
+ toHex: buf => buf.toString("hex"),
98
+ Address: {
99
+ fromBech32: addr => {
100
+ if (addr === "invalid-address") throw new Error("Invalid bech32");
101
+ return {
102
+ toBech32: () => addr
103
+ };
104
+ }
105
+ },
106
+ TxCBOR: s => s,
107
+ Hash28ByteBase16: s => s,
108
+ Credential: {
109
+ fromCore: c => c
110
+ },
111
+ CredentialType: {
112
+ ScriptHash: 1
113
+ }
114
+ },
115
+ makeValue: (...args) => ({
116
+ __makeValueArgs: args
117
+ }),
118
+ Blaze: class {},
119
+ HotWallet: class {}
120
+ }));
121
+
122
+ // Import actions after mocks are set up
123
+ const {
124
+ mintToken,
125
+ simpleSend,
126
+ registerStakeScript
127
+ } = await Promise.resolve().then(() => _interopRequireWildcard(require("../actions/builtin/utility-actions.js")));
128
+
129
+ // Minimal context factory
130
+ function makeContext(settingsOverrides = {}) {
131
+ return {
132
+ sprinkle: {},
133
+ settings: {
134
+ network: "preview",
135
+ provider: {
136
+ type: "blockfrost",
137
+ apiKey: "test"
138
+ },
139
+ wallet: {
140
+ type: "hot",
141
+ mnemonic: "test words"
142
+ },
143
+ ...settingsOverrides
144
+ }
145
+ };
146
+ }
147
+
148
+ // ---------------------------------------------------------------------------
149
+ // mint-token
150
+ // ---------------------------------------------------------------------------
151
+
152
+ (0, _bunTest.describe)("mint-token", () => {
153
+ (0, _bunTest.beforeEach)(() => {
154
+ mockBlazeError = null;
155
+ mockIsHot = true;
156
+ mintCalls = [];
157
+ provideScriptCalls = [];
158
+ mockBlaze = {
159
+ wallet: {
160
+ getChangeAddress: async () => makeMockAddress()
161
+ },
162
+ newTransaction: () => makeTxBuilder()
163
+ };
164
+ });
165
+ (0, _bunTest.test)("has correct metadata", () => {
166
+ (0, _bunTest.expect)(mintToken.name).toBe("mint-token");
167
+ (0, _bunTest.expect)(mintToken.category).toBe("utility");
168
+ });
169
+ (0, _bunTest.test)("builds a mint transaction and returns policy info", async () => {
170
+ const ctx = makeContext();
171
+ const result = await mintToken.execute({
172
+ tokenName: "MyToken",
173
+ amount: "1000"
174
+ }, ctx);
175
+ (0, _bunTest.expect)(result.policyId).toBe("mock-policy-id-hash");
176
+ (0, _bunTest.expect)(result.tokenName).toBe("MyToken");
177
+ (0, _bunTest.expect)(result.amount).toBe("1000");
178
+ (0, _bunTest.expect)(result.txCbor).toBe("mock-tx-cbor-hex");
179
+ (0, _bunTest.expect)(mintCalls).toHaveLength(1);
180
+ (0, _bunTest.expect)(provideScriptCalls).toHaveLength(1);
181
+ });
182
+ (0, _bunTest.test)("throws COLD_WALLET when wallet is not hot", async () => {
183
+ mockIsHot = false;
184
+ const ctx = makeContext();
185
+ await (0, _bunTest.expect)(mintToken.execute({
186
+ tokenName: "T",
187
+ amount: "1"
188
+ }, ctx)).rejects.toMatchObject({
189
+ code: "COLD_WALLET"
190
+ });
191
+ });
192
+ (0, _bunTest.test)("throws WALLET_NOT_CONFIGURED when blaze init fails", async () => {
193
+ mockBlazeError = new _types.ActionError("Missing settings", "WALLET_NOT_CONFIGURED", {
194
+ missingFields: ["wallet"]
195
+ });
196
+ const ctx = makeContext();
197
+ await (0, _bunTest.expect)(mintToken.execute({
198
+ tokenName: "T",
199
+ amount: "1"
200
+ }, ctx)).rejects.toMatchObject({
201
+ code: "WALLET_NOT_CONFIGURED"
202
+ });
203
+ });
204
+ (0, _bunTest.test)("throws NO_ADDRESS when getChangeAddress fails", async () => {
205
+ mockBlaze = {
206
+ wallet: {
207
+ getChangeAddress: async () => {
208
+ throw new Error("no address");
209
+ }
210
+ },
211
+ newTransaction: () => makeTxBuilder()
212
+ };
213
+ const ctx = makeContext();
214
+ await (0, _bunTest.expect)(mintToken.execute({
215
+ tokenName: "T",
216
+ amount: "1"
217
+ }, ctx)).rejects.toMatchObject({
218
+ code: "NO_ADDRESS"
219
+ });
220
+ });
221
+ (0, _bunTest.test)("throws INVALID_ADDRESS when base address is null", async () => {
222
+ mockBlaze = {
223
+ wallet: {
224
+ getChangeAddress: async () => ({
225
+ toBech32: () => "addr_test1...",
226
+ asBase: () => null
227
+ })
228
+ },
229
+ newTransaction: () => makeTxBuilder()
230
+ };
231
+ const ctx = makeContext();
232
+ await (0, _bunTest.expect)(mintToken.execute({
233
+ tokenName: "T",
234
+ amount: "1"
235
+ }, ctx)).rejects.toMatchObject({
236
+ code: "INVALID_ADDRESS"
237
+ });
238
+ });
239
+ });
240
+
241
+ // ---------------------------------------------------------------------------
242
+ // simple-send
243
+ // ---------------------------------------------------------------------------
244
+
245
+ (0, _bunTest.describe)("simple-send", () => {
246
+ (0, _bunTest.beforeEach)(() => {
247
+ mockBlazeError = null;
248
+ mockIsHot = true;
249
+ payAssetsCalls = [];
250
+ mockBlaze = {
251
+ newTransaction: () => makeTxBuilder()
252
+ };
253
+ });
254
+ (0, _bunTest.test)("has correct metadata", () => {
255
+ (0, _bunTest.expect)(simpleSend.name).toBe("simple-send");
256
+ (0, _bunTest.expect)(simpleSend.category).toBe("wallet");
257
+ });
258
+ (0, _bunTest.test)("builds a lovelace-only send transaction", async () => {
259
+ const ctx = makeContext();
260
+ const result = await simpleSend.execute({
261
+ recipientAddress: "addr_test1qzrecipient",
262
+ lovelace: "5000000"
263
+ }, ctx);
264
+ (0, _bunTest.expect)(result.txCbor).toBe("mock-tx-cbor-hex");
265
+ (0, _bunTest.expect)(payAssetsCalls).toHaveLength(1);
266
+ });
267
+ (0, _bunTest.test)("builds a token send transaction", async () => {
268
+ const ctx = makeContext();
269
+ const result = await simpleSend.execute({
270
+ recipientAddress: "addr_test1qzrecipient",
271
+ policyId: "a".repeat(56),
272
+ assetName: "4d79546f6b656e",
273
+ tokenAmount: "100"
274
+ }, ctx);
275
+ (0, _bunTest.expect)(result.txCbor).toBe("mock-tx-cbor-hex");
276
+ (0, _bunTest.expect)(payAssetsCalls).toHaveLength(1);
277
+ });
278
+ (0, _bunTest.test)("throws INVALID_INPUT when neither lovelace nor token provided", async () => {
279
+ const ctx = makeContext();
280
+ await (0, _bunTest.expect)(simpleSend.execute({
281
+ recipientAddress: "addr_test1qzrecipient"
282
+ }, ctx)).rejects.toMatchObject({
283
+ code: "INVALID_INPUT"
284
+ });
285
+ });
286
+ (0, _bunTest.test)("throws INVALID_ADDRESS for bad recipient", async () => {
287
+ const ctx = makeContext();
288
+ await (0, _bunTest.expect)(simpleSend.execute({
289
+ recipientAddress: "invalid-address",
290
+ lovelace: "1000000"
291
+ }, ctx)).rejects.toMatchObject({
292
+ code: "INVALID_ADDRESS"
293
+ });
294
+ });
295
+ (0, _bunTest.test)("throws WALLET_NOT_CONFIGURED when blaze init fails", async () => {
296
+ mockBlazeError = new _types.ActionError("Missing settings", "WALLET_NOT_CONFIGURED", {
297
+ missingFields: ["wallet"]
298
+ });
299
+ const ctx = makeContext();
300
+ await (0, _bunTest.expect)(simpleSend.execute({
301
+ recipientAddress: "addr_test1qz",
302
+ lovelace: "1000000"
303
+ }, ctx)).rejects.toMatchObject({
304
+ code: "WALLET_NOT_CONFIGURED"
305
+ });
306
+ });
307
+ });
308
+
309
+ // ---------------------------------------------------------------------------
310
+ // register-stake-script
311
+ // ---------------------------------------------------------------------------
312
+
313
+ (0, _bunTest.describe)("register-stake-script", () => {
314
+ (0, _bunTest.beforeEach)(() => {
315
+ mockBlazeError = null;
316
+ mockIsHot = true;
317
+ registerStakeCalls = [];
318
+ mockBlaze = {
319
+ newTransaction: () => makeTxBuilder()
320
+ };
321
+ });
322
+ (0, _bunTest.test)("has correct metadata", () => {
323
+ (0, _bunTest.expect)(registerStakeScript.name).toBe("register-stake-script");
324
+ (0, _bunTest.expect)(registerStakeScript.category).toBe("utility");
325
+ });
326
+ (0, _bunTest.test)("builds a stake registration transaction", async () => {
327
+ const validHash = "a".repeat(56);
328
+ const ctx = makeContext();
329
+ const result = await registerStakeScript.execute({
330
+ scriptHash: validHash
331
+ }, ctx);
332
+ (0, _bunTest.expect)(result.txCbor).toBe("mock-tx-cbor-hex");
333
+ (0, _bunTest.expect)(registerStakeCalls).toHaveLength(1);
334
+ (0, _bunTest.expect)(registerStakeCalls[0]).toMatchObject({
335
+ hash: validHash,
336
+ type: 1 // ScriptHash
337
+ });
338
+ });
339
+ (0, _bunTest.test)("throws INVALID_SCRIPT_HASH for wrong length", async () => {
340
+ const ctx = makeContext();
341
+ await (0, _bunTest.expect)(registerStakeScript.execute({
342
+ scriptHash: "tooshort"
343
+ }, ctx)).rejects.toMatchObject({
344
+ code: "INVALID_SCRIPT_HASH"
345
+ });
346
+ });
347
+ (0, _bunTest.test)("throws INVALID_SCRIPT_HASH for non-hex characters", async () => {
348
+ const ctx = makeContext();
349
+ await (0, _bunTest.expect)(registerStakeScript.execute({
350
+ scriptHash: "g".repeat(56)
351
+ }, ctx)).rejects.toMatchObject({
352
+ code: "INVALID_SCRIPT_HASH"
353
+ });
354
+ });
355
+ (0, _bunTest.test)("throws WALLET_NOT_CONFIGURED when blaze init fails", async () => {
356
+ mockBlazeError = new _types.ActionError("Missing settings", "WALLET_NOT_CONFIGURED", {
357
+ missingFields: ["provider"]
358
+ });
359
+ const ctx = makeContext();
360
+ await (0, _bunTest.expect)(registerStakeScript.execute({
361
+ scriptHash: "a".repeat(56)
362
+ }, ctx)).rejects.toMatchObject({
363
+ code: "WALLET_NOT_CONFIGURED"
364
+ });
365
+ });
366
+ });
367
+ //# sourceMappingURL=utility-actions.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utility-actions.test.js","names":["_bunTest","require","_types","_interopRequireWildcard","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_defineProperty","_toPropertyKey","value","enumerable","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","mockBlaze","mockIsHot","mockBlazeError","mock","module","getBlazeFromContext","isHotWallet","mintCalls","provideScriptCalls","payAssetsCalls","registerStakeCalls","mockCompletedTx","toCbor","makeTxBuilder","addMint","policyId","mints","push","provideScript","script","payAssets","address","addRegisterStake","credential","complete","makeMockAddress","hash","toBech32","asBase","getPaymentCredential","toString","Core","Ed25519KeyHashHex","h","ScriptPubkey","constructor","Script","newNativeScript","ns","NativeScript","newScriptPubkey","sp","PolicyId","s","AssetName","toHex","buf","Address","fromBech32","addr","Error","TxCBOR","Hash28ByteBase16","Credential","fromCore","c","CredentialType","ScriptHash","makeValue","args","__makeValueArgs","Blaze","HotWallet","mintToken","simpleSend","registerStakeScript","Promise","resolve","then","makeContext","settingsOverrides","sprinkle","settings","network","provider","type","apiKey","wallet","mnemonic","describe","beforeEach","getChangeAddress","newTransaction","test","expect","name","toBe","category","ctx","result","execute","tokenName","amount","txCbor","toHaveLength","rejects","toMatchObject","code","ActionError","missingFields","recipientAddress","lovelace","repeat","assetName","tokenAmount","validHash","scriptHash"],"sources":["../../../../src/Sprinkle/__tests__/utility-actions.test.ts"],"sourcesContent":["import { describe, expect, test, mock, beforeEach } from \"bun:test\";\nimport { ActionError } from \"../actions/types.js\";\n\n// ---------------------------------------------------------------------------\n// Mocks\n// ---------------------------------------------------------------------------\n\n// Controllable mock state\nlet mockBlaze: any = {};\nlet mockIsHot = true;\nlet mockBlazeError: Error | null = null;\n\nmock.module(\"../actions/builtin/blaze-helper.js\", () => ({\n getBlazeFromContext: async () => {\n if (mockBlazeError) throw mockBlazeError;\n return mockBlaze;\n },\n isHotWallet: () => mockIsHot,\n}));\n\n// Track calls to blaze transaction builder\nlet mintCalls: Array<{ policyId: string; mints: Map<string, bigint> }> = [];\nlet provideScriptCalls: any[] = [];\nlet payAssetsCalls: Array<{ address: any; value: any }> = [];\nlet registerStakeCalls: any[] = [];\n\n// Mock transaction returned by complete()\nconst mockCompletedTx = {\n toCbor: () => \"mock-tx-cbor-hex\",\n};\n\n// Mock transaction builder chain\nfunction makeTxBuilder() {\n return {\n addMint: (policyId: string, mints: Map<string, bigint>) => {\n mintCalls.push({ policyId, mints });\n return makeTxBuilder();\n },\n provideScript: (script: any) => {\n provideScriptCalls.push(script);\n return makeTxBuilder();\n },\n payAssets: (address: any, value: any) => {\n payAssetsCalls.push({ address, value });\n return makeTxBuilder();\n },\n addRegisterStake: (credential: any) => {\n registerStakeCalls.push(credential);\n return makeTxBuilder();\n },\n complete: async () => mockCompletedTx,\n };\n}\n\n// Mock address with payment credential\nfunction makeMockAddress(hash = \"abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234\") {\n return {\n toBech32: () => \"addr_test1qzmock\",\n asBase: () => ({\n getPaymentCredential: () => ({\n hash: { toString: () => hash },\n }),\n }),\n };\n}\n\nmock.module(\"@blaze-cardano/sdk\", () => ({\n Core: {\n Ed25519KeyHashHex: (h: string) => h,\n ScriptPubkey: class {\n hash: string;\n constructor(h: string) { this.hash = h; }\n },\n Script: {\n newNativeScript: (ns: any) => ({\n hash: () => \"mock-policy-id-hash\",\n }),\n },\n NativeScript: {\n newScriptPubkey: (sp: any) => sp,\n },\n PolicyId: (s: string) => s,\n AssetName: (s: string) => s,\n toHex: (buf: Buffer) => buf.toString(\"hex\"),\n Address: {\n fromBech32: (addr: string) => {\n if (addr === \"invalid-address\") throw new Error(\"Invalid bech32\");\n return { toBech32: () => addr };\n },\n },\n TxCBOR: (s: string) => s,\n Hash28ByteBase16: (s: string) => s,\n Credential: {\n fromCore: (c: any) => c,\n },\n CredentialType: {\n ScriptHash: 1,\n },\n },\n makeValue: (...args: any[]) => ({ __makeValueArgs: args }),\n Blaze: class {},\n HotWallet: class {},\n}));\n\n// Import actions after mocks are set up\nconst { mintToken, simpleSend, registerStakeScript } = await import(\n \"../actions/builtin/utility-actions.js\"\n);\n\n// Minimal context factory\nfunction makeContext(settingsOverrides: Record<string, unknown> = {}) {\n return {\n sprinkle: {} as any,\n settings: {\n network: \"preview\",\n provider: { type: \"blockfrost\", apiKey: \"test\" },\n wallet: { type: \"hot\", mnemonic: \"test words\" },\n ...settingsOverrides,\n } as any,\n };\n}\n\n// ---------------------------------------------------------------------------\n// mint-token\n// ---------------------------------------------------------------------------\n\ndescribe(\"mint-token\", () => {\n beforeEach(() => {\n mockBlazeError = null;\n mockIsHot = true;\n mintCalls = [];\n provideScriptCalls = [];\n mockBlaze = {\n wallet: {\n getChangeAddress: async () => makeMockAddress(),\n },\n newTransaction: () => makeTxBuilder(),\n };\n });\n\n test(\"has correct metadata\", () => {\n expect(mintToken.name).toBe(\"mint-token\");\n expect(mintToken.category).toBe(\"utility\");\n });\n\n test(\"builds a mint transaction and returns policy info\", async () => {\n const ctx = makeContext();\n const result = await mintToken.execute(\n { tokenName: \"MyToken\", amount: \"1000\" },\n ctx,\n );\n expect(result.policyId).toBe(\"mock-policy-id-hash\");\n expect(result.tokenName).toBe(\"MyToken\");\n expect(result.amount).toBe(\"1000\");\n expect(result.txCbor).toBe(\"mock-tx-cbor-hex\");\n expect(mintCalls).toHaveLength(1);\n expect(provideScriptCalls).toHaveLength(1);\n });\n\n test(\"throws COLD_WALLET when wallet is not hot\", async () => {\n mockIsHot = false;\n const ctx = makeContext();\n await expect(\n mintToken.execute({ tokenName: \"T\", amount: \"1\" }, ctx),\n ).rejects.toMatchObject({ code: \"COLD_WALLET\" });\n });\n\n test(\"throws WALLET_NOT_CONFIGURED when blaze init fails\", async () => {\n mockBlazeError = new ActionError(\n \"Missing settings\",\n \"WALLET_NOT_CONFIGURED\",\n { missingFields: [\"wallet\"] },\n );\n const ctx = makeContext();\n await expect(\n mintToken.execute({ tokenName: \"T\", amount: \"1\" }, ctx),\n ).rejects.toMatchObject({ code: \"WALLET_NOT_CONFIGURED\" });\n });\n\n test(\"throws NO_ADDRESS when getChangeAddress fails\", async () => {\n mockBlaze = {\n wallet: {\n getChangeAddress: async () => {\n throw new Error(\"no address\");\n },\n },\n newTransaction: () => makeTxBuilder(),\n };\n const ctx = makeContext();\n await expect(\n mintToken.execute({ tokenName: \"T\", amount: \"1\" }, ctx),\n ).rejects.toMatchObject({ code: \"NO_ADDRESS\" });\n });\n\n test(\"throws INVALID_ADDRESS when base address is null\", async () => {\n mockBlaze = {\n wallet: {\n getChangeAddress: async () => ({\n toBech32: () => \"addr_test1...\",\n asBase: () => null,\n }),\n },\n newTransaction: () => makeTxBuilder(),\n };\n const ctx = makeContext();\n await expect(\n mintToken.execute({ tokenName: \"T\", amount: \"1\" }, ctx),\n ).rejects.toMatchObject({ code: \"INVALID_ADDRESS\" });\n });\n});\n\n// ---------------------------------------------------------------------------\n// simple-send\n// ---------------------------------------------------------------------------\n\ndescribe(\"simple-send\", () => {\n beforeEach(() => {\n mockBlazeError = null;\n mockIsHot = true;\n payAssetsCalls = [];\n mockBlaze = {\n newTransaction: () => makeTxBuilder(),\n };\n });\n\n test(\"has correct metadata\", () => {\n expect(simpleSend.name).toBe(\"simple-send\");\n expect(simpleSend.category).toBe(\"wallet\");\n });\n\n test(\"builds a lovelace-only send transaction\", async () => {\n const ctx = makeContext();\n const result = await simpleSend.execute(\n { recipientAddress: \"addr_test1qzrecipient\", lovelace: \"5000000\" },\n ctx,\n );\n expect(result.txCbor).toBe(\"mock-tx-cbor-hex\");\n expect(payAssetsCalls).toHaveLength(1);\n });\n\n test(\"builds a token send transaction\", async () => {\n const ctx = makeContext();\n const result = await simpleSend.execute(\n {\n recipientAddress: \"addr_test1qzrecipient\",\n policyId: \"a\".repeat(56),\n assetName: \"4d79546f6b656e\",\n tokenAmount: \"100\",\n },\n ctx,\n );\n expect(result.txCbor).toBe(\"mock-tx-cbor-hex\");\n expect(payAssetsCalls).toHaveLength(1);\n });\n\n test(\"throws INVALID_INPUT when neither lovelace nor token provided\", async () => {\n const ctx = makeContext();\n await expect(\n simpleSend.execute({ recipientAddress: \"addr_test1qzrecipient\" }, ctx),\n ).rejects.toMatchObject({ code: \"INVALID_INPUT\" });\n });\n\n test(\"throws INVALID_ADDRESS for bad recipient\", async () => {\n const ctx = makeContext();\n await expect(\n simpleSend.execute(\n { recipientAddress: \"invalid-address\", lovelace: \"1000000\" },\n ctx,\n ),\n ).rejects.toMatchObject({ code: \"INVALID_ADDRESS\" });\n });\n\n test(\"throws WALLET_NOT_CONFIGURED when blaze init fails\", async () => {\n mockBlazeError = new ActionError(\n \"Missing settings\",\n \"WALLET_NOT_CONFIGURED\",\n { missingFields: [\"wallet\"] },\n );\n const ctx = makeContext();\n await expect(\n simpleSend.execute(\n { recipientAddress: \"addr_test1qz\", lovelace: \"1000000\" },\n ctx,\n ),\n ).rejects.toMatchObject({ code: \"WALLET_NOT_CONFIGURED\" });\n });\n});\n\n// ---------------------------------------------------------------------------\n// register-stake-script\n// ---------------------------------------------------------------------------\n\ndescribe(\"register-stake-script\", () => {\n beforeEach(() => {\n mockBlazeError = null;\n mockIsHot = true;\n registerStakeCalls = [];\n mockBlaze = {\n newTransaction: () => makeTxBuilder(),\n };\n });\n\n test(\"has correct metadata\", () => {\n expect(registerStakeScript.name).toBe(\"register-stake-script\");\n expect(registerStakeScript.category).toBe(\"utility\");\n });\n\n test(\"builds a stake registration transaction\", async () => {\n const validHash = \"a\".repeat(56);\n const ctx = makeContext();\n const result = await registerStakeScript.execute(\n { scriptHash: validHash },\n ctx,\n );\n expect(result.txCbor).toBe(\"mock-tx-cbor-hex\");\n expect(registerStakeCalls).toHaveLength(1);\n expect(registerStakeCalls[0]).toMatchObject({\n hash: validHash,\n type: 1, // ScriptHash\n });\n });\n\n test(\"throws INVALID_SCRIPT_HASH for wrong length\", async () => {\n const ctx = makeContext();\n await expect(\n registerStakeScript.execute({ scriptHash: \"tooshort\" }, ctx),\n ).rejects.toMatchObject({ code: \"INVALID_SCRIPT_HASH\" });\n });\n\n test(\"throws INVALID_SCRIPT_HASH for non-hex characters\", async () => {\n const ctx = makeContext();\n await expect(\n registerStakeScript.execute({ scriptHash: \"g\".repeat(56) }, ctx),\n ).rejects.toMatchObject({ code: \"INVALID_SCRIPT_HASH\" });\n });\n\n test(\"throws WALLET_NOT_CONFIGURED when blaze init fails\", async () => {\n mockBlazeError = new ActionError(\n \"Missing settings\",\n \"WALLET_NOT_CONFIGURED\",\n { missingFields: [\"provider\"] },\n );\n const ctx = makeContext();\n await expect(\n registerStakeScript.execute({ scriptHash: \"a\".repeat(56) }, ctx),\n ).rejects.toMatchObject({ code: \"WALLET_NOT_CONFIGURED\" });\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,164 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.setAddressbookEntry = exports.listAddressbook = exports.getAddressbookEntry = exports.deleteAddressbookEntry = void 0;
7
+ var _typebox = require("@sinclair/typebox");
8
+ var _schemas = require("../../schemas.js");
9
+ var _types = require("../types.js");
10
+ var _nativeScript = require("./native-script.js");
11
+ /**
12
+ * Built-in addressbook actions for managing named native scripts.
13
+ *
14
+ * The addressbook stores MultisigScript entries by name in the profile,
15
+ * allowing them to be reused across actions and automatically resolved
16
+ * by script hash during transaction building.
17
+ */
18
+
19
+ /**
20
+ * `list-addressbook` -- List all entries in the addressbook.
21
+ */
22
+ const listAddressbook = exports.listAddressbook = {
23
+ name: "list-addressbook",
24
+ description: "List all named native scripts in the addressbook.",
25
+ category: "addressbook",
26
+ inputSchema: _typebox.Type.Object({}),
27
+ outputSchema: _typebox.Type.Object({
28
+ entries: _typebox.Type.Array(_typebox.Type.Object({
29
+ name: _typebox.Type.String(),
30
+ scriptHash: _typebox.Type.String(),
31
+ script: _schemas.MultisigScript
32
+ }))
33
+ }),
34
+ execute: async (_input, context) => {
35
+ const addressbook = context.sprinkle.addressbook ?? {};
36
+ const entries = [];
37
+ for (const [name, ms] of Object.entries(addressbook)) {
38
+ try {
39
+ const script = (0, _nativeScript.toNativeScript)(ms);
40
+ entries.push({
41
+ name,
42
+ scriptHash: script.hash(),
43
+ script: ms
44
+ });
45
+ } catch {
46
+ // Include entries even if hash computation fails
47
+ entries.push({
48
+ name,
49
+ scriptHash: "unknown",
50
+ script: ms
51
+ });
52
+ }
53
+ }
54
+ return {
55
+ entries
56
+ };
57
+ }
58
+ };
59
+
60
+ /**
61
+ * `set-addressbook-entry` -- Add or update a named native script in the addressbook.
62
+ */
63
+ const setAddressbookEntry = exports.setAddressbookEntry = {
64
+ name: "set-addressbook-entry",
65
+ description: "Add or update a named native script in the addressbook. Accepts a MultisigScript JSON structure.",
66
+ category: "addressbook",
67
+ inputSchema: _typebox.Type.Object({
68
+ name: _typebox.Type.String({
69
+ minLength: 1,
70
+ description: "Name for this addressbook entry"
71
+ }),
72
+ script: _schemas.MultisigScript
73
+ }),
74
+ outputSchema: _typebox.Type.Object({
75
+ name: _typebox.Type.String(),
76
+ scriptHash: _typebox.Type.String({
77
+ description: "Computed script hash"
78
+ })
79
+ }),
80
+ execute: async (input, context) => {
81
+ // Validate the script can be converted
82
+ const blazeScript = (0, _nativeScript.toNativeScript)(input.script);
83
+ const scriptHash = blazeScript.hash();
84
+ context.sprinkle.addressbook[input.name] = input.script;
85
+ context.sprinkle.saveSettings();
86
+ return {
87
+ name: input.name,
88
+ scriptHash
89
+ };
90
+ }
91
+ };
92
+
93
+ /**
94
+ * `delete-addressbook-entry` -- Remove a named native script from the addressbook.
95
+ */
96
+ const deleteAddressbookEntry = exports.deleteAddressbookEntry = {
97
+ name: "delete-addressbook-entry",
98
+ description: "Remove a named native script from the addressbook.",
99
+ category: "addressbook",
100
+ inputSchema: _typebox.Type.Object({
101
+ name: _typebox.Type.String({
102
+ minLength: 1,
103
+ description: "Name of the addressbook entry to delete"
104
+ })
105
+ }),
106
+ outputSchema: _typebox.Type.Object({
107
+ deleted: _typebox.Type.Boolean(),
108
+ name: _typebox.Type.String()
109
+ }),
110
+ execute: async (input, context) => {
111
+ if (!(input.name in context.sprinkle.addressbook)) {
112
+ throw new _types.ActionError(`Addressbook entry "${input.name}" not found.`, "NOT_FOUND", {
113
+ name: input.name
114
+ });
115
+ }
116
+ delete context.sprinkle.addressbook[input.name];
117
+ context.sprinkle.saveSettings();
118
+ return {
119
+ deleted: true,
120
+ name: input.name
121
+ };
122
+ }
123
+ };
124
+
125
+ /**
126
+ * `get-addressbook-entry` -- Get a specific named native script from the addressbook.
127
+ */
128
+ const getAddressbookEntry = exports.getAddressbookEntry = {
129
+ name: "get-addressbook-entry",
130
+ description: "Get a specific named native script from the addressbook.",
131
+ category: "addressbook",
132
+ inputSchema: _typebox.Type.Object({
133
+ name: _typebox.Type.String({
134
+ minLength: 1,
135
+ description: "Name of the addressbook entry to retrieve"
136
+ })
137
+ }),
138
+ outputSchema: _typebox.Type.Object({
139
+ name: _typebox.Type.String(),
140
+ scriptHash: _typebox.Type.String(),
141
+ script: _schemas.MultisigScript
142
+ }),
143
+ execute: async (input, context) => {
144
+ const ms = context.sprinkle.addressbook[input.name];
145
+ if (!ms) {
146
+ throw new _types.ActionError(`Addressbook entry "${input.name}" not found.`, "NOT_FOUND", {
147
+ name: input.name
148
+ });
149
+ }
150
+ let scriptHash = "unknown";
151
+ try {
152
+ const blazeScript = (0, _nativeScript.toNativeScript)(ms);
153
+ scriptHash = blazeScript.hash();
154
+ } catch {
155
+ // Return entry even if hash computation fails
156
+ }
157
+ return {
158
+ name: input.name,
159
+ scriptHash,
160
+ script: ms
161
+ };
162
+ }
163
+ };
164
+ //# sourceMappingURL=addressbook-actions.js.map