@rosen-bridge/watcher-data-extractor 2.1.6 → 2.1.7

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 (64) hide show
  1. package/dist/actions/EventTriggerAction.d.ts +35 -0
  2. package/dist/actions/EventTriggerAction.d.ts.map +1 -0
  3. package/dist/actions/EventTriggerAction.js +122 -0
  4. package/dist/actions/commitmentAction.d.ts +33 -0
  5. package/dist/actions/commitmentAction.d.ts.map +1 -0
  6. package/dist/actions/commitmentAction.js +110 -0
  7. package/dist/actions/permitAction.d.ts +64 -0
  8. package/dist/actions/permitAction.d.ts.map +1 -0
  9. package/dist/actions/permitAction.js +173 -0
  10. package/dist/constants.d.ts +4 -0
  11. package/dist/constants.d.ts.map +1 -0
  12. package/dist/constants.js +4 -0
  13. package/dist/entities/CommitmentEntity.d.ts +17 -0
  14. package/dist/entities/CommitmentEntity.d.ts.map +1 -0
  15. package/dist/entities/CommitmentEntity.js +83 -0
  16. package/dist/entities/EventTriggerEntity.d.ts +28 -0
  17. package/dist/entities/EventTriggerEntity.d.ts.map +1 -0
  18. package/dist/entities/EventTriggerEntity.js +138 -0
  19. package/dist/entities/PermitEntity.d.ts +14 -0
  20. package/dist/entities/PermitEntity.d.ts.map +1 -0
  21. package/dist/entities/PermitEntity.js +68 -0
  22. package/dist/extractor/EventTriggerExtractor.d.ts +28 -0
  23. package/dist/extractor/EventTriggerExtractor.d.ts.map +1 -0
  24. package/dist/extractor/EventTriggerExtractor.js +126 -0
  25. package/dist/extractor/commitmentExtractor.d.ts +35 -0
  26. package/dist/extractor/commitmentExtractor.d.ts.map +1 -0
  27. package/dist/extractor/commitmentExtractor.js +110 -0
  28. package/dist/extractor/permitExtractor.d.ts +139 -0
  29. package/dist/extractor/permitExtractor.d.ts.map +1 -0
  30. package/dist/extractor/permitExtractor.js +227 -0
  31. package/dist/index.d.ts +10 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +10 -0
  34. package/dist/interfaces/extractedCommitment.d.ts +11 -0
  35. package/dist/interfaces/extractedCommitment.d.ts.map +1 -0
  36. package/dist/interfaces/extractedCommitment.js +2 -0
  37. package/dist/interfaces/extractedEventTrigger.d.ts +21 -0
  38. package/dist/interfaces/extractedEventTrigger.d.ts.map +1 -0
  39. package/dist/interfaces/extractedEventTrigger.js +2 -0
  40. package/dist/interfaces/extractedPermit.d.ts +12 -0
  41. package/dist/interfaces/extractedPermit.d.ts.map +1 -0
  42. package/dist/interfaces/extractedPermit.js +2 -0
  43. package/dist/interfaces/types.d.ts +20 -0
  44. package/dist/interfaces/types.d.ts.map +1 -0
  45. package/dist/interfaces/types.js +2 -0
  46. package/dist/migrations/index.d.ts +7 -0
  47. package/dist/migrations/index.d.ts.map +1 -0
  48. package/dist/migrations/index.js +9 -0
  49. package/dist/migrations/postgres/1688554842087-migration.d.ts +7 -0
  50. package/dist/migrations/postgres/1688554842087-migration.d.ts.map +1 -0
  51. package/dist/migrations/postgres/1688554842087-migration.js +82 -0
  52. package/dist/migrations/postgres/1689175974257-migration.d.ts +7 -0
  53. package/dist/migrations/postgres/1689175974257-migration.d.ts.map +1 -0
  54. package/dist/migrations/postgres/1689175974257-migration.js +50 -0
  55. package/dist/migrations/sqlite/1688555766601-migration.d.ts +7 -0
  56. package/dist/migrations/sqlite/1688555766601-migration.d.ts.map +1 -0
  57. package/dist/migrations/sqlite/1688555766601-migration.js +79 -0
  58. package/dist/migrations/sqlite/1689175103163-migration.d.ts +7 -0
  59. package/dist/migrations/sqlite/1689175103163-migration.d.ts.map +1 -0
  60. package/dist/migrations/sqlite/1689175103163-migration.js +392 -0
  61. package/dist/utils.d.ts +9 -0
  62. package/dist/utils.d.ts.map +1 -0
  63. package/dist/utils.js +6 -0
  64. package/package.json +1 -1
@@ -0,0 +1,35 @@
1
+ import { DataSource } from 'typeorm';
2
+ import { BlockEntity } from '@rosen-bridge/scanner';
3
+ import { AbstractLogger } from '@rosen-bridge/logger-interface';
4
+ import { ExtractedEventTrigger } from '../interfaces/extractedEventTrigger';
5
+ declare class EventTriggerAction {
6
+ readonly logger: AbstractLogger;
7
+ private readonly datasource;
8
+ private readonly triggerEventRepository;
9
+ constructor(dataSource: DataSource, logger: AbstractLogger);
10
+ /**
11
+ * It stores list of eventTriggers in the dataSource with block id
12
+ * @param eventTriggers
13
+ * @param block
14
+ * @param extractor
15
+ */
16
+ storeEventTriggers: (eventTriggers: Array<ExtractedEventTrigger>, block: BlockEntity, extractor: string) => Promise<boolean>;
17
+ /**
18
+ * Update spendBlock and spendHeight of eventTriggers spent on the block
19
+ * also update the spendTxId with the specified txId
20
+ * @param spendId
21
+ * @param block
22
+ * @param extractor
23
+ * @param txId
24
+ */
25
+ spendEventTriggers: (spendId: Array<string>, block: BlockEntity, extractor: string, txId: string) => Promise<void>;
26
+ /**
27
+ * Delete all eventTriggers corresponding to the block(id) and extractor(id)
28
+ * and update all eventTriggers spent on the specified block
29
+ * @param block
30
+ * @param extractor
31
+ */
32
+ deleteBlock: (block: string, extractor: string) => Promise<void>;
33
+ }
34
+ export default EventTriggerAction;
35
+ //# sourceMappingURL=EventTriggerAction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventTriggerAction.d.ts","sourceRoot":"","sources":["../../lib/actions/EventTriggerAction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAkB,MAAM,SAAS,CAAC;AAErD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAGhE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAG5E,cAAM,kBAAkB;IACtB,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAiC;gBAE5D,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc;IAM1D;;;;;OAKG;IACH,kBAAkB,kBACD,MAAM,qBAAqB,CAAC,SACpC,WAAW,aACP,MAAM,sBAkEjB;IAEF;;;;;;;OAOG;IACH,kBAAkB,YACP,MAAM,MAAM,CAAC,SACf,WAAW,aACP,MAAM,QACX,MAAM,KACX,QAAQ,IAAI,CAAC,CAqBd;IAEF;;;;;OAKG;IACH,WAAW,UAAiB,MAAM,aAAa,MAAM,mBAYnD;CACH;AAED,eAAe,kBAAkB,CAAC"}
@@ -0,0 +1,122 @@
1
+ import { In } from 'typeorm';
2
+ import { chunk } from 'lodash-es';
3
+ import EventTriggerEntity from '../entities/EventTriggerEntity';
4
+ import { dbIdChunkSize } from '../constants';
5
+ class EventTriggerAction {
6
+ logger;
7
+ datasource;
8
+ triggerEventRepository;
9
+ constructor(dataSource, logger) {
10
+ this.datasource = dataSource;
11
+ this.logger = logger;
12
+ this.triggerEventRepository = dataSource.getRepository(EventTriggerEntity);
13
+ }
14
+ /**
15
+ * It stores list of eventTriggers in the dataSource with block id
16
+ * @param eventTriggers
17
+ * @param block
18
+ * @param extractor
19
+ */
20
+ storeEventTriggers = async (eventTriggers, block, extractor) => {
21
+ if (eventTriggers.length === 0)
22
+ return true;
23
+ const boxIds = eventTriggers.map((trigger) => trigger.boxId);
24
+ const savedTriggers = await this.triggerEventRepository.findBy({
25
+ boxId: In(boxIds),
26
+ extractor: extractor,
27
+ });
28
+ let success = true;
29
+ const queryRunner = this.datasource.createQueryRunner();
30
+ await queryRunner.connect();
31
+ await queryRunner.startTransaction();
32
+ const repository = await queryRunner.manager.getRepository(EventTriggerEntity);
33
+ try {
34
+ for (const trigger of eventTriggers) {
35
+ const saved = savedTriggers.some((entity) => {
36
+ return entity.boxId === trigger.boxId;
37
+ });
38
+ const entity = {
39
+ txId: trigger.txId,
40
+ eventId: trigger.eventId,
41
+ boxId: trigger.boxId,
42
+ boxSerialized: trigger.boxSerialized,
43
+ block: block.hash,
44
+ height: block.height,
45
+ extractor: extractor,
46
+ WIDs: trigger.WIDs,
47
+ amount: trigger.amount,
48
+ bridgeFee: trigger.bridgeFee,
49
+ fromAddress: trigger.fromAddress,
50
+ toAddress: trigger.toAddress,
51
+ fromChain: trigger.fromChain,
52
+ networkFee: trigger.networkFee,
53
+ sourceChainTokenId: trigger.sourceChainTokenId,
54
+ targetChainTokenId: trigger.targetChainTokenId,
55
+ sourceBlockId: trigger.sourceBlockId,
56
+ toChain: trigger.toChain,
57
+ sourceTxId: trigger.sourceTxId,
58
+ sourceChainHeight: trigger.sourceChainHeight,
59
+ };
60
+ if (!saved) {
61
+ this.logger.info(`Storing event trigger [${trigger.boxId}] for event [${trigger.eventId}] at height ${block.height} and extractor ${extractor}`);
62
+ await repository.insert(entity);
63
+ }
64
+ else {
65
+ this.logger.info(`Updating event trigger ${trigger.boxId} for event [${trigger.eventId}] at height ${block.height} and extractor ${extractor}`);
66
+ await repository.update({ boxId: trigger.boxId }, entity);
67
+ }
68
+ this.logger.debug(`Entity: ${JSON.stringify(entity)}`);
69
+ }
70
+ await queryRunner.commitTransaction();
71
+ }
72
+ catch (e) {
73
+ this.logger.error(`An error occurred during store eventTrigger action: ${e}`);
74
+ await queryRunner.rollbackTransaction();
75
+ success = false;
76
+ }
77
+ finally {
78
+ await queryRunner.release();
79
+ }
80
+ return success;
81
+ };
82
+ /**
83
+ * Update spendBlock and spendHeight of eventTriggers spent on the block
84
+ * also update the spendTxId with the specified txId
85
+ * @param spendId
86
+ * @param block
87
+ * @param extractor
88
+ * @param txId
89
+ */
90
+ spendEventTriggers = async (spendId, block, extractor, txId) => {
91
+ const spendIdChunks = chunk(spendId, dbIdChunkSize);
92
+ for (const spendIdChunk of spendIdChunks) {
93
+ const updateResult = await this.triggerEventRepository.update({ boxId: In(spendIdChunk), extractor: extractor }, { spendBlock: block.hash, spendHeight: block.height, spendTxId: txId });
94
+ if (updateResult.affected && updateResult.affected > 0) {
95
+ const spentRows = await this.triggerEventRepository.findBy({
96
+ boxId: In(spendIdChunk),
97
+ spendBlock: block.hash,
98
+ });
99
+ for (const row of spentRows) {
100
+ this.logger.info(`Spent trigger [${row.boxId}] of event [${row.eventId}] at height ${block.height}`);
101
+ this.logger.debug(`Spent trigger: [${JSON.stringify(row)}]`);
102
+ }
103
+ }
104
+ }
105
+ };
106
+ /**
107
+ * Delete all eventTriggers corresponding to the block(id) and extractor(id)
108
+ * and update all eventTriggers spent on the specified block
109
+ * @param block
110
+ * @param extractor
111
+ */
112
+ deleteBlock = async (block, extractor) => {
113
+ this.logger.info(`Deleting event triggers at block ${block} and extractor ${extractor}`);
114
+ await this.triggerEventRepository.delete({
115
+ block: block,
116
+ extractor: extractor,
117
+ });
118
+ await this.triggerEventRepository.update({ spendBlock: block, extractor: extractor }, { spendBlock: null, spendHeight: 0 });
119
+ };
120
+ }
121
+ export default EventTriggerAction;
122
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXZlbnRUcmlnZ2VyQWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL2FjdGlvbnMvRXZlbnRUcmlnZ2VyQWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxFQUFFLEVBQWMsTUFBTSxTQUFTLENBQUM7QUFDckQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUlsQyxPQUFPLGtCQUFrQixNQUFNLGdDQUFnQyxDQUFDO0FBRWhFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFN0MsTUFBTSxrQkFBa0I7SUFDYixNQUFNLENBQWlCO0lBQ2YsVUFBVSxDQUFhO0lBQ3ZCLHNCQUFzQixDQUFpQztJQUV4RSxZQUFZLFVBQXNCLEVBQUUsTUFBc0I7UUFDeEQsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLHNCQUFzQixHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxrQkFBa0IsR0FBRyxLQUFLLEVBQ3hCLGFBQTJDLEVBQzNDLEtBQWtCLEVBQ2xCLFNBQWlCLEVBQ2pCLEVBQUU7UUFDRixJQUFJLGFBQWEsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQzVDLE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3RCxNQUFNLGFBQWEsR0FBRyxNQUFNLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUM7WUFDN0QsS0FBSyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUM7WUFDakIsU0FBUyxFQUFFLFNBQVM7U0FDckIsQ0FBQyxDQUFDO1FB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QUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDOUQ7YUFDRjtTQUNGO0lBQ0gsQ0FBQyxDQUFDO0lBRUY7Ozs7O09BS0c7SUFDSCxXQUFXLEdBQUcsS0FBSyxFQUFFLEtBQWEsRUFBRSxTQUFpQixFQUFFLEVBQUU7UUFDdkQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ2Qsb0NBQW9DLEtBQUssa0JBQWtCLFNBQVMsRUFBRSxDQUN2RSxDQUFDO1FBQ0YsTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDO1lBQ3ZDLEtBQUssRUFBRSxLQUFLO1lBQ1osU0FBUyxFQUFFLFNBQVM7U0FDckIsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUN0QyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxFQUMzQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUNyQyxDQUFDO0lBQ0osQ0FBQyxDQUFDO0NBQ0g7QUFFRCxlQUFlLGtCQUFrQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0YVNvdXJjZSwgSW4sIFJlcG9zaXRvcnkgfSBmcm9tICd0eXBlb3JtJztcbmltcG9ydCB7IGNodW5rIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEJsb2NrRW50aXR5IH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9zY2FubmVyJztcbmltcG9ydCB7IEFic3RyYWN0TG9nZ2VyIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9sb2dnZXItaW50ZXJmYWNlJztcblxuaW1wb3J0IEV2ZW50VHJpZ2dlckVudGl0eSBmcm9tICcuLi9lbnRpdGllcy9FdmVudFRyaWdnZXJFbnRpdHknO1xuaW1wb3J0IHsgRXh0cmFjdGVkRXZlbnRUcmlnZ2VyIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9leHRyYWN0ZWRFdmVudFRyaWdnZXInO1xuaW1wb3J0IHsgZGJJZENodW5rU2l6ZSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5cbmNsYXNzIEV2ZW50VHJpZ2dlckFjdGlvbiB7XG4gIHJlYWRvbmx5IGxvZ2dlcjogQWJzdHJhY3RMb2dnZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGF0YXNvdXJjZTogRGF0YVNvdXJjZTtcbiAgcHJpdmF0ZSByZWFkb25seSB0cmlnZ2VyRXZlbnRSZXBvc2l0b3J5OiBSZXBvc2l0b3J5PEV2ZW50VHJpZ2dlckVudGl0eT47XG5cbiAgY29uc3RydWN0b3IoZGF0YVNvdXJjZTogRGF0YVNvdXJjZSwgbG9nZ2VyOiBBYnN0cmFjdExvZ2dlcikge1xuICAgIHRoaXMuZGF0YXNvdXJjZSA9IGRhdGFTb3VyY2U7XG4gICAgdGhpcy5sb2dnZXIgPSBsb2dnZXI7XG4gICAgdGhpcy50cmlnZ2VyRXZlbnRSZXBvc2l0b3J5ID0gZGF0YVNvdXJjZS5nZXRSZXBvc2l0b3J5KEV2ZW50VHJpZ2dlckVudGl0eSk7XG4gIH1cblxuICAvKipcbiAgICogSXQgc3RvcmVzIGxpc3Qgb2YgZXZlbnRUcmlnZ2VycyBpbiB0aGUgZGF0YVNvdXJjZSB3aXRoIGJsb2NrIGlkXG4gICAqIEBwYXJhbSBldmVudFRyaWdnZXJzXG4gICAqIEBwYXJhbSBibG9ja1xuICAgKiBAcGFyYW0gZXh0cmFjdG9yXG4gICAqL1xuICBzdG9yZUV2ZW50VHJpZ2dlcnMgPSBhc3luYyAoXG4gICAgZXZlbnRUcmlnZ2VyczogQXJyYXk8RXh0cmFjdGVkRXZlbnRUcmlnZ2VyPixcbiAgICBibG9jazogQmxvY2tFbnRpdHksXG4gICAgZXh0cmFjdG9yOiBzdHJpbmdcbiAgKSA9PiB7XG4gICAgaWYgKGV2ZW50VHJpZ2dlcnMubGVuZ3RoID09PSAwKSByZXR1cm4gdHJ1ZTtcbiAgICBjb25zdCBib3hJZHMgPSBldmVudFRyaWdnZXJzLm1hcCgodHJpZ2dlcikgPT4gdHJpZ2dlci5ib3hJZCk7XG4gICAgY29uc3Qgc2F2ZWRUcmlnZ2VycyA9IGF3YWl0IHRoaXMudHJpZ2dlckV2ZW50UmVwb3NpdG9yeS5maW5kQnkoe1xuICAgICAgYm94SWQ6IEluKGJveElkcyksXG4gICAgICBleHRyYWN0b3I6IGV4dHJhY3RvcixcbiAgICB9KTtcbiAgICBsZXQgc3VjY2VzcyA9IHRydWU7XG4gICAgY29uc3QgcXVlcnlSdW5uZXIgPSB0aGlzLmRhdGFzb3VyY2UuY3JlYXRlUXVlcnlSdW5uZXIoKTtcbiAgICBhd2FpdCBxdWVyeVJ1bm5lci5jb25uZWN0KCk7XG4gICAgYXdhaXQgcXVlcnlSdW5uZXIuc3RhcnRUcmFuc2FjdGlvbigpO1xuICAgIGNvbnN0IHJlcG9zaXRvcnkgPSBhd2FpdCBxdWVyeVJ1bm5lci5tYW5hZ2VyLmdldFJlcG9zaXRvcnkoXG4gICAgICBFdmVudFRyaWdnZXJFbnRpdHlcbiAgICApO1xuICAgIHRyeSB7XG4gICAgICBmb3IgKGNvbnN0IHRyaWdnZXIgb2YgZXZlbnRUcmlnZ2Vycykge1xuICAgICAgICBjb25zdCBzYXZlZCA9IHNhdmVkVHJpZ2dlcnMuc29tZSgoZW50aXR5KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGVudGl0eS5ib3hJZCA9PT0gdHJpZ2dlci5ib3hJZDtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGVudGl0eSA9IHtcbiAgICAgICAgICB0eElkOiB0cmlnZ2VyLnR4SWQsXG4gICAgICAgICAgZXZlbnRJZDogdHJpZ2dlci5ldmVudElkLFxuICAgICAgICAgIGJveElkOiB0cmlnZ2VyLmJveElkLFxuICAgICAgICAgIGJveFNlcmlhbGl6ZWQ6IHRyaWdnZXIuYm94U2VyaWFsaXplZCxcbiAgICAgICAgICBibG9jazogYmxvY2suaGFzaCxcbiAgICAgICAgICBoZWlnaHQ6IGJsb2NrLmhlaWdodCxcbiAgICAgICAgICBleHRyYWN0b3I6IGV4dHJhY3RvcixcbiAgICAgICAgICBXSURzOiB0cmlnZ2VyLldJRHMsXG4gICAgICAgICAgYW1vdW50OiB0cmlnZ2VyLmFtb3VudCxcbiAgICAgICAgICBicmlkZ2VGZWU6IHRyaWdnZXIuYnJpZGdlRmVlLFxuICAgICAgICAgIGZyb21BZGRyZXNzOiB0cmlnZ2VyLmZyb21BZGRyZXNzLFxuICAgICAgICAgIHRvQWRkcmVzczogdHJpZ2dlci50b0FkZHJlc3MsXG4gICAgICAgICAgZnJvbUNoYWluOiB0cmlnZ2VyLmZyb21DaGFpbixcbiAgICAgICAgICBuZXR3b3JrRmVlOiB0cmlnZ2VyLm5ldHdvcmtGZWUsXG4gICAgICAgICAgc291cmNlQ2hhaW5Ub2tlbklkOiB0cmlnZ2VyLnNvdXJjZUNoYWluVG9rZW5JZCxcbiAgICAgICAgICB0YXJnZXRDaGFpblRva2VuSWQ6IHRyaWdnZXIudGFyZ2V0Q2hhaW5Ub2tlbklkLFxuICAgICAgICAgIHNvdXJjZUJsb2NrSWQ6IHRyaWdnZXIuc291cmNlQmxvY2tJZCxcbiAgICAgICAgICB0b0NoYWluOiB0cmlnZ2VyLnRvQ2hhaW4sXG4gICAgICAgICAgc291cmNlVHhJZDogdHJpZ2dlci5zb3VyY2VUeElkLFxuICAgICAgICAgIHNvdXJjZUNoYWluSGVpZ2h0OiB0cmlnZ2VyLnNvdXJjZUNoYWluSGVpZ2h0LFxuICAgICAgICB9O1xuICAgICAgICBpZiAoIXNhdmVkKSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuaW5mbyhcbiAgICAgICAgICAgIGBTdG9yaW5nIGV2ZW50IHRyaWdnZXIgWyR7dHJpZ2dlci5ib3hJZH1dIGZvciBldmVudCBbJHt0cmlnZ2VyLmV2ZW50SWR9XSBhdCBoZWlnaHQgJHtibG9jay5oZWlnaHR9IGFuZCBleHRyYWN0b3IgJHtleHRyYWN0b3J9YFxuICAgICAgICAgICk7XG4gICAgICAgICAgYXdhaXQgcmVwb3NpdG9yeS5pbnNlcnQoZW50aXR5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxvZ2dlci5pbmZvKFxuICAgICAgICAgICAgYFVwZGF0aW5nIGV2ZW50IHRyaWdnZXIgJHt0cmlnZ2VyLmJveElkfSBmb3IgZXZlbnQgWyR7dHJpZ2dlci5ldmVudElkfV0gYXQgaGVpZ2h0ICR7YmxvY2suaGVpZ2h0fSBhbmQgZXh0cmFjdG9yICR7ZXh0cmFjdG9yfWBcbiAgICAgICAgICApO1xuICAgICAgICAgIGF3YWl0IHJlcG9zaXRvcnkudXBkYXRlKHsgYm94SWQ6IHRyaWdnZXIuYm94SWQgfSwgZW50aXR5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgRW50aXR5OiAke0pTT04uc3RyaW5naWZ5KGVudGl0eSl9YCk7XG4gICAgICB9XG4gICAgICBhd2FpdCBxdWVyeVJ1bm5lci5jb21taXRUcmFuc2FjdGlvbigpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nZ2VyLmVycm9yKFxuICAgICAgICBgQW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHN0b3JlIGV2ZW50VHJpZ2dlciBhY3Rpb246ICR7ZX1gXG4gICAgICApO1xuICAgICAgYXdhaXQgcXVlcnlSdW5uZXIucm9sbGJhY2tUcmFuc2FjdGlvbigpO1xuICAgICAgc3VjY2VzcyA9IGZhbHNlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBxdWVyeVJ1bm5lci5yZWxlYXNlKCk7XG4gICAgfVxuICAgIHJldHVybiBzdWNjZXNzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBVcGRhdGUgc3BlbmRCbG9jayBhbmQgc3BlbmRIZWlnaHQgb2YgZXZlbnRUcmlnZ2VycyBzcGVudCBvbiB0aGUgYmxvY2tcbiAgICogYWxzbyB1cGRhdGUgdGhlIHNwZW5kVHhJZCB3aXRoIHRoZSBzcGVjaWZpZWQgdHhJZFxuICAgKiBAcGFyYW0gc3BlbmRJZFxuICAgKiBAcGFyYW0gYmxvY2tcbiAgICogQHBhcmFtIGV4dHJhY3RvclxuICAgKiBAcGFyYW0gdHhJZFxuICAgKi9cbiAgc3BlbmRFdmVudFRyaWdnZXJzID0gYXN5bmMgKFxuICAgIHNwZW5kSWQ6IEFycmF5PHN0cmluZz4sXG4gICAgYmxvY2s6IEJsb2NrRW50aXR5LFxuICAgIGV4dHJhY3Rvcjogc3RyaW5nLFxuICAgIHR4SWQ6IHN0cmluZ1xuICApOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBjb25zdCBzcGVuZElkQ2h1bmtzID0gY2h1bmsoc3BlbmRJZCwgZGJJZENodW5rU2l6ZSk7XG4gICAgZm9yIChjb25zdCBzcGVuZElkQ2h1bmsgb2Ygc3BlbmRJZENodW5rcykge1xuICAgICAgY29uc3QgdXBkYXRlUmVzdWx0ID0gYXdhaXQgdGhpcy50cmlnZ2VyRXZlbnRSZXBvc2l0b3J5LnVwZGF0ZShcbiAgICAgICAgeyBib3hJZDogSW4oc3BlbmRJZENodW5rKSwgZXh0cmFjdG9yOiBleHRyYWN0b3IgfSxcbiAgICAgICAgeyBzcGVuZEJsb2NrOiBibG9jay5oYXNoLCBzcGVuZEhlaWdodDogYmxvY2suaGVpZ2h0LCBzcGVuZFR4SWQ6IHR4SWQgfVxuICAgICAgKTtcblxuICAgICAgaWYgKHVwZGF0ZVJlc3VsdC5hZmZlY3RlZCAmJiB1cGRhdGVSZXN1bHQuYWZmZWN0ZWQgPiAwKSB7XG4gICAgICAgIGNvbnN0IHNwZW50Um93cyA9IGF3YWl0IHRoaXMudHJpZ2dlckV2ZW50UmVwb3NpdG9yeS5maW5kQnkoe1xuICAgICAgICAgIGJveElkOiBJbihzcGVuZElkQ2h1bmspLFxuICAgICAgICAgIHNwZW5kQmxvY2s6IGJsb2NrLmhhc2gsXG4gICAgICAgIH0pO1xuICAgICAgICBmb3IgKGNvbnN0IHJvdyBvZiBzcGVudFJvd3MpIHtcbiAgICAgICAgICB0aGlzLmxvZ2dlci5pbmZvKFxuICAgICAgICAgICAgYFNwZW50IHRyaWdnZXIgWyR7cm93LmJveElkfV0gb2YgZXZlbnQgWyR7cm93LmV2ZW50SWR9XSBhdCBoZWlnaHQgJHtibG9jay5oZWlnaHR9YFxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYFNwZW50IHRyaWdnZXI6IFske0pTT04uc3RyaW5naWZ5KHJvdyl9XWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBEZWxldGUgYWxsIGV2ZW50VHJpZ2dlcnMgY29ycmVzcG9uZGluZyB0byB0aGUgYmxvY2soaWQpIGFuZCBleHRyYWN0b3IoaWQpXG4gICAqIGFuZCB1cGRhdGUgYWxsIGV2ZW50VHJpZ2dlcnMgc3BlbnQgb24gdGhlIHNwZWNpZmllZCBibG9ja1xuICAgKiBAcGFyYW0gYmxvY2tcbiAgICogQHBhcmFtIGV4dHJhY3RvclxuICAgKi9cbiAgZGVsZXRlQmxvY2sgPSBhc3luYyAoYmxvY2s6IHN0cmluZywgZXh0cmFjdG9yOiBzdHJpbmcpID0+IHtcbiAgICB0aGlzLmxvZ2dlci5pbmZvKFxuICAgICAgYERlbGV0aW5nIGV2ZW50IHRyaWdnZXJzIGF0IGJsb2NrICR7YmxvY2t9IGFuZCBleHRyYWN0b3IgJHtleHRyYWN0b3J9YFxuICAgICk7XG4gICAgYXdhaXQgdGhpcy50cmlnZ2VyRXZlbnRSZXBvc2l0b3J5LmRlbGV0ZSh7XG4gICAgICBibG9jazogYmxvY2ssXG4gICAgICBleHRyYWN0b3I6IGV4dHJhY3RvcixcbiAgICB9KTtcbiAgICBhd2FpdCB0aGlzLnRyaWdnZXJFdmVudFJlcG9zaXRvcnkudXBkYXRlKFxuICAgICAgeyBzcGVuZEJsb2NrOiBibG9jaywgZXh0cmFjdG9yOiBleHRyYWN0b3IgfSxcbiAgICAgIHsgc3BlbmRCbG9jazogbnVsbCwgc3BlbmRIZWlnaHQ6IDAgfVxuICAgICk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IEV2ZW50VHJpZ2dlckFjdGlvbjtcbiJdfQ==
@@ -0,0 +1,33 @@
1
+ import { DataSource } from 'typeorm';
2
+ import { BlockEntity } from '@rosen-bridge/scanner';
3
+ import { AbstractLogger } from '@rosen-bridge/logger-interface';
4
+ import { extractedCommitment } from '../interfaces/extractedCommitment';
5
+ declare class CommitmentAction {
6
+ readonly logger: AbstractLogger;
7
+ private readonly datasource;
8
+ private readonly commitmentRepository;
9
+ constructor(dataSource: DataSource, logger: AbstractLogger);
10
+ /**
11
+ * It stores list of observations in the dataSource with block id
12
+ * @param commitments
13
+ * @param block
14
+ * @param extractor
15
+ */
16
+ storeCommitments: (commitments: Array<extractedCommitment>, block: BlockEntity, extractor: string) => Promise<boolean>;
17
+ /**
18
+ * Update spendBlock and spendHeight of commitments spent on the block
19
+ * @param spendId
20
+ * @param block
21
+ * @param extractor
22
+ */
23
+ spendCommitments: (spendId: Array<string>, block: BlockEntity, extractor: string) => Promise<void>;
24
+ /**
25
+ * Delete all commitments corresponding to the block(id) and extractor(id)
26
+ * and update all commitments spent on the specified block
27
+ * @param block
28
+ * @param extractor
29
+ */
30
+ deleteBlock: (block: string, extractor: string) => Promise<void>;
31
+ }
32
+ export default CommitmentAction;
33
+ //# sourceMappingURL=commitmentAction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commitmentAction.d.ts","sourceRoot":"","sources":["../../lib/actions/commitmentAction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAkB,MAAM,SAAS,CAAC;AAErD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAEhE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAIxE,cAAM,gBAAgB;IACpB,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAA+B;gBAExD,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc;IAM1D;;;;;OAKG;IACH,gBAAgB,gBACD,MAAM,mBAAmB,CAAC,SAChC,WAAW,aACP,MAAM,KAChB,QAAQ,OAAO,CAAC,CAuDjB;IAEF;;;;;OAKG;IACH,gBAAgB,YACL,MAAM,MAAM,CAAC,SACf,WAAW,aACP,MAAM,KAChB,QAAQ,IAAI,CAAC,CAqBd;IAEF;;;;;OAKG;IACH,WAAW,UAAiB,MAAM,aAAa,MAAM,mBAYnD;CACH;AAED,eAAe,gBAAgB,CAAC"}
@@ -0,0 +1,110 @@
1
+ import { In } from 'typeorm';
2
+ import { chunk } from 'lodash-es';
3
+ import CommitmentEntity from '../entities/CommitmentEntity';
4
+ import { dbIdChunkSize } from '../constants';
5
+ class CommitmentAction {
6
+ logger;
7
+ datasource;
8
+ commitmentRepository;
9
+ constructor(dataSource, logger) {
10
+ this.datasource = dataSource;
11
+ this.logger = logger;
12
+ this.commitmentRepository = dataSource.getRepository(CommitmentEntity);
13
+ }
14
+ /**
15
+ * It stores list of observations in the dataSource with block id
16
+ * @param commitments
17
+ * @param block
18
+ * @param extractor
19
+ */
20
+ storeCommitments = async (commitments, block, extractor) => {
21
+ if (commitments.length === 0)
22
+ return true;
23
+ const boxIds = commitments.map((commitment) => commitment.boxId);
24
+ const savedCommitments = await this.commitmentRepository.findBy({
25
+ boxId: In(boxIds),
26
+ extractor: extractor,
27
+ });
28
+ let success = true;
29
+ const queryRunner = this.datasource.createQueryRunner();
30
+ await queryRunner.connect();
31
+ await queryRunner.startTransaction();
32
+ const repository = await queryRunner.manager.getRepository(CommitmentEntity);
33
+ try {
34
+ for (const commitment of commitments) {
35
+ const saved = savedCommitments.some((entity) => {
36
+ return entity.boxId === commitment.boxId;
37
+ });
38
+ const entity = {
39
+ txId: commitment.txId,
40
+ commitment: commitment.commitment,
41
+ eventId: commitment.eventId,
42
+ boxId: commitment.boxId,
43
+ WID: commitment.WID,
44
+ extractor: extractor,
45
+ block: block.hash,
46
+ height: block.height,
47
+ boxSerialized: commitment.boxSerialized,
48
+ rwtCount: commitment.rwtCount,
49
+ };
50
+ if (!saved) {
51
+ this.logger.info(`Saving commitment [${commitment.boxId}] for event [${commitment.eventId}] from watcher [${commitment.WID}] at height ${block.height} and extractor ${extractor}`);
52
+ await repository.insert(entity);
53
+ }
54
+ else {
55
+ this.logger.info(`Updating commitment [${commitment.boxId}] for event [${commitment.eventId}] from watcher [${commitment.WID}] at height ${block.height} and extractor ${extractor}`);
56
+ await repository.update({ boxId: commitment.boxId }, entity);
57
+ }
58
+ this.logger.debug(`Entity: ${JSON.stringify(entity)}`);
59
+ }
60
+ await queryRunner.commitTransaction();
61
+ }
62
+ catch (e) {
63
+ this.logger.error(`An error occurred during store commitments action: ${e}`);
64
+ await queryRunner.rollbackTransaction();
65
+ success = false;
66
+ }
67
+ finally {
68
+ await queryRunner.release();
69
+ }
70
+ return success;
71
+ };
72
+ /**
73
+ * Update spendBlock and spendHeight of commitments spent on the block
74
+ * @param spendId
75
+ * @param block
76
+ * @param extractor
77
+ */
78
+ spendCommitments = async (spendId, block, extractor) => {
79
+ const spendIdChunks = chunk(spendId, dbIdChunkSize);
80
+ for (const spendIdChunk of spendIdChunks) {
81
+ const updateResult = await this.commitmentRepository.update({ boxId: In(spendIdChunk), extractor: extractor }, { spendBlock: block.hash, spendHeight: block.height });
82
+ if (updateResult.affected && updateResult.affected > 0) {
83
+ const spentRows = await this.commitmentRepository.findBy({
84
+ boxId: In(spendIdChunk),
85
+ spendBlock: block.hash,
86
+ });
87
+ for (const row of spentRows) {
88
+ this.logger.info(`Spent commitment [${row.boxId}] for event [${row.eventId}] at height ${block.height}`);
89
+ this.logger.debug(`Spent commitment [${JSON.stringify(row)}]`);
90
+ }
91
+ }
92
+ }
93
+ };
94
+ /**
95
+ * Delete all commitments corresponding to the block(id) and extractor(id)
96
+ * and update all commitments spent on the specified block
97
+ * @param block
98
+ * @param extractor
99
+ */
100
+ deleteBlock = async (block, extractor) => {
101
+ this.logger.info(`Deleting commitments of block [${block}] and extractor ${extractor}`);
102
+ await this.commitmentRepository.delete({
103
+ block: block,
104
+ extractor: extractor,
105
+ });
106
+ await this.commitmentRepository.update({ spendBlock: block, extractor: extractor }, { spendBlock: null, spendHeight: 0 });
107
+ };
108
+ }
109
+ export default CommitmentAction;
110
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWl0bWVudEFjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9hY3Rpb25zL2NvbW1pdG1lbnRBY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLEVBQUUsRUFBYyxNQUFNLFNBQVMsQ0FBQztBQUNyRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBS2xDLE9BQU8sZ0JBQWdCLE1BQU0sOEJBQThCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUU3QyxNQUFNLGdCQUFnQjtJQUNYLE1BQU0sQ0FBaUI7SUFDZixVQUFVLENBQWE7SUFDdkIsb0JBQW9CLENBQStCO0lBRXBFLFlBQVksVUFBc0IsRUFBRSxNQUFzQjtRQUN4RCxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsb0JBQW9CLEdBQUcsVUFBVSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGdCQUFnQixHQUFHLEtBQUssRUFDdEIsV0FBdUMsRUFDdkMsS0FBa0IsRUFDbEIsU0FBaUIsRUFDQyxFQUFFO1FBQ3BCLElBQUksV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDMUMsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDO1lBQzlELEtBQUssRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDO1lBQ2pCLFNBQVMsRUFBRSxTQUFTO1NBQ3JCLENBQUMsQ0FBQztRQUNI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QUNILE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FDcEMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsRUFDM0MsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FDckMsQ0FBQztJQUNKLENBQUMsQ0FBQztDQUNIO0FBRUQsZUFBZSxnQkFBZ0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGFTb3VyY2UsIEluLCBSZXBvc2l0b3J5IH0gZnJvbSAndHlwZW9ybSc7XG5pbXBvcnQgeyBjaHVuayB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBCbG9ja0VudGl0eSB9IGZyb20gJ0Byb3Nlbi1icmlkZ2Uvc2Nhbm5lcic7XG5pbXBvcnQgeyBBYnN0cmFjdExvZ2dlciB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvbG9nZ2VyLWludGVyZmFjZSc7XG5cbmltcG9ydCB7IGV4dHJhY3RlZENvbW1pdG1lbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2V4dHJhY3RlZENvbW1pdG1lbnQnO1xuaW1wb3J0IENvbW1pdG1lbnRFbnRpdHkgZnJvbSAnLi4vZW50aXRpZXMvQ29tbWl0bWVudEVudGl0eSc7XG5pbXBvcnQgeyBkYklkQ2h1bmtTaXplIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcblxuY2xhc3MgQ29tbWl0bWVudEFjdGlvbiB7XG4gIHJlYWRvbmx5IGxvZ2dlcjogQWJzdHJhY3RMb2dnZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGF0YXNvdXJjZTogRGF0YVNvdXJjZTtcbiAgcHJpdmF0ZSByZWFkb25seSBjb21taXRtZW50UmVwb3NpdG9yeTogUmVwb3NpdG9yeTxDb21taXRtZW50RW50aXR5PjtcblxuICBjb25zdHJ1Y3RvcihkYXRhU291cmNlOiBEYXRhU291cmNlLCBsb2dnZXI6IEFic3RyYWN0TG9nZ2VyKSB7XG4gICAgdGhpcy5kYXRhc291cmNlID0gZGF0YVNvdXJjZTtcbiAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlcjtcbiAgICB0aGlzLmNvbW1pdG1lbnRSZXBvc2l0b3J5ID0gZGF0YVNvdXJjZS5nZXRSZXBvc2l0b3J5KENvbW1pdG1lbnRFbnRpdHkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEl0IHN0b3JlcyBsaXN0IG9mIG9ic2VydmF0aW9ucyBpbiB0aGUgZGF0YVNvdXJjZSB3aXRoIGJsb2NrIGlkXG4gICAqIEBwYXJhbSBjb21taXRtZW50c1xuICAgKiBAcGFyYW0gYmxvY2tcbiAgICogQHBhcmFtIGV4dHJhY3RvclxuICAgKi9cbiAgc3RvcmVDb21taXRtZW50cyA9IGFzeW5jIChcbiAgICBjb21taXRtZW50czogQXJyYXk8ZXh0cmFjdGVkQ29tbWl0bWVudD4sXG4gICAgYmxvY2s6IEJsb2NrRW50aXR5LFxuICAgIGV4dHJhY3Rvcjogc3RyaW5nXG4gICk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICAgIGlmIChjb21taXRtZW50cy5sZW5ndGggPT09IDApIHJldHVybiB0cnVlO1xuICAgIGNvbnN0IGJveElkcyA9IGNvbW1pdG1lbnRzLm1hcCgoY29tbWl0bWVudCkgPT4gY29tbWl0bWVudC5ib3hJZCk7XG4gICAgY29uc3Qgc2F2ZWRDb21taXRtZW50cyA9IGF3YWl0IHRoaXMuY29tbWl0bWVudFJlcG9zaXRvcnkuZmluZEJ5KHtcbiAgICAgIGJveElkOiBJbihib3hJZHMpLFxuICAgICAgZXh0cmFjdG9yOiBleHRyYWN0b3IsXG4gICAgfSk7XG4gICAgbGV0IHN1Y2Nlc3MgPSB0cnVlO1xuICAgIGNvbnN0IHF1ZXJ5UnVubmVyID0gdGhpcy5kYXRhc291cmNlLmNyZWF0ZVF1ZXJ5UnVubmVyKCk7XG4gICAgYXdhaXQgcXVlcnlSdW5uZXIuY29ubmVjdCgpO1xuICAgIGF3YWl0IHF1ZXJ5UnVubmVyLnN0YXJ0VHJhbnNhY3Rpb24oKTtcbiAgICBjb25zdCByZXBvc2l0b3J5ID0gYXdhaXQgcXVlcnlSdW5uZXIubWFuYWdlci5nZXRSZXBvc2l0b3J5KFxuICAgICAgQ29tbWl0bWVudEVudGl0eVxuICAgICk7XG4gICAgdHJ5IHtcbiAgICAgIGZvciAoY29uc3QgY29tbWl0bWVudCBvZiBjb21taXRtZW50cykge1xuICAgICAgICBjb25zdCBzYXZlZCA9IHNhdmVkQ29tbWl0bWVudHMuc29tZSgoZW50aXR5KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGVudGl0eS5ib3hJZCA9PT0gY29tbWl0bWVudC5ib3hJZDtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGVudGl0eSA9IHtcbiAgICAgICAgICB0eElkOiBjb21taXRtZW50LnR4SWQsXG4gICAgICAgICAgY29tbWl0bWVudDogY29tbWl0bWVudC5jb21taXRtZW50LFxuICAgICAgICAgIGV2ZW50SWQ6IGNvbW1pdG1lbnQuZXZlbnRJZCxcbiAgICAgICAgICBib3hJZDogY29tbWl0bWVudC5ib3hJZCxcbiAgICAgICAgICBXSUQ6IGNvbW1pdG1lbnQuV0lELFxuICAgICAgICAgIGV4dHJhY3RvcjogZXh0cmFjdG9yLFxuICAgICAgICAgIGJsb2NrOiBibG9jay5oYXNoLFxuICAgICAgICAgIGhlaWdodDogYmxvY2suaGVpZ2h0LFxuICAgICAgICAgIGJveFNlcmlhbGl6ZWQ6IGNvbW1pdG1lbnQuYm94U2VyaWFsaXplZCxcbiAgICAgICAgICByd3RDb3VudDogY29tbWl0bWVudC5yd3RDb3VudCxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKCFzYXZlZCkge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmluZm8oXG4gICAgICAgICAgICBgU2F2aW5nIGNvbW1pdG1lbnQgWyR7Y29tbWl0bWVudC5ib3hJZH1dIGZvciBldmVudCBbJHtjb21taXRtZW50LmV2ZW50SWR9XSBmcm9tIHdhdGNoZXIgWyR7Y29tbWl0bWVudC5XSUR9XSBhdCBoZWlnaHQgJHtibG9jay5oZWlnaHR9IGFuZCBleHRyYWN0b3IgJHtleHRyYWN0b3J9YFxuICAgICAgICAgICk7XG4gICAgICAgICAgYXdhaXQgcmVwb3NpdG9yeS5pbnNlcnQoZW50aXR5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxvZ2dlci5pbmZvKFxuICAgICAgICAgICAgYFVwZGF0aW5nIGNvbW1pdG1lbnQgWyR7Y29tbWl0bWVudC5ib3hJZH1dIGZvciBldmVudCBbJHtjb21taXRtZW50LmV2ZW50SWR9XSBmcm9tIHdhdGNoZXIgWyR7Y29tbWl0bWVudC5XSUR9XSBhdCBoZWlnaHQgJHtibG9jay5oZWlnaHR9IGFuZCBleHRyYWN0b3IgJHtleHRyYWN0b3J9YFxuICAgICAgICAgICk7XG4gICAgICAgICAgYXdhaXQgcmVwb3NpdG9yeS51cGRhdGUoeyBib3hJZDogY29tbWl0bWVudC5ib3hJZCB9LCBlbnRpdHkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBFbnRpdHk6ICR7SlNPTi5zdHJpbmdpZnkoZW50aXR5KX1gKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHF1ZXJ5UnVubmVyLmNvbW1pdFRyYW5zYWN0aW9uKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoXG4gICAgICAgIGBBbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgc3RvcmUgY29tbWl0bWVudHMgYWN0aW9uOiAke2V9YFxuICAgICAgKTtcbiAgICAgIGF3YWl0IHF1ZXJ5UnVubmVyLnJvbGxiYWNrVHJhbnNhY3Rpb24oKTtcbiAgICAgIHN1Y2Nlc3MgPSBmYWxzZTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgcXVlcnlSdW5uZXIucmVsZWFzZSgpO1xuICAgIH1cbiAgICByZXR1cm4gc3VjY2VzcztcbiAgfTtcblxuICAvKipcbiAgICogVXBkYXRlIHNwZW5kQmxvY2sgYW5kIHNwZW5kSGVpZ2h0IG9mIGNvbW1pdG1lbnRzIHNwZW50IG9uIHRoZSBibG9ja1xuICAgKiBAcGFyYW0gc3BlbmRJZFxuICAgKiBAcGFyYW0gYmxvY2tcbiAgICogQHBhcmFtIGV4dHJhY3RvclxuICAgKi9cbiAgc3BlbmRDb21taXRtZW50cyA9IGFzeW5jIChcbiAgICBzcGVuZElkOiBBcnJheTxzdHJpbmc+LFxuICAgIGJsb2NrOiBCbG9ja0VudGl0eSxcbiAgICBleHRyYWN0b3I6IHN0cmluZ1xuICApOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBjb25zdCBzcGVuZElkQ2h1bmtzID0gY2h1bmsoc3BlbmRJZCwgZGJJZENodW5rU2l6ZSk7XG4gICAgZm9yIChjb25zdCBzcGVuZElkQ2h1bmsgb2Ygc3BlbmRJZENodW5rcykge1xuICAgICAgY29uc3QgdXBkYXRlUmVzdWx0ID0gYXdhaXQgdGhpcy5jb21taXRtZW50UmVwb3NpdG9yeS51cGRhdGUoXG4gICAgICAgIHsgYm94SWQ6IEluKHNwZW5kSWRDaHVuayksIGV4dHJhY3RvcjogZXh0cmFjdG9yIH0sXG4gICAgICAgIHsgc3BlbmRCbG9jazogYmxvY2suaGFzaCwgc3BlbmRIZWlnaHQ6IGJsb2NrLmhlaWdodCB9XG4gICAgICApO1xuXG4gICAgICBpZiAodXBkYXRlUmVzdWx0LmFmZmVjdGVkICYmIHVwZGF0ZVJlc3VsdC5hZmZlY3RlZCA+IDApIHtcbiAgICAgICAgY29uc3Qgc3BlbnRSb3dzID0gYXdhaXQgdGhpcy5jb21taXRtZW50UmVwb3NpdG9yeS5maW5kQnkoe1xuICAgICAgICAgIGJveElkOiBJbihzcGVuZElkQ2h1bmspLFxuICAgICAgICAgIHNwZW5kQmxvY2s6IGJsb2NrLmhhc2gsXG4gICAgICAgIH0pO1xuICAgICAgICBmb3IgKGNvbnN0IHJvdyBvZiBzcGVudFJvd3MpIHtcbiAgICAgICAgICB0aGlzLmxvZ2dlci5pbmZvKFxuICAgICAgICAgICAgYFNwZW50IGNvbW1pdG1lbnQgWyR7cm93LmJveElkfV0gZm9yIGV2ZW50IFske3Jvdy5ldmVudElkfV0gYXQgaGVpZ2h0ICR7YmxvY2suaGVpZ2h0fWBcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBTcGVudCBjb21taXRtZW50IFske0pTT04uc3RyaW5naWZ5KHJvdyl9XWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBEZWxldGUgYWxsIGNvbW1pdG1lbnRzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGJsb2NrKGlkKSBhbmQgZXh0cmFjdG9yKGlkKVxuICAgKiBhbmQgdXBkYXRlIGFsbCBjb21taXRtZW50cyBzcGVudCBvbiB0aGUgc3BlY2lmaWVkIGJsb2NrXG4gICAqIEBwYXJhbSBibG9ja1xuICAgKiBAcGFyYW0gZXh0cmFjdG9yXG4gICAqL1xuICBkZWxldGVCbG9jayA9IGFzeW5jIChibG9jazogc3RyaW5nLCBleHRyYWN0b3I6IHN0cmluZykgPT4ge1xuICAgIHRoaXMubG9nZ2VyLmluZm8oXG4gICAgICBgRGVsZXRpbmcgY29tbWl0bWVudHMgb2YgYmxvY2sgWyR7YmxvY2t9XSBhbmQgZXh0cmFjdG9yICR7ZXh0cmFjdG9yfWBcbiAgICApO1xuICAgIGF3YWl0IHRoaXMuY29tbWl0bWVudFJlcG9zaXRvcnkuZGVsZXRlKHtcbiAgICAgIGJsb2NrOiBibG9jayxcbiAgICAgIGV4dHJhY3RvcjogZXh0cmFjdG9yLFxuICAgIH0pO1xuICAgIGF3YWl0IHRoaXMuY29tbWl0bWVudFJlcG9zaXRvcnkudXBkYXRlKFxuICAgICAgeyBzcGVuZEJsb2NrOiBibG9jaywgZXh0cmFjdG9yOiBleHRyYWN0b3IgfSxcbiAgICAgIHsgc3BlbmRCbG9jazogbnVsbCwgc3BlbmRIZWlnaHQ6IDAgfVxuICAgICk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbW1pdG1lbnRBY3Rpb247XG4iXX0=
@@ -0,0 +1,64 @@
1
+ import { DataSource } from 'typeorm';
2
+ import { BlockEntity } from '@rosen-bridge/scanner';
3
+ import { AbstractLogger } from '@rosen-bridge/logger-interface';
4
+ import { ExtractedPermit } from '../interfaces/extractedPermit';
5
+ declare class PermitAction {
6
+ readonly logger: AbstractLogger;
7
+ private readonly datasource;
8
+ private readonly permitRepository;
9
+ constructor(dataSource: DataSource, logger: AbstractLogger);
10
+ /**
11
+ * insert a new permit boxes in the database
12
+ * @param permits
13
+ * @param initialHeight
14
+ * @param extractor
15
+ */
16
+ insertPermit: (permit: ExtractedPermit, extractor: string) => Promise<import("typeorm").InsertResult>;
17
+ /**
18
+ * update an unspent permit in the database
19
+ * @param permit
20
+ * @param extractor
21
+ */
22
+ updatePermit: (permit: ExtractedPermit, extractor: string) => Promise<void>;
23
+ /**
24
+ * It stores list of permits in the dataSource with block id
25
+ * @param permits
26
+ * @param block
27
+ * @param extractor
28
+ */
29
+ storePermits: (permits: Array<ExtractedPermit>, block: BlockEntity, extractor: string) => Promise<boolean>;
30
+ /**
31
+ * Update spendBlock and spendHeight of permits spent on the block
32
+ * @param spendId
33
+ * @param block
34
+ * @param extractor
35
+ */
36
+ spendPermits: (spendId: Array<string>, block: BlockEntity, extractor: string) => Promise<void>;
37
+ /**
38
+ * Delete all permits corresponding to the block(id) and extractor(id)
39
+ * and update all permits spent on the specified block
40
+ * @param block
41
+ * @param extractor
42
+ */
43
+ deleteBlock: (block: string, extractor: string) => Promise<void>;
44
+ /**
45
+ * Returns all stored permit box ids
46
+ */
47
+ getAllPermitBoxIds: (extractor: string) => Promise<Array<string>>;
48
+ /**
49
+ * Removes specified permit
50
+ * @param boxId
51
+ * @param extractor
52
+ */
53
+ removePermit: (boxId: string, extractor: string) => Promise<import("typeorm").DeleteResult>;
54
+ /**
55
+ * Update the permit spending information
56
+ * @param boxId
57
+ * @param extractor
58
+ * @param blockId
59
+ * @param blockHeight
60
+ */
61
+ updateSpendBlock: (boxId: string, extractor: string, blockId: string, blockHeight: number) => Promise<import("typeorm").UpdateResult>;
62
+ }
63
+ export default PermitAction;
64
+ //# sourceMappingURL=permitAction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permitAction.d.ts","sourceRoot":"","sources":["../../lib/actions/permitAction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAkB,MAAM,SAAS,CAAC;AAErD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAEhE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAIhE,cAAM,YAAY;IAChB,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA2B;gBAEhD,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc;IAM1D;;;;;OAKG;IACH,YAAY,WAAkB,eAAe,aAAa,MAAM,6CAY9D;IAEF;;;;OAIG;IACH,YAAY,WAAkB,eAAe,aAAa,MAAM,mBAa9D;IAEF;;;;;OAKG;IACH,YAAY,YACD,MAAM,eAAe,CAAC,SACxB,WAAW,aACP,MAAM,sBAiDjB;IAEF;;;;;OAKG;IACH,YAAY,YACD,MAAM,MAAM,CAAC,SACf,WAAW,aACP,MAAM,KAChB,QAAQ,IAAI,CAAC,CAoBd;IAEF;;;;;OAKG;IACH,WAAW,UAAiB,MAAM,aAAa,MAAM,KAAG,QAAQ,IAAI,CAAC,CASnE;IAEF;;OAEG;IACH,kBAAkB,cAAqB,MAAM,KAAG,QAAQ,MAAM,MAAM,CAAC,CAAC,CAUpE;IAEF;;;;OAIG;IACH,YAAY,UAAiB,MAAM,aAAa,MAAM,6CAKpD;IAEF;;;;;;OAMG;IACH,gBAAgB,UACP,MAAM,aACF,MAAM,WACR,MAAM,eACF,MAAM,6CAMnB;CACH;AAED,eAAe,YAAY,CAAC"}
@@ -0,0 +1,173 @@
1
+ import { In } from 'typeorm';
2
+ import { chunk } from 'lodash-es';
3
+ import PermitEntity from '../entities/PermitEntity';
4
+ import { dbIdChunkSize } from '../constants';
5
+ class PermitAction {
6
+ logger;
7
+ datasource;
8
+ permitRepository;
9
+ constructor(dataSource, logger) {
10
+ this.datasource = dataSource;
11
+ this.logger = logger;
12
+ this.permitRepository = dataSource.getRepository(PermitEntity);
13
+ }
14
+ /**
15
+ * insert a new permit boxes in the database
16
+ * @param permits
17
+ * @param initialHeight
18
+ * @param extractor
19
+ */
20
+ insertPermit = async (permit, extractor) => {
21
+ return this.permitRepository.insert({
22
+ boxId: permit.boxId,
23
+ boxSerialized: permit.boxSerialized,
24
+ block: permit.block,
25
+ height: permit.height,
26
+ extractor: extractor,
27
+ WID: permit.WID,
28
+ txId: permit.txId,
29
+ spendBlock: permit.spendBlock,
30
+ spendHeight: permit.spendHeight,
31
+ });
32
+ };
33
+ /**
34
+ * update an unspent permit in the database
35
+ * @param permit
36
+ * @param extractor
37
+ */
38
+ updatePermit = async (permit, extractor) => {
39
+ await this.permitRepository.update({ boxId: permit.boxId, extractor: extractor }, {
40
+ boxSerialized: permit.boxSerialized,
41
+ block: permit.block,
42
+ height: permit.height,
43
+ WID: permit.WID,
44
+ txId: permit.txId,
45
+ spendBlock: null,
46
+ spendHeight: 0,
47
+ });
48
+ };
49
+ /**
50
+ * It stores list of permits in the dataSource with block id
51
+ * @param permits
52
+ * @param block
53
+ * @param extractor
54
+ */
55
+ storePermits = async (permits, block, extractor) => {
56
+ if (permits.length === 0)
57
+ return true;
58
+ const boxIds = permits.map((permit) => permit.boxId);
59
+ const savedPermits = await this.permitRepository.findBy({
60
+ boxId: In(boxIds),
61
+ extractor: extractor,
62
+ });
63
+ let success = true;
64
+ const queryRunner = this.datasource.createQueryRunner();
65
+ await queryRunner.connect();
66
+ await queryRunner.startTransaction();
67
+ const repository = await queryRunner.manager.getRepository(PermitEntity);
68
+ try {
69
+ for (const permit of permits) {
70
+ const saved = savedPermits.some((entity) => {
71
+ return entity.boxId === permit.boxId;
72
+ });
73
+ const entity = {
74
+ boxId: permit.boxId,
75
+ boxSerialized: permit.boxSerialized,
76
+ block: block.hash,
77
+ height: block.height,
78
+ extractor: extractor,
79
+ WID: permit.WID,
80
+ txId: permit.txId,
81
+ };
82
+ if (!saved) {
83
+ this.logger.debug(`Saving permit [${permit.boxId}] belonging to watcher [${permit.WID}] at height ${block.height} and extractor ${extractor}`);
84
+ await repository.insert(entity);
85
+ }
86
+ else {
87
+ this.logger.debug(`Updating permit [${permit.boxId}] belonging to watcher [${permit.WID}] at height ${block.height} and extractor ${extractor}`);
88
+ await repository.update({ boxId: permit.boxId }, entity);
89
+ }
90
+ this.logger.debug(`Entity: ${JSON.stringify(entity)}`);
91
+ }
92
+ await queryRunner.commitTransaction();
93
+ }
94
+ catch (e) {
95
+ this.logger.error(`An error occurred during store permit action: ${e}`);
96
+ await queryRunner.rollbackTransaction();
97
+ success = false;
98
+ }
99
+ finally {
100
+ await queryRunner.release();
101
+ }
102
+ return success;
103
+ };
104
+ /**
105
+ * Update spendBlock and spendHeight of permits spent on the block
106
+ * @param spendId
107
+ * @param block
108
+ * @param extractor
109
+ */
110
+ spendPermits = async (spendId, block, extractor) => {
111
+ const spendIdChunks = chunk(spendId, dbIdChunkSize);
112
+ for (const spendIdChunk of spendIdChunks) {
113
+ const updateResult = await this.permitRepository.update({ boxId: In(spendIdChunk), extractor: extractor }, { spendBlock: block.hash, spendHeight: block.height });
114
+ if (updateResult.affected && updateResult.affected > 0) {
115
+ const spentRows = await this.permitRepository.findBy({
116
+ boxId: In(spendIdChunk),
117
+ spendBlock: block.hash,
118
+ });
119
+ for (const row of spentRows) {
120
+ this.logger.debug(`Spent permit with boxId [${row.boxId}] belonging to watcher with WID [${row.WID}] at height ${block.height}`);
121
+ }
122
+ }
123
+ }
124
+ };
125
+ /**
126
+ * Delete all permits corresponding to the block(id) and extractor(id)
127
+ * and update all permits spent on the specified block
128
+ * @param block
129
+ * @param extractor
130
+ */
131
+ deleteBlock = async (block, extractor) => {
132
+ this.logger.info(`Deleting permits at block ${block} and extractor ${extractor}`);
133
+ await this.permitRepository.delete({ block: block, extractor: extractor });
134
+ await this.permitRepository.update({ spendBlock: block, extractor: extractor }, { spendBlock: null, spendHeight: 0 });
135
+ };
136
+ /**
137
+ * Returns all stored permit box ids
138
+ */
139
+ getAllPermitBoxIds = async (extractor) => {
140
+ const boxIds = await this.permitRepository.find({
141
+ where: {
142
+ extractor: extractor,
143
+ },
144
+ select: {
145
+ boxId: true,
146
+ },
147
+ });
148
+ return boxIds.map((item) => item.boxId);
149
+ };
150
+ /**
151
+ * Removes specified permit
152
+ * @param boxId
153
+ * @param extractor
154
+ */
155
+ removePermit = async (boxId, extractor) => {
156
+ return await this.permitRepository.delete({
157
+ boxId: boxId,
158
+ extractor: extractor,
159
+ });
160
+ };
161
+ /**
162
+ * Update the permit spending information
163
+ * @param boxId
164
+ * @param extractor
165
+ * @param blockId
166
+ * @param blockHeight
167
+ */
168
+ updateSpendBlock = async (boxId, extractor, blockId, blockHeight) => {
169
+ return await this.permitRepository.update({ boxId: boxId, extractor: extractor }, { spendBlock: blockId, spendHeight: blockHeight });
170
+ };
171
+ }
172
+ export default PermitAction;
173
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWl0QWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL2FjdGlvbnMvcGVybWl0QWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxFQUFFLEVBQWMsTUFBTSxTQUFTLENBQUM7QUFDckQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUtsQyxPQUFPLFlBQVksTUFBTSwwQkFBMEIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRTdDLE1BQU0sWUFBWTtJQUNQLE1BQU0sQ0FBaUI7SUFDZixVQUFVLENBQWE7SUFDdkIsZ0JBQWdCLENBQTJCO0lBRTVELFlBQVksVUFBc0IsRUFBRSxNQUFzQjtRQUN4RCxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsVUFBVSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxZQUFZLEdBQUcsS0FBSyxFQUFFLE1BQXVCLEVBQUUsU0FBaUIsRUFBRSxFQUFFO1FBQ2xFLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQztZQUNsQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7WUFDbkIsYUFBYSxFQUFFLE1BQU0sQ0FBQyxhQUFhO1lBQ25DLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztZQUNuQixNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07WUFDckIsU0FBUyxFQUFFLFNBQVM7WUFDcEIsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHO1lBQ2YsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO1lBQ2pCLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVTtZQUM3QixXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVc7U0FD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QUFJO2FBQ1o7U0FDRixDQUFDLENBQUM7UUFDSCxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUF1QixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0QsQ0FBQyxDQUFDO0lBRUY7Ozs7T0FJRztJQUNILFlBQVksR0FBRyxLQUFLLEVBQUUsS0FBYSxFQUFFLFNBQWlCLEVBQUUsRUFBRTtRQUN4RCxPQUFPLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQztZQUN4QyxLQUFLLEVBQUUsS0FBSztZQUNaLFNBQVMsRUFBRSxTQUFTO1NBQ3JCLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQztJQUVGOzs7Ozs7T0FNRztJQUNILGdCQUFnQixHQUFHLEtBQUssRUFDdEIsS0FBYSxFQUNiLFNBQWlCLEVBQ2pCLE9BQWUsRUFDZixXQUFtQixFQUNuQixFQUFFO1FBQ0YsT0FBTyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQ3ZDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEVBQ3RDLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLENBQ2xELENBQUM7SUFDSixDQUFDLENBQUM7Q0FDSDtBQUVELGVBQWUsWUFBWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0YVNvdXJjZSwgSW4sIFJlcG9zaXRvcnkgfSBmcm9tICd0eXBlb3JtJztcbmltcG9ydCB7IGNodW5rIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEJsb2NrRW50aXR5IH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9zY2FubmVyJztcbmltcG9ydCB7IEFic3RyYWN0TG9nZ2VyIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9sb2dnZXItaW50ZXJmYWNlJztcblxuaW1wb3J0IHsgRXh0cmFjdGVkUGVybWl0IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9leHRyYWN0ZWRQZXJtaXQnO1xuaW1wb3J0IFBlcm1pdEVudGl0eSBmcm9tICcuLi9lbnRpdGllcy9QZXJtaXRFbnRpdHknO1xuaW1wb3J0IHsgZGJJZENodW5rU2l6ZSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5cbmNsYXNzIFBlcm1pdEFjdGlvbiB7XG4gIHJlYWRvbmx5IGxvZ2dlcjogQWJzdHJhY3RMb2dnZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGF0YXNvdXJjZTogRGF0YVNvdXJjZTtcbiAgcHJpdmF0ZSByZWFkb25seSBwZXJtaXRSZXBvc2l0b3J5OiBSZXBvc2l0b3J5PFBlcm1pdEVudGl0eT47XG5cbiAgY29uc3RydWN0b3IoZGF0YVNvdXJjZTogRGF0YVNvdXJjZSwgbG9nZ2VyOiBBYnN0cmFjdExvZ2dlcikge1xuICAgIHRoaXMuZGF0YXNvdXJjZSA9IGRhdGFTb3VyY2U7XG4gICAgdGhpcy5sb2dnZXIgPSBsb2dnZXI7XG4gICAgdGhpcy5wZXJtaXRSZXBvc2l0b3J5ID0gZGF0YVNvdXJjZS5nZXRSZXBvc2l0b3J5KFBlcm1pdEVudGl0eSk7XG4gIH1cblxuICAvKipcbiAgICogaW5zZXJ0IGEgbmV3IHBlcm1pdCBib3hlcyBpbiB0aGUgZGF0YWJhc2VcbiAgICogQHBhcmFtIHBlcm1pdHNcbiAgICogQHBhcmFtIGluaXRpYWxIZWlnaHRcbiAgICogQHBhcmFtIGV4dHJhY3RvclxuICAgKi9cbiAgaW5zZXJ0UGVybWl0ID0gYXN5bmMgKHBlcm1pdDogRXh0cmFjdGVkUGVybWl0LCBleHRyYWN0b3I6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiB0aGlzLnBlcm1pdFJlcG9zaXRvcnkuaW5zZXJ0KHtcbiAgICAgIGJveElkOiBwZXJtaXQuYm94SWQsXG4gICAgICBib3hTZXJpYWxpemVkOiBwZXJtaXQuYm94U2VyaWFsaXplZCxcbiAgICAgIGJsb2NrOiBwZXJtaXQuYmxvY2ssXG4gICAgICBoZWlnaHQ6IHBlcm1pdC5oZWlnaHQsXG4gICAgICBleHRyYWN0b3I6IGV4dHJhY3RvcixcbiAgICAgIFdJRDogcGVybWl0LldJRCxcbiAgICAgIHR4SWQ6IHBlcm1pdC50eElkLFxuICAgICAgc3BlbmRCbG9jazogcGVybWl0LnNwZW5kQmxvY2ssXG4gICAgICBzcGVuZEhlaWdodDogcGVybWl0LnNwZW5kSGVpZ2h0LFxuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiB1cGRhdGUgYW4gdW5zcGVudCBwZXJtaXQgaW4gdGhlIGRhdGFiYXNlXG4gICAqIEBwYXJhbSBwZXJtaXRcbiAgICogQHBhcmFtIGV4dHJhY3RvclxuICAgKi9cbiAgdXBkYXRlUGVybWl0ID0gYXN5bmMgKHBlcm1pdDogRXh0cmFjdGVkUGVybWl0LCBleHRyYWN0b3I6IHN0cmluZykgPT4ge1xuICAgIGF3YWl0IHRoaXMucGVybWl0UmVwb3NpdG9yeS51cGRhdGUoXG4gICAgICB7IGJveElkOiBwZXJtaXQuYm94SWQsIGV4dHJhY3RvcjogZXh0cmFjdG9yIH0sXG4gICAgICB7XG4gICAgICAgIGJveFNlcmlhbGl6ZWQ6IHBlcm1pdC5ib3hTZXJpYWxpemVkLFxuICAgICAgICBibG9jazogcGVybWl0LmJsb2NrLFxuICAgICAgICBoZWlnaHQ6IHBlcm1pdC5oZWlnaHQsXG4gICAgICAgIFdJRDogcGVybWl0LldJRCxcbiAgICAgICAgdHhJZDogcGVybWl0LnR4SWQsXG4gICAgICAgIHNwZW5kQmxvY2s6IG51bGwsXG4gICAgICAgIHNwZW5kSGVpZ2h0OiAwLFxuICAgICAgfVxuICAgICk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEl0IHN0b3JlcyBsaXN0IG9mIHBlcm1pdHMgaW4gdGhlIGRhdGFTb3VyY2Ugd2l0aCBibG9jayBpZFxuICAgKiBAcGFyYW0gcGVybWl0c1xuICAgKiBAcGFyYW0gYmxvY2tcbiAgICogQHBhcmFtIGV4dHJhY3RvclxuICAgKi9cbiAgc3RvcmVQZXJtaXRzID0gYXN5bmMgKFxuICAgIHBlcm1pdHM6IEFycmF5PEV4dHJhY3RlZFBlcm1pdD4sXG4gICAgYmxvY2s6IEJsb2NrRW50aXR5LFxuICAgIGV4dHJhY3Rvcjogc3RyaW5nXG4gICkgPT4ge1xuICAgIGlmIChwZXJtaXRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRydWU7XG4gICAgY29uc3QgYm94SWRzID0gcGVybWl0cy5tYXAoKHBlcm1pdCkgPT4gcGVybWl0LmJveElkKTtcbiAgICBjb25zdCBzYXZlZFBlcm1pdHMgPSBhd2FpdCB0aGlzLnBlcm1pdFJlcG9zaXRvcnkuZmluZEJ5KHtcbiAgICAgIGJveElkOiBJbihib3hJZHMpLFxuICAgICAgZXh0cmFjdG9yOiBleHRyYWN0b3IsXG4gICAgfSk7XG4gICAgbGV0IHN1Y2Nlc3MgPSB0cnVlO1xuICAgIGNvbnN0IHF1ZXJ5UnVubmVyID0gdGhpcy5kYXRhc291cmNlLmNyZWF0ZVF1ZXJ5UnVubmVyKCk7XG4gICAgYXdhaXQgcXVlcnlSdW5uZXIuY29ubmVjdCgpO1xuICAgIGF3YWl0IHF1ZXJ5UnVubmVyLnN0YXJ0VHJhbnNhY3Rpb24oKTtcbiAgICBjb25zdCByZXBvc2l0b3J5ID0gYXdhaXQgcXVlcnlSdW5uZXIubWFuYWdlci5nZXRSZXBvc2l0b3J5KFBlcm1pdEVudGl0eSk7XG4gICAgdHJ5IHtcbiAgICAgIGZvciAoY29uc3QgcGVybWl0IG9mIHBlcm1pdHMpIHtcbiAgICAgICAgY29uc3Qgc2F2ZWQgPSBzYXZlZFBlcm1pdHMuc29tZSgoZW50aXR5KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGVudGl0eS5ib3hJZCA9PT0gcGVybWl0LmJveElkO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZW50aXR5ID0ge1xuICAgICAgICAgIGJveElkOiBwZXJtaXQuYm94SWQsXG4gICAgICAgICAgYm94U2VyaWFsaXplZDogcGVybWl0LmJveFNlcmlhbGl6ZWQsXG4gICAgICAgICAgYmxvY2s6IGJsb2NrLmhhc2gsXG4gICAgICAgICAgaGVpZ2h0OiBibG9jay5oZWlnaHQsXG4gICAgICAgICAgZXh0cmFjdG9yOiBleHRyYWN0b3IsXG4gICAgICAgICAgV0lEOiBwZXJtaXQuV0lELFxuICAgICAgICAgIHR4SWQ6IHBlcm1pdC50eElkLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoIXNhdmVkKSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICAgICBgU2F2aW5nIHBlcm1pdCBbJHtwZXJtaXQuYm94SWR9XSBiZWxvbmdpbmcgdG8gd2F0Y2hlciBbJHtwZXJtaXQuV0lEfV0gYXQgaGVpZ2h0ICR7YmxvY2suaGVpZ2h0fSBhbmQgZXh0cmFjdG9yICR7ZXh0cmFjdG9yfWBcbiAgICAgICAgICApO1xuICAgICAgICAgIGF3YWl0IHJlcG9zaXRvcnkuaW5zZXJ0KGVudGl0eSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICAgICBgVXBkYXRpbmcgcGVybWl0IFske3Blcm1pdC5ib3hJZH1dIGJlbG9uZ2luZyB0byB3YXRjaGVyIFske3Blcm1pdC5XSUR9XSBhdCBoZWlnaHQgJHtibG9jay5oZWlnaHR9IGFuZCBleHRyYWN0b3IgJHtleHRyYWN0b3J9YFxuICAgICAgICAgICk7XG4gICAgICAgICAgYXdhaXQgcmVwb3NpdG9yeS51cGRhdGUoeyBib3hJZDogcGVybWl0LmJveElkIH0sIGVudGl0eSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYEVudGl0eTogJHtKU09OLnN0cmluZ2lmeShlbnRpdHkpfWApO1xuICAgICAgfVxuICAgICAgYXdhaXQgcXVlcnlSdW5uZXIuY29tbWl0VHJhbnNhY3Rpb24oKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZ2dlci5lcnJvcihgQW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHN0b3JlIHBlcm1pdCBhY3Rpb246ICR7ZX1gKTtcbiAgICAgIGF3YWl0IHF1ZXJ5UnVubmVyLnJvbGxiYWNrVHJhbnNhY3Rpb24oKTtcbiAgICAgIHN1Y2Nlc3MgPSBmYWxzZTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgcXVlcnlSdW5uZXIucmVsZWFzZSgpO1xuICAgIH1cbiAgICByZXR1cm4gc3VjY2VzcztcbiAgfTtcblxuICAvKipcbiAgICogVXBkYXRlIHNwZW5kQmxvY2sgYW5kIHNwZW5kSGVpZ2h0IG9mIHBlcm1pdHMgc3BlbnQgb24gdGhlIGJsb2NrXG4gICAqIEBwYXJhbSBzcGVuZElkXG4gICAqIEBwYXJhbSBibG9ja1xuICAgKiBAcGFyYW0gZXh0cmFjdG9yXG4gICAqL1xuICBzcGVuZFBlcm1pdHMgPSBhc3luYyAoXG4gICAgc3BlbmRJZDogQXJyYXk8c3RyaW5nPixcbiAgICBibG9jazogQmxvY2tFbnRpdHksXG4gICAgZXh0cmFjdG9yOiBzdHJpbmdcbiAgKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgY29uc3Qgc3BlbmRJZENodW5rcyA9IGNodW5rKHNwZW5kSWQsIGRiSWRDaHVua1NpemUpO1xuICAgIGZvciAoY29uc3Qgc3BlbmRJZENodW5rIG9mIHNwZW5kSWRDaHVua3MpIHtcbiAgICAgIGNvbnN0IHVwZGF0ZVJlc3VsdCA9IGF3YWl0IHRoaXMucGVybWl0UmVwb3NpdG9yeS51cGRhdGUoXG4gICAgICAgIHsgYm94SWQ6IEluKHNwZW5kSWRDaHVuayksIGV4dHJhY3RvcjogZXh0cmFjdG9yIH0sXG4gICAgICAgIHsgc3BlbmRCbG9jazogYmxvY2suaGFzaCwgc3BlbmRIZWlnaHQ6IGJsb2NrLmhlaWdodCB9XG4gICAgICApO1xuXG4gICAgICBpZiAodXBkYXRlUmVzdWx0LmFmZmVjdGVkICYmIHVwZGF0ZVJlc3VsdC5hZmZlY3RlZCA+IDApIHtcbiAgICAgICAgY29uc3Qgc3BlbnRSb3dzID0gYXdhaXQgdGhpcy5wZXJtaXRSZXBvc2l0b3J5LmZpbmRCeSh7XG4gICAgICAgICAgYm94SWQ6IEluKHNwZW5kSWRDaHVuayksXG4gICAgICAgICAgc3BlbmRCbG9jazogYmxvY2suaGFzaCxcbiAgICAgICAgfSk7XG4gICAgICAgIGZvciAoY29uc3Qgcm93IG9mIHNwZW50Um93cykge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICAgYFNwZW50IHBlcm1pdCB3aXRoIGJveElkIFske3Jvdy5ib3hJZH1dIGJlbG9uZ2luZyB0byB3YXRjaGVyIHdpdGggV0lEIFske3Jvdy5XSUR9XSBhdCBoZWlnaHQgJHtibG9jay5oZWlnaHR9YFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBhbGwgcGVybWl0cyBjb3JyZXNwb25kaW5nIHRvIHRoZSBibG9jayhpZCkgYW5kIGV4dHJhY3RvcihpZClcbiAgICogYW5kIHVwZGF0ZSBhbGwgcGVybWl0cyBzcGVudCBvbiB0aGUgc3BlY2lmaWVkIGJsb2NrXG4gICAqIEBwYXJhbSBibG9ja1xuICAgKiBAcGFyYW0gZXh0cmFjdG9yXG4gICAqL1xuICBkZWxldGVCbG9jayA9IGFzeW5jIChibG9jazogc3RyaW5nLCBleHRyYWN0b3I6IHN0cmluZyk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIHRoaXMubG9nZ2VyLmluZm8oXG4gICAgICBgRGVsZXRpbmcgcGVybWl0cyBhdCBibG9jayAke2Jsb2NrfSBhbmQgZXh0cmFjdG9yICR7ZXh0cmFjdG9yfWBcbiAgICApO1xuICAgIGF3YWl0IHRoaXMucGVybWl0UmVwb3NpdG9yeS5kZWxldGUoeyBibG9jazogYmxvY2ssIGV4dHJhY3RvcjogZXh0cmFjdG9yIH0pO1xuICAgIGF3YWl0IHRoaXMucGVybWl0UmVwb3NpdG9yeS51cGRhdGUoXG4gICAgICB7IHNwZW5kQmxvY2s6IGJsb2NrLCBleHRyYWN0b3I6IGV4dHJhY3RvciB9LFxuICAgICAgeyBzcGVuZEJsb2NrOiBudWxsLCBzcGVuZEhlaWdodDogMCB9XG4gICAgKTtcbiAgfTtcblxuICAvKipcbiAgICogIFJldHVybnMgYWxsIHN0b3JlZCBwZXJtaXQgYm94IGlkc1xuICAgKi9cbiAgZ2V0QWxsUGVybWl0Qm94SWRzID0gYXN5bmMgKGV4dHJhY3Rvcjogc3RyaW5nKTogUHJvbWlzZTxBcnJheTxzdHJpbmc+PiA9PiB7XG4gICAgY29uc3QgYm94SWRzID0gYXdhaXQgdGhpcy5wZXJtaXRSZXBvc2l0b3J5LmZpbmQoe1xuICAgICAgd2hlcmU6IHtcbiAgICAgICAgZXh0cmFjdG9yOiBleHRyYWN0b3IsXG4gICAgICB9LFxuICAgICAgc2VsZWN0OiB7XG4gICAgICAgIGJveElkOiB0cnVlLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICByZXR1cm4gYm94SWRzLm1hcCgoaXRlbTogeyBib3hJZDogc3RyaW5nIH0pID0+IGl0ZW0uYm94SWQpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHNwZWNpZmllZCBwZXJtaXRcbiAgICogQHBhcmFtIGJveElkXG4gICAqIEBwYXJhbSBleHRyYWN0b3JcbiAgICovXG4gIHJlbW92ZVBlcm1pdCA9IGFzeW5jIChib3hJZDogc3RyaW5nLCBleHRyYWN0b3I6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnBlcm1pdFJlcG9zaXRvcnkuZGVsZXRlKHtcbiAgICAgIGJveElkOiBib3hJZCxcbiAgICAgIGV4dHJhY3RvcjogZXh0cmFjdG9yLFxuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIHBlcm1pdCBzcGVuZGluZyBpbmZvcm1hdGlvblxuICAgKiBAcGFyYW0gYm94SWRcbiAgICogQHBhcmFtIGV4dHJhY3RvclxuICAgKiBAcGFyYW0gYmxvY2tJZFxuICAgKiBAcGFyYW0gYmxvY2tIZWlnaHRcbiAgICovXG4gIHVwZGF0ZVNwZW5kQmxvY2sgPSBhc3luYyAoXG4gICAgYm94SWQ6IHN0cmluZyxcbiAgICBleHRyYWN0b3I6IHN0cmluZyxcbiAgICBibG9ja0lkOiBzdHJpbmcsXG4gICAgYmxvY2tIZWlnaHQ6IG51bWJlclxuICApID0+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5wZXJtaXRSZXBvc2l0b3J5LnVwZGF0ZShcbiAgICAgIHsgYm94SWQ6IGJveElkLCBleHRyYWN0b3I6IGV4dHJhY3RvciB9LFxuICAgICAgeyBzcGVuZEJsb2NrOiBibG9ja0lkLCBzcGVuZEhlaWdodDogYmxvY2tIZWlnaHQgfVxuICAgICk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IFBlcm1pdEFjdGlvbjtcbiJdfQ==
@@ -0,0 +1,4 @@
1
+ declare const dbIdChunkSize = 100;
2
+ declare const DefaultApiLimit = 100;
3
+ export { dbIdChunkSize, DefaultApiLimit };
4
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../lib/constants.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,aAAa,MAAM,CAAC;AAC1B,QAAA,MAAM,eAAe,MAAM,CAAC;AAE5B,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,CAAC"}
@@ -0,0 +1,4 @@
1
+ const dbIdChunkSize = 100;
2
+ const DefaultApiLimit = 100;
3
+ export { dbIdChunkSize, DefaultApiLimit };
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vbGliL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLGFBQWEsR0FBRyxHQUFHLENBQUM7QUFDMUIsTUFBTSxlQUFlLEdBQUcsR0FBRyxDQUFDO0FBRTVCLE9BQU8sRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBkYklkQ2h1bmtTaXplID0gMTAwO1xuY29uc3QgRGVmYXVsdEFwaUxpbWl0ID0gMTAwO1xuXG5leHBvcnQgeyBkYklkQ2h1bmtTaXplLCBEZWZhdWx0QXBpTGltaXQgfTtcbiJdfQ==