@xyo-network/witness-blockchain-abstract 2.79.1
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.
- package/LICENSE +165 -0
- package/README.md +13 -0
- package/dist/browser/Witness.d.cts +20 -0
- package/dist/browser/Witness.d.cts.map +1 -0
- package/dist/browser/Witness.d.mts +20 -0
- package/dist/browser/Witness.d.mts.map +1 -0
- package/dist/browser/Witness.d.ts +20 -0
- package/dist/browser/Witness.d.ts.map +1 -0
- package/dist/browser/index.cjs +107 -0
- package/dist/browser/index.cjs.map +1 -0
- package/dist/browser/index.d.cts +3 -0
- package/dist/browser/index.d.cts.map +1 -0
- package/dist/browser/index.d.mts +3 -0
- package/dist/browser/index.d.mts.map +1 -0
- package/dist/browser/index.d.ts +3 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +84 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/lib/getProviderFromEnv.d.cts +12 -0
- package/dist/browser/lib/getProviderFromEnv.d.cts.map +1 -0
- package/dist/browser/lib/getProviderFromEnv.d.mts +12 -0
- package/dist/browser/lib/getProviderFromEnv.d.mts.map +1 -0
- package/dist/browser/lib/getProviderFromEnv.d.ts +12 -0
- package/dist/browser/lib/getProviderFromEnv.d.ts.map +1 -0
- package/dist/browser/lib/index.d.cts +2 -0
- package/dist/browser/lib/index.d.cts.map +1 -0
- package/dist/browser/lib/index.d.mts +2 -0
- package/dist/browser/lib/index.d.mts.map +1 -0
- package/dist/browser/lib/index.d.ts +2 -0
- package/dist/browser/lib/index.d.ts.map +1 -0
- package/dist/node/Witness.d.cts +20 -0
- package/dist/node/Witness.d.cts.map +1 -0
- package/dist/node/Witness.d.mts +20 -0
- package/dist/node/Witness.d.mts.map +1 -0
- package/dist/node/Witness.d.ts +20 -0
- package/dist/node/Witness.d.ts.map +1 -0
- package/dist/node/index.cjs +114 -0
- package/dist/node/index.cjs.map +1 -0
- package/dist/node/index.d.cts +3 -0
- package/dist/node/index.d.cts.map +1 -0
- package/dist/node/index.d.mts +3 -0
- package/dist/node/index.d.mts.map +1 -0
- package/dist/node/index.d.ts +3 -0
- package/dist/node/index.d.ts.map +1 -0
- package/dist/node/index.js +84 -0
- package/dist/node/index.js.map +1 -0
- package/dist/node/lib/getProviderFromEnv.d.cts +12 -0
- package/dist/node/lib/getProviderFromEnv.d.cts.map +1 -0
- package/dist/node/lib/getProviderFromEnv.d.mts +12 -0
- package/dist/node/lib/getProviderFromEnv.d.mts.map +1 -0
- package/dist/node/lib/getProviderFromEnv.d.ts +12 -0
- package/dist/node/lib/getProviderFromEnv.d.ts.map +1 -0
- package/dist/node/lib/index.d.cts +2 -0
- package/dist/node/lib/index.d.cts.map +1 -0
- package/dist/node/lib/index.d.mts +2 -0
- package/dist/node/lib/index.d.mts.map +1 -0
- package/dist/node/lib/index.d.ts +2 -0
- package/dist/node/lib/index.d.ts.map +1 -0
- package/package.json +69 -0
- package/src/Witness.ts +45 -0
- package/src/index.ts +2 -0
- package/src/lib/getProviderFromEnv.ts +82 -0
- package/src/lib/index.ts +1 -0
- package/typedoc.json +5 -0
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { BaseProvider } from '@ethersproject/providers';
|
|
2
|
+
import { AbstractWitness } from '@xyo-network/abstract-witness';
|
|
3
|
+
import { AnyObject, WithAdditional } from '@xyo-network/object';
|
|
4
|
+
import { Payload } from '@xyo-network/payload-model';
|
|
5
|
+
import { WitnessConfig, WitnessInstance, WitnessModuleEventData, WitnessParams } from '@xyo-network/witness-model';
|
|
6
|
+
export declare const BlockchainWitnessConfigSchema = "network.xyo.blockchain.witness";
|
|
7
|
+
export type BlockchainWitnessConfigSchema = typeof BlockchainWitnessConfigSchema;
|
|
8
|
+
export type BlockchainWitnessConfig<TAdditional extends Omit<Payload, 'schema'> | void = void, TSchema extends string | void = void> = WitnessConfig<TAdditional & {
|
|
9
|
+
schema: TSchema extends void ? (TAdditional extends void ? string : BlockchainWitnessConfigSchema) : TSchema;
|
|
10
|
+
}>;
|
|
11
|
+
export type AdditionalBlockchainWitnessParams = {
|
|
12
|
+
providers: BaseProvider[];
|
|
13
|
+
};
|
|
14
|
+
export type BlockchainWitnessParams<TConfig extends BlockchainWitnessConfig = BlockchainWitnessConfig, TAdditionalParams extends AnyObject | void = void> = WitnessParams<TConfig, WithAdditional<{
|
|
15
|
+
providers: BaseProvider[];
|
|
16
|
+
}, TAdditionalParams>>;
|
|
17
|
+
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
|
+
}
|
|
20
|
+
//# sourceMappingURL=Witness.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/index.ts
|
|
21
|
+
var src_exports = {};
|
|
22
|
+
__export(src_exports, {
|
|
23
|
+
AbstractBlockchainWitness: () => AbstractBlockchainWitness,
|
|
24
|
+
BlockchainWitnessConfigSchema: () => BlockchainWitnessConfigSchema,
|
|
25
|
+
getProviderFromEnv: () => getProviderFromEnv,
|
|
26
|
+
getSharedProviderFromEnv: () => getSharedProviderFromEnv
|
|
27
|
+
});
|
|
28
|
+
module.exports = __toCommonJS(src_exports);
|
|
29
|
+
|
|
30
|
+
// src/lib/getProviderFromEnv.ts
|
|
31
|
+
var import_providers = require("@ethersproject/providers");
|
|
32
|
+
var import_assert = require("@xylabs/assert");
|
|
33
|
+
var createInfuraRpc = (chainId) => {
|
|
34
|
+
return new import_providers.InfuraProvider(chainId, {
|
|
35
|
+
projectId: process.env.INFURA_PROJECT_ID,
|
|
36
|
+
projectSecret: process.env.INFURA_PROJECT_SECRET
|
|
37
|
+
});
|
|
38
|
+
};
|
|
39
|
+
var createInfuraWss = (chainId) => {
|
|
40
|
+
return new import_providers.InfuraWebSocketProvider(chainId, {
|
|
41
|
+
projectId: process.env.INFURA_PROJECT_ID
|
|
42
|
+
});
|
|
43
|
+
};
|
|
44
|
+
var createQuicknodeWss = (chainId) => {
|
|
45
|
+
const quickNodeWSSUri = process.env.QUICKNODE_WSS_URI;
|
|
46
|
+
return quickNodeWSSUri ? new import_providers.WebSocketProvider(quickNodeWSSUri, chainId) : void 0;
|
|
47
|
+
};
|
|
48
|
+
var createQuicknodeRpc = (chainId) => {
|
|
49
|
+
const quickNodeHttpsUri = process.env.QUICKNODE_HTTPS_URI;
|
|
50
|
+
return quickNodeHttpsUri ? new import_providers.JsonRpcProvider(quickNodeHttpsUri, chainId) : void 0;
|
|
51
|
+
};
|
|
52
|
+
var getProviderFromEnv = (chainId = 1, options) => {
|
|
53
|
+
const { providerSource, providerType } = options ?? {};
|
|
54
|
+
let provider = void 0;
|
|
55
|
+
switch (providerSource) {
|
|
56
|
+
case "quicknode": {
|
|
57
|
+
switch (providerType) {
|
|
58
|
+
case "rpc": {
|
|
59
|
+
provider = createQuicknodeRpc(chainId);
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
case "wss":
|
|
63
|
+
default: {
|
|
64
|
+
provider = createQuicknodeWss(chainId);
|
|
65
|
+
break;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
break;
|
|
69
|
+
}
|
|
70
|
+
default:
|
|
71
|
+
case "infura": {
|
|
72
|
+
switch (providerType) {
|
|
73
|
+
case "rpc": {
|
|
74
|
+
provider = createInfuraRpc(chainId);
|
|
75
|
+
break;
|
|
76
|
+
}
|
|
77
|
+
case "wss":
|
|
78
|
+
default: {
|
|
79
|
+
provider = createInfuraWss(chainId);
|
|
80
|
+
break;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
break;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
if (!provider) {
|
|
87
|
+
provider = createInfuraWss(chainId) ?? createInfuraRpc(chainId) ?? createQuicknodeRpc(chainId);
|
|
88
|
+
}
|
|
89
|
+
return (0, import_assert.assertEx)(provider, `Unable to create provider [${chainId}]: ${options ? JSON.stringify(options) : "default"}`);
|
|
90
|
+
};
|
|
91
|
+
var providers = {};
|
|
92
|
+
var getSharedProviderFromEnv = (chainId = 1, options) => {
|
|
93
|
+
const key = `${chainId}:${options ? JSON.stringify(options) : "default"}`;
|
|
94
|
+
providers[key] = providers[key] ?? getProviderFromEnv(chainId, options);
|
|
95
|
+
return providers[key];
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
// src/Witness.ts
|
|
99
|
+
var import_abstract_witness = require("@xyo-network/abstract-witness");
|
|
100
|
+
var BlockchainWitnessConfigSchema = "network.xyo.blockchain.witness";
|
|
101
|
+
var AbstractBlockchainWitness = class extends import_abstract_witness.AbstractWitness {
|
|
102
|
+
get provider() {
|
|
103
|
+
const { providers: providers2 } = this.params;
|
|
104
|
+
return providers2[Date.now() % providers2.length];
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
108
|
+
0 && (module.exports = {
|
|
109
|
+
AbstractBlockchainWitness,
|
|
110
|
+
BlockchainWitnessConfigSchema,
|
|
111
|
+
getProviderFromEnv,
|
|
112
|
+
getSharedProviderFromEnv
|
|
113
|
+
});
|
|
114
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts","../../src/lib/getProviderFromEnv.ts","../../src/Witness.ts"],"sourcesContent":["export * from './lib'\nexport * from './Witness'\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":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,uBAA0G;AAC1G,oBAAyB;AAKzB,IAAM,kBAAkB,CAAC,YAAoB;AAC3C,SAAO,IAAI,gCAAe,SAAS;AAAA,IACjC,WAAW,QAAQ,IAAI;AAAA,IACvB,eAAe,QAAQ,IAAI;AAAA,EAC7B,CAAC;AACH;AAEA,IAAM,kBAAkB,CAAC,YAAoB;AAC3C,SAAO,IAAI,yCAAwB,SAAS;AAAA,IAC1C,WAAW,QAAQ,IAAI;AAAA,EACzB,CAAC;AACH;AAEA,IAAM,qBAAqB,CAAC,YAAoB;AAC9C,QAAM,kBAAkB,QAAQ,IAAI;AACpC,SAAO,kBAAkB,IAAI,mCAAkB,iBAAiB,OAAO,IAAI;AAC7E;AAEA,IAAM,qBAAqB,CAAC,YAAoB;AAC9C,QAAM,oBAAoB,QAAQ,IAAI;AACtC,SAAO,oBAAoB,IAAI,iCAAgB,mBAAmB,OAAO,IAAI;AAC/E;AAEO,IAAM,qBAAqB,CAChC,UAAkB,GAClB,YACiB;AACjB,QAAM,EAAE,gBAAgB,aAAa,IAAI,WAAW,CAAC;AACrD,MAAI,WAAqC;AACzC,UAAQ,gBAAgB;AAAA,IACtB,KAAK,aAAa;AAChB,cAAQ,cAAc;AAAA,QACpB,KAAK,OAAO;AACV,qBAAW,mBAAmB,OAAO;AACrC;AAAA,QACF;AAAA,QACA,KAAK;AAAA,QACL,SAAS;AACP,qBAAW,mBAAmB,OAAO;AACrC;AAAA,QACF;AAAA,MACF;AACA;AAAA,IACF;AAAA,IACA;AAAA,IACA,KAAK,UAAU;AACb,cAAQ,cAAc;AAAA,QACpB,KAAK,OAAO;AACV,qBAAW,gBAAgB,OAAO;AAClC;AAAA,QACF;AAAA,QACA,KAAK;AAAA,QACL,SAAS;AACP,qBAAW,gBAAgB,OAAO;AAClC;AAAA,QACF;AAAA,MACF;AACA;AAAA,IACF;AAAA,EACF;AACA,MAAI,CAAC,UAAU;AACb,eAAW,gBAAgB,OAAO,KAAK,gBAAgB,OAAO,KAAK,mBAAmB,OAAO;AAAA,EAC/F;AACA,aAAO,wBAAS,UAAU,8BAA8B,OAAO,MAAM,UAAU,KAAK,UAAU,OAAO,IAAI,SAAS,EAAE;AACtH;AAEA,IAAM,YAA0C,CAAC;AAE1C,IAAM,2BAA2B,CACtC,UAAkB,GAClB,YACiB;AACjB,QAAM,MAAM,GAAG,OAAO,IAAI,UAAU,KAAK,UAAU,OAAO,IAAI,SAAS;AACvE,YAAU,GAAG,IAAI,UAAU,GAAG,KAAK,mBAAmB,SAAS,OAAO;AACtE,SAAO,UAAU,GAAG;AACtB;;;AChFA,8BAAgC;AAKzB,IAAM,gCAAgC;AAwBtC,IAAe,4BAAf,cASG,wCAAgD;AAAA,EACxD,IAAI,WAAW;AACb,UAAM,EAAE,WAAAA,WAAU,IAAI,KAAK;AAC3B,WAAOA,WAAU,KAAK,IAAI,IAAIA,WAAU,MAAM;AAAA,EAChD;AACF;","names":["providers"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAA;AACrB,cAAc,WAAW,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAA;AACrB,cAAc,WAAW,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAA;AACrB,cAAc,WAAW,CAAA"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
// src/lib/getProviderFromEnv.ts
|
|
2
|
+
import { InfuraProvider, InfuraWebSocketProvider, JsonRpcProvider, WebSocketProvider } from "@ethersproject/providers";
|
|
3
|
+
import { assertEx } from "@xylabs/assert";
|
|
4
|
+
var createInfuraRpc = (chainId) => {
|
|
5
|
+
return new InfuraProvider(chainId, {
|
|
6
|
+
projectId: process.env.INFURA_PROJECT_ID,
|
|
7
|
+
projectSecret: process.env.INFURA_PROJECT_SECRET
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
var createInfuraWss = (chainId) => {
|
|
11
|
+
return new InfuraWebSocketProvider(chainId, {
|
|
12
|
+
projectId: process.env.INFURA_PROJECT_ID
|
|
13
|
+
});
|
|
14
|
+
};
|
|
15
|
+
var createQuicknodeWss = (chainId) => {
|
|
16
|
+
const quickNodeWSSUri = process.env.QUICKNODE_WSS_URI;
|
|
17
|
+
return quickNodeWSSUri ? new WebSocketProvider(quickNodeWSSUri, chainId) : void 0;
|
|
18
|
+
};
|
|
19
|
+
var createQuicknodeRpc = (chainId) => {
|
|
20
|
+
const quickNodeHttpsUri = process.env.QUICKNODE_HTTPS_URI;
|
|
21
|
+
return quickNodeHttpsUri ? new JsonRpcProvider(quickNodeHttpsUri, chainId) : void 0;
|
|
22
|
+
};
|
|
23
|
+
var getProviderFromEnv = (chainId = 1, options) => {
|
|
24
|
+
const { providerSource, providerType } = options ?? {};
|
|
25
|
+
let provider = void 0;
|
|
26
|
+
switch (providerSource) {
|
|
27
|
+
case "quicknode": {
|
|
28
|
+
switch (providerType) {
|
|
29
|
+
case "rpc": {
|
|
30
|
+
provider = createQuicknodeRpc(chainId);
|
|
31
|
+
break;
|
|
32
|
+
}
|
|
33
|
+
case "wss":
|
|
34
|
+
default: {
|
|
35
|
+
provider = createQuicknodeWss(chainId);
|
|
36
|
+
break;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
break;
|
|
40
|
+
}
|
|
41
|
+
default:
|
|
42
|
+
case "infura": {
|
|
43
|
+
switch (providerType) {
|
|
44
|
+
case "rpc": {
|
|
45
|
+
provider = createInfuraRpc(chainId);
|
|
46
|
+
break;
|
|
47
|
+
}
|
|
48
|
+
case "wss":
|
|
49
|
+
default: {
|
|
50
|
+
provider = createInfuraWss(chainId);
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if (!provider) {
|
|
58
|
+
provider = createInfuraWss(chainId) ?? createInfuraRpc(chainId) ?? createQuicknodeRpc(chainId);
|
|
59
|
+
}
|
|
60
|
+
return assertEx(provider, `Unable to create provider [${chainId}]: ${options ? JSON.stringify(options) : "default"}`);
|
|
61
|
+
};
|
|
62
|
+
var providers = {};
|
|
63
|
+
var getSharedProviderFromEnv = (chainId = 1, options) => {
|
|
64
|
+
const key = `${chainId}:${options ? JSON.stringify(options) : "default"}`;
|
|
65
|
+
providers[key] = providers[key] ?? getProviderFromEnv(chainId, options);
|
|
66
|
+
return providers[key];
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
// src/Witness.ts
|
|
70
|
+
import { AbstractWitness } from "@xyo-network/abstract-witness";
|
|
71
|
+
var BlockchainWitnessConfigSchema = "network.xyo.blockchain.witness";
|
|
72
|
+
var AbstractBlockchainWitness = class extends AbstractWitness {
|
|
73
|
+
get provider() {
|
|
74
|
+
const { providers: providers2 } = this.params;
|
|
75
|
+
return providers2[Date.now() % providers2.length];
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
export {
|
|
79
|
+
AbstractBlockchainWitness,
|
|
80
|
+
BlockchainWitnessConfigSchema,
|
|
81
|
+
getProviderFromEnv,
|
|
82
|
+
getSharedProviderFromEnv
|
|
83
|
+
};
|
|
84
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/lib/getProviderFromEnv.ts","../../src/Witness.ts"],"sourcesContent":["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":";AAAA,SAAuB,gBAAgB,yBAAyB,iBAAiB,yBAAyB;AAC1G,SAAS,gBAAgB;AAKzB,IAAM,kBAAkB,CAAC,YAAoB;AAC3C,SAAO,IAAI,eAAe,SAAS;AAAA,IACjC,WAAW,QAAQ,IAAI;AAAA,IACvB,eAAe,QAAQ,IAAI;AAAA,EAC7B,CAAC;AACH;AAEA,IAAM,kBAAkB,CAAC,YAAoB;AAC3C,SAAO,IAAI,wBAAwB,SAAS;AAAA,IAC1C,WAAW,QAAQ,IAAI;AAAA,EACzB,CAAC;AACH;AAEA,IAAM,qBAAqB,CAAC,YAAoB;AAC9C,QAAM,kBAAkB,QAAQ,IAAI;AACpC,SAAO,kBAAkB,IAAI,kBAAkB,iBAAiB,OAAO,IAAI;AAC7E;AAEA,IAAM,qBAAqB,CAAC,YAAoB;AAC9C,QAAM,oBAAoB,QAAQ,IAAI;AACtC,SAAO,oBAAoB,IAAI,gBAAgB,mBAAmB,OAAO,IAAI;AAC/E;AAEO,IAAM,qBAAqB,CAChC,UAAkB,GAClB,YACiB;AACjB,QAAM,EAAE,gBAAgB,aAAa,IAAI,WAAW,CAAC;AACrD,MAAI,WAAqC;AACzC,UAAQ,gBAAgB;AAAA,IACtB,KAAK,aAAa;AAChB,cAAQ,cAAc;AAAA,QACpB,KAAK,OAAO;AACV,qBAAW,mBAAmB,OAAO;AACrC;AAAA,QACF;AAAA,QACA,KAAK;AAAA,QACL,SAAS;AACP,qBAAW,mBAAmB,OAAO;AACrC;AAAA,QACF;AAAA,MACF;AACA;AAAA,IACF;AAAA,IACA;AAAA,IACA,KAAK,UAAU;AACb,cAAQ,cAAc;AAAA,QACpB,KAAK,OAAO;AACV,qBAAW,gBAAgB,OAAO;AAClC;AAAA,QACF;AAAA,QACA,KAAK;AAAA,QACL,SAAS;AACP,qBAAW,gBAAgB,OAAO;AAClC;AAAA,QACF;AAAA,MACF;AACA;AAAA,IACF;AAAA,EACF;AACA,MAAI,CAAC,UAAU;AACb,eAAW,gBAAgB,OAAO,KAAK,gBAAgB,OAAO,KAAK,mBAAmB,OAAO;AAAA,EAC/F;AACA,SAAO,SAAS,UAAU,8BAA8B,OAAO,MAAM,UAAU,KAAK,UAAU,OAAO,IAAI,SAAS,EAAE;AACtH;AAEA,IAAM,YAA0C,CAAC;AAE1C,IAAM,2BAA2B,CACtC,UAAkB,GAClB,YACiB;AACjB,QAAM,MAAM,GAAG,OAAO,IAAI,UAAU,KAAK,UAAU,OAAO,IAAI,SAAS;AACvE,YAAU,GAAG,IAAI,UAAU,GAAG,KAAK,mBAAmB,SAAS,OAAO;AACtE,SAAO,UAAU,GAAG;AACtB;;;AChFA,SAAS,uBAAuB;AAKzB,IAAM,gCAAgC;AAwBtC,IAAe,4BAAf,cASG,gBAAgD;AAAA,EACxD,IAAI,WAAW;AACb,UAAM,EAAE,WAAAA,WAAU,IAAI,KAAK;AAC3B,WAAOA,WAAU,KAAK,IAAI,IAAIA,WAAU,MAAM;AAAA,EAChD;AACF;","names":["providers"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { BaseProvider } from '@ethersproject/providers';
|
|
2
|
+
export type ProviderSource = 'infura' | 'quicknode';
|
|
3
|
+
export type ProviderType = 'rpc' | 'wss';
|
|
4
|
+
export declare const getProviderFromEnv: (chainId?: number, options?: {
|
|
5
|
+
providerSource?: ProviderSource;
|
|
6
|
+
providerType?: ProviderType;
|
|
7
|
+
}) => BaseProvider;
|
|
8
|
+
export declare const getSharedProviderFromEnv: (chainId?: number, options?: {
|
|
9
|
+
providerSource?: ProviderSource;
|
|
10
|
+
providerType?: ProviderType;
|
|
11
|
+
}) => BaseProvider;
|
|
12
|
+
//# sourceMappingURL=getProviderFromEnv.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { BaseProvider } from '@ethersproject/providers';
|
|
2
|
+
export type ProviderSource = 'infura' | 'quicknode';
|
|
3
|
+
export type ProviderType = 'rpc' | 'wss';
|
|
4
|
+
export declare const getProviderFromEnv: (chainId?: number, options?: {
|
|
5
|
+
providerSource?: ProviderSource;
|
|
6
|
+
providerType?: ProviderType;
|
|
7
|
+
}) => BaseProvider;
|
|
8
|
+
export declare const getSharedProviderFromEnv: (chainId?: number, options?: {
|
|
9
|
+
providerSource?: ProviderSource;
|
|
10
|
+
providerType?: ProviderType;
|
|
11
|
+
}) => BaseProvider;
|
|
12
|
+
//# sourceMappingURL=getProviderFromEnv.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { BaseProvider } from '@ethersproject/providers';
|
|
2
|
+
export type ProviderSource = 'infura' | 'quicknode';
|
|
3
|
+
export type ProviderType = 'rpc' | 'wss';
|
|
4
|
+
export declare const getProviderFromEnv: (chainId?: number, options?: {
|
|
5
|
+
providerSource?: ProviderSource;
|
|
6
|
+
providerType?: ProviderType;
|
|
7
|
+
}) => BaseProvider;
|
|
8
|
+
export declare const getSharedProviderFromEnv: (chainId?: number, options?: {
|
|
9
|
+
providerSource?: ProviderSource;
|
|
10
|
+
providerType?: ProviderType;
|
|
11
|
+
}) => BaseProvider;
|
|
12
|
+
//# sourceMappingURL=getProviderFromEnv.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA"}
|
package/package.json
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@xyo-network/witness-blockchain-abstract",
|
|
3
|
+
"author": {
|
|
4
|
+
"email": "support@xyo.network",
|
|
5
|
+
"name": "XYO Development Team",
|
|
6
|
+
"url": "https://xyo.network"
|
|
7
|
+
},
|
|
8
|
+
"bugs": {
|
|
9
|
+
"email": "support@xyo.network",
|
|
10
|
+
"url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js/issues"
|
|
11
|
+
},
|
|
12
|
+
"dependencies": {
|
|
13
|
+
"@xylabs/assert": "^2.13.3",
|
|
14
|
+
"@xyo-network/abstract-witness": "~2.79.1",
|
|
15
|
+
"@xyo-network/object": "~2.79.1",
|
|
16
|
+
"@xyo-network/payload-model": "~2.79.1",
|
|
17
|
+
"@xyo-network/witness-model": "~2.79.1"
|
|
18
|
+
},
|
|
19
|
+
"devDependencies": {
|
|
20
|
+
"@ethersproject/providers": "^5.7.2",
|
|
21
|
+
"@xylabs/jest-helpers": "^2.13.3",
|
|
22
|
+
"@xylabs/ts-scripts-yarn3": "^3.1.21",
|
|
23
|
+
"@xylabs/tsconfig": "^3.1.21",
|
|
24
|
+
"ethers": "^5.7.2",
|
|
25
|
+
"jest": "^29.7.0",
|
|
26
|
+
"typescript": "^5.2.2"
|
|
27
|
+
},
|
|
28
|
+
"description": "Primary SDK for using XYO Protocol 2.0",
|
|
29
|
+
"types": "dist/node/index.d.mts",
|
|
30
|
+
"exports": {
|
|
31
|
+
".": {
|
|
32
|
+
"browser": {
|
|
33
|
+
"require": {
|
|
34
|
+
"types": "./dist/browser/index.d.cts",
|
|
35
|
+
"default": "./dist/browser/index.cjs"
|
|
36
|
+
},
|
|
37
|
+
"import": {
|
|
38
|
+
"types": "./dist/browser/index.d.mts",
|
|
39
|
+
"default": "./dist/browser/index.js"
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"node": {
|
|
43
|
+
"require": {
|
|
44
|
+
"types": "./dist/node/index.d.mts",
|
|
45
|
+
"default": "./dist/node/index.cjs"
|
|
46
|
+
},
|
|
47
|
+
"import": {
|
|
48
|
+
"types": "./dist/node/index.d.mts",
|
|
49
|
+
"default": "./dist/node/index.js"
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
"./package.json": "./package.json"
|
|
54
|
+
},
|
|
55
|
+
"main": "dist/node/index.cjs",
|
|
56
|
+
"module": "dist/node/index.js",
|
|
57
|
+
"homepage": "https://xyo.network",
|
|
58
|
+
"license": "LGPL-3.0-only",
|
|
59
|
+
"publishConfig": {
|
|
60
|
+
"access": "public"
|
|
61
|
+
},
|
|
62
|
+
"repository": {
|
|
63
|
+
"type": "git",
|
|
64
|
+
"url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js.git"
|
|
65
|
+
},
|
|
66
|
+
"sideEffects": false,
|
|
67
|
+
"version": "2.79.1",
|
|
68
|
+
"type": "module"
|
|
69
|
+
}
|
package/src/Witness.ts
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { BaseProvider } from '@ethersproject/providers'
|
|
2
|
+
import { AbstractWitness } from '@xyo-network/abstract-witness'
|
|
3
|
+
import { AnyObject, WithAdditional } from '@xyo-network/object'
|
|
4
|
+
import { Payload } from '@xyo-network/payload-model'
|
|
5
|
+
import { WitnessConfig, WitnessInstance, WitnessModuleEventData, WitnessParams } from '@xyo-network/witness-model'
|
|
6
|
+
|
|
7
|
+
export const BlockchainWitnessConfigSchema = 'network.xyo.blockchain.witness'
|
|
8
|
+
export type BlockchainWitnessConfigSchema = typeof BlockchainWitnessConfigSchema
|
|
9
|
+
|
|
10
|
+
export type BlockchainWitnessConfig<TAdditional extends Omit<Payload, 'schema'> | void = void, TSchema extends string | void = void> = WitnessConfig<
|
|
11
|
+
TAdditional & { schema: TSchema extends void ? (TAdditional extends void ? string : BlockchainWitnessConfigSchema) : TSchema }
|
|
12
|
+
>
|
|
13
|
+
|
|
14
|
+
export type AdditionalBlockchainWitnessParams = {
|
|
15
|
+
providers: BaseProvider[]
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export type BlockchainWitnessParams<
|
|
19
|
+
TConfig extends BlockchainWitnessConfig = BlockchainWitnessConfig,
|
|
20
|
+
TAdditionalParams extends AnyObject | void = void,
|
|
21
|
+
> = WitnessParams<
|
|
22
|
+
TConfig,
|
|
23
|
+
WithAdditional<
|
|
24
|
+
{
|
|
25
|
+
providers: BaseProvider[]
|
|
26
|
+
},
|
|
27
|
+
TAdditionalParams
|
|
28
|
+
>
|
|
29
|
+
>
|
|
30
|
+
|
|
31
|
+
export abstract class AbstractBlockchainWitness<
|
|
32
|
+
TParams extends BlockchainWitnessParams = BlockchainWitnessParams,
|
|
33
|
+
TIn extends Payload = Payload,
|
|
34
|
+
TOut extends Payload = Payload,
|
|
35
|
+
TEventData extends WitnessModuleEventData<WitnessInstance<TParams, TIn, TOut>, TIn, TOut> = WitnessModuleEventData<
|
|
36
|
+
WitnessInstance<TParams, TIn, TOut>,
|
|
37
|
+
TIn,
|
|
38
|
+
TOut
|
|
39
|
+
>,
|
|
40
|
+
> extends AbstractWitness<TParams, TIn, TOut, TEventData> {
|
|
41
|
+
get provider() {
|
|
42
|
+
const { providers } = this.params
|
|
43
|
+
return providers[Date.now() % providers.length] //pick a random provider
|
|
44
|
+
}
|
|
45
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { BaseProvider, InfuraProvider, InfuraWebSocketProvider, JsonRpcProvider, WebSocketProvider } from '@ethersproject/providers'
|
|
2
|
+
import { assertEx } from '@xylabs/assert'
|
|
3
|
+
|
|
4
|
+
export type ProviderSource = 'infura' | 'quicknode'
|
|
5
|
+
export type ProviderType = 'rpc' | 'wss'
|
|
6
|
+
|
|
7
|
+
const createInfuraRpc = (chainId: number) => {
|
|
8
|
+
return new InfuraProvider(chainId, {
|
|
9
|
+
projectId: process.env.INFURA_PROJECT_ID,
|
|
10
|
+
projectSecret: process.env.INFURA_PROJECT_SECRET,
|
|
11
|
+
})
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const createInfuraWss = (chainId: number) => {
|
|
15
|
+
return new InfuraWebSocketProvider(chainId, {
|
|
16
|
+
projectId: process.env.INFURA_PROJECT_ID,
|
|
17
|
+
})
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const createQuicknodeWss = (chainId: number) => {
|
|
21
|
+
const quickNodeWSSUri = process.env.QUICKNODE_WSS_URI
|
|
22
|
+
return quickNodeWSSUri ? new WebSocketProvider(quickNodeWSSUri, chainId) : undefined
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const createQuicknodeRpc = (chainId: number) => {
|
|
26
|
+
const quickNodeHttpsUri = process.env.QUICKNODE_HTTPS_URI
|
|
27
|
+
return quickNodeHttpsUri ? new JsonRpcProvider(quickNodeHttpsUri, chainId) : undefined
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export const getProviderFromEnv = (
|
|
31
|
+
chainId: number = 0x01,
|
|
32
|
+
options?: { providerSource?: ProviderSource; providerType?: ProviderType },
|
|
33
|
+
): BaseProvider => {
|
|
34
|
+
const { providerSource, providerType } = options ?? {}
|
|
35
|
+
let provider: BaseProvider | undefined = undefined
|
|
36
|
+
switch (providerSource) {
|
|
37
|
+
case 'quicknode': {
|
|
38
|
+
switch (providerType) {
|
|
39
|
+
case 'rpc': {
|
|
40
|
+
provider = createQuicknodeRpc(chainId)
|
|
41
|
+
break
|
|
42
|
+
}
|
|
43
|
+
case 'wss':
|
|
44
|
+
default: {
|
|
45
|
+
provider = createQuicknodeWss(chainId)
|
|
46
|
+
break
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
break
|
|
50
|
+
}
|
|
51
|
+
default:
|
|
52
|
+
case 'infura': {
|
|
53
|
+
switch (providerType) {
|
|
54
|
+
case 'rpc': {
|
|
55
|
+
provider = createInfuraRpc(chainId)
|
|
56
|
+
break
|
|
57
|
+
}
|
|
58
|
+
case 'wss':
|
|
59
|
+
default: {
|
|
60
|
+
provider = createInfuraWss(chainId)
|
|
61
|
+
break
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
break
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
if (!provider) {
|
|
68
|
+
provider = createInfuraWss(chainId) ?? createInfuraRpc(chainId) ?? createQuicknodeRpc(chainId)
|
|
69
|
+
}
|
|
70
|
+
return assertEx(provider, `Unable to create provider [${chainId}]: ${options ? JSON.stringify(options) : 'default'}`)
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
const providers: Record<string, BaseProvider> = {}
|
|
74
|
+
|
|
75
|
+
export const getSharedProviderFromEnv = (
|
|
76
|
+
chainId: number = 0x01,
|
|
77
|
+
options?: { providerSource?: ProviderSource; providerType?: ProviderType },
|
|
78
|
+
): BaseProvider => {
|
|
79
|
+
const key = `${chainId}:${options ? JSON.stringify(options) : 'default'}`
|
|
80
|
+
providers[key] = providers[key] ?? getProviderFromEnv(chainId, options)
|
|
81
|
+
return providers[key]
|
|
82
|
+
}
|
package/src/lib/index.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './getProviderFromEnv'
|