@rosen-bridge/abstract-extractor 0.3.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/ergo/AbstractErgoExtractor.d.ts +31 -8
  3. package/dist/ergo/AbstractErgoExtractor.d.ts.map +1 -1
  4. package/dist/ergo/AbstractErgoExtractor.js +73 -8
  5. package/dist/ergo/AbstractErgoExtractorAction.d.ts +38 -10
  6. package/dist/ergo/AbstractErgoExtractorAction.d.ts.map +1 -1
  7. package/dist/ergo/AbstractErgoExtractorAction.js +134 -1
  8. package/dist/ergo/AbstractErgoExtractorEntity.d.ts +11 -0
  9. package/dist/ergo/AbstractErgoExtractorEntity.d.ts.map +1 -0
  10. package/dist/ergo/AbstractErgoExtractorEntity.js +57 -0
  11. package/dist/ergo/index.d.ts +1 -0
  12. package/dist/ergo/index.d.ts.map +1 -1
  13. package/dist/ergo/index.js +2 -1
  14. package/dist/ergo/initializable/AbstractInitializable.d.ts +4 -3
  15. package/dist/ergo/initializable/AbstractInitializable.d.ts.map +1 -1
  16. package/dist/ergo/initializable/AbstractInitializable.js +9 -5
  17. package/dist/ergo/initializable/AbstractInitializableAction.d.ts +7 -2
  18. package/dist/ergo/initializable/AbstractInitializableAction.d.ts.map +1 -1
  19. package/dist/ergo/initializable/AbstractInitializableAction.js +11 -1
  20. package/dist/ergo/interfaces.d.ts +21 -7
  21. package/dist/ergo/interfaces.d.ts.map +1 -1
  22. package/dist/ergo/interfaces.js +8 -1
  23. package/lib/ergo/AbstractErgoExtractor.ts +107 -23
  24. package/lib/ergo/AbstractErgoExtractorAction.ts +187 -18
  25. package/lib/ergo/AbstractErgoExtractorEntity.ts +28 -0
  26. package/lib/ergo/index.ts +1 -0
  27. package/lib/ergo/initializable/AbstractInitializable.ts +22 -9
  28. package/lib/ergo/initializable/AbstractInitializableAction.ts +19 -3
  29. package/lib/ergo/interfaces.ts +25 -7
  30. package/package.json +6 -2
  31. package/tests/{AbstractExtractor.mock.ts → AbstractErgoExtractor.mock.ts} +12 -7
  32. package/tests/AbstractErgoExtractor.spec.ts +281 -0
  33. package/tests/AbstractErgoExtractorAction.mock.ts +45 -0
  34. package/tests/AbstractErgoExtractorAction.spec.ts +269 -0
  35. package/tests/initializable/AbstractInitializable.mock.ts +15 -8
  36. package/tests/initializable/AbstractInitializable.spec.ts +37 -5
  37. package/tests/initializable/AbstractInitializableAction.mock.ts +45 -0
  38. package/tests/initializable/AbstractInitializableAction.spec.ts +65 -0
  39. package/tests/testData.ts +38 -2
  40. package/tests/testUtils.ts +22 -0
  41. package/tsconfig.build.tsbuildinfo +1 -1
  42. package/dist/ergo/initializable/InitializableByAddress.d.ts +0 -19
  43. package/dist/ergo/initializable/InitializableByAddress.d.ts.map +0 -1
  44. package/dist/ergo/initializable/InitializableByAddress.js +0 -30
  45. package/dist/ergo/initializable/InitializableByToken.d.ts +0 -19
  46. package/dist/ergo/initializable/InitializableByToken.d.ts.map +0 -1
  47. package/dist/ergo/initializable/InitializableByToken.js +0 -30
  48. package/dist/tsconfig.tsbuildinfo +0 -1
  49. package/tests/AbstractExtractor.spec.ts +0 -106
@@ -1,9 +1,9 @@
1
+ import { groupBy, sortBy } from 'lodash-es';
1
2
  import { ErgoNetworkType, } from '../interfaces';
2
3
  import { API_LIMIT, RETRIAL_COUNT } from '../../constants';
3
4
  import { AbstractErgoExtractor } from '../AbstractErgoExtractor';
4
5
  import { ExplorerNetwork } from '../network/ExplorerNetwork';
5
6
  import { NodeNetwork } from '../network/NodeNetwork';
6
- import { groupBy, sortBy } from 'lodash-es';
7
7
  export class AbstractInitializableErgoExtractor extends AbstractErgoExtractor {
8
8
  initialize;
9
9
  address;
@@ -80,13 +80,13 @@ export class AbstractInitializableErgoExtractor extends AbstractErgoExtractor {
80
80
  */
81
81
  initializeWithNode = async (initialBlock) => {
82
82
  const txCountBeforeInit = await this.getTotalTxCount();
83
+ let offset = 0, total = 1, round = 1;
83
84
  await this.initWithRetrial(async () => {
84
85
  // Repeat the whole process twice to cover all spent boxes
85
86
  // After round 1 all boxes have been saved and processed once
86
87
  // After round 2 spending information of all stored boxes are updated successfully
87
- for (let round = 0; round <= 1; round++) {
88
+ while (round <= 2) {
88
89
  this.logger.debug(`Starting round ${round} of initialization`);
89
- let offset = 0, total = 1;
90
90
  while (offset < total) {
91
91
  const response = await this.network.getAddressTransactionsWithOffsetLimit(this.address, offset, API_LIMIT);
92
92
  total = response.total;
@@ -96,6 +96,8 @@ export class AbstractInitializableErgoExtractor extends AbstractErgoExtractor {
96
96
  await this.processTransactionBatch(txs);
97
97
  offset += API_LIMIT;
98
98
  }
99
+ round++;
100
+ offset = 0; // next round initial offset
99
101
  }
100
102
  });
101
103
  const txCountAfterInit = await this.getTotalTxCount();
@@ -116,7 +118,9 @@ export class AbstractInitializableErgoExtractor extends AbstractErgoExtractor {
116
118
  const blockTxs = groupedTxs[blockId];
117
119
  const block = { hash: blockId, height: blockTxs[0].inclusionHeight };
118
120
  this.logger.debug(`Processing transactions at height ${blockTxs[0].inclusionHeight}`);
119
- await this.processTransactions(blockTxs, block);
121
+ const success = await this.processTransactions(blockTxs, block);
122
+ if (!success)
123
+ throw Error(`Processing transactions failed at height ${blockTxs[0].inclusionHeight}`);
120
124
  }
121
125
  };
122
126
  /**
@@ -156,4 +160,4 @@ export class AbstractInitializableErgoExtractor extends AbstractErgoExtractor {
156
160
  */
157
161
  initializeBoxes;
158
162
  }
159
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RJbml0aWFsaXphYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2VyZ28vaW5pdGlhbGl6YWJsZS9BYnN0cmFjdEluaXRpYWxpemFibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUVMLGVBQWUsR0FFaEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUdqRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRTVDLE1BQU0sT0FBZ0Isa0NBRXBCLFNBQVEscUJBQW9DO0lBQ2xDLFVBQVUsQ0FBVTtJQUN0QixPQUFPLENBQVM7SUFHaEIsT0FBTyxDQUFnQztJQUUvQyxZQUNFLElBQXFCLEVBQ3JCLEdBQVcsRUFDWCxPQUFlLEVBQ2YsTUFBdUIsRUFDdkIsVUFBVSxHQUFHLElBQUk7UUFFakIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2QsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxJQUFJLElBQUksZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDeEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLFlBQXVCLEVBQUUsRUFBRTtnQkFDakQsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDbkQsQ0FBQyxD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SyxFQUFFLEVBQUUsQ0FDNUQsQ0FBQztRQUNKLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsc0JBQXNCLElBQUksQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUN2RSxDQUFDO0lBQ0gsQ0FBQyxDQUFDO0lBRUY7Ozs7O09BS0c7SUFDSCxlQUFlLENBQTZDO0NBQzdEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RMb2dnZXIgfSBmcm9tICdAcm9zZW4tYnJpZGdlL2Fic3RyYWN0LWxvZ2dlcic7XG5pbXBvcnQge1xuICBFcmdvRXh0cmFjdGVkRGF0YSxcbiAgRXJnb05ldHdvcmtUeXBlLFxuICBFeHRlbmRlZFRyYW5zYWN0aW9uLFxufSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEFQSV9MSU1JVCwgUkVUUklBTF9DT1VOVCB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBBYnN0cmFjdEVyZ29FeHRyYWN0b3IgfSBmcm9tICcuLi9BYnN0cmFjdEVyZ29FeHRyYWN0b3InO1xuaW1wb3J0IHsgQWJzdHJhY3RJbml0aWFsaXphYmxlRXJnb0V4dHJhY3RvckFjdGlvbiB9IGZyb20gJy4vQWJzdHJhY3RJbml0aWFsaXphYmxlQWN0aW9uJztcbmltcG9ydCB7IEJsb2NrSW5mbyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRXhwbG9yZXJOZXR3b3JrIH0gZnJvbSAnLi4vbmV0d29yay9FeHBsb3Jlck5ldHdvcmsnO1xuaW1wb3J0IHsgTm9kZU5ldHdvcmsgfSBmcm9tICcuLi9uZXR3b3JrL05vZGVOZXR3b3JrJztcbmltcG9ydCB7IGdyb3VwQnksIHNvcnRCeSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdEluaXRpYWxpemFibGVFcmdvRXh0cmFjdG9yPFxuICBFeHRyYWN0ZWREYXRhIGV4dGVuZHMgRXJnb0V4dHJhY3RlZERhdGFcbj4gZXh0ZW5kcyBBYnN0cmFjdEVyZ29FeHRyYWN0b3I8RXh0cmFjdGVkRGF0YT4ge1xuICBwcm90ZWN0ZWQgaW5pdGlhbGl6ZTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBhZGRyZXNzOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBhYnN0cmFjdCBhY3Rpb25zOiBBYnN0cmFjdEluaXRpYWxpemFibGVFcmdvRXh0cmFjdG9yQWN0aW9uPEV4dHJhY3RlZERhdGE+O1xuXG4gIHByaXZhdGUgbmV0d29yazogRXhwbG9yZXJOZXR3b3JrIHwgTm9kZU5ldHdvcms7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgdHlwZTogRXJnb05ldHdvcmtUeXBlLFxuICAgIHVybDogc3RyaW5nLFxuICAgIGFkZHJlc3M6IHN0cmluZyxcbiAgICBsb2dnZXI/OiBBYnN0cmFjdExvZ2dlcixcbiAgICBpbml0aWFsaXplID0gdHJ1ZVxuICApIHtcbiAgICBzdXBlcihsb2dnZXIpO1xuICAgIHRoaXMuYWRkcmVzcyA9IGFkZHJlc3M7XG4gICAgdGhpcy5pbml0aWFsaXplID0gaW5pdGlhbGl6ZTtcbiAgICBpZiAodHlwZSA9PSBFcmdvTmV0d29ya1R5cGUuRXhwbG9yZXIpIHtcbiAgICAgIHRoaXMubmV0d29yayA9IG5ldyBFeHBsb3Jlck5ldHdvcmsodXJsKTtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUJveGVzID0gKGluaXRpYWxCbG9jazogQmxvY2tJbmZvKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmluaXRpYWxpemVXaXRoRXhwbG9yZXIoaW5pdGlhbEJsb2NrKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmICh0eXBlID09IEVyZ29OZXR3b3JrVHlwZS5Ob2RlKSB7XG4gICAgICB0aGlzLm5ldHdvcmsgPSBuZXcgTm9kZU5ldHdvcmsodXJsKTtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUJveGVzID0gKGluaXRpYWxCbG9jazogQmxvY2tJbmZvKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmluaXRpYWxpemVXaXRoTm9kZShpbml0aWFsQmxvY2spO1xuICAgICAgfTtcbiAgICB9IGVsc2UgdGhyb3cgbmV3IEVycm9yKGBOZXR3b3JrIHR5cGUgJHt0eXBlfSBpcyBub3Qgc3VwcG9ydGVkYCk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBleHRyYWN0b3IgdXNpbmcgRXhwbG9yZXIgbmV0d29ya1xuICAgKiBAcGFyYW0gaW5pdGlhbEJsb2NrXG4gICAqL1xuICBwcml2YXRlIGluaXRpYWxpemVXaXRoRXhwbG9yZXIgPSBhc3luYyAoaW5pdGlhbEJsb2NrOiBCbG9ja0luZm8pID0+IHtcbiAgICBjb25zdCBleHBsb3Jlck5ldHdvcmsgPSB0aGlzLm5ldHdvcmsgYXMgRXhwbG9yZXJOZXR3b3JrO1xuICAgIGxldCBmcm9tSGVpZ2h0ID0gMCxcbiAgICAgIHRvSGVpZ2h0ID0gaW5pdGlhbEJsb2NrLmhlaWdodDtcbiAgICBhd2FpdCB0aGlzLmluaXRXaXRoUmV0cmlhbChhc3luYyAoKSA9PiB7XG4gICAgICB3aGlsZSAoZnJvbUhlaWdodCA8IHRvSGVpZ2h0KSB7XG4gICAgICAgIGxldCB0eHM6IEFycmF5PEV4dGVuZGVkVHJhbnNhY3Rpb24+O1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc3RhbnQtY29uZGl0aW9uXG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgdHhzID0gYXdhaXQgZXhwbG9yZXJOZXR3b3JrLmdldEFkZHJlc3NUcmFuc2FjdGlvbnNXaXRoSGVpZ2h0KFxuICAgICAgICAgICAgdGhpcy5hZGRyZXNzLFxuICAgICAgICAgICAgZnJvbUhlaWdodCxcbiAgICAgICAgICAgIHRvSGVpZ2h0XG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICAgIGBGb3VuZCAke3R4cy5sZW5ndGh9IHRyYW5zYWN0aW9ucyBmb3IgdGhlIGFkZHJlc3MgZnJvbSBoZWlnaHQgJHtmcm9tSGVpZ2h0fSB0byBoZWlnaHQgJHt0b0hlaWdodH1gXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAodHhzLmxlbmd0aCA8IEFQSV9MSU1JVCB8fCBmcm9tSGVpZ2h0ID09PSB0b0hlaWdodCkge1xuICAgICAgICAgICAgYnJlYWs7IC8vIEV4aXQgbG9vcCBpZiB3ZSBoYXZlIGZld2VyIHRyYW5zYWN0aW9ucyB0aGFuIHRoZSBsaW1pdCBvciBpZiB0aGUgcmFuZ2UgaXMgcmVkdWNlZCB0byBhIHNpbmdsZSBoZWlnaHRcbiAgICAgICAgICB9XG4gICAgICAgICAgdG9IZWlnaHQgPSBNYXRoLmZsb29yKCh0b0hlaWdodCAtIGZyb21IZWlnaHQpIC8gMikgKyBmcm9tSGVpZ2h0O1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICAgYExpbWl0aW5nIHRoZSBxdWVyeSBoZWlnaHQgcmFuZ2UgdG8gWyR7ZnJvbUhlaWdodH0sICR7dG9IZWlnaHR9XWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eHMubGVuZ3RoIDwgQVBJX0xJTUlUKSB7XG4gICAgICAgICAgaWYgKHR4cy5sZW5ndGggPiAwKSBhd2FpdCB0aGlzLnByb2Nlc3NUcmFuc2FjdGlvbkJhdGNoKHR4cyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICAgICBgQmxvY2sgYXQgaGVpZ2h0ICR7ZnJvbUhlaWdodH0gaGFzIG1vcmUgdGhhbiAob3IgZXF1YWwpICR7QVBJX0xJTUlUfSByZWxldmFudCB0eHMsIHByb2Nlc3NpbmcgYWxsIHR4cyBpbiB0aGUgYmxvY2tgXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBibG9ja0lkID0gYXdhaXQgZXhwbG9yZXJOZXR3b3JrLmdldEJsb2NrSWRBdEhlaWdodChmcm9tSGVpZ2h0KTtcbiAgICAgICAgICBjb25zdCBibG9ja1R4cyA9IGF3YWl0IGV4cGxvcmVyTmV0d29yay5nZXRCbG9ja1R4cyhibG9ja0lkKTtcbiAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICAgIGBGb3VuZCAke2Jsb2NrVHhzLmxlbmd0aH0gdHJhbnNhY3Rpb25zIGF0IGhlaWdodCAke2Zyb21IZWlnaHR9YFxuICAgICAgICAgICk7XG4gICAgICAgICAgYXdhaXQgdGhpcy5wcm9jZXNzVHJhbnNhY3Rpb25zKGJsb2NrVHhzLCB7XG4gICAgICAgICAgICBoYXNoOiBibG9ja0lkLFxuICAgICAgICAgICAgaGVpZ2h0OiBmcm9tSGVpZ2h0LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZyb21IZWlnaHQgPSB0b0hlaWdodCArIDE7XG4gICAgICAgIHRvSGVpZ2h0ID0gaW5pdGlhbEJsb2NrLmhlaWdodDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICAvKipcbiAgICogR2V0IHRoZSB0b3RhbCB0eCBjb3VudCBmcm9tIE5vZGUgbmV0d29ya1xuICAgKiBAcmV0dXJucyB0b3RhbCB0eCBjb3VudCBvZiB0aGUgYWRkcmVzc1xuICAgKi9cbiAgcHJpdmF0ZSBnZXRUb3RhbFR4Q291bnQgPSBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCAoXG4gICAgICB0aGlzLm5ldHdvcmsgYXMgTm9kZU5ldHdvcmtcbiAgICApLmdldEFkZHJlc3NUcmFuc2FjdGlvbnNXaXRoT2Zmc2V0TGltaXQodGhpcy5hZGRyZXNzLCAwLCAwKTtcbiAgICByZXR1cm4gcmVzcG9uc2UudG90YWw7XG4gIH07XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgZXh0cmFjdG9yIHVzaW5nIE5vZGUgbmV0d29ya1xuICAgKiBAcGFyYW0gaW5pdGlhbEJsb2NrXG4gICAqL1xuICBwcml2YXRlIGluaXRpYWxpemVXaXRoTm9kZSA9IGFzeW5jIChpbml0aWFsQmxvY2s6IEJsb2NrSW5mbykgPT4ge1xuICAgIGNvbnN0IHR4Q291bnRCZWZvcmVJbml0ID0gYXdhaXQgdGhpcy5nZXRUb3RhbFR4Q291bnQoKTtcbiAgICBhd2FpdCB0aGlzLmluaXRXaXRoUmV0cmlhbChhc3luYyAoKSA9PiB7XG4gICAgICAvLyBSZXBlYXQgdGhlIHdob2xlIHByb2Nlc3MgdHdpY2UgdG8gY292ZXIgYWxsIHNwZW50IGJveGVzXG4gICAgICAvLyBBZnRlciByb3VuZCAxIGFsbCBib3hlcyBoYXZlIGJlZW4gc2F2ZWQgYW5kIHByb2Nlc3NlZCBvbmNlXG4gICAgICAvLyBBZnRlciByb3VuZCAyIHNwZW5kaW5nIGluZm9ybWF0aW9uIG9mIGFsbCBzdG9yZWQgYm94ZXMgYXJlIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5XG4gICAgICBmb3IgKGxldCByb3VuZCA9IDA7IHJvdW5kIDw9IDE7IHJvdW5kKyspIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYFN0YXJ0aW5nIHJvdW5kICR7cm91bmR9IG9mIGluaXRpYWxpemF0aW9uYCk7XG4gICAgICAgIGxldCBvZmZzZXQgPSAwLFxuICAgICAgICAgIHRvdGFsID0gMTtcbiAgICAgICAgd2hpbGUgKG9mZnNldCA8IHRvdGFsKSB7XG4gICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCAoXG4gICAgICAgICAgICB0aGlzLm5ldHdvcmsgYXMgTm9kZU5ldHdvcmtcbiAgICAgICAgICApLmdldEFkZHJlc3NUcmFuc2FjdGlvbnNXaXRoT2Zmc2V0TGltaXQoXG4gICAgICAgICAgICB0aGlzLmFkZHJlc3MsXG4gICAgICAgICAgICBvZmZzZXQsXG4gICAgICAgICAgICBBUElfTElNSVRcbiAgICAgICAgICApO1xuICAgICAgICAgIHRvdGFsID0gcmVzcG9uc2UudG90YWw7XG4gICAgICAgICAgY29uc3QgdHhzID0gcmVzcG9uc2UuaXRlbXMuZmlsdGVyKFxuICAgICAgICAgICAgKHR4KSA9PiB0eC5pbmNsdXNpb25IZWlnaHQgPD0gaW5pdGlhbEJsb2NrLmhlaWdodFxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICAgICBgRm91bmQgJHt0eHMubGVuZ3RofSB0cmFuc2FjdGlvbnMgYmVsb3cgdGhlIGluaXRpYWwgaGVpZ2h0IHdpdGggb2Zmc2V0ICR7b2Zmc2V0fSBhbmQgdG90YWwgbnVtYmVyIG9mIHRyYW5zYWN0aW9ucyAke3RvdGFsfWBcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmICh0eHMubGVuZ3RoID4gMCkgYXdhaXQgdGhpcy5wcm9jZXNzVHJhbnNhY3Rpb25CYXRjaCh0eHMpO1xuICAgICAgICAgIG9mZnNldCArPSBBUElfTElNSVQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCB0eENvdW50QWZ0ZXJJbml0ID0gYXdhaXQgdGhpcy5nZXRUb3RhbFR4Q291bnQoKTtcbiAgICBpZiAodHhDb3VudEFmdGVySW5pdCAhPSB0eENvdW50QmVmb3JlSW5pdCkge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICdUb3RhbCB0cmFuc2FjdGlvbiBjb3VudCBjaGFuZ2VkIGR1cmluZyBpbml0aWFsaXphdGlvbiBwaGFzZSwgdGhlIHN0b3JlZCBkYXRhIGlzIG5vdCB2YWxpZCdcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBQcm9jZXNzIGEgYmF0Y2ggb2YgdHJhbnNhY3Rpb25zXG4gICAqIGdyb3VwIHR4cyBpbnRvIGJsb2NrcyBhbmQgcHJvY2VzcyB0aGVtIHVzaW5nIGBwcm9jZXNzVHJhbnNhY3Rpb25zYFxuICAgKiBAcGFyYW0gdHhzXG4gICAqL1xuICBwcml2YXRlIHByb2Nlc3NUcmFuc2FjdGlvbkJhdGNoID0gYXN5bmMgKHR4czogQXJyYXk8RXh0ZW5kZWRUcmFuc2FjdGlvbj4pID0+IHtcbiAgICB0eHMgPSBzb3J0QnkodHhzLCAodHgpID0+IHR4LmluY2x1c2lvbkhlaWdodCk7XG4gICAgY29uc3QgZ3JvdXBlZFR4cyA9IGdyb3VwQnkodHhzLCAodHgpID0+IHR4LmJsb2NrSWQpO1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgYFRoZSB0cmFuc2FjdGlvbiBiYXRjaCBncm91cGVkIHRvICR7XG4gICAgICAgIE9iamVjdC5rZXlzKGdyb3VwZWRUeHMpLmxlbmd0aFxuICAgICAgfSBibG9ja3NgXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGJsb2NrSWQgaW4gZ3JvdXBlZFR4cykge1xuICAgICAgY29uc3QgYmxvY2tUeHMgPSBncm91cGVkVHhzW2Jsb2NrSWRdO1xuICAgICAgY29uc3QgYmxvY2sgPSB7IGhhc2g6IGJsb2NrSWQsIGhlaWdodDogYmxvY2tUeHNbMF0uaW5jbHVzaW9uSGVpZ2h0IH07XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYFByb2Nlc3NpbmcgdHJhbnNhY3Rpb25zIGF0IGhlaWdodCAke2Jsb2NrVHhzWzBdLmluY2x1c2lvbkhlaWdodH1gXG4gICAgICApO1xuICAgICAgYXdhaXQgdGhpcy5wcm9jZXNzVHJhbnNhY3Rpb25zKGJsb2NrVHhzLCBibG9jayk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSBleHRyYWN0b3Igd2l0aCByZXRyaWFsIG9uIGFueSB1bmV4cGVjdGVkIHByb2JsZW1cbiAgICogaXRzIHRoZSBjb21tb24gcGFydCBvZiBpbml0aWFsaXplIHdpdGggTm9kZSBhbmQgRXhwbG9yZXIgbmV0d29ya1xuICAgKiBAcGFyYW0gam9iXG4gICAqL1xuICBwcml2YXRlIGluaXRXaXRoUmV0cmlhbCA9IGFzeW5jIChqb2I6ICgpID0+IFByb21pc2U8dm9pZD4pID0+IHtcbiAgICBsZXQgdHJpYWwgPSAxO1xuICAgIGlmICh0aGlzLmluaXRpYWxpemUpIHtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICBgSW5pdGlhbGl6aW5nICR7dGhpcy5nZXRJZCgpfSBzdGFydGVkLCByZW1vdmluZyBhbGwgZXhpc3RpbmcgZGF0YWBcbiAgICAgICk7XG4gICAgICBhd2FpdCB0aGlzLmFjdGlvbnMucmVtb3ZlQWxsRGF0YSh0aGlzLmdldElkKCkpO1xuICAgICAgd2hpbGUgKHRyaWFsIDw9IFJFVFJJQUxfQ09VTlQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBqb2IoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oXG4gICAgICAgICAgICBgSW5pdGlhbGl6YXRpb24gZm9yICR7dGhpcy5nZXRJZCgpfSBmYWlsZWQgd2l0aCBlcnJvciA6JHtlfWBcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmICh0cmlhbCA9PSBSRVRSSUFMX0NPVU5UKVxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgIGBJbml0aWFsaXphdGlvbiBmb3IgJHt0aGlzLmdldElkKCl9IGZhaWxlZCBhZnRlciAke1JFVFJJQUxfQ09VTlR9IHJldHJpYWxgXG4gICAgICAgICAgICApO1xuICAgICAgICAgIHRyaWFsICs9IDE7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuaW5mbyhcbiAgICAgICAgICAgIGBUcnlpbmcgYWdhaW4gdG8gaW5pdGlhbGl6ZSAke3RoaXMuZ2V0SWQoKX0gd2l0aCB0cmlhbCBzdGVwICR7dHJpYWx9YFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMubG9nZ2VyLmluZm8oXG4gICAgICAgIGBJbml0aWFsaXphdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IGZvciAke3RoaXMuZ2V0SWQoKX1gXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZ2dlci5pbmZvKGBJbml0aWFsaXphdGlvbiBmb3IgJHt0aGlzLmdldElkKCl9IGlzIHR1cm5lZCBvZmZgKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIGluaXRpYWxpemUgZXh0cmFjdG9yIGRhdGFiYXNlIHdpdGggZGF0YSBjcmVhdGVkIGJlbG93IHRoZSBpbml0aWFsIGhlaWdodFxuICAgKiBpZ25vcmUgaW5pdGlhbGl6YXRpb24gaWYgdGhpcyBmZWF0dXJlIGlzIG9mZlxuICAgKiB0cnkgdG8gZ2V0IGRhdGEgbXVsdGlwbGUgdGltZXMgdG8gcGFzcyBhY2NpZGVudGFsIG5ldHdvcmsgcHJvYmxlbXNcbiAgICogQHBhcmFtIGluaXRpYWxCbG9ja1xuICAgKi9cbiAgaW5pdGlhbGl6ZUJveGVzOiAoaW5pdGlhbEJsb2NrOiBCbG9ja0luZm8pID0+IFByb21pc2U8dm9pZD47XG59XG4iXX0=
163
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RJbml0aWFsaXphYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2VyZ28vaW5pdGlhbGl6YWJsZS9BYnN0cmFjdEluaXRpYWxpemFibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFNUMsT0FBTyxFQUVMLGVBQWUsR0FFaEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUdqRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBR3JELE1BQU0sT0FBZ0Isa0NBR3BCLFNBQVEscUJBQXFEO0lBQ25ELFVBQVUsQ0FBVTtJQUN0QixPQUFPLENBQVM7SUFNaEIsT0FBTyxDQUFnQztJQUUvQyxZQUNFLElBQXFCLEVBQ3JCLEdBQVcsRUFDWCxPQUFlLEVBQ2YsTUFBdUIsRUFDdkIsVUFBVSxHQUFHLElBQUk7UUFFakIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2QsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxJQUFJLElBQUksZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDeEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLFlBQXVCLEVBQUUsRUFBRTtnQkFDakQsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDbkQsQ0FBQyxD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TSxDQUFDLElBQUksQ0FDZCw4QkFBOEIsSUFBSSxDQUFDLEtBQUssRUFBRSxvQkFBb0IsS0FBSyxFQUFFLENBQ3RFLENBQUM7Z0JBQ0osQ0FBQztZQUNILENBQUM7WUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDZCw2Q0FBNkMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQzVELENBQUM7UUFDSixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLHNCQUFzQixJQUFJLENBQUMsS0FBSyxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDdkUsQ0FBQztJQUNILENBQUMsQ0FBQztJQUVGOzs7OztPQUtHO0lBQ0gsZUFBZSxDQUE2QztDQUM3RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0TG9nZ2VyIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9hYnN0cmFjdC1sb2dnZXInO1xuaW1wb3J0IHsgZ3JvdXBCeSwgc29ydEJ5IH0gZnJvbSAnbG9kYXNoLWVzJztcblxuaW1wb3J0IHtcbiAgQWJzdHJhY3RCb3hEYXRhLFxuICBFcmdvTmV0d29ya1R5cGUsXG4gIEV4dGVuZGVkVHJhbnNhY3Rpb24sXG59IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQVBJX0xJTUlULCBSRVRSSUFMX0NPVU5UIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IEFic3RyYWN0RXJnb0V4dHJhY3RvciB9IGZyb20gJy4uL0Fic3RyYWN0RXJnb0V4dHJhY3Rvcic7XG5pbXBvcnQgeyBBYnN0cmFjdEluaXRpYWxpemFibGVFcmdvRXh0cmFjdG9yQWN0aW9uIH0gZnJvbSAnLi9BYnN0cmFjdEluaXRpYWxpemFibGVBY3Rpb24nO1xuaW1wb3J0IHsgQmxvY2tJbmZvIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBFeHBsb3Jlck5ldHdvcmsgfSBmcm9tICcuLi9uZXR3b3JrL0V4cGxvcmVyTmV0d29yayc7XG5pbXBvcnQgeyBOb2RlTmV0d29yayB9IGZyb20gJy4uL25ldHdvcmsvTm9kZU5ldHdvcmsnO1xuaW1wb3J0IHsgQWJzdHJhY3RFcmdvRXh0cmFjdG9yRW50aXR5IH0gZnJvbSAnLi4vQWJzdHJhY3RFcmdvRXh0cmFjdG9yRW50aXR5JztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0SW5pdGlhbGl6YWJsZUVyZ29FeHRyYWN0b3I8XG4gIEV4dHJhY3RlZERhdGEgZXh0ZW5kcyBBYnN0cmFjdEJveERhdGEsXG4gIEV4dHJhY3RvckVudGl0eSBleHRlbmRzIEFic3RyYWN0RXJnb0V4dHJhY3RvckVudGl0eVxuPiBleHRlbmRzIEFic3RyYWN0RXJnb0V4dHJhY3RvcjxFeHRyYWN0ZWREYXRhLCBFeHRyYWN0b3JFbnRpdHk+IHtcbiAgcHJvdGVjdGVkIGluaXRpYWxpemU6IGJvb2xlYW47XG4gIHByaXZhdGUgYWRkcmVzczogc3RyaW5nO1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgYWN0aW9uczogQWJzdHJhY3RJbml0aWFsaXphYmxlRXJnb0V4dHJhY3RvckFjdGlvbjxcbiAgICBFeHRyYWN0ZWREYXRhLFxuICAgIEV4dHJhY3RvckVudGl0eVxuICA+O1xuXG4gIHByaXZhdGUgbmV0d29yazogRXhwbG9yZXJOZXR3b3JrIHwgTm9kZU5ldHdvcms7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgdHlwZTogRXJnb05ldHdvcmtUeXBlLFxuICAgIHVybDogc3RyaW5nLFxuICAgIGFkZHJlc3M6IHN0cmluZyxcbiAgICBsb2dnZXI/OiBBYnN0cmFjdExvZ2dlcixcbiAgICBpbml0aWFsaXplID0gdHJ1ZVxuICApIHtcbiAgICBzdXBlcihsb2dnZXIpO1xuICAgIHRoaXMuYWRkcmVzcyA9IGFkZHJlc3M7XG4gICAgdGhpcy5pbml0aWFsaXplID0gaW5pdGlhbGl6ZTtcbiAgICBpZiAodHlwZSA9PSBFcmdvTmV0d29ya1R5cGUuRXhwbG9yZXIpIHtcbiAgICAgIHRoaXMubmV0d29yayA9IG5ldyBFeHBsb3Jlck5ldHdvcmsodXJsKTtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUJveGVzID0gKGluaXRpYWxCbG9jazogQmxvY2tJbmZvKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmluaXRpYWxpemVXaXRoRXhwbG9yZXIoaW5pdGlhbEJsb2NrKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmICh0eXBlID09IEVyZ29OZXR3b3JrVHlwZS5Ob2RlKSB7XG4gICAgICB0aGlzLm5ldHdvcmsgPSBuZXcgTm9kZU5ldHdvcmsodXJsKTtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUJveGVzID0gKGluaXRpYWxCbG9jazogQmxvY2tJbmZvKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmluaXRpYWxpemVXaXRoTm9kZShpbml0aWFsQmxvY2spO1xuICAgICAgfTtcbiAgICB9IGVsc2UgdGhyb3cgbmV3IEVycm9yKGBOZXR3b3JrIHR5cGUgJHt0eXBlfSBpcyBub3Qgc3VwcG9ydGVkYCk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBleHRyYWN0b3IgdXNpbmcgRXhwbG9yZXIgbmV0d29ya1xuICAgKiBAcGFyYW0gaW5pdGlhbEJsb2NrXG4gICAqL1xuICBwcml2YXRlIGluaXRpYWxpemVXaXRoRXhwbG9yZXIgPSBhc3luYyAoaW5pdGlhbEJsb2NrOiBCbG9ja0luZm8pID0+IHtcbiAgICBjb25zdCBleHBsb3Jlck5ldHdvcmsgPSB0aGlzLm5ldHdvcmsgYXMgRXhwbG9yZXJOZXR3b3JrO1xuICAgIGxldCBmcm9tSGVpZ2h0ID0gMCxcbiAgICAgIHRvSGVpZ2h0ID0gaW5pdGlhbEJsb2NrLmhlaWdodDtcbiAgICBhd2FpdCB0aGlzLmluaXRXaXRoUmV0cmlhbChhc3luYyAoKSA9PiB7XG4gICAgICB3aGlsZSAoZnJvbUhlaWdodCA8IHRvSGVpZ2h0KSB7XG4gICAgICAgIGxldCB0eHM6IEFycmF5PEV4dGVuZGVkVHJhbnNhY3Rpb24+O1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc3RhbnQtY29uZGl0aW9uXG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgdHhzID0gYXdhaXQgZXhwbG9yZXJOZXR3b3JrLmdldEFkZHJlc3NUcmFuc2FjdGlvbnNXaXRoSGVpZ2h0KFxuICAgICAgICAgICAgdGhpcy5hZGRyZXNzLFxuICAgICAgICAgICAgZnJvbUhlaWdodCxcbiAgICAgICAgICAgIHRvSGVpZ2h0XG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICAgIGBGb3VuZCAke3R4cy5sZW5ndGh9IHRyYW5zYWN0aW9ucyBmb3IgdGhlIGFkZHJlc3MgZnJvbSBoZWlnaHQgJHtmcm9tSGVpZ2h0fSB0byBoZWlnaHQgJHt0b0hlaWdodH1gXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAodHhzLmxlbmd0aCA8IEFQSV9MSU1JVCB8fCBmcm9tSGVpZ2h0ID09PSB0b0hlaWdodCkge1xuICAgICAgICAgICAgYnJlYWs7IC8vIEV4aXQgbG9vcCBpZiB3ZSBoYXZlIGZld2VyIHRyYW5zYWN0aW9ucyB0aGFuIHRoZSBsaW1pdCBvciBpZiB0aGUgcmFuZ2UgaXMgcmVkdWNlZCB0byBhIHNpbmdsZSBoZWlnaHRcbiAgICAgICAgICB9XG4gICAgICAgICAgdG9IZWlnaHQgPSBNYXRoLmZsb29yKCh0b0hlaWdodCAtIGZyb21IZWlnaHQpIC8gMikgKyBmcm9tSGVpZ2h0O1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICAgYExpbWl0aW5nIHRoZSBxdWVyeSBoZWlnaHQgcmFuZ2UgdG8gWyR7ZnJvbUhlaWdodH0sICR7dG9IZWlnaHR9XWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eHMubGVuZ3RoIDwgQVBJX0xJTUlUKSB7XG4gICAgICAgICAgaWYgKHR4cy5sZW5ndGggPiAwKSBhd2FpdCB0aGlzLnByb2Nlc3NUcmFuc2FjdGlvbkJhdGNoKHR4cyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICAgICBgQmxvY2sgYXQgaGVpZ2h0ICR7ZnJvbUhlaWdodH0gaGFzIG1vcmUgdGhhbiAob3IgZXF1YWwpICR7QVBJX0xJTUlUfSByZWxldmFudCB0eHMsIHByb2Nlc3NpbmcgYWxsIHR4cyBpbiB0aGUgYmxvY2tgXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBibG9ja0lkID0gYXdhaXQgZXhwbG9yZXJOZXR3b3JrLmdldEJsb2NrSWRBdEhlaWdodChmcm9tSGVpZ2h0KTtcbiAgICAgICAgICBjb25zdCBibG9ja1R4cyA9IGF3YWl0IGV4cGxvcmVyTmV0d29yay5nZXRCbG9ja1R4cyhibG9ja0lkKTtcbiAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICAgIGBGb3VuZCAke2Jsb2NrVHhzLmxlbmd0aH0gdHJhbnNhY3Rpb25zIGF0IGhlaWdodCAke2Zyb21IZWlnaHR9YFxuICAgICAgICAgICk7XG4gICAgICAgICAgYXdhaXQgdGhpcy5wcm9jZXNzVHJhbnNhY3Rpb25zKGJsb2NrVHhzLCB7XG4gICAgICAgICAgICBoYXNoOiBibG9ja0lkLFxuICAgICAgICAgICAgaGVpZ2h0OiBmcm9tSGVpZ2h0LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZyb21IZWlnaHQgPSB0b0hlaWdodCArIDE7XG4gICAgICAgIHRvSGVpZ2h0ID0gaW5pdGlhbEJsb2NrLmhlaWdodDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICAvKipcbiAgICogR2V0IHRoZSB0b3RhbCB0eCBjb3VudCBmcm9tIE5vZGUgbmV0d29ya1xuICAgKiBAcmV0dXJucyB0b3RhbCB0eCBjb3VudCBvZiB0aGUgYWRkcmVzc1xuICAgKi9cbiAgcHJpdmF0ZSBnZXRUb3RhbFR4Q291bnQgPSBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCAoXG4gICAgICB0aGlzLm5ldHdvcmsgYXMgTm9kZU5ldHdvcmtcbiAgICApLmdldEFkZHJlc3NUcmFuc2FjdGlvbnNXaXRoT2Zmc2V0TGltaXQodGhpcy5hZGRyZXNzLCAwLCAwKTtcbiAgICByZXR1cm4gcmVzcG9uc2UudG90YWw7XG4gIH07XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgZXh0cmFjdG9yIHVzaW5nIE5vZGUgbmV0d29ya1xuICAgKiBAcGFyYW0gaW5pdGlhbEJsb2NrXG4gICAqL1xuICBwcml2YXRlIGluaXRpYWxpemVXaXRoTm9kZSA9IGFzeW5jIChpbml0aWFsQmxvY2s6IEJsb2NrSW5mbykgPT4ge1xuICAgIGNvbnN0IHR4Q291bnRCZWZvcmVJbml0ID0gYXdhaXQgdGhpcy5nZXRUb3RhbFR4Q291bnQoKTtcbiAgICBsZXQgb2Zmc2V0ID0gMCxcbiAgICAgIHRvdGFsID0gMSxcbiAgICAgIHJvdW5kID0gMTtcbiAgICBhd2FpdCB0aGlzLmluaXRXaXRoUmV0cmlhbChhc3luYyAoKSA9PiB7XG4gICAgICAvLyBSZXBlYXQgdGhlIHdob2xlIHByb2Nlc3MgdHdpY2UgdG8gY292ZXIgYWxsIHNwZW50IGJveGVzXG4gICAgICAvLyBBZnRlciByb3VuZCAxIGFsbCBib3hlcyBoYXZlIGJlZW4gc2F2ZWQgYW5kIHByb2Nlc3NlZCBvbmNlXG4gICAgICAvLyBBZnRlciByb3VuZCAyIHNwZW5kaW5nIGluZm9ybWF0aW9uIG9mIGFsbCBzdG9yZWQgYm94ZXMgYXJlIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5XG4gICAgICB3aGlsZSAocm91bmQgPD0gMikge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgU3RhcnRpbmcgcm91bmQgJHtyb3VuZH0gb2YgaW5pdGlhbGl6YXRpb25gKTtcbiAgICAgICAgd2hpbGUgKG9mZnNldCA8IHRvdGFsKSB7XG4gICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCAoXG4gICAgICAgICAgICB0aGlzLm5ldHdvcmsgYXMgTm9kZU5ldHdvcmtcbiAgICAgICAgICApLmdldEFkZHJlc3NUcmFuc2FjdGlvbnNXaXRoT2Zmc2V0TGltaXQoXG4gICAgICAgICAgICB0aGlzLmFkZHJlc3MsXG4gICAgICAgICAgICBvZmZzZXQsXG4gICAgICAgICAgICBBUElfTElNSVRcbiAgICAgICAgICApO1xuICAgICAgICAgIHRvdGFsID0gcmVzcG9uc2UudG90YWw7XG4gICAgICAgICAgY29uc3QgdHhzID0gcmVzcG9uc2UuaXRlbXMuZmlsdGVyKFxuICAgICAgICAgICAgKHR4KSA9PiB0eC5pbmNsdXNpb25IZWlnaHQgPD0gaW5pdGlhbEJsb2NrLmhlaWdodFxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICAgICBgRm91bmQgJHt0eHMubGVuZ3RofSB0cmFuc2FjdGlvbnMgYmVsb3cgdGhlIGluaXRpYWwgaGVpZ2h0IHdpdGggb2Zmc2V0ICR7b2Zmc2V0fSBhbmQgdG90YWwgbnVtYmVyIG9mIHRyYW5zYWN0aW9ucyAke3RvdGFsfWBcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmICh0eHMubGVuZ3RoID4gMCkgYXdhaXQgdGhpcy5wcm9jZXNzVHJhbnNhY3Rpb25CYXRjaCh0eHMpO1xuICAgICAgICAgIG9mZnNldCArPSBBUElfTElNSVQ7XG4gICAgICAgIH1cbiAgICAgICAgcm91bmQrKztcbiAgICAgICAgb2Zmc2V0ID0gMDsgLy8gbmV4dCByb3VuZCBpbml0aWFsIG9mZnNldFxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHR4Q291bnRBZnRlckluaXQgPSBhd2FpdCB0aGlzLmdldFRvdGFsVHhDb3VudCgpO1xuICAgIGlmICh0eENvdW50QWZ0ZXJJbml0ICE9IHR4Q291bnRCZWZvcmVJbml0KSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgJ1RvdGFsIHRyYW5zYWN0aW9uIGNvdW50IGNoYW5nZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uIHBoYXNlLCB0aGUgc3RvcmVkIGRhdGEgaXMgbm90IHZhbGlkJ1xuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIFByb2Nlc3MgYSBiYXRjaCBvZiB0cmFuc2FjdGlvbnNcbiAgICogZ3JvdXAgdHhzIGludG8gYmxvY2tzIGFuZCBwcm9jZXNzIHRoZW0gdXNpbmcgYHByb2Nlc3NUcmFuc2FjdGlvbnNgXG4gICAqIEBwYXJhbSB0eHNcbiAgICovXG4gIHByaXZhdGUgcHJvY2Vzc1RyYW5zYWN0aW9uQmF0Y2ggPSBhc3luYyAodHhzOiBBcnJheTxFeHRlbmRlZFRyYW5zYWN0aW9uPikgPT4ge1xuICAgIHR4cyA9IHNvcnRCeSh0eHMsICh0eCkgPT4gdHguaW5jbHVzaW9uSGVpZ2h0KTtcbiAgICBjb25zdCBncm91cGVkVHhzID0gZ3JvdXBCeSh0eHMsICh0eCkgPT4gdHguYmxvY2tJZCk7XG4gICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICBgVGhlIHRyYW5zYWN0aW9uIGJhdGNoIGdyb3VwZWQgdG8gJHtcbiAgICAgICAgT2JqZWN0LmtleXMoZ3JvdXBlZFR4cykubGVuZ3RoXG4gICAgICB9IGJsb2Nrc2BcbiAgICApO1xuICAgIGZvciAoY29uc3QgYmxvY2tJZCBpbiBncm91cGVkVHhzKSB7XG4gICAgICBjb25zdCBibG9ja1R4cyA9IGdyb3VwZWRUeHNbYmxvY2tJZF07XG4gICAgICBjb25zdCBibG9jayA9IHsgaGFzaDogYmxvY2tJZCwgaGVpZ2h0OiBibG9ja1R4c1swXS5pbmNsdXNpb25IZWlnaHQgfTtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICBgUHJvY2Vzc2luZyB0cmFuc2FjdGlvbnMgYXQgaGVpZ2h0ICR7YmxvY2tUeHNbMF0uaW5jbHVzaW9uSGVpZ2h0fWBcbiAgICAgICk7XG4gICAgICBjb25zdCBzdWNjZXNzID0gYXdhaXQgdGhpcy5wcm9jZXNzVHJhbnNhY3Rpb25zKGJsb2NrVHhzLCBibG9jayk7XG4gICAgICBpZiAoIXN1Y2Nlc3MpXG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgIGBQcm9jZXNzaW5nIHRyYW5zYWN0aW9ucyBmYWlsZWQgYXQgaGVpZ2h0ICR7YmxvY2tUeHNbMF0uaW5jbHVzaW9uSGVpZ2h0fWBcbiAgICAgICAgKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIGV4dHJhY3RvciB3aXRoIHJldHJpYWwgb24gYW55IHVuZXhwZWN0ZWQgcHJvYmxlbVxuICAgKiBpdHMgdGhlIGNvbW1vbiBwYXJ0IG9mIGluaXRpYWxpemUgd2l0aCBOb2RlIGFuZCBFeHBsb3JlciBuZXR3b3JrXG4gICAqIEBwYXJhbSBqb2JcbiAgICovXG4gIHByaXZhdGUgaW5pdFdpdGhSZXRyaWFsID0gYXN5bmMgKGpvYjogKCkgPT4gUHJvbWlzZTx2b2lkPikgPT4ge1xuICAgIGxldCB0cmlhbCA9IDE7XG4gICAgaWYgKHRoaXMuaW5pdGlhbGl6ZSkge1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgIGBJbml0aWFsaXppbmcgJHt0aGlzLmdldElkKCl9IHN0YXJ0ZWQsIHJlbW92aW5nIGFsbCBleGlzdGluZyBkYXRhYFxuICAgICAgKTtcbiAgICAgIGF3YWl0IHRoaXMuYWN0aW9ucy5yZW1vdmVBbGxEYXRhKHRoaXMuZ2V0SWQoKSk7XG4gICAgICB3aGlsZSAodHJpYWwgPD0gUkVUUklBTF9DT1VOVCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGpvYigpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIud2FybihcbiAgICAgICAgICAgIGBJbml0aWFsaXphdGlvbiBmb3IgJHt0aGlzLmdldElkKCl9IGZhaWxlZCB3aXRoIGVycm9yIDoke2V9YFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKHRyaWFsID09IFJFVFJJQUxfQ09VTlQpXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgYEluaXRpYWxpemF0aW9uIGZvciAke3RoaXMuZ2V0SWQoKX0gZmFpbGVkIGFmdGVyICR7UkVUUklBTF9DT1VOVH0gcmV0cmlhbGBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgdHJpYWwgKz0gMTtcbiAgICAgICAgICB0aGlzLmxvZ2dlci5pbmZvKFxuICAgICAgICAgICAgYFRyeWluZyBhZ2FpbiB0byBpbml0aWFsaXplICR7dGhpcy5nZXRJZCgpfSB3aXRoIHRyaWFsIHN0ZXAgJHt0cmlhbH1gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5sb2dnZXIuaW5mbyhcbiAgICAgICAgYEluaXRpYWxpemF0aW9uIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgZm9yICR7dGhpcy5nZXRJZCgpfWBcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9nZ2VyLmluZm8oYEluaXRpYWxpemF0aW9uIGZvciAke3RoaXMuZ2V0SWQoKX0gaXMgdHVybmVkIG9mZmApO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogaW5pdGlhbGl6ZSBleHRyYWN0b3IgZGF0YWJhc2Ugd2l0aCBkYXRhIGNyZWF0ZWQgYmVsb3cgdGhlIGluaXRpYWwgaGVpZ2h0XG4gICAqIGlnbm9yZSBpbml0aWFsaXphdGlvbiBpZiB0aGlzIGZlYXR1cmUgaXMgb2ZmXG4gICAqIHRyeSB0byBnZXQgZGF0YSBtdWx0aXBsZSB0aW1lcyB0byBwYXNzIGFjY2lkZW50YWwgbmV0d29yayBwcm9ibGVtc1xuICAgKiBAcGFyYW0gaW5pdGlhbEJsb2NrXG4gICAqL1xuICBpbml0aWFsaXplQm94ZXM6IChpbml0aWFsQmxvY2s6IEJsb2NrSW5mbykgPT4gUHJvbWlzZTx2b2lkPjtcbn1cbiJdfQ==
@@ -1,9 +1,14 @@
1
+ import { DataSource, EntityTarget } from 'typeorm';
2
+ import { AbstractLogger } from '@rosen-bridge/abstract-logger';
1
3
  import { AbstractErgoExtractorAction } from '../AbstractErgoExtractorAction';
2
- export declare abstract class AbstractInitializableErgoExtractorAction<ExtractedData> extends AbstractErgoExtractorAction<ExtractedData> {
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);
3
8
  /**
4
9
  * remove all existing data for the extractor
5
10
  * @param extractorId
6
11
  */
7
- abstract removeAllData: (extractorId: string) => Promise<void>;
12
+ removeAllData: (extractorId: string) => Promise<void>;
8
13
  }
9
14
  //# sourceMappingURL=AbstractInitializableAction.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AbstractInitializableAction.d.ts","sourceRoot":"","sources":["../../../lib/ergo/initializable/AbstractInitializableAction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,gCAAgC,CAAC;AAE7E,8BAAsB,wCAAwC,CAC5D,aAAa,CACb,SAAQ,2BAA2B,CAAC,aAAa,CAAC;IAClD;;;OAGG;IACH,QAAQ,CAAC,aAAa,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAChE"}
1
+ {"version":3,"file":"AbstractInitializableAction.d.ts","sourceRoot":"","sources":["../../../lib/ergo/initializable/AbstractInitializableAction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,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,gBAAuB,MAAM,mBAExC;CACH"}
@@ -1,4 +1,14 @@
1
1
  import { AbstractErgoExtractorAction } from '../AbstractErgoExtractorAction';
2
2
  export class AbstractInitializableErgoExtractorAction extends AbstractErgoExtractorAction {
3
+ constructor(dataSource, repo, logger) {
4
+ super(dataSource, repo, logger);
5
+ }
6
+ /**
7
+ * remove all existing data for the extractor
8
+ * @param extractorId
9
+ */
10
+ removeAllData = async (extractorId) => {
11
+ await this.repository.delete({ extractor: extractorId });
12
+ };
3
13
  }
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RJbml0aWFsaXphYmxlQWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2VyZ28vaW5pdGlhbGl6YWJsZS9BYnN0cmFjdEluaXRpYWxpemFibGVBY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFN0UsTUFBTSxPQUFnQix3Q0FFcEIsU0FBUSwyQkFBMEM7Q0FNbkQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdEVyZ29FeHRyYWN0b3JBY3Rpb24gfSBmcm9tICcuLi9BYnN0cmFjdEVyZ29FeHRyYWN0b3JBY3Rpb24nO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RJbml0aWFsaXphYmxlRXJnb0V4dHJhY3RvckFjdGlvbjxcbiAgRXh0cmFjdGVkRGF0YVxuPiBleHRlbmRzIEFic3RyYWN0RXJnb0V4dHJhY3RvckFjdGlvbjxFeHRyYWN0ZWREYXRhPiB7XG4gIC8qKlxuICAgKiByZW1vdmUgYWxsIGV4aXN0aW5nIGRhdGEgZm9yIHRoZSBleHRyYWN0b3JcbiAgICogQHBhcmFtIGV4dHJhY3RvcklkXG4gICAqL1xuICBhYnN0cmFjdCByZW1vdmVBbGxEYXRhOiAoZXh0cmFjdG9ySWQ6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbn1cbiJdfQ==
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RJbml0aWFsaXphYmxlQWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2VyZ28vaW5pdGlhbGl6YWJsZS9BYnN0cmFjdEluaXRpYWxpemFibGVBY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFJN0UsTUFBTSxPQUFnQix3Q0FHcEIsU0FBUSwyQkFBMkQ7SUFDbkUsWUFDRSxVQUFzQixFQUN0QixJQUFtQyxFQUNuQyxNQUF1QjtRQUV2QixLQUFLLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsYUFBYSxHQUFHLEtBQUssRUFBRSxXQUFtQixFQUFFLEVBQUU7UUFDNUMsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQVMsQ0FBQyxDQUFDO0lBQ2xFLENBQUMsQ0FBQztDQUNIIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0YVNvdXJjZSwgRW50aXR5VGFyZ2V0IH0gZnJvbSAndHlwZW9ybSc7XG5pbXBvcnQgeyBBYnN0cmFjdExvZ2dlciB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvYWJzdHJhY3QtbG9nZ2VyJztcblxuaW1wb3J0IHsgQWJzdHJhY3RFcmdvRXh0cmFjdG9yQWN0aW9uIH0gZnJvbSAnLi4vQWJzdHJhY3RFcmdvRXh0cmFjdG9yQWN0aW9uJztcbmltcG9ydCB7IEFic3RyYWN0Qm94RGF0YSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQWJzdHJhY3RFcmdvRXh0cmFjdG9yRW50aXR5IH0gZnJvbSAnLi4vQWJzdHJhY3RFcmdvRXh0cmFjdG9yRW50aXR5JztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0SW5pdGlhbGl6YWJsZUVyZ29FeHRyYWN0b3JBY3Rpb248XG4gIEV4dHJhY3RlZERhdGEgZXh0ZW5kcyBBYnN0cmFjdEJveERhdGEsXG4gIEV4dHJhY3RvckVudGl0eSBleHRlbmRzIEFic3RyYWN0RXJnb0V4dHJhY3RvckVudGl0eVxuPiBleHRlbmRzIEFic3RyYWN0RXJnb0V4dHJhY3RvckFjdGlvbjxFeHRyYWN0ZWREYXRhLCBFeHRyYWN0b3JFbnRpdHk+IHtcbiAgY29uc3RydWN0b3IoXG4gICAgZGF0YVNvdXJjZTogRGF0YVNvdXJjZSxcbiAgICByZXBvOiBFbnRpdHlUYXJnZXQ8RXh0cmFjdG9yRW50aXR5PixcbiAgICBsb2dnZXI/OiBBYnN0cmFjdExvZ2dlclxuICApIHtcbiAgICBzdXBlcihkYXRhU291cmNlLCByZXBvLCBsb2dnZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIHJlbW92ZSBhbGwgZXhpc3RpbmcgZGF0YSBmb3IgdGhlIGV4dHJhY3RvclxuICAgKiBAcGFyYW0gZXh0cmFjdG9ySWRcbiAgICovXG4gIHJlbW92ZUFsbERhdGEgPSBhc3luYyAoZXh0cmFjdG9ySWQ6IHN0cmluZykgPT4ge1xuICAgIGF3YWl0IHRoaXMucmVwb3NpdG9yeS5kZWxldGUoeyBleHRyYWN0b3I6IGV4dHJhY3RvcklkIH0gYXMgYW55KTtcbiAgfTtcbn1cbiJdfQ==
@@ -53,14 +53,28 @@ export interface SpendInfo {
53
53
  boxId: string;
54
54
  txId: string;
55
55
  index: number;
56
+ extras?: string[];
56
57
  }
57
- export interface ErgoExtractedData {
58
+ export interface AbstractBoxData {
59
+ boxId: string;
60
+ serialized: string;
61
+ }
62
+ export declare enum CallbackType {
63
+ Insert = "insert",
64
+ Update = "update",
65
+ Spend = "spend",
66
+ Delete = "delete"
67
+ }
68
+ export interface BoxInfo {
58
69
  boxId: string;
59
- height: number;
60
- blockId: string;
61
- spendBlock?: string;
62
- spendHeight?: number;
63
- spendTxId?: string;
64
- spendIndex?: number;
65
70
  }
71
+ export type CallbackDataMap<ExtractedData extends AbstractBoxData> = {
72
+ [CallbackType.Update]: BoxInfo[];
73
+ [CallbackType.Insert]: ExtractedData[];
74
+ [CallbackType.Delete]: ExtractedData[];
75
+ [CallbackType.Spend]: BoxInfo[];
76
+ };
77
+ export type CallbackMap<ExtractedData extends AbstractBoxData> = {
78
+ [K in CallbackType]: (data: CallbackDataMap<ExtractedData>[K]) => void;
79
+ };
66
80
  //# sourceMappingURL=interfaces.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../lib/ergo/interfaces.ts"],"names":[],"mappings":"AAAA,oBAAY,eAAe;IACzB,QAAQ,aAAa;IACrB,IAAI,SAAS;CACd;AAED,MAAM,MAAM,QAAQ,GAAG;IACrB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,KAAK,GAAG;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IACtB,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,WAAW,OAAQ,SAAQ,SAAS;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IACxB,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IAC7B,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,WAAW,mBAAoB,SAAQ,WAAW;IACtD,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB"}
1
+ {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../lib/ergo/interfaces.ts"],"names":[],"mappings":"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"}
@@ -3,4 +3,11 @@ export var ErgoNetworkType;
3
3
  ErgoNetworkType["Explorer"] = "explorer";
4
4
  ErgoNetworkType["Node"] = "node";
5
5
  })(ErgoNetworkType || (ErgoNetworkType = {}));
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9lcmdvL2ludGVyZmFjZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFOLElBQVksZUFHWDtBQUhELFdBQVksZUFBZTtJQUN6Qix3Q0FBcUIsQ0FBQTtJQUNyQixnQ0FBYSxDQUFBO0FBQ2YsQ0FBQyxFQUhXLGVBQWUsS0FBZixlQUFlLFFBRzFCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGVudW0gRXJnb05ldHdvcmtUeXBlIHtcbiAgRXhwbG9yZXIgPSAnZXhwbG9yZXInLFxuICBOb2RlID0gJ25vZGUnLFxufVxuXG5leHBvcnQgdHlwZSBJbnB1dEJveCA9IHtcbiAgYm94SWQ6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIERhdGFJbnB1dCA9IHtcbiAgYm94SWQ6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEFzc2V0ID0ge1xuICB0b2tlbklkOiBzdHJpbmc7XG4gIGFtb3VudDogYmlnaW50O1xufTtcblxuZXhwb3J0IHR5cGUgQWRkaXRpb25hbFJlZ2lzdGVycyA9IHtcbiAgUjQ/OiBzdHJpbmc7XG4gIFI1Pzogc3RyaW5nO1xuICBSNj86IHN0cmluZztcbiAgUjc/OiBzdHJpbmc7XG4gIFI4Pzogc3RyaW5nO1xuICBSOT86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIE91dHB1dEJveCA9IHtcbiAgYm94SWQ6IHN0cmluZztcbiAgdmFsdWU6IGJpZ2ludDtcbiAgZXJnb1RyZWU6IHN0cmluZztcbiAgY3JlYXRpb25IZWlnaHQ6IG51bWJlcjtcbiAgYXNzZXRzPzogQXJyYXk8QXNzZXQ+O1xuICBhZGRpdGlvbmFsUmVnaXN0ZXJzPzogQWRkaXRpb25hbFJlZ2lzdGVycztcbiAgdHJhbnNhY3Rpb25JZDogc3RyaW5nO1xuICBpbmRleDogYmlnaW50IHwgbnVtYmVyO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBFcmdvQm94IGV4dGVuZHMgT3V0cHV0Qm94IHtcbiAgYmxvY2tJZDogc3RyaW5nO1xuICBpbmNsdXNpb25IZWlnaHQ6IG51bWJlcjtcbiAgc3BlbnRCbG9ja0lkPzogc3RyaW5nO1xuICBzcGVudEhlaWdodD86IG51bWJlcjtcbiAgc3BlbnRUcmFuc2FjdGlvbklkPzogc3RyaW5nO1xuICBzcGVudEluZGV4PzogbnVtYmVyO1xufVxuXG5leHBvcnQgdHlwZSBUcmFuc2FjdGlvbiA9IHtcbiAgaWQ6IHN0cmluZztcbiAgaW5wdXRzOiBBcnJheTxJbnB1dEJveD47XG4gIGRhdGFJbnB1dHM6IEFycmF5PERhdGFJbnB1dD47XG4gIG91dHB1dHM6IEFycmF5PE91dHB1dEJveD47XG4gIHNpemU/OiBiaWdpbnQ7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIEV4dGVuZGVkVHJhbnNhY3Rpb24gZXh0ZW5kcyBUcmFuc2FjdGlvbiB7XG4gIGluY2x1c2lvbkhlaWdodDogbnVtYmVyO1xuICBibG9ja0lkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3BlbmRJbmZvIHtcbiAgYm94SWQ6IHN0cmluZztcbiAgdHhJZDogc3RyaW5nO1xuICBpbmRleDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVyZ29FeHRyYWN0ZWREYXRhIHtcbiAgYm94SWQ6IHN0cmluZztcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGJsb2NrSWQ6IHN0cmluZztcbiAgc3BlbmRCbG9jaz86IHN0cmluZztcbiAgc3BlbmRIZWlnaHQ/OiBudW1iZXI7XG4gIHNwZW5kVHhJZD86IHN0cmluZztcbiAgc3BlbmRJbmRleD86IG51bWJlcjtcbn1cbiJdfQ==
6
+ export var CallbackType;
7
+ (function (CallbackType) {
8
+ CallbackType["Insert"] = "insert";
9
+ CallbackType["Update"] = "update";
10
+ CallbackType["Spend"] = "spend";
11
+ CallbackType["Delete"] = "delete";
12
+ })(CallbackType || (CallbackType = {}));
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9lcmdvL2ludGVyZmFjZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFOLElBQVksZUFHWDtBQUhELFdBQVksZUFBZTtJQUN6Qix3Q0FBcUIsQ0FBQTtJQUNyQixnQ0FBYSxDQUFBO0FBQ2YsQ0FBQyxFQUhXLGVBQWUsS0FBZixlQUFlLFFBRzFCO0FBcUVELE1BQU0sQ0FBTixJQUFZLFlBS1g7QUFMRCxXQUFZLFlBQVk7SUFDdEIsaUNBQWlCLENBQUE7SUFDakIsaUNBQWlCLENBQUE7SUFDakIsK0JBQWUsQ0FBQTtJQUNmLGlDQUFpQixDQUFBO0FBQ25CLENBQUMsRUFMVyxZQUFZLEtBQVosWUFBWSxRQUt2QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBlbnVtIEVyZ29OZXR3b3JrVHlwZSB7XG4gIEV4cGxvcmVyID0gJ2V4cGxvcmVyJyxcbiAgTm9kZSA9ICdub2RlJyxcbn1cblxuZXhwb3J0IHR5cGUgSW5wdXRCb3ggPSB7XG4gIGJveElkOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBEYXRhSW5wdXQgPSB7XG4gIGJveElkOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBBc3NldCA9IHtcbiAgdG9rZW5JZDogc3RyaW5nO1xuICBhbW91bnQ6IGJpZ2ludDtcbn07XG5cbmV4cG9ydCB0eXBlIEFkZGl0aW9uYWxSZWdpc3RlcnMgPSB7XG4gIFI0Pzogc3RyaW5nO1xuICBSNT86IHN0cmluZztcbiAgUjY/OiBzdHJpbmc7XG4gIFI3Pzogc3RyaW5nO1xuICBSOD86IHN0cmluZztcbiAgUjk/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBPdXRwdXRCb3ggPSB7XG4gIGJveElkOiBzdHJpbmc7XG4gIHZhbHVlOiBiaWdpbnQ7XG4gIGVyZ29UcmVlOiBzdHJpbmc7XG4gIGNyZWF0aW9uSGVpZ2h0OiBudW1iZXI7XG4gIGFzc2V0cz86IEFycmF5PEFzc2V0PjtcbiAgYWRkaXRpb25hbFJlZ2lzdGVycz86IEFkZGl0aW9uYWxSZWdpc3RlcnM7XG4gIHRyYW5zYWN0aW9uSWQ6IHN0cmluZztcbiAgaW5kZXg6IGJpZ2ludCB8IG51bWJlcjtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXJnb0JveCBleHRlbmRzIE91dHB1dEJveCB7XG4gIGJsb2NrSWQ6IHN0cmluZztcbiAgaW5jbHVzaW9uSGVpZ2h0OiBudW1iZXI7XG4gIHNwZW50QmxvY2tJZD86IHN0cmluZztcbiAgc3BlbnRIZWlnaHQ/OiBudW1iZXI7XG4gIHNwZW50VHJhbnNhY3Rpb25JZD86IHN0cmluZztcbiAgc3BlbnRJbmRleD86IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgVHJhbnNhY3Rpb24gPSB7XG4gIGlkOiBzdHJpbmc7XG4gIGlucHV0czogQXJyYXk8SW5wdXRCb3g+O1xuICBkYXRhSW5wdXRzOiBBcnJheTxEYXRhSW5wdXQ+O1xuICBvdXRwdXRzOiBBcnJheTxPdXRwdXRCb3g+O1xuICBzaXplPzogYmlnaW50O1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBFeHRlbmRlZFRyYW5zYWN0aW9uIGV4dGVuZHMgVHJhbnNhY3Rpb24ge1xuICBpbmNsdXNpb25IZWlnaHQ6IG51bWJlcjtcbiAgYmxvY2tJZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNwZW5kSW5mbyB7XG4gIGJveElkOiBzdHJpbmc7XG4gIHR4SWQ6IHN0cmluZztcbiAgaW5kZXg6IG51bWJlcjtcbiAgZXh0cmFzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWJzdHJhY3RCb3hEYXRhIHtcbiAgYm94SWQ6IHN0cmluZztcbiAgc2VyaWFsaXplZDogc3RyaW5nO1xufVxuXG5leHBvcnQgZW51bSBDYWxsYmFja1R5cGUge1xuICBJbnNlcnQgPSAnaW5zZXJ0JyxcbiAgVXBkYXRlID0gJ3VwZGF0ZScsXG4gIFNwZW5kID0gJ3NwZW5kJyxcbiAgRGVsZXRlID0gJ2RlbGV0ZScsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQm94SW5mbyB7XG4gIGJveElkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIENhbGxiYWNrRGF0YU1hcDxFeHRyYWN0ZWREYXRhIGV4dGVuZHMgQWJzdHJhY3RCb3hEYXRhPiA9IHtcbiAgW0NhbGxiYWNrVHlwZS5VcGRhdGVdOiBCb3hJbmZvW107XG4gIFtDYWxsYmFja1R5cGUuSW5zZXJ0XTogRXh0cmFjdGVkRGF0YVtdO1xuICBbQ2FsbGJhY2tUeXBlLkRlbGV0ZV06IEV4dHJhY3RlZERhdGFbXTtcbiAgW0NhbGxiYWNrVHlwZS5TcGVuZF06IEJveEluZm9bXTtcbn07XG5cbmV4cG9ydCB0eXBlIENhbGxiYWNrTWFwPEV4dHJhY3RlZERhdGEgZXh0ZW5kcyBBYnN0cmFjdEJveERhdGE+ID0ge1xuICBbSyBpbiBDYWxsYmFja1R5cGVdOiAoZGF0YTogQ2FsbGJhY2tEYXRhTWFwPEV4dHJhY3RlZERhdGE+W0tdKSA9PiB2b2lkO1xufTtcbiJdfQ==
@@ -1,6 +1,7 @@
1
- import { DataSource } from 'typeorm';
2
1
  import { AbstractLogger, DummyLogger } from '@rosen-bridge/abstract-logger';
3
2
  import JsonBigInt from '@rosen-bridge/json-bigint';
3
+ import { Mutex } from 'await-semaphore';
4
+ import { v4 as uuidv4 } from 'uuid';
4
5
 
5
6
  import { AbstractExtractor } from '../AbstractExtractor';
6
7
  import { AbstractErgoExtractorAction } from './AbstractErgoExtractorAction';
@@ -8,34 +9,99 @@ import { BlockInfo } from '../interfaces';
8
9
  import {
9
10
  Transaction,
10
11
  OutputBox,
11
- ErgoExtractedData,
12
+ AbstractBoxData,
12
13
  SpendInfo,
14
+ CallbackType,
15
+ CallbackMap,
16
+ CallbackDataMap,
13
17
  } from './interfaces';
18
+ import { AbstractErgoExtractorEntity } from './AbstractErgoExtractorEntity';
14
19
 
15
20
  export abstract class AbstractErgoExtractor<
16
- ExtractedData extends ErgoExtractedData
21
+ ExtractedData extends AbstractBoxData,
22
+ ExtractorEntity extends AbstractErgoExtractorEntity
17
23
  > extends AbstractExtractor<Transaction> {
18
- protected readonly dataSource: DataSource;
19
- protected abstract actions: AbstractErgoExtractorAction<ExtractedData>;
24
+ protected abstract actions: AbstractErgoExtractorAction<
25
+ ExtractedData,
26
+ ExtractorEntity
27
+ >;
20
28
  protected logger: AbstractLogger;
29
+ protected callbacks: {
30
+ [K in CallbackType]: Map<string, CallbackMap<ExtractedData>[K]>;
31
+ } = {
32
+ [CallbackType.Update]: new Map(),
33
+ [CallbackType.Insert]: new Map(),
34
+ [CallbackType.Delete]: new Map(),
35
+ [CallbackType.Spend]: new Map(),
36
+ };
37
+ private callbackMutex = new Mutex();
21
38
 
22
39
  constructor(logger = new DummyLogger()) {
23
40
  super();
24
41
  this.logger = logger;
25
42
  }
26
43
 
44
+ /**
45
+ * hook a new callback on a callback type
46
+ * @param type
47
+ * @param id
48
+ * @param callback
49
+ * @returns callback registered id
50
+ */
51
+ hook = async <T extends CallbackType>(
52
+ type: T,
53
+ callback: CallbackMap<ExtractedData>[T]
54
+ ): Promise<string> => {
55
+ const release = await this.callbackMutex.acquire();
56
+ const callbackMap = this.callbacks[type];
57
+ const id = uuidv4();
58
+ callbackMap.set(id, callback);
59
+ release();
60
+ return id;
61
+ };
62
+
63
+ /**
64
+ * unhook a callback on a type
65
+ * returns false if there is no registered callback with the id
66
+ * @param type
67
+ * @param id
68
+ * @returns success status
69
+ */
70
+ unhook = async (type: CallbackType, id: string): Promise<boolean> => {
71
+ const release = await this.callbackMutex.acquire();
72
+ const callbackMap = this.callbacks[type];
73
+ if (!callbackMap.has(id)) {
74
+ this.logger.warn(
75
+ `Callback with Id [${id}] is not registered for type [${type}].`
76
+ );
77
+ return false;
78
+ }
79
+ callbackMap.delete(id);
80
+ release();
81
+ return true;
82
+ };
83
+
84
+ /**
85
+ * trigger all callbacks registered on a specific type with the provided data
86
+ * @param type
87
+ * @param data
88
+ */
89
+ protected triggerCallbacks<T extends CallbackType>(
90
+ type: T,
91
+ data: CallbackDataMap<ExtractedData>[T]
92
+ ): void {
93
+ const callbackMap = this.callbacks[type];
94
+ callbackMap.forEach((callback) => {
95
+ callback(data);
96
+ });
97
+ }
98
+
27
99
  /**
28
100
  * extract box data to proper format (not including spending information)
29
101
  * @param box
30
- * @param blockId box inclusion block hash
31
- * @param height box inclusion block height
32
102
  * @return extracted data in proper format
33
103
  */
34
- abstract extractBoxData: (
35
- box: OutputBox,
36
- blockId: string,
37
- height: number
38
- ) => Omit<ExtractedData, 'spendBlock' | 'spendHeight'> | undefined;
104
+ abstract extractBoxData: (box: OutputBox) => ExtractedData | undefined;
39
105
 
40
106
  /**
41
107
  * check proper data format in the box
@@ -63,18 +129,14 @@ export abstract class AbstractErgoExtractor<
63
129
  continue;
64
130
  }
65
131
  this.logger.debug(`Trying to extract data from box ${output.boxId}`);
66
- const extractedData = this.extractBoxData(
67
- output,
68
- block.hash,
69
- block.height
70
- );
132
+ const extractedData = this.extractBoxData(output);
71
133
  if (extractedData) {
72
134
  this.logger.debug(
73
135
  `Extracted data ${JsonBigInt.stringify(extractedData)} from box ${
74
136
  output.boxId
75
137
  }`
76
138
  );
77
- boxes.push(extractedData as ExtractedData);
139
+ boxes.push(extractedData);
78
140
  }
79
141
  }
80
142
  let boxIndex = 1;
@@ -84,15 +146,33 @@ export abstract class AbstractErgoExtractor<
84
146
  }
85
147
  }
86
148
 
87
- if (boxes.length > 0) await this.actions.insertBoxes(boxes, this.getId());
88
- await this.actions.spendBoxes(spentInfos, block, this.getId());
149
+ if (boxes.length > 0) {
150
+ if (!(await this.actions.storeBoxes(boxes, block, this.getId()))) {
151
+ this.logger.warn(
152
+ `Data insertion failed for ${this.getId()} at the block ${
153
+ block.height
154
+ }`
155
+ );
156
+ return false;
157
+ }
158
+ this.triggerCallbacks(CallbackType.Insert, boxes);
159
+ }
160
+ const spentData = await this.actions.spendBoxes(
161
+ spentInfos,
162
+ block,
163
+ this.getId()
164
+ );
165
+ if (spentData.length > 0) {
166
+ this.triggerCallbacks(CallbackType.Spend, spentData);
167
+ }
89
168
  } catch (e) {
90
169
  this.logger.error(
91
- `Error in storing data in ${this.getId()} of the block ${block}: ${e}`
170
+ `Processing transactions failed for ${this.getId()} at the block ${
171
+ block.height
172
+ } with error: ${e}`
92
173
  );
93
174
  return false;
94
175
  }
95
-
96
176
  return true;
97
177
  };
98
178
 
@@ -101,6 +181,10 @@ export abstract class AbstractErgoExtractor<
101
181
  * @param hash block hash
102
182
  */
103
183
  forkBlock = async (hash: string): Promise<void> => {
104
- await this.actions.deleteBlockBoxes(hash, this.getId());
184
+ const result = await this.actions.deleteBlockBoxes(hash, this.getId());
185
+ if (result.deletedData.length > 0)
186
+ this.triggerCallbacks(CallbackType.Delete, result.deletedData);
187
+ if (result.updatedData.length > 0)
188
+ this.triggerCallbacks(CallbackType.Update, result.updatedData);
105
189
  };
106
190
  }