@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.
- package/CHANGELOG.md +20 -0
- package/dist/ergo/AbstractErgoExtractor.d.ts +31 -8
- package/dist/ergo/AbstractErgoExtractor.d.ts.map +1 -1
- package/dist/ergo/AbstractErgoExtractor.js +73 -8
- package/dist/ergo/AbstractErgoExtractorAction.d.ts +38 -10
- package/dist/ergo/AbstractErgoExtractorAction.d.ts.map +1 -1
- package/dist/ergo/AbstractErgoExtractorAction.js +134 -1
- package/dist/ergo/AbstractErgoExtractorEntity.d.ts +11 -0
- package/dist/ergo/AbstractErgoExtractorEntity.d.ts.map +1 -0
- package/dist/ergo/AbstractErgoExtractorEntity.js +57 -0
- package/dist/ergo/index.d.ts +1 -0
- package/dist/ergo/index.d.ts.map +1 -1
- package/dist/ergo/index.js +2 -1
- package/dist/ergo/initializable/AbstractInitializable.d.ts +4 -3
- package/dist/ergo/initializable/AbstractInitializable.d.ts.map +1 -1
- package/dist/ergo/initializable/AbstractInitializable.js +9 -5
- package/dist/ergo/initializable/AbstractInitializableAction.d.ts +7 -2
- package/dist/ergo/initializable/AbstractInitializableAction.d.ts.map +1 -1
- package/dist/ergo/initializable/AbstractInitializableAction.js +11 -1
- package/dist/ergo/interfaces.d.ts +21 -7
- package/dist/ergo/interfaces.d.ts.map +1 -1
- package/dist/ergo/interfaces.js +8 -1
- package/lib/ergo/AbstractErgoExtractor.ts +107 -23
- package/lib/ergo/AbstractErgoExtractorAction.ts +187 -18
- package/lib/ergo/AbstractErgoExtractorEntity.ts +28 -0
- package/lib/ergo/index.ts +1 -0
- package/lib/ergo/initializable/AbstractInitializable.ts +22 -9
- package/lib/ergo/initializable/AbstractInitializableAction.ts +19 -3
- package/lib/ergo/interfaces.ts +25 -7
- package/package.json +6 -2
- package/tests/{AbstractExtractor.mock.ts → AbstractErgoExtractor.mock.ts} +12 -7
- package/tests/AbstractErgoExtractor.spec.ts +281 -0
- package/tests/AbstractErgoExtractorAction.mock.ts +45 -0
- package/tests/AbstractErgoExtractorAction.spec.ts +269 -0
- package/tests/initializable/AbstractInitializable.mock.ts +15 -8
- package/tests/initializable/AbstractInitializable.spec.ts +37 -5
- package/tests/initializable/AbstractInitializableAction.mock.ts +45 -0
- package/tests/initializable/AbstractInitializableAction.spec.ts +65 -0
- package/tests/testData.ts +38 -2
- package/tests/testUtils.ts +22 -0
- package/tsconfig.build.tsbuildinfo +1 -1
- package/dist/ergo/initializable/InitializableByAddress.d.ts +0 -19
- package/dist/ergo/initializable/InitializableByAddress.d.ts.map +0 -1
- package/dist/ergo/initializable/InitializableByAddress.js +0 -30
- package/dist/ergo/initializable/InitializableByToken.d.ts +0 -19
- package/dist/ergo/initializable/InitializableByToken.d.ts.map +0 -1
- package/dist/ergo/initializable/InitializableByToken.js +0 -30
- package/dist/tsconfig.tsbuildinfo +0 -1
- 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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
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,
|
|
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
|
|
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;
|
|
1
|
+
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../lib/ergo/interfaces.ts"],"names":[],"mappings":"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"}
|
package/dist/ergo/interfaces.js
CHANGED
|
@@ -3,4 +3,11 @@ export var ErgoNetworkType;
|
|
|
3
3
|
ErgoNetworkType["Explorer"] = "explorer";
|
|
4
4
|
ErgoNetworkType["Node"] = "node";
|
|
5
5
|
})(ErgoNetworkType || (ErgoNetworkType = {}));
|
|
6
|
-
|
|
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
|
-
|
|
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
|
|
21
|
+
ExtractedData extends AbstractBoxData,
|
|
22
|
+
ExtractorEntity extends AbstractErgoExtractorEntity
|
|
17
23
|
> extends AbstractExtractor<Transaction> {
|
|
18
|
-
protected
|
|
19
|
-
|
|
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
|
|
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)
|
|
88
|
-
|
|
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
|
-
`
|
|
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
|
}
|