@subql/node-ethereum 0.1.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.
- package/CHANGELOG.md +11 -0
- package/LICENSE +201 -0
- package/README.md +76 -0
- package/bin/run +4 -0
- package/bin/run.cmd +3 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/app.module.d.ts +2 -0
- package/dist/app.module.js +35 -0
- package/dist/app.module.js.map +1 -0
- package/dist/configure/SubqueryProject.d.ts +38 -0
- package/dist/configure/SubqueryProject.js +133 -0
- package/dist/configure/SubqueryProject.js.map +1 -0
- package/dist/configure/configure.module.d.ts +7 -0
- package/dist/configure/configure.module.js +172 -0
- package/dist/configure/configure.module.js.map +1 -0
- package/dist/configure/configure.module.spec.d.ts +1 -0
- package/dist/configure/configure.module.spec.js +26 -0
- package/dist/configure/configure.module.spec.js.map +1 -0
- package/dist/ethereum/api.ethereum.d.ts +24 -0
- package/dist/ethereum/api.ethereum.js +177 -0
- package/dist/ethereum/api.ethereum.js.map +1 -0
- package/dist/ethereum/api.service.ethereum.d.ts +8 -0
- package/dist/ethereum/api.service.ethereum.js +57 -0
- package/dist/ethereum/api.service.ethereum.js.map +1 -0
- package/dist/ethereum/block.ethereum.d.ts +15 -0
- package/dist/ethereum/block.ethereum.js +87 -0
- package/dist/ethereum/block.ethereum.js.map +1 -0
- package/dist/ethereum/index.d.ts +2 -0
- package/dist/ethereum/index.js +21 -0
- package/dist/ethereum/index.js.map +1 -0
- package/dist/ethereum/utils.ethereum.d.ts +6 -0
- package/dist/ethereum/utils.ethereum.js +131 -0
- package/dist/ethereum/utils.ethereum.js.map +1 -0
- package/dist/indexer/dictionary.service.d.ts +7 -0
- package/dist/indexer/dictionary.service.js +29 -0
- package/dist/indexer/dictionary.service.js.map +1 -0
- package/dist/indexer/ds-processor.service.d.ts +26 -0
- package/dist/indexer/ds-processor.service.js +133 -0
- package/dist/indexer/ds-processor.service.js.map +1 -0
- package/dist/indexer/dynamic-ds.service.d.ts +25 -0
- package/dist/indexer/dynamic-ds.service.js +124 -0
- package/dist/indexer/dynamic-ds.service.js.map +1 -0
- package/dist/indexer/fetch.module.d.ts +2 -0
- package/dist/indexer/fetch.module.js +68 -0
- package/dist/indexer/fetch.module.js.map +1 -0
- package/dist/indexer/fetch.service.d.ts +44 -0
- package/dist/indexer/fetch.service.js +369 -0
- package/dist/indexer/fetch.service.js.map +1 -0
- package/dist/indexer/indexer.manager.d.ts +36 -0
- package/dist/indexer/indexer.manager.js +266 -0
- package/dist/indexer/indexer.manager.js.map +1 -0
- package/dist/indexer/indexer.module.d.ts +2 -0
- package/dist/indexer/indexer.module.js +52 -0
- package/dist/indexer/indexer.module.js.map +1 -0
- package/dist/indexer/project.service.d.ts +40 -0
- package/dist/indexer/project.service.js +259 -0
- package/dist/indexer/project.service.js.map +1 -0
- package/dist/indexer/sandbox.service.d.ts +12 -0
- package/dist/indexer/sandbox.service.js +58 -0
- package/dist/indexer/sandbox.service.js.map +1 -0
- package/dist/indexer/types.d.ts +10 -0
- package/dist/indexer/types.js +11 -0
- package/dist/indexer/types.js.map +1 -0
- package/dist/indexer/worker/block-dispatcher.service.d.ts +69 -0
- package/dist/indexer/worker/block-dispatcher.service.js +356 -0
- package/dist/indexer/worker/block-dispatcher.service.js.map +1 -0
- package/dist/indexer/worker/worker.d.ts +14 -0
- package/dist/indexer/worker/worker.js +85 -0
- package/dist/indexer/worker/worker.js.map +1 -0
- package/dist/indexer/worker/worker.module.d.ts +2 -0
- package/dist/indexer/worker/worker.module.js +33 -0
- package/dist/indexer/worker/worker.module.js.map +1 -0
- package/dist/indexer/worker/worker.service.d.ts +28 -0
- package/dist/indexer/worker/worker.service.js +79 -0
- package/dist/indexer/worker/worker.service.js.map +1 -0
- package/dist/init.d.ts +1 -0
- package/dist/init.js +54 -0
- package/dist/init.js.map +1 -0
- package/dist/main.d.ts +1 -0
- package/dist/main.js +14 -0
- package/dist/main.js.map +1 -0
- package/dist/meta/meta.controller.d.ts +23 -0
- package/dist/meta/meta.controller.js +36 -0
- package/dist/meta/meta.controller.js.map +1 -0
- package/dist/meta/meta.module.d.ts +2 -0
- package/dist/meta/meta.module.js +77 -0
- package/dist/meta/meta.module.js.map +1 -0
- package/dist/meta/meta.service.d.ts +42 -0
- package/dist/meta/meta.service.js +110 -0
- package/dist/meta/meta.service.js.map +1 -0
- package/dist/subcommands/forceClean.init.d.ts +1 -0
- package/dist/subcommands/forceClean.init.js +25 -0
- package/dist/subcommands/forceClean.init.js.map +1 -0
- package/dist/subcommands/forceClean.module.d.ts +4 -0
- package/dist/subcommands/forceClean.module.js +38 -0
- package/dist/subcommands/forceClean.module.js.map +1 -0
- package/dist/subcommands/forceClean.service.d.ts +8 -0
- package/dist/subcommands/forceClean.service.js +65 -0
- package/dist/subcommands/forceClean.service.js.map +1 -0
- package/dist/subcommands/reindex.init.d.ts +1 -0
- package/dist/subcommands/reindex.init.js +25 -0
- package/dist/subcommands/reindex.init.js.map +1 -0
- package/dist/subcommands/reindex.module.d.ts +4 -0
- package/dist/subcommands/reindex.module.js +39 -0
- package/dist/subcommands/reindex.module.js.map +1 -0
- package/dist/subcommands/reindex.service.d.ts +24 -0
- package/dist/subcommands/reindex.service.js +114 -0
- package/dist/subcommands/reindex.service.js.map +1 -0
- package/dist/utils/project.d.ts +13 -0
- package/dist/utils/project.js +191 -0
- package/dist/utils/project.js.map +1 -0
- package/dist/utils/string.d.ts +4 -0
- package/dist/utils/string.js +32 -0
- package/dist/utils/string.js.map +1 -0
- package/dist/yargs.d.ts +154 -0
- package/dist/yargs.js +193 -0
- package/dist/yargs.js.map +1 -0
- package/package.json +77 -0
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright 2020-2022 OnFinality Limited authors & contributors
|
|
3
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
5
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
6
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
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
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
9
|
+
};
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.AppModule = void 0;
|
|
12
|
+
const common_1 = require("@nestjs/common");
|
|
13
|
+
const event_emitter_1 = require("@nestjs/event-emitter");
|
|
14
|
+
const schedule_1 = require("@nestjs/schedule");
|
|
15
|
+
const node_core_1 = require("@subql/node-core");
|
|
16
|
+
const configure_module_1 = require("./configure/configure.module");
|
|
17
|
+
const fetch_module_1 = require("./indexer/fetch.module");
|
|
18
|
+
const meta_module_1 = require("./meta/meta.module");
|
|
19
|
+
let AppModule = class AppModule {
|
|
20
|
+
};
|
|
21
|
+
AppModule = __decorate([
|
|
22
|
+
(0, common_1.Module)({
|
|
23
|
+
imports: [
|
|
24
|
+
node_core_1.DbModule.forRoot(),
|
|
25
|
+
event_emitter_1.EventEmitterModule.forRoot(),
|
|
26
|
+
configure_module_1.ConfigureModule.register(),
|
|
27
|
+
schedule_1.ScheduleModule.forRoot(),
|
|
28
|
+
fetch_module_1.FetchModule,
|
|
29
|
+
meta_module_1.MetaModule,
|
|
30
|
+
],
|
|
31
|
+
controllers: [],
|
|
32
|
+
})
|
|
33
|
+
], AppModule);
|
|
34
|
+
exports.AppModule = AppModule;
|
|
35
|
+
//# sourceMappingURL=app.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app.module.js","sourceRoot":"","sources":["../src/app.module.ts"],"names":[],"mappings":";AAAA,gEAAgE;AAChE,sCAAsC;;;;;;;;;AAEtC,2CAAwC;AACxC,yDAA2D;AAC3D,+CAAkD;AAClD,gDAA4C;AAC5C,mEAA+D;AAC/D,yDAAqD;AACrD,oDAAgD;AAazC,IAAM,SAAS,GAAf,MAAM,SAAS;CAAG,CAAA;AAAZ,SAAS;IAXrB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,oBAAQ,CAAC,OAAO,EAAE;YAClB,kCAAkB,CAAC,OAAO,EAAE;YAC5B,kCAAe,CAAC,QAAQ,EAAE;YAC1B,yBAAc,CAAC,OAAO,EAAE;YACxB,0BAAW;YACX,wBAAU;SACX;QACD,WAAW,EAAE,EAAE;KAChB,CAAC;GACW,SAAS,CAAG;AAAZ,8BAAS","sourcesContent":["// Copyright 2020-2022 OnFinality Limited authors & contributors\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Module } from '@nestjs/common';\nimport { EventEmitterModule } from '@nestjs/event-emitter';\nimport { ScheduleModule } from '@nestjs/schedule';\nimport { DbModule } from '@subql/node-core';\nimport { ConfigureModule } from './configure/configure.module';\nimport { FetchModule } from './indexer/fetch.module';\nimport { MetaModule } from './meta/meta.module';\n\n@Module({\n imports: [\n DbModule.forRoot(),\n EventEmitterModule.forRoot(),\n ConfigureModule.register(),\n ScheduleModule.forRoot(),\n FetchModule,\n MetaModule,\n ],\n controllers: [],\n})\nexport class AppModule {}\n"]}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { RegisteredTypes } from '@polkadot/types/types';
|
|
2
|
+
import { ReaderOptions, RunnerSpecs } from '@subql/common';
|
|
3
|
+
import { EthereumProjectNetworkConfig, SubqlEthereumDataSource, EthereumBlockFilter, FileType } from '@subql/common-ethereum';
|
|
4
|
+
import Cron from 'cron-converter';
|
|
5
|
+
import { GraphQLSchema } from 'graphql';
|
|
6
|
+
import { EthereumApi } from '../ethereum/api.ethereum';
|
|
7
|
+
export declare type SubqlProjectDs = SubqlEthereumDataSource & {
|
|
8
|
+
mapping: SubqlEthereumDataSource['mapping'] & {
|
|
9
|
+
entryScript: string;
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
export declare type SubqlProjectBlockFilter = EthereumBlockFilter & {
|
|
13
|
+
cronSchedule?: {
|
|
14
|
+
schedule: Cron.Seeker;
|
|
15
|
+
next: number;
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
export declare type SubqlProjectDsTemplate = Omit<SubqlProjectDs, 'startBlock'> & {
|
|
19
|
+
name: string;
|
|
20
|
+
};
|
|
21
|
+
export declare class SubqueryProject {
|
|
22
|
+
id: string;
|
|
23
|
+
root: string;
|
|
24
|
+
network: Partial<EthereumProjectNetworkConfig>;
|
|
25
|
+
dataSources: SubqlProjectDs[];
|
|
26
|
+
schema: GraphQLSchema;
|
|
27
|
+
templates: SubqlProjectDsTemplate[];
|
|
28
|
+
chainTypes?: RegisteredTypes;
|
|
29
|
+
runner?: RunnerSpecs;
|
|
30
|
+
static create(path: string, networkOverrides?: Partial<EthereumProjectNetworkConfig>, readerOptions?: ReaderOptions): Promise<SubqueryProject>;
|
|
31
|
+
}
|
|
32
|
+
export interface SubqueryProjectNetwork {
|
|
33
|
+
chainId: string;
|
|
34
|
+
endpoint?: string;
|
|
35
|
+
dictionary?: string;
|
|
36
|
+
chaintypes?: FileType;
|
|
37
|
+
}
|
|
38
|
+
export declare function generateTimestampReferenceForBlockFilters(dataSources: SubqlProjectDs[], api: EthereumApi): Promise<SubqlProjectDs[]>;
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright 2020-2022 OnFinality Limited authors & contributors
|
|
3
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
5
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
6
|
+
};
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.generateTimestampReferenceForBlockFilters = exports.SubqueryProject = void 0;
|
|
9
|
+
const common_1 = require("@subql/common");
|
|
10
|
+
const common_ethereum_1 = require("@subql/common-ethereum");
|
|
11
|
+
const utils_1 = require("@subql/utils");
|
|
12
|
+
const cron_converter_1 = __importDefault(require("cron-converter"));
|
|
13
|
+
const project_1 = require("../utils/project");
|
|
14
|
+
const NOT_SUPPORT = (name) => {
|
|
15
|
+
throw new Error(`Manifest specVersion ${name}() is not supported`);
|
|
16
|
+
};
|
|
17
|
+
class SubqueryProject {
|
|
18
|
+
static async create(path, networkOverrides, readerOptions) {
|
|
19
|
+
// We have to use reader here, because path can be remote or local
|
|
20
|
+
// and the `loadProjectManifest(projectPath)` only support local mode
|
|
21
|
+
const reader = await common_1.ReaderFactory.create(path, readerOptions);
|
|
22
|
+
const projectSchema = await reader.getProjectSchema();
|
|
23
|
+
if (projectSchema === undefined) {
|
|
24
|
+
throw new Error(`Get manifest from project path ${path} failed`);
|
|
25
|
+
}
|
|
26
|
+
const manifest = (0, common_ethereum_1.parseEthereumProjectManifest)(projectSchema);
|
|
27
|
+
if (manifest.isV1_0_0) {
|
|
28
|
+
return loadProjectFromManifest1_0_0(manifest.asV1_0_0, reader, path, networkOverrides);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
NOT_SUPPORT(manifest.specVersion);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
exports.SubqueryProject = SubqueryProject;
|
|
36
|
+
function processChainId(network) {
|
|
37
|
+
if (network.chainId && network.genesisHash) {
|
|
38
|
+
throw new Error('Please only provide one of chainId and genesisHash');
|
|
39
|
+
}
|
|
40
|
+
else if (network.genesisHash && !network.chainId) {
|
|
41
|
+
network.chainId = network.genesisHash;
|
|
42
|
+
}
|
|
43
|
+
delete network.genesisHash;
|
|
44
|
+
return network;
|
|
45
|
+
}
|
|
46
|
+
async function loadProjectFromManifestBase(projectManifest, reader, path, networkOverrides) {
|
|
47
|
+
const root = await (0, project_1.getProjectRoot)(reader);
|
|
48
|
+
const network = processChainId(Object.assign(Object.assign({}, projectManifest.network), networkOverrides));
|
|
49
|
+
if (!network.endpoint) {
|
|
50
|
+
throw new Error(`Network endpoint must be provided for network. chainId="${network.chainId}"`);
|
|
51
|
+
}
|
|
52
|
+
let schemaString;
|
|
53
|
+
try {
|
|
54
|
+
schemaString = await reader.getFile(projectManifest.schema.file);
|
|
55
|
+
}
|
|
56
|
+
catch (e) {
|
|
57
|
+
throw new Error(`unable to fetch the schema from ${projectManifest.schema.file}`);
|
|
58
|
+
}
|
|
59
|
+
const schema = (0, utils_1.buildSchemaFromString)(schemaString);
|
|
60
|
+
const chainTypes = projectManifest.network.chaintypes
|
|
61
|
+
? await (0, project_1.getChainTypes)(reader, root, projectManifest.network.chaintypes.file)
|
|
62
|
+
: undefined;
|
|
63
|
+
const dataSources = await (0, project_1.updateDataSourcesV0_2_0)(projectManifest.dataSources, reader, root);
|
|
64
|
+
const templates = await loadProjectTemplates(projectManifest, root, reader);
|
|
65
|
+
return {
|
|
66
|
+
id: reader.root ? reader.root : path,
|
|
67
|
+
root,
|
|
68
|
+
network,
|
|
69
|
+
dataSources,
|
|
70
|
+
schema,
|
|
71
|
+
chainTypes,
|
|
72
|
+
templates,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
const { name: packageName, version: packageVersion, } = require('../../package.json');
|
|
76
|
+
async function loadProjectFromManifest1_0_0(projectManifest, reader, path, networkOverrides) {
|
|
77
|
+
const project = await loadProjectFromManifestBase(projectManifest, reader, path, networkOverrides);
|
|
78
|
+
project.runner = projectManifest.runner;
|
|
79
|
+
if (packageName !== project.runner.node.name) {
|
|
80
|
+
throw new Error(`Runner requires ${project.runner.node.name}, current node ${packageName}`);
|
|
81
|
+
}
|
|
82
|
+
if (!(0, common_1.validateSemver)(packageVersion, project.runner.node.version)) {
|
|
83
|
+
throw new Error(`Runner require node version ${project.runner.node.version}, current node ${packageVersion}`);
|
|
84
|
+
}
|
|
85
|
+
return project;
|
|
86
|
+
}
|
|
87
|
+
async function loadProjectTemplates(projectManifest, root, reader) {
|
|
88
|
+
if (projectManifest.templates && projectManifest.templates.length !== 0) {
|
|
89
|
+
const dsTemplates = await (0, project_1.updateDataSourcesV0_2_0)(projectManifest.templates, reader, root);
|
|
90
|
+
return dsTemplates.map((ds, index) => (Object.assign(Object.assign({}, ds), { name: projectManifest.templates[index].name })));
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
// eslint-disable-next-line @typescript-eslint/require-await
|
|
94
|
+
async function generateTimestampReferenceForBlockFilters(dataSources, api) {
|
|
95
|
+
const cron = new cron_converter_1.default();
|
|
96
|
+
dataSources = await Promise.all(dataSources.map(async (ds) => {
|
|
97
|
+
var _a;
|
|
98
|
+
if ((0, common_ethereum_1.isRuntimeDs)(ds)) {
|
|
99
|
+
const startBlock = (_a = ds.startBlock) !== null && _a !== void 0 ? _a : 1;
|
|
100
|
+
let block;
|
|
101
|
+
let timestampReference;
|
|
102
|
+
ds.mapping.handlers = await Promise.all(ds.mapping.handlers.map(async (handler) => {
|
|
103
|
+
var _a;
|
|
104
|
+
if (handler.kind === common_ethereum_1.EthereumHandlerKind.Block) {
|
|
105
|
+
if ((_a = handler.filter) === null || _a === void 0 ? void 0 : _a.timestamp) {
|
|
106
|
+
if (!block) {
|
|
107
|
+
block = await api.getBlockByHeight(startBlock);
|
|
108
|
+
timestampReference = new Date(block.timestamp * 1000); // Add millis
|
|
109
|
+
}
|
|
110
|
+
try {
|
|
111
|
+
cron.fromString(handler.filter.timestamp);
|
|
112
|
+
}
|
|
113
|
+
catch (e) {
|
|
114
|
+
throw new Error(`Invalid Cron string: ${handler.filter.timestamp}`);
|
|
115
|
+
}
|
|
116
|
+
const schedule = cron.schedule(timestampReference);
|
|
117
|
+
handler.filter.cronSchedule = {
|
|
118
|
+
schedule: schedule,
|
|
119
|
+
get next() {
|
|
120
|
+
return Date.parse(this.schedule.next().format());
|
|
121
|
+
},
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return handler;
|
|
126
|
+
}));
|
|
127
|
+
}
|
|
128
|
+
return ds;
|
|
129
|
+
}));
|
|
130
|
+
return dataSources;
|
|
131
|
+
}
|
|
132
|
+
exports.generateTimestampReferenceForBlockFilters = generateTimestampReferenceForBlockFilters;
|
|
133
|
+
//# sourceMappingURL=SubqueryProject.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SubqueryProject.js","sourceRoot":"","sources":["../../src/configure/SubqueryProject.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2020-2022 OnFinality Limited authors & contributors\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Block } from '@ethersproject/abstract-provider';\nimport { RegisteredTypes } from '@polkadot/types/types';\nimport {\n ReaderFactory,\n ReaderOptions,\n Reader,\n RunnerSpecs,\n validateSemver,\n} from '@subql/common';\nimport {\n EthereumProjectNetworkConfig,\n parseEthereumProjectManifest,\n SubqlEthereumDataSource,\n EthereumBlockFilter,\n FileType,\n ProjectManifestV1_0_0Impl,\n isRuntimeDs,\n EthereumHandlerKind,\n} from '@subql/common-ethereum';\nimport { buildSchemaFromString } from '@subql/utils';\nimport Cron from 'cron-converter';\nimport { GraphQLSchema } from 'graphql';\nimport { EthereumApi } from '../ethereum/api.ethereum';\nimport {\n getChainTypes,\n getProjectRoot,\n updateDataSourcesV0_2_0,\n} from '../utils/project';\n// import { getBlockByHeight, getTimestamp } from '../utils/substrate';\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\nexport class SubqueryProject {\n id: string;\n root: string;\n network: Partial<EthereumProjectNetworkConfig>;\n dataSources: SubqlProjectDs[];\n schema: GraphQLSchema;\n templates: SubqlProjectDsTemplate[];\n chainTypes?: RegisteredTypes;\n runner?: RunnerSpecs;\n\n static async create(\n path: string,\n networkOverrides?: Partial<EthereumProjectNetworkConfig>,\n readerOptions?: ReaderOptions,\n ): Promise<SubqueryProject> {\n // We have to use reader here, because path can be remote or local\n // and the `loadProjectManifest(projectPath)` only support local mode\n const reader = await ReaderFactory.create(path, readerOptions);\n const projectSchema = await reader.getProjectSchema();\n if (projectSchema === undefined) {\n throw new Error(`Get manifest from project path ${path} failed`);\n }\n const manifest = parseEthereumProjectManifest(projectSchema);\n\n if (manifest.isV1_0_0) {\n return loadProjectFromManifest1_0_0(\n manifest.asV1_0_0,\n reader,\n path,\n networkOverrides,\n );\n } else {\n NOT_SUPPORT(manifest.specVersion);\n }\n }\n}\n\nexport interface SubqueryProjectNetwork {\n chainId: string;\n endpoint?: string;\n dictionary?: string;\n chaintypes?: FileType;\n}\n\nfunction processChainId(network: any): SubqueryProjectNetwork {\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): Promise<SubqueryProject> {\n const root = await getProjectRoot(reader);\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 chainTypes = projectManifest.network.chaintypes\n ? await getChainTypes(reader, root, projectManifest.network.chaintypes.file)\n : undefined;\n\n const dataSources = await updateDataSourcesV0_2_0(\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 chainTypes,\n templates,\n };\n}\n\nconst {\n name: packageName,\n version: packageVersion,\n} = 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): Promise<SubqueryProject> {\n const project = await loadProjectFromManifestBase(\n projectManifest,\n reader,\n path,\n networkOverrides,\n );\n project.runner = projectManifest.runner;\n if (packageName !== project.runner.node.name) {\n throw new Error(\n `Runner requires ${project.runner.node.name}, current node ${packageName}`,\n );\n }\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 !== 0) {\n const dsTemplates = await updateDataSourcesV0_2_0(\n projectManifest.templates,\n reader,\n root,\n );\n return dsTemplates.map((ds, index) => ({\n ...ds,\n name: projectManifest.templates[index].name,\n }));\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.getBlockByHeight(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"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { DynamicModule } from '@nestjs/common';
|
|
2
|
+
import { NodeConfig } from '@subql/node-core';
|
|
3
|
+
export declare function validDbSchemaName(name: string): boolean;
|
|
4
|
+
export declare class ConfigureModule {
|
|
5
|
+
static registerWithConfig(config: NodeConfig): DynamicModule;
|
|
6
|
+
static register(): DynamicModule;
|
|
7
|
+
}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright 2020-2022 OnFinality Limited authors & contributors
|
|
3
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
5
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
6
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
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
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
9
|
+
};
|
|
10
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
11
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
12
|
+
};
|
|
13
|
+
var ConfigureModule_1;
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.ConfigureModule = exports.validDbSchemaName = void 0;
|
|
16
|
+
const assert_1 = __importDefault(require("assert"));
|
|
17
|
+
const path_1 = __importDefault(require("path"));
|
|
18
|
+
const common_1 = require("@nestjs/common");
|
|
19
|
+
const common_2 = require("@subql/common");
|
|
20
|
+
const node_core_1 = require("@subql/node-core");
|
|
21
|
+
const lodash_1 = require("lodash");
|
|
22
|
+
const yargs_1 = require("../yargs");
|
|
23
|
+
const SubqueryProject_1 = require("./SubqueryProject");
|
|
24
|
+
const logger = (0, node_core_1.getLogger)('configure');
|
|
25
|
+
const YargsNameMapping = {
|
|
26
|
+
local: 'localMode',
|
|
27
|
+
};
|
|
28
|
+
function yargsToIConfig(yargs) {
|
|
29
|
+
return Object.entries(yargs).reduce((acc, [key, value]) => {
|
|
30
|
+
var _a;
|
|
31
|
+
if (['_', '$0'].includes(key))
|
|
32
|
+
return acc;
|
|
33
|
+
if (key === 'network-registry') {
|
|
34
|
+
try {
|
|
35
|
+
value = JSON.parse(value);
|
|
36
|
+
}
|
|
37
|
+
catch (e) {
|
|
38
|
+
throw new Error('Argument `network-registry` is not valid JSON');
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
acc[(_a = YargsNameMapping[key]) !== null && _a !== void 0 ? _a : (0, lodash_1.camelCase)(key)] = value;
|
|
42
|
+
return acc;
|
|
43
|
+
}, {});
|
|
44
|
+
}
|
|
45
|
+
function defaultSubqueryName(config) {
|
|
46
|
+
var _a;
|
|
47
|
+
const ipfsMatch = config.subquery.match(common_2.IPFS_REGEX);
|
|
48
|
+
return Object.assign(Object.assign({}, config), { subqueryName: (_a = config.subqueryName) !== null && _a !== void 0 ? _a : (ipfsMatch
|
|
49
|
+
? config.subquery.replace(common_2.IPFS_REGEX, '')
|
|
50
|
+
: (0, lodash_1.last)((0, common_2.getProjectRootAndManifest)(config.subquery).root.split(path_1.default.sep))) });
|
|
51
|
+
}
|
|
52
|
+
// Check if a subquery name is a valid schema name
|
|
53
|
+
function validDbSchemaName(name) {
|
|
54
|
+
if (name.length === 0) {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
name = name.toLowerCase();
|
|
59
|
+
const regexp = new RegExp('^[a-zA-Z_][a-zA-Z0-9_\\-\\/]{0,62}$');
|
|
60
|
+
const flag0 = !name.startsWith('pg_'); // Reserved identifier
|
|
61
|
+
const flag1 = regexp.test(name); // <= Valid characters, less than 63 bytes
|
|
62
|
+
if (!flag0) {
|
|
63
|
+
logger.error(`Invalid schema name '${name}', schema name must not be prefixed with 'pg_'`);
|
|
64
|
+
}
|
|
65
|
+
if (!flag1) {
|
|
66
|
+
logger.error(`Invalid schema name '${name}', schema name must start with a letter or underscore,
|
|
67
|
+
be less than 63 bytes and must contain only valid alphanumeric characters (can include characters '_-/')`);
|
|
68
|
+
}
|
|
69
|
+
return flag0 && flag1;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
exports.validDbSchemaName = validDbSchemaName;
|
|
73
|
+
function warnDeprecations() {
|
|
74
|
+
const { argv } = yargs_1.yargsOptions;
|
|
75
|
+
if (argv['subquery-name']) {
|
|
76
|
+
logger.warn('Note that argument --subquery-name has been deprecated in favour of --db-schema');
|
|
77
|
+
}
|
|
78
|
+
if (argv.local) {
|
|
79
|
+
logger.warn('Note that argument --local has been deprecated');
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
let ConfigureModule = ConfigureModule_1 = class ConfigureModule {
|
|
83
|
+
static registerWithConfig(config) {
|
|
84
|
+
if (!validDbSchemaName(config.dbSchema)) {
|
|
85
|
+
process.exit(1);
|
|
86
|
+
}
|
|
87
|
+
if (config.debug) {
|
|
88
|
+
(0, node_core_1.setLevel)('debug');
|
|
89
|
+
}
|
|
90
|
+
const project = async () => {
|
|
91
|
+
const p = await SubqueryProject_1.SubqueryProject.create(config.subquery, (0, lodash_1.omitBy)({
|
|
92
|
+
endpoint: config.networkEndpoint,
|
|
93
|
+
dictionary: config.networkDictionary,
|
|
94
|
+
}, lodash_1.isNil), {
|
|
95
|
+
ipfs: config.ipfs,
|
|
96
|
+
}).catch((err) => {
|
|
97
|
+
logger.error(err, 'Create Subquery project from given path failed!');
|
|
98
|
+
process.exit(1);
|
|
99
|
+
});
|
|
100
|
+
return p;
|
|
101
|
+
};
|
|
102
|
+
return {
|
|
103
|
+
module: ConfigureModule_1,
|
|
104
|
+
providers: [
|
|
105
|
+
{
|
|
106
|
+
provide: node_core_1.NodeConfig,
|
|
107
|
+
useValue: config,
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
provide: SubqueryProject_1.SubqueryProject,
|
|
111
|
+
useFactory: project,
|
|
112
|
+
},
|
|
113
|
+
],
|
|
114
|
+
exports: [node_core_1.NodeConfig, SubqueryProject_1.SubqueryProject],
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
static register() {
|
|
118
|
+
const { argv } = yargs_1.yargsOptions;
|
|
119
|
+
let config;
|
|
120
|
+
if (argv.config) {
|
|
121
|
+
config = node_core_1.NodeConfig.fromFile(argv.config, yargsToIConfig(argv));
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
if (!argv.subquery) {
|
|
125
|
+
logger.error('Subquery path is missing neither in cli options nor in config file');
|
|
126
|
+
yargs_1.yargsOptions.showHelp();
|
|
127
|
+
process.exit(1);
|
|
128
|
+
}
|
|
129
|
+
warnDeprecations();
|
|
130
|
+
(0, assert_1.default)(argv.subquery, 'subquery path is missing');
|
|
131
|
+
config = new node_core_1.NodeConfig(defaultSubqueryName(yargsToIConfig(argv)));
|
|
132
|
+
}
|
|
133
|
+
if (!validDbSchemaName(config.dbSchema)) {
|
|
134
|
+
process.exit(1);
|
|
135
|
+
}
|
|
136
|
+
if (config.debug) {
|
|
137
|
+
(0, node_core_1.setLevel)('debug');
|
|
138
|
+
}
|
|
139
|
+
const project = async () => {
|
|
140
|
+
const p = await SubqueryProject_1.SubqueryProject.create(argv.subquery, (0, lodash_1.omitBy)({
|
|
141
|
+
endpoint: config.networkEndpoint,
|
|
142
|
+
dictionary: config.networkDictionary,
|
|
143
|
+
}, lodash_1.isNil), {
|
|
144
|
+
ipfs: config.ipfs,
|
|
145
|
+
}).catch((err) => {
|
|
146
|
+
logger.error(err, 'Create Subquery project from given path failed!');
|
|
147
|
+
process.exit(1);
|
|
148
|
+
});
|
|
149
|
+
return p;
|
|
150
|
+
};
|
|
151
|
+
return {
|
|
152
|
+
module: ConfigureModule_1,
|
|
153
|
+
providers: [
|
|
154
|
+
{
|
|
155
|
+
provide: node_core_1.NodeConfig,
|
|
156
|
+
useValue: config,
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
provide: SubqueryProject_1.SubqueryProject,
|
|
160
|
+
useFactory: project,
|
|
161
|
+
},
|
|
162
|
+
],
|
|
163
|
+
exports: [node_core_1.NodeConfig, SubqueryProject_1.SubqueryProject],
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
ConfigureModule = ConfigureModule_1 = __decorate([
|
|
168
|
+
(0, common_1.Global)(),
|
|
169
|
+
(0, common_1.Module)({})
|
|
170
|
+
], ConfigureModule);
|
|
171
|
+
exports.ConfigureModule = ConfigureModule;
|
|
172
|
+
//# sourceMappingURL=configure.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configure.module.js","sourceRoot":"","sources":["../../src/configure/configure.module.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2020-2022 OnFinality Limited authors & contributors\n// SPDX-License-Identifier: Apache-2.0\n\nimport assert from 'assert';\nimport path from 'path';\nimport { DynamicModule, Global, Module } from '@nestjs/common';\nimport { getProjectRootAndManifest, IPFS_REGEX } from '@subql/common';\nimport { EthereumProjectNetworkConfig } from '@subql/common-ethereum';\nimport {\n IConfig,\n MinConfig,\n NodeConfig,\n getLogger,\n setLevel,\n} from '@subql/node-core';\nimport { camelCase, last, omitBy, isNil } from 'lodash';\nimport { yargsOptions } from '../yargs';\nimport { SubqueryProject } from './SubqueryProject';\n\nconst logger = getLogger('configure');\n\nconst YargsNameMapping: Record<string, string> = {\n local: 'localMode',\n};\n\ntype Args = typeof yargsOptions.argv['argv'];\n\nfunction yargsToIConfig(yargs: Args): Partial<IConfig> {\n return Object.entries(yargs).reduce((acc, [key, value]) => {\n if (['_', '$0'].includes(key)) return acc;\n\n if (key === 'network-registry') {\n try {\n value = JSON.parse(value as string);\n } catch (e) {\n throw new Error('Argument `network-registry` is not valid JSON');\n }\n }\n acc[YargsNameMapping[key] ?? camelCase(key)] = value;\n return acc;\n }, {} as any);\n}\n\nfunction defaultSubqueryName(config: Partial<IConfig>): MinConfig {\n const ipfsMatch = config.subquery.match(IPFS_REGEX);\n return {\n ...config,\n subqueryName:\n config.subqueryName ??\n (ipfsMatch\n ? config.subquery.replace(IPFS_REGEX, '')\n : last(\n getProjectRootAndManifest(config.subquery).root.split(path.sep),\n )),\n } as MinConfig;\n}\n\n// Check if a subquery name is a valid schema name\nexport function validDbSchemaName(name: string): boolean {\n if (name.length === 0) {\n return false;\n } else {\n name = name.toLowerCase();\n const regexp = new RegExp('^[a-zA-Z_][a-zA-Z0-9_\\\\-\\\\/]{0,62}$');\n const flag0 = !name.startsWith('pg_'); // Reserved identifier\n const flag1 = regexp.test(name); // <= Valid characters, less than 63 bytes\n if (!flag0) {\n logger.error(\n `Invalid schema name '${name}', schema name must not be prefixed with 'pg_'`,\n );\n }\n if (!flag1) {\n logger.error(\n `Invalid schema name '${name}', schema name must start with a letter or underscore, \n be less than 63 bytes and must contain only valid alphanumeric characters (can include characters '_-/')`,\n );\n }\n return flag0 && flag1;\n }\n}\n\nfunction warnDeprecations() {\n const { argv } = yargsOptions;\n if (argv['subquery-name']) {\n logger.warn(\n 'Note that argument --subquery-name has been deprecated in favour of --db-schema',\n );\n }\n if (argv.local) {\n logger.warn('Note that argument --local has been deprecated');\n }\n}\n\n@Global()\n@Module({})\nexport class ConfigureModule {\n static registerWithConfig(config: NodeConfig): DynamicModule {\n if (!validDbSchemaName(config.dbSchema)) {\n process.exit(1);\n }\n\n if (config.debug) {\n setLevel('debug');\n }\n\n const project = async () => {\n const p = await SubqueryProject.create(\n config.subquery,\n omitBy<EthereumProjectNetworkConfig>(\n {\n endpoint: config.networkEndpoint,\n dictionary: config.networkDictionary,\n },\n isNil,\n ),\n {\n ipfs: config.ipfs,\n },\n ).catch((err) => {\n logger.error(err, 'Create Subquery project from given path failed!');\n process.exit(1);\n });\n return p;\n };\n\n return {\n module: ConfigureModule,\n providers: [\n {\n provide: NodeConfig,\n useValue: config,\n },\n {\n provide: SubqueryProject,\n useFactory: project,\n },\n ],\n exports: [NodeConfig, SubqueryProject],\n };\n }\n static register(): DynamicModule {\n const { argv } = yargsOptions;\n let config: NodeConfig;\n if (argv.config) {\n config = NodeConfig.fromFile(argv.config, yargsToIConfig(argv));\n } else {\n if (!argv.subquery) {\n logger.error(\n 'Subquery path is missing neither in cli options nor in config file',\n );\n yargsOptions.showHelp();\n process.exit(1);\n }\n\n warnDeprecations();\n assert(argv.subquery, 'subquery path is missing');\n config = new NodeConfig(defaultSubqueryName(yargsToIConfig(argv)));\n }\n\n if (!validDbSchemaName(config.dbSchema)) {\n process.exit(1);\n }\n\n if (config.debug) {\n setLevel('debug');\n }\n\n const project = async () => {\n const p = await SubqueryProject.create(\n argv.subquery,\n omitBy<Partial<EthereumProjectNetworkConfig>>(\n {\n endpoint: config.networkEndpoint,\n dictionary: config.networkDictionary,\n },\n isNil,\n ),\n {\n ipfs: config.ipfs,\n },\n ).catch((err) => {\n logger.error(err, 'Create Subquery project from given path failed!');\n process.exit(1);\n });\n return p;\n };\n\n return {\n module: ConfigureModule,\n providers: [\n {\n provide: NodeConfig,\n useValue: config,\n },\n {\n provide: SubqueryProject,\n useFactory: project,\n },\n ],\n exports: [NodeConfig, SubqueryProject],\n };\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright 2020-2022 OnFinality Limited authors & contributors
|
|
3
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
const configure_module_1 = require("./configure.module");
|
|
6
|
+
describe('Configure', () => {
|
|
7
|
+
it('validDbSchemaName - works', () => {
|
|
8
|
+
expect((0, configure_module_1.validDbSchemaName)('subquery_1')).toBeTruthy();
|
|
9
|
+
});
|
|
10
|
+
it('validDbSchemaName - works not alphanumeric', () => {
|
|
11
|
+
expect((0, configure_module_1.validDbSchemaName)('subquery_-/1')).toBeTruthy();
|
|
12
|
+
});
|
|
13
|
+
it('validDbSchemaName - long', () => {
|
|
14
|
+
expect((0, configure_module_1.validDbSchemaName)('a'.repeat(64))).toBeFalsy();
|
|
15
|
+
});
|
|
16
|
+
it('validDbSchemaName - invalid prefix', () => {
|
|
17
|
+
expect((0, configure_module_1.validDbSchemaName)('pg_whatever')).toBeFalsy();
|
|
18
|
+
});
|
|
19
|
+
it('validDbSchemaName - invalid tokens', () => {
|
|
20
|
+
expect((0, configure_module_1.validDbSchemaName)('he$$*')).toBeFalsy();
|
|
21
|
+
});
|
|
22
|
+
it('validDbSchemaName - empty', () => {
|
|
23
|
+
expect((0, configure_module_1.validDbSchemaName)('')).toBeFalsy();
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
//# sourceMappingURL=configure.module.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configure.module.spec.js","sourceRoot":"","sources":["../../src/configure/configure.module.spec.ts"],"names":[],"mappings":";AAAA,gEAAgE;AAChE,sCAAsC;;AAEtC,yDAAuD;AAEvD,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnC,MAAM,CAAC,IAAA,oCAAiB,EAAC,YAAY,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;IACvD,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,CAAC,IAAA,oCAAiB,EAAC,cAAc,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;IACzD,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,CAAC,IAAA,oCAAiB,EAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;IACxD,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,CAAC,IAAA,oCAAiB,EAAC,aAAa,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;IACvD,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,CAAC,IAAA,oCAAiB,EAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;IACjD,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnC,MAAM,CAAC,IAAA,oCAAiB,EAAC,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["// Copyright 2020-2022 OnFinality Limited authors & contributors\n// SPDX-License-Identifier: Apache-2.0\n\nimport { validDbSchemaName } from './configure.module';\n\ndescribe('Configure', () => {\n it('validDbSchemaName - works', () => {\n expect(validDbSchemaName('subquery_1')).toBeTruthy();\n });\n it('validDbSchemaName - works not alphanumeric', () => {\n expect(validDbSchemaName('subquery_-/1')).toBeTruthy();\n });\n it('validDbSchemaName - long', () => {\n expect(validDbSchemaName('a'.repeat(64))).toBeFalsy();\n });\n it('validDbSchemaName - invalid prefix', () => {\n expect(validDbSchemaName('pg_whatever')).toBeFalsy();\n });\n it('validDbSchemaName - invalid tokens', () => {\n expect(validDbSchemaName('he$$*')).toBeFalsy();\n });\n it('validDbSchemaName - empty', () => {\n expect(validDbSchemaName('')).toBeFalsy();\n });\n});\n"]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Block } from '@ethersproject/abstract-provider';
|
|
2
|
+
import { RuntimeDataSourceV0_2_0 } from '@subql/common-ethereum';
|
|
3
|
+
import { ApiWrapper, BlockWrapper, EthereumBlockWrapper, EthereumTransaction, EthereumResult, EthereumLog } from '@subql/types-ethereum';
|
|
4
|
+
export declare class EthereumApi implements ApiWrapper<EthereumBlockWrapper> {
|
|
5
|
+
private endpoint;
|
|
6
|
+
private client;
|
|
7
|
+
private genesisBlock;
|
|
8
|
+
private contractInterfaces;
|
|
9
|
+
private chainId;
|
|
10
|
+
constructor(endpoint: string);
|
|
11
|
+
init(): Promise<void>;
|
|
12
|
+
getLastHeight(): Promise<number>;
|
|
13
|
+
getRuntimeChain(): string;
|
|
14
|
+
getChainId(): number;
|
|
15
|
+
getGenesisHash(): string;
|
|
16
|
+
getSpecName(): string;
|
|
17
|
+
getFinalizedBlockHeight(): Promise<number>;
|
|
18
|
+
getBlockByHeight(height: number): Promise<Block>;
|
|
19
|
+
fetchBlocks(bufferBlocks: number[]): Promise<EthereumBlockWrapper[]>;
|
|
20
|
+
freezeApi(processor: any, blockContent: BlockWrapper): void;
|
|
21
|
+
private buildInterface;
|
|
22
|
+
parseLog<T extends EthereumResult = EthereumResult>(log: EthereumLog, ds: RuntimeDataSourceV0_2_0): Promise<EthereumLog<T> | EthereumLog>;
|
|
23
|
+
parseTransaction<T extends EthereumResult = EthereumResult>(transaction: EthereumTransaction, ds: RuntimeDataSourceV0_2_0): Promise<EthereumTransaction<T> | EthereumTransaction>;
|
|
24
|
+
}
|