@invisi-labs/sdk 1.1.6 → 1.2.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 (132) hide show
  1. package/README.md +5 -0
  2. package/dist/broadcaster-3KTB4JO2.cjs +21 -0
  3. package/dist/broadcaster-3KTB4JO2.cjs.map +1 -0
  4. package/dist/broadcaster-7ZKKSTZQ.js +21 -0
  5. package/dist/broadcaster-preparation-PJ263WBL.cjs +15 -0
  6. package/dist/broadcaster-preparation-PJ263WBL.cjs.map +1 -0
  7. package/dist/broadcaster-preparation-ZQAPZAUG.js +15 -0
  8. package/dist/broadcaster-preparation-ZQAPZAUG.js.map +1 -0
  9. package/dist/chunk-2URICDPW.cjs +167 -0
  10. package/dist/chunk-2URICDPW.cjs.map +1 -0
  11. package/dist/chunk-3D24ABYR.js +86 -0
  12. package/dist/chunk-3D24ABYR.js.map +1 -0
  13. package/dist/chunk-3KTQQZOW.cjs +71 -0
  14. package/dist/chunk-3KTQQZOW.cjs.map +1 -0
  15. package/dist/chunk-4H4FARQK.js +1582 -0
  16. package/dist/chunk-4H4FARQK.js.map +1 -0
  17. package/dist/chunk-4SDP53YQ.cjs +765 -0
  18. package/dist/chunk-4SDP53YQ.cjs.map +1 -0
  19. package/dist/{chunk-QC6TQR3R.js → chunk-4VI6LYGH.js} +35 -12
  20. package/dist/chunk-4VI6LYGH.js.map +1 -0
  21. package/dist/chunk-BBSRP4MH.cjs +287 -0
  22. package/dist/chunk-BBSRP4MH.cjs.map +1 -0
  23. package/dist/chunk-DGMVGFKM.js +41 -0
  24. package/dist/chunk-DGMVGFKM.js.map +1 -0
  25. package/dist/chunk-GUD3LAUO.js +765 -0
  26. package/dist/chunk-GUD3LAUO.js.map +1 -0
  27. package/dist/chunk-HCB7RQ3S.cjs +79 -0
  28. package/dist/chunk-HCB7RQ3S.cjs.map +1 -0
  29. package/dist/{broadcaster-preparation-QVL62KM6.js → chunk-HKGJXQVN.js} +73 -34
  30. package/dist/chunk-HKGJXQVN.js.map +1 -0
  31. package/dist/chunk-HLH5JZD4.js +287 -0
  32. package/dist/chunk-HLH5JZD4.js.map +1 -0
  33. package/dist/chunk-J6TZZVAM.cjs +230 -0
  34. package/dist/chunk-J6TZZVAM.cjs.map +1 -0
  35. package/dist/chunk-LOR6PYH5.cjs +397 -0
  36. package/dist/chunk-LOR6PYH5.cjs.map +1 -0
  37. package/dist/chunk-MA2QZEF5.cjs +399 -0
  38. package/dist/chunk-MA2QZEF5.cjs.map +1 -0
  39. package/dist/chunk-MI4IP4ZD.cjs +86 -0
  40. package/dist/chunk-MI4IP4ZD.cjs.map +1 -0
  41. package/dist/chunk-NKYHYIRP.cjs +1582 -0
  42. package/dist/chunk-NKYHYIRP.cjs.map +1 -0
  43. package/dist/chunk-OCZLJKIA.cjs +41 -0
  44. package/dist/chunk-OCZLJKIA.cjs.map +1 -0
  45. package/dist/chunk-R5YAOJKB.js +71 -0
  46. package/dist/chunk-R5YAOJKB.js.map +1 -0
  47. package/dist/chunk-RY4M2CIQ.js +399 -0
  48. package/dist/chunk-RY4M2CIQ.js.map +1 -0
  49. package/dist/chunk-THMD5QO2.js +79 -0
  50. package/dist/chunk-THMD5QO2.js.map +1 -0
  51. package/dist/chunk-ZD2652WH.js +230 -0
  52. package/dist/chunk-ZD2652WH.js.map +1 -0
  53. package/dist/credit.cjs +1 -0
  54. package/dist/credit.cjs.map +1 -0
  55. package/dist/credit.d.cts +12 -0
  56. package/dist/credit.d.ts +12 -0
  57. package/dist/credit.js +1 -0
  58. package/dist/credit.js.map +1 -0
  59. package/dist/ethers.cjs +11 -385
  60. package/dist/ethers.cjs.map +1 -1
  61. package/dist/ethers.d.cts +16 -6
  62. package/dist/ethers.d.ts +16 -6
  63. package/dist/ethers.js +1 -1
  64. package/dist/index-CLhGwLxZ.d.cts +42 -0
  65. package/dist/index-Crp-ZFiM.d.ts +42 -0
  66. package/dist/index.cjs +479 -7847
  67. package/dist/index.cjs.map +1 -1
  68. package/dist/index.d.cts +87 -710
  69. package/dist/index.d.ts +87 -710
  70. package/dist/index.js +407 -869
  71. package/dist/index.js.map +1 -1
  72. package/dist/note.cjs +11 -0
  73. package/dist/note.cjs.map +1 -0
  74. package/dist/note.d.cts +29 -0
  75. package/dist/note.d.ts +29 -0
  76. package/dist/note.js +11 -0
  77. package/dist/note.js.map +1 -0
  78. package/dist/operation-bridge-CoECSxfi.d.cts +472 -0
  79. package/dist/operation-bridge-CoECSxfi.d.ts +472 -0
  80. package/dist/preparation-HUBTVCZE.js +404 -0
  81. package/dist/preparation-HUBTVCZE.js.map +1 -0
  82. package/dist/preparation-QD3ZSYV5.cjs +404 -0
  83. package/dist/preparation-QD3ZSYV5.cjs.map +1 -0
  84. package/dist/provenance-preparation-43DN2WK7.cjs +16 -0
  85. package/dist/provenance-preparation-43DN2WK7.cjs.map +1 -0
  86. package/dist/provenance-preparation-HEZE4L5H.js +16 -0
  87. package/dist/provenance-preparation-HEZE4L5H.js.map +1 -0
  88. package/dist/provenance.cjs +59 -0
  89. package/dist/provenance.cjs.map +1 -0
  90. package/dist/provenance.d.cts +34 -0
  91. package/dist/provenance.d.ts +34 -0
  92. package/dist/provenance.js +59 -0
  93. package/dist/provenance.js.map +1 -0
  94. package/dist/receipt-logs-8Msm_HZS.d.ts +322 -0
  95. package/dist/receipt-logs-DWG4In8N.d.cts +322 -0
  96. package/dist/session-support.cjs +189 -0
  97. package/dist/session-support.cjs.map +1 -0
  98. package/dist/session-support.d.cts +284 -0
  99. package/dist/session-support.d.ts +284 -0
  100. package/dist/session-support.js +189 -0
  101. package/dist/session-support.js.map +1 -0
  102. package/package.json +25 -19
  103. package/dist/NoteOutput-DRkVnwlx.d.cts +0 -398
  104. package/dist/NoteOutput-DpDC6T2O.d.ts +0 -398
  105. package/dist/broadcaster-preparation-QVL62KM6.js.map +0 -1
  106. package/dist/chunk-4SD3MW6N.js +0 -4711
  107. package/dist/chunk-4SD3MW6N.js.map +0 -1
  108. package/dist/chunk-FL4TIGWW.js +0 -1781
  109. package/dist/chunk-FL4TIGWW.js.map +0 -1
  110. package/dist/chunk-QC6TQR3R.js.map +0 -1
  111. package/dist/indexeddb.cjs +0 -6878
  112. package/dist/indexeddb.cjs.map +0 -1
  113. package/dist/indexeddb.d.cts +0 -20
  114. package/dist/indexeddb.d.ts +0 -20
  115. package/dist/indexeddb.js +0 -71
  116. package/dist/indexeddb.js.map +0 -1
  117. package/dist/memory.cjs +0 -6886
  118. package/dist/memory.cjs.map +0 -1
  119. package/dist/memory.d.cts +0 -12
  120. package/dist/memory.d.ts +0 -12
  121. package/dist/memory.js +0 -11
  122. package/dist/sqlite.cjs +0 -6862
  123. package/dist/sqlite.cjs.map +0 -1
  124. package/dist/sqlite.d.cts +0 -28
  125. package/dist/sqlite.d.ts +0 -28
  126. package/dist/sqlite.js +0 -55
  127. package/dist/sqlite.js.map +0 -1
  128. package/dist/state-C4HZFotm.d.cts +0 -78
  129. package/dist/state-C4HZFotm.d.ts +0 -78
  130. package/dist/store-8aBhnbGr.d.ts +0 -42
  131. package/dist/store-YrbXb6CY.d.cts +0 -42
  132. /package/dist/{memory.js.map → broadcaster-7ZKKSTZQ.js.map} +0 -0
@@ -0,0 +1,404 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }
2
+
3
+
4
+
5
+
6
+
7
+ var _chunkMA2QZEF5cjs = require('./chunk-MA2QZEF5.cjs');
8
+
9
+
10
+
11
+ var _chunk4SDP53YQcjs = require('./chunk-4SDP53YQ.cjs');
12
+ require('./chunk-LOR6PYH5.cjs');
13
+
14
+ // src/credit/preparation.ts
15
+ var _ethers = require('ethers');
16
+
17
+
18
+
19
+
20
+
21
+
22
+
23
+
24
+
25
+
26
+ var _primitives = require('@invisi-labs/primitives');
27
+ var _prover = require('@invisi-labs/prover');
28
+
29
+
30
+
31
+
32
+
33
+
34
+
35
+
36
+ var _protocol = require('@invisi-labs/protocol');
37
+ var CreditPreparation = class {
38
+ constructor(runtime) {
39
+ this.runtime = runtime;
40
+ this.#prepare = new (0, _chunkMA2QZEF5cjs.Preparation)(runtime);
41
+ }
42
+ #prepare;
43
+ fee(options) {
44
+ return _protocol.normalizeFee.call(void 0,
45
+ options.fee ? { feeRecipient: options.fee.recipient, feeAmount: options.fee.amount } : {}
46
+ );
47
+ }
48
+ expiry(value, frame) {
49
+ if (typeof value !== "bigint" || value <= frame.block.timestamp || value >= 1n << 64n) {
50
+ throw new Error("Credit expiry must be a future uint64 timestamp");
51
+ }
52
+ return value;
53
+ }
54
+ async seal(input, frame) {
55
+ const state = _primitives.normalizeCreditDeliveryState.call(void 0, input);
56
+ const commitment = await _chunkMA2QZEF5cjs.creditLeaf.call(void 0, state);
57
+ const context = {
58
+ chainId: frame.context.chainId,
59
+ protocolAddress: BigInt(frame.context.protocolAddress),
60
+ outputCommitment: commitment
61
+ };
62
+ const deliveries = await Promise.all(
63
+ ["owner", "spender"].map(async (role) => {
64
+ const keys = role === "owner" ? state.ownerReceivingKeys : state.spenderReceivingKeys;
65
+ return {
66
+ ciphertext: _ethers.hexlify.call(void 0,
67
+ await _primitives.encryptCreditState.call(void 0, keys.viewingPublicKey, state, { ...context, role })
68
+ ),
69
+ clue: _ethers.hexlify.call(void 0, _primitives.createClue.call(void 0, keys.clueKey))
70
+ };
71
+ })
72
+ );
73
+ return { state, commitment, deliveries };
74
+ }
75
+ async input(commitment, role, frame) {
76
+ const stored = (await this.runtime.readInventory()).credits[commitment + ":" + role];
77
+ if (!stored || stored.spent !== "unspent" || stored.role !== role) {
78
+ throw new Error(`confirmed unspent ${role} Credit is unavailable`);
79
+ }
80
+ const state = _primitives.normalizeCreditDeliveryState.call(void 0, stored.state);
81
+ const n = state.note;
82
+ if ((role === "owner" ? n.ownerWalletIdentity : n.spenderWalletIdentity) !== this.runtime.scope.ownerAddress || n.chainId !== frame.context.chainId || n.protocolAddress !== BigInt(frame.context.protocolAddress) || n.tokenAddress !== BigInt(frame.context.tokenAddress) || await _chunkMA2QZEF5cjs.creditLeaf.call(void 0, state) !== commitment) {
83
+ throw new Error("Credit role, commitment or deployment mismatch");
84
+ }
85
+ if (!this.runtime.reader.getCreditRevocationBitmap)
86
+ throw Error("Credit revocation reader required");
87
+ const bitmap = await this.runtime.reader.getCreditRevocationBitmap(
88
+ frame.context,
89
+ n.ownerWalletIdentity,
90
+ frame.context.tokenAddress,
91
+ n.revocationShard,
92
+ Number(n.revocationSlot >> 8n),
93
+ frame.block
94
+ );
95
+ if (bitmap & 1n << (n.revocationSlot & 255n)) throw Error("Credit grant is revoked");
96
+ const proof = await this.#prepare.membership(stored, frame);
97
+ const path = [...proof.path];
98
+ const nullifier = await _primitives.computeCreditNullifier.call(void 0, n.chainId, n.creditSharedKey, commitment);
99
+ await this.#prepare.assertUnspent([nullifier], frame);
100
+ return {
101
+ input: {
102
+ state,
103
+ commitment,
104
+ role,
105
+ treeId: stored.treeId,
106
+ leafIndex: stored.leafIndex,
107
+ path
108
+ },
109
+ nullifier,
110
+ source: {
111
+ treeId: stored.treeId,
112
+ merkleRoot: proof.root
113
+ }
114
+ };
115
+ }
116
+ base(frame, kind) {
117
+ return {
118
+ version: 1,
119
+ id: crypto.randomUUID(),
120
+ kind,
121
+ context: frame.context,
122
+ scope: this.runtime.scope,
123
+ preparedAt: frame.block,
124
+ deadline: frame.deadline,
125
+ outputs: [],
126
+ inputs: [],
127
+ funding: {},
128
+ fundingMode: "none"
129
+ };
130
+ }
131
+ async create(options) {
132
+ for (const key of Object.keys(options))
133
+ if (![
134
+ "payload",
135
+ "fee",
136
+ "singleLimit",
137
+ "dailyLimit",
138
+ "monthlyLimit",
139
+ "availableCredit",
140
+ "unlimited",
141
+ "tokenAddress",
142
+ "spender",
143
+ "expiry",
144
+ "deadline"
145
+ ].includes(key))
146
+ throw Error("unsupported Credit creation option");
147
+ const frame = await this.#prepare.frame(options.deadline), expiry = this.expiry(options.expiry, frame);
148
+ if (expiry < frame.deadline) throw Error("expiry before request deadline");
149
+ if (!this.runtime.reader.getCreditAllocation)
150
+ throw Error("Credit allocation reader required");
151
+ const allocation = await this.runtime.reader.getCreditAllocation(
152
+ frame.context,
153
+ this.runtime.scope.ownerAddress,
154
+ frame.context.tokenAddress,
155
+ frame.block
156
+ );
157
+ const spender = await _chunk4SDP53YQcjs.resolveRecipient.call(void 0,
158
+ options.spender,
159
+ _chunkMA2QZEF5cjs.recipientLookup.call(void 0, this.runtime.options),
160
+ { field: "spender" }
161
+ ), owner = await _chunk4SDP53YQcjs.resolveRecipient.call(void 0,
162
+ this.runtime.options.wallet.getReceivingAddress().toString(),
163
+ _chunkMA2QZEF5cjs.recipientLookup.call(void 0, this.runtime.options),
164
+ { field: "wallet" }
165
+ );
166
+ const output = await this.seal(
167
+ {
168
+ note: {
169
+ chainId: frame.context.chainId,
170
+ protocolAddress: BigInt(frame.context.protocolAddress),
171
+ tokenAddress: BigInt(frame.context.tokenAddress),
172
+ ownerWalletIdentity: this.runtime.scope.ownerAddress,
173
+ spenderWalletIdentity: spender.ownerAddress,
174
+ revocationShard: allocation.shard,
175
+ revocationSlot: BigInt(allocation.slot),
176
+ ..._primitives.normalizeCreditPolicy.call(void 0, options),
177
+ availableCredit: options.availableCredit === void 0 ? 0n : options.availableCredit,
178
+ unlimited: options.unlimited === void 0 ? false : options.unlimited,
179
+ payload: _chunkMA2QZEF5cjs.copyApplicationPayload.call(void 0, options.payload),
180
+ expiry,
181
+ nonce: _primitives.generateNonce.call(void 0, ),
182
+ creditSharedKey: _primitives.generateCreditSharedKey.call(void 0, )
183
+ },
184
+ ownerReceivingKeys: owner.getReceivingKeys(),
185
+ spenderReceivingKeys: spender.getReceivingKeys()
186
+ },
187
+ frame
188
+ );
189
+ const plan = this.base(frame, "create-credit"), params = {
190
+ token: frame.context.tokenAddress,
191
+ owner: this.runtime.scope.ownerAddress,
192
+ revocationShard: allocation.shard,
193
+ revocationSlot: BigInt(allocation.slot),
194
+ creditCommitment: output.commitment,
195
+ deadline: frame.deadline,
196
+ ...this.fee(options)
197
+ };
198
+ plan.capacity = 1;
199
+ plan.credit = {
200
+ inputs: [],
201
+ outputs: [output],
202
+ deliveries: output.deliveries,
203
+ creation: params
204
+ };
205
+ plan.statement = _prover.WitnessBuilder.statement(
206
+ "create_credit",
207
+ _protocol.createCreditPublicInputs.call(void 0, frame.context, params, output.deliveries)
208
+ );
209
+ await this.#prepare.assertBlock(frame);
210
+ return this.runtime.complete(plan);
211
+ }
212
+ async update(options) {
213
+ for (const key of Object.keys(options))
214
+ if (![
215
+ "payload",
216
+ "fee",
217
+ "singleLimit",
218
+ "dailyLimit",
219
+ "monthlyLimit",
220
+ "increaseAvailableCredit",
221
+ "decreaseAvailableCredit",
222
+ "unlimited",
223
+ "tokenAddress",
224
+ "credit",
225
+ "expiry",
226
+ "deadline",
227
+ "creditInputs"
228
+ ].includes(key))
229
+ throw Error("unsupported Credit update option");
230
+ const frame = await this.#prepare.frame(options.deadline), previous = await this.input(options.credit, "owner", frame), n = previous.input.state.note;
231
+ const changes = {
232
+ ...Object.fromEntries(
233
+ [
234
+ "singleLimit",
235
+ "dailyLimit",
236
+ "monthlyLimit",
237
+ "unlimited",
238
+ "increaseAvailableCredit",
239
+ "decreaseAvailableCredit",
240
+ "expiry"
241
+ ].filter((k) => options[k] !== void 0).map((k) => [k, options[k]])
242
+ )
243
+ };
244
+ const next = await _primitives.deriveCreditUpdate.call(void 0, n, changes, frame.deadline), output = await this.seal(
245
+ {
246
+ ...previous.input.state,
247
+ note: {
248
+ ...next.state,
249
+ payload: _chunkMA2QZEF5cjs.copyApplicationPayload.call(void 0,
250
+ options.payload === void 0 ? n.payload : options.payload
251
+ )
252
+ }
253
+ },
254
+ frame
255
+ );
256
+ const params = {
257
+ token: frame.context.tokenAddress,
258
+ owner: n.ownerWalletIdentity,
259
+ source: previous.source,
260
+ nullifier: next.nullifier,
261
+ creditCommitment: output.commitment,
262
+ revocationShard: n.revocationShard,
263
+ revocationSlot: n.revocationSlot,
264
+ deadline: frame.deadline,
265
+ ...this.fee(options)
266
+ }, plan = this.base(frame, "update-credit");
267
+ plan.capacity = 1;
268
+ plan.credit = {
269
+ inputs: [previous.input],
270
+ outputs: [output],
271
+ deliveries: output.deliveries,
272
+ update: params,
273
+ updateChanges: structuredClone(changes)
274
+ };
275
+ plan.statement = _prover.WitnessBuilder.statement(
276
+ "credit_update",
277
+ _protocol.updateCreditPublicInputs.call(void 0, frame.context, params, output.deliveries)
278
+ );
279
+ await this.#prepare.assertBlock(frame);
280
+ return this.runtime.complete(plan);
281
+ }
282
+ async draw(options) {
283
+ const frame = await this.#prepare.frame(options.deadline), profile = _protocol.selectCreditDrawCircuit.call(void 0, options.credits.length);
284
+ if (new Set(options.credits.map((c) => c.credit)).size !== options.credits.length)
285
+ throw Error("duplicate Credit input");
286
+ const members = await Promise.all(
287
+ options.credits.map(async (value) => ({
288
+ ...await this.input(value.credit, "spender", frame),
289
+ value
290
+ }))
291
+ );
292
+ members.sort((a, b) => {
293
+ const x = a.input.state.note, y = b.input.state.note;
294
+ for (const [u, v] of [
295
+ [BigInt(x.ownerWalletIdentity), BigInt(y.ownerWalletIdentity)],
296
+ [x.revocationShard, y.revocationShard],
297
+ [x.revocationSlot, y.revocationSlot]
298
+ ]) {
299
+ if (u < v) return -1;
300
+ if (u > v) return 1;
301
+ }
302
+ return 0;
303
+ });
304
+ const payers = [], sources = /* @__PURE__ */ new Map(), outputs = [], recoveryAmounts = [], grantRefs = [], amounts = [];
305
+ for (const member of members) {
306
+ const n = member.input.state.note, amount = _chunkMA2QZEF5cjs.positiveAmount.call(void 0, member.value.amount, 126);
307
+ if (n.expiry < frame.deadline) throw Error("expiry before request deadline");
308
+ let pi = payers.findIndex((p) => p.payer === n.ownerWalletIdentity);
309
+ if (pi < 0) {
310
+ pi = payers.length;
311
+ payers.push({ payer: n.ownerWalletIdentity, amount: 0n });
312
+ }
313
+ payers[pi].amount += amount;
314
+ grantRefs.push({
315
+ payerIndex: BigInt(pi),
316
+ shard: n.revocationShard,
317
+ slot: n.revocationSlot
318
+ });
319
+ if (sources.has(member.source.treeId) && sources.get(member.source.treeId) !== member.source.merkleRoot)
320
+ throw Error("Credit source root mismatch");
321
+ sources.set(member.source.treeId, member.source.merkleRoot);
322
+ const next = await _primitives.deriveCreditState.call(void 0, n, amount, frame.block.timestamp);
323
+ outputs.push(
324
+ await this.seal(
325
+ {
326
+ ...member.input.state,
327
+ note: {
328
+ ...next.state,
329
+ payload: _chunkMA2QZEF5cjs.copyApplicationPayload.call(void 0,
330
+ member.value.payload === void 0 ? n.payload : member.value.payload
331
+ )
332
+ }
333
+ },
334
+ frame
335
+ )
336
+ );
337
+ recoveryAmounts.push(_protocol.word.call(void 0, next.recoveryAmount));
338
+ amounts.push(amount);
339
+ }
340
+ const totalAmount = amounts.reduce((sum, n) => sum + n, 0n), fee = this.fee(options), payment = await _chunk4SDP53YQcjs.NoteOutput.create({
341
+ chainId: frame.context.chainId,
342
+ protocolAddress: frame.context.protocolAddress,
343
+ tokenAddress: frame.context.tokenAddress,
344
+ amount: totalAmount - fee.feeAmount,
345
+ recipient: options.recipient.startsWith("0i") ? { type: "invisi", address: options.recipient } : { type: "evm", address: options.recipient },
346
+ payload: _chunkMA2QZEF5cjs.copyApplicationPayload.call(void 0, options.payload)
347
+ }), ordinary = await this.#prepare.output(payment, frame.context, false);
348
+ if (!ordinary.note)
349
+ throw Error("Credit draw requires an encrypted ordinary Note recipient");
350
+ const deliveries = [...outputs.flatMap((o) => o.deliveries), ordinary.delivery], params = {
351
+ token: frame.context.tokenAddress,
352
+ sources: [...sources].sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0).map(([treeId, merkleRoot]) => ({ treeId, merkleRoot })),
353
+ payers,
354
+ grantRefs,
355
+ nullifiers: members.map((m) => m.nullifier),
356
+ creditCommitments: outputs.map((o) => o.commitment),
357
+ recoveryAmounts,
358
+ noteCommitment: ordinary.commitment,
359
+ totalAmount,
360
+ deadline: frame.deadline,
361
+ ...fee
362
+ }, plan = this.base(frame, "draw-credit");
363
+ plan.capacity = profile.capacity;
364
+ plan.outputs = [ordinary];
365
+ plan.credit = {
366
+ inputs: members.map((m) => m.input),
367
+ outputs,
368
+ deliveries,
369
+ draw: params,
370
+ amounts
371
+ };
372
+ plan.statement = _prover.WitnessBuilder.statement(
373
+ profile.name,
374
+ _protocol.creditDrawPublicInputs.call(void 0, frame.context, params, deliveries)
375
+ );
376
+ await this.#prepare.assertBlock(frame);
377
+ return this.runtime.complete(plan);
378
+ }
379
+ async revoke(options) {
380
+ const frame = await this.#prepare.frame(options.deadline), params = {
381
+ token: frame.context.tokenAddress,
382
+ owner: _nullishCoalesce(options.owner, () => ( this.runtime.scope.ownerAddress)),
383
+ shard: options.shard,
384
+ slot: options.slot,
385
+ deadline: frame.deadline,
386
+ ...this.fee(options)
387
+ };
388
+ _protocol.encodeRevokeCreditTypedData.call(void 0, frame.context, params);
389
+ const plan = this.base(frame, "revoke-credit");
390
+ plan.credit = {
391
+ inputs: [],
392
+ outputs: [],
393
+ deliveries: [],
394
+ revocation: params,
395
+ ...options.caller ? { revocationCaller: options.caller } : {}
396
+ };
397
+ await this.#prepare.assertBlock(frame);
398
+ return this.runtime.complete(plan);
399
+ }
400
+ };
401
+
402
+
403
+ exports.CreditPreparation = CreditPreparation;
404
+ //# sourceMappingURL=preparation-QD3ZSYV5.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/wx/Workspace/invisi-lab/invisi-sdk-ts/packages/sdk/dist/preparation-QD3ZSYV5.cjs","../src/credit/preparation.ts"],"names":[],"mappings":"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","file":"/Users/wx/Workspace/invisi-lab/invisi-sdk-ts/packages/sdk/dist/preparation-QD3ZSYV5.cjs","sourcesContent":[null,"import { NoteOutput } from \"../notes/NoteOutput\";\nimport type {\n CreateCreditParams,\n Delivery,\n Hex,\n InputSource,\n} from \"@invisi-labs/protocol/contracts\";\nimport { getAddress, hexlify, toBeHex } from \"ethers\";\nimport { recipientLookup } from \"../notes/recipient-infrastructure\";\nimport { resolveRecipient } from \"../notes/resolve-recipient\";\n\nimport {\n FIELD_MODULUS,\n applyCreditDrawUsage,\n computeCreditNullifier,\n computeCreditRecoveryPad,\n createClue,\n deriveCreditStateNonce,\n encryptCreditState,\n generateCreditSharedKey,\n generateNonce,\n normalizeCreditDeliveryState,\n normalizeCreditPolicy,\n deriveCreditState,\n deriveCreditUpdate,\n type CreditDeliveryState,\n} from \"@invisi-labs/primitives\";\nimport { WitnessBuilder } from \"@invisi-labs/prover\";\nimport {\n normalizeFee,\n encodeRevokeCreditTypedData,\n createCreditPublicInputs,\n creditDrawPublicInputs,\n selectCreditDrawCircuit,\n updateCreditPublicInputs,\n word,\n} from \"@invisi-labs/protocol\";\nimport type { CircuitName } from \"@invisi-labs/prover\";\nimport { creditLeaf } from \"./state\";\n\nimport type {\n RevokeCreditPreparation,\n CreateCreditPreparation,\n DrawCreditPreparation,\n OperationPlan,\n PreparationRuntime,\n PreparedCreditInput,\n PreparedCreditOutput,\n UpdateCreditPreparation,\n} from \"../transactions/operation-types\";\nimport {\n Preparation,\n copyApplicationPayload,\n positiveAmount,\n type PreparationFrame,\n} from \"../transactions/preparation/prepare-common\";\n\nconst EMPTY: Delivery = { ciphertext: \"0x\", clue: \"0x\" };\n\n/** Credit roles, grant references and receiving snapshots are frozen before authorization. */\nexport class CreditPreparation<Result> {\n readonly #prepare: Preparation<Result>;\n\n constructor(readonly runtime: PreparationRuntime<Result>) {\n this.#prepare = new Preparation(runtime);\n }\n\n private fee(options: { fee?: { recipient: Hex; amount: bigint } }) {\n return normalizeFee(\n options.fee\n ? { feeRecipient: options.fee.recipient, feeAmount: options.fee.amount }\n : {}\n );\n }\n\n private expiry(value: bigint, frame: PreparationFrame): bigint {\n if (typeof value !== \"bigint\" || value <= frame.block.timestamp || value >= 1n << 64n) {\n throw new Error(\"Credit expiry must be a future uint64 timestamp\");\n }\n return value;\n }\n\n private async seal(\n input: CreditDeliveryState,\n frame: PreparationFrame\n ): Promise<PreparedCreditOutput> {\n const state = normalizeCreditDeliveryState(input);\n const commitment = await creditLeaf(state);\n const context = {\n chainId: frame.context.chainId,\n protocolAddress: BigInt(frame.context.protocolAddress),\n outputCommitment: commitment,\n };\n const deliveries = (await Promise.all(\n ([\"owner\", \"spender\"] as const).map(async (role) => {\n const keys =\n role === \"owner\" ? state.ownerReceivingKeys : state.spenderReceivingKeys;\n return {\n ciphertext: hexlify(\n await encryptCreditState(keys.viewingPublicKey, state, { ...context, role })\n ) as Hex,\n clue: hexlify(createClue(keys.clueKey)) as Hex,\n };\n })\n )) as [Delivery, Delivery];\n return { state, commitment, deliveries };\n }\n\n private async input(\n commitment: Hex,\n role: \"owner\" | \"spender\",\n frame: PreparationFrame\n ): Promise<{ input: PreparedCreditInput; nullifier: Hex; source: InputSource }> {\n const stored = (await this.runtime.readInventory()).credits[commitment + \":\" + role];\n if (!stored || stored.spent !== \"unspent\" || stored.role !== role) {\n throw new Error(`confirmed unspent ${role} Credit is unavailable`);\n }\n const state = normalizeCreditDeliveryState(stored.state);\n const n = state.note;\n if (\n (role === \"owner\" ? n.ownerWalletIdentity : n.spenderWalletIdentity) !==\n this.runtime.scope.ownerAddress ||\n n.chainId !== frame.context.chainId ||\n n.protocolAddress !== BigInt(frame.context.protocolAddress) ||\n n.tokenAddress !== BigInt(frame.context.tokenAddress) ||\n (await creditLeaf(state)) !== commitment\n ) {\n throw new Error(\"Credit role, commitment or deployment mismatch\");\n }\n if (!this.runtime.reader.getCreditRevocationBitmap)\n throw Error(\"Credit revocation reader required\");\n const bitmap = await this.runtime.reader.getCreditRevocationBitmap(\n frame.context,\n n.ownerWalletIdentity,\n frame.context.tokenAddress,\n n.revocationShard,\n Number(n.revocationSlot >> 8n),\n frame.block\n );\n if (bitmap & (1n << (n.revocationSlot & 255n))) throw Error(\"Credit grant is revoked\");\n const proof = await this.#prepare.membership(stored, frame);\n const path = [...proof.path];\n const nullifier = await computeCreditNullifier(n.chainId, n.creditSharedKey, commitment);\n await this.#prepare.assertUnspent([nullifier], frame);\n return {\n input: {\n state,\n commitment,\n role,\n treeId: stored.treeId,\n leafIndex: stored.leafIndex,\n path,\n },\n nullifier,\n source: {\n treeId: stored.treeId,\n merkleRoot: proof.root,\n },\n };\n }\n\n private base(frame: PreparationFrame, kind: OperationPlan[\"kind\"]): OperationPlan {\n return {\n version: 1,\n id: crypto.randomUUID(),\n kind,\n context: frame.context,\n scope: this.runtime.scope,\n preparedAt: frame.block,\n deadline: frame.deadline,\n outputs: [],\n inputs: [],\n funding: {},\n fundingMode: \"none\",\n };\n }\n\n async create(options: CreateCreditPreparation): Promise<Result> {\n for (const key of Object.keys(options))\n if (\n ![\n \"payload\",\n \"fee\",\n \"singleLimit\",\n \"dailyLimit\",\n \"monthlyLimit\",\n \"availableCredit\",\n \"unlimited\",\n \"tokenAddress\",\n \"spender\",\n \"expiry\",\n \"deadline\",\n ].includes(key)\n )\n throw Error(\"unsupported Credit creation option\");\n const frame = await this.#prepare.frame(options.deadline),\n expiry = this.expiry(options.expiry, frame);\n if (expiry < frame.deadline) throw Error(\"expiry before request deadline\");\n if (!this.runtime.reader.getCreditAllocation)\n throw Error(\"Credit allocation reader required\");\n const allocation = await this.runtime.reader.getCreditAllocation(\n frame.context,\n this.runtime.scope.ownerAddress,\n frame.context.tokenAddress,\n frame.block\n );\n const spender = await resolveRecipient(\n options.spender,\n recipientLookup(this.runtime.options),\n { field: \"spender\" }\n ),\n owner = await resolveRecipient(\n this.runtime.options.wallet.getReceivingAddress().toString(),\n recipientLookup(this.runtime.options),\n { field: \"wallet\" }\n );\n const output = await this.seal(\n {\n note: {\n chainId: frame.context.chainId,\n protocolAddress: BigInt(frame.context.protocolAddress),\n tokenAddress: BigInt(frame.context.tokenAddress),\n ownerWalletIdentity: this.runtime.scope.ownerAddress,\n spenderWalletIdentity: spender.ownerAddress,\n revocationShard: allocation.shard,\n revocationSlot: BigInt(allocation.slot),\n ...normalizeCreditPolicy(options),\n availableCredit:\n options.availableCredit === undefined ? 0n : options.availableCredit,\n unlimited: options.unlimited === undefined ? false : options.unlimited,\n payload: copyApplicationPayload(options.payload),\n expiry,\n nonce: generateNonce(),\n creditSharedKey: generateCreditSharedKey(),\n },\n ownerReceivingKeys: owner.getReceivingKeys(),\n spenderReceivingKeys: spender.getReceivingKeys(),\n },\n frame\n );\n const plan = this.base(frame, \"create-credit\"),\n params = {\n token: frame.context.tokenAddress,\n owner: this.runtime.scope.ownerAddress,\n revocationShard: allocation.shard,\n revocationSlot: BigInt(allocation.slot),\n creditCommitment: output.commitment,\n deadline: frame.deadline,\n ...this.fee(options),\n };\n plan.capacity = 1;\n plan.credit = {\n inputs: [],\n outputs: [output],\n deliveries: output.deliveries,\n creation: params,\n };\n plan.statement = WitnessBuilder.statement(\n \"create_credit\",\n createCreditPublicInputs(frame.context, params, output.deliveries)\n );\n await this.#prepare.assertBlock(frame);\n return this.runtime.complete(plan);\n }\n async update(options: UpdateCreditPreparation): Promise<Result> {\n for (const key of Object.keys(options))\n if (\n ![\n \"payload\",\n \"fee\",\n \"singleLimit\",\n \"dailyLimit\",\n \"monthlyLimit\",\n \"increaseAvailableCredit\",\n \"decreaseAvailableCredit\",\n \"unlimited\",\n \"tokenAddress\",\n \"credit\",\n \"expiry\",\n \"deadline\",\n \"creditInputs\",\n ].includes(key)\n )\n throw Error(\"unsupported Credit update option\");\n const frame = await this.#prepare.frame(options.deadline),\n previous = await this.input(options.credit, \"owner\", frame),\n n = previous.input.state.note;\n const changes = {\n ...Object.fromEntries(\n (\n [\n \"singleLimit\",\n \"dailyLimit\",\n \"monthlyLimit\",\n \"unlimited\",\n \"increaseAvailableCredit\",\n \"decreaseAvailableCredit\",\n \"expiry\",\n ] as const\n )\n .filter((k) => options[k] !== undefined)\n .map((k) => [k, options[k]])\n ),\n };\n const next = await deriveCreditUpdate(n, changes, frame.deadline),\n output = await this.seal(\n {\n ...previous.input.state,\n note: {\n ...next.state,\n payload: copyApplicationPayload(\n options.payload === undefined ? n.payload : options.payload\n ),\n },\n },\n frame\n );\n const params = {\n token: frame.context.tokenAddress,\n owner: n.ownerWalletIdentity,\n source: previous.source,\n nullifier: next.nullifier,\n creditCommitment: output.commitment,\n revocationShard: n.revocationShard,\n revocationSlot: n.revocationSlot,\n deadline: frame.deadline,\n ...this.fee(options),\n },\n plan = this.base(frame, \"update-credit\");\n plan.capacity = 1;\n plan.credit = {\n inputs: [previous.input],\n outputs: [output],\n deliveries: output.deliveries,\n update: params,\n updateChanges: structuredClone(changes),\n };\n plan.statement = WitnessBuilder.statement(\n \"credit_update\",\n updateCreditPublicInputs(frame.context, params, output.deliveries)\n );\n await this.#prepare.assertBlock(frame);\n return this.runtime.complete(plan);\n }\n async draw(options: DrawCreditPreparation): Promise<Result> {\n const frame = await this.#prepare.frame(options.deadline),\n profile = selectCreditDrawCircuit(options.credits.length);\n if (new Set(options.credits.map((c) => c.credit)).size !== options.credits.length)\n throw Error(\"duplicate Credit input\");\n const members = await Promise.all(\n options.credits.map(async (value) => ({\n ...(await this.input(value.credit, \"spender\", frame)),\n value,\n }))\n );\n members.sort((a, b) => {\n const x = a.input.state.note,\n y = b.input.state.note;\n for (const [u, v] of [\n [BigInt(x.ownerWalletIdentity), BigInt(y.ownerWalletIdentity)],\n [x.revocationShard, y.revocationShard],\n [x.revocationSlot, y.revocationSlot],\n ]) {\n if (u! < v!) return -1;\n if (u! > v!) return 1;\n }\n return 0;\n });\n const payers: { payer: Hex; amount: bigint }[] = [],\n sources = new Map<bigint, Hex>(),\n outputs: PreparedCreditOutput[] = [],\n recoveryAmounts: Hex[] = [],\n grantRefs: { payerIndex: bigint; shard: bigint; slot: bigint }[] = [],\n amounts: bigint[] = [];\n for (const member of members) {\n const n = member.input.state.note,\n amount = positiveAmount(member.value.amount, 126);\n if (n.expiry < frame.deadline) throw Error(\"expiry before request deadline\");\n let pi = payers.findIndex((p) => p.payer === n.ownerWalletIdentity);\n if (pi < 0) {\n pi = payers.length;\n payers.push({ payer: n.ownerWalletIdentity, amount: 0n });\n }\n payers[pi]!.amount += amount;\n grantRefs.push({\n payerIndex: BigInt(pi),\n shard: n.revocationShard,\n slot: n.revocationSlot,\n });\n if (\n sources.has(member.source.treeId) &&\n sources.get(member.source.treeId) !== member.source.merkleRoot\n )\n throw Error(\"Credit source root mismatch\");\n sources.set(member.source.treeId, member.source.merkleRoot);\n const next = await deriveCreditState(n, amount, frame.block.timestamp);\n outputs.push(\n await this.seal(\n {\n ...member.input.state,\n note: {\n ...next.state,\n payload: copyApplicationPayload(\n member.value.payload === undefined\n ? n.payload\n : member.value.payload\n ),\n },\n },\n frame\n )\n );\n recoveryAmounts.push(word(next.recoveryAmount));\n amounts.push(amount);\n }\n const totalAmount = amounts.reduce((sum, n) => sum + n, 0n),\n fee = this.fee(options),\n payment = await NoteOutput.create({\n chainId: frame.context.chainId,\n protocolAddress: frame.context.protocolAddress,\n tokenAddress: frame.context.tokenAddress,\n amount: totalAmount - fee.feeAmount,\n recipient: options.recipient.startsWith(\"0i\")\n ? { type: \"invisi\", address: options.recipient }\n : { type: \"evm\", address: options.recipient },\n payload: copyApplicationPayload(options.payload),\n }),\n ordinary = await this.#prepare.output(payment, frame.context, false);\n if (!ordinary.note)\n throw Error(\"Credit draw requires an encrypted ordinary Note recipient\");\n const deliveries = [...outputs.flatMap((o) => o.deliveries), ordinary.delivery],\n params = {\n token: frame.context.tokenAddress,\n sources: [...sources]\n .sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0))\n .map(([treeId, merkleRoot]) => ({ treeId, merkleRoot })),\n payers,\n grantRefs,\n nullifiers: members.map((m) => m.nullifier),\n creditCommitments: outputs.map((o) => o.commitment),\n recoveryAmounts,\n noteCommitment: ordinary.commitment,\n totalAmount,\n deadline: frame.deadline,\n ...fee,\n },\n plan = this.base(frame, \"draw-credit\");\n plan.capacity = profile.capacity;\n plan.outputs = [ordinary];\n plan.credit = {\n inputs: members.map((m) => m.input),\n outputs,\n deliveries,\n draw: params,\n amounts,\n };\n plan.statement = WitnessBuilder.statement(\n profile.name as CircuitName,\n creditDrawPublicInputs(frame.context, params, deliveries)\n );\n await this.#prepare.assertBlock(frame);\n return this.runtime.complete(plan);\n }\n async revoke(options: RevokeCreditPreparation): Promise<Result> {\n const frame = await this.#prepare.frame(options.deadline),\n params = {\n token: frame.context.tokenAddress,\n owner: options.owner ?? this.runtime.scope.ownerAddress,\n shard: options.shard,\n slot: options.slot,\n deadline: frame.deadline,\n ...this.fee(options),\n };\n encodeRevokeCreditTypedData(frame.context, params);\n const plan = this.base(frame, \"revoke-credit\");\n plan.credit = {\n inputs: [],\n outputs: [],\n deliveries: [],\n revocation: params,\n ...(options.caller ? { revocationCaller: options.caller } : {}),\n };\n await this.#prepare.assertBlock(frame);\n return this.runtime.complete(plan);\n }\n}\n"]}
@@ -0,0 +1,16 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
+
3
+
4
+
5
+
6
+ var _chunkJ6TZZVAMcjs = require('./chunk-J6TZZVAM.cjs');
7
+ require('./chunk-MI4IP4ZD.cjs');
8
+ require('./chunk-HCB7RQ3S.cjs');
9
+ require('./chunk-3KTQQZOW.cjs');
10
+
11
+
12
+
13
+
14
+
15
+ exports.prepareProvenance = _chunkJ6TZZVAMcjs.prepareProvenance; exports.provePreparedProvenance = _chunkJ6TZZVAMcjs.provePreparedProvenance; exports.validateBroadcastEnvelope = _chunkJ6TZZVAMcjs.validateBroadcastEnvelope; exports.validatePreparedBroadcast = _chunkJ6TZZVAMcjs.validatePreparedBroadcast;
16
+ //# sourceMappingURL=provenance-preparation-43DN2WK7.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/wx/Workspace/invisi-lab/invisi-sdk-ts/packages/sdk/dist/provenance-preparation-43DN2WK7.cjs"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACA;AACF,wDAA6B;AAC7B,gCAA6B;AAC7B,gCAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACA;AACA;AACA;AACF,+SAAC","file":"/Users/wx/Workspace/invisi-lab/invisi-sdk-ts/packages/sdk/dist/provenance-preparation-43DN2WK7.cjs"}
@@ -0,0 +1,16 @@
1
+ import {
2
+ prepareProvenance,
3
+ provePreparedProvenance,
4
+ validateBroadcastEnvelope,
5
+ validatePreparedBroadcast
6
+ } from "./chunk-ZD2652WH.js";
7
+ import "./chunk-3D24ABYR.js";
8
+ import "./chunk-THMD5QO2.js";
9
+ import "./chunk-R5YAOJKB.js";
10
+ export {
11
+ prepareProvenance,
12
+ provePreparedProvenance,
13
+ validateBroadcastEnvelope,
14
+ validatePreparedBroadcast
15
+ };
16
+ //# sourceMappingURL=provenance-preparation-HEZE4L5H.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,59 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _createStarExport(obj) { Object.keys(obj) .filter((key) => key !== "default" && key !== "__esModule") .forEach((key) => { if (exports.hasOwnProperty(key)) { return; } Object.defineProperty(exports, key, {enumerable: true, configurable: true, get: () => obj[key]}); }); } async function _asyncNullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return await rhsFn(); } }
2
+
3
+ var _chunkMI4IP4ZDcjs = require('./chunk-MI4IP4ZD.cjs');
4
+
5
+
6
+
7
+
8
+ var _chunk3KTQQZOWcjs = require('./chunk-3KTQQZOW.cjs');
9
+
10
+ // src/provenance.ts
11
+ var _provenance = require('@invisi-labs/protocol/provenance'); _createStarExport(_provenance);
12
+ var _provenance3 = require('@invisi-labs/rpc/provenance'); _createStarExport(_provenance3);
13
+ var _provenancewitness = require('@invisi-labs/prover/provenance-witness'); _createStarExport(_provenancewitness);
14
+
15
+ // src/provenance/Provenance.ts
16
+
17
+ var Provenance = class {
18
+ constructor(options = {}) {
19
+ this.options = options;
20
+ }
21
+ #official = new (0, _provenance3.OfficialProvenanceClients)();
22
+ async client(scope) {
23
+ const client = await _asyncNullishCoalesce(this.options.client, async () => ( await this.#official.get(scope)));
24
+ if (BigInt(client.trust.chainId) !== BigInt(scope.chainId) || BigInt(client.trust.protocolAddress) !== BigInt(scope.protocolAddress))
25
+ throw Error("Provenance client deployment mismatch");
26
+ return client;
27
+ }
28
+ async prove(ready, options = {}) {
29
+ const cached = options.reprove ? void 0 : await _chunk3KTQQZOWcjs.readOperationProvenance.call(void 0, ready);
30
+ if (cached)
31
+ return _chunkMI4IP4ZDcjs.validateProvenanceProof.call(void 0, cached, (await this.client(cached.context)).trust);
32
+ const prover = this.options.prover;
33
+ if (!prover) throw Error("NativeProver required to generate Provenance proof");
34
+ const scope = await _chunk3KTQQZOWcjs.operationProvenanceContext.call(void 0, ready);
35
+ const capability = await prover.getProvenanceCapability();
36
+ const client = await this.client(scope);
37
+ const proof = await _chunk3KTQQZOWcjs.proveOperationProvenance.call(void 0,
38
+ ready,
39
+ {
40
+ ...capability,
41
+ client,
42
+ ...this.options.maxRootPages === void 0 ? {} : { maxRootPages: this.options.maxRootPages },
43
+ ...this.options.maxLeaves === void 0 ? {} : { maxLeaves: this.options.maxLeaves }
44
+ },
45
+ options.reprove === true
46
+ );
47
+ return _chunkMI4IP4ZDcjs.validateProvenanceProof.call(void 0, proof, client.trust);
48
+ }
49
+ async submit(proof) {
50
+ const copy = structuredClone(proof);
51
+ const client = await this.client(copy.context);
52
+ const packet = await _chunkMI4IP4ZDcjs.validateProvenanceProof.call(void 0, copy, client.trust);
53
+ return client.submitSourceProof(packet.data, packet.sidecars);
54
+ }
55
+ };
56
+
57
+
58
+ exports.Provenance = Provenance;
59
+ //# sourceMappingURL=provenance.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/wx/Workspace/invisi-lab/invisi-sdk-ts/packages/sdk/dist/provenance.cjs","../src/provenance.ts","../src/provenance/Provenance.ts"],"names":[],"mappings":"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","file":"/Users/wx/Workspace/invisi-lab/invisi-sdk-ts/packages/sdk/dist/provenance.cjs","sourcesContent":[null,"export * from \"@invisi-labs/protocol/provenance\";\nexport * from \"@invisi-labs/rpc/provenance\";\nexport * from \"@invisi-labs/prover/provenance-witness\";\nexport { Provenance, type ProvenanceOptions } from \"./provenance/Provenance\";\nexport type { ProvenanceProof } from \"./provenance/proof-record\";\n\nexport type { PreparedProvenanceCapability } from \"./broadcaster/provenance-preparation\";\n","import { OfficialProvenanceClients, type ProvenanceClient } from \"@invisi-labs/rpc/provenance\";\nimport { type PublicResult, type Scope } from \"@invisi-labs/protocol/provenance\";\nimport { type ProvenanceProvider } from \"@invisi-labs/prover/provenance-witness\";\nimport {\n proveOperationProvenance,\n readOperationProvenance,\n operationProvenanceContext,\n type BroadcasterTransaction,\n} from \"../broadcaster/operation-bridge\";\nimport { validateProvenanceProof, type ProvenanceProof } from \"./proof-record\";\n\nexport interface ProvenanceOptions {\n prover?: ProvenanceProvider;\n client?: ProvenanceClient;\n maxRootPages?: number;\n maxLeaves?: number;\n}\n\nexport class Provenance {\n readonly #official = new OfficialProvenanceClients();\n constructor(private readonly options: ProvenanceOptions = {}) {}\n\n private async client(scope: Scope): Promise<ProvenanceClient> {\n const client = this.options.client ?? (await this.#official.get(scope));\n if (\n BigInt(client.trust.chainId) !== BigInt(scope.chainId) ||\n BigInt(client.trust.protocolAddress) !== BigInt(scope.protocolAddress)\n )\n throw Error(\"Provenance client deployment mismatch\");\n return client;\n }\n\n async prove(\n ready: BroadcasterTransaction,\n options: { reprove?: boolean } = {}\n ): Promise<ProvenanceProof> {\n const cached = options.reprove ? undefined : await readOperationProvenance(ready);\n if (cached)\n return validateProvenanceProof(cached, (await this.client(cached.context)).trust);\n const prover = this.options.prover;\n if (!prover) throw Error(\"NativeProver required to generate Provenance proof\");\n const scope = await operationProvenanceContext(ready);\n const capability = await prover.getProvenanceCapability();\n const client = await this.client(scope);\n const proof = await proveOperationProvenance(\n ready,\n {\n ...capability,\n client,\n ...(this.options.maxRootPages === undefined\n ? {}\n : { maxRootPages: this.options.maxRootPages }),\n ...(this.options.maxLeaves === undefined\n ? {}\n : { maxLeaves: this.options.maxLeaves }),\n },\n options.reprove === true\n );\n return validateProvenanceProof(proof, client.trust);\n }\n\n async submit(proof: ProvenanceProof): Promise<PublicResult> {\n const copy = structuredClone(proof);\n const client = await this.client(copy.context);\n const packet = await validateProvenanceProof(copy, client.trust);\n return client.submitSourceProof(packet.data, packet.sidecars);\n }\n}\n"]}
@@ -0,0 +1,34 @@
1
+ import { PublicResult } from '@invisi-labs/protocol/provenance';
2
+ export * from '@invisi-labs/protocol/provenance';
3
+ import { ProvenanceClient } from '@invisi-labs/rpc/provenance';
4
+ export * from '@invisi-labs/rpc/provenance';
5
+ import { ProvenanceProvider } from '@invisi-labs/prover/provenance-witness';
6
+ export * from '@invisi-labs/prover/provenance-witness';
7
+ import { B as BroadcasterTransaction, P as ProvenanceProof } from './operation-bridge-CoECSxfi.cjs';
8
+ export { a as PreparedProvenanceCapability } from './operation-bridge-CoECSxfi.cjs';
9
+ import '@invisi-labs/primitives';
10
+ import '@invisi-labs/prover';
11
+ import '@invisi-labs/protocol';
12
+ import '@invisi-labs/rpc/broadcaster';
13
+ import '@invisi-labs/protocol/contracts';
14
+ import 'ethers';
15
+ import '@invisi-labs/rpc';
16
+
17
+ interface ProvenanceOptions {
18
+ prover?: ProvenanceProvider;
19
+ client?: ProvenanceClient;
20
+ maxRootPages?: number;
21
+ maxLeaves?: number;
22
+ }
23
+ declare class Provenance {
24
+ #private;
25
+ private readonly options;
26
+ constructor(options?: ProvenanceOptions);
27
+ private client;
28
+ prove(ready: BroadcasterTransaction, options?: {
29
+ reprove?: boolean;
30
+ }): Promise<ProvenanceProof>;
31
+ submit(proof: ProvenanceProof): Promise<PublicResult>;
32
+ }
33
+
34
+ export { Provenance, type ProvenanceOptions, ProvenanceProof };