@1sat/actions 0.0.230 → 0.0.232

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 (97) hide show
  1. package/dist/apply/opnsRegister.d.ts +12 -5
  2. package/dist/apply/opnsRegister.d.ts.map +1 -1
  3. package/dist/apply/opnsRegister.js +68 -10
  4. package/dist/apply/opnsRegister.js.map +1 -1
  5. package/dist/funding/index.d.ts +1 -0
  6. package/dist/funding/index.d.ts.map +1 -1
  7. package/dist/funding/index.js +1 -1
  8. package/dist/funding/index.js.map +1 -1
  9. package/dist/funding/walletFunding.d.ts +47 -0
  10. package/dist/funding/walletFunding.d.ts.map +1 -0
  11. package/dist/funding/walletFunding.js +162 -0
  12. package/dist/funding/walletFunding.js.map +1 -0
  13. package/dist/funding/walletFunding.test.d.ts +2 -0
  14. package/dist/funding/walletFunding.test.d.ts.map +1 -0
  15. package/dist/funding/walletFunding.test.js +225 -0
  16. package/dist/funding/walletFunding.test.js.map +1 -0
  17. package/dist/index.d.ts +3 -0
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +7 -0
  20. package/dist/index.js.map +1 -1
  21. package/dist/mandala/deploy.d.ts +89 -0
  22. package/dist/mandala/deploy.d.ts.map +1 -0
  23. package/dist/mandala/deploy.js +226 -0
  24. package/dist/mandala/deploy.js.map +1 -0
  25. package/dist/mandala/deploy.test.d.ts +2 -0
  26. package/dist/mandala/deploy.test.d.ts.map +1 -0
  27. package/dist/mandala/deploy.test.js +281 -0
  28. package/dist/mandala/deploy.test.js.map +1 -0
  29. package/dist/mandala/index.d.ts +9 -0
  30. package/dist/mandala/index.d.ts.map +1 -0
  31. package/dist/mandala/index.js +17 -0
  32. package/dist/mandala/index.js.map +1 -0
  33. package/dist/mandala/receive.d.ts +58 -0
  34. package/dist/mandala/receive.d.ts.map +1 -0
  35. package/dist/mandala/receive.js +162 -0
  36. package/dist/mandala/receive.js.map +1 -0
  37. package/dist/mandala/send.d.ts +74 -0
  38. package/dist/mandala/send.d.ts.map +1 -0
  39. package/dist/mandala/send.js +313 -0
  40. package/dist/mandala/send.js.map +1 -0
  41. package/dist/mandala/send.test.d.ts +2 -0
  42. package/dist/mandala/send.test.d.ts.map +1 -0
  43. package/dist/mandala/send.test.js +515 -0
  44. package/dist/mandala/send.test.js.map +1 -0
  45. package/dist/mandala/tokenId.d.ts +21 -0
  46. package/dist/mandala/tokenId.d.ts.map +1 -0
  47. package/dist/mandala/tokenId.js +29 -0
  48. package/dist/mandala/tokenId.js.map +1 -0
  49. package/dist/metanet/brc78.d.ts +29 -0
  50. package/dist/metanet/brc78.d.ts.map +1 -0
  51. package/dist/metanet/brc78.js +60 -0
  52. package/dist/metanet/brc78.js.map +1 -0
  53. package/dist/metanet/deliver.d.ts +26 -0
  54. package/dist/metanet/deliver.d.ts.map +1 -0
  55. package/dist/metanet/deliver.js +34 -0
  56. package/dist/metanet/deliver.js.map +1 -0
  57. package/dist/metanet/envelope.d.ts +69 -0
  58. package/dist/metanet/envelope.d.ts.map +1 -0
  59. package/dist/metanet/envelope.js +86 -0
  60. package/dist/metanet/envelope.js.map +1 -0
  61. package/dist/metanet/envelope.test.d.ts +2 -0
  62. package/dist/metanet/envelope.test.d.ts.map +1 -0
  63. package/dist/metanet/envelope.test.js +106 -0
  64. package/dist/metanet/envelope.test.js.map +1 -0
  65. package/dist/metanet/inbox.d.ts +51 -0
  66. package/dist/metanet/inbox.d.ts.map +1 -0
  67. package/dist/metanet/inbox.js +100 -0
  68. package/dist/metanet/inbox.js.map +1 -0
  69. package/dist/metanet/index.d.ts +8 -0
  70. package/dist/metanet/index.d.ts.map +1 -0
  71. package/dist/metanet/index.js +9 -0
  72. package/dist/metanet/index.js.map +1 -0
  73. package/dist/metanet/receive.d.ts +50 -0
  74. package/dist/metanet/receive.d.ts.map +1 -0
  75. package/dist/metanet/receive.js +107 -0
  76. package/dist/metanet/receive.js.map +1 -0
  77. package/dist/metanet/relay.d.ts +37 -0
  78. package/dist/metanet/relay.d.ts.map +1 -0
  79. package/dist/metanet/relay.js +51 -0
  80. package/dist/metanet/relay.js.map +1 -0
  81. package/dist/opns/index.d.ts +65 -4
  82. package/dist/opns/index.d.ts.map +1 -1
  83. package/dist/opns/index.js +93 -34
  84. package/dist/opns/index.js.map +1 -1
  85. package/dist/opns/registerOpns.test.d.ts +2 -0
  86. package/dist/opns/registerOpns.test.d.ts.map +1 -0
  87. package/dist/opns/registerOpns.test.js +186 -0
  88. package/dist/opns/registerOpns.test.js.map +1 -0
  89. package/dist/payments/index.d.ts +32 -1
  90. package/dist/payments/index.d.ts.map +1 -1
  91. package/dist/payments/index.js +118 -6
  92. package/dist/payments/index.js.map +1 -1
  93. package/dist/payments/sendBsvHandle.test.d.ts +2 -0
  94. package/dist/payments/sendBsvHandle.test.d.ts.map +1 -0
  95. package/dist/payments/sendBsvHandle.test.js +478 -0
  96. package/dist/payments/sendBsvHandle.test.js.map +1 -0
  97. package/package.json +8 -7
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send.d.ts","sourceRoot":"","sources":["../../src/mandala/send.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAaH,OAAO,EAON,KAAK,cAAc,EACnB,MAAM,UAAU,CAAA;AAGjB,OAAO,KAAK,EAAE,MAAM,EAAiB,MAAM,aAAa,CAAA;AASxD,MAAM,WAAW,gBAAgB;IAChC,oFAAoF;IACpF,OAAO,EAAE,MAAM,CAAA;IACf,0BAA0B;IAC1B,MAAM,EAAE,MAAM,GAAG,MAAM,CAAA;IACvB,0DAA0D;IAC1D,WAAW,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;IAC/B;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,uDAAuD;IACvD,IAAI,CAAC,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,iBAAiB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,8BAA8B;IAC9B,EAAE,CAAC,EAAE,MAAM,EAAE,CAAA;IACb,6EAA6E;IAC7E,SAAS,CAAC,EAAE,UAAU,CAAA;IACtB,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;CACd;AAED,iDAAiD;AACjD,MAAM,WAAW,qBAAqB;IACrC,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,kBAAkB,CAAA;IAC5B,UAAU,EAAE,cAAc,CAAA;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,8EAA8E;IAC9E,YAAY,EAAE,UAAU,CAAA;CACxB;AAED,yDAAyD;AACzD,MAAM,WAAW,mBAAmB;IACnC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,yEAAyE;IACzE,IAAI,EAAE,UAAU,CAAA;IAChB,IAAI,EAAE,UAAU,CAAA;IAChB,OAAO,EAAE,qBAAqB,EAAE,CAAA;CAChC;AAwKD,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,gBAAgB,EAAE,iBAAiB,CAgLnE,CAAA"}
@@ -0,0 +1,313 @@
1
+ /**
2
+ * Mandala (BRC-162) send to a BRC-169 handle, delivered per BRC-232.
3
+ *
4
+ * 1. Resolve the handle (`resolveHandle`): identity key + messagebox.
5
+ * 2. When no single token output in `mandala <txid> <vout>` holds exactly `amount`,
6
+ * split first: an ordinary, broadcast action spending token outputs into
7
+ * an exact-`amount` output and a remainder, both back to the wallet under
8
+ * `mandalaProtocol(tokenId)` in the token's basket.
9
+ * 3. The protected send: one `createAction` spending only the exact output,
10
+ * with one output, the recipient's token output, locked to the key
11
+ * derived under `mandalaProtocol(tokenId)` with keyID
12
+ * `<derivationPrefix> <derivationSuffix>` (fresh random base64) and
13
+ * counterparty = the recipient. `noSend`, labels `mandala`,
14
+ * `mandala <txid> <vout>` and `p nosend expiry seconds <n>` (BRC-177; the wallet
15
+ * funds it). It is not broadcast: the recipient broadcasts by
16
+ * internalizing (BRC-169 §6.1, BRC-232 rule 4).
17
+ * 4. Delivery: a signed BRC-169 §7.3 envelope (DAG-CBOR, BRC-231 body over
18
+ * BRC-104) to the resolved messagebox, box `mandala_inbox`, `payment:
19
+ * null`. `content` is BRC-78 encryption (via `wallet.encrypt`) of a MIME
20
+ * entity of type `application/vnd.metanet.transaction+cbor` whose DAG-CBOR
21
+ * body is the BRC-232 delivery `{ txid, beef, outputs: [ basket insertion
22
+ * ] }`; `contentHash` is the SHA-256 of the MIME bytes.
23
+ *
24
+ * When delivery fails the result carries the error with `txid` and `tx`, so
25
+ * the caller can retry delivery or `abortAction` the send.
26
+ */
27
+ import { resolveHandle } from '@1sat/client';
28
+ import { Mandala } from '@1sat/templates';
29
+ import { MANDALA_INBOX, MANDALA_LABEL, METANET_SEND_EXPIRY_SECONDS, mandalaProtocol, mandalaTokenBasket, mandalaTokenLabel, } from '@1sat/types';
30
+ import { TRANSACTION_CBOR_CONTENT_TYPE, encodeMimeEntity } from '@1sat/utils';
31
+ import { Beef, P2PKH, PublicKey, Utils, } from '@bsv/sdk';
32
+ import { encode as dagCborEncode } from '@ipld/dag-cbor';
33
+ import { randomBase64, sendEnvelope } from '../metanet/deliver.js';
34
+ import { executeTrackedAction } from '../utils/createTrackedAction.js';
35
+ import { resolveDestination } from '../utils/resolveDestination.js';
36
+ import { mandalaTokenOf, mandalaTokenOutpoint, mandalaWireId, } from './tokenId.js';
37
+ /** Token amount a wallet output carries for `tokenId`, read from its locking script. */
38
+ function tokenAmount(beef, output, tokenId) {
39
+ const [txid, vout] = output.outpoint.split('.');
40
+ const script = beef.findTxid(txid)?.tx?.outputs[Number(vout)]?.lockingScript;
41
+ if (!script)
42
+ return undefined;
43
+ const token = Mandala.decode(script);
44
+ // Authority outputs (amount 0) are not spent by a send.
45
+ if (!token || token.amount === 0n)
46
+ return undefined;
47
+ return mandalaTokenOf(token, txid, Number(vout)) === tokenId
48
+ ? token.amount
49
+ : undefined;
50
+ }
51
+ /**
52
+ * A token value output back to the wallet, in the token's basket, with a
53
+ * fresh self-derived key; customInstructions carry only the derivation.
54
+ */
55
+ async function selfTokenOutput(ctx, tokenId, amount, outputDescription) {
56
+ const self = await resolveDestination(ctx, { counterparty: 'self' }, { protocolID: mandalaProtocol(tokenId), keyIDPrefix: 'mandala' });
57
+ return {
58
+ lockingScript: Mandala.value(mandalaWireId(tokenId), amount, {
59
+ lock: self.lockingScript,
60
+ })
61
+ .lock()
62
+ .toHex(),
63
+ satoshis: 1,
64
+ outputDescription,
65
+ basket: mandalaTokenBasket(tokenId),
66
+ customInstructions: JSON.stringify(self.customInstructions),
67
+ };
68
+ }
69
+ /** Spend wallet token outputs through the shared pipeline. */
70
+ function spendTokens(ctx, p) {
71
+ return executeTrackedAction(ctx.wallet, {
72
+ description: p.description,
73
+ labels: [...p.labels],
74
+ inputBEEF: p.inputBEEF,
75
+ inputs: p.inputs.map((i) => ({
76
+ outpoint: i.outpoint,
77
+ inputDescription: 'Mandala token input',
78
+ unlockingScriptLength: 108,
79
+ })),
80
+ outputs: p.outputs,
81
+ options: p.noSend
82
+ ? { noSend: true, randomizeOutputs: false }
83
+ : { randomizeOutputs: false },
84
+ }, undefined, p.inputBEEF, undefined, {
85
+ spends: p.inputs.map((i) => ({
86
+ outpoint: i.outpoint,
87
+ customInstructions: i.customInstructions,
88
+ })),
89
+ });
90
+ }
91
+ /**
92
+ * Split token inputs into an exact `amount` output (vout 0) and a remainder,
93
+ * both back to the wallet in the token's basket, broadcast normally. Returns
94
+ * the exact output as the next input, with BEEF that carries it.
95
+ */
96
+ async function splitExact(ctx, p) {
97
+ const exactOut = await selfTokenOutput(ctx, p.tokenId, p.amount, 'Mandala exact amount');
98
+ // No remainder when the inputs sum to `amount` (an amount-0 Mandala
99
+ // output would be an authority).
100
+ const rest = p.change > 0n
101
+ ? [await selfTokenOutput(ctx, p.tokenId, p.change, 'Mandala remainder')]
102
+ : [];
103
+ const result = await spendTokens(ctx, {
104
+ description: `Split ${p.amount} Mandala tokens`,
105
+ labels: p.labels,
106
+ inputs: p.inputs,
107
+ inputBEEF: p.inputBEEF,
108
+ outputs: [exactOut, ...rest],
109
+ noSend: false,
110
+ });
111
+ if (result.error)
112
+ return { error: `split-failed: ${result.error}` };
113
+ if (!result.txid || !result.tx)
114
+ return { error: 'split-failed: no-transaction' };
115
+ return {
116
+ input: {
117
+ outpoint: `${result.txid}.0`,
118
+ customInstructions: exactOut.customInstructions,
119
+ amount: p.amount,
120
+ },
121
+ beef: Beef.fromBinary(result.tx).toBinary(),
122
+ };
123
+ }
124
+ /**
125
+ * Build, sign and send the BRC-169 §7.3 envelope carrying a BRC-232 delivery
126
+ * in its encrypted `content`.
127
+ */
128
+ async function deliverEnvelope(ctx, resolution, p) {
129
+ const { memo, ...rest } = p.body;
130
+ const body = memo === undefined ? rest : { memo, ...rest };
131
+ const plaintext = Array.from(encodeMimeEntity(TRANSACTION_CBOR_CONTENT_TYPE, dagCborEncode(body)));
132
+ return sendEnvelope(ctx.wallet, resolution, {
133
+ senderIdentityKey: p.senderIdentityKey,
134
+ plaintext,
135
+ payment: null,
136
+ messageBox: MANDALA_INBOX,
137
+ });
138
+ }
139
+ export const sendMandala = {
140
+ meta: {
141
+ name: 'sendMandala',
142
+ description: "Send Mandala (BRC-162) tokens to a BRC-169 handle: a protected noSend transaction delivered (BRC-232) in a signed envelope to the handle's mandala_inbox; the recipient broadcasts",
143
+ category: 'tokens',
144
+ inputSchema: {
145
+ type: 'object',
146
+ properties: {
147
+ tokenId: {
148
+ type: 'string',
149
+ description: 'Token: the deploy outpoint, BRC-36 <txid>.<vout> (<txid>_<vout> accepted)',
150
+ },
151
+ amount: {
152
+ type: 'string',
153
+ description: 'Amount in raw units (string for bigint)',
154
+ },
155
+ destination: {
156
+ type: 'object',
157
+ description: '{ handle } — a BRC-169 handle (@handle@domain)',
158
+ },
159
+ expirySeconds: {
160
+ type: 'integer',
161
+ description: 'BRC-177 nosend expiry in seconds (default 31536000, one year)',
162
+ },
163
+ memo: {
164
+ type: 'string',
165
+ description: 'Optional memo carried in the delivery',
166
+ },
167
+ },
168
+ required: ['tokenId', 'amount', 'destination'],
169
+ },
170
+ },
171
+ async execute(ctx, input) {
172
+ try {
173
+ let tokenId;
174
+ try {
175
+ tokenId = mandalaTokenOutpoint(input.tokenId);
176
+ }
177
+ catch {
178
+ return { error: 'invalid-token: expected <txid>.<vout>' };
179
+ }
180
+ const amount = BigInt(input.amount);
181
+ if (amount <= 0n)
182
+ return { error: 'amount-must-be-positive' };
183
+ const basket = mandalaTokenBasket(tokenId);
184
+ // 1. Resolve the handle; the recipient key is derived from it.
185
+ const resolution = await resolveHandle(input.destination.handle);
186
+ const listed = await ctx.wallet.listOutputs({
187
+ basket,
188
+ include: 'entire transactions',
189
+ includeTags: true,
190
+ includeCustomInstructions: true,
191
+ limit: 10000,
192
+ });
193
+ if (!listed.BEEF)
194
+ return { error: 'no-beef-available' };
195
+ const beef = Beef.fromBinary(Array.from(listed.BEEF));
196
+ // Spendable token outputs, amounts read from the script.
197
+ const candidates = [];
198
+ for (const o of listed.outputs) {
199
+ const amt = tokenAmount(beef, o, tokenId);
200
+ if (amt === undefined)
201
+ continue;
202
+ candidates.push({
203
+ outpoint: o.outpoint,
204
+ customInstructions: o.customInstructions,
205
+ amount: amt,
206
+ });
207
+ }
208
+ const labels = [MANDALA_LABEL, mandalaTokenLabel(tokenId)];
209
+ // 2. The protected send spends exactly one output of exactly `amount`.
210
+ let exact = candidates.find((c) => c.amount === amount);
211
+ let inputBEEF = Array.from(listed.BEEF);
212
+ if (!exact) {
213
+ const inputs = [];
214
+ let totalIn = 0n;
215
+ for (const c of candidates) {
216
+ if (totalIn >= amount)
217
+ break;
218
+ inputs.push(c);
219
+ totalIn += c.amount;
220
+ }
221
+ if (totalIn < amount)
222
+ return { error: 'insufficient-tokens' };
223
+ const split = await splitExact(ctx, {
224
+ tokenId,
225
+ labels,
226
+ inputs,
227
+ inputBEEF,
228
+ amount,
229
+ change: totalIn - amount,
230
+ });
231
+ if ('error' in split)
232
+ return { error: split.error };
233
+ exact = split.input;
234
+ inputBEEF = split.beef;
235
+ }
236
+ // 3. The recipient's output, BRC-29-style derivation under the token's protocol.
237
+ const protocolID = mandalaProtocol(tokenId);
238
+ const keyID = `${randomBase64()} ${randomBase64()}`;
239
+ const { publicKey } = await ctx.wallet.getPublicKey({
240
+ protocolID,
241
+ keyID,
242
+ counterparty: resolution.identityKey,
243
+ });
244
+ const recipientOutput = {
245
+ lockingScript: Mandala.value(mandalaWireId(tokenId), amount, {
246
+ lock: new P2PKH().lock(PublicKey.fromString(publicKey).toAddress()),
247
+ })
248
+ .lock()
249
+ .toHex(),
250
+ satoshis: 1,
251
+ outputDescription: 'Mandala tokens',
252
+ };
253
+ const expiry = input.expirySeconds ?? METANET_SEND_EXPIRY_SECONDS;
254
+ const result = await spendTokens(ctx, {
255
+ description: `Send ${amount} Mandala tokens`,
256
+ labels: [...labels, `p nosend expiry seconds ${expiry}`],
257
+ inputs: [exact],
258
+ inputBEEF,
259
+ outputs: [recipientOutput],
260
+ noSend: true,
261
+ });
262
+ if (result.error)
263
+ return { error: result.error };
264
+ if (!result.txid || !result.tx)
265
+ return { error: 'no-transaction' };
266
+ // 4. Deliver.
267
+ const { publicKey: senderIdentityKey } = await ctx.wallet.getPublicKey({
268
+ identityKey: true,
269
+ });
270
+ let sent;
271
+ try {
272
+ sent = await deliverEnvelope(ctx, resolution, {
273
+ senderIdentityKey,
274
+ body: {
275
+ memo: input.memo,
276
+ txid: Uint8Array.from(Utils.toArray(result.txid, 'hex')),
277
+ beef: Uint8Array.from(result.tx),
278
+ outputs: [
279
+ {
280
+ outputIndex: 0,
281
+ protocol: 'basket insertion',
282
+ protocolID,
283
+ keyID,
284
+ counterparty: Uint8Array.from(Utils.toArray(senderIdentityKey, 'hex')),
285
+ },
286
+ ],
287
+ },
288
+ });
289
+ }
290
+ catch (error) {
291
+ // The send exists as a noSend action: return it so the caller can
292
+ // retry delivery or abortAction it.
293
+ return {
294
+ txid: result.txid,
295
+ tx: result.tx,
296
+ error: `delivery-failed: ${error instanceof Error ? error.message : String(error)}`,
297
+ };
298
+ }
299
+ return {
300
+ txid: result.txid,
301
+ tx: result.tx,
302
+ delivered: 'envelope',
303
+ messageId: sent.messageId,
304
+ };
305
+ }
306
+ catch (error) {
307
+ return {
308
+ error: error instanceof Error ? error.message : String(error),
309
+ };
310
+ }
311
+ },
312
+ };
313
+ //# sourceMappingURL=send.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send.js","sourceRoot":"","sources":["../../src/mandala/send.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=send.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send.test.d.ts","sourceRoot":"","sources":["../../src/mandala/send.test.ts"],"names":[],"mappings":""}