@ethberry/nestjs-ethers 8.0.3 → 8.0.4

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.
@@ -14,18 +14,19 @@ export declare class EthersService {
14
14
  private schedulerRegistry;
15
15
  private instanceId;
16
16
  private cronLock;
17
+ private toBlock;
17
18
  private registry;
18
19
  private subject;
19
20
  constructor(loggerService: LoggerService, provider: JsonRpcProvider, discoveryService: DiscoveryService, configService: ConfigService, options: IModuleOptions, schedulerRegistry: SchedulerRegistry);
20
21
  init(): void;
21
22
  setCronJob(): void;
22
23
  listen(): Promise<void>;
23
- getPastEvents(registry: Array<IContractOptions>, fromBlock: number, toBlock: number): Promise<void>;
24
+ getPastEvents(registry: Array<IContractOptions>, fromBlock: number, toBlock: number, chunkSize?: number): Promise<void>;
24
25
  updateRegistry(contract: IContractOptions): void;
25
- updateRegistryAndReadBlock(contract: IContractOptions, blockNumber: number): Promise<void>;
26
26
  getRegistry(): Array<IContractOptions>;
27
27
  getLastBlock(): Promise<number>;
28
28
  protected getHandlerByPattern<T extends Array<Record<string, string>>>(route: string): Promise<Array<DiscoveredMethodWithMeta<T>>>;
29
29
  protected call(pattern: Record<string, string>, description: ILogEvent, context?: Log): Promise<Observable<any>>;
30
+ getLastProcessedBlock(): number;
30
31
  destroy(): void;
31
32
  }
@@ -26,7 +26,7 @@ const ethers_1 = require("ethers");
26
26
  const nestjs_discovery_1 = require("@golevelup/nestjs-discovery");
27
27
  const get_past_events_1 = require("./utils/get-past-events");
28
28
  const ethers_constants_1 = require("./ethers.constants");
29
- const decode_result_1 = require("./utils/decode-result");
29
+ const utils_2 = require("./utils");
30
30
  let EthersService = EthersService_1 = class EthersService {
31
31
  constructor(loggerService, provider, discoveryService, configService, options, schedulerRegistry) {
32
32
  this.loggerService = loggerService;
@@ -36,6 +36,7 @@ let EthersService = EthersService_1 = class EthersService {
36
36
  this.options = options;
37
37
  this.schedulerRegistry = schedulerRegistry;
38
38
  this.cronLock = false;
39
+ this.toBlock = 0;
39
40
  this.registry = [];
40
41
  this.subject = new rxjs_1.Subject();
41
42
  this.subject
@@ -76,45 +77,55 @@ let EthersService = EthersService_1 = class EthersService {
76
77
  if (!this.registry.length) {
77
78
  return;
78
79
  }
79
- const toBlock = (await this.getLastBlock()) - this.options.latency;
80
+ this.toBlock = (await this.getLastBlock()) - this.options.latency;
80
81
  // waiting for confirmation
81
- if (this.options.fromBlock > toBlock) {
82
+ if (this.options.fromBlock > this.toBlock) {
82
83
  return;
83
84
  }
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;
85
+ this.loggerService.log(`getPastEvents No: ${this.options.fromBlock} - ${this.toBlock}`, `${EthersService_1.name}-${this.instanceId}`);
86
+ await this.getPastEvents(this.registry, this.options.fromBlock, this.toBlock, this.options.chunkSize);
87
+ this.options.fromBlock = this.toBlock + 1;
87
88
  }
88
- async getPastEvents(registry, fromBlock, toBlock) {
89
+ async getPastEvents(registry, fromBlock, toBlock, chunkSize) {
89
90
  const allAddress = registry.reduce((memo, current) => memo.concat(current.contractAddress), []);
90
91
  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
+ const logs = await (0, get_past_events_1.getPastEvents)(this.provider, allAddress, allSignatures, fromBlock, toBlock, chunkSize).catch(e => {
92
93
  this.loggerService.error(JSON.stringify(e, null, "\t"), `${EthersService_1.name}-${this.instanceId}`);
93
94
  return [];
94
95
  });
95
96
  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}`);
97
+ for (const entry of registry) {
98
+ if (!entry.contractAddress.map(a => a.toLowerCase()).includes(log.address.toLowerCase())) {
99
+ continue;
100
+ }
101
+ const logDescription = entry.contractInterface.parseLog(log);
102
+ // LOG PROBLEMS IF ANY
103
+ if (!logDescription) {
104
+ if (this.options.debug) {
105
+ this.loggerService.log("CAN'T PARSE LOG", `${EthersService_1.name}-${this.instanceId}`);
106
+ this.loggerService.log(JSON.stringify(log, null, "\t"), `${EthersService_1.name}-${this.instanceId}`);
107
+ }
108
+ continue;
106
109
  }
107
- continue;
110
+ this.loggerService.log(JSON.stringify(logDescription, null, "\t"), `${EthersService_1.name}-${this.instanceId}`);
111
+ // LogDescription.args are readonly =(
112
+ // We need to decode ethers.Result to get { key: values }
113
+ const description = {
114
+ fragment: logDescription.fragment,
115
+ name: logDescription.name,
116
+ signature: logDescription.signature,
117
+ topic: logDescription.topic,
118
+ args: (0, utils_2.recursivelyDecodeResult)(logDescription.args),
119
+ };
120
+ this.subject.next({
121
+ pattern: {
122
+ contractType: entry.contractType,
123
+ eventName: description.name,
124
+ },
125
+ description,
126
+ log,
127
+ });
108
128
  }
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
129
  }
119
130
  }
120
131
  updateRegistry(contract) {
@@ -128,10 +139,6 @@ let EthersService = EthersService_1 = class EthersService {
128
139
  }
129
140
  this.loggerService.log(`ETH Listener updated: ${contract.contractAddress.join(", ")}`, `${EthersService_1.name}-${this.instanceId}`);
130
141
  }
131
- async updateRegistryAndReadBlock(contract, blockNumber) {
132
- this.updateRegistry(contract);
133
- await this.getPastEvents([contract], blockNumber, blockNumber);
134
- }
135
142
  getRegistry() {
136
143
  return this.registry;
137
144
  }
@@ -154,17 +161,8 @@ let EthersService = EthersService_1 = class EthersService {
154
161
  this.loggerService.log(`Handler not found for: ${route}`, `${EthersService_1.name}-${this.instanceId}`);
155
162
  return Promise.resolve(rxjs_1.EMPTY);
156
163
  }
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
164
  return Promise.allSettled(discoveredMethodsWithMeta.map(discoveredMethodWithMeta => {
167
- return discoveredMethodWithMeta.discoveredMethod.handler.bind(discoveredMethodWithMeta.discoveredMethod.parentClass.instance)(decoded, context);
165
+ return discoveredMethodWithMeta.discoveredMethod.handler.bind(discoveredMethodWithMeta.discoveredMethod.parentClass.instance)(description, context);
168
166
  })).then(res => {
169
167
  res.forEach(r => {
170
168
  if (r.status === "rejected") {
@@ -174,6 +172,9 @@ let EthersService = EthersService_1 = class EthersService {
174
172
  return (0, rxjs_1.from)(["OK"]);
175
173
  });
176
174
  }
175
+ getLastProcessedBlock() {
176
+ return this.toBlock;
177
+ }
177
178
  destroy() {
178
179
  this.subject.complete();
179
180
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ethers.service.js","sourceRoot":"","sources":["../src/ethers.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ethers.service.js","sourceRoot":"","sources":["../src/ethers.service.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export * from "./interfaces";
2
2
  export * from "./providers";
3
+ export * from "./utils";
3
4
  export * from "./ethers.constants";
4
5
  export * from "./ethers.module";
5
6
  export * from "./ethers.service";
package/dist/index.js CHANGED
@@ -16,6 +16,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./interfaces"), exports);
18
18
  __exportStar(require("./providers"), exports);
19
+ __exportStar(require("./utils"), exports);
19
20
  __exportStar(require("./ethers.constants"), exports);
20
21
  __exportStar(require("./ethers.module"), exports);
21
22
  __exportStar(require("./ethers.service"), exports);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA6B;AAC7B,8CAA4B;AAC5B,qDAAmC;AACnC,kDAAgC;AAChC,mDAAiC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA6B;AAC7B,8CAA4B;AAC5B,0CAAwB;AACxB,qDAAmC;AACnC,kDAAgC;AAChC,mDAAiC"}
@@ -1,8 +1,8 @@
1
1
  import { EventFragment } from "ethers";
2
2
  export interface ILogEvent<T = any> {
3
3
  fragment: EventFragment;
4
- name: string;
5
4
  signature: string;
6
5
  topic: string;
6
+ name: string;
7
7
  args: T;
8
8
  }
@@ -4,4 +4,5 @@ export interface IModuleOptions {
4
4
  latency: number;
5
5
  debug: boolean;
6
6
  cron: CronExpression;
7
+ chunkSize?: number;
7
8
  }
@@ -23,4 +23,4 @@ const waitForConfirmation = async function (provider, blockDelay = 1, millisecon
23
23
  }
24
24
  };
25
25
  exports.waitForConfirmation = waitForConfirmation;
26
- //# sourceMappingURL=block-await.js.map
26
+ //# sourceMappingURL=await-for-confirmation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"await-for-confirmation.js","sourceRoot":"","sources":["../../src/utils/await-for-confirmation.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"}
@@ -3,19 +3,24 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.recursivelyDecodeResult = void 0;
4
4
  const recursivelyDecodeResult = (result) => {
5
5
  if (typeof result !== "object") {
6
- // Raw primitive
6
+ // Raw primitive value
7
7
  return result;
8
8
  }
9
- const obj = result.toObject();
10
- if (obj._) {
11
- // Array
9
+ try {
10
+ const obj = result.toObject();
11
+ if (obj._) {
12
+ throw new Error("Decode as array, not object");
13
+ }
14
+ Object.keys(obj).forEach(key => {
15
+ obj[key] = (0, exports.recursivelyDecodeResult)(obj[key]);
16
+ });
17
+ return obj;
18
+ }
19
+ catch (e) {
20
+ // Result is array.
21
+ void e;
12
22
  return result.toArray().map(item => (0, exports.recursivelyDecodeResult)(item));
13
23
  }
14
- Object.keys(obj).forEach(key => {
15
- // Object
16
- obj[key] = (0, exports.recursivelyDecodeResult)(obj[key]);
17
- });
18
- return obj;
19
24
  };
20
25
  exports.recursivelyDecodeResult = recursivelyDecodeResult;
21
26
  //# sourceMappingURL=decode-result.js.map
@@ -1 +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"}
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,sBAAsB;QACtB,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC9B,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACjD,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YAC7B,GAAG,CAAC,GAAG,CAAC,GAAG,IAAA,+BAAuB,EAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;QACH,OAAO,GAAG,CAAC;IACb,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,mBAAmB;QACnB,KAAK,CAAC,CAAC;QACP,OAAO,MAAM,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAA,+BAAuB,EAAC,IAAc,CAAC,CAAC,CAAC;IAC/E,CAAC;AACH,CAAC,CAAC;AAnBW,QAAA,uBAAuB,2BAmBlC"}
@@ -1,2 +1,2 @@
1
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[]>;
2
+ export declare const getPastEvents: (provider: JsonRpcProvider, address: Array<string>, allSignatures: Array<string>, fromBlockNumber: number, toBlockNumber: number, chunkSize?: number) => Promise<Log[]>;
@@ -2,15 +2,15 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getPastEvents = void 0;
4
4
  const ethers_1 = require("ethers");
5
- const getPastEvents = async (provider, address, allSignatures, fromBlockNumber, toBlockNumber, chunkLimit = 0) => {
5
+ const getPastEvents = async (provider, address, allSignatures, fromBlockNumber, toBlockNumber, chunkSize = 0) => {
6
6
  const totalBlocks = toBlockNumber - fromBlockNumber;
7
7
  const chunks = [];
8
- if (chunkLimit > 0 && totalBlocks > chunkLimit) {
9
- const count = Math.ceil(totalBlocks / chunkLimit);
8
+ if (chunkSize > 0 && totalBlocks > chunkSize) {
9
+ const count = Math.ceil(totalBlocks / chunkSize);
10
10
  let startingBlock = fromBlockNumber;
11
11
  for (let index = 0; index < count; index++) {
12
12
  const fromRangeBlock = startingBlock;
13
- const toRangeBlock = index === count - 1 ? toBlockNumber : startingBlock + chunkLimit;
13
+ const toRangeBlock = index === count - 1 ? toBlockNumber : startingBlock + chunkSize;
14
14
  startingBlock = toRangeBlock;
15
15
  chunks.push({ fromBlock: fromRangeBlock, toBlock: toRangeBlock });
16
16
  }
@@ -1 +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"}
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,SAAS,GAAG,CAAC,EACb,EAAE;IACF,MAAM,WAAW,GAAG,aAAa,GAAG,eAAe,CAAC;IACpD,MAAM,MAAM,GAAG,EAAE,CAAC;IAElB,IAAI,SAAS,GAAG,CAAC,IAAI,WAAW,GAAG,SAAS,EAAE,CAAC;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC;QACjD,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,SAAS,CAAC;YACrF,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;IAED,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;AA7CW,QAAA,aAAa,iBA6CxB"}
@@ -0,0 +1,3 @@
1
+ export * from "./await-for-confirmation";
2
+ export * from "./decode-result";
3
+ export * from "./patch-bigint";
@@ -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("./await-for-confirmation"), exports);
18
+ __exportStar(require("./decode-result"), exports);
19
+ __exportStar(require("./patch-bigint"), exports);
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2DAAyC;AACzC,kDAAgC;AAChC,iDAA+B"}
package/package.json CHANGED
@@ -14,7 +14,7 @@
14
14
  },
15
15
  "description": "Ethers transport for NestJS",
16
16
  "devDependencies": {
17
- "@ethberry/eslint-config": "5.0.3",
17
+ "@ethberry/eslint-config": "5.0.4",
18
18
  "@nestjs/axios": "3.0.3",
19
19
  "@nestjs/common": "10.4.4",
20
20
  "@nestjs/config": "3.2.3",
@@ -25,10 +25,10 @@
25
25
  "@nestjs/testing": "10.4.4",
26
26
  "@nomiclabs/hardhat-ethers": "2.2.3",
27
27
  "@types/jest": "29.5.13",
28
- "@types/node": "20.16.10",
28
+ "@types/node": "20.16.11",
29
29
  "dotenv": "16.4.5",
30
- "ethers": "6.13.2",
31
- "husky": "4.3.8",
30
+ "ethers": "6.13.3",
31
+ "husky": "9.1.6",
32
32
  "jest": "29.7.0",
33
33
  "jest-environment-node": "29.7.0",
34
34
  "lint-staged": "15.2.10",
@@ -37,7 +37,7 @@
37
37
  "rimraf": "6.0.1",
38
38
  "rxjs": "7.8.1",
39
39
  "ts-jest": "29.2.5",
40
- "typescript": "5.6.2"
40
+ "typescript": "5.6.3"
41
41
  },
42
42
  "engines": {
43
43
  "node": ">=22"
@@ -67,11 +67,11 @@
67
67
  "build": "tsc",
68
68
  "lint": "eslint . --fix",
69
69
  "prebuild": "rimraf dist/",
70
- "prepare": "npm run build",
70
+ "prepare": "husky",
71
71
  "prettier": "prettier . --write",
72
72
  "test": "jest --detectOpenHandles --runInBand --forceExit"
73
73
  },
74
74
  "title": "NestJS Ethers module",
75
75
  "types": "./dist/index.d.ts",
76
- "version": "8.0.3"
76
+ "version": "8.0.4"
77
77
  }
@@ -1,5 +0,0 @@
1
- export declare enum ContractType {
2
- EXCHANGE = "EXCHANGE",
3
- ERC20_TOKEN = "ERC20_TOKEN",
4
- ERC721_TOKEN = "ERC721_TOKEN"
5
- }
@@ -1,287 +0,0 @@
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
- debug: true,
213
- cron: schedule_1.CronExpression.EVERY_5_SECONDS,
214
- });
215
- },
216
- }),
217
- TestEthersModule,
218
- ],
219
- }).compile();
220
- testEthersContractService = module.get(TestEthersService);
221
- logSpyContract = jest.spyOn(testEthersContractService, "logEvent");
222
- await module.init();
223
- });
224
- afterEach(function () {
225
- logSpyContract.mockClear();
226
- });
227
- it("should receive Event", async function () {
228
- const provider = new ethers_1.JsonRpcProvider(process.env.JSON_RPC_ADDR);
229
- const wallet = new ethers_1.Wallet(process.env.PRIVATE_KEY, provider);
230
- const exchangeFactory = new ethers_1.ContractFactory(Exchange_json_1.default.abi, Exchange_json_1.default.bytecode, wallet);
231
- const exchangeContract = await exchangeFactory.deploy();
232
- await exchangeContract.waitForDeployment();
233
- const priceFactory = new ethers_1.ContractFactory(ERC20Ownable_json_1.default.abi, ERC20Ownable_json_1.default.bytecode, wallet);
234
- const priceContract = await priceFactory.deploy("name", "symbol");
235
- await priceContract.waitForDeployment();
236
- const tx1 = await priceContract.mint(process.env.ACCOUNT, AMOUNT);
237
- await tx1.wait();
238
- const tx2 = await priceContract.approve(await exchangeContract.getAddress(), AMOUNT);
239
- await tx2.wait();
240
- const itemFactory = new ethers_1.ContractFactory(ERC721Ownable_json_1.default.abi, ERC721Ownable_json_1.default.bytecode, wallet);
241
- const itemContract = await itemFactory.deploy("name", "symbol");
242
- await itemContract.waitForDeployment();
243
- const tx3 = await itemContract.mint(process.env.ACCOUNT, TOKEN_ID);
244
- await tx3.wait();
245
- const tx4 = await itemContract.approve(await exchangeContract.getAddress(), TOKEN_ID);
246
- await tx4.wait();
247
- const tx5 = await exchangeContract.swap({
248
- account: process.env.ACCOUNT,
249
- token: await itemContract.getAddress(),
250
- tokenId: TOKEN_ID,
251
- }, {
252
- account: process.env.ACCOUNT,
253
- token: await priceContract.getAddress(),
254
- amount: AMOUNT,
255
- });
256
- await tx5.wait();
257
- testEthersContractService.updateListener({
258
- contractType: ContractType.ERC20_TOKEN,
259
- contractAddress: [await priceContract.getAddress()],
260
- contractInterface: new ethers_1.Interface(ERC20Ownable_json_1.default.abi),
261
- eventSignatures: [
262
- "Transfer(address,address,uint256)",
263
- "Approval(address,address,uint256)",
264
- "OwnershipTransferred(address,address)",
265
- ],
266
- });
267
- testEthersContractService.updateListener({
268
- contractType: ContractType.ERC721_TOKEN,
269
- contractAddress: [await itemContract.getAddress()],
270
- contractInterface: new ethers_1.Interface(ERC721Ownable_json_1.default.abi),
271
- eventSignatures: [
272
- "Transfer(address,address,uint256)",
273
- "Approval(address,address,uint256)",
274
- "OwnershipTransferred(address,address)",
275
- ],
276
- });
277
- testEthersContractService.updateListener({
278
- contractType: ContractType.EXCHANGE,
279
- contractAddress: [await exchangeContract.getAddress()],
280
- contractInterface: new ethers_1.Interface(Exchange_json_1.default.abi),
281
- eventSignatures: ["Swap((address,address,uint256),(address,address,uint256))"],
282
- });
283
- await (0, block_await_1.waitForConfirmation)(provider, ~~process.env.LATENCY + 2);
284
- expect(logSpyContract).toBeCalledTimes(10);
285
- });
286
- });
287
- //# sourceMappingURL=ethers.service.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ethers.service.spec.js","sourceRoot":"","sources":["../src/ethers.service.spec.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,27 +0,0 @@
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
@@ -1 +0,0 @@
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"}