@grimoirelabs/core 0.7.0 → 0.8.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 (79) hide show
  1. package/dist/compiler/grimoire/ast.d.ts +5 -0
  2. package/dist/compiler/grimoire/ast.d.ts.map +1 -1
  3. package/dist/compiler/grimoire/ast.js.map +1 -1
  4. package/dist/compiler/grimoire/errors.d.ts +1 -1
  5. package/dist/compiler/grimoire/errors.d.ts.map +1 -1
  6. package/dist/compiler/grimoire/errors.js +2 -2
  7. package/dist/compiler/grimoire/errors.js.map +1 -1
  8. package/dist/compiler/grimoire/index.d.ts.map +1 -1
  9. package/dist/compiler/grimoire/index.js +8 -1
  10. package/dist/compiler/grimoire/index.js.map +1 -1
  11. package/dist/compiler/grimoire/parser.d.ts +3 -0
  12. package/dist/compiler/grimoire/parser.d.ts.map +1 -1
  13. package/dist/compiler/grimoire/parser.js +106 -25
  14. package/dist/compiler/grimoire/parser.js.map +1 -1
  15. package/dist/compiler/grimoire/transformer.d.ts +0 -1
  16. package/dist/compiler/grimoire/transformer.d.ts.map +1 -1
  17. package/dist/compiler/grimoire/transformer.js +57 -100
  18. package/dist/compiler/grimoire/transformer.js.map +1 -1
  19. package/dist/compiler/index.d.ts +1 -1
  20. package/dist/compiler/index.d.ts.map +1 -1
  21. package/dist/compiler/index.js +5 -1
  22. package/dist/compiler/index.js.map +1 -1
  23. package/dist/compiler/ir-generator.js +33 -0
  24. package/dist/compiler/ir-generator.js.map +1 -1
  25. package/dist/compiler/type-checker.d.ts +2 -2
  26. package/dist/compiler/type-checker.js +2 -2
  27. package/dist/compiler/validator.d.ts +8 -0
  28. package/dist/compiler/validator.d.ts.map +1 -1
  29. package/dist/compiler/validator.js +223 -0
  30. package/dist/compiler/validator.js.map +1 -1
  31. package/dist/index.d.ts +3 -3
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +1 -1
  34. package/dist/index.js.map +1 -1
  35. package/dist/runtime/context.d.ts +1 -0
  36. package/dist/runtime/context.d.ts.map +1 -1
  37. package/dist/runtime/context.js +14 -2
  38. package/dist/runtime/context.js.map +1 -1
  39. package/dist/runtime/index.d.ts +3 -1
  40. package/dist/runtime/index.d.ts.map +1 -1
  41. package/dist/runtime/index.js +3 -1
  42. package/dist/runtime/index.js.map +1 -1
  43. package/dist/runtime/interpreter.d.ts +49 -3
  44. package/dist/runtime/interpreter.d.ts.map +1 -1
  45. package/dist/runtime/interpreter.js +774 -131
  46. package/dist/runtime/interpreter.js.map +1 -1
  47. package/dist/runtime/session-views.d.ts +37 -0
  48. package/dist/runtime/session-views.d.ts.map +1 -0
  49. package/dist/runtime/session-views.js +97 -0
  50. package/dist/runtime/session-views.js.map +1 -0
  51. package/dist/runtime/session.d.ts +35 -0
  52. package/dist/runtime/session.d.ts.map +1 -0
  53. package/dist/runtime/session.js +57 -0
  54. package/dist/runtime/session.js.map +1 -0
  55. package/dist/runtime/steps/action.d.ts +22 -0
  56. package/dist/runtime/steps/action.d.ts.map +1 -1
  57. package/dist/runtime/steps/action.js +209 -0
  58. package/dist/runtime/steps/action.js.map +1 -1
  59. package/dist/runtime/steps/advisory.d.ts +1 -0
  60. package/dist/runtime/steps/advisory.d.ts.map +1 -1
  61. package/dist/runtime/steps/advisory.js +277 -11
  62. package/dist/runtime/steps/advisory.js.map +1 -1
  63. package/dist/runtime/value-flow.d.ts +27 -0
  64. package/dist/runtime/value-flow.d.ts.map +1 -0
  65. package/dist/runtime/value-flow.js +566 -0
  66. package/dist/runtime/value-flow.js.map +1 -0
  67. package/dist/types/execution.d.ts +67 -1
  68. package/dist/types/execution.d.ts.map +1 -1
  69. package/dist/types/index.d.ts +2 -1
  70. package/dist/types/index.d.ts.map +1 -1
  71. package/dist/types/receipt.d.ts +193 -0
  72. package/dist/types/receipt.d.ts.map +1 -0
  73. package/dist/types/receipt.js +5 -0
  74. package/dist/types/receipt.js.map +1 -0
  75. package/dist/types/steps.d.ts +6 -0
  76. package/dist/types/steps.d.ts.map +1 -1
  77. package/dist/wallet/tx-builder.js +3 -3
  78. package/dist/wallet/tx-builder.js.map +1 -1
  79. package/package.json +1 -1
@@ -0,0 +1,566 @@
1
+ export const FEE_BUCKET_ADDRESS = "0x0000000000000000000000000000000000000fee";
2
+ export const LOSS_BUCKET_ADDRESS = "0x00000000000000000000000000000000000010a5";
3
+ export function evaluatePreviewValueFlow(ctx, plannedActions, valueDeltas) {
4
+ const limits = readMandateLimits(ctx);
5
+ const constraintResults = [];
6
+ let requiresApproval = false;
7
+ let violation;
8
+ const setViolation = (next) => {
9
+ if (!violation) {
10
+ violation = next;
11
+ }
12
+ };
13
+ const addConstraintResult = (result, hardFail) => {
14
+ constraintResults.push(result);
15
+ if (hardFail && !result.passed) {
16
+ setViolation({
17
+ code: hardFail.code ?? "CONSTRAINT_VIOLATION",
18
+ constraint: result.constraintName,
19
+ message: hardFail.message ?? result.message ?? `${result.constraintName} constraint violated`,
20
+ actual: hardFail.actual ?? result.actual,
21
+ limit: hardFail.limit ?? result.limit,
22
+ path: hardFail.path,
23
+ suggestion: hardFail.suggestion,
24
+ });
25
+ }
26
+ };
27
+ if (limits.rebalanceCooldownSec !== undefined) {
28
+ const lastRebalanceMs = readLastRebalanceTimestampMs(ctx);
29
+ if (lastRebalanceMs !== undefined) {
30
+ const elapsedSeconds = Math.max(0, Math.floor((Date.now() - lastRebalanceMs) / 1000));
31
+ const passed = elapsedSeconds >= limits.rebalanceCooldownSec;
32
+ addConstraintResult({
33
+ stepId: "spell",
34
+ constraintName: "rebalance_cooldown",
35
+ passed,
36
+ actual: elapsedSeconds,
37
+ limit: limits.rebalanceCooldownSec,
38
+ message: passed
39
+ ? undefined
40
+ : `Rebalance cooldown active (${elapsedSeconds}s elapsed, requires ${limits.rebalanceCooldownSec}s)`,
41
+ }, {
42
+ code: "CONSTRAINT_VIOLATION",
43
+ actual: elapsedSeconds,
44
+ limit: limits.rebalanceCooldownSec,
45
+ suggestion: "Wait for cooldown to expire or lower rebalance_cooldown.",
46
+ });
47
+ }
48
+ }
49
+ const riskByAsset = new Map();
50
+ for (const planned of plannedActions) {
51
+ const amount = extractActionAmount(planned.action);
52
+ const amountLabel = amount?.toString();
53
+ const path = getConstraintPath(ctx, planned.stepId);
54
+ if (limits.allowedVenues?.size) {
55
+ const allowed = limits.allowedVenues.has(planned.venue);
56
+ addConstraintResult({
57
+ stepId: planned.stepId,
58
+ constraintName: "allowed_venues",
59
+ passed: allowed,
60
+ actual: planned.venue,
61
+ limit: Array.from(limits.allowedVenues),
62
+ message: allowed ? undefined : `Venue '${planned.venue}' is not allowed by mandate`,
63
+ }, {
64
+ code: "CONSTRAINT_VIOLATION",
65
+ path,
66
+ suggestion: "Route the action through an allowed venue or expand allowed_venues.",
67
+ });
68
+ }
69
+ if (limits.maxSingleMove !== undefined) {
70
+ if (amount === undefined) {
71
+ addConstraintResult({
72
+ stepId: planned.stepId,
73
+ constraintName: "max_single_move",
74
+ passed: false,
75
+ message: "Action amount is unknown and cannot be checked against max_single_move",
76
+ limit: limits.maxSingleMove.toString(),
77
+ }, {
78
+ code: "CONSTRAINT_VIOLATION",
79
+ path,
80
+ suggestion: "Use a concrete amount for irreversible actions.",
81
+ });
82
+ }
83
+ else {
84
+ const passed = amount <= limits.maxSingleMove;
85
+ addConstraintResult({
86
+ stepId: planned.stepId,
87
+ constraintName: "max_single_move",
88
+ passed,
89
+ actual: amount.toString(),
90
+ limit: limits.maxSingleMove.toString(),
91
+ message: passed
92
+ ? undefined
93
+ : `Move ${amount.toString()} exceeds max_single_move ${limits.maxSingleMove.toString()}`,
94
+ }, {
95
+ code: "CONSTRAINT_VIOLATION",
96
+ path,
97
+ suggestion: "Reduce amount or raise max_single_move.",
98
+ });
99
+ }
100
+ }
101
+ if (limits.approvalRequiredAbove !== undefined) {
102
+ if (amount === undefined) {
103
+ addConstraintResult({
104
+ stepId: planned.stepId,
105
+ constraintName: "approval_required_above",
106
+ passed: false,
107
+ limit: limits.approvalRequiredAbove.toString(),
108
+ message: "Action amount is unknown and cannot be checked against approval_required_above",
109
+ }, {
110
+ code: "CONSTRAINT_VIOLATION",
111
+ path,
112
+ suggestion: "Use a concrete amount to evaluate approval thresholds.",
113
+ });
114
+ }
115
+ else {
116
+ const thresholdCrossed = amount > limits.approvalRequiredAbove;
117
+ const blockedBySingleMove = limits.maxSingleMove !== undefined && amount > limits.maxSingleMove;
118
+ if (thresholdCrossed && !blockedBySingleMove) {
119
+ requiresApproval = true;
120
+ }
121
+ addConstraintResult({
122
+ stepId: planned.stepId,
123
+ constraintName: "approval_required_above",
124
+ passed: true,
125
+ actual: amount.toString(),
126
+ limit: limits.approvalRequiredAbove.toString(),
127
+ message: thresholdCrossed && !blockedBySingleMove ? "Approval required" : undefined,
128
+ });
129
+ }
130
+ }
131
+ if (limits.maxSlippage !== undefined) {
132
+ const slippage = planned.constraints.maxSlippageBps;
133
+ if (slippage === undefined) {
134
+ addConstraintResult({
135
+ stepId: planned.stepId,
136
+ constraintName: "max_slippage",
137
+ passed: false,
138
+ limit: limits.maxSlippage,
139
+ message: "Action is missing max_slippage constraint",
140
+ }, {
141
+ code: "CONSTRAINT_VIOLATION",
142
+ path,
143
+ suggestion: "Set max_slippage on the action or skill defaults.",
144
+ });
145
+ }
146
+ else {
147
+ const passed = slippage <= limits.maxSlippage;
148
+ addConstraintResult({
149
+ stepId: planned.stepId,
150
+ constraintName: "max_slippage",
151
+ passed,
152
+ actual: slippage,
153
+ limit: limits.maxSlippage,
154
+ message: passed
155
+ ? undefined
156
+ : `max_slippage ${slippage} exceeds mandate limit ${limits.maxSlippage}`,
157
+ }, {
158
+ code: "CONSTRAINT_VIOLATION",
159
+ path,
160
+ suggestion: "Lower action max_slippage or raise mandate max_slippage.",
161
+ });
162
+ }
163
+ }
164
+ if (limits.maxGas !== undefined) {
165
+ const simulationGas = toBigInt(planned.simulationResult?.gasEstimate);
166
+ const actionGasLimit = planned.constraints.maxGas;
167
+ const observed = maxBigInt(simulationGas, actionGasLimit);
168
+ if (observed === undefined) {
169
+ addConstraintResult({
170
+ stepId: planned.stepId,
171
+ constraintName: "max_gas",
172
+ passed: false,
173
+ limit: limits.maxGas.toString(),
174
+ message: "Action gas could not be determined",
175
+ }, {
176
+ code: "CONSTRAINT_VIOLATION",
177
+ path,
178
+ suggestion: "Provide max_gas and ensure preview returns a gas estimate.",
179
+ });
180
+ }
181
+ else {
182
+ const passed = observed <= limits.maxGas;
183
+ addConstraintResult({
184
+ stepId: planned.stepId,
185
+ constraintName: "max_gas",
186
+ passed,
187
+ actual: observed.toString(),
188
+ limit: limits.maxGas.toString(),
189
+ message: passed
190
+ ? undefined
191
+ : `Gas ${observed.toString()} exceeds max_gas ${limits.maxGas.toString()}`,
192
+ }, {
193
+ code: "CONSTRAINT_VIOLATION",
194
+ path,
195
+ suggestion: "Lower gas usage or raise max_gas.",
196
+ });
197
+ }
198
+ }
199
+ const riskAsset = extractRiskAsset(planned.action);
200
+ if (limits.maxValueAtRisk !== undefined) {
201
+ if (amount === undefined || !riskAsset) {
202
+ addConstraintResult({
203
+ stepId: planned.stepId,
204
+ constraintName: "max_value_at_risk",
205
+ passed: false,
206
+ actual: amountLabel,
207
+ limit: limits.maxValueAtRisk.toString(),
208
+ message: "Action amount/asset is not concrete enough for max_value_at_risk",
209
+ }, {
210
+ code: "CONSTRAINT_VIOLATION",
211
+ path,
212
+ suggestion: "Use concrete amount and asset fields for irreversible actions.",
213
+ });
214
+ }
215
+ else {
216
+ riskByAsset.set(riskAsset, (riskByAsset.get(riskAsset) ?? 0n) + amount);
217
+ }
218
+ }
219
+ }
220
+ if (limits.maxValueAtRisk !== undefined) {
221
+ const nonZero = Array.from(riskByAsset.entries()).filter(([, amount]) => amount > 0n);
222
+ if (nonZero.length > 1) {
223
+ addConstraintResult({
224
+ stepId: "spell",
225
+ constraintName: "max_value_at_risk",
226
+ passed: false,
227
+ actual: nonZero.map(([asset, amount]) => `${asset}:${amount.toString()}`),
228
+ limit: limits.maxValueAtRisk.toString(),
229
+ message: "max_value_at_risk requires a valuation policy for multi-asset exposure, but none is configured",
230
+ }, {
231
+ code: "VALUATION_POLICY_REQUIRED",
232
+ suggestion: "Configure a valuation policy or reduce actions to a single risk asset.",
233
+ });
234
+ }
235
+ else {
236
+ const exposure = nonZero[0]?.[1] ?? 0n;
237
+ const asset = nonZero[0]?.[0];
238
+ const passed = exposure <= limits.maxValueAtRisk;
239
+ addConstraintResult({
240
+ stepId: "spell",
241
+ constraintName: "max_value_at_risk",
242
+ passed,
243
+ actual: asset ? `${asset}:${exposure.toString()}` : "0",
244
+ limit: limits.maxValueAtRisk.toString(),
245
+ message: passed
246
+ ? undefined
247
+ : `Value at risk ${asset}:${exposure.toString()} exceeds ${limits.maxValueAtRisk.toString()}`,
248
+ }, {
249
+ code: "CONSTRAINT_VIOLATION",
250
+ suggestion: "Reduce notional exposure or raise max_value_at_risk.",
251
+ });
252
+ }
253
+ }
254
+ const accounting = computeAssetAccounting(valueDeltas);
255
+ addConstraintResult({
256
+ stepId: "spell",
257
+ constraintName: "value_flow_accounting",
258
+ passed: accounting.passed,
259
+ actual: accounting.totalUnaccounted.toString(),
260
+ limit: "0",
261
+ message: accounting.passed
262
+ ? undefined
263
+ : `Unaccounted value deltas detected: ${accounting.totalUnaccounted.toString()}`,
264
+ }, {
265
+ code: "VALUE_FLOW_ACCOUNTING_FAILED",
266
+ suggestion: "Classify deltas as debit/credit/fee/loss and provide explicit bucket reasons.",
267
+ });
268
+ return {
269
+ accounting,
270
+ constraintResults,
271
+ driftKeys: buildDriftKeys(plannedActions),
272
+ requiresApproval,
273
+ violation,
274
+ };
275
+ }
276
+ export function computeAssetAccounting(valueDeltas) {
277
+ const rows = new Map();
278
+ const getRow = (asset) => {
279
+ const existing = rows.get(asset);
280
+ if (existing)
281
+ return existing;
282
+ const created = {
283
+ asset,
284
+ debits: 0n,
285
+ credits: 0n,
286
+ fees: 0n,
287
+ losses: 0n,
288
+ unaccounted: 0n,
289
+ };
290
+ rows.set(asset, created);
291
+ return created;
292
+ };
293
+ for (const delta of valueDeltas) {
294
+ const row = getRow(delta.asset);
295
+ if (delta.amount <= 0n) {
296
+ row.unaccounted += delta.amount < 0n ? -delta.amount : 0n;
297
+ continue;
298
+ }
299
+ const classification = classifyDelta(delta.reason);
300
+ switch (classification) {
301
+ case "debit":
302
+ row.debits += delta.amount;
303
+ break;
304
+ case "credit":
305
+ row.credits += delta.amount;
306
+ break;
307
+ case "fee":
308
+ row.fees += delta.amount;
309
+ if (delta.to !== FEE_BUCKET_ADDRESS) {
310
+ row.unaccounted += delta.amount;
311
+ }
312
+ break;
313
+ case "loss":
314
+ row.losses += delta.amount;
315
+ if (delta.to !== LOSS_BUCKET_ADDRESS) {
316
+ row.unaccounted += delta.amount;
317
+ }
318
+ break;
319
+ default:
320
+ row.unaccounted += delta.amount;
321
+ }
322
+ }
323
+ const assets = Array.from(rows.values()).sort((a, b) => a.asset.localeCompare(b.asset));
324
+ const totalUnaccounted = assets.reduce((sum, item) => sum + item.unaccounted, 0n);
325
+ return {
326
+ assets,
327
+ totalUnaccounted,
328
+ passed: totalUnaccounted === 0n,
329
+ };
330
+ }
331
+ export function buildDriftKeys(plannedActions) {
332
+ const now = Date.now();
333
+ const keys = [];
334
+ const seen = new Set();
335
+ const addKey = (key) => {
336
+ if (seen.has(key.field))
337
+ return;
338
+ seen.add(key.field);
339
+ keys.push(key);
340
+ };
341
+ for (const planned of plannedActions) {
342
+ const outputAsset = planned.simulationResult?.output.asset;
343
+ const outputAmount = toBigInt(planned.simulationResult?.output.amount);
344
+ if (outputAsset && outputAmount !== undefined) {
345
+ addKey({
346
+ field: `quote:${planned.stepId}:${outputAsset}`,
347
+ class: "quote",
348
+ previewValue: outputAmount,
349
+ timestamp: now,
350
+ source: "preview_simulation",
351
+ });
352
+ }
353
+ const gasEstimate = toBigInt(planned.simulationResult?.gasEstimate);
354
+ if (gasEstimate !== undefined) {
355
+ addKey({
356
+ field: `gas:${planned.stepId}`,
357
+ class: "gas",
358
+ previewValue: gasEstimate,
359
+ timestamp: now,
360
+ source: "preview_simulation",
361
+ });
362
+ }
363
+ }
364
+ return keys;
365
+ }
366
+ function classifyDelta(reason) {
367
+ const normalized = reason.toLowerCase();
368
+ if (normalized.includes("fee"))
369
+ return "fee";
370
+ if (normalized.includes("loss") || normalized.includes("slippage"))
371
+ return "loss";
372
+ if (normalized.includes(":input") ||
373
+ normalized.includes("debit") ||
374
+ normalized.includes("bridge_out") ||
375
+ normalized.includes("outflow")) {
376
+ return "debit";
377
+ }
378
+ if (normalized.includes(":output") ||
379
+ normalized.includes("credit") ||
380
+ normalized.includes("bridge_in") ||
381
+ normalized.includes("inflow")) {
382
+ return "credit";
383
+ }
384
+ return "unknown";
385
+ }
386
+ function readMandateLimits(ctx) {
387
+ return {
388
+ maxSingleMove: toBigInt(readLimit(ctx, "max_single_move")),
389
+ approvalRequiredAbove: toBigInt(readLimit(ctx, "approval_required_above")),
390
+ maxValueAtRisk: toBigInt(readLimit(ctx, "max_value_at_risk")),
391
+ maxSlippage: toFiniteNumber(readLimit(ctx, "max_slippage")),
392
+ maxGas: toBigInt(readLimit(ctx, "max_gas")),
393
+ allowedVenues: toStringSet(readLimit(ctx, "allowed_venues")),
394
+ rebalanceCooldownSec: toFiniteNumber(readLimit(ctx, "rebalance_cooldown")),
395
+ };
396
+ }
397
+ function readLimit(ctx, key) {
398
+ const limitsBinding = ctx.bindings.get("limits");
399
+ if (isRecord(limitsBinding) && key in limitsBinding) {
400
+ return limitsBinding[key];
401
+ }
402
+ return ctx.bindings.get(`limit_${key}`);
403
+ }
404
+ function readLastRebalanceTimestampMs(ctx) {
405
+ const candidates = [
406
+ "last_rebalance",
407
+ "last_rebalance_at",
408
+ "last_rebalance_ts",
409
+ "lastRebalance",
410
+ "lastRebalanceAt",
411
+ "lastRebalanceTs",
412
+ ];
413
+ for (const key of candidates) {
414
+ const value = ctx.state.persistent.get(key);
415
+ const parsed = toTimestampMs(value);
416
+ if (parsed !== undefined) {
417
+ return parsed;
418
+ }
419
+ }
420
+ return undefined;
421
+ }
422
+ function toTimestampMs(value) {
423
+ if (typeof value === "number" && Number.isFinite(value)) {
424
+ return value > 1_000_000_000_000 ? Math.floor(value) : Math.floor(value * 1000);
425
+ }
426
+ if (typeof value === "bigint") {
427
+ const asNumber = Number(value);
428
+ if (Number.isFinite(asNumber)) {
429
+ return asNumber > 1_000_000_000_000 ? Math.floor(asNumber) : Math.floor(asNumber * 1000);
430
+ }
431
+ return undefined;
432
+ }
433
+ if (typeof value === "string") {
434
+ if (/^-?\d+$/.test(value.trim())) {
435
+ const numeric = Number(value.trim());
436
+ if (!Number.isFinite(numeric))
437
+ return undefined;
438
+ return numeric > 1_000_000_000_000 ? Math.floor(numeric) : Math.floor(numeric * 1000);
439
+ }
440
+ const parsed = Date.parse(value);
441
+ if (!Number.isNaN(parsed)) {
442
+ return parsed;
443
+ }
444
+ }
445
+ return undefined;
446
+ }
447
+ function toBigInt(value) {
448
+ if (value === undefined || value === null || value === "")
449
+ return undefined;
450
+ if (typeof value === "bigint")
451
+ return value;
452
+ if (typeof value === "number") {
453
+ if (!Number.isFinite(value))
454
+ return undefined;
455
+ return BigInt(Math.floor(value));
456
+ }
457
+ if (typeof value === "string") {
458
+ const trimmed = value.trim();
459
+ if (!/^[-+]?\d+$/.test(trimmed))
460
+ return undefined;
461
+ try {
462
+ return BigInt(trimmed);
463
+ }
464
+ catch {
465
+ return undefined;
466
+ }
467
+ }
468
+ return undefined;
469
+ }
470
+ function toFiniteNumber(value) {
471
+ if (value === undefined || value === null || value === "")
472
+ return undefined;
473
+ if (typeof value === "number" && Number.isFinite(value))
474
+ return value;
475
+ if (typeof value === "bigint") {
476
+ const asNumber = Number(value);
477
+ return Number.isFinite(asNumber) ? asNumber : undefined;
478
+ }
479
+ if (typeof value === "string") {
480
+ const parsed = Number(value.trim());
481
+ return Number.isFinite(parsed) ? parsed : undefined;
482
+ }
483
+ return undefined;
484
+ }
485
+ function toStringSet(value) {
486
+ if (Array.isArray(value)) {
487
+ const items = value.filter((item) => typeof item === "string");
488
+ if (!items.length)
489
+ return undefined;
490
+ return new Set(items);
491
+ }
492
+ if (typeof value === "string") {
493
+ const parts = value
494
+ .split(",")
495
+ .map((item) => item.trim())
496
+ .filter((item) => item.length > 0);
497
+ if (!parts.length)
498
+ return undefined;
499
+ return new Set(parts);
500
+ }
501
+ return undefined;
502
+ }
503
+ function extractActionAmount(action) {
504
+ if (!("amount" in action))
505
+ return undefined;
506
+ const raw = action.amount;
507
+ if (raw === undefined || raw === null || raw === "max")
508
+ return undefined;
509
+ if (typeof raw === "bigint")
510
+ return raw;
511
+ if (typeof raw === "number") {
512
+ if (!Number.isFinite(raw))
513
+ return undefined;
514
+ return BigInt(Math.floor(raw));
515
+ }
516
+ if (typeof raw === "string") {
517
+ return toBigInt(raw);
518
+ }
519
+ return undefined;
520
+ }
521
+ function extractRiskAsset(action) {
522
+ switch (action.type) {
523
+ case "swap":
524
+ return action.assetIn;
525
+ case "lend":
526
+ case "withdraw":
527
+ case "borrow":
528
+ case "repay":
529
+ case "stake":
530
+ case "unstake":
531
+ case "bridge":
532
+ case "transfer":
533
+ case "approve":
534
+ return action.asset;
535
+ default:
536
+ return undefined;
537
+ }
538
+ }
539
+ function getConstraintPath(ctx, stepId) {
540
+ const loc = ctx.spell.sourceMap?.[stepId];
541
+ if (!loc)
542
+ return stepId;
543
+ return `${stepId} (line ${loc.line}, col ${loc.column})`;
544
+ }
545
+ function maxBigInt(a, b) {
546
+ if (a === undefined)
547
+ return b;
548
+ if (b === undefined)
549
+ return a;
550
+ return a > b ? a : b;
551
+ }
552
+ function isRecord(value) {
553
+ return typeof value === "object" && value !== null;
554
+ }
555
+ export function inferDriftClass(field) {
556
+ if (field.startsWith("balance:"))
557
+ return "balance";
558
+ if (field.startsWith("quote:"))
559
+ return "quote";
560
+ if (field.startsWith("rate:"))
561
+ return "rate";
562
+ if (field.startsWith("gas:"))
563
+ return "gas";
564
+ return undefined;
565
+ }
566
+ //# sourceMappingURL=value-flow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"value-flow.js","sourceRoot":"","sources":["../../src/runtime/value-flow.ts"],"names":[],"mappings":"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"}