@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,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 == null ? void 0 : 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 == null ? void 0 : 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 == null ? void 0 : 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 == null ? void 0 : 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
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/lib/checkIpfsUrl.ts","../../src/lib/getErc1967Status.ts","../../src/lib/getProviderFromEnv.ts","../../src/Witness.ts"],"sourcesContent":["/**\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/lib/checkIpfsUrl.ts","../../src/lib/getProviderFromEnv.ts","../../src/model.ts","../../src/Witness.ts"],"sourcesContent":["/**\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,12 +1,16 @@
1
1
  import { BaseProvider } from '@ethersproject/providers';
2
+ import { ConnectionInfo } from '@ethersproject/web';
2
3
  export type ProviderSource = 'infura' | 'quicknode';
3
4
  export type ProviderType = 'rpc' | 'wss';
4
- export declare const getProviderFromEnv: (chainId?: number, options?: {
5
+ export interface GetProvidersFromEnvOptions {
6
+ overrides?: Partial<ConnectionInfo>;
5
7
  providerSource?: ProviderSource;
6
8
  providerType?: ProviderType;
7
- }) => BaseProvider;
9
+ }
10
+ export declare const getProviderFromEnv: (chainId?: number, { providerSource, providerType, overrides }?: GetProvidersFromEnvOptions) => BaseProvider;
8
11
  export declare const getSharedProviderFromEnv: (chainId?: number, options?: {
9
12
  providerSource?: ProviderSource;
10
13
  providerType?: ProviderType;
11
14
  }) => BaseProvider;
15
+ export declare const getProvidersFromEnv: (count?: number, chainId?: number, options?: GetProvidersFromEnvOptions) => BaseProvider[];
12
16
  //# sourceMappingURL=getProviderFromEnv.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getProviderFromEnv.d.ts","sourceRoot":"","sources":["../../../src/lib/getProviderFromEnv.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAA+E,MAAM,0BAA0B,CAAA;AAGpI,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,WAAW,CAAA;AACnD,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,KAAK,CAAA;AAyBxC,eAAO,MAAM,kBAAkB,aACpB,MAAM,YACL;IAAE,cAAc,CAAC,EAAE,cAAc,CAAC;IAAC,YAAY,CAAC,EAAE,YAAY,CAAA;CAAE,KACzE,YAsCF,CAAA;AAID,eAAO,MAAM,wBAAwB,aAC1B,MAAM,YACL;IAAE,cAAc,CAAC,EAAE,cAAc,CAAC;IAAC,YAAY,CAAC,EAAE,YAAY,CAAA;CAAE,KACzE,YAIF,CAAA"}
1
+ {"version":3,"file":"getProviderFromEnv.d.ts","sourceRoot":"","sources":["../../../src/lib/getProviderFromEnv.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAA+E,MAAM,0BAA0B,CAAA;AACpI,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAGnD,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,WAAW,CAAA;AACnD,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,KAAK,CAAA;AAExC,MAAM,WAAW,0BAA0B;IACzC,SAAS,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;IACnC,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B,YAAY,CAAC,EAAE,YAAY,CAAA;CAC5B;AAkDD,eAAO,MAAM,kBAAkB,aACpB,MAAM,gDACiD,0BAA0B,KACzF,YAmCF,CAAA;AAID,eAAO,MAAM,wBAAwB,aAC1B,MAAM,YACL;IAAE,cAAc,CAAC,EAAE,cAAc,CAAC;IAAC,YAAY,CAAC,EAAE,YAAY,CAAA;CAAE,KACzE,YAIF,CAAA;AAED,eAAO,MAAM,mBAAmB,WAAW,MAAM,YAAe,MAAM,YAAkB,0BAA0B,KAAQ,YAAY,EAMrI,CAAA"}
@@ -1,12 +1,16 @@
1
1
  import { BaseProvider } from '@ethersproject/providers';
2
+ import { ConnectionInfo } from '@ethersproject/web';
2
3
  export type ProviderSource = 'infura' | 'quicknode';
3
4
  export type ProviderType = 'rpc' | 'wss';
4
- export declare const getProviderFromEnv: (chainId?: number, options?: {
5
+ export interface GetProvidersFromEnvOptions {
6
+ overrides?: Partial<ConnectionInfo>;
5
7
  providerSource?: ProviderSource;
6
8
  providerType?: ProviderType;
7
- }) => BaseProvider;
9
+ }
10
+ export declare const getProviderFromEnv: (chainId?: number, { providerSource, providerType, overrides }?: GetProvidersFromEnvOptions) => BaseProvider;
8
11
  export declare const getSharedProviderFromEnv: (chainId?: number, options?: {
9
12
  providerSource?: ProviderSource;
10
13
  providerType?: ProviderType;
11
14
  }) => BaseProvider;
15
+ export declare const getProvidersFromEnv: (count?: number, chainId?: number, options?: GetProvidersFromEnvOptions) => BaseProvider[];
12
16
  //# sourceMappingURL=getProviderFromEnv.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getProviderFromEnv.d.ts","sourceRoot":"","sources":["../../../src/lib/getProviderFromEnv.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAA+E,MAAM,0BAA0B,CAAA;AAGpI,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,WAAW,CAAA;AACnD,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,KAAK,CAAA;AAyBxC,eAAO,MAAM,kBAAkB,aACpB,MAAM,YACL;IAAE,cAAc,CAAC,EAAE,cAAc,CAAC;IAAC,YAAY,CAAC,EAAE,YAAY,CAAA;CAAE,KACzE,YAsCF,CAAA;AAID,eAAO,MAAM,wBAAwB,aAC1B,MAAM,YACL;IAAE,cAAc,CAAC,EAAE,cAAc,CAAC;IAAC,YAAY,CAAC,EAAE,YAAY,CAAA;CAAE,KACzE,YAIF,CAAA"}
1
+ {"version":3,"file":"getProviderFromEnv.d.ts","sourceRoot":"","sources":["../../../src/lib/getProviderFromEnv.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAA+E,MAAM,0BAA0B,CAAA;AACpI,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAGnD,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,WAAW,CAAA;AACnD,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,KAAK,CAAA;AAExC,MAAM,WAAW,0BAA0B;IACzC,SAAS,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;IACnC,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B,YAAY,CAAC,EAAE,YAAY,CAAA;CAC5B;AAkDD,eAAO,MAAM,kBAAkB,aACpB,MAAM,gDACiD,0BAA0B,KACzF,YAmCF,CAAA;AAID,eAAO,MAAM,wBAAwB,aAC1B,MAAM,YACL;IAAE,cAAc,CAAC,EAAE,cAAc,CAAC;IAAC,YAAY,CAAC,EAAE,YAAY,CAAA;CAAE,KACzE,YAIF,CAAA;AAED,eAAO,MAAM,mBAAmB,WAAW,MAAM,YAAe,MAAM,YAAkB,0BAA0B,KAAQ,YAAY,EAMrI,CAAA"}
@@ -1,12 +1,16 @@
1
1
  import { BaseProvider } from '@ethersproject/providers';
2
+ import { ConnectionInfo } from '@ethersproject/web';
2
3
  export type ProviderSource = 'infura' | 'quicknode';
3
4
  export type ProviderType = 'rpc' | 'wss';
4
- export declare const getProviderFromEnv: (chainId?: number, options?: {
5
+ export interface GetProvidersFromEnvOptions {
6
+ overrides?: Partial<ConnectionInfo>;
5
7
  providerSource?: ProviderSource;
6
8
  providerType?: ProviderType;
7
- }) => BaseProvider;
9
+ }
10
+ export declare const getProviderFromEnv: (chainId?: number, { providerSource, providerType, overrides }?: GetProvidersFromEnvOptions) => BaseProvider;
8
11
  export declare const getSharedProviderFromEnv: (chainId?: number, options?: {
9
12
  providerSource?: ProviderSource;
10
13
  providerType?: ProviderType;
11
14
  }) => BaseProvider;
15
+ export declare const getProvidersFromEnv: (count?: number, chainId?: number, options?: GetProvidersFromEnvOptions) => BaseProvider[];
12
16
  //# sourceMappingURL=getProviderFromEnv.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getProviderFromEnv.d.ts","sourceRoot":"","sources":["../../../src/lib/getProviderFromEnv.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAA+E,MAAM,0BAA0B,CAAA;AAGpI,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,WAAW,CAAA;AACnD,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,KAAK,CAAA;AAyBxC,eAAO,MAAM,kBAAkB,aACpB,MAAM,YACL;IAAE,cAAc,CAAC,EAAE,cAAc,CAAC;IAAC,YAAY,CAAC,EAAE,YAAY,CAAA;CAAE,KACzE,YAsCF,CAAA;AAID,eAAO,MAAM,wBAAwB,aAC1B,MAAM,YACL;IAAE,cAAc,CAAC,EAAE,cAAc,CAAC;IAAC,YAAY,CAAC,EAAE,YAAY,CAAA;CAAE,KACzE,YAIF,CAAA"}
1
+ {"version":3,"file":"getProviderFromEnv.d.ts","sourceRoot":"","sources":["../../../src/lib/getProviderFromEnv.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAA+E,MAAM,0BAA0B,CAAA;AACpI,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAGnD,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,WAAW,CAAA;AACnD,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,KAAK,CAAA;AAExC,MAAM,WAAW,0BAA0B;IACzC,SAAS,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;IACnC,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B,YAAY,CAAC,EAAE,YAAY,CAAA;CAC5B;AAkDD,eAAO,MAAM,kBAAkB,aACpB,MAAM,gDACiD,0BAA0B,KACzF,YAmCF,CAAA;AAID,eAAO,MAAM,wBAAwB,aAC1B,MAAM,YACL;IAAE,cAAc,CAAC,EAAE,cAAc,CAAC;IAAC,YAAY,CAAC,EAAE,YAAY,CAAA;CAAE,KACzE,YAIF,CAAA;AAED,eAAO,MAAM,mBAAmB,WAAW,MAAM,YAAe,MAAM,YAAkB,0BAA0B,KAAQ,YAAY,EAMrI,CAAA"}
@@ -1,4 +1,3 @@
1
1
  export * from './checkIpfsUrl';
2
- export * from './getErc1967Status';
3
2
  export * from './getProviderFromEnv';
4
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA;AAC9B,cAAc,oBAAoB,CAAA;AAClC,cAAc,sBAAsB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA;AAC9B,cAAc,sBAAsB,CAAA"}
@@ -1,4 +1,3 @@
1
1
  export * from './checkIpfsUrl';
2
- export * from './getErc1967Status';
3
2
  export * from './getProviderFromEnv';
4
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA;AAC9B,cAAc,oBAAoB,CAAA;AAClC,cAAc,sBAAsB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA;AAC9B,cAAc,sBAAsB,CAAA"}
@@ -1,4 +1,3 @@
1
1
  export * from './checkIpfsUrl';
2
- export * from './getErc1967Status';
3
2
  export * from './getProviderFromEnv';
4
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA;AAC9B,cAAc,oBAAoB,CAAA;AAClC,cAAc,sBAAsB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA;AAC9B,cAAc,sBAAsB,CAAA"}
@@ -0,0 +1,9 @@
1
+ import { Payload } from '@xyo-network/payload-model';
2
+ export declare const BlockchainAddressSchema = "network.xyo.blockchain.address";
3
+ export type BlockchainAddressSchema = typeof BlockchainAddressSchema;
4
+ export type BlockchainAddress = Payload<{
5
+ address?: string;
6
+ blockTag?: string | number;
7
+ chainId?: number;
8
+ }, BlockchainAddressSchema>;
9
+ //# sourceMappingURL=model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAEpD,eAAO,MAAM,uBAAuB,mCAAmC,CAAA;AACvE,MAAM,MAAM,uBAAuB,GAAG,OAAO,uBAAuB,CAAA;AAEpE,MAAM,MAAM,iBAAiB,GAAG,OAAO,CACrC;IACE,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,EACD,uBAAuB,CACxB,CAAA"}
@@ -0,0 +1,9 @@
1
+ import { Payload } from '@xyo-network/payload-model';
2
+ export declare const BlockchainAddressSchema = "network.xyo.blockchain.address";
3
+ export type BlockchainAddressSchema = typeof BlockchainAddressSchema;
4
+ export type BlockchainAddress = Payload<{
5
+ address?: string;
6
+ blockTag?: string | number;
7
+ chainId?: number;
8
+ }, BlockchainAddressSchema>;
9
+ //# sourceMappingURL=model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAEpD,eAAO,MAAM,uBAAuB,mCAAmC,CAAA;AACvE,MAAM,MAAM,uBAAuB,GAAG,OAAO,uBAAuB,CAAA;AAEpE,MAAM,MAAM,iBAAiB,GAAG,OAAO,CACrC;IACE,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,EACD,uBAAuB,CACxB,CAAA"}
@@ -0,0 +1,9 @@
1
+ import { Payload } from '@xyo-network/payload-model';
2
+ export declare const BlockchainAddressSchema = "network.xyo.blockchain.address";
3
+ export type BlockchainAddressSchema = typeof BlockchainAddressSchema;
4
+ export type BlockchainAddress = Payload<{
5
+ address?: string;
6
+ blockTag?: string | number;
7
+ chainId?: number;
8
+ }, BlockchainAddressSchema>;
9
+ //# sourceMappingURL=model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAEpD,eAAO,MAAM,uBAAuB,mCAAmC,CAAA;AACvE,MAAM,MAAM,uBAAuB,GAAG,OAAO,uBAAuB,CAAA;AAEpE,MAAM,MAAM,iBAAiB,GAAG,OAAO,CACrC;IACE,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,EACD,uBAAuB,CACxB,CAAA"}
package/package.json CHANGED
@@ -10,15 +10,17 @@
10
10
  "url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js/issues"
11
11
  },
12
12
  "dependencies": {
13
- "@xylabs/assert": "^2.13.3",
14
- "@xyo-network/abstract-witness": "~2.79.3",
15
- "@xyo-network/object": "~2.79.3",
16
- "@xyo-network/payload-model": "~2.79.3",
17
- "@xyo-network/witness-model": "~2.79.3"
13
+ "@ethersproject/web": "^5.7.1",
14
+ "@xylabs/assert": "^2.13.8",
15
+ "@xylabs/promise": "^2.13.8",
16
+ "@xyo-network/abstract-witness": "~2.79.5",
17
+ "@xyo-network/object": "~2.79.5",
18
+ "@xyo-network/payload-model": "~2.79.5",
19
+ "@xyo-network/witness-model": "~2.79.5"
18
20
  },
19
21
  "devDependencies": {
20
22
  "@ethersproject/providers": "^5.7.2",
21
- "@xylabs/jest-helpers": "^2.13.3",
23
+ "@xylabs/jest-helpers": "^2.13.8",
22
24
  "@xylabs/ts-scripts-yarn3": "^3.1.21",
23
25
  "@xylabs/tsconfig": "^3.1.21",
24
26
  "ethers": "^5.7.2",
@@ -64,6 +66,6 @@
64
66
  "url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js.git"
65
67
  },
66
68
  "sideEffects": false,
67
- "version": "2.79.3",
69
+ "version": "2.79.5",
68
70
  "type": "module"
69
71
  }
package/src/Witness.ts CHANGED
@@ -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'
@@ -22,7 +23,7 @@ export type BlockchainWitnessParams<
22
23
  TConfig,
23
24
  WithAdditional<
24
25
  {
25
- providers: BaseProvider[]
26
+ providers: () => Promisable<BaseProvider[]>
26
27
  },
27
28
  TAdditionalParams
28
29
  >
@@ -38,8 +39,24 @@ export abstract class AbstractBlockchainWitness<
38
39
  TOut
39
40
  >,
40
41
  > extends AbstractWitness<TParams, TIn, TOut, TEventData> {
41
- get provider() {
42
- const { providers } = this.params
42
+ private _providers: BaseProvider[] | undefined = undefined
43
+
44
+ async getProvider(cache?: boolean): Promise<BaseProvider | undefined>
45
+ async getProvider(cache: boolean, error: string | true): Promise<BaseProvider>
46
+ async getProvider(cache = false, error?: string | boolean): Promise<BaseProvider | undefined> {
47
+ const providers = await this.getProviders(cache)
48
+ if (providers.length === 0) {
49
+ if (error) {
50
+ throw Error(typeof error === 'string' ? error : 'No providers available')
51
+ }
52
+ return undefined
53
+ }
43
54
  return providers[Date.now() % providers.length] //pick a random provider
44
55
  }
56
+
57
+ async getProviders(cache = false): Promise<BaseProvider[]> {
58
+ const cachedProviders = cache ? this._providers : undefined
59
+ this._providers = cachedProviders ?? (await this.params.providers())
60
+ return this._providers
61
+ }
45
62
  }
package/src/index.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  export * from './lib'
2
+ export * from './model'
2
3
  export * from './Witness'