@subql/node-ethereum 2.12.6-1 → 2.12.6-2
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/CHANGELOG.md +11 -1
- package/dist/.tsbuildinfo +1 -1
- package/dist/configure/NodeConfig.d.ts +21 -0
- package/dist/configure/NodeConfig.js +31 -0
- package/dist/configure/NodeConfig.js.map +1 -0
- package/dist/configure/SubqueryProject.d.ts +21 -29
- package/dist/configure/SubqueryProject.js +48 -72
- package/dist/configure/SubqueryProject.js.map +1 -1
- package/dist/configure/configure.module.d.ts +2 -2
- package/dist/configure/configure.module.js +19 -89
- package/dist/configure/configure.module.js.map +1 -1
- package/dist/ethereum/api.connection.d.ts +7 -7
- package/dist/ethereum/api.connection.js +4 -4
- package/dist/ethereum/api.connection.js.map +1 -1
- package/dist/ethereum/api.ethereum.d.ts +14 -8
- package/dist/ethereum/api.ethereum.js +24 -13
- package/dist/ethereum/api.ethereum.js.map +1 -1
- package/dist/ethereum/api.ethereum.test.js +29 -32
- package/dist/ethereum/api.ethereum.test.js.map +1 -1
- package/dist/ethereum/api.service.ethereum.d.ts +9 -7
- package/dist/ethereum/api.service.ethereum.js +56 -64
- package/dist/ethereum/api.service.ethereum.js.map +1 -1
- package/dist/ethereum/api.service.ethereum.test.js +8 -13
- package/dist/ethereum/api.service.ethereum.test.js.map +1 -1
- package/dist/ethereum/block.ethereum.d.ts +6 -15
- package/dist/ethereum/block.ethereum.js +52 -79
- package/dist/ethereum/block.ethereum.js.map +1 -1
- package/dist/ethereum/ethers/celo/celo-json-rpc-batch-provider.spec.js +3 -6
- package/dist/ethereum/ethers/celo/celo-json-rpc-batch-provider.spec.js.map +1 -1
- package/dist/ethereum/ethers/celo/celo-json-rpc-provider.spec.js +3 -6
- package/dist/ethereum/ethers/celo/celo-json-rpc-provider.spec.js.map +1 -1
- package/dist/ethereum/ethers/celo/celo-ws-provider.spec.js +3 -6
- package/dist/ethereum/ethers/celo/celo-ws-provider.spec.js.map +1 -1
- package/dist/indexer/blockDispatcher/block-dispatcher.service.d.ts +7 -7
- package/dist/indexer/blockDispatcher/block-dispatcher.service.js +7 -6
- package/dist/indexer/blockDispatcher/block-dispatcher.service.js.map +1 -1
- package/dist/indexer/blockDispatcher/worker-block-dispatcher.service.d.ts +4 -4
- package/dist/indexer/blockDispatcher/worker-block-dispatcher.service.js +9 -18
- package/dist/indexer/blockDispatcher/worker-block-dispatcher.service.js.map +1 -1
- package/dist/indexer/dictionary.service.d.ts +3 -3
- package/dist/indexer/dictionary.service.js +7 -5
- package/dist/indexer/dictionary.service.js.map +1 -1
- package/dist/indexer/dynamic-ds.service.d.ts +3 -3
- package/dist/indexer/dynamic-ds.service.js.map +1 -1
- package/dist/indexer/fetch.module.js +8 -10
- package/dist/indexer/fetch.module.js.map +1 -1
- package/dist/indexer/fetch.service.d.ts +10 -10
- package/dist/indexer/fetch.service.js +22 -43
- package/dist/indexer/fetch.service.js.map +1 -1
- package/dist/indexer/fetch.service.spec.js +25 -45
- package/dist/indexer/fetch.service.spec.js.map +1 -1
- package/dist/indexer/indexer.manager.d.ts +10 -12
- package/dist/indexer/indexer.manager.js +20 -30
- package/dist/indexer/indexer.manager.js.map +1 -1
- package/dist/indexer/project.service.d.ts +8 -6
- package/dist/indexer/project.service.js +19 -12
- package/dist/indexer/project.service.js.map +1 -1
- package/dist/indexer/project.service.test.d.ts +1 -0
- package/dist/indexer/project.service.test.js +26 -0
- package/dist/indexer/project.service.test.js.map +1 -0
- package/dist/indexer/sandbox.service.d.ts +1 -1
- package/dist/indexer/sandbox.service.js +1 -0
- package/dist/indexer/sandbox.service.js.map +1 -1
- package/dist/indexer/types.d.ts +2 -11
- package/dist/indexer/types.js +0 -6
- package/dist/indexer/types.js.map +1 -1
- package/dist/indexer/unfinalizedBlocks.service.d.ts +4 -4
- package/dist/indexer/unfinalizedBlocks.service.js +25 -1
- package/dist/indexer/unfinalizedBlocks.service.js.map +1 -1
- package/dist/indexer/worker/worker.d.ts +4 -28
- package/dist/indexer/worker/worker.js +8 -71
- package/dist/indexer/worker/worker.js.map +1 -1
- package/dist/indexer/worker/worker.module.js +2 -2
- package/dist/indexer/worker/worker.module.js.map +1 -1
- package/dist/indexer/worker/worker.service.d.ts +11 -13
- package/dist/indexer/worker/worker.service.js +14 -56
- package/dist/indexer/worker/worker.service.js.map +1 -1
- package/dist/indexer/worker/worker.unfinalizedBlocks.service.d.ts +4 -8
- package/dist/indexer/worker/worker.unfinalizedBlocks.service.js +8 -7
- package/dist/indexer/worker/worker.unfinalizedBlocks.service.js.map +1 -1
- package/dist/indexer/worker-fetch.module.d.ts +2 -0
- package/dist/indexer/{indexer.module.js → worker-fetch.module.js} +10 -33
- package/dist/indexer/worker-fetch.module.js.map +1 -0
- package/dist/init.js +1 -1
- package/dist/init.js.map +1 -1
- package/dist/main.js +4 -8
- package/dist/main.js.map +1 -1
- package/dist/subcommands/reindex.init.js +1 -2
- package/dist/subcommands/reindex.init.js.map +1 -1
- package/dist/subcommands/reindex.module.js +10 -6
- package/dist/subcommands/reindex.module.js.map +1 -1
- package/dist/subcommands/testing.init.js +2 -4
- package/dist/subcommands/testing.init.js.map +1 -1
- package/dist/subcommands/testing.module.js +3 -8
- package/dist/subcommands/testing.module.js.map +1 -1
- package/dist/subcommands/testing.service.d.ts +8 -5
- package/dist/subcommands/testing.service.js +3 -8
- package/dist/subcommands/testing.service.js.map +1 -1
- package/dist/utils/project.d.ts +5 -4
- package/dist/utils/project.js +17 -1
- package/dist/utils/project.js.map +1 -1
- package/dist/yargs.d.ts +7 -90
- package/dist/yargs.js +9 -112
- package/dist/yargs.js.map +1 -1
- package/package.json +8 -8
- package/dist/indexer/indexer.module.d.ts +0 -2
- package/dist/indexer/indexer.module.js.map +0 -1
- package/dist/subcommands/mmrMigrate.init.d.ts +0 -2
- package/dist/subcommands/mmrMigrate.init.js +0 -28
- package/dist/subcommands/mmrMigrate.init.js.map +0 -1
- package/dist/subcommands/mmrMigrate.module.d.ts +0 -2
- package/dist/subcommands/mmrMigrate.module.js +0 -28
- package/dist/subcommands/mmrMigrate.module.js.map +0 -1
- package/dist/subcommands/mmrRegenerate.init.d.ts +0 -1
- package/dist/subcommands/mmrRegenerate.init.js +0 -28
- package/dist/subcommands/mmrRegenerate.init.js.map +0 -1
- package/dist/subcommands/mmrRegenerate.module.d.ts +0 -2
- package/dist/subcommands/mmrRegenerate.module.js +0 -30
- package/dist/subcommands/mmrRegenerate.module.js.map +0 -1
- package/dist/subcommands/reindex.service.d.ts +0 -11
- package/dist/subcommands/reindex.service.js +0 -46
- package/dist/subcommands/reindex.service.js.map +0 -1
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { IConfig, NodeConfig } from '@subql/node-core';
|
|
2
|
+
export interface IEthereumConfig extends IConfig {
|
|
3
|
+
skipTransactions: boolean;
|
|
4
|
+
blockConfirmations: number;
|
|
5
|
+
}
|
|
6
|
+
export declare class EthereumNodeConfig extends NodeConfig<IEthereumConfig> {
|
|
7
|
+
/**
|
|
8
|
+
* This is a wrapper around the core NodeConfig to get additional properties that are provided through args or node runner options
|
|
9
|
+
* NOTE: This isn't injected anywhere so you need to wrap the injected node config
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* constructor(
|
|
13
|
+
* nodeConfig: NodeConfig,
|
|
14
|
+
* ) {
|
|
15
|
+
* this.nodeConfig = new EthereumNodeConfig(nodeConfig);
|
|
16
|
+
* }
|
|
17
|
+
* */
|
|
18
|
+
constructor(config: NodeConfig);
|
|
19
|
+
get skipTransactions(): boolean;
|
|
20
|
+
get blockConfirmations(): number;
|
|
21
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright 2020-2023 SubQuery Pte Ltd authors & contributors
|
|
3
|
+
// SPDX-License-Identifier: GPL-3.0
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.EthereumNodeConfig = void 0;
|
|
6
|
+
const node_core_1 = require("@subql/node-core");
|
|
7
|
+
class EthereumNodeConfig extends node_core_1.NodeConfig {
|
|
8
|
+
/**
|
|
9
|
+
* This is a wrapper around the core NodeConfig to get additional properties that are provided through args or node runner options
|
|
10
|
+
* NOTE: This isn't injected anywhere so you need to wrap the injected node config
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* constructor(
|
|
14
|
+
* nodeConfig: NodeConfig,
|
|
15
|
+
* ) {
|
|
16
|
+
* this.nodeConfig = new EthereumNodeConfig(nodeConfig);
|
|
17
|
+
* }
|
|
18
|
+
* */
|
|
19
|
+
constructor(config) {
|
|
20
|
+
// Rebuild with internal config
|
|
21
|
+
super(config._config, config._isTest);
|
|
22
|
+
}
|
|
23
|
+
get skipTransactions() {
|
|
24
|
+
return !!this._config.skipTransactions;
|
|
25
|
+
}
|
|
26
|
+
get blockConfirmations() {
|
|
27
|
+
return this._config.blockConfirmations;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
exports.EthereumNodeConfig = EthereumNodeConfig;
|
|
31
|
+
//# sourceMappingURL=NodeConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NodeConfig.js","sourceRoot":"","sources":["../../src/configure/NodeConfig.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;AAEnC,gDAAuD;AAOvD,MAAa,kBAAmB,SAAQ,sBAA2B;IACjE;;;;;;;;;;SAUK;IACL,YAAY,MAAkB;QAC5B,+BAA+B;QAC/B,KAAK,CAAE,MAAc,CAAC,OAAO,EAAG,MAAc,CAAC,OAAO,CAAC,CAAC;IAC1D,CAAC;IAED,IAAI,gBAAgB;QAClB,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC;IACzC,CAAC;IAED,IAAI,kBAAkB;QACpB,OAAO,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC;IACzC,CAAC;CACF;AAxBD,gDAwBC","sourcesContent":["// Copyright 2020-2023 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { IConfig, NodeConfig } from '@subql/node-core';\n\nexport interface IEthereumConfig extends IConfig {\n skipTransactions: boolean;\n blockConfirmations: number;\n}\n\nexport class EthereumNodeConfig extends NodeConfig<IEthereumConfig> {\n /**\n * This is a wrapper around the core NodeConfig to get additional properties that are provided through args or node runner options\n * NOTE: This isn't injected anywhere so you need to wrap the injected node config\n *\n * @example\n * constructor(\n * nodeConfig: NodeConfig,\n * ) {\n * this.nodeConfig = new EthereumNodeConfig(nodeConfig);\n * }\n * */\n constructor(config: NodeConfig) {\n // Rebuild with internal config\n super((config as any)._config, (config as any)._isTest);\n }\n\n get skipTransactions(): boolean {\n return !!this._config.skipTransactions;\n }\n\n get blockConfirmations(): number {\n return this._config.blockConfirmations;\n }\n}\n"]}
|
|
@@ -1,34 +1,26 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
1
|
+
import { SubqlEthereumDataSource } from '@subql/common-ethereum';
|
|
2
|
+
import { ISubqueryProject, SubqlProjectDs } from '@subql/node-core';
|
|
3
|
+
import { ParentProject, Reader, RunnerSpecs } from '@subql/types-core';
|
|
4
|
+
import { EthereumNetworkConfig, RuntimeDatasourceTemplate, CustomDatasourceTemplate } from '@subql/types-ethereum';
|
|
4
5
|
import { GraphQLSchema } from 'graphql';
|
|
5
|
-
|
|
6
|
-
export type
|
|
7
|
-
|
|
8
|
-
entryScript: string;
|
|
9
|
-
};
|
|
10
|
-
};
|
|
11
|
-
export type SubqlProjectBlockFilter = EthereumBlockFilter & {
|
|
12
|
-
cronSchedule?: {
|
|
13
|
-
schedule: Cron.Seeker;
|
|
14
|
-
next: number;
|
|
15
|
-
};
|
|
16
|
-
};
|
|
17
|
-
export type SubqlProjectDsTemplate = Omit<SubqlProjectDs, 'startBlock'> & {
|
|
18
|
-
name: string;
|
|
19
|
-
};
|
|
20
|
-
type NetworkConfig = EthereumProjectNetworkConfig & {
|
|
6
|
+
export type EthereumProjectDs = SubqlProjectDs<SubqlEthereumDataSource>;
|
|
7
|
+
export type EthereumProjectDsTemplate = SubqlProjectDs<RuntimeDatasourceTemplate> | SubqlProjectDs<CustomDatasourceTemplate>;
|
|
8
|
+
type NetworkConfig = EthereumNetworkConfig & {
|
|
21
9
|
chainId: string;
|
|
22
10
|
};
|
|
23
|
-
export declare class SubqueryProject {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
schema: GraphQLSchema;
|
|
29
|
-
templates:
|
|
30
|
-
runner?: RunnerSpecs;
|
|
31
|
-
|
|
11
|
+
export declare class SubqueryProject implements ISubqueryProject {
|
|
12
|
+
#private;
|
|
13
|
+
readonly id: string;
|
|
14
|
+
readonly root: string;
|
|
15
|
+
readonly network: NetworkConfig;
|
|
16
|
+
readonly schema: GraphQLSchema;
|
|
17
|
+
readonly templates: EthereumProjectDsTemplate[];
|
|
18
|
+
readonly runner?: RunnerSpecs;
|
|
19
|
+
readonly parent?: ParentProject;
|
|
20
|
+
constructor(id: string, root: string, network: NetworkConfig, dataSources: EthereumProjectDs[], schema: GraphQLSchema, templates: EthereumProjectDsTemplate[], runner?: RunnerSpecs, parent?: ParentProject);
|
|
21
|
+
get dataSources(): EthereumProjectDs[];
|
|
22
|
+
applyCronTimestamps(getTimestamp: (height: number) => Promise<Date>): Promise<void>;
|
|
23
|
+
static create(path: string, rawManifest: unknown, reader: Reader, root: string, // If project local then directory otherwise temp directory
|
|
24
|
+
networkOverrides?: Partial<EthereumNetworkConfig>): Promise<SubqueryProject>;
|
|
32
25
|
}
|
|
33
|
-
export declare function generateTimestampReferenceForBlockFilters(dataSources: SubqlProjectDs[], api: EthereumApi): Promise<SubqlProjectDs[]>;
|
|
34
26
|
export {};
|
|
@@ -7,23 +7,58 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
7
7
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
8
8
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
9
9
|
};
|
|
10
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
11
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
12
|
+
};
|
|
13
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
14
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
15
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
16
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
17
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
18
|
+
};
|
|
19
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
20
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
21
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
22
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
23
|
+
};
|
|
10
24
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
11
25
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
12
26
|
};
|
|
27
|
+
var _SubqueryProject_dataSources;
|
|
13
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
-
exports.
|
|
29
|
+
exports.SubqueryProject = void 0;
|
|
30
|
+
const assert_1 = __importDefault(require("assert"));
|
|
15
31
|
const common_1 = require("@nestjs/common");
|
|
16
32
|
const common_2 = require("@subql/common");
|
|
17
33
|
const common_ethereum_1 = require("@subql/common-ethereum");
|
|
18
34
|
const node_core_1 = require("@subql/node-core");
|
|
19
35
|
const utils_1 = require("@subql/utils");
|
|
20
|
-
const
|
|
36
|
+
const graphql_1 = require("graphql");
|
|
21
37
|
const project_1 = require("../utils/project");
|
|
38
|
+
const { version: packageVersion } = require('../../package.json');
|
|
22
39
|
const NOT_SUPPORT = (name) => {
|
|
23
40
|
throw new Error(`Manifest specVersion ${name} is not supported`);
|
|
24
41
|
};
|
|
25
42
|
let SubqueryProject = class SubqueryProject {
|
|
26
|
-
|
|
43
|
+
constructor(id, root, network, dataSources, schema, templates, runner, parent) {
|
|
44
|
+
this.id = id;
|
|
45
|
+
this.root = root;
|
|
46
|
+
this.network = network;
|
|
47
|
+
this.schema = schema;
|
|
48
|
+
this.templates = templates;
|
|
49
|
+
this.runner = runner;
|
|
50
|
+
this.parent = parent;
|
|
51
|
+
_SubqueryProject_dataSources.set(this, void 0);
|
|
52
|
+
__classPrivateFieldSet(this, _SubqueryProject_dataSources, dataSources, "f");
|
|
53
|
+
}
|
|
54
|
+
get dataSources() {
|
|
55
|
+
return __classPrivateFieldGet(this, _SubqueryProject_dataSources, "f");
|
|
56
|
+
}
|
|
57
|
+
async applyCronTimestamps(getTimestamp) {
|
|
58
|
+
__classPrivateFieldSet(this, _SubqueryProject_dataSources, await (0, node_core_1.insertBlockFiltersCronSchedules)(this.dataSources, getTimestamp, common_ethereum_1.isRuntimeDs, common_ethereum_1.EthereumHandlerKind.Block), "f");
|
|
59
|
+
}
|
|
60
|
+
static async create(path, rawManifest, reader, root, // If project local then directory otherwise temp directory
|
|
61
|
+
networkOverrides) {
|
|
27
62
|
// rawManifest and reader can be reused here.
|
|
28
63
|
// It has been pre-fetched and used for rebase manifest runner options with args
|
|
29
64
|
// in order to generate correct configs.
|
|
@@ -34,15 +69,17 @@ let SubqueryProject = class SubqueryProject {
|
|
|
34
69
|
}
|
|
35
70
|
const manifest = (0, common_ethereum_1.parseEthereumProjectManifest)(rawManifest);
|
|
36
71
|
if (manifest.isV1_0_0) {
|
|
37
|
-
return
|
|
72
|
+
return loadProjectFromManifestBase(manifest.asV1_0_0, reader, path, root, networkOverrides);
|
|
38
73
|
}
|
|
39
74
|
else {
|
|
40
75
|
NOT_SUPPORT(manifest.specVersion);
|
|
41
76
|
}
|
|
42
77
|
}
|
|
43
78
|
};
|
|
79
|
+
_SubqueryProject_dataSources = new WeakMap();
|
|
44
80
|
SubqueryProject = __decorate([
|
|
45
|
-
(0, common_1.Injectable)()
|
|
81
|
+
(0, common_1.Injectable)(),
|
|
82
|
+
__metadata("design:paramtypes", [String, String, Object, Array, graphql_1.GraphQLSchema, Array, Object, Object])
|
|
46
83
|
], SubqueryProject);
|
|
47
84
|
exports.SubqueryProject = SubqueryProject;
|
|
48
85
|
function processChainId(network) {
|
|
@@ -55,8 +92,7 @@ function processChainId(network) {
|
|
|
55
92
|
delete network.genesisHash;
|
|
56
93
|
return network;
|
|
57
94
|
}
|
|
58
|
-
async function loadProjectFromManifestBase(projectManifest, reader, path,
|
|
59
|
-
root = root !== null && root !== void 0 ? root : (await (0, node_core_1.getProjectRoot)(reader));
|
|
95
|
+
async function loadProjectFromManifestBase(projectManifest, reader, path, root, networkOverrides) {
|
|
60
96
|
if (typeof projectManifest.network.endpoint === 'string') {
|
|
61
97
|
projectManifest.network.endpoint = [projectManifest.network.endpoint];
|
|
62
98
|
}
|
|
@@ -73,70 +109,10 @@ async function loadProjectFromManifestBase(projectManifest, reader, path, networ
|
|
|
73
109
|
}
|
|
74
110
|
const schema = (0, utils_1.buildSchemaFromString)(schemaString);
|
|
75
111
|
const dataSources = await (0, project_1.updateDatasourcesFlare)(projectManifest.dataSources, reader, root);
|
|
76
|
-
const templates = await loadProjectTemplates(projectManifest, root, reader);
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
dataSources,
|
|
82
|
-
schema,
|
|
83
|
-
templates,
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
const { version: packageVersion } = require('../../package.json');
|
|
87
|
-
async function loadProjectFromManifest1_0_0(projectManifest, reader, path, networkOverrides, root) {
|
|
88
|
-
const project = await loadProjectFromManifestBase(projectManifest, reader, path, networkOverrides, root);
|
|
89
|
-
project.runner = projectManifest.runner;
|
|
90
|
-
if (!(0, common_2.validateSemver)(packageVersion, project.runner.node.version)) {
|
|
91
|
-
throw new Error(`Runner require node version ${project.runner.node.version}, current node ${packageVersion}`);
|
|
92
|
-
}
|
|
93
|
-
return project;
|
|
94
|
-
}
|
|
95
|
-
async function loadProjectTemplates(projectManifest, root, reader) {
|
|
96
|
-
if (!projectManifest.templates || !projectManifest.templates.length) {
|
|
97
|
-
return [];
|
|
98
|
-
}
|
|
99
|
-
const dsTemplates = await (0, project_1.updateDatasourcesFlare)(projectManifest.templates, reader, root);
|
|
100
|
-
return dsTemplates.map((ds, index) => (Object.assign(Object.assign({}, ds), { name: projectManifest.templates[index].name })));
|
|
101
|
-
}
|
|
102
|
-
// eslint-disable-next-line @typescript-eslint/require-await
|
|
103
|
-
async function generateTimestampReferenceForBlockFilters(dataSources, api) {
|
|
104
|
-
const cron = new cron_converter_1.default();
|
|
105
|
-
dataSources = await Promise.all(dataSources.map(async (ds) => {
|
|
106
|
-
var _a;
|
|
107
|
-
if ((0, common_ethereum_1.isRuntimeDs)(ds)) {
|
|
108
|
-
const startBlock = (_a = ds.startBlock) !== null && _a !== void 0 ? _a : 1;
|
|
109
|
-
let block;
|
|
110
|
-
let timestampReference;
|
|
111
|
-
ds.mapping.handlers = await Promise.all(ds.mapping.handlers.map(async (handler) => {
|
|
112
|
-
var _a;
|
|
113
|
-
if (handler.kind === common_ethereum_1.EthereumHandlerKind.Block) {
|
|
114
|
-
if ((_a = handler.filter) === null || _a === void 0 ? void 0 : _a.timestamp) {
|
|
115
|
-
if (!block) {
|
|
116
|
-
block = await api.getBlockByHeightOrHash(startBlock);
|
|
117
|
-
timestampReference = new Date(block.timestamp * 1000); // Add millis
|
|
118
|
-
}
|
|
119
|
-
try {
|
|
120
|
-
cron.fromString(handler.filter.timestamp);
|
|
121
|
-
}
|
|
122
|
-
catch (e) {
|
|
123
|
-
throw new Error(`Invalid Cron string: ${handler.filter.timestamp}`);
|
|
124
|
-
}
|
|
125
|
-
const schedule = cron.schedule(timestampReference);
|
|
126
|
-
handler.filter.cronSchedule = {
|
|
127
|
-
schedule: schedule,
|
|
128
|
-
get next() {
|
|
129
|
-
return Date.parse(this.schedule.next().format());
|
|
130
|
-
},
|
|
131
|
-
};
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
return handler;
|
|
135
|
-
}));
|
|
136
|
-
}
|
|
137
|
-
return ds;
|
|
138
|
-
}));
|
|
139
|
-
return dataSources;
|
|
112
|
+
const templates = await (0, node_core_1.loadProjectTemplates)(projectManifest.templates, root, reader, common_ethereum_1.isCustomDs);
|
|
113
|
+
const runner = projectManifest.runner;
|
|
114
|
+
(0, assert_1.default)((0, common_2.validateSemver)(packageVersion, runner.node.version), new Error(`Runner require node version ${runner.node.version}, current node ${packageVersion}`));
|
|
115
|
+
return new SubqueryProject(reader.root ? reader.root : path, //TODO, need to method to get project_id
|
|
116
|
+
root, network, dataSources, schema, templates, runner, projectManifest.parent);
|
|
140
117
|
}
|
|
141
|
-
exports.generateTimestampReferenceForBlockFilters = generateTimestampReferenceForBlockFilters;
|
|
142
118
|
//# sourceMappingURL=SubqueryProject.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubqueryProject.js","sourceRoot":"","sources":["../../src/configure/SubqueryProject.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2020-2023 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { Block } from '@ethersproject/abstract-provider';\nimport { Injectable } from '@nestjs/common';\nimport { Reader, RunnerSpecs, validateSemver } from '@subql/common';\nimport {\n EthereumProjectNetworkConfig,\n parseEthereumProjectManifest,\n SubqlEthereumDataSource,\n EthereumBlockFilter,\n ProjectManifestV1_0_0Impl,\n isRuntimeDs,\n EthereumHandlerKind,\n isCustomDs,\n} from '@subql/common-ethereum';\nimport { getProjectRoot, updateDataSourcesV1_0_0 } from '@subql/node-core';\nimport { buildSchemaFromString } from '@subql/utils';\nimport Cron from 'cron-converter';\nimport { GraphQLSchema } from 'graphql';\nimport { EthereumApi } from '../ethereum/api.ethereum';\nimport { updateDatasourcesFlare } from '../utils/project';\n\nexport type SubqlProjectDs = SubqlEthereumDataSource & {\n mapping: SubqlEthereumDataSource['mapping'] & { entryScript: string };\n};\n\nexport type SubqlProjectBlockFilter = EthereumBlockFilter & {\n cronSchedule?: {\n schedule: Cron.Seeker;\n next: number;\n };\n};\n\nexport type SubqlProjectDsTemplate = Omit<SubqlProjectDs, 'startBlock'> & {\n name: string;\n};\n\nconst NOT_SUPPORT = (name: string) => {\n throw new Error(`Manifest specVersion ${name} is not supported`);\n};\n\n// This is the runtime type after we have mapped genesisHash to chainId and endpoint/dict have been provided when dealing with deployments\ntype NetworkConfig = EthereumProjectNetworkConfig & { chainId: string };\n\n@Injectable()\nexport class SubqueryProject {\n id: string;\n root: string;\n network: NetworkConfig;\n dataSources: SubqlProjectDs[];\n schema: GraphQLSchema;\n templates: SubqlProjectDsTemplate[];\n runner?: RunnerSpecs;\n\n static async create(\n path: string,\n rawManifest: unknown,\n reader: Reader,\n networkOverrides?: Partial<EthereumProjectNetworkConfig>,\n root?: string,\n ): Promise<SubqueryProject> {\n // rawManifest and reader can be reused here.\n // It has been pre-fetched and used for rebase manifest runner options with args\n // in order to generate correct configs.\n\n // But we still need reader here, because path can be remote or local\n // and the `loadProjectManifest(projectPath)` only support local mode\n if (rawManifest === undefined) {\n throw new Error(`Get manifest from project path ${path} failed`);\n }\n const manifest = parseEthereumProjectManifest(rawManifest);\n\n if (manifest.isV1_0_0) {\n return loadProjectFromManifest1_0_0(\n manifest.asV1_0_0,\n reader,\n path,\n networkOverrides,\n root,\n );\n } else {\n NOT_SUPPORT(manifest.specVersion);\n }\n }\n}\n\nfunction processChainId(network: any): NetworkConfig {\n if (network.chainId && network.genesisHash) {\n throw new Error('Please only provide one of chainId and genesisHash');\n } else if (network.genesisHash && !network.chainId) {\n network.chainId = network.genesisHash;\n }\n delete network.genesisHash;\n return network;\n}\n\ntype SUPPORT_MANIFEST = ProjectManifestV1_0_0Impl;\n\nasync function loadProjectFromManifestBase(\n projectManifest: SUPPORT_MANIFEST,\n reader: Reader,\n path: string,\n networkOverrides?: Partial<EthereumProjectNetworkConfig>,\n root?: string,\n): Promise<SubqueryProject> {\n root = root ?? (await getProjectRoot(reader));\n\n if (typeof projectManifest.network.endpoint === 'string') {\n projectManifest.network.endpoint = [projectManifest.network.endpoint];\n }\n\n const network = processChainId({\n ...projectManifest.network,\n ...networkOverrides,\n });\n\n if (!network.endpoint) {\n throw new Error(\n `Network endpoint must be provided for network. chainId=\"${network.chainId}\"`,\n );\n }\n\n let schemaString: string;\n try {\n schemaString = await reader.getFile(projectManifest.schema.file);\n } catch (e) {\n throw new Error(\n `unable to fetch the schema from ${projectManifest.schema.file}`,\n );\n }\n const schema = buildSchemaFromString(schemaString);\n\n const dataSources = await updateDatasourcesFlare(\n projectManifest.dataSources,\n reader,\n root,\n );\n\n const templates = await loadProjectTemplates(projectManifest, root, reader);\n\n return {\n id: reader.root ? reader.root : path, //TODO, need to method to get project_id\n root,\n network,\n dataSources,\n schema,\n templates,\n };\n}\n\nconst { version: packageVersion } = require('../../package.json');\n\nasync function loadProjectFromManifest1_0_0(\n projectManifest: ProjectManifestV1_0_0Impl,\n reader: Reader,\n path: string,\n networkOverrides?: Partial<EthereumProjectNetworkConfig>,\n root?: string,\n): Promise<SubqueryProject> {\n const project = await loadProjectFromManifestBase(\n projectManifest,\n reader,\n path,\n networkOverrides,\n root,\n );\n project.runner = projectManifest.runner;\n if (!validateSemver(packageVersion, project.runner.node.version)) {\n throw new Error(\n `Runner require node version ${project.runner.node.version}, current node ${packageVersion}`,\n );\n }\n return project;\n}\n\nasync function loadProjectTemplates(\n projectManifest: ProjectManifestV1_0_0Impl,\n root: string,\n reader: Reader,\n): Promise<SubqlProjectDsTemplate[]> {\n if (!projectManifest.templates || !projectManifest.templates.length) {\n return [];\n }\n const dsTemplates = await updateDatasourcesFlare(\n projectManifest.templates,\n reader,\n root,\n );\n\n return dsTemplates.map((ds, index) => ({\n ...ds,\n name: projectManifest.templates[index].name,\n }));\n}\n\n// eslint-disable-next-line @typescript-eslint/require-await\nexport async function generateTimestampReferenceForBlockFilters(\n dataSources: SubqlProjectDs[],\n api: EthereumApi,\n): Promise<SubqlProjectDs[]> {\n const cron = new Cron();\n\n dataSources = await Promise.all(\n dataSources.map(async (ds) => {\n if (isRuntimeDs(ds)) {\n const startBlock = ds.startBlock ?? 1;\n let block: Block;\n let timestampReference: Date;\n\n ds.mapping.handlers = await Promise.all(\n ds.mapping.handlers.map(async (handler) => {\n if (handler.kind === EthereumHandlerKind.Block) {\n if (handler.filter?.timestamp) {\n if (!block) {\n block = await api.getBlockByHeightOrHash(startBlock);\n timestampReference = new Date(block.timestamp * 1000); // Add millis\n }\n try {\n cron.fromString(handler.filter.timestamp);\n } catch (e) {\n throw new Error(\n `Invalid Cron string: ${handler.filter.timestamp}`,\n );\n }\n\n const schedule = cron.schedule(timestampReference);\n (handler.filter as SubqlProjectBlockFilter).cronSchedule = {\n schedule: schedule,\n get next() {\n return Date.parse(this.schedule.next().format());\n },\n };\n }\n }\n return handler;\n }),\n );\n }\n return ds;\n }),\n );\n\n return dataSources;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"SubqueryProject.js","sourceRoot":"","sources":["../../src/configure/SubqueryProject.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2020-2023 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport assert from 'assert';\nimport { Injectable } from '@nestjs/common';\nimport { validateSemver } from '@subql/common';\nimport {\n parseEthereumProjectManifest,\n SubqlEthereumDataSource,\n ProjectManifestV1_0_0Impl,\n isRuntimeDs,\n EthereumHandlerKind,\n isCustomDs,\n} from '@subql/common-ethereum';\nimport {\n insertBlockFiltersCronSchedules,\n ISubqueryProject,\n loadProjectTemplates,\n SubqlProjectDs,\n} from '@subql/node-core';\nimport { ParentProject, Reader, RunnerSpecs } from '@subql/types-core';\nimport {\n EthereumNetworkConfig,\n RuntimeDatasourceTemplate,\n CustomDatasourceTemplate,\n} from '@subql/types-ethereum';\nimport { buildSchemaFromString } from '@subql/utils';\nimport { GraphQLSchema } from 'graphql';\nimport { updateDatasourcesFlare } from '../utils/project';\n\nconst { version: packageVersion } = require('../../package.json');\n\nexport type EthereumProjectDs = SubqlProjectDs<SubqlEthereumDataSource>;\n\nexport type EthereumProjectDsTemplate =\n | SubqlProjectDs<RuntimeDatasourceTemplate>\n | SubqlProjectDs<CustomDatasourceTemplate>;\n\nconst NOT_SUPPORT = (name: string) => {\n throw new Error(`Manifest specVersion ${name} is not supported`);\n};\n\n// This is the runtime type after we have mapped genesisHash to chainId and endpoint/dict have been provided when dealing with deployments\ntype NetworkConfig = EthereumNetworkConfig & { chainId: string };\n\n@Injectable()\nexport class SubqueryProject implements ISubqueryProject {\n #dataSources: EthereumProjectDs[];\n\n constructor(\n readonly id: string,\n readonly root: string,\n readonly network: NetworkConfig,\n dataSources: EthereumProjectDs[],\n readonly schema: GraphQLSchema,\n readonly templates: EthereumProjectDsTemplate[],\n readonly runner?: RunnerSpecs,\n readonly parent?: ParentProject,\n ) {\n this.#dataSources = dataSources;\n }\n\n get dataSources(): EthereumProjectDs[] {\n return this.#dataSources;\n }\n\n async applyCronTimestamps(\n getTimestamp: (height: number) => Promise<Date>,\n ): Promise<void> {\n this.#dataSources = await insertBlockFiltersCronSchedules(\n this.dataSources,\n getTimestamp,\n isRuntimeDs,\n EthereumHandlerKind.Block,\n );\n }\n\n static async create(\n path: string,\n rawManifest: unknown,\n reader: Reader,\n root: string, // If project local then directory otherwise temp directory\n networkOverrides?: Partial<EthereumNetworkConfig>,\n ): Promise<SubqueryProject> {\n // rawManifest and reader can be reused here.\n // It has been pre-fetched and used for rebase manifest runner options with args\n // in order to generate correct configs.\n\n // But we still need reader here, because path can be remote or local\n // and the `loadProjectManifest(projectPath)` only support local mode\n if (rawManifest === undefined) {\n throw new Error(`Get manifest from project path ${path} failed`);\n }\n const manifest = parseEthereumProjectManifest(rawManifest);\n\n if (manifest.isV1_0_0) {\n return loadProjectFromManifestBase(\n manifest.asV1_0_0,\n reader,\n path,\n root,\n networkOverrides,\n );\n } else {\n NOT_SUPPORT(manifest.specVersion);\n }\n }\n}\n\nfunction processChainId(network: any): NetworkConfig {\n if (network.chainId && network.genesisHash) {\n throw new Error('Please only provide one of chainId and genesisHash');\n } else if (network.genesisHash && !network.chainId) {\n network.chainId = network.genesisHash;\n }\n delete network.genesisHash;\n return network;\n}\n\ntype SUPPORT_MANIFEST = ProjectManifestV1_0_0Impl;\n\nasync function loadProjectFromManifestBase(\n projectManifest: SUPPORT_MANIFEST,\n reader: Reader,\n path: string,\n root: string,\n networkOverrides?: Partial<EthereumNetworkConfig>,\n): Promise<SubqueryProject> {\n if (typeof projectManifest.network.endpoint === 'string') {\n projectManifest.network.endpoint = [projectManifest.network.endpoint];\n }\n\n const network = processChainId({\n ...projectManifest.network,\n ...networkOverrides,\n });\n\n if (!network.endpoint) {\n throw new Error(\n `Network endpoint must be provided for network. chainId=\"${network.chainId}\"`,\n );\n }\n\n let schemaString: string;\n try {\n schemaString = await reader.getFile(projectManifest.schema.file);\n } catch (e) {\n throw new Error(\n `unable to fetch the schema from ${projectManifest.schema.file}`,\n );\n }\n const schema = buildSchemaFromString(schemaString);\n\n const dataSources = await updateDatasourcesFlare(\n projectManifest.dataSources,\n reader,\n root,\n );\n\n const templates = await loadProjectTemplates(\n projectManifest.templates,\n root,\n reader,\n isCustomDs,\n );\n const runner = projectManifest.runner;\n assert(\n validateSemver(packageVersion, runner.node.version),\n new Error(\n `Runner require node version ${runner.node.version}, current node ${packageVersion}`,\n ),\n );\n\n return new SubqueryProject(\n reader.root ? reader.root : path, //TODO, need to method to get project_id\n root,\n network,\n dataSources,\n schema,\n templates,\n runner,\n projectManifest.parent,\n );\n}\n"]}
|
|
@@ -3,8 +3,8 @@ import { NodeConfig } from '@subql/node-core';
|
|
|
3
3
|
import { SubqueryProject } from './SubqueryProject';
|
|
4
4
|
export declare class ConfigureModule {
|
|
5
5
|
static getInstance(): Promise<{
|
|
6
|
-
|
|
7
|
-
project:
|
|
6
|
+
nodeConfig: NodeConfig;
|
|
7
|
+
project: SubqueryProject;
|
|
8
8
|
}>;
|
|
9
9
|
static register(): Promise<DynamicModule>;
|
|
10
10
|
}
|
|
@@ -7,117 +7,47 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
7
7
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
8
8
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
9
9
|
};
|
|
10
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
11
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
12
|
-
};
|
|
13
10
|
var ConfigureModule_1;
|
|
14
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
12
|
exports.ConfigureModule = void 0;
|
|
16
|
-
const assert_1 = __importDefault(require("assert"));
|
|
17
13
|
const common_1 = require("@nestjs/common");
|
|
18
|
-
const common_2 = require("@subql/common");
|
|
19
14
|
const node_core_1 = require("@subql/node-core");
|
|
20
|
-
const lodash_1 = require("lodash");
|
|
21
15
|
const yargs_1 = require("../yargs");
|
|
22
16
|
const SubqueryProject_1 = require("./SubqueryProject");
|
|
23
|
-
const
|
|
24
|
-
const YargsNameMapping = {};
|
|
25
|
-
function yargsToIConfig(yargs) {
|
|
26
|
-
return Object.entries(yargs).reduce((acc, [key, value]) => {
|
|
27
|
-
var _a;
|
|
28
|
-
if (['_', '$0'].includes(key))
|
|
29
|
-
return acc;
|
|
30
|
-
if (key === 'network-registry') {
|
|
31
|
-
try {
|
|
32
|
-
value = JSON.parse(value);
|
|
33
|
-
}
|
|
34
|
-
catch (e) {
|
|
35
|
-
throw new Error('Argument `network-registry` is not valid JSON');
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
acc[(_a = YargsNameMapping[key]) !== null && _a !== void 0 ? _a : (0, lodash_1.camelCase)(key)] = value;
|
|
39
|
-
return acc;
|
|
40
|
-
}, {});
|
|
41
|
-
}
|
|
42
|
-
function warnDeprecations() {
|
|
43
|
-
const { argv } = yargs_1.yargsOptions;
|
|
44
|
-
if (argv['subquery-name']) {
|
|
45
|
-
logger.warn('Note that argument --subquery-name has been deprecated in favour of --db-schema');
|
|
46
|
-
}
|
|
47
|
-
if (argv.local) {
|
|
48
|
-
logger.warn('Note that argument --local has been deprecated');
|
|
49
|
-
}
|
|
50
|
-
}
|
|
17
|
+
const pjson = require('../../package.json');
|
|
51
18
|
let ConfigureModule = ConfigureModule_1 = class ConfigureModule {
|
|
52
19
|
static async getInstance() {
|
|
53
20
|
const { argv } = yargs_1.yargsOptions;
|
|
54
|
-
|
|
55
|
-
let rawManifest;
|
|
56
|
-
let reader;
|
|
57
|
-
const isTest = argv._[0] === 'test';
|
|
58
|
-
// Override order : Sub-command/Args/Flags > Manifest Runner options > Default configs
|
|
59
|
-
// Therefore, we should rebase the manifest runner options with args first but not the config in the end
|
|
60
|
-
if (argv.config) {
|
|
61
|
-
// get manifest options
|
|
62
|
-
config = node_core_1.NodeConfig.fromFile(argv.config, yargsToIConfig(argv), isTest);
|
|
63
|
-
reader = await common_2.ReaderFactory.create(config.subquery, {
|
|
64
|
-
ipfs: config.ipfs,
|
|
65
|
-
});
|
|
66
|
-
rawManifest = await reader.getProjectSchema();
|
|
67
|
-
(0, node_core_1.rebaseArgsWithManifest)(argv, rawManifest);
|
|
68
|
-
// use rebased argv generate config to override current config
|
|
69
|
-
config = node_core_1.NodeConfig.rebaseWithArgs(config, yargsToIConfig(argv), isTest);
|
|
70
|
-
}
|
|
71
|
-
else {
|
|
72
|
-
if (!argv.subquery) {
|
|
73
|
-
logger.error('Subquery path is missing neither in cli options nor in config file');
|
|
74
|
-
yargs_1.yargsOptions.showHelp();
|
|
75
|
-
process.exit(1);
|
|
76
|
-
}
|
|
77
|
-
warnDeprecations();
|
|
78
|
-
(0, assert_1.default)(argv.subquery, 'subquery path is missing');
|
|
79
|
-
reader = await common_2.ReaderFactory.create(argv.subquery, {
|
|
80
|
-
ipfs: argv.ipfs,
|
|
81
|
-
});
|
|
82
|
-
rawManifest = await reader.getProjectSchema();
|
|
83
|
-
(0, node_core_1.rebaseArgsWithManifest)(argv, rawManifest);
|
|
84
|
-
// Create new nodeConfig with rebased argv
|
|
85
|
-
config = new node_core_1.NodeConfig((0, node_core_1.defaultSubqueryName)(yargsToIConfig(argv)), isTest);
|
|
86
|
-
}
|
|
87
|
-
if (!(0, node_core_1.validDbSchemaName)(config.dbSchema)) {
|
|
88
|
-
process.exit(1);
|
|
89
|
-
}
|
|
90
|
-
if (config.debug) {
|
|
91
|
-
(0, node_core_1.setLevel)('debug');
|
|
92
|
-
}
|
|
93
|
-
const project = async () => {
|
|
94
|
-
const p = await SubqueryProject_1.SubqueryProject.create(argv.subquery, rawManifest, reader, (0, lodash_1.omitBy)({
|
|
95
|
-
endpoint: config.networkEndpoints,
|
|
96
|
-
dictionary: config.networkDictionary,
|
|
97
|
-
}, lodash_1.isNil), config.root).catch((err) => {
|
|
98
|
-
const pjson = require('../../package.json');
|
|
99
|
-
(0, common_2.handleCreateSubqueryProjectError)(err, pjson, rawManifest, logger);
|
|
100
|
-
process.exit(1);
|
|
101
|
-
});
|
|
102
|
-
return p;
|
|
103
|
-
};
|
|
104
|
-
return { config, project };
|
|
21
|
+
return (0, node_core_1.registerApp)(argv, SubqueryProject_1.SubqueryProject.create.bind(SubqueryProject_1.SubqueryProject), yargs_1.yargsOptions.showHelp.bind(yargs_1.yargsOptions), pjson);
|
|
105
22
|
}
|
|
106
23
|
static async register() {
|
|
107
|
-
const {
|
|
24
|
+
const { nodeConfig, project } = await ConfigureModule_1.getInstance();
|
|
108
25
|
return {
|
|
109
26
|
module: ConfigureModule_1,
|
|
110
27
|
providers: [
|
|
111
28
|
{
|
|
112
29
|
provide: node_core_1.NodeConfig,
|
|
113
|
-
useValue:
|
|
30
|
+
useValue: nodeConfig,
|
|
114
31
|
},
|
|
115
32
|
{
|
|
116
33
|
provide: 'ISubqueryProject',
|
|
117
|
-
|
|
34
|
+
useValue: project,
|
|
118
35
|
},
|
|
36
|
+
{
|
|
37
|
+
provide: 'IProjectUpgradeService',
|
|
38
|
+
useValue: project,
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
provide: 'Null',
|
|
42
|
+
useValue: null,
|
|
43
|
+
},
|
|
44
|
+
],
|
|
45
|
+
exports: [
|
|
46
|
+
node_core_1.NodeConfig,
|
|
47
|
+
'ISubqueryProject',
|
|
48
|
+
'IProjectUpgradeService',
|
|
49
|
+
'Null',
|
|
119
50
|
],
|
|
120
|
-
exports: [node_core_1.NodeConfig, 'ISubqueryProject'],
|
|
121
51
|
};
|
|
122
52
|
}
|
|
123
53
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configure.module.js","sourceRoot":"","sources":["../../src/configure/configure.module.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC
|
|
1
|
+
{"version":3,"file":"configure.module.js","sourceRoot":"","sources":["../../src/configure/configure.module.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;;AAEnC,2CAA+D;AAC/D,gDAA2D;AAC3D,oCAAwC;AACxC,uDAAoD;AAEpD,MAAM,KAAK,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAIrC,IAAM,eAAe,uBAArB,MAAM,eAAe;IAC1B,MAAM,CAAC,KAAK,CAAC,WAAW;QAItB,MAAM,EAAE,IAAI,EAAE,GAAG,oBAAY,CAAC;QAC9B,OAAO,IAAA,uBAAW,EAChB,IAAI,EACJ,iCAAe,CAAC,MAAM,CAAC,IAAI,CAAC,iCAAe,CAAC,EAC5C,oBAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,oBAAY,CAAC,EACxC,KAAK,CACN,CAAC;IACJ,CAAC;IACD,MAAM,CAAC,KAAK,CAAC,QAAQ;QACnB,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,MAAM,iBAAe,CAAC,WAAW,EAAE,CAAC;QAEpE,OAAO;YACL,MAAM,EAAE,iBAAe;YACvB,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,sBAAU;oBACnB,QAAQ,EAAE,UAAU;iBACrB;gBACD;oBACE,OAAO,EAAE,kBAAkB;oBAC3B,QAAQ,EAAE,OAAO;iBAClB;gBACD;oBACE,OAAO,EAAE,wBAAwB;oBACjC,QAAQ,EAAE,OAAO;iBAClB;gBACD;oBACE,OAAO,EAAE,MAAM;oBACf,QAAQ,EAAE,IAAI;iBACf;aACF;YACD,OAAO,EAAE;gBACP,sBAAU;gBACV,kBAAkB;gBAClB,wBAAwB;gBACxB,MAAM;aACP;SACF,CAAC;IACJ,CAAC;CACF,CAAA;AA5CY,eAAe;IAF3B,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,eAAe,CA4C3B;AA5CY,0CAAe","sourcesContent":["// Copyright 2020-2023 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { DynamicModule, Global, Module } from '@nestjs/common';\nimport { NodeConfig, registerApp } from '@subql/node-core';\nimport { yargsOptions } from '../yargs';\nimport { SubqueryProject } from './SubqueryProject';\n\nconst pjson = require('../../package.json');\n\n@Global()\n@Module({})\nexport class ConfigureModule {\n static async getInstance(): Promise<{\n nodeConfig: NodeConfig;\n project: SubqueryProject;\n }> {\n const { argv } = yargsOptions;\n return registerApp<SubqueryProject>(\n argv,\n SubqueryProject.create.bind(SubqueryProject),\n yargsOptions.showHelp.bind(yargsOptions),\n pjson,\n );\n }\n static async register(): Promise<DynamicModule> {\n const { nodeConfig, project } = await ConfigureModule.getInstance();\n\n return {\n module: ConfigureModule,\n providers: [\n {\n provide: NodeConfig,\n useValue: nodeConfig,\n },\n {\n provide: 'ISubqueryProject',\n useValue: project,\n },\n {\n provide: 'IProjectUpgradeService',\n useValue: project,\n },\n {\n provide: 'Null',\n useValue: null,\n },\n ],\n exports: [\n NodeConfig,\n 'ISubqueryProject',\n 'IProjectUpgradeService',\n 'Null',\n ],\n };\n }\n}\n"]}
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
import { EventEmitter2 } from '@nestjs/event-emitter';
|
|
2
2
|
import { ApiConnectionError, NetworkMetadataPayload, IApiConnectionSpecific } from '@subql/node-core';
|
|
3
|
-
import {
|
|
3
|
+
import { EthereumBlock, LightEthereumBlock } from '@subql/types-ethereum';
|
|
4
4
|
import { EthereumApi } from './api.ethereum';
|
|
5
5
|
import SafeEthProvider from './safe-api';
|
|
6
|
-
type FetchFunc = (api: EthereumApi, batch: number[]) => Promise<
|
|
7
|
-
export
|
|
6
|
+
export type FetchFunc = ((api: EthereumApi, batch: number[]) => Promise<EthereumBlock[]>) | ((api: EthereumApi, batch: number[]) => Promise<LightEthereumBlock[]>);
|
|
7
|
+
export type GetFetchFunc = () => FetchFunc;
|
|
8
|
+
export declare class EthereumApiConnection implements IApiConnectionSpecific<EthereumApi, SafeEthProvider, EthereumBlock[] | LightEthereumBlock[]> {
|
|
8
9
|
unsafeApi: EthereumApi;
|
|
9
10
|
private fetchBlocksBatches;
|
|
10
11
|
readonly networkMeta: NetworkMetadataPayload;
|
|
11
|
-
constructor(unsafeApi: EthereumApi, fetchBlocksBatches:
|
|
12
|
-
static create(endpoint: string,
|
|
12
|
+
constructor(unsafeApi: EthereumApi, fetchBlocksBatches: GetFetchFunc);
|
|
13
|
+
static create(endpoint: string, blockConfirmations: number, fetchBlocksBatches: GetFetchFunc, eventEmitter: EventEmitter2): Promise<EthereumApiConnection>;
|
|
13
14
|
safeApi(height: number): SafeEthProvider;
|
|
14
15
|
apiConnect(): Promise<void>;
|
|
15
16
|
apiDisconnect(): Promise<void>;
|
|
16
|
-
fetchBlocks(heights: number[]): Promise<
|
|
17
|
+
fetchBlocks(heights: number[]): Promise<EthereumBlock[] | LightEthereumBlock[]>;
|
|
17
18
|
handleError: typeof EthereumApiConnection.handleError;
|
|
18
19
|
static handleError(e: Error): ApiConnectionError;
|
|
19
20
|
}
|
|
20
|
-
export {};
|
|
@@ -16,10 +16,10 @@ class EthereumApiConnection {
|
|
|
16
16
|
genesisHash: unsafeApi.getGenesisHash(),
|
|
17
17
|
};
|
|
18
18
|
}
|
|
19
|
-
static async create(endpoint,
|
|
20
|
-
const api = new api_ethereum_1.EthereumApi(endpoint, eventEmitter);
|
|
19
|
+
static async create(endpoint, blockConfirmations, fetchBlocksBatches, eventEmitter) {
|
|
20
|
+
const api = new api_ethereum_1.EthereumApi(endpoint, blockConfirmations, eventEmitter);
|
|
21
21
|
await api.init();
|
|
22
|
-
return new EthereumApiConnection(api,
|
|
22
|
+
return new EthereumApiConnection(api, fetchBlocksBatches);
|
|
23
23
|
}
|
|
24
24
|
safeApi(height) {
|
|
25
25
|
throw new Error(`Not Implemented`);
|
|
@@ -31,7 +31,7 @@ class EthereumApiConnection {
|
|
|
31
31
|
await this.unsafeApi.disconnect();
|
|
32
32
|
}
|
|
33
33
|
async fetchBlocks(heights) {
|
|
34
|
-
const blocks = await this.fetchBlocksBatches(this.unsafeApi, heights);
|
|
34
|
+
const blocks = await this.fetchBlocksBatches()(this.unsafeApi, heights);
|
|
35
35
|
return blocks;
|
|
36
36
|
}
|
|
37
37
|
static handleError(e) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.connection.js","sourceRoot":"","sources":["../../src/ethereum/api.connection.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;AAGnC,gDAS0B;AAE1B,iDAA6C;
|
|
1
|
+
{"version":3,"file":"api.connection.js","sourceRoot":"","sources":["../../src/ethereum/api.connection.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;AAGnC,gDAS0B;AAE1B,iDAA6C;AAU7C,MAAa,qBAAqB;IAUhC,YACS,SAAsB,EACrB,kBAAgC;QADjC,cAAS,GAAT,SAAS,CAAa;QACrB,uBAAkB,GAAlB,kBAAkB,CAAc;QAyC1C,gBAAW,GAAG,qBAAqB,CAAC,WAAW,CAAC;QAvC9C,IAAI,CAAC,WAAW,GAAG;YACjB,KAAK,EAAE,SAAS,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE;YACxC,QAAQ,EAAE,SAAS,CAAC,WAAW,EAAE;YACjC,WAAW,EAAE,SAAS,CAAC,cAAc,EAAE;SACxC,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CACjB,QAAgB,EAChB,kBAA0B,EAC1B,kBAAgC,EAChC,YAA2B;QAE3B,MAAM,GAAG,GAAG,IAAI,0BAAW,CAAC,QAAQ,EAAE,kBAAkB,EAAE,YAAY,CAAC,CAAC;QAExE,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAEjB,OAAO,IAAI,qBAAqB,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;IAC5D,CAAC;IAED,OAAO,CAAC,MAAc;QACpB,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,WAAW,CACf,OAAiB;QAEjB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACxE,OAAO,MAAM,CAAC;IAChB,CAAC;IAID,MAAM,CAAC,WAAW,CAAC,CAAQ;QACzB,IAAI,eAAmC,CAAC;QACxC,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,2CAA2C,CAAC,EAAE;YACrE,eAAe,GAAG,IAAI,wBAAY,CAAC,CAAC,CAAC,CAAC;SACvC;aAAM,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,oBAAoB,CAAC,EAAE;YACrD,eAAe,GAAG,IAAI,8BAAkB,CAAC,CAAC,CAAC,CAAC;SAC7C;aAAM,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,0BAA0B,CAAC,EAAE;YAC3D,eAAe,GAAG,IAAI,0BAAc,CAAC,CAAC,CAAC,CAAC;SACzC;aAAM,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE;YACtD,eAAe,GAAG,IAAI,8BAAkB,CAAC,CAAC,CAAC,CAAC;SAC7C;aAAM;YACL,eAAe,GAAG,IAAI,8BAAkB,CACtC,CAAC,CAAC,IAAI,EACN,CAAC,CAAC,OAAO,EACT,wBAAY,CAAC,OAAO,CACrB,CAAC;SACH;QACD,OAAO,eAAe,CAAC;IACzB,CAAC;CACF;AA1ED,sDA0EC","sourcesContent":["// Copyright 2020-2023 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { EventEmitter2 } from '@nestjs/event-emitter';\nimport {\n ApiConnectionError,\n ApiErrorType,\n DisconnectionError,\n LargeResponseError,\n NetworkMetadataPayload,\n RateLimitError,\n TimeoutError,\n IApiConnectionSpecific,\n} from '@subql/node-core';\nimport { EthereumBlock, LightEthereumBlock } from '@subql/types-ethereum';\nimport { EthereumApi } from './api.ethereum';\nimport SafeEthProvider from './safe-api';\n\nexport type FetchFunc =\n | ((api: EthereumApi, batch: number[]) => Promise<EthereumBlock[]>)\n | ((api: EthereumApi, batch: number[]) => Promise<LightEthereumBlock[]>);\n\n// We use a function to get the fetch function because it can change depending on the skipBlocks feature\nexport type GetFetchFunc = () => FetchFunc;\n\nexport class EthereumApiConnection\n implements\n IApiConnectionSpecific<\n EthereumApi,\n SafeEthProvider,\n EthereumBlock[] | LightEthereumBlock[]\n >\n{\n readonly networkMeta: NetworkMetadataPayload;\n\n constructor(\n public unsafeApi: EthereumApi,\n private fetchBlocksBatches: GetFetchFunc,\n ) {\n this.networkMeta = {\n chain: unsafeApi.getChainId().toString(),\n specName: unsafeApi.getSpecName(),\n genesisHash: unsafeApi.getGenesisHash(),\n };\n }\n\n static async create(\n endpoint: string,\n blockConfirmations: number,\n fetchBlocksBatches: GetFetchFunc,\n eventEmitter: EventEmitter2,\n ): Promise<EthereumApiConnection> {\n const api = new EthereumApi(endpoint, blockConfirmations, eventEmitter);\n\n await api.init();\n\n return new EthereumApiConnection(api, fetchBlocksBatches);\n }\n\n safeApi(height: number): SafeEthProvider {\n throw new Error(`Not Implemented`);\n }\n\n async apiConnect(): Promise<void> {\n await this.unsafeApi.connect();\n }\n\n async apiDisconnect(): Promise<void> {\n await this.unsafeApi.disconnect();\n }\n\n async fetchBlocks(\n heights: number[],\n ): Promise<EthereumBlock[] | LightEthereumBlock[]> {\n const blocks = await this.fetchBlocksBatches()(this.unsafeApi, heights);\n return blocks;\n }\n\n handleError = EthereumApiConnection.handleError;\n\n static handleError(e: Error): ApiConnectionError {\n let formatted_error: ApiConnectionError;\n if (e.message.startsWith(`No response received from RPC endpoint in`)) {\n formatted_error = new TimeoutError(e);\n } else if (e.message.startsWith(`disconnected from `)) {\n formatted_error = new DisconnectionError(e);\n } else if (e.message.startsWith(`Rate Limited at endpoint`)) {\n formatted_error = new RateLimitError(e);\n } else if (e.message.includes(`Exceeded max limit of`)) {\n formatted_error = new LargeResponseError(e);\n } else {\n formatted_error = new ApiConnectionError(\n e.name,\n e.message,\n ApiErrorType.Default,\n );\n }\n return formatted_error;\n }\n}\n"]}
|