@lifi/composer-sdk 0.0.1-alpha

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 (160) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +220 -0
  3. package/dist/authoring/FlowBuilderCore.cjs +115 -0
  4. package/dist/authoring/FlowBuilderCore.cjs.map +1 -0
  5. package/dist/authoring/FlowBuilderCore.d.cts +114 -0
  6. package/dist/authoring/FlowBuilderCore.d.ts +114 -0
  7. package/dist/authoring/FlowBuilderCore.js +91 -0
  8. package/dist/authoring/FlowBuilderCore.js.map +1 -0
  9. package/dist/authoring/handles.cjs +43 -0
  10. package/dist/authoring/handles.cjs.map +1 -0
  11. package/dist/authoring/handles.d.cts +61 -0
  12. package/dist/authoring/handles.d.ts +61 -0
  13. package/dist/authoring/handles.js +17 -0
  14. package/dist/authoring/handles.js.map +1 -0
  15. package/dist/authoring/raw.cjs +41 -0
  16. package/dist/authoring/raw.cjs.map +1 -0
  17. package/dist/authoring/raw.d.cts +47 -0
  18. package/dist/authoring/raw.d.ts +47 -0
  19. package/dist/authoring/raw.js +16 -0
  20. package/dist/authoring/raw.js.map +1 -0
  21. package/dist/authoring/signatureArgs.cjs +114 -0
  22. package/dist/authoring/signatureArgs.cjs.map +1 -0
  23. package/dist/authoring/signatureArgs.d.cts +146 -0
  24. package/dist/authoring/signatureArgs.d.ts +146 -0
  25. package/dist/authoring/signatureArgs.js +87 -0
  26. package/dist/authoring/signatureArgs.js.map +1 -0
  27. package/dist/client.cjs +140 -0
  28. package/dist/client.cjs.map +1 -0
  29. package/dist/client.d.cts +67 -0
  30. package/dist/client.d.ts +67 -0
  31. package/dist/client.js +116 -0
  32. package/dist/client.js.map +1 -0
  33. package/dist/discovery.cjs +17 -0
  34. package/dist/discovery.cjs.map +1 -0
  35. package/dist/discovery.d.cts +56 -0
  36. package/dist/discovery.d.ts +56 -0
  37. package/dist/discovery.js +1 -0
  38. package/dist/discovery.js.map +1 -0
  39. package/dist/errors.cjs +91 -0
  40. package/dist/errors.cjs.map +1 -0
  41. package/dist/errors.d.cts +77 -0
  42. package/dist/errors.d.ts +77 -0
  43. package/dist/errors.js +65 -0
  44. package/dist/errors.js.map +1 -0
  45. package/dist/generated/config.generated.cjs +17 -0
  46. package/dist/generated/config.generated.cjs.map +1 -0
  47. package/dist/generated/config.generated.d.cts +144 -0
  48. package/dist/generated/config.generated.d.ts +144 -0
  49. package/dist/generated/config.generated.js +1 -0
  50. package/dist/generated/config.generated.js.map +1 -0
  51. package/dist/generated/guards.generated.cjs +32 -0
  52. package/dist/generated/guards.generated.cjs.map +1 -0
  53. package/dist/generated/guards.generated.d.cts +4 -0
  54. package/dist/generated/guards.generated.d.ts +4 -0
  55. package/dist/generated/guards.generated.js +8 -0
  56. package/dist/generated/guards.generated.js.map +1 -0
  57. package/dist/generated/materialisers.generated.cjs +44 -0
  58. package/dist/generated/materialisers.generated.cjs.map +1 -0
  59. package/dist/generated/materialisers.generated.d.cts +4 -0
  60. package/dist/generated/materialisers.generated.d.ts +4 -0
  61. package/dist/generated/materialisers.generated.js +18 -0
  62. package/dist/generated/materialisers.generated.js.map +1 -0
  63. package/dist/generated/operations.generated.cjs +110 -0
  64. package/dist/generated/operations.generated.cjs.map +1 -0
  65. package/dist/generated/operations.generated.d.cts +337 -0
  66. package/dist/generated/operations.generated.d.ts +337 -0
  67. package/dist/generated/operations.generated.js +89 -0
  68. package/dist/generated/operations.generated.js.map +1 -0
  69. package/dist/generated/preconditions.generated.cjs +44 -0
  70. package/dist/generated/preconditions.generated.cjs.map +1 -0
  71. package/dist/generated/preconditions.generated.d.cts +4 -0
  72. package/dist/generated/preconditions.generated.d.ts +4 -0
  73. package/dist/generated/preconditions.generated.js +18 -0
  74. package/dist/generated/preconditions.generated.js.map +1 -0
  75. package/dist/guards.generated-DKKDKREA.d.ts +14 -0
  76. package/dist/guards.generated-hrQ1KPNv.d.cts +14 -0
  77. package/dist/index.cjs +76 -0
  78. package/dist/index.cjs.map +1 -0
  79. package/dist/index.d.cts +99 -0
  80. package/dist/index.d.ts +99 -0
  81. package/dist/index.js +30 -0
  82. package/dist/index.js.map +1 -0
  83. package/dist/materialisers.generated-BsA1uDW8.d.ts +24 -0
  84. package/dist/materialisers.generated-nMxTAaVi.d.cts +24 -0
  85. package/dist/preconditions.generated-DblS13Wq.d.cts +24 -0
  86. package/dist/preconditions.generated-U7YpVh30.d.ts +24 -0
  87. package/dist/raw-Dj_2rBSQ.d.cts +19 -0
  88. package/dist/raw-IxCF_bSS.d.ts +19 -0
  89. package/dist/raw.cjs +34 -0
  90. package/dist/raw.cjs.map +1 -0
  91. package/dist/raw.d.cts +4 -0
  92. package/dist/raw.d.ts +4 -0
  93. package/dist/raw.js +8 -0
  94. package/dist/raw.js.map +1 -0
  95. package/dist/resources-BKlFxjo8.d.cts +56 -0
  96. package/dist/resources-CYis1_DS.d.ts +56 -0
  97. package/dist/resources.cjs +39 -0
  98. package/dist/resources.cjs.map +1 -0
  99. package/dist/resources.d.cts +3 -0
  100. package/dist/resources.d.ts +3 -0
  101. package/dist/resources.js +14 -0
  102. package/dist/resources.js.map +1 -0
  103. package/dist/run/inputs.cjs +51 -0
  104. package/dist/run/inputs.cjs.map +1 -0
  105. package/dist/run/inputs.d.cts +91 -0
  106. package/dist/run/inputs.d.ts +91 -0
  107. package/dist/run/inputs.js +26 -0
  108. package/dist/run/inputs.js.map +1 -0
  109. package/dist/sdk.cjs +60 -0
  110. package/dist/sdk.cjs.map +1 -0
  111. package/dist/sdk.d.cts +112 -0
  112. package/dist/sdk.d.ts +112 -0
  113. package/dist/sdk.js +40 -0
  114. package/dist/sdk.js.map +1 -0
  115. package/dist/types.cjs +17 -0
  116. package/dist/types.cjs.map +1 -0
  117. package/dist/types.d.cts +74 -0
  118. package/dist/types.d.ts +74 -0
  119. package/dist/types.js +1 -0
  120. package/dist/types.js.map +1 -0
  121. package/package.json +81 -0
  122. package/src/authoring/FlowBuilderCore.ts +270 -0
  123. package/src/authoring/handles.ts +81 -0
  124. package/src/authoring/raw.ts +60 -0
  125. package/src/authoring/signatureArgs.ts +249 -0
  126. package/src/client.ts +230 -0
  127. package/src/discovery.ts +51 -0
  128. package/src/errors.ts +150 -0
  129. package/src/examples/approveAndDeposit.ts +84 -0
  130. package/src/examples/callContract.ts +199 -0
  131. package/src/examples/config.ts +9 -0
  132. package/src/examples/consolidateToEth.ts +94 -0
  133. package/src/examples/consolidateToUsdc.ts +95 -0
  134. package/src/examples/depositFromProxy.ts +87 -0
  135. package/src/examples/dustSweep.ts +66 -0
  136. package/src/examples/lifiSwap.ts +56 -0
  137. package/src/examples/lifiZap.ts +60 -0
  138. package/src/examples/rawCallWithArithmetic.ts +78 -0
  139. package/src/examples/readContractState.ts +77 -0
  140. package/src/examples/run.ts +168 -0
  141. package/src/examples/splitAndZap.ts +73 -0
  142. package/src/examples/splitWithArithmetic.ts +93 -0
  143. package/src/examples/swapAndZap.ts +72 -0
  144. package/src/examples/swapToRecipient.ts +109 -0
  145. package/src/examples/swapWithAllowRevert.ts +119 -0
  146. package/src/examples/swapWithBalanceCheck.ts +73 -0
  147. package/src/examples/swapWithOutputValidation.ts +125 -0
  148. package/src/examples/transferTokens.ts +123 -0
  149. package/src/examples/untypedOpWithTypedRef.ts +77 -0
  150. package/src/generated/config.generated.ts +174 -0
  151. package/src/generated/guards.generated.ts +14 -0
  152. package/src/generated/materialisers.generated.ts +44 -0
  153. package/src/generated/operations.generated.ts +568 -0
  154. package/src/generated/preconditions.generated.ts +43 -0
  155. package/src/index.ts +149 -0
  156. package/src/raw.ts +10 -0
  157. package/src/resources.ts +61 -0
  158. package/src/run/inputs.ts +117 -0
  159. package/src/sdk.ts +173 -0
  160. package/src/types.ts +101 -0
@@ -0,0 +1,44 @@
1
+ // AUTO-GENERATED from manifest.json — do not edit by hand.
2
+ // Regenerate with: yarn workspace @lifi/composer-sdk generate
3
+
4
+ import type {
5
+ MaterialiserConfigOf,
6
+ MaterialiserInput,
7
+ } from '@lifi/compose-spec';
8
+
9
+ import type {
10
+ BalanceOfMaterialiserConfig,
11
+ CallMaterialiserConfig,
12
+ DirectDepositMaterialiserConfig,
13
+ } from './config.generated.js';
14
+
15
+ export type BalanceOfMaterialiserInput =
16
+ MaterialiserConfigOf<BalanceOfMaterialiserConfig>;
17
+
18
+ /** Read the on-chain token balance of an address as the input amount — accepts: resource */
19
+ export const balanceOf = (
20
+ config: BalanceOfMaterialiserInput,
21
+ ): MaterialiserInput => ({
22
+ kind: 'balanceOf',
23
+ ...config,
24
+ });
25
+
26
+ export type DirectDepositMaterialiserInput =
27
+ MaterialiserConfigOf<DirectDepositMaterialiserConfig>;
28
+
29
+ /** Deposit tokens into the VM — native via msg.value, ERC-20 via transferFrom — accepts: resource */
30
+ export const directDeposit = (
31
+ config: DirectDepositMaterialiserInput,
32
+ ): MaterialiserInput => ({
33
+ kind: 'directDeposit',
34
+ ...config,
35
+ });
36
+
37
+ export type CallMaterialiserInput =
38
+ MaterialiserConfigOf<CallMaterialiserConfig>;
39
+
40
+ /** Execute an arbitrary contract call and measure the resulting token balance diff — accepts: resource */
41
+ export const call = (config: CallMaterialiserInput): MaterialiserInput => ({
42
+ kind: 'call',
43
+ ...config,
44
+ });
@@ -0,0 +1,568 @@
1
+ // AUTO-GENERATED from manifest.json — do not edit by hand.
2
+ // Regenerate with: yarn workspace @lifi/composer-sdk generate
3
+
4
+ import type {
5
+ AnyBindable,
6
+ FlowBuilderInternal,
7
+ } from '../authoring/FlowBuilderCore.js';
8
+ import type { Bindable, OutputHandle } from '../authoring/handles.js';
9
+ import type {
10
+ CoreCallResult,
11
+ SignatureBind,
12
+ StaticCallResult,
13
+ } from '../authoring/signatureArgs.js';
14
+ import {
15
+ buildCallWireFormat,
16
+ buildStaticCallWireFormat,
17
+ } from '../authoring/signatureArgs.js';
18
+ import type { TypedGuard } from '../types.js';
19
+
20
+ import type {
21
+ CoreApproveConfig,
22
+ CoreAsResourceConfig,
23
+ CoreBalanceOfConfig,
24
+ CoreBpsDownConfig,
25
+ CoreBpsUpConfig,
26
+ CoreCallConfig,
27
+ CorePeekConfig,
28
+ CoreRawCallConfig,
29
+ CoreSplitConfig,
30
+ CoreStaticCallConfig,
31
+ CoreTransferConfig,
32
+ LifiSwapConfig,
33
+ LifiZapConfig,
34
+ } from './config.generated.js';
35
+
36
+ /** Split a resource into two outputs by basis-point ratio */
37
+ export interface CoreSplitArgs {
38
+ readonly bind: {
39
+ readonly source: Bindable<'resource'>;
40
+ };
41
+ readonly config: CoreSplitConfig;
42
+ readonly guards?: readonly TypedGuard<'a' | 'b'>[];
43
+ }
44
+
45
+ /** Merge two same-token resources into one by addition */
46
+ export interface CoreMergeArgs {
47
+ readonly bind: {
48
+ readonly a: Bindable<'resource'>;
49
+ readonly b: Bindable<'resource'>;
50
+ };
51
+ readonly guards?: readonly TypedGuard<'merged'>[];
52
+ }
53
+
54
+ /** Swap tokens via the LI.FI aggregator API */
55
+ export interface LifiSwapArgs {
56
+ readonly bind: {
57
+ readonly amountIn: Bindable<'resource'>;
58
+ };
59
+ readonly config: LifiSwapConfig;
60
+ readonly guards?: readonly TypedGuard<'unspentIn'>[];
61
+ }
62
+
63
+ /** Assert that an account holds at least a minimum token balance */
64
+ export interface InvariantBalanceAtLeastArgs {
65
+ readonly bind: {
66
+ readonly minimumAmount: Bindable<'resource'>;
67
+ readonly account: Bindable<'address'>;
68
+ };
69
+ readonly guards?: readonly TypedGuard<never>[];
70
+ }
71
+
72
+ /** Route tokens into a DeFi protocol position via the edge catalog */
73
+ export interface LifiZapArgs {
74
+ readonly bind: {
75
+ readonly amountIn: Bindable<'resource'>;
76
+ };
77
+ readonly config: LifiZapConfig;
78
+ readonly guards?: readonly TypedGuard<'amountOut'>[];
79
+ }
80
+
81
+ /** Add two unsigned integers (a + b) */
82
+ export interface CoreAddArgs {
83
+ readonly bind: {
84
+ readonly a: Bindable<'uint256'>;
85
+ readonly b: Bindable<'uint256'>;
86
+ };
87
+ readonly guards?: readonly TypedGuard<'result'>[];
88
+ }
89
+
90
+ /** Subtract b from a (a - b); reverts on underflow */
91
+ export interface CoreSubtractArgs {
92
+ readonly bind: {
93
+ readonly a: Bindable<'uint256'>;
94
+ readonly b: Bindable<'uint256'>;
95
+ };
96
+ readonly guards?: readonly TypedGuard<'result'>[];
97
+ }
98
+
99
+ /** Multiply two unsigned integers (a * b) */
100
+ export interface CoreMultiplyArgs {
101
+ readonly bind: {
102
+ readonly a: Bindable<'uint256'>;
103
+ readonly b: Bindable<'uint256'>;
104
+ };
105
+ readonly guards?: readonly TypedGuard<'result'>[];
106
+ }
107
+
108
+ /** Divide a by b, rounding toward zero */
109
+ export interface CoreDivideDownArgs {
110
+ readonly bind: {
111
+ readonly a: Bindable<'uint256'>;
112
+ readonly b: Bindable<'uint256'>;
113
+ };
114
+ readonly guards?: readonly TypedGuard<'result'>[];
115
+ }
116
+
117
+ /** Divide a by b, rounding away from zero */
118
+ export interface CoreDivideUpArgs {
119
+ readonly bind: {
120
+ readonly a: Bindable<'uint256'>;
121
+ readonly b: Bindable<'uint256'>;
122
+ };
123
+ readonly guards?: readonly TypedGuard<'result'>[];
124
+ }
125
+
126
+ /** Multiply value by basis points and divide by 10000, rounding down */
127
+ export interface CoreBpsDownArgs {
128
+ readonly bind: {
129
+ readonly value: Bindable<'uint256'>;
130
+ };
131
+ readonly config: CoreBpsDownConfig;
132
+ readonly guards?: readonly TypedGuard<'result'>[];
133
+ }
134
+
135
+ /** Multiply value by basis points and divide by 10000, rounding up */
136
+ export interface CoreBpsUpArgs {
137
+ readonly bind: {
138
+ readonly value: Bindable<'uint256'>;
139
+ };
140
+ readonly config: CoreBpsUpConfig;
141
+ readonly guards?: readonly TypedGuard<'result'>[];
142
+ }
143
+
144
+ /** Assert a == b; reverts if not equal */
145
+ export interface CoreAssertEqualArgs {
146
+ readonly bind: {
147
+ readonly a: Bindable<'uint256'>;
148
+ readonly b: Bindable<'uint256'>;
149
+ };
150
+ readonly guards?: readonly TypedGuard<never>[];
151
+ }
152
+
153
+ /** Assert a != b; reverts if equal */
154
+ export interface CoreAssertNotEqualArgs {
155
+ readonly bind: {
156
+ readonly a: Bindable<'uint256'>;
157
+ readonly b: Bindable<'uint256'>;
158
+ };
159
+ readonly guards?: readonly TypedGuard<never>[];
160
+ }
161
+
162
+ /** Assert a > b; reverts if a <= b */
163
+ export interface CoreAssertGtArgs {
164
+ readonly bind: {
165
+ readonly a: Bindable<'uint256'>;
166
+ readonly b: Bindable<'uint256'>;
167
+ };
168
+ readonly guards?: readonly TypedGuard<never>[];
169
+ }
170
+
171
+ /** Assert a >= b; reverts if a < b */
172
+ export interface CoreAssertGteArgs {
173
+ readonly bind: {
174
+ readonly a: Bindable<'uint256'>;
175
+ readonly b: Bindable<'uint256'>;
176
+ };
177
+ readonly guards?: readonly TypedGuard<never>[];
178
+ }
179
+
180
+ /** Assert a < b; reverts if a >= b */
181
+ export interface CoreAssertLtArgs {
182
+ readonly bind: {
183
+ readonly a: Bindable<'uint256'>;
184
+ readonly b: Bindable<'uint256'>;
185
+ };
186
+ readonly guards?: readonly TypedGuard<never>[];
187
+ }
188
+
189
+ /** Assert a <= b; reverts if a > b */
190
+ export interface CoreAssertLteArgs {
191
+ readonly bind: {
192
+ readonly a: Bindable<'uint256'>;
193
+ readonly b: Bindable<'uint256'>;
194
+ };
195
+ readonly guards?: readonly TypedGuard<never>[];
196
+ }
197
+
198
+ /** Assert min <= value <= max; reverts if value is outside the range */
199
+ export interface CoreAssertInRangeArgs {
200
+ readonly bind: {
201
+ readonly value: Bindable<'uint256'>;
202
+ readonly min: Bindable<'uint256'>;
203
+ readonly max: Bindable<'uint256'>;
204
+ };
205
+ readonly guards?: readonly TypedGuard<never>[];
206
+ }
207
+
208
+ /** Approve an ERC20 spender for the given token and amount */
209
+ export interface CoreApproveArgs {
210
+ readonly bind: {
211
+ readonly amount: Bindable<'resource'>;
212
+ };
213
+ readonly config: CoreApproveConfig;
214
+ readonly guards?: readonly TypedGuard<never>[];
215
+ }
216
+
217
+ /** Read an ERC20 balance, producing a resource */
218
+ export interface CoreBalanceOfArgs {
219
+ readonly bind: Record<string, never>;
220
+ readonly config: CoreBalanceOfConfig;
221
+ readonly guards?: readonly TypedGuard<'balance'>[];
222
+ }
223
+
224
+ /** Transfer tokens to a recipient address, optionally specifying a partial amount */
225
+ export interface CoreTransferArgs {
226
+ readonly bind: {
227
+ readonly amount: Bindable<'resource'>;
228
+ readonly recipient: Bindable<'address'>;
229
+ };
230
+ readonly config: CoreTransferConfig;
231
+ readonly guards?: readonly TypedGuard<'transferred' | 'remainder'>[];
232
+ }
233
+
234
+ /** Invoke a smart contract function, optionally spending a token resource */
235
+ export interface CoreCallArgs<TSig extends string = string> {
236
+ readonly resource?: Bindable<'resource'>;
237
+ readonly bind: SignatureBind<TSig>;
238
+ readonly config: Omit<CoreCallConfig, 'args' | 'functionSignature'> & {
239
+ readonly functionSignature: TSig;
240
+ };
241
+ readonly guards?: readonly TypedGuard<'result'>[];
242
+ }
243
+
244
+ /** Read from a smart contract at runtime (StaticCall); result is fresh at execution time */
245
+ export interface CoreStaticCallArgs<TSig extends string = string> {
246
+ readonly bind: SignatureBind<TSig>;
247
+ readonly config: Omit<CoreStaticCallConfig, 'args' | 'functionSignature'> & {
248
+ readonly functionSignature: TSig;
249
+ };
250
+ readonly guards?: readonly TypedGuard<'result'>[];
251
+ }
252
+
253
+ /** Invoke a contract with pre-encoded calldata */
254
+ export interface CoreRawCallArgs {
255
+ readonly bind: Record<string, never>;
256
+ readonly config: CoreRawCallConfig;
257
+ readonly guards?: readonly TypedGuard<'result'>[];
258
+ }
259
+
260
+ /** Graduate a raw handle to a resource, enabling slippage surfacing and linearity tracking */
261
+ export interface CoreAsResourceArgs {
262
+ readonly bind: {
263
+ readonly handle: Bindable<'uint256'>;
264
+ };
265
+ readonly config: CoreAsResourceConfig;
266
+ readonly guards?: readonly TypedGuard<'resource'>[];
267
+ }
268
+
269
+ /** Read a smart contract value at compile time (off-chain eth_call); result is baked as a literal */
270
+ export interface CorePeekArgs {
271
+ readonly bind: Record<string, never>;
272
+ readonly config: CorePeekConfig;
273
+ readonly guards?: readonly TypedGuard<'result'>[];
274
+ }
275
+
276
+ export interface CoreSplitOutputs {
277
+ readonly a: OutputHandle<'resource'>;
278
+ readonly b: OutputHandle<'resource'>;
279
+ }
280
+
281
+ export interface CoreMergeOutputs {
282
+ readonly merged: OutputHandle<'resource'>;
283
+ }
284
+
285
+ export interface LifiSwapOutputs {
286
+ readonly amountOut: OutputHandle<'resource'>;
287
+ readonly unspentIn: OutputHandle<'resource'>;
288
+ }
289
+
290
+ export interface LifiZapOutputs {
291
+ readonly amountOut: OutputHandle<'resource'>;
292
+ }
293
+
294
+ export interface CoreAddOutputs {
295
+ readonly result: OutputHandle<'uint256'>;
296
+ }
297
+
298
+ export interface CoreSubtractOutputs {
299
+ readonly result: OutputHandle<'uint256'>;
300
+ }
301
+
302
+ export interface CoreMultiplyOutputs {
303
+ readonly result: OutputHandle<'uint256'>;
304
+ }
305
+
306
+ export interface CoreDivideDownOutputs {
307
+ readonly result: OutputHandle<'uint256'>;
308
+ }
309
+
310
+ export interface CoreDivideUpOutputs {
311
+ readonly result: OutputHandle<'uint256'>;
312
+ }
313
+
314
+ export interface CoreBpsDownOutputs {
315
+ readonly result: OutputHandle<'uint256'>;
316
+ }
317
+
318
+ export interface CoreBpsUpOutputs {
319
+ readonly result: OutputHandle<'uint256'>;
320
+ }
321
+
322
+ export interface CoreBalanceOfOutputs {
323
+ readonly balance: OutputHandle<'resource'>;
324
+ }
325
+
326
+ export interface CoreTransferOutputs {
327
+ readonly transferred: OutputHandle<'resource'>;
328
+ readonly remainder: OutputHandle<'resource'>;
329
+ }
330
+
331
+ export interface CoreRawCallOutputs {
332
+ readonly result: OutputHandle<'uint256'>;
333
+ }
334
+
335
+ export interface CoreAsResourceOutputs {
336
+ readonly resource: OutputHandle<'resource'>;
337
+ }
338
+
339
+ export interface CorePeekOutputs {
340
+ readonly result: OutputHandle<'uint256'>;
341
+ }
342
+
343
+ export type GeneratedOps = {
344
+ readonly core: {
345
+ /** Split a resource into two outputs by basis-point ratio — original id: "core.split" */
346
+ readonly split: (nodeId: string, args: CoreSplitArgs) => CoreSplitOutputs;
347
+ /** Merge two same-token resources into one by addition — original id: "core.merge" */
348
+ readonly merge: (nodeId: string, args: CoreMergeArgs) => CoreMergeOutputs;
349
+ /** Add two unsigned integers (a + b) — original id: "core.add" */
350
+ readonly add: (nodeId: string, args: CoreAddArgs) => CoreAddOutputs;
351
+ /** Subtract b from a (a - b); reverts on underflow — original id: "core.subtract" */
352
+ readonly subtract: (
353
+ nodeId: string,
354
+ args: CoreSubtractArgs,
355
+ ) => CoreSubtractOutputs;
356
+ /** Multiply two unsigned integers (a * b) — original id: "core.multiply" */
357
+ readonly multiply: (
358
+ nodeId: string,
359
+ args: CoreMultiplyArgs,
360
+ ) => CoreMultiplyOutputs;
361
+ /** Divide a by b, rounding toward zero — original id: "core.divideDown" */
362
+ readonly divideDown: (
363
+ nodeId: string,
364
+ args: CoreDivideDownArgs,
365
+ ) => CoreDivideDownOutputs;
366
+ /** Divide a by b, rounding away from zero — original id: "core.divideUp" */
367
+ readonly divideUp: (
368
+ nodeId: string,
369
+ args: CoreDivideUpArgs,
370
+ ) => CoreDivideUpOutputs;
371
+ /** Multiply value by basis points and divide by 10000, rounding down — original id: "core.bpsDown" */
372
+ readonly bpsDown: (
373
+ nodeId: string,
374
+ args: CoreBpsDownArgs,
375
+ ) => CoreBpsDownOutputs;
376
+ /** Multiply value by basis points and divide by 10000, rounding up — original id: "core.bpsUp" */
377
+ readonly bpsUp: (nodeId: string, args: CoreBpsUpArgs) => CoreBpsUpOutputs;
378
+ /** Assert a == b; reverts if not equal — original id: "core.assertEqual" */
379
+ readonly assertEqual: (nodeId: string, args: CoreAssertEqualArgs) => void;
380
+ /** Assert a != b; reverts if equal — original id: "core.assertNotEqual" */
381
+ readonly assertNotEqual: (
382
+ nodeId: string,
383
+ args: CoreAssertNotEqualArgs,
384
+ ) => void;
385
+ /** Assert a > b; reverts if a <= b — original id: "core.assertGt" */
386
+ readonly assertGt: (nodeId: string, args: CoreAssertGtArgs) => void;
387
+ /** Assert a >= b; reverts if a < b — original id: "core.assertGte" */
388
+ readonly assertGte: (nodeId: string, args: CoreAssertGteArgs) => void;
389
+ /** Assert a < b; reverts if a >= b — original id: "core.assertLt" */
390
+ readonly assertLt: (nodeId: string, args: CoreAssertLtArgs) => void;
391
+ /** Assert a <= b; reverts if a > b — original id: "core.assertLte" */
392
+ readonly assertLte: (nodeId: string, args: CoreAssertLteArgs) => void;
393
+ /** Assert min <= value <= max; reverts if value is outside the range — original id: "core.assertInRange" */
394
+ readonly assertInRange: (
395
+ nodeId: string,
396
+ args: CoreAssertInRangeArgs,
397
+ ) => void;
398
+ /** Approve an ERC20 spender for the given token and amount — original id: "core.approve" */
399
+ readonly approve: (nodeId: string, args: CoreApproveArgs) => void;
400
+ /** Read an ERC20 balance, producing a resource — original id: "core.balanceOf" */
401
+ readonly balanceOf: (
402
+ nodeId: string,
403
+ args: CoreBalanceOfArgs,
404
+ ) => CoreBalanceOfOutputs;
405
+ /** Transfer tokens to a recipient address, optionally specifying a partial amount — original id: "core.transfer" */
406
+ readonly transfer: (
407
+ nodeId: string,
408
+ args: CoreTransferArgs,
409
+ ) => CoreTransferOutputs;
410
+ /** Invoke a smart contract function, optionally spending a token resource — original id: "core.call" */
411
+ readonly call: <TSig extends string>(
412
+ nodeId: string,
413
+ args: CoreCallArgs<TSig>,
414
+ ) => CoreCallResult<TSig>;
415
+ /** Read from a smart contract at runtime (StaticCall); result is fresh at execution time — original id: "core.staticCall" */
416
+ readonly staticCall: <TSig extends string>(
417
+ nodeId: string,
418
+ args: CoreStaticCallArgs<TSig>,
419
+ ) => StaticCallResult<TSig>;
420
+ /** Invoke a contract with pre-encoded calldata — original id: "core.rawCall" */
421
+ readonly rawCall: (
422
+ nodeId: string,
423
+ args: CoreRawCallArgs,
424
+ ) => CoreRawCallOutputs;
425
+ /** Graduate a raw handle to a resource, enabling slippage surfacing and linearity tracking — original id: "core.asResource" */
426
+ readonly asResource: (
427
+ nodeId: string,
428
+ args: CoreAsResourceArgs,
429
+ ) => CoreAsResourceOutputs;
430
+ /** Read a smart contract value at compile time (off-chain eth_call); result is baked as a literal — original id: "core.peek" */
431
+ readonly peek: (nodeId: string, args: CorePeekArgs) => CorePeekOutputs;
432
+ };
433
+ readonly lifi: {
434
+ /** Swap tokens via the LI.FI aggregator API — original id: "lifi.swap" */
435
+ readonly swap: (nodeId: string, args: LifiSwapArgs) => LifiSwapOutputs;
436
+ /** Route tokens into a DeFi protocol position via the edge catalog — original id: "lifi.zap" */
437
+ readonly zap: (nodeId: string, args: LifiZapArgs) => LifiZapOutputs;
438
+ };
439
+ readonly invariant: {
440
+ /** Assert that an account holds at least a minimum token balance — original id: "invariant.balanceAtLeast" */
441
+ readonly balanceAtLeast: (
442
+ nodeId: string,
443
+ args: InvariantBalanceAtLeastArgs,
444
+ ) => void;
445
+ };
446
+ };
447
+
448
+ export const bindGeneratedOps = (
449
+ builder: FlowBuilderInternal,
450
+ ): GeneratedOps => ({
451
+ core: {
452
+ split: (nodeId: string, args: CoreSplitArgs) =>
453
+ builder.call(nodeId, 'core.split', args, {
454
+ a: 'resource',
455
+ b: 'resource',
456
+ } as const),
457
+ merge: (nodeId: string, args: CoreMergeArgs) =>
458
+ builder.call(nodeId, 'core.merge', { ...args, config: {} }, {
459
+ merged: 'resource',
460
+ } as const),
461
+ add: (nodeId: string, args: CoreAddArgs) =>
462
+ builder.call(nodeId, 'core.add', { ...args, config: {} }, {
463
+ result: 'uint256',
464
+ } as const),
465
+ subtract: (nodeId: string, args: CoreSubtractArgs) =>
466
+ builder.call(nodeId, 'core.subtract', { ...args, config: {} }, {
467
+ result: 'uint256',
468
+ } as const),
469
+ multiply: (nodeId: string, args: CoreMultiplyArgs) =>
470
+ builder.call(nodeId, 'core.multiply', { ...args, config: {} }, {
471
+ result: 'uint256',
472
+ } as const),
473
+ divideDown: (nodeId: string, args: CoreDivideDownArgs) =>
474
+ builder.call(nodeId, 'core.divideDown', { ...args, config: {} }, {
475
+ result: 'uint256',
476
+ } as const),
477
+ divideUp: (nodeId: string, args: CoreDivideUpArgs) =>
478
+ builder.call(nodeId, 'core.divideUp', { ...args, config: {} }, {
479
+ result: 'uint256',
480
+ } as const),
481
+ bpsDown: (nodeId: string, args: CoreBpsDownArgs) =>
482
+ builder.call(nodeId, 'core.bpsDown', args, {
483
+ result: 'uint256',
484
+ } as const),
485
+ bpsUp: (nodeId: string, args: CoreBpsUpArgs) =>
486
+ builder.call(nodeId, 'core.bpsUp', args, { result: 'uint256' } as const),
487
+ assertEqual: (nodeId: string, args: CoreAssertEqualArgs) =>
488
+ builder.call(nodeId, 'core.assertEqual', { ...args, config: {} }, {}),
489
+ assertNotEqual: (nodeId: string, args: CoreAssertNotEqualArgs) =>
490
+ builder.call(nodeId, 'core.assertNotEqual', { ...args, config: {} }, {}),
491
+ assertGt: (nodeId: string, args: CoreAssertGtArgs) =>
492
+ builder.call(nodeId, 'core.assertGt', { ...args, config: {} }, {}),
493
+ assertGte: (nodeId: string, args: CoreAssertGteArgs) =>
494
+ builder.call(nodeId, 'core.assertGte', { ...args, config: {} }, {}),
495
+ assertLt: (nodeId: string, args: CoreAssertLtArgs) =>
496
+ builder.call(nodeId, 'core.assertLt', { ...args, config: {} }, {}),
497
+ assertLte: (nodeId: string, args: CoreAssertLteArgs) =>
498
+ builder.call(nodeId, 'core.assertLte', { ...args, config: {} }, {}),
499
+ assertInRange: (nodeId: string, args: CoreAssertInRangeArgs) =>
500
+ builder.call(nodeId, 'core.assertInRange', { ...args, config: {} }, {}),
501
+ approve: (nodeId: string, args: CoreApproveArgs) =>
502
+ builder.call(nodeId, 'core.approve', args, {}),
503
+ balanceOf: (nodeId: string, args: CoreBalanceOfArgs) =>
504
+ builder.call(nodeId, 'core.balanceOf', args, {
505
+ balance: 'resource',
506
+ } as const),
507
+ transfer: (nodeId: string, args: CoreTransferArgs) =>
508
+ builder.call(nodeId, 'core.transfer', args, {
509
+ transferred: 'resource',
510
+ remainder: 'resource',
511
+ } as const),
512
+ call: <TSig extends string>(nodeId: string, args: CoreCallArgs<TSig>) => {
513
+ const wire = buildCallWireFormat({
514
+ resource: args.resource,
515
+ bind: args.bind as Record<string, AnyBindable>,
516
+ config: args.config as Record<string, unknown>,
517
+ guards: args.guards,
518
+ });
519
+ return builder.call(nodeId, wire.op, wire, {
520
+ result: 'uint256',
521
+ } as const) as unknown as CoreCallResult<TSig>;
522
+ },
523
+ staticCall: <TSig extends string>(
524
+ nodeId: string,
525
+ args: CoreStaticCallArgs<TSig>,
526
+ ) =>
527
+ builder.call(
528
+ nodeId,
529
+ 'core.staticCall',
530
+ buildStaticCallWireFormat({
531
+ bind: args.bind as Record<string, AnyBindable>,
532
+ config: args.config as Record<string, unknown>,
533
+ guards: args.guards,
534
+ }),
535
+ { result: 'uint256' } as const,
536
+ ) as unknown as StaticCallResult<TSig>,
537
+ rawCall: (nodeId: string, args: CoreRawCallArgs) =>
538
+ builder.call(nodeId, 'core.rawCall', args, {
539
+ result: 'uint256',
540
+ } as const),
541
+ asResource: (nodeId: string, args: CoreAsResourceArgs) =>
542
+ builder.call(nodeId, 'core.asResource', args, {
543
+ resource: 'resource',
544
+ } as const),
545
+ peek: (nodeId: string, args: CorePeekArgs) =>
546
+ builder.call(nodeId, 'core.peek', args, { result: 'uint256' } as const),
547
+ },
548
+ lifi: {
549
+ swap: (nodeId: string, args: LifiSwapArgs) =>
550
+ builder.call(nodeId, 'lifi.swap', args, {
551
+ amountOut: 'resource',
552
+ unspentIn: 'resource',
553
+ } as const),
554
+ zap: (nodeId: string, args: LifiZapArgs) =>
555
+ builder.call(nodeId, 'lifi.zap', args, {
556
+ amountOut: 'resource',
557
+ } as const),
558
+ },
559
+ invariant: {
560
+ balanceAtLeast: (nodeId: string, args: InvariantBalanceAtLeastArgs) =>
561
+ builder.call(
562
+ nodeId,
563
+ 'invariant.balanceAtLeast',
564
+ { ...args, config: {} },
565
+ {},
566
+ ),
567
+ },
568
+ });
@@ -0,0 +1,43 @@
1
+ // AUTO-GENERATED from manifest.json — do not edit by hand.
2
+ // Regenerate with: yarn workspace @lifi/composer-sdk generate
3
+
4
+ import type { Precondition, PreconditionConfigOf } from '@lifi/compose-spec';
5
+
6
+ import type {
7
+ Erc20AllowancePreconditionConfig,
8
+ Erc20BalancePreconditionConfig,
9
+ NativeBalancePreconditionConfig,
10
+ } from './config.generated.js';
11
+
12
+ export type Erc20BalancePreconditionInput =
13
+ PreconditionConfigOf<Erc20BalancePreconditionConfig>;
14
+
15
+ /** Assert that a wallet holds at least a given ERC-20 token balance */
16
+ export const erc20Balance = (
17
+ config: Erc20BalancePreconditionInput,
18
+ ): Precondition => ({
19
+ type: 'Erc20Balance',
20
+ ...config,
21
+ });
22
+
23
+ export type NativeBalancePreconditionInput =
24
+ PreconditionConfigOf<NativeBalancePreconditionConfig>;
25
+
26
+ /** Assert that a wallet holds at least a given native coin balance */
27
+ export const nativeBalance = (
28
+ config: NativeBalancePreconditionInput,
29
+ ): Precondition => ({
30
+ type: 'NativeBalance',
31
+ ...config,
32
+ });
33
+
34
+ export type Erc20AllowancePreconditionInput =
35
+ PreconditionConfigOf<Erc20AllowancePreconditionConfig>;
36
+
37
+ /** Assert that an ERC-20 allowance is at least a given amount */
38
+ export const erc20Allowance = (
39
+ config: Erc20AllowancePreconditionInput,
40
+ ): Precondition => ({
41
+ type: 'Erc20Allowance',
42
+ ...config,
43
+ });