@rosen-bridge/watcher-data-extractor 13.0.8 → 14.0.0-d7a97532

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 CHANGED
@@ -1,11 +1,11 @@
1
1
  # @rosen-bridge/watcher-data-extractor
2
2
 
3
- ## 13.0.8
3
+ ## 14.0.0-d7a97532
4
4
 
5
- ### Patch Changes
5
+ ### Major Changes
6
6
 
7
- - Update dependencies
8
- - @rosen-bridge/abstract-extractor@3.2.1
7
+ - Refactor Permit Extractor:
8
+ - Refactor the PermitExtractor to inherit from `AbstractBoxExtractor` and implement an initialize option to support flexible setup
9
9
 
10
10
  ## 13.0.7
11
11
 
@@ -1,73 +1,25 @@
1
+ import { AbstractErgoBoxAction } from '@rosen-bridge/abstract-extractor';
1
2
  import { AbstractLogger } from '@rosen-bridge/abstract-logger';
2
- import { DataSource, SelectQueryBuilder } from '@rosen-bridge/extended-typeorm';
3
+ import { DataSource } from '@rosen-bridge/extended-typeorm';
3
4
  import { BlockInfo } from '@rosen-bridge/scanner-interfaces';
4
5
  import PermitEntity from '../entities/permitEntity';
5
6
  import { ExtractedPermit } from '../interfaces/extractedPermit';
6
- declare class PermitAction {
7
- readonly logger: AbstractLogger;
8
- private readonly datasource;
9
- private readonly permitRepository;
7
+ declare class PermitAction extends AbstractErgoBoxAction<ExtractedPermit, PermitEntity> {
10
8
  constructor(dataSource: DataSource, logger?: AbstractLogger);
11
9
  /**
12
- * insert a new permit boxes in the database
10
+ * Creates the permit entity from extracted data and block information
13
11
  * @param permits
14
- * @param initialHeight
15
- * @param extractor
16
- */
17
- insertPermit: (permit: ExtractedPermit, extractor: string) => Promise<import("@rosen-bridge/extended-typeorm").InsertResult>;
18
- /**
19
- * update an unspent permit in the database
20
- * @param permit
21
- * @param extractor
22
- */
23
- updatePermit: (permit: ExtractedPermit, extractor: string) => Promise<void>;
24
- /**
25
- * It stores list of permits in the dataSource with block id
26
- * @param permits
27
- * @param block
28
- * @param extractor
29
- */
30
- storePermits: (permits: Array<ExtractedPermit>, block: BlockInfo, extractor: string) => Promise<boolean>;
31
- /**
32
- * Update spendBlock and spendHeight of permits spent on the block
33
- * @param spendId
34
12
  * @param block
35
13
  * @param extractor
14
+ * @returns the permit entities (without the id)
36
15
  */
37
- spendPermits: (spendId: Array<string>, block: BlockInfo, extractor: string) => Promise<void>;
38
- /**
39
- * Delete all permits corresponding to the block(id) and extractor(id)
40
- * and update all permits spent on the specified block
41
- * @param block
42
- * @param extractor
43
- */
44
- deleteBlock: (block: string, extractor: string) => Promise<void>;
45
- /**
46
- * Returns all stored permit box ids
47
- */
48
- getAllPermitBoxIds: (extractor: string) => Promise<Array<string>>;
49
- /**
50
- * Removes specified permit
51
- * @param boxId
52
- * @param extractor
53
- */
54
- removePermit: (boxId: string, extractor: string) => Promise<import("@rosen-bridge/extended-typeorm").DeleteResult>;
55
- /**
56
- * Update the permit spending information
57
- * @param boxId
58
- * @param extractor
59
- * @param blockId
60
- * @param blockHeight
61
- */
62
- updateSpendBlock: (boxId: string, extractor: string, blockId: string, blockHeight: number) => Promise<import("@rosen-bridge/extended-typeorm").UpdateResult>;
16
+ protected createEntity: (permits: ExtractedPermit[], block: BlockInfo, extractor: string) => Array<Omit<PermitEntity, "id">>;
63
17
  /**
64
- * Builds a query that returns used blocks by selecting the `block` column from the `PermitEntity` repository,
65
- * filtered by the provided `extractorId`
66
- *
67
- * @param extractorId - Identifier of the extractor
68
- * @returns A query builder selecting used blocks
18
+ * convert the database entity back to raw data
19
+ * @param entities
20
+ * @returns the extracted collateral data
69
21
  */
70
- createUsedBlocksQuery: (extractorId: string) => SelectQueryBuilder<PermitEntity>;
22
+ protected convertEntityToData: (entities: PermitEntity[]) => ExtractedPermit[];
71
23
  }
72
24
  export default PermitAction;
73
25
  //# sourceMappingURL=permitAction.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"permitAction.d.ts","sourceRoot":"","sources":["../../lib/actions/permitAction.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAe,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EACL,UAAU,EAGV,kBAAkB,EACnB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAG7D,OAAO,YAAY,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,cAAM,YAAY;IAChB,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA2B;gBAEhD,UAAU,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,cAAc;IAM3D;;;;;OAKG;IACH,YAAY,GAAU,QAAQ,eAAe,EAAE,WAAW,MAAM,oEAY9D;IAEF;;;;OAIG;IACH,YAAY,GAAU,QAAQ,eAAe,EAAE,WAAW,MAAM,mBAa9D;IAEF;;;;;OAKG;IACH,YAAY,GACV,SAAS,KAAK,CAAC,eAAe,CAAC,EAC/B,OAAO,SAAS,EAChB,WAAW,MAAM,sBAiDjB;IAEF;;;;;OAKG;IACH,YAAY,GACV,SAAS,KAAK,CAAC,MAAM,CAAC,EACtB,OAAO,SAAS,EAChB,WAAW,MAAM,KAChB,OAAO,CAAC,IAAI,CAAC,CAoBd;IAEF;;;;;OAKG;IACH,WAAW,GAAU,OAAO,MAAM,EAAE,WAAW,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC,CASnE;IAEF;;OAEG;IACH,kBAAkB,GAAU,WAAW,MAAM,KAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAUpE;IAEF;;;;OAIG;IACH,YAAY,GAAU,OAAO,MAAM,EAAE,WAAW,MAAM,oEAKpD;IAEF;;;;;;OAMG;IACH,gBAAgB,GACd,OAAO,MAAM,EACb,WAAW,MAAM,EACjB,SAAS,MAAM,EACf,aAAa,MAAM,oEAMnB;IAEF;;;;;;OAMG;IACH,qBAAqB,GACnB,aAAa,MAAM,KAClB,kBAAkB,CAAC,YAAY,CAAC,CAKjC;CACH;AAED,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"permitAction.d.ts","sourceRoot":"","sources":["../../lib/actions/permitAction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAE7D,OAAO,YAAY,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,cAAM,YAAa,SAAQ,qBAAqB,CAC9C,eAAe,EACf,YAAY,CACb;gBACa,UAAU,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,cAAc;IAI3D;;;;;;OAMG;IACH,SAAS,CAAC,YAAY,GACpB,SAAS,eAAe,EAAE,EAC1B,OAAO,SAAS,EAChB,WAAW,MAAM,KAChB,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAUhC;IAEF;;;;OAIG;IACH,SAAS,CAAC,mBAAmB,GAC3B,UAAU,YAAY,EAAE,KACvB,eAAe,EAAE,CAElB;CACH;AAED,eAAe,YAAY,CAAC"}
@@ -1,187 +1,35 @@
1
- import { chunk } from 'lodash-es';
2
- import { DummyLogger } from '@rosen-bridge/abstract-logger';
3
- import { In, } from '@rosen-bridge/extended-typeorm';
4
- import { dbIdChunkSize } from '../constants';
1
+ import { AbstractErgoBoxAction } from '@rosen-bridge/abstract-extractor';
5
2
  import PermitEntity from '../entities/permitEntity';
6
- class PermitAction {
7
- logger;
8
- datasource;
9
- permitRepository;
3
+ class PermitAction extends AbstractErgoBoxAction {
10
4
  constructor(dataSource, logger) {
11
- this.datasource = dataSource;
12
- this.logger = logger ? logger : new DummyLogger();
13
- this.permitRepository = dataSource.getRepository(PermitEntity);
5
+ super(dataSource, PermitEntity, logger);
14
6
  }
15
7
  /**
16
- * insert a new permit boxes in the database
8
+ * Creates the permit entity from extracted data and block information
17
9
  * @param permits
18
- * @param initialHeight
19
- * @param extractor
20
- */
21
- insertPermit = async (permit, extractor) => {
22
- return this.permitRepository.insert({
23
- boxId: permit.boxId,
24
- boxSerialized: permit.boxSerialized,
25
- block: permit.block,
26
- height: permit.height,
27
- extractor: extractor,
28
- WID: permit.WID,
29
- txId: permit.txId,
30
- spendBlock: permit.spendBlock,
31
- spendHeight: permit.spendHeight,
32
- });
33
- };
34
- /**
35
- * update an unspent permit in the database
36
- * @param permit
37
- * @param extractor
38
- */
39
- updatePermit = async (permit, extractor) => {
40
- await this.permitRepository.update({ boxId: permit.boxId, extractor: extractor }, {
41
- boxSerialized: permit.boxSerialized,
42
- block: permit.block,
43
- height: permit.height,
44
- WID: permit.WID,
45
- txId: permit.txId,
46
- spendBlock: null,
47
- spendHeight: null,
48
- });
49
- };
50
- /**
51
- * It stores list of permits in the dataSource with block id
52
- * @param permits
53
- * @param block
54
- * @param extractor
55
- */
56
- storePermits = async (permits, block, extractor) => {
57
- if (permits.length === 0)
58
- return true;
59
- const boxIds = permits.map((permit) => permit.boxId);
60
- const savedPermits = await this.permitRepository.findBy({
61
- boxId: In(boxIds),
62
- extractor: extractor,
63
- });
64
- let success = true;
65
- const queryRunner = this.datasource.createQueryRunner();
66
- await queryRunner.connect();
67
- await queryRunner.startTransaction();
68
- const repository = await queryRunner.manager.getRepository(PermitEntity);
69
- try {
70
- for (const permit of permits) {
71
- const saved = savedPermits.some((entity) => {
72
- return entity.boxId === permit.boxId;
73
- });
74
- const entity = {
75
- boxId: permit.boxId,
76
- boxSerialized: permit.boxSerialized,
77
- block: block.hash,
78
- height: block.height,
79
- extractor: extractor,
80
- WID: permit.WID,
81
- txId: permit.txId,
82
- };
83
- if (!saved) {
84
- this.logger.debug(`Saving permit [${permit.boxId}] belonging to watcher [${permit.WID}] at height ${block.height} and extractor ${extractor}`);
85
- await repository.insert(entity);
86
- }
87
- else {
88
- this.logger.debug(`Updating permit [${permit.boxId}] belonging to watcher [${permit.WID}] at height ${block.height} and extractor ${extractor}`);
89
- await repository.update({ boxId: permit.boxId }, entity);
90
- }
91
- this.logger.debug(`Entity: ${JSON.stringify(entity)}`);
92
- }
93
- await queryRunner.commitTransaction();
94
- }
95
- catch (e) {
96
- this.logger.error(`An error occurred during store permit action: ${e}`);
97
- await queryRunner.rollbackTransaction();
98
- success = false;
99
- }
100
- finally {
101
- await queryRunner.release();
102
- }
103
- return success;
104
- };
105
- /**
106
- * Update spendBlock and spendHeight of permits spent on the block
107
- * @param spendId
108
- * @param block
109
- * @param extractor
110
- */
111
- spendPermits = async (spendId, block, extractor) => {
112
- const spendIdChunks = chunk(spendId, dbIdChunkSize);
113
- for (const spendIdChunk of spendIdChunks) {
114
- const updateResult = await this.permitRepository.update({ boxId: In(spendIdChunk), extractor: extractor }, { spendBlock: block.hash, spendHeight: block.height });
115
- if (updateResult.affected && updateResult.affected > 0) {
116
- const spentRows = await this.permitRepository.findBy({
117
- boxId: In(spendIdChunk),
118
- spendBlock: block.hash,
119
- });
120
- for (const row of spentRows) {
121
- this.logger.debug(`Spent permit with boxId [${row.boxId}] belonging to watcher with WID [${row.WID}] at height ${block.height}`);
122
- }
123
- }
124
- }
125
- };
126
- /**
127
- * Delete all permits corresponding to the block(id) and extractor(id)
128
- * and update all permits spent on the specified block
129
10
  * @param block
130
11
  * @param extractor
131
- */
132
- deleteBlock = async (block, extractor) => {
133
- this.logger.info(`Deleting permits at block ${block} and extractor ${extractor}`);
134
- await this.permitRepository.delete({ block: block, extractor: extractor });
135
- await this.permitRepository.update({ spendBlock: block, extractor: extractor }, { spendBlock: null, spendHeight: null });
136
- };
137
- /**
138
- * Returns all stored permit box ids
139
- */
140
- getAllPermitBoxIds = async (extractor) => {
141
- const boxIds = await this.permitRepository.find({
142
- where: {
143
- extractor: extractor,
144
- },
145
- select: {
146
- boxId: true,
147
- },
148
- });
149
- return boxIds.map((item) => item.boxId);
150
- };
151
- /**
152
- * Removes specified permit
153
- * @param boxId
154
- * @param extractor
155
- */
156
- removePermit = async (boxId, extractor) => {
157
- return await this.permitRepository.delete({
158
- boxId: boxId,
159
- extractor: extractor,
160
- });
161
- };
162
- /**
163
- * Update the permit spending information
164
- * @param boxId
165
- * @param extractor
166
- * @param blockId
167
- * @param blockHeight
168
- */
169
- updateSpendBlock = async (boxId, extractor, blockId, blockHeight) => {
170
- return await this.permitRepository.update({ boxId: boxId, extractor: extractor }, { spendBlock: blockId, spendHeight: blockHeight });
12
+ * @returns the permit entities (without the id)
13
+ */
14
+ createEntity = (permits, block, extractor) => {
15
+ return permits.map((permit) => ({
16
+ ...permit,
17
+ block: block.hash,
18
+ height: block.height,
19
+ extractor,
20
+ WID: permit.WID,
21
+ spendBlock: permit.spendBlock ?? null,
22
+ spendHeight: permit.spendHeight ?? null,
23
+ }));
171
24
  };
172
25
  /**
173
- * Builds a query that returns used blocks by selecting the `block` column from the `PermitEntity` repository,
174
- * filtered by the provided `extractorId`
175
- *
176
- * @param extractorId - Identifier of the extractor
177
- * @returns A query builder selecting used blocks
26
+ * convert the database entity back to raw data
27
+ * @param entities
28
+ * @returns the extracted collateral data
178
29
  */
179
- createUsedBlocksQuery = (extractorId) => {
180
- return this.permitRepository
181
- .createQueryBuilder('permitEntity')
182
- .select('permitEntity.block', 'block')
183
- .where('permitEntity.extractor = :extractorId', { extractorId });
30
+ convertEntityToData = (entities) => {
31
+ return entities;
184
32
  };
185
33
  }
186
34
  export default PermitAction;
187
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWl0QWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL2FjdGlvbnMvcGVybWl0QWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFbEMsT0FBTyxFQUFrQixXQUFXLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM1RSxPQUFPLEVBRUwsRUFBRSxHQUdILE1BQU0sZ0NBQWdDLENBQUM7QUFHeEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3QyxPQUFPLFlBQVksTUFBTSwwQkFBMEIsQ0FBQztBQUdwRCxNQUFNLFlBQVk7SUFDUCxNQUFNLENBQWlCO0lBQ2YsVUFBVSxDQUFhO0lBQ3ZCLGdCQUFnQixDQUEyQjtJQUU1RCxZQUFZLFVBQXNCLEVBQUUsTUFBdUI7UUFDekQsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUNsRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsVUFBVSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxZQUFZLEdBQUcsS0FBSyxFQUFFLE1BQXVCLEVBQUUsU0FBaUIsRUFBRSxFQUFFO1FBQ2xFLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQztZQUNsQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7WUFDbkIsYUFBYSxFQUFFLE1BQU0sQ0FBQyxhQUFhO1lBQ25DLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztZQUNuQixNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07WUFDckIsU0FBUyxFQUFFLFNBQVM7WUFDcEIsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFH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QzthQUNyQyxLQUFLLENBQUMsdUNBQXVDLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ3JFLENBQUMsQ0FBQztDQUNIO0FBRUQsZUFBZSxZQUFZLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjaHVuayB9IGZyb20gJ2xvZGFzaC1lcyc7XG5cbmltcG9ydCB7IEFic3RyYWN0TG9nZ2VyLCBEdW1teUxvZ2dlciB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvYWJzdHJhY3QtbG9nZ2VyJztcbmltcG9ydCB7XG4gIERhdGFTb3VyY2UsXG4gIEluLFxuICBSZXBvc2l0b3J5LFxuICBTZWxlY3RRdWVyeUJ1aWxkZXIsXG59IGZyb20gJ0Byb3Nlbi1icmlkZ2UvZXh0ZW5kZWQtdHlwZW9ybSc7XG5pbXBvcnQgeyBCbG9ja0luZm8gfSBmcm9tICdAcm9zZW4tYnJpZGdlL3NjYW5uZXItaW50ZXJmYWNlcyc7XG5cbmltcG9ydCB7IGRiSWRDaHVua1NpemUgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IFBlcm1pdEVudGl0eSBmcm9tICcuLi9lbnRpdGllcy9wZXJtaXRFbnRpdHknO1xuaW1wb3J0IHsgRXh0cmFjdGVkUGVybWl0IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9leHRyYWN0ZWRQZXJtaXQnO1xuXG5jbGFzcyBQZXJtaXRBY3Rpb24ge1xuICByZWFkb25seSBsb2dnZXI6IEFic3RyYWN0TG9nZ2VyO1xuICBwcml2YXRlIHJlYWRvbmx5IGRhdGFzb3VyY2U6IERhdGFTb3VyY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGVybWl0UmVwb3NpdG9yeTogUmVwb3NpdG9yeTxQZXJtaXRFbnRpdHk+O1xuXG4gIGNvbnN0cnVjdG9yKGRhdGFTb3VyY2U6IERhdGFTb3VyY2UsIGxvZ2dlcj86IEFic3RyYWN0TG9nZ2VyKSB7XG4gICAgdGhpcy5kYXRhc291cmNlID0gZGF0YVNvdXJjZTtcbiAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlciA/IGxvZ2dlciA6IG5ldyBEdW1teUxvZ2dlcigpO1xuICAgIHRoaXMucGVybWl0UmVwb3NpdG9yeSA9IGRhdGFTb3VyY2UuZ2V0UmVwb3NpdG9yeShQZXJtaXRFbnRpdHkpO1xuICB9XG5cbiAgLyoqXG4gICAqIGluc2VydCBhIG5ldyBwZXJtaXQgYm94ZXMgaW4gdGhlIGRhdGFiYXNlXG4gICAqIEBwYXJhbSBwZXJtaXRzXG4gICAqIEBwYXJhbSBpbml0aWFsSGVpZ2h0XG4gICAqIEBwYXJhbSBleHRyYWN0b3JcbiAgICovXG4gIGluc2VydFBlcm1pdCA9IGFzeW5jIChwZXJtaXQ6IEV4dHJhY3RlZFBlcm1pdCwgZXh0cmFjdG9yOiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gdGhpcy5wZXJtaXRSZXBvc2l0b3J5Lmluc2VydCh7XG4gICAgICBib3hJZDogcGVybWl0LmJveElkLFxuICAgICAgYm94U2VyaWFsaXplZDogcGVybWl0LmJveFNlcmlhbGl6ZWQsXG4gICAgICBibG9jazogcGVybWl0LmJsb2NrLFxuICAgICAgaGVpZ2h0OiBwZXJtaXQuaGVpZ2h0LFxuICAgICAgZXh0cmFjdG9yOiBleHRyYWN0b3IsXG4gICAgICBXSUQ6IHBlcm1pdC5XSUQsXG4gICAgICB0eElkOiBwZXJtaXQudHhJZCxcbiAgICAgIHNwZW5kQmxvY2s6IHBlcm1pdC5zcGVuZEJsb2NrLFxuICAgICAgc3BlbmRIZWlnaHQ6IHBlcm1pdC5zcGVuZEhlaWdodCxcbiAgICB9KTtcbiAgfTtcblxuICAvKipcbiAgICogdXBkYXRlIGFuIHVuc3BlbnQgcGVybWl0IGluIHRoZSBkYXRhYmFzZVxuICAgKiBAcGFyYW0gcGVybWl0XG4gICAqIEBwYXJhbSBleHRyYWN0b3JcbiAgICovXG4gIHVwZGF0ZVBlcm1pdCA9IGFzeW5jIChwZXJtaXQ6IEV4dHJhY3RlZFBlcm1pdCwgZXh0cmFjdG9yOiBzdHJpbmcpID0+IHtcbiAgICBhd2FpdCB0aGlzLnBlcm1pdFJlcG9zaXRvcnkudXBkYXRlKFxuICAgICAgeyBib3hJZDogcGVybWl0LmJveElkLCBleHRyYWN0b3I6IGV4dHJhY3RvciB9LFxuICAgICAge1xuICAgICAgICBib3hTZXJpYWxpemVkOiBwZXJtaXQuYm94U2VyaWFsaXplZCxcbiAgICAgICAgYmxvY2s6IHBlcm1pdC5ibG9jayxcbiAgICAgICAgaGVpZ2h0OiBwZXJtaXQuaGVpZ2h0LFxuICAgICAgICBXSUQ6IHBlcm1pdC5XSUQsXG4gICAgICAgIHR4SWQ6IHBlcm1pdC50eElkLFxuICAgICAgICBzcGVuZEJsb2NrOiBudWxsLFxuICAgICAgICBzcGVuZEhlaWdodDogbnVsbCxcbiAgICAgIH0sXG4gICAgKTtcbiAgfTtcblxuICAvKipcbiAgICogSXQgc3RvcmVzIGxpc3Qgb2YgcGVybWl0cyBpbiB0aGUgZGF0YVNvdXJjZSB3aXRoIGJsb2NrIGlkXG4gICAqIEBwYXJhbSBwZXJtaXRzXG4gICAqIEBwYXJhbSBibG9ja1xuICAgKiBAcGFyYW0gZXh0cmFjdG9yXG4gICAqL1xuICBzdG9yZVBlcm1pdHMgPSBhc3luYyAoXG4gICAgcGVybWl0czogQXJyYXk8RXh0cmFjdGVkUGVybWl0PixcbiAgICBibG9jazogQmxvY2tJbmZvLFxuICAgIGV4dHJhY3Rvcjogc3RyaW5nLFxuICApID0+IHtcbiAgICBpZiAocGVybWl0cy5sZW5ndGggPT09IDApIHJldHVybiB0cnVlO1xuICAgIGNvbnN0IGJveElkcyA9IHBlcm1pdHMubWFwKChwZXJtaXQpID0+IHBlcm1pdC5ib3hJZCk7XG4gICAgY29uc3Qgc2F2ZWRQZXJtaXRzID0gYXdhaXQgdGhpcy5wZXJtaXRSZXBvc2l0b3J5LmZpbmRCeSh7XG4gICAgICBib3hJZDogSW4oYm94SWRzKSxcbiAgICAgIGV4dHJhY3RvcjogZXh0cmFjdG9yLFxuICAgIH0pO1xuICAgIGxldCBzdWNjZXNzID0gdHJ1ZTtcbiAgICBjb25zdCBxdWVyeVJ1bm5lciA9IHRoaXMuZGF0YXNvdXJjZS5jcmVhdGVRdWVyeVJ1bm5lcigpO1xuICAgIGF3YWl0IHF1ZXJ5UnVubmVyLmNvbm5lY3QoKTtcbiAgICBhd2FpdCBxdWVyeVJ1bm5lci5zdGFydFRyYW5zYWN0aW9uKCk7XG4gICAgY29uc3QgcmVwb3NpdG9yeSA9IGF3YWl0IHF1ZXJ5UnVubmVyLm1hbmFnZXIuZ2V0UmVwb3NpdG9yeShQZXJtaXRFbnRpdHkpO1xuICAgIHRyeSB7XG4gICAgICBmb3IgKGNvbnN0IHBlcm1pdCBvZiBwZXJtaXRzKSB7XG4gICAgICAgIGNvbnN0IHNhdmVkID0gc2F2ZWRQZXJtaXRzLnNvbWUoKGVudGl0eSkgPT4ge1xuICAgICAgICAgIHJldHVybiBlbnRpdHkuYm94SWQgPT09IHBlcm1pdC5ib3hJZDtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGVudGl0eSA9IHtcbiAgICAgICAgICBib3hJZDogcGVybWl0LmJveElkLFxuICAgICAgICAgIGJveFNlcmlhbGl6ZWQ6IHBlcm1pdC5ib3hTZXJpYWxpemVkLFxuICAgICAgICAgIGJsb2NrOiBibG9jay5oYXNoLFxuICAgICAgICAgIGhlaWdodDogYmxvY2suaGVpZ2h0LFxuICAgICAgICAgIGV4dHJhY3RvcjogZXh0cmFjdG9yLFxuICAgICAgICAgIFdJRDogcGVybWl0LldJRCxcbiAgICAgICAgICB0eElkOiBwZXJtaXQudHhJZCxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKCFzYXZlZCkge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICAgYFNhdmluZyBwZXJtaXQgWyR7cGVybWl0LmJveElkfV0gYmVsb25naW5nIHRvIHdhdGNoZXIgWyR7cGVybWl0LldJRH1dIGF0IGhlaWdodCAke2Jsb2NrLmhlaWdodH0gYW5kIGV4dHJhY3RvciAke2V4dHJhY3Rvcn1gLFxuICAgICAgICAgICk7XG4gICAgICAgICAgYXdhaXQgcmVwb3NpdG9yeS5pbnNlcnQoZW50aXR5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICAgIGBVcGRhdGluZyBwZXJtaXQgWyR7cGVybWl0LmJveElkfV0gYmVsb25naW5nIHRvIHdhdGNoZXIgWyR7cGVybWl0LldJRH1dIGF0IGhlaWdodCAke2Jsb2NrLmhlaWdodH0gYW5kIGV4dHJhY3RvciAke2V4dHJhY3Rvcn1gLFxuICAgICAgICAgICk7XG4gICAgICAgICAgYXdhaXQgcmVwb3NpdG9yeS51cGRhdGUoeyBib3hJZDogcGVybWl0LmJveElkIH0sIGVudGl0eSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYEVudGl0eTogJHtKU09OLnN0cmluZ2lmeShlbnRpdHkpfWApO1xuICAgICAgfVxuICAgICAgYXdhaXQgcXVlcnlSdW5uZXIuY29tbWl0VHJhbnNhY3Rpb24oKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZ2dlci5lcnJvcihgQW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHN0b3JlIHBlcm1pdCBhY3Rpb246ICR7ZX1gKTtcbiAgICAgIGF3YWl0IHF1ZXJ5UnVubmVyLnJvbGxiYWNrVHJhbnNhY3Rpb24oKTtcbiAgICAgIHN1Y2Nlc3MgPSBmYWxzZTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgcXVlcnlSdW5uZXIucmVsZWFzZSgpO1xuICAgIH1cbiAgICByZXR1cm4gc3VjY2VzcztcbiAgfTtcblxuICAvKipcbiAgICogVXBkYXRlIHNwZW5kQmxvY2sgYW5kIHNwZW5kSGVpZ2h0IG9mIHBlcm1pdHMgc3BlbnQgb24gdGhlIGJsb2NrXG4gICAqIEBwYXJhbSBzcGVuZElkXG4gICAqIEBwYXJhbSBibG9ja1xuICAgKiBAcGFyYW0gZXh0cmFjdG9yXG4gICAqL1xuICBzcGVuZFBlcm1pdHMgPSBhc3luYyAoXG4gICAgc3BlbmRJZDogQXJyYXk8c3RyaW5nPixcbiAgICBibG9jazogQmxvY2tJbmZvLFxuICAgIGV4dHJhY3Rvcjogc3RyaW5nLFxuICApOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBjb25zdCBzcGVuZElkQ2h1bmtzID0gY2h1bmsoc3BlbmRJZCwgZGJJZENodW5rU2l6ZSk7XG4gICAgZm9yIChjb25zdCBzcGVuZElkQ2h1bmsgb2Ygc3BlbmRJZENodW5rcykge1xuICAgICAgY29uc3QgdXBkYXRlUmVzdWx0ID0gYXdhaXQgdGhpcy5wZXJtaXRSZXBvc2l0b3J5LnVwZGF0ZShcbiAgICAgICAgeyBib3hJZDogSW4oc3BlbmRJZENodW5rKSwgZXh0cmFjdG9yOiBleHRyYWN0b3IgfSxcbiAgICAgICAgeyBzcGVuZEJsb2NrOiBibG9jay5oYXNoLCBzcGVuZEhlaWdodDogYmxvY2suaGVpZ2h0IH0sXG4gICAgICApO1xuXG4gICAgICBpZiAodXBkYXRlUmVzdWx0LmFmZmVjdGVkICYmIHVwZGF0ZVJlc3VsdC5hZmZlY3RlZCA+IDApIHtcbiAgICAgICAgY29uc3Qgc3BlbnRSb3dzID0gYXdhaXQgdGhpcy5wZXJtaXRSZXBvc2l0b3J5LmZpbmRCeSh7XG4gICAgICAgICAgYm94SWQ6IEluKHNwZW5kSWRDaHVuayksXG4gICAgICAgICAgc3BlbmRCbG9jazogYmxvY2suaGFzaCxcbiAgICAgICAgfSk7XG4gICAgICAgIGZvciAoY29uc3Qgcm93IG9mIHNwZW50Um93cykge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICAgYFNwZW50IHBlcm1pdCB3aXRoIGJveElkIFske3Jvdy5ib3hJZH1dIGJlbG9uZ2luZyB0byB3YXRjaGVyIHdpdGggV0lEIFske3Jvdy5XSUR9XSBhdCBoZWlnaHQgJHtibG9jay5oZWlnaHR9YCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBEZWxldGUgYWxsIHBlcm1pdHMgY29ycmVzcG9uZGluZyB0byB0aGUgYmxvY2soaWQpIGFuZCBleHRyYWN0b3IoaWQpXG4gICAqIGFuZCB1cGRhdGUgYWxsIHBlcm1pdHMgc3BlbnQgb24gdGhlIHNwZWNpZmllZCBibG9ja1xuICAgKiBAcGFyYW0gYmxvY2tcbiAgICogQHBhcmFtIGV4dHJhY3RvclxuICAgKi9cbiAgZGVsZXRlQmxvY2sgPSBhc3luYyAoYmxvY2s6IHN0cmluZywgZXh0cmFjdG9yOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICB0aGlzLmxvZ2dlci5pbmZvKFxuICAgICAgYERlbGV0aW5nIHBlcm1pdHMgYXQgYmxvY2sgJHtibG9ja30gYW5kIGV4dHJhY3RvciAke2V4dHJhY3Rvcn1gLFxuICAgICk7XG4gICAgYXdhaXQgdGhpcy5wZXJtaXRSZXBvc2l0b3J5LmRlbGV0ZSh7IGJsb2NrOiBibG9jaywgZXh0cmFjdG9yOiBleHRyYWN0b3IgfSk7XG4gICAgYXdhaXQgdGhpcy5wZXJtaXRSZXBvc2l0b3J5LnVwZGF0ZShcbiAgICAgIHsgc3BlbmRCbG9jazogYmxvY2ssIGV4dHJhY3RvcjogZXh0cmFjdG9yIH0sXG4gICAgICB7IHNwZW5kQmxvY2s6IG51bGwsIHNwZW5kSGVpZ2h0OiBudWxsIH0sXG4gICAgKTtcbiAgfTtcblxuICAvKipcbiAgICogIFJldHVybnMgYWxsIHN0b3JlZCBwZXJtaXQgYm94IGlkc1xuICAgKi9cbiAgZ2V0QWxsUGVybWl0Qm94SWRzID0gYXN5bmMgKGV4dHJhY3Rvcjogc3RyaW5nKTogUHJvbWlzZTxBcnJheTxzdHJpbmc+PiA9PiB7XG4gICAgY29uc3QgYm94SWRzID0gYXdhaXQgdGhpcy5wZXJtaXRSZXBvc2l0b3J5LmZpbmQoe1xuICAgICAgd2hlcmU6IHtcbiAgICAgICAgZXh0cmFjdG9yOiBleHRyYWN0b3IsXG4gICAgICB9LFxuICAgICAgc2VsZWN0OiB7XG4gICAgICAgIGJveElkOiB0cnVlLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICByZXR1cm4gYm94SWRzLm1hcCgoaXRlbTogeyBib3hJZDogc3RyaW5nIH0pID0+IGl0ZW0uYm94SWQpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHNwZWNpZmllZCBwZXJtaXRcbiAgICogQHBhcmFtIGJveElkXG4gICAqIEBwYXJhbSBleHRyYWN0b3JcbiAgICovXG4gIHJlbW92ZVBlcm1pdCA9IGFzeW5jIChib3hJZDogc3RyaW5nLCBleHRyYWN0b3I6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnBlcm1pdFJlcG9zaXRvcnkuZGVsZXRlKHtcbiAgICAgIGJveElkOiBib3hJZCxcbiAgICAgIGV4dHJhY3RvcjogZXh0cmFjdG9yLFxuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIHBlcm1pdCBzcGVuZGluZyBpbmZvcm1hdGlvblxuICAgKiBAcGFyYW0gYm94SWRcbiAgICogQHBhcmFtIGV4dHJhY3RvclxuICAgKiBAcGFyYW0gYmxvY2tJZFxuICAgKiBAcGFyYW0gYmxvY2tIZWlnaHRcbiAgICovXG4gIHVwZGF0ZVNwZW5kQmxvY2sgPSBhc3luYyAoXG4gICAgYm94SWQ6IHN0cmluZyxcbiAgICBleHRyYWN0b3I6IHN0cmluZyxcbiAgICBibG9ja0lkOiBzdHJpbmcsXG4gICAgYmxvY2tIZWlnaHQ6IG51bWJlcixcbiAgKSA9PiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucGVybWl0UmVwb3NpdG9yeS51cGRhdGUoXG4gICAgICB7IGJveElkOiBib3hJZCwgZXh0cmFjdG9yOiBleHRyYWN0b3IgfSxcbiAgICAgIHsgc3BlbmRCbG9jazogYmxvY2tJZCwgc3BlbmRIZWlnaHQ6IGJsb2NrSGVpZ2h0IH0sXG4gICAgKTtcbiAgfTtcblxuICAvKipcbiAgICogQnVpbGRzIGEgcXVlcnkgdGhhdCByZXR1cm5zIHVzZWQgYmxvY2tzIGJ5IHNlbGVjdGluZyB0aGUgYGJsb2NrYCBjb2x1bW4gZnJvbSB0aGUgYFBlcm1pdEVudGl0eWAgcmVwb3NpdG9yeSxcbiAgICogZmlsdGVyZWQgYnkgdGhlIHByb3ZpZGVkIGBleHRyYWN0b3JJZGBcbiAgICpcbiAgICogQHBhcmFtIGV4dHJhY3RvcklkIC0gSWRlbnRpZmllciBvZiB0aGUgZXh0cmFjdG9yXG4gICAqIEByZXR1cm5zIEEgcXVlcnkgYnVpbGRlciBzZWxlY3RpbmcgdXNlZCBibG9ja3NcbiAgICovXG4gIGNyZWF0ZVVzZWRCbG9ja3NRdWVyeSA9IChcbiAgICBleHRyYWN0b3JJZDogc3RyaW5nLFxuICApOiBTZWxlY3RRdWVyeUJ1aWxkZXI8UGVybWl0RW50aXR5PiA9PiB7XG4gICAgcmV0dXJuIHRoaXMucGVybWl0UmVwb3NpdG9yeVxuICAgICAgLmNyZWF0ZVF1ZXJ5QnVpbGRlcigncGVybWl0RW50aXR5JylcbiAgICAgIC5zZWxlY3QoJ3Blcm1pdEVudGl0eS5ibG9jaycsICdibG9jaycpXG4gICAgICAud2hlcmUoJ3Blcm1pdEVudGl0eS5leHRyYWN0b3IgPSA6ZXh0cmFjdG9ySWQnLCB7IGV4dHJhY3RvcklkIH0pO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBQZXJtaXRBY3Rpb247XG4iXX0=
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWl0QWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL2FjdGlvbnMvcGVybWl0QWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBS3pFLE9BQU8sWUFBWSxNQUFNLDBCQUEwQixDQUFDO0FBR3BELE1BQU0sWUFBYSxTQUFRLHFCQUcxQjtJQUNDLFlBQVksVUFBc0IsRUFBRSxNQUF1QjtRQUN6RCxLQUFLLENBQUMsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ08sWUFBWSxHQUFHLENBQ3ZCLE9BQTBCLEVBQzFCLEtBQWdCLEVBQ2hCLFNBQWlCLEVBQ2dCLEVBQUU7UUFDbkMsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzlCLEdBQUcsTUFBTTtZQUNULEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSTtZQUNqQixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07WUFDcEIsU0FBUztZQUNULEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRztZQUNmLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVSxJQUFJLElBQUk7WUFDckMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXLElBQUksSUFBSTtTQUN4QyxDQUFDLENBQUMsQ0FBQztJQUNOLENBQUMsQ0FBQztJQUVGOzs7O09BSUc7SUFDTyxtQkFBbUIsR0FBRyxDQUM5QixRQUF3QixFQUNMLEVBQUU7UUFDckIsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQyxDQUFDO0NBQ0g7QUFFRCxlQUFlLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0RXJnb0JveEFjdGlvbiB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvYWJzdHJhY3QtZXh0cmFjdG9yJztcbmltcG9ydCB7IEFic3RyYWN0TG9nZ2VyIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9hYnN0cmFjdC1sb2dnZXInO1xuaW1wb3J0IHsgRGF0YVNvdXJjZSB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvZXh0ZW5kZWQtdHlwZW9ybSc7XG5pbXBvcnQgeyBCbG9ja0luZm8gfSBmcm9tICdAcm9zZW4tYnJpZGdlL3NjYW5uZXItaW50ZXJmYWNlcyc7XG5cbmltcG9ydCBQZXJtaXRFbnRpdHkgZnJvbSAnLi4vZW50aXRpZXMvcGVybWl0RW50aXR5JztcbmltcG9ydCB7IEV4dHJhY3RlZFBlcm1pdCB9IGZyb20gJy4uL2ludGVyZmFjZXMvZXh0cmFjdGVkUGVybWl0JztcblxuY2xhc3MgUGVybWl0QWN0aW9uIGV4dGVuZHMgQWJzdHJhY3RFcmdvQm94QWN0aW9uPFxuICBFeHRyYWN0ZWRQZXJtaXQsXG4gIFBlcm1pdEVudGl0eVxuPiB7XG4gIGNvbnN0cnVjdG9yKGRhdGFTb3VyY2U6IERhdGFTb3VyY2UsIGxvZ2dlcj86IEFic3RyYWN0TG9nZ2VyKSB7XG4gICAgc3VwZXIoZGF0YVNvdXJjZSwgUGVybWl0RW50aXR5LCBsb2dnZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIHBlcm1pdCBlbnRpdHkgZnJvbSBleHRyYWN0ZWQgZGF0YSBhbmQgYmxvY2sgaW5mb3JtYXRpb25cbiAgICogQHBhcmFtIHBlcm1pdHNcbiAgICogQHBhcmFtIGJsb2NrXG4gICAqIEBwYXJhbSBleHRyYWN0b3JcbiAgICogQHJldHVybnMgdGhlIHBlcm1pdCBlbnRpdGllcyAod2l0aG91dCB0aGUgaWQpXG4gICAqL1xuICBwcm90ZWN0ZWQgY3JlYXRlRW50aXR5ID0gKFxuICAgIHBlcm1pdHM6IEV4dHJhY3RlZFBlcm1pdFtdLFxuICAgIGJsb2NrOiBCbG9ja0luZm8sXG4gICAgZXh0cmFjdG9yOiBzdHJpbmcsXG4gICk6IEFycmF5PE9taXQ8UGVybWl0RW50aXR5LCAnaWQnPj4gPT4ge1xuICAgIHJldHVybiBwZXJtaXRzLm1hcCgocGVybWl0KSA9PiAoe1xuICAgICAgLi4ucGVybWl0LFxuICAgICAgYmxvY2s6IGJsb2NrLmhhc2gsXG4gICAgICBoZWlnaHQ6IGJsb2NrLmhlaWdodCxcbiAgICAgIGV4dHJhY3RvcixcbiAgICAgIFdJRDogcGVybWl0LldJRCxcbiAgICAgIHNwZW5kQmxvY2s6IHBlcm1pdC5zcGVuZEJsb2NrID8/IG51bGwsXG4gICAgICBzcGVuZEhlaWdodDogcGVybWl0LnNwZW5kSGVpZ2h0ID8/IG51bGwsXG4gICAgfSkpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBjb252ZXJ0IHRoZSBkYXRhYmFzZSBlbnRpdHkgYmFjayB0byByYXcgZGF0YVxuICAgKiBAcGFyYW0gZW50aXRpZXNcbiAgICogQHJldHVybnMgdGhlIGV4dHJhY3RlZCBjb2xsYXRlcmFsIGRhdGFcbiAgICovXG4gIHByb3RlY3RlZCBjb252ZXJ0RW50aXR5VG9EYXRhID0gKFxuICAgIGVudGl0aWVzOiBQZXJtaXRFbnRpdHlbXSxcbiAgKTogRXh0cmFjdGVkUGVybWl0W10gPT4ge1xuICAgIHJldHVybiBlbnRpdGllcztcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgUGVybWl0QWN0aW9uO1xuIl19
@@ -1,13 +1,6 @@
1
- declare class PermitEntity {
2
- id: number;
3
- extractor: string;
4
- boxId: string;
5
- boxSerialized: string;
1
+ import { AbstractErgoBoxEntity } from '@rosen-bridge/abstract-extractor';
2
+ declare class PermitEntity extends AbstractErgoBoxEntity {
6
3
  WID: string;
7
- block: string;
8
- height: number;
9
- spendBlock?: string | null;
10
- spendHeight?: number | null;
11
4
  txId: string;
12
5
  }
13
6
  export default PermitEntity;
@@ -1 +1 @@
1
- {"version":3,"file":"permitEntity.d.ts","sourceRoot":"","sources":["../../lib/entities/permitEntity.ts"],"names":[],"mappings":"AAOA,cAEM,YAAY;IAEhB,EAAE,EAAE,MAAM,CAAC;IAGX,SAAS,EAAE,MAAM,CAAC;IAGlB,KAAK,EAAE,MAAM,CAAC;IAGd,aAAa,EAAE,MAAM,CAAC;IAGtB,GAAG,EAAE,MAAM,CAAC;IAGZ,KAAK,EAAE,MAAM,CAAC;IAGd,MAAM,EAAE,MAAM,CAAC;IAGf,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAG3B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAG5B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"permitEntity.d.ts","sourceRoot":"","sources":["../../lib/entities/permitEntity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAGzE,cACM,YAAa,SAAQ,qBAAqB;IAE9C,GAAG,EAAE,MAAM,CAAC;IAGZ,IAAI,EAAE,MAAM,CAAC;CACd;AAED,eAAe,YAAY,CAAC"}
@@ -7,62 +7,22 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
7
7
  var __metadata = (this && this.__metadata) || function (k, v) {
8
8
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
9
  };
10
- import { Column, Entity, PrimaryGeneratedColumn, Unique, } from '@rosen-bridge/extended-typeorm';
11
- let PermitEntity = class PermitEntity {
12
- id;
13
- extractor;
14
- boxId;
15
- boxSerialized;
10
+ import { AbstractErgoBoxEntity } from '@rosen-bridge/abstract-extractor';
11
+ import { Column, Entity } from '@rosen-bridge/extended-typeorm';
12
+ let PermitEntity = class PermitEntity extends AbstractErgoBoxEntity {
16
13
  WID;
17
- block;
18
- height;
19
- spendBlock;
20
- spendHeight;
21
14
  txId;
22
15
  };
23
- __decorate([
24
- PrimaryGeneratedColumn(),
25
- __metadata("design:type", Number)
26
- ], PermitEntity.prototype, "id", void 0);
27
- __decorate([
28
- Column({ type: 'varchar' }),
29
- __metadata("design:type", String)
30
- ], PermitEntity.prototype, "extractor", void 0);
31
- __decorate([
32
- Column({ type: 'varchar' }),
33
- __metadata("design:type", String)
34
- ], PermitEntity.prototype, "boxId", void 0);
35
- __decorate([
36
- Column({ type: 'varchar' }),
37
- __metadata("design:type", String)
38
- ], PermitEntity.prototype, "boxSerialized", void 0);
39
16
  __decorate([
40
17
  Column({ type: 'varchar' }),
41
18
  __metadata("design:type", String)
42
19
  ], PermitEntity.prototype, "WID", void 0);
43
- __decorate([
44
- Column({ type: 'varchar' }),
45
- __metadata("design:type", String)
46
- ], PermitEntity.prototype, "block", void 0);
47
- __decorate([
48
- Column({ type: 'int' }),
49
- __metadata("design:type", Number)
50
- ], PermitEntity.prototype, "height", void 0);
51
- __decorate([
52
- Column({ nullable: true, type: 'text' }),
53
- __metadata("design:type", Object)
54
- ], PermitEntity.prototype, "spendBlock", void 0);
55
- __decorate([
56
- Column({ nullable: true, type: 'int' }),
57
- __metadata("design:type", Object)
58
- ], PermitEntity.prototype, "spendHeight", void 0);
59
20
  __decorate([
60
21
  Column({ type: 'varchar' }),
61
22
  __metadata("design:type", String)
62
23
  ], PermitEntity.prototype, "txId", void 0);
63
24
  PermitEntity = __decorate([
64
- Entity('permit_entity'),
65
- Unique(['boxId', 'extractor'])
25
+ Entity('permit_entity')
66
26
  ], PermitEntity);
67
27
  export default PermitEntity;
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWl0RW50aXR5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL2VudGl0aWVzL3Blcm1pdEVudGl0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFDTixzQkFBc0IsRUFDdEIsTUFBTSxHQUNQLE1BQU0sZ0NBQWdDLENBQUM7QUFJeEMsSUFBTSxZQUFZLEdBQWxCLE1BQU0sWUFBWTtJQUVoQixFQUFFLENBQVM7SUFHWCxTQUFTLENBQVM7SUFHbEIsS0FBSyxDQUFTO0lBR2QsYUFBYSxDQUFTO0lBR3RCLEdBQUcsQ0FBUztJQUdaLEtBQUssQ0FBUztJQUdkLE1BQU0sQ0FBUztJQUdmLFVBQVUsQ0FBaUI7SUFHM0IsV0FBVyxDQUFpQjtJQUc1QixJQUFJLENBQVM7Q0FDZCxDQUFBO0FBNUJDO0lBREMsc0JBQXNCLEVBQUU7O3dDQUNkO0FBR1g7SUFEQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUM7OytDQUNWO0FBR2xCO0lBREMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDOzsyQ0FDZDtBQUdkO0lBREMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDOzttREFDTjtBQUd0QjtJQURDLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQzs7eUNBQ2hCO0FBR1o7SUFEQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUM7OzJDQUNkO0FBR2Q7SUFEQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7OzRDQUNUO0FBR2Y7SUFEQyxNQUFNLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQzs7Z0RBQ2Q7QUFHM0I7SUFEQyxNQUFNLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQzs7aURBQ1o7QUFHNUI7SUFEQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUM7OzBDQUNmO0FBN0JULFlBQVk7SUFGakIsTUFBTSxDQUFDLGVBQWUsQ0FBQztJQUN2QixNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7R0FDekIsWUFBWSxDQThCakI7QUFFRCxlQUFlLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbHVtbixcbiAgRW50aXR5LFxuICBQcmltYXJ5R2VuZXJhdGVkQ29sdW1uLFxuICBVbmlxdWUsXG59IGZyb20gJ0Byb3Nlbi1icmlkZ2UvZXh0ZW5kZWQtdHlwZW9ybSc7XG5cbkBFbnRpdHkoJ3Blcm1pdF9lbnRpdHknKVxuQFVuaXF1ZShbJ2JveElkJywgJ2V4dHJhY3RvciddKVxuY2xhc3MgUGVybWl0RW50aXR5IHtcbiAgQFByaW1hcnlHZW5lcmF0ZWRDb2x1bW4oKVxuICBpZDogbnVtYmVyO1xuXG4gIEBDb2x1bW4oeyB0eXBlOiAndmFyY2hhcicgfSlcbiAgZXh0cmFjdG9yOiBzdHJpbmc7XG5cbiAgQENvbHVtbih7IHR5cGU6ICd2YXJjaGFyJyB9KVxuICBib3hJZDogc3RyaW5nO1xuXG4gIEBDb2x1bW4oeyB0eXBlOiAndmFyY2hhcicgfSlcbiAgYm94U2VyaWFsaXplZDogc3RyaW5nO1xuXG4gIEBDb2x1bW4oeyB0eXBlOiAndmFyY2hhcicgfSlcbiAgV0lEOiBzdHJpbmc7XG5cbiAgQENvbHVtbih7IHR5cGU6ICd2YXJjaGFyJyB9KVxuICBibG9jazogc3RyaW5nO1xuXG4gIEBDb2x1bW4oeyB0eXBlOiAnaW50JyB9KVxuICBoZWlnaHQ6IG51bWJlcjtcblxuICBAQ29sdW1uKHsgbnVsbGFibGU6IHRydWUsIHR5cGU6ICd0ZXh0JyB9KVxuICBzcGVuZEJsb2NrPzogc3RyaW5nIHwgbnVsbDtcblxuICBAQ29sdW1uKHsgbnVsbGFibGU6IHRydWUsIHR5cGU6ICdpbnQnIH0pXG4gIHNwZW5kSGVpZ2h0PzogbnVtYmVyIHwgbnVsbDtcblxuICBAQ29sdW1uKHsgdHlwZTogJ3ZhcmNoYXInIH0pXG4gIHR4SWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgUGVybWl0RW50aXR5O1xuIl19
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWl0RW50aXR5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL2VudGl0aWVzL3Blcm1pdEVudGl0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBR2hFLElBQU0sWUFBWSxHQUFsQixNQUFNLFlBQWEsU0FBUSxxQkFBcUI7SUFFOUMsR0FBRyxDQUFTO0lBR1osSUFBSSxDQUFTO0NBQ2QsQ0FBQTtBQUpDO0lBREMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDOzt5Q0FDaEI7QUFHWjtJQURDLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQzs7MENBQ2Y7QUFMVCxZQUFZO0lBRGpCLE1BQU0sQ0FBQyxlQUFlLENBQUM7R0FDbEIsWUFBWSxDQU1qQjtBQUVELGVBQWUsWUFBWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RFcmdvQm94RW50aXR5IH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9hYnN0cmFjdC1leHRyYWN0b3InO1xuaW1wb3J0IHsgQ29sdW1uLCBFbnRpdHkgfSBmcm9tICdAcm9zZW4tYnJpZGdlL2V4dGVuZGVkLXR5cGVvcm0nO1xuXG5ARW50aXR5KCdwZXJtaXRfZW50aXR5JylcbmNsYXNzIFBlcm1pdEVudGl0eSBleHRlbmRzIEFic3RyYWN0RXJnb0JveEVudGl0eSB7XG4gIEBDb2x1bW4oeyB0eXBlOiAndmFyY2hhcicgfSlcbiAgV0lEOiBzdHJpbmc7XG5cbiAgQENvbHVtbih7IHR5cGU6ICd2YXJjaGFyJyB9KVxuICB0eElkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFBlcm1pdEVudGl0eTtcbiJdfQ==