@obolnetwork/obol-sdk 2.12.1 → 2.12.4

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 (38) hide show
  1. package/README.md +6 -4
  2. package/dist/browser/src/index.js +146 -62
  3. package/dist/browser/src/index.js.map +1 -1
  4. package/dist/cjs/src/index.js +149 -62
  5. package/dist/cjs/src/index.js.map +1 -1
  6. package/dist/cjs/src/verification/clusterLockValidationWorker.js +39 -10
  7. package/dist/cjs/src/verification/clusterLockValidationWorker.js.map +1 -1
  8. package/dist/cjs/src/verification/parallelPool.js +33 -14
  9. package/dist/cjs/src/verification/parallelPool.js.map +1 -1
  10. package/dist/esm/src/{chunk-RYTIXFRX.js → chunk-FGMJVLIN.js} +53 -15
  11. package/dist/esm/src/chunk-FGMJVLIN.js.map +1 -0
  12. package/dist/esm/src/{chunk-5ASVONSJ.js → chunk-YZWJJHPO.js} +9 -7
  13. package/dist/esm/src/chunk-YZWJJHPO.js.map +1 -0
  14. package/dist/esm/src/index.js +56 -7
  15. package/dist/esm/src/index.js.map +1 -1
  16. package/dist/esm/src/verification/clusterLockValidationWorker.js +9 -3
  17. package/dist/esm/src/verification/clusterLockValidationWorker.js.map +1 -1
  18. package/dist/esm/src/verification/parallelPool.js +1 -1
  19. package/dist/types/src/base.d.ts +5 -3
  20. package/dist/types/src/errors.d.ts +22 -4
  21. package/dist/types/src/index.d.ts +5 -6
  22. package/dist/types/src/services.d.ts +6 -3
  23. package/dist/types/src/verification/parallelPool.d.ts +4 -0
  24. package/dist/types/src/verification/validationConcurrency.d.ts +11 -0
  25. package/dist/types/tsconfig.types.tsbuildinfo +1 -1
  26. package/package.json +3 -3
  27. package/dist/esm/src/chunk-5ASVONSJ.js.map +0 -1
  28. package/dist/esm/src/chunk-RYTIXFRX.js.map +0 -1
  29. package/dist/types/test/client/ajv.spec.d.ts +0 -1
  30. package/dist/types/test/client/methods.spec.d.ts +0 -18
  31. package/dist/types/test/eoa/eoa.spec.d.ts +0 -1
  32. package/dist/types/test/exit/ethUtils.spec.d.ts +0 -1
  33. package/dist/types/test/exit/exit.spec.d.ts +0 -1
  34. package/dist/types/test/exit/verificationHelpers.spec.d.ts +0 -1
  35. package/dist/types/test/fixtures.d.ts +0 -359
  36. package/dist/types/test/incentives/incentives.spec.d.ts +0 -1
  37. package/dist/types/test/splits/splits.spec.d.ts +0 -1
  38. package/dist/types/test/verification/parallelPool.spec.d.ts +0 -1
@@ -107,6 +107,22 @@ var __yieldStar = (value) => {
107
107
  // src/verification/clusterLockValidationWorker.ts
108
108
  var import_node_worker_threads = require("worker_threads");
109
109
 
110
+ // src/errors.ts
111
+ var ClusterLockValidationTimeoutError = class _ClusterLockValidationTimeoutError extends Error {
112
+ /**
113
+ * @param timeoutMs - Worker deadline that was exceeded (`VALIDATION_WORKER_TIMEOUT_MS`
114
+ * for the whole-lock worker, `WORKER_TIMEOUT_MS` for per-chunk BLS workers).
115
+ */
116
+ constructor(timeoutMs) {
117
+ super(
118
+ `Cluster lock validation exceeded worker time limit (${timeoutMs} ms). Retry later; this does not imply invalid lock data.`
119
+ );
120
+ this.timeoutMs = timeoutMs;
121
+ this.name = "ClusterLockValidationTimeoutError";
122
+ Object.setPrototypeOf(this, _ClusterLockValidationTimeoutError.prototype);
123
+ }
124
+ };
125
+
110
126
  // src/verification/common.ts
111
127
  var import_ssz7 = require("@chainsafe/ssz");
112
128
  var import_elliptic = __toESM(require("elliptic"));
@@ -138,7 +154,7 @@ var import_ethers = require("ethers");
138
154
  // package.json
139
155
  var package_default = {
140
156
  name: "@obolnetwork/obol-sdk",
141
- version: "2.12.1",
157
+ version: "2.12.4",
142
158
  description: "A package for creating Distributed Validators using the Obol API.",
143
159
  bugs: {
144
160
  url: "https://github.com/obolnetwork/obol-sdk/issues"
@@ -153,7 +169,7 @@ var package_default = {
153
169
  "build:clean": "rm -rf ./dist",
154
170
  build: "npm-run-all build:clean build:tsup",
155
171
  "build:tsup": "tsup && tsc -b ./tsconfig.types.json",
156
- test: "NODE_OPTIONS=--experimental-vm-modules jest test/**/**.spec.ts --testPathIgnorePatterns=test/sdk-package/",
172
+ test: "NODE_OPTIONS=--experimental-vm-modules OBOL_SDK_MAX_CONCURRENT_LOCK_VALIDATIONS=0 jest test/**/**.spec.ts --testPathIgnorePatterns=test/sdk-package/",
157
173
  "generate-typedoc": "typedoc",
158
174
  "npm:publish": "npm publish --tag latest",
159
175
  "npm:publish:next": "npm publish --tag next",
@@ -216,7 +232,6 @@ var package_default = {
216
232
  "ajv-formats": "3.0.1",
217
233
  "ajv-keywords": "5.1.0",
218
234
  "cross-fetch": "4.1.0",
219
- dotenv: "17.4.2",
220
235
  elliptic: "6.6.1",
221
236
  ethers: "6.16.0",
222
237
  semver: "7.7.4",
@@ -229,6 +244,7 @@ var package_default = {
229
244
  "@types/node": "24.12.2",
230
245
  "@types/semver": "7.7.1",
231
246
  "@types/uuid": "9.0.8",
247
+ dotenv: "17.4.2",
232
248
  "@typescript-eslint/eslint-plugin": "6.21.0",
233
249
  "@typescript-eslint/parser": "6.21.0",
234
250
  eslint: "8.57.1",
@@ -341,8 +357,6 @@ var MAINNET_SPLIT_V2_FACTORY_BYTECODE = "0x6080604090808252600480361015610015575
341
357
  var HOODI_SPLIT_V2_FACTORY_BYTECODE = "0x6080604090808252600480361015610015575f80fd5b5f3560e01c9182632556fa391461043c5750816380ebf0ab146102be5781639e317f121461027a578163cd6bc1211461023f578163e9889edd1461016d578163f79918b0146100de575063fc6119b11461006d575f80fd5b346100da575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100da576020905173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000f9c25250523df26343222fc46de932355b850c97168152f35b5f80fd5b82346100da577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc916080833601126100da5780359267ffffffffffffffff84116100da5760809084360301126100da5761016573ffffffffffffffffffffffffffffffffffffffff916020946101526105e7565b61015a61060a565b91606435930161090f565b915191168152f35b82346100da5760209073ffffffffffffffffffffffffffffffffffffffff6101656101a061019a3661062d565b91610b37565b309061023a7f000000000000000000000000f9c25250523df26343222fc46de932355b850c9790604051916c5af43d3d93803e605757fd5bf36051526044526f593da1005b3d3d3d3d363d3d37363d736030527f9e4ac34f21c619cefc926c8bd93b54bf5a39c7ab2127a895af1cc0691d7e3dff6020527060593d8160093d39f336602c57343d527f5f526071600f20916040525f606052565b610b7a565b82346100da576102546101a061019a3661062d565b803b151573ffffffffffffffffffffffffffffffffffffffff8351921682526020820152f35b82346100da5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100da57602091355f525f8252805f20549051908152f35b82346100da577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc9181833601126100da5780359267ffffffffffffffff84116100da5760809084360301126100da5761016561039c73ffffffffffffffffffffffffffffffffffffffff9261034a6103766103376105e7565b875192839160209a8b84019601866107c7565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610858565b519020805f525f8652845f205490855191878301528682526103978261083c565b6108c2565b848151910120309061023a7f000000000000000000000000f9c25250523df26343222fc46de932355b850c9790604051916c5af43d3d93803e605757fd5bf36051526044526f593da1005b3d3d3d3d363d3d37363d736030527f9e4ac34f21c619cefc926c8bd93b54bf5a39c7ab2127a895af1cc0691d7e3dff6020527060593d8160093d39f336602c57343d527f5f526071600f20916040525f606052565b9083346100da577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6060813601126100da5782359067ffffffffffffffff82116100da5760809082850192360301126100da576104976105e7565b6105286104a261060a565b6104e4602097888101906104bb8161034a888a866107c7565b519020805f525f8952865f20908154916001830190558751918a8301528982526103978261083c565b73ffffffffffffffffffffffffffffffffffffffff9281898593519101207f000000000000000000000000f9c25250523df26343222fc46de932355b850c97610aae565b1695863b156100da575f858592610569895194859384937fbaa7fda400000000000000000000000000000000000000000000000000000000855284016107c7565b0381838b5af180156105dd57928795927fb3ec24e9259e438f9917b49f27c0dd89a11b7626cb63e6fc977863c0b26a681b95926105ba956105ce575b508188519586956060875260608701906106f5565b93168a85015216868301520390a251908152f35b6105d7906107fb565b8a6105a5565b86513d5f823e3d90fd5b6024359073ffffffffffffffffffffffffffffffffffffffff821682036100da57565b6044359073ffffffffffffffffffffffffffffffffffffffff821682036100da57565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc906060828201126100da576004359167ffffffffffffffff83116100da57826080920301126100da576004019060243573ffffffffffffffffffffffffffffffffffffffff811681036100da579060443590565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1823603018112156100da57016020813591019167ffffffffffffffff82116100da578160051b360383136100da57565b6080820161070382806106a2565b608085529182905260a08401915f905b80821061078f5750505061072a60208301836106a2565b909284830360208601528183527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82116100da5760609160051b8094602085013760408101356040860152013561ffff81168091036100da5760606020940152010190565b90919283359073ffffffffffffffffffffffffffffffffffffffff82168092036100da57600191815260208091019401920190610713565b9073ffffffffffffffffffffffffffffffffffffffff6107f46020929594956040855260408501906106f5565b9416910152565b67ffffffffffffffff811161080f57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040810190811067ffffffffffffffff82111761080f57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761080f57604052565b908151915f5b8381106108af575050015f815290565b806020809284010151818501520161089f565b61090d909291926108e160405194859260208401526040830190610899565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101845283610858565b565b93929161091d838387610b37565b7f000000000000000000000000f9c25250523df26343222fc46de932355b850c976109bb308361023a8490604051916c5af43d3d93803e605757fd5bf36051526044526f593da1005b3d3d3d3d363d3d37363d736030527f9e4ac34f21c619cefc926c8bd93b54bf5a39c7ab2127a895af1cc0691d7e3dff6020527060593d8160093d39f336602c57343d527f5f526071600f20916040525f606052565b803b610aa55750906109cc91610aae565b9473ffffffffffffffffffffffffffffffffffffffff9283871694853b156100da57604051947fbaa7fda40000000000000000000000000000000000000000000000000000000086525f8680610a268688600484016107c7565b0381838b5af1948515610a9a577fc4cec5a1846f5c98dc275670618bfecffec4da2e7cba63760ef46f38c75d236e96610a7496610a8b575b50816040519687966080885260808801906106f5565b9416602086015216604084015260608301520390a2565b610a94906107fb565b5f610a5e565b6040513d5f823e3d90fd5b96505050505050565b9190604051926c5af43d3d93803e605757fd5bf36051526044526f593da1005b3d3d3d3d363d3d37363d736030527f9e4ac34f21c619cefc926c8bd93b54bf5a39c7ab2127a895af1cc0691d7e3dff6020527060593d8160093d39f336602c57343d527f5f526071600f5ff5916040525f6060528115610b2a57565b63301164255f526004601cfd5b6040519291610b4f9184916108e191602084016107c7565b610b7460206040518093610b668383018097610899565b908152038084520182610858565b51902090565b91909160ff5f5360355260601b60015260155260555f20905f60355256fea2646970667358221220edd55753c55f257991df670fc562cdf54adb62d710125933fc4a0a7afddbc02564736f6c63430008170033";
342
358
 
343
359
  // src/constants.ts
344
- var dotenv = __toESM(require("dotenv"));
345
- dotenv.config();
346
360
  var EIP712_DOMAIN_NAME = "Obol";
347
361
  var EIP712_DOMAIN_VERSION = "1";
348
362
  var CreatorConfigHashSigningTypes = {
@@ -4956,7 +4970,7 @@ function verifySharesSync(shares, distributedKeys, threshold) {
4956
4970
  }
4957
4971
  function runWorkerAggregatePubkeys(wt, workerFile, data) {
4958
4972
  return __async(this, null, function* () {
4959
- return yield new Promise((resolve) => {
4973
+ return yield new Promise((resolve, reject) => {
4960
4974
  let settled = false;
4961
4975
  const worker = new wt.Worker(workerFile, { workerData: data });
4962
4976
  const finish = (result) => {
@@ -4967,7 +4981,11 @@ function runWorkerAggregatePubkeys(wt, workerFile, data) {
4967
4981
  resolve(result);
4968
4982
  };
4969
4983
  const timer = setTimeout(() => {
4970
- finish(null);
4984
+ if (settled) return;
4985
+ settled = true;
4986
+ clearTimeout(timer);
4987
+ worker.terminate();
4988
+ reject(new ClusterLockValidationTimeoutError(WORKER_TIMEOUT_MS));
4971
4989
  }, WORKER_TIMEOUT_MS);
4972
4990
  worker.once("message", (msg) => {
4973
4991
  finish(msg instanceof Uint8Array ? msg : null);
@@ -4983,7 +5001,7 @@ function runWorkerAggregatePubkeys(wt, workerFile, data) {
4983
5001
  }
4984
5002
  function runWorker(wt, workerFile, data) {
4985
5003
  return __async(this, null, function* () {
4986
- return yield new Promise((resolve) => {
5004
+ return yield new Promise((resolve, reject) => {
4987
5005
  let settled = false;
4988
5006
  const worker = new wt.Worker(workerFile, { workerData: data });
4989
5007
  const finish = (result) => {
@@ -4994,7 +5012,11 @@ function runWorker(wt, workerFile, data) {
4994
5012
  resolve(result);
4995
5013
  };
4996
5014
  const timer = setTimeout(() => {
4997
- finish(false);
5015
+ if (settled) return;
5016
+ settled = true;
5017
+ clearTimeout(timer);
5018
+ worker.terminate();
5019
+ reject(new ClusterLockValidationTimeoutError(WORKER_TIMEOUT_MS));
4998
5020
  }, WORKER_TIMEOUT_MS);
4999
5021
  worker.once("message", (msg) => {
5000
5022
  finish(msg === true);
@@ -14655,6 +14677,9 @@ var isValidClusterLock = (clusterLock, safeRpcUrl) => __async(null, null, functi
14655
14677
  }
14656
14678
  return true;
14657
14679
  } catch (err) {
14680
+ if (err instanceof ClusterLockValidationTimeoutError) {
14681
+ throw err;
14682
+ }
14658
14683
  return false;
14659
14684
  }
14660
14685
  });
@@ -14665,7 +14690,11 @@ if (import_node_worker_threads.parentPort) {
14665
14690
  const port = import_node_worker_threads.parentPort;
14666
14691
  void isValidClusterLock(input.lock, input.safeRpcUrl).then((ok) => {
14667
14692
  port.postMessage(ok);
14668
- }).catch(() => {
14693
+ }).catch((err) => {
14694
+ if (err instanceof ClusterLockValidationTimeoutError) {
14695
+ port.postMessage({ validationTimeoutMs: err.timeoutMs });
14696
+ return;
14697
+ }
14669
14698
  port.postMessage(false);
14670
14699
  });
14671
14700
  }