@ethberry/nestjs-ethers 8.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +20 -0
  3. package/dist/ethers.constants.d.ts +4 -0
  4. package/dist/ethers.constants.js +8 -0
  5. package/dist/ethers.constants.js.map +1 -0
  6. package/dist/ethers.module.d.ts +12 -0
  7. package/dist/ethers.module.js +44 -0
  8. package/dist/ethers.module.js.map +1 -0
  9. package/dist/ethers.service.d.ts +31 -0
  10. package/dist/ethers.service.js +191 -0
  11. package/dist/ethers.service.js.map +1 -0
  12. package/dist/ethers.service.spec.d.ts +5 -0
  13. package/dist/ethers.service.spec.js +288 -0
  14. package/dist/ethers.service.spec.js.map +1 -0
  15. package/dist/index.d.ts +5 -0
  16. package/dist/index.js +22 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/interfaces/contract.d.ts +7 -0
  19. package/dist/interfaces/contract.js +3 -0
  20. package/dist/interfaces/contract.js.map +1 -0
  21. package/dist/interfaces/index.d.ts +3 -0
  22. package/dist/interfaces/index.js +20 -0
  23. package/dist/interfaces/index.js.map +1 -0
  24. package/dist/interfaces/log.d.ts +8 -0
  25. package/dist/interfaces/log.js +3 -0
  26. package/dist/interfaces/log.js.map +1 -0
  27. package/dist/interfaces/module.d.ts +7 -0
  28. package/dist/interfaces/module.js +3 -0
  29. package/dist/interfaces/module.js.map +1 -0
  30. package/dist/providers/index.d.ts +2 -0
  31. package/dist/providers/index.js +19 -0
  32. package/dist/providers/index.js.map +1 -0
  33. package/dist/providers/rpc.d.ts +7 -0
  34. package/dist/providers/rpc.js +17 -0
  35. package/dist/providers/rpc.js.map +1 -0
  36. package/dist/providers/signer.d.ts +7 -0
  37. package/dist/providers/signer.js +15 -0
  38. package/dist/providers/signer.js.map +1 -0
  39. package/dist/utils/block-await.d.ts +3 -0
  40. package/dist/utils/block-await.js +26 -0
  41. package/dist/utils/block-await.js.map +1 -0
  42. package/dist/utils/decode-result.d.ts +2 -0
  43. package/dist/utils/decode-result.js +21 -0
  44. package/dist/utils/decode-result.js.map +1 -0
  45. package/dist/utils/decode-result.spec.d.ts +1 -0
  46. package/dist/utils/decode-result.spec.js +27 -0
  47. package/dist/utils/decode-result.spec.js.map +1 -0
  48. package/dist/utils/get-past-events.d.ts +2 -0
  49. package/dist/utils/get-past-events.js +39 -0
  50. package/dist/utils/get-past-events.js.map +1 -0
  51. package/dist/utils/patch-bigint.d.ts +1 -0
  52. package/dist/utils/patch-bigint.js +16 -0
  53. package/dist/utils/patch-bigint.js.map +1 -0
  54. package/package.json +77 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 EthBerry Studio
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,20 @@
1
+ # NestJS Ethers Transport
2
+
3
+ Ethereum transport routes blockchain events directly to controllers
4
+
5
+ ## Installation
6
+
7
+ ```shell script
8
+ $ npm i --save @ethberry/nestjs-ethers
9
+ ```
10
+
11
+ ### Code quality
12
+
13
+ ```sh
14
+ docker compose up -d
15
+ npm t
16
+ ```
17
+
18
+ ### How to use:
19
+
20
+ Check [ethers.service.spec.ts](src/ethers.service.spec.ts)
@@ -0,0 +1,4 @@
1
+ export declare const ETHERS_WS: unique symbol;
2
+ export declare const ETHERS_RPC: unique symbol;
3
+ export declare const ETHERS_SIGNER: unique symbol;
4
+ export declare const MODULE_OPTIONS_PROVIDER: unique symbol;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MODULE_OPTIONS_PROVIDER = exports.ETHERS_SIGNER = exports.ETHERS_RPC = exports.ETHERS_WS = void 0;
4
+ exports.ETHERS_WS = Symbol("ETHERS_WS");
5
+ exports.ETHERS_RPC = Symbol("ETHERS_RPC");
6
+ exports.ETHERS_SIGNER = Symbol("ETHERS_SIGNER");
7
+ exports.MODULE_OPTIONS_PROVIDER = Symbol("MODULE_OPTIONS_PROVIDER");
8
+ //# sourceMappingURL=ethers.constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ethers.constants.js","sourceRoot":"","sources":["../src/ethers.constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AAChC,QAAA,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;AAClC,QAAA,aAAa,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;AACxC,QAAA,uBAAuB,GAAG,MAAM,CAAC,yBAAyB,CAAC,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { DynamicModule, OnModuleDestroy, OnModuleInit } from "@nestjs/common";
2
+ import { EthersService } from "./ethers.service";
3
+ import { IModuleOptions } from "./interfaces";
4
+ declare const EthersModule_base: import("@golevelup/nestjs-modules").IConfigurableDynamicRootModule<EthersModule, IModuleOptions>;
5
+ export declare class EthersModule extends EthersModule_base implements OnModuleInit, OnModuleDestroy {
6
+ private readonly ethersContractService;
7
+ constructor(ethersContractService: EthersService);
8
+ static deferred: () => Promise<DynamicModule>;
9
+ onModuleInit(): void;
10
+ onModuleDestroy(): void;
11
+ }
12
+ export {};
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ 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;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var EthersModule_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.EthersModule = void 0;
14
+ const common_1 = require("@nestjs/common");
15
+ const config_1 = require("@nestjs/config");
16
+ const schedule_1 = require("@nestjs/schedule");
17
+ const nestjs_modules_1 = require("@golevelup/nestjs-modules");
18
+ const nestjs_discovery_1 = require("@golevelup/nestjs-discovery");
19
+ const providers_1 = require("./providers");
20
+ const ethers_service_1 = require("./ethers.service");
21
+ const ethers_constants_1 = require("./ethers.constants");
22
+ let EthersModule = EthersModule_1 = class EthersModule extends (0, nestjs_modules_1.createConfigurableDynamicRootModule)(ethers_constants_1.MODULE_OPTIONS_PROVIDER) {
23
+ constructor(ethersContractService) {
24
+ super();
25
+ this.ethersContractService = ethersContractService;
26
+ }
27
+ onModuleInit() {
28
+ return this.ethersContractService.init();
29
+ }
30
+ onModuleDestroy() {
31
+ return this.ethersContractService.destroy();
32
+ }
33
+ };
34
+ exports.EthersModule = EthersModule;
35
+ EthersModule.deferred = () => EthersModule_1.externallyConfigured(EthersModule_1, 0);
36
+ exports.EthersModule = EthersModule = EthersModule_1 = __decorate([
37
+ (0, common_1.Module)({
38
+ imports: [config_1.ConfigModule, nestjs_discovery_1.DiscoveryModule, schedule_1.ScheduleModule.forRoot()],
39
+ providers: [providers_1.ethersRpcProvider, common_1.Logger, ethers_service_1.EthersService],
40
+ exports: [ethers_service_1.EthersService],
41
+ }),
42
+ __metadata("design:paramtypes", [ethers_service_1.EthersService])
43
+ ], EthersModule);
44
+ //# sourceMappingURL=ethers.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ethers.module.js","sourceRoot":"","sources":["../src/ethers.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAA8F;AAC9F,2CAA8C;AAC9C,+CAAkD;AAClD,8DAAgF;AAChF,kEAA8D;AAE9D,2CAAgD;AAChD,qDAAiD;AAEjD,yDAA6D;AAOtD,IAAM,YAAY,oBAAlB,MAAM,YACX,SAAQ,IAAA,oDAAmC,EAA+B,0CAAuB,CAAC;IAGlG,YAA6B,qBAAoC;QAC/D,KAAK,EAAE,CAAC;QADmB,0BAAqB,GAArB,qBAAqB,CAAe;IAEjE,CAAC;IAIM,YAAY;QACjB,OAAO,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,CAAC;IAC3C,CAAC;IAEM,eAAe;QACpB,OAAO,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,CAAC;IAC9C,CAAC;;AAhBU,oCAAY;AAQhB,qBAAQ,GAAG,GAA2B,EAAE,CAAC,cAAY,CAAC,oBAAoB,CAAC,cAAY,EAAE,CAAC,CAAC,AAAnF,CAAoF;uBARxF,YAAY;IALxB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,qBAAY,EAAE,kCAAe,EAAE,yBAAc,CAAC,OAAO,EAAE,CAAC;QAClE,SAAS,EAAE,CAAC,6BAAiB,EAAE,eAAM,EAAE,8BAAa,CAAC;QACrD,OAAO,EAAE,CAAC,8BAAa,CAAC;KACzB,CAAC;qCAKoD,8BAAa;GAJtD,YAAY,CAiBxB"}
@@ -0,0 +1,31 @@
1
+ import { LoggerService } from "@nestjs/common";
2
+ import { ConfigService } from "@nestjs/config";
3
+ import { SchedulerRegistry } from "@nestjs/schedule";
4
+ import { Observable } from "rxjs";
5
+ import { JsonRpcProvider, Log } from "ethers";
6
+ import { DiscoveredMethodWithMeta, DiscoveryService } from "@golevelup/nestjs-discovery";
7
+ import { IContractOptions, ILogEvent, IModuleOptions } from "./interfaces";
8
+ export declare class EthersService {
9
+ protected readonly loggerService: LoggerService;
10
+ protected readonly provider: JsonRpcProvider;
11
+ protected readonly discoveryService: DiscoveryService;
12
+ protected readonly configService: ConfigService;
13
+ protected options: IModuleOptions;
14
+ private schedulerRegistry;
15
+ private instanceId;
16
+ private cronLock;
17
+ private registry;
18
+ private subject;
19
+ constructor(loggerService: LoggerService, provider: JsonRpcProvider, discoveryService: DiscoveryService, configService: ConfigService, options: IModuleOptions, schedulerRegistry: SchedulerRegistry);
20
+ init(): void;
21
+ setCronJob(): void;
22
+ listen(): Promise<void>;
23
+ getPastEvents(registry: Array<IContractOptions>, fromBlock: number, toBlock: number): Promise<void>;
24
+ updateRegistry(contract: IContractOptions): void;
25
+ updateRegistryAndReadBlock(contract: IContractOptions, blockNumber: number): Promise<void>;
26
+ getRegistry(): Array<IContractOptions>;
27
+ getLastBlock(): Promise<number>;
28
+ protected getHandlerByPattern<T extends Array<Record<string, string>>>(route: string): Promise<Array<DiscoveredMethodWithMeta<T>>>;
29
+ protected call(pattern: Record<string, string>, description: ILogEvent, context?: Log): Promise<Observable<any>>;
30
+ destroy(): void;
31
+ }
@@ -0,0 +1,191 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ 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;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var EthersService_1;
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.EthersService = void 0;
17
+ const common_1 = require("@nestjs/common");
18
+ const config_1 = require("@nestjs/config");
19
+ const utils_1 = require("@nestjs/microservices/utils");
20
+ const constants_1 = require("@nestjs/microservices/constants");
21
+ const schedule_1 = require("@nestjs/schedule");
22
+ const cron_1 = require("cron");
23
+ const rxjs_1 = require("rxjs");
24
+ const operators_1 = require("rxjs/operators");
25
+ const ethers_1 = require("ethers");
26
+ const nestjs_discovery_1 = require("@golevelup/nestjs-discovery");
27
+ const get_past_events_1 = require("./utils/get-past-events");
28
+ const ethers_constants_1 = require("./ethers.constants");
29
+ const decode_result_1 = require("./utils/decode-result");
30
+ let EthersService = EthersService_1 = class EthersService {
31
+ constructor(loggerService, provider, discoveryService, configService, options, schedulerRegistry) {
32
+ this.loggerService = loggerService;
33
+ this.provider = provider;
34
+ this.discoveryService = discoveryService;
35
+ this.configService = configService;
36
+ this.options = options;
37
+ this.schedulerRegistry = schedulerRegistry;
38
+ this.cronLock = false;
39
+ this.registry = [];
40
+ this.subject = new rxjs_1.Subject();
41
+ this.subject
42
+ .pipe((0, operators_1.mergeMap)(({ pattern, description, log }) => (0, rxjs_1.from)(this.call(pattern, description, log)).pipe((0, operators_1.mergeAll)()), 1))
43
+ .subscribe({
44
+ next: v => {
45
+ loggerService.log(v, `${EthersService_1.name}-${this.instanceId}`);
46
+ },
47
+ error: e => {
48
+ loggerService.error(e);
49
+ },
50
+ complete: () => {
51
+ loggerService.log("complete", `${EthersService_1.name}-${this.instanceId}`);
52
+ },
53
+ });
54
+ }
55
+ init() {
56
+ // generate instance id
57
+ this.instanceId = (Math.random() + 1).toString(36).substring(7);
58
+ // setup cron job
59
+ return this.setCronJob();
60
+ }
61
+ setCronJob() {
62
+ const job = new cron_1.CronJob(this.options.cron, async () => {
63
+ // if previous cron task still running - skip
64
+ if (this.cronLock) {
65
+ return;
66
+ }
67
+ this.cronLock = true;
68
+ await this.listen();
69
+ this.cronLock = false;
70
+ });
71
+ this.schedulerRegistry.addCronJob(`ethListener_${this.instanceId}`, job);
72
+ job.start();
73
+ }
74
+ async listen() {
75
+ // wait while the system is configured
76
+ if (!this.registry.length) {
77
+ return;
78
+ }
79
+ const toBlock = (await this.getLastBlock()) - this.options.latency;
80
+ // waiting for confirmation
81
+ if (this.options.fromBlock > toBlock) {
82
+ return;
83
+ }
84
+ this.loggerService.log(`getPastEvents No: ${this.options.fromBlock} - ${toBlock}`, `${EthersService_1.name}-${this.instanceId}`);
85
+ await this.getPastEvents(this.registry, this.options.fromBlock, toBlock);
86
+ this.options.fromBlock = toBlock + 1;
87
+ }
88
+ async getPastEvents(registry, fromBlock, toBlock) {
89
+ const allAddress = registry.reduce((memo, current) => memo.concat(current.contractAddress), []);
90
+ const allSignatures = registry.reduce((memo, current) => memo.concat(current.eventSignatures), []);
91
+ const logs = await (0, get_past_events_1.getPastEvents)(this.provider, allAddress, allSignatures, fromBlock, toBlock, 100).catch(e => {
92
+ this.loggerService.error(JSON.stringify(e, null, "\t"), `${EthersService_1.name}-${this.instanceId}`);
93
+ return [];
94
+ });
95
+ for (const log of logs) {
96
+ const contract = registry.find(e => e.contractAddress.map(a => a.toLowerCase()).includes(log.address.toLowerCase()));
97
+ if (!contract) {
98
+ continue;
99
+ }
100
+ const logDescription = contract.contractInterface.parseLog(log);
101
+ // LOG PROBLEMS IF ANY
102
+ if (!logDescription) {
103
+ if (this.options.debug) {
104
+ this.loggerService.log("CAN'T PARSE LOG", `${EthersService_1.name}-${this.instanceId}`);
105
+ this.loggerService.log(JSON.stringify(log, null, "\t"), `${EthersService_1.name}-${this.instanceId}`);
106
+ }
107
+ continue;
108
+ }
109
+ this.loggerService.log(JSON.stringify(logDescription, null, "\t"), `${EthersService_1.name}-${this.instanceId}`);
110
+ this.subject.next({
111
+ pattern: {
112
+ contractType: contract.contractType,
113
+ eventName: logDescription.name,
114
+ },
115
+ description: logDescription,
116
+ log,
117
+ });
118
+ }
119
+ }
120
+ updateRegistry(contract) {
121
+ const entry = this.registry.find(e => e.contractType === contract.contractType);
122
+ if (entry) {
123
+ entry.contractAddress = [...new Set([...entry.contractAddress, ...contract.contractAddress])];
124
+ entry.eventSignatures = [...new Set([...entry.eventSignatures, ...contract.eventSignatures])];
125
+ }
126
+ else {
127
+ this.registry.push(contract);
128
+ }
129
+ this.loggerService.log(`ETH Listener updated: ${contract.contractAddress.join(", ")}`, `${EthersService_1.name}-${this.instanceId}`);
130
+ }
131
+ async updateRegistryAndReadBlock(contract, blockNumber) {
132
+ this.updateRegistry(contract);
133
+ await this.getPastEvents([contract], blockNumber, blockNumber);
134
+ }
135
+ getRegistry() {
136
+ return this.registry;
137
+ }
138
+ async getLastBlock() {
139
+ return await this.provider.getBlockNumber().catch(err => {
140
+ this.loggerService.error(JSON.stringify(err, null, "\t"), `${EthersService_1.name}-${this.instanceId}`);
141
+ return 0;
142
+ });
143
+ }
144
+ async getHandlerByPattern(route) {
145
+ const methods = await this.discoveryService.controllerMethodsWithMetaAtKey(constants_1.PATTERN_METADATA);
146
+ return methods.filter(method => {
147
+ return method.meta.some(meta => (0, utils_1.transformPatternToRoute)(meta) === route);
148
+ });
149
+ }
150
+ async call(pattern, description, context) {
151
+ const route = (0, utils_1.transformPatternToRoute)(pattern);
152
+ const discoveredMethodsWithMeta = await this.getHandlerByPattern(route);
153
+ if (!discoveredMethodsWithMeta.length) {
154
+ this.loggerService.log(`Handler not found for: ${route}`, `${EthersService_1.name}-${this.instanceId}`);
155
+ return Promise.resolve(rxjs_1.EMPTY);
156
+ }
157
+ // LogDescription.args are readonly =(
158
+ // We need to decode ethers.Result to get { key: values }
159
+ const decoded = {
160
+ fragment: description.fragment,
161
+ name: description.name,
162
+ signature: description.signature,
163
+ topic: description.topic,
164
+ args: (0, decode_result_1.recursivelyDecodeResult)(description.args),
165
+ };
166
+ return Promise.allSettled(discoveredMethodsWithMeta.map(discoveredMethodWithMeta => {
167
+ return discoveredMethodWithMeta.discoveredMethod.handler.bind(discoveredMethodWithMeta.discoveredMethod.parentClass.instance)(decoded, context);
168
+ })).then(res => {
169
+ res.forEach(r => {
170
+ if (r.status === "rejected") {
171
+ this.loggerService.error(r.reason, `${EthersService_1.name}-${this.instanceId}`);
172
+ }
173
+ });
174
+ return (0, rxjs_1.from)(["OK"]);
175
+ });
176
+ }
177
+ destroy() {
178
+ this.subject.complete();
179
+ }
180
+ };
181
+ exports.EthersService = EthersService;
182
+ exports.EthersService = EthersService = EthersService_1 = __decorate([
183
+ (0, common_1.Injectable)(),
184
+ __param(0, (0, common_1.Inject)(common_1.Logger)),
185
+ __param(1, (0, common_1.Inject)(ethers_constants_1.ETHERS_RPC)),
186
+ __param(4, (0, common_1.Inject)(ethers_constants_1.MODULE_OPTIONS_PROVIDER)),
187
+ __metadata("design:paramtypes", [Object, ethers_1.JsonRpcProvider,
188
+ nestjs_discovery_1.DiscoveryService,
189
+ config_1.ConfigService, Object, schedule_1.SchedulerRegistry])
190
+ ], EthersService);
191
+ //# sourceMappingURL=ethers.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ethers.service.js","sourceRoot":"","sources":["../src/ethers.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare enum ContractType {
2
+ EXCHANGE = "EXCHANGE",
3
+ ERC20_TOKEN = "ERC20_TOKEN",
4
+ ERC721_TOKEN = "ERC721_TOKEN"
5
+ }
@@ -0,0 +1,288 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ 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;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var __importDefault = (this && this.__importDefault) || function (mod) {
15
+ return (mod && mod.__esModule) ? mod : { "default": mod };
16
+ };
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.ContractType = void 0;
19
+ const common_1 = require("@nestjs/common");
20
+ const config_1 = require("@nestjs/config");
21
+ const testing_1 = require("@nestjs/testing");
22
+ const microservices_1 = require("@nestjs/microservices");
23
+ const schedule_1 = require("@nestjs/schedule");
24
+ const ethers_1 = require("ethers");
25
+ const dotenv_1 = require("dotenv");
26
+ const patch_bigint_1 = require("./utils/patch-bigint");
27
+ const block_await_1 = require("./utils/block-await");
28
+ const ethers_module_1 = require("./ethers.module");
29
+ const ethers_service_1 = require("./ethers.service");
30
+ const ERC20Ownable_json_1 = __importDefault(require("./contracts/ERC20Ownable.json"));
31
+ const ERC721Ownable_json_1 = __importDefault(require("./contracts/ERC721Ownable.json"));
32
+ const Exchange_json_1 = __importDefault(require("./contracts/Exchange.json"));
33
+ var ContractType;
34
+ (function (ContractType) {
35
+ ContractType["EXCHANGE"] = "EXCHANGE";
36
+ ContractType["ERC20_TOKEN"] = "ERC20_TOKEN";
37
+ ContractType["ERC721_TOKEN"] = "ERC721_TOKEN";
38
+ })(ContractType || (exports.ContractType = ContractType = {}));
39
+ (0, dotenv_1.config)();
40
+ (0, patch_bigint_1.patchBigInt)();
41
+ const AMOUNT = 10000000n;
42
+ const TOKEN_ID = 1n;
43
+ let TestEthersService = class TestEthersService {
44
+ constructor(ethersContractService) {
45
+ this.ethersContractService = ethersContractService;
46
+ }
47
+ updateListener(contract) {
48
+ return this.ethersContractService.updateRegistry(contract);
49
+ }
50
+ getRegistry() {
51
+ return this.ethersContractService.getRegistry();
52
+ }
53
+ async logEvent(event, ctx) {
54
+ // console.info("event", event.name);
55
+ // console.info("args", JSON.stringify(event.args));
56
+ // console.info("ctx", ctx);
57
+ // console.info(
58
+ // parseInt(ctx.blockNumber.toString(), 16),
59
+ // parseInt(ctx.transactionIndex.toString(), 16),
60
+ // parseInt(ctx.logIndex.toString(), 16), // logIndex is not present in ethers types
61
+ // );
62
+ await Promise.resolve({ event, ctx });
63
+ }
64
+ };
65
+ TestEthersService = __decorate([
66
+ (0, common_1.Injectable)(),
67
+ __metadata("design:paramtypes", [ethers_service_1.EthersService])
68
+ ], TestEthersService);
69
+ let TestEthersController = class TestEthersController {
70
+ constructor(testEthersService) {
71
+ this.testEthersService = testEthersService;
72
+ }
73
+ logEvent1(event, ctx) {
74
+ return this.testEthersService.logEvent(event, ctx);
75
+ }
76
+ logEvent2(event, ctx) {
77
+ return this.testEthersService.logEvent(event, ctx);
78
+ }
79
+ logEvent3(event, ctx) {
80
+ return this.testEthersService.logEvent(event, ctx);
81
+ }
82
+ logEvent4(event, ctx) {
83
+ return this.testEthersService.logEvent(event, ctx);
84
+ }
85
+ logEvent5(event, ctx) {
86
+ return this.testEthersService.logEvent(event, ctx);
87
+ }
88
+ logEvent6(event, ctx) {
89
+ return this.testEthersService.logEvent(event, ctx);
90
+ }
91
+ logEvent7(event, ctx) {
92
+ return this.testEthersService.logEvent(event, ctx);
93
+ }
94
+ };
95
+ __decorate([
96
+ (0, microservices_1.EventPattern)([
97
+ {
98
+ contractType: ContractType.ERC20_TOKEN,
99
+ eventName: "OwnershipTransferred",
100
+ },
101
+ {
102
+ contractType: ContractType.ERC721_TOKEN,
103
+ eventName: "OwnershipTransferred",
104
+ },
105
+ ]),
106
+ __param(0, (0, microservices_1.Payload)()),
107
+ __param(1, (0, microservices_1.Ctx)()),
108
+ __metadata("design:type", Function),
109
+ __metadata("design:paramtypes", [Object, ethers_1.Log]),
110
+ __metadata("design:returntype", Promise)
111
+ ], TestEthersController.prototype, "logEvent1", null);
112
+ __decorate([
113
+ (0, microservices_1.EventPattern)({
114
+ contractType: ContractType.ERC20_TOKEN,
115
+ eventName: "Approval",
116
+ }),
117
+ __param(0, (0, microservices_1.Payload)()),
118
+ __param(1, (0, microservices_1.Ctx)()),
119
+ __metadata("design:type", Function),
120
+ __metadata("design:paramtypes", [Object, ethers_1.Log]),
121
+ __metadata("design:returntype", Promise)
122
+ ], TestEthersController.prototype, "logEvent2", null);
123
+ __decorate([
124
+ (0, microservices_1.EventPattern)({
125
+ contractType: ContractType.ERC20_TOKEN,
126
+ eventName: "Transfer",
127
+ }),
128
+ __param(0, (0, microservices_1.Payload)()),
129
+ __param(1, (0, microservices_1.Ctx)()),
130
+ __metadata("design:type", Function),
131
+ __metadata("design:paramtypes", [Object, ethers_1.Log]),
132
+ __metadata("design:returntype", Promise)
133
+ ], TestEthersController.prototype, "logEvent3", null);
134
+ __decorate([
135
+ (0, microservices_1.EventPattern)({
136
+ contractType: ContractType.ERC721_TOKEN,
137
+ eventName: "Approval",
138
+ }),
139
+ __param(0, (0, microservices_1.Payload)()),
140
+ __param(1, (0, microservices_1.Ctx)()),
141
+ __metadata("design:type", Function),
142
+ __metadata("design:paramtypes", [Object, ethers_1.Log]),
143
+ __metadata("design:returntype", Promise)
144
+ ], TestEthersController.prototype, "logEvent4", null);
145
+ __decorate([
146
+ (0, microservices_1.EventPattern)({
147
+ contractType: ContractType.ERC721_TOKEN,
148
+ eventName: "Transfer",
149
+ }),
150
+ __param(0, (0, microservices_1.Payload)()),
151
+ __param(1, (0, microservices_1.Ctx)()),
152
+ __metadata("design:type", Function),
153
+ __metadata("design:paramtypes", [Object, ethers_1.Log]),
154
+ __metadata("design:returntype", Promise)
155
+ ], TestEthersController.prototype, "logEvent5", null);
156
+ __decorate([
157
+ (0, microservices_1.EventPattern)({
158
+ contractType: ContractType.EXCHANGE,
159
+ eventName: "Swap",
160
+ }),
161
+ __param(0, (0, microservices_1.Payload)()),
162
+ __param(1, (0, microservices_1.Ctx)()),
163
+ __metadata("design:type", Function),
164
+ __metadata("design:paramtypes", [Object, ethers_1.Log]),
165
+ __metadata("design:returntype", Promise)
166
+ ], TestEthersController.prototype, "logEvent6", null);
167
+ __decorate([
168
+ (0, microservices_1.EventPattern)({
169
+ contractType: ContractType.EXCHANGE,
170
+ eventName: "Swap",
171
+ }),
172
+ __param(0, (0, microservices_1.Payload)()),
173
+ __param(1, (0, microservices_1.Ctx)()),
174
+ __metadata("design:type", Function),
175
+ __metadata("design:paramtypes", [Object, ethers_1.Log]),
176
+ __metadata("design:returntype", Promise)
177
+ ], TestEthersController.prototype, "logEvent7", null);
178
+ TestEthersController = __decorate([
179
+ (0, common_1.Controller)(),
180
+ __metadata("design:paramtypes", [TestEthersService])
181
+ ], TestEthersController);
182
+ let TestEthersModule = class TestEthersModule {
183
+ };
184
+ TestEthersModule = __decorate([
185
+ (0, common_1.Module)({
186
+ imports: [ethers_module_1.EthersModule.deferred()],
187
+ providers: [TestEthersService],
188
+ controllers: [TestEthersController],
189
+ exports: [TestEthersService],
190
+ })
191
+ ], TestEthersModule);
192
+ describe("EthersServer", function () {
193
+ // https://github.com/facebook/jest/issues/11543
194
+ jest.setTimeout(100000);
195
+ let logSpyContract;
196
+ let testEthersContractService;
197
+ beforeEach(async function () {
198
+ const module = await testing_1.Test.createTestingModule({
199
+ imports: [
200
+ config_1.ConfigModule.forRoot({
201
+ envFilePath: `.env`,
202
+ }),
203
+ ethers_module_1.EthersModule.forRootAsync(ethers_module_1.EthersModule, {
204
+ imports: [config_1.ConfigModule],
205
+ inject: [config_1.ConfigService],
206
+ useFactory: async (configService) => {
207
+ const latency = ~~configService.get("LATENCY", "1");
208
+ const fromBlock = ~~configService.get("STARTING_BLOCK", "0");
209
+ return Promise.resolve({
210
+ latency,
211
+ fromBlock,
212
+ toBlock: Number.NaN,
213
+ debug: true,
214
+ cron: schedule_1.CronExpression.EVERY_5_SECONDS,
215
+ });
216
+ },
217
+ }),
218
+ TestEthersModule,
219
+ ],
220
+ }).compile();
221
+ testEthersContractService = module.get(TestEthersService);
222
+ logSpyContract = jest.spyOn(testEthersContractService, "logEvent");
223
+ await module.init();
224
+ });
225
+ afterEach(function () {
226
+ logSpyContract.mockClear();
227
+ });
228
+ it("should receive Event", async function () {
229
+ const provider = new ethers_1.JsonRpcProvider(process.env.JSON_RPC_ADDR);
230
+ const wallet = new ethers_1.Wallet(process.env.PRIVATE_KEY, provider);
231
+ const exchangeFactory = new ethers_1.ContractFactory(Exchange_json_1.default.abi, Exchange_json_1.default.bytecode, wallet);
232
+ const exchangeContract = await exchangeFactory.deploy();
233
+ await exchangeContract.waitForDeployment();
234
+ const priceFactory = new ethers_1.ContractFactory(ERC20Ownable_json_1.default.abi, ERC20Ownable_json_1.default.bytecode, wallet);
235
+ const priceContract = await priceFactory.deploy("name", "symbol");
236
+ await priceContract.waitForDeployment();
237
+ const tx1 = await priceContract.mint(process.env.ACCOUNT, AMOUNT);
238
+ await tx1.wait();
239
+ const tx2 = await priceContract.approve(await exchangeContract.getAddress(), AMOUNT);
240
+ await tx2.wait();
241
+ const itemFactory = new ethers_1.ContractFactory(ERC721Ownable_json_1.default.abi, ERC721Ownable_json_1.default.bytecode, wallet);
242
+ const itemContract = await itemFactory.deploy("name", "symbol");
243
+ await itemContract.waitForDeployment();
244
+ const tx3 = await itemContract.mint(process.env.ACCOUNT, TOKEN_ID);
245
+ await tx3.wait();
246
+ const tx4 = await itemContract.approve(await exchangeContract.getAddress(), TOKEN_ID);
247
+ await tx4.wait();
248
+ const tx5 = await exchangeContract.swap({
249
+ account: process.env.ACCOUNT,
250
+ token: await itemContract.getAddress(),
251
+ tokenId: TOKEN_ID,
252
+ }, {
253
+ account: process.env.ACCOUNT,
254
+ token: await priceContract.getAddress(),
255
+ amount: AMOUNT,
256
+ });
257
+ await tx5.wait();
258
+ testEthersContractService.updateListener({
259
+ contractType: ContractType.ERC20_TOKEN,
260
+ contractAddress: [await priceContract.getAddress()],
261
+ contractInterface: new ethers_1.Interface(ERC20Ownable_json_1.default.abi),
262
+ eventSignatures: [
263
+ "Transfer(address,address,uint256)",
264
+ "Approval(address,address,uint256)",
265
+ "OwnershipTransferred(address,address)",
266
+ ],
267
+ });
268
+ testEthersContractService.updateListener({
269
+ contractType: ContractType.ERC721_TOKEN,
270
+ contractAddress: [await itemContract.getAddress()],
271
+ contractInterface: new ethers_1.Interface(ERC721Ownable_json_1.default.abi),
272
+ eventSignatures: [
273
+ "Transfer(address,address,uint256)",
274
+ "Approval(address,address,uint256)",
275
+ "OwnershipTransferred(address,address)",
276
+ ],
277
+ });
278
+ testEthersContractService.updateListener({
279
+ contractType: ContractType.EXCHANGE,
280
+ contractAddress: [await exchangeContract.getAddress()],
281
+ contractInterface: new ethers_1.Interface(Exchange_json_1.default.abi),
282
+ eventSignatures: ["Swap((address,address,uint256),(address,address,uint256))"],
283
+ });
284
+ await (0, block_await_1.waitForConfirmation)(provider, ~~process.env.LATENCY);
285
+ expect(logSpyContract).toBeCalledTimes(10);
286
+ });
287
+ });
288
+ //# sourceMappingURL=ethers.service.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ethers.service.spec.js","sourceRoot":"","sources":["../src/ethers.service.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export * from "./interfaces";
2
+ export * from "./providers";
3
+ export * from "./ethers.constants";
4
+ export * from "./ethers.module";
5
+ export * from "./ethers.service";
package/dist/index.js ADDED
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./interfaces"), exports);
18
+ __exportStar(require("./providers"), exports);
19
+ __exportStar(require("./ethers.constants"), exports);
20
+ __exportStar(require("./ethers.module"), exports);
21
+ __exportStar(require("./ethers.service"), exports);
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA6B;AAC7B,8CAA4B;AAC5B,qDAAmC;AACnC,kDAAgC;AAChC,mDAAiC"}
@@ -0,0 +1,7 @@
1
+ import { Interface } from "ethers";
2
+ export interface IContractOptions {
3
+ contractType: string;
4
+ contractAddress: Array<string>;
5
+ contractInterface: Interface;
6
+ eventSignatures: Array<string>;
7
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract.js","sourceRoot":"","sources":["../../src/interfaces/contract.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ export * from "./module";
2
+ export * from "./contract";
3
+ export * from "./log";
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./module"), exports);
18
+ __exportStar(require("./contract"), exports);
19
+ __exportStar(require("./log"), exports);
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/interfaces/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,6CAA2B;AAC3B,wCAAsB"}
@@ -0,0 +1,8 @@
1
+ import { EventFragment } from "ethers";
2
+ export interface ILogEvent<T = any> {
3
+ fragment: EventFragment;
4
+ name: string;
5
+ signature: string;
6
+ topic: string;
7
+ args: T;
8
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/interfaces/log.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ import { CronExpression } from "@nestjs/schedule";
2
+ export interface IModuleOptions {
3
+ fromBlock: number;
4
+ latency: number;
5
+ debug: boolean;
6
+ cron: CronExpression;
7
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.js","sourceRoot":"","sources":["../../src/interfaces/module.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export * from "./rpc";
2
+ export * from "./signer";
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./rpc"), exports);
18
+ __exportStar(require("./signer"), exports);
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wCAAsB;AACtB,2CAAyB"}
@@ -0,0 +1,7 @@
1
+ import { ConfigService } from "@nestjs/config";
2
+ import { JsonRpcProvider } from "ethers";
3
+ export declare const ethersRpcProvider: {
4
+ provide: symbol;
5
+ inject: (typeof ConfigService)[];
6
+ useFactory: (configService: ConfigService) => JsonRpcProvider;
7
+ };
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ethersRpcProvider = void 0;
4
+ const config_1 = require("@nestjs/config");
5
+ const ethers_1 = require("ethers");
6
+ const ethers_constants_1 = require("../ethers.constants");
7
+ exports.ethersRpcProvider = {
8
+ provide: ethers_constants_1.ETHERS_RPC,
9
+ inject: [config_1.ConfigService],
10
+ useFactory: (configService) => {
11
+ const rpcUrl = configService.get("JSON_RPC_ADDR", "http://127.0.0.1:8545/");
12
+ const chainId = ~~configService.get("CHAIN_ID", "1");
13
+ const network = new ethers_1.Network("Network", chainId);
14
+ return new ethers_1.JsonRpcProvider(rpcUrl, network, { staticNetwork: network, batchMaxCount: 1 });
15
+ },
16
+ };
17
+ //# sourceMappingURL=rpc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc.js","sourceRoot":"","sources":["../../src/providers/rpc.ts"],"names":[],"mappings":";;;AAAA,2CAA+C;AAE/C,mCAAkD;AAElD,0DAAiD;AAEpC,QAAA,iBAAiB,GAAG;IAC/B,OAAO,EAAE,6BAAU;IACnB,MAAM,EAAE,CAAC,sBAAa,CAAC;IACvB,UAAU,EAAE,CAAC,aAA4B,EAAmB,EAAE;QAC5D,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAS,eAAe,EAAE,wBAAwB,CAAC,CAAC;QACpF,MAAM,OAAO,GAAG,CAAC,CAAC,aAAa,CAAC,GAAG,CAAS,UAAU,EAAE,GAAG,CAAC,CAAC;QAC7D,MAAM,OAAO,GAAG,IAAI,gBAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAChD,OAAO,IAAI,wBAAe,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC;IAC5F,CAAC;CACF,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { ConfigService } from "@nestjs/config";
2
+ import { JsonRpcProvider, Wallet } from "ethers";
3
+ export declare const ethersSignerProvider: {
4
+ provide: symbol;
5
+ inject: (symbol | typeof ConfigService)[];
6
+ useFactory: (configService: ConfigService, provider: JsonRpcProvider) => Wallet;
7
+ };
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ethersSignerProvider = void 0;
4
+ const config_1 = require("@nestjs/config");
5
+ const ethers_1 = require("ethers");
6
+ const ethers_constants_1 = require("../ethers.constants");
7
+ exports.ethersSignerProvider = {
8
+ provide: ethers_constants_1.ETHERS_SIGNER,
9
+ inject: [config_1.ConfigService, ethers_constants_1.ETHERS_RPC],
10
+ useFactory: (configService, provider) => {
11
+ const privateKey = configService.get("PRIVATE_KEY", "0x");
12
+ return new ethers_1.Wallet(privateKey, provider);
13
+ },
14
+ };
15
+ //# sourceMappingURL=signer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signer.js","sourceRoot":"","sources":["../../src/providers/signer.ts"],"names":[],"mappings":";;;AAAA,2CAA+C;AAC/C,mCAAiD;AAEjD,0DAAgE;AAEnD,QAAA,oBAAoB,GAAG;IAClC,OAAO,EAAE,gCAAa;IACtB,MAAM,EAAE,CAAC,sBAAa,EAAE,6BAAU,CAAC;IACnC,UAAU,EAAE,CAAC,aAA4B,EAAE,QAAyB,EAAU,EAAE;QAC9E,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAS,aAAa,EAAE,IAAI,CAAC,CAAC;QAClE,OAAO,IAAI,eAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC1C,CAAC;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { JsonRpcProvider } from "ethers";
2
+ export declare function delay(ms?: number): Promise<unknown>;
3
+ export declare const waitForConfirmation: (provider: JsonRpcProvider, blockDelay?: number, millisecondsDelay?: number) => Promise<void>;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.waitForConfirmation = void 0;
4
+ exports.delay = delay;
5
+ const errorMessage = "Unable to retrieve the block number";
6
+ function delay(ms = 0) {
7
+ return new Promise(resolve => setTimeout(resolve, ms));
8
+ }
9
+ const waitForConfirmation = async function (provider, blockDelay = 1, millisecondsDelay = 1000) {
10
+ const initialBlockNumber = await provider.getBlockNumber();
11
+ if (!initialBlockNumber) {
12
+ throw Error(errorMessage);
13
+ }
14
+ while (true) {
15
+ await delay(millisecondsDelay);
16
+ const currentBlockNumber = await provider.getBlockNumber();
17
+ if (!currentBlockNumber) {
18
+ throw new Error(errorMessage);
19
+ }
20
+ if (currentBlockNumber - initialBlockNumber >= blockDelay) {
21
+ break;
22
+ }
23
+ }
24
+ };
25
+ exports.waitForConfirmation = waitForConfirmation;
26
+ //# sourceMappingURL=block-await.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"block-await.js","sourceRoot":"","sources":["../../src/utils/block-await.ts"],"names":[],"mappings":";;;AAIA,sBAEC;AAJD,MAAM,YAAY,GAAG,qCAAqC,CAAC;AAE3D,SAAgB,KAAK,CAAC,EAAE,GAAG,CAAC;IAC1B,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AACzD,CAAC;AAEM,MAAM,mBAAmB,GAAG,KAAK,WACtC,QAAyB,EACzB,UAAU,GAAG,CAAC,EACd,iBAAiB,GAAG,IAAI;IAExB,MAAM,kBAAkB,GAAG,MAAM,QAAQ,CAAC,cAAc,EAAE,CAAC;IAC3D,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxB,MAAM,KAAK,CAAC,YAAY,CAAC,CAAC;IAC5B,CAAC;IAED,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAC/B,MAAM,kBAAkB,GAAG,MAAM,QAAQ,CAAC,cAAc,EAAE,CAAC;QAC3D,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;QAChC,CAAC;QAED,IAAI,kBAAkB,GAAG,kBAAkB,IAAI,UAAU,EAAE,CAAC;YAC1D,MAAM;QACR,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AArBW,QAAA,mBAAmB,uBAqB9B"}
@@ -0,0 +1,2 @@
1
+ import { Result } from "ethers";
2
+ export declare const recursivelyDecodeResult: (result: Result) => Record<string, any>;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.recursivelyDecodeResult = void 0;
4
+ const recursivelyDecodeResult = (result) => {
5
+ if (typeof result !== "object") {
6
+ // Raw primitive
7
+ return result;
8
+ }
9
+ const obj = result.toObject();
10
+ if (obj._) {
11
+ // Array
12
+ return result.toArray().map(item => (0, exports.recursivelyDecodeResult)(item));
13
+ }
14
+ Object.keys(obj).forEach(key => {
15
+ // Object
16
+ obj[key] = (0, exports.recursivelyDecodeResult)(obj[key]);
17
+ });
18
+ return obj;
19
+ };
20
+ exports.recursivelyDecodeResult = recursivelyDecodeResult;
21
+ //# sourceMappingURL=decode-result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decode-result.js","sourceRoot":"","sources":["../../src/utils/decode-result.ts"],"names":[],"mappings":";;;AAEO,MAAM,uBAAuB,GAAG,CAAC,MAAc,EAAuB,EAAE;IAC7E,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,gBAAgB;QAChB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;IAC9B,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC;QACV,QAAQ;QACR,OAAO,MAAM,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAA,+BAAuB,EAAC,IAAI,CAAC,CAAC,CAAC;IACrE,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QAC7B,SAAS;QACT,GAAG,CAAC,GAAG,CAAC,GAAG,IAAA,+BAAuB,EAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAlBW,QAAA,uBAAuB,2BAkBlC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const ethers_1 = require("ethers");
4
+ const ERC721Ownable_json_1 = require("../contracts/ERC721Ownable.json");
5
+ const decode_result_1 = require("./decode-result");
6
+ describe("Ethers", function () {
7
+ it("parseLog", function () {
8
+ const iface = new ethers_1.Interface(ERC721Ownable_json_1.abi);
9
+ const logDescription = iface.parseLog({
10
+ data: "0x",
11
+ topics: [
12
+ "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925",
13
+ "0x000000000000000000000000fe3b557e8fb62b89f4916b721be55ceb828dbd73",
14
+ "0x000000000000000000000000d6a7c915066e17ba18024c799258c8a286ffbc00",
15
+ "0x0000000000000000000000000000000000000000000000000000000000000004",
16
+ ],
17
+ });
18
+ const actual = (0, decode_result_1.recursivelyDecodeResult)(logDescription.args);
19
+ const expected = {
20
+ tokenId: 4n,
21
+ approved: "0xd6A7c915066E17ba18024c799258C8A286fFBc00",
22
+ owner: "0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73",
23
+ };
24
+ expect(actual).toEqual(expected);
25
+ });
26
+ });
27
+ //# sourceMappingURL=decode-result.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decode-result.spec.js","sourceRoot":"","sources":["../../src/utils/decode-result.spec.ts"],"names":[],"mappings":";;AAAA,mCAAmC;AAEnC,wEAAsD;AACtD,mDAA0D;AAE1D,QAAQ,CAAC,QAAQ,EAAE;IACjB,EAAE,CAAC,UAAU,EAAE;QACb,MAAM,KAAK,GAAG,IAAI,kBAAS,CAAC,wBAAG,CAAC,CAAC;QACjC,MAAM,cAAc,GAAG,KAAK,CAAC,QAAQ,CAAC;YACpC,IAAI,EAAE,IAAI;YACV,MAAM,EAAE;gBACN,oEAAoE;gBACpE,oEAAoE;gBACpE,oEAAoE;gBACpE,oEAAoE;aACrE;SACF,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,IAAA,uCAAuB,EAAC,cAAe,CAAC,IAAI,CAAC,CAAC;QAE7D,MAAM,QAAQ,GAAG;YACf,OAAO,EAAE,EAAE;YACX,QAAQ,EAAE,4CAA4C;YACtD,KAAK,EAAE,4CAA4C;SACpD,CAAC;QAEF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { JsonRpcProvider, Log } from "ethers";
2
+ export declare const getPastEvents: (provider: JsonRpcProvider, address: Array<string>, allSignatures: Array<string>, fromBlockNumber: number, toBlockNumber: number, chunkLimit?: number) => Promise<Log[]>;
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getPastEvents = void 0;
4
+ const ethers_1 = require("ethers");
5
+ const getPastEvents = async (provider, address, allSignatures, fromBlockNumber, toBlockNumber, chunkLimit = 0) => {
6
+ const totalBlocks = toBlockNumber - fromBlockNumber;
7
+ const chunks = [];
8
+ if (chunkLimit > 0 && totalBlocks > chunkLimit) {
9
+ const count = Math.ceil(totalBlocks / chunkLimit);
10
+ let startingBlock = fromBlockNumber;
11
+ for (let index = 0; index < count; index++) {
12
+ const fromRangeBlock = startingBlock;
13
+ const toRangeBlock = index === count - 1 ? toBlockNumber : startingBlock + chunkLimit;
14
+ startingBlock = toRangeBlock;
15
+ chunks.push({ fromBlock: fromRangeBlock, toBlock: toRangeBlock });
16
+ }
17
+ }
18
+ else {
19
+ chunks.push({ fromBlock: fromBlockNumber, toBlock: toBlockNumber });
20
+ }
21
+ const topics = [allSignatures.map(signature => (0, ethers_1.keccak256)((0, ethers_1.toUtf8Bytes)(signature)))];
22
+ const events = [];
23
+ for (const chunk of chunks) {
24
+ const logs = await provider.send("eth_getLogs", [
25
+ {
26
+ address,
27
+ topics,
28
+ fromBlock: `0x${chunk.fromBlock.toString(16)}`,
29
+ toBlock: `0x${chunk.toBlock.toString(16)}`,
30
+ },
31
+ ]);
32
+ if (logs?.length) {
33
+ events.push(...logs);
34
+ }
35
+ }
36
+ return events;
37
+ };
38
+ exports.getPastEvents = getPastEvents;
39
+ //# sourceMappingURL=get-past-events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-past-events.js","sourceRoot":"","sources":["../../src/utils/get-past-events.ts"],"names":[],"mappings":";;;AAAA,mCAAsE;AAE/D,MAAM,aAAa,GAAG,KAAK,EAChC,QAAyB,EACzB,OAAsB,EACtB,aAA4B,EAC5B,eAAuB,EACvB,aAAqB,EACrB,UAAU,GAAG,CAAC,EACd,EAAE;IACF,MAAM,WAAW,GAAG,aAAa,GAAG,eAAe,CAAC;IACpD,MAAM,MAAM,GAAG,EAAE,CAAC;IAElB,IAAI,UAAU,GAAG,CAAC,IAAI,WAAW,GAAG,UAAU,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,CAAC;QAClD,IAAI,aAAa,GAAG,eAAe,CAAC;QAEpC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC;YAC3C,MAAM,cAAc,GAAG,aAAa,CAAC;YACrC,MAAM,YAAY,GAAG,KAAK,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,GAAG,UAAU,CAAC;YACtF,aAAa,GAAG,YAAY,CAAC;YAE7B,MAAM,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC;IACtE,CAAC;IACD,MAAM,MAAM,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,IAAA,kBAAS,EAAC,IAAA,oBAAW,EAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAEnF,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAU,MAAM,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE;YACrD;gBACE,OAAO;gBACP,MAAM;gBACN,SAAS,EAAE,KAAK,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;gBAC9C,OAAO,EAAE,KAAK,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;aAC3C;SACF,CAAC,CAAC;QAEH,IAAI,IAAI,EAAE,MAAM,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AA5CW,QAAA,aAAa,iBA4CxB"}
@@ -0,0 +1 @@
1
+ export declare function patchBigInt(): void;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.patchBigInt = patchBigInt;
4
+ function patchBigInt() {
5
+ // https://github.com/GoogleChromeLabs/jsbi/issues/30
6
+ Object.defineProperty(BigInt.prototype, "toJSON", {
7
+ value: function () {
8
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return
9
+ return this.toString();
10
+ },
11
+ configurable: true,
12
+ enumerable: false,
13
+ writable: true,
14
+ });
15
+ }
16
+ //# sourceMappingURL=patch-bigint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patch-bigint.js","sourceRoot":"","sources":["../../src/utils/patch-bigint.ts"],"names":[],"mappings":";;AAAA,kCAYC;AAZD,SAAgB,WAAW;IACzB,qDAAqD;IAErD,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,EAAE;QAChD,KAAK,EAAE;YACL,+DAA+D;YAC/D,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;QACzB,CAAC;QACD,YAAY,EAAE,IAAI;QAClB,UAAU,EAAE,KAAK;QACjB,QAAQ,EAAE,IAAI;KACf,CAAC,CAAC;AACL,CAAC"}
package/package.json ADDED
@@ -0,0 +1,77 @@
1
+ {
2
+ "author": {
3
+ "email": "trejgun@gmail.com",
4
+ "name": "TrejGun",
5
+ "url": "https://ethberry.io/"
6
+ },
7
+ "bugs": {
8
+ "url": "https://github.com/ethberry/nestjs-ethers/issues"
9
+ },
10
+ "dependencies": {
11
+ "@golevelup/nestjs-discovery": "4.0.1",
12
+ "@golevelup/nestjs-modules": "0.7.1",
13
+ "cron": "3.1.7"
14
+ },
15
+ "description": "Ethers transport for NestJS",
16
+ "devDependencies": {
17
+ "@ethberry/eslint-config": "5.0.3",
18
+ "@nestjs/axios": "3.0.3",
19
+ "@nestjs/common": "10.4.4",
20
+ "@nestjs/config": "3.2.3",
21
+ "@nestjs/core": "10.4.4",
22
+ "@nestjs/microservices": "10.4.4",
23
+ "@nestjs/schedule": "4.1.1",
24
+ "@nestjs/terminus": "10.2.3",
25
+ "@nestjs/testing": "10.4.4",
26
+ "@nomiclabs/hardhat-ethers": "2.2.3",
27
+ "@types/jest": "29.5.13",
28
+ "@types/node": "20.16.7",
29
+ "dotenv": "16.4.5",
30
+ "ethers": "6.13.2",
31
+ "husky": "4.3.8",
32
+ "jest": "29.7.0",
33
+ "jest-environment-node": "29.7.0",
34
+ "lint-staged": "15.2.10",
35
+ "prettier": "3.3.3",
36
+ "reflect-metadata": "0.2.2",
37
+ "rimraf": "6.0.1",
38
+ "rxjs": "7.8.1",
39
+ "ts-jest": "29.2.5",
40
+ "typescript": "5.6.2"
41
+ },
42
+ "engines": {
43
+ "node": ">=22"
44
+ },
45
+ "keywords": [],
46
+ "license": "UNLICENSED",
47
+ "main": "dist/index.js",
48
+ "name": "@ethberry/nestjs-ethers",
49
+ "peerDependencies": {
50
+ "@nestjs/axios": "^3.0.0",
51
+ "@nestjs/common": "^10.0.0",
52
+ "@nestjs/config": "^3.0.0",
53
+ "@nestjs/microservices": "^10.0.0",
54
+ "@nestjs/schedule": "^4.0.0",
55
+ "@nestjs/terminus": "^10.0.0",
56
+ "ethers": "^6.0.0",
57
+ "rxjs": "^7.0.0"
58
+ },
59
+ "publishConfig": {
60
+ "registry": "https://npm.pkg.github.com/"
61
+ },
62
+ "repository": {
63
+ "type": "git",
64
+ "url": "git+https://github.com/ethberry/nestjs-ethers.git"
65
+ },
66
+ "scripts": {
67
+ "build": "tsc",
68
+ "lint": "eslint . --fix",
69
+ "prebuild": "rimraf dist/",
70
+ "prepare": "npm run build",
71
+ "prettier": "prettier . --write",
72
+ "test": "jest --detectOpenHandles --runInBand --forceExit"
73
+ },
74
+ "title": "NestJS Ethers module",
75
+ "types": "./dist/index.d.ts",
76
+ "version": "8.0.0"
77
+ }