@across-protocol/sdk 4.3.72 → 4.3.74

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 (57) hide show
  1. package/dist/cjs/arch/evm/SpokeUtils.js +21 -16
  2. package/dist/cjs/arch/evm/SpokeUtils.js.map +1 -1
  3. package/dist/cjs/arch/svm/SpokeUtils.js +1 -1
  4. package/dist/cjs/arch/svm/SpokeUtils.js.map +1 -1
  5. package/dist/cjs/arch/svm/provider.d.ts +12 -1
  6. package/dist/cjs/arch/svm/provider.js +17 -6
  7. package/dist/cjs/arch/svm/provider.js.map +1 -1
  8. package/dist/cjs/arch/svm/utils.d.ts +0 -1
  9. package/dist/cjs/arch/svm/utils.js +1 -3
  10. package/dist/cjs/arch/svm/utils.js.map +1 -1
  11. package/dist/cjs/providers/solana/quorumFallbackRpcFactory.d.ts +1 -1
  12. package/dist/cjs/providers/solana/quorumFallbackRpcFactory.js +7 -3
  13. package/dist/cjs/providers/solana/quorumFallbackRpcFactory.js.map +1 -1
  14. package/dist/cjs/providers/solana/retryRpcFactory.d.ts +1 -2
  15. package/dist/cjs/providers/solana/retryRpcFactory.js +4 -16
  16. package/dist/cjs/providers/solana/retryRpcFactory.js.map +1 -1
  17. package/dist/cjs/providers/solana/utils.d.ts +1 -0
  18. package/dist/cjs/providers/solana/utils.js +15 -0
  19. package/dist/cjs/providers/solana/utils.js.map +1 -1
  20. package/dist/esm/arch/evm/SpokeUtils.js +21 -16
  21. package/dist/esm/arch/evm/SpokeUtils.js.map +1 -1
  22. package/dist/esm/arch/svm/SpokeUtils.js +1 -1
  23. package/dist/esm/arch/svm/SpokeUtils.js.map +1 -1
  24. package/dist/esm/arch/svm/provider.d.ts +28 -1
  25. package/dist/esm/arch/svm/provider.js +29 -1
  26. package/dist/esm/arch/svm/provider.js.map +1 -1
  27. package/dist/esm/arch/svm/utils.d.ts +0 -1
  28. package/dist/esm/arch/svm/utils.js +0 -1
  29. package/dist/esm/arch/svm/utils.js.map +1 -1
  30. package/dist/esm/providers/solana/quorumFallbackRpcFactory.d.ts +1 -1
  31. package/dist/esm/providers/solana/quorumFallbackRpcFactory.js +8 -3
  32. package/dist/esm/providers/solana/quorumFallbackRpcFactory.js.map +1 -1
  33. package/dist/esm/providers/solana/retryRpcFactory.d.ts +1 -8
  34. package/dist/esm/providers/solana/retryRpcFactory.js +4 -24
  35. package/dist/esm/providers/solana/retryRpcFactory.js.map +1 -1
  36. package/dist/esm/providers/solana/utils.d.ts +7 -0
  37. package/dist/esm/providers/solana/utils.js +22 -1
  38. package/dist/esm/providers/solana/utils.js.map +1 -1
  39. package/dist/types/arch/evm/SpokeUtils.d.ts.map +1 -1
  40. package/dist/types/arch/svm/provider.d.ts +28 -1
  41. package/dist/types/arch/svm/provider.d.ts.map +1 -1
  42. package/dist/types/arch/svm/utils.d.ts +0 -1
  43. package/dist/types/arch/svm/utils.d.ts.map +1 -1
  44. package/dist/types/providers/solana/quorumFallbackRpcFactory.d.ts +1 -1
  45. package/dist/types/providers/solana/quorumFallbackRpcFactory.d.ts.map +1 -1
  46. package/dist/types/providers/solana/retryRpcFactory.d.ts +1 -8
  47. package/dist/types/providers/solana/retryRpcFactory.d.ts.map +1 -1
  48. package/dist/types/providers/solana/utils.d.ts +7 -0
  49. package/dist/types/providers/solana/utils.d.ts.map +1 -1
  50. package/package.json +1 -1
  51. package/src/arch/evm/SpokeUtils.ts +8 -1
  52. package/src/arch/svm/SpokeUtils.ts +1 -1
  53. package/src/arch/svm/provider.ts +46 -1
  54. package/src/arch/svm/utils.ts +0 -3
  55. package/src/providers/solana/quorumFallbackRpcFactory.ts +10 -4
  56. package/src/providers/solana/retryRpcFactory.ts +5 -27
  57. package/src/providers/solana/utils.ts +24 -0
@@ -1,10 +1,11 @@
1
1
  import { __awaiter, __extends, __generator, __spreadArray } from "tslib";
2
2
  import { SOLANA_ERROR__RPC__TRANSPORT_HTTP_ERROR } from "@solana/kit";
3
3
  import { getThrowSolanaErrorResponseTransformer } from "@solana/rpc-transformers";
4
+ import { isSolanaError } from "../../arch/svm";
5
+ import { delay } from "../../utils";
4
6
  import { SolanaClusterRpcFactory } from "./baseRpcFactories";
5
7
  import { RateLimitedSolanaRpcFactory } from "./rateLimitedRpcFactory";
6
- import { isSolanaError, SVM_SLOT_SKIPPED, SVM_LONG_TERM_STORAGE_SLOT_SKIPPED } from "../../arch/svm";
7
- import { delay } from "../../utils";
8
+ import { shouldFailImmediate } from "./utils";
8
9
  // This factory adds retry logic on top of the RateLimitedSolanaRpcFactory.
9
10
  // It follows the same composition pattern as other factories in this module.
10
11
  var RetrySolanaRpcFactory = /** @class */ (function (_super) {
@@ -71,7 +72,7 @@ var RetrySolanaRpcFactory = /** @class */ (function (_super) {
71
72
  return [2 /*return*/, response];
72
73
  case 4:
73
74
  error_1 = _b.sent();
74
- if (retryAttempt++ >= this.retries || this.shouldFailImmediate(method, error_1)) {
75
+ if (retryAttempt++ >= this.retries || shouldFailImmediate(method, error_1)) {
75
76
  throw error_1;
76
77
  }
77
78
  retryDelaySeconds = this.retryDelaySeconds;
@@ -88,27 +89,6 @@ var RetrySolanaRpcFactory = /** @class */ (function (_super) {
88
89
  });
89
90
  });
90
91
  };
91
- /**
92
- * Determine whether a Solana RPC error indicates an unrecoverable error that should not be retried.
93
- * @param method RPC method name
94
- * @param error Error object from the RPC call
95
- * @returns True if the request should be aborted immediately, otherwise false
96
- */
97
- RetrySolanaRpcFactory.prototype.shouldFailImmediate = function (method, error) {
98
- if (!isSolanaError(error)) {
99
- return false;
100
- }
101
- // JSON-RPC errors: https://www.quicknode.com/docs/solana/error-references
102
- var code = error.context.__code;
103
- switch (method) {
104
- case "getBlock":
105
- case "getBlockTime":
106
- // No block at the requested slot. This may not be correct for blocks > 1 year old.
107
- return [SVM_SLOT_SKIPPED, SVM_LONG_TERM_STORAGE_SLOT_SKIPPED].includes(code);
108
- default:
109
- return false;
110
- }
111
- };
112
92
  /**
113
93
  * Identify whether an error thrown was the result of an RPC provider 429 response.
114
94
  * @param error Error object from the RPC query.
@@ -1 +1 @@
1
- {"version":3,"file":"retryRpcFactory.js","sourceRoot":"","sources":["../../../../src/providers/solana/retryRpcFactory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"retryRpcFactory.js","sourceRoot":"","sources":["../../../../src/providers/solana/retryRpcFactory.ts"],"names":[],"mappings":"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"}
@@ -7,3 +7,10 @@ export interface SolanaRateLimitTask {
7
7
  resolve: (result: unknown) => void;
8
8
  reject: (err: unknown) => void;
9
9
  }
10
+ /**
11
+ * Determine whether a Solana RPC error indicates an unrecoverable error that should not be retried.
12
+ * @param method RPC method name.
13
+ * @param error Error object from the RPC call.
14
+ * @returns True if the request should be aborted immediately, otherwise false.
15
+ */
16
+ export declare function shouldFailImmediate(method: string, error: unknown): boolean;
@@ -1,2 +1,23 @@
1
- export {};
1
+ import { isSolanaError, SVM_SLOT_SKIPPED, SVM_LONG_TERM_STORAGE_SLOT_SKIPPED } from "../../arch/svm";
2
+ /**
3
+ * Determine whether a Solana RPC error indicates an unrecoverable error that should not be retried.
4
+ * @param method RPC method name.
5
+ * @param error Error object from the RPC call.
6
+ * @returns True if the request should be aborted immediately, otherwise false.
7
+ */
8
+ export function shouldFailImmediate(method, error) {
9
+ if (!isSolanaError(error)) {
10
+ return false;
11
+ }
12
+ // JSON-RPC errors: https://www.quicknode.com/docs/solana/error-references
13
+ var code = error.context.__code;
14
+ switch (method) {
15
+ case "getBlock":
16
+ case "getBlockTime":
17
+ // No block at the requested slot. This may not be correct for blocks > 1 year old.
18
+ return [SVM_SLOT_SKIPPED, SVM_LONG_TERM_STORAGE_SLOT_SKIPPED].includes(code);
19
+ default:
20
+ return false;
21
+ }
22
+ }
2
23
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/providers/solana/utils.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/providers/solana/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,kCAAkC,EAAE,MAAM,gBAAgB,CAAC;AAerG;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAc,EAAE,KAAc;IAChE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,0EAA0E;IAClE,IAAQ,IAAI,GAAK,KAAK,CAAC,OAAO,OAAlB,CAAmB;IACvC,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,UAAU,CAAC;QAChB,KAAK,cAAc;YACjB,mFAAmF;YACnF,OAAO,CAAC,gBAAgB,EAAE,kCAAkC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC/E;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"SpokeUtils.d.ts","sourceRoot":"","sources":["../../../../src/arch/evm/SpokeUtils.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,QAAQ,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAE9E,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAChG,OAAO,EAEL,SAAS,EACT,UAAU,EAUV,OAAO,EAER,MAAM,aAAa,CAAC;AAErB,KAAK,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;AAEnC,KAAK,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,WAAW,GAAG,aAAa,CAAC,GAC3D,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC,GACjC,OAAO,CAAC,aAAa,CAAC,GAAG;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,SAAS,EAAE,UAAU,CAAC;IACtB,WAAW,EAAE,UAAU,CAAC;CACzB,CAAC;AAEJ;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,QAAQ,EACnB,SAAS,EAAE,SAAS,EACpB,gBAAgB,EAAE,OAAO,EACzB,gBAAgB,SAA+B,GAC9C,OAAO,CAAC,oBAAoB,CAAC,CAoC/B;AAED;;;GAGG;AACH,wBAAsB,SAAS,CAAC,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAIzF;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CAAC,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAG7G;AAED;;;;;;GAMG;AACH,wBAAsB,yBAAyB,CAC7C,SAAS,EAAE,QAAQ,EACnB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,CAMjB;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAQlG;AAED,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,QAAQ,EACnB,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAkC7B;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,SAAS,EAAE,QAAQ,EACnB,SAAS,EAAE,SAAS,EACpB,QAAQ,GAAE,QAAmB,EAC7B,kBAAkB,CAAC,EAAE,MAAM,GAC1B,OAAO,CAAC,UAAU,CAAC,CAgBrB;AAED,wBAAsB,eAAe,CACnC,SAAS,EAAE,QAAQ,EACnB,SAAS,EAAE,SAAS,EAAE,EACtB,QAAQ,GAAE,QAAmB,GAC5B,OAAO,CAAC,CAAC,UAAU,GAAG,SAAS,CAAC,EAAE,CAAC,CA8BrC;AAED;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CACjC,SAAS,EAAE,QAAQ,EACnB,SAAS,EAAE,SAAS,EACpB,cAAc,EAAE,MAAM,EACtB,eAAe,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAmD7B;AAED,wBAAsB,aAAa,CACjC,SAAS,EAAE,QAAQ,EACnB,SAAS,EAAE,SAAS,EACpB,cAAc,EAAE,MAAM,EACtB,eAAe,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAgCpC"}
1
+ {"version":3,"file":"SpokeUtils.d.ts","sourceRoot":"","sources":["../../../../src/arch/evm/SpokeUtils.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,QAAQ,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAE9E,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAChG,OAAO,EAEL,SAAS,EACT,UAAU,EAUV,OAAO,EAER,MAAM,aAAa,CAAC;AAErB,KAAK,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;AAEnC,KAAK,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,WAAW,GAAG,aAAa,CAAC,GAC3D,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC,GACjC,OAAO,CAAC,aAAa,CAAC,GAAG;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,SAAS,EAAE,UAAU,CAAC;IACtB,WAAW,EAAE,UAAU,CAAC;CACzB,CAAC;AAEJ;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,QAAQ,EACnB,SAAS,EAAE,SAAS,EACpB,gBAAgB,EAAE,OAAO,EACzB,gBAAgB,SAA+B,GAC9C,OAAO,CAAC,oBAAoB,CAAC,CAoC/B;AAED;;;GAGG;AACH,wBAAsB,SAAS,CAAC,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAIzF;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CAAC,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAG7G;AAED;;;;;;GAMG;AACH,wBAAsB,yBAAyB,CAC7C,SAAS,EAAE,QAAQ,EACnB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,CAMjB;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAQlG;AAED,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,QAAQ,EACnB,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAkC7B;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,SAAS,EAAE,QAAQ,EACnB,SAAS,EAAE,SAAS,EACpB,QAAQ,GAAE,QAAmB,EAC7B,kBAAkB,CAAC,EAAE,MAAM,GAC1B,OAAO,CAAC,UAAU,CAAC,CAgBrB;AAED,wBAAsB,eAAe,CACnC,SAAS,EAAE,QAAQ,EACnB,SAAS,EAAE,SAAS,EAAE,EACtB,QAAQ,GAAE,QAAmB,GAC5B,OAAO,CAAC,CAAC,UAAU,GAAG,SAAS,CAAC,EAAE,CAAC,CA8BrC;AAED;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CACjC,SAAS,EAAE,QAAQ,EACnB,SAAS,EAAE,SAAS,EACpB,cAAc,EAAE,MAAM,EACtB,eAAe,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAmD7B;AAED,wBAAsB,aAAa,CACjC,SAAS,EAAE,QAAQ,EACnB,SAAS,EAAE,SAAS,EACpB,cAAc,EAAE,MAAM,EACtB,eAAe,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAuCpC"}
@@ -2,5 +2,32 @@
2
2
  * SVM RPC provider error codes
3
3
  * See https://www.quicknode.com/docs/solana/error-references
4
4
  */
5
- export { isSolanaError, SOLANA_ERROR__JSON_RPC__SERVER_ERROR_BLOCK_NOT_AVAILABLE as SVM_BLOCK_NOT_AVAILABLE, SOLANA_ERROR__JSON_RPC__SERVER_ERROR_SLOT_SKIPPED as SVM_SLOT_SKIPPED, SOLANA_ERROR__JSON_RPC__SERVER_ERROR_LONG_TERM_STORAGE_SLOT_SKIPPED as SVM_LONG_TERM_STORAGE_SLOT_SKIPPED, SOLANA_ERROR__JSON_RPC__SERVER_ERROR_SEND_TRANSACTION_PREFLIGHT_FAILURE as SVM_TRANSACTION_PREFLIGHT_FAILURE, } from "@solana/kit";
5
+ export { SOLANA_ERROR__JSON_RPC__SERVER_ERROR_BLOCK_NOT_AVAILABLE as SVM_BLOCK_NOT_AVAILABLE, SOLANA_ERROR__JSON_RPC__SERVER_ERROR_SLOT_SKIPPED as SVM_SLOT_SKIPPED, SOLANA_ERROR__JSON_RPC__SERVER_ERROR_LONG_TERM_STORAGE_SLOT_SKIPPED as SVM_LONG_TERM_STORAGE_SLOT_SKIPPED, SOLANA_ERROR__JSON_RPC__SERVER_ERROR_SEND_TRANSACTION_PREFLIGHT_FAILURE as SVM_TRANSACTION_PREFLIGHT_FAILURE, } from "@solana/kit";
6
+ /**
7
+ * Type definition for SolanaError structure.
8
+ * Includes common context properties for better type inference.
9
+ */
10
+ export interface SolanaErrorLike {
11
+ name: string;
12
+ context: {
13
+ __code: number;
14
+ __serverMessage?: string;
15
+ statusCode?: number;
16
+ [key: string]: unknown;
17
+ };
18
+ cause?: unknown;
19
+ }
20
+ /**
21
+ * Enhanced type guard to check if an error is a SolanaError.
22
+ *
23
+ * This function uses a two-tier approach:
24
+ * 1. First attempts the official instanceof-based check from @solana/kit
25
+ * 2. Falls back to structural validation using superstruct for errors that have been
26
+ * serialized/deserialized (e.g., when crossing async boundaries or through JSON parsing)
27
+ *
28
+ * @param error The error to check
29
+ * @param code Optional error code to match against context.__code
30
+ * @returns True if the error is a SolanaError (or has valid SolanaError structure)
31
+ */
32
+ export declare function isSolanaError(error: unknown): error is SolanaErrorLike;
6
33
  //# sourceMappingURL=provider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../../src/arch/svm/provider.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EACL,aAAa,EACb,wDAAwD,IAAI,uBAAuB,EACnF,iDAAiD,IAAI,gBAAgB,EACrE,mEAAmE,IAAI,kCAAkC,EACzG,uEAAuE,IAAI,iCAAiC,GAC7G,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../../src/arch/svm/provider.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,OAAO,EACL,wDAAwD,IAAI,uBAAuB,EACnF,iDAAiD,IAAI,gBAAgB,EACrE,mEAAmE,IAAI,kCAAkC,EACzG,uEAAuE,IAAI,iCAAiC,GAC7G,MAAM,aAAa,CAAC;AAcrB;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;IACF,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,eAAe,CAEtE"}
@@ -5,7 +5,6 @@ import { RelayData, RelayDataWithMessageHash } from "../../interfaces";
5
5
  import { BigNumber, Address as SdkAddress } from "../../utils";
6
6
  import { AttestedCCTPMessage, EventName, SVMProvider, LatestBlockhash } from "./types";
7
7
  import winston from "winston";
8
- export { isSolanaError } from "@solana/kit";
9
8
  /**
10
9
  * Basic void TransactionSigner type
11
10
  */
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/arch/svm/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/arch/svm/utils.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
+ import { Logger } from "winston";
1
2
  import { RpcFromTransport, RpcTransport, SolanaRpcApiFromTransport } from "@solana/kit";
2
3
  import { CachedSolanaRpcFactory } from "./cachedRpcFactory";
3
4
  import { SolanaBaseRpcFactory } from "./baseRpcFactories";
4
- import { Logger } from "winston";
5
5
  export declare class QuorumFallbackSolanaRpcFactory extends SolanaBaseRpcFactory {
6
6
  readonly nodeQuorumThreshold: number;
7
7
  readonly logger: Logger;
@@ -1 +1 @@
1
- {"version":3,"file":"quorumFallbackRpcFactory.d.ts","sourceRoot":"","sources":["../../../../src/providers/solana/quorumFallbackRpcFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAe,YAAY,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AACrG,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAA2B,MAAM,oBAAoB,CAAC;AAGnF,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAKjC,qBAAa,8BAA+B,SAAQ,oBAAoB;IASpE,QAAQ,CAAC,mBAAmB,EAAE,MAAM;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM;IATzB,QAAQ,CAAC,YAAY,EAAE;QACrB,SAAS,EAAE,YAAY,CAAC;QACxB,SAAS,EAAE,gBAAgB,CAAC,yBAAyB,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC,CAAC;QACnF,UAAU,EAAE,sBAAsB,CAAC;KACpC,EAAE,CAAM;gBAGP,wBAAwB,EAAE,qBAAqB,CAAC,OAAO,sBAAsB,CAAC,EAAE,EACvE,mBAAmB,EAAE,MAAM,EAC3B,MAAM,EAAE,MAAM;IAkBlB,eAAe,IAAI,YAAY;IAiMtC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,MAAM;CAY5D"}
1
+ {"version":3,"file":"quorumFallbackRpcFactory.d.ts","sourceRoot":"","sources":["../../../../src/providers/solana/quorumFallbackRpcFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAe,YAAY,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAGrG,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAA2B,MAAM,oBAAoB,CAAC;AAMnF,qBAAa,8BAA+B,SAAQ,oBAAoB;IASpE,QAAQ,CAAC,mBAAmB,EAAE,MAAM;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM;IATzB,QAAQ,CAAC,YAAY,EAAE;QACrB,SAAS,EAAE,YAAY,CAAC;QACxB,SAAS,EAAE,gBAAgB,CAAC,yBAAyB,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC,CAAC;QACnF,UAAU,EAAE,sBAAsB,CAAC;KACpC,EAAE,CAAM;gBAGP,wBAAwB,EAAE,qBAAqB,CAAC,OAAO,sBAAsB,CAAC,EAAE,EACvE,mBAAmB,EAAE,MAAM,EAC3B,MAAM,EAAE,MAAM;IAkBlB,eAAe,IAAI,YAAY;IAsMtC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,MAAM;CAY5D"}
@@ -1,7 +1,7 @@
1
+ import { Logger } from "winston";
1
2
  import { RpcTransport } from "@solana/kit";
2
3
  import { SolanaClusterRpcFactory } from "./baseRpcFactories";
3
4
  import { RateLimitedSolanaRpcFactory } from "./rateLimitedRpcFactory";
4
- import { Logger } from "winston";
5
5
  export declare class RetrySolanaRpcFactory extends SolanaClusterRpcFactory {
6
6
  readonly retries: number;
7
7
  readonly retryDelaySeconds: number;
@@ -16,13 +16,6 @@ export declare class RetrySolanaRpcFactory extends SolanaClusterRpcFactory {
16
16
  * @returns Promise that resolves to the transport response
17
17
  */
18
18
  private _tryCall;
19
- /**
20
- * Determine whether a Solana RPC error indicates an unrecoverable error that should not be retried.
21
- * @param method RPC method name
22
- * @param error Error object from the RPC call
23
- * @returns True if the request should be aborted immediately, otherwise false
24
- */
25
- private shouldFailImmediate;
26
19
  /**
27
20
  * Identify whether an error thrown was the result of an RPC provider 429 response.
28
21
  * @param error Error object from the RPC query.
@@ -1 +1 @@
1
- {"version":3,"file":"retryRpcFactory.d.ts","sourceRoot":"","sources":["../../../../src/providers/solana/retryRpcFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAA2C,MAAM,aAAa,CAAC;AAEpF,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AAGtE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAIjC,qBAAa,qBAAsB,SAAQ,uBAAuB;IAO9D,QAAQ,CAAC,OAAO,EAAE,MAAM;IACxB,QAAQ,CAAC,iBAAiB,EAAE,MAAM;IANpC,SAAS,CAAC,oBAAoB,EAAE,YAAY,CAAC;IAE7C,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;gBAGd,OAAO,EAAE,MAAM,EACf,iBAAiB,EAAE,MAAM,EAClC,GAAG,4BAA4B,EAAE,qBAAqB,CAAC,OAAO,2BAA2B,CAAC;IAuBrF,eAAe,IAAI,YAAY;IAMtC;;;;;OAKG;YACW,QAAQ;IA8BtB;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAiB3B;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;CAQ5B"}
1
+ {"version":3,"file":"retryRpcFactory.d.ts","sourceRoot":"","sources":["../../../../src/providers/solana/retryRpcFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,YAAY,EAA2C,MAAM,aAAa,CAAC;AAIpF,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AAKtE,qBAAa,qBAAsB,SAAQ,uBAAuB;IAO9D,QAAQ,CAAC,OAAO,EAAE,MAAM;IACxB,QAAQ,CAAC,iBAAiB,EAAE,MAAM;IANpC,SAAS,CAAC,oBAAoB,EAAE,YAAY,CAAC;IAE7C,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;gBAGd,OAAO,EAAE,MAAM,EACf,iBAAiB,EAAE,MAAM,EAClC,GAAG,4BAA4B,EAAE,qBAAqB,CAAC,OAAO,2BAA2B,CAAC;IAuBrF,eAAe,IAAI,YAAY;IAMtC;;;;;OAKG;YACW,QAAQ;IA8BtB;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;CAQ5B"}
@@ -7,4 +7,11 @@ export interface SolanaRateLimitTask {
7
7
  resolve: (result: unknown) => void;
8
8
  reject: (err: unknown) => void;
9
9
  }
10
+ /**
11
+ * Determine whether a Solana RPC error indicates an unrecoverable error that should not be retried.
12
+ * @param method RPC method name.
13
+ * @param error Error object from the RPC call.
14
+ * @returns True if the request should be aborted immediately, otherwise false.
15
+ */
16
+ export declare function shouldFailImmediate(method: string, error: unknown): boolean;
10
17
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/providers/solana/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAElC,OAAO,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;IAIlC,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,MAAM,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;CAChC"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/providers/solana/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGhD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAElC,OAAO,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;IAIlC,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,MAAM,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;CAChC;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAe3E"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@across-protocol/sdk",
3
3
  "author": "UMA Team",
4
- "version": "4.3.72",
4
+ "version": "4.3.74",
5
5
  "license": "AGPL-3.0",
6
6
  "homepage": "https://docs.across.to/reference/sdk",
7
7
  "files": [
@@ -333,7 +333,14 @@ export async function findFillEvent(
333
333
  ),
334
334
  ])
335
335
  ).flat();
336
- if (query.length === 0) throw new Error(`Failed to find fill event at block ${blockNumber}`);
336
+ if (query.length === 0) {
337
+ const { chainId: destinationChainId } = await spokePool.provider.getNetwork();
338
+ const [origin, destination] = [relayData.originChainId, destinationChainId].map(getNetworkName);
339
+ throw new Error(
340
+ `Failed to find fill event on destination chain ${destination} at block ${blockNumber}, for deposit ${relayData.depositId} on origin chain ${origin}`
341
+ );
342
+ }
343
+
337
344
  const event = query[0];
338
345
  // In production the chainId returned from the provider matches 1:1 with the actual chainId. Querying the provider
339
346
  // object saves an RPC query because the chainId is cached by StaticJsonRpcProvider instances. In hre, the SpokePool
@@ -176,7 +176,7 @@ async function _callGetTimestampForSlotWithRetry(
176
176
  const at = "getTimestampForSlot";
177
177
  const { __code: code } = err.context;
178
178
 
179
- switch (err.context.__code) {
179
+ switch (code) {
180
180
  case SVM_SLOT_SKIPPED:
181
181
  case SVM_LONG_TERM_STORAGE_SLOT_SKIPPED:
182
182
  // No block available for this slot; caller must decide on how to handle this.
@@ -1,11 +1,56 @@
1
+ import { isSolanaError as _isSolanaError } from "@solana/kit";
2
+ import { is, type, number, string } from "superstruct";
3
+
1
4
  /**
2
5
  * SVM RPC provider error codes
3
6
  * See https://www.quicknode.com/docs/solana/error-references
4
7
  */
5
8
  export {
6
- isSolanaError,
7
9
  SOLANA_ERROR__JSON_RPC__SERVER_ERROR_BLOCK_NOT_AVAILABLE as SVM_BLOCK_NOT_AVAILABLE,
8
10
  SOLANA_ERROR__JSON_RPC__SERVER_ERROR_SLOT_SKIPPED as SVM_SLOT_SKIPPED,
9
11
  SOLANA_ERROR__JSON_RPC__SERVER_ERROR_LONG_TERM_STORAGE_SLOT_SKIPPED as SVM_LONG_TERM_STORAGE_SLOT_SKIPPED,
10
12
  SOLANA_ERROR__JSON_RPC__SERVER_ERROR_SEND_TRANSACTION_PREFLIGHT_FAILURE as SVM_TRANSACTION_PREFLIGHT_FAILURE,
11
13
  } from "@solana/kit";
14
+
15
+ /**
16
+ * Superstruct schema for validating SolanaError structure.
17
+ * Handles serialized errors that have lost their prototype chain.
18
+ * Uses partial validation to allow additional properties in the context object.
19
+ */
20
+ const SolanaErrorStruct = type({
21
+ name: string(),
22
+ context: type({
23
+ __code: number(),
24
+ }),
25
+ });
26
+
27
+ /**
28
+ * Type definition for SolanaError structure.
29
+ * Includes common context properties for better type inference.
30
+ */
31
+ export interface SolanaErrorLike {
32
+ name: string;
33
+ context: {
34
+ __code: number;
35
+ __serverMessage?: string;
36
+ statusCode?: number;
37
+ [key: string]: unknown;
38
+ };
39
+ cause?: unknown;
40
+ }
41
+
42
+ /**
43
+ * Enhanced type guard to check if an error is a SolanaError.
44
+ *
45
+ * This function uses a two-tier approach:
46
+ * 1. First attempts the official instanceof-based check from @solana/kit
47
+ * 2. Falls back to structural validation using superstruct for errors that have been
48
+ * serialized/deserialized (e.g., when crossing async boundaries or through JSON parsing)
49
+ *
50
+ * @param error The error to check
51
+ * @param code Optional error code to match against context.__code
52
+ * @returns True if the error is a SolanaError (or has valid SolanaError structure)
53
+ */
54
+ export function isSolanaError(error: unknown): error is SolanaErrorLike {
55
+ return _isSolanaError(error) || is(error, SolanaErrorStruct);
56
+ }
@@ -28,9 +28,6 @@ import { BigNumber, Address as SdkAddress, biMin, getMessageHash, isDefined, isU
28
28
  import { getTimestampForSlot, getSlot, getRelayDataHash } from "./SpokeUtils";
29
29
  import { AttestedCCTPMessage, EventName, SVMEventNames, SVMProvider, LatestBlockhash } from "./types";
30
30
  import winston from "winston";
31
-
32
- export { isSolanaError } from "@solana/kit";
33
-
34
31
  /**
35
32
  * Basic void TransactionSigner type
36
33
  */
@@ -1,9 +1,10 @@
1
+ import { Logger } from "winston";
1
2
  import { RpcFromTransport, RpcResponse, RpcTransport, SolanaRpcApiFromTransport } from "@solana/kit";
2
- import { CachedSolanaRpcFactory } from "./cachedRpcFactory";
3
- import { SolanaBaseRpcFactory, SolanaClusterRpcFactory } from "./baseRpcFactories";
4
3
  import { isPromiseFulfilled, isPromiseRejected } from "../../utils/TypeGuards";
5
4
  import { compareSvmRpcResults, createSendErrorWithMessage } from "../utils";
6
- import { Logger } from "winston";
5
+ import { CachedSolanaRpcFactory } from "./cachedRpcFactory";
6
+ import { SolanaBaseRpcFactory, SolanaClusterRpcFactory } from "./baseRpcFactories";
7
+ import { shouldFailImmediate } from "./utils";
7
8
 
8
9
  // This factory stores multiple Cached RPC factories so that users of this factory can specify multiple RPC providers
9
10
  // and the factory will fallback through them if any RPC calls fail. This factory also implements quorum logic amongst
@@ -64,13 +65,18 @@ export class QuorumFallbackSolanaRpcFactory extends SolanaBaseRpcFactory {
64
65
  throw error;
65
66
  }
66
67
 
68
+ // If one RPC provider reverted, others likely will too. Skip them.
69
+ if (quorumThreshold === 1 && shouldFailImmediate(method, error)) {
70
+ throw error;
71
+ }
72
+
67
73
  const currentFactory = factory.rpcFactory.clusterUrl;
68
74
  const nextFactory = fallbackFactories.shift()!;
69
75
  this.logger.debug({
70
76
  at: "FallbackSolanaRpcFactory#createTransport::tryWithFallback",
71
77
  message: `[${method}] ${currentFactory} failed, falling back to ${nextFactory.rpcFactory.clusterUrl}, new fallback providers length: ${fallbackFactories.length}`,
72
78
  method,
73
- error,
79
+ jsonError: error,
74
80
  });
75
81
  return tryWithFallback(nextFactory, ...args);
76
82
  });
@@ -1,10 +1,11 @@
1
+ import { Logger } from "winston";
1
2
  import { RpcTransport, SOLANA_ERROR__RPC__TRANSPORT_HTTP_ERROR } from "@solana/kit";
2
3
  import { getThrowSolanaErrorResponseTransformer } from "@solana/rpc-transformers";
4
+ import { isSolanaError } from "../../arch/svm";
5
+ import { delay } from "../../utils";
3
6
  import { SolanaClusterRpcFactory } from "./baseRpcFactories";
4
7
  import { RateLimitedSolanaRpcFactory } from "./rateLimitedRpcFactory";
5
- import { isSolanaError, SVM_SLOT_SKIPPED, SVM_LONG_TERM_STORAGE_SLOT_SKIPPED } from "../../arch/svm";
6
- import { delay } from "../../utils";
7
- import { Logger } from "winston";
8
+ import { shouldFailImmediate } from "./utils";
8
9
 
9
10
  // This factory adds retry logic on top of the RateLimitedSolanaRpcFactory.
10
11
  // It follows the same composition pattern as other factories in this module.
@@ -67,7 +68,7 @@ export class RetrySolanaRpcFactory extends SolanaClusterRpcFactory {
67
68
  getThrowSolanaErrorResponseTransformer()(response, { methodName: method, params });
68
69
  return response;
69
70
  } catch (error) {
70
- if (retryAttempt++ >= this.retries || this.shouldFailImmediate(method, error)) {
71
+ if (retryAttempt++ >= this.retries || shouldFailImmediate(method, error)) {
71
72
  throw error;
72
73
  }
73
74
 
@@ -82,29 +83,6 @@ export class RetrySolanaRpcFactory extends SolanaClusterRpcFactory {
82
83
  }
83
84
  }
84
85
 
85
- /**
86
- * Determine whether a Solana RPC error indicates an unrecoverable error that should not be retried.
87
- * @param method RPC method name
88
- * @param error Error object from the RPC call
89
- * @returns True if the request should be aborted immediately, otherwise false
90
- */
91
- private shouldFailImmediate(method: string, error: unknown): boolean {
92
- if (!isSolanaError(error)) {
93
- return false;
94
- }
95
-
96
- // JSON-RPC errors: https://www.quicknode.com/docs/solana/error-references
97
- const { __code: code } = error.context;
98
- switch (method) {
99
- case "getBlock":
100
- case "getBlockTime":
101
- // No block at the requested slot. This may not be correct for blocks > 1 year old.
102
- return [SVM_SLOT_SKIPPED, SVM_LONG_TERM_STORAGE_SLOT_SKIPPED].includes(code);
103
- default:
104
- return false;
105
- }
106
- }
107
-
108
86
  /**
109
87
  * Identify whether an error thrown was the result of an RPC provider 429 response.
110
88
  * @param error Error object from the RPC query.
@@ -1,4 +1,5 @@
1
1
  import { RpcTransport } from "@solana/rpc-spec";
2
+ import { isSolanaError, SVM_SLOT_SKIPPED, SVM_LONG_TERM_STORAGE_SLOT_SKIPPED } from "../../arch/svm";
2
3
 
3
4
  /**
4
5
  * This is the type we pass to define a Solana RPC request "task".
@@ -12,3 +13,26 @@ export interface SolanaRateLimitTask {
12
13
  resolve: (result: unknown) => void;
13
14
  reject: (err: unknown) => void;
14
15
  }
16
+
17
+ /**
18
+ * Determine whether a Solana RPC error indicates an unrecoverable error that should not be retried.
19
+ * @param method RPC method name.
20
+ * @param error Error object from the RPC call.
21
+ * @returns True if the request should be aborted immediately, otherwise false.
22
+ */
23
+ export function shouldFailImmediate(method: string, error: unknown): boolean {
24
+ if (!isSolanaError(error)) {
25
+ return false;
26
+ }
27
+
28
+ // JSON-RPC errors: https://www.quicknode.com/docs/solana/error-references
29
+ const { __code: code } = error.context;
30
+ switch (method) {
31
+ case "getBlock":
32
+ case "getBlockTime":
33
+ // No block at the requested slot. This may not be correct for blocks > 1 year old.
34
+ return [SVM_SLOT_SKIPPED, SVM_LONG_TERM_STORAGE_SLOT_SKIPPED].includes(code);
35
+ default:
36
+ return false;
37
+ }
38
+ }