viem 2.48.11 → 2.49.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 (85) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/_cjs/actions/public/call.js +26 -6
  3. package/_cjs/actions/public/call.js.map +1 -1
  4. package/_cjs/clients/transports/http.js +19 -2
  5. package/_cjs/clients/transports/http.js.map +1 -1
  6. package/_cjs/errors/utils.js +17 -0
  7. package/_cjs/errors/utils.js.map +1 -1
  8. package/_cjs/errors/version.js +1 -1
  9. package/_cjs/errors/version.js.map +1 -1
  10. package/_cjs/index.js.map +1 -1
  11. package/_cjs/tempo/actions/wallet.js.map +1 -1
  12. package/_cjs/utils/buildRequest.js +12 -2
  13. package/_cjs/utils/buildRequest.js.map +1 -1
  14. package/_cjs/utils/ccip.js +17 -4
  15. package/_cjs/utils/ccip.js.map +1 -1
  16. package/_cjs/utils/promise/withRetry.js +23 -3
  17. package/_cjs/utils/promise/withRetry.js.map +1 -1
  18. package/_cjs/utils/promise/withTimeout.js +5 -2
  19. package/_cjs/utils/promise/withTimeout.js.map +1 -1
  20. package/_cjs/utils/rpc/http.js +5 -0
  21. package/_cjs/utils/rpc/http.js.map +1 -1
  22. package/_cjs/utils/wait.js +19 -2
  23. package/_cjs/utils/wait.js.map +1 -1
  24. package/_esm/actions/public/call.js +26 -6
  25. package/_esm/actions/public/call.js.map +1 -1
  26. package/_esm/clients/transports/http.js +19 -2
  27. package/_esm/clients/transports/http.js.map +1 -1
  28. package/_esm/errors/utils.js +15 -0
  29. package/_esm/errors/utils.js.map +1 -1
  30. package/_esm/errors/version.js +1 -1
  31. package/_esm/errors/version.js.map +1 -1
  32. package/_esm/index.js.map +1 -1
  33. package/_esm/tempo/actions/wallet.js +1 -1
  34. package/_esm/tempo/actions/wallet.js.map +1 -1
  35. package/_esm/utils/buildRequest.js +12 -2
  36. package/_esm/utils/buildRequest.js.map +1 -1
  37. package/_esm/utils/ccip.js +17 -4
  38. package/_esm/utils/ccip.js.map +1 -1
  39. package/_esm/utils/promise/withRetry.js +23 -3
  40. package/_esm/utils/promise/withRetry.js.map +1 -1
  41. package/_esm/utils/promise/withTimeout.js +5 -2
  42. package/_esm/utils/promise/withTimeout.js.map +1 -1
  43. package/_esm/utils/rpc/http.js +5 -0
  44. package/_esm/utils/rpc/http.js.map +1 -1
  45. package/_esm/utils/wait.js +19 -2
  46. package/_esm/utils/wait.js.map +1 -1
  47. package/_types/actions/public/call.d.ts +4 -1
  48. package/_types/actions/public/call.d.ts.map +1 -1
  49. package/_types/clients/transports/http.d.ts.map +1 -1
  50. package/_types/errors/utils.d.ts +3 -0
  51. package/_types/errors/utils.d.ts.map +1 -1
  52. package/_types/errors/version.d.ts +1 -1
  53. package/_types/errors/version.d.ts.map +1 -1
  54. package/_types/index.d.ts +1 -1
  55. package/_types/index.d.ts.map +1 -1
  56. package/_types/tempo/actions/wallet.d.ts +15 -5
  57. package/_types/tempo/actions/wallet.d.ts.map +1 -1
  58. package/_types/types/eip1193.d.ts +2 -0
  59. package/_types/types/eip1193.d.ts.map +1 -1
  60. package/_types/utils/buildRequest.d.ts +5 -3
  61. package/_types/utils/buildRequest.d.ts.map +1 -1
  62. package/_types/utils/ccip.d.ts +5 -3
  63. package/_types/utils/ccip.d.ts.map +1 -1
  64. package/_types/utils/promise/withRetry.d.ts +3 -2
  65. package/_types/utils/promise/withRetry.d.ts.map +1 -1
  66. package/_types/utils/promise/withTimeout.d.ts +1 -1
  67. package/_types/utils/promise/withTimeout.d.ts.map +1 -1
  68. package/_types/utils/rpc/http.d.ts +1 -1
  69. package/_types/utils/rpc/http.d.ts.map +1 -1
  70. package/_types/utils/wait.d.ts +3 -1
  71. package/_types/utils/wait.d.ts.map +1 -1
  72. package/actions/public/call.ts +59 -23
  73. package/clients/transports/http.ts +18 -2
  74. package/errors/utils.ts +19 -0
  75. package/errors/version.ts +1 -1
  76. package/index.ts +1 -0
  77. package/package.json +1 -1
  78. package/tempo/actions/wallet.ts +15 -5
  79. package/types/eip1193.ts +2 -0
  80. package/utils/buildRequest.ts +22 -6
  81. package/utils/ccip.ts +22 -4
  82. package/utils/promise/withRetry.ts +29 -2
  83. package/utils/promise/withTimeout.ts +6 -3
  84. package/utils/rpc/http.ts +7 -1
  85. package/utils/wait.ts +24 -2
@@ -1 +1 @@
1
- {"version":3,"file":"buildRequest.d.ts","sourceRoot":"","sources":["../../utils/buildRequest.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,yBAAyB,EAC/B,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAEL,KAAK,8BAA8B,EAEnC,KAAK,yCAAyC,EAE9C,KAAK,uBAAuB,EAE5B,KAAK,0BAA0B,EAE/B,KAAK,oBAAoB,EAEzB,KAAK,oBAAoB,EAEzB,KAAK,wBAAwB,EAE7B,KAAK,yBAAyB,EAE9B,KAAK,0BAA0B,EAE/B,KAAK,kCAAkC,EAEvC,KAAK,yBAAyB,EAE9B,KAAK,0BAA0B,EAE/B,KAAK,8BAA8B,EAEnC,KAAK,iBAAiB,EAEtB,KAAK,6BAA6B,EAGlC,KAAK,4BAA4B,EAEjC,KAAK,+BAA+B,EAGpC,KAAK,YAAY,EAEjB,KAAK,oBAAoB,EAEzB,KAAK,+BAA+B,EAEpC,KAAK,6BAA6B,EAElC,KAAK,wBAAwB,EAE7B,KAAK,mBAAmB,EAExB,KAAK,2BAA2B,EAEhC,KAAK,yCAAyC,EAE9C,KAAK,kCAAkC,EAEvC,KAAK,4BAA4B,EAEjC,KAAK,uCAAuC,EAC7C,MAAM,kBAAkB,CAAA;AACzB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AACnD,OAAO,KAAK,EACV,gBAAgB,EAChB,qBAAqB,EACtB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,mCAAmC,CAAA;AAEtF,OAAO,EAAE,KAAK,kBAAkB,EAAa,MAAM,wBAAwB,CAAA;AAC3E,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAA;AAGlE,MAAM,MAAM,gBAAgB,GACxB,8BAA8B,GAC9B,yCAAyC,GACzC,uBAAuB,GACvB,0BAA0B,GAC1B,6BAA6B,GAC7B,oBAAoB,GACpB,oBAAoB,GACpB,oBAAoB,GACpB,wBAAwB,GACxB,yBAAyB,GACzB,0BAA0B,GAC1B,2BAA2B,GAC3B,kCAAkC,GAClC,yBAAyB,GACzB,0BAA0B,GAC1B,8BAA8B,GAC9B,iBAAiB,GACjB,6BAA6B,GAC7B,4BAA4B,GAC5B,+BAA+B,GAC/B,YAAY,GACZ,mBAAmB,GACnB,oBAAoB,GACpB,gBAAgB,GAChB,+BAA+B,GAC/B,6BAA6B,GAC7B,wBAAwB,GACxB,mBAAmB,GACnB,2BAA2B,GAC3B,yCAAyC,GACzC,kCAAkC,GAClC,4BAA4B,GAC5B,uCAAuC,GACvC,yBAAyB,GACzB,kBAAkB,GAClB,SAAS,CAAA;AAEb,wBAAgB,YAAY,CAAC,OAAO,SAAS,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,EACtE,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,qBAA0B,GAClC,gBAAgB,CAwJlB;AAED,gBAAgB;AAChB,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,WA+BvC"}
1
+ {"version":3,"file":"buildRequest.d.ts","sourceRoot":"","sources":["../../utils/buildRequest.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,yBAAyB,EAC/B,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAEL,KAAK,8BAA8B,EAEnC,KAAK,yCAAyC,EAE9C,KAAK,uBAAuB,EAE5B,KAAK,0BAA0B,EAE/B,KAAK,oBAAoB,EAEzB,KAAK,oBAAoB,EAEzB,KAAK,wBAAwB,EAE7B,KAAK,yBAAyB,EAE9B,KAAK,0BAA0B,EAE/B,KAAK,kCAAkC,EAEvC,KAAK,yBAAyB,EAE9B,KAAK,0BAA0B,EAE/B,KAAK,8BAA8B,EAEnC,KAAK,iBAAiB,EAEtB,KAAK,6BAA6B,EAGlC,KAAK,4BAA4B,EAEjC,KAAK,+BAA+B,EAGpC,KAAK,YAAY,EAEjB,KAAK,oBAAoB,EAEzB,KAAK,+BAA+B,EAEpC,KAAK,6BAA6B,EAElC,KAAK,wBAAwB,EAE7B,KAAK,mBAAmB,EAExB,KAAK,2BAA2B,EAEhC,KAAK,yCAAyC,EAE9C,KAAK,kCAAkC,EAEvC,KAAK,4BAA4B,EAEjC,KAAK,uCAAuC,EAC7C,MAAM,kBAAkB,CAAA;AACzB,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,SAAS,EAGf,MAAM,oBAAoB,CAAA;AAC3B,OAAO,KAAK,EACV,gBAAgB,EAChB,qBAAqB,EACtB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,mCAAmC,CAAA;AAEtF,OAAO,EAAE,KAAK,kBAAkB,EAAa,MAAM,wBAAwB,CAAA;AAC3E,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAA;AAGlE,MAAM,MAAM,gBAAgB,GACxB,8BAA8B,GAC9B,yCAAyC,GACzC,uBAAuB,GACvB,0BAA0B,GAC1B,6BAA6B,GAC7B,oBAAoB,GACpB,oBAAoB,GACpB,oBAAoB,GACpB,wBAAwB,GACxB,yBAAyB,GACzB,0BAA0B,GAC1B,2BAA2B,GAC3B,kCAAkC,GAClC,yBAAyB,GACzB,0BAA0B,GAC1B,8BAA8B,GAC9B,iBAAiB,GACjB,6BAA6B,GAC7B,4BAA4B,GAC5B,+BAA+B,GAC/B,YAAY,GACZ,mBAAmB,GACnB,oBAAoB,GACpB,gBAAgB,GAChB,+BAA+B,GAC/B,6BAA6B,GAC7B,wBAAwB,GACxB,mBAAmB,GACnB,2BAA2B,GAC3B,yCAAyC,GACzC,kCAAkC,GAClC,4BAA4B,GAC5B,uCAAuC,GACvC,yBAAyB,GACzB,kBAAkB,GAClB,cAAc,GACd,SAAS,CAAA;AAEb,wBAAgB,YAAY,CAC1B,OAAO,SAAS,CACd,IAAI,EAAE,GAAG,EACT,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAA;CAAE,GAAG,SAAS,KACvD,OAAO,CAAC,GAAG,CAAC,EACjB,OAAO,EAAE,OAAO,EAAE,OAAO,GAAE,qBAA0B,GAAG,gBAAgB,CA+JzE;AAED,gBAAgB;AAChB,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,WAgCvC"}
@@ -4,8 +4,9 @@ import type { Client } from '../clients/createClient.js';
4
4
  import type { Transport } from '../clients/transports/createTransport.js';
5
5
  import { type OffchainLookupErrorType as OffchainLookupErrorType_, type OffchainLookupResponseMalformedErrorType } from '../errors/ccip.js';
6
6
  import { type HttpRequestErrorType } from '../errors/request.js';
7
- import type { ErrorType } from '../errors/utils.js';
7
+ import { type ErrorType } from '../errors/utils.js';
8
8
  import type { Chain } from '../types/chain.js';
9
+ import type { EIP1193RequestOptions } from '../types/eip1193.js';
9
10
  import type { Hex } from '../types/misc.js';
10
11
  export declare const offchainLookupSignature = "0x556f1830";
11
12
  export declare const offchainLookupAbiItem: {
@@ -29,16 +30,17 @@ export declare const offchainLookupAbiItem: {
29
30
  }];
30
31
  };
31
32
  export type OffchainLookupErrorType = OffchainLookupErrorType_ | ErrorType;
32
- export declare function offchainLookup<chain extends Chain | undefined>(client: Client<Transport, chain>, { blockNumber, blockTag, data, to, }: Pick<CallParameters, 'blockNumber' | 'blockTag'> & {
33
+ export declare function offchainLookup<chain extends Chain | undefined>(client: Client<Transport, chain>, { blockNumber, blockTag, data, requestOptions, to, }: Pick<CallParameters, 'blockNumber' | 'blockTag' | 'requestOptions'> & {
33
34
  data: Hex;
34
35
  to: Address;
35
36
  }): Promise<Hex>;
36
37
  export type CcipRequestParameters = {
37
38
  data: Hex;
39
+ requestOptions?: EIP1193RequestOptions | undefined;
38
40
  sender: Address;
39
41
  urls: readonly string[];
40
42
  };
41
43
  export type CcipRequestReturnType = Hex;
42
44
  export type CcipRequestErrorType = HttpRequestErrorType | OffchainLookupResponseMalformedErrorType | ErrorType;
43
- export declare function ccipRequest({ data, sender, urls, }: CcipRequestParameters): Promise<CcipRequestReturnType>;
45
+ export declare function ccipRequest({ data, requestOptions, sender, urls, }: CcipRequestParameters): Promise<CcipRequestReturnType>;
44
46
  //# sourceMappingURL=ccip.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ccip.d.ts","sourceRoot":"","sources":["../../utils/ccip.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAO,OAAO,EAAE,MAAM,SAAS,CAAA;AAE3C,OAAO,EAAE,KAAK,cAAc,EAAQ,MAAM,2BAA2B,CAAA;AACrE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0CAA0C,CAAA;AAEzE,OAAO,EAEL,KAAK,uBAAuB,IAAI,wBAAwB,EAExD,KAAK,wCAAwC,EAE9C,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,sBAAsB,CAAA;AAC7B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AACnD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAY3C,eAAO,MAAM,uBAAuB,eAAe,CAAA;AACnD,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;CAyBF,CAAA;AAEhC,MAAM,MAAM,uBAAuB,GAAG,wBAAwB,GAAG,SAAS,CAAA;AAE1E,wBAAsB,cAAc,CAAC,KAAK,SAAS,KAAK,GAAG,SAAS,EAClE,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,EAChC,EACE,WAAW,EACX,QAAQ,EACR,IAAI,EACJ,EAAE,GACH,EAAE,IAAI,CAAC,cAAc,EAAE,aAAa,GAAG,UAAU,CAAC,GAAG;IACpD,IAAI,EAAE,GAAG,CAAA;IACT,EAAE,EAAE,OAAO,CAAA;CACZ,GACA,OAAO,CAAC,GAAG,CAAC,CAgDd;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,GAAG,CAAA;IACT,MAAM,EAAE,OAAO,CAAA;IACf,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;CACxB,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG,GAAG,CAAA;AAEvC,MAAM,MAAM,oBAAoB,GAC5B,oBAAoB,GACpB,wCAAwC,GACxC,SAAS,CAAA;AAEb,wBAAsB,WAAW,CAAC,EAChC,IAAI,EACJ,MAAM,EACN,IAAI,GACL,EAAE,qBAAqB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CA6DxD"}
1
+ {"version":3,"file":"ccip.d.ts","sourceRoot":"","sources":["../../utils/ccip.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAO,OAAO,EAAE,MAAM,SAAS,CAAA;AAE3C,OAAO,EAAE,KAAK,cAAc,EAAQ,MAAM,2BAA2B,CAAA;AACrE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0CAA0C,CAAA;AAEzE,OAAO,EAEL,KAAK,uBAAuB,IAAI,wBAAwB,EAExD,KAAK,wCAAwC,EAE9C,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,KAAK,SAAS,EAA+B,MAAM,oBAAoB,CAAA;AAChF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAChE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAY3C,eAAO,MAAM,uBAAuB,eAAe,CAAA;AACnD,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;CAyBF,CAAA;AAEhC,MAAM,MAAM,uBAAuB,GAAG,wBAAwB,GAAG,SAAS,CAAA;AAE1E,wBAAsB,cAAc,CAAC,KAAK,SAAS,KAAK,GAAG,SAAS,EAClE,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,EAChC,EACE,WAAW,EACX,QAAQ,EACR,IAAI,EACJ,cAAc,EACd,EAAE,GACH,EAAE,IAAI,CAAC,cAAc,EAAE,aAAa,GAAG,UAAU,GAAG,gBAAgB,CAAC,GAAG;IACvE,IAAI,EAAE,GAAG,CAAA;IACT,EAAE,EAAE,OAAO,CAAA;CACZ,GACA,OAAO,CAAC,GAAG,CAAC,CAsDd;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,GAAG,CAAA;IACT,cAAc,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAA;IAClD,MAAM,EAAE,OAAO,CAAA;IACf,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;CACxB,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG,GAAG,CAAA;AAEvC,MAAM,MAAM,oBAAoB,GAC5B,oBAAoB,GACpB,wCAAwC,GACxC,SAAS,CAAA;AAEb,wBAAsB,WAAW,CAAC,EAChC,IAAI,EACJ,cAAc,EACd,MAAM,EACN,IAAI,GACL,EAAE,qBAAqB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAqExD"}
@@ -1,4 +1,4 @@
1
- import type { ErrorType } from '../../errors/utils.js';
1
+ import { type ErrorType } from '../../errors/utils.js';
2
2
  export type WithRetryParameters = {
3
3
  delay?: ((config: {
4
4
  count: number;
@@ -9,7 +9,8 @@ export type WithRetryParameters = {
9
9
  count: number;
10
10
  error: Error;
11
11
  }) => Promise<boolean> | boolean) | undefined;
12
+ signal?: AbortSignal | undefined;
12
13
  };
13
14
  export type WithRetryErrorType = ErrorType;
14
- export declare function withRetry<data>(fn: () => Promise<data>, { delay: delay_, retryCount, shouldRetry, }?: WithRetryParameters): Promise<data>;
15
+ export declare function withRetry<data>(fn: () => Promise<data>, { delay: delay_, retryCount, shouldRetry, signal, }?: WithRetryParameters): Promise<data>;
15
16
  //# sourceMappingURL=withRetry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"withRetry.d.ts","sourceRoot":"","sources":["../../../utils/promise/withRetry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAGtD,MAAM,MAAM,mBAAmB,GAAG;IAEhC,KAAK,CAAC,EACF,CAAC,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,KAAK,CAAA;KAAE,KAAK,MAAM,CAAC,GACrD,MAAM,GACN,SAAS,CAAA;IAEb,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAE/B,WAAW,CAAC,EACR,CAAC,CAAC,EACA,KAAK,EACL,KAAK,GACN,EAAE;QACD,KAAK,EAAE,MAAM,CAAA;QACb,KAAK,EAAE,KAAK,CAAA;KACb,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,GACjC,SAAS,CAAA;CACd,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG,SAAS,CAAA;AAE1C,wBAAgB,SAAS,CAAC,IAAI,EAC5B,EAAE,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EACvB,EACE,KAAK,EAAE,MAAY,EACnB,UAAc,EACd,WAAwB,GACzB,GAAE,mBAAwB,iBAyB5B"}
1
+ {"version":3,"file":"withRetry.d.ts","sourceRoot":"","sources":["../../../utils/promise/withRetry.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,SAAS,EAGf,MAAM,uBAAuB,CAAA;AAG9B,MAAM,MAAM,mBAAmB,GAAG;IAEhC,KAAK,CAAC,EACF,CAAC,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,KAAK,CAAA;KAAE,KAAK,MAAM,CAAC,GACrD,MAAM,GACN,SAAS,CAAA;IAEb,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAE/B,WAAW,CAAC,EACR,CAAC,CAAC,EACA,KAAK,EACL,KAAK,GACN,EAAE;QACD,KAAK,EAAE,MAAM,CAAA;QACb,KAAK,EAAE,KAAK,CAAA;KACb,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,GACjC,SAAS,CAAA;IAEb,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAA;CACjC,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG,SAAS,CAAA;AAE1C,wBAAgB,SAAS,CAAC,IAAI,EAC5B,EAAE,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EACvB,EACE,KAAK,EAAE,MAAY,EACnB,UAAc,EACd,WAAwB,EACxB,MAAM,GACP,GAAE,mBAAwB,iBA6C5B"}
@@ -1,4 +1,4 @@
1
- import type { ErrorType } from '../../errors/utils.js';
1
+ import { type ErrorType } from '../../errors/utils.js';
2
2
  export type WithTimeoutErrorType = ErrorType;
3
3
  export declare function withTimeout<data>(fn: ({ signal, }: {
4
4
  signal: AbortController['signal'] | null;
@@ -1 +1 @@
1
- {"version":3,"file":"withTimeout.d.ts","sourceRoot":"","sources":["../../../utils/promise/withTimeout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAEtD,MAAM,MAAM,oBAAoB,GAAG,SAAS,CAAA;AAE5C,wBAAgB,WAAW,CAAC,IAAI,EAC9B,EAAE,EAAE,CAAC,EACH,MAAM,GACP,EAAE;IACD,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAA;CACzC,KAAK,OAAO,CAAC,IAAI,CAAC,EACnB,EACE,aAAsC,EACtC,OAAO,EACP,MAAM,GACP,EAAE;IAED,aAAa,CAAC,EAAE,KAAK,GAAG,SAAS,CAAA;IAEjC,OAAO,EAAE,MAAM,CAAA;IAEf,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAC7B,GACA,OAAO,CAAC,IAAI,CAAC,CAwBf"}
1
+ {"version":3,"file":"withTimeout.d.ts","sourceRoot":"","sources":["../../../utils/promise/withTimeout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAgB,MAAM,uBAAuB,CAAA;AAEpE,MAAM,MAAM,oBAAoB,GAAG,SAAS,CAAA;AAE5C,wBAAgB,WAAW,CAAC,IAAI,EAC9B,EAAE,EAAE,CAAC,EACH,MAAM,GACP,EAAE;IACD,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAA;CACzC,KAAK,OAAO,CAAC,IAAI,CAAC,EACnB,EACE,aAAsC,EACtC,OAAO,EACP,MAAM,GACP,EAAE;IAED,aAAa,CAAC,EAAE,KAAK,GAAG,SAAS,CAAA;IAEjC,OAAO,EAAE,MAAM,CAAA;IAEf,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAC7B,GACA,OAAO,CAAC,IAAI,CAAC,CA2Bf"}
@@ -1,5 +1,5 @@
1
1
  import { type HttpRequestErrorType as HttpRequestErrorType_, type TimeoutErrorType } from '../../errors/request.js';
2
- import type { ErrorType } from '../../errors/utils.js';
2
+ import { type ErrorType } from '../../errors/utils.js';
3
3
  import type { RpcRequest, RpcResponse } from '../../types/rpc.js';
4
4
  import type { MaybePromise } from '../../types/utils.js';
5
5
  import { type WithTimeoutErrorType } from '../promise/withTimeout.js';
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../utils/rpc/http.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../utils/rpc/http.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,4 @@
1
- export declare function wait(time: number): Promise<unknown>;
1
+ export declare function wait(time: number, { signal }?: {
2
+ signal?: AbortSignal | undefined;
3
+ }): Promise<void>;
2
4
  //# sourceMappingURL=wait.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"wait.d.ts","sourceRoot":"","sources":["../../utils/wait.ts"],"names":[],"mappings":"AAAA,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,oBAEtC"}
1
+ {"version":3,"file":"wait.d.ts","sourceRoot":"","sources":["../../utils/wait.ts"],"names":[],"mappings":"AAEA,wBAAsB,IAAI,CACxB,IAAI,EAAE,MAAM,EACZ,EAAE,MAAM,EAAE,GAAE;IAAE,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAA;CAAO,iBAoBtD"}
@@ -25,9 +25,14 @@ import {
25
25
  RawContractError,
26
26
  type RawContractErrorType,
27
27
  } from '../../errors/contract.js'
28
- import type { ErrorType } from '../../errors/utils.js'
28
+ import {
29
+ type ErrorType,
30
+ getAbortError,
31
+ isAbortError,
32
+ } from '../../errors/utils.js'
29
33
  import type { BlockTag } from '../../types/block.js'
30
34
  import type { Chain } from '../../types/chain.js'
35
+ import type { EIP1193RequestOptions } from '../../types/eip1193.js'
31
36
  import type { Hex } from '../../types/misc.js'
32
37
  import type { RpcTransactionRequest } from '../../types/rpc.js'
33
38
  import type { StateOverride } from '../../types/stateOverride.js'
@@ -93,6 +98,8 @@ export type CallParameters<
93
98
  factory?: Address | undefined
94
99
  /** Calldata to execute on the factory to deploy the contract. */
95
100
  factoryData?: Hex | undefined
101
+ /** Request options. */
102
+ requestOptions?: EIP1193RequestOptions | undefined
96
103
  /** State overrides for the call. */
97
104
  stateOverride?: StateOverride | undefined
98
105
  } & (
@@ -175,6 +182,7 @@ export async function call<chain extends Chain | undefined>(
175
182
  maxFeePerGas,
176
183
  maxPriorityFeePerGas,
177
184
  nonce,
185
+ requestOptions,
178
186
  to,
179
187
  value,
180
188
  stateOverride,
@@ -258,6 +266,7 @@ export async function call<chain extends Chain | undefined>(
258
266
  ...request,
259
267
  blockNumber,
260
268
  blockTag,
269
+ requestOptions,
261
270
  } as unknown as ScheduleMulticallParameters<chain>)
262
271
  } catch (err) {
263
272
  if (
@@ -280,13 +289,20 @@ export async function call<chain extends Chain | undefined>(
280
289
  return base
281
290
  })()
282
291
 
283
- const response = await client.request({
284
- method: 'eth_call',
285
- params,
286
- })
292
+ const response = await client.request(
293
+ {
294
+ method: 'eth_call',
295
+ params,
296
+ },
297
+ requestOptions,
298
+ )
287
299
  if (response === '0x') return { data: undefined }
288
300
  return { data: response }
289
301
  } catch (err) {
302
+ if (requestOptions?.signal?.aborted)
303
+ throw getAbortError(requestOptions.signal)
304
+ if (isAbortError(err)) throw err
305
+
290
306
  const data = getRevertErrorData(err)
291
307
 
292
308
  // Check for CCIP-Read offchain lookup signature.
@@ -298,7 +314,9 @@ export async function call<chain extends Chain | undefined>(
298
314
  data?.slice(0, 10) === offchainLookupSignature &&
299
315
  to
300
316
  )
301
- return { data: await offchainLookup(client, { data, to }) }
317
+ return {
318
+ data: await offchainLookup(client, { data, requestOptions, to }),
319
+ }
302
320
 
303
321
  // Check for counterfactual deployment error.
304
322
  if (deploylessCall && data?.slice(0, 10) === '0x101bb98d')
@@ -329,12 +347,26 @@ function shouldPerformMulticall({ request }: { request: TransactionRequest }) {
329
347
  return true
330
348
  }
331
349
 
350
+ let requestOptionsId = 0
351
+ const requestOptionsIds = new WeakMap<EIP1193RequestOptions, number>()
352
+ function getRequestOptionsId(
353
+ requestOptions: EIP1193RequestOptions | undefined,
354
+ ) {
355
+ if (!requestOptions) return 'default'
356
+ const id = requestOptionsIds.get(requestOptions)
357
+ if (id !== undefined) return id
358
+ const nextId = requestOptionsId++
359
+ requestOptionsIds.set(requestOptions, nextId)
360
+ return nextId
361
+ }
362
+
332
363
  type ScheduleMulticallParameters<chain extends Chain | undefined> = Pick<
333
364
  CallParameters<chain>,
334
365
  'blockNumber' | 'blockTag'
335
366
  > & {
336
367
  data: Hex
337
368
  multicallAddress?: Address | undefined
369
+ requestOptions?: EIP1193RequestOptions | undefined
338
370
  to: Address
339
371
  }
340
372
 
@@ -360,6 +392,7 @@ async function scheduleMulticall<chain extends Chain | undefined>(
360
392
  blockNumber,
361
393
  blockTag = client.experimental_blockTag ?? 'latest',
362
394
  data,
395
+ requestOptions,
363
396
  to,
364
397
  } = args
365
398
 
@@ -381,7 +414,7 @@ async function scheduleMulticall<chain extends Chain | undefined>(
381
414
  const block = blockNumberHex || blockTag
382
415
 
383
416
  const { schedule } = createBatchScheduler({
384
- id: `${client.uid}.${block}`,
417
+ id: `${client.uid}.${block}.${getRequestOptionsId(requestOptions)}`,
385
418
  wait,
386
419
  shouldSplitBatch(args) {
387
420
  const size = args.reduce((size, { data }) => size + (data.length - 2), 0)
@@ -405,22 +438,25 @@ async function scheduleMulticall<chain extends Chain | undefined>(
405
438
  functionName: 'aggregate3',
406
439
  })
407
440
 
408
- const data = await client.request({
409
- method: 'eth_call',
410
- params: [
411
- {
412
- ...(multicallAddress === null
413
- ? {
414
- data: toDeploylessCallViaBytecodeData({
415
- code: multicall3Bytecode,
416
- data: calldata,
417
- }),
418
- }
419
- : { to: multicallAddress, data: calldata }),
420
- },
421
- block,
422
- ],
423
- })
441
+ const data = await client.request(
442
+ {
443
+ method: 'eth_call',
444
+ params: [
445
+ {
446
+ ...(multicallAddress === null
447
+ ? {
448
+ data: toDeploylessCallViaBytecodeData({
449
+ code: multicall3Bytecode,
450
+ data: calldata,
451
+ }),
452
+ }
453
+ : { to: multicallAddress, data: calldata }),
454
+ },
455
+ block,
456
+ ],
457
+ },
458
+ requestOptions,
459
+ )
424
460
 
425
461
  return decodeFunctionResult({
426
462
  abi: multicall3Abi,
@@ -81,6 +81,17 @@ export type HttpTransportErrorType =
81
81
  | UrlRequiredErrorType
82
82
  | ErrorType
83
83
 
84
+ let signalId = 0
85
+ const signalIds = new WeakMap<AbortSignal, number>()
86
+ function getSignalId(signal: AbortSignal | undefined) {
87
+ if (!signal) return 'default'
88
+ const id = signalIds.get(signal)
89
+ if (id !== undefined) return id
90
+ const nextId = signalId++
91
+ signalIds.set(signal, nextId)
92
+ return nextId
93
+ }
94
+
84
95
  /**
85
96
  * @description Creates a HTTP transport that connects to a JSON-RPC API.
86
97
  */
@@ -125,11 +136,14 @@ export function http<
125
136
  key,
126
137
  methods,
127
138
  name,
128
- async request({ method, params }) {
139
+ async request({ method, params }, options) {
129
140
  const body = { method, params }
141
+ const fetchOptions = options?.signal
142
+ ? { signal: options.signal }
143
+ : undefined
130
144
 
131
145
  const { schedule } = createBatchScheduler({
132
- id: url_,
146
+ id: `${url_}.${getSignalId(options?.signal)}`,
133
147
  wait,
134
148
  shouldSplitBatch(requests) {
135
149
  return requests.length > batchSize
@@ -137,6 +151,7 @@ export function http<
137
151
  fn: (body: RpcRequest[]) =>
138
152
  rpcClient.request({
139
153
  body,
154
+ fetchOptions,
140
155
  }),
141
156
  sort: (a, b) => a.id - b.id,
142
157
  })
@@ -147,6 +162,7 @@ export function http<
147
162
  : [
148
163
  await rpcClient.request({
149
164
  body,
165
+ fetchOptions,
150
166
  }),
151
167
  ]
152
168
 
package/errors/utils.ts CHANGED
@@ -1,9 +1,28 @@
1
1
  import type { Address } from 'abitype'
2
2
 
3
3
  export type ErrorType<name extends string = 'Error'> = Error & { name: name }
4
+ export type AbortErrorType = ErrorType<'AbortError'>
4
5
 
5
6
  export const getContractAddress = (address: Address) => address
6
7
 
8
+ export function getAbortError(signal?: AbortSignal | undefined) {
9
+ if (signal?.reason) return signal.reason
10
+ if (typeof DOMException === 'function')
11
+ return new DOMException('This operation was aborted', 'AbortError')
12
+ const error = new Error('This operation was aborted') as AbortErrorType
13
+ error.name = 'AbortError'
14
+ return error
15
+ }
16
+
17
+ export function isAbortError(error: unknown): error is AbortErrorType {
18
+ return (
19
+ typeof error === 'object' &&
20
+ error !== null &&
21
+ 'name' in error &&
22
+ error.name === 'AbortError'
23
+ )
24
+ }
25
+
7
26
  /**
8
27
  * Returns the URL with any embedded basic-auth credentials stripped, so
9
28
  * error messages and logs don't leak secrets when an RPC URL like
package/errors/version.ts CHANGED
@@ -1 +1 @@
1
- export const version = '2.48.11'
1
+ export const version = '2.49.0'
package/index.ts CHANGED
@@ -1135,6 +1135,7 @@ export type {
1135
1135
  EIP1193Parameters,
1136
1136
  EIP1193Provider,
1137
1137
  EIP1193RequestFn,
1138
+ EIP1193RequestOptions,
1138
1139
  EIP1474Methods,
1139
1140
  NetworkSync,
1140
1141
  PaymasterRpcSchema,
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "viem",
3
3
  "description": "TypeScript Interface for Ethereum",
4
- "version": "2.48.11",
4
+ "version": "2.49.0",
5
5
  "main": "./_cjs/index.js",
6
6
  "module": "./_esm/index.js",
7
7
  "types": "./_types/index.d.ts",
@@ -19,9 +19,9 @@ import type { TransactionReceipt } from '../Transaction.js'
19
19
  * })
20
20
  *
21
21
  * const { receipt } = await Actions.wallet.send(client, {
22
+ * amount: '1.5',
22
23
  * to: '0x...',
23
24
  * token: '0x...',
24
- * value: '1.5',
25
25
  * })
26
26
  * ```
27
27
  *
@@ -48,17 +48,27 @@ export async function send<chain extends Chain | undefined>(
48
48
 
49
49
  export declare namespace send {
50
50
  export type Parameters = {
51
+ /** Human-readable amount to pre-fill (for example, "1.5"). */
52
+ amount?: string | undefined
51
53
  /**
52
54
  * Fee payer override. `false` to disable the wallet's default fee payer,
53
55
  * a URL string to use a custom fee payer service.
54
56
  */
55
57
  feePayer?: boolean | string | undefined
58
+ /**
59
+ * UTF-8 memo (max 32 bytes) to attach to the transfer. Wallet rejects
60
+ * the request if the selected token does not support memos (non-TIP-20).
61
+ */
62
+ memo?: string | undefined
56
63
  /** Recipient address to pre-fill. */
57
64
  to?: Address | undefined
58
- /** Token contract address to pre-fill. Omit to let the user choose. */
59
- token?: Address | undefined
60
- /** Human-readable amount to pre-fill (for example, "1.5"). */
61
- value?: string | undefined
65
+ /**
66
+ * Token to pre-fill, accepted as either a contract address or a curated
67
+ * tokenlist symbol (case-insensitive, for example `"pathUsd"`). Symbols
68
+ * are resolved against the curated tokenlist on the active chain. Omit
69
+ * to let the user choose.
70
+ */
71
+ token?: Address | string | undefined
62
72
  }
63
73
 
64
74
  export type ReturnValue = {
package/types/eip1193.ts CHANGED
@@ -2140,6 +2140,8 @@ export type EIP1193RequestOptions = {
2140
2140
  retryDelay?: number | undefined
2141
2141
  /** The max number of times to retry. */
2142
2142
  retryCount?: number | undefined
2143
+ /** Abort signal to cancel the request. */
2144
+ signal?: AbortSignal | undefined
2143
2145
  /** Unique identifier for the request. */
2144
2146
  uid?: string | undefined
2145
2147
  }
@@ -66,7 +66,12 @@ import {
66
66
  WalletConnectSessionSettlementError,
67
67
  type WalletConnectSessionSettlementErrorType,
68
68
  } from '../errors/rpc.js'
69
- import type { ErrorType } from '../errors/utils.js'
69
+ import {
70
+ type AbortErrorType,
71
+ type ErrorType,
72
+ getAbortError,
73
+ isAbortError,
74
+ } from '../errors/utils.js'
70
75
  import type {
71
76
  EIP1193RequestFn,
72
77
  EIP1193RequestOptions,
@@ -113,18 +118,22 @@ export type RequestErrorType =
113
118
  | WalletConnectSessionSettlementErrorType
114
119
  | WebSocketRequestErrorType
115
120
  | WithRetryErrorType
121
+ | AbortErrorType
116
122
  | ErrorType
117
123
 
118
- export function buildRequest<request extends (args: any) => Promise<any>>(
119
- request: request,
120
- options: EIP1193RequestOptions = {},
121
- ): EIP1193RequestFn {
124
+ export function buildRequest<
125
+ request extends (
126
+ args: any,
127
+ options?: { signal?: AbortSignal | undefined } | undefined,
128
+ ) => Promise<any>,
129
+ >(request: request, options: EIP1193RequestOptions = {}): EIP1193RequestFn {
122
130
  return async (args, overrideOptions = {}) => {
123
131
  const {
124
132
  dedupe = false,
125
133
  methods,
126
134
  retryDelay = 150,
127
135
  retryCount = 3,
136
+ signal,
128
137
  uid,
129
138
  } = {
130
139
  ...options,
@@ -141,6 +150,8 @@ export function buildRequest<request extends (args: any) => Promise<any>>(
141
150
  method,
142
151
  })
143
152
 
153
+ if (signal?.aborted) throw getAbortError(signal)
154
+
144
155
  const requestId = dedupe
145
156
  ? hashString(`${uid}.${stringify(args)}`)
146
157
  : undefined
@@ -149,8 +160,11 @@ export function buildRequest<request extends (args: any) => Promise<any>>(
149
160
  withRetry(
150
161
  async () => {
151
162
  try {
152
- return await request(args)
163
+ return await request(args, signal ? { signal } : undefined)
153
164
  } catch (err_) {
165
+ if (signal?.aborted) throw getAbortError(signal)
166
+ if (isAbortError(err_)) throw err_
167
+
154
168
  const err = err_ as unknown as RpcError<
155
169
  RpcErrorCode | ProviderRpcErrorCode
156
170
  >
@@ -264,6 +278,7 @@ export function buildRequest<request extends (args: any) => Promise<any>>(
264
278
  return ~~(1 << count) * retryDelay
265
279
  },
266
280
  retryCount,
281
+ signal,
267
282
  shouldRetry: ({ error }) => shouldRetry(error),
268
283
  },
269
284
  ),
@@ -274,6 +289,7 @@ export function buildRequest<request extends (args: any) => Promise<any>>(
274
289
 
275
290
  /** @internal */
276
291
  export function shouldRetry(error: Error) {
292
+ if (isAbortError(error)) return false
277
293
  if ('code' in error && typeof error.code === 'number') {
278
294
  if (error.code === -1) return true // Unknown error
279
295
  if (error.code === LimitExceededRpcError.code) return true
package/utils/ccip.ts CHANGED
@@ -15,8 +15,9 @@ import {
15
15
  HttpRequestError,
16
16
  type HttpRequestErrorType,
17
17
  } from '../errors/request.js'
18
- import type { ErrorType } from '../errors/utils.js'
18
+ import { type ErrorType, getAbortError, isAbortError } from '../errors/utils.js'
19
19
  import type { Chain } from '../types/chain.js'
20
+ import type { EIP1193RequestOptions } from '../types/eip1193.js'
20
21
  import type { Hex } from '../types/misc.js'
21
22
  import { decodeErrorResult } from './abi/decodeErrorResult.js'
22
23
  import { encodeAbiParameters } from './abi/encodeAbiParameters.js'
@@ -65,8 +66,9 @@ export async function offchainLookup<chain extends Chain | undefined>(
65
66
  blockNumber,
66
67
  blockTag,
67
68
  data,
69
+ requestOptions,
68
70
  to,
69
- }: Pick<CallParameters, 'blockNumber' | 'blockTag'> & {
71
+ }: Pick<CallParameters, 'blockNumber' | 'blockTag' | 'requestOptions'> & {
70
72
  data: Hex
71
73
  to: Address
72
74
  },
@@ -90,9 +92,10 @@ export async function offchainLookup<chain extends Chain | undefined>(
90
92
  const result = urls.includes(localBatchGatewayUrl)
91
93
  ? await localBatchGatewayRequest({
92
94
  data: callData,
93
- ccipRequest: ccipRequest_,
95
+ ccipRequest: (parameters) =>
96
+ ccipRequest_({ ...parameters, requestOptions }),
94
97
  })
95
- : await ccipRequest_({ data: callData, sender, urls })
98
+ : await ccipRequest_({ data: callData, requestOptions, sender, urls })
96
99
 
97
100
  const { data: data_ } = await call(client, {
98
101
  blockNumber,
@@ -104,11 +107,16 @@ export async function offchainLookup<chain extends Chain | undefined>(
104
107
  [result, extraData],
105
108
  ),
106
109
  ]),
110
+ requestOptions,
107
111
  to,
108
112
  } as CallParameters)
109
113
 
110
114
  return data_!
111
115
  } catch (err) {
116
+ if (requestOptions?.signal?.aborted)
117
+ throw getAbortError(requestOptions.signal)
118
+ if (isAbortError(err)) throw err
119
+
112
120
  throw new OffchainLookupError({
113
121
  callbackSelector,
114
122
  cause: err as BaseError,
@@ -122,6 +130,7 @@ export async function offchainLookup<chain extends Chain | undefined>(
122
130
 
123
131
  export type CcipRequestParameters = {
124
132
  data: Hex
133
+ requestOptions?: EIP1193RequestOptions | undefined
125
134
  sender: Address
126
135
  urls: readonly string[]
127
136
  }
@@ -135,12 +144,16 @@ export type CcipRequestErrorType =
135
144
 
136
145
  export async function ccipRequest({
137
146
  data,
147
+ requestOptions,
138
148
  sender,
139
149
  urls,
140
150
  }: CcipRequestParameters): Promise<CcipRequestReturnType> {
141
151
  let error = new Error('An unknown error occurred.')
142
152
 
143
153
  for (let i = 0; i < urls.length; i++) {
154
+ if (requestOptions?.signal?.aborted)
155
+ throw getAbortError(requestOptions.signal)
156
+
144
157
  const url = urls[i]
145
158
  const method = url.includes('{data}') ? 'GET' : 'POST'
146
159
  const body = method === 'POST' ? { data, sender } : undefined
@@ -154,6 +167,7 @@ export async function ccipRequest({
154
167
  body: JSON.stringify(body),
155
168
  headers,
156
169
  method,
170
+ ...(requestOptions?.signal ? { signal: requestOptions.signal } : {}),
157
171
  },
158
172
  )
159
173
 
@@ -189,6 +203,10 @@ export async function ccipRequest({
189
203
 
190
204
  return result
191
205
  } catch (err) {
206
+ if (requestOptions?.signal?.aborted)
207
+ throw getAbortError(requestOptions.signal)
208
+ if (isAbortError(err)) throw err
209
+
192
210
  error = new HttpRequestError({
193
211
  body,
194
212
  details: (err as Error).message,