@my-packages-changeit/watcher-data-extractor 13.0.10

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 (127) hide show
  1. package/CHANGELOG.md +394 -0
  2. package/README.md +74 -0
  3. package/dist/actions/collateralAction.d.ts +25 -0
  4. package/dist/actions/collateralAction.d.ts.map +1 -0
  5. package/dist/actions/collateralAction.js +34 -0
  6. package/dist/actions/commitmentAction.d.ts +43 -0
  7. package/dist/actions/commitmentAction.d.ts.map +1 -0
  8. package/dist/actions/commitmentAction.js +138 -0
  9. package/dist/actions/eventTriggerAction.d.ts +29 -0
  10. package/dist/actions/eventTriggerAction.d.ts.map +1 -0
  11. package/dist/actions/eventTriggerAction.js +101 -0
  12. package/dist/actions/permitAction.d.ts +73 -0
  13. package/dist/actions/permitAction.d.ts.map +1 -0
  14. package/dist/actions/permitAction.js +187 -0
  15. package/dist/constants.d.ts +4 -0
  16. package/dist/constants.d.ts.map +1 -0
  17. package/dist/constants.js +4 -0
  18. package/dist/entities/collateralEntity.d.ts +8 -0
  19. package/dist/entities/collateralEntity.d.ts.map +1 -0
  20. package/dist/entities/collateralEntity.js +34 -0
  21. package/dist/entities/commitmentEntity.d.ts +19 -0
  22. package/dist/entities/commitmentEntity.d.ts.map +1 -0
  23. package/dist/entities/commitmentEntity.js +93 -0
  24. package/dist/entities/eventTriggerEntity.d.ts +24 -0
  25. package/dist/entities/eventTriggerEntity.d.ts.map +1 -0
  26. package/dist/entities/eventTriggerEntity.js +113 -0
  27. package/dist/entities/permitEntity.d.ts +14 -0
  28. package/dist/entities/permitEntity.d.ts.map +1 -0
  29. package/dist/entities/permitEntity.js +68 -0
  30. package/dist/extractor/collateralExtractor.d.ts +31 -0
  31. package/dist/extractor/collateralExtractor.d.ts.map +1 -0
  32. package/dist/extractor/collateralExtractor.js +72 -0
  33. package/dist/extractor/commitmentExtractor.d.ts +46 -0
  34. package/dist/extractor/commitmentExtractor.d.ts.map +1 -0
  35. package/dist/extractor/commitmentExtractor.js +125 -0
  36. package/dist/extractor/eventTriggerExtractor.d.ts +57 -0
  37. package/dist/extractor/eventTriggerExtractor.d.ts.map +1 -0
  38. package/dist/extractor/eventTriggerExtractor.js +215 -0
  39. package/dist/extractor/permitExtractor.d.ts +150 -0
  40. package/dist/extractor/permitExtractor.d.ts.map +1 -0
  41. package/dist/extractor/permitExtractor.js +235 -0
  42. package/dist/index.d.ts +12 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +12 -0
  45. package/dist/interfaces/extractedCollateral.d.ts +9 -0
  46. package/dist/interfaces/extractedCollateral.d.ts.map +1 -0
  47. package/dist/interfaces/extractedCollateral.js +2 -0
  48. package/dist/interfaces/extractedCommitment.d.ts +11 -0
  49. package/dist/interfaces/extractedCommitment.d.ts.map +1 -0
  50. package/dist/interfaces/extractedCommitment.js +2 -0
  51. package/dist/interfaces/extractedEventTrigger.d.ts +22 -0
  52. package/dist/interfaces/extractedEventTrigger.d.ts.map +1 -0
  53. package/dist/interfaces/extractedEventTrigger.js +2 -0
  54. package/dist/interfaces/extractedPermit.d.ts +12 -0
  55. package/dist/interfaces/extractedPermit.d.ts.map +1 -0
  56. package/dist/interfaces/extractedPermit.js +2 -0
  57. package/dist/interfaces/types.d.ts +25 -0
  58. package/dist/interfaces/types.d.ts.map +1 -0
  59. package/dist/interfaces/types.js +2 -0
  60. package/dist/migrations/index.d.ts +7 -0
  61. package/dist/migrations/index.d.ts.map +1 -0
  62. package/dist/migrations/index.js +45 -0
  63. package/dist/migrations/postgres/1688554842087-migration.d.ts +7 -0
  64. package/dist/migrations/postgres/1688554842087-migration.d.ts.map +1 -0
  65. package/dist/migrations/postgres/1688554842087-migration.js +82 -0
  66. package/dist/migrations/postgres/1689175974257-migration.d.ts +7 -0
  67. package/dist/migrations/postgres/1689175974257-migration.d.ts.map +1 -0
  68. package/dist/migrations/postgres/1689175974257-migration.js +50 -0
  69. package/dist/migrations/postgres/1699874447928-migration.d.ts +7 -0
  70. package/dist/migrations/postgres/1699874447928-migration.d.ts.map +1 -0
  71. package/dist/migrations/postgres/1699874447928-migration.js +36 -0
  72. package/dist/migrations/postgres/1706610773315-migration.d.ts +7 -0
  73. package/dist/migrations/postgres/1706610773315-migration.d.ts.map +1 -0
  74. package/dist/migrations/postgres/1706610773315-migration.js +69 -0
  75. package/dist/migrations/postgres/1709388482275-migration.d.ts +7 -0
  76. package/dist/migrations/postgres/1709388482275-migration.d.ts.map +1 -0
  77. package/dist/migrations/postgres/1709388482275-migration.js +29 -0
  78. package/dist/migrations/postgres/1737785036299-migration.d.ts +7 -0
  79. package/dist/migrations/postgres/1737785036299-migration.d.ts.map +1 -0
  80. package/dist/migrations/postgres/1737785036299-migration.js +32 -0
  81. package/dist/migrations/postgres/1746354253000-migration.d.ts +7 -0
  82. package/dist/migrations/postgres/1746354253000-migration.d.ts.map +1 -0
  83. package/dist/migrations/postgres/1746354253000-migration.js +15 -0
  84. package/dist/migrations/postgres/1758958886549-migration.d.ts +7 -0
  85. package/dist/migrations/postgres/1758958886549-migration.d.ts.map +1 -0
  86. package/dist/migrations/postgres/1758958886549-migration.js +30 -0
  87. package/dist/migrations/postgres/1766843825000-migration.d.ts +7 -0
  88. package/dist/migrations/postgres/1766843825000-migration.d.ts.map +1 -0
  89. package/dist/migrations/postgres/1766843825000-migration.js +42 -0
  90. package/dist/migrations/sqlite/1688555766601-migration.d.ts +7 -0
  91. package/dist/migrations/sqlite/1688555766601-migration.d.ts.map +1 -0
  92. package/dist/migrations/sqlite/1688555766601-migration.js +79 -0
  93. package/dist/migrations/sqlite/1689175103163-migration.d.ts +7 -0
  94. package/dist/migrations/sqlite/1689175103163-migration.d.ts.map +1 -0
  95. package/dist/migrations/sqlite/1689175103163-migration.js +392 -0
  96. package/dist/migrations/sqlite/1699872205117-migration.d.ts +7 -0
  97. package/dist/migrations/sqlite/1699872205117-migration.d.ts.map +1 -0
  98. package/dist/migrations/sqlite/1699872205117-migration.js +192 -0
  99. package/dist/migrations/sqlite/1706610773176-migration.d.ts +7 -0
  100. package/dist/migrations/sqlite/1706610773176-migration.d.ts.map +1 -0
  101. package/dist/migrations/sqlite/1706610773176-migration.js +421 -0
  102. package/dist/migrations/sqlite/1709388134975-migration.d.ts +7 -0
  103. package/dist/migrations/sqlite/1709388134975-migration.d.ts.map +1 -0
  104. package/dist/migrations/sqlite/1709388134975-migration.js +28 -0
  105. package/dist/migrations/sqlite/1737547743177-migration.d.ts +7 -0
  106. package/dist/migrations/sqlite/1737547743177-migration.d.ts.map +1 -0
  107. package/dist/migrations/sqlite/1737547743177-migration.js +204 -0
  108. package/dist/migrations/sqlite/1746354254000-migration.d.ts +7 -0
  109. package/dist/migrations/sqlite/1746354254000-migration.d.ts.map +1 -0
  110. package/dist/migrations/sqlite/1746354254000-migration.js +15 -0
  111. package/dist/migrations/sqlite/1761774736153-migration.d.ts +7 -0
  112. package/dist/migrations/sqlite/1761774736153-migration.d.ts.map +1 -0
  113. package/dist/migrations/sqlite/1761774736153-migration.js +204 -0
  114. package/dist/migrations/sqlite/1762768664031-migration.d.ts +7 -0
  115. package/dist/migrations/sqlite/1762768664031-migration.d.ts.map +1 -0
  116. package/dist/migrations/sqlite/1762768664031-migration.js +204 -0
  117. package/dist/migrations/sqlite/1766843824000-migration.d.ts +7 -0
  118. package/dist/migrations/sqlite/1766843824000-migration.d.ts.map +1 -0
  119. package/dist/migrations/sqlite/1766843824000-migration.js +109 -0
  120. package/dist/tsconfig.tsbuildinfo +1 -0
  121. package/dist/types.d.ts +6 -0
  122. package/dist/types.d.ts.map +1 -0
  123. package/dist/types.js +7 -0
  124. package/dist/utils.d.ts +25 -0
  125. package/dist/utils.d.ts.map +1 -0
  126. package/dist/utils.js +29 -0
  127. package/package.json +50 -0
@@ -0,0 +1,138 @@
1
+ import { chunk } from 'lodash-es';
2
+ import { DummyLogger } from '@rosen-bridge/abstract-logger';
3
+ import { In, } from '@rosen-bridge/extended-typeorm';
4
+ import { dbIdChunkSize } from '../constants';
5
+ import CommitmentEntity from '../entities/commitmentEntity';
6
+ class CommitmentAction {
7
+ logger;
8
+ datasource;
9
+ commitmentRepository;
10
+ constructor(dataSource, logger) {
11
+ this.datasource = dataSource;
12
+ this.logger = logger ? logger : new DummyLogger();
13
+ this.commitmentRepository = dataSource.getRepository(CommitmentEntity);
14
+ }
15
+ /**
16
+ * It stores list of observations in the dataSource with block id
17
+ * @param commitments
18
+ * @param block
19
+ * @param extractor
20
+ */
21
+ storeCommitments = async (commitments, block, extractor) => {
22
+ if (commitments.length === 0)
23
+ return true;
24
+ const boxIds = commitments.map((commitment) => commitment.boxId);
25
+ const savedCommitments = await this.commitmentRepository.findBy({
26
+ boxId: In(boxIds),
27
+ extractor: extractor,
28
+ });
29
+ let success = true;
30
+ const queryRunner = this.datasource.createQueryRunner();
31
+ await queryRunner.connect();
32
+ await queryRunner.startTransaction();
33
+ const repository = await queryRunner.manager.getRepository(CommitmentEntity);
34
+ try {
35
+ for (const commitment of commitments) {
36
+ const saved = savedCommitments.some((entity) => {
37
+ return entity.boxId === commitment.boxId;
38
+ });
39
+ const entity = {
40
+ txId: commitment.txId,
41
+ commitment: commitment.commitment,
42
+ eventId: commitment.eventId,
43
+ boxId: commitment.boxId,
44
+ WID: commitment.WID,
45
+ extractor: extractor,
46
+ block: block.hash,
47
+ height: block.height,
48
+ boxSerialized: commitment.boxSerialized,
49
+ rwtCount: commitment.rwtCount,
50
+ };
51
+ if (!saved) {
52
+ this.logger.info(`Saving commitment [${commitment.boxId}] for event [${commitment.eventId}] from watcher [${commitment.WID}] at height ${block.height} and extractor ${extractor}`);
53
+ await repository.insert(entity);
54
+ }
55
+ else {
56
+ this.logger.info(`Updating commitment [${commitment.boxId}] for event [${commitment.eventId}] from watcher [${commitment.WID}] at height ${block.height} and extractor ${extractor}`);
57
+ await repository.update({ boxId: commitment.boxId }, entity);
58
+ }
59
+ this.logger.debug(`Entity: ${JSON.stringify(entity)}`);
60
+ }
61
+ await queryRunner.commitTransaction();
62
+ }
63
+ catch (e) {
64
+ this.logger.error(`An error occurred during store commitments action: ${e}`);
65
+ await queryRunner.rollbackTransaction();
66
+ success = false;
67
+ }
68
+ finally {
69
+ await queryRunner.release();
70
+ }
71
+ return success;
72
+ };
73
+ /**
74
+ * Update spendBlock and spendHeight of commitments spent on the block
75
+ * @param spendId
76
+ * @param block
77
+ * @param extractor
78
+ */
79
+ spendCommitments = async (spendId, block, extractor) => {
80
+ // TODO: improve updating (local:ergo/rosen-bridge/scanner#85)
81
+ const spendIdChunks = chunk(spendId, dbIdChunkSize);
82
+ for (const spendIdChunk of spendIdChunks) {
83
+ const commitments = await this.commitmentRepository.findBy({
84
+ boxId: In(spendIdChunk.map((info) => info.boxId)),
85
+ extractor: extractor,
86
+ });
87
+ for (const commitment of commitments) {
88
+ const spendInfo = spendIdChunk.find((info) => info.boxId === commitment.boxId);
89
+ if (!spendInfo)
90
+ throw new Error(`ImpossibleBehavior: box [${commitment.boxId}] is not found in spending info list`);
91
+ await this.commitmentRepository.update({
92
+ id: commitment.id,
93
+ }, {
94
+ spendBlock: block.hash,
95
+ spendHeight: block.height,
96
+ spendTxId: spendInfo.txId,
97
+ spendIndex: spendInfo.index,
98
+ });
99
+ this.logger.info(`Spent commitment [${commitment.boxId}] for event [${commitment.eventId}] at height ${block.height}`);
100
+ this.logger.debug(`Spent commitment [${JSON.stringify(commitment)}]`);
101
+ }
102
+ }
103
+ };
104
+ /**
105
+ * Delete all commitments corresponding to the block(id) and extractor(id)
106
+ * and update all commitments spent on the specified block
107
+ * @param block
108
+ * @param extractor
109
+ */
110
+ deleteBlock = async (block, extractor) => {
111
+ this.logger.info(`Deleting commitments of block [${block}] and extractor ${extractor}`);
112
+ await this.commitmentRepository.delete({
113
+ block: block,
114
+ extractor: extractor,
115
+ });
116
+ await this.commitmentRepository.update({ spendBlock: block, extractor: extractor }, {
117
+ spendBlock: null,
118
+ spendHeight: null,
119
+ spendTxId: null,
120
+ spendIndex: null,
121
+ });
122
+ };
123
+ /**
124
+ * Builds a query that returns used blocks by selecting the `block` column from the `CommitmentEntity` repository,
125
+ * filtered by the provided `extractorId`
126
+ *
127
+ * @param extractorId - Identifier of the extractor
128
+ * @returns A query builder selecting used blocks
129
+ */
130
+ createUsedBlocksQuery = (extractorId) => {
131
+ return this.commitmentRepository
132
+ .createQueryBuilder('commitmentEntity')
133
+ .select('commitmentEntity.block', 'block')
134
+ .where('commitmentEntity.extractor = :extractorId', { extractorId });
135
+ };
136
+ }
137
+ export default CommitmentAction;
138
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWl0bWVudEFjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9hY3Rpb25zL2NvbW1pdG1lbnRBY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVsQyxPQUFPLEVBQWtCLFdBQVcsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzVFLE9BQU8sRUFFTCxFQUFFLEdBR0gsTUFBTSxnQ0FBZ0MsQ0FBQztBQUd4QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzdDLE9BQU8sZ0JBQWdCLE1BQU0sOEJBQThCLENBQUM7QUFJNUQsTUFBTSxnQkFBZ0I7SUFDWCxNQUFNLENBQWlCO0lBQ2YsVUFBVSxDQUFhO0lBQ3ZCLG9CQUFvQixDQUErQjtJQUVwRSxZQUFZLFVBQXNCLEVBQUUsTUFBdUI7UUFDekQsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUNsRCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsVUFBVSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGdCQUFnQixHQUFHLEtBQUssRUFDdEIsV0FBdUMsRUFDdkMsS0FBZ0IsRUFDaEIsU0FBaUIsRUFDQyxFQUFFO1FBQ3BCLElBQUksV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDMUMsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxJQUFJLENBQUMsb0JB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aC1lcyc7XG5cbmltcG9ydCB7IEFic3RyYWN0TG9nZ2VyLCBEdW1teUxvZ2dlciB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvYWJzdHJhY3QtbG9nZ2VyJztcbmltcG9ydCB7XG4gIERhdGFTb3VyY2UsXG4gIEluLFxuICBSZXBvc2l0b3J5LFxuICBTZWxlY3RRdWVyeUJ1aWxkZXIsXG59IGZyb20gJ0Byb3Nlbi1icmlkZ2UvZXh0ZW5kZWQtdHlwZW9ybSc7XG5pbXBvcnQgeyBCbG9ja0luZm8gfSBmcm9tICdAcm9zZW4tYnJpZGdlL3NjYW5uZXItaW50ZXJmYWNlcyc7XG5cbmltcG9ydCB7IGRiSWRDaHVua1NpemUgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IENvbW1pdG1lbnRFbnRpdHkgZnJvbSAnLi4vZW50aXRpZXMvY29tbWl0bWVudEVudGl0eSc7XG5pbXBvcnQgeyBleHRyYWN0ZWRDb21taXRtZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9leHRyYWN0ZWRDb21taXRtZW50JztcbmltcG9ydCB7IFNwZW5kSW5mbyB9IGZyb20gJy4uL2ludGVyZmFjZXMvdHlwZXMnO1xuXG5jbGFzcyBDb21taXRtZW50QWN0aW9uIHtcbiAgcmVhZG9ubHkgbG9nZ2VyOiBBYnN0cmFjdExvZ2dlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBkYXRhc291cmNlOiBEYXRhU291cmNlO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbW1pdG1lbnRSZXBvc2l0b3J5OiBSZXBvc2l0b3J5PENvbW1pdG1lbnRFbnRpdHk+O1xuXG4gIGNvbnN0cnVjdG9yKGRhdGFTb3VyY2U6IERhdGFTb3VyY2UsIGxvZ2dlcj86IEFic3RyYWN0TG9nZ2VyKSB7XG4gICAgdGhpcy5kYXRhc291cmNlID0gZGF0YVNvdXJjZTtcbiAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlciA/IGxvZ2dlciA6IG5ldyBEdW1teUxvZ2dlcigpO1xuICAgIHRoaXMuY29tbWl0bWVudFJlcG9zaXRvcnkgPSBkYXRhU291cmNlLmdldFJlcG9zaXRvcnkoQ29tbWl0bWVudEVudGl0eSk7XG4gIH1cblxuICAvKipcbiAgICogSXQgc3RvcmVzIGxpc3Qgb2Ygb2JzZXJ2YXRpb25zIGluIHRoZSBkYXRhU291cmNlIHdpdGggYmxvY2sgaWRcbiAgICogQHBhcmFtIGNvbW1pdG1lbnRzXG4gICAqIEBwYXJhbSBibG9ja1xuICAgKiBAcGFyYW0gZXh0cmFjdG9yXG4gICAqL1xuICBzdG9yZUNvbW1pdG1lbnRzID0gYXN5bmMgKFxuICAgIGNvbW1pdG1lbnRzOiBBcnJheTxleHRyYWN0ZWRDb21taXRtZW50PixcbiAgICBibG9jazogQmxvY2tJbmZvLFxuICAgIGV4dHJhY3Rvcjogc3RyaW5nLFxuICApOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgICBpZiAoY29tbWl0bWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gdHJ1ZTtcbiAgICBjb25zdCBib3hJZHMgPSBjb21taXRtZW50cy5tYXAoKGNvbW1pdG1lbnQpID0+IGNvbW1pdG1lbnQuYm94SWQpO1xuICAgIGNvbnN0IHNhdmVkQ29tbWl0bWVudHMgPSBhd2FpdCB0aGlzLmNvbW1pdG1lbnRSZXBvc2l0b3J5LmZpbmRCeSh7XG4gICAgICBib3hJZDogSW4oYm94SWRzKSxcbiAgICAgIGV4dHJhY3RvcjogZXh0cmFjdG9yLFxuICAgIH0pO1xuICAgIGxldCBzdWNjZXNzID0gdHJ1ZTtcbiAgICBjb25zdCBxdWVyeVJ1bm5lciA9IHRoaXMuZGF0YXNvdXJjZS5jcmVhdGVRdWVyeVJ1bm5lcigpO1xuICAgIGF3YWl0IHF1ZXJ5UnVubmVyLmNvbm5lY3QoKTtcbiAgICBhd2FpdCBxdWVyeVJ1bm5lci5zdGFydFRyYW5zYWN0aW9uKCk7XG4gICAgY29uc3QgcmVwb3NpdG9yeSA9XG4gICAgICBhd2FpdCBxdWVyeVJ1bm5lci5tYW5hZ2VyLmdldFJlcG9zaXRvcnkoQ29tbWl0bWVudEVudGl0eSk7XG4gICAgdHJ5IHtcbiAgICAgIGZvciAoY29uc3QgY29tbWl0bWVudCBvZiBjb21taXRtZW50cykge1xuICAgICAgICBjb25zdCBzYXZlZCA9IHNhdmVkQ29tbWl0bWVudHMuc29tZSgoZW50aXR5KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGVudGl0eS5ib3hJZCA9PT0gY29tbWl0bWVudC5ib3hJZDtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGVudGl0eSA9IHtcbiAgICAgICAgICB0eElkOiBjb21taXRtZW50LnR4SWQsXG4gICAgICAgICAgY29tbWl0bWVudDogY29tbWl0bWVudC5jb21taXRtZW50LFxuICAgICAgICAgIGV2ZW50SWQ6IGNvbW1pdG1lbnQuZXZlbnRJZCxcbiAgICAgICAgICBib3hJZDogY29tbWl0bWVudC5ib3hJZCxcbiAgICAgICAgICBXSUQ6IGNvbW1pdG1lbnQuV0lELFxuICAgICAgICAgIGV4dHJhY3RvcjogZXh0cmFjdG9yLFxuICAgICAgICAgIGJsb2NrOiBibG9jay5oYXNoLFxuICAgICAgICAgIGhlaWdodDogYmxvY2suaGVpZ2h0LFxuICAgICAgICAgIGJveFNlcmlhbGl6ZWQ6IGNvbW1pdG1lbnQuYm94U2VyaWFsaXplZCxcbiAgICAgICAgICByd3RDb3VudDogY29tbWl0bWVudC5yd3RDb3VudCxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKCFzYXZlZCkge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmluZm8oXG4gICAgICAgICAgICBgU2F2aW5nIGNvbW1pdG1lbnQgWyR7Y29tbWl0bWVudC5ib3hJZH1dIGZvciBldmVudCBbJHtjb21taXRtZW50LmV2ZW50SWR9XSBmcm9tIHdhdGNoZXIgWyR7Y29tbWl0bWVudC5XSUR9XSBhdCBoZWlnaHQgJHtibG9jay5oZWlnaHR9IGFuZCBleHRyYWN0b3IgJHtleHRyYWN0b3J9YCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGF3YWl0IHJlcG9zaXRvcnkuaW5zZXJ0KGVudGl0eSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuaW5mbyhcbiAgICAgICAgICAgIGBVcGRhdGluZyBjb21taXRtZW50IFske2NvbW1pdG1lbnQuYm94SWR9XSBmb3IgZXZlbnQgWyR7Y29tbWl0bWVudC5ldmVudElkfV0gZnJvbSB3YXRjaGVyIFske2NvbW1pdG1lbnQuV0lEfV0gYXQgaGVpZ2h0ICR7YmxvY2suaGVpZ2h0fSBhbmQgZXh0cmFjdG9yICR7ZXh0cmFjdG9yfWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBhd2FpdCByZXBvc2l0b3J5LnVwZGF0ZSh7IGJveElkOiBjb21taXRtZW50LmJveElkIH0sIGVudGl0eSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYEVudGl0eTogJHtKU09OLnN0cmluZ2lmeShlbnRpdHkpfWApO1xuICAgICAgfVxuICAgICAgYXdhaXQgcXVlcnlSdW5uZXIuY29tbWl0VHJhbnNhY3Rpb24oKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZ2dlci5lcnJvcihcbiAgICAgICAgYEFuIGVycm9yIG9jY3VycmVkIGR1cmluZyBzdG9yZSBjb21taXRtZW50cyBhY3Rpb246ICR7ZX1gLFxuICAgICAgKTtcbiAgICAgIGF3YWl0IHF1ZXJ5UnVubmVyLnJvbGxiYWNrVHJhbnNhY3Rpb24oKTtcbiAgICAgIHN1Y2Nlc3MgPSBmYWxzZTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgcXVlcnlSdW5uZXIucmVsZWFzZSgpO1xuICAgIH1cbiAgICByZXR1cm4gc3VjY2VzcztcbiAgfTtcblxuICAvKipcbiAgICogVXBkYXRlIHNwZW5kQmxvY2sgYW5kIHNwZW5kSGVpZ2h0IG9mIGNvbW1pdG1lbnRzIHNwZW50IG9uIHRoZSBibG9ja1xuICAgKiBAcGFyYW0gc3BlbmRJZFxuICAgKiBAcGFyYW0gYmxvY2tcbiAgICogQHBhcmFtIGV4dHJhY3RvclxuICAgKi9cbiAgc3BlbmRDb21taXRtZW50cyA9IGFzeW5jIChcbiAgICBzcGVuZElkOiBBcnJheTxTcGVuZEluZm8+LFxuICAgIGJsb2NrOiBCbG9ja0luZm8sXG4gICAgZXh0cmFjdG9yOiBzdHJpbmcsXG4gICk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIC8vIFRPRE86IGltcHJvdmUgdXBkYXRpbmcgKGxvY2FsOmVyZ28vcm9zZW4tYnJpZGdlL3NjYW5uZXIjODUpXG4gICAgY29uc3Qgc3BlbmRJZENodW5rcyA9IGNodW5rKHNwZW5kSWQsIGRiSWRDaHVua1NpemUpO1xuICAgIGZvciAoY29uc3Qgc3BlbmRJZENodW5rIG9mIHNwZW5kSWRDaHVua3MpIHtcbiAgICAgIGNvbnN0IGNvbW1pdG1lbnRzID0gYXdhaXQgdGhpcy5jb21taXRtZW50UmVwb3NpdG9yeS5maW5kQnkoe1xuICAgICAgICBib3hJZDogSW4oc3BlbmRJZENodW5rLm1hcCgoaW5mbykgPT4gaW5mby5ib3hJZCkpLFxuICAgICAgICBleHRyYWN0b3I6IGV4dHJhY3RvcixcbiAgICAgIH0pO1xuXG4gICAgICBmb3IgKGNvbnN0IGNvbW1pdG1lbnQgb2YgY29tbWl0bWVudHMpIHtcbiAgICAgICAgY29uc3Qgc3BlbmRJbmZvID0gc3BlbmRJZENodW5rLmZpbmQoXG4gICAgICAgICAgKGluZm8pID0+IGluZm8uYm94SWQgPT09IGNvbW1pdG1lbnQuYm94SWQsXG4gICAgICAgICk7XG4gICAgICAgIGlmICghc3BlbmRJbmZvKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBJbXBvc3NpYmxlQmVoYXZpb3I6IGJveCBbJHtjb21taXRtZW50LmJveElkfV0gaXMgbm90IGZvdW5kIGluIHNwZW5kaW5nIGluZm8gbGlzdGAsXG4gICAgICAgICAgKTtcblxuICAgICAgICBhd2FpdCB0aGlzLmNvbW1pdG1lbnRSZXBvc2l0b3J5LnVwZGF0ZShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogY29tbWl0bWVudC5pZCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNwZW5kQmxvY2s6IGJsb2NrLmhhc2gsXG4gICAgICAgICAgICBzcGVuZEhlaWdodDogYmxvY2suaGVpZ2h0LFxuICAgICAgICAgICAgc3BlbmRUeElkOiBzcGVuZEluZm8udHhJZCxcbiAgICAgICAgICAgIHNwZW5kSW5kZXg6IHNwZW5kSW5mby5pbmRleCxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgICB0aGlzLmxvZ2dlci5pbmZvKFxuICAgICAgICAgIGBTcGVudCBjb21taXRtZW50IFske2NvbW1pdG1lbnQuYm94SWR9XSBmb3IgZXZlbnQgWyR7Y29tbWl0bWVudC5ldmVudElkfV0gYXQgaGVpZ2h0ICR7YmxvY2suaGVpZ2h0fWAsXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBTcGVudCBjb21taXRtZW50IFske0pTT04uc3RyaW5naWZ5KGNvbW1pdG1lbnQpfV1gKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBhbGwgY29tbWl0bWVudHMgY29ycmVzcG9uZGluZyB0byB0aGUgYmxvY2soaWQpIGFuZCBleHRyYWN0b3IoaWQpXG4gICAqIGFuZCB1cGRhdGUgYWxsIGNvbW1pdG1lbnRzIHNwZW50IG9uIHRoZSBzcGVjaWZpZWQgYmxvY2tcbiAgICogQHBhcmFtIGJsb2NrXG4gICAqIEBwYXJhbSBleHRyYWN0b3JcbiAgICovXG4gIGRlbGV0ZUJsb2NrID0gYXN5bmMgKGJsb2NrOiBzdHJpbmcsIGV4dHJhY3Rvcjogc3RyaW5nKSA9PiB7XG4gICAgdGhpcy5sb2dnZXIuaW5mbyhcbiAgICAgIGBEZWxldGluZyBjb21taXRtZW50cyBvZiBibG9jayBbJHtibG9ja31dIGFuZCBleHRyYWN0b3IgJHtleHRyYWN0b3J9YCxcbiAgICApO1xuICAgIGF3YWl0IHRoaXMuY29tbWl0bWVudFJlcG9zaXRvcnkuZGVsZXRlKHtcbiAgICAgIGJsb2NrOiBibG9jayxcbiAgICAgIGV4dHJhY3RvcjogZXh0cmFjdG9yLFxuICAgIH0pO1xuICAgIGF3YWl0IHRoaXMuY29tbWl0bWVudFJlcG9zaXRvcnkudXBkYXRlKFxuICAgICAgeyBzcGVuZEJsb2NrOiBibG9jaywgZXh0cmFjdG9yOiBleHRyYWN0b3IgfSxcbiAgICAgIHtcbiAgICAgICAgc3BlbmRCbG9jazogbnVsbCxcbiAgICAgICAgc3BlbmRIZWlnaHQ6IG51bGwsXG4gICAgICAgIHNwZW5kVHhJZDogbnVsbCxcbiAgICAgICAgc3BlbmRJbmRleDogbnVsbCxcbiAgICAgIH0sXG4gICAgKTtcbiAgfTtcblxuICAvKipcbiAgICogQnVpbGRzIGEgcXVlcnkgdGhhdCByZXR1cm5zIHVzZWQgYmxvY2tzIGJ5IHNlbGVjdGluZyB0aGUgYGJsb2NrYCBjb2x1bW4gZnJvbSB0aGUgYENvbW1pdG1lbnRFbnRpdHlgIHJlcG9zaXRvcnksXG4gICAqIGZpbHRlcmVkIGJ5IHRoZSBwcm92aWRlZCBgZXh0cmFjdG9ySWRgXG4gICAqXG4gICAqIEBwYXJhbSBleHRyYWN0b3JJZCAtIElkZW50aWZpZXIgb2YgdGhlIGV4dHJhY3RvclxuICAgKiBAcmV0dXJucyBBIHF1ZXJ5IGJ1aWxkZXIgc2VsZWN0aW5nIHVzZWQgYmxvY2tzXG4gICAqL1xuICBjcmVhdGVVc2VkQmxvY2tzUXVlcnkgPSAoXG4gICAgZXh0cmFjdG9ySWQ6IHN0cmluZyxcbiAgKTogU2VsZWN0UXVlcnlCdWlsZGVyPENvbW1pdG1lbnRFbnRpdHk+ID0+IHtcbiAgICByZXR1cm4gdGhpcy5jb21taXRtZW50UmVwb3NpdG9yeVxuICAgICAgLmNyZWF0ZVF1ZXJ5QnVpbGRlcignY29tbWl0bWVudEVudGl0eScpXG4gICAgICAuc2VsZWN0KCdjb21taXRtZW50RW50aXR5LmJsb2NrJywgJ2Jsb2NrJylcbiAgICAgIC53aGVyZSgnY29tbWl0bWVudEVudGl0eS5leHRyYWN0b3IgPSA6ZXh0cmFjdG9ySWQnLCB7IGV4dHJhY3RvcklkIH0pO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBDb21taXRtZW50QWN0aW9uO1xuIl19
@@ -0,0 +1,29 @@
1
+ import { AbstractErgoBoxAction, EntityInfo, SpendInfo } from '@rosen-bridge/abstract-extractor';
2
+ import { AbstractLogger } from '@rosen-bridge/abstract-logger';
3
+ import { DataSource } from '@rosen-bridge/extended-typeorm';
4
+ import { BlockInfo } from '@rosen-bridge/scanner-interfaces';
5
+ import EventTriggerEntity from '../entities/eventTriggerEntity';
6
+ import { ExtractedEventTrigger } from '../interfaces/extractedEventTrigger';
7
+ declare class EventTriggerAction extends AbstractErgoBoxAction<ExtractedEventTrigger, EventTriggerEntity> {
8
+ constructor(dataSource: DataSource, logger?: AbstractLogger);
9
+ /**
10
+ * create the box entity from extracted data and block information
11
+ */
12
+ createEntity: (triggerBoxes: ExtractedEventTrigger[], block: BlockInfo, extractor: string) => Omit<EventTriggerEntity, "id">[];
13
+ /**
14
+ * convert the database entity back to raw data
15
+ */
16
+ convertEntityToData: (entities: EventTriggerEntity[]) => ExtractedEventTrigger[];
17
+ /**
18
+ * update spending information of stored event triggers
19
+ * and set result and paymentTxId of the event
20
+ * chunk spendInfos to prevent large database queries
21
+ * @param spendInfArray
22
+ * @param block
23
+ * @param extractorId
24
+ * @returns spent box ids
25
+ */
26
+ spendBoxes: (spendInfoArray: Array<SpendInfo>, block: BlockInfo, extractorId: string) => Promise<EntityInfo[]>;
27
+ }
28
+ export default EventTriggerAction;
29
+ //# sourceMappingURL=eventTriggerAction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eventTriggerAction.d.ts","sourceRoot":"","sources":["../../lib/actions/eventTriggerAction.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,qBAAqB,EAErB,UAAU,EACV,SAAS,EACV,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAM,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAE7D,OAAO,kBAAkB,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAG5E,cAAM,kBAAmB,SAAQ,qBAAqB,CACpD,qBAAqB,EACrB,kBAAkB,CACnB;gBACa,UAAU,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,cAAc;IAI3D;;OAEG;IACH,YAAY,GACV,cAAc,qBAAqB,EAAE,EACrC,OAAO,SAAS,EAChB,WAAW,MAAM,KAChB,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,EAAE,CAwBjC;IAEF;;OAEG;IACH,mBAAmB,GACjB,UAAU,kBAAkB,EAAE,KAC7B,qBAAqB,EAAE,CAuBxB;IAEF;;;;;;;;OAQG;IACH,UAAU,GACR,gBAAgB,KAAK,CAAC,SAAS,CAAC,EAChC,OAAO,SAAS,EAChB,aAAa,MAAM,KAClB,OAAO,CAAC,UAAU,EAAE,CAAC,CAyCtB;CACH;AAED,eAAe,kBAAkB,CAAC"}
@@ -0,0 +1,101 @@
1
+ import { chunk, pick } from 'lodash-es';
2
+ import { AbstractErgoBoxAction, DB_CHUNK_SIZE, } from '@rosen-bridge/abstract-extractor';
3
+ import { In } from '@rosen-bridge/extended-typeorm';
4
+ import EventTriggerEntity from '../entities/eventTriggerEntity';
5
+ import { JsonBI } from '../utils';
6
+ class EventTriggerAction extends AbstractErgoBoxAction {
7
+ constructor(dataSource, logger) {
8
+ super(dataSource, EventTriggerEntity, logger);
9
+ }
10
+ /**
11
+ * create the box entity from extracted data and block information
12
+ */
13
+ createEntity = (triggerBoxes, block, extractor) => {
14
+ return triggerBoxes.map((trigger) => ({
15
+ txId: trigger.txId,
16
+ eventId: trigger.eventId,
17
+ identifier: trigger.identifier,
18
+ serialized: trigger.serialized,
19
+ block: block.hash,
20
+ height: block.height,
21
+ extractor: extractor,
22
+ WIDsCount: trigger.WIDsCount,
23
+ WIDsHash: trigger.WIDsHash,
24
+ amount: trigger.amount,
25
+ bridgeFee: trigger.bridgeFee,
26
+ fromAddress: trigger.fromAddress,
27
+ toAddress: trigger.toAddress,
28
+ fromChain: trigger.fromChain,
29
+ networkFee: trigger.networkFee,
30
+ sourceChainTokenId: trigger.sourceChainTokenId,
31
+ targetChainTokenId: trigger.targetChainTokenId,
32
+ sourceBlockId: trigger.sourceBlockId,
33
+ toChain: trigger.toChain,
34
+ sourceTxId: trigger.sourceTxId,
35
+ sourceChainHeight: trigger.sourceChainHeight,
36
+ }));
37
+ };
38
+ /**
39
+ * convert the database entity back to raw data
40
+ */
41
+ convertEntityToData = (entities) => {
42
+ return entities.map((data) => pick(data, [
43
+ 'eventId',
44
+ 'txId',
45
+ 'identifier',
46
+ 'serialized',
47
+ 'fromChain',
48
+ 'toChain',
49
+ 'fromAddress',
50
+ 'toAddress',
51
+ 'amount',
52
+ 'bridgeFee',
53
+ 'networkFee',
54
+ 'sourceChainTokenId',
55
+ 'targetChainTokenId',
56
+ 'sourceBlockId',
57
+ 'sourceTxId',
58
+ 'WIDsCount',
59
+ 'WIDsHash',
60
+ 'sourceChainHeight',
61
+ ]));
62
+ };
63
+ /**
64
+ * update spending information of stored event triggers
65
+ * and set result and paymentTxId of the event
66
+ * chunk spendInfos to prevent large database queries
67
+ * @param spendInfArray
68
+ * @param block
69
+ * @param extractorId
70
+ * @returns spent box ids
71
+ */
72
+ spendBoxes = async (spendInfoArray, block, extractorId) => {
73
+ const spentData = [];
74
+ const spendInfoChunks = chunk(spendInfoArray, DB_CHUNK_SIZE);
75
+ for (const spendInfoChunk of spendInfoChunks) {
76
+ const spentTriggers = await this.repository.findBy({
77
+ identifier: In(spendInfoChunk.map((spendInfo) => spendInfo.boxId)),
78
+ extractor: extractorId,
79
+ });
80
+ for (const spentTrigger of spentTriggers) {
81
+ const spendInfo = spendInfoChunk.find((info) => info.boxId === spentTrigger.identifier);
82
+ if (!spendInfo || !spendInfo.extras || !spendInfo.extras.result) {
83
+ throw Error(`ImpossibleBehavior:: spending information extras does not contain result, ${JsonBI.stringify(spendInfo)}`);
84
+ }
85
+ await this.repository.update({ identifier: spendInfo.boxId, extractor: extractorId }, {
86
+ spendBlock: block.hash,
87
+ spendHeight: block.height,
88
+ spendTxId: spendInfo.txId,
89
+ result: spendInfo.extras.result,
90
+ paymentTxId: spendInfo.extras.paymentTxId || '',
91
+ });
92
+ spentData.push({ identifier: spendInfo.boxId });
93
+ this.logger.info(`Spent trigger [${spentTrigger.identifier}] of event [${spentTrigger.eventId}] at height ${block.height}`);
94
+ this.logger.debug(`Spent trigger: [${JSON.stringify(spentTrigger)}] with spending information [${JsonBI.stringify(spendInfo)}]`);
95
+ }
96
+ }
97
+ return spentData;
98
+ };
99
+ }
100
+ export default EventTriggerAction;
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRUcmlnZ2VyQWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL2FjdGlvbnMvZXZlbnRUcmlnZ2VyQWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXhDLE9BQU8sRUFDTCxxQkFBcUIsRUFDckIsYUFBYSxHQUdkLE1BQU0sa0NBQWtDLENBQUM7QUFFMUMsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBR2hFLE9BQU8sa0JBQWtCLE1BQU0sZ0NBQWdDLENBQUM7QUFFaEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVsQyxNQUFNLGtCQUFtQixTQUFRLHFCQUdoQztJQUNDLFlBQVksVUFBc0IsRUFBRSxNQUF1QjtRQUN6RCxLQUFLLENBQUMsVUFBVSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRDs7T0FFRztJQUNILFlBQVksR0FBRyxDQUNiLFlBQXFDLEVBQ3JDLEtBQWdCLEVBQ2hCLFNBQWlCLEVBQ2lCLEVBQUU7UUFDcEMsT0FBTyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3BDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtZQUNsQixPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87WUFDeEIsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVO1lBQzlCLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVTtZQUM5QixLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUk7WUFDakIsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNO1lBQ3BCLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUztZQUM1QixRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVE7WUFDMUIsTUFBTSxFQUFF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QUNGLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxVQUFVLEVBQUUsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7Z0JBQ2hELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNkLGtCQUFrQixZQUFZLENBQUMsVUFBVSxlQUFlLFlBQVksQ0FBQyxPQUFPLGVBQWUsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUMxRyxDQUFDO2dCQUNGLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUNmLG1CQUFtQixJQUFJLENBQUMsU0FBUyxDQUMvQixZQUFZLENBQ2IsZ0NBQWdDLE1BQU0sQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FDaEUsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQyxDQUFDO0NBQ0g7QUFFRCxlQUFlLGtCQUFrQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY2h1bmssIHBpY2sgfSBmcm9tICdsb2Rhc2gtZXMnO1xuXG5pbXBvcnQge1xuICBBYnN0cmFjdEVyZ29Cb3hBY3Rpb24sXG4gIERCX0NIVU5LX1NJWkUsXG4gIEVudGl0eUluZm8sXG4gIFNwZW5kSW5mbyxcbn0gZnJvbSAnQHJvc2VuLWJyaWRnZS9hYnN0cmFjdC1leHRyYWN0b3InO1xuaW1wb3J0IHsgQWJzdHJhY3RMb2dnZXIgfSBmcm9tICdAcm9zZW4tYnJpZGdlL2Fic3RyYWN0LWxvZ2dlcic7XG5pbXBvcnQgeyBEYXRhU291cmNlLCBJbiB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvZXh0ZW5kZWQtdHlwZW9ybSc7XG5pbXBvcnQgeyBCbG9ja0luZm8gfSBmcm9tICdAcm9zZW4tYnJpZGdlL3NjYW5uZXItaW50ZXJmYWNlcyc7XG5cbmltcG9ydCBFdmVudFRyaWdnZXJFbnRpdHkgZnJvbSAnLi4vZW50aXRpZXMvZXZlbnRUcmlnZ2VyRW50aXR5JztcbmltcG9ydCB7IEV4dHJhY3RlZEV2ZW50VHJpZ2dlciB9IGZyb20gJy4uL2ludGVyZmFjZXMvZXh0cmFjdGVkRXZlbnRUcmlnZ2VyJztcbmltcG9ydCB7IEpzb25CSSB9IGZyb20gJy4uL3V0aWxzJztcblxuY2xhc3MgRXZlbnRUcmlnZ2VyQWN0aW9uIGV4dGVuZHMgQWJzdHJhY3RFcmdvQm94QWN0aW9uPFxuICBFeHRyYWN0ZWRFdmVudFRyaWdnZXIsXG4gIEV2ZW50VHJpZ2dlckVudGl0eVxuPiB7XG4gIGNvbnN0cnVjdG9yKGRhdGFTb3VyY2U6IERhdGFTb3VyY2UsIGxvZ2dlcj86IEFic3RyYWN0TG9nZ2VyKSB7XG4gICAgc3VwZXIoZGF0YVNvdXJjZSwgRXZlbnRUcmlnZ2VyRW50aXR5LCBsb2dnZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIGNyZWF0ZSB0aGUgYm94IGVudGl0eSBmcm9tIGV4dHJhY3RlZCBkYXRhIGFuZCBibG9jayBpbmZvcm1hdGlvblxuICAgKi9cbiAgY3JlYXRlRW50aXR5ID0gKFxuICAgIHRyaWdnZXJCb3hlczogRXh0cmFjdGVkRXZlbnRUcmlnZ2VyW10sXG4gICAgYmxvY2s6IEJsb2NrSW5mbyxcbiAgICBleHRyYWN0b3I6IHN0cmluZyxcbiAgKTogT21pdDxFdmVudFRyaWdnZXJFbnRpdHksICdpZCc+W10gPT4ge1xuICAgIHJldHVybiB0cmlnZ2VyQm94ZXMubWFwKCh0cmlnZ2VyKSA9PiAoe1xuICAgICAgdHhJZDogdHJpZ2dlci50eElkLFxuICAgICAgZXZlbnRJZDogdHJpZ2dlci5ldmVudElkLFxuICAgICAgaWRlbnRpZmllcjogdHJpZ2dlci5pZGVudGlmaWVyLFxuICAgICAgc2VyaWFsaXplZDogdHJpZ2dlci5zZXJpYWxpemVkLFxuICAgICAgYmxvY2s6IGJsb2NrLmhhc2gsXG4gICAgICBoZWlnaHQ6IGJsb2NrLmhlaWdodCxcbiAgICAgIGV4dHJhY3RvcjogZXh0cmFjdG9yLFxuICAgICAgV0lEc0NvdW50OiB0cmlnZ2VyLldJRHNDb3VudCxcbiAgICAgIFdJRHNIYXNoOiB0cmlnZ2VyLldJRHNIYXNoLFxuICAgICAgYW1vdW50OiB0cmlnZ2VyLmFtb3VudCxcbiAgICAgIGJyaWRnZUZlZTogdHJpZ2dlci5icmlkZ2VGZWUsXG4gICAgICBmcm9tQWRkcmVzczogdHJpZ2dlci5mcm9tQWRkcmVzcyxcbiAgICAgIHRvQWRkcmVzczogdHJpZ2dlci50b0FkZHJlc3MsXG4gICAgICBmcm9tQ2hhaW46IHRyaWdnZXIuZnJvbUNoYWluLFxuICAgICAgbmV0d29ya0ZlZTogdHJpZ2dlci5uZXR3b3JrRmVlLFxuICAgICAgc291cmNlQ2hhaW5Ub2tlbklkOiB0cmlnZ2VyLnNvdXJjZUNoYWluVG9rZW5JZCxcbiAgICAgIHRhcmdldENoYWluVG9rZW5JZDogdHJpZ2dlci50YXJnZXRDaGFpblRva2VuSWQsXG4gICAgICBzb3VyY2VCbG9ja0lkOiB0cmlnZ2VyLnNvdXJjZUJsb2NrSWQsXG4gICAgICB0b0NoYWluOiB0cmlnZ2VyLnRvQ2hhaW4sXG4gICAgICBzb3VyY2VUeElkOiB0cmlnZ2VyLnNvdXJjZVR4SWQsXG4gICAgICBzb3VyY2VDaGFpbkhlaWdodDogdHJpZ2dlci5zb3VyY2VDaGFpbkhlaWdodCxcbiAgICB9KSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIGNvbnZlcnQgdGhlIGRhdGFiYXNlIGVudGl0eSBiYWNrIHRvIHJhdyBkYXRhXG4gICAqL1xuICBjb252ZXJ0RW50aXR5VG9EYXRhID0gKFxuICAgIGVudGl0aWVzOiBFdmVudFRyaWdnZXJFbnRpdHlbXSxcbiAgKTogRXh0cmFjdGVkRXZlbnRUcmlnZ2VyW10gPT4ge1xuICAgIHJldHVybiBlbnRpdGllcy5tYXAoKGRhdGEpID0+XG4gICAgICBwaWNrKGRhdGEsIFtcbiAgICAgICAgJ2V2ZW50SWQnLFxuICAgICAgICAndHhJZCcsXG4gICAgICAgICdpZGVudGlmaWVyJyxcbiAgICAgICAgJ3NlcmlhbGl6ZWQnLFxuICAgICAgICAnZnJvbUNoYWluJyxcbiAgICAgICAgJ3RvQ2hhaW4nLFxuICAgICAgICAnZnJvbUFkZHJlc3MnLFxuICAgICAgICAndG9BZGRyZXNzJyxcbiAgICAgICAgJ2Ftb3VudCcsXG4gICAgICAgICdicmlkZ2VGZWUnLFxuICAgICAgICAnbmV0d29ya0ZlZScsXG4gICAgICAgICdzb3VyY2VDaGFpblRva2VuSWQnLFxuICAgICAgICAndGFyZ2V0Q2hhaW5Ub2tlbklkJyxcbiAgICAgICAgJ3NvdXJjZUJsb2NrSWQnLFxuICAgICAgICAnc291cmNlVHhJZCcsXG4gICAgICAgICdXSURzQ291bnQnLFxuICAgICAgICAnV0lEc0hhc2gnLFxuICAgICAgICAnc291cmNlQ2hhaW5IZWlnaHQnLFxuICAgICAgXSksXG4gICAgKTtcbiAgfTtcblxuICAvKipcbiAgICogdXBkYXRlIHNwZW5kaW5nIGluZm9ybWF0aW9uIG9mIHN0b3JlZCBldmVudCB0cmlnZ2Vyc1xuICAgKiBhbmQgc2V0IHJlc3VsdCBhbmQgcGF5bWVudFR4SWQgb2YgdGhlIGV2ZW50XG4gICAqIGNodW5rIHNwZW5kSW5mb3MgdG8gcHJldmVudCBsYXJnZSBkYXRhYmFzZSBxdWVyaWVzXG4gICAqIEBwYXJhbSBzcGVuZEluZkFycmF5XG4gICAqIEBwYXJhbSBibG9ja1xuICAgKiBAcGFyYW0gZXh0cmFjdG9ySWRcbiAgICogQHJldHVybnMgc3BlbnQgYm94IGlkc1xuICAgKi9cbiAgc3BlbmRCb3hlcyA9IGFzeW5jIChcbiAgICBzcGVuZEluZm9BcnJheTogQXJyYXk8U3BlbmRJbmZvPixcbiAgICBibG9jazogQmxvY2tJbmZvLFxuICAgIGV4dHJhY3RvcklkOiBzdHJpbmcsXG4gICk6IFByb21pc2U8RW50aXR5SW5mb1tdPiA9PiB7XG4gICAgY29uc3Qgc3BlbnREYXRhID0gW107XG4gICAgY29uc3Qgc3BlbmRJbmZvQ2h1bmtzID0gY2h1bmsoc3BlbmRJbmZvQXJyYXksIERCX0NIVU5LX1NJWkUpO1xuICAgIGZvciAoY29uc3Qgc3BlbmRJbmZvQ2h1bmsgb2Ygc3BlbmRJbmZvQ2h1bmtzKSB7XG4gICAgICBjb25zdCBzcGVudFRyaWdnZXJzID0gYXdhaXQgdGhpcy5yZXBvc2l0b3J5LmZpbmRCeSh7XG4gICAgICAgIGlkZW50aWZpZXI6IEluKHNwZW5kSW5mb0NodW5rLm1hcCgoc3BlbmRJbmZvKSA9PiBzcGVuZEluZm8uYm94SWQpKSxcbiAgICAgICAgZXh0cmFjdG9yOiBleHRyYWN0b3JJZCxcbiAgICAgIH0pO1xuICAgICAgZm9yIChjb25zdCBzcGVudFRyaWdnZXIgb2Ygc3BlbnRUcmlnZ2Vycykge1xuICAgICAgICBjb25zdCBzcGVuZEluZm8gPSBzcGVuZEluZm9DaHVuay5maW5kKFxuICAgICAgICAgIChpbmZvKSA9PiBpbmZvLmJveElkID09PSBzcGVudFRyaWdnZXIuaWRlbnRpZmllcixcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCFzcGVuZEluZm8gfHwgIXNwZW5kSW5mby5leHRyYXMgfHwgIXNwZW5kSW5mby5leHRyYXMucmVzdWx0KSB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICBgSW1wb3NzaWJsZUJlaGF2aW9yOjogc3BlbmRpbmcgaW5mb3JtYXRpb24gZXh0cmFzIGRvZXMgbm90IGNvbnRhaW4gcmVzdWx0LCAke0pzb25CSS5zdHJpbmdpZnkoXG4gICAgICAgICAgICAgIHNwZW5kSW5mbyxcbiAgICAgICAgICAgICl9YCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMucmVwb3NpdG9yeS51cGRhdGUoXG4gICAgICAgICAgeyBpZGVudGlmaWVyOiBzcGVuZEluZm8uYm94SWQsIGV4dHJhY3RvcjogZXh0cmFjdG9ySWQgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzcGVuZEJsb2NrOiBibG9jay5oYXNoLFxuICAgICAgICAgICAgc3BlbmRIZWlnaHQ6IGJsb2NrLmhlaWdodCxcbiAgICAgICAgICAgIHNwZW5kVHhJZDogc3BlbmRJbmZvLnR4SWQsXG4gICAgICAgICAgICByZXN1bHQ6IHNwZW5kSW5mby5leHRyYXMucmVzdWx0LFxuICAgICAgICAgICAgcGF5bWVudFR4SWQ6IHNwZW5kSW5mby5leHRyYXMucGF5bWVudFR4SWQgfHwgJycsXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgICAgc3BlbnREYXRhLnB1c2goeyBpZGVudGlmaWVyOiBzcGVuZEluZm8uYm94SWQgfSk7XG4gICAgICAgIHRoaXMubG9nZ2VyLmluZm8oXG4gICAgICAgICAgYFNwZW50IHRyaWdnZXIgWyR7c3BlbnRUcmlnZ2VyLmlkZW50aWZpZXJ9XSBvZiBldmVudCBbJHtzcGVudFRyaWdnZXIuZXZlbnRJZH1dIGF0IGhlaWdodCAke2Jsb2NrLmhlaWdodH1gLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICBgU3BlbnQgdHJpZ2dlcjogWyR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgICBzcGVudFRyaWdnZXIsXG4gICAgICAgICAgKX1dIHdpdGggc3BlbmRpbmcgaW5mb3JtYXRpb24gWyR7SnNvbkJJLnN0cmluZ2lmeShzcGVuZEluZm8pfV1gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3BlbnREYXRhO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBFdmVudFRyaWdnZXJBY3Rpb247XG4iXX0=
@@ -0,0 +1,73 @@
1
+ import { AbstractLogger } from '@rosen-bridge/abstract-logger';
2
+ import { DataSource, SelectQueryBuilder } from '@rosen-bridge/extended-typeorm';
3
+ import { BlockInfo } from '@rosen-bridge/scanner-interfaces';
4
+ import PermitEntity from '../entities/permitEntity';
5
+ import { ExtractedPermit } from '../interfaces/extractedPermit';
6
+ declare class PermitAction {
7
+ readonly logger: AbstractLogger;
8
+ private readonly datasource;
9
+ private readonly permitRepository;
10
+ constructor(dataSource: DataSource, logger?: AbstractLogger);
11
+ /**
12
+ * insert a new permit boxes in the database
13
+ * @param permits
14
+ * @param initialHeight
15
+ * @param extractor
16
+ */
17
+ insertPermit: (permit: ExtractedPermit, extractor: string) => Promise<import("@rosen-bridge/extended-typeorm").InsertResult>;
18
+ /**
19
+ * update an unspent permit in the database
20
+ * @param permit
21
+ * @param extractor
22
+ */
23
+ updatePermit: (permit: ExtractedPermit, extractor: string) => Promise<void>;
24
+ /**
25
+ * It stores list of permits in the dataSource with block id
26
+ * @param permits
27
+ * @param block
28
+ * @param extractor
29
+ */
30
+ storePermits: (permits: Array<ExtractedPermit>, block: BlockInfo, extractor: string) => Promise<boolean>;
31
+ /**
32
+ * Update spendBlock and spendHeight of permits spent on the block
33
+ * @param spendId
34
+ * @param block
35
+ * @param extractor
36
+ */
37
+ spendPermits: (spendId: Array<string>, block: BlockInfo, extractor: string) => Promise<void>;
38
+ /**
39
+ * Delete all permits corresponding to the block(id) and extractor(id)
40
+ * and update all permits spent on the specified block
41
+ * @param block
42
+ * @param extractor
43
+ */
44
+ deleteBlock: (block: string, extractor: string) => Promise<void>;
45
+ /**
46
+ * Returns all stored permit box ids
47
+ */
48
+ getAllPermitBoxIds: (extractor: string) => Promise<Array<string>>;
49
+ /**
50
+ * Removes specified permit
51
+ * @param boxId
52
+ * @param extractor
53
+ */
54
+ removePermit: (boxId: string, extractor: string) => Promise<import("@rosen-bridge/extended-typeorm").DeleteResult>;
55
+ /**
56
+ * Update the permit spending information
57
+ * @param boxId
58
+ * @param extractor
59
+ * @param blockId
60
+ * @param blockHeight
61
+ */
62
+ updateSpendBlock: (boxId: string, extractor: string, blockId: string, blockHeight: number) => Promise<import("@rosen-bridge/extended-typeorm").UpdateResult>;
63
+ /**
64
+ * Builds a query that returns used blocks by selecting the `block` column from the `PermitEntity` repository,
65
+ * filtered by the provided `extractorId`
66
+ *
67
+ * @param extractorId - Identifier of the extractor
68
+ * @returns A query builder selecting used blocks
69
+ */
70
+ createUsedBlocksQuery: (extractorId: string) => SelectQueryBuilder<PermitEntity>;
71
+ }
72
+ export default PermitAction;
73
+ //# sourceMappingURL=permitAction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permitAction.d.ts","sourceRoot":"","sources":["../../lib/actions/permitAction.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAe,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EACL,UAAU,EAGV,kBAAkB,EACnB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAG7D,OAAO,YAAY,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,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,CAAC,EAAE,cAAc;IAM3D;;;;;OAKG;IACH,YAAY,GAAU,QAAQ,eAAe,EAAE,WAAW,MAAM,oEAY9D;IAEF;;;;OAIG;IACH,YAAY,GAAU,QAAQ,eAAe,EAAE,WAAW,MAAM,mBAa9D;IAEF;;;;;OAKG;IACH,YAAY,GACV,SAAS,KAAK,CAAC,eAAe,CAAC,EAC/B,OAAO,SAAS,EAChB,WAAW,MAAM,sBAiDjB;IAEF;;;;;OAKG;IACH,YAAY,GACV,SAAS,KAAK,CAAC,MAAM,CAAC,EACtB,OAAO,SAAS,EAChB,WAAW,MAAM,KAChB,OAAO,CAAC,IAAI,CAAC,CAoBd;IAEF;;;;;OAKG;IACH,WAAW,GAAU,OAAO,MAAM,EAAE,WAAW,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC,CASnE;IAEF;;OAEG;IACH,kBAAkB,GAAU,WAAW,MAAM,KAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAUpE;IAEF;;;;OAIG;IACH,YAAY,GAAU,OAAO,MAAM,EAAE,WAAW,MAAM,oEAKpD;IAEF;;;;;;OAMG;IACH,gBAAgB,GACd,OAAO,MAAM,EACb,WAAW,MAAM,EACjB,SAAS,MAAM,EACf,aAAa,MAAM,oEAMnB;IAEF;;;;;;OAMG;IACH,qBAAqB,GACnB,aAAa,MAAM,KAClB,kBAAkB,CAAC,YAAY,CAAC,CAKjC;CACH;AAED,eAAe,YAAY,CAAC"}
@@ -0,0 +1,187 @@
1
+ import { chunk } from 'lodash-es';
2
+ import { DummyLogger } from '@rosen-bridge/abstract-logger';
3
+ import { In, } from '@rosen-bridge/extended-typeorm';
4
+ import { dbIdChunkSize } from '../constants';
5
+ import PermitEntity from '../entities/permitEntity';
6
+ class PermitAction {
7
+ logger;
8
+ datasource;
9
+ permitRepository;
10
+ constructor(dataSource, logger) {
11
+ this.datasource = dataSource;
12
+ this.logger = logger ? logger : new DummyLogger();
13
+ this.permitRepository = dataSource.getRepository(PermitEntity);
14
+ }
15
+ /**
16
+ * insert a new permit boxes in the database
17
+ * @param permits
18
+ * @param initialHeight
19
+ * @param extractor
20
+ */
21
+ insertPermit = async (permit, extractor) => {
22
+ return this.permitRepository.insert({
23
+ boxId: permit.boxId,
24
+ boxSerialized: permit.boxSerialized,
25
+ block: permit.block,
26
+ height: permit.height,
27
+ extractor: extractor,
28
+ WID: permit.WID,
29
+ txId: permit.txId,
30
+ spendBlock: permit.spendBlock,
31
+ spendHeight: permit.spendHeight,
32
+ });
33
+ };
34
+ /**
35
+ * update an unspent permit in the database
36
+ * @param permit
37
+ * @param extractor
38
+ */
39
+ updatePermit = async (permit, extractor) => {
40
+ await this.permitRepository.update({ boxId: permit.boxId, extractor: extractor }, {
41
+ boxSerialized: permit.boxSerialized,
42
+ block: permit.block,
43
+ height: permit.height,
44
+ WID: permit.WID,
45
+ txId: permit.txId,
46
+ spendBlock: null,
47
+ spendHeight: null,
48
+ });
49
+ };
50
+ /**
51
+ * It stores list of permits in the dataSource with block id
52
+ * @param permits
53
+ * @param block
54
+ * @param extractor
55
+ */
56
+ storePermits = async (permits, block, extractor) => {
57
+ if (permits.length === 0)
58
+ return true;
59
+ const boxIds = permits.map((permit) => permit.boxId);
60
+ const savedPermits = await this.permitRepository.findBy({
61
+ boxId: In(boxIds),
62
+ extractor: extractor,
63
+ });
64
+ let success = true;
65
+ const queryRunner = this.datasource.createQueryRunner();
66
+ await queryRunner.connect();
67
+ await queryRunner.startTransaction();
68
+ const repository = await queryRunner.manager.getRepository(PermitEntity);
69
+ try {
70
+ for (const permit of permits) {
71
+ const saved = savedPermits.some((entity) => {
72
+ return entity.boxId === permit.boxId;
73
+ });
74
+ const entity = {
75
+ boxId: permit.boxId,
76
+ boxSerialized: permit.boxSerialized,
77
+ block: block.hash,
78
+ height: block.height,
79
+ extractor: extractor,
80
+ WID: permit.WID,
81
+ txId: permit.txId,
82
+ };
83
+ if (!saved) {
84
+ this.logger.debug(`Saving permit [${permit.boxId}] belonging to watcher [${permit.WID}] at height ${block.height} and extractor ${extractor}`);
85
+ await repository.insert(entity);
86
+ }
87
+ else {
88
+ this.logger.debug(`Updating permit [${permit.boxId}] belonging to watcher [${permit.WID}] at height ${block.height} and extractor ${extractor}`);
89
+ await repository.update({ boxId: permit.boxId }, entity);
90
+ }
91
+ this.logger.debug(`Entity: ${JSON.stringify(entity)}`);
92
+ }
93
+ await queryRunner.commitTransaction();
94
+ }
95
+ catch (e) {
96
+ this.logger.error(`An error occurred during store permit action: ${e}`);
97
+ await queryRunner.rollbackTransaction();
98
+ success = false;
99
+ }
100
+ finally {
101
+ await queryRunner.release();
102
+ }
103
+ return success;
104
+ };
105
+ /**
106
+ * Update spendBlock and spendHeight of permits spent on the block
107
+ * @param spendId
108
+ * @param block
109
+ * @param extractor
110
+ */
111
+ spendPermits = async (spendId, block, extractor) => {
112
+ const spendIdChunks = chunk(spendId, dbIdChunkSize);
113
+ for (const spendIdChunk of spendIdChunks) {
114
+ const updateResult = await this.permitRepository.update({ boxId: In(spendIdChunk), extractor: extractor }, { spendBlock: block.hash, spendHeight: block.height });
115
+ if (updateResult.affected && updateResult.affected > 0) {
116
+ const spentRows = await this.permitRepository.findBy({
117
+ boxId: In(spendIdChunk),
118
+ spendBlock: block.hash,
119
+ });
120
+ for (const row of spentRows) {
121
+ this.logger.debug(`Spent permit with boxId [${row.boxId}] belonging to watcher with WID [${row.WID}] at height ${block.height}`);
122
+ }
123
+ }
124
+ }
125
+ };
126
+ /**
127
+ * Delete all permits corresponding to the block(id) and extractor(id)
128
+ * and update all permits spent on the specified block
129
+ * @param block
130
+ * @param extractor
131
+ */
132
+ deleteBlock = async (block, extractor) => {
133
+ this.logger.info(`Deleting permits at block ${block} and extractor ${extractor}`);
134
+ await this.permitRepository.delete({ block: block, extractor: extractor });
135
+ await this.permitRepository.update({ spendBlock: block, extractor: extractor }, { spendBlock: null, spendHeight: null });
136
+ };
137
+ /**
138
+ * Returns all stored permit box ids
139
+ */
140
+ getAllPermitBoxIds = async (extractor) => {
141
+ const boxIds = await this.permitRepository.find({
142
+ where: {
143
+ extractor: extractor,
144
+ },
145
+ select: {
146
+ boxId: true,
147
+ },
148
+ });
149
+ return boxIds.map((item) => item.boxId);
150
+ };
151
+ /**
152
+ * Removes specified permit
153
+ * @param boxId
154
+ * @param extractor
155
+ */
156
+ removePermit = async (boxId, extractor) => {
157
+ return await this.permitRepository.delete({
158
+ boxId: boxId,
159
+ extractor: extractor,
160
+ });
161
+ };
162
+ /**
163
+ * Update the permit spending information
164
+ * @param boxId
165
+ * @param extractor
166
+ * @param blockId
167
+ * @param blockHeight
168
+ */
169
+ updateSpendBlock = async (boxId, extractor, blockId, blockHeight) => {
170
+ return await this.permitRepository.update({ boxId: boxId, extractor: extractor }, { spendBlock: blockId, spendHeight: blockHeight });
171
+ };
172
+ /**
173
+ * Builds a query that returns used blocks by selecting the `block` column from the `PermitEntity` repository,
174
+ * filtered by the provided `extractorId`
175
+ *
176
+ * @param extractorId - Identifier of the extractor
177
+ * @returns A query builder selecting used blocks
178
+ */
179
+ createUsedBlocksQuery = (extractorId) => {
180
+ return this.permitRepository
181
+ .createQueryBuilder('permitEntity')
182
+ .select('permitEntity.block', 'block')
183
+ .where('permitEntity.extractor = :extractorId', { extractorId });
184
+ };
185
+ }
186
+ export default PermitAction;
187
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWl0QWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL2FjdGlvbnMvcGVybWl0QWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFbEMsT0FBTyxFQUFrQixXQUFXLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM1RSxPQUFPLEVBRUwsRUFBRSxHQUdILE1BQU0sZ0NBQWdDLENBQUM7QUFHeEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3QyxPQUFPLFlBQVksTUFBTSwwQkFBMEIsQ0FBQztBQUdwRCxNQUFNLFlBQVk7SUFDUCxNQUFNLENBQWlCO0lBQ2YsVUFBVSxDQUFhO0lBQ3ZCLGdCQUFnQixDQUEyQjtJQUU1RCxZQUFZLFVBQXNCLEVBQUUsTUFBdUI7UUFDekQsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUNsRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsVUFBVSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxZQUFZLEdBQUcsS0FBSyxFQUFFLE1BQXVCLEVBQUUsU0FBaUIsRUFBRSxFQUFFO1FBQ2xFLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQztZQUNsQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7WUFDbkIsYUFBYSxFQUFFLE1BQU0sQ0FBQyxhQUFhO1lBQ25DLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztZQUNuQixNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07WUFDckIsU0FBUyxFQUFFLFNBQVM7WUFDcEIsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFH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QzthQUNyQyxLQUFLLENBQUMsdUNBQXVDLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ3JFLENBQUMsQ0FBQztDQUNIO0FBRUQsZUFBZSxZQUFZLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjaHVuayB9IGZyb20gJ2xvZGFzaC1lcyc7XG5cbmltcG9ydCB7IEFic3RyYWN0TG9nZ2VyLCBEdW1teUxvZ2dlciB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvYWJzdHJhY3QtbG9nZ2VyJztcbmltcG9ydCB7XG4gIERhdGFTb3VyY2UsXG4gIEluLFxuICBSZXBvc2l0b3J5LFxuICBTZWxlY3RRdWVyeUJ1aWxkZXIsXG59IGZyb20gJ0Byb3Nlbi1icmlkZ2UvZXh0ZW5kZWQtdHlwZW9ybSc7XG5pbXBvcnQgeyBCbG9ja0luZm8gfSBmcm9tICdAcm9zZW4tYnJpZGdlL3NjYW5uZXItaW50ZXJmYWNlcyc7XG5cbmltcG9ydCB7IGRiSWRDaHVua1NpemUgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IFBlcm1pdEVudGl0eSBmcm9tICcuLi9lbnRpdGllcy9wZXJtaXRFbnRpdHknO1xuaW1wb3J0IHsgRXh0cmFjdGVkUGVybWl0IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9leHRyYWN0ZWRQZXJtaXQnO1xuXG5jbGFzcyBQZXJtaXRBY3Rpb24ge1xuICByZWFkb25seSBsb2dnZXI6IEFic3RyYWN0TG9nZ2VyO1xuICBwcml2YXRlIHJlYWRvbmx5IGRhdGFzb3VyY2U6IERhdGFTb3VyY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGVybWl0UmVwb3NpdG9yeTogUmVwb3NpdG9yeTxQZXJtaXRFbnRpdHk+O1xuXG4gIGNvbnN0cnVjdG9yKGRhdGFTb3VyY2U6IERhdGFTb3VyY2UsIGxvZ2dlcj86IEFic3RyYWN0TG9nZ2VyKSB7XG4gICAgdGhpcy5kYXRhc291cmNlID0gZGF0YVNvdXJjZTtcbiAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlciA/IGxvZ2dlciA6IG5ldyBEdW1teUxvZ2dlcigpO1xuICAgIHRoaXMucGVybWl0UmVwb3NpdG9yeSA9IGRhdGFTb3VyY2UuZ2V0UmVwb3NpdG9yeShQZXJtaXRFbnRpdHkpO1xuICB9XG5cbiAgLyoqXG4gICAqIGluc2VydCBhIG5ldyBwZXJtaXQgYm94ZXMgaW4gdGhlIGRhdGFiYXNlXG4gICAqIEBwYXJhbSBwZXJtaXRzXG4gICAqIEBwYXJhbSBpbml0aWFsSGVpZ2h0XG4gICAqIEBwYXJhbSBleHRyYWN0b3JcbiAgICovXG4gIGluc2VydFBlcm1pdCA9IGFzeW5jIChwZXJtaXQ6IEV4dHJhY3RlZFBlcm1pdCwgZXh0cmFjdG9yOiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gdGhpcy5wZXJtaXRSZXBvc2l0b3J5Lmluc2VydCh7XG4gICAgICBib3hJZDogcGVybWl0LmJveElkLFxuICAgICAgYm94U2VyaWFsaXplZDogcGVybWl0LmJveFNlcmlhbGl6ZWQsXG4gICAgICBibG9jazogcGVybWl0LmJsb2NrLFxuICAgICAgaGVpZ2h0OiBwZXJtaXQuaGVpZ2h0LFxuICAgICAgZXh0cmFjdG9yOiBleHRyYWN0b3IsXG4gICAgICBXSUQ6IHBlcm1pdC5XSUQsXG4gICAgICB0eElkOiBwZXJtaXQudHhJZCxcbiAgICAgIHNwZW5kQmxvY2s6IHBlcm1pdC5zcGVuZEJsb2NrLFxuICAgICAgc3BlbmRIZWlnaHQ6IHBlcm1pdC5zcGVuZEhlaWdodCxcbiAgICB9KTtcbiAgfTtcblxuICAvKipcbiAgICogdXBkYXRlIGFuIHVuc3BlbnQgcGVybWl0IGluIHRoZSBkYXRhYmFzZVxuICAgKiBAcGFyYW0gcGVybWl0XG4gICAqIEBwYXJhbSBleHRyYWN0b3JcbiAgICovXG4gIHVwZGF0ZVBlcm1pdCA9IGFzeW5jIChwZXJtaXQ6IEV4dHJhY3RlZFBlcm1pdCwgZXh0cmFjdG9yOiBzdHJpbmcpID0+IHtcbiAgICBhd2FpdCB0aGlzLnBlcm1pdFJlcG9zaXRvcnkudXBkYXRlKFxuICAgICAgeyBib3hJZDogcGVybWl0LmJveElkLCBleHRyYWN0b3I6IGV4dHJhY3RvciB9LFxuICAgICAge1xuICAgICAgICBib3hTZXJpYWxpemVkOiBwZXJtaXQuYm94U2VyaWFsaXplZCxcbiAgICAgICAgYmxvY2s6IHBlcm1pdC5ibG9jayxcbiAgICAgICAgaGVpZ2h0OiBwZXJtaXQuaGVpZ2h0LFxuICAgICAgICBXSUQ6IHBlcm1pdC5XSUQsXG4gICAgICAgIHR4SWQ6IHBlcm1pdC50eElkLFxuICAgICAgICBzcGVuZEJsb2NrOiBudWxsLFxuICAgICAgICBzcGVuZEhlaWdodDogbnVsbCxcbiAgICAgIH0sXG4gICAgKTtcbiAgfTtcblxuICAvKipcbiAgICogSXQgc3RvcmVzIGxpc3Qgb2YgcGVybWl0cyBpbiB0aGUgZGF0YVNvdXJjZSB3aXRoIGJsb2NrIGlkXG4gICAqIEBwYXJhbSBwZXJtaXRzXG4gICAqIEBwYXJhbSBibG9ja1xuICAgKiBAcGFyYW0gZXh0cmFjdG9yXG4gICAqL1xuICBzdG9yZVBlcm1pdHMgPSBhc3luYyAoXG4gICAgcGVybWl0czogQXJyYXk8RXh0cmFjdGVkUGVybWl0PixcbiAgICBibG9jazogQmxvY2tJbmZvLFxuICAgIGV4dHJhY3Rvcjogc3RyaW5nLFxuICApID0+IHtcbiAgICBpZiAocGVybWl0cy5sZW5ndGggPT09IDApIHJldHVybiB0cnVlO1xuICAgIGNvbnN0IGJveElkcyA9IHBlcm1pdHMubWFwKChwZXJtaXQpID0+IHBlcm1pdC5ib3hJZCk7XG4gICAgY29uc3Qgc2F2ZWRQZXJtaXRzID0gYXdhaXQgdGhpcy5wZXJtaXRSZXBvc2l0b3J5LmZpbmRCeSh7XG4gICAgICBib3hJZDogSW4oYm94SWRzKSxcbiAgICAgIGV4dHJhY3RvcjogZXh0cmFjdG9yLFxuICAgIH0pO1xuICAgIGxldCBzdWNjZXNzID0gdHJ1ZTtcbiAgICBjb25zdCBxdWVyeVJ1bm5lciA9IHRoaXMuZGF0YXNvdXJjZS5jcmVhdGVRdWVyeVJ1bm5lcigpO1xuICAgIGF3YWl0IHF1ZXJ5UnVubmVyLmNvbm5lY3QoKTtcbiAgICBhd2FpdCBxdWVyeVJ1bm5lci5zdGFydFRyYW5zYWN0aW9uKCk7XG4gICAgY29uc3QgcmVwb3NpdG9yeSA9IGF3YWl0IHF1ZXJ5UnVubmVyLm1hbmFnZXIuZ2V0UmVwb3NpdG9yeShQZXJtaXRFbnRpdHkpO1xuICAgIHRyeSB7XG4gICAgICBmb3IgKGNvbnN0IHBlcm1pdCBvZiBwZXJtaXRzKSB7XG4gICAgICAgIGNvbnN0IHNhdmVkID0gc2F2ZWRQZXJtaXRzLnNvbWUoKGVudGl0eSkgPT4ge1xuICAgICAgICAgIHJldHVybiBlbnRpdHkuYm94SWQgPT09IHBlcm1pdC5ib3hJZDtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGVudGl0eSA9IHtcbiAgICAgICAgICBib3hJZDogcGVybWl0LmJveElkLFxuICAgICAgICAgIGJveFNlcmlhbGl6ZWQ6IHBlcm1pdC5ib3hTZXJpYWxpemVkLFxuICAgICAgICAgIGJsb2NrOiBibG9jay5oYXNoLFxuICAgICAgICAgIGhlaWdodDogYmxvY2suaGVpZ2h0LFxuICAgICAgICAgIGV4dHJhY3RvcjogZXh0cmFjdG9yLFxuICAgICAgICAgIFdJRDogcGVybWl0LldJRCxcbiAgICAgICAgICB0eElkOiBwZXJtaXQudHhJZCxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKCFzYXZlZCkge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICAgYFNhdmluZyBwZXJtaXQgWyR7cGVybWl0LmJveElkfV0gYmVsb25naW5nIHRvIHdhdGNoZXIgWyR7cGVybWl0LldJRH1dIGF0IGhlaWdodCAke2Jsb2NrLmhlaWdodH0gYW5kIGV4dHJhY3RvciAke2V4dHJhY3Rvcn1gLFxuICAgICAgICAgICk7XG4gICAgICAgICAgYXdhaXQgcmVwb3NpdG9yeS5pbnNlcnQoZW50aXR5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICAgIGBVcGRhdGluZyBwZXJtaXQgWyR7cGVybWl0LmJveElkfV0gYmVsb25naW5nIHRvIHdhdGNoZXIgWyR7cGVybWl0LldJRH1dIGF0IGhlaWdodCAke2Jsb2NrLmhlaWdodH0gYW5kIGV4dHJhY3RvciAke2V4dHJhY3Rvcn1gLFxuICAgICAgICAgICk7XG4gICAgICAgICAgYXdhaXQgcmVwb3NpdG9yeS51cGRhdGUoeyBib3hJZDogcGVybWl0LmJveElkIH0sIGVudGl0eSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYEVudGl0eTogJHtKU09OLnN0cmluZ2lmeShlbnRpdHkpfWApO1xuICAgICAgfVxuICAgICAgYXdhaXQgcXVlcnlSdW5uZXIuY29tbWl0VHJhbnNhY3Rpb24oKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZ2dlci5lcnJvcihgQW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHN0b3JlIHBlcm1pdCBhY3Rpb246ICR7ZX1gKTtcbiAgICAgIGF3YWl0IHF1ZXJ5UnVubmVyLnJvbGxiYWNrVHJhbnNhY3Rpb24oKTtcbiAgICAgIHN1Y2Nlc3MgPSBmYWxzZTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgcXVlcnlSdW5uZXIucmVsZWFzZSgpO1xuICAgIH1cbiAgICByZXR1cm4gc3VjY2VzcztcbiAgfTtcblxuICAvKipcbiAgICogVXBkYXRlIHNwZW5kQmxvY2sgYW5kIHNwZW5kSGVpZ2h0IG9mIHBlcm1pdHMgc3BlbnQgb24gdGhlIGJsb2NrXG4gICAqIEBwYXJhbSBzcGVuZElkXG4gICAqIEBwYXJhbSBibG9ja1xuICAgKiBAcGFyYW0gZXh0cmFjdG9yXG4gICAqL1xuICBzcGVuZFBlcm1pdHMgPSBhc3luYyAoXG4gICAgc3BlbmRJZDogQXJyYXk8c3RyaW5nPixcbiAgICBibG9jazogQmxvY2tJbmZvLFxuICAgIGV4dHJhY3Rvcjogc3RyaW5nLFxuICApOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBjb25zdCBzcGVuZElkQ2h1bmtzID0gY2h1bmsoc3BlbmRJZCwgZGJJZENodW5rU2l6ZSk7XG4gICAgZm9yIChjb25zdCBzcGVuZElkQ2h1bmsgb2Ygc3BlbmRJZENodW5rcykge1xuICAgICAgY29uc3QgdXBkYXRlUmVzdWx0ID0gYXdhaXQgdGhpcy5wZXJtaXRSZXBvc2l0b3J5LnVwZGF0ZShcbiAgICAgICAgeyBib3hJZDogSW4oc3BlbmRJZENodW5rKSwgZXh0cmFjdG9yOiBleHRyYWN0b3IgfSxcbiAgICAgICAgeyBzcGVuZEJsb2NrOiBibG9jay5oYXNoLCBzcGVuZEhlaWdodDogYmxvY2suaGVpZ2h0IH0sXG4gICAgICApO1xuXG4gICAgICBpZiAodXBkYXRlUmVzdWx0LmFmZmVjdGVkICYmIHVwZGF0ZVJlc3VsdC5hZmZlY3RlZCA+IDApIHtcbiAgICAgICAgY29uc3Qgc3BlbnRSb3dzID0gYXdhaXQgdGhpcy5wZXJtaXRSZXBvc2l0b3J5LmZpbmRCeSh7XG4gICAgICAgICAgYm94SWQ6IEluKHNwZW5kSWRDaHVuayksXG4gICAgICAgICAgc3BlbmRCbG9jazogYmxvY2suaGFzaCxcbiAgICAgICAgfSk7XG4gICAgICAgIGZvciAoY29uc3Qgcm93IG9mIHNwZW50Um93cykge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICAgYFNwZW50IHBlcm1pdCB3aXRoIGJveElkIFske3Jvdy5ib3hJZH1dIGJlbG9uZ2luZyB0byB3YXRjaGVyIHdpdGggV0lEIFske3Jvdy5XSUR9XSBhdCBoZWlnaHQgJHtibG9jay5oZWlnaHR9YCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBEZWxldGUgYWxsIHBlcm1pdHMgY29ycmVzcG9uZGluZyB0byB0aGUgYmxvY2soaWQpIGFuZCBleHRyYWN0b3IoaWQpXG4gICAqIGFuZCB1cGRhdGUgYWxsIHBlcm1pdHMgc3BlbnQgb24gdGhlIHNwZWNpZmllZCBibG9ja1xuICAgKiBAcGFyYW0gYmxvY2tcbiAgICogQHBhcmFtIGV4dHJhY3RvclxuICAgKi9cbiAgZGVsZXRlQmxvY2sgPSBhc3luYyAoYmxvY2s6IHN0cmluZywgZXh0cmFjdG9yOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICB0aGlzLmxvZ2dlci5pbmZvKFxuICAgICAgYERlbGV0aW5nIHBlcm1pdHMgYXQgYmxvY2sgJHtibG9ja30gYW5kIGV4dHJhY3RvciAke2V4dHJhY3Rvcn1gLFxuICAgICk7XG4gICAgYXdhaXQgdGhpcy5wZXJtaXRSZXBvc2l0b3J5LmRlbGV0ZSh7IGJsb2NrOiBibG9jaywgZXh0cmFjdG9yOiBleHRyYWN0b3IgfSk7XG4gICAgYXdhaXQgdGhpcy5wZXJtaXRSZXBvc2l0b3J5LnVwZGF0ZShcbiAgICAgIHsgc3BlbmRCbG9jazogYmxvY2ssIGV4dHJhY3RvcjogZXh0cmFjdG9yIH0sXG4gICAgICB7IHNwZW5kQmxvY2s6IG51bGwsIHNwZW5kSGVpZ2h0OiBudWxsIH0sXG4gICAgKTtcbiAgfTtcblxuICAvKipcbiAgICogIFJldHVybnMgYWxsIHN0b3JlZCBwZXJtaXQgYm94IGlkc1xuICAgKi9cbiAgZ2V0QWxsUGVybWl0Qm94SWRzID0gYXN5bmMgKGV4dHJhY3Rvcjogc3RyaW5nKTogUHJvbWlzZTxBcnJheTxzdHJpbmc+PiA9PiB7XG4gICAgY29uc3QgYm94SWRzID0gYXdhaXQgdGhpcy5wZXJtaXRSZXBvc2l0b3J5LmZpbmQoe1xuICAgICAgd2hlcmU6IHtcbiAgICAgICAgZXh0cmFjdG9yOiBleHRyYWN0b3IsXG4gICAgICB9LFxuICAgICAgc2VsZWN0OiB7XG4gICAgICAgIGJveElkOiB0cnVlLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICByZXR1cm4gYm94SWRzLm1hcCgoaXRlbTogeyBib3hJZDogc3RyaW5nIH0pID0+IGl0ZW0uYm94SWQpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHNwZWNpZmllZCBwZXJtaXRcbiAgICogQHBhcmFtIGJveElkXG4gICAqIEBwYXJhbSBleHRyYWN0b3JcbiAgICovXG4gIHJlbW92ZVBlcm1pdCA9IGFzeW5jIChib3hJZDogc3RyaW5nLCBleHRyYWN0b3I6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnBlcm1pdFJlcG9zaXRvcnkuZGVsZXRlKHtcbiAgICAgIGJveElkOiBib3hJZCxcbiAgICAgIGV4dHJhY3RvcjogZXh0cmFjdG9yLFxuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIHBlcm1pdCBzcGVuZGluZyBpbmZvcm1hdGlvblxuICAgKiBAcGFyYW0gYm94SWRcbiAgICogQHBhcmFtIGV4dHJhY3RvclxuICAgKiBAcGFyYW0gYmxvY2tJZFxuICAgKiBAcGFyYW0gYmxvY2tIZWlnaHRcbiAgICovXG4gIHVwZGF0ZVNwZW5kQmxvY2sgPSBhc3luYyAoXG4gICAgYm94SWQ6IHN0cmluZyxcbiAgICBleHRyYWN0b3I6IHN0cmluZyxcbiAgICBibG9ja0lkOiBzdHJpbmcsXG4gICAgYmxvY2tIZWlnaHQ6IG51bWJlcixcbiAgKSA9PiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucGVybWl0UmVwb3NpdG9yeS51cGRhdGUoXG4gICAgICB7IGJveElkOiBib3hJZCwgZXh0cmFjdG9yOiBleHRyYWN0b3IgfSxcbiAgICAgIHsgc3BlbmRCbG9jazogYmxvY2tJZCwgc3BlbmRIZWlnaHQ6IGJsb2NrSGVpZ2h0IH0sXG4gICAgKTtcbiAgfTtcblxuICAvKipcbiAgICogQnVpbGRzIGEgcXVlcnkgdGhhdCByZXR1cm5zIHVzZWQgYmxvY2tzIGJ5IHNlbGVjdGluZyB0aGUgYGJsb2NrYCBjb2x1bW4gZnJvbSB0aGUgYFBlcm1pdEVudGl0eWAgcmVwb3NpdG9yeSxcbiAgICogZmlsdGVyZWQgYnkgdGhlIHByb3ZpZGVkIGBleHRyYWN0b3JJZGBcbiAgICpcbiAgICogQHBhcmFtIGV4dHJhY3RvcklkIC0gSWRlbnRpZmllciBvZiB0aGUgZXh0cmFjdG9yXG4gICAqIEByZXR1cm5zIEEgcXVlcnkgYnVpbGRlciBzZWxlY3RpbmcgdXNlZCBibG9ja3NcbiAgICovXG4gIGNyZWF0ZVVzZWRCbG9ja3NRdWVyeSA9IChcbiAgICBleHRyYWN0b3JJZDogc3RyaW5nLFxuICApOiBTZWxlY3RRdWVyeUJ1aWxkZXI8UGVybWl0RW50aXR5PiA9PiB7XG4gICAgcmV0dXJuIHRoaXMucGVybWl0UmVwb3NpdG9yeVxuICAgICAgLmNyZWF0ZVF1ZXJ5QnVpbGRlcigncGVybWl0RW50aXR5JylcbiAgICAgIC5zZWxlY3QoJ3Blcm1pdEVudGl0eS5ibG9jaycsICdibG9jaycpXG4gICAgICAud2hlcmUoJ3Blcm1pdEVudGl0eS5leHRyYWN0b3IgPSA6ZXh0cmFjdG9ySWQnLCB7IGV4dHJhY3RvcklkIH0pO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBQZXJtaXRBY3Rpb247XG4iXX0=
@@ -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==
@@ -0,0 +1,8 @@
1
+ import { AbstractErgoBoxEntity } from '@rosen-bridge/abstract-extractor';
2
+ declare class CollateralEntity extends AbstractErgoBoxEntity {
3
+ txId: string;
4
+ wid: string;
5
+ rwtCount: bigint;
6
+ }
7
+ export default CollateralEntity;
8
+ //# sourceMappingURL=collateralEntity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collateralEntity.d.ts","sourceRoot":"","sources":["../../lib/entities/collateralEntity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAIzE,cACM,gBAAiB,SAAQ,qBAAqB;IAElD,IAAI,EAAE,MAAM,CAAC;IAGb,GAAG,EAAE,MAAM,CAAC;IAGZ,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,eAAe,gBAAgB,CAAC"}