@gearbox-protocol/sdk 13.1.0-next.2 → 13.1.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 (113) hide show
  1. package/dist/cjs/dev/AccountOpener.js +5 -45
  2. package/dist/cjs/dev/index.js +8 -0
  3. package/dist/cjs/dev/isOutOfSyncError.js +56 -0
  4. package/dist/cjs/dev/isRateLimitError.js +80 -0
  5. package/dist/cjs/dev/isTransientError.js +83 -0
  6. package/dist/cjs/dev/providers.js +1 -1
  7. package/dist/cjs/dev/resilientTransport.js +104 -0
  8. package/dist/cjs/plugins/zappers/ZappersPlugin.js +144 -0
  9. package/dist/cjs/{sdk/market/ZapperRegister.js → plugins/zappers/extraZappers.js} +6 -110
  10. package/dist/cjs/plugins/zappers/index.js +26 -0
  11. package/dist/cjs/plugins/zappers/package.json +1 -0
  12. package/dist/cjs/sdk/accounts/AbstractCreditAccountsService.js +104 -462
  13. package/dist/cjs/sdk/accounts/CreditAccountsServiceV310.js +5 -16
  14. package/dist/cjs/sdk/base/ChainContractsRegister.js +1 -1
  15. package/dist/cjs/sdk/base/TokensMeta.js +32 -255
  16. package/dist/cjs/sdk/base/index.js +0 -2
  17. package/dist/cjs/sdk/chain/chains.js +1 -2
  18. package/dist/cjs/sdk/constants/index.js +2 -0
  19. package/dist/cjs/sdk/{base/token-types.js → constants/phantom-tokens.js} +3 -9
  20. package/dist/cjs/sdk/market/MarketRegister.js +2 -2
  21. package/dist/cjs/sdk/market/MarketSuite.js +0 -6
  22. package/dist/cjs/sdk/market/index.js +1 -3
  23. package/dist/cjs/sdk/market/pool/PoolSuite.js +0 -3
  24. package/dist/cjs/sdk/market/pool/PoolV310Contract.js +2 -17
  25. package/dist/cjs/sdk/market/pool/index.js +0 -4
  26. package/dist/cjs/sdk/pools/AbstractPoolService.js +137 -0
  27. package/dist/cjs/{abi/iStateSerializer.js → sdk/pools/PoolServiceV310.js} +8 -14
  28. package/dist/cjs/sdk/pools/createPoolService.js +35 -0
  29. package/dist/cjs/sdk/pools/index.js +4 -2
  30. package/dist/cjs/sdk/utils/AddressMap.js +1 -1
  31. package/dist/cjs/sdk/utils/viem/sendRawTx.js +0 -16
  32. package/dist/esm/dev/AccountOpener.js +6 -47
  33. package/dist/esm/dev/index.js +4 -0
  34. package/dist/esm/dev/isOutOfSyncError.js +32 -0
  35. package/dist/esm/dev/isRateLimitError.js +56 -0
  36. package/dist/esm/dev/isTransientError.js +59 -0
  37. package/dist/esm/dev/providers.js +1 -1
  38. package/dist/esm/dev/resilientTransport.js +79 -0
  39. package/dist/esm/plugins/zappers/ZappersPlugin.js +126 -0
  40. package/dist/esm/{sdk/market/ZapperRegister.js → plugins/zappers/extraZappers.js} +2 -109
  41. package/dist/esm/plugins/zappers/index.js +3 -0
  42. package/dist/esm/plugins/zappers/package.json +1 -0
  43. package/dist/esm/sdk/accounts/AbstractCreditAccountsService.js +104 -462
  44. package/dist/esm/sdk/accounts/CreditAccountsServiceV310.js +5 -16
  45. package/dist/esm/sdk/base/ChainContractsRegister.js +1 -1
  46. package/dist/esm/sdk/base/TokensMeta.js +32 -261
  47. package/dist/esm/sdk/base/index.js +0 -1
  48. package/dist/esm/sdk/chain/chains.js +1 -2
  49. package/dist/esm/sdk/constants/index.js +1 -0
  50. package/dist/esm/sdk/{base/token-types.js → constants/phantom-tokens.js} +0 -4
  51. package/dist/esm/sdk/market/MarketRegister.js +2 -2
  52. package/dist/esm/sdk/market/MarketSuite.js +0 -6
  53. package/dist/esm/sdk/market/index.js +0 -1
  54. package/dist/esm/sdk/market/pool/PoolSuite.js +0 -3
  55. package/dist/esm/sdk/market/pool/PoolV310Contract.js +2 -17
  56. package/dist/esm/sdk/market/pool/index.js +0 -2
  57. package/dist/esm/sdk/pools/AbstractPoolService.js +113 -0
  58. package/dist/esm/sdk/pools/PoolServiceV310.js +6 -0
  59. package/dist/esm/sdk/pools/createPoolService.js +11 -0
  60. package/dist/esm/sdk/pools/index.js +2 -1
  61. package/dist/esm/sdk/utils/AddressMap.js +1 -1
  62. package/dist/esm/sdk/utils/viem/sendRawTx.js +1 -19
  63. package/dist/types/dev/index.d.ts +4 -0
  64. package/dist/types/dev/isOutOfSyncError.d.ts +4 -0
  65. package/dist/types/dev/isRateLimitError.d.ts +4 -0
  66. package/dist/types/dev/isTransientError.d.ts +4 -0
  67. package/dist/types/dev/resilientTransport.d.ts +19 -0
  68. package/dist/types/plugins/zappers/ZappersPlugin.d.ts +18 -0
  69. package/dist/types/plugins/zappers/extraZappers.d.ts +6 -0
  70. package/dist/types/plugins/zappers/index.d.ts +3 -0
  71. package/dist/types/plugins/zappers/types.d.ts +12 -0
  72. package/dist/types/sdk/accounts/AbstractCreditAccountsService.d.ts +27 -123
  73. package/dist/types/sdk/accounts/CreditAccountsServiceV310.d.ts +1 -1
  74. package/dist/types/sdk/accounts/types.d.ts +8 -108
  75. package/dist/types/sdk/base/TokensMeta.d.ts +18 -34
  76. package/dist/types/sdk/base/index.d.ts +0 -1
  77. package/dist/types/sdk/base/types.d.ts +1 -0
  78. package/dist/types/sdk/chain/chains.d.ts +1 -1
  79. package/dist/types/sdk/constants/index.d.ts +1 -0
  80. package/dist/types/sdk/constants/phantom-tokens.d.ts +2 -0
  81. package/dist/types/sdk/market/MarketRegister.d.ts +2 -2
  82. package/dist/types/sdk/market/MarketSuite.d.ts +0 -3
  83. package/dist/types/sdk/market/index.d.ts +0 -1
  84. package/dist/types/sdk/market/pool/PoolSuite.d.ts +0 -2
  85. package/dist/types/sdk/market/pool/PoolV310Contract.d.ts +2 -6
  86. package/dist/types/sdk/market/pool/index.d.ts +0 -2
  87. package/dist/types/sdk/pools/AbstractPoolService.d.ts +9 -0
  88. package/dist/types/sdk/pools/PoolServiceV310.d.ts +4 -0
  89. package/dist/types/sdk/pools/createPoolService.d.ts +3 -0
  90. package/dist/types/sdk/pools/index.d.ts +2 -1
  91. package/dist/types/sdk/pools/types.d.ts +63 -84
  92. package/dist/types/sdk/utils/AddressMap.d.ts +1 -1
  93. package/dist/types/sdk/utils/viem/sendRawTx.d.ts +1 -5
  94. package/package.json +6 -5
  95. package/dist/cjs/abi/310/iSecuritizeDegenNFT.js +0 -263
  96. package/dist/cjs/abi/310/iSecuritizeKYCFactory.js +0 -278
  97. package/dist/cjs/sdk/market/pool/SecuritizeKYCFactory.js +0 -97
  98. package/dist/cjs/sdk/pools/PoolService.js +0 -391
  99. package/dist/esm/abi/310/iSecuritizeDegenNFT.js +0 -239
  100. package/dist/esm/abi/310/iSecuritizeKYCFactory.js +0 -254
  101. package/dist/esm/abi/iStateSerializer.js +0 -12
  102. package/dist/esm/sdk/market/pool/SecuritizeKYCFactory.js +0 -73
  103. package/dist/esm/sdk/pools/PoolService.js +0 -371
  104. package/dist/types/abi/310/iSecuritizeDegenNFT.d.ts +0 -324
  105. package/dist/types/abi/310/iSecuritizeKYCFactory.d.ts +0 -322
  106. package/dist/types/abi/iStateSerializer.d.ts +0 -11
  107. package/dist/types/sdk/base/token-types.d.ts +0 -33
  108. package/dist/types/sdk/market/ZapperRegister.d.ts +0 -17
  109. package/dist/types/sdk/market/pool/SecuritizeKYCFactory.d.ts +0 -345
  110. package/dist/types/sdk/market/types.d.ts +0 -10
  111. package/dist/types/sdk/pools/PoolService.d.ts +0 -14
  112. /package/dist/cjs/{sdk/market → plugins/zappers}/types.js +0 -0
  113. /package/dist/esm/{sdk/market → plugins/zappers}/types.js +0 -0
@@ -52,7 +52,6 @@ class AccountOpener extends import_sdk.SDKConstruct {
52
52
  #minDebtMultiplier;
53
53
  #allowMint;
54
54
  #leverageDelta;
55
- #poolService;
56
55
  constructor(service, options_ = {}) {
57
56
  super(service.sdk);
58
57
  const {
@@ -78,7 +77,6 @@ class AccountOpener extends import_sdk.SDKConstruct {
78
77
  this.#poolDepositMultiplier = BigInt(poolDepositMultiplier);
79
78
  this.#minDebtMultiplier = BigInt(minDebtMultiplier);
80
79
  this.#leverageDelta = BigInt(leverageDelta);
81
- this.#poolService = new import_sdk.PoolService(service.sdk);
82
80
  this.#logger?.info(
83
81
  {
84
82
  borrower: (0, import_accounts.privateKeyToAccount)(this.borrowerKey).address,
@@ -116,10 +114,6 @@ class AccountOpener extends import_sdk.SDKConstruct {
116
114
  },
117
115
  "opening credit accounts"
118
116
  );
119
- await Promise.all([
120
- this.sdk.tokensMeta.loadTokenData(),
121
- this.sdk.marketRegister.loadZappers()
122
- ]);
123
117
  let deposits = [];
124
118
  if (depositIntoPools) {
125
119
  try {
@@ -471,34 +465,9 @@ class AccountOpener extends import_sdk.SDKConstruct {
471
465
  this.#logger?.debug(
472
466
  `depositor balance in underlying: ${this.sdk.tokensMeta.formatBN(pool.underlying, allowance, { symbol: true })}`
473
467
  );
474
- const tokensOut = this.#poolService.getDepositTokensOut(
475
- address,
476
- underlying
477
- );
478
- this.#logger?.debug(
479
- { tokensOut: tokensOut.map((t) => this.labelAddress(t)) },
480
- "deposit tokens out"
481
- );
482
- if (tokensOut.length === 0) {
483
- throw new Error(`no tokens out found for pool ${poolName}`);
484
- }
485
- const tokenOut = tokensOut[0];
486
- const metadata = this.#poolService.getDepositMetadata(
487
- address,
488
- underlying,
489
- tokenOut
490
- );
491
- this.logger?.debug(
492
- {
493
- underlying: this.labelAddress(underlying),
494
- tokenOut: this.labelAddress(tokenOut),
495
- ...metadata
496
- },
497
- "pool deposit metadata"
498
- );
499
468
  txHash = await this.#anvil.writeContract({
500
469
  account: depositor,
501
- address: metadata.approveTarget,
470
+ address: underlying,
502
471
  abi: import_iERC20.ierc20Abi,
503
472
  functionName: "approve",
504
473
  args: [address, allowance],
@@ -515,21 +484,12 @@ class AccountOpener extends import_sdk.SDKConstruct {
515
484
  this.#logger?.debug(
516
485
  `depositor approved underlying for pool ${poolName}: ${txHash}`
517
486
  );
518
- const depositCall = this.#poolService.addLiquidity({
519
- collateral: { token: underlying, balance: amount },
520
- pool: address,
521
- wallet: depositor.address,
522
- meta: metadata
523
- });
524
- if (!depositCall) {
525
- throw new Error(`no deposit call could be created for ${poolName}`);
526
- }
527
487
  txHash = await this.#anvil.writeContract({
528
488
  account: depositor,
529
- address: depositCall.target,
530
- abi: depositCall.abi,
531
- functionName: depositCall.functionName,
532
- args: depositCall.args,
489
+ address,
490
+ abi: import_generated.iPoolV310Abi,
491
+ functionName: "deposit",
492
+ args: [amount, depositor.address],
533
493
  chain: this.#anvil.chain
534
494
  });
535
495
  receipt = await this.#anvil.waitForTransactionReceipt({ hash: txHash });
@@ -23,12 +23,16 @@ __reExport(dev_exports, require("./create2.js"), module.exports);
23
23
  __reExport(dev_exports, require("./createAnvilClient.js"), module.exports);
24
24
  __reExport(dev_exports, require("./detectChain.js"), module.exports);
25
25
  __reExport(dev_exports, require("./EthCallSpy.js"), module.exports);
26
+ __reExport(dev_exports, require("./isOutOfSyncError.js"), module.exports);
27
+ __reExport(dev_exports, require("./isRateLimitError.js"), module.exports);
28
+ __reExport(dev_exports, require("./isTransientError.js"), module.exports);
26
29
  __reExport(dev_exports, require("./ltUtils.js"), module.exports);
27
30
  __reExport(dev_exports, require("./migrateFaucet.js"), module.exports);
28
31
  __reExport(dev_exports, require("./mint/index.js"), module.exports);
29
32
  __reExport(dev_exports, require("./providers.js"), module.exports);
30
33
  __reExport(dev_exports, require("./RevolverTransport.js"), module.exports);
31
34
  __reExport(dev_exports, require("./replaceStorage.js"), module.exports);
35
+ __reExport(dev_exports, require("./resilientTransport.js"), module.exports);
32
36
  __reExport(dev_exports, require("./transports.js"), module.exports);
33
37
  __reExport(dev_exports, require("./types.js"), module.exports);
34
38
  // Annotate the CommonJS export names for ESM import in node:
@@ -41,12 +45,16 @@ __reExport(dev_exports, require("./types.js"), module.exports);
41
45
  ...require("./createAnvilClient.js"),
42
46
  ...require("./detectChain.js"),
43
47
  ...require("./EthCallSpy.js"),
48
+ ...require("./isOutOfSyncError.js"),
49
+ ...require("./isRateLimitError.js"),
50
+ ...require("./isTransientError.js"),
44
51
  ...require("./ltUtils.js"),
45
52
  ...require("./migrateFaucet.js"),
46
53
  ...require("./mint/index.js"),
47
54
  ...require("./providers.js"),
48
55
  ...require("./RevolverTransport.js"),
49
56
  ...require("./replaceStorage.js"),
57
+ ...require("./resilientTransport.js"),
50
58
  ...require("./transports.js"),
51
59
  ...require("./types.js")
52
60
  });
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var isOutOfSyncError_exports = {};
20
+ __export(isOutOfSyncError_exports, {
21
+ isOutOfSyncError: () => isOutOfSyncError
22
+ });
23
+ module.exports = __toCommonJS(isOutOfSyncError_exports);
24
+ var import_viem = require("viem");
25
+ const OUT_OF_SYNC_PATTERNS = [
26
+ // Alchemy (code 3), DRPC (code 26), Thirdweb (code 26) on Mainnet/Plasma/Monad
27
+ /unknown block/i,
28
+ // Ankr (code -32000) on Mainnet
29
+ /header not found/i,
30
+ // Alchemy, Ankr, Thirdweb, direct Monad RPCs (code -32602)
31
+ /block requested not found/i,
32
+ // Ankr, Thirdweb, direct Somnia RPCs (code -1)
33
+ /unable to load historical state/i,
34
+ // Ankr, Thirdweb, direct Etherlink RPCs (code -32603)
35
+ /no state available for block/i,
36
+ // Generic "block not found" (code -32001) from various providers
37
+ /block\b.*\bnot found/i,
38
+ // Optimism proxyd (code -32019) for future/non-existent blocks
39
+ /block is out of range/i,
40
+ // EIP-1474 standard (code -32001) when block/state is not available
41
+ /resource not found/i
42
+ ];
43
+ function isOutOfSyncError(e) {
44
+ if (e instanceof import_viem.BaseError) {
45
+ const match = e.walk((err) => {
46
+ const msg = err.details ?? err.message ?? "";
47
+ return OUT_OF_SYNC_PATTERNS.some((re) => re.test(msg));
48
+ });
49
+ return match !== null;
50
+ }
51
+ return OUT_OF_SYNC_PATTERNS.some((re) => re.test(e.message));
52
+ }
53
+ // Annotate the CommonJS export names for ESM import in node:
54
+ 0 && (module.exports = {
55
+ isOutOfSyncError
56
+ });
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var isRateLimitError_exports = {};
20
+ __export(isRateLimitError_exports, {
21
+ isRateLimitError: () => isRateLimitError
22
+ });
23
+ module.exports = __toCommonJS(isRateLimitError_exports);
24
+ var import_viem = require("viem");
25
+ const RATE_LIMIT_PATTERNS = [
26
+ // Thirdweb (status 429): "You've been rate limited, please upgrade your plan."
27
+ // Monad direct/Cloudflare (status 429): "You are being rate limited"
28
+ /rate limit/i,
29
+ // DRPC (code 15, status 429): "Too many request, try again later"
30
+ // Ankr (status 429): HTML "<title>429 Too Many Requests</title>"
31
+ /too many request/i,
32
+ // Alchemy (code 429, status 429): "Your app has exceeded its compute units per second capacity"
33
+ /exceeded its compute units/i,
34
+ // Providers embedding retry hints: "retry after 5 seconds", "retry in 10s"
35
+ /retry.{0,10}(in|after)\s+\d/i
36
+ ];
37
+ function extractRetryAfter(headers) {
38
+ if (!headers) {
39
+ return void 0;
40
+ }
41
+ const val = headers.get("retry-after");
42
+ if (!val) {
43
+ return void 0;
44
+ }
45
+ const seconds = Number(val);
46
+ if (!Number.isNaN(seconds)) {
47
+ return seconds * 1e3;
48
+ }
49
+ const date = Date.parse(val);
50
+ if (!Number.isNaN(date)) {
51
+ return Math.max(0, date - Date.now());
52
+ }
53
+ return void 0;
54
+ }
55
+ function isRateLimitError(e) {
56
+ if (e instanceof import_viem.BaseError) {
57
+ let retryAfterMs;
58
+ const httpMatch = e.walk((err) => {
59
+ if (err instanceof import_viem.HttpRequestError && err.status === 429) {
60
+ retryAfterMs = extractRetryAfter(err.headers);
61
+ return true;
62
+ }
63
+ return false;
64
+ });
65
+ if (httpMatch !== null) return [true, retryAfterMs];
66
+ const msgMatch = e.walk((err) => {
67
+ const msg = err.details ?? err.message ?? "";
68
+ return RATE_LIMIT_PATTERNS.some((re) => re.test(msg));
69
+ });
70
+ if (msgMatch !== null) return [true, void 0];
71
+ }
72
+ if (RATE_LIMIT_PATTERNS.some((re) => re.test(e.message))) {
73
+ return [true, void 0];
74
+ }
75
+ return [false, void 0];
76
+ }
77
+ // Annotate the CommonJS export names for ESM import in node:
78
+ 0 && (module.exports = {
79
+ isRateLimitError
80
+ });
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var isTransientError_exports = {};
20
+ __export(isTransientError_exports, {
21
+ isTransientError: () => isTransientError
22
+ });
23
+ module.exports = __toCommonJS(isTransientError_exports);
24
+ var import_viem = require("viem");
25
+ const TRANSIENT_HTTP_STATUSES = /* @__PURE__ */ new Set([502, 503, 504]);
26
+ const TRANSIENT_PATTERNS = [
27
+ // viem TimeoutError: RPC endpoint didn't respond within configured timeout
28
+ // (default 10s). details = "The request timed out."
29
+ /timed?\s*out/i,
30
+ // Node.js ECONNRESET: TCP connection forcibly closed by the server mid-request,
31
+ // typically during server restarts or under heavy load.
32
+ // Wrapped by viem in HttpRequestError with cause TypeError("fetch failed")
33
+ /econnreset/i,
34
+ // Node.js "socket hang up": server closed the TCP connection before sending
35
+ // a complete response, similar to ECONNRESET but at HTTP level
36
+ /socket hang up/i,
37
+ // Browser/Node.js fetch failures: DNS resolution failure, connection refused,
38
+ // unreachable host, or CORS errors. Wrapped in HttpRequestError by viem.
39
+ /network error|failed to fetch|fetch failed/i,
40
+ // HTTP 503 text in response body when status check alone doesn't catch it
41
+ // (e.g., HTML error page from a CDN/proxy during maintenance or overload)
42
+ /service unavailable/i,
43
+ // HTTP 502 text in response body from load balancer/reverse proxy when the
44
+ // backend RPC node is unreachable or returned an invalid response
45
+ /bad gateway/i,
46
+ // HTTP 504 text in response body from gateway/proxy when the upstream RPC
47
+ // node didn't respond in time
48
+ /gateway time/i,
49
+ // Malformed JSON-RPC response: server returned 200 with empty/null body or
50
+ // non-JSON content despite application/json content-type, causing viem's
51
+ // response parser to fail with a destructuring TypeError
52
+ /cannot destructure/i,
53
+ // viem UnknownRpcError: provider returned a JSON-RPC error with an
54
+ // unrecognized error code that viem can't categorize.
55
+ // shortMessage = "An unknown RPC error occurred."
56
+ /unknown rpc error/i,
57
+ // EIP-1474 ResourceUnavailableRpcError (code -32002): node is syncing or the
58
+ // requested resource is temporarily unavailable.
59
+ // Matches both the RPC message and viem's shortMessage "Requested resource not available."
60
+ /resource unavailable|requested resource not available/i
61
+ ];
62
+ function isTransientError(e) {
63
+ if (e instanceof import_viem.BaseError) {
64
+ if (e instanceof import_viem.TimeoutError) return true;
65
+ const httpMatch = e.walk((err) => {
66
+ if (err instanceof import_viem.HttpRequestError && err.status !== void 0 && TRANSIENT_HTTP_STATUSES.has(err.status)) {
67
+ return true;
68
+ }
69
+ return false;
70
+ });
71
+ if (httpMatch !== null) return true;
72
+ const msgMatch = e.walk((err) => {
73
+ const msg = err.details ?? err.message ?? "";
74
+ return TRANSIENT_PATTERNS.some((re) => re.test(msg));
75
+ });
76
+ return msgMatch !== null;
77
+ }
78
+ return TRANSIENT_PATTERNS.some((re) => re.test(e.message));
79
+ }
80
+ // Annotate the CommonJS export names for ESM import in node:
81
+ 0 && (module.exports = {
82
+ isTransientError
83
+ });
@@ -77,7 +77,7 @@ const DRPC_NETS = {
77
77
  MegaETH: "megaeth",
78
78
  Etherlink: null,
79
79
  Plasma: "plasma",
80
- Somnia: "somnia"
80
+ Somnia: null
81
81
  };
82
82
  const ALCHEMY_DOMAINS = {
83
83
  Mainnet: "eth-mainnet",
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var resilientTransport_exports = {};
20
+ __export(resilientTransport_exports, {
21
+ resilientTransport: () => resilientTransport,
22
+ resilientTransportOptionsSchema: () => resilientTransportOptionsSchema
23
+ });
24
+ module.exports = __toCommonJS(resilientTransport_exports);
25
+ var import_viem = require("viem");
26
+ var import_v4 = require("zod/v4");
27
+ var import_isOutOfSyncError = require("./isOutOfSyncError.js");
28
+ var import_isRateLimitError = require("./isRateLimitError.js");
29
+ var import_isTransientError = require("./isTransientError.js");
30
+ const resilientTransportOptionsSchema = import_v4.z.object({
31
+ /**
32
+ * Max retry attempts.
33
+ * @default 3
34
+ **/
35
+ retryCount: import_v4.z.number().int().min(0).default(3),
36
+ /**
37
+ * Base delay (ms) for exponential backoff.
38
+ * @default 300
39
+ **/
40
+ delay: import_v4.z.number().min(0).default(300),
41
+ /**
42
+ * Upper bound (ms) for backoff delay.
43
+ * @default 5_000
44
+ **/
45
+ maxDelay: import_v4.z.number().min(0).default(5e3),
46
+ /**
47
+ * Max random jitter (ms) added to each delay.
48
+ * @default 100
49
+ **/
50
+ jitter: import_v4.z.number().min(0).default(100),
51
+ /**
52
+ * Retry on rate-limit (HTTP 429) errors.
53
+ * @default true
54
+ **/
55
+ handleRateLimit: import_v4.z.boolean().default(true),
56
+ /**
57
+ * Retry on transient network/infrastructure errors.
58
+ * @default true
59
+ **/
60
+ handleTransient: import_v4.z.boolean().default(true),
61
+ /**
62
+ * Retry on out-of-sync / block-not-found errors.
63
+ * @default true
64
+ **/
65
+ handleOutOfSync: import_v4.z.boolean().default(true)
66
+ });
67
+ function resilientTransport(underlyingTransport, options) {
68
+ const opts = resilientTransportOptionsSchema.parse(options ?? {});
69
+ return (transportOpts) => {
70
+ const base = underlyingTransport(transportOpts);
71
+ const rpcRequest = base.request;
72
+ const request = async (args) => (0, import_viem.withRetry)(() => rpcRequest(args), {
73
+ retryCount: opts.retryCount,
74
+ delay({ count, error }) {
75
+ if (opts.handleRateLimit) {
76
+ const [isRate, retryAfterMs] = (0, import_isRateLimitError.isRateLimitError)(error);
77
+ if (isRate && retryAfterMs !== void 0) {
78
+ return retryAfterMs + Math.floor(Math.random() * opts.jitter);
79
+ }
80
+ }
81
+ const exp = Math.min(opts.maxDelay, opts.delay * 2 ** count);
82
+ return exp + Math.floor(Math.random() * opts.jitter);
83
+ },
84
+ shouldRetry({ error }) {
85
+ if (opts.handleRateLimit && (0, import_isRateLimitError.isRateLimitError)(error)[0]) {
86
+ return true;
87
+ }
88
+ if (opts.handleTransient && (0, import_isTransientError.isTransientError)(error)) {
89
+ return true;
90
+ }
91
+ if (opts.handleOutOfSync && (0, import_isOutOfSyncError.isOutOfSyncError)(error)) {
92
+ return true;
93
+ }
94
+ return false;
95
+ }
96
+ });
97
+ return { ...base, request };
98
+ };
99
+ }
100
+ // Annotate the CommonJS export names for ESM import in node:
101
+ 0 && (module.exports = {
102
+ resilientTransport,
103
+ resilientTransportOptionsSchema
104
+ });
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var ZappersPlugin_exports = {};
20
+ __export(ZappersPlugin_exports, {
21
+ ZappersPlugin: () => ZappersPlugin
22
+ });
23
+ module.exports = __toCommonJS(ZappersPlugin_exports);
24
+ var import_peripheryCompressor = require("../../abi/compressors/peripheryCompressor.js");
25
+ var import_sdk = require("../../sdk/index.js");
26
+ class ZappersPlugin extends import_sdk.BasePlugin {
27
+ #zappers;
28
+ #extraZappers;
29
+ constructor(extraZappers = [], loadOnAttach = false) {
30
+ super(loadOnAttach);
31
+ this.#extraZappers = this.#addExtraZappers(extraZappers);
32
+ }
33
+ async load(force) {
34
+ if (!force && this.loaded) {
35
+ return this.state;
36
+ }
37
+ const [pcAddr] = this.sdk.addressProvider.mustGetLatest(
38
+ import_sdk.AP_PERIPHERY_COMPRESSOR,
39
+ import_sdk.VERSION_RANGE_310
40
+ );
41
+ this.sdk.logger?.debug(
42
+ `loading zappers with periphery compressor ${pcAddr}`
43
+ );
44
+ const markets = this.sdk.marketRegister.markets;
45
+ const resp = await this.client.multicall({
46
+ contracts: markets.map(
47
+ (m) => ({
48
+ abi: import_peripheryCompressor.peripheryCompressorAbi,
49
+ address: pcAddr,
50
+ functionName: "getZappers",
51
+ args: [m.configurator.address, m.pool.pool.address]
52
+ })
53
+ ),
54
+ allowFailure: true,
55
+ batchSize: 0,
56
+ blockNumber: this.sdk.currentBlock
57
+ });
58
+ this.#zappers = new import_sdk.AddressMap(void 0, "zappers");
59
+ for (let i = 0; i < resp.length; i++) {
60
+ const { status, result, error } = resp[i];
61
+ const marketConfigurator = markets[i].configurator.address;
62
+ const pool = markets[i].pool.pool.address;
63
+ if (status === "success") {
64
+ this.#zappers.upsert(
65
+ pool,
66
+ result.map((z) => ({ ...z, pool }))
67
+ );
68
+ } else {
69
+ this.sdk.logger?.error(
70
+ `failed to load zapper for market configurator ${this.labelAddress(
71
+ marketConfigurator
72
+ )} and pool ${this.labelAddress(pool)}: ${error}`
73
+ );
74
+ }
75
+ }
76
+ this.#loadZapperTokens();
77
+ return this.state;
78
+ }
79
+ #addExtraZappers(extraZappers) {
80
+ const zappers = new import_sdk.AddressMap();
81
+ for (const z of extraZappers) {
82
+ const existing = zappers?.get(z.pool);
83
+ if (existing) {
84
+ const hasZapper = existing.some(
85
+ (zz) => (0, import_sdk.hexEq)(zz.baseParams.addr, z.baseParams.addr)
86
+ );
87
+ if (!hasZapper) {
88
+ existing.push(z);
89
+ }
90
+ } else {
91
+ zappers?.upsert(z.pool, [z]);
92
+ }
93
+ }
94
+ return zappers;
95
+ }
96
+ get extraZappers() {
97
+ if (!this.#extraZappers) {
98
+ console.error("extra zappers not attached");
99
+ return new import_sdk.AddressMap();
100
+ }
101
+ return this.#extraZappers;
102
+ }
103
+ get zappers() {
104
+ if (!this.#zappers) {
105
+ throw new Error("zappers plugin not attached");
106
+ }
107
+ return this.#zappers;
108
+ }
109
+ get loaded() {
110
+ return !!this.#zappers;
111
+ }
112
+ stateHuman(_) {
113
+ return this.zappers.values().flatMap(
114
+ (l) => l.flatMap((z) => ({
115
+ address: z.baseParams.addr,
116
+ contractType: z.baseParams.contractType,
117
+ version: Number(z.baseParams.version),
118
+ tokenIn: this.labelAddress(z.tokenIn.addr),
119
+ tokenOut: this.labelAddress(z.tokenOut.addr)
120
+ }))
121
+ );
122
+ }
123
+ get state() {
124
+ return {
125
+ zappers: this.zappers.asRecord()
126
+ };
127
+ }
128
+ hydrate(state) {
129
+ this.#zappers = new import_sdk.AddressMap(Object.entries(state.zappers), "zappers");
130
+ this.#loadZapperTokens();
131
+ }
132
+ #loadZapperTokens() {
133
+ const zappersTokens = this.zappers.values().flatMap((l) => l.flatMap((z) => [z.tokenIn, z.tokenOut]));
134
+ const extraZappersTokens = this.extraZappers.values().flatMap((l) => l.flatMap((z) => [z.tokenIn, z.tokenOut]));
135
+ for (const t of [...zappersTokens, ...extraZappersTokens]) {
136
+ this.sdk.tokensMeta.upsert(t.addr, t);
137
+ this.sdk.setAddressLabel(t.addr, t.symbol);
138
+ }
139
+ }
140
+ }
141
+ // Annotate the CommonJS export names for ESM import in node:
142
+ 0 && (module.exports = {
143
+ ZappersPlugin
144
+ });