@xyo-network/witness-blockchain-abstract 2.79.3 → 2.79.5

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 (87) hide show
  1. package/dist/browser/Witness.d.cts +6 -2
  2. package/dist/browser/Witness.d.cts.map +1 -1
  3. package/dist/browser/Witness.d.mts +6 -2
  4. package/dist/browser/Witness.d.mts.map +1 -1
  5. package/dist/browser/Witness.d.ts +6 -2
  6. package/dist/browser/Witness.d.ts.map +1 -1
  7. package/dist/browser/index.cjs +64 -74
  8. package/dist/browser/index.cjs.map +1 -1
  9. package/dist/browser/index.d.cts +1 -0
  10. package/dist/browser/index.d.cts.map +1 -1
  11. package/dist/browser/index.d.mts +1 -0
  12. package/dist/browser/index.d.mts.map +1 -1
  13. package/dist/browser/index.d.ts +1 -0
  14. package/dist/browser/index.d.ts.map +1 -1
  15. package/dist/browser/index.js +64 -74
  16. package/dist/browser/index.js.map +1 -1
  17. package/dist/browser/lib/getProviderFromEnv.d.cts +6 -2
  18. package/dist/browser/lib/getProviderFromEnv.d.cts.map +1 -1
  19. package/dist/browser/lib/getProviderFromEnv.d.mts +6 -2
  20. package/dist/browser/lib/getProviderFromEnv.d.mts.map +1 -1
  21. package/dist/browser/lib/getProviderFromEnv.d.ts +6 -2
  22. package/dist/browser/lib/getProviderFromEnv.d.ts.map +1 -1
  23. package/dist/browser/lib/index.d.cts +0 -1
  24. package/dist/browser/lib/index.d.cts.map +1 -1
  25. package/dist/browser/lib/index.d.mts +0 -1
  26. package/dist/browser/lib/index.d.mts.map +1 -1
  27. package/dist/browser/lib/index.d.ts +0 -1
  28. package/dist/browser/lib/index.d.ts.map +1 -1
  29. package/dist/browser/model.d.cts +9 -0
  30. package/dist/browser/model.d.cts.map +1 -0
  31. package/dist/browser/model.d.mts +9 -0
  32. package/dist/browser/model.d.mts.map +1 -0
  33. package/dist/browser/model.d.ts +9 -0
  34. package/dist/browser/model.d.ts.map +1 -0
  35. package/dist/node/Witness.d.cts +6 -2
  36. package/dist/node/Witness.d.cts.map +1 -1
  37. package/dist/node/Witness.d.mts +6 -2
  38. package/dist/node/Witness.d.mts.map +1 -1
  39. package/dist/node/Witness.d.ts +6 -2
  40. package/dist/node/Witness.d.ts.map +1 -1
  41. package/dist/node/index.cjs +67 -81
  42. package/dist/node/index.cjs.map +1 -1
  43. package/dist/node/index.d.cts +1 -0
  44. package/dist/node/index.d.cts.map +1 -1
  45. package/dist/node/index.d.mts +1 -0
  46. package/dist/node/index.d.mts.map +1 -1
  47. package/dist/node/index.d.ts +1 -0
  48. package/dist/node/index.d.ts.map +1 -1
  49. package/dist/node/index.js +64 -74
  50. package/dist/node/index.js.map +1 -1
  51. package/dist/node/lib/getProviderFromEnv.d.cts +6 -2
  52. package/dist/node/lib/getProviderFromEnv.d.cts.map +1 -1
  53. package/dist/node/lib/getProviderFromEnv.d.mts +6 -2
  54. package/dist/node/lib/getProviderFromEnv.d.mts.map +1 -1
  55. package/dist/node/lib/getProviderFromEnv.d.ts +6 -2
  56. package/dist/node/lib/getProviderFromEnv.d.ts.map +1 -1
  57. package/dist/node/lib/index.d.cts +0 -1
  58. package/dist/node/lib/index.d.cts.map +1 -1
  59. package/dist/node/lib/index.d.mts +0 -1
  60. package/dist/node/lib/index.d.mts.map +1 -1
  61. package/dist/node/lib/index.d.ts +0 -1
  62. package/dist/node/lib/index.d.ts.map +1 -1
  63. package/dist/node/model.d.cts +9 -0
  64. package/dist/node/model.d.cts.map +1 -0
  65. package/dist/node/model.d.mts +9 -0
  66. package/dist/node/model.d.mts.map +1 -0
  67. package/dist/node/model.d.ts +9 -0
  68. package/dist/node/model.d.ts.map +1 -0
  69. package/package.json +9 -7
  70. package/src/Witness.ts +20 -3
  71. package/src/index.ts +1 -0
  72. package/src/lib/getProviderFromEnv.ts +62 -25
  73. package/src/lib/index.ts +0 -1
  74. package/src/model.ts +13 -0
  75. package/dist/browser/lib/getErc1967Status.d.cts +0 -19
  76. package/dist/browser/lib/getErc1967Status.d.cts.map +0 -1
  77. package/dist/browser/lib/getErc1967Status.d.mts +0 -19
  78. package/dist/browser/lib/getErc1967Status.d.mts.map +0 -1
  79. package/dist/browser/lib/getErc1967Status.d.ts +0 -19
  80. package/dist/browser/lib/getErc1967Status.d.ts.map +0 -1
  81. package/dist/node/lib/getErc1967Status.d.cts +0 -19
  82. package/dist/node/lib/getErc1967Status.d.cts.map +0 -1
  83. package/dist/node/lib/getErc1967Status.d.mts +0 -19
  84. package/dist/node/lib/getErc1967Status.d.mts.map +0 -1
  85. package/dist/node/lib/getErc1967Status.d.ts +0 -19
  86. package/dist/node/lib/getErc1967Status.d.ts.map +0 -1
  87. package/src/lib/getErc1967Status.ts +0 -63
@@ -1,4 +1,5 @@
1
1
  import { BaseProvider } from '@ethersproject/providers';
2
+ import { Promisable } from '@xylabs/promise';
2
3
  import { AbstractWitness } from '@xyo-network/abstract-witness';
3
4
  import { AnyObject, WithAdditional } from '@xyo-network/object';
4
5
  import { Payload } from '@xyo-network/payload-model';
@@ -12,9 +13,12 @@ export type AdditionalBlockchainWitnessParams = {
12
13
  providers: BaseProvider[];
13
14
  };
14
15
  export type BlockchainWitnessParams<TConfig extends BlockchainWitnessConfig = BlockchainWitnessConfig, TAdditionalParams extends AnyObject | void = void> = WitnessParams<TConfig, WithAdditional<{
15
- providers: BaseProvider[];
16
+ providers: () => Promisable<BaseProvider[]>;
16
17
  }, TAdditionalParams>>;
17
18
  export declare abstract class AbstractBlockchainWitness<TParams extends BlockchainWitnessParams = BlockchainWitnessParams, TIn extends Payload = Payload, TOut extends Payload = Payload, TEventData extends WitnessModuleEventData<WitnessInstance<TParams, TIn, TOut>, TIn, TOut> = WitnessModuleEventData<WitnessInstance<TParams, TIn, TOut>, TIn, TOut>> extends AbstractWitness<TParams, TIn, TOut, TEventData> {
18
- get provider(): BaseProvider;
19
+ private _providers;
20
+ getProvider(cache?: boolean): Promise<BaseProvider | undefined>;
21
+ getProvider(cache: boolean, error: string | true): Promise<BaseProvider>;
22
+ getProviders(cache?: boolean): Promise<BaseProvider[]>;
19
23
  }
20
24
  //# sourceMappingURL=Witness.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAElH,eAAO,MAAM,6BAA6B,mCAAmC,CAAA;AAC7E,MAAM,MAAM,6BAA6B,GAAG,OAAO,6BAA6B,CAAA;AAEhF,MAAM,MAAM,uBAAuB,CAAC,WAAW,SAAS,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,IAAI,GAAG,IAAI,EAAE,OAAO,SAAS,MAAM,GAAG,IAAI,GAAG,IAAI,IAAI,aAAa,CAClJ,WAAW,GAAG;IAAE,MAAM,EAAE,OAAO,SAAS,IAAI,GAAG,CAAC,WAAW,SAAS,IAAI,GAAG,MAAM,GAAG,6BAA6B,CAAC,GAAG,OAAO,CAAA;CAAE,CAC/H,CAAA;AAED,MAAM,MAAM,iCAAiC,GAAG;IAC9C,SAAS,EAAE,YAAY,EAAE,CAAA;CAC1B,CAAA;AAED,MAAM,MAAM,uBAAuB,CACjC,OAAO,SAAS,uBAAuB,GAAG,uBAAuB,EACjE,iBAAiB,SAAS,SAAS,GAAG,IAAI,GAAG,IAAI,IAC/C,aAAa,CACf,OAAO,EACP,cAAc,CACZ;IACE,SAAS,EAAE,YAAY,EAAE,CAAA;CAC1B,EACD,iBAAiB,CAClB,CACF,CAAA;AAED,8BAAsB,yBAAyB,CAC7C,OAAO,SAAS,uBAAuB,GAAG,uBAAuB,EACjE,GAAG,SAAS,OAAO,GAAG,OAAO,EAC7B,IAAI,SAAS,OAAO,GAAG,OAAO,EAC9B,UAAU,SAAS,sBAAsB,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,sBAAsB,CAChH,eAAe,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,EACnC,GAAG,EACH,IAAI,CACL,CACD,SAAQ,eAAe,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,CAAC;IACvD,IAAI,QAAQ,iBAGX;CACF"}
1
+ {"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAElH,eAAO,MAAM,6BAA6B,mCAAmC,CAAA;AAC7E,MAAM,MAAM,6BAA6B,GAAG,OAAO,6BAA6B,CAAA;AAEhF,MAAM,MAAM,uBAAuB,CAAC,WAAW,SAAS,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,IAAI,GAAG,IAAI,EAAE,OAAO,SAAS,MAAM,GAAG,IAAI,GAAG,IAAI,IAAI,aAAa,CAClJ,WAAW,GAAG;IAAE,MAAM,EAAE,OAAO,SAAS,IAAI,GAAG,CAAC,WAAW,SAAS,IAAI,GAAG,MAAM,GAAG,6BAA6B,CAAC,GAAG,OAAO,CAAA;CAAE,CAC/H,CAAA;AAED,MAAM,MAAM,iCAAiC,GAAG;IAC9C,SAAS,EAAE,YAAY,EAAE,CAAA;CAC1B,CAAA;AAED,MAAM,MAAM,uBAAuB,CACjC,OAAO,SAAS,uBAAuB,GAAG,uBAAuB,EACjE,iBAAiB,SAAS,SAAS,GAAG,IAAI,GAAG,IAAI,IAC/C,aAAa,CACf,OAAO,EACP,cAAc,CACZ;IACE,SAAS,EAAE,MAAM,UAAU,CAAC,YAAY,EAAE,CAAC,CAAA;CAC5C,EACD,iBAAiB,CAClB,CACF,CAAA;AAED,8BAAsB,yBAAyB,CAC7C,OAAO,SAAS,uBAAuB,GAAG,uBAAuB,EACjE,GAAG,SAAS,OAAO,GAAG,OAAO,EAC7B,IAAI,SAAS,OAAO,GAAG,OAAO,EAC9B,UAAU,SAAS,sBAAsB,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,sBAAsB,CAChH,eAAe,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,EACnC,GAAG,EACH,IAAI,CACL,CACD,SAAQ,eAAe,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,CAAC;IACvD,OAAO,CAAC,UAAU,CAAwC;IAEpD,WAAW,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IAC/D,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC;IAYxE,YAAY,CAAC,KAAK,UAAQ,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;CAK3D"}
@@ -1,4 +1,5 @@
1
1
  import { BaseProvider } from '@ethersproject/providers';
2
+ import { Promisable } from '@xylabs/promise';
2
3
  import { AbstractWitness } from '@xyo-network/abstract-witness';
3
4
  import { AnyObject, WithAdditional } from '@xyo-network/object';
4
5
  import { Payload } from '@xyo-network/payload-model';
@@ -12,9 +13,12 @@ export type AdditionalBlockchainWitnessParams = {
12
13
  providers: BaseProvider[];
13
14
  };
14
15
  export type BlockchainWitnessParams<TConfig extends BlockchainWitnessConfig = BlockchainWitnessConfig, TAdditionalParams extends AnyObject | void = void> = WitnessParams<TConfig, WithAdditional<{
15
- providers: BaseProvider[];
16
+ providers: () => Promisable<BaseProvider[]>;
16
17
  }, TAdditionalParams>>;
17
18
  export declare abstract class AbstractBlockchainWitness<TParams extends BlockchainWitnessParams = BlockchainWitnessParams, TIn extends Payload = Payload, TOut extends Payload = Payload, TEventData extends WitnessModuleEventData<WitnessInstance<TParams, TIn, TOut>, TIn, TOut> = WitnessModuleEventData<WitnessInstance<TParams, TIn, TOut>, TIn, TOut>> extends AbstractWitness<TParams, TIn, TOut, TEventData> {
18
- get provider(): BaseProvider;
19
+ private _providers;
20
+ getProvider(cache?: boolean): Promise<BaseProvider | undefined>;
21
+ getProvider(cache: boolean, error: string | true): Promise<BaseProvider>;
22
+ getProviders(cache?: boolean): Promise<BaseProvider[]>;
19
23
  }
20
24
  //# sourceMappingURL=Witness.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAElH,eAAO,MAAM,6BAA6B,mCAAmC,CAAA;AAC7E,MAAM,MAAM,6BAA6B,GAAG,OAAO,6BAA6B,CAAA;AAEhF,MAAM,MAAM,uBAAuB,CAAC,WAAW,SAAS,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,IAAI,GAAG,IAAI,EAAE,OAAO,SAAS,MAAM,GAAG,IAAI,GAAG,IAAI,IAAI,aAAa,CAClJ,WAAW,GAAG;IAAE,MAAM,EAAE,OAAO,SAAS,IAAI,GAAG,CAAC,WAAW,SAAS,IAAI,GAAG,MAAM,GAAG,6BAA6B,CAAC,GAAG,OAAO,CAAA;CAAE,CAC/H,CAAA;AAED,MAAM,MAAM,iCAAiC,GAAG;IAC9C,SAAS,EAAE,YAAY,EAAE,CAAA;CAC1B,CAAA;AAED,MAAM,MAAM,uBAAuB,CACjC,OAAO,SAAS,uBAAuB,GAAG,uBAAuB,EACjE,iBAAiB,SAAS,SAAS,GAAG,IAAI,GAAG,IAAI,IAC/C,aAAa,CACf,OAAO,EACP,cAAc,CACZ;IACE,SAAS,EAAE,YAAY,EAAE,CAAA;CAC1B,EACD,iBAAiB,CAClB,CACF,CAAA;AAED,8BAAsB,yBAAyB,CAC7C,OAAO,SAAS,uBAAuB,GAAG,uBAAuB,EACjE,GAAG,SAAS,OAAO,GAAG,OAAO,EAC7B,IAAI,SAAS,OAAO,GAAG,OAAO,EAC9B,UAAU,SAAS,sBAAsB,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,sBAAsB,CAChH,eAAe,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,EACnC,GAAG,EACH,IAAI,CACL,CACD,SAAQ,eAAe,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,CAAC;IACvD,IAAI,QAAQ,iBAGX;CACF"}
1
+ {"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAElH,eAAO,MAAM,6BAA6B,mCAAmC,CAAA;AAC7E,MAAM,MAAM,6BAA6B,GAAG,OAAO,6BAA6B,CAAA;AAEhF,MAAM,MAAM,uBAAuB,CAAC,WAAW,SAAS,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,IAAI,GAAG,IAAI,EAAE,OAAO,SAAS,MAAM,GAAG,IAAI,GAAG,IAAI,IAAI,aAAa,CAClJ,WAAW,GAAG;IAAE,MAAM,EAAE,OAAO,SAAS,IAAI,GAAG,CAAC,WAAW,SAAS,IAAI,GAAG,MAAM,GAAG,6BAA6B,CAAC,GAAG,OAAO,CAAA;CAAE,CAC/H,CAAA;AAED,MAAM,MAAM,iCAAiC,GAAG;IAC9C,SAAS,EAAE,YAAY,EAAE,CAAA;CAC1B,CAAA;AAED,MAAM,MAAM,uBAAuB,CACjC,OAAO,SAAS,uBAAuB,GAAG,uBAAuB,EACjE,iBAAiB,SAAS,SAAS,GAAG,IAAI,GAAG,IAAI,IAC/C,aAAa,CACf,OAAO,EACP,cAAc,CACZ;IACE,SAAS,EAAE,MAAM,UAAU,CAAC,YAAY,EAAE,CAAC,CAAA;CAC5C,EACD,iBAAiB,CAClB,CACF,CAAA;AAED,8BAAsB,yBAAyB,CAC7C,OAAO,SAAS,uBAAuB,GAAG,uBAAuB,EACjE,GAAG,SAAS,OAAO,GAAG,OAAO,EAC7B,IAAI,SAAS,OAAO,GAAG,OAAO,EAC9B,UAAU,SAAS,sBAAsB,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,sBAAsB,CAChH,eAAe,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,EACnC,GAAG,EACH,IAAI,CACL,CACD,SAAQ,eAAe,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,CAAC;IACvD,OAAO,CAAC,UAAU,CAAwC;IAEpD,WAAW,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IAC/D,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC;IAYxE,YAAY,CAAC,KAAK,UAAQ,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;CAK3D"}
@@ -1,4 +1,5 @@
1
1
  import { BaseProvider } from '@ethersproject/providers';
2
+ import { Promisable } from '@xylabs/promise';
2
3
  import { AbstractWitness } from '@xyo-network/abstract-witness';
3
4
  import { AnyObject, WithAdditional } from '@xyo-network/object';
4
5
  import { Payload } from '@xyo-network/payload-model';
@@ -12,9 +13,12 @@ export type AdditionalBlockchainWitnessParams = {
12
13
  providers: BaseProvider[];
13
14
  };
14
15
  export type BlockchainWitnessParams<TConfig extends BlockchainWitnessConfig = BlockchainWitnessConfig, TAdditionalParams extends AnyObject | void = void> = WitnessParams<TConfig, WithAdditional<{
15
- providers: BaseProvider[];
16
+ providers: () => Promisable<BaseProvider[]>;
16
17
  }, TAdditionalParams>>;
17
18
  export declare abstract class AbstractBlockchainWitness<TParams extends BlockchainWitnessParams = BlockchainWitnessParams, TIn extends Payload = Payload, TOut extends Payload = Payload, TEventData extends WitnessModuleEventData<WitnessInstance<TParams, TIn, TOut>, TIn, TOut> = WitnessModuleEventData<WitnessInstance<TParams, TIn, TOut>, TIn, TOut>> extends AbstractWitness<TParams, TIn, TOut, TEventData> {
18
- get provider(): BaseProvider;
19
+ private _providers;
20
+ getProvider(cache?: boolean): Promise<BaseProvider | undefined>;
21
+ getProvider(cache: boolean, error: string | true): Promise<BaseProvider>;
22
+ getProviders(cache?: boolean): Promise<BaseProvider[]>;
19
23
  }
20
24
  //# sourceMappingURL=Witness.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAElH,eAAO,MAAM,6BAA6B,mCAAmC,CAAA;AAC7E,MAAM,MAAM,6BAA6B,GAAG,OAAO,6BAA6B,CAAA;AAEhF,MAAM,MAAM,uBAAuB,CAAC,WAAW,SAAS,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,IAAI,GAAG,IAAI,EAAE,OAAO,SAAS,MAAM,GAAG,IAAI,GAAG,IAAI,IAAI,aAAa,CAClJ,WAAW,GAAG;IAAE,MAAM,EAAE,OAAO,SAAS,IAAI,GAAG,CAAC,WAAW,SAAS,IAAI,GAAG,MAAM,GAAG,6BAA6B,CAAC,GAAG,OAAO,CAAA;CAAE,CAC/H,CAAA;AAED,MAAM,MAAM,iCAAiC,GAAG;IAC9C,SAAS,EAAE,YAAY,EAAE,CAAA;CAC1B,CAAA;AAED,MAAM,MAAM,uBAAuB,CACjC,OAAO,SAAS,uBAAuB,GAAG,uBAAuB,EACjE,iBAAiB,SAAS,SAAS,GAAG,IAAI,GAAG,IAAI,IAC/C,aAAa,CACf,OAAO,EACP,cAAc,CACZ;IACE,SAAS,EAAE,YAAY,EAAE,CAAA;CAC1B,EACD,iBAAiB,CAClB,CACF,CAAA;AAED,8BAAsB,yBAAyB,CAC7C,OAAO,SAAS,uBAAuB,GAAG,uBAAuB,EACjE,GAAG,SAAS,OAAO,GAAG,OAAO,EAC7B,IAAI,SAAS,OAAO,GAAG,OAAO,EAC9B,UAAU,SAAS,sBAAsB,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,sBAAsB,CAChH,eAAe,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,EACnC,GAAG,EACH,IAAI,CACL,CACD,SAAQ,eAAe,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,CAAC;IACvD,IAAI,QAAQ,iBAGX;CACF"}
1
+ {"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAElH,eAAO,MAAM,6BAA6B,mCAAmC,CAAA;AAC7E,MAAM,MAAM,6BAA6B,GAAG,OAAO,6BAA6B,CAAA;AAEhF,MAAM,MAAM,uBAAuB,CAAC,WAAW,SAAS,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,IAAI,GAAG,IAAI,EAAE,OAAO,SAAS,MAAM,GAAG,IAAI,GAAG,IAAI,IAAI,aAAa,CAClJ,WAAW,GAAG;IAAE,MAAM,EAAE,OAAO,SAAS,IAAI,GAAG,CAAC,WAAW,SAAS,IAAI,GAAG,MAAM,GAAG,6BAA6B,CAAC,GAAG,OAAO,CAAA;CAAE,CAC/H,CAAA;AAED,MAAM,MAAM,iCAAiC,GAAG;IAC9C,SAAS,EAAE,YAAY,EAAE,CAAA;CAC1B,CAAA;AAED,MAAM,MAAM,uBAAuB,CACjC,OAAO,SAAS,uBAAuB,GAAG,uBAAuB,EACjE,iBAAiB,SAAS,SAAS,GAAG,IAAI,GAAG,IAAI,IAC/C,aAAa,CACf,OAAO,EACP,cAAc,CACZ;IACE,SAAS,EAAE,MAAM,UAAU,CAAC,YAAY,EAAE,CAAC,CAAA;CAC5C,EACD,iBAAiB,CAClB,CACF,CAAA;AAED,8BAAsB,yBAAyB,CAC7C,OAAO,SAAS,uBAAuB,GAAG,uBAAuB,EACjE,GAAG,SAAS,OAAO,GAAG,OAAO,EAC7B,IAAI,SAAS,OAAO,GAAG,OAAO,EAC9B,UAAU,SAAS,sBAAsB,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,sBAAsB,CAChH,eAAe,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,EACnC,GAAG,EACH,IAAI,CACL,CACD,SAAQ,eAAe,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,CAAC;IACvD,OAAO,CAAC,UAAU,CAAwC;IAEpD,WAAW,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IAC/D,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC;IAYxE,YAAY,CAAC,KAAK,UAAQ,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;CAK3D"}
@@ -21,16 +21,12 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
21
21
  var src_exports = {};
22
22
  __export(src_exports, {
23
23
  AbstractBlockchainWitness: () => AbstractBlockchainWitness,
24
+ BlockchainAddressSchema: () => BlockchainAddressSchema,
24
25
  BlockchainWitnessConfigSchema: () => BlockchainWitnessConfigSchema,
25
- ERC1967_PROXY_ADMIN_STORAGE_SLOT: () => ERC1967_PROXY_ADMIN_STORAGE_SLOT,
26
- ERC1967_PROXY_BEACON_STORAGE_SLOT: () => ERC1967_PROXY_BEACON_STORAGE_SLOT,
27
- ERC1967_PROXY_IMPLEMENTATION_STORAGE_SLOT: () => ERC1967_PROXY_IMPLEMENTATION_STORAGE_SLOT,
28
- ERC1967_PROXY_ROLLBACK_STORAGE_SLOT: () => ERC1967_PROXY_ROLLBACK_STORAGE_SLOT,
29
26
  checkIpfsUrl: () => checkIpfsUrl,
30
- getErc1967Status: () => getErc1967Status,
31
27
  getProviderFromEnv: () => getProviderFromEnv,
32
- getSharedProviderFromEnv: () => getSharedProviderFromEnv,
33
- readAddressFromSlot: () => readAddressFromSlot
28
+ getProvidersFromEnv: () => getProvidersFromEnv,
29
+ getSharedProviderFromEnv: () => getSharedProviderFromEnv
34
30
  });
35
31
  module.exports = __toCommonJS(src_exports);
36
32
 
@@ -59,84 +55,57 @@ var checkIpfsUrl = (urlToCheck, ipfsGateway) => {
59
55
  }
60
56
  };
61
57
 
62
- // src/lib/getErc1967Status.ts
63
- var import_bignumber = require("@xylabs/bignumber");
64
- var import_open_zeppelin_typechain = require("@xyo-network/open-zeppelin-typechain");
65
- var ERC1967_PROXY_IMPLEMENTATION_STORAGE_SLOT = "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc";
66
- var ERC1967_PROXY_BEACON_STORAGE_SLOT = "0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50";
67
- var ERC1967_PROXY_ADMIN_STORAGE_SLOT = "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103";
68
- var ERC1967_PROXY_ROLLBACK_STORAGE_SLOT = "0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143";
69
- var hexBytesOnlyOnly = (value) => {
70
- return value.startsWith("0x") ? value.substring(2) : value;
71
- };
72
- var addressFromHex = (value) => {
73
- return `0x${hexBytesOnlyOnly(value).substring(24)}`;
74
- };
75
- var isHexZero = (value) => {
76
- return new import_bignumber.BigNumber(hexBytesOnlyOnly(value), "hex").eqn(0);
77
- };
78
- var readAddressFromSlot = async (provider, address, slot) => {
79
- const slotValue = await provider.getStorageAt(address, slot);
80
- return addressFromHex(slotValue);
81
- };
82
- var getErc1967Status = async (provider, address) => {
83
- const proxy = {
84
- admin: await readAddressFromSlot(provider, address, ERC1967_PROXY_ADMIN_STORAGE_SLOT),
85
- beacon: await readAddressFromSlot(provider, address, ERC1967_PROXY_BEACON_STORAGE_SLOT),
86
- implementation: await readAddressFromSlot(provider, address, ERC1967_PROXY_IMPLEMENTATION_STORAGE_SLOT),
87
- rollback: await readAddressFromSlot(provider, address, ERC1967_PROXY_ROLLBACK_STORAGE_SLOT)
88
- };
89
- if (!isHexZero(proxy.beacon)) {
90
- const beacon = import_open_zeppelin_typechain.UpgradeableBeacon__factory.connect(proxy.beacon, provider);
91
- try {
92
- proxy.implementation = await beacon.callStatic.implementation();
93
- } catch (ex) {
94
- const error = ex;
95
- console.log(error.message);
96
- }
97
- }
98
- return {
99
- address,
100
- implementation: isHexZero(proxy.implementation) ? address : proxy.implementation,
101
- proxy
102
- };
103
- };
104
-
105
58
  // src/lib/getProviderFromEnv.ts
106
59
  var import_providers = require("@ethersproject/providers");
107
60
  var import_assert = require("@xylabs/assert");
108
- var createInfuraRpc = (chainId) => {
109
- return new import_providers.InfuraProvider(chainId, {
61
+ var enableConfigOverride = false;
62
+ var configureConnection = (connection, { timeout = 1e3 } = {}) => {
63
+ if (connection && enableConfigOverride) {
64
+ connection.timeout = timeout;
65
+ connection.throttleCallback = async (attempt, url) => {
66
+ console.log(`throttleCallback[${attempt}]: ${url}`);
67
+ return await Promise.resolve(true);
68
+ };
69
+ }
70
+ };
71
+ var createInfuraRpc = (chainId, overrides) => {
72
+ const provider = process.env.INFURA_PROJECT_ID && process.env.INFURA_PROJECT_SECRET ? new import_providers.InfuraProvider(chainId, {
110
73
  projectId: process.env.INFURA_PROJECT_ID,
111
74
  projectSecret: process.env.INFURA_PROJECT_SECRET
112
- });
75
+ }) : void 0;
76
+ configureConnection(provider?.connection, overrides);
77
+ return provider;
113
78
  };
114
- var createInfuraWss = (chainId) => {
115
- return new import_providers.InfuraWebSocketProvider(chainId, {
79
+ var createInfuraWss = (chainId, overrides) => {
80
+ const provider = process.env.INFURA_PROJECT_ID ? new import_providers.InfuraWebSocketProvider(chainId, {
116
81
  projectId: process.env.INFURA_PROJECT_ID
117
- });
82
+ }) : void 0;
83
+ configureConnection(provider?.connection, overrides);
84
+ return provider;
118
85
  };
119
- var createQuicknodeWss = (chainId) => {
86
+ var createQuicknodeWss = (chainId, overrides) => {
120
87
  const quickNodeWSSUri = process.env.QUICKNODE_WSS_URI;
121
- return quickNodeWSSUri ? new import_providers.WebSocketProvider(quickNodeWSSUri, chainId) : void 0;
88
+ const provider = quickNodeWSSUri ? new import_providers.WebSocketProvider(quickNodeWSSUri, chainId) : void 0;
89
+ configureConnection(provider?.connection, overrides);
90
+ return provider;
122
91
  };
123
- var createQuicknodeRpc = (chainId) => {
92
+ var createQuicknodeRpc = (chainId, overrides) => {
124
93
  const quickNodeHttpsUri = process.env.QUICKNODE_HTTPS_URI;
125
- return quickNodeHttpsUri ? new import_providers.JsonRpcProvider(quickNodeHttpsUri, chainId) : void 0;
94
+ const provider = quickNodeHttpsUri ? new import_providers.JsonRpcProvider(quickNodeHttpsUri, chainId) : void 0;
95
+ configureConnection(provider?.connection, overrides);
96
+ return provider;
126
97
  };
127
- var getProviderFromEnv = (chainId = 1, options) => {
128
- const { providerSource, providerType } = options ?? {};
98
+ var getProviderFromEnv = (chainId = 1, { providerSource = "infura", providerType = "rpc", overrides } = {}) => {
129
99
  let provider = void 0;
130
100
  switch (providerSource) {
131
101
  case "quicknode": {
132
102
  switch (providerType) {
133
103
  case "rpc": {
134
- provider = createQuicknodeRpc(chainId);
104
+ provider = createQuicknodeRpc(chainId, overrides);
135
105
  break;
136
106
  }
137
- case "wss":
138
- default: {
139
- provider = createQuicknodeWss(chainId);
107
+ case "wss": {
108
+ provider = createQuicknodeWss(chainId, overrides);
140
109
  break;
141
110
  }
142
111
  }
@@ -145,13 +114,12 @@ var getProviderFromEnv = (chainId = 1, options) => {
145
114
  default:
146
115
  case "infura": {
147
116
  switch (providerType) {
148
- case "rpc": {
149
- provider = createInfuraRpc(chainId);
117
+ case "wss": {
118
+ provider = createInfuraWss(chainId, overrides);
150
119
  break;
151
120
  }
152
- case "wss":
153
- default: {
154
- provider = createInfuraWss(chainId);
121
+ case "rpc": {
122
+ provider = createInfuraRpc(chainId, overrides);
155
123
  break;
156
124
  }
157
125
  }
@@ -161,7 +129,7 @@ var getProviderFromEnv = (chainId = 1, options) => {
161
129
  if (!provider) {
162
130
  provider = createInfuraWss(chainId) ?? createInfuraRpc(chainId) ?? createQuicknodeRpc(chainId);
163
131
  }
164
- return (0, import_assert.assertEx)(provider, `Unable to create provider [${chainId}]: ${options ? JSON.stringify(options) : "default"}`);
132
+ return (0, import_assert.assertEx)(provider, `Unable to create provider [${chainId}]: ${providerSource}|${providerType}`);
165
133
  };
166
134
  var providers = {};
167
135
  var getSharedProviderFromEnv = (chainId = 1, options) => {
@@ -169,14 +137,36 @@ var getSharedProviderFromEnv = (chainId = 1, options) => {
169
137
  providers[key] = providers[key] ?? getProviderFromEnv(chainId, options);
170
138
  return providers[key];
171
139
  };
140
+ var getProvidersFromEnv = (count = 1, chainId = 1, options = {}) => {
141
+ const result = [];
142
+ for (let i = 0; i < count; i++) {
143
+ result.push(getProviderFromEnv(chainId, options));
144
+ }
145
+ return result;
146
+ };
147
+
148
+ // src/model.ts
149
+ var BlockchainAddressSchema = "network.xyo.blockchain.address";
172
150
 
173
151
  // src/Witness.ts
174
152
  var import_abstract_witness = require("@xyo-network/abstract-witness");
175
153
  var BlockchainWitnessConfigSchema = "network.xyo.blockchain.witness";
176
154
  var AbstractBlockchainWitness = class extends import_abstract_witness.AbstractWitness {
177
- get provider() {
178
- const { providers: providers2 } = this.params;
155
+ _providers = void 0;
156
+ async getProvider(cache = false, error) {
157
+ const providers2 = await this.getProviders(cache);
158
+ if (providers2.length === 0) {
159
+ if (error) {
160
+ throw Error(typeof error === "string" ? error : "No providers available");
161
+ }
162
+ return void 0;
163
+ }
179
164
  return providers2[Date.now() % providers2.length];
180
165
  }
166
+ async getProviders(cache = false) {
167
+ const cachedProviders = cache ? this._providers : void 0;
168
+ this._providers = cachedProviders ?? await this.params.providers();
169
+ return this._providers;
170
+ }
181
171
  };
182
172
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/lib/checkIpfsUrl.ts","../../src/lib/getErc1967Status.ts","../../src/lib/getProviderFromEnv.ts","../../src/Witness.ts"],"sourcesContent":["export * from './lib'\nexport * from './Witness'\n","/**\n * Returns the equivalent IPFS gateway URL for the supplied URL.\n * @param urlToCheck The URL to check\n * @returns If the supplied URL is an IPFS URL, it converts the URL to the\n * equivalent IPFS gateway URL. Otherwise, returns the original URL.\n */\nexport const checkIpfsUrl = (urlToCheck: string, ipfsGateway: string) => {\n try {\n const url = new URL(urlToCheck)\n let protocol = url.protocol\n let host = url.host\n let path = url.pathname\n const query = url.search\n if (protocol === 'ipfs:') {\n protocol = 'https:'\n host = ipfsGateway\n path = url.host === 'ipfs' ? `ipfs${path}` : `ipfs/${url.host}${path}`\n const root = `${protocol}//${host}/${path}`\n return query?.length > 0 ? `${root}?${query}` : root\n } else {\n return urlToCheck\n }\n } catch (ex) {\n const error = ex as Error\n console.error(`${error.name}:${error.message} [${urlToCheck}]`)\n console.log(error.stack)\n return undefined\n }\n}\n","import { BaseProvider } from '@ethersproject/providers'\nimport { BigNumber } from '@xylabs/bignumber'\nimport { UpgradeableBeacon__factory } from '@xyo-network/open-zeppelin-typechain'\n\nexport const ERC1967_PROXY_IMPLEMENTATION_STORAGE_SLOT = '0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc'\nexport const ERC1967_PROXY_BEACON_STORAGE_SLOT = '0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50'\nexport const ERC1967_PROXY_ADMIN_STORAGE_SLOT = '0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103'\nexport const ERC1967_PROXY_ROLLBACK_STORAGE_SLOT = '0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143'\n\nexport interface Erc1967DataSlots {\n admin: string\n beacon: string\n implementation: string\n rollback: string\n}\n\nexport interface Erc1967Status {\n address: string\n implementation: string\n proxy: Erc1967DataSlots\n}\n\nconst hexBytesOnlyOnly = (value: string) => {\n return value.startsWith('0x') ? value.substring(2) : value\n}\n\nconst addressFromHex = (value: string) => {\n return `0x${hexBytesOnlyOnly(value).substring(24)}`\n}\n\nconst isHexZero = (value: string) => {\n return new BigNumber(hexBytesOnlyOnly(value), 'hex').eqn(0)\n}\n\nexport const readAddressFromSlot = async (provider: BaseProvider, address: string, slot: string) => {\n const slotValue = await provider.getStorageAt(address, slot)\n return addressFromHex(slotValue)\n}\n\nexport const getErc1967Status = async (provider: BaseProvider, address: string): Promise<Erc1967Status> => {\n const proxy: Erc1967DataSlots = {\n admin: await readAddressFromSlot(provider, address, ERC1967_PROXY_ADMIN_STORAGE_SLOT),\n beacon: await readAddressFromSlot(provider, address, ERC1967_PROXY_BEACON_STORAGE_SLOT),\n implementation: await readAddressFromSlot(provider, address, ERC1967_PROXY_IMPLEMENTATION_STORAGE_SLOT),\n rollback: await readAddressFromSlot(provider, address, ERC1967_PROXY_ROLLBACK_STORAGE_SLOT),\n }\n\n if (!isHexZero(proxy.beacon)) {\n const beacon = UpgradeableBeacon__factory.connect(proxy.beacon, provider)\n try {\n proxy.implementation = await beacon.callStatic.implementation()\n } catch (ex) {\n const error = ex as Error\n console.log(error.message)\n }\n }\n\n return {\n address,\n implementation: isHexZero(proxy.implementation) ? address : proxy.implementation,\n proxy,\n }\n}\n","import { BaseProvider, InfuraProvider, InfuraWebSocketProvider, JsonRpcProvider, WebSocketProvider } from '@ethersproject/providers'\nimport { assertEx } from '@xylabs/assert'\n\nexport type ProviderSource = 'infura' | 'quicknode'\nexport type ProviderType = 'rpc' | 'wss'\n\nconst createInfuraRpc = (chainId: number) => {\n return new InfuraProvider(chainId, {\n projectId: process.env.INFURA_PROJECT_ID,\n projectSecret: process.env.INFURA_PROJECT_SECRET,\n })\n}\n\nconst createInfuraWss = (chainId: number) => {\n return new InfuraWebSocketProvider(chainId, {\n projectId: process.env.INFURA_PROJECT_ID,\n })\n}\n\nconst createQuicknodeWss = (chainId: number) => {\n const quickNodeWSSUri = process.env.QUICKNODE_WSS_URI\n return quickNodeWSSUri ? new WebSocketProvider(quickNodeWSSUri, chainId) : undefined\n}\n\nconst createQuicknodeRpc = (chainId: number) => {\n const quickNodeHttpsUri = process.env.QUICKNODE_HTTPS_URI\n return quickNodeHttpsUri ? new JsonRpcProvider(quickNodeHttpsUri, chainId) : undefined\n}\n\nexport const getProviderFromEnv = (\n chainId: number = 0x01,\n options?: { providerSource?: ProviderSource; providerType?: ProviderType },\n): BaseProvider => {\n const { providerSource, providerType } = options ?? {}\n let provider: BaseProvider | undefined = undefined\n switch (providerSource) {\n case 'quicknode': {\n switch (providerType) {\n case 'rpc': {\n provider = createQuicknodeRpc(chainId)\n break\n }\n case 'wss':\n default: {\n provider = createQuicknodeWss(chainId)\n break\n }\n }\n break\n }\n default:\n case 'infura': {\n switch (providerType) {\n case 'rpc': {\n provider = createInfuraRpc(chainId)\n break\n }\n case 'wss':\n default: {\n provider = createInfuraWss(chainId)\n break\n }\n }\n break\n }\n }\n if (!provider) {\n provider = createInfuraWss(chainId) ?? createInfuraRpc(chainId) ?? createQuicknodeRpc(chainId)\n }\n return assertEx(provider, `Unable to create provider [${chainId}]: ${options ? JSON.stringify(options) : 'default'}`)\n}\n\nconst providers: Record<string, BaseProvider> = {}\n\nexport const getSharedProviderFromEnv = (\n chainId: number = 0x01,\n options?: { providerSource?: ProviderSource; providerType?: ProviderType },\n): BaseProvider => {\n const key = `${chainId}:${options ? JSON.stringify(options) : 'default'}`\n providers[key] = providers[key] ?? getProviderFromEnv(chainId, options)\n return providers[key]\n}\n","import { BaseProvider } from '@ethersproject/providers'\nimport { AbstractWitness } from '@xyo-network/abstract-witness'\nimport { AnyObject, WithAdditional } from '@xyo-network/object'\nimport { Payload } from '@xyo-network/payload-model'\nimport { WitnessConfig, WitnessInstance, WitnessModuleEventData, WitnessParams } from '@xyo-network/witness-model'\n\nexport const BlockchainWitnessConfigSchema = 'network.xyo.blockchain.witness'\nexport type BlockchainWitnessConfigSchema = typeof BlockchainWitnessConfigSchema\n\nexport type BlockchainWitnessConfig<TAdditional extends Omit<Payload, 'schema'> | void = void, TSchema extends string | void = void> = WitnessConfig<\n TAdditional & { schema: TSchema extends void ? (TAdditional extends void ? string : BlockchainWitnessConfigSchema) : TSchema }\n>\n\nexport type AdditionalBlockchainWitnessParams = {\n providers: BaseProvider[]\n}\n\nexport type BlockchainWitnessParams<\n TConfig extends BlockchainWitnessConfig = BlockchainWitnessConfig,\n TAdditionalParams extends AnyObject | void = void,\n> = WitnessParams<\n TConfig,\n WithAdditional<\n {\n providers: BaseProvider[]\n },\n TAdditionalParams\n >\n>\n\nexport abstract class AbstractBlockchainWitness<\n TParams extends BlockchainWitnessParams = BlockchainWitnessParams,\n TIn extends Payload = Payload,\n TOut extends Payload = Payload,\n TEventData extends WitnessModuleEventData<WitnessInstance<TParams, TIn, TOut>, TIn, TOut> = WitnessModuleEventData<\n WitnessInstance<TParams, TIn, TOut>,\n TIn,\n TOut\n >,\n> extends AbstractWitness<TParams, TIn, TOut, TEventData> {\n get provider() {\n const { providers } = this.params\n return providers[Date.now() % providers.length] //pick a random provider\n }\n}\n"],"mappings":"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","names":["providers"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/lib/checkIpfsUrl.ts","../../src/lib/getProviderFromEnv.ts","../../src/model.ts","../../src/Witness.ts"],"sourcesContent":["export * from './lib'\nexport * from './model'\nexport * from './Witness'\n","/**\n * Returns the equivalent IPFS gateway URL for the supplied URL.\n * @param urlToCheck The URL to check\n * @returns If the supplied URL is an IPFS URL, it converts the URL to the\n * equivalent IPFS gateway URL. Otherwise, returns the original URL.\n */\nexport const checkIpfsUrl = (urlToCheck: string, ipfsGateway: string) => {\n try {\n const url = new URL(urlToCheck)\n let protocol = url.protocol\n let host = url.host\n let path = url.pathname\n const query = url.search\n if (protocol === 'ipfs:') {\n protocol = 'https:'\n host = ipfsGateway\n path = url.host === 'ipfs' ? `ipfs${path}` : `ipfs/${url.host}${path}`\n const root = `${protocol}//${host}/${path}`\n return query?.length > 0 ? `${root}?${query}` : root\n } else {\n return urlToCheck\n }\n } catch (ex) {\n const error = ex as Error\n console.error(`${error.name}:${error.message} [${urlToCheck}]`)\n console.log(error.stack)\n return undefined\n }\n}\n","import { BaseProvider, InfuraProvider, InfuraWebSocketProvider, JsonRpcProvider, WebSocketProvider } from '@ethersproject/providers'\nimport { ConnectionInfo } from '@ethersproject/web'\nimport { assertEx } from '@xylabs/assert'\n\nexport type ProviderSource = 'infura' | 'quicknode'\nexport type ProviderType = 'rpc' | 'wss'\n\nexport interface GetProvidersFromEnvOptions {\n overrides?: Partial<ConnectionInfo>\n providerSource?: ProviderSource\n providerType?: ProviderType\n}\n\nconst enableConfigOverride = false\n\nconst configureConnection = (connection?: ConnectionInfo, { timeout = 1000 }: Partial<ConnectionInfo> = {}) => {\n if (connection && enableConfigOverride) {\n connection.timeout = timeout\n connection.throttleCallback = async (attempt, url) => {\n console.log(`throttleCallback[${attempt}]: ${url}`)\n return await Promise.resolve(true)\n }\n }\n}\n\nconst createInfuraRpc = (chainId: number, overrides?: Partial<ConnectionInfo>) => {\n const provider =\n process.env.INFURA_PROJECT_ID && process.env.INFURA_PROJECT_SECRET\n ? new InfuraProvider(chainId, {\n projectId: process.env.INFURA_PROJECT_ID,\n projectSecret: process.env.INFURA_PROJECT_SECRET,\n })\n : undefined\n configureConnection(provider?.connection, overrides)\n return provider\n}\n\nconst createInfuraWss = (chainId: number, overrides?: Partial<ConnectionInfo>) => {\n const provider = process.env.INFURA_PROJECT_ID\n ? new InfuraWebSocketProvider(chainId, {\n projectId: process.env.INFURA_PROJECT_ID,\n })\n : undefined\n configureConnection(provider?.connection, overrides)\n return provider\n}\n\nconst createQuicknodeWss = (chainId: number, overrides?: Partial<ConnectionInfo>) => {\n const quickNodeWSSUri = process.env.QUICKNODE_WSS_URI\n const provider = quickNodeWSSUri ? new WebSocketProvider(quickNodeWSSUri, chainId) : undefined\n configureConnection(provider?.connection, overrides)\n return provider\n}\n\nconst createQuicknodeRpc = (chainId: number, overrides?: Partial<ConnectionInfo>) => {\n const quickNodeHttpsUri = process.env.QUICKNODE_HTTPS_URI\n const provider = quickNodeHttpsUri ? new JsonRpcProvider(quickNodeHttpsUri, chainId) : undefined\n configureConnection(provider?.connection, overrides)\n return provider\n}\n\nexport const getProviderFromEnv = (\n chainId: number = 0x01,\n { providerSource = 'infura', providerType = 'rpc', overrides }: GetProvidersFromEnvOptions = {},\n): BaseProvider => {\n let provider: BaseProvider | undefined = undefined\n switch (providerSource) {\n case 'quicknode': {\n switch (providerType) {\n case 'rpc': {\n provider = createQuicknodeRpc(chainId, overrides)\n break\n }\n case 'wss': {\n provider = createQuicknodeWss(chainId, overrides)\n break\n }\n }\n break\n }\n default:\n case 'infura': {\n switch (providerType) {\n case 'wss': {\n provider = createInfuraWss(chainId, overrides)\n break\n }\n case 'rpc': {\n provider = createInfuraRpc(chainId, overrides)\n break\n }\n }\n break\n }\n }\n if (!provider) {\n provider = createInfuraWss(chainId) ?? createInfuraRpc(chainId) ?? createQuicknodeRpc(chainId)\n }\n return assertEx(provider, `Unable to create provider [${chainId}]: ${providerSource}|${providerType}`)\n}\n\nconst providers: Record<string, BaseProvider> = {}\n\nexport const getSharedProviderFromEnv = (\n chainId: number = 0x01,\n options?: { providerSource?: ProviderSource; providerType?: ProviderType },\n): BaseProvider => {\n const key = `${chainId}:${options ? JSON.stringify(options) : 'default'}`\n providers[key] = providers[key] ?? getProviderFromEnv(chainId, options)\n return providers[key]\n}\n\nexport const getProvidersFromEnv = (count: number = 1, chainId: number = 0x01, options: GetProvidersFromEnvOptions = {}): BaseProvider[] => {\n const result: BaseProvider[] = []\n for (let i = 0; i < count; i++) {\n result.push(getProviderFromEnv(chainId, options))\n }\n return result\n}\n","import { Payload } from '@xyo-network/payload-model'\n\nexport const BlockchainAddressSchema = 'network.xyo.blockchain.address'\nexport type BlockchainAddressSchema = typeof BlockchainAddressSchema\n\nexport type BlockchainAddress = Payload<\n {\n address?: string\n blockTag?: string | number\n chainId?: number\n },\n BlockchainAddressSchema\n>\n","import { BaseProvider } from '@ethersproject/providers'\nimport { Promisable } from '@xylabs/promise'\nimport { AbstractWitness } from '@xyo-network/abstract-witness'\nimport { AnyObject, WithAdditional } from '@xyo-network/object'\nimport { Payload } from '@xyo-network/payload-model'\nimport { WitnessConfig, WitnessInstance, WitnessModuleEventData, WitnessParams } from '@xyo-network/witness-model'\n\nexport const BlockchainWitnessConfigSchema = 'network.xyo.blockchain.witness'\nexport type BlockchainWitnessConfigSchema = typeof BlockchainWitnessConfigSchema\n\nexport type BlockchainWitnessConfig<TAdditional extends Omit<Payload, 'schema'> | void = void, TSchema extends string | void = void> = WitnessConfig<\n TAdditional & { schema: TSchema extends void ? (TAdditional extends void ? string : BlockchainWitnessConfigSchema) : TSchema }\n>\n\nexport type AdditionalBlockchainWitnessParams = {\n providers: BaseProvider[]\n}\n\nexport type BlockchainWitnessParams<\n TConfig extends BlockchainWitnessConfig = BlockchainWitnessConfig,\n TAdditionalParams extends AnyObject | void = void,\n> = WitnessParams<\n TConfig,\n WithAdditional<\n {\n providers: () => Promisable<BaseProvider[]>\n },\n TAdditionalParams\n >\n>\n\nexport abstract class AbstractBlockchainWitness<\n TParams extends BlockchainWitnessParams = BlockchainWitnessParams,\n TIn extends Payload = Payload,\n TOut extends Payload = Payload,\n TEventData extends WitnessModuleEventData<WitnessInstance<TParams, TIn, TOut>, TIn, TOut> = WitnessModuleEventData<\n WitnessInstance<TParams, TIn, TOut>,\n TIn,\n TOut\n >,\n> extends AbstractWitness<TParams, TIn, TOut, TEventData> {\n private _providers: BaseProvider[] | undefined = undefined\n\n async getProvider(cache?: boolean): Promise<BaseProvider | undefined>\n async getProvider(cache: boolean, error: string | true): Promise<BaseProvider>\n async getProvider(cache = false, error?: string | boolean): Promise<BaseProvider | undefined> {\n const providers = await this.getProviders(cache)\n if (providers.length === 0) {\n if (error) {\n throw Error(typeof error === 'string' ? error : 'No providers available')\n }\n return undefined\n }\n return providers[Date.now() % providers.length] //pick a random provider\n }\n\n async getProviders(cache = false): Promise<BaseProvider[]> {\n const cachedProviders = cache ? this._providers : undefined\n this._providers = cachedProviders ?? (await this.params.providers())\n return this._providers\n }\n}\n"],"mappings":"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","names":["providers"]}
@@ -1,3 +1,4 @@
1
1
  export * from './lib';
2
+ export * from './model';
2
3
  export * from './Witness';
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAA;AACrB,cAAc,WAAW,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAA;AACrB,cAAc,SAAS,CAAA;AACvB,cAAc,WAAW,CAAA"}
@@ -1,3 +1,4 @@
1
1
  export * from './lib';
2
+ export * from './model';
2
3
  export * from './Witness';
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAA;AACrB,cAAc,WAAW,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAA;AACrB,cAAc,SAAS,CAAA;AACvB,cAAc,WAAW,CAAA"}
@@ -1,3 +1,4 @@
1
1
  export * from './lib';
2
+ export * from './model';
2
3
  export * from './Witness';
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAA;AACrB,cAAc,WAAW,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAA;AACrB,cAAc,SAAS,CAAA;AACvB,cAAc,WAAW,CAAA"}
@@ -23,84 +23,57 @@ var checkIpfsUrl = (urlToCheck, ipfsGateway) => {
23
23
  }
24
24
  };
25
25
 
26
- // src/lib/getErc1967Status.ts
27
- import { BigNumber } from "@xylabs/bignumber";
28
- import { UpgradeableBeacon__factory } from "@xyo-network/open-zeppelin-typechain";
29
- var ERC1967_PROXY_IMPLEMENTATION_STORAGE_SLOT = "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc";
30
- var ERC1967_PROXY_BEACON_STORAGE_SLOT = "0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50";
31
- var ERC1967_PROXY_ADMIN_STORAGE_SLOT = "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103";
32
- var ERC1967_PROXY_ROLLBACK_STORAGE_SLOT = "0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143";
33
- var hexBytesOnlyOnly = (value) => {
34
- return value.startsWith("0x") ? value.substring(2) : value;
35
- };
36
- var addressFromHex = (value) => {
37
- return `0x${hexBytesOnlyOnly(value).substring(24)}`;
38
- };
39
- var isHexZero = (value) => {
40
- return new BigNumber(hexBytesOnlyOnly(value), "hex").eqn(0);
41
- };
42
- var readAddressFromSlot = async (provider, address, slot) => {
43
- const slotValue = await provider.getStorageAt(address, slot);
44
- return addressFromHex(slotValue);
45
- };
46
- var getErc1967Status = async (provider, address) => {
47
- const proxy = {
48
- admin: await readAddressFromSlot(provider, address, ERC1967_PROXY_ADMIN_STORAGE_SLOT),
49
- beacon: await readAddressFromSlot(provider, address, ERC1967_PROXY_BEACON_STORAGE_SLOT),
50
- implementation: await readAddressFromSlot(provider, address, ERC1967_PROXY_IMPLEMENTATION_STORAGE_SLOT),
51
- rollback: await readAddressFromSlot(provider, address, ERC1967_PROXY_ROLLBACK_STORAGE_SLOT)
52
- };
53
- if (!isHexZero(proxy.beacon)) {
54
- const beacon = UpgradeableBeacon__factory.connect(proxy.beacon, provider);
55
- try {
56
- proxy.implementation = await beacon.callStatic.implementation();
57
- } catch (ex) {
58
- const error = ex;
59
- console.log(error.message);
60
- }
61
- }
62
- return {
63
- address,
64
- implementation: isHexZero(proxy.implementation) ? address : proxy.implementation,
65
- proxy
66
- };
67
- };
68
-
69
26
  // src/lib/getProviderFromEnv.ts
70
27
  import { InfuraProvider, InfuraWebSocketProvider, JsonRpcProvider, WebSocketProvider } from "@ethersproject/providers";
71
28
  import { assertEx } from "@xylabs/assert";
72
- var createInfuraRpc = (chainId) => {
73
- return new InfuraProvider(chainId, {
29
+ var enableConfigOverride = false;
30
+ var configureConnection = (connection, { timeout = 1e3 } = {}) => {
31
+ if (connection && enableConfigOverride) {
32
+ connection.timeout = timeout;
33
+ connection.throttleCallback = async (attempt, url) => {
34
+ console.log(`throttleCallback[${attempt}]: ${url}`);
35
+ return await Promise.resolve(true);
36
+ };
37
+ }
38
+ };
39
+ var createInfuraRpc = (chainId, overrides) => {
40
+ const provider = process.env.INFURA_PROJECT_ID && process.env.INFURA_PROJECT_SECRET ? new InfuraProvider(chainId, {
74
41
  projectId: process.env.INFURA_PROJECT_ID,
75
42
  projectSecret: process.env.INFURA_PROJECT_SECRET
76
- });
43
+ }) : void 0;
44
+ configureConnection(provider?.connection, overrides);
45
+ return provider;
77
46
  };
78
- var createInfuraWss = (chainId) => {
79
- return new InfuraWebSocketProvider(chainId, {
47
+ var createInfuraWss = (chainId, overrides) => {
48
+ const provider = process.env.INFURA_PROJECT_ID ? new InfuraWebSocketProvider(chainId, {
80
49
  projectId: process.env.INFURA_PROJECT_ID
81
- });
50
+ }) : void 0;
51
+ configureConnection(provider?.connection, overrides);
52
+ return provider;
82
53
  };
83
- var createQuicknodeWss = (chainId) => {
54
+ var createQuicknodeWss = (chainId, overrides) => {
84
55
  const quickNodeWSSUri = process.env.QUICKNODE_WSS_URI;
85
- return quickNodeWSSUri ? new WebSocketProvider(quickNodeWSSUri, chainId) : void 0;
56
+ const provider = quickNodeWSSUri ? new WebSocketProvider(quickNodeWSSUri, chainId) : void 0;
57
+ configureConnection(provider?.connection, overrides);
58
+ return provider;
86
59
  };
87
- var createQuicknodeRpc = (chainId) => {
60
+ var createQuicknodeRpc = (chainId, overrides) => {
88
61
  const quickNodeHttpsUri = process.env.QUICKNODE_HTTPS_URI;
89
- return quickNodeHttpsUri ? new JsonRpcProvider(quickNodeHttpsUri, chainId) : void 0;
62
+ const provider = quickNodeHttpsUri ? new JsonRpcProvider(quickNodeHttpsUri, chainId) : void 0;
63
+ configureConnection(provider?.connection, overrides);
64
+ return provider;
90
65
  };
91
- var getProviderFromEnv = (chainId = 1, options) => {
92
- const { providerSource, providerType } = options ?? {};
66
+ var getProviderFromEnv = (chainId = 1, { providerSource = "infura", providerType = "rpc", overrides } = {}) => {
93
67
  let provider = void 0;
94
68
  switch (providerSource) {
95
69
  case "quicknode": {
96
70
  switch (providerType) {
97
71
  case "rpc": {
98
- provider = createQuicknodeRpc(chainId);
72
+ provider = createQuicknodeRpc(chainId, overrides);
99
73
  break;
100
74
  }
101
- case "wss":
102
- default: {
103
- provider = createQuicknodeWss(chainId);
75
+ case "wss": {
76
+ provider = createQuicknodeWss(chainId, overrides);
104
77
  break;
105
78
  }
106
79
  }
@@ -109,13 +82,12 @@ var getProviderFromEnv = (chainId = 1, options) => {
109
82
  default:
110
83
  case "infura": {
111
84
  switch (providerType) {
112
- case "rpc": {
113
- provider = createInfuraRpc(chainId);
85
+ case "wss": {
86
+ provider = createInfuraWss(chainId, overrides);
114
87
  break;
115
88
  }
116
- case "wss":
117
- default: {
118
- provider = createInfuraWss(chainId);
89
+ case "rpc": {
90
+ provider = createInfuraRpc(chainId, overrides);
119
91
  break;
120
92
  }
121
93
  }
@@ -125,7 +97,7 @@ var getProviderFromEnv = (chainId = 1, options) => {
125
97
  if (!provider) {
126
98
  provider = createInfuraWss(chainId) ?? createInfuraRpc(chainId) ?? createQuicknodeRpc(chainId);
127
99
  }
128
- return assertEx(provider, `Unable to create provider [${chainId}]: ${options ? JSON.stringify(options) : "default"}`);
100
+ return assertEx(provider, `Unable to create provider [${chainId}]: ${providerSource}|${providerType}`);
129
101
  };
130
102
  var providers = {};
131
103
  var getSharedProviderFromEnv = (chainId = 1, options) => {
@@ -133,27 +105,45 @@ var getSharedProviderFromEnv = (chainId = 1, options) => {
133
105
  providers[key] = providers[key] ?? getProviderFromEnv(chainId, options);
134
106
  return providers[key];
135
107
  };
108
+ var getProvidersFromEnv = (count = 1, chainId = 1, options = {}) => {
109
+ const result = [];
110
+ for (let i = 0; i < count; i++) {
111
+ result.push(getProviderFromEnv(chainId, options));
112
+ }
113
+ return result;
114
+ };
115
+
116
+ // src/model.ts
117
+ var BlockchainAddressSchema = "network.xyo.blockchain.address";
136
118
 
137
119
  // src/Witness.ts
138
120
  import { AbstractWitness } from "@xyo-network/abstract-witness";
139
121
  var BlockchainWitnessConfigSchema = "network.xyo.blockchain.witness";
140
122
  var AbstractBlockchainWitness = class extends AbstractWitness {
141
- get provider() {
142
- const { providers: providers2 } = this.params;
123
+ _providers = void 0;
124
+ async getProvider(cache = false, error) {
125
+ const providers2 = await this.getProviders(cache);
126
+ if (providers2.length === 0) {
127
+ if (error) {
128
+ throw Error(typeof error === "string" ? error : "No providers available");
129
+ }
130
+ return void 0;
131
+ }
143
132
  return providers2[Date.now() % providers2.length];
144
133
  }
134
+ async getProviders(cache = false) {
135
+ const cachedProviders = cache ? this._providers : void 0;
136
+ this._providers = cachedProviders ?? await this.params.providers();
137
+ return this._providers;
138
+ }
145
139
  };
146
140
  export {
147
141
  AbstractBlockchainWitness,
142
+ BlockchainAddressSchema,
148
143
  BlockchainWitnessConfigSchema,
149
- ERC1967_PROXY_ADMIN_STORAGE_SLOT,
150
- ERC1967_PROXY_BEACON_STORAGE_SLOT,
151
- ERC1967_PROXY_IMPLEMENTATION_STORAGE_SLOT,
152
- ERC1967_PROXY_ROLLBACK_STORAGE_SLOT,
153
144
  checkIpfsUrl,
154
- getErc1967Status,
155
145
  getProviderFromEnv,
156
- getSharedProviderFromEnv,
157
- readAddressFromSlot
146
+ getProvidersFromEnv,
147
+ getSharedProviderFromEnv
158
148
  };
159
149
  //# sourceMappingURL=index.js.map