@seljs/runtime 1.0.0 → 1.0.1

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 (129) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/_virtual/_rolldown/runtime.cjs +23 -0
  3. package/dist/analysis/call-collector.cjs +233 -0
  4. package/dist/analysis/call-collector.mjs +232 -0
  5. package/dist/analysis/dependency-analyzer.cjs +68 -0
  6. package/dist/analysis/dependency-analyzer.mjs +68 -0
  7. package/dist/analysis/round-planner.cjs +65 -0
  8. package/dist/analysis/round-planner.mjs +65 -0
  9. package/dist/analysis/types.d.cts +115 -0
  10. package/dist/analysis/types.d.mts +115 -0
  11. package/dist/debug.cjs +17 -0
  12. package/dist/debug.mjs +15 -0
  13. package/dist/environment/context.cjs +11 -0
  14. package/dist/environment/context.mjs +11 -0
  15. package/dist/environment/contract-caller.cjs +81 -0
  16. package/dist/environment/contract-caller.mjs +77 -0
  17. package/dist/environment/environment.cjs +254 -0
  18. package/dist/environment/environment.d.cts +84 -0
  19. package/dist/environment/environment.d.mts +84 -0
  20. package/dist/environment/environment.mjs +252 -0
  21. package/dist/environment/error-wrapper.cjs +29 -0
  22. package/dist/environment/error-wrapper.mjs +27 -0
  23. package/dist/environment/index.cjs +1 -0
  24. package/dist/environment/index.d.mts +2 -0
  25. package/dist/environment/index.mjs +2 -0
  26. package/dist/environment/replay-cache.cjs +48 -0
  27. package/dist/environment/replay-cache.mjs +47 -0
  28. package/dist/environment/types.d.cts +60 -0
  29. package/dist/environment/types.d.mts +60 -0
  30. package/dist/errors/errors.cjs +68 -0
  31. package/dist/errors/errors.d.cts +64 -0
  32. package/dist/errors/errors.d.mts +64 -0
  33. package/dist/errors/errors.mjs +63 -0
  34. package/dist/errors/index.cjs +3 -0
  35. package/dist/errors/index.d.mts +1 -0
  36. package/dist/errors/index.mjs +2 -0
  37. package/dist/execution/multi-round-executor.cjs +45 -0
  38. package/dist/execution/multi-round-executor.mjs +44 -0
  39. package/dist/execution/multicall-batcher.cjs +51 -0
  40. package/dist/execution/multicall-batcher.mjs +50 -0
  41. package/dist/execution/multicall.cjs +39 -0
  42. package/dist/execution/multicall.mjs +38 -0
  43. package/dist/execution/result-cache.cjs +63 -0
  44. package/dist/execution/result-cache.mjs +63 -0
  45. package/dist/execution/round-executor.cjs +81 -0
  46. package/dist/execution/round-executor.mjs +80 -0
  47. package/dist/execution/types.d.cts +58 -0
  48. package/dist/execution/types.d.mts +58 -0
  49. package/dist/factory.cjs +6 -0
  50. package/dist/factory.d.cts +7 -0
  51. package/dist/factory.d.mts +6 -0
  52. package/dist/factory.mjs +6 -0
  53. package/dist/index.cjs +18 -0
  54. package/dist/index.d.cts +7 -0
  55. package/dist/index.d.mts +7 -0
  56. package/dist/index.mjs +6 -0
  57. package/package.json +26 -19
  58. package/dist/analysis/call-collector.d.ts +0 -20
  59. package/dist/analysis/call-collector.d.ts.map +0 -1
  60. package/dist/analysis/call-collector.js +0 -272
  61. package/dist/analysis/dependency-analyzer.d.ts +0 -14
  62. package/dist/analysis/dependency-analyzer.d.ts.map +0 -1
  63. package/dist/analysis/dependency-analyzer.js +0 -76
  64. package/dist/analysis/index.d.ts +0 -2
  65. package/dist/analysis/index.d.ts.map +0 -1
  66. package/dist/analysis/index.js +0 -1
  67. package/dist/analysis/round-planner.d.ts +0 -32
  68. package/dist/analysis/round-planner.d.ts.map +0 -1
  69. package/dist/analysis/round-planner.js +0 -69
  70. package/dist/analysis/types.d.ts +0 -113
  71. package/dist/analysis/types.d.ts.map +0 -1
  72. package/dist/analysis/types.js +0 -1
  73. package/dist/debug.d.ts +0 -13
  74. package/dist/debug.d.ts.map +0 -1
  75. package/dist/debug.js +0 -12
  76. package/dist/environment/context.d.ts +0 -3
  77. package/dist/environment/context.d.ts.map +0 -1
  78. package/dist/environment/context.js +0 -8
  79. package/dist/environment/contract-caller.d.ts +0 -25
  80. package/dist/environment/contract-caller.d.ts.map +0 -1
  81. package/dist/environment/contract-caller.js +0 -85
  82. package/dist/environment/environment.d.ts +0 -81
  83. package/dist/environment/environment.d.ts.map +0 -1
  84. package/dist/environment/environment.js +0 -279
  85. package/dist/environment/error-wrapper.d.ts +0 -11
  86. package/dist/environment/error-wrapper.d.ts.map +0 -1
  87. package/dist/environment/error-wrapper.js +0 -33
  88. package/dist/environment/index.d.ts +0 -3
  89. package/dist/environment/index.d.ts.map +0 -1
  90. package/dist/environment/index.js +0 -2
  91. package/dist/environment/replay-cache.d.ts +0 -23
  92. package/dist/environment/replay-cache.d.ts.map +0 -1
  93. package/dist/environment/replay-cache.js +0 -51
  94. package/dist/environment/types.d.ts +0 -57
  95. package/dist/environment/types.d.ts.map +0 -1
  96. package/dist/environment/types.js +0 -1
  97. package/dist/errors/errors.d.ts +0 -63
  98. package/dist/errors/errors.d.ts.map +0 -1
  99. package/dist/errors/errors.js +0 -63
  100. package/dist/errors/index.d.ts +0 -2
  101. package/dist/errors/index.d.ts.map +0 -1
  102. package/dist/errors/index.js +0 -1
  103. package/dist/execution/index.d.ts +0 -2
  104. package/dist/execution/index.d.ts.map +0 -1
  105. package/dist/execution/index.js +0 -1
  106. package/dist/execution/multi-round-executor.d.ts +0 -17
  107. package/dist/execution/multi-round-executor.d.ts.map +0 -1
  108. package/dist/execution/multi-round-executor.js +0 -47
  109. package/dist/execution/multicall-batcher.d.ts +0 -14
  110. package/dist/execution/multicall-batcher.d.ts.map +0 -1
  111. package/dist/execution/multicall-batcher.js +0 -53
  112. package/dist/execution/multicall.d.ts +0 -42
  113. package/dist/execution/multicall.d.ts.map +0 -1
  114. package/dist/execution/multicall.js +0 -29
  115. package/dist/execution/result-cache.d.ts +0 -47
  116. package/dist/execution/result-cache.d.ts.map +0 -1
  117. package/dist/execution/result-cache.js +0 -65
  118. package/dist/execution/round-executor.d.ts +0 -18
  119. package/dist/execution/round-executor.d.ts.map +0 -1
  120. package/dist/execution/round-executor.js +0 -95
  121. package/dist/execution/types.d.ts +0 -55
  122. package/dist/execution/types.d.ts.map +0 -1
  123. package/dist/execution/types.js +0 -1
  124. package/dist/factory.d.ts +0 -3
  125. package/dist/factory.d.ts.map +0 -1
  126. package/dist/factory.js +0 -2
  127. package/dist/index.d.ts +0 -10
  128. package/dist/index.d.ts.map +0 -1
  129. package/dist/index.js +0 -7
@@ -1,65 +0,0 @@
1
- /**
2
- * Cache for storing contract call results during expression evaluation.
3
- *
4
- * Uses Map-based storage with deterministic call IDs for efficient
5
- * lookup and deduplication of repeated contract calls.
6
- */
7
- export class ResultCache {
8
- cache = new Map();
9
- /**
10
- * Generate a deterministic call ID from contract details.
11
- *
12
- * The ID format is `contract:method:serializedArgs` where args are
13
- * JSON-stringified with special handling for bigint values.
14
- *
15
- * @param contract - Contract name (e.g., "token", "vault")
16
- * @param method - Method name (e.g., "balanceOf", "totalSupply")
17
- * @param args - Method arguments
18
- * @returns Deterministic call ID string
19
- */
20
- generateCallId(contract, method, args) {
21
- const argKey = JSON.stringify(args, (_, v) => {
22
- if (typeof v === "bigint") {
23
- return `${String(v)}n`;
24
- }
25
- if (typeof v === "object" && v !== null && !Array.isArray(v)) {
26
- return Object.fromEntries(Object.entries(v).sort(([a], [b]) => a.localeCompare(b)));
27
- }
28
- return v;
29
- });
30
- return `${contract}:${method}:${argKey}`;
31
- }
32
- /**
33
- * Store a result in the cache.
34
- *
35
- * @param callId - The call ID (from generateCallId)
36
- * @param result - The result to cache
37
- */
38
- set(callId, result) {
39
- this.cache.set(callId, result);
40
- }
41
- /**
42
- * Retrieve a cached result.
43
- *
44
- * @param callId - The call ID to look up
45
- * @returns The cached result, or undefined if not found
46
- */
47
- get(callId) {
48
- return this.cache.get(callId);
49
- }
50
- /**
51
- * Check if a result is cached.
52
- *
53
- * @param callId - The call ID to check
54
- * @returns true if cached, false otherwise
55
- */
56
- has(callId) {
57
- return this.cache.has(callId);
58
- }
59
- /**
60
- * Clear all cached results.
61
- */
62
- clear() {
63
- this.cache.clear();
64
- }
65
- }
@@ -1,18 +0,0 @@
1
- import { type Abi, type Address } from "viem";
2
- import type { MulticallBatcher } from "./multicall-batcher.js";
3
- import type { ResultCache } from "./result-cache.js";
4
- import type { ExecutionContext } from "./types.js";
5
- import type { ExecutionRound } from "../analysis/types.js";
6
- export interface ContractInfo {
7
- abi: Abi;
8
- address: Address;
9
- }
10
- export declare class RoundExecutor {
11
- private readonly contracts;
12
- private readonly cache;
13
- private readonly batcher;
14
- constructor(contracts: Map<string, ContractInfo>, cache: ResultCache, batcher: MulticallBatcher);
15
- executeRound(round: ExecutionRound, context: ExecutionContext): Promise<void>;
16
- private resolveArgs;
17
- }
18
- //# sourceMappingURL=round-executor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"round-executor.d.ts","sourceRoot":"","sources":["../../src/execution/round-executor.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,GAAG,EACR,KAAK,OAAO,EAGZ,MAAM,MAAM,CAAC;AAKd,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,KAAK,EAAgB,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAIzE,MAAM,WAAW,YAAY;IAC5B,GAAG,EAAE,GAAG,CAAC;IACT,OAAO,EAAE,OAAO,CAAC;CACjB;AAED,qBAAa,aAAa;IAExB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAFP,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,EACpC,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,gBAAgB;IAG9B,YAAY,CACxB,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,gBAAgB,GACvB,OAAO,CAAC,IAAI,CAAC;IA2EhB,OAAO,CAAC,WAAW;CA2BnB"}
@@ -1,95 +0,0 @@
1
- import { decodeFunctionResult, encodeFunctionData, } from "viem";
2
- import { createLogger } from "../debug.js";
3
- import { MulticallBatchError } from "../errors/index.js";
4
- const debug = createLogger("execute:round");
5
- export class RoundExecutor {
6
- contracts;
7
- cache;
8
- batcher;
9
- constructor(contracts, cache, batcher) {
10
- this.contracts = contracts;
11
- this.cache = cache;
12
- this.batcher = batcher;
13
- }
14
- async executeRound(round, context) {
15
- const encodedCalls = [];
16
- let failedCallIndex;
17
- let failedCallContract;
18
- let failedCallMethod;
19
- try {
20
- for (const [i, call] of round.calls.entries()) {
21
- failedCallIndex = i;
22
- failedCallContract = call.contract;
23
- failedCallMethod = call.method;
24
- const contract = this.contracts.get(call.contract);
25
- if (!contract) {
26
- throw new Error(`No ABI registered for contract "${call.contract}"`);
27
- }
28
- const resolvedArgs = this.resolveArgs(call.args, context);
29
- encodedCalls.push({
30
- target: contract.address,
31
- allowFailure: false,
32
- callData: encodeFunctionData({
33
- abi: contract.abi,
34
- functionName: call.method,
35
- args: resolvedArgs,
36
- }),
37
- });
38
- }
39
- }
40
- catch (error) {
41
- if (error instanceof MulticallBatchError) {
42
- throw error;
43
- }
44
- throw new MulticallBatchError("Failed to encode call", {
45
- cause: error,
46
- failedCallIndex,
47
- contractName: failedCallContract,
48
- methodName: failedCallMethod,
49
- });
50
- }
51
- debug("encoding %d calls for multicall", encodedCalls.length);
52
- const results = await this.batcher.executeBatch(encodedCalls, context.blockNumber);
53
- for (const [i, call] of round.calls.entries()) {
54
- const contract = this.contracts.get(call.contract);
55
- if (!contract) {
56
- throw new Error(`No ABI registered for contract "${call.contract}"`);
57
- }
58
- const result = results[i];
59
- if (!result?.success) {
60
- throw new MulticallBatchError(`Call failed: ${call.contract}.${call.method}`, {
61
- failedCallIndex: i,
62
- contractName: call.contract,
63
- methodName: call.method,
64
- });
65
- }
66
- const decoded = decodeFunctionResult({
67
- abi: contract.abi,
68
- functionName: call.method,
69
- data: result.returnData,
70
- });
71
- debug("decoded %s.%s -> %o", call.contract, call.method, decoded);
72
- this.cache.set(call.id, decoded);
73
- }
74
- }
75
- resolveArgs(args, context) {
76
- return args.map((arg) => {
77
- if (arg.type === "literal") {
78
- return arg.value;
79
- }
80
- if (arg.type === "variable") {
81
- const name = arg.variableName;
82
- if (!name) {
83
- return undefined;
84
- }
85
- return context.variables[name];
86
- }
87
- // arg.type === "call_result"
88
- const id = arg.dependsOnCallId;
89
- if (!id) {
90
- return undefined;
91
- }
92
- return this.cache.get(id);
93
- });
94
- }
95
- }
@@ -1,55 +0,0 @@
1
- import type { PublicClient } from "viem";
2
- /**
3
- * Metadata about the execution.
4
- * Contains statistics and block information from the execution run.
5
- */
6
- export interface ExecutionMeta {
7
- /** Number of rounds executed (topological depth) */
8
- roundsExecuted: number;
9
- /** Total number of contract calls executed */
10
- totalCalls: number;
11
- /** Block number at which calls were executed */
12
- blockNumber: bigint;
13
- }
14
- /**
15
- * Result of executing an SEL expression with contract calls.
16
- * Maps call IDs to their decoded results.
17
- */
18
- export interface ExecutionResult {
19
- /** Map of callId to decoded result value */
20
- results: Map<string, unknown>;
21
- /** Execution metadata */
22
- meta: ExecutionMeta;
23
- }
24
- /**
25
- * Context passed to the executor for running contract calls.
26
- * Contains the client, block number, and variable bindings.
27
- */
28
- export interface ExecutionContext {
29
- /** Viem public client for making contract calls */
30
- client: PublicClient;
31
- /** Block number for consistent reads across all calls */
32
- blockNumber: bigint;
33
- /** Variable name to value mapping from evaluate() context */
34
- variables: Record<string, unknown>;
35
- }
36
- /**
37
- * Options for the evaluate() call.
38
- */
39
- export interface EvaluateOptions {
40
- /** Override viem client for this evaluation */
41
- client?: PublicClient;
42
- }
43
- /**
44
- * Result of evaluating a SEL expression.
45
- *
46
- * Always returned by `evaluate()`. The `meta` field is present when
47
- * contract calls were executed, absent for pure CEL expressions.
48
- */
49
- export interface EvaluateResult<T = unknown> {
50
- /** The evaluated result value */
51
- value: T;
52
- /** Execution metadata, present when contract calls were executed */
53
- meta?: ExecutionMeta;
54
- }
55
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/execution/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AAEzC;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC7B,oDAAoD;IACpD,cAAc,EAAE,MAAM,CAAC;IAEvB,8CAA8C;IAC9C,UAAU,EAAE,MAAM,CAAC;IAEnB,gDAAgD;IAChD,WAAW,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC/B,4CAA4C;IAC5C,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE9B,yBAAyB;IACzB,IAAI,EAAE,aAAa,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAChC,mDAAmD;IACnD,MAAM,EAAE,YAAY,CAAC;IAErB,yDAAyD;IACzD,WAAW,EAAE,MAAM,CAAC;IAEpB,6DAA6D;IAC7D,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC/B,+CAA+C;IAC/C,MAAM,CAAC,EAAE,YAAY,CAAC;CACtB;AAED;;;;;GAKG;AACH,MAAM,WAAW,cAAc,CAAC,CAAC,GAAG,OAAO;IAC1C,iCAAiC;IACjC,KAAK,EAAE,CAAC,CAAC;IAET,oEAAoE;IACpE,IAAI,CAAC,EAAE,aAAa,CAAC;CACrB"}
@@ -1 +0,0 @@
1
- export {};
package/dist/factory.d.ts DELETED
@@ -1,3 +0,0 @@
1
- import { SELRuntime, type SELRuntimeConfig } from "./environment/index.js";
2
- export declare const createSEL: (config: SELRuntimeConfig) => SELRuntime;
3
- //# sourceMappingURL=factory.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE3E,eAAO,MAAM,SAAS,GAAI,QAAQ,gBAAgB,KAAG,UAC9B,CAAC"}
package/dist/factory.js DELETED
@@ -1,2 +0,0 @@
1
- import { SELRuntime } from "./environment/index.js";
2
- export const createSEL = (config) => new SELRuntime(config);
package/dist/index.d.ts DELETED
@@ -1,10 +0,0 @@
1
- /**
2
- * SEL (Solidity Expression Language) - CEL-based queries for EVM contracts.
3
- * @module @seljs/runtime
4
- */
5
- export * from "./environment/index.js";
6
- export * from "./errors/index.js";
7
- export * from "./factory.js";
8
- export type * from "./analysis/index.js";
9
- export type * from "./execution/index.js";
10
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAG7B,mBAAmB,qBAAqB,CAAC;AACzC,mBAAmB,sBAAsB,CAAC"}
package/dist/index.js DELETED
@@ -1,7 +0,0 @@
1
- /**
2
- * SEL (Solidity Expression Language) - CEL-based queries for EVM contracts.
3
- * @module @seljs/runtime
4
- */
5
- export * from "./environment/index.js";
6
- export * from "./errors/index.js";
7
- export * from "./factory.js";