@rosen-bridge/abstract-extractor 2.1.0 → 2.1.1

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 +11 -0
  2. package/package.json +14 -7
  3. package/.eslintignore +0 -1
  4. package/dist/lib/abstractExtractor.d.ts +0 -25
  5. package/dist/lib/abstractExtractor.d.ts.map +0 -1
  6. package/dist/lib/abstractExtractor.js +0 -3
  7. package/dist/lib/constants.d.ts +0 -4
  8. package/dist/lib/constants.d.ts.map +0 -1
  9. package/dist/lib/constants.js +0 -4
  10. package/dist/lib/ergo/AbstractErgoExtractor.d.ts +0 -80
  11. package/dist/lib/ergo/AbstractErgoExtractor.d.ts.map +0 -1
  12. package/dist/lib/ergo/AbstractErgoExtractor.js +0 -142
  13. package/dist/lib/ergo/AbstractErgoExtractorAction.d.ts +0 -92
  14. package/dist/lib/ergo/AbstractErgoExtractorAction.d.ts.map +0 -1
  15. package/dist/lib/ergo/AbstractErgoExtractorAction.js +0 -222
  16. package/dist/lib/ergo/AbstractErgoExtractorEntity.d.ts +0 -11
  17. package/dist/lib/ergo/AbstractErgoExtractorEntity.d.ts.map +0 -1
  18. package/dist/lib/ergo/AbstractErgoExtractorEntity.js +0 -57
  19. package/dist/lib/ergo/index.d.ts +0 -10
  20. package/dist/lib/ergo/index.d.ts.map +0 -1
  21. package/dist/lib/ergo/index.js +0 -10
  22. package/dist/lib/ergo/initializable/AbstractInitializable.d.ts +0 -48
  23. package/dist/lib/ergo/initializable/AbstractInitializable.d.ts.map +0 -1
  24. package/dist/lib/ergo/initializable/AbstractInitializable.js +0 -163
  25. package/dist/lib/ergo/initializable/AbstractInitializableAction.d.ts +0 -14
  26. package/dist/lib/ergo/initializable/AbstractInitializableAction.d.ts.map +0 -1
  27. package/dist/lib/ergo/initializable/AbstractInitializableAction.js +0 -16
  28. package/dist/lib/ergo/initializable/index.d.ts +0 -3
  29. package/dist/lib/ergo/initializable/index.d.ts.map +0 -1
  30. package/dist/lib/ergo/initializable/index.js +0 -3
  31. package/dist/lib/ergo/interfaces.d.ts +0 -47
  32. package/dist/lib/ergo/interfaces.d.ts.map +0 -1
  33. package/dist/lib/ergo/interfaces.js +0 -8
  34. package/dist/lib/ergo/network/AbstractNetwork.d.ts +0 -26
  35. package/dist/lib/ergo/network/AbstractNetwork.d.ts.map +0 -1
  36. package/dist/lib/ergo/network/AbstractNetwork.js +0 -3
  37. package/dist/lib/ergo/network/ExplorerNetwork.d.ts +0 -74
  38. package/dist/lib/ergo/network/ExplorerNetwork.d.ts.map +0 -1
  39. package/dist/lib/ergo/network/ExplorerNetwork.js +0 -185
  40. package/dist/lib/ergo/network/NodeNetwork.d.ts +0 -60
  41. package/dist/lib/ergo/network/NodeNetwork.d.ts.map +0 -1
  42. package/dist/lib/ergo/network/NodeNetwork.js +0 -131
  43. package/dist/lib/ergo/utils.d.ts +0 -8
  44. package/dist/lib/ergo/utils.d.ts.map +0 -1
  45. package/dist/lib/ergo/utils.js +0 -16
  46. package/dist/lib/index.d.ts +0 -4
  47. package/dist/lib/index.d.ts.map +0 -1
  48. package/dist/lib/index.js +0 -4
  49. package/dist/tests/AbstractErgoExtractor.mock.d.ts +0 -11
  50. package/dist/tests/AbstractErgoExtractor.mock.d.ts.map +0 -1
  51. package/dist/tests/AbstractErgoExtractor.mock.js +0 -11
  52. package/dist/tests/AbstractErgoExtractor.spec.d.ts +0 -2
  53. package/dist/tests/AbstractErgoExtractor.spec.d.ts.map +0 -1
  54. package/dist/tests/AbstractErgoExtractor.spec.js +0 -240
  55. package/dist/tests/AbstractErgoExtractorAction.mock.d.ts +0 -15
  56. package/dist/tests/AbstractErgoExtractorAction.mock.d.ts.map +0 -1
  57. package/dist/tests/AbstractErgoExtractorAction.mock.js +0 -27
  58. package/dist/tests/AbstractErgoExtractorAction.spec.d.ts +0 -2
  59. package/dist/tests/AbstractErgoExtractorAction.spec.d.ts.map +0 -1
  60. package/dist/tests/AbstractErgoExtractorAction.spec.js +0 -221
  61. package/dist/tests/initializable/AbstractInitializable.mock.d.ts +0 -61
  62. package/dist/tests/initializable/AbstractInitializable.mock.d.ts.map +0 -1
  63. package/dist/tests/initializable/AbstractInitializable.mock.js +0 -18
  64. package/dist/tests/initializable/AbstractInitializable.spec.d.ts +0 -2
  65. package/dist/tests/initializable/AbstractInitializable.spec.d.ts.map +0 -1
  66. package/dist/tests/initializable/AbstractInitializable.spec.js +0 -299
  67. package/dist/tests/initializable/AbstractInitializableAction.mock.d.ts +0 -15
  68. package/dist/tests/initializable/AbstractInitializableAction.mock.d.ts.map +0 -1
  69. package/dist/tests/initializable/AbstractInitializableAction.mock.js +0 -27
  70. package/dist/tests/initializable/AbstractInitializableAction.spec.d.ts +0 -2
  71. package/dist/tests/initializable/AbstractInitializableAction.spec.d.ts.map +0 -1
  72. package/dist/tests/initializable/AbstractInitializableAction.spec.js +0 -54
  73. package/dist/tests/initializable/testData.d.ts +0 -94
  74. package/dist/tests/initializable/testData.d.ts.map +0 -1
  75. package/dist/tests/initializable/testData.js +0 -235
  76. package/dist/tests/network/ExplorerNetwork.spec.d.ts +0 -2
  77. package/dist/tests/network/ExplorerNetwork.spec.d.ts.map +0 -1
  78. package/dist/tests/network/ExplorerNetwork.spec.js +0 -61
  79. package/dist/tests/network/NodeNetwork.spec.d.ts +0 -2
  80. package/dist/tests/network/NodeNetwork.spec.d.ts.map +0 -1
  81. package/dist/tests/network/NodeNetwork.spec.js +0 -48
  82. package/dist/tests/network/testData.d.ts +0 -752
  83. package/dist/tests/network/testData.d.ts.map +0 -1
  84. package/dist/tests/network/testData.js +0 -1401
  85. package/dist/tests/testData.d.ts +0 -32
  86. package/dist/tests/testData.d.ts.map +0 -1
  87. package/dist/tests/testData.js +0 -121
  88. package/dist/tests/testUtils.d.ts +0 -9
  89. package/dist/tests/testUtils.d.ts.map +0 -1
  90. package/dist/tests/testUtils.js +0 -31
  91. package/dist/tsconfig.tsbuildinfo +0 -1
  92. package/dist/vitest.config.d.ts +0 -3
  93. package/dist/vitest.config.d.ts.map +0 -1
  94. package/dist/vitest.config.js +0 -18
  95. package/lib/abstractExtractor.ts +0 -31
  96. package/lib/constants.ts +0 -3
  97. package/lib/ergo/AbstractErgoExtractor.ts +0 -227
  98. package/lib/ergo/AbstractErgoExtractorAction.ts +0 -319
  99. package/lib/ergo/AbstractErgoExtractorEntity.ts +0 -32
  100. package/lib/ergo/index.ts +0 -9
  101. package/lib/ergo/initializable/AbstractInitializable.ts +0 -228
  102. package/lib/ergo/initializable/AbstractInitializableAction.ts +0 -33
  103. package/lib/ergo/initializable/index.ts +0 -2
  104. package/lib/ergo/interfaces.ts +0 -51
  105. package/lib/ergo/network/AbstractNetwork.ts +0 -29
  106. package/lib/ergo/network/ExplorerNetwork.ts +0 -237
  107. package/lib/ergo/network/NodeNetwork.ts +0 -169
  108. package/lib/ergo/utils.ts +0 -15
  109. package/lib/index.ts +0 -3
  110. package/tests/AbstractErgoExtractor.mock.ts +0 -33
  111. package/tests/AbstractErgoExtractor.spec.ts +0 -284
  112. package/tests/AbstractErgoExtractorAction.mock.ts +0 -45
  113. package/tests/AbstractErgoExtractorAction.spec.ts +0 -268
  114. package/tests/initializable/AbstractInitializable.mock.ts +0 -44
  115. package/tests/initializable/AbstractInitializable.spec.ts +0 -386
  116. package/tests/initializable/AbstractInitializableAction.mock.ts +0 -45
  117. package/tests/initializable/AbstractInitializableAction.spec.ts +0 -64
  118. package/tests/initializable/testData.ts +0 -283
  119. package/tests/network/ExplorerNetwork.spec.ts +0 -73
  120. package/tests/network/NodeNetwork.spec.ts +0 -56
  121. package/tests/network/testData.ts +0 -1708
  122. package/tests/testData.ts +0 -140
  123. package/tests/testUtils.ts +0 -22
  124. package/tsconfig.build.json +0 -9
  125. package/tsconfig.build.tsbuildinfo +0 -1
  126. package/tsconfig.json +0 -9
  127. package/vitest.config.ts +0 -18
@@ -1,222 +0,0 @@
1
- import { In, Not, } from '@rosen-bridge/extended-typeorm';
2
- import { chunk, difference, pick } from 'lodash-es';
3
- import { DummyLogger } from '@rosen-bridge/abstract-logger';
4
- import JsonBigInt from '@rosen-bridge/json-bigint';
5
- import { DB_CHUNK_SIZE } from '../constants';
6
- export class AbstractErgoExtractorAction {
7
- datasource;
8
- logger;
9
- repository;
10
- repo;
11
- constructor(dataSource, repo, logger) {
12
- this.datasource = dataSource;
13
- this.logger = logger ? logger : new DummyLogger();
14
- this.repository = this.datasource.getRepository(repo);
15
- this.repo = repo;
16
- }
17
- /**
18
- * create the database entity from extracted data and block information
19
- */
20
- createEntity = (data, // eslint-disable-line @typescript-eslint/no-unused-vars
21
- block, // eslint-disable-line @typescript-eslint/no-unused-vars
22
- extractor) => {
23
- throw Error('You must implement `createEntity` or override `insertEntities` and `updateEntities`');
24
- };
25
- /**
26
- * convert the database entity back to raw data
27
- */
28
- convertEntityToData = (entities) => {
29
- throw Error('You must implement `convertEntityToData` or override `deleteBlockEntities`');
30
- };
31
- /**
32
- * insert entities extracted from a block to database
33
- * @param queryRunner
34
- * @param boxesToInsert
35
- * @param block
36
- * @param extractor
37
- */
38
- insertEntities = async (queryRunner, boxesToInsert, block, extractor) => {
39
- const repository = queryRunner.manager.getRepository(this.repo);
40
- await repository.insert(this.createEntity(boxesToInsert, block, extractor));
41
- };
42
- /**
43
- * update entities related to a box
44
- * @param queryRunner
45
- * @param updateBox
46
- * @param block
47
- * @param extractor
48
- */
49
- updateEntity = async (queryRunner, updateBox, // eslint-disable-line @typescript-eslint/no-unused-vars
50
- block, // eslint-disable-line @typescript-eslint/no-unused-vars
51
- extractor) => {
52
- const repository = queryRunner.manager.getRepository(this.repo);
53
- const box = this.createEntity([updateBox], block, extractor)[0];
54
- await repository.update({
55
- boxId: box.boxId,
56
- extractor: extractor,
57
- }, box);
58
- };
59
- /**
60
- * delete all data extracted from a block
61
- * @param queryRunner
62
- * @param extractor
63
- * @param block
64
- * @returns
65
- */
66
- deleteBlockEntities = async (queryRunner, extractor, block) => {
67
- const repository = queryRunner.manager.getRepository(this.repo);
68
- const deletedData = await repository.find({
69
- where: {
70
- extractor: extractor,
71
- block: block,
72
- },
73
- });
74
- await repository.delete({
75
- extractor: extractor,
76
- block: block,
77
- });
78
- return this.convertEntityToData(deletedData);
79
- };
80
- /**
81
- * delete all data extracted from a block
82
- * @param queryRunner
83
- * @param extractor
84
- * @param block
85
- * @returns
86
- */
87
- updateBlockEntities = async (queryRunner, // eslint-disable-line @typescript-eslint/no-unused-vars
88
- extractor, block) => {
89
- const repository = this.datasource.getRepository(this.repo);
90
- const updatedData = await repository.find({
91
- where: {
92
- extractor: extractor,
93
- spendBlock: block,
94
- block: Not(block),
95
- },
96
- });
97
- await repository.update({
98
- spendBlock: block,
99
- extractor: extractor,
100
- }, {
101
- spendBlock: null,
102
- spendHeight: 0,
103
- });
104
- return updatedData;
105
- };
106
- /**
107
- * insert all extracted box data in an atomic transaction
108
- * update the data if a box with the same id is already stored in db
109
- * @param boxes
110
- * @param block
111
- * @param extractor
112
- * @return inserted items and updated box ids
113
- * returns undefined in case of any problem
114
- */
115
- storeBoxes = async (boxes, block, extractor) => {
116
- let boxesToInsert = [], boxesToUpdate = [];
117
- const queryRunner = this.datasource.createQueryRunner();
118
- await queryRunner.connect();
119
- await queryRunner.startTransaction();
120
- try {
121
- const repository = queryRunner.manager.getRepository(this.repo);
122
- const dbBoxIds = (await repository.findBy({
123
- boxId: In(boxes.map((item) => item.boxId)),
124
- extractor: extractor,
125
- })).map((box) => box.boxId);
126
- if (dbBoxIds.length > 0)
127
- this.logger.debug(`Found stored boxes with same boxId`, dbBoxIds);
128
- boxesToUpdate = boxes.filter((box) => dbBoxIds.includes(box.boxId));
129
- boxesToInsert = difference(boxes, boxesToUpdate);
130
- if (boxesToInsert.length > 0) {
131
- this.logger.debug(`Inserting boxes`);
132
- await this.insertEntities(queryRunner, boxesToInsert, block, extractor);
133
- }
134
- if (boxesToUpdate.length > 0)
135
- this.logger.info(`Updating boxes with following Ids in the database: [${boxesToUpdate
136
- .map((col) => col.boxId)
137
- .join(', ')}]`);
138
- for (const box of boxesToUpdate) {
139
- this.logger.debug(`Updating boxes in database [${JsonBigInt.stringify(box)}]`);
140
- await this.updateEntity(queryRunner, box, block, extractor);
141
- }
142
- await queryRunner.commitTransaction();
143
- return true;
144
- }
145
- catch (e) {
146
- this.logger.error(`An error occurred during store boxes action: ${e}`);
147
- await queryRunner.rollbackTransaction();
148
- return false;
149
- }
150
- finally {
151
- await queryRunner.release();
152
- }
153
- };
154
- /**
155
- * update spending information of stored boxes
156
- * chunk spendInfos to prevent large database queries
157
- * Note: It only updates the spendHeight and spendBlock fields. If updating
158
- * anything else is required, override this implementation to include the
159
- * additional fields.
160
- * @param spendInfos
161
- * @param block
162
- * @param extractor
163
- * @returns spent box ids
164
- */
165
- spendBoxes = async (spendInfos, block, extractor) => {
166
- const spentData = [];
167
- const spendInfoChunks = chunk(spendInfos, DB_CHUNK_SIZE);
168
- for (const spendInfoChunk of spendInfoChunks) {
169
- const boxIds = spendInfoChunk.map((info) => info.boxId);
170
- const updateResult = await this.repository.update({
171
- boxId: In(boxIds),
172
- extractor: extractor,
173
- }, {
174
- spendBlock: block.hash,
175
- spendHeight: block.height,
176
- });
177
- if (updateResult.affected && updateResult.affected > 0) {
178
- const spentRows = await this.repository.findBy({
179
- boxId: In(boxIds),
180
- spendBlock: block.hash,
181
- });
182
- spentData.push(...spentRows);
183
- for (const row of spentRows) {
184
- this.logger.debug(`Spent box with boxId [${row.boxId}] at height ${block.height}`);
185
- }
186
- }
187
- }
188
- return spentData.map((data) => pick(data, 'boxId'));
189
- };
190
- /**
191
- * delete extracted data from a specific block
192
- * if a box is spend in this block mark it as unspent
193
- * if a box is created in this block remove it from database
194
- * @param block
195
- * @param extractor
196
- * @return deleted items and updated box ids
197
- */
198
- deleteBlockBoxes = async (block, extractor) => {
199
- const queryRunner = this.datasource.createQueryRunner();
200
- await queryRunner.connect();
201
- await queryRunner.startTransaction();
202
- try {
203
- this.logger.info(`Deleting boxes in block ${block} and extractor ${extractor}`);
204
- const updatedData = await this.updateBlockEntities(queryRunner, extractor, block);
205
- const deletedData = await this.deleteBlockEntities(queryRunner, extractor, block);
206
- await queryRunner.commitTransaction();
207
- return {
208
- deletedData,
209
- updatedData: updatedData.map((data) => pick(data, 'boxId')),
210
- };
211
- }
212
- catch (error) {
213
- await queryRunner.rollbackTransaction();
214
- this.logger.error(`An error occurred while deleting data extracted from block ${block}`, error);
215
- throw error;
216
- }
217
- finally {
218
- await queryRunner.release();
219
- }
220
- };
221
- }
222
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RFcmdvRXh0cmFjdG9yQWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2VyZ28vQWJzdHJhY3RFcmdvRXh0cmFjdG9yQWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxFQUFFLEVBRUYsR0FBRyxHQUlKLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEMsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BELE9BQU8sRUFBa0IsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDNUUsT0FBTyxVQUFVLE1BQU0sMkJBQTJCLENBQUM7QUFJbkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUc3QyxNQUFNLE9BQWdCLDJCQUEyQjtJQUk5QixVQUFVLENBQWE7SUFDL0IsTUFBTSxDQUFpQjtJQUNiLFVBQVUsQ0FBOEI7SUFDbkQsSUFBSSxDQUFnQztJQUU1QyxZQUNFLFVBQXNCLEVBQ3RCLElBQW1DLEVBQ25DLE1BQXVCO1FBRXZCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksV0FBVyxFQUFFLENBQUM7UUFDbEQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNuQixDQUFDO0lBRUQ7O09BRUc7SUFDTyxZQUFZLEdBQUcsQ0FDdkIsSUFBcUIsRUFBRSx3REFBd0Q7SUFDL0UsS0FBZ0IsRUFBRSx3REFBd0Q7SUFDMUUsU0FBaUIsRUFDbUIsRUFBRTtRQUN0QyxNQUFNLEtBQUssQ0FDVCxxRkFBcUYsQ0FDdEYsQ0FBQztJQUNKLENB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QU8sRUFBRSxDQUFDO1FBQzlCLENBQUM7SUFDSCxDQUFDLENBQUM7Q0FDSCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERhdGFTb3VyY2UsXG4gIEluLFxuICBSZXBvc2l0b3J5LFxuICBOb3QsXG4gIEVudGl0eVRhcmdldCxcbiAgRmluZE9wdGlvbnNXaGVyZSxcbiAgUXVlcnlSdW5uZXIsXG59IGZyb20gJ0Byb3Nlbi1icmlkZ2UvZXh0ZW5kZWQtdHlwZW9ybSc7XG5pbXBvcnQgeyBjaHVuaywgZGlmZmVyZW5jZSwgcGljayB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBBYnN0cmFjdExvZ2dlciwgRHVtbXlMb2dnZXIgfSBmcm9tICdAcm9zZW4tYnJpZGdlL2Fic3RyYWN0LWxvZ2dlcic7XG5pbXBvcnQgSnNvbkJpZ0ludCBmcm9tICdAcm9zZW4tYnJpZGdlL2pzb24tYmlnaW50JztcbmltcG9ydCB7IEJsb2NrSW5mbyB9IGZyb20gJ0Byb3Nlbi1icmlkZ2Uvc2Nhbm5lci1pbnRlcmZhY2VzJztcblxuaW1wb3J0IHsgQWJzdHJhY3RCb3hEYXRhLCBCb3hJbmZvLCBTcGVuZEluZm8gfSBmcm9tICcuL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgREJfQ0hVTktfU0laRSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBBYnN0cmFjdEVyZ29FeHRyYWN0b3JFbnRpdHkgfSBmcm9tICcuL0Fic3RyYWN0RXJnb0V4dHJhY3RvckVudGl0eSc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdEVyZ29FeHRyYWN0b3JBY3Rpb248XG4gIEV4dHJhY3RlZERhdGEgZXh0ZW5kcyBBYnN0cmFjdEJveERhdGEsXG4gIEV4dHJhY3RvckVudGl0eSBleHRlbmRzIEFic3RyYWN0RXJnb0V4dHJhY3RvckVudGl0eSxcbj4ge1xuICBwcml2YXRlIHJlYWRvbmx5IGRhdGFzb3VyY2U6IERhdGFTb3VyY2U7XG4gIHJlYWRvbmx5IGxvZ2dlcjogQWJzdHJhY3RMb2dnZXI7XG4gIHByb3RlY3RlZCByZWFkb25seSByZXBvc2l0b3J5OiBSZXBvc2l0b3J5PEV4dHJhY3RvckVudGl0eT47XG4gIHByaXZhdGUgcmVwbzogRW50aXR5VGFyZ2V0PEV4dHJhY3RvckVudGl0eT47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgZGF0YVNvdXJjZTogRGF0YVNvdXJjZSxcbiAgICByZXBvOiBFbnRpdHlUYXJnZXQ8RXh0cmFjdG9yRW50aXR5PixcbiAgICBsb2dnZXI/OiBBYnN0cmFjdExvZ2dlcixcbiAgKSB7XG4gICAgdGhpcy5kYXRhc291cmNlID0gZGF0YVNvdXJjZTtcbiAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlciA/IGxvZ2dlciA6IG5ldyBEdW1teUxvZ2dlcigpO1xuICAgIHRoaXMucmVwb3NpdG9yeSA9IHRoaXMuZGF0YXNvdXJjZS5nZXRSZXBvc2l0b3J5KHJlcG8pO1xuICAgIHRoaXMucmVwbyA9IHJlcG87XG4gIH1cblxuICAvKipcbiAgICogY3JlYXRlIHRoZSBkYXRhYmFzZSBlbnRpdHkgZnJvbSBleHRyYWN0ZWQgZGF0YSBhbmQgYmxvY2sgaW5mb3JtYXRpb25cbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVFbnRpdHkgPSAoXG4gICAgZGF0YTogRXh0cmFjdGVkRGF0YVtdLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIGJsb2NrOiBCbG9ja0luZm8sIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgZXh0cmFjdG9yOiBzdHJpbmcsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICk6IEFycmF5PE9taXQ8RXh0cmFjdG9yRW50aXR5LCAnaWQnPj4gPT4ge1xuICAgIHRocm93IEVycm9yKFxuICAgICAgJ1lvdSBtdXN0IGltcGxlbWVudCBgY3JlYXRlRW50aXR5YCBvciBvdmVycmlkZSBgaW5zZXJ0RW50aXRpZXNgIGFuZCBgdXBkYXRlRW50aXRpZXNgJyxcbiAgICApO1xuICB9O1xuXG4gIC8qKlxuICAgKiBjb252ZXJ0IHRoZSBkYXRhYmFzZSBlbnRpdHkgYmFjayB0byByYXcgZGF0YVxuICAgKi9cbiAgcHJvdGVjdGVkIGNvbnZlcnRFbnRpdHlUb0RhdGEgPSAoXG4gICAgZW50aXRpZXM6IEV4dHJhY3RvckVudGl0eVtdLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICApOiBFeHRyYWN0ZWREYXRhW10gPT4ge1xuICAgIHRocm93IEVycm9yKFxuICAgICAgJ1lvdSBtdXN0IGltcGxlbWVudCBgY29udmVydEVudGl0eVRvRGF0YWAgb3Igb3ZlcnJpZGUgYGRlbGV0ZUJsb2NrRW50aXRpZXNgJyxcbiAgICApO1xuICB9O1xuXG4gIC8qKlxuICAgKiBpbnNlcnQgZW50aXRpZXMgZXh0cmFjdGVkIGZyb20gYSBibG9jayB0byBkYXRhYmFzZVxuICAgKiBAcGFyYW0gcXVlcnlSdW5uZXJcbiAgICogQHBhcmFtIGJveGVzVG9JbnNlcnRcbiAgICogQHBhcmFtIGJsb2NrXG4gICAqIEBwYXJhbSBleHRyYWN0b3JcbiAgICovXG4gIHByb3RlY3RlZCBpbnNlcnRFbnRpdGllcyA9IGFzeW5jIChcbiAgICBxdWVyeVJ1bm5lcjogUXVlcnlSdW5uZXIsXG4gICAgYm94ZXNUb0luc2VydDogQXJyYXk8RXh0cmFjdGVkRGF0YT4sXG4gICAgYmxvY2s6IEJsb2NrSW5mbyxcbiAgICBleHRyYWN0b3I6IHN0cmluZyxcbiAgKSA9PiB7XG4gICAgY29uc3QgcmVwb3NpdG9yeSA9IHF1ZXJ5UnVubmVyLm1hbmFnZXIuZ2V0UmVwb3NpdG9yeSh0aGlzLnJlcG8pO1xuICAgIGF3YWl0IHJlcG9zaXRvcnkuaW5zZXJ0KFxuICAgICAgdGhpcy5jcmVhdGVFbnRpdHkoYm94ZXNUb0luc2VydCwgYmxvY2ssIGV4dHJhY3RvcikgYXMgYW55LCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICApO1xuICB9O1xuXG4gIC8qKlxuICAgKiB1cGRhdGUgZW50aXRpZXMgcmVsYXRlZCB0byBhIGJveFxuICAgKiBAcGFyYW0gcXVlcnlSdW5uZXJcbiAgICogQHBhcmFtIHVwZGF0ZUJveFxuICAgKiBAcGFyYW0gYmxvY2tcbiAgICogQHBhcmFtIGV4dHJhY3RvclxuICAgKi9cbiAgcHJvdGVjdGVkIHVwZGF0ZUVudGl0eSA9IGFzeW5jIChcbiAgICBxdWVyeVJ1bm5lcjogUXVlcnlSdW5uZXIsXG4gICAgdXBkYXRlQm94OiBFeHRyYWN0ZWREYXRhLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIGJsb2NrOiBCbG9ja0luZm8sIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgZXh0cmFjdG9yOiBzdHJpbmcsXG4gICkgPT4ge1xuICAgIGNvbnN0IHJlcG9zaXRvcnkgPSBxdWVyeVJ1bm5lci5tYW5hZ2VyLmdldFJlcG9zaXRvcnkodGhpcy5yZXBvKTtcbiAgICBjb25zdCBib3ggPSB0aGlzLmNyZWF0ZUVudGl0eShbdXBkYXRlQm94XSwgYmxvY2ssIGV4dHJhY3RvcilbMF07XG4gICAgYXdhaXQgcmVwb3NpdG9yeS51cGRhdGUoXG4gICAgICB7XG4gICAgICAgIGJveElkOiBib3guYm94SWQsXG4gICAgICAgIGV4dHJhY3RvcjogZXh0cmFjdG9yLFxuICAgICAgfSBhcyBGaW5kT3B0aW9uc1doZXJlPEV4dHJhY3RvckVudGl0eT4sXG4gICAgICBib3ggYXMgYW55LCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICApO1xuICB9O1xuXG4gIC8qKlxuICAgKiBkZWxldGUgYWxsIGRhdGEgZXh0cmFjdGVkIGZyb20gYSBibG9ja1xuICAgKiBAcGFyYW0gcXVlcnlSdW5uZXJcbiAgICogQHBhcmFtIGV4dHJhY3RvclxuICAgKiBAcGFyYW0gYmxvY2tcbiAgICogQHJldHVybnNcbiAgICovXG4gIHByb3RlY3RlZCBkZWxldGVCbG9ja0VudGl0aWVzID0gYXN5bmMgKFxuICAgIHF1ZXJ5UnVubmVyOiBRdWVyeVJ1bm5lcixcbiAgICBleHRyYWN0b3I6IHN0cmluZyxcbiAgICBibG9jazogc3RyaW5nLFxuICApOiBQcm9taXNlPEV4dHJhY3RlZERhdGFbXT4gPT4ge1xuICAgIGNvbnN0IHJlcG9zaXRvcnkgPSBxdWVyeVJ1bm5lci5tYW5hZ2VyLmdldFJlcG9zaXRvcnkodGhpcy5yZXBvKTtcbiAgICBjb25zdCBkZWxldGVkRGF0YSA9IGF3YWl0IHJlcG9zaXRvcnkuZmluZCh7XG4gICAgICB3aGVyZToge1xuICAgICAgICBleHRyYWN0b3I6IGV4dHJhY3RvcixcbiAgICAgICAgYmxvY2s6IGJsb2NrLFxuICAgICAgfSBhcyBGaW5kT3B0aW9uc1doZXJlPEV4dHJhY3RvckVudGl0eT4sXG4gICAgfSk7XG4gICAgYXdhaXQgcmVwb3NpdG9yeS5kZWxldGUoe1xuICAgICAgZXh0cmFjdG9yOiBleHRyYWN0b3IsXG4gICAgICBibG9jazogYmxvY2ssXG4gICAgfSBhcyB1bmtub3duIGFzIEZpbmRPcHRpb25zV2hlcmU8RXh0cmFjdG9yRW50aXR5Pik7XG4gICAgcmV0dXJuIHRoaXMuY29udmVydEVudGl0eVRvRGF0YShkZWxldGVkRGF0YSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIGRlbGV0ZSBhbGwgZGF0YSBleHRyYWN0ZWQgZnJvbSBhIGJsb2NrXG4gICAqIEBwYXJhbSBxdWVyeVJ1bm5lclxuICAgKiBAcGFyYW0gZXh0cmFjdG9yXG4gICAqIEBwYXJhbSBibG9ja1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHJvdGVjdGVkIHVwZGF0ZUJsb2NrRW50aXRpZXMgPSBhc3luYyAoXG4gICAgcXVlcnlSdW5uZXI6IFF1ZXJ5UnVubmVyLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIGV4dHJhY3Rvcjogc3RyaW5nLFxuICAgIGJsb2NrOiBzdHJpbmcsXG4gICk6IFByb21pc2U8RXh0cmFjdG9yRW50aXR5W10+ID0+IHtcbiAgICBjb25zdCByZXBvc2l0b3J5ID0gdGhpcy5kYXRhc291cmNlLmdldFJlcG9zaXRvcnkoXG4gICAgICB0aGlzLnJlcG8gYXMgRW50aXR5VGFyZ2V0PG5ldyAoKSA9PiBFeHRyYWN0b3JFbnRpdHk+LFxuICAgICk7XG4gICAgY29uc3QgdXBkYXRlZERhdGEgPSBhd2FpdCByZXBvc2l0b3J5LmZpbmQoe1xuICAgICAgd2hlcmU6IHtcbiAgICAgICAgZXh0cmFjdG9yOiBleHRyYWN0b3IsXG4gICAgICAgIHNwZW5kQmxvY2s6IGJsb2NrLFxuICAgICAgICBibG9jazogTm90KGJsb2NrKSxcbiAgICAgIH0gYXMgdW5rbm93biBhcyBGaW5kT3B0aW9uc1doZXJlPEV4dHJhY3RvckVudGl0eT4sXG4gICAgfSk7XG4gICAgYXdhaXQgcmVwb3NpdG9yeS51cGRhdGUoXG4gICAgICB7XG4gICAgICAgIHNwZW5kQmxvY2s6IGJsb2NrLFxuICAgICAgICBleHRyYWN0b3I6IGV4dHJhY3RvcixcbiAgICAgIH0gYXMgdW5rbm93biBhcyBGaW5kT3B0aW9uc1doZXJlPEV4dHJhY3RvckVudGl0eT4sXG4gICAgICB7XG4gICAgICAgIHNwZW5kQmxvY2s6IG51bGwsXG4gICAgICAgIHNwZW5kSGVpZ2h0OiAwLFxuICAgICAgfSxcbiAgICApO1xuICAgIHJldHVybiB1cGRhdGVkRGF0YSBhcyB1bmtub3duIGFzIEV4dHJhY3RvckVudGl0eVtdO1xuICB9O1xuXG4gIC8qKlxuICAgKiBpbnNlcnQgYWxsIGV4dHJhY3RlZCBib3ggZGF0YSBpbiBhbiBhdG9taWMgdHJhbnNhY3Rpb25cbiAgICogdXBkYXRlIHRoZSBkYXRhIGlmIGEgYm94IHdpdGggdGhlIHNhbWUgaWQgaXMgYWxyZWFkeSBzdG9yZWQgaW4gZGJcbiAgICogQHBhcmFtIGJveGVzXG4gICAqIEBwYXJhbSBibG9ja1xuICAgKiBAcGFyYW0gZXh0cmFjdG9yXG4gICAqIEByZXR1cm4gaW5zZXJ0ZWQgaXRlbXMgYW5kIHVwZGF0ZWQgYm94IGlkc1xuICAgKiByZXR1cm5zIHVuZGVmaW5lZCBpbiBjYXNlIG9mIGFueSBwcm9ibGVtXG4gICAqL1xuICBzdG9yZUJveGVzID0gYXN5bmMgKFxuICAgIGJveGVzOiBBcnJheTxFeHRyYWN0ZWREYXRhPixcbiAgICBibG9jazogQmxvY2tJbmZvLFxuICAgIGV4dHJhY3Rvcjogc3RyaW5nLFxuICApOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgICBsZXQgYm94ZXNUb0luc2VydDogRXh0cmFjdGVkRGF0YVtdID0gW10sXG4gICAgICBib3hlc1RvVXBkYXRlOiBFeHRyYWN0ZWREYXRhW10gPSBbXTtcbiAgICBjb25zdCBxdWVyeVJ1bm5lciA9IHRoaXMuZGF0YXNvdXJjZS5jcmVhdGVRdWVyeVJ1bm5lcigpO1xuICAgIGF3YWl0IHF1ZXJ5UnVubmVyLmNvbm5lY3QoKTtcbiAgICBhd2FpdCBxdWVyeVJ1bm5lci5zdGFydFRyYW5zYWN0aW9uKCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcG9zaXRvcnkgPSBxdWVyeVJ1bm5lci5tYW5hZ2VyLmdldFJlcG9zaXRvcnkodGhpcy5yZXBvKTtcbiAgICAgIGNvbnN0IGRiQm94SWRzID0gKFxuICAgICAgICBhd2FpdCByZXBvc2l0b3J5LmZpbmRCeSh7XG4gICAgICAgICAgYm94SWQ6IEluKGJveGVzLm1hcCgoaXRlbSkgPT4gaXRlbS5ib3hJZCkpLFxuICAgICAgICAgIGV4dHJhY3RvcjogZXh0cmFjdG9yLFxuICAgICAgICB9IGFzIEZpbmRPcHRpb25zV2hlcmU8RXh0cmFjdG9yRW50aXR5PilcbiAgICAgICkubWFwKChib3gpID0+IGJveC5ib3hJZCk7XG4gICAgICBpZiAoZGJCb3hJZHMubGVuZ3RoID4gMClcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYEZvdW5kIHN0b3JlZCBib3hlcyB3aXRoIHNhbWUgYm94SWRgLCBkYkJveElkcyk7XG5cbiAgICAgIGJveGVzVG9VcGRhdGUgPSBib3hlcy5maWx0ZXIoKGJveCkgPT4gZGJCb3hJZHMuaW5jbHVkZXMoYm94LmJveElkKSk7XG4gICAgICBib3hlc1RvSW5zZXJ0ID0gZGlmZmVyZW5jZShib3hlcywgYm94ZXNUb1VwZGF0ZSk7XG5cbiAgICAgIGlmIChib3hlc1RvSW5zZXJ0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYEluc2VydGluZyBib3hlc2ApO1xuICAgICAgICBhd2FpdCB0aGlzLmluc2VydEVudGl0aWVzKHF1ZXJ5UnVubmVyLCBib3hlc1RvSW5zZXJ0LCBibG9jaywgZXh0cmFjdG9yKTtcbiAgICAgIH1cbiAgICAgIGlmIChib3hlc1RvVXBkYXRlLmxlbmd0aCA+IDApXG4gICAgICAgIHRoaXMubG9nZ2VyLmluZm8oXG4gICAgICAgICAgYFVwZGF0aW5nIGJveGVzIHdpdGggZm9sbG93aW5nIElkcyBpbiB0aGUgZGF0YWJhc2U6IFske2JveGVzVG9VcGRhdGVcbiAgICAgICAgICAgIC5tYXAoKGNvbCkgPT4gY29sLmJveElkKVxuICAgICAgICAgICAgLmpvaW4oJywgJyl9XWAsXG4gICAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IGJveCBvZiBib3hlc1RvVXBkYXRlKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICAgIGBVcGRhdGluZyBib3hlcyBpbiBkYXRhYmFzZSBbJHtKc29uQmlnSW50LnN0cmluZ2lmeShib3gpfV1gLFxuICAgICAgICApO1xuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZUVudGl0eShxdWVyeVJ1bm5lciwgYm94LCBibG9jaywgZXh0cmFjdG9yKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHF1ZXJ5UnVubmVyLmNvbW1pdFRyYW5zYWN0aW9uKCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZ2dlci5lcnJvcihgQW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHN0b3JlIGJveGVzIGFjdGlvbjogJHtlfWApO1xuICAgICAgYXdhaXQgcXVlcnlSdW5uZXIucm9sbGJhY2tUcmFuc2FjdGlvbigpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBxdWVyeVJ1bm5lci5yZWxlYXNlKCk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiB1cGRhdGUgc3BlbmRpbmcgaW5mb3JtYXRpb24gb2Ygc3RvcmVkIGJveGVzXG4gICAqIGNodW5rIHNwZW5kSW5mb3MgdG8gcHJldmVudCBsYXJnZSBkYXRhYmFzZSBxdWVyaWVzXG4gICAqIE5vdGU6IEl0IG9ubHkgdXBkYXRlcyB0aGUgc3BlbmRIZWlnaHQgYW5kIHNwZW5kQmxvY2sgZmllbGRzLiBJZiB1cGRhdGluZ1xuICAgKiBhbnl0aGluZyBlbHNlIGlzIHJlcXVpcmVkLCBvdmVycmlkZSB0aGlzIGltcGxlbWVudGF0aW9uIHRvIGluY2x1ZGUgdGhlXG4gICAqIGFkZGl0aW9uYWwgZmllbGRzLlxuICAgKiBAcGFyYW0gc3BlbmRJbmZvc1xuICAgKiBAcGFyYW0gYmxvY2tcbiAgICogQHBhcmFtIGV4dHJhY3RvclxuICAgKiBAcmV0dXJucyBzcGVudCBib3ggaWRzXG4gICAqL1xuICBzcGVuZEJveGVzID0gYXN5bmMgKFxuICAgIHNwZW5kSW5mb3M6IEFycmF5PFNwZW5kSW5mbz4sXG4gICAgYmxvY2s6IEJsb2NrSW5mbyxcbiAgICBleHRyYWN0b3I6IHN0cmluZyxcbiAgKTogUHJvbWlzZTxCb3hJbmZvW10+ID0+IHtcbiAgICBjb25zdCBzcGVudERhdGEgPSBbXTtcbiAgICBjb25zdCBzcGVuZEluZm9DaHVua3MgPSBjaHVuayhzcGVuZEluZm9zLCBEQl9DSFVOS19TSVpFKTtcbiAgICBmb3IgKGNvbnN0IHNwZW5kSW5mb0NodW5rIG9mIHNwZW5kSW5mb0NodW5rcykge1xuICAgICAgY29uc3QgYm94SWRzID0gc3BlbmRJbmZvQ2h1bmsubWFwKChpbmZvKSA9PiBpbmZvLmJveElkKTtcbiAgICAgIGNvbnN0IHVwZGF0ZVJlc3VsdCA9IGF3YWl0IHRoaXMucmVwb3NpdG9yeS51cGRhdGUoXG4gICAgICAgIHtcbiAgICAgICAgICBib3hJZDogSW4oYm94SWRzKSxcbiAgICAgICAgICBleHRyYWN0b3I6IGV4dHJhY3RvcixcbiAgICAgICAgfSBhcyBGaW5kT3B0aW9uc1doZXJlPEV4dHJhY3RvckVudGl0eT4sXG4gICAgICAgIHtcbiAgICAgICAgICBzcGVuZEJsb2NrOiBibG9jay5oYXNoLFxuICAgICAgICAgIHNwZW5kSGVpZ2h0OiBibG9jay5oZWlnaHQsXG4gICAgICAgIH0gYXMgYW55LCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICk7XG5cbiAgICAgIGlmICh1cGRhdGVSZXN1bHQuYWZmZWN0ZWQgJiYgdXBkYXRlUmVzdWx0LmFmZmVjdGVkID4gMCkge1xuICAgICAgICBjb25zdCBzcGVudFJvd3MgPSBhd2FpdCB0aGlzLnJlcG9zaXRvcnkuZmluZEJ5KHtcbiAgICAgICAgICBib3hJZDogSW4oYm94SWRzKSxcbiAgICAgICAgICBzcGVuZEJsb2NrOiBibG9jay5oYXNoLFxuICAgICAgICB9IGFzIEZpbmRPcHRpb25zV2hlcmU8RXh0cmFjdG9yRW50aXR5Pik7XG4gICAgICAgIHNwZW50RGF0YS5wdXNoKC4uLnNwZW50Um93cyk7XG4gICAgICAgIGZvciAoY29uc3Qgcm93IG9mIHNwZW50Um93cykge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICAgYFNwZW50IGJveCB3aXRoIGJveElkIFske3Jvdy5ib3hJZH1dIGF0IGhlaWdodCAke2Jsb2NrLmhlaWdodH1gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHNwZW50RGF0YS5tYXAoKGRhdGEpID0+IHBpY2soZGF0YSwgJ2JveElkJykpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBkZWxldGUgZXh0cmFjdGVkIGRhdGEgZnJvbSBhIHNwZWNpZmljIGJsb2NrXG4gICAqIGlmIGEgYm94IGlzIHNwZW5kIGluIHRoaXMgYmxvY2sgbWFyayBpdCBhcyB1bnNwZW50XG4gICAqIGlmIGEgYm94IGlzIGNyZWF0ZWQgaW4gdGhpcyBibG9jayByZW1vdmUgaXQgZnJvbSBkYXRhYmFzZVxuICAgKiBAcGFyYW0gYmxvY2tcbiAgICogQHBhcmFtIGV4dHJhY3RvclxuICAgKiBAcmV0dXJuIGRlbGV0ZWQgaXRlbXMgYW5kIHVwZGF0ZWQgYm94IGlkc1xuICAgKi9cbiAgZGVsZXRlQmxvY2tCb3hlcyA9IGFzeW5jIChcbiAgICBibG9jazogc3RyaW5nLFxuICAgIGV4dHJhY3Rvcjogc3RyaW5nLFxuICApOiBQcm9taXNlPHsgZGVsZXRlZERhdGE6IEV4dHJhY3RlZERhdGFbXTsgdXBkYXRlZERhdGE6IEJveEluZm9bXSB9PiA9PiB7XG4gICAgY29uc3QgcXVlcnlSdW5uZXIgPSB0aGlzLmRhdGFzb3VyY2UuY3JlYXRlUXVlcnlSdW5uZXIoKTtcbiAgICBhd2FpdCBxdWVyeVJ1bm5lci5jb25uZWN0KCk7XG4gICAgYXdhaXQgcXVlcnlSdW5uZXIuc3RhcnRUcmFuc2FjdGlvbigpO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmxvZ2dlci5pbmZvKFxuICAgICAgICBgRGVsZXRpbmcgYm94ZXMgaW4gYmxvY2sgJHtibG9ja30gYW5kIGV4dHJhY3RvciAke2V4dHJhY3Rvcn1gLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHVwZGF0ZWREYXRhID0gYXdhaXQgdGhpcy51cGRhdGVCbG9ja0VudGl0aWVzKFxuICAgICAgICBxdWVyeVJ1bm5lcixcbiAgICAgICAgZXh0cmFjdG9yLFxuICAgICAgICBibG9jayxcbiAgICAgICk7XG4gICAgICBjb25zdCBkZWxldGVkRGF0YSA9IGF3YWl0IHRoaXMuZGVsZXRlQmxvY2tFbnRpdGllcyhcbiAgICAgICAgcXVlcnlSdW5uZXIsXG4gICAgICAgIGV4dHJhY3RvcixcbiAgICAgICAgYmxvY2ssXG4gICAgICApO1xuICAgICAgYXdhaXQgcXVlcnlSdW5uZXIuY29tbWl0VHJhbnNhY3Rpb24oKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRlbGV0ZWREYXRhLFxuICAgICAgICB1cGRhdGVkRGF0YTogdXBkYXRlZERhdGEubWFwKChkYXRhKSA9PiBwaWNrKGRhdGEsICdib3hJZCcpKSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGF3YWl0IHF1ZXJ5UnVubmVyLnJvbGxiYWNrVHJhbnNhY3Rpb24oKTtcbiAgICAgIHRoaXMubG9nZ2VyLmVycm9yKFxuICAgICAgICBgQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgZGVsZXRpbmcgZGF0YSBleHRyYWN0ZWQgZnJvbSBibG9jayAke2Jsb2NrfWAsXG4gICAgICAgIGVycm9yLFxuICAgICAgKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBxdWVyeVJ1bm5lci5yZWxlYXNlKCk7XG4gICAgfVxuICB9O1xufVxuIl19
@@ -1,11 +0,0 @@
1
- export declare abstract class AbstractErgoExtractorEntity {
2
- id: number;
3
- boxId: string;
4
- block: string;
5
- height: number;
6
- spendBlock?: string | null;
7
- spendHeight?: number | null;
8
- extractor: string;
9
- serialized: string;
10
- }
11
- //# sourceMappingURL=AbstractErgoExtractorEntity.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AbstractErgoExtractorEntity.d.ts","sourceRoot":"","sources":["../../../lib/ergo/AbstractErgoExtractorEntity.ts"],"names":[],"mappings":"AAMA,8BACsB,2BAA2B;IAE/C,EAAE,EAAE,MAAM,CAAC;IAGX,KAAK,EAAE,MAAM,CAAC;IAGd,KAAK,EAAE,MAAM,CAAC;IAGd,MAAM,EAAE,MAAM,CAAC;IAGf,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAG3B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAG5B,SAAS,EAAE,MAAM,CAAC;IAGlB,UAAU,EAAE,MAAM,CAAC;CACpB"}
@@ -1,57 +0,0 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- var __metadata = (this && this.__metadata) || function (k, v) {
8
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
- };
10
- import { Column, PrimaryGeneratedColumn, Unique, } from '@rosen-bridge/extended-typeorm';
11
- let AbstractErgoExtractorEntity = class AbstractErgoExtractorEntity {
12
- id;
13
- boxId;
14
- block;
15
- height;
16
- spendBlock;
17
- spendHeight;
18
- extractor;
19
- serialized;
20
- };
21
- __decorate([
22
- PrimaryGeneratedColumn(),
23
- __metadata("design:type", Number)
24
- ], AbstractErgoExtractorEntity.prototype, "id", void 0);
25
- __decorate([
26
- Column({ type: 'varchar' }),
27
- __metadata("design:type", String)
28
- ], AbstractErgoExtractorEntity.prototype, "boxId", void 0);
29
- __decorate([
30
- Column({ type: 'varchar' }),
31
- __metadata("design:type", String)
32
- ], AbstractErgoExtractorEntity.prototype, "block", void 0);
33
- __decorate([
34
- Column({ type: 'int' }),
35
- __metadata("design:type", Number)
36
- ], AbstractErgoExtractorEntity.prototype, "height", void 0);
37
- __decorate([
38
- Column({ nullable: true, type: 'varchar' }),
39
- __metadata("design:type", Object)
40
- ], AbstractErgoExtractorEntity.prototype, "spendBlock", void 0);
41
- __decorate([
42
- Column({ nullable: true, type: 'int' }),
43
- __metadata("design:type", Object)
44
- ], AbstractErgoExtractorEntity.prototype, "spendHeight", void 0);
45
- __decorate([
46
- Column({ type: 'varchar' }),
47
- __metadata("design:type", String)
48
- ], AbstractErgoExtractorEntity.prototype, "extractor", void 0);
49
- __decorate([
50
- Column({ type: 'varchar' }),
51
- __metadata("design:type", String)
52
- ], AbstractErgoExtractorEntity.prototype, "serialized", void 0);
53
- AbstractErgoExtractorEntity = __decorate([
54
- Unique(['boxId', 'extractor'])
55
- ], AbstractErgoExtractorEntity);
56
- export { AbstractErgoExtractorEntity };
57
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RFcmdvRXh0cmFjdG9yRW50aXR5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2VyZ28vQWJzdHJhY3RFcmdvRXh0cmFjdG9yRW50aXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFDTCxNQUFNLEVBQ04sc0JBQXNCLEVBQ3RCLE1BQU0sR0FDUCxNQUFNLGdDQUFnQyxDQUFDO0FBR2pDLElBQWUsMkJBQTJCLEdBQTFDLE1BQWUsMkJBQTJCO0lBRS9DLEVBQUUsQ0FBUztJQUdYLEtBQUssQ0FBUztJQUdkLEtBQUssQ0FBUztJQUdkLE1BQU0sQ0FBUztJQUdmLFVBQVUsQ0FBaUI7SUFHM0IsV0FBVyxDQUFpQjtJQUc1QixTQUFTLENBQVM7SUFHbEIsVUFBVSxDQUFTO0NBQ3BCLENBQUE7QUF0QkM7SUFEQyxzQkFBc0IsRUFBRTs7dURBQ2Q7QUFHWDtJQURDLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQzs7MERBQ2Q7QUFHZDtJQURDLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQzs7MERBQ2Q7QUFHZDtJQURDLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQzs7MkRBQ1Q7QUFHZjtJQURDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDOzsrREFDakI7QUFHM0I7SUFEQyxNQUFNLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQzs7Z0VBQ1o7QUFHNUI7SUFEQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUM7OzhEQUNWO0FBR2xCO0lBREMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDOzsrREFDVDtBQXZCQywyQkFBMkI7SUFEaEQsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0dBQ1QsMkJBQTJCLENBd0JoRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbHVtbixcbiAgUHJpbWFyeUdlbmVyYXRlZENvbHVtbixcbiAgVW5pcXVlLFxufSBmcm9tICdAcm9zZW4tYnJpZGdlL2V4dGVuZGVkLXR5cGVvcm0nO1xuXG5AVW5pcXVlKFsnYm94SWQnLCAnZXh0cmFjdG9yJ10pXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RFcmdvRXh0cmFjdG9yRW50aXR5IHtcbiAgQFByaW1hcnlHZW5lcmF0ZWRDb2x1bW4oKVxuICBpZDogbnVtYmVyO1xuXG4gIEBDb2x1bW4oeyB0eXBlOiAndmFyY2hhcicgfSlcbiAgYm94SWQ6IHN0cmluZztcblxuICBAQ29sdW1uKHsgdHlwZTogJ3ZhcmNoYXInIH0pXG4gIGJsb2NrOiBzdHJpbmc7XG5cbiAgQENvbHVtbih7IHR5cGU6ICdpbnQnIH0pXG4gIGhlaWdodDogbnVtYmVyO1xuXG4gIEBDb2x1bW4oeyBudWxsYWJsZTogdHJ1ZSwgdHlwZTogJ3ZhcmNoYXInIH0pXG4gIHNwZW5kQmxvY2s/OiBzdHJpbmcgfCBudWxsO1xuXG4gIEBDb2x1bW4oeyBudWxsYWJsZTogdHJ1ZSwgdHlwZTogJ2ludCcgfSlcbiAgc3BlbmRIZWlnaHQ/OiBudW1iZXIgfCBudWxsO1xuXG4gIEBDb2x1bW4oeyB0eXBlOiAndmFyY2hhcicgfSlcbiAgZXh0cmFjdG9yOiBzdHJpbmc7XG5cbiAgQENvbHVtbih7IHR5cGU6ICd2YXJjaGFyJyB9KVxuICBzZXJpYWxpemVkOiBzdHJpbmc7XG59XG4iXX0=
@@ -1,10 +0,0 @@
1
- export * from './AbstractErgoExtractor';
2
- export * from './AbstractErgoExtractorAction';
3
- export * from './interfaces';
4
- export * from './network/ExplorerNetwork';
5
- export * from './network/NodeNetwork';
6
- export * from './network/AbstractNetwork';
7
- export * from './initializable';
8
- export * from './utils';
9
- export * from './AbstractErgoExtractorEntity';
10
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/ergo/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,cAAc,CAAC;AAC7B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iBAAiB,CAAC;AAChC,cAAc,SAAS,CAAC;AACxB,cAAc,+BAA+B,CAAC"}
@@ -1,10 +0,0 @@
1
- export * from './AbstractErgoExtractor';
2
- export * from './AbstractErgoExtractorAction';
3
- export * from './interfaces';
4
- export * from './network/ExplorerNetwork';
5
- export * from './network/NodeNetwork';
6
- export * from './network/AbstractNetwork';
7
- export * from './initializable';
8
- export * from './utils';
9
- export * from './AbstractErgoExtractorEntity';
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvZXJnby9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLCtCQUErQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9BYnN0cmFjdEVyZ29FeHRyYWN0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9BYnN0cmFjdEVyZ29FeHRyYWN0b3JBY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9pbnRlcmZhY2VzJztcbmV4cG9ydCAqIGZyb20gJy4vbmV0d29yay9FeHBsb3Jlck5ldHdvcmsnO1xuZXhwb3J0ICogZnJvbSAnLi9uZXR3b3JrL05vZGVOZXR3b3JrJztcbmV4cG9ydCAqIGZyb20gJy4vbmV0d29yay9BYnN0cmFjdE5ldHdvcmsnO1xuZXhwb3J0ICogZnJvbSAnLi9pbml0aWFsaXphYmxlJztcbmV4cG9ydCAqIGZyb20gJy4vdXRpbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9BYnN0cmFjdEVyZ29FeHRyYWN0b3JFbnRpdHknO1xuIl19
@@ -1,48 +0,0 @@
1
- import { AbstractLogger } from '@rosen-bridge/abstract-logger';
2
- import { BlockInfo, ErgoNetworkType } from '@rosen-bridge/scanner-interfaces';
3
- import { AbstractBoxData } from '../interfaces';
4
- import { AbstractErgoExtractor } from '../AbstractErgoExtractor';
5
- import { AbstractInitializableErgoExtractorAction } from './AbstractInitializableAction';
6
- import { AbstractErgoExtractorEntity } from '../AbstractErgoExtractorEntity';
7
- export declare abstract class AbstractInitializableErgoExtractor<ExtractedData extends AbstractBoxData, ExtractorEntity extends AbstractErgoExtractorEntity> extends AbstractErgoExtractor<ExtractedData, ExtractorEntity> {
8
- protected initialize: boolean;
9
- private address;
10
- protected abstract actions: AbstractInitializableErgoExtractorAction<ExtractedData, ExtractorEntity>;
11
- private network;
12
- constructor(type: ErgoNetworkType, url: string, address: string, logger?: AbstractLogger, initialize?: boolean);
13
- /**
14
- * Initialize extractor using Explorer network
15
- * @param initialBlock
16
- */
17
- private initializeWithExplorer;
18
- /**
19
- * Get the total tx count from Node network
20
- * @returns total tx count of the address
21
- */
22
- private getTotalTxCount;
23
- /**
24
- * Initialize extractor using Node network
25
- * @param initialBlock
26
- */
27
- private initializeWithNode;
28
- /**
29
- * Process a batch of transactions
30
- * group txs into blocks and process them using `processTransactions`
31
- * @param txs
32
- */
33
- private processTransactionBatch;
34
- /**
35
- * Initialize the extractor with retrial on any unexpected problem
36
- * its the common part of initialize with Node and Explorer network
37
- * @param job
38
- */
39
- private initWithRetrial;
40
- /**
41
- * initialize extractor database with data created below the initial height
42
- * ignore initialization if this feature is off
43
- * try to get data multiple times to pass accidental network problems
44
- * @param initialBlock
45
- */
46
- initializeBoxes: (initialBlock: BlockInfo) => Promise<void>;
47
- }
48
- //# sourceMappingURL=AbstractInitializable.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AbstractInitializable.d.ts","sourceRoot":"","sources":["../../../../lib/ergo/initializable/AbstractInitializable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAE9E,OAAO,EAAE,eAAe,EAAuB,MAAM,eAAe,CAAC;AAErE,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,wCAAwC,EAAE,MAAM,+BAA+B,CAAC;AAGzF,OAAO,EAAE,2BAA2B,EAAE,MAAM,gCAAgC,CAAC;AAE7E,8BAAsB,kCAAkC,CACtD,aAAa,SAAS,eAAe,EACrC,eAAe,SAAS,2BAA2B,CACnD,SAAQ,qBAAqB,CAAC,aAAa,EAAE,eAAe,CAAC;IAC7D,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC;IAC9B,OAAO,CAAC,OAAO,CAAS;IACxB,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,wCAAwC,CAClE,aAAa,EACb,eAAe,CAChB,CAAC;IAEF,OAAO,CAAC,OAAO,CAAgC;gBAG7C,IAAI,EAAE,eAAe,EACrB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,cAAc,EACvB,UAAU,UAAO;IAkBnB;;;OAGG;IACH,OAAO,CAAC,sBAAsB,CA6C5B;IAEF;;;OAGG;IACH,OAAO,CAAC,eAAe,CAKrB;IAEF;;;OAGG;IACH,OAAO,CAAC,kBAAkB,CAuCxB;IAEF;;;;OAIG;IACH,OAAO,CAAC,uBAAuB,CAoB7B;IAEF;;;;OAIG;IACH,OAAO,CAAC,eAAe,CA+BrB;IAEF;;;;;OAKG;IACH,eAAe,EAAE,CAAC,YAAY,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7D"}
@@ -1,163 +0,0 @@
1
- import { groupBy, sortBy } from 'lodash-es';
2
- import { ErgoNetworkType } from '@rosen-bridge/scanner-interfaces';
3
- import { API_LIMIT, RETRIAL_COUNT } from '../../constants';
4
- import { AbstractErgoExtractor } from '../AbstractErgoExtractor';
5
- import { ExplorerNetwork } from '../network/ExplorerNetwork';
6
- import { NodeNetwork } from '../network/NodeNetwork';
7
- export class AbstractInitializableErgoExtractor extends AbstractErgoExtractor {
8
- initialize;
9
- address;
10
- network;
11
- constructor(type, url, address, logger, initialize = true) {
12
- super(logger);
13
- this.address = address;
14
- this.initialize = initialize;
15
- if (type == ErgoNetworkType.Explorer) {
16
- this.network = new ExplorerNetwork(url);
17
- this.initializeBoxes = (initialBlock) => {
18
- return this.initializeWithExplorer(initialBlock);
19
- };
20
- }
21
- else if (type == ErgoNetworkType.Node) {
22
- this.network = new NodeNetwork(url);
23
- this.initializeBoxes = (initialBlock) => {
24
- return this.initializeWithNode(initialBlock);
25
- };
26
- }
27
- else
28
- throw new Error(`Network type ${type} is not supported`);
29
- }
30
- /**
31
- * Initialize extractor using Explorer network
32
- * @param initialBlock
33
- */
34
- initializeWithExplorer = async (initialBlock) => {
35
- const explorerNetwork = this.network;
36
- let fromHeight = 0, toHeight = initialBlock.height;
37
- await this.initWithRetrial(async () => {
38
- while (fromHeight < toHeight) {
39
- let txs;
40
- // eslint-disable-next-line no-constant-condition
41
- while (true) {
42
- txs = await explorerNetwork.getAddressTransactionsWithHeight(this.address, fromHeight, toHeight);
43
- this.logger.debug(`Found ${txs.length} transactions for the address from height ${fromHeight} to height ${toHeight}`);
44
- if (txs.length < API_LIMIT || fromHeight === toHeight) {
45
- break; // Exit loop if we have fewer transactions than the limit or if the range is reduced to a single height
46
- }
47
- toHeight = Math.floor((toHeight - fromHeight) / 2) + fromHeight;
48
- this.logger.debug(`Limiting the query height range to [${fromHeight}, ${toHeight}]`);
49
- }
50
- if (txs.length < API_LIMIT) {
51
- if (txs.length > 0)
52
- await this.processTransactionBatch(txs);
53
- }
54
- else {
55
- this.logger.debug(`Block at height ${fromHeight} has more than (or equal) ${API_LIMIT} relevant txs, processing all txs in the block`);
56
- const blockId = await explorerNetwork.getBlockIdAtHeight(fromHeight);
57
- const blockTxs = await explorerNetwork.getBlockTxs(blockId);
58
- this.logger.debug(`Found ${blockTxs.length} transactions at height ${fromHeight}`);
59
- await this.processTransactions(blockTxs, {
60
- hash: blockId,
61
- height: fromHeight,
62
- });
63
- }
64
- fromHeight = toHeight + 1;
65
- toHeight = initialBlock.height;
66
- }
67
- });
68
- };
69
- /**
70
- * Get the total tx count from Node network
71
- * @returns total tx count of the address
72
- */
73
- getTotalTxCount = async () => {
74
- const response = await this.network.getAddressTransactionsWithOffsetLimit(this.address, 0, 0);
75
- return response.total;
76
- };
77
- /**
78
- * Initialize extractor using Node network
79
- * @param initialBlock
80
- */
81
- initializeWithNode = async (initialBlock) => {
82
- const txCountBeforeInit = await this.getTotalTxCount();
83
- let offset = 0, total = 1, round = 1;
84
- await this.initWithRetrial(async () => {
85
- // Repeat the whole process twice to cover all spent boxes
86
- // After round 1 all boxes have been saved and processed once
87
- // After round 2 spending information of all stored boxes are updated successfully
88
- while (round <= 2) {
89
- this.logger.debug(`Starting round ${round} of initialization`);
90
- while (offset < total) {
91
- const response = await this.network.getAddressTransactionsWithOffsetLimit(this.address, offset, API_LIMIT);
92
- total = response.total;
93
- const txs = response.items.filter((tx) => tx.inclusionHeight <= initialBlock.height);
94
- this.logger.debug(`Found ${txs.length} transactions below the initial height with offset ${offset} and total number of transactions ${total}`);
95
- if (txs.length > 0)
96
- await this.processTransactionBatch(txs);
97
- offset += API_LIMIT;
98
- }
99
- round++;
100
- offset = 0; // next round initial offset
101
- }
102
- });
103
- const txCountAfterInit = await this.getTotalTxCount();
104
- if (txCountAfterInit != txCountBeforeInit) {
105
- throw Error('Total transaction count changed during initialization phase, the stored data is not valid');
106
- }
107
- };
108
- /**
109
- * Process a batch of transactions
110
- * group txs into blocks and process them using `processTransactions`
111
- * @param txs
112
- */
113
- processTransactionBatch = async (txs) => {
114
- txs = sortBy(txs, (tx) => tx.inclusionHeight);
115
- const groupedTxs = groupBy(txs, (tx) => tx.blockId);
116
- this.logger.debug(`The transaction batch grouped to ${Object.keys(groupedTxs).length} blocks`);
117
- for (const blockId in groupedTxs) {
118
- const blockTxs = groupedTxs[blockId];
119
- const block = { hash: blockId, height: blockTxs[0].inclusionHeight };
120
- this.logger.debug(`Processing transactions at height ${blockTxs[0].inclusionHeight}`);
121
- const success = await this.processTransactions(blockTxs, block);
122
- if (!success)
123
- throw Error(`Processing transactions failed at height ${blockTxs[0].inclusionHeight}`);
124
- }
125
- };
126
- /**
127
- * Initialize the extractor with retrial on any unexpected problem
128
- * its the common part of initialize with Node and Explorer network
129
- * @param job
130
- */
131
- initWithRetrial = async (job) => {
132
- let trial = 1;
133
- if (this.initialize) {
134
- this.logger.debug(`Initializing ${this.getId()} started, removing all existing data`);
135
- await this.actions.removeAllData(this.getId());
136
- while (trial <= RETRIAL_COUNT) {
137
- try {
138
- await job();
139
- break;
140
- }
141
- catch (e) {
142
- this.logger.warn(`Initialization for ${this.getId()} failed with error :${e}`);
143
- if (trial == RETRIAL_COUNT)
144
- throw Error(`Initialization for ${this.getId()} failed after ${RETRIAL_COUNT} retrial`);
145
- trial += 1;
146
- this.logger.info(`Trying again to initialize ${this.getId()} with trial step ${trial}`);
147
- }
148
- }
149
- this.logger.info(`Initialization completed successfully for ${this.getId()}`);
150
- }
151
- else {
152
- this.logger.info(`Initialization for ${this.getId()} is turned off`);
153
- }
154
- };
155
- /**
156
- * initialize extractor database with data created below the initial height
157
- * ignore initialization if this feature is off
158
- * try to get data multiple times to pass accidental network problems
159
- * @param initialBlock
160
- */
161
- initializeBoxes;
162
- }
163
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RJbml0aWFsaXphYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL2VyZ28vaW5pdGlhbGl6YWJsZS9BYnN0cmFjdEluaXRpYWxpemFibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDNUMsT0FBTyxFQUFhLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRzlFLE9BQU8sRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFakUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUdyRCxNQUFNLE9BQWdCLGtDQUdwQixTQUFRLHFCQUFxRDtJQUNuRCxVQUFVLENBQVU7SUFDdEIsT0FBTyxDQUFTO0lBTWhCLE9BQU8sQ0FBZ0M7SUFFL0MsWUFDRSxJQUFxQixFQUNyQixHQUFXLEVBQ1gsT0FBZSxFQUNmLE1BQXVCLEVBQ3ZCLFVBQVUsR0FBRyxJQUFJO1FBRWpCLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNkLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksSUFBSSxJQUFJLGVBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNyQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3hDLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxZQUF1QixFQUFFLEVBQUU7Z0JBQ2pELE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ25ELENBQUMsQ0FBQztRQUNKLENBQUM7YUFBTSxJQUFJLElBQUksSUFBSSxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDeEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNwQyxJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsWUFBdUIsRUFBRSxFQUFFO2dCQUNqRCxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUMvQyxDQUFDLENBQUM7UUFDSixDQUFDOztZQUFNLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLElBQUksbUJBQW1CLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssc0JBQXNCLEdBQUcsS0FBSyxFQUFFLFlBQXVCLEVBQUUsRUFBRTtRQUNqRSxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsT0FBMEIsQ0FBQztRQUN4RCxJQUFJLFVBQVUsR0FBRyxDQUFDLEVBQ2hCLFFBQVEsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDO1FBQ2pDLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLElBQUksRUFBRTtZQUNwQyxPQUFPLFVBQVUsR0FBRyxRQUFRLEVBQUUsQ0FBQztnQkFDN0IsSUFBSSxHQUErQixDQUFDO2dCQUNwQyxpREFBaUQ7Z0JBQ2pELE9BQU8sSUFBSSxFQUFFLENBQUM7b0JBQ1osR0FBRyxHQUFHLE1BQU0sZUFBZSxDQUFDLGdDQUFnQyxDQUMxRCxJQUFJLENBQUMsT0FBTyxFQUNaLFVBQVUsRUFDVixRQUFRLENBQ1QsQ0FBQztvQkFDRixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDZixTQUFTLEdBQUcsQ0FBQyxNQUFNLDZDQUE2QyxVQUFVLGNBQWMsUUFBUSxFQUFFLENBQ25HLENBQUM7b0JBQ0YsSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLFNBQVMsSUFBSSxVQUFVLEtBQUssUUFBUSxFQUFFLENBQUM7d0JBQ3RELE1BQU0sQ0FBQyx1R0FBdUc7b0JBQ2hILENBQUM7b0JBQ0QsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDO29CQUNoRSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDZix1Q0FBdUMsVUFBVSxLQUFLLFFBQVEsR0FBRyxDQUNsRSxDQUFDO2dCQUNKLENBQUM7Z0JBQ0QsSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLFNBQVMsRUFBRSxDQUFDO29CQUMzQixJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQzt3QkFBRSxNQUFNLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDOUQsQ0FBQztxQkFBTSxDQUFDO29CQUNOLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUNmLG1CQUFtQixVQUFVLDZCQUE2QixTQUFTLGdEQUFnRCxDQUNwSCxDQUFDO29CQUNGLE1BQU0sT0FBTyxHQUFHLE1BQU0sZUFBZSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDO29CQUNyRSxNQUFNLFFBQVEsR0FBRyxNQUFNLGVBQWUsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQzVELElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUNmLFNBQVMsUUFBUSxDQUFDLE1BQU0sMkJBQTJCLFVBQVUsRUFBRSxDQUNoRSxDQUFDO29CQUNGLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRTt3QkFDdkMsSUFBSSxFQUFFLE9BQU87d0JBQ2IsTUFBTSxFQUFFLFVBQVU7cUJBQ25CLENBQUMsQ0FBQztnQkFDTCxDQUFDO2dCQUNELFVBQVUsR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDO2dCQUMxQixRQUFRLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQztZQUNqQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUM7SUFFRjs7O09BR0c7SUFDSyxlQUFlLEdBQUcsS0FBSyxJQUFJLEVBQUU7UUFDbkMsTUFBTSxRQUFRLEdBQUcsTUFDZixJQUFJLENBQUMsT0FDTixDQUFDLHFDQUFxQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzVELE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQztJQUN4QixDQUFDLENBQUM7SUFFRjs7O09BR0c7SUFDSyxrQkFBa0IsR0FBRyxLQUFLLEVBQUUsWUFBdUIsRUFBRSxFQUFFO1FBQzdELE1BQU0saUJBQWlCLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkQsSUFBSSxNQUFNLEdBQUcsQ0FBQyxFQUNaLEtBQUssR0FBRyxDQUFDLEVBQ1QsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNaLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLElBQUksRUFBRTtZQUNwQywwREFBMEQ7WUFDMUQsNkRBQTZEO1lBQzdELGtGQUFrRjtZQUNsRixPQUFPLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDbEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEtBQUssb0JBQW9CLENBQUMsQ0FBQztnQkFDL0QsT0FBTyxNQUFNLEdBQUcsS0FBSyxFQUFFLENBQUM7b0JBQ3RCLE1BQU0sUUFBUSxHQUFHLE1BQ2YsSUFBSSxDQUFDLE9BQ04sQ0FBQyxxQ0FBcUMsQ0FDckMsSUFBSSxDQUFDLE9BQU8sRUFDWixNQUFNLEVBQ04sU0FBUyxDQUNWLENBQUM7b0JBQ0YsS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUM7b0JBQ3ZCLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUMvQixDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLGVBQWUsSUFBSSxZQUFZLENBQUMsTUFBTSxDQUNsRCxDQUFDO29CQUNGLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUNmLFNBQVMsR0FBRyxDQUFDLE1BQU0sc0RBQXNELE1BQU0scUNBQXFDLEtBQUssRUFBRSxDQUM1SCxDQUFDO29CQUNGLElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDO3dCQUFFLE1BQU0sSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUM1RCxNQUFNLElBQUksU0FBUyxDQUFDO2dCQUN0QixDQUFDO2dCQUNELEtBQUssRUFBRSxDQUFDO2dCQUNSLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyw0QkFBNEI7WUFDMUMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN0RCxJQUFJLGdCQUFnQixJQUFJLGlCQUFpQixFQUFFLENBQUM7WUFDMUMsTUFBTSxLQUFLLENBQ1QsMkZBQTJGLENBQzVGLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQyxDQUFDO0lBRUY7Ozs7T0FJRztJQUNLLHVCQUF1QixHQUFHLEtBQUssRUFBRSxHQUErQixFQUFFLEVBQUU7UUFDMUUsR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUM5QyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQ2Ysb0NBQ0UsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUMxQixTQUFTLENBQ1YsQ0FBQztRQUNGLEtBQUssTUFBTSxPQUFPLElBQUksVUFBVSxFQUFFLENBQUM7WUFDakMsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3JDLE1BQU0sS0FBSyxHQUFHLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3JFLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUNmLHFDQUFxQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxFQUFFLENBQ25FLENBQUM7WUFDRixNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDaEUsSUFBSSxDQUFDLE9BQU87Z0JBQ1YsTUFBTSxLQUFLLENBQ1QsNENBQTRDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FDMUUsQ0FBQztRQUNOLENBQUM7SUFDSCxDQUFDLENBQUM7SUFFRjs7OztPQUlHO0lBQ0ssZUFBZSxHQUFHLEtBQUssRUFBRSxHQUF3QixFQUFFLEVBQUU7UUFDM0QsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQ2YsZ0JBQWdCLElBQUksQ0FBQyxLQUFLLEVBQUUsc0NBQXNDLENBQ25FLENBQUM7WUFDRixNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQy9DLE9BQU8sS0FBSyxJQUFJLGFBQWEsRUFBRSxDQUFDO2dCQUM5QixJQUFJLENBQUM7b0JBQ0gsTUFBTSxHQUFHLEVBQUUsQ0FBQztvQkFDWixNQUFNO2dCQUNSLENBQUM7Z0JBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztvQkFDWCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDZCxzQkFBc0IsSUFBSSxDQUFDLEtBQUssRUFBRSx1QkFBdUIsQ0FBQyxFQUFFLENBQzdELENBQUM7b0JBQ0YsSUFBSSxLQUFLLElBQUksYUFBYTt3QkFDeEIsTUFBTSxLQUFLLENBQ1Qsc0JBQXNCLElBQUksQ0FBQyxLQUFLLEVBQUUsaUJBQWlCLGFBQWEsVUFBVSxDQUMzRSxDQUFDO29CQUNKLEtBQUssSUFBSSxDQUFDLENBQUM7b0JBQ1gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ2QsOEJBQThCLElBQUksQ0FBQyxLQUFLLEVBQUUsb0JBQW9CLEtBQUssRUFBRSxDQUN0RSxDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDO1lBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ2QsNkNBQTZDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUM1RCxDQUFDO1FBQ0osQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsSUFBSSxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3ZFLENBQUM7SUFDSCxDQUFDLENBQUM7SUFFRjs7Ozs7T0FLRztJQUNILGVBQWUsQ0FBNkM7Q0FDN0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdExvZ2dlciB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvYWJzdHJhY3QtbG9nZ2VyJztcbmltcG9ydCB7IGdyb3VwQnksIHNvcnRCeSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBCbG9ja0luZm8sIEVyZ29OZXR3b3JrVHlwZSB9IGZyb20gJ0Byb3Nlbi1icmlkZ2Uvc2Nhbm5lci1pbnRlcmZhY2VzJztcblxuaW1wb3J0IHsgQWJzdHJhY3RCb3hEYXRhLCBFeHRlbmRlZFRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBBUElfTElNSVQsIFJFVFJJQUxfQ09VTlQgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgQWJzdHJhY3RFcmdvRXh0cmFjdG9yIH0gZnJvbSAnLi4vQWJzdHJhY3RFcmdvRXh0cmFjdG9yJztcbmltcG9ydCB7IEFic3RyYWN0SW5pdGlhbGl6YWJsZUVyZ29FeHRyYWN0b3JBY3Rpb24gfSBmcm9tICcuL0Fic3RyYWN0SW5pdGlhbGl6YWJsZUFjdGlvbic7XG5pbXBvcnQgeyBFeHBsb3Jlck5ldHdvcmsgfSBmcm9tICcuLi9uZXR3b3JrL0V4cGxvcmVyTmV0d29yayc7XG5pbXBvcnQgeyBOb2RlTmV0d29yayB9IGZyb20gJy4uL25ldHdvcmsvTm9kZU5ldHdvcmsnO1xuaW1wb3J0IHsgQWJzdHJhY3RFcmdvRXh0cmFjdG9yRW50aXR5IH0gZnJvbSAnLi4vQWJzdHJhY3RFcmdvRXh0cmFjdG9yRW50aXR5JztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0SW5pdGlhbGl6YWJsZUVyZ29FeHRyYWN0b3I8XG4gIEV4dHJhY3RlZERhdGEgZXh0ZW5kcyBBYnN0cmFjdEJveERhdGEsXG4gIEV4dHJhY3RvckVudGl0eSBleHRlbmRzIEFic3RyYWN0RXJnb0V4dHJhY3RvckVudGl0eSxcbj4gZXh0ZW5kcyBBYnN0cmFjdEVyZ29FeHRyYWN0b3I8RXh0cmFjdGVkRGF0YSwgRXh0cmFjdG9yRW50aXR5PiB7XG4gIHByb3RlY3RlZCBpbml0aWFsaXplOiBib29sZWFuO1xuICBwcml2YXRlIGFkZHJlc3M6IHN0cmluZztcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGFjdGlvbnM6IEFic3RyYWN0SW5pdGlhbGl6YWJsZUVyZ29FeHRyYWN0b3JBY3Rpb248XG4gICAgRXh0cmFjdGVkRGF0YSxcbiAgICBFeHRyYWN0b3JFbnRpdHlcbiAgPjtcblxuICBwcml2YXRlIG5ldHdvcms6IEV4cGxvcmVyTmV0d29yayB8IE5vZGVOZXR3b3JrO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHR5cGU6IEVyZ29OZXR3b3JrVHlwZSxcbiAgICB1cmw6IHN0cmluZyxcbiAgICBhZGRyZXNzOiBzdHJpbmcsXG4gICAgbG9nZ2VyPzogQWJzdHJhY3RMb2dnZXIsXG4gICAgaW5pdGlhbGl6ZSA9IHRydWUsXG4gICkge1xuICAgIHN1cGVyKGxvZ2dlcik7XG4gICAgdGhpcy5hZGRyZXNzID0gYWRkcmVzcztcbiAgICB0aGlzLmluaXRpYWxpemUgPSBpbml0aWFsaXplO1xuICAgIGlmICh0eXBlID09IEVyZ29OZXR3b3JrVHlwZS5FeHBsb3Jlcikge1xuICAgICAgdGhpcy5uZXR3b3JrID0gbmV3IEV4cGxvcmVyTmV0d29yayh1cmwpO1xuICAgICAgdGhpcy5pbml0aWFsaXplQm94ZXMgPSAoaW5pdGlhbEJsb2NrOiBCbG9ja0luZm8pID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5pdGlhbGl6ZVdpdGhFeHBsb3Jlcihpbml0aWFsQmxvY2spO1xuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT0gRXJnb05ldHdvcmtUeXBlLk5vZGUpIHtcbiAgICAgIHRoaXMubmV0d29yayA9IG5ldyBOb2RlTmV0d29yayh1cmwpO1xuICAgICAgdGhpcy5pbml0aWFsaXplQm94ZXMgPSAoaW5pdGlhbEJsb2NrOiBCbG9ja0luZm8pID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5pdGlhbGl6ZVdpdGhOb2RlKGluaXRpYWxCbG9jayk7XG4gICAgICB9O1xuICAgIH0gZWxzZSB0aHJvdyBuZXcgRXJyb3IoYE5ldHdvcmsgdHlwZSAke3R5cGV9IGlzIG5vdCBzdXBwb3J0ZWRgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIGV4dHJhY3RvciB1c2luZyBFeHBsb3JlciBuZXR3b3JrXG4gICAqIEBwYXJhbSBpbml0aWFsQmxvY2tcbiAgICovXG4gIHByaXZhdGUgaW5pdGlhbGl6ZVdpdGhFeHBsb3JlciA9IGFzeW5jIChpbml0aWFsQmxvY2s6IEJsb2NrSW5mbykgPT4ge1xuICAgIGNvbnN0IGV4cGxvcmVyTmV0d29yayA9IHRoaXMubmV0d29yayBhcyBFeHBsb3Jlck5ldHdvcms7XG4gICAgbGV0IGZyb21IZWlnaHQgPSAwLFxuICAgICAgdG9IZWlnaHQgPSBpbml0aWFsQmxvY2suaGVpZ2h0O1xuICAgIGF3YWl0IHRoaXMuaW5pdFdpdGhSZXRyaWFsKGFzeW5jICgpID0+IHtcbiAgICAgIHdoaWxlIChmcm9tSGVpZ2h0IDwgdG9IZWlnaHQpIHtcbiAgICAgICAgbGV0IHR4czogQXJyYXk8RXh0ZW5kZWRUcmFuc2FjdGlvbj47XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zdGFudC1jb25kaXRpb25cbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICB0eHMgPSBhd2FpdCBleHBsb3Jlck5ldHdvcmsuZ2V0QWRkcmVzc1RyYW5zYWN0aW9uc1dpdGhIZWlnaHQoXG4gICAgICAgICAgICB0aGlzLmFkZHJlc3MsXG4gICAgICAgICAgICBmcm9tSGVpZ2h0LFxuICAgICAgICAgICAgdG9IZWlnaHQsXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICAgIGBGb3VuZCAke3R4cy5sZW5ndGh9IHRyYW5zYWN0aW9ucyBmb3IgdGhlIGFkZHJlc3MgZnJvbSBoZWlnaHQgJHtmcm9tSGVpZ2h0fSB0byBoZWlnaHQgJHt0b0hlaWdodH1gLFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKHR4cy5sZW5ndGggPCBBUElfTElNSVQgfHwgZnJvbUhlaWdodCA9PT0gdG9IZWlnaHQpIHtcbiAgICAgICAgICAgIGJyZWFrOyAvLyBFeGl0IGxvb3AgaWYgd2UgaGF2ZSBmZXdlciB0cmFuc2FjdGlvbnMgdGhhbiB0aGUgbGltaXQgb3IgaWYgdGhlIHJhbmdlIGlzIHJlZHVjZWQgdG8gYSBzaW5nbGUgaGVpZ2h0XG4gICAgICAgICAgfVxuICAgICAgICAgIHRvSGVpZ2h0ID0gTWF0aC5mbG9vcigodG9IZWlnaHQgLSBmcm9tSGVpZ2h0KSAvIDIpICsgZnJvbUhlaWdodDtcbiAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICAgIGBMaW1pdGluZyB0aGUgcXVlcnkgaGVpZ2h0IHJhbmdlIHRvIFske2Zyb21IZWlnaHR9LCAke3RvSGVpZ2h0fV1gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR4cy5sZW5ndGggPCBBUElfTElNSVQpIHtcbiAgICAgICAgICBpZiAodHhzLmxlbmd0aCA+IDApIGF3YWl0IHRoaXMucHJvY2Vzc1RyYW5zYWN0aW9uQmF0Y2godHhzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICAgIGBCbG9jayBhdCBoZWlnaHQgJHtmcm9tSGVpZ2h0fSBoYXMgbW9yZSB0aGFuIChvciBlcXVhbCkgJHtBUElfTElNSVR9IHJlbGV2YW50IHR4cywgcHJvY2Vzc2luZyBhbGwgdHhzIGluIHRoZSBibG9ja2AsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBibG9ja0lkID0gYXdhaXQgZXhwbG9yZXJOZXR3b3JrLmdldEJsb2NrSWRBdEhlaWdodChmcm9tSGVpZ2h0KTtcbiAgICAgICAgICBjb25zdCBibG9ja1R4cyA9IGF3YWl0IGV4cGxvcmVyTmV0d29yay5nZXRCbG9ja1R4cyhibG9ja0lkKTtcbiAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICAgIGBGb3VuZCAke2Jsb2NrVHhzLmxlbmd0aH0gdHJhbnNhY3Rpb25zIGF0IGhlaWdodCAke2Zyb21IZWlnaHR9YCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGF3YWl0IHRoaXMucHJvY2Vzc1RyYW5zYWN0aW9ucyhibG9ja1R4cywge1xuICAgICAgICAgICAgaGFzaDogYmxvY2tJZCxcbiAgICAgICAgICAgIGhlaWdodDogZnJvbUhlaWdodCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmcm9tSGVpZ2h0ID0gdG9IZWlnaHQgKyAxO1xuICAgICAgICB0b0hlaWdodCA9IGluaXRpYWxCbG9jay5oZWlnaHQ7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgdG90YWwgdHggY291bnQgZnJvbSBOb2RlIG5ldHdvcmtcbiAgICogQHJldHVybnMgdG90YWwgdHggY291bnQgb2YgdGhlIGFkZHJlc3NcbiAgICovXG4gIHByaXZhdGUgZ2V0VG90YWxUeENvdW50ID0gYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgKFxuICAgICAgdGhpcy5uZXR3b3JrIGFzIE5vZGVOZXR3b3JrXG4gICAgKS5nZXRBZGRyZXNzVHJhbnNhY3Rpb25zV2l0aE9mZnNldExpbWl0KHRoaXMuYWRkcmVzcywgMCwgMCk7XG4gICAgcmV0dXJuIHJlc3BvbnNlLnRvdGFsO1xuICB9O1xuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIGV4dHJhY3RvciB1c2luZyBOb2RlIG5ldHdvcmtcbiAgICogQHBhcmFtIGluaXRpYWxCbG9ja1xuICAgKi9cbiAgcHJpdmF0ZSBpbml0aWFsaXplV2l0aE5vZGUgPSBhc3luYyAoaW5pdGlhbEJsb2NrOiBCbG9ja0luZm8pID0+IHtcbiAgICBjb25zdCB0eENvdW50QmVmb3JlSW5pdCA9IGF3YWl0IHRoaXMuZ2V0VG90YWxUeENvdW50KCk7XG4gICAgbGV0IG9mZnNldCA9IDAsXG4gICAgICB0b3RhbCA9IDEsXG4gICAgICByb3VuZCA9IDE7XG4gICAgYXdhaXQgdGhpcy5pbml0V2l0aFJldHJpYWwoYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gUmVwZWF0IHRoZSB3aG9sZSBwcm9jZXNzIHR3aWNlIHRvIGNvdmVyIGFsbCBzcGVudCBib3hlc1xuICAgICAgLy8gQWZ0ZXIgcm91bmQgMSBhbGwgYm94ZXMgaGF2ZSBiZWVuIHNhdmVkIGFuZCBwcm9jZXNzZWQgb25jZVxuICAgICAgLy8gQWZ0ZXIgcm91bmQgMiBzcGVuZGluZyBpbmZvcm1hdGlvbiBvZiBhbGwgc3RvcmVkIGJveGVzIGFyZSB1cGRhdGVkIHN1Y2Nlc3NmdWxseVxuICAgICAgd2hpbGUgKHJvdW5kIDw9IDIpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYFN0YXJ0aW5nIHJvdW5kICR7cm91bmR9IG9mIGluaXRpYWxpemF0aW9uYCk7XG4gICAgICAgIHdoaWxlIChvZmZzZXQgPCB0b3RhbCkge1xuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgKFxuICAgICAgICAgICAgdGhpcy5uZXR3b3JrIGFzIE5vZGVOZXR3b3JrXG4gICAgICAgICAgKS5nZXRBZGRyZXNzVHJhbnNhY3Rpb25zV2l0aE9mZnNldExpbWl0KFxuICAgICAgICAgICAgdGhpcy5hZGRyZXNzLFxuICAgICAgICAgICAgb2Zmc2V0LFxuICAgICAgICAgICAgQVBJX0xJTUlULFxuICAgICAgICAgICk7XG4gICAgICAgICAgdG90YWwgPSByZXNwb25zZS50b3RhbDtcbiAgICAgICAgICBjb25zdCB0eHMgPSByZXNwb25zZS5pdGVtcy5maWx0ZXIoXG4gICAgICAgICAgICAodHgpID0+IHR4LmluY2x1c2lvbkhlaWdodCA8PSBpbml0aWFsQmxvY2suaGVpZ2h0LFxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICAgICBgRm91bmQgJHt0eHMubGVuZ3RofSB0cmFuc2FjdGlvbnMgYmVsb3cgdGhlIGluaXRpYWwgaGVpZ2h0IHdpdGggb2Zmc2V0ICR7b2Zmc2V0fSBhbmQgdG90YWwgbnVtYmVyIG9mIHRyYW5zYWN0aW9ucyAke3RvdGFsfWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAodHhzLmxlbmd0aCA+IDApIGF3YWl0IHRoaXMucHJvY2Vzc1RyYW5zYWN0aW9uQmF0Y2godHhzKTtcbiAgICAgICAgICBvZmZzZXQgKz0gQVBJX0xJTUlUO1xuICAgICAgICB9XG4gICAgICAgIHJvdW5kKys7XG4gICAgICAgIG9mZnNldCA9IDA7IC8vIG5leHQgcm91bmQgaW5pdGlhbCBvZmZzZXRcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCB0eENvdW50QWZ0ZXJJbml0ID0gYXdhaXQgdGhpcy5nZXRUb3RhbFR4Q291bnQoKTtcbiAgICBpZiAodHhDb3VudEFmdGVySW5pdCAhPSB0eENvdW50QmVmb3JlSW5pdCkge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICdUb3RhbCB0cmFuc2FjdGlvbiBjb3VudCBjaGFuZ2VkIGR1cmluZyBpbml0aWFsaXphdGlvbiBwaGFzZSwgdGhlIHN0b3JlZCBkYXRhIGlzIG5vdCB2YWxpZCcsXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogUHJvY2VzcyBhIGJhdGNoIG9mIHRyYW5zYWN0aW9uc1xuICAgKiBncm91cCB0eHMgaW50byBibG9ja3MgYW5kIHByb2Nlc3MgdGhlbSB1c2luZyBgcHJvY2Vzc1RyYW5zYWN0aW9uc2BcbiAgICogQHBhcmFtIHR4c1xuICAgKi9cbiAgcHJpdmF0ZSBwcm9jZXNzVHJhbnNhY3Rpb25CYXRjaCA9IGFzeW5jICh0eHM6IEFycmF5PEV4dGVuZGVkVHJhbnNhY3Rpb24+KSA9PiB7XG4gICAgdHhzID0gc29ydEJ5KHR4cywgKHR4KSA9PiB0eC5pbmNsdXNpb25IZWlnaHQpO1xuICAgIGNvbnN0IGdyb3VwZWRUeHMgPSBncm91cEJ5KHR4cywgKHR4KSA9PiB0eC5ibG9ja0lkKTtcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBUaGUgdHJhbnNhY3Rpb24gYmF0Y2ggZ3JvdXBlZCB0byAke1xuICAgICAgICBPYmplY3Qua2V5cyhncm91cGVkVHhzKS5sZW5ndGhcbiAgICAgIH0gYmxvY2tzYCxcbiAgICApO1xuICAgIGZvciAoY29uc3QgYmxvY2tJZCBpbiBncm91cGVkVHhzKSB7XG4gICAgICBjb25zdCBibG9ja1R4cyA9IGdyb3VwZWRUeHNbYmxvY2tJZF07XG4gICAgICBjb25zdCBibG9jayA9IHsgaGFzaDogYmxvY2tJZCwgaGVpZ2h0OiBibG9ja1R4c1swXS5pbmNsdXNpb25IZWlnaHQgfTtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICBgUHJvY2Vzc2luZyB0cmFuc2FjdGlvbnMgYXQgaGVpZ2h0ICR7YmxvY2tUeHNbMF0uaW5jbHVzaW9uSGVpZ2h0fWAsXG4gICAgICApO1xuICAgICAgY29uc3Qgc3VjY2VzcyA9IGF3YWl0IHRoaXMucHJvY2Vzc1RyYW5zYWN0aW9ucyhibG9ja1R4cywgYmxvY2spO1xuICAgICAgaWYgKCFzdWNjZXNzKVxuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICBgUHJvY2Vzc2luZyB0cmFuc2FjdGlvbnMgZmFpbGVkIGF0IGhlaWdodCAke2Jsb2NrVHhzWzBdLmluY2x1c2lvbkhlaWdodH1gLFxuICAgICAgICApO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGUgZXh0cmFjdG9yIHdpdGggcmV0cmlhbCBvbiBhbnkgdW5leHBlY3RlZCBwcm9ibGVtXG4gICAqIGl0cyB0aGUgY29tbW9uIHBhcnQgb2YgaW5pdGlhbGl6ZSB3aXRoIE5vZGUgYW5kIEV4cGxvcmVyIG5ldHdvcmtcbiAgICogQHBhcmFtIGpvYlxuICAgKi9cbiAgcHJpdmF0ZSBpbml0V2l0aFJldHJpYWwgPSBhc3luYyAoam9iOiAoKSA9PiBQcm9taXNlPHZvaWQ+KSA9PiB7XG4gICAgbGV0IHRyaWFsID0gMTtcbiAgICBpZiAodGhpcy5pbml0aWFsaXplKSB7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYEluaXRpYWxpemluZyAke3RoaXMuZ2V0SWQoKX0gc3RhcnRlZCwgcmVtb3ZpbmcgYWxsIGV4aXN0aW5nIGRhdGFgLFxuICAgICAgKTtcbiAgICAgIGF3YWl0IHRoaXMuYWN0aW9ucy5yZW1vdmVBbGxEYXRhKHRoaXMuZ2V0SWQoKSk7XG4gICAgICB3aGlsZSAodHJpYWwgPD0gUkVUUklBTF9DT1VOVCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGpvYigpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIud2FybihcbiAgICAgICAgICAgIGBJbml0aWFsaXphdGlvbiBmb3IgJHt0aGlzLmdldElkKCl9IGZhaWxlZCB3aXRoIGVycm9yIDoke2V9YCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmICh0cmlhbCA9PSBSRVRSSUFMX0NPVU5UKVxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgIGBJbml0aWFsaXphdGlvbiBmb3IgJHt0aGlzLmdldElkKCl9IGZhaWxlZCBhZnRlciAke1JFVFJJQUxfQ09VTlR9IHJldHJpYWxgLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB0cmlhbCArPSAxO1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmluZm8oXG4gICAgICAgICAgICBgVHJ5aW5nIGFnYWluIHRvIGluaXRpYWxpemUgJHt0aGlzLmdldElkKCl9IHdpdGggdHJpYWwgc3RlcCAke3RyaWFsfWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5sb2dnZXIuaW5mbyhcbiAgICAgICAgYEluaXRpYWxpemF0aW9uIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgZm9yICR7dGhpcy5nZXRJZCgpfWAsXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZ2dlci5pbmZvKGBJbml0aWFsaXphdGlvbiBmb3IgJHt0aGlzLmdldElkKCl9IGlzIHR1cm5lZCBvZmZgKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIGluaXRpYWxpemUgZXh0cmFjdG9yIGRhdGFiYXNlIHdpdGggZGF0YSBjcmVhdGVkIGJlbG93IHRoZSBpbml0aWFsIGhlaWdodFxuICAgKiBpZ25vcmUgaW5pdGlhbGl6YXRpb24gaWYgdGhpcyBmZWF0dXJlIGlzIG9mZlxuICAgKiB0cnkgdG8gZ2V0IGRhdGEgbXVsdGlwbGUgdGltZXMgdG8gcGFzcyBhY2NpZGVudGFsIG5ldHdvcmsgcHJvYmxlbXNcbiAgICogQHBhcmFtIGluaXRpYWxCbG9ja1xuICAgKi9cbiAgaW5pdGlhbGl6ZUJveGVzOiAoaW5pdGlhbEJsb2NrOiBCbG9ja0luZm8pID0+IFByb21pc2U8dm9pZD47XG59XG4iXX0=
@@ -1,14 +0,0 @@
1
- import { DataSource, EntityTarget } from '@rosen-bridge/extended-typeorm';
2
- import { AbstractLogger } from '@rosen-bridge/abstract-logger';
3
- import { AbstractErgoExtractorAction } from '../AbstractErgoExtractorAction';
4
- import { AbstractBoxData } from '../interfaces';
5
- import { AbstractErgoExtractorEntity } from '../AbstractErgoExtractorEntity';
6
- export declare abstract class AbstractInitializableErgoExtractorAction<ExtractedData extends AbstractBoxData, ExtractorEntity extends AbstractErgoExtractorEntity> extends AbstractErgoExtractorAction<ExtractedData, ExtractorEntity> {
7
- constructor(dataSource: DataSource, repo: EntityTarget<ExtractorEntity>, logger?: AbstractLogger);
8
- /**
9
- * remove all existing data for the extractor
10
- * @param extractorId
11
- */
12
- removeAllData: (extractorId: string) => Promise<void>;
13
- }
14
- //# sourceMappingURL=AbstractInitializableAction.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AbstractInitializableAction.d.ts","sourceRoot":"","sources":["../../../../lib/ergo/initializable/AbstractInitializableAction.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,YAAY,EAEb,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,OAAO,EAAE,2BAA2B,EAAE,MAAM,gCAAgC,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,2BAA2B,EAAE,MAAM,gCAAgC,CAAC;AAE7E,8BAAsB,wCAAwC,CAC5D,aAAa,SAAS,eAAe,EACrC,eAAe,SAAS,2BAA2B,CACnD,SAAQ,2BAA2B,CAAC,aAAa,EAAE,eAAe,CAAC;gBAEjE,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,YAAY,CAAC,eAAe,CAAC,EACnC,MAAM,CAAC,EAAE,cAAc;IAKzB;;;OAGG;IACH,aAAa,GAAU,aAAa,MAAM,mBAIxC;CACH"}