@bigmi/core 0.4.2 → 0.4.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/README.md +354 -23
  3. package/dist/cjs/errors/request.d.ts +2 -1
  4. package/dist/cjs/errors/request.js +2 -2
  5. package/dist/cjs/errors/request.js.map +1 -1
  6. package/dist/cjs/errors/rpc.d.ts +2 -1
  7. package/dist/cjs/errors/rpc.js +1 -0
  8. package/dist/cjs/errors/rpc.js.map +1 -1
  9. package/dist/cjs/transports/ankr/getBalance.js +2 -1
  10. package/dist/cjs/transports/ankr/getBalance.js.map +1 -1
  11. package/dist/cjs/transports/blockchair/getBalance.js +7 -2
  12. package/dist/cjs/transports/blockchair/getBalance.js.map +1 -1
  13. package/dist/cjs/transports/blockchair/getTransactionFee.js +7 -2
  14. package/dist/cjs/transports/blockchair/getTransactionFee.js.map +1 -1
  15. package/dist/cjs/transports/blockchair/getUTXOs.js +4 -1
  16. package/dist/cjs/transports/blockchair/getUTXOs.js.map +1 -1
  17. package/dist/cjs/transports/blockcypher/getBalance.js +5 -1
  18. package/dist/cjs/transports/blockcypher/getBalance.js.map +1 -1
  19. package/dist/cjs/transports/blockcypher/getTransactionFee.js +2 -1
  20. package/dist/cjs/transports/blockcypher/getTransactionFee.js.map +1 -1
  21. package/dist/cjs/transports/blockcypher/getUTXOs.js +2 -1
  22. package/dist/cjs/transports/blockcypher/getUTXOs.js.map +1 -1
  23. package/dist/cjs/transports/blockcypher/utils.d.ts +2 -0
  24. package/dist/cjs/transports/blockcypher/utils.js +11 -0
  25. package/dist/cjs/transports/blockcypher/utils.js.map +1 -0
  26. package/dist/cjs/transports/getHttpRpcClient.js +5 -1
  27. package/dist/cjs/transports/getHttpRpcClient.js.map +1 -1
  28. package/dist/cjs/types/actions.d.ts +4 -4
  29. package/dist/cjs/utils/buildRequest.js +1 -1
  30. package/dist/cjs/utils/buildRequest.js.map +1 -1
  31. package/dist/cjs/version.d.ts +1 -1
  32. package/dist/cjs/version.js +1 -1
  33. package/dist/esm/errors/request.d.ts +2 -1
  34. package/dist/esm/errors/request.js +2 -2
  35. package/dist/esm/errors/request.js.map +1 -1
  36. package/dist/esm/errors/rpc.d.ts +5 -1
  37. package/dist/esm/errors/rpc.js +4 -0
  38. package/dist/esm/errors/rpc.js.map +1 -1
  39. package/dist/esm/transports/ankr/getBalance.js +2 -1
  40. package/dist/esm/transports/ankr/getBalance.js.map +1 -1
  41. package/dist/esm/transports/blockchair/getBalance.js +7 -2
  42. package/dist/esm/transports/blockchair/getBalance.js.map +1 -1
  43. package/dist/esm/transports/blockchair/getTransactionFee.js +7 -2
  44. package/dist/esm/transports/blockchair/getTransactionFee.js.map +1 -1
  45. package/dist/esm/transports/blockchair/getUTXOs.js +4 -1
  46. package/dist/esm/transports/blockchair/getUTXOs.js.map +1 -1
  47. package/dist/esm/transports/blockcypher/getBalance.js +5 -1
  48. package/dist/esm/transports/blockcypher/getBalance.js.map +1 -1
  49. package/dist/esm/transports/blockcypher/getTransactionFee.js +2 -1
  50. package/dist/esm/transports/blockcypher/getTransactionFee.js.map +1 -1
  51. package/dist/esm/transports/blockcypher/getUTXOs.js +2 -1
  52. package/dist/esm/transports/blockcypher/getUTXOs.js.map +1 -1
  53. package/dist/esm/transports/blockcypher/utils.d.ts +2 -0
  54. package/dist/esm/transports/blockcypher/utils.js +8 -0
  55. package/dist/esm/transports/blockcypher/utils.js.map +1 -0
  56. package/dist/esm/transports/getHttpRpcClient.js +5 -1
  57. package/dist/esm/transports/getHttpRpcClient.js.map +1 -1
  58. package/dist/esm/types/actions.d.ts +4 -4
  59. package/dist/esm/utils/buildRequest.js +1 -1
  60. package/dist/esm/utils/buildRequest.js.map +1 -1
  61. package/dist/esm/version.d.ts +1 -1
  62. package/dist/esm/version.js +1 -1
  63. package/dist/types/errors/request.d.ts +2 -1
  64. package/dist/types/errors/request.d.ts.map +1 -1
  65. package/dist/types/errors/rpc.d.ts +5 -1
  66. package/dist/types/errors/rpc.d.ts.map +1 -1
  67. package/dist/types/transports/ankr/getBalance.d.ts.map +1 -1
  68. package/dist/types/transports/blockchair/getBalance.d.ts.map +1 -1
  69. package/dist/types/transports/blockchair/getTransactionFee.d.ts.map +1 -1
  70. package/dist/types/transports/blockchair/getUTXOs.d.ts.map +1 -1
  71. package/dist/types/transports/blockcypher/getBalance.d.ts.map +1 -1
  72. package/dist/types/transports/blockcypher/getTransactionFee.d.ts.map +1 -1
  73. package/dist/types/transports/blockcypher/getUTXOs.d.ts.map +1 -1
  74. package/dist/types/transports/blockcypher/utils.d.ts +3 -0
  75. package/dist/types/transports/blockcypher/utils.d.ts.map +1 -0
  76. package/dist/types/transports/getHttpRpcClient.d.ts.map +1 -1
  77. package/dist/types/types/actions.d.ts +4 -4
  78. package/dist/types/types/actions.d.ts.map +1 -1
  79. package/dist/types/version.d.ts +1 -1
  80. package/package.json +2 -2
  81. package/package.json.tmp +4 -4
  82. package/src/errors/request.ts +3 -1
  83. package/src/errors/rpc.ts +4 -0
  84. package/src/transports/ankr/ankr.spec.ts +10 -10
  85. package/src/transports/ankr/getBalance.ts +2 -1
  86. package/src/transports/blockchair/blockchair.spec.ts +97 -72
  87. package/src/transports/blockchair/getBalance.ts +10 -2
  88. package/src/transports/blockchair/getTransactionFee.ts +10 -2
  89. package/src/transports/blockchair/getUTXOs.ts +5 -1
  90. package/src/transports/blockcypher/blockcyper.spec.ts +1 -1
  91. package/src/transports/blockcypher/getBalance.ts +5 -1
  92. package/src/transports/blockcypher/getTransactionFee.ts +2 -1
  93. package/src/transports/blockcypher/getUTXOs.ts +2 -1
  94. package/src/transports/blockcypher/utils.ts +8 -0
  95. package/src/transports/fallback.spec.ts +10 -10
  96. package/src/transports/getHttpRpcClient.ts +5 -1
  97. package/src/transports/mempool/mempool.spec.ts +11 -11
  98. package/src/types/actions.ts +4 -5
  99. package/src/utils/buildRequest.ts +1 -1
  100. package/src/version.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"getBalance.d.ts","sourceRoot":"","sources":["../../../../src/transports/ankr/getBalance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAGnD,eAAO,MAAM,UAAU,EAAE,gBAAgB,CAAC,YAAY,CAqBrD,CAAA"}
1
+ {"version":3,"file":"getBalance.d.ts","sourceRoot":"","sources":["../../../../src/transports/ankr/getBalance.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAGnD,eAAO,MAAM,UAAU,EAAE,gBAAgB,CAAC,YAAY,CAqBrD,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"getBalance.d.ts","sourceRoot":"","sources":["../../../../src/transports/blockchair/getBalance.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAMnD,eAAO,MAAM,UAAU,EAAE,gBAAgB,CAAC,YAAY,CAwBrD,CAAA"}
1
+ {"version":3,"file":"getBalance.d.ts","sourceRoot":"","sources":["../../../../src/transports/blockchair/getBalance.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAMnD,eAAO,MAAM,UAAU,EAAE,gBAAgB,CAAC,YAAY,CA+BrD,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"getTransactionFee.d.ts","sourceRoot":"","sources":["../../../../src/transports/blockchair/getTransactionFee.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAGnD,eAAO,MAAM,iBAAiB,EAAE,gBAAgB,CAAC,mBAAmB,CA2BnE,CAAA"}
1
+ {"version":3,"file":"getTransactionFee.d.ts","sourceRoot":"","sources":["../../../../src/transports/blockchair/getTransactionFee.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAGnD,eAAO,MAAM,iBAAiB,EAAE,gBAAgB,CAAC,mBAAmB,CAkCnE,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"getUTXOs.d.ts","sourceRoot":"","sources":["../../../../src/transports/blockchair/getUTXOs.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAoBnD,eAAO,MAAM,QAAQ,EAAE,gBAAgB,CAAC,UAAU,CA+FjD,CAAA"}
1
+ {"version":3,"file":"getUTXOs.d.ts","sourceRoot":"","sources":["../../../../src/transports/blockchair/getUTXOs.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAoBnD,eAAO,MAAM,QAAQ,EAAE,gBAAgB,CAAC,UAAU,CAkGjD,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"getBalance.d.ts","sourceRoot":"","sources":["../../../../src/transports/blockcypher/getBalance.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAGnD,eAAO,MAAM,UAAU,EAAE,gBAAgB,CAAC,YAAY,CAoBrD,CAAA"}
1
+ {"version":3,"file":"getBalance.d.ts","sourceRoot":"","sources":["../../../../src/transports/blockcypher/getBalance.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAInD,eAAO,MAAM,UAAU,EAAE,gBAAgB,CAAC,YAAY,CAuBrD,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"getTransactionFee.d.ts","sourceRoot":"","sources":["../../../../src/transports/blockcypher/getTransactionFee.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAGnD,eAAO,MAAM,iBAAiB,EAAE,gBAAgB,CAAC,mBAAmB,CAuBnE,CAAA"}
1
+ {"version":3,"file":"getTransactionFee.d.ts","sourceRoot":"","sources":["../../../../src/transports/blockcypher/getTransactionFee.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAInD,eAAO,MAAM,iBAAiB,EAAE,gBAAgB,CAAC,mBAAmB,CAuBnE,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"getUTXOs.d.ts","sourceRoot":"","sources":["../../../../src/transports/blockcypher/getUTXOs.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAkBnD,eAAO,MAAM,QAAQ,EAAE,gBAAgB,CAAC,UAAU,CA6EjD,CAAA"}
1
+ {"version":3,"file":"getUTXOs.d.ts","sourceRoot":"","sources":["../../../../src/transports/blockcypher/getUTXOs.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAmBnD,eAAO,MAAM,QAAQ,EAAE,gBAAgB,CAAC,UAAU,CA6EjD,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { RpcErrorCode } from '../../errors/rpc.js';
2
+ export declare function getRpcErrorCode(error: string): RpcErrorCode;
3
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/transports/blockcypher/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAElD,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,CAK3D"}
@@ -1 +1 @@
1
- {"version":3,"file":"getHttpRpcClient.d.ts","sourceRoot":"","sources":["../../../src/transports/getHttpRpcClient.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAIrD,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,CAAC,EAAE,KAAK,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,GAAG,CAAA;IACZ,EAAE,CAAC,EAAE,MAAM,CAAA;CACZ,CAAA;AAED,MAAM,MAAM,qBAAqB,CAC/B,IAAI,SAAS,UAAU,GAAG,UAAU,EAAE,GAAG,UAAU,IACjD,IAAI,SAAS,UAAU,EAAE,GAAG,WAAW,EAAE,GAAG,WAAW,CAAA;AAE3D,MAAM,MAAM,oBAAoB,GAAG;IACjC,gDAAgD;IAChD,YAAY,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,GAAG,SAAS,CAAA;IACpD,wCAAwC;IACxC,SAAS,CAAC,EACN,CAAC,CACC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,WAAW,KACd,YAAY,CACf,IAAI,GAAG,SAAS,GAAG,CAAC,WAAW,GAAG;QAAE,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,CAAC,CAChE,CAAC,GACF,SAAS,CAAA;IACb,yCAAyC;IACzC,UAAU,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,SAAS,CAAA;IACvE,2CAA2C;IAC3C,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAC7B,CAAA;AAED,MAAM,MAAM,qBAAqB,CAC/B,IAAI,SAAS,UAAU,GAAG,UAAU,EAAE,GAAG,UAAU,IACjD;IACF,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,4BAA4B;IAC5B,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,gDAAgD;IAChD,YAAY,CAAC,EAAE,oBAAoB,CAAC,cAAc,CAAC,GAAG,SAAS,CAAA;IAC/D,yCAAyC;IACzC,SAAS,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,SAAS,CAAA;IACpE,yCAAyC;IACzC,UAAU,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,SAAS,CAAA;IACvE,2CAA2C;IAC3C,OAAO,CAAC,EAAE,oBAAoB,CAAC,SAAS,CAAC,GAAG,SAAS,CAAA;CACtD,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,CAAC,IAAI,SAAS,UAAU,GAAG,UAAU,EAAE,EAC5C,MAAM,EAAE,qBAAqB,CAAC,IAAI,CAAC,GAClC,OAAO,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAA;CACxC,CAAA;AAED,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,oBAAyB,GACjC,aAAa,CAqFf"}
1
+ {"version":3,"file":"getHttpRpcClient.d.ts","sourceRoot":"","sources":["../../../src/transports/getHttpRpcClient.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAIrD,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,CAAC,EAAE,KAAK,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,GAAG,CAAA;IACZ,EAAE,CAAC,EAAE,MAAM,CAAA;CACZ,CAAA;AAED,MAAM,MAAM,qBAAqB,CAC/B,IAAI,SAAS,UAAU,GAAG,UAAU,EAAE,GAAG,UAAU,IACjD,IAAI,SAAS,UAAU,EAAE,GAAG,WAAW,EAAE,GAAG,WAAW,CAAA;AAE3D,MAAM,MAAM,oBAAoB,GAAG;IACjC,gDAAgD;IAChD,YAAY,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,GAAG,SAAS,CAAA;IACpD,wCAAwC;IACxC,SAAS,CAAC,EACN,CAAC,CACC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,WAAW,KACd,YAAY,CACf,IAAI,GAAG,SAAS,GAAG,CAAC,WAAW,GAAG;QAAE,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,CAAC,CAChE,CAAC,GACF,SAAS,CAAA;IACb,yCAAyC;IACzC,UAAU,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,SAAS,CAAA;IACvE,2CAA2C;IAC3C,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAC7B,CAAA;AAED,MAAM,MAAM,qBAAqB,CAC/B,IAAI,SAAS,UAAU,GAAG,UAAU,EAAE,GAAG,UAAU,IACjD;IACF,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,4BAA4B;IAC5B,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,gDAAgD;IAChD,YAAY,CAAC,EAAE,oBAAoB,CAAC,cAAc,CAAC,GAAG,SAAS,CAAA;IAC/D,yCAAyC;IACzC,SAAS,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,SAAS,CAAA;IACpE,yCAAyC;IACzC,UAAU,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,SAAS,CAAA;IACvE,2CAA2C;IAC3C,OAAO,CAAC,EAAE,oBAAoB,CAAC,SAAS,CAAC,GAAG,SAAS,CAAA;CACtD,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,CAAC,IAAI,SAAS,UAAU,GAAG,UAAU,EAAE,EAC5C,MAAM,EAAE,qBAAqB,CAAC,IAAI,CAAC,GAClC,OAAO,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAA;CACxC,CAAA;AAED,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,oBAAyB,GACjC,aAAa,CAyFf"}
@@ -1,7 +1,7 @@
1
- import type { SendUTXOTransactionParameters, SendUTXOTransactionReturnType } from '../actions/sendUTXOTransaction';
2
- import type { WaitForTransactionReceiptParameters } from '../actions/waitForTransaction';
3
- import type { SignPsbtParameters, SignPsbtReturnType } from '../transports/types';
4
- import type { UTXOTransaction } from './transaction';
1
+ import type { SendUTXOTransactionParameters, SendUTXOTransactionReturnType } from '../actions/sendUTXOTransaction.js';
2
+ import type { WaitForTransactionReceiptParameters } from '../actions/waitForTransaction.js';
3
+ import type { SignPsbtParameters, SignPsbtReturnType } from '../transports/types.js';
4
+ import type { UTXOTransaction } from './transaction.js';
5
5
  export type WaitForTransactionReceiptReturnType = UTXOTransaction;
6
6
  export type WithRetryParameters = {
7
7
  delay?: ((config: {
@@ -1 +1 @@
1
- {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../../src/types/actions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,6BAA6B,EAC7B,6BAA6B,EAC9B,MAAM,gCAAgC,CAAA;AAEvC,OAAO,KAAK,EAAE,mCAAmC,EAAE,MAAM,+BAA+B,CAAA;AACxF,OAAO,KAAK,EACV,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAEpD,MAAM,MAAM,mCAAmC,GAAG,eAAe,CAAA;AAEjE,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;CAChC,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B;;OAEG;IACH,mBAAmB,EAAE,CACnB,IAAI,EAAE,6BAA6B,KAChC,OAAO,CAAC,6BAA6B,CAAC,CAAA;IAE3C,QAAQ,EAAE,CAAC,IAAI,EAAE,kBAAkB,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAA;IAEnE,yBAAyB,EAAE,CACzB,IAAI,EAAE,mCAAmC,KACtC,OAAO,CAAC,mCAAmC,CAAC,CAAA;CAClD,CAAA"}
1
+ {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../../src/types/actions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,6BAA6B,EAC7B,6BAA6B,EAC9B,MAAM,mCAAmC,CAAA;AAC1C,OAAO,KAAK,EAAE,mCAAmC,EAAE,MAAM,kCAAkC,CAAA;AAC3F,OAAO,KAAK,EACV,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAEvD,MAAM,MAAM,mCAAmC,GAAG,eAAe,CAAA;AAEjE,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;CAChC,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B;;OAEG;IACH,mBAAmB,EAAE,CACnB,IAAI,EAAE,6BAA6B,KAChC,OAAO,CAAC,6BAA6B,CAAC,CAAA;IAE3C,QAAQ,EAAE,CAAC,IAAI,EAAE,kBAAkB,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAA;IAEnE,yBAAyB,EAAE,CACzB,IAAI,EAAE,mCAAmC,KACtC,OAAO,CAAC,mCAAmC,CAAC,CAAA;CAClD,CAAA"}
@@ -1,3 +1,3 @@
1
1
  export declare const name = "@bigmi/core";
2
- export declare const version = "0.4.2";
2
+ export declare const version = "0.4.4";
3
3
  //# sourceMappingURL=version.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bigmi/core",
3
- "version": "0.4.2",
3
+ "version": "0.4.4",
4
4
  "description": "TypeScript library for Bitcoin apps.",
5
5
  "type": "module",
6
6
  "main": "./dist/esm/index.js",
@@ -32,7 +32,7 @@
32
32
  "bitcoinjs-lib": "^7.0.0-rc.0",
33
33
  "bs58": "^6.0.0",
34
34
  "eventemitter3": "^5.0.1",
35
- "zustand": "^5.0.6"
35
+ "zustand": "^5.0.7"
36
36
  },
37
37
  "peerDependencies": {
38
38
  "bs58": "^6.0.0"
package/package.json.tmp CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bigmi/core",
3
- "version": "0.4.2",
3
+ "version": "0.4.4",
4
4
  "description": "TypeScript library for Bitcoin apps.",
5
5
  "type": "module",
6
6
  "main": "./src/index.ts",
@@ -50,13 +50,13 @@
50
50
  "bitcoinjs-lib": "^7.0.0-rc.0",
51
51
  "bs58": "^6.0.0",
52
52
  "eventemitter3": "^5.0.1",
53
- "zustand": "^5.0.6"
53
+ "zustand": "^5.0.7"
54
54
  },
55
55
  "devDependencies": {
56
56
  "@vitest/coverage-v8": "^3.2.4",
57
- "cpy-cli": "^5.0.0",
57
+ "cpy-cli": "^6.0.0",
58
58
  "madge": "^8.0.0",
59
- "typescript": "^5.7.3",
59
+ "typescript": "^5.9.2",
60
60
  "vitest": "^3.2.4"
61
61
  },
62
62
  "peerDependencies": {
@@ -121,12 +121,14 @@ export class TimeoutError extends BaseError {
121
121
  constructor({
122
122
  body,
123
123
  url,
124
+ timeout,
124
125
  }: {
125
126
  body: { [x: string]: unknown } | { [y: string]: unknown }[]
126
127
  url: string
128
+ timeout: number
127
129
  }) {
128
130
  super('The request took too long to respond.', {
129
- details: 'The request timed out.',
131
+ details: `The request timed out after ${timeout}ms.`,
130
132
  metaMessages: [`URL: ${getUrl(url)}`, `Request body: ${stringify(body)}`],
131
133
  name: 'TimeoutError',
132
134
  })
package/src/errors/rpc.ts CHANGED
@@ -39,6 +39,10 @@ export enum RpcErrorCode {
39
39
  * The client does not have permission to access the requested resource.
40
40
  */
41
41
  ACCESS_DENIED = -32002,
42
+ /**
43
+ * Unknown generic errors
44
+ */
45
+ MISC_ERROR = -1,
42
46
  }
43
47
 
44
48
  export class UserRejectedRequestError extends BaseError {
@@ -1,26 +1,26 @@
1
1
  import { beforeEach, describe, expect, it, vi } from 'vitest'
2
- import { getBalance } from '../../actions/getBalance'
3
- import { getTransactionFee } from '../../actions/getTransactionFee'
4
- import { getTransactions } from '../../actions/getTransactions'
5
- import { bitcoin } from '../../chains/bitcoin'
6
- import { createClient, rpcSchema } from '../../factories/createClient'
7
- import { createMockResponse } from '../../test/utils'
2
+ import { getBalance } from '../../actions/getBalance.js'
3
+ import { getTransactionFee } from '../../actions/getTransactionFee.js'
4
+ import { getTransactions } from '../../actions/getTransactions.js'
5
+ import { bitcoin } from '../../chains/bitcoin.js'
6
+ import { createClient, rpcSchema } from '../../factories/createClient.js'
7
+ import { createMockResponse } from '../../test/utils.js'
8
8
  import {
9
9
  INVALID_TX_ID,
10
10
  TX_FEE,
11
11
  VALID_TX_ID,
12
- } from '../__mocks__/getTransactionFee'
13
- import type { UTXOSchema } from '../types'
12
+ } from '../__mocks__/getTransactionFee.js'
13
+ import type { UTXOSchema } from '../types.js'
14
14
  import getBalanceResponse from './__mocks__/getBalance/valid.json'
15
15
  import getInValidTransactionFeeResponse from './__mocks__/getTransactionFee/invalid.json'
16
16
  import getValidTransactionFeeResponse from './__mocks__/getTransactionFee/valid.json'
17
17
  import getTransactionsValidResponse from './__mocks__/getTransactions/valid.json'
18
- import { ankr } from './ankr'
18
+ import { ankr } from './ankr.js'
19
19
  import type {
20
20
  AnkrAddressWithTxnsResponse,
21
21
  AnkrBalanceResponse,
22
22
  AnkrTxnResponse,
23
- } from './ankr.types'
23
+ } from './ankr.types.js'
24
24
 
25
25
  const ANKR_KEY = import.meta.env.VITE_TEST_ANKR_KEY
26
26
  const address = import.meta.env.VITE_TEST_ADDRESS
@@ -1,3 +1,4 @@
1
+ import { RpcErrorCode } from '../../errors/rpc.js'
1
2
  import type { RpcMethodHandler } from '../types.js'
2
3
  import type { AnkrBalanceResponse } from './ankr.types.js'
3
4
 
@@ -16,7 +17,7 @@ export const getBalance: RpcMethodHandler<'getBalance'> = async (
16
17
  })) as unknown as AnkrBalanceResponse
17
18
  if (response.error) {
18
19
  return {
19
- error: { code: -1, message: response.error },
20
+ error: { code: RpcErrorCode.MISC_ERROR, message: response.error },
20
21
  }
21
22
  }
22
23
  return {
@@ -1,18 +1,18 @@
1
1
  import { beforeEach, describe, expect, it, vi } from 'vitest'
2
- import { getBalance } from '../../actions/getBalance'
3
- import { getTransactionFee } from '../../actions/getTransactionFee'
4
- import { getUTXOs } from '../../actions/getUTXOs'
5
- import { bitcoin } from '../../chains/bitcoin'
6
- import { BaseError } from '../../errors/base'
7
- import { InsufficientUTXOBalanceError } from '../../errors/utxo'
8
- import { createClient, rpcSchema } from '../../factories/createClient'
9
- import { createMockResponse } from '../../test/utils'
2
+ import { getBalance } from '../../actions/getBalance.js'
3
+ import { getTransactionFee } from '../../actions/getTransactionFee.js'
4
+ import { getUTXOs } from '../../actions/getUTXOs.js'
5
+ import { bitcoin } from '../../chains/bitcoin.js'
6
+ import { BaseError } from '../../errors/base.js'
7
+ import { InsufficientUTXOBalanceError } from '../../errors/utxo.js'
8
+ import { createClient, rpcSchema } from '../../factories/createClient.js'
9
+ import { createMockResponse } from '../../test/utils.js'
10
10
  import {
11
11
  INVALID_TX_ID,
12
12
  TX_FEE,
13
13
  VALID_TX_ID,
14
- } from '../__mocks__/getTransactionFee'
15
- import type { UTXOSchema } from '../types'
14
+ } from '../__mocks__/getTransactionFee.js'
15
+ import type { UTXOSchema } from '../types.js'
16
16
  import getInvalidBalanceReponse from './__mocks__/getBalance/invalidAddress.json'
17
17
  import getBalanceReponse from './__mocks__/getBalance/valid.json'
18
18
  import getTransactionFeeInvalidResponse from './__mocks__/getTransactionFee/invalid.json'
@@ -25,7 +25,7 @@ import type {
25
25
  BlockChairDashboardAddressResponse,
26
26
  BlockchairAddressBalanceData,
27
27
  BlockchairResponse,
28
- } from './blockchair.types'
28
+ } from './blockchair.types.js'
29
29
 
30
30
  const address = import.meta.env.VITE_TEST_ADDRESS
31
31
  const apiKey = import.meta.env.VITE_TEST_BLOCKCHAIR_KEY
@@ -47,20 +47,24 @@ describe('Blockchair Transport', () => {
47
47
 
48
48
  describe('getBalance', () => {
49
49
  it('should fetch correct balance for valid address', async () => {
50
- vi.spyOn(global, 'fetch').mockResolvedValue(
51
- createMockResponse(getBalanceReponse as BlockchairAddressBalanceData)
52
- )
50
+ if (USE_MOCK) {
51
+ vi.spyOn(global, 'fetch').mockResolvedValue(
52
+ createMockResponse(getBalanceReponse as BlockchairAddressBalanceData)
53
+ )
54
+ }
53
55
 
54
56
  const balance = await getBalance(publicClient, { address })
55
57
  expect(balance).toBeTypeOf('bigint')
56
58
  })
57
59
 
58
60
  it('should throw error for non-existent address', async () => {
59
- vi.spyOn(global, 'fetch').mockResolvedValue(
60
- createMockResponse(
61
- getInvalidBalanceReponse as BlockchairAddressBalanceData
61
+ if (USE_MOCK) {
62
+ vi.spyOn(global, 'fetch').mockResolvedValue(
63
+ createMockResponse(
64
+ getInvalidBalanceReponse as BlockchairAddressBalanceData
65
+ )
62
66
  )
63
- )
67
+ }
64
68
 
65
69
  const nonExistentAddress =
66
70
  '1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNaNUIBNSUENopnoidsacn'
@@ -72,11 +76,13 @@ describe('Blockchair Transport', () => {
72
76
 
73
77
  describe('getUTXOs', () => {
74
78
  it('should return utxos with correct structure', async () => {
75
- vi.spyOn(global, 'fetch').mockResolvedValue(
76
- createMockResponse(
77
- getUTXOsResponse as BlockchairResponse<BlockChairDashboardAddressResponse>
79
+ if (USE_MOCK) {
80
+ vi.spyOn(global, 'fetch').mockResolvedValue(
81
+ createMockResponse(
82
+ getUTXOsResponse as BlockchairResponse<BlockChairDashboardAddressResponse>
83
+ )
78
84
  )
79
- )
85
+ }
80
86
 
81
87
  const utxos = await getUTXOs(publicClient, { address })
82
88
 
@@ -91,27 +97,29 @@ describe('Blockchair Transport', () => {
91
97
  })
92
98
 
93
99
  it('should throw error when minValue exceeds balance', async () => {
94
- vi.spyOn(global, 'fetch').mockImplementation((request) => {
95
- const url = new URL(request.toString())
100
+ if (USE_MOCK) {
101
+ vi.spyOn(global, 'fetch').mockImplementation((request) => {
102
+ const url = new URL(request.toString())
96
103
 
97
- if (url.pathname.includes('/addresses/balances')) {
98
- return Promise.resolve(
99
- createMockResponse(
100
- getBalanceReponse as BlockchairAddressBalanceData
104
+ if (url.pathname.includes('/addresses/balances')) {
105
+ return Promise.resolve(
106
+ createMockResponse(
107
+ getBalanceReponse as BlockchairAddressBalanceData
108
+ )
101
109
  )
102
- )
103
- }
110
+ }
104
111
 
105
- if (url.pathname.includes('/dashboards/addresses')) {
106
- return Promise.resolve(
107
- createMockResponse(
108
- getUTXOsResponse as BlockchairResponse<BlockChairDashboardAddressResponse>
112
+ if (url.pathname.includes('/dashboards/addresses')) {
113
+ return Promise.resolve(
114
+ createMockResponse(
115
+ getUTXOsResponse as BlockchairResponse<BlockChairDashboardAddressResponse>
116
+ )
109
117
  )
110
- )
111
- }
118
+ }
112
119
 
113
- throw new BaseError(`Unexpected URL: ${url.pathname}`)
114
- })
120
+ throw new BaseError(`Unexpected URL: ${url.pathname}`)
121
+ })
122
+ }
115
123
 
116
124
  const hugeValue = 999999999999999999n
117
125
  await expect(
@@ -123,14 +131,26 @@ describe('Blockchair Transport', () => {
123
131
  })
124
132
 
125
133
  it('should handle empty UTXO response', async () => {
126
- vi.spyOn(global, 'fetch').mockResolvedValue(
127
- createMockResponse(getUTXOsInvalidResponse as BlockchairResponse<null>)
128
- )
134
+ if (USE_MOCK) {
135
+ vi.spyOn(global, 'fetch').mockResolvedValue(
136
+ createMockResponse(
137
+ getUTXOsInvalidResponse as BlockchairResponse<null>
138
+ )
139
+ )
140
+ }
129
141
 
130
142
  const emptyAddress = '12LRT14SgNFFQ3hMRThAyXNao24BBy5cyU'
131
- const utxos = await getUTXOs(publicClient, { address: emptyAddress })
132
143
 
133
- expect(utxos.length).toBe(0)
144
+ if (USE_MOCK) {
145
+ const utxos = await getUTXOs(publicClient, { address: emptyAddress })
146
+ expect(utxos.length).toBe(0)
147
+ } else {
148
+ await expect(
149
+ getUTXOs(publicClient, { address: emptyAddress })
150
+ ).rejects.toMatchObject({
151
+ status: 404,
152
+ })
153
+ }
134
154
  })
135
155
 
136
156
  describe('pagination', () => {
@@ -155,37 +175,40 @@ describe('Blockchair Transport', () => {
155
175
  })
156
176
 
157
177
  it('should handle pagination correctly', async () => {
158
- vi.spyOn(global, 'fetch').mockImplementation((request) => {
159
- const url = new URL(request.toString())
160
-
161
- if (url.pathname.includes('/addresses/balances')) {
162
- return Promise.resolve(
163
- createMockResponse({
164
- data: {
165
- [addressWithManyUTXOs]: 1000000000000,
166
- },
167
- context: { code: 200 },
168
- } as BlockchairResponse<BlockchairAddressBalanceData>)
169
- )
170
- }
178
+ if (USE_MOCK) {
179
+ vi.spyOn(global, 'fetch').mockImplementation((request) => {
180
+ const url = new URL(request.toString())
181
+
182
+ if (url.pathname.includes('/addresses/balances')) {
183
+ return Promise.resolve(
184
+ createMockResponse({
185
+ data: {
186
+ [addressWithManyUTXOs]: 1000000000000,
187
+ },
188
+ context: { code: 200 },
189
+ } as BlockchairResponse<BlockchairAddressBalanceData>)
190
+ )
191
+ }
171
192
 
172
- if (url.pathname.includes('/dashboards/addresses')) {
173
- const offset = Number.parseInt(
174
- url.searchParams.get('offset')?.split(',')[1] || '0'
175
- )
176
- const limit = 100
177
- return Promise.resolve(
178
- createMockResponse(
179
- createPaginatedMockResponse(
180
- offset,
181
- limit
182
- ) as BlockchairResponse<BlockChairDashboardAddressResponse>
193
+ if (url.pathname.includes('/dashboards/addresses')) {
194
+ const offset = Number.parseInt(
195
+ url.searchParams.get('offset')?.split(',')[1] || '0',
196
+ 10
183
197
  )
184
- )
185
- }
198
+ const limit = 100
199
+ return Promise.resolve(
200
+ createMockResponse(
201
+ createPaginatedMockResponse(
202
+ offset,
203
+ limit
204
+ ) as BlockchairResponse<BlockChairDashboardAddressResponse>
205
+ )
206
+ )
207
+ }
186
208
 
187
- throw new BaseError(`Unexpected URL: ${url.pathname}`)
188
- })
209
+ throw new BaseError(`Unexpected URL: ${url.pathname}`)
210
+ })
211
+ }
189
212
 
190
213
  const utxos = await getUTXOs(publicClient, {
191
214
  address: addressWithManyUTXOs,
@@ -194,7 +217,9 @@ describe('Blockchair Transport', () => {
194
217
 
195
218
  expect(utxos.length).toBeGreaterThan(0)
196
219
  expect(new Set(utxos.map((utxo) => utxo.txId)).size).toBe(utxos.length)
197
- expect(global.fetch).toHaveBeenCalled()
220
+ if (USE_MOCK) {
221
+ expect(global.fetch).toHaveBeenCalled()
222
+ }
198
223
 
199
224
  const totalValue = utxos.reduce((sum, utxo) => sum + utxo.value, 0)
200
225
  expect(totalValue).toBeGreaterThanOrEqual(minValue)
@@ -1,3 +1,4 @@
1
+ import { RpcErrorCode } from '../../errors/rpc.js'
1
2
  import { urlWithParams } from '../../utils/url.js'
2
3
  import type { RpcMethodHandler } from '../types.js'
3
4
  import type {
@@ -18,10 +19,17 @@ export const getBalance: RpcMethodHandler<'getBalance'> = async (
18
19
  url: apiUrl,
19
20
  fetchOptions: { method: 'GET' },
20
21
  })) as unknown as BlockchairResponse<BlockchairAddressBalanceData>
21
- if (response.context?.code !== 200) {
22
+ if (
23
+ response.data[address] === undefined ||
24
+ response.context.error ||
25
+ response.context?.code !== 200
26
+ ) {
22
27
  return {
23
28
  error: {
24
- code: response.context?.code,
29
+ code:
30
+ response.context.code === 429
31
+ ? RpcErrorCode.ACCESS_DENIED
32
+ : RpcErrorCode.MISC_ERROR,
25
33
  message: response.context?.error,
26
34
  },
27
35
  }
@@ -1,3 +1,4 @@
1
+ import { RpcErrorCode } from '../../errors/rpc.js'
1
2
  import { urlWithParams } from '../../utils/url.js'
2
3
  import type { RpcMethodHandler } from '../types.js'
3
4
  import type { BlockchairTransactionResponse } from './blockchair.types.js'
@@ -17,10 +18,17 @@ export const getTransactionFee: RpcMethodHandler<'getTransactionFee'> = async (
17
18
  },
18
19
  })) as unknown as BlockchairTransactionResponse
19
20
 
20
- if (response.context?.code !== 200) {
21
+ if (
22
+ !response.data[txId] ||
23
+ response.context.error ||
24
+ response.context?.code !== 200
25
+ ) {
21
26
  return {
22
27
  error: {
23
- code: response.context?.code,
28
+ code:
29
+ response.context.code === 429
30
+ ? RpcErrorCode.ACCESS_DENIED
31
+ : RpcErrorCode.MISC_ERROR,
24
32
  message: response.context?.error,
25
33
  },
26
34
  }
@@ -1,4 +1,5 @@
1
1
  import { RpcRequestError } from '../../errors/request.js'
2
+ import { RpcErrorCode } from '../../errors/rpc.js'
2
3
  import { InsufficientUTXOBalanceError } from '../../errors/utxo.js'
3
4
  import type { UTXO } from '../../types/transaction.js'
4
5
 
@@ -57,7 +58,10 @@ export const getUTXOs: RpcMethodHandler<'getUTXOs'> = async (
57
58
  },
58
59
  },
59
60
  error: {
60
- code: response.context.code,
61
+ code:
62
+ response.context.code === 429
63
+ ? RpcErrorCode.ACCESS_DENIED
64
+ : RpcErrorCode.MISC_ERROR,
61
65
  message: response.context.error || 'Error fetching utxos',
62
66
  },
63
67
  })
@@ -10,7 +10,7 @@ import {
10
10
  INVALID_TX_ID,
11
11
  TX_FEE,
12
12
  VALID_TX_ID,
13
- } from '../__mocks__/getTransactionFee'
13
+ } from '../__mocks__/getTransactionFee.js'
14
14
  import type { UTXOSchema } from '../types.js'
15
15
  import getBalanceInValidResponse from './__mocks__/getBalance/invalid.json'
16
16
  import getBalanceValidResponse from './__mocks__/getBalance/valid.json'
@@ -1,6 +1,7 @@
1
1
  import { urlWithParams } from '../../utils/url.js'
2
2
  import type { RpcMethodHandler } from '../types.js'
3
3
  import type { BlockcypherBalanceResponse } from './blockcypher.types.js'
4
+ import { getRpcErrorCode } from './utils.js'
4
5
 
5
6
  export const getBalance: RpcMethodHandler<'getBalance'> = async (
6
7
  client,
@@ -16,7 +17,10 @@ export const getBalance: RpcMethodHandler<'getBalance'> = async (
16
17
  })) as unknown as BlockcypherBalanceResponse
17
18
  if (response.error) {
18
19
  return {
19
- error: { code: -1, message: response.error },
20
+ error: {
21
+ code: getRpcErrorCode(response.error),
22
+ message: response.error,
23
+ },
20
24
  }
21
25
  }
22
26
  return {
@@ -1,6 +1,7 @@
1
1
  import { urlWithParams } from '../../utils/url.js'
2
2
  import type { RpcMethodHandler } from '../types.js'
3
3
  import type { BlockcypherTransactionReponse } from './blockcypher.types.js'
4
+ import { getRpcErrorCode } from './utils.js'
4
5
 
5
6
  export const getTransactionFee: RpcMethodHandler<'getTransactionFee'> = async (
6
7
  client,
@@ -18,7 +19,7 @@ export const getTransactionFee: RpcMethodHandler<'getTransactionFee'> = async (
18
19
 
19
20
  if (response.error) {
20
21
  return {
21
- error: { code: -1, message: response.error },
22
+ error: { code: getRpcErrorCode(response.error), message: response.error },
22
23
  }
23
24
  }
24
25
 
@@ -7,6 +7,7 @@ import type {
7
7
  BlockcypherUTXO,
8
8
  BlockcypherUTXOsResponse,
9
9
  } from './blockcypher.types.js'
10
+ import { getRpcErrorCode } from './utils.js'
10
11
 
11
12
  const blockcypherUTXOTransformer = (utxo: BlockcypherUTXO): UTXO => ({
12
13
  blockHeight: utxo.block_height,
@@ -53,7 +54,7 @@ export const getUTXOs: RpcMethodHandler<'getUTXOs'> = async (
53
54
  },
54
55
  },
55
56
  error: {
56
- code: -1,
57
+ code: getRpcErrorCode(response.error),
57
58
  message: response.error,
58
59
  },
59
60
  })
@@ -0,0 +1,8 @@
1
+ import { RpcErrorCode } from '../../errors/rpc.js'
2
+
3
+ export function getRpcErrorCode(error: string): RpcErrorCode {
4
+ if (error.toLowerCase().startsWith('rate limit exceeded')) {
5
+ return RpcErrorCode.ACCESS_DENIED
6
+ }
7
+ return RpcErrorCode.MISC_ERROR
8
+ }
@@ -1,18 +1,18 @@
1
1
  import { beforeEach, describe, expect, it, vi } from 'vitest'
2
- import { getUTXOs } from '../actions/getUTXOs'
3
- import { bitcoin } from '../chains/bitcoin'
4
- import { AllTransportsFailedError } from '../errors/transport'
5
- import { InsufficientUTXOBalanceError } from '../errors/utxo'
6
- import { createClient, rpcSchema } from '../factories/createClient'
7
- import { createMockResponse } from '../test/utils'
2
+ import { getUTXOs } from '../actions/getUTXOs.js'
3
+ import { bitcoin } from '../chains/bitcoin.js'
4
+ import { AllTransportsFailedError } from '../errors/transport.js'
5
+ import { InsufficientUTXOBalanceError } from '../errors/utxo.js'
6
+ import { createClient, rpcSchema } from '../factories/createClient.js'
7
+ import { createMockResponse } from '../test/utils.js'
8
8
  import blockchairLimitedResponse from './blockchair/__mocks__/getUTXOs/rateLimited.json'
9
9
  import blockchairValidResponse from './blockchair/__mocks__/getUTXOs/valid.json'
10
- import { blockchair } from './blockchair/blockchair'
10
+ import { blockchair } from './blockchair/blockchair.js'
11
11
  import blockcypherLimitedResponse from './blockcypher/__mocks__/getUTXOs/rateLimited.json'
12
12
  import blockcypherValidResponse from './blockcypher/__mocks__/getUTXOs/valid.json'
13
- import { blockcypher } from './blockcypher/blockcypher'
14
- import { fallback } from './fallback'
15
- import type { UTXOSchema } from './types'
13
+ import { blockcypher } from './blockcypher/blockcypher.js'
14
+ import { fallback } from './fallback.js'
15
+ import type { UTXOSchema } from './types.js'
16
16
 
17
17
  const address = import.meta.env.VITE_TEST_ADDRESS
18
18
  const apiKey = import.meta.env.VITE_TEST_BLOCKCHAIR_KEY