@1sat/actions 0.0.230 → 0.0.231

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 (73) 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 +2 -0
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +4 -0
  20. package/dist/index.js.map +1 -1
  21. package/dist/mandala/brc78.d.ts +29 -0
  22. package/dist/mandala/brc78.d.ts.map +1 -0
  23. package/dist/mandala/brc78.js +60 -0
  24. package/dist/mandala/brc78.js.map +1 -0
  25. package/dist/mandala/deploy.d.ts +89 -0
  26. package/dist/mandala/deploy.d.ts.map +1 -0
  27. package/dist/mandala/deploy.js +226 -0
  28. package/dist/mandala/deploy.js.map +1 -0
  29. package/dist/mandala/deploy.test.d.ts +2 -0
  30. package/dist/mandala/deploy.test.d.ts.map +1 -0
  31. package/dist/mandala/deploy.test.js +281 -0
  32. package/dist/mandala/deploy.test.js.map +1 -0
  33. package/dist/mandala/envelope.d.ts +69 -0
  34. package/dist/mandala/envelope.d.ts.map +1 -0
  35. package/dist/mandala/envelope.js +86 -0
  36. package/dist/mandala/envelope.js.map +1 -0
  37. package/dist/mandala/envelope.test.d.ts +2 -0
  38. package/dist/mandala/envelope.test.d.ts.map +1 -0
  39. package/dist/mandala/envelope.test.js +106 -0
  40. package/dist/mandala/envelope.test.js.map +1 -0
  41. package/dist/mandala/index.d.ts +10 -0
  42. package/dist/mandala/index.d.ts.map +1 -0
  43. package/dist/mandala/index.js +18 -0
  44. package/dist/mandala/index.js.map +1 -0
  45. package/dist/mandala/receive.d.ts +46 -0
  46. package/dist/mandala/receive.d.ts.map +1 -0
  47. package/dist/mandala/receive.js +218 -0
  48. package/dist/mandala/receive.js.map +1 -0
  49. package/dist/mandala/relay.d.ts +36 -0
  50. package/dist/mandala/relay.d.ts.map +1 -0
  51. package/dist/mandala/relay.js +50 -0
  52. package/dist/mandala/relay.js.map +1 -0
  53. package/dist/mandala/send.d.ts +74 -0
  54. package/dist/mandala/send.d.ts.map +1 -0
  55. package/dist/mandala/send.js +327 -0
  56. package/dist/mandala/send.js.map +1 -0
  57. package/dist/mandala/send.test.d.ts +2 -0
  58. package/dist/mandala/send.test.d.ts.map +1 -0
  59. package/dist/mandala/send.test.js +515 -0
  60. package/dist/mandala/send.test.js.map +1 -0
  61. package/dist/mandala/tokenId.d.ts +21 -0
  62. package/dist/mandala/tokenId.d.ts.map +1 -0
  63. package/dist/mandala/tokenId.js +29 -0
  64. package/dist/mandala/tokenId.js.map +1 -0
  65. package/dist/opns/index.d.ts +65 -4
  66. package/dist/opns/index.d.ts.map +1 -1
  67. package/dist/opns/index.js +93 -34
  68. package/dist/opns/index.js.map +1 -1
  69. package/dist/opns/registerOpns.test.d.ts +2 -0
  70. package/dist/opns/registerOpns.test.d.ts.map +1 -0
  71. package/dist/opns/registerOpns.test.js +186 -0
  72. package/dist/opns/registerOpns.test.js.map +1 -0
  73. package/package.json +8 -7
@@ -0,0 +1,281 @@
1
+ import { afterEach, describe, expect, test } from 'bun:test';
2
+ import { Mandala } from '@1sat/templates';
3
+ import { MANDALA_DEPLOY_PROTOCOL, MANDALA_LABEL, MANDALA_TOPIC, mandalaProtocol, mandalaTokenBasket, mandalaTokenLabel, parseMandalaName, } from '@1sat/types';
4
+ import { LockingScript, MerklePath, P2PKH, PrivateKey, ProtoWallet, PublicKey, Transaction, UnlockingScript, } from '@bsv/sdk';
5
+ import { deployMandala, fileMandalaDeploy } from './deploy.js';
6
+ const proto = new ProtoWallet(PrivateKey.fromHex('01'.repeat(32)));
7
+ /** Fake wallet: createAction builds the outputs into a real tx; internalize is recorded. */
8
+ function setup() {
9
+ const created = [];
10
+ const internalized = [];
11
+ const wallet = {
12
+ getPublicKey: (a) => proto.getPublicKey(a),
13
+ createAction: async (args) => {
14
+ created.push(args);
15
+ const parent = new Transaction();
16
+ parent.addInput({
17
+ sourceTXID: '11'.repeat(32),
18
+ sourceOutputIndex: 0,
19
+ unlockingScript: new UnlockingScript(),
20
+ sequence: 0xffffffff,
21
+ });
22
+ parent.addOutput({
23
+ lockingScript: new P2PKH().lock(PrivateKey.fromHex('05'.repeat(32)).toPublicKey().toAddress()),
24
+ satoshis: 100_000,
25
+ });
26
+ parent.merklePath = new MerklePath(100, [
27
+ [{ offset: 0, hash: parent.id('hex'), txid: true }],
28
+ ]);
29
+ const tx = new Transaction();
30
+ tx.addInput({
31
+ sourceTransaction: parent,
32
+ sourceOutputIndex: 0,
33
+ unlockingScript: new UnlockingScript(),
34
+ sequence: 0xffffffff,
35
+ });
36
+ for (const o of args.outputs ?? []) {
37
+ tx.addOutput({
38
+ lockingScript: LockingScript.fromHex(o.lockingScript),
39
+ satoshis: o.satoshis,
40
+ });
41
+ }
42
+ return { txid: tx.id('hex'), tx: tx.toAtomicBEEF() };
43
+ },
44
+ internalizeAction: async (args) => {
45
+ internalized.push(args);
46
+ return { accepted: true };
47
+ },
48
+ };
49
+ const ctx = {
50
+ wallet: wallet,
51
+ chain: 'main',
52
+ isBaseWallet: true,
53
+ };
54
+ return { ctx, created, internalized };
55
+ }
56
+ /** The P2PKH the wallet derives under MANDALA_DEPLOY_PROTOCOL for this keyID. */
57
+ async function derivedLock(ci) {
58
+ const { publicKey } = await proto.getPublicKey({
59
+ protocolID: MANDALA_DEPLOY_PROTOCOL,
60
+ keyID: ci.keyID,
61
+ counterparty: 'self',
62
+ forSelf: true,
63
+ });
64
+ return new P2PKH().lock(PublicKey.fromString(publicKey).toAddress());
65
+ }
66
+ function expectFiling(created, internalized, txid) {
67
+ // one createAction: deploy at vout 0, label `mandala`, derivation-only CI
68
+ expect(created).toHaveLength(1);
69
+ expect(created[0].options?.randomizeOutputs).toBe(false);
70
+ expect(created[0].labels).toEqual([MANDALA_LABEL]);
71
+ expect(created[0].outputs).toHaveLength(1);
72
+ // untracked: an output cannot later be moved out of a basket
73
+ expect(created[0].outputs?.[0].basket).toBeUndefined();
74
+ const ci = JSON.parse(created[0].outputs?.[0].customInstructions ?? '{}');
75
+ expect(Object.keys(ci).sort()).toEqual(['keyID', 'protocolID']);
76
+ // deploy key: [2, 'mandala deploy'] (txid unknown at derivation time)
77
+ expect(ci.protocolID).toEqual([2, 'mandala deploy']);
78
+ expect(ci.keyID).toStartWith('mandala-deploy-');
79
+ // one internalizeAction on the same tx: vout 0 into the per-token basket
80
+ expect(internalized).toHaveLength(1);
81
+ const int = internalized[0];
82
+ expect(Transaction.fromAtomicBEEF(int.tx).id('hex')).toBe(txid);
83
+ expect(int.labels).toEqual([MANDALA_LABEL, `mandala ${txid} 0`]);
84
+ expect(int.labels).toContain(mandalaTokenLabel({ txid, vout: 0 }));
85
+ expect(int.outputs).toHaveLength(1);
86
+ expect(int.outputs[0].outputIndex).toBe(0);
87
+ expect(int.outputs[0].protocol).toBe('basket insertion');
88
+ const remit = int.outputs[0].insertionRemittance;
89
+ expect(remit?.basket).toBe(`mandala ${txid} 0`);
90
+ expect(remit?.basket).toBe(mandalaTokenBasket(`${txid}_0`));
91
+ expect(remit?.customInstructions).toBe(created[0].outputs?.[0].customInstructions);
92
+ return { ci, tx: Transaction.fromAtomicBEEF(int.tx) };
93
+ }
94
+ describe('deployMandala', () => {
95
+ test('fixed supply: createAction + internalize into the per-token basket, tokenId = txid', async () => {
96
+ const { ctx, created, internalized } = setup();
97
+ const res = await deployMandala.execute(ctx, {
98
+ amount: '21000000',
99
+ symbol: 'GOLD',
100
+ decimals: 8,
101
+ });
102
+ expect(res.error).toBeUndefined();
103
+ expect(res.txid).toMatch(/^[0-9a-f]{64}$/);
104
+ expect(res.tokenId).toBe(`${res.txid}.0`);
105
+ expect(res.tx).toBeDefined();
106
+ expect(created[0].options?.noSend).toBeUndefined();
107
+ const { ci, tx } = expectFiling(created, internalized, res.txid);
108
+ const expected = Mandala.deployValue(21000000n, {
109
+ lock: await derivedLock(ci),
110
+ payload: { sym: 'GOLD', dec: 8 },
111
+ });
112
+ expect(created[0].outputs?.[0].lockingScript).toBe(expected.lock().toHex());
113
+ const decoded = Mandala.decode(tx.outputs[0].lockingScript);
114
+ expect(decoded?.role).toBe('deploy');
115
+ expect(decoded?.amount).toBe(21000000n);
116
+ expect(decoded?.metadata).toEqual({ sym: 'GOLD', dec: 8 });
117
+ });
118
+ test('authority: amount 0 deploys the first authority, filed the same way', async () => {
119
+ const { ctx, created, internalized } = setup();
120
+ const res = await deployMandala.execute(ctx, {
121
+ amount: 0n,
122
+ symbol: 'STABLE',
123
+ decimals: 2,
124
+ icon: 1,
125
+ });
126
+ expect(res.error).toBeUndefined();
127
+ expect(res.tokenId).toBe(`${res.txid}.0`);
128
+ const { ci, tx } = expectFiling(created, internalized, res.txid);
129
+ const expected = Mandala.deployAuthority({
130
+ lock: await derivedLock(ci),
131
+ payload: { sym: 'STABLE', dec: 2, icon: 1 },
132
+ });
133
+ expect(created[0].outputs?.[0].lockingScript).toBe(expected.lock().toHex());
134
+ const decoded = Mandala.decode(tx.outputs[0].lockingScript);
135
+ expect(decoded?.role).toBe('deploy');
136
+ expect(decoded?.amount).toBe(0n);
137
+ });
138
+ test('an address destination carries no customInstructions', async () => {
139
+ const { ctx, created, internalized } = setup();
140
+ const res = await deployMandala.execute(ctx, {
141
+ amount: '5',
142
+ destination: {
143
+ address: PrivateKey.fromHex('06'.repeat(32)).toPublicKey().toAddress(),
144
+ },
145
+ });
146
+ expect(res.error).toBeUndefined();
147
+ expect(created[0].outputs?.[0].customInstructions).toBeUndefined();
148
+ expect(internalized[0].outputs[0].insertionRemittance?.customInstructions).toBeUndefined();
149
+ });
150
+ test('names: `mandala <txid> <vout>` from {txid, vout}, txid_vout or txid.vout', () => {
151
+ const txid = 'AB'.repeat(32);
152
+ const name = `mandala ${'ab'.repeat(32)} 3`;
153
+ for (const ref of [{ txid, vout: 3 }, `${txid}_3`, `${txid}.3`]) {
154
+ expect(mandalaTokenBasket(ref)).toBe(name);
155
+ expect(mandalaTokenLabel(ref)).toBe(name);
156
+ expect(mandalaProtocol(ref)).toEqual([2, name]);
157
+ }
158
+ expect(() => mandalaProtocol(txid)).toThrow();
159
+ });
160
+ test('parseMandalaName recovers {txid, vout} from basket, label or protocol', () => {
161
+ const txid = 'ab'.repeat(32);
162
+ expect(parseMandalaName(`mandala ${txid} 7`)).toEqual({ txid, vout: 7 });
163
+ expect(parseMandalaName([2, `mandala ${txid} 0`])).toEqual({
164
+ txid,
165
+ vout: 0,
166
+ });
167
+ expect(parseMandalaName('mandala')).toBeUndefined();
168
+ expect(parseMandalaName('mandala deploy')).toBeUndefined();
169
+ expect(parseMandalaName(`mandala ${txid}_0`)).toBeUndefined();
170
+ });
171
+ });
172
+ describe('deployMandala filing retry', () => {
173
+ test('a failed internalize returns txid/tx/error; fileMandalaDeploy re-files from listActions', async () => {
174
+ const { ctx, created, internalized } = setup();
175
+ const internalize = ctx.wallet.internalizeAction;
176
+ let fail = true;
177
+ ctx.wallet.internalizeAction = async (args) => {
178
+ if (fail)
179
+ throw new Error('storage busy');
180
+ return internalize(args);
181
+ };
182
+ const res = await deployMandala.execute(ctx, { amount: '7' });
183
+ expect(res.error).toBe('file-failed: storage busy');
184
+ expect(res.txid).toMatch(/^[0-9a-f]{64}$/);
185
+ expect(res.tokenId).toBe(`${res.txid}.0`);
186
+ expect(internalized).toHaveLength(0);
187
+ const ciString = created[0].outputs?.[0].customInstructions;
188
+ const listCalls = [];
189
+ ctx.wallet.listActions = async (args) => {
190
+ listCalls.push(args);
191
+ return {
192
+ totalActions: 1,
193
+ actions: [
194
+ {
195
+ txid: res.txid,
196
+ satoshis: 0,
197
+ status: 'completed',
198
+ isOutgoing: true,
199
+ description: 'Deploy Mandala token (fixed supply)',
200
+ labels: [MANDALA_LABEL],
201
+ version: 1,
202
+ lockTime: 0,
203
+ outputs: [
204
+ {
205
+ outputIndex: 0,
206
+ satoshis: 1,
207
+ spendable: true,
208
+ tags: [],
209
+ outputDescription: 'Mandala deploy',
210
+ basket: '',
211
+ customInstructions: ciString,
212
+ },
213
+ ],
214
+ },
215
+ ],
216
+ };
217
+ };
218
+ fail = false;
219
+ const filed = await fileMandalaDeploy.execute(ctx, {
220
+ txid: res.txid,
221
+ tx: res.tx,
222
+ });
223
+ expect(filed.error).toBeUndefined();
224
+ expect(filed.tokenId).toBe(`${res.txid}.0`);
225
+ expect(listCalls).toEqual([
226
+ { labels: [MANDALA_LABEL], includeOutputs: true, limit: 10000 },
227
+ ]);
228
+ expectFiling(created, internalized, res.txid);
229
+ });
230
+ test('fileMandalaDeploy: unknown txid', async () => {
231
+ const { ctx } = setup();
232
+ ctx.wallet.listActions = async () => ({ totalActions: 0, actions: [] });
233
+ const filed = await fileMandalaDeploy.execute(ctx, {
234
+ txid: 'cd'.repeat(32),
235
+ });
236
+ expect(filed.error).toBe('deploy-not-found');
237
+ });
238
+ });
239
+ describe('deployMandala overlay', () => {
240
+ const realFetch = globalThis.fetch;
241
+ afterEach(() => {
242
+ globalThis.fetch = realFetch;
243
+ });
244
+ test('creates with noSend and submits to tm_mandala and tm_<txid> before internalizing', async () => {
245
+ const order = [];
246
+ const submits = [];
247
+ globalThis.fetch = (async (url, init) => {
248
+ order.push('submit');
249
+ submits.push({
250
+ url: String(url),
251
+ topics: new Headers(init?.headers).get('x-topics'),
252
+ });
253
+ return new Response(JSON.stringify({
254
+ [MANDALA_TOPIC]: { outputsToAdmit: [0], coinsToRetain: [] },
255
+ }), { status: 200 });
256
+ });
257
+ const { ctx, created, internalized } = setup();
258
+ const internalize = ctx.wallet.internalizeAction;
259
+ ctx.wallet.internalizeAction = async (args) => {
260
+ order.push('internalize');
261
+ return internalize(args);
262
+ };
263
+ const res = await deployMandala.execute(ctx, {
264
+ amount: '1000',
265
+ symbol: 'OVL',
266
+ overlay: 'https://overlay.example/',
267
+ });
268
+ expect(res.error).toBeUndefined();
269
+ expect(res.tokenId).toBe(`${res.txid}.0`);
270
+ expect(created[0].options?.noSend).toBe(true);
271
+ expect(submits).toEqual([
272
+ {
273
+ url: 'https://overlay.example/submit',
274
+ topics: `${MANDALA_TOPIC},tm_${res.txid}`,
275
+ },
276
+ ]);
277
+ expect(order).toEqual(['submit', 'internalize']);
278
+ expectFiling(created, internalized, res.txid);
279
+ });
280
+ });
281
+ //# sourceMappingURL=deploy.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.test.js","sourceRoot":"","sources":["../../src/mandala/deploy.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * BRC-169 envelope, DAG-CBOR encoding (§7.2, §7.3).
3
+ *
4
+ * The signature is made by the key derived from `sender.identityKey` under
5
+ * protocol `[2, 'metanet handles envelope']`, key ID `send`, counterparty
6
+ * `anyone`, over SHA-256 of the DAG-CBOR map with `content` and `signature`
7
+ * removed. A verifier derives the same public key from `sender.identityKey`.
8
+ */
9
+ import { type WalletInterface, type WalletProtocol } from '@bsv/sdk';
10
+ /** §7.2 item 3 signing protocol */
11
+ export declare const ENVELOPE_SIGNATURE_PROTOCOL: WalletProtocol;
12
+ /** §7.2 item 3 signing key ID */
13
+ export declare const ENVELOPE_SIGNATURE_KEY_ID = "send";
14
+ /** §7.3 `payment` member */
15
+ export interface EnvelopePayment {
16
+ derivationPrefix: Uint8Array;
17
+ derivationSuffix: Uint8Array;
18
+ /** UTF-8 bytes of the BRC-43 protocol name */
19
+ protocol: Uint8Array;
20
+ satoshis: number;
21
+ /** Atomic BEEF */
22
+ beef: Uint8Array;
23
+ }
24
+ /** The §7.3 envelope without `content` and `signature`: the signing preimage map. */
25
+ export interface UnsignedEnvelope {
26
+ metanetHandles: string;
27
+ recipient: {
28
+ handle: string;
29
+ tag?: string;
30
+ domain: string;
31
+ };
32
+ /** `identityKey` is the 33-byte compressed key */
33
+ sender: {
34
+ identityKey: Uint8Array;
35
+ handle?: string;
36
+ domain?: string;
37
+ };
38
+ /** ISO-8601 UTC timestamp */
39
+ created: string;
40
+ quoteId?: string;
41
+ payment: EnvelopePayment | null;
42
+ contentHash?: Uint8Array;
43
+ }
44
+ /** DAG-CBOR bytes of the envelope with `content` and `signature` removed. */
45
+ export declare function envelopeSigningPreimage(env: UnsignedEnvelope): Uint8Array;
46
+ /**
47
+ * Sign an envelope with the wallet's identity (§7.2 item 3) and return the
48
+ * full DAG-CBOR envelope, `content` and `signature` included.
49
+ *
50
+ * @param content - the encrypted content bytes (§7.3 `content`)
51
+ */
52
+ export declare function signEnvelope(wallet: Pick<WalletInterface, 'createSignature'>, env: UnsignedEnvelope, content: Uint8Array): Promise<{
53
+ envelope: Uint8Array;
54
+ signature: Uint8Array;
55
+ }>;
56
+ /** A received §7.3 envelope: the signed members plus `content` and `signature`. */
57
+ export interface ReceivedEnvelope extends UnsignedEnvelope {
58
+ content: Uint8Array;
59
+ signature: Uint8Array;
60
+ }
61
+ /** Decode a §7.3 DAG-CBOR envelope. */
62
+ export declare function decodeEnvelope(bytes: Uint8Array): ReceivedEnvelope;
63
+ /**
64
+ * Verify an envelope's §7.2 item 3 signature: the key derived from
65
+ * `sender.identityKey` under the signing protocol, key ID `send`,
66
+ * counterparty `anyone`, over the map without `content` and `signature`.
67
+ */
68
+ export declare function verifyEnvelope(env: ReceivedEnvelope): Promise<boolean>;
69
+ //# sourceMappingURL=envelope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"envelope.d.ts","sourceRoot":"","sources":["../../src/mandala/envelope.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAGN,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,MAAM,UAAU,CAAA;AAMjB,mCAAmC;AACnC,eAAO,MAAM,2BAA2B,EAAE,cAGzC,CAAA;AACD,iCAAiC;AACjC,eAAO,MAAM,yBAAyB,SAAS,CAAA;AAE/C,4BAA4B;AAC5B,MAAM,WAAW,eAAe;IAC/B,gBAAgB,EAAE,UAAU,CAAA;IAC5B,gBAAgB,EAAE,UAAU,CAAA;IAC5B,8CAA8C;IAC9C,QAAQ,EAAE,UAAU,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,kBAAkB;IAClB,IAAI,EAAE,UAAU,CAAA;CAChB;AAED,qFAAqF;AACrF,MAAM,WAAW,gBAAgB;IAChC,cAAc,EAAE,MAAM,CAAA;IACtB,SAAS,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;IAC3D,kDAAkD;IAClD,MAAM,EAAE;QAAE,WAAW,EAAE,UAAU,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACrE,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,eAAe,GAAG,IAAI,CAAA;IAC/B,WAAW,CAAC,EAAE,UAAU,CAAA;CACxB;AAiBD,6EAA6E;AAC7E,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,gBAAgB,GAAG,UAAU,CAEzE;AAED;;;;;GAKG;AACH,wBAAsB,YAAY,CACjC,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE,iBAAiB,CAAC,EAChD,GAAG,EAAE,gBAAgB,EACrB,OAAO,EAAE,UAAU,GACjB,OAAO,CAAC;IAAE,QAAQ,EAAE,UAAU,CAAC;IAAC,SAAS,EAAE,UAAU,CAAA;CAAE,CAAC,CAY1D;AAED,mFAAmF;AACnF,MAAM,WAAW,gBAAiB,SAAQ,gBAAgB;IACzD,OAAO,EAAE,UAAU,CAAA;IACnB,SAAS,EAAE,UAAU,CAAA;CACrB;AAED,uCAAuC;AACvC,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,gBAAgB,CAYlE;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,CAe5E"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * BRC-169 envelope, DAG-CBOR encoding (§7.2, §7.3).
3
+ *
4
+ * The signature is made by the key derived from `sender.identityKey` under
5
+ * protocol `[2, 'metanet handles envelope']`, key ID `send`, counterparty
6
+ * `anyone`, over SHA-256 of the DAG-CBOR map with `content` and `signature`
7
+ * removed. A verifier derives the same public key from `sender.identityKey`.
8
+ */
9
+ import { ProtoWallet, Utils, } from '@bsv/sdk';
10
+ import { decode as dagCborDecode, encode as dagCborEncode, } from '@ipld/dag-cbor';
11
+ /** §7.2 item 3 signing protocol */
12
+ export const ENVELOPE_SIGNATURE_PROTOCOL = [
13
+ 2,
14
+ 'metanet handles envelope',
15
+ ];
16
+ /** §7.2 item 3 signing key ID */
17
+ export const ENVELOPE_SIGNATURE_KEY_ID = 'send';
18
+ /** Drop undefined members: DAG-CBOR has no `undefined`. */
19
+ function defined(obj) {
20
+ return Object.fromEntries(Object.entries(obj).filter(([, v]) => v !== undefined));
21
+ }
22
+ function envelopeMap(env) {
23
+ return defined({
24
+ ...env,
25
+ recipient: defined(env.recipient),
26
+ sender: defined(env.sender),
27
+ });
28
+ }
29
+ /** DAG-CBOR bytes of the envelope with `content` and `signature` removed. */
30
+ export function envelopeSigningPreimage(env) {
31
+ return dagCborEncode(envelopeMap(env));
32
+ }
33
+ /**
34
+ * Sign an envelope with the wallet's identity (§7.2 item 3) and return the
35
+ * full DAG-CBOR envelope, `content` and `signature` included.
36
+ *
37
+ * @param content - the encrypted content bytes (§7.3 `content`)
38
+ */
39
+ export async function signEnvelope(wallet, env, content) {
40
+ const { signature } = await wallet.createSignature({
41
+ data: Array.from(envelopeSigningPreimage(env)),
42
+ protocolID: ENVELOPE_SIGNATURE_PROTOCOL,
43
+ keyID: ENVELOPE_SIGNATURE_KEY_ID,
44
+ counterparty: 'anyone',
45
+ });
46
+ const sig = Uint8Array.from(signature);
47
+ return {
48
+ envelope: dagCborEncode({ ...envelopeMap(env), content, signature: sig }),
49
+ signature: sig,
50
+ };
51
+ }
52
+ /** Decode a §7.3 DAG-CBOR envelope. */
53
+ export function decodeEnvelope(bytes) {
54
+ const env = dagCborDecode(bytes);
55
+ if (!env ||
56
+ typeof env !== 'object' ||
57
+ !(env.sender?.identityKey instanceof Uint8Array) ||
58
+ !(env.content instanceof Uint8Array) ||
59
+ !(env.signature instanceof Uint8Array)) {
60
+ throw new Error('not a BRC-169 DAG-CBOR envelope');
61
+ }
62
+ return env;
63
+ }
64
+ /**
65
+ * Verify an envelope's §7.2 item 3 signature: the key derived from
66
+ * `sender.identityKey` under the signing protocol, key ID `send`,
67
+ * counterparty `anyone`, over the map without `content` and `signature`.
68
+ */
69
+ export async function verifyEnvelope(env) {
70
+ const { content: _c, signature, ...unsigned } = env;
71
+ try {
72
+ const { valid } = await new ProtoWallet('anyone').verifySignature({
73
+ data: Array.from(envelopeSigningPreimage(unsigned)),
74
+ signature: Array.from(signature),
75
+ protocolID: ENVELOPE_SIGNATURE_PROTOCOL,
76
+ keyID: ENVELOPE_SIGNATURE_KEY_ID,
77
+ counterparty: Utils.toHex(Array.from(env.sender.identityKey)),
78
+ });
79
+ return valid;
80
+ }
81
+ catch {
82
+ // ProtoWallet throws on an invalid signature.
83
+ return false;
84
+ }
85
+ }
86
+ //# sourceMappingURL=envelope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"envelope.js","sourceRoot":"","sources":["../../src/mandala/envelope.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=envelope.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"envelope.test.d.ts","sourceRoot":"","sources":["../../src/mandala/envelope.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,106 @@
1
+ import { describe, expect, test } from 'bun:test';
2
+ import { PrivateKey, ProtoWallet, Utils } from '@bsv/sdk';
3
+ import { decode as dagCborDecode, encode as dagCborEncode, } from '@ipld/dag-cbor';
4
+ import { ENVELOPE_SIGNATURE_KEY_ID, ENVELOPE_SIGNATURE_PROTOCOL, envelopeSigningPreimage, signEnvelope, } from './envelope.js';
5
+ // BRC-169 Appendix A.7 (crumbs → deggen), binary form with an empty beef.
6
+ const CRUMBS_PRIV = 'cf94a849be462a110807900e45a909515c38a2d17b9a8e9753c9475bfd220848';
7
+ const CRUMBS_PUB = '0375b162a37d8794cfdcf72938d9467931e8586885b93c0da97051ecb512f46646';
8
+ const A7_PREIMAGE = 'a76673656e646572a366646f6d61696e6d6e657875732e6578616d706c656668616e646c65666372756d62736b6964656e746974794b657958210375b162a37d8794cfdcf72938d9467931e8586885b93c0da97051ecb512f46646676372656174656474323032362d30372d33305430393a31353a30305a677061796d656e74a56462656566406870726f746f636f6c6c333234313634353136316438687361746f736869731954297064657269766174696f6e507265666978500f5bcc8d7c345d512595d55982b5a4e37064657269766174696f6e537566666978509c42b65554891520ae960a7fb477759e6771756f746549647820306433346362333963316336666530366364346133343638363765316533333469726563697069656e74a36374616768636f6e663230333666646f6d61696e686c6b75702e6e65746668616e646c656664656767656e6b636f6e74656e7448617368582076f88073e3498f542c57fb9a2133743d6f0c1f9c4632e786116568ccd393e35c6e6d6574616e657448616e646c657363312e30';
9
+ const A7_SIGNATURE = '304402206a2bf0b0628386870202789d718001580279cc1add7b3dc3ff81e08858e22f8c022051d6e6d5756bf2bd1d06ea5199af080e721bb1f5dddefe9a36884796d5d04cf7';
10
+ const bytes = (hex) => Uint8Array.from(Utils.toArray(hex, 'hex'));
11
+ const utf8 = (s) => Uint8Array.from(Utils.toArray(s, 'utf8'));
12
+ const b64 = (s) => Uint8Array.from(Utils.toArray(s, 'base64'));
13
+ const A7 = {
14
+ metanetHandles: '1.0',
15
+ recipient: { handle: 'deggen', tag: 'conf2036', domain: 'lkup.net' },
16
+ sender: {
17
+ identityKey: bytes(CRUMBS_PUB),
18
+ handle: 'crumbs',
19
+ domain: 'nexus.example',
20
+ },
21
+ created: '2026-07-30T09:15:00Z',
22
+ quoteId: '0d34cb39c1c6fe06cd4a346867e1e334',
23
+ payment: {
24
+ derivationPrefix: b64('D1vMjXw0XVElldVZgrWk4w=='),
25
+ derivationSuffix: b64('nEK2VVSJFSCulgp/tHd1ng=='),
26
+ protocol: utf8('3241645161d8'),
27
+ satoshis: 21545,
28
+ beef: new Uint8Array(0),
29
+ },
30
+ contentHash: bytes('76f88073e3498f542c57fb9a2133743d6f0c1f9c4632e786116568ccd393e35c'),
31
+ };
32
+ /**
33
+ * BRC-169 §7.3 types `payment.protocol` as bstr, but the Appendix A.7 binary
34
+ * vector encodes it as tstr (`6c` + 12 bytes, not `4c`). This module follows
35
+ * the §7.3 table. To check every other member against A.7, the vector is
36
+ * rebuilt here with the appendix's tstr protocol.
37
+ */
38
+ const A7_AS_PRINTED = {
39
+ ...A7,
40
+ payment: { ...A7.payment, protocol: '3241645161d8' },
41
+ };
42
+ describe('BRC-169 envelope (DAG-CBOR)', () => {
43
+ test('signing preimage matches Appendix A.7 byte for byte (tstr protocol as printed)', () => {
44
+ expect(Utils.toHex(Array.from(envelopeSigningPreimage(A7_AS_PRINTED)))).toBe(A7_PREIMAGE);
45
+ });
46
+ test('payment.protocol is encoded as bstr per the §7.3 table', () => {
47
+ const hex = Utils.toHex(Array.from(envelopeSigningPreimage(A7)));
48
+ // 0x4c = bstr(12); the appendix prints 0x6c = tstr(12)
49
+ expect(hex).toContain('6870726f746f636f6c4c333234313634353136316438');
50
+ expect(hex).toBe(A7_PREIMAGE.replace('6870726f746f636f6c6c', '6870726f746f636f6c4c'));
51
+ });
52
+ test('the Appendix A.7 signature verifies under the §7.2 derivation', async () => {
53
+ const { valid } = await new ProtoWallet('anyone').verifySignature({
54
+ data: Array.from(envelopeSigningPreimage(A7_AS_PRINTED)),
55
+ signature: Utils.toArray(A7_SIGNATURE, 'hex'),
56
+ protocolID: ENVELOPE_SIGNATURE_PROTOCOL,
57
+ keyID: ENVELOPE_SIGNATURE_KEY_ID,
58
+ counterparty: CRUMBS_PUB,
59
+ });
60
+ expect(valid).toBe(true);
61
+ });
62
+ test('envelope bytes are canonical DAG-CBOR and carry content + signature', async () => {
63
+ const wallet = new ProtoWallet(PrivateKey.fromHex(CRUMBS_PRIV));
64
+ const content = utf8('opaque content');
65
+ const { envelope, signature } = await signEnvelope(wallet, A7_AS_PRINTED, content);
66
+ const decoded = dagCborDecode(envelope);
67
+ expect(dagCborEncode(decoded)).toEqual(envelope);
68
+ expect(decoded.content).toEqual(content);
69
+ expect(decoded.signature).toEqual(signature);
70
+ const { content: _c, signature: _s, ...rest } = decoded;
71
+ expect(Utils.toHex(Array.from(dagCborEncode(rest)))).toBe(A7_PREIMAGE);
72
+ });
73
+ test('signature verifies from sender.identityKey with the §7.2 derivation', async () => {
74
+ const wallet = new ProtoWallet(PrivateKey.fromHex(CRUMBS_PRIV));
75
+ const unsigned = {
76
+ metanetHandles: '1.0',
77
+ recipient: { handle: 'deggen', domain: 'lkup.net' },
78
+ sender: { identityKey: bytes(CRUMBS_PUB) },
79
+ created: '2026-10-03T00:00:00Z',
80
+ payment: {
81
+ derivationPrefix: new Uint8Array(16).fill(1),
82
+ derivationSuffix: new Uint8Array(16).fill(2),
83
+ protocol: utf8('mandala'),
84
+ satoshis: 1,
85
+ beef: new Uint8Array([1, 2, 3]),
86
+ },
87
+ };
88
+ const { envelope } = await signEnvelope(wallet, unsigned, utf8('x'));
89
+ // A verifier re-encodes the received map without content/signature.
90
+ const received = dagCborDecode(envelope);
91
+ const { content: _c, signature, ...rest } = received;
92
+ const sender = rest.sender.identityKey;
93
+ const preimage = envelopeSigningPreimage(rest);
94
+ expect(preimage).toEqual(envelopeSigningPreimage(unsigned));
95
+ const verifier = new ProtoWallet('anyone');
96
+ const { valid } = await verifier.verifySignature({
97
+ data: Array.from(preimage),
98
+ signature: Array.from(signature),
99
+ protocolID: ENVELOPE_SIGNATURE_PROTOCOL,
100
+ keyID: ENVELOPE_SIGNATURE_KEY_ID,
101
+ counterparty: Utils.toHex(Array.from(sender)),
102
+ });
103
+ expect(valid).toBe(true);
104
+ });
105
+ });
106
+ //# sourceMappingURL=envelope.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"envelope.test.js","sourceRoot":"","sources":["../../src/mandala/envelope.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Mandala (BRC-162) token actions: deploy, send to a BRC-169 handle
3
+ * (delivered per BRC-232), and receive from `mandala_inbox`.
4
+ */
5
+ export * from './deploy.js';
6
+ export * from './send.js';
7
+ export * from './receive.js';
8
+ export * from './envelope.js';
9
+ export declare const mandalaActions: (import("../types.js").Action<import("./deploy.js").DeployMandalaInput, import("./deploy.js").DeployMandalaResponse> | import("../types.js").Action<import("./deploy.js").FileMandalaDeployInput, import("./deploy.js").FileMandalaDeployResponse> | import("../types.js").Action<import("./receive.js").SyncMandalaInboxInput, import("./receive.js").SyncMandalaInboxResult> | import("../types.js").Action<import("./send.js").SendMandalaInput, import("./send.js").SendMandalaResult>)[];
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mandala/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,cAAc,aAAa,CAAA;AAC3B,cAAc,WAAW,CAAA;AACzB,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAE7B,eAAO,MAAM,cAAc,+dAK1B,CAAA"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Mandala (BRC-162) token actions: deploy, send to a BRC-169 handle
3
+ * (delivered per BRC-232), and receive from `mandala_inbox`.
4
+ */
5
+ import { deployMandala, fileMandalaDeploy } from './deploy.js';
6
+ import { syncMandalaInbox } from './receive.js';
7
+ import { sendMandala } from './send.js';
8
+ export * from './deploy.js';
9
+ export * from './send.js';
10
+ export * from './receive.js';
11
+ export * from './envelope.js';
12
+ export const mandalaActions = [
13
+ deployMandala,
14
+ fileMandalaDeploy,
15
+ sendMandala,
16
+ syncMandalaInbox,
17
+ ];
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mandala/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAEvC,cAAc,aAAa,CAAA;AAC3B,cAAc,WAAW,CAAA;AACzB,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAE7B,MAAM,CAAC,MAAM,cAAc,GAAG;IAC7B,aAAa;IACb,iBAAiB;IACjB,WAAW;IACX,gBAAgB;CAChB,CAAA"}