viem 0.3.0-main.20230411T230052 → 0.3.0-main.20230412T014743

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 (121) hide show
  1. package/dist/cjs/actions/public/createBlockFilter.js +5 -1
  2. package/dist/cjs/actions/public/createBlockFilter.js.map +1 -1
  3. package/dist/cjs/actions/public/createContractEventFilter.js +5 -0
  4. package/dist/cjs/actions/public/createContractEventFilter.js.map +1 -1
  5. package/dist/cjs/actions/public/createEventFilter.js +5 -0
  6. package/dist/cjs/actions/public/createEventFilter.js.map +1 -1
  7. package/dist/cjs/actions/public/createPendingTransactionFilter.js +5 -1
  8. package/dist/cjs/actions/public/createPendingTransactionFilter.js.map +1 -1
  9. package/dist/cjs/actions/public/getFilterChanges.js +2 -2
  10. package/dist/cjs/actions/public/getFilterChanges.js.map +1 -1
  11. package/dist/cjs/actions/public/getFilterLogs.js +2 -2
  12. package/dist/cjs/actions/public/getFilterLogs.js.map +1 -1
  13. package/dist/cjs/actions/public/uninstallFilter.js +2 -2
  14. package/dist/cjs/actions/public/uninstallFilter.js.map +1 -1
  15. package/dist/cjs/clients/transports/fallback.js +18 -1
  16. package/dist/cjs/clients/transports/fallback.js.map +1 -1
  17. package/dist/cjs/errors/base.js +27 -21
  18. package/dist/cjs/errors/base.js.map +1 -1
  19. package/dist/cjs/errors/index.js +27 -23
  20. package/dist/cjs/errors/index.js.map +1 -1
  21. package/dist/cjs/errors/request.js +50 -259
  22. package/dist/cjs/errors/request.js.map +1 -1
  23. package/dist/cjs/errors/rpc.js +271 -50
  24. package/dist/cjs/errors/rpc.js.map +1 -1
  25. package/dist/cjs/errors/version.js +1 -1
  26. package/dist/cjs/index.js +9 -5
  27. package/dist/cjs/index.js.map +1 -1
  28. package/dist/cjs/utils/buildRequest.js +16 -1
  29. package/dist/cjs/utils/buildRequest.js.map +1 -1
  30. package/dist/cjs/utils/errors/getNodeError.js +28 -27
  31. package/dist/cjs/utils/errors/getNodeError.js.map +1 -1
  32. package/dist/cjs/utils/filters/createFilterRequestScope.js +14 -0
  33. package/dist/cjs/utils/filters/createFilterRequestScope.js.map +1 -0
  34. package/dist/cjs/utils/rpc.js +3 -3
  35. package/dist/cjs/utils/rpc.js.map +1 -1
  36. package/dist/esm/actions/public/createBlockFilter.js +5 -1
  37. package/dist/esm/actions/public/createBlockFilter.js.map +1 -1
  38. package/dist/esm/actions/public/createContractEventFilter.js +5 -0
  39. package/dist/esm/actions/public/createContractEventFilter.js.map +1 -1
  40. package/dist/esm/actions/public/createEventFilter.js +5 -0
  41. package/dist/esm/actions/public/createEventFilter.js.map +1 -1
  42. package/dist/esm/actions/public/createPendingTransactionFilter.js +5 -1
  43. package/dist/esm/actions/public/createPendingTransactionFilter.js.map +1 -1
  44. package/dist/esm/actions/public/getFilterChanges.js +2 -2
  45. package/dist/esm/actions/public/getFilterChanges.js.map +1 -1
  46. package/dist/esm/actions/public/getFilterLogs.js +2 -2
  47. package/dist/esm/actions/public/getFilterLogs.js.map +1 -1
  48. package/dist/esm/actions/public/uninstallFilter.js +2 -2
  49. package/dist/esm/actions/public/uninstallFilter.js.map +1 -1
  50. package/dist/esm/clients/transports/fallback.js +18 -1
  51. package/dist/esm/clients/transports/fallback.js.map +1 -1
  52. package/dist/esm/errors/base.js +27 -21
  53. package/dist/esm/errors/base.js.map +1 -1
  54. package/dist/esm/errors/index.js +4 -4
  55. package/dist/esm/errors/index.js.map +1 -1
  56. package/dist/esm/errors/request.js +45 -241
  57. package/dist/esm/errors/request.js.map +1 -1
  58. package/dist/esm/errors/rpc.js +249 -45
  59. package/dist/esm/errors/rpc.js.map +1 -1
  60. package/dist/esm/errors/version.js +1 -1
  61. package/dist/esm/index.js +1 -1
  62. package/dist/esm/index.js.map +1 -1
  63. package/dist/esm/utils/buildRequest.js +16 -1
  64. package/dist/esm/utils/buildRequest.js.map +1 -1
  65. package/dist/esm/utils/errors/getNodeError.js +3 -2
  66. package/dist/esm/utils/errors/getNodeError.js.map +1 -1
  67. package/dist/esm/utils/filters/createFilterRequestScope.js +10 -0
  68. package/dist/esm/utils/filters/createFilterRequestScope.js.map +1 -0
  69. package/dist/esm/utils/rpc.js +4 -4
  70. package/dist/esm/utils/rpc.js.map +1 -1
  71. package/dist/types/actions/public/createBlockFilter.d.ts.map +1 -1
  72. package/dist/types/actions/public/createContractEventFilter.d.ts.map +1 -1
  73. package/dist/types/actions/public/createEventFilter.d.ts.map +1 -1
  74. package/dist/types/actions/public/createPendingTransactionFilter.d.ts.map +1 -1
  75. package/dist/types/actions/public/getFilterChanges.d.ts +1 -1
  76. package/dist/types/actions/public/getFilterChanges.d.ts.map +1 -1
  77. package/dist/types/actions/public/getFilterLogs.d.ts +1 -1
  78. package/dist/types/actions/public/getFilterLogs.d.ts.map +1 -1
  79. package/dist/types/actions/public/uninstallFilter.d.ts +1 -1
  80. package/dist/types/actions/public/uninstallFilter.d.ts.map +1 -1
  81. package/dist/types/clients/transports/fallback.d.ts +14 -0
  82. package/dist/types/clients/transports/fallback.d.ts.map +1 -1
  83. package/dist/types/errors/base.d.ts +1 -0
  84. package/dist/types/errors/base.d.ts.map +1 -1
  85. package/dist/types/errors/index.d.ts +4 -4
  86. package/dist/types/errors/index.d.ts.map +1 -1
  87. package/dist/types/errors/request.d.ts +42 -80
  88. package/dist/types/errors/request.d.ts.map +1 -1
  89. package/dist/types/errors/rpc.d.ts +189 -43
  90. package/dist/types/errors/rpc.d.ts.map +1 -1
  91. package/dist/types/errors/version.d.ts +1 -1
  92. package/dist/types/index.d.ts +1 -1
  93. package/dist/types/index.d.ts.map +1 -1
  94. package/dist/types/types/filter.d.ts +2 -0
  95. package/dist/types/types/filter.d.ts.map +1 -1
  96. package/dist/types/utils/buildRequest.d.ts.map +1 -1
  97. package/dist/types/utils/errors/getNodeError.d.ts +1 -1
  98. package/dist/types/utils/errors/getNodeError.d.ts.map +1 -1
  99. package/dist/types/utils/filters/createFilterRequestScope.d.ts +16 -0
  100. package/dist/types/utils/filters/createFilterRequestScope.d.ts.map +1 -0
  101. package/dist/types/utils/rpc.d.ts.map +1 -1
  102. package/package.json +1 -1
  103. package/src/actions/public/createBlockFilter.ts +5 -1
  104. package/src/actions/public/createContractEventFilter.ts +6 -0
  105. package/src/actions/public/createEventFilter.ts +7 -0
  106. package/src/actions/public/createPendingTransactionFilter.ts +5 -1
  107. package/src/actions/public/getFilterChanges.ts +2 -2
  108. package/src/actions/public/getFilterLogs.ts +2 -2
  109. package/src/actions/public/uninstallFilter.ts +2 -2
  110. package/src/clients/transports/fallback.ts +46 -2
  111. package/src/errors/base.ts +6 -4
  112. package/src/errors/index.ts +15 -11
  113. package/src/errors/request.ts +82 -175
  114. package/src/errors/rpc.ts +355 -89
  115. package/src/errors/version.ts +1 -1
  116. package/src/index.ts +5 -1
  117. package/src/types/filter.ts +3 -0
  118. package/src/utils/buildRequest.ts +19 -1
  119. package/src/utils/errors/getNodeError.ts +2 -3
  120. package/src/utils/filters/createFilterRequestScope.ts +42 -0
  121. package/src/utils/rpc.ts +6 -4
@@ -1 +1 @@
1
- {"version":3,"file":"getNodeError.d.ts","sourceRoot":"","sources":["../../../../src/utils/errors/getNodeError.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAA;AACvE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,iBAAiB,EACjB,sBAAsB,EACtB,wBAAwB,EACxB,uBAAuB,EAEvB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAEhB,mBAAmB,EAEnB,gCAAgC,EAChC,gBAAgB,EACjB,MAAM,uBAAuB,CAAA;AAE9B,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,SAAS,WAM/C;AAED,wBAAgB,YAAY,CAC1B,GAAG,EAAE,SAAS,EACd,IAAI,EAAE,OAAO,CAAC,yBAAyB,CAAC,GAAG,CAAC,CAAC,yRA6C9C"}
1
+ {"version":3,"file":"getNodeError.d.ts","sourceRoot":"","sources":["../../../../src/utils/errors/getNodeError.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAA;AACvE,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACvE,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,iBAAiB,EACjB,sBAAsB,EACtB,wBAAwB,EACxB,uBAAuB,EAEvB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EAEnB,gCAAgC,EAChC,gBAAgB,EACjB,MAAM,uBAAuB,CAAA;AAE9B,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,SAAS,WAM/C;AAED,wBAAgB,YAAY,CAC1B,GAAG,EAAE,SAAS,EACd,IAAI,EAAE,OAAO,CAAC,yBAAyB,CAAC,GAAG,CAAC,CAAC,yRA6C9C"}
@@ -0,0 +1,16 @@
1
+ import type { Chain } from '../../chains.js';
2
+ import type { PublicClient, Transport } from '../../clients/index.js';
3
+ import type { Requests } from '../../types/eip1193.js';
4
+ import type { Hex } from '../../types/index.js';
5
+ type CreateFilterRequestScopeParameters = {
6
+ method: 'eth_newFilter' | 'eth_newPendingTransactionFilter' | 'eth_newBlockFilter';
7
+ };
8
+ type CreateFilterRequestScopeReturnType = (id: Hex) => Requests['request'];
9
+ /**
10
+ * Scopes `request` to the filter ID. If the client is a fallback, it will
11
+ * listen for responses and scope the child transport `request` function
12
+ * to the successful filter ID.
13
+ */
14
+ export declare function createFilterRequestScope<TChain extends Chain | undefined>(client: PublicClient<Transport, TChain>, { method }: CreateFilterRequestScopeParameters): CreateFilterRequestScopeReturnType;
15
+ export {};
16
+ //# sourceMappingURL=createFilterRequestScope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createFilterRequestScope.d.ts","sourceRoot":"","sources":["../../../../src/utils/filters/createFilterRequestScope.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAErE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACtD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAA;AAE/C,KAAK,kCAAkC,GAAG;IACxC,MAAM,EACF,eAAe,GACf,iCAAiC,GACjC,oBAAoB,CAAA;CACzB,CAAA;AAED,KAAK,kCAAkC,GAAG,CAAC,EAAE,EAAE,GAAG,KAAK,QAAQ,CAAC,SAAS,CAAC,CAAA;AAE1E;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,SAAS,KAAK,GAAG,SAAS,EACvE,MAAM,EAAE,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,EACvC,EAAE,MAAM,EAAE,EAAE,kCAAkC,GAC7C,kCAAkC,CAkBpC"}
@@ -1 +1 @@
1
- {"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../../../src/utils/rpc.ts"],"names":[],"mappings":";AAAA,OAAO,SAAS,MAAM,eAAe,CAAA;AAarC,KAAK,aAAa,CAAC,CAAC,IAAI;IACtB,MAAM,CAAC,EAAE,KAAK,CAAA;IACd,MAAM,EAAE,CAAC,CAAA;IACT,KAAK,CAAC,EAAE,KAAK,CAAA;CACd,CAAA;AACD,KAAK,WAAW,CAAC,CAAC,IAAI;IACpB,MAAM,CAAC,EAAE,KAAK,CAAA;IACd,MAAM,CAAC,EAAE,KAAK,CAAA;IACd,KAAK,EAAE,CAAC,CAAA;CACT,CAAA;AACD,KAAK,YAAY,CAAC,OAAO,EAAE,MAAM,IAAI;IACnC,MAAM,EAAE,kBAAkB,CAAA;IAC1B,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,MAAM,CAAC,EAAE,KAAK,CAAA;IACd,MAAM,EAAE;QACN,YAAY,EAAE,MAAM,CAAA;KACrB,GAAG,CACA;QACE,MAAM,EAAE,OAAO,CAAA;QACf,KAAK,CAAC,EAAE,KAAK,CAAA;KACd,GACD;QACE,MAAM,CAAC,EAAE,KAAK,CAAA;QACd,KAAK,EAAE,MAAM,CAAA;KACd,CACJ,CAAA;CACF,CAAA;AAED,KAAK,UAAU,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAA;CAAE,CAAA;AAEpD,MAAM,MAAM,WAAW,CAAC,OAAO,GAAG,GAAG,EAAE,MAAM,GAAG,GAAG,IAAI;IACrD,OAAO,EAAE,GAAG,MAAM,EAAE,CAAA;IACpB,EAAE,EAAE,MAAM,CAAA;CACX,GAAG,CACA,aAAa,CAAC,OAAO,CAAC,GACtB,WAAW,CAAC,MAAM,CAAC,GACnB,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAChC,CAAA;AAKD,MAAM,MAAM,WAAW,GAAG;IAExB,IAAI,EAAE,UAAU,CAAA;IAEhB,YAAY,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;IAExC,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,iBAAe,IAAI,CACjB,GAAG,EAAE,MAAM,EACX,EAAE,IAAI,EAAE,YAAiB,EAAE,OAAgB,EAAE,EAAE,WAAW,kCAwD3D;AAKD,KAAK,EAAE,GAAG,MAAM,GAAG,MAAM,CAAA;AACzB,KAAK,UAAU,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,CAAA;AACxC,KAAK,WAAW,GAAG,GAAG,CAAC,EAAE,EAAE,UAAU,CAAC,CAAA;AAEtC,MAAM,MAAM,MAAM,GAAG,SAAS,GAAG;IAC/B,QAAQ,EAAE,WAAW,CAAA;IACrB,aAAa,EAAE,WAAW,CAAA;CAC3B,CAAA;AAID,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,mBAqD3C;AAED,iBAAS,SAAS,CAChB,MAAM,EAAE,MAAM,EACd,EACE,IAAI,EACJ,MAAM,EACN,OAAO,GACR,EAAE;IAED,IAAI,EAAE,UAAU,CAAA;IAEhB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAA;IAEvC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,IAAI,CAAA;CAClD,UAyCF;AAED,iBAAe,cAAc,CAC3B,MAAM,EAAE,MAAM,EACd,EACE,IAAI,EACJ,OAAgB,GACjB,EAAE;IAED,IAAI,EAAE,UAAU,CAAA;IAEhB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,kCAgBF;AAID,eAAO,MAAM,GAAG;;;;CAIf,CAAA"}
1
+ {"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../../../src/utils/rpc.ts"],"names":[],"mappings":";AAAA,OAAO,SAAS,MAAM,eAAe,CAAA;AAarC,KAAK,aAAa,CAAC,CAAC,IAAI;IACtB,MAAM,CAAC,EAAE,KAAK,CAAA;IACd,MAAM,EAAE,CAAC,CAAA;IACT,KAAK,CAAC,EAAE,KAAK,CAAA;CACd,CAAA;AACD,KAAK,WAAW,CAAC,CAAC,IAAI;IACpB,MAAM,CAAC,EAAE,KAAK,CAAA;IACd,MAAM,CAAC,EAAE,KAAK,CAAA;IACd,KAAK,EAAE,CAAC,CAAA;CACT,CAAA;AACD,KAAK,YAAY,CAAC,OAAO,EAAE,MAAM,IAAI;IACnC,MAAM,EAAE,kBAAkB,CAAA;IAC1B,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,MAAM,CAAC,EAAE,KAAK,CAAA;IACd,MAAM,EAAE;QACN,YAAY,EAAE,MAAM,CAAA;KACrB,GAAG,CACA;QACE,MAAM,EAAE,OAAO,CAAA;QACf,KAAK,CAAC,EAAE,KAAK,CAAA;KACd,GACD;QACE,MAAM,CAAC,EAAE,KAAK,CAAA;QACd,KAAK,EAAE,MAAM,CAAA;KACd,CACJ,CAAA;CACF,CAAA;AAED,KAAK,UAAU,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAA;CAAE,CAAA;AAEpD,MAAM,MAAM,WAAW,CAAC,OAAO,GAAG,GAAG,EAAE,MAAM,GAAG,GAAG,IAAI;IACrD,OAAO,EAAE,GAAG,MAAM,EAAE,CAAA;IACpB,EAAE,EAAE,MAAM,CAAA;CACX,GAAG,CACA,aAAa,CAAC,OAAO,CAAC,GACtB,WAAW,CAAC,MAAM,CAAC,GACnB,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAChC,CAAA;AAKD,MAAM,MAAM,WAAW,GAAG;IAExB,IAAI,EAAE,UAAU,CAAA;IAEhB,YAAY,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;IAExC,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,iBAAe,IAAI,CACjB,GAAG,EAAE,MAAM,EACX,EAAE,IAAI,EAAE,YAAiB,EAAE,OAAgB,EAAE,EAAE,WAAW,kCAwD3D;AAKD,KAAK,EAAE,GAAG,MAAM,GAAG,MAAM,CAAA;AACzB,KAAK,UAAU,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,CAAA;AACxC,KAAK,WAAW,GAAG,GAAG,CAAC,EAAE,EAAE,UAAU,CAAC,CAAA;AAEtC,MAAM,MAAM,MAAM,GAAG,SAAS,GAAG;IAC/B,QAAQ,EAAE,WAAW,CAAA;IACrB,aAAa,EAAE,WAAW,CAAA;CAC3B,CAAA;AAID,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,mBAqD3C;AAED,iBAAS,SAAS,CAChB,MAAM,EAAE,MAAM,EACd,EACE,IAAI,EACJ,MAAM,EACN,OAAO,GACR,EAAE;IAED,IAAI,EAAE,UAAU,CAAA;IAEhB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAA;IAEvC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,IAAI,CAAA;CAClD,UA2CF;AAED,iBAAe,cAAc,CAC3B,MAAM,EAAE,MAAM,EACd,EACE,IAAI,EACJ,OAAgB,GACjB,EAAE;IAED,IAAI,EAAE,UAAU,CAAA;IAEhB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,kCAgBF;AAID,eAAO,MAAM,GAAG;;;;CAIf,CAAA"}
package/package.json CHANGED
@@ -12,7 +12,7 @@
12
12
  "isomorphic-ws": "5.0.0",
13
13
  "ws": "8.12.0"
14
14
  },
15
- "version": "0.3.0-main.20230411T230052",
15
+ "version": "0.3.0-main.20230412T014743",
16
16
  "files": [
17
17
  "dist",
18
18
  "!dist/**/*.tsbuildinfo",
@@ -1,5 +1,6 @@
1
1
  import type { PublicClient, Transport } from '../../clients/index.js'
2
2
  import type { Chain, Filter } from '../../types/index.js'
3
+ import { createFilterRequestScope } from '../../utils/filters/createFilterRequestScope.js'
3
4
 
4
5
  export type CreateBlockFilterReturnType = Filter<'block'>
5
6
 
@@ -27,8 +28,11 @@ export type CreateBlockFilterReturnType = Filter<'block'>
27
28
  export async function createBlockFilter<TChain extends Chain | undefined>(
28
29
  client: PublicClient<Transport, TChain>,
29
30
  ): Promise<CreateBlockFilterReturnType> {
31
+ const getRequest = createFilterRequestScope(client, {
32
+ method: 'eth_newBlockFilter',
33
+ })
30
34
  const id = await client.request({
31
35
  method: 'eth_newBlockFilter',
32
36
  })
33
- return { id, type: 'block' }
37
+ return { id, request: getRequest(id), type: 'block' }
34
38
  }
@@ -12,6 +12,7 @@ import type {
12
12
  } from '../../types/index.js'
13
13
  import { encodeEventTopics, numberToHex } from '../../utils/index.js'
14
14
  import type { EncodeEventTopicsParameters } from '../../utils/index.js'
15
+ import { createFilterRequestScope } from '../../utils/filters/createFilterRequestScope.js'
15
16
 
16
17
  export type CreateContractEventFilterParameters<
17
18
  TAbi extends Abi | readonly unknown[] = Abi,
@@ -86,6 +87,10 @@ export async function createContractEventFilter<
86
87
  toBlock,
87
88
  }: CreateContractEventFilterParameters<TAbi, TEventName, TArgs>,
88
89
  ): Promise<CreateContractEventFilterReturnType<TAbi, TEventName, TArgs>> {
90
+ const getRequest = createFilterRequestScope(client, {
91
+ method: 'eth_newFilter',
92
+ })
93
+
89
94
  const topics = eventName
90
95
  ? encodeEventTopics({
91
96
  abi,
@@ -110,6 +115,7 @@ export async function createContractEventFilter<
110
115
  args,
111
116
  eventName,
112
117
  id,
118
+ request: getRequest(id),
113
119
  type: 'event',
114
120
  } as unknown as CreateContractEventFilterReturnType<TAbi, TEventName, TArgs>
115
121
  }
@@ -14,6 +14,7 @@ import type {
14
14
  } from '../../types/index.js'
15
15
  import { encodeEventTopics, numberToHex } from '../../utils/index.js'
16
16
  import type { EncodeEventTopicsParameters } from '../../utils/index.js'
17
+ import { createFilterRequestScope } from '../../utils/filters/createFilterRequestScope.js'
17
18
 
18
19
  export type CreateEventFilterParameters<
19
20
  TAbiEvent extends AbiEvent | undefined = undefined,
@@ -105,6 +106,10 @@ export async function createEventFilter<
105
106
  _Args
106
107
  > = {} as any,
107
108
  ): Promise<CreateEventFilterReturnType<TAbiEvent, _Abi, _EventName, _Args>> {
109
+ const getRequest = createFilterRequestScope(client, {
110
+ method: 'eth_newFilter',
111
+ })
112
+
108
113
  let topics: LogTopic[] = []
109
114
  if (event)
110
115
  topics = encodeEventTopics({
@@ -125,11 +130,13 @@ export async function createEventFilter<
125
130
  },
126
131
  ],
127
132
  })
133
+
128
134
  return {
129
135
  abi: event ? [event] : undefined,
130
136
  args,
131
137
  eventName: event ? (event as AbiEvent).name : undefined,
132
138
  id,
139
+ request: getRequest(id),
133
140
  type: 'event',
134
141
  } as unknown as CreateEventFilterReturnType<
135
142
  TAbiEvent,
@@ -1,5 +1,6 @@
1
1
  import type { PublicClient, Transport } from '../../clients/index.js'
2
2
  import type { Chain, Filter } from '../../types/index.js'
3
+ import { createFilterRequestScope } from '../../utils/filters/createFilterRequestScope.js'
3
4
 
4
5
  export type CreatePendingTransactionFilterReturnType = Filter<'transaction'>
5
6
 
@@ -30,8 +31,11 @@ export async function createPendingTransactionFilter<
30
31
  >(
31
32
  client: PublicClient<TTransport, TChain>,
32
33
  ): Promise<CreatePendingTransactionFilterReturnType> {
34
+ const getRequest = createFilterRequestScope(client, {
35
+ method: 'eth_newPendingTransactionFilter',
36
+ })
33
37
  const id = await client.request({
34
38
  method: 'eth_newPendingTransactionFilter',
35
39
  })
36
- return { id, type: 'transaction' }
40
+ return { id, request: getRequest(id), type: 'transaction' }
37
41
  }
@@ -121,12 +121,12 @@ export async function getFilterChanges<
121
121
  TAbi extends Abi | readonly unknown[],
122
122
  TEventName extends string | undefined,
123
123
  >(
124
- client: PublicClient<TTransport, TChain>,
124
+ _client: PublicClient<TTransport, TChain>,
125
125
  {
126
126
  filter,
127
127
  }: GetFilterChangesParameters<TFilterType, TAbiEvent, TAbi, TEventName>,
128
128
  ) {
129
- const logs = await client.request({
129
+ const logs = await filter.request({
130
130
  method: 'eth_getFilterChanges',
131
131
  params: [filter.id],
132
132
  })
@@ -57,10 +57,10 @@ export async function getFilterLogs<
57
57
  TAbi extends Abi | readonly unknown[],
58
58
  TEventName extends string | undefined,
59
59
  >(
60
- client: PublicClient<Transport, TChain>,
60
+ _client: PublicClient<Transport, TChain>,
61
61
  { filter }: GetFilterLogsParameters<TAbiEvent, TAbi, TEventName>,
62
62
  ): Promise<GetFilterLogsReturnType<TAbiEvent, TAbi, TEventName>> {
63
- const logs = await client.request({
63
+ const logs = await filter.request({
64
64
  method: 'eth_getFilterLogs',
65
65
  params: [filter.id],
66
66
  })
@@ -35,10 +35,10 @@ export async function uninstallFilter<
35
35
  TTransport extends Transport,
36
36
  TChain extends Chain | undefined,
37
37
  >(
38
- client: PublicClient<TTransport, TChain>,
38
+ _client: PublicClient<TTransport, TChain>,
39
39
  { filter }: UninstallFilterParameters,
40
40
  ): Promise<UninstallFilterReturnType> {
41
- return client.request({
41
+ return filter.request({
42
42
  method: 'eth_uninstallFilter',
43
43
  params: [filter.id],
44
44
  })
@@ -4,6 +4,26 @@ import { wait } from '../../utils/wait.js'
4
4
  import type { Transport, TransportConfig } from './createTransport.js'
5
5
  import { createTransport } from './createTransport.js'
6
6
 
7
+ // TODO: Narrow `method` & `params` types.
8
+ export type OnResponseFn = (
9
+ args: {
10
+ method: string
11
+ params: unknown[]
12
+ transport: ReturnType<Transport>
13
+ } & (
14
+ | {
15
+ error?: never
16
+ response: unknown
17
+ status: 'success'
18
+ }
19
+ | {
20
+ error: Error
21
+ response?: never
22
+ status: 'error'
23
+ }
24
+ ),
25
+ ) => void
26
+
7
27
  type RankOptions = {
8
28
  /**
9
29
  * The polling interval (in ms) at which the ranker should ping the RPC URL.
@@ -52,7 +72,10 @@ export type FallbackTransportConfig = {
52
72
 
53
73
  export type FallbackTransport = Transport<
54
74
  'fallback',
55
- { transports: ReturnType<Transport>[] }
75
+ {
76
+ onResponse: (fn: OnResponseFn) => void
77
+ transports: ReturnType<Transport>[]
78
+ }
56
79
  >
57
80
 
58
81
  export function fallback(
@@ -69,6 +92,8 @@ export function fallback(
69
92
  return ({ chain, pollingInterval = 4_000, timeout }) => {
70
93
  let transports = transports_
71
94
 
95
+ let onResponse: OnResponseFn = () => {}
96
+
72
97
  const transport = createTransport(
73
98
  {
74
99
  key,
@@ -77,11 +102,29 @@ export function fallback(
77
102
  const fetch = async (i: number = 0): Promise<any> => {
78
103
  const transport = transports[i]({ chain, retryCount: 0, timeout })
79
104
  try {
80
- return await transport.request({
105
+ const response = await transport.request({
81
106
  method,
82
107
  params,
83
108
  } as any)
109
+
110
+ onResponse({
111
+ method,
112
+ params: params as unknown[],
113
+ response,
114
+ transport,
115
+ status: 'success',
116
+ })
117
+
118
+ return response
84
119
  } catch (err) {
120
+ onResponse({
121
+ error: err as Error,
122
+ method,
123
+ params: params as unknown[],
124
+ transport,
125
+ status: 'error',
126
+ })
127
+
85
128
  // If the error is deterministic, we don't need to fall back.
86
129
  // So throw the error.
87
130
  if (isDeterministicError(err as Error)) throw err
@@ -100,6 +143,7 @@ export function fallback(
100
143
  type: 'fallback',
101
144
  },
102
145
  {
146
+ onResponse: (fn: OnResponseFn) => (onResponse = fn),
103
147
  transports: transports.map((fn) => fn({ chain, retryCount: 0 })),
104
148
  },
105
149
  )
@@ -22,8 +22,11 @@ export class BaseError extends Error {
22
22
  shortMessage: string
23
23
 
24
24
  override name = 'ViemError'
25
+ version = getVersion()
25
26
 
26
27
  constructor(shortMessage: string, args: BaseErrorParameters = {}) {
28
+ super()
29
+
27
30
  const details =
28
31
  args.cause instanceof BaseError
29
32
  ? args.cause.details
@@ -34,7 +37,8 @@ export class BaseError extends Error {
34
37
  args.cause instanceof BaseError
35
38
  ? args.cause.docsPath || args.docsPath
36
39
  : args.docsPath
37
- const message = [
40
+
41
+ this.message = [
38
42
  shortMessage || 'An error occurred.',
39
43
  '',
40
44
  ...(args.metaMessages ? [...args.metaMessages, ''] : []),
@@ -46,11 +50,9 @@ export class BaseError extends Error {
46
50
  ]
47
51
  : []),
48
52
  ...(details ? [`Details: ${details}`] : []),
49
- `Version: ${getVersion()}`,
53
+ `Version: ${this.version}`,
50
54
  ].join('\n')
51
55
 
52
- super(message)
53
-
54
56
  if (args.cause) this.cause = args.cause
55
57
  this.details = details
56
58
  this.docsPath = docsPath
@@ -63,8 +63,8 @@ export {
63
63
  export {
64
64
  EnsAvatarInvalidMetadataError,
65
65
  EnsAvatarInvalidNftUriError,
66
- EnsAvatarUriResolutionError,
67
66
  EnsAvatarUnsupportedNamespaceError,
67
+ EnsAvatarUriResolutionError,
68
68
  } from './ens.js'
69
69
 
70
70
  export { EstimateGasExecutionError } from './estimateGas.js'
@@ -87,6 +87,14 @@ export {
87
87
  } from './node.js'
88
88
 
89
89
  export {
90
+ HttpRequestError,
91
+ RpcRequestError,
92
+ TimeoutError,
93
+ WebSocketRequestError,
94
+ } from './request.js'
95
+
96
+ export {
97
+ ChainDisconnectedError,
90
98
  InternalRpcError,
91
99
  InvalidInputRpcError,
92
100
  InvalidParamsRpcError,
@@ -96,29 +104,25 @@ export {
96
104
  MethodNotFoundRpcError,
97
105
  MethodNotSupportedRpcError,
98
106
  ParseRpcError,
99
- RequestError,
107
+ ProviderDisconnectedError,
108
+ ProviderRpcError,
100
109
  ResourceNotFoundRpcError,
101
110
  ResourceUnavailableRpcError,
102
- RpcRequestError,
111
+ RpcError,
103
112
  SwitchChainError,
104
113
  TransactionRejectedRpcError,
114
+ UnauthorizedProviderError,
105
115
  UnknownRpcError,
116
+ UnsupportedProviderMethodError,
106
117
  UserRejectedRequestError,
107
- } from './request.js'
108
-
109
- export {
110
- HttpRequestError,
111
- RpcError,
112
- TimeoutError,
113
- WebSocketRequestError,
114
118
  } from './rpc.js'
115
119
 
116
120
  export {
117
121
  FeeConflictError,
118
122
  InvalidLegacyVError,
123
+ InvalidSerializableTransactionError,
119
124
  InvalidSerializedTransactionError,
120
125
  InvalidSerializedTransactionTypeError,
121
- InvalidSerializableTransactionError,
122
126
  InvalidStorageKeySizeError,
123
127
  TransactionExecutionError,
124
128
  TransactionNotFoundError,
@@ -1,191 +1,98 @@
1
+ import { stringify } from '../utils/index.js'
1
2
  import { BaseError } from './base.js'
2
- import type { RpcError } from './rpc.js'
3
-
4
- export class RequestError extends BaseError {
5
- constructor(
6
- err: Error,
7
- {
8
- docsPath,
9
- metaMessages,
10
- shortMessage,
11
- }: { docsPath?: string; metaMessages?: string[]; shortMessage: string },
12
- ) {
13
- super(shortMessage, {
14
- cause: err,
15
- docsPath,
16
- metaMessages:
17
- metaMessages || (err as { metaMessages?: string[] })?.metaMessages,
18
- })
19
- this.name = err.name
20
- }
21
- }
22
-
23
- export class RpcRequestError extends RequestError {
24
- code: number
25
-
26
- constructor(
27
- err: RpcError,
28
- { docsPath, shortMessage }: { docsPath?: string; shortMessage: string },
29
- ) {
30
- super(err, { docsPath, shortMessage })
31
- this.code = err.code
32
- this.name = err.name
33
- }
34
- }
35
-
36
- export class ParseRpcError extends RpcRequestError {
37
- override name = 'ParseRpcError'
38
- override code = -32700
39
-
40
- constructor(err: RpcError) {
41
- super(err, {
42
- shortMessage:
43
- 'Invalid JSON was received by the server. An error occurred on the server while parsing the JSON text.',
44
- })
45
- }
46
- }
47
-
48
- export class InvalidRequestRpcError extends RpcRequestError {
49
- override name = 'InvalidRequestRpcError'
50
- override code = -32600
51
-
52
- constructor(err: RpcError) {
53
- super(err, { shortMessage: 'JSON is not a valid request object.' })
54
- }
55
- }
56
-
57
- export class MethodNotFoundRpcError extends RpcRequestError {
58
- override name = 'MethodNotFoundRpcError'
59
- override code = -32601
60
-
61
- constructor(err: RpcError) {
62
- super(err, {
63
- shortMessage: 'The method does not exist / is not available.',
3
+ import { getUrl } from './utils.js'
4
+
5
+ export class HttpRequestError extends BaseError {
6
+ override name = 'HttpRequestError'
7
+
8
+ body: { [key: string]: unknown }
9
+ headers?: Headers
10
+ status?: number
11
+ url: string
12
+
13
+ constructor({
14
+ body,
15
+ details,
16
+ headers,
17
+ status,
18
+ url,
19
+ }: {
20
+ body: { [key: string]: unknown }
21
+ details?: string
22
+ headers?: Headers
23
+ status?: number
24
+ url: string
25
+ }) {
26
+ super('HTTP request failed.', {
27
+ details,
28
+ metaMessages: [
29
+ status && `Status: ${status}`,
30
+ `URL: ${getUrl(url)}`,
31
+ `Request body: ${stringify(body)}`,
32
+ ].filter(Boolean) as string[],
64
33
  })
65
- }
66
- }
67
-
68
- export class InvalidParamsRpcError extends RpcRequestError {
69
- override name = 'InvalidParamsRpcError'
70
- override code = -32602
71
-
72
- constructor(err: RpcError) {
73
- super(err, {
74
- shortMessage: [
75
- 'Invalid parameters were provided to the RPC method.',
76
- 'Double check you have provided the correct parameters.',
77
- ].join('\n'),
34
+ this.body = body
35
+ this.headers = headers
36
+ this.status = status
37
+ this.url = url
38
+ }
39
+ }
40
+
41
+ export class WebSocketRequestError extends BaseError {
42
+ override name = 'WebSocketRequestError'
43
+
44
+ constructor({
45
+ body,
46
+ details,
47
+ url,
48
+ }: {
49
+ body: { [key: string]: unknown }
50
+ details: string
51
+ url: string
52
+ }) {
53
+ super('WebSocket request failed.', {
54
+ details,
55
+ metaMessages: [`URL: ${getUrl(url)}`, `Request body: ${stringify(body)}`],
78
56
  })
79
57
  }
80
58
  }
81
59
 
82
- export class InternalRpcError extends RpcRequestError {
83
- override name = 'InternalRpcError'
84
- override code = -32603
85
-
86
- constructor(err: RpcError) {
87
- super(err, { shortMessage: 'An internal error was received.' })
88
- }
89
- }
90
-
91
- export class InvalidInputRpcError extends RpcRequestError {
92
- override name = 'InvalidInputRpcError'
93
- override code = -32000
94
-
95
- constructor(err: RpcError) {
96
- super(err, {
97
- shortMessage: [
98
- 'Missing or invalid parameters.',
99
- 'Double check you have provided the correct parameters.',
100
- ].join('\n'),
101
- })
102
- }
103
- }
60
+ export class RpcRequestError extends BaseError {
61
+ override name = 'RpcRequestError'
104
62
 
105
- export class ResourceNotFoundRpcError extends RpcRequestError {
106
- override name = 'ResourceNotFoundRpcError'
107
- override code = -32001
108
-
109
- constructor(err: RpcError) {
110
- super(err, { shortMessage: 'Requested resource not found.' })
111
- }
112
- }
113
-
114
- export class ResourceUnavailableRpcError extends RpcRequestError {
115
- override name = 'ResourceUnavailableRpcError'
116
- override code = -32002
117
-
118
- constructor(err: RpcError) {
119
- super(err, { shortMessage: 'Requested resource not available.' })
120
- }
121
- }
122
-
123
- export class TransactionRejectedRpcError extends RpcRequestError {
124
- override name = 'TransactionRejectedRpcError'
125
- override code = -32003
126
-
127
- constructor(err: RpcError) {
128
- super(err, { shortMessage: 'Transaction creation failed.' })
129
- }
130
- }
131
-
132
- export class MethodNotSupportedRpcError extends RpcRequestError {
133
- override name = 'MethodNotSupportedRpcError'
134
- override code = -32004
135
-
136
- constructor(err: RpcError) {
137
- super(err, { shortMessage: 'Method is not implemented.' })
138
- }
139
- }
140
-
141
- export class LimitExceededRpcError extends RpcRequestError {
142
- override name = 'LimitExceededRpcError'
143
- override code = -32005
144
-
145
- constructor(err: RpcError) {
146
- super(err, { shortMessage: 'Request exceeds defined limit.' })
147
- }
148
- }
149
-
150
- export class JsonRpcVersionUnsupportedError extends RpcRequestError {
151
- override name = 'JsonRpcVersionUnsupportedError'
152
- override code = -32006
153
-
154
- constructor(err: RpcError) {
155
- super(err, {
156
- shortMessage: 'Version of JSON-RPC protocol is not supported.',
157
- })
158
- }
159
- }
160
-
161
- export class UserRejectedRequestError extends RequestError {
162
- override name = 'UserRejectedRequestError'
163
- code = 4001
164
-
165
- constructor(err: Error) {
166
- super(err, {
167
- shortMessage: 'User rejected the request.',
168
- })
169
- }
170
- }
171
-
172
- export class SwitchChainError extends RequestError {
173
- override name = 'SwitchChainError'
174
- code = 4902
63
+ code: number
175
64
 
176
- constructor(err: Error) {
177
- super(err, {
178
- shortMessage: 'An error occurred when attempting to switch chain.',
65
+ constructor({
66
+ body,
67
+ error,
68
+ url,
69
+ }: {
70
+ body: { [key: string]: unknown }
71
+ error: { code: number; message: string }
72
+ url: string
73
+ }) {
74
+ super('RPC Request failed.', {
75
+ cause: error as any,
76
+ details: error.message,
77
+ metaMessages: [`URL: ${getUrl(url)}`, `Request body: ${stringify(body)}`],
179
78
  })
79
+ this.code = error.code
180
80
  }
181
81
  }
182
82
 
183
- export class UnknownRpcError extends RequestError {
184
- override name = 'UnknownRpcError'
83
+ export class TimeoutError extends BaseError {
84
+ override name = 'TimeoutError'
185
85
 
186
- constructor(err: Error) {
187
- super(err, {
188
- shortMessage: 'An unknown RPC error occurred.',
86
+ constructor({
87
+ body,
88
+ url,
89
+ }: {
90
+ body: { [key: string]: unknown }
91
+ url: string
92
+ }) {
93
+ super('The request took too long to respond.', {
94
+ details: 'The request timed out.',
95
+ metaMessages: [`URL: ${getUrl(url)}`, `Request body: ${stringify(body)}`],
189
96
  })
190
97
  }
191
98
  }