@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
@@ -1,398 +0,0 @@
1
- import { Hex, Note, CreditDeliveryState, ViewingCapability, Wallet, PublicWallet, WalletAuthorizationProvider } from '@invisi-labs/core';
2
- import { Address, Hex as Hex$1, Delivery, ShieldParams, ShieldOutput, CreateCreditParams, CreditDrawParams, CancelCreditParams, TopUpCreditParams, TransactRequest } from '@invisi-labs/protocol/contracts';
3
- import { c as StoredNote, W as WalletScope, b as WalletStore } from './state-C4HZFotm.js';
4
- import { FundingInput, TransactionContext, CanonicalBlock, NoteMembership, TransactRequestParams, CreditMembership, Protocol, ChainReader, ProtocolDataProvider, TokenProtocol } from '@invisi-labs/protocol';
5
- import { Signer, Provider } from 'ethers';
6
- import * as _invisi_labs_prover from '@invisi-labs/prover';
7
- import { Prover, ProverOptions, AggregateMember } from '@invisi-labs/prover';
8
-
9
- type PreparationIntent = {
10
- kind: "transfer";
11
- options: TransferPreparation;
12
- } | {
13
- kind: "shield";
14
- options: ShieldPreparation;
15
- } | {
16
- kind: "create-credit";
17
- options: CreateCreditPreparation;
18
- } | {
19
- kind: "top-up-credit";
20
- options: TopUpCreditPreparation;
21
- } | {
22
- kind: "cancel-credit";
23
- options: CancelCreditPreparation;
24
- };
25
- type BroadcasterFeeSource = "public-funding" | "private-inputs" | "payout";
26
- interface WithBroadcasterOptions {
27
- maxFeeAmount: bigint;
28
- feeSource?: BroadcasterFeeSource;
29
- maxAttempts?: number;
30
- /** Optional app-owned permit signing, requested once for the final gross funding amount. */
31
- fundingPermit?: (request: {
32
- payer: `0x${string}`;
33
- amount: bigint;
34
- tokenAddress: `0x${string}`;
35
- protocolAddress: `0x${string}`;
36
- }) => Promise<NonNullable<TransferPreparation["funding"]>["permit"]>;
37
- }
38
-
39
- interface GasBenchmarkShape {
40
- kind: OperationPlan["kind"];
41
- target: string;
42
- capacity: number;
43
- noteInputs: number;
44
- noteOutputs: number;
45
- sourceTrees: number;
46
- creditInputs: number;
47
- creditOutputs: number;
48
- creditRemainders: number;
49
- funding: "none" | "caller" | "signature";
50
- permit: boolean;
51
- deliveryBytes: number;
52
- }
53
- interface GasBenchmarkDeployment {
54
- chainId: string;
55
- protocolAddress: Hex;
56
- runtimeCodeHash: Hex | null;
57
- tokenAddress: Hex;
58
- }
59
- interface GasBenchmarkCircuit {
60
- circuitName: string;
61
- target: string;
62
- artifactSha256: string;
63
- vkSha256: string;
64
- }
65
- interface GasBenchmarkSample {
66
- gasUsed: string;
67
- transactionHash: Hex;
68
- blockNumber: string;
69
- blockHash: Hex;
70
- calldataBytes: number;
71
- }
72
- interface GasBenchmarkProfile {
73
- formatVersion: 1;
74
- id: string;
75
- deployment: GasBenchmarkDeployment;
76
- source: {
77
- protocolCommit: string;
78
- fingerprints?: {
79
- protocolSourceSha256: string;
80
- dirtyDiffSha256: string;
81
- compiledArtifactsSha256: string;
82
- creditManifestSha256: string;
83
- userManifestSha256: string;
84
- sdkSourceSha256: string;
85
- };
86
- toolchain?: {
87
- solidity: string;
88
- barretenberg: string;
89
- noir: string;
90
- evmVersion: string;
91
- optimizerRuns: number;
92
- anvil: string;
93
- };
94
- blockGasLimit?: string;
95
- runtimeContracts?: Record<string, {
96
- address: Hex;
97
- runtimeCodeHash: Hex;
98
- }>;
99
- measuredAt: string;
100
- chain: string;
101
- hardfork: string;
102
- token: string;
103
- verifier: "real";
104
- assumptions: string[];
105
- };
106
- measurements: Array<{
107
- id: string;
108
- shape: GasBenchmarkShape;
109
- circuit: GasBenchmarkCircuit | null;
110
- samples: GasBenchmarkSample[];
111
- }>;
112
- }
113
- /** Parse a trusted, JSON-compatible benchmark catalog. No network access or publisher authentication. */
114
- declare function defineGasBenchmarks(input: unknown): GasBenchmarkProfile[];
115
- /** Pre-proof reference only; ethers must estimate the final transaction independently. */
116
- interface GasReference {
117
- gasUnits: bigint;
118
- }
119
-
120
- interface CoinSelector {
121
- select(candidates: readonly StoredNote[], requiredAmount: bigint): readonly Hex$1[] | Promise<readonly Hex$1[]>;
122
- }
123
- interface FundingTypedData {
124
- domain: Record<string, unknown>;
125
- primaryType: string;
126
- types: Record<string, readonly {
127
- name: string;
128
- type: string;
129
- }[]>;
130
- message: Record<string, unknown>;
131
- }
132
- interface FundingSigner {
133
- readonly address: Address;
134
- signTypedData(data: FundingTypedData): Promise<Hex$1>;
135
- }
136
- interface FundingAuthorizationVerifier {
137
- verifyTypedData(data: FundingTypedData & {
138
- address: Address;
139
- signature: Hex$1;
140
- }): Promise<boolean>;
141
- }
142
- interface FundingSource {
143
- payer: Address;
144
- amount: bigint;
145
- authorization?: "signature" | "caller";
146
- sigNonce?: bigint;
147
- deadline?: bigint;
148
- permit?: NonNullable<FundingInput["permit"]>;
149
- }
150
- /** Public submission mode; backend proof targets are selected internally. */
151
- type TransactionExecution = "single" | "aggregate";
152
- interface TransactionProveOptions extends ProverOptions {
153
- /** Defaults to single. Aggregate produces a member for a separate aggregate submission. */
154
- execution?: TransactionExecution;
155
- }
156
- interface TransferPreparation {
157
- tokenAddress: Address;
158
- /** Explicit subset for managed inventory; detached calls already supply inputs. */
159
- commitments?: readonly Hex$1[];
160
- /** Public ERC20 payout. Empty private outputs are allowed when a payout is present. */
161
- withdrawal?: {
162
- to: Address;
163
- amount: bigint;
164
- };
165
- /** Immediate public fee paid from this operation's token. */
166
- fee?: {
167
- recipient: Address;
168
- amount: bigint;
169
- };
170
- outputs: readonly NoteOutput[];
171
- funding?: FundingSource;
172
- deadline?: bigint;
173
- }
174
- interface ShieldPreparation {
175
- fee?: {
176
- recipient: Address;
177
- amount: bigint;
178
- };
179
- tokenAddress: Address;
180
- outputs: readonly NoteOutput[];
181
- funding: FundingSource;
182
- deadline?: bigint;
183
- }
184
- interface PreparedOutput {
185
- context: NoteOutputContext;
186
- recipient: NoteOutputRecipient;
187
- amount: bigint;
188
- note?: Note;
189
- commitment: Hex$1;
190
- identity: Hex$1;
191
- delivery: Delivery;
192
- /** Only offline encrypted EVM outputs may await registry-key resolution. */
193
- deliveryPending?: true;
194
- address: string;
195
- change: boolean;
196
- }
197
- interface CreateCreditPreparation {
198
- fee?: {
199
- recipient: Address;
200
- amount: bigint;
201
- };
202
- /** Version-specific application data. Omission uses built-in v1 with no data. */
203
- payload?: Uint8Array;
204
- singleLimit?: bigint;
205
- dailyLimit?: bigint;
206
- monthlyLimit?: bigint;
207
- tokenAddress: Address;
208
- spender: string;
209
- amount: bigint;
210
- expiry: bigint;
211
- funding?: FundingSource;
212
- deadline?: bigint;
213
- }
214
- interface DrawCreditPreparation {
215
- tokenAddress: Address;
216
- credits: readonly {
217
- credit: Hex$1;
218
- amount: bigint;
219
- payload?: Uint8Array;
220
- }[];
221
- deadline?: bigint;
222
- }
223
- interface TopUpCreditPreparation {
224
- fee?: {
225
- recipient: Address;
226
- amount: bigint;
227
- };
228
- /** Version-specific application data. Omission uses built-in v1 with no data. */
229
- payload?: Uint8Array;
230
- /** Omission inherits the previous limit; zero disables it without clearing usage. */
231
- singleLimit?: bigint;
232
- dailyLimit?: bigint;
233
- monthlyLimit?: bigint;
234
- tokenAddress: Address;
235
- credit: Hex$1;
236
- additionalAmount: bigint;
237
- expiry?: bigint;
238
- funding?: FundingSource;
239
- deadline?: bigint;
240
- }
241
- interface CancelCreditPreparation {
242
- fee?: {
243
- recipient: Address;
244
- amount: bigint;
245
- };
246
- tokenAddress: Address;
247
- credit: Hex$1;
248
- deadline?: bigint;
249
- }
250
- interface PreparedCreditOutput {
251
- state: CreditDeliveryState;
252
- commitment: Hex$1;
253
- deliveries: [Delivery, Delivery];
254
- }
255
- interface PreparedCreditInput extends CreditMembership {
256
- commitment: Hex$1;
257
- role: "owner" | "spender";
258
- }
259
- interface CreditPlan {
260
- inputs: PreparedCreditInput[];
261
- outputs: PreparedCreditOutput[];
262
- deliveries: Delivery[];
263
- creation?: CreateCreditParams;
264
- draw?: CreditDrawParams;
265
- cancel?: CancelCreditParams;
266
- topUp?: TopUpCreditParams;
267
- amounts?: bigint[];
268
- }
269
- interface OperationPlan {
270
- intent?: PreparationIntent;
271
- version: 1;
272
- id: string;
273
- kind: "transfer" | "shield" | "create-credit" | "draw-credit" | "top-up-credit" | "cancel-credit";
274
- context: TransactionContext;
275
- scope: WalletScope;
276
- preparedAt: CanonicalBlock;
277
- deadline: bigint;
278
- outputs: PreparedOutput[];
279
- inputs: Array<NoteMembership & {
280
- commitment: Hex$1;
281
- }>;
282
- funding: FundingInput;
283
- fundingMode: "none" | "signature" | "caller";
284
- params?: TransactRequestParams;
285
- shieldParams?: ShieldParams;
286
- shieldOutputs?: ShieldOutput[];
287
- capacity?: number;
288
- credit?: CreditPlan;
289
- statement?: _invisi_labs_prover.ProofStatement;
290
- }
291
- type WalletSessionOptions = WalletSessionInfrastructure;
292
- /** Shared runtime fields; public options separately enforce the custom registry requirement. */
293
- interface WalletSessionInfrastructure {
294
- gasBenchmarks?: readonly GasBenchmarkProfile[];
295
- /** Optional ethers gas/funding signer; distinct from the Invisi wallet authority. */
296
- signer?: Signer;
297
- viewing?: Pick<ViewingCapability, "ownerAddress" | "decryptNote" | "decryptCredit">;
298
- wallet: Wallet | PublicWallet;
299
- protocol: Protocol;
300
- namespace?: string;
301
- store?: WalletStore;
302
- chainReader?: ChainReader;
303
- protocolRpc?: ProtocolDataProvider;
304
- authorization?: WalletAuthorizationProvider;
305
- prover?: Prover;
306
- fundingSigner?: FundingSigner;
307
- fundingVerifier?: FundingAuthorizationVerifier;
308
- /** Optional ethers provider used by per-output direct-chain receiving-key lookup. */
309
- provider?: Provider;
310
- coinSelector?: CoinSelector;
311
- transactionTTL?: bigint;
312
- }
313
- interface OperationRuntime {
314
- options: Omit<WalletSessionOptions, "protocol"> & {
315
- protocol: TokenProtocol;
316
- };
317
- scope: WalletScope;
318
- store: WalletStore;
319
- reader: ChainReader;
320
- authorization: () => WalletAuthorizationProvider;
321
- }
322
- interface OperationAggregateMember extends AggregateMember {
323
- context: TransactionContext;
324
- request: TransactRequest;
325
- }
326
-
327
- type AddressLookup = "chain" | "protocol-rpc";
328
-
329
- interface NoteOutputContext {
330
- chainId: bigint;
331
- protocolAddress: Hex$1;
332
- tokenAddress: Hex$1;
333
- }
334
- type NoteOutputRecipient = {
335
- type: "evm";
336
- address: string;
337
- envelope?: boolean;
338
- addressLookup?: AddressLookup;
339
- nonce?: bigint | undefined;
340
- } | {
341
- type: "invisi";
342
- address: string;
343
- nonce?: bigint | undefined;
344
- } | {
345
- type: "identity";
346
- identity: Hex$1;
347
- };
348
- type EncryptedRecipient = {
349
- type: "evm";
350
- address: string;
351
- envelope?: true;
352
- addressLookup?: AddressLookup;
353
- nonce?: bigint | undefined;
354
- } | {
355
- type: "invisi";
356
- address: string;
357
- nonce?: bigint | undefined;
358
- };
359
- type NoteOutputOptions = NoteOutputContext & {
360
- amount: bigint;
361
- } & ({
362
- recipient: EncryptedRecipient;
363
- payload?: Uint8Array;
364
- } | {
365
- recipient: {
366
- type: "evm";
367
- address: string;
368
- envelope: false;
369
- addressLookup?: AddressLookup;
370
- nonce?: bigint | undefined;
371
- } | {
372
- type: "identity";
373
- identity: Hex$1;
374
- };
375
- payload?: never;
376
- });
377
- /** Immutable output statement and optional recoverable opening. */
378
- declare class NoteOutput {
379
- readonly to: string;
380
- readonly amount: bigint;
381
- readonly identity: Hex$1;
382
- readonly commitment: Hex$1;
383
- readonly deliveryFingerprint: Hex$1;
384
- /** Encrypted EVM delivery is resolved by preparation; the original offline intent stays pending. */
385
- readonly deliveryPending: boolean;
386
- readonly context: NoteOutputContext;
387
- readonly recipient: NoteOutputRecipient;
388
- readonly nonce: bigint | undefined;
389
- readonly payload: Uint8Array;
390
- readonly preparedOutput: PreparedOutput;
391
- private constructor();
392
- static create(options: NoteOutputOptions): Promise<NoteOutput>;
393
- assertCommitment(expectedHex: Hex$1): void;
394
- get note(): Note | undefined;
395
- get delivery(): Delivery;
396
- }
397
-
398
- export { type BroadcasterFeeSource as B, type CancelCreditPreparation as C, type DrawCreditPreparation as D, type FundingAuthorizationVerifier as F, type GasReference as G, NoteOutput as N, type OperationRuntime as O, type PreparationIntent as P, type ShieldPreparation as S, type TransactionProveOptions as T, type WithBroadcasterOptions as W, type OperationPlan as a, type OperationAggregateMember as b, type CreateCreditPreparation as c, type TopUpCreditPreparation as d, type TransferPreparation as e, type WalletSessionOptions as f, type WalletSessionInfrastructure as g, type CoinSelector as h, type FundingSigner as i, type FundingSource as j, type FundingTypedData as k, type GasBenchmarkCircuit as l, type GasBenchmarkDeployment as m, type GasBenchmarkProfile as n, type GasBenchmarkSample as o, type GasBenchmarkShape as p, type NoteOutputContext as q, type NoteOutputOptions as r, type NoteOutputRecipient as s, type TransactionExecution as t, defineGasBenchmarks as u };
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/broadcaster-preparation.ts"],"sourcesContent":["import { getAddress } from \"ethers\";\nimport type { BroadcasterClient, SignedBroadcasterQuote } from \"./broadcaster\";\nimport type {\n OperationPlan,\n PreparationRuntime,\n TransferPreparation,\n ShieldPreparation,\n CreateCreditPreparation,\n TopUpCreditPreparation,\n CancelCreditPreparation,\n} from \"./session/operation-types\";\nimport { TransactionPreparation } from \"./session/transaction-preparation\";\nimport { exportBroadcasterIntent } from \"./session/operation-protocol\";\nexport type PreparationIntent =\n | { kind: \"transfer\"; options: TransferPreparation }\n | { kind: \"shield\"; options: ShieldPreparation }\n | { kind: \"create-credit\"; options: CreateCreditPreparation }\n | { kind: \"top-up-credit\"; options: TopUpCreditPreparation }\n | { kind: \"cancel-credit\"; options: CancelCreditPreparation };\nexport type BroadcasterFeeSource = \"public-funding\" | \"private-inputs\" | \"payout\";\nexport interface WithBroadcasterOptions {\n maxFeeAmount: bigint;\n feeSource?: BroadcasterFeeSource;\n maxAttempts?: number;\n /** Optional app-owned permit signing, requested once for the final gross funding amount. */\n fundingPermit?: (request: {\n payer: `0x${string}`;\n amount: bigint;\n tokenAddress: `0x${string}`;\n protocolAddress: `0x${string}`;\n }) => Promise<NonNullable<TransferPreparation[\"funding\"]>[\"permit\"]>;\n}\nexport async function prepareIntent(\n runtime: PreparationRuntime<OperationPlan>,\n intent: PreparationIntent\n): Promise<OperationPlan> {\n const preparation = new TransactionPreparation(runtime);\n switch (intent.kind) {\n case \"transfer\":\n return preparation.prepareTransfer(intent.options);\n case \"shield\":\n return preparation.prepareShield(intent.options);\n case \"create-credit\":\n return preparation.prepareCreateCredit(intent.options);\n case \"top-up-credit\":\n return preparation.prepareTopUpCredit(intent.options);\n case \"cancel-credit\":\n return preparation.prepareCancelCredit(intent.options);\n }\n}\nexport async function prepareBroadcasterPlan(\n plan: OperationPlan,\n reprepare: (intent: PreparationIntent) => Promise<OperationPlan>,\n client: BroadcasterClient,\n options: WithBroadcasterOptions\n): Promise<{ plan: OperationPlan; quote: SignedBroadcasterQuote }> {\n if (!plan.intent) throw new Error(\"operation has no supported preparation intent\");\n const intent = structuredClone(plan.intent);\n intent.options.deadline = plan.deadline;\n const maxFee = options.maxFeeAmount;\n const attempts = options.maxAttempts ?? 4;\n if (typeof maxFee !== \"bigint\" || maxFee <= 0n || maxFee >= 1n << 128n)\n throw new Error(\"maxFeeAmount must be a positive uint128\");\n if (!Number.isInteger(attempts) || attempts < 1 || attempts > 16)\n throw new Error(\"maxAttempts must be 1..16\");\n const funding = \"funding\" in intent.options ? intent.options.funding : undefined;\n let source =\n options.feeSource ??\n (intent.kind === \"cancel-credit\"\n ? \"payout\"\n : funding\n ? \"public-funding\"\n : \"private-inputs\");\n if (![\"public-funding\", \"private-inputs\", \"payout\"].includes(source))\n throw new Error(\"unsupported fee source\");\n if (\n intent.kind === \"cancel-credit\"\n ? source !== \"payout\"\n : source === \"payout\" || (intent.kind === \"shield\" && source !== \"public-funding\")\n )\n throw new Error(\"fee source is unavailable for this operation\");\n if (source === \"public-funding\" && !funding)\n throw new Error(\"public funding fee requires an explicit payer\");\n const permitCallback = options.fundingPermit;\n let schedule = await client.fee(plan.context.tokenAddress, exportBroadcasterIntent(plan).data);\n let previousAmount = 0n;\n for (let i = 0; i < attempts; i++) {\n const minimum = BigInt(schedule.feeAmount);\n const amount = minimum > previousAmount ? minimum : previousAmount;\n const recipient = getAddress(schedule.feeRecipient) as `0x${string}`;\n if (amount <= 0n || amount > maxFee || amount >= 1n << 128n || BigInt(recipient) === 0n)\n throw new Error(\"broadcaster fee exceeds user limit or is invalid\");\n // Prefer already available private change; never add a payer implicitly.\n if (\n options.feeSource === undefined &&\n funding &&\n plan.inputs.length > 0 &&\n (intent.kind === \"transfer\" ||\n intent.kind === \"create-credit\" ||\n intent.kind === \"top-up-credit\")\n ) {\n const business =\n intent.kind === \"transfer\"\n ? intent.options.outputs.reduce(\n (sum, output) => sum + output.amount,\n intent.options.withdrawal?.amount ?? 0n\n )\n : intent.kind === \"create-credit\"\n ? intent.options.amount\n : intent.options.additionalAmount;\n const change =\n plan.inputs.reduce((sum, input) => sum + input.note.amount, funding.amount) -\n business;\n source = change >= amount ? \"private-inputs\" : \"public-funding\";\n }\n if (\n source === \"public-funding\" &&\n funding?.permit &&\n funding.permit.deadline !== 0n &&\n !permitCallback\n )\n throw new Error(\n \"existing permit cannot fund an increased amount; provide fundingPermit for final gross funding or approve separately\"\n );\n if (source === \"payout\" && amount >= plan.credit!.cancel!.amount)\n throw new Error(\"fee must be less than the cancellation refund\");\n const request = structuredClone(intent);\n request.options.fee = { recipient, amount };\n if (funding && \"funding\" in request.options) {\n const signedFunding = { ...funding };\n if (funding.authorization === \"caller\") {\n delete signedFunding.sigNonce;\n delete signedFunding.deadline;\n }\n request.options.funding = {\n ...signedFunding,\n amount: funding.amount + (source === \"public-funding\" ? amount : 0n),\n authorization: \"signature\",\n };\n }\n const next = await reprepare(request);\n if (source === \"private-inputs\" && next.inputs.length === 0)\n throw new Error(\"private-inputs fee requires private funds\");\n const recalculated = await client.fee(\n plan.context.tokenAddress,\n exportBroadcasterIntent(next).data\n );\n const required = BigInt(recalculated.feeAmount);\n if (\n getAddress(recalculated.feeRecipient) !== recipient ||\n required <= 0n ||\n required > maxFee\n )\n throw new Error(\"broadcaster fee exceeds user limit or recipient changed\");\n if (amount >= required) {\n let final = next;\n if (permitCallback) {\n if (!funding || !(\"funding\" in request.options))\n throw new Error(\"fundingPermit requires public funding\");\n const permit = await permitCallback({\n payer: funding.payer,\n amount: request.options.funding!.amount,\n tokenAddress: plan.context.tokenAddress,\n protocolAddress: plan.context.protocolAddress,\n });\n if (!permit) throw new Error(\"fundingPermit did not return a permit\");\n request.options.funding = { ...request.options.funding!, permit };\n final = await reprepare(request);\n const permitted = await client.fee(\n plan.context.tokenAddress,\n exportBroadcasterIntent(final).data\n );\n if (\n getAddress(permitted.feeRecipient) !== recipient ||\n BigInt(permitted.feeAmount) > amount\n )\n throw new Error(\"permit changed the required fee; prepare again\");\n }\n final.intent = structuredClone(intent);\n return {\n plan: final,\n quote: await client.quote(exportBroadcasterIntent(final).data, {\n chainId: final.context.chainId,\n protocol: final.context.protocolAddress,\n }),\n };\n }\n previousAmount = amount;\n schedule = recalculated;\n }\n throw new Error(\"broadcaster fee did not stabilize within the preparation limit\");\n}\n"],"mappings":"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","names":[]}