@xyo-network/etherscan-ethereum-gas-plugin 2.42.0

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 (70) hide show
  1. package/LICENSE +165 -0
  2. package/README.md +81 -0
  3. package/dist/cjs/Config.d.ts +7 -0
  4. package/dist/cjs/Config.d.ts.map +1 -0
  5. package/dist/cjs/Config.js +3 -0
  6. package/dist/cjs/Config.js.map +1 -0
  7. package/dist/cjs/Plugin.d.ts +16 -0
  8. package/dist/cjs/Plugin.d.ts.map +1 -0
  9. package/dist/cjs/Plugin.js +16 -0
  10. package/dist/cjs/Plugin.js.map +1 -0
  11. package/dist/cjs/Schema.d.ts +3 -0
  12. package/dist/cjs/Schema.d.ts.map +1 -0
  13. package/dist/cjs/Schema.js +5 -0
  14. package/dist/cjs/Schema.js.map +1 -0
  15. package/dist/cjs/Witness.d.ts +10 -0
  16. package/dist/cjs/Witness.d.ts.map +1 -0
  17. package/dist/cjs/Witness.js +38 -0
  18. package/dist/cjs/Witness.js.map +1 -0
  19. package/dist/cjs/index.d.ts +7 -0
  20. package/dist/cjs/index.d.ts.map +1 -0
  21. package/dist/cjs/index.js +12 -0
  22. package/dist/cjs/index.js.map +1 -0
  23. package/dist/cjs/lib/getGasFromEtherscan.d.ts +3 -0
  24. package/dist/cjs/lib/getGasFromEtherscan.d.ts.map +1 -0
  25. package/dist/cjs/lib/getGasFromEtherscan.js +11 -0
  26. package/dist/cjs/lib/getGasFromEtherscan.js.map +1 -0
  27. package/dist/cjs/lib/index.d.ts +2 -0
  28. package/dist/cjs/lib/index.d.ts.map +1 -0
  29. package/dist/cjs/lib/index.js +5 -0
  30. package/dist/cjs/lib/index.js.map +1 -0
  31. package/dist/docs.json +4779 -0
  32. package/dist/esm/Config.d.ts +7 -0
  33. package/dist/esm/Config.d.ts.map +1 -0
  34. package/dist/esm/Config.js +2 -0
  35. package/dist/esm/Config.js.map +1 -0
  36. package/dist/esm/Plugin.d.ts +16 -0
  37. package/dist/esm/Plugin.d.ts.map +1 -0
  38. package/dist/esm/Plugin.js +11 -0
  39. package/dist/esm/Plugin.js.map +1 -0
  40. package/dist/esm/Schema.d.ts +3 -0
  41. package/dist/esm/Schema.d.ts.map +1 -0
  42. package/dist/esm/Schema.js +2 -0
  43. package/dist/esm/Schema.js.map +1 -0
  44. package/dist/esm/Witness.d.ts +10 -0
  45. package/dist/esm/Witness.d.ts.map +1 -0
  46. package/dist/esm/Witness.js +21 -0
  47. package/dist/esm/Witness.js.map +1 -0
  48. package/dist/esm/index.d.ts +7 -0
  49. package/dist/esm/index.d.ts.map +1 -0
  50. package/dist/esm/index.js +8 -0
  51. package/dist/esm/index.js.map +1 -0
  52. package/dist/esm/lib/getGasFromEtherscan.d.ts +3 -0
  53. package/dist/esm/lib/getGasFromEtherscan.d.ts.map +1 -0
  54. package/dist/esm/lib/getGasFromEtherscan.js +6 -0
  55. package/dist/esm/lib/getGasFromEtherscan.js.map +1 -0
  56. package/dist/esm/lib/index.d.ts +2 -0
  57. package/dist/esm/lib/index.d.ts.map +1 -0
  58. package/dist/esm/lib/index.js +2 -0
  59. package/dist/esm/lib/index.js.map +1 -0
  60. package/package.json +56 -0
  61. package/src/Config.ts +8 -0
  62. package/src/Plugin.spec.ts +20 -0
  63. package/src/Plugin.ts +18 -0
  64. package/src/Schema.ts +3 -0
  65. package/src/Witness.spec.ts +40 -0
  66. package/src/Witness.ts +26 -0
  67. package/src/index.ts +10 -0
  68. package/src/lib/getGasFromEtherscan.spec.ts +21 -0
  69. package/src/lib/getGasFromEtherscan.ts +7 -0
  70. package/src/lib/index.ts +1 -0
@@ -0,0 +1,7 @@
1
+ import { XyoWitnessConfig } from '@xyo-network/witness';
2
+ import { XyoEthereumGasEtherscanWitnessConfigSchema } from './Schema';
3
+ export type XyoEthereumGasEtherscanWitnessConfig = XyoWitnessConfig<{
4
+ apiKey: string;
5
+ schema: XyoEthereumGasEtherscanWitnessConfigSchema;
6
+ }>;
7
+ //# sourceMappingURL=Config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Config.d.ts","sourceRoot":"","sources":["../../src/Config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAEvD,OAAO,EAAE,0CAA0C,EAAE,MAAM,UAAU,CAAA;AAErE,MAAM,MAAM,oCAAoC,GAAG,gBAAgB,CAAC;IAClE,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,0CAA0C,CAAA;CACnD,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Config.js","sourceRoot":"","sources":["../../src/Config.ts"],"names":[],"mappings":""}
@@ -0,0 +1,16 @@
1
+ import { XyoModuleParams } from '@xyo-network/module';
2
+ import { PayloadSetWitnessPlugin } from '@xyo-network/payloadset-plugin';
3
+ export declare const XyoEthereumGasEtherscanPlugin: () => PayloadSetWitnessPlugin<XyoModuleParams<import("@xyo-network/payload").SchemaFields & import("@xyo-network/payload").PayloadFields & {
4
+ security?: {
5
+ allowed?: Record<string, string[][]> | undefined;
6
+ disallowed?: Record<string, string[]> | undefined;
7
+ } | undefined;
8
+ } & {
9
+ apiKey: string;
10
+ schema: "network.xyo.blockchain.ethereum.gas.etherscan.witness.config";
11
+ } & {
12
+ targetSet?: (import("@xyo-network/payload").SchemaFields & import("@xyo-network/payload").PayloadFields & import("@xyo-network/payload").PayloadSet & {
13
+ schema: "network.xyo.payload.set";
14
+ }) | undefined;
15
+ }>>;
16
+ //# sourceMappingURL=Plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Plugin.d.ts","sourceRoot":"","sources":["../../src/Plugin.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAErD,OAAO,EAA0B,uBAAuB,EAAE,MAAM,gCAAgC,CAAA;AAKhG,eAAO,MAAM,6BAA6B;;;;;;;;;;;;GASvC,CAAA"}
@@ -0,0 +1,11 @@
1
+ import { XyoEthereumGasEtherscanSchema } from '@xyo-network/etherscan-ethereum-gas-payload-plugin';
2
+ import { PayloadSetSchema } from '@xyo-network/payload';
3
+ import { createPayloadSetPlugin } from '@xyo-network/payloadset-plugin';
4
+ import { XyoEthereumGasEtherscanWitness } from './Witness';
5
+ export const XyoEthereumGasEtherscanPlugin = () => createPayloadSetPlugin({ required: { [XyoEthereumGasEtherscanSchema]: 1 }, schema: PayloadSetSchema }, {
6
+ witness: async (params) => {
7
+ const result = await XyoEthereumGasEtherscanWitness.create(params);
8
+ return result;
9
+ },
10
+ });
11
+ //# sourceMappingURL=Plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Plugin.js","sourceRoot":"","sources":["../../src/Plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAA;AAElG,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAE,sBAAsB,EAA2B,MAAM,gCAAgC,CAAA;AAGhG,OAAO,EAAE,8BAA8B,EAAE,MAAM,WAAW,CAAA;AAE1D,MAAM,CAAC,MAAM,6BAA6B,GAAG,GAAG,EAAE,CAChD,sBAAsB,CACpB,EAAE,QAAQ,EAAE,EAAE,CAAC,6BAA6B,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE,EAC9E;IACE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QACxB,MAAM,MAAM,GAAG,MAAM,8BAA8B,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAClE,OAAO,MAAM,CAAA;IACf,CAAC;CACF,CACF,CAAA"}
@@ -0,0 +1,3 @@
1
+ export type XyoEthereumGasEtherscanWitnessConfigSchema = 'network.xyo.blockchain.ethereum.gas.etherscan.witness.config';
2
+ export declare const XyoEthereumGasEtherscanWitnessConfigSchema: XyoEthereumGasEtherscanWitnessConfigSchema;
3
+ //# sourceMappingURL=Schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Schema.d.ts","sourceRoot":"","sources":["../../src/Schema.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,0CAA0C,GAAG,8DAA8D,CAAA;AACvH,eAAO,MAAM,0CAA0C,EAAE,0CACO,CAAA"}
@@ -0,0 +1,2 @@
1
+ export const XyoEthereumGasEtherscanWitnessConfigSchema = 'network.xyo.blockchain.ethereum.gas.etherscan.witness.config';
2
+ //# sourceMappingURL=Schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Schema.js","sourceRoot":"","sources":["../../src/Schema.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,0CAA0C,GACrD,8DAA8D,CAAA"}
@@ -0,0 +1,10 @@
1
+ import { XyoModuleParams } from '@xyo-network/module';
2
+ import { XyoPayload } from '@xyo-network/payload';
3
+ import { TimestampWitness } from '@xyo-network/witness';
4
+ import { XyoEthereumGasEtherscanWitnessConfig } from './Config';
5
+ export declare class XyoEthereumGasEtherscanWitness extends TimestampWitness<XyoEthereumGasEtherscanWitnessConfig> {
6
+ static configSchema: "network.xyo.blockchain.ethereum.gas.etherscan.witness.config";
7
+ static create(params?: XyoModuleParams<XyoEthereumGasEtherscanWitnessConfig>): Promise<XyoEthereumGasEtherscanWitness>;
8
+ observe(): Promise<XyoPayload[]>;
9
+ }
10
+ //# sourceMappingURL=Witness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,EAAE,UAAU,EAAqB,MAAM,sBAAsB,CAAA;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAEvD,OAAO,EAAE,oCAAoC,EAAE,MAAM,UAAU,CAAA;AAI/D,qBAAa,8BAA+B,SAAQ,gBAAgB,CAAC,oCAAoC,CAAC;IACxG,OAAgB,YAAY,iEAA6C;WAEnD,MAAM,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC,oCAAoC,CAAC,GAAG,OAAO,CAAC,8BAA8B,CAAC;IAKtH,OAAO,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;CAOhD"}
@@ -0,0 +1,21 @@
1
+ import { assertEx } from '@xylabs/assert';
2
+ import { XyoEthereumGasEtherscanSchema } from '@xyo-network/etherscan-ethereum-gas-payload-plugin';
3
+ import { XyoPayloadBuilder } from '@xyo-network/payload';
4
+ import { TimestampWitness } from '@xyo-network/witness';
5
+ import { getGasFromEtherscan } from './lib';
6
+ import { XyoEthereumGasEtherscanWitnessConfigSchema } from './Schema';
7
+ export class XyoEthereumGasEtherscanWitness extends TimestampWitness {
8
+ static configSchema = XyoEthereumGasEtherscanWitnessConfigSchema;
9
+ static async create(params) {
10
+ assertEx(params?.config?.apiKey, 'apiKey is required');
11
+ return (await super.create(params));
12
+ }
13
+ async observe() {
14
+ const apiKey = assertEx(this.config?.apiKey, 'apiKey is required');
15
+ const payload = new XyoPayloadBuilder({ schema: XyoEthereumGasEtherscanSchema })
16
+ .fields(await getGasFromEtherscan(apiKey))
17
+ .build();
18
+ return super.observe([payload]);
19
+ }
20
+ }
21
+ //# sourceMappingURL=Witness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Witness.js","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAkC,6BAA6B,EAAE,MAAM,oDAAoD,CAAA;AAElI,OAAO,EAAc,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAGvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,OAAO,CAAA;AAC3C,OAAO,EAAE,0CAA0C,EAAE,MAAM,UAAU,CAAA;AAErE,MAAM,OAAO,8BAA+B,SAAQ,gBAAsD;IACxG,MAAM,CAAU,YAAY,GAAG,0CAA0C,CAAA;IAEzE,MAAM,CAAU,KAAK,CAAC,MAAM,CAAC,MAA8D;QACzF,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB,CAAC,CAAA;QACtD,OAAO,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAmC,CAAA;IACvE,CAAC;IAEQ,KAAK,CAAC,OAAO;QACpB,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,oBAAoB,CAAC,CAAA;QAClE,MAAM,OAAO,GAAG,IAAI,iBAAiB,CAAiC,EAAE,MAAM,EAAE,6BAA6B,EAAE,CAAC;aAC7G,MAAM,CAAC,MAAM,mBAAmB,CAAC,MAAM,CAAC,CAAC;aACzC,KAAK,EAAE,CAAA;QACV,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAA;IACjC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { XyoEthereumGasEtherscanPlugin } from './Plugin';
2
+ export * from './Config';
3
+ export * from './Schema';
4
+ export * from './Witness';
5
+ export { XyoEthereumGasEtherscanPlugin };
6
+ export default XyoEthereumGasEtherscanPlugin;
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,UAAU,CAAA;AAExD,cAAc,UAAU,CAAA;AACxB,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA;AAEzB,OAAO,EAAE,6BAA6B,EAAE,CAAA;AAGxC,eAAe,6BAA6B,CAAA"}
@@ -0,0 +1,8 @@
1
+ import { XyoEthereumGasEtherscanPlugin } from './Plugin';
2
+ export * from './Config';
3
+ export * from './Schema';
4
+ export * from './Witness';
5
+ export { XyoEthereumGasEtherscanPlugin };
6
+ // eslint-disable-next-line import/no-default-export
7
+ export default XyoEthereumGasEtherscanPlugin;
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,UAAU,CAAA;AAExD,cAAc,UAAU,CAAA;AACxB,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA;AAEzB,OAAO,EAAE,6BAA6B,EAAE,CAAA;AAExC,oDAAoD;AACpD,eAAe,6BAA6B,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { EthereumGasEtherscanResponse } from '@xyo-network/etherscan-ethereum-gas-payload-plugin';
2
+ export declare const getGasFromEtherscan: (apiKey: string) => Promise<EthereumGasEtherscanResponse>;
3
+ //# sourceMappingURL=getGasFromEtherscan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getGasFromEtherscan.d.ts","sourceRoot":"","sources":["../../../src/lib/getGasFromEtherscan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,oDAAoD,CAAA;AAGjG,eAAO,MAAM,mBAAmB,WAAkB,MAAM,KAAG,QAAQ,4BAA4B,CAG9F,CAAA"}
@@ -0,0 +1,6 @@
1
+ import axios from 'axios';
2
+ export const getGasFromEtherscan = async (apiKey) => {
3
+ const url = `https://api.etherscan.io/api?module=gastracker&action=gasoracle&apikey=${apiKey}`;
4
+ return (await axios.get(url)).data;
5
+ };
6
+ //# sourceMappingURL=getGasFromEtherscan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getGasFromEtherscan.js","sourceRoot":"","sources":["../../../src/lib/getGasFromEtherscan.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EAAE,MAAc,EAAyC,EAAE;IACjG,MAAM,GAAG,GAAG,0EAA0E,MAAM,EAAE,CAAA;IAC9F,OAAO,CAAC,MAAM,KAAK,CAAC,GAAG,CAA+B,GAAG,CAAC,CAAC,CAAC,IAAI,CAAA;AAClE,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './getGasFromEtherscan';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './getGasFromEtherscan';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAA"}
package/package.json ADDED
@@ -0,0 +1,56 @@
1
+ {
2
+ "name": "@xyo-network/etherscan-ethereum-gas-plugin",
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.6.9",
14
+ "@xyo-network/etherscan-ethereum-gas-payload-plugin": "^2.42.0",
15
+ "@xyo-network/module": "^2.42.0",
16
+ "@xyo-network/payload": "^2.42.0",
17
+ "@xyo-network/payloadset-plugin": "^2.42.0",
18
+ "@xyo-network/witness": "^2.42.0",
19
+ "axios": "~1.2.1",
20
+ "tslib": "^2.4.1"
21
+ },
22
+ "description": "Primary SDK for using XYO Protocol 2.0",
23
+ "browser": "dist/esm/index.js",
24
+ "docs": "dist/docs.json",
25
+ "exports": {
26
+ ".": {
27
+ "node": {
28
+ "import": "./dist/esm/index.js",
29
+ "require": "./dist/cjs/index.js"
30
+ },
31
+ "browser": {
32
+ "import": "./dist/esm/index.js",
33
+ "require": "./dist/cjs/index.js"
34
+ },
35
+ "default": "./dist/esm/index.js"
36
+ },
37
+ "./dist/docs.json": {
38
+ "default": "./dist/docs.json"
39
+ },
40
+ "./package.json": "./package.json"
41
+ },
42
+ "main": "dist/cjs/index.js",
43
+ "module": "dist/esm/index.js",
44
+ "homepage": "https://xyo.network",
45
+ "license": "LGPL-3.0-only",
46
+ "publishConfig": {
47
+ "access": "public"
48
+ },
49
+ "repository": {
50
+ "type": "git",
51
+ "url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js.git"
52
+ },
53
+ "sideEffects": false,
54
+ "types": "dist/esm/index.d.ts",
55
+ "version": "2.42.0"
56
+ }
package/src/Config.ts ADDED
@@ -0,0 +1,8 @@
1
+ import { XyoWitnessConfig } from '@xyo-network/witness'
2
+
3
+ import { XyoEthereumGasEtherscanWitnessConfigSchema } from './Schema'
4
+
5
+ export type XyoEthereumGasEtherscanWitnessConfig = XyoWitnessConfig<{
6
+ apiKey: string
7
+ schema: XyoEthereumGasEtherscanWitnessConfigSchema
8
+ }>
@@ -0,0 +1,20 @@
1
+ import { XyoEthereumGasEtherscanSchema } from '@xyo-network/etherscan-ethereum-gas-payload-plugin'
2
+ import { PayloadSetPluginResolver } from '@xyo-network/payloadset-plugin'
3
+
4
+ import { XyoEthereumGasEtherscanPlugin } from './Plugin'
5
+ import { XyoEthereumGasEtherscanWitness } from './Witness'
6
+
7
+ const apiKey = process.env.ETHERSCAN_API_KEY || ''
8
+
9
+ const testIf = (condition: string | undefined) => (condition ? it : it.skip)
10
+
11
+ describe('XyoEthereumGasEtherscanPlugin', () => {
12
+ testIf(apiKey)('Add to Resolver', () => {
13
+ const plugin = XyoEthereumGasEtherscanPlugin()
14
+ const resolver = new PayloadSetPluginResolver().register(plugin, {
15
+ witness: { config: { apiKey, schema: XyoEthereumGasEtherscanWitness.configSchema } },
16
+ })
17
+ expect(resolver.resolve(plugin.set)).toBeObject()
18
+ expect(resolver.witness(XyoEthereumGasEtherscanSchema)).toBeObject()
19
+ })
20
+ })
package/src/Plugin.ts ADDED
@@ -0,0 +1,18 @@
1
+ import { XyoEthereumGasEtherscanSchema } from '@xyo-network/etherscan-ethereum-gas-payload-plugin'
2
+ import { XyoModuleParams } from '@xyo-network/module'
3
+ import { PayloadSetSchema } from '@xyo-network/payload'
4
+ import { createPayloadSetPlugin, PayloadSetWitnessPlugin } from '@xyo-network/payloadset-plugin'
5
+
6
+ import { XyoEthereumGasEtherscanWitnessConfig } from './Config'
7
+ import { XyoEthereumGasEtherscanWitness } from './Witness'
8
+
9
+ export const XyoEthereumGasEtherscanPlugin = () =>
10
+ createPayloadSetPlugin<PayloadSetWitnessPlugin<XyoModuleParams<XyoEthereumGasEtherscanWitnessConfig>>>(
11
+ { required: { [XyoEthereumGasEtherscanSchema]: 1 }, schema: PayloadSetSchema },
12
+ {
13
+ witness: async (params) => {
14
+ const result = await XyoEthereumGasEtherscanWitness.create(params)
15
+ return result
16
+ },
17
+ },
18
+ )
package/src/Schema.ts ADDED
@@ -0,0 +1,3 @@
1
+ export type XyoEthereumGasEtherscanWitnessConfigSchema = 'network.xyo.blockchain.ethereum.gas.etherscan.witness.config'
2
+ export const XyoEthereumGasEtherscanWitnessConfigSchema: XyoEthereumGasEtherscanWitnessConfigSchema =
3
+ 'network.xyo.blockchain.ethereum.gas.etherscan.witness.config'
@@ -0,0 +1,40 @@
1
+ import { XyoEthereumGasEtherscanPayload, XyoEthereumGasEtherscanSchema } from '@xyo-network/etherscan-ethereum-gas-payload-plugin'
2
+ import { PayloadWrapper } from '@xyo-network/payload'
3
+
4
+ import { XyoEthereumGasEtherscanWitnessConfigSchema } from './Schema'
5
+ import { XyoEthereumGasEtherscanWitness } from './Witness'
6
+
7
+ const apiKey = process.env.ETHERSCAN_API_KEY || ''
8
+
9
+ const testIf = (condition: string | undefined) => (condition ? it : it.skip)
10
+
11
+ describe('XyoEthereumGasEtherscanWitness', () => {
12
+ testIf(apiKey)('returns observation', async () => {
13
+ const sut = await XyoEthereumGasEtherscanWitness.create({
14
+ config: {
15
+ apiKey,
16
+ schema: XyoEthereumGasEtherscanWitnessConfigSchema,
17
+ },
18
+ })
19
+ const [actual] = (await sut.observe()) as XyoEthereumGasEtherscanPayload[]
20
+ expect(actual.result).toBeObject()
21
+ expect(actual.result.FastGasPrice).toBeString()
22
+ expect(actual.result.gasUsedRatio).toBeString()
23
+ expect(actual.result.LastBlock).toBeString()
24
+ expect(actual.result.ProposeGasPrice).toBeString()
25
+ expect(actual.result.SafeGasPrice).toBeString()
26
+ expect(actual.result.suggestBaseFee).toBeString()
27
+
28
+ expect(actual.timestamp).toBeNumber()
29
+ expect(actual.schema).toBe(XyoEthereumGasEtherscanSchema)
30
+
31
+ const answerWrapper = new PayloadWrapper(actual)
32
+ expect(answerWrapper.valid).toBe(true)
33
+ })
34
+
35
+ describe('create', () => {
36
+ it('throws if no params provided', async () => {
37
+ await expect(XyoEthereumGasEtherscanWitness.create()).toReject()
38
+ })
39
+ })
40
+ })
package/src/Witness.ts ADDED
@@ -0,0 +1,26 @@
1
+ import { assertEx } from '@xylabs/assert'
2
+ import { XyoEthereumGasEtherscanPayload, XyoEthereumGasEtherscanSchema } from '@xyo-network/etherscan-ethereum-gas-payload-plugin'
3
+ import { XyoModuleParams } from '@xyo-network/module'
4
+ import { XyoPayload, XyoPayloadBuilder } from '@xyo-network/payload'
5
+ import { TimestampWitness } from '@xyo-network/witness'
6
+
7
+ import { XyoEthereumGasEtherscanWitnessConfig } from './Config'
8
+ import { getGasFromEtherscan } from './lib'
9
+ import { XyoEthereumGasEtherscanWitnessConfigSchema } from './Schema'
10
+
11
+ export class XyoEthereumGasEtherscanWitness extends TimestampWitness<XyoEthereumGasEtherscanWitnessConfig> {
12
+ static override configSchema = XyoEthereumGasEtherscanWitnessConfigSchema
13
+
14
+ static override async create(params?: XyoModuleParams<XyoEthereumGasEtherscanWitnessConfig>): Promise<XyoEthereumGasEtherscanWitness> {
15
+ assertEx(params?.config?.apiKey, 'apiKey is required')
16
+ return (await super.create(params)) as XyoEthereumGasEtherscanWitness
17
+ }
18
+
19
+ override async observe(): Promise<XyoPayload[]> {
20
+ const apiKey = assertEx(this.config?.apiKey, 'apiKey is required')
21
+ const payload = new XyoPayloadBuilder<XyoEthereumGasEtherscanPayload>({ schema: XyoEthereumGasEtherscanSchema })
22
+ .fields(await getGasFromEtherscan(apiKey))
23
+ .build()
24
+ return super.observe([payload])
25
+ }
26
+ }
package/src/index.ts ADDED
@@ -0,0 +1,10 @@
1
+ import { XyoEthereumGasEtherscanPlugin } from './Plugin'
2
+
3
+ export * from './Config'
4
+ export * from './Schema'
5
+ export * from './Witness'
6
+
7
+ export { XyoEthereumGasEtherscanPlugin }
8
+
9
+ // eslint-disable-next-line import/no-default-export
10
+ export default XyoEthereumGasEtherscanPlugin
@@ -0,0 +1,21 @@
1
+ import { getGasFromEtherscan } from './getGasFromEtherscan'
2
+
3
+ const apiKey = process.env.ETHERSCAN_API_KEY || ''
4
+
5
+ const testIf = (condition: boolean | string | null | undefined) => (condition ? it : it.skip)
6
+
7
+ describe('getGasFromEtherscan', () => {
8
+ testIf(apiKey)('returns prices', async () => {
9
+ const gas = await getGasFromEtherscan(apiKey)
10
+ expect(gas).toBeTruthy()
11
+ expect(gas.status).toEqual('1')
12
+ expect(gas.message).toEqual('OK')
13
+ expect(gas.result).toBeObject()
14
+ expect(gas.result.FastGasPrice).toBeString()
15
+ expect(gas.result.LastBlock).toBeString()
16
+ expect(gas.result.ProposeGasPrice).toBeString()
17
+ expect(gas.result.SafeGasPrice).toBeString()
18
+ expect(gas.result.gasUsedRatio).toBeString()
19
+ expect(gas.result.suggestBaseFee).toBeString()
20
+ })
21
+ })
@@ -0,0 +1,7 @@
1
+ import { EthereumGasEtherscanResponse } from '@xyo-network/etherscan-ethereum-gas-payload-plugin'
2
+ import axios from 'axios'
3
+
4
+ export const getGasFromEtherscan = async (apiKey: string): Promise<EthereumGasEtherscanResponse> => {
5
+ const url = `https://api.etherscan.io/api?module=gastracker&action=gasoracle&apikey=${apiKey}`
6
+ return (await axios.get<EthereumGasEtherscanResponse>(url)).data
7
+ }
@@ -0,0 +1 @@
1
+ export * from './getGasFromEtherscan'