@subql/node-ethereum 2.0.2-0 → 2.0.2-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/dist/.tsbuildinfo +1 -1
- package/dist/configure/SubqueryProject.d.ts +2 -4
- package/dist/configure/SubqueryProject.js +17 -17
- package/dist/configure/SubqueryProject.js.map +1 -1
- package/dist/configure/configure.module.d.ts +1 -4
- package/dist/configure/configure.module.js +24 -71
- package/dist/configure/configure.module.js.map +1 -1
- package/dist/ethereum/api.ethereum.d.ts +9 -6
- package/dist/ethereum/api.ethereum.js +15 -7
- package/dist/ethereum/api.ethereum.js.map +1 -1
- package/dist/indexer/blockDispatcher/worker-block-dispatcher.service.js +1 -0
- package/dist/indexer/blockDispatcher/worker-block-dispatcher.service.js.map +1 -1
- package/dist/indexer/dictionary.service.js +1 -1
- package/dist/indexer/dictionary.service.js.map +1 -1
- package/dist/indexer/ds-processor.service.d.ts +4 -21
- package/dist/indexer/ds-processor.service.js +6 -97
- package/dist/indexer/ds-processor.service.js.map +1 -1
- package/dist/indexer/dynamic-ds.service.js +1 -1
- package/dist/indexer/dynamic-ds.service.js.map +1 -1
- package/dist/indexer/fetch.module.js +8 -1
- package/dist/indexer/fetch.module.js.map +1 -1
- package/dist/indexer/fetch.service.d.ts +18 -43
- package/dist/indexer/fetch.service.js +28 -286
- package/dist/indexer/fetch.service.js.map +1 -1
- package/dist/indexer/indexer.manager.d.ts +33 -18
- package/dist/indexer/indexer.manager.js +29 -164
- package/dist/indexer/indexer.manager.js.map +1 -1
- package/dist/indexer/indexer.module.js +0 -1
- package/dist/indexer/indexer.module.js.map +1 -1
- package/dist/indexer/project.service.d.ts +5 -35
- package/dist/indexer/project.service.js +6 -203
- package/dist/indexer/project.service.js.map +1 -1
- package/dist/indexer/sandbox.service.d.ts +6 -5
- package/dist/indexer/sandbox.service.js +14 -18
- package/dist/indexer/sandbox.service.js.map +1 -1
- package/dist/indexer/unfinalizedBlocks.service.d.ts +10 -33
- package/dist/indexer/unfinalizedBlocks.service.js +23 -166
- package/dist/indexer/unfinalizedBlocks.service.js.map +1 -1
- package/dist/indexer/worker/worker.d.ts +2 -1
- package/dist/indexer/worker/worker.js.map +1 -1
- package/dist/indexer/worker/worker.service.d.ts +2 -8
- package/dist/indexer/worker/worker.service.js +1 -3
- package/dist/indexer/worker/worker.service.js.map +1 -1
- package/dist/indexer/worker/worker.unfinalizedBlocks.service.d.ts +8 -5
- package/dist/indexer/worker/worker.unfinalizedBlocks.service.js +10 -0
- package/dist/indexer/worker/worker.unfinalizedBlocks.service.js.map +1 -1
- package/dist/main.js +4 -1
- package/dist/main.js.map +1 -1
- package/dist/meta/meta.controller.d.ts +4 -6
- package/dist/meta/meta.module.js +1 -52
- package/dist/meta/meta.module.js.map +1 -1
- package/dist/meta/meta.service.d.ts +7 -40
- package/dist/meta/meta.service.js +9 -83
- package/dist/meta/meta.service.js.map +1 -1
- package/dist/subcommands/forceClean.init.js +1 -2
- package/dist/subcommands/forceClean.init.js.map +1 -1
- package/dist/subcommands/forceClean.module.js +2 -2
- package/dist/subcommands/forceClean.module.js.map +1 -1
- package/dist/subcommands/mmrMigrate.init.d.ts +2 -0
- package/dist/subcommands/mmrMigrate.init.js +28 -0
- package/dist/subcommands/mmrMigrate.init.js.map +1 -0
- package/dist/subcommands/mmrMigrate.module.d.ts +4 -0
- package/dist/subcommands/mmrMigrate.module.js +48 -0
- package/dist/subcommands/mmrMigrate.module.js.map +1 -0
- package/dist/subcommands/mmrRegenerate.init.d.ts +1 -0
- package/dist/subcommands/mmrRegenerate.init.js +27 -0
- package/dist/subcommands/mmrRegenerate.init.js.map +1 -0
- package/dist/subcommands/mmrRegenerate.module.d.ts +4 -0
- package/dist/subcommands/mmrRegenerate.module.js +46 -0
- package/dist/subcommands/mmrRegenerate.module.js.map +1 -0
- package/dist/subcommands/reindex.module.js +3 -2
- package/dist/subcommands/reindex.module.js.map +1 -1
- package/dist/subcommands/reindex.service.d.ts +1 -2
- package/dist/subcommands/reindex.service.js +5 -10
- package/dist/subcommands/reindex.service.js.map +1 -1
- package/dist/subcommands/testing.init.js.map +1 -1
- package/dist/subcommands/testing.module.js +1 -0
- package/dist/subcommands/testing.module.js.map +1 -1
- package/dist/subcommands/testing.service.d.ts +1 -1
- package/dist/subcommands/testing.service.js +0 -1
- package/dist/subcommands/testing.service.js.map +1 -1
- package/dist/utils/project.d.ts +4 -11
- package/dist/utils/project.js +9 -138
- package/dist/utils/project.js.map +1 -1
- package/dist/yargs.d.ts +90 -2
- package/dist/yargs.js +113 -0
- package/dist/yargs.js.map +1 -1
- package/package.json +10 -19
- package/dist/configure/configure.module.spec.d.ts +0 -1
- package/dist/configure/configure.module.spec.js +0 -26
- package/dist/configure/configure.module.spec.js.map +0 -1
- package/dist/indexer/unfinalizedBlocks.spec.d.ts +0 -1
- package/dist/indexer/unfinalizedBlocks.spec.js +0 -195
- package/dist/indexer/unfinalizedBlocks.spec.js.map +0 -1
- package/dist/subcommands/forceClean.service.d.ts +0 -10
- package/dist/subcommands/forceClean.service.js +0 -89
- package/dist/subcommands/forceClean.service.js.map +0 -1
- package/dist/utils/reindex.d.ts +0 -6
- package/dist/utils/reindex.js +0 -48
- package/dist/utils/reindex.js.map +0 -1
|
@@ -0,0 +1,46 @@
|
|
|
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.MmrRegenerateModule = exports.MmrRegenerateFeatureModule = 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
|
+
let MmrRegenerateFeatureModule = class MmrRegenerateFeatureModule {
|
|
18
|
+
};
|
|
19
|
+
MmrRegenerateFeatureModule = __decorate([
|
|
20
|
+
(0, common_1.Module)({
|
|
21
|
+
providers: [
|
|
22
|
+
node_core_1.StoreCacheService,
|
|
23
|
+
node_core_1.StoreService,
|
|
24
|
+
node_core_1.MmrService,
|
|
25
|
+
node_core_1.MmrRegenerateService,
|
|
26
|
+
schedule_1.SchedulerRegistry,
|
|
27
|
+
],
|
|
28
|
+
controllers: [],
|
|
29
|
+
})
|
|
30
|
+
], MmrRegenerateFeatureModule);
|
|
31
|
+
exports.MmrRegenerateFeatureModule = MmrRegenerateFeatureModule;
|
|
32
|
+
let MmrRegenerateModule = class MmrRegenerateModule {
|
|
33
|
+
};
|
|
34
|
+
MmrRegenerateModule = __decorate([
|
|
35
|
+
(0, common_1.Module)({
|
|
36
|
+
imports: [
|
|
37
|
+
node_core_1.DbModule.forRoot(),
|
|
38
|
+
configure_module_1.ConfigureModule.register(),
|
|
39
|
+
MmrRegenerateFeatureModule,
|
|
40
|
+
event_emitter_1.EventEmitterModule.forRoot(),
|
|
41
|
+
],
|
|
42
|
+
controllers: [],
|
|
43
|
+
})
|
|
44
|
+
], MmrRegenerateModule);
|
|
45
|
+
exports.MmrRegenerateModule = MmrRegenerateModule;
|
|
46
|
+
//# sourceMappingURL=mmrRegenerate.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mmrRegenerate.module.js","sourceRoot":"","sources":["../../src/subcommands/mmrRegenerate.module.ts"],"names":[],"mappings":";AAAA,gEAAgE;AAChE,sCAAsC;;;;;;;;;AAEtC,2CAAwC;AACxC,yDAA2D;AAC3D,+CAAqD;AACrD,gDAM0B;AAC1B,oEAAgE;AAYzD,IAAM,0BAA0B,GAAhC,MAAM,0BAA0B;CAAG,CAAA;AAA7B,0BAA0B;IAVtC,IAAA,eAAM,EAAC;QACN,SAAS,EAAE;YACT,6BAAiB;YACjB,wBAAY;YACZ,sBAAU;YACV,gCAAoB;YACpB,4BAAiB;SAClB;QACD,WAAW,EAAE,EAAE;KAChB,CAAC;GACW,0BAA0B,CAAG;AAA7B,gEAA0B;AAWhC,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;CAAG,CAAA;AAAtB,mBAAmB;IAT/B,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,oBAAQ,CAAC,OAAO,EAAE;YAClB,kCAAe,CAAC,QAAQ,EAAE;YAC1B,0BAA0B;YAC1B,kCAAkB,CAAC,OAAO,EAAE;SAC7B;QACD,WAAW,EAAE,EAAE;KAChB,CAAC;GACW,mBAAmB,CAAG;AAAtB,kDAAmB","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 { SchedulerRegistry } from '@nestjs/schedule';\nimport {\n DbModule,\n MmrService,\n StoreCacheService,\n StoreService,\n MmrRegenerateService,\n} from '@subql/node-core';\nimport { ConfigureModule } from '../configure/configure.module';\n\n@Module({\n providers: [\n StoreCacheService,\n StoreService,\n MmrService,\n MmrRegenerateService,\n SchedulerRegistry,\n ],\n controllers: [],\n})\nexport class MmrRegenerateFeatureModule {}\n\n@Module({\n imports: [\n DbModule.forRoot(),\n ConfigureModule.register(),\n MmrRegenerateFeatureModule,\n EventEmitterModule.forRoot(),\n ],\n controllers: [],\n})\nexport class MmrRegenerateModule {}\n"]}
|
|
@@ -11,12 +11,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
11
11
|
exports.ReindexModule = exports.ReindexFeatureModule = void 0;
|
|
12
12
|
const common_1 = require("@nestjs/common");
|
|
13
13
|
const event_emitter_1 = require("@nestjs/event-emitter");
|
|
14
|
+
const schedule_1 = require("@nestjs/schedule");
|
|
14
15
|
const node_core_1 = require("@subql/node-core");
|
|
15
16
|
const configure_module_1 = require("../configure/configure.module");
|
|
16
17
|
const ds_processor_service_1 = require("../indexer/ds-processor.service");
|
|
17
18
|
const dynamic_ds_service_1 = require("../indexer/dynamic-ds.service");
|
|
18
19
|
const unfinalizedBlocks_service_1 = require("../indexer/unfinalizedBlocks.service");
|
|
19
|
-
const forceClean_service_1 = require("./forceClean.service");
|
|
20
20
|
const reindex_service_1 = require("./reindex.service");
|
|
21
21
|
let ReindexFeatureModule = class ReindexFeatureModule {
|
|
22
22
|
};
|
|
@@ -27,7 +27,7 @@ ReindexFeatureModule = __decorate([
|
|
|
27
27
|
node_core_1.StoreService,
|
|
28
28
|
reindex_service_1.ReindexService,
|
|
29
29
|
node_core_1.MmrService,
|
|
30
|
-
|
|
30
|
+
node_core_1.ForceCleanService,
|
|
31
31
|
unfinalizedBlocks_service_1.UnfinalizedBlocksService,
|
|
32
32
|
dynamic_ds_service_1.DynamicDsService,
|
|
33
33
|
ds_processor_service_1.DsProcessorService,
|
|
@@ -36,6 +36,7 @@ ReindexFeatureModule = __decorate([
|
|
|
36
36
|
provide: node_core_1.ApiService,
|
|
37
37
|
useFactory: () => undefined,
|
|
38
38
|
},
|
|
39
|
+
schedule_1.SchedulerRegistry,
|
|
39
40
|
],
|
|
40
41
|
controllers: [],
|
|
41
42
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reindex.module.js","sourceRoot":"","sources":["../../src/subcommands/reindex.module.ts"],"names":[],"mappings":";AAAA,gEAAgE;AAChE,sCAAsC;;;;;;;;;AAEtC,2CAAwC;AACxC,yDAA2D;AAC3D,
|
|
1
|
+
{"version":3,"file":"reindex.module.js","sourceRoot":"","sources":["../../src/subcommands/reindex.module.ts"],"names":[],"mappings":";AAAA,gEAAgE;AAChE,sCAAsC;;;;;;;;;AAEtC,2CAAwC;AACxC,yDAA2D;AAC3D,+CAAqD;AACrD,gDAO0B;AAC1B,oEAAgE;AAChE,0EAAqE;AACrE,sEAAiE;AACjE,oFAAgF;AAChF,uDAAmD;AAqB5C,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;CAAG,CAAA;AAAvB,oBAAoB;IAnBhC,IAAA,eAAM,EAAC;QACN,SAAS,EAAE;YACT,6BAAiB;YACjB,wBAAY;YACZ,gCAAc;YACd,sBAAU;YACV,6BAAiB;YACjB,oDAAwB;YACxB,qCAAgB;YAChB,yCAAkB;YAClB;gBACE,8EAA8E;gBAC9E,OAAO,EAAE,sBAAU;gBACnB,UAAU,EAAE,GAAG,EAAE,CAAC,SAAS;aAC5B;YACD,4BAAiB;SAClB;QACD,WAAW,EAAE,EAAE;KAChB,CAAC;GACW,oBAAoB,CAAG;AAAvB,oDAAoB;AAW1B,IAAM,aAAa,GAAnB,MAAM,aAAa;CAAG,CAAA;AAAhB,aAAa;IATzB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,oBAAQ,CAAC,OAAO,EAAE;YAClB,kCAAe,CAAC,QAAQ,EAAE;YAC1B,oBAAoB;YACpB,kCAAkB,CAAC,OAAO,EAAE;SAC7B;QACD,WAAW,EAAE,EAAE;KAChB,CAAC;GACW,aAAa,CAAG;AAAhB,sCAAa","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 { SchedulerRegistry } from '@nestjs/schedule';\nimport {\n ApiService,\n DbModule,\n ForceCleanService,\n MmrService,\n StoreCacheService,\n StoreService,\n} from '@subql/node-core';\nimport { ConfigureModule } from '../configure/configure.module';\nimport { DsProcessorService } from '../indexer/ds-processor.service';\nimport { DynamicDsService } from '../indexer/dynamic-ds.service';\nimport { UnfinalizedBlocksService } from '../indexer/unfinalizedBlocks.service';\nimport { ReindexService } from './reindex.service';\n\n@Module({\n providers: [\n StoreCacheService,\n StoreService,\n ReindexService,\n MmrService,\n ForceCleanService,\n UnfinalizedBlocksService,\n DynamicDsService,\n DsProcessorService,\n {\n // Used to work with DI for unfinalizedBlocksService but not used with reindex\n provide: ApiService,\n useFactory: () => undefined,\n },\n SchedulerRegistry,\n ],\n controllers: [],\n})\nexport class ReindexFeatureModule {}\n\n@Module({\n imports: [\n DbModule.forRoot(),\n ConfigureModule.register(),\n ReindexFeatureModule,\n EventEmitterModule.forRoot(),\n ],\n controllers: [],\n})\nexport class ReindexModule {}\n"]}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import { MmrService, NodeConfig, StoreService } from '@subql/node-core';
|
|
1
|
+
import { MmrService, NodeConfig, StoreService, ForceCleanService } from '@subql/node-core';
|
|
2
2
|
import { Sequelize } from 'sequelize';
|
|
3
3
|
import { SubqueryProject } from '../configure/SubqueryProject';
|
|
4
4
|
import { DynamicDsService } from '../indexer/dynamic-ds.service';
|
|
5
5
|
import { UnfinalizedBlocksService } from '../indexer/unfinalizedBlocks.service';
|
|
6
|
-
import { ForceCleanService } from './forceClean.service';
|
|
7
6
|
export declare class ReindexService {
|
|
8
7
|
private readonly sequelize;
|
|
9
8
|
private readonly nodeConfig;
|
|
@@ -21,9 +21,6 @@ const sequelize_1 = require("sequelize");
|
|
|
21
21
|
const SubqueryProject_1 = require("../configure/SubqueryProject");
|
|
22
22
|
const dynamic_ds_service_1 = require("../indexer/dynamic-ds.service");
|
|
23
23
|
const unfinalizedBlocks_service_1 = require("../indexer/unfinalizedBlocks.service");
|
|
24
|
-
const project_1 = require("../utils/project");
|
|
25
|
-
const reindex_1 = require("../utils/reindex");
|
|
26
|
-
const forceClean_service_1 = require("./forceClean.service");
|
|
27
24
|
const logger = (0, node_core_1.getLogger)('Reindex');
|
|
28
25
|
let ReindexService = class ReindexService {
|
|
29
26
|
constructor(sequelize, nodeConfig, storeService, mmrService, project, forceCleanService, unfinalizedBlocksService, dynamicDsService) {
|
|
@@ -47,14 +44,12 @@ let ReindexService = class ReindexService {
|
|
|
47
44
|
this.dynamicDsService.init(this.metadataRepo);
|
|
48
45
|
}
|
|
49
46
|
async getTargetHeightWithUnfinalizedBlocks(inputHeight) {
|
|
50
|
-
// Why does this happen?
|
|
51
|
-
this.unfinalizedBlocksService.metadataRepo = this.metadataRepo;
|
|
52
47
|
const unfinalizedBlocks = await this.unfinalizedBlocksService.getMetadataUnfinalizedBlocks();
|
|
53
|
-
const bestBlocks = unfinalizedBlocks.filter((
|
|
48
|
+
const bestBlocks = unfinalizedBlocks.filter(({ blockHeight }) => blockHeight <= inputHeight);
|
|
54
49
|
if (bestBlocks.length === 0) {
|
|
55
50
|
return inputHeight;
|
|
56
51
|
}
|
|
57
|
-
const
|
|
52
|
+
const { blockHeight: firstBestBlock } = bestBlocks[0];
|
|
58
53
|
return Math.min(inputHeight, firstBestBlock);
|
|
59
54
|
}
|
|
60
55
|
async getExistingProjectSchema() {
|
|
@@ -70,7 +65,7 @@ let ReindexService = class ReindexService {
|
|
|
70
65
|
return this.metadataRepo.find('specName');
|
|
71
66
|
}
|
|
72
67
|
async initDbSchema() {
|
|
73
|
-
await (0,
|
|
68
|
+
await (0, node_core_1.initDbSchema)(this.project, this.schema, this.storeService);
|
|
74
69
|
}
|
|
75
70
|
getStartBlockFromDataSources() {
|
|
76
71
|
const datasources = this.project.dataSources;
|
|
@@ -88,7 +83,7 @@ let ReindexService = class ReindexService {
|
|
|
88
83
|
this.getStartBlockFromDataSources(),
|
|
89
84
|
this.getLastProcessedHeight(),
|
|
90
85
|
]);
|
|
91
|
-
await (0,
|
|
86
|
+
await (0, node_core_1.reindex)(startHeight, await this.getMetadataBlockOffset(), targetBlockHeight, lastProcessedHeight, this.storeService, this.unfinalizedBlocksService, this.dynamicDsService, this.mmrService, this.sequelize, this.forceCleanService);
|
|
92
87
|
await this.storeService.storeCache.flushCache(true, true);
|
|
93
88
|
}
|
|
94
89
|
};
|
|
@@ -100,7 +95,7 @@ ReindexService = __decorate([
|
|
|
100
95
|
node_core_1.StoreService,
|
|
101
96
|
node_core_1.MmrService,
|
|
102
97
|
SubqueryProject_1.SubqueryProject,
|
|
103
|
-
|
|
98
|
+
node_core_1.ForceCleanService,
|
|
104
99
|
unfinalizedBlocks_service_1.UnfinalizedBlocksService,
|
|
105
100
|
dynamic_ds_service_1.DynamicDsService])
|
|
106
101
|
], ReindexService);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reindex.service.js","sourceRoot":"","sources":["../../src/subcommands/reindex.service.ts"],"names":[],"mappings":";AAAA,gEAAgE;AAChE,sCAAsC;;;;;;;;;;;;;;;AAEtC,2CAAoD;AACpD,
|
|
1
|
+
{"version":3,"file":"reindex.service.js","sourceRoot":"","sources":["../../src/subcommands/reindex.service.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2020-2022 OnFinality Limited authors & contributors\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Inject, Injectable } from '@nestjs/common';\nimport {\n getLogger,\n MmrService,\n NodeConfig,\n StoreService,\n getExistingProjectSchema,\n CacheMetadataModel,\n initDbSchema,\n ForceCleanService,\n reindex,\n} from '@subql/node-core';\nimport { Sequelize } from 'sequelize';\nimport { SubqueryProject } from '../configure/SubqueryProject';\nimport { DynamicDsService } from '../indexer/dynamic-ds.service';\nimport { UnfinalizedBlocksService } from '../indexer/unfinalizedBlocks.service';\n\nconst logger = getLogger('Reindex');\n\n@Injectable()\nexport class ReindexService {\n private schema: string;\n private metadataRepo: CacheMetadataModel;\n\n constructor(\n private readonly sequelize: Sequelize,\n private readonly nodeConfig: NodeConfig,\n private readonly storeService: StoreService,\n private readonly mmrService: MmrService,\n @Inject('ISubqueryProject') private readonly project: SubqueryProject,\n private readonly forceCleanService: ForceCleanService,\n private readonly unfinalizedBlocksService: UnfinalizedBlocksService,\n private readonly dynamicDsService: DynamicDsService,\n ) {}\n\n async init(): Promise<void> {\n this.schema = await this.getExistingProjectSchema();\n\n if (!this.schema) {\n logger.error('Unable to locate schema');\n throw new Error('Schema does not exist.');\n }\n await this.initDbSchema();\n\n this.metadataRepo = this.storeService.storeCache.metadata;\n\n this.dynamicDsService.init(this.metadataRepo);\n }\n\n async getTargetHeightWithUnfinalizedBlocks(\n inputHeight: number,\n ): Promise<number> {\n const unfinalizedBlocks =\n await this.unfinalizedBlocksService.getMetadataUnfinalizedBlocks();\n const bestBlocks = unfinalizedBlocks.filter(\n ({ blockHeight }) => blockHeight <= inputHeight,\n );\n if (bestBlocks.length === 0) {\n return inputHeight;\n }\n const { blockHeight: firstBestBlock } = bestBlocks[0];\n return Math.min(inputHeight, firstBestBlock);\n }\n\n private async getExistingProjectSchema(): Promise<string> {\n return getExistingProjectSchema(this.nodeConfig, this.sequelize);\n }\n\n private async getLastProcessedHeight(): Promise<number | undefined> {\n return this.metadataRepo.find('lastProcessedHeight');\n }\n\n private async getMetadataBlockOffset(): Promise<number | undefined> {\n return this.metadataRepo.find('blockOffset');\n }\n\n private async getMetadataSpecName(): Promise<string | undefined> {\n return this.metadataRepo.find('specName');\n }\n\n private async initDbSchema(): Promise<void> {\n await initDbSchema(this.project, this.schema, this.storeService);\n }\n\n private getStartBlockFromDataSources(): number {\n const datasources = this.project.dataSources;\n\n const startBlocksList = datasources.map((item) => item.startBlock ?? 1);\n if (startBlocksList.length === 0) {\n logger.error(\n `Failed to find a valid datasource, Please check your endpoint if specName filter is used.`,\n );\n process.exit(1);\n } else {\n return Math.min(...startBlocksList);\n }\n }\n\n async reindex(targetBlockHeight: number): Promise<void> {\n const [startHeight, lastProcessedHeight] = await Promise.all([\n this.getStartBlockFromDataSources(),\n this.getLastProcessedHeight(),\n ]);\n\n await reindex(\n startHeight,\n await this.getMetadataBlockOffset(),\n targetBlockHeight,\n lastProcessedHeight,\n this.storeService,\n this.unfinalizedBlocksService,\n this.dynamicDsService,\n this.mmrService,\n this.sequelize,\n this.forceCleanService,\n );\n\n await this.storeService.storeCache.flushCache(true, true);\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing.init.js","sourceRoot":"","sources":["../../src/subcommands/testing.init.ts"],"names":[],"mappings":";AAAA,gEAAgE;AAChE,sCAAsC;;;AAEtC,uCAA2C;AAC3C,gDAAqE;AACrE,gEAA4D;AAC5D,qDAAiD;AACjD,uDAAmD;AAEnD,MAAM,MAAM,GAAG,IAAA,qBAAS,EAAC,SAAS,CAAC,CAAC;AAC7B,KAAK,UAAU,WAAW;IAC/B,IAAI;QACF,MAAM,GAAG,GAAG,MAAM,kBAAW,CAAC,MAAM,CAAC,8BAAa,EAAE;YAClD,MAAM,EAAE,IAAI,sBAAU,EAAE;SACzB,CAAC,CAAC;QAEH,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QACjB,MAAM,cAAc,GAAG,GAAG,CAAC,GAAG,CAAC,gCAAc,CAAC,CAAC;QAC/C,MAAM,UAAU,GAAG,GAAG,CAAC,GAAG,CAAC,sBAAU,CAAC,CAAC;QAEvC,wGAAwG;QACxG,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC;QACxB,MAAM,cAAc,CAAC,IAAI,EAAE,CAAC;QAE5B,MAAM,cAAc,GAAG,GAAG,CAAC,GAAG,CAAC,gCAAc,CAAC,CAAC;QAC/C,MAAM,cAAc,CAAC,IAAI,EAAE,CAAC;QAC5B,MAAM,cAAc,CAAC,GAAG,EAAE,CAAC;KAC5B;IAAC,OAAO,CAAC,EAAE;QACV,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC;QAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACjB;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAtBD,kCAsBC","sourcesContent":["// Copyright 2020-2022 OnFinality Limited authors & contributors\n// SPDX-License-Identifier: Apache-2.0\n\nimport { NestFactory } from '@nestjs/core';\nimport { getLogger, NestLogger
|
|
1
|
+
{"version":3,"file":"testing.init.js","sourceRoot":"","sources":["../../src/subcommands/testing.init.ts"],"names":[],"mappings":";AAAA,gEAAgE;AAChE,sCAAsC;;;AAEtC,uCAA2C;AAC3C,gDAAqE;AACrE,gEAA4D;AAC5D,qDAAiD;AACjD,uDAAmD;AAEnD,MAAM,MAAM,GAAG,IAAA,qBAAS,EAAC,SAAS,CAAC,CAAC;AAC7B,KAAK,UAAU,WAAW;IAC/B,IAAI;QACF,MAAM,GAAG,GAAG,MAAM,kBAAW,CAAC,MAAM,CAAC,8BAAa,EAAE;YAClD,MAAM,EAAE,IAAI,sBAAU,EAAE;SACzB,CAAC,CAAC;QAEH,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QACjB,MAAM,cAAc,GAAG,GAAG,CAAC,GAAG,CAAC,gCAAc,CAAC,CAAC;QAC/C,MAAM,UAAU,GAAG,GAAG,CAAC,GAAG,CAAC,sBAAU,CAAC,CAAC;QAEvC,wGAAwG;QACxG,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC;QACxB,MAAM,cAAc,CAAC,IAAI,EAAE,CAAC;QAE5B,MAAM,cAAc,GAAG,GAAG,CAAC,GAAG,CAAC,gCAAc,CAAC,CAAC;QAC/C,MAAM,cAAc,CAAC,IAAI,EAAE,CAAC;QAC5B,MAAM,cAAc,CAAC,GAAG,EAAE,CAAC;KAC5B;IAAC,OAAO,CAAC,EAAE;QACV,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC;QAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACjB;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAtBD,kCAsBC","sourcesContent":["// Copyright 2020-2022 OnFinality Limited authors & contributors\n// SPDX-License-Identifier: Apache-2.0\n\nimport { NestFactory } from '@nestjs/core';\nimport { ApiService, getLogger, NestLogger } from '@subql/node-core';\nimport { ProjectService } from '../indexer/project.service';\nimport { TestingModule } from './testing.module';\nimport { TestingService } from './testing.service';\n\nconst logger = getLogger('Testing');\nexport async function testingInit(): Promise<void> {\n try {\n const app = await NestFactory.create(TestingModule, {\n logger: new NestLogger(),\n });\n\n await app.init();\n const projectService = app.get(ProjectService);\n const apiService = app.get(ApiService);\n\n // Initialise async services, we do this here rather than in factories, so we can capture one off events\n await apiService.init();\n await projectService.init();\n\n const testingService = app.get(TestingService);\n await testingService.init();\n await testingService.run();\n } catch (e) {\n logger.error(e, 'Testing failed');\n process.exit(1);\n }\n process.exit(0);\n}\n"]}
|
|
@@ -53,6 +53,7 @@ TestingFeatureModule = __decorate([
|
|
|
53
53
|
inject: ['ISubqueryProject', node_core_1.ConnectionPoolService, event_emitter_1.EventEmitter2],
|
|
54
54
|
},
|
|
55
55
|
indexer_manager_1.IndexerManager,
|
|
56
|
+
schedule_1.SchedulerRegistry,
|
|
56
57
|
],
|
|
57
58
|
imports: [meta_module_1.MetaModule, fetch_module_1.FetchModule],
|
|
58
59
|
controllers: [],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing.module.js","sourceRoot":"","sources":["../../src/subcommands/testing.module.ts"],"names":[],"mappings":";AAAA,gEAAgE;AAChE,sCAAsC;;;;;;;;;AAEtC,2CAAwC;AACxC,yDAA0E;AAC1E,+
|
|
1
|
+
{"version":3,"file":"testing.module.js","sourceRoot":"","sources":["../../src/subcommands/testing.module.ts"],"names":[],"mappings":";AAAA,gEAAgE;AAChE,sCAAsC;;;;;;;;;AAEtC,2CAAwC;AACxC,yDAA0E;AAC1E,+CAAqE;AACrE,gDAO0B;AAC1B,oEAAgE;AAEhE,0CAAiD;AAEjD,0EAAqE;AACrE,sEAAiE;AACjE,0DAAsD;AACtD,gEAA4D;AAC5D,gEAA4D;AAC5D,gEAA4D;AAC5D,oFAAgF;AAChF,qDAAiD;AACjD,uDAAmD;AA0C5C,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;CAAG,CAAA;AAAvB,oBAAoB;IAxChC,IAAA,eAAM,EAAC;QACN,SAAS,EAAE;YACT,wBAAY;YACZ,gCAAc;YACd,6BAAa;YACb,sBAAU;YACV,gCAAc;YACd,yCAAkB;YAClB,qCAAgB;YAChB,oDAAwB;YACxB,gCAAc;YACd,iCAAqB;YACrB;gBACE,OAAO,EAAE,iBAAiB;gBAC1B,QAAQ,EAAE,gCAAc;aACzB;YACD;gBACE,OAAO,EAAE,sBAAU;gBACnB,UAAU,EAAE,KAAK,EACf,OAAwB,EACxB,qBAAmE,EACnE,YAA2B,EAC3B,EAAE;oBACF,MAAM,UAAU,GAAG,IAAI,6BAAkB,CACvC,OAAO,EACP,qBAAqB,EACrB,YAAY,CACb,CAAC;oBACF,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC;oBACxB,OAAO,UAAU,CAAC;gBACpB,CAAC;gBACD,MAAM,EAAE,CAAC,kBAAkB,EAAE,iCAAqB,EAAE,6BAAa,CAAC;aACnE;YACD,gCAAc;YACd,4BAAiB;SAClB;QAED,OAAO,EAAE,CAAC,wBAAU,EAAE,0BAAW,CAAC;QAClC,WAAW,EAAE,EAAE;KAChB,CAAC;GACW,oBAAoB,CAAG;AAAvB,oDAAoB;AAY1B,IAAM,aAAa,GAAnB,MAAM,aAAa;CAAG,CAAA;AAAhB,aAAa;IAVzB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,oBAAQ,CAAC,OAAO,EAAE;YAClB,kCAAe,CAAC,QAAQ,EAAE;YAC1B,kCAAkB,CAAC,OAAO,EAAE;YAC5B,yBAAc,CAAC,OAAO,EAAE;YACxB,oBAAoB;SACrB;QACD,WAAW,EAAE,EAAE;KAChB,CAAC;GACW,aAAa,CAAG;AAAhB,sCAAa","sourcesContent":["// Copyright 2020-2022 OnFinality Limited authors & contributors\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Module } from '@nestjs/common';\nimport { EventEmitter2, EventEmitterModule } from '@nestjs/event-emitter';\nimport { ScheduleModule, SchedulerRegistry } from '@nestjs/schedule';\nimport {\n ApiService,\n ConnectionPoolService,\n DbModule,\n NodeConfig,\n PoiService,\n StoreService,\n} from '@subql/node-core';\nimport { ConfigureModule } from '../configure/configure.module';\nimport { SubqueryProject } from '../configure/SubqueryProject';\nimport { EthereumApiService } from '../ethereum';\nimport { EthereumApiConnection } from '../ethereum/api.connection';\nimport { DsProcessorService } from '../indexer/ds-processor.service';\nimport { DynamicDsService } from '../indexer/dynamic-ds.service';\nimport { FetchModule } from '../indexer/fetch.module';\nimport { IndexerManager } from '../indexer/indexer.manager';\nimport { ProjectService } from '../indexer/project.service';\nimport { SandboxService } from '../indexer/sandbox.service';\nimport { UnfinalizedBlocksService } from '../indexer/unfinalizedBlocks.service';\nimport { MetaModule } from '../meta/meta.module';\nimport { TestingService } from './testing.service';\n\n@Module({\n providers: [\n StoreService,\n TestingService,\n EventEmitter2,\n PoiService,\n SandboxService,\n DsProcessorService,\n DynamicDsService,\n UnfinalizedBlocksService,\n ProjectService,\n ConnectionPoolService,\n {\n provide: 'IProjectService',\n useClass: ProjectService,\n },\n {\n provide: ApiService,\n useFactory: async (\n project: SubqueryProject,\n connectionPoolService: ConnectionPoolService<EthereumApiConnection>,\n eventEmitter: EventEmitter2,\n ) => {\n const apiService = new EthereumApiService(\n project,\n connectionPoolService,\n eventEmitter,\n );\n await apiService.init();\n return apiService;\n },\n inject: ['ISubqueryProject', ConnectionPoolService, EventEmitter2],\n },\n IndexerManager,\n SchedulerRegistry,\n ],\n\n imports: [MetaModule, FetchModule],\n controllers: [],\n})\nexport class TestingFeatureModule {}\n\n@Module({\n imports: [\n DbModule.forRoot(),\n ConfigureModule.register(),\n EventEmitterModule.forRoot(),\n ScheduleModule.forRoot(),\n TestingFeatureModule,\n ],\n controllers: [],\n})\nexport class TestingModule {}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { NodeConfig, StoreService, TestingService as BaseTestingService, ApiService } from '@subql/node-core';
|
|
2
2
|
import { EthereumBlockWrapper } from '@subql/types-ethereum';
|
|
3
3
|
import { Sequelize } from 'sequelize';
|
|
4
4
|
import { SubqlProjectDs, SubqueryProject } from '../configure/SubqueryProject';
|
|
@@ -20,7 +20,6 @@ const node_core_1 = require("@subql/node-core");
|
|
|
20
20
|
const sequelize_1 = require("sequelize");
|
|
21
21
|
const SubqueryProject_1 = require("../configure/SubqueryProject");
|
|
22
22
|
const indexer_manager_1 = require("../indexer/indexer.manager");
|
|
23
|
-
const logger = (0, node_core_1.getLogger)('subql-testing');
|
|
24
23
|
let TestingService = class TestingService extends node_core_1.TestingService {
|
|
25
24
|
constructor(sequelize, nodeConfig, storeService, project, apiService, indexerManager) {
|
|
26
25
|
super(sequelize, nodeConfig, storeService, project, apiService, indexerManager);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing.service.js","sourceRoot":"","sources":["../../src/subcommands/testing.service.ts"],"names":[],"mappings":";AAAA,gEAAgE;AAChE,sCAAsC;;;;;;;;;;;;;;;AAEtC,2CAAoD;AACpD,
|
|
1
|
+
{"version":3,"file":"testing.service.js","sourceRoot":"","sources":["../../src/subcommands/testing.service.ts"],"names":[],"mappings":";AAAA,gEAAgE;AAChE,sCAAsC;;;;;;;;;;;;;;;AAEtC,2CAAoD;AACpD,gDAK0B;AAE1B,yCAAsC;AACtC,kEAA+E;AAC/E,gEAA4D;AAGrD,IAAM,cAAc,GAApB,MAAM,cAAe,SAAQ,0BAGnC;IACC,YACE,SAAoB,EACpB,UAAsB,EACtB,YAA0B,EACE,OAAwB,EACpD,UAAsB,EACtB,cAA8B;QAE9B,KAAK,CACH,SAAS,EACT,UAAU,EACV,YAAY,EACZ,OAAO,EACP,UAAU,EACV,cAAc,CACf,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,UAAU,CACd,KAA2B,EAC3B,OAAe;QAEf,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9E,CAAC;CACF,CAAA;AA5BY,cAAc;IAD1B,IAAA,mBAAU,GAAE;IASR,WAAA,IAAA,eAAM,EAAC,kBAAkB,CAAC,CAAA;qCAHhB,qBAAS;QACR,sBAAU;QACR,wBAAY;QACW,iCAAe;QACxC,sBAAU;QACN,gCAAc;GAVrB,cAAc,CA4B1B;AA5BY,wCAAc","sourcesContent":["// Copyright 2020-2022 OnFinality Limited authors & contributors\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Inject, Injectable } from '@nestjs/common';\nimport {\n NodeConfig,\n StoreService,\n TestingService as BaseTestingService,\n ApiService,\n} from '@subql/node-core';\nimport { EthereumBlockWrapper } from '@subql/types-ethereum';\nimport { Sequelize } from 'sequelize';\nimport { SubqlProjectDs, SubqueryProject } from '../configure/SubqueryProject';\nimport { IndexerManager } from '../indexer/indexer.manager';\n\n@Injectable()\nexport class TestingService extends BaseTestingService<\n EthereumBlockWrapper,\n SubqlProjectDs\n> {\n constructor(\n sequelize: Sequelize,\n nodeConfig: NodeConfig,\n storeService: StoreService,\n @Inject('ISubqueryProject') project: SubqueryProject,\n apiService: ApiService,\n indexerManager: IndexerManager,\n ) {\n super(\n sequelize,\n nodeConfig,\n storeService,\n project,\n apiService,\n indexerManager,\n );\n }\n\n async indexBlock(\n block: EthereumBlockWrapper,\n handler: string,\n ): Promise<void> {\n await this.indexerManager.indexBlock(block, this.getDsWithHandler(handler));\n }\n}\n"]}
|
package/dist/utils/project.d.ts
CHANGED
|
@@ -1,16 +1,9 @@
|
|
|
1
1
|
import { Reader } from '@subql/common';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { SubqlProjectDs
|
|
5
|
-
export declare function prepareProjectDir(projectPath: string): Promise<string>;
|
|
6
|
-
export declare function getProjectEntry(root: string): string;
|
|
2
|
+
import { SubqlRuntimeHandler, SubqlCustomHandler, SubqlHandler } from '@subql/common-ethereum';
|
|
3
|
+
import { SubqlDatasource } from '@subql/types-ethereum';
|
|
4
|
+
import { SubqlProjectDs } from '../configure/SubqueryProject';
|
|
7
5
|
export declare function isBaseHandler(handler: SubqlHandler): handler is SubqlRuntimeHandler;
|
|
8
6
|
export declare function isCustomHandler(handler: SubqlHandler): handler is SubqlCustomHandler;
|
|
9
|
-
export declare function
|
|
10
|
-
export declare function getChainTypes(reader: Reader, root: string, file: string): Promise<ChainTypes>;
|
|
11
|
-
export declare function loadDataSourceScript(reader: Reader, file?: string): Promise<string>;
|
|
12
|
-
export declare function getProjectRoot(reader: Reader): Promise<string>;
|
|
13
|
-
export declare function initDbSchema(project: SubqueryProject, schema: string, storeService: StoreService): Promise<void>;
|
|
14
|
-
export declare function initHotSchemaReload(schema: string, storeService: StoreService): Promise<void>;
|
|
7
|
+
export declare function updateDataSourcesV1_0_0(_dataSources: SubqlDatasource[], reader: Reader, root: string): Promise<SubqlProjectDs[]>;
|
|
15
8
|
export declare function retryOnFailEth<T>(request: () => Promise<T>, errors?: string[]): Promise<T>;
|
|
16
9
|
export declare function onlyHasLogDataSources(dataSources: SubqlProjectDs[]): boolean;
|
package/dist/utils/project.js
CHANGED
|
@@ -5,53 +5,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
6
6
|
};
|
|
7
7
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
-
exports.onlyHasLogDataSources = exports.retryOnFailEth = exports.
|
|
8
|
+
exports.onlyHasLogDataSources = exports.retryOnFailEth = exports.updateDataSourcesV1_0_0 = exports.isCustomHandler = exports.isBaseHandler = void 0;
|
|
9
9
|
const fs_1 = __importDefault(require("fs"));
|
|
10
|
-
const os_1 = __importDefault(require("os"));
|
|
11
10
|
const path_1 = __importDefault(require("path"));
|
|
12
11
|
const common_1 = require("@subql/common");
|
|
13
12
|
const common_ethereum_1 = require("@subql/common-ethereum");
|
|
14
13
|
const node_core_1 = require("@subql/node-core");
|
|
15
|
-
const utils_1 = require("@subql/utils");
|
|
16
|
-
const js_yaml_1 = __importDefault(require("js-yaml"));
|
|
17
|
-
const tar_1 = __importDefault(require("tar"));
|
|
18
|
-
async function prepareProjectDir(projectPath) {
|
|
19
|
-
const stats = fs_1.default.statSync(projectPath);
|
|
20
|
-
if (stats.isFile()) {
|
|
21
|
-
const sep = path_1.default.sep;
|
|
22
|
-
const tmpDir = os_1.default.tmpdir();
|
|
23
|
-
const tempPath = fs_1.default.mkdtempSync(`${tmpDir}${sep}`);
|
|
24
|
-
// Will promote errors if incorrect format/extension
|
|
25
|
-
await tar_1.default.x({ file: projectPath, cwd: tempPath });
|
|
26
|
-
return tempPath.concat('/package');
|
|
27
|
-
}
|
|
28
|
-
else if (stats.isDirectory()) {
|
|
29
|
-
return projectPath;
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
exports.prepareProjectDir = prepareProjectDir;
|
|
33
|
-
// We cache this to avoid repeated reads from fs
|
|
34
|
-
const projectEntryCache = {};
|
|
35
|
-
function getProjectEntry(root) {
|
|
36
|
-
const pkgPath = path_1.default.join(root, 'package.json');
|
|
37
|
-
try {
|
|
38
|
-
if (!projectEntryCache[pkgPath]) {
|
|
39
|
-
const content = fs_1.default.readFileSync(pkgPath).toString();
|
|
40
|
-
const pkg = JSON.parse(content);
|
|
41
|
-
if (!pkg.main) {
|
|
42
|
-
return './dist';
|
|
43
|
-
}
|
|
44
|
-
projectEntryCache[pkgPath] = pkg.main.startsWith('./')
|
|
45
|
-
? pkg.main
|
|
46
|
-
: `./${pkg.main}`;
|
|
47
|
-
}
|
|
48
|
-
return projectEntryCache[pkgPath];
|
|
49
|
-
}
|
|
50
|
-
catch (err) {
|
|
51
|
-
throw new Error(`can not find package.json within directory ${root}`);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
exports.getProjectEntry = getProjectEntry;
|
|
55
14
|
function isBaseHandler(handler) {
|
|
56
15
|
return Object.values(common_ethereum_1.EthereumHandlerKind).includes(handler.kind);
|
|
57
16
|
}
|
|
@@ -60,9 +19,11 @@ function isCustomHandler(handler) {
|
|
|
60
19
|
return !isBaseHandler(handler);
|
|
61
20
|
}
|
|
62
21
|
exports.isCustomHandler = isCustomHandler;
|
|
63
|
-
async function
|
|
22
|
+
async function updateDataSourcesV1_0_0(_dataSources, reader, root) {
|
|
64
23
|
// force convert to updated ds
|
|
65
|
-
return Promise.all(
|
|
24
|
+
return Promise.all(
|
|
25
|
+
// Cast to any to make types happy
|
|
26
|
+
_dataSources.map(async (dataSource) => {
|
|
66
27
|
if (dataSource.kind === 'flare/Runtime') {
|
|
67
28
|
dataSource.kind = common_ethereum_1.EthereumDatasourceKind.Runtime;
|
|
68
29
|
}
|
|
@@ -84,8 +45,8 @@ async function updateDataSourcesV0_2_0(_dataSources, reader, root) {
|
|
|
84
45
|
}
|
|
85
46
|
return handler;
|
|
86
47
|
});
|
|
87
|
-
const entryScript = await loadDataSourceScript(reader, dataSource.mapping.file);
|
|
88
|
-
const file = await updateDataSourcesEntry(reader, dataSource.mapping.file, root, entryScript);
|
|
48
|
+
const entryScript = await (0, node_core_1.loadDataSourceScript)(reader, dataSource.mapping.file);
|
|
49
|
+
const file = await (0, node_core_1.updateDataSourcesEntry)(reader, dataSource.mapping.file, root, entryScript);
|
|
89
50
|
if (dataSource.assets) {
|
|
90
51
|
for (const [, asset] of Object.entries(dataSource.assets)) {
|
|
91
52
|
if (reader instanceof common_1.LocalReader) {
|
|
@@ -101,7 +62,7 @@ async function updateDataSourcesV0_2_0(_dataSources, reader, root) {
|
|
|
101
62
|
}
|
|
102
63
|
if ((0, common_ethereum_1.isCustomDs)(dataSource)) {
|
|
103
64
|
if (dataSource.processor) {
|
|
104
|
-
dataSource.processor.file = await updateProcessor(reader, root, dataSource.processor.file);
|
|
65
|
+
dataSource.processor.file = await (0, node_core_1.updateProcessor)(reader, root, dataSource.processor.file);
|
|
105
66
|
}
|
|
106
67
|
if (dataSource.assets) {
|
|
107
68
|
for (const [, asset] of dataSource.assets) {
|
|
@@ -123,97 +84,7 @@ async function updateDataSourcesV0_2_0(_dataSources, reader, root) {
|
|
|
123
84
|
}
|
|
124
85
|
}));
|
|
125
86
|
}
|
|
126
|
-
exports.
|
|
127
|
-
async function updateDataSourcesEntry(reader, file, root, script) {
|
|
128
|
-
if (reader instanceof common_1.LocalReader)
|
|
129
|
-
return file;
|
|
130
|
-
else if (reader instanceof common_1.IPFSReader || reader instanceof common_1.GithubReader) {
|
|
131
|
-
const outputPath = `${path_1.default.resolve(root, file.replace('ipfs://', ''))}.js`;
|
|
132
|
-
await fs_1.default.promises.writeFile(outputPath, script);
|
|
133
|
-
return outputPath;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
async function updateProcessor(reader, root, file) {
|
|
137
|
-
if (reader instanceof common_1.LocalReader) {
|
|
138
|
-
return path_1.default.resolve(root, file);
|
|
139
|
-
}
|
|
140
|
-
else {
|
|
141
|
-
const res = await reader.getFile(file);
|
|
142
|
-
const outputPath = `${path_1.default.resolve(root, file.replace('ipfs://', ''))}.js`;
|
|
143
|
-
await fs_1.default.promises.writeFile(outputPath, res);
|
|
144
|
-
return outputPath;
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
async function getChainTypes(reader, root, file) {
|
|
148
|
-
// If the project is load from local, we will direct load them
|
|
149
|
-
if (reader instanceof common_1.LocalReader) {
|
|
150
|
-
return (0, common_ethereum_1.loadChainTypes)(file, root);
|
|
151
|
-
}
|
|
152
|
-
else {
|
|
153
|
-
// If it is stored in ipfs or other resources, we will use the corresponding reader to read the file
|
|
154
|
-
// Because ipfs not provide extension of the file, it is difficult to determine its format
|
|
155
|
-
// We will use yaml.load to try to load the script and parse them to supported chain types
|
|
156
|
-
// if it failed, we will give it another another attempt, and assume the script written in js
|
|
157
|
-
// we will download it to a temp folder, and load them within sandbox
|
|
158
|
-
const res = await reader.getFile(file);
|
|
159
|
-
let raw;
|
|
160
|
-
try {
|
|
161
|
-
raw = js_yaml_1.default.load(res);
|
|
162
|
-
return (0, common_ethereum_1.parseChainTypes)(raw);
|
|
163
|
-
}
|
|
164
|
-
catch (e) {
|
|
165
|
-
const chainTypesPath = `${path_1.default.resolve(root, file.replace('ipfs://', ''))}.js`;
|
|
166
|
-
await fs_1.default.promises.writeFile(chainTypesPath, res);
|
|
167
|
-
raw = (0, common_ethereum_1.loadChainTypesFromJs)(chainTypesPath); //root not required, as it been packed in single js
|
|
168
|
-
return (0, common_ethereum_1.parseChainTypes)(raw);
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
exports.getChainTypes = getChainTypes;
|
|
173
|
-
async function loadDataSourceScript(reader, file) {
|
|
174
|
-
let entry;
|
|
175
|
-
//For RuntimeDataSourceV0_0_1
|
|
176
|
-
if (!file) {
|
|
177
|
-
const pkg = await reader.getPkg();
|
|
178
|
-
if (pkg === undefined)
|
|
179
|
-
throw new Error('Project package.json is not found');
|
|
180
|
-
if (pkg.main) {
|
|
181
|
-
entry = pkg.main.startsWith('./') ? pkg.main : `./${pkg.main}`;
|
|
182
|
-
}
|
|
183
|
-
else {
|
|
184
|
-
entry = './dist';
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
//Else get file
|
|
188
|
-
const entryScript = await reader.getFile(file ? file : entry);
|
|
189
|
-
if (entryScript === undefined) {
|
|
190
|
-
throw new Error(`Entry file ${entry} for datasource not exist`);
|
|
191
|
-
}
|
|
192
|
-
return entryScript;
|
|
193
|
-
}
|
|
194
|
-
exports.loadDataSourceScript = loadDataSourceScript;
|
|
195
|
-
async function makeTempDir() {
|
|
196
|
-
const sep = path_1.default.sep;
|
|
197
|
-
const tmpDir = os_1.default.tmpdir();
|
|
198
|
-
return fs_1.default.promises.mkdtemp(`${tmpDir}${sep}`);
|
|
199
|
-
}
|
|
200
|
-
async function getProjectRoot(reader) {
|
|
201
|
-
if (reader instanceof common_1.LocalReader)
|
|
202
|
-
return reader.root;
|
|
203
|
-
if (reader instanceof common_1.IPFSReader || reader instanceof common_1.GithubReader) {
|
|
204
|
-
return makeTempDir();
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
exports.getProjectRoot = getProjectRoot;
|
|
208
|
-
async function initDbSchema(project, schema, storeService) {
|
|
209
|
-
const modelsRelation = (0, utils_1.getAllEntitiesRelations)(project.schema);
|
|
210
|
-
await storeService.init(modelsRelation, schema);
|
|
211
|
-
}
|
|
212
|
-
exports.initDbSchema = initDbSchema;
|
|
213
|
-
async function initHotSchemaReload(schema, storeService) {
|
|
214
|
-
await storeService.initHotSchemaReloadQueries(schema);
|
|
215
|
-
}
|
|
216
|
-
exports.initHotSchemaReload = initHotSchemaReload;
|
|
87
|
+
exports.updateDataSourcesV1_0_0 = updateDataSourcesV1_0_0;
|
|
217
88
|
const handledErrors = ['timeout'];
|
|
218
89
|
// eslint-disable-next-line @typescript-eslint/require-await
|
|
219
90
|
async function retryOnFailEth(request, errors = handledErrors) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/utils/project.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2020-2022 OnFinality Limited authors & contributors\n// SPDX-License-Identifier: Apache-2.0\n\nimport fs from 'fs';\nimport os from 'os';\nimport path from 'path';\nimport { GithubReader, IPFSReader, LocalReader, Reader } from '@subql/common';\nimport {\n ChainTypes,\n CustomDatasourceV0_2_0,\n isCustomDs,\n parseChainTypes,\n RuntimeDataSourceV0_2_0,\n SubqlRuntimeHandler,\n SubqlCustomHandler,\n SubqlHandler,\n EthereumHandlerKind,\n EthereumDatasourceKind,\n SubqlEthereumHandlerKind,\n loadChainTypesFromJs,\n loadChainTypes,\n} from '@subql/common-ethereum';\nimport { retryOnFail, StoreService } from '@subql/node-core';\nimport { getAllEntitiesRelations } from '@subql/utils';\nimport yaml from 'js-yaml';\nimport tar from 'tar';\nimport { SubqlProjectDs, SubqueryProject } from '../configure/SubqueryProject';\n\nexport async function prepareProjectDir(projectPath: string): Promise<string> {\n const stats = fs.statSync(projectPath);\n if (stats.isFile()) {\n const sep = path.sep;\n const tmpDir = os.tmpdir();\n const tempPath = fs.mkdtempSync(`${tmpDir}${sep}`);\n // Will promote errors if incorrect format/extension\n await tar.x({ file: projectPath, cwd: tempPath });\n return tempPath.concat('/package');\n } else if (stats.isDirectory()) {\n return projectPath;\n }\n}\n\n// We cache this to avoid repeated reads from fs\nconst projectEntryCache: Record<string, string> = {};\n\nexport function getProjectEntry(root: string): string {\n const pkgPath = path.join(root, 'package.json');\n try {\n if (!projectEntryCache[pkgPath]) {\n const content = fs.readFileSync(pkgPath).toString();\n const pkg = JSON.parse(content);\n if (!pkg.main) {\n return './dist';\n }\n projectEntryCache[pkgPath] = pkg.main.startsWith('./')\n ? pkg.main\n : `./${pkg.main}`;\n }\n\n return projectEntryCache[pkgPath];\n } catch (err) {\n throw new Error(`can not find package.json within directory ${root}`);\n }\n}\n\nexport function isBaseHandler(\n handler: SubqlHandler,\n): handler is SubqlRuntimeHandler {\n return Object.values<string>(EthereumHandlerKind).includes(handler.kind);\n}\n\nexport function isCustomHandler(\n handler: SubqlHandler,\n): handler is SubqlCustomHandler {\n return !isBaseHandler(handler);\n}\n\nexport async function updateDataSourcesV0_2_0(\n _dataSources: (RuntimeDataSourceV0_2_0 | CustomDatasourceV0_2_0)[],\n reader: Reader,\n root: string,\n): Promise<SubqlProjectDs[]> {\n // force convert to updated ds\n return Promise.all(\n _dataSources.map(async (dataSource) => {\n if (dataSource.kind === 'flare/Runtime') {\n dataSource.kind = EthereumDatasourceKind.Runtime;\n }\n dataSource.mapping.handlers = dataSource.mapping.handlers.map(\n (handler) => {\n switch (handler.kind) {\n case 'flare/BlockHandler': {\n handler.kind = EthereumHandlerKind.Block;\n break;\n }\n case 'flare/TransactionHandler': {\n handler.kind = EthereumHandlerKind.Call;\n break;\n }\n case 'flare/LogHandler': {\n handler.kind = EthereumHandlerKind.Event;\n break;\n }\n default:\n }\n\n return handler;\n },\n );\n\n const entryScript = await loadDataSourceScript(\n reader,\n dataSource.mapping.file,\n );\n const file = await updateDataSourcesEntry(\n reader,\n dataSource.mapping.file,\n root,\n entryScript,\n );\n if (dataSource.assets) {\n for (const [, asset] of Object.entries(dataSource.assets)) {\n if (reader instanceof LocalReader) {\n asset.file = path.resolve(root, asset.file);\n } else {\n const res = await reader.getFile(asset.file);\n const outputPath = path.resolve(\n root,\n asset.file.replace('ipfs://', ''),\n );\n await fs.promises.writeFile(outputPath, res as string);\n asset.file = outputPath;\n }\n }\n }\n if (isCustomDs(dataSource)) {\n if (dataSource.processor) {\n dataSource.processor.file = await updateProcessor(\n reader,\n root,\n dataSource.processor.file,\n );\n }\n if (dataSource.assets) {\n for (const [, asset] of dataSource.assets) {\n if (reader instanceof LocalReader) {\n asset.file = path.resolve(root, asset.file);\n } else {\n const res = await reader.getFile(asset.file);\n const outputPath = path.resolve(\n root,\n asset.file.replace('ipfs://', ''),\n );\n await fs.promises.writeFile(outputPath, res as string);\n asset.file = outputPath;\n }\n }\n }\n return {\n ...dataSource,\n mapping: { ...dataSource.mapping, entryScript, file },\n };\n } else {\n return {\n ...dataSource,\n mapping: { ...dataSource.mapping, entryScript, file },\n };\n }\n }),\n );\n}\n\nasync function updateDataSourcesEntry(\n reader: Reader,\n file: string,\n root: string,\n script: string,\n): Promise<string> {\n if (reader instanceof LocalReader) return file;\n else if (reader instanceof IPFSReader || reader instanceof GithubReader) {\n const outputPath = `${path.resolve(root, file.replace('ipfs://', ''))}.js`;\n await fs.promises.writeFile(outputPath, script);\n return outputPath;\n }\n}\n\nasync function updateProcessor(\n reader: Reader,\n root: string,\n file: string,\n): Promise<string> {\n if (reader instanceof LocalReader) {\n return path.resolve(root, file);\n } else {\n const res = await reader.getFile(file);\n const outputPath = `${path.resolve(root, file.replace('ipfs://', ''))}.js`;\n await fs.promises.writeFile(outputPath, res);\n return outputPath;\n }\n}\n\nexport async function getChainTypes(\n reader: Reader,\n root: string,\n file: string,\n): Promise<ChainTypes> {\n // If the project is load from local, we will direct load them\n if (reader instanceof LocalReader) {\n return loadChainTypes(file, root);\n } else {\n // If it is stored in ipfs or other resources, we will use the corresponding reader to read the file\n // Because ipfs not provide extension of the file, it is difficult to determine its format\n // We will use yaml.load to try to load the script and parse them to supported chain types\n // if it failed, we will give it another another attempt, and assume the script written in js\n // we will download it to a temp folder, and load them within sandbox\n const res = await reader.getFile(file);\n let raw: unknown;\n try {\n raw = yaml.load(res);\n return parseChainTypes(raw);\n } catch (e) {\n const chainTypesPath = `${path.resolve(\n root,\n file.replace('ipfs://', ''),\n )}.js`;\n await fs.promises.writeFile(chainTypesPath, res);\n raw = loadChainTypesFromJs(chainTypesPath); //root not required, as it been packed in single js\n return parseChainTypes(raw);\n }\n }\n}\n\nexport async function loadDataSourceScript(\n reader: Reader,\n file?: string,\n): Promise<string> {\n let entry: string;\n //For RuntimeDataSourceV0_0_1\n if (!file) {\n const pkg = await reader.getPkg();\n if (pkg === undefined) throw new Error('Project package.json is not found');\n if (pkg.main) {\n entry = pkg.main.startsWith('./') ? pkg.main : `./${pkg.main}`;\n } else {\n entry = './dist';\n }\n }\n //Else get file\n const entryScript = await reader.getFile(file ? file : entry);\n if (entryScript === undefined) {\n throw new Error(`Entry file ${entry} for datasource not exist`);\n }\n return entryScript;\n}\n\nasync function makeTempDir(): Promise<string> {\n const sep = path.sep;\n const tmpDir = os.tmpdir();\n return fs.promises.mkdtemp(`${tmpDir}${sep}`);\n}\n\nexport async function getProjectRoot(reader: Reader): Promise<string> {\n if (reader instanceof LocalReader) return reader.root;\n if (reader instanceof IPFSReader || reader instanceof GithubReader) {\n return makeTempDir();\n }\n}\n\nexport async function initDbSchema(\n project: SubqueryProject,\n schema: string,\n storeService: StoreService,\n): Promise<void> {\n const modelsRelation = getAllEntitiesRelations(project.schema);\n await storeService.init(modelsRelation, schema);\n}\n\nexport async function initHotSchemaReload(\n schema: string,\n storeService: StoreService,\n): Promise<void> {\n await storeService.initHotSchemaReloadQueries(schema);\n}\n\nconst handledErrors = ['timeout'];\n// eslint-disable-next-line @typescript-eslint/require-await\nexport async function retryOnFailEth<T>(\n request: () => Promise<T>,\n errors = handledErrors,\n): Promise<T> {\n return retryOnFail(request, (e) => !!errors.find((t) => t === e?.reason));\n}\n\nexport function onlyHasLogDataSources(dataSources: SubqlProjectDs[]): boolean {\n for (const ds of dataSources) {\n for (const handler of ds.mapping.handlers) {\n if (\n handler.kind !== SubqlEthereumHandlerKind.EthEvent &&\n handler.kind !== SubqlEthereumHandlerKind.FlareEvent\n ) {\n return false;\n }\n }\n }\n\n return true;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/utils/project.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2020-2022 OnFinality Limited authors & contributors\n// SPDX-License-Identifier: Apache-2.0\n\nimport fs from 'fs';\nimport path from 'path';\nimport { LocalReader, Reader } from '@subql/common';\nimport {\n isCustomDs,\n SubqlRuntimeHandler,\n SubqlCustomHandler,\n SubqlHandler,\n EthereumHandlerKind,\n EthereumDatasourceKind,\n SubqlEthereumHandlerKind,\n} from '@subql/common-ethereum';\nimport {\n retryOnFail,\n loadDataSourceScript,\n updateDataSourcesEntry,\n updateProcessor,\n} from '@subql/node-core';\nimport { SubqlDatasource } from '@subql/types-ethereum';\nimport { SubqlProjectDs } from '../configure/SubqueryProject';\n\nexport function isBaseHandler(\n handler: SubqlHandler,\n): handler is SubqlRuntimeHandler {\n return Object.values<string>(EthereumHandlerKind).includes(handler.kind);\n}\n\nexport function isCustomHandler(\n handler: SubqlHandler,\n): handler is SubqlCustomHandler {\n return !isBaseHandler(handler);\n}\n\nexport async function updateDataSourcesV1_0_0(\n _dataSources: SubqlDatasource[],\n reader: Reader,\n root: string,\n): Promise<SubqlProjectDs[]> {\n // force convert to updated ds\n return Promise.all(\n // Cast to any to make types happy\n _dataSources.map(async (dataSource) => {\n if ((dataSource.kind as string) === 'flare/Runtime') {\n dataSource.kind = EthereumDatasourceKind.Runtime;\n }\n dataSource.mapping.handlers = dataSource.mapping.handlers.map(\n (handler) => {\n switch (handler.kind as string) {\n case 'flare/BlockHandler': {\n handler.kind = EthereumHandlerKind.Block;\n break;\n }\n case 'flare/TransactionHandler': {\n handler.kind = EthereumHandlerKind.Call;\n break;\n }\n case 'flare/LogHandler': {\n handler.kind = EthereumHandlerKind.Event;\n break;\n }\n default:\n }\n\n return handler;\n },\n );\n\n const entryScript = await loadDataSourceScript(\n reader,\n dataSource.mapping.file,\n );\n const file = await updateDataSourcesEntry(\n reader,\n dataSource.mapping.file,\n root,\n entryScript,\n );\n if (dataSource.assets) {\n for (const [, asset] of Object.entries(dataSource.assets)) {\n if (reader instanceof LocalReader) {\n asset.file = path.resolve(root, asset.file);\n } else {\n const res = await reader.getFile(asset.file);\n const outputPath = path.resolve(\n root,\n asset.file.replace('ipfs://', ''),\n );\n await fs.promises.writeFile(outputPath, res as string);\n asset.file = outputPath;\n }\n }\n }\n if (isCustomDs(dataSource)) {\n if (dataSource.processor) {\n dataSource.processor.file = await updateProcessor(\n reader,\n root,\n dataSource.processor.file,\n );\n }\n if (dataSource.assets) {\n for (const [, asset] of dataSource.assets) {\n if (reader instanceof LocalReader) {\n asset.file = path.resolve(root, asset.file);\n } else {\n const res = await reader.getFile(asset.file);\n const outputPath = path.resolve(\n root,\n asset.file.replace('ipfs://', ''),\n );\n await fs.promises.writeFile(outputPath, res as string);\n asset.file = outputPath;\n }\n }\n }\n return {\n ...dataSource,\n mapping: { ...dataSource.mapping, entryScript, file },\n };\n } else {\n return {\n ...dataSource,\n mapping: { ...dataSource.mapping, entryScript, file },\n };\n }\n }),\n );\n}\n\nconst handledErrors = ['timeout'];\n// eslint-disable-next-line @typescript-eslint/require-await\nexport async function retryOnFailEth<T>(\n request: () => Promise<T>,\n errors = handledErrors,\n): Promise<T> {\n return retryOnFail(request, (e) => !!errors.find((t) => t === e?.reason));\n}\n\nexport function onlyHasLogDataSources(dataSources: SubqlProjectDs[]): boolean {\n for (const ds of dataSources) {\n for (const handler of ds.mapping.handlers) {\n if (\n handler.kind !== SubqlEthereumHandlerKind.EthEvent &&\n handler.kind !== SubqlEthereumHandlerKind.FlareEvent\n ) {\n return false;\n }\n }\n }\n\n return true;\n}\n"]}
|