@rosen-bridge/minimum-fee 2.2.2 → 2.3.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 (54) hide show
  1. package/dist/MinimumFeeBox.d.ts +55 -0
  2. package/dist/MinimumFeeBox.d.ts.map +1 -0
  3. package/dist/MinimumFeeBox.js +219 -0
  4. package/dist/MinimumFeeBoxBuilder.d.ts +55 -0
  5. package/dist/MinimumFeeBoxBuilder.d.ts.map +1 -0
  6. package/dist/MinimumFeeBoxBuilder.js +138 -0
  7. package/dist/MinimumFeeConfig.d.ts +22 -0
  8. package/dist/MinimumFeeConfig.d.ts.map +1 -0
  9. package/dist/MinimumFeeConfig.js +41 -0
  10. package/dist/constants.d.ts +3 -0
  11. package/dist/constants.d.ts.map +1 -0
  12. package/dist/constants.js +3 -0
  13. package/dist/{lib/errors.d.ts → errors.d.ts} +6 -6
  14. package/dist/errors.d.ts.map +1 -0
  15. package/dist/errors.js +26 -0
  16. package/dist/handleApiError.d.ts +18 -0
  17. package/dist/handleApiError.d.ts.map +1 -0
  18. package/dist/handleApiError.js +35 -0
  19. package/dist/{lib/index.d.ts → index.d.ts} +1 -1
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +8 -0
  22. package/dist/types.d.ts +38 -0
  23. package/dist/types.d.ts.map +1 -0
  24. package/dist/types.js +22 -0
  25. package/dist/{lib/utils.d.ts → utils.d.ts} +7 -7
  26. package/dist/utils.d.ts.map +1 -0
  27. package/dist/utils.js +111 -0
  28. package/package.json +12 -16
  29. package/dist/lib/MinimumFeeBox.d.ts +0 -65
  30. package/dist/lib/MinimumFeeBox.d.ts.map +0 -1
  31. package/dist/lib/MinimumFeeBox.js +0 -219
  32. package/dist/lib/MinimumFeeBoxBuilder.d.ts +0 -55
  33. package/dist/lib/MinimumFeeBoxBuilder.d.ts.map +0 -1
  34. package/dist/lib/MinimumFeeBoxBuilder.js +0 -168
  35. package/dist/lib/MinimumFeeConfig.d.ts +0 -26
  36. package/dist/lib/MinimumFeeConfig.d.ts.map +0 -1
  37. package/dist/lib/MinimumFeeConfig.js +0 -39
  38. package/dist/lib/constants.d.ts +0 -3
  39. package/dist/lib/constants.d.ts.map +0 -1
  40. package/dist/lib/constants.js +0 -3
  41. package/dist/lib/errors.d.ts.map +0 -1
  42. package/dist/lib/errors.js +0 -26
  43. package/dist/lib/handleApiError.d.ts +0 -37
  44. package/dist/lib/handleApiError.d.ts.map +0 -1
  45. package/dist/lib/handleApiError.js +0 -37
  46. package/dist/lib/index.d.ts.map +0 -1
  47. package/dist/lib/index.js +0 -8
  48. package/dist/lib/types.d.ts +0 -38
  49. package/dist/lib/types.d.ts.map +0 -1
  50. package/dist/lib/types.js +0 -22
  51. package/dist/lib/utils.d.ts.map +0 -1
  52. package/dist/lib/utils.js +0 -110
  53. package/dist/tsconfig.build.tsbuildinfo +0 -1
  54. package/dist/tsconfig.tsbuildinfo +0 -1
@@ -1,219 +0,0 @@
1
- import { Address, ErgoBox, NetworkPrefix } from 'ergo-lib-wasm-nodejs';
2
- import { ChainMinimumFee, ErgoNetworkType } from './types';
3
- import { FailedError, NotFoundError } from './errors';
4
- import ergoExplorerClientFactory from '@rosen-clients/ergo-explorer';
5
- import ergoNodeClientFactory from '@rosen-clients/ergo-node';
6
- import JsonBigInt from '@rosen-bridge/json-bigint';
7
- import handleApiError from './handleApiError';
8
- import { DummyLogger } from '@rosen-bridge/abstract-logger';
9
- import { MinimumFeeBoxBuilder } from './MinimumFeeBoxBuilder';
10
- import { MinimumFeeConfig } from './MinimumFeeConfig';
11
- import { ERGO_NATIVE_TOKEN } from './constants';
12
- import { extractFeeFromBox } from './utils';
13
- export class MinimumFeeBox {
14
- BOX_FETCHING_PAGE_SIZE = 50;
15
- logger;
16
- box;
17
- tokenId;
18
- minimumFeeNFT;
19
- explorerClient;
20
- nodeClient;
21
- constructor(tokenId, minimumFeeNFT, networkType, networkUrl, logger) {
22
- this.tokenId = tokenId;
23
- this.minimumFeeNFT = minimumFeeNFT;
24
- if (networkType === ErgoNetworkType.explorer)
25
- this.explorerClient = ergoExplorerClientFactory(networkUrl);
26
- else
27
- this.nodeClient = ergoNodeClientFactory(networkUrl);
28
- this.logger = logger ? logger : new DummyLogger();
29
- }
30
- /**
31
- * fetches the box from the blockchain
32
- * @returns true if action was successful, otherwise false
33
- */
34
- fetchBox = async () => {
35
- const boxHasAppropriateTokens = (box) => {
36
- const tokenLen = box.tokens().len();
37
- let hasMinimumFeeNFT = false;
38
- let hasTargetToken = this.tokenId === ERGO_NATIVE_TOKEN ? true : false;
39
- const hasCorrectTokens = this.tokenId === ERGO_NATIVE_TOKEN ? tokenLen === 1 : tokenLen === 2;
40
- for (let i = 0; i < tokenLen; i++) {
41
- const id = box.tokens().get(i).id().to_str();
42
- if (id === this.minimumFeeNFT)
43
- hasMinimumFeeNFT = true;
44
- else if (id === this.tokenId)
45
- hasTargetToken = true;
46
- }
47
- return hasCorrectTokens && hasMinimumFeeNFT && hasTargetToken;
48
- };
49
- try {
50
- const boxes = this.explorerClient
51
- ? await this.fetchBoxesUsingExplorer()
52
- : await this.fetchBoxesUsingNode();
53
- this.box = this.selectEligibleBox(boxes.filter((box) => boxHasAppropriateTokens(box)));
54
- return true;
55
- }
56
- catch (e) {
57
- if (e instanceof NotFoundError || e instanceof FailedError) {
58
- this.logger.warn(`No valid minimum-fee box. reason: ${e}`);
59
- this.box = undefined;
60
- }
61
- else {
62
- this.logger.warn(`An error occurred while updating minimum-fee box for token [${this.tokenId}]: ${e}`);
63
- if (e instanceof Error && e.stack)
64
- this.logger.warn(e.stack);
65
- }
66
- return false;
67
- }
68
- };
69
- /**
70
- * returns fetched box or throws appropriate error if found more or none
71
- * @param eligibleBoxes
72
- */
73
- selectEligibleBox = (eligibleBoxes) => {
74
- this.logger.debug(`Found [${eligibleBoxes.length}] minimum-fee boxes: ${JsonBigInt.stringify(eligibleBoxes.map((box) => box.to_json()))}`);
75
- if (eligibleBoxes.length === 0) {
76
- throw new NotFoundError(`Found no minimum-fee box for token [${this.tokenId}]`);
77
- }
78
- else if (eligibleBoxes.length > 1) {
79
- throw new FailedError(`Found [${eligibleBoxes.length}] minimum-fee boxes for token [${this.tokenId}]`);
80
- }
81
- else {
82
- this.logger.debug(`Found minimum-fee box [${eligibleBoxes[0]
83
- .box_id()
84
- .to_str()}] for token [${this.tokenId}]`);
85
- return eligibleBoxes[0];
86
- }
87
- };
88
- /**
89
- * fetches box from the blockchain using explorer client
90
- */
91
- fetchBoxesUsingExplorer = async () => {
92
- const boxes = [];
93
- try {
94
- let currentPage = 0;
95
- let boxesPage = await this.explorerClient.v1.getApiV1BoxesUnspentBytokenidP1(this.minimumFeeNFT, {
96
- offset: currentPage * this.BOX_FETCHING_PAGE_SIZE,
97
- limit: this.BOX_FETCHING_PAGE_SIZE,
98
- });
99
- this.logger.debug(`requested 'explorerClient.getApiV1BoxesUnspentBytokenidP1' for token [${this.minimumFeeNFT}]. res: ${JsonBigInt.stringify(boxesPage)}`);
100
- while (boxesPage.items?.length) {
101
- boxes.push(...boxesPage.items.map((box) => ErgoBox.from_json(JsonBigInt.stringify(box))));
102
- currentPage++;
103
- boxesPage =
104
- await this.explorerClient.v1.getApiV1BoxesUnspentBytokenidP1(this.minimumFeeNFT, {
105
- offset: currentPage * this.BOX_FETCHING_PAGE_SIZE,
106
- limit: this.BOX_FETCHING_PAGE_SIZE,
107
- });
108
- this.logger.debug(`requested 'explorerClient.getApiV1BoxesUnspentBytokenidP1' for token [${this.minimumFeeNFT}]. res: ${JsonBigInt.stringify(boxesPage)}`);
109
- }
110
- }
111
- catch (error) {
112
- return handleApiError(error, 'Failed to get boxes by token id from Ergo Explorer:');
113
- }
114
- return boxes;
115
- };
116
- /**
117
- * fetches the box from the blockchain using node client
118
- */
119
- fetchBoxesUsingNode = async () => {
120
- const boxes = [];
121
- try {
122
- let currentPage = 0;
123
- let boxesPage = await this.nodeClient.getBoxesByTokenIdUnspent(this.minimumFeeNFT, {
124
- offset: currentPage * this.BOX_FETCHING_PAGE_SIZE,
125
- limit: this.BOX_FETCHING_PAGE_SIZE,
126
- });
127
- this.logger.debug(`requested 'nodeClient.getBoxesByTokenIdUnspent' for token [${this.minimumFeeNFT}]. res: ${JsonBigInt.stringify(boxesPage)}`);
128
- while (boxesPage.length !== 0) {
129
- boxes.push(...boxesPage.map((box) => ErgoBox.from_json(JsonBigInt.stringify(box))));
130
- currentPage++;
131
- boxesPage = await this.nodeClient.getBoxesByTokenIdUnspent(this.minimumFeeNFT, {
132
- offset: currentPage * this.BOX_FETCHING_PAGE_SIZE,
133
- limit: this.BOX_FETCHING_PAGE_SIZE,
134
- });
135
- this.logger.debug(`requested 'nodeClient.getBoxesByTokenIdUnspent' for token [${this.minimumFeeNFT}]. res: ${JsonBigInt.stringify(boxesPage)}`);
136
- }
137
- }
138
- catch (error) {
139
- const baseError = 'Failed to get boxes by token id from Ergo Node:';
140
- handleApiError(error, baseError, {
141
- handleRespondedState: (error) => {
142
- if (error.response.status === 400)
143
- return;
144
- throw new FailedError(`${baseError} [${error.response.status}] ${error.response.data.reason}`);
145
- },
146
- });
147
- }
148
- return boxes;
149
- };
150
- /**
151
- * returns fetched config box
152
- */
153
- getBox = () => this.box;
154
- /**
155
- * gets current feeConfig
156
- */
157
- getConfigs = () => {
158
- if (!this.box)
159
- throw Error(`Box is not fetched yet`);
160
- const fee = extractFeeFromBox(this.box);
161
- this.logger.debug(`Extracted fee config from box [${this.box
162
- .box_id()
163
- .to_str()}]: ${JsonBigInt.stringify(fee)}`);
164
- return fee;
165
- };
166
- /**
167
- * gets corresponding config for two chains and height
168
- * @param fromChain
169
- * @param height blockchain height for fromChain
170
- * @param toChain
171
- */
172
- getFee = (fromChain, height, toChain) => {
173
- if (!this.box)
174
- throw Error(`Box is not fetched yet`);
175
- const fees = this.getConfigs().reverse();
176
- for (const fee of fees) {
177
- if (!Object.hasOwn(fee.heights, fromChain))
178
- throw new NotFoundError(`No fee found for chain [${fromChain}] in box [${this.box
179
- .box_id()
180
- .to_str()}]`);
181
- if (fee.heights[fromChain] < height) {
182
- const chainFee = fee.configs[toChain];
183
- if (chainFee)
184
- return new ChainMinimumFee(chainFee);
185
- else
186
- throw new Error(`Chain [${toChain}] is not supported at given height of fromChain [${height} of ${fromChain}] in box [${this.box
187
- .box_id()
188
- .to_str()}]`);
189
- }
190
- }
191
- throw new NotFoundError(`Config does not support height [${height}] for chain [${fromChain}] in box [${this.box
192
- .box_id()
193
- .to_str()}]`);
194
- };
195
- /**
196
- * generates a MinimumFeeBoxBuilder using current box
197
- * note that 'height' parameter of builder won't be set
198
- */
199
- toBuilder = () => {
200
- if (!this.box)
201
- throw Error(`Box is not fetched yet`);
202
- const builder = new MinimumFeeBoxBuilder(this.minimumFeeNFT, Address.recreate_from_ergo_tree(this.box.ergo_tree()).to_base58(NetworkPrefix.Mainnet))
203
- .setValue(BigInt(this.box.value().as_i64().to_str()))
204
- .setToken(this.tokenId);
205
- this.getConfigs().forEach((fee) => {
206
- this.logger.debug(`Extracted fee config from box [${this.box.box_id().to_str()}]: ${JsonBigInt.stringify(fee)}`);
207
- const chainFee = new MinimumFeeConfig();
208
- Object.keys(fee.heights).forEach((chain) => {
209
- if (Object.hasOwn(fee.configs, chain))
210
- chainFee.setChainConfig(chain, fee.heights[chain], fee.configs[chain]);
211
- else
212
- chainFee.setChainConfig(chain, fee.heights[chain], undefined);
213
- });
214
- builder.addConfig(chainFee);
215
- });
216
- return builder;
217
- };
218
- }
219
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWluaW11bUZlZUJveC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9NaW5pbXVtRmVlQm94LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFPLE1BQU0sU0FBUyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3RELE9BQU8seUJBQXlCLE1BQU0sOEJBQThCLENBQUM7QUFDckUsT0FBTyxxQkFBcUIsTUFBTSwwQkFBMEIsQ0FBQztBQUM3RCxPQUFPLFVBQVUsTUFBTSwyQkFBMkIsQ0FBQztBQUNuRCxPQUFPLGNBQWMsTUFBTSxrQkFBa0IsQ0FBQztBQUM5QyxPQUFPLEVBQWtCLFdBQVcsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNoRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFNUMsTUFBTSxPQUFPLGFBQWE7SUFDTCxzQkFBc0IsR0FBRyxFQUFFLENBQUM7SUFDckMsTUFBTSxDQUFpQjtJQUN2QixHQUFHLENBQXNCO0lBQ3pCLE9BQU8sQ0FBUztJQUNoQixhQUFhLENBQVM7SUFDdEIsY0FBYyxDQUErQztJQUM3RCxVQUFVLENBQTJDO0lBRS9ELFlBQ0UsT0FBZSxFQUNmLGFBQXFCLEVBQ3JCLFdBQTRCLEVBQzVCLFVBQWtCLEVBQ2xCLE1BQXVCO1FBRXZCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FB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Q0FBQzthQUNwRCxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTFCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNoQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDZixrQ0FBa0MsSUFBSSxDQUFDLEdBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUMsU0FBUyxDQUNyRixHQUFHLENBQ0osRUFBRSxDQUNKLENBQUM7WUFDRixNQUFNLFFBQVEsR0FBRyxJQUFJLGdCQUFnQixFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ3pDLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQztvQkFDbkMsUUFBUSxDQUFDLGNBQWMsQ0FDckIsS0FBSyxFQUNMLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQ2xCLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQ25CLENBQUM7O29CQUNDLFFBQVEsQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDckUsQ0FBQyxDQUFDLENBQUM7WUFDSCxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQyxDQUFDO0NBQ0giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZGRyZXNzLCBFcmdvQm94LCBOZXR3b3JrUHJlZml4IH0gZnJvbSAnZXJnby1saWItd2FzbS1ub2RlanMnO1xuaW1wb3J0IHsgQ2hhaW5NaW5pbXVtRmVlLCBFcmdvTmV0d29ya1R5cGUsIEZlZSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgRmFpbGVkRXJyb3IsIE5vdEZvdW5kRXJyb3IgfSBmcm9tICcuL2Vycm9ycyc7XG5pbXBvcnQgZXJnb0V4cGxvcmVyQ2xpZW50RmFjdG9yeSBmcm9tICdAcm9zZW4tY2xpZW50cy9lcmdvLWV4cGxvcmVyJztcbmltcG9ydCBlcmdvTm9kZUNsaWVudEZhY3RvcnkgZnJvbSAnQHJvc2VuLWNsaWVudHMvZXJnby1ub2RlJztcbmltcG9ydCBKc29uQmlnSW50IGZyb20gJ0Byb3Nlbi1icmlkZ2UvanNvbi1iaWdpbnQnO1xuaW1wb3J0IGhhbmRsZUFwaUVycm9yIGZyb20gJy4vaGFuZGxlQXBpRXJyb3InO1xuaW1wb3J0IHsgQWJzdHJhY3RMb2dnZXIsIER1bW15TG9nZ2VyIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9hYnN0cmFjdC1sb2dnZXInO1xuaW1wb3J0IHsgTWluaW11bUZlZUJveEJ1aWxkZXIgfSBmcm9tICcuL01pbmltdW1GZWVCb3hCdWlsZGVyJztcbmltcG9ydCB7IE1pbmltdW1GZWVDb25maWcgfSBmcm9tICcuL01pbmltdW1GZWVDb25maWcnO1xuaW1wb3J0IHsgRVJHT19OQVRJVkVfVE9LRU4gfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBleHRyYWN0RmVlRnJvbUJveCB9IGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgY2xhc3MgTWluaW11bUZlZUJveCB7XG4gIHByb3RlY3RlZCByZWFkb25seSBCT1hfRkVUQ0hJTkdfUEFHRV9TSVpFID0gNTA7XG4gIHByb3RlY3RlZCBsb2dnZXI6IEFic3RyYWN0TG9nZ2VyO1xuICBwcm90ZWN0ZWQgYm94OiBFcmdvQm94IHwgdW5kZWZpbmVkO1xuICBwcm90ZWN0ZWQgdG9rZW5JZDogc3RyaW5nO1xuICBwcm90ZWN0ZWQgbWluaW11bUZlZU5GVDogc3RyaW5nO1xuICBwcm90ZWN0ZWQgZXhwbG9yZXJDbGllbnQ6IFJldHVyblR5cGU8dHlwZW9mIGVyZ29FeHBsb3JlckNsaWVudEZhY3Rvcnk+O1xuICBwcm90ZWN0ZWQgbm9kZUNsaWVudDogUmV0dXJuVHlwZTx0eXBlb2YgZXJnb05vZGVDbGllbnRGYWN0b3J5PjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICB0b2tlbklkOiBzdHJpbmcsXG4gICAgbWluaW11bUZlZU5GVDogc3RyaW5nLFxuICAgIG5ldHdvcmtUeXBlOiBFcmdvTmV0d29ya1R5cGUsXG4gICAgbmV0d29ya1VybDogc3RyaW5nLFxuICAgIGxvZ2dlcj86IEFic3RyYWN0TG9nZ2VyXG4gICkge1xuICAgIHRoaXMudG9rZW5JZCA9IHRva2VuSWQ7XG4gICAgdGhpcy5taW5pbXVtRmVlTkZUID0gbWluaW11bUZlZU5GVDtcbiAgICBpZiAobmV0d29ya1R5cGUgPT09IEVyZ29OZXR3b3JrVHlwZS5leHBsb3JlcilcbiAgICAgIHRoaXMuZXhwbG9yZXJDbGllbnQgPSBlcmdvRXhwbG9yZXJDbGllbnRGYWN0b3J5KG5ldHdvcmtVcmwpO1xuICAgIGVsc2UgdGhpcy5ub2RlQ2xpZW50ID0gZXJnb05vZGVDbGllbnRGYWN0b3J5KG5ldHdvcmtVcmwpO1xuICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyID8gbG9nZ2VyIDogbmV3IER1bW15TG9nZ2VyKCk7XG4gIH1cblxuICAvKipcbiAgICogZmV0Y2hlcyB0aGUgYm94IGZyb20gdGhlIGJsb2NrY2hhaW5cbiAgICogQHJldHVybnMgdHJ1ZSBpZiBhY3Rpb24gd2FzIHN1Y2Nlc3NmdWwsIG90aGVyd2lzZSBmYWxzZVxuICAgKi9cbiAgZmV0Y2hCb3ggPSBhc3luYyAoKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gICAgY29uc3QgYm94SGFzQXBwcm9wcmlhdGVUb2tlbnMgPSAoYm94OiBFcmdvQm94KSA9PiB7XG4gICAgICBjb25zdCB0b2tlbkxlbiA9IGJveC50b2tlbnMoKS5sZW4oKTtcbiAgICAgIGxldCBoYXNNaW5pbXVtRmVlTkZUID0gZmFsc2U7XG4gICAgICBsZXQgaGFzVGFyZ2V0VG9rZW4gPSB0aGlzLnRva2VuSWQgPT09IEVSR09fTkFUSVZFX1RPS0VOID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgY29uc3QgaGFzQ29ycmVjdFRva2VucyA9XG4gICAgICAgIHRoaXMudG9rZW5JZCA9PT0gRVJHT19OQVRJVkVfVE9LRU4gPyB0b2tlbkxlbiA9PT0gMSA6IHRva2VuTGVuID09PSAyO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b2tlbkxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGlkID0gYm94LnRva2VucygpLmdldChpKS5pZCgpLnRvX3N0cigpO1xuICAgICAgICBpZiAoaWQgPT09IHRoaXMubWluaW11bUZlZU5GVCkgaGFzTWluaW11bUZlZU5GVCA9IHRydWU7XG4gICAgICAgIGVsc2UgaWYgKGlkID09PSB0aGlzLnRva2VuSWQpIGhhc1RhcmdldFRva2VuID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBoYXNDb3JyZWN0VG9rZW5zICYmIGhhc01pbmltdW1GZWVORlQgJiYgaGFzVGFyZ2V0VG9rZW47XG4gICAgfTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBib3hlcyA9IHRoaXMuZXhwbG9yZXJDbGllbnRcbiAgICAgICAgPyBhd2FpdCB0aGlzLmZldGNoQm94ZXNVc2luZ0V4cGxvcmVyKClcbiAgICAgICAgOiBhd2FpdCB0aGlzLmZldGNoQm94ZXNVc2luZ05vZGUoKTtcblxuICAgICAgdGhpcy5ib3ggPSB0aGlzLnNlbGVjdEVsaWdpYmxlQm94KFxuICAgICAgICBib3hlcy5maWx0ZXIoKGJveDogRXJnb0JveCkgPT4gYm94SGFzQXBwcm9wcmlhdGVUb2tlbnMoYm94KSlcbiAgICAgICk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIE5vdEZvdW5kRXJyb3IgfHwgZSBpbnN0YW5jZW9mIEZhaWxlZEVycm9yKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLndhcm4oYE5vIHZhbGlkIG1pbmltdW0tZmVlIGJveC4gcmVhc29uOiAke2V9YCk7XG4gICAgICAgIHRoaXMuYm94ID0gdW5kZWZpbmVkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybihcbiAgICAgICAgICBgQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdXBkYXRpbmcgbWluaW11bS1mZWUgYm94IGZvciB0b2tlbiBbJHt0aGlzLnRva2VuSWR9XTogJHtlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvciAmJiBlLnN0YWNrKSB0aGlzLmxvZ2dlci53YXJuKGUuc3RhY2spO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogcmV0dXJucyBmZXRjaGVkIGJveCBvciB0aHJvd3MgYXBwcm9wcmlhdGUgZXJyb3IgaWYgZm91bmQgbW9yZSBvciBub25lXG4gICAqIEBwYXJhbSBlbGlnaWJsZUJveGVzXG4gICAqL1xuICBwcm90ZWN0ZWQgc2VsZWN0RWxpZ2libGVCb3ggPSAoZWxpZ2libGVCb3hlczogQXJyYXk8RXJnb0JveD4pOiBFcmdvQm94ID0+IHtcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBGb3VuZCBbJHtcbiAgICAgICAgZWxpZ2libGVCb3hlcy5sZW5ndGhcbiAgICAgIH1dIG1pbmltdW0tZmVlIGJveGVzOiAke0pzb25CaWdJbnQuc3RyaW5naWZ5KFxuICAgICAgICBlbGlnaWJsZUJveGVzLm1hcCgoYm94KSA9PiBib3gudG9fanNvbigpKVxuICAgICAgKX1gXG4gICAgKTtcblxuICAgIGlmIChlbGlnaWJsZUJveGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kRXJyb3IoXG4gICAgICAgIGBGb3VuZCBubyBtaW5pbXVtLWZlZSBib3ggZm9yIHRva2VuIFske3RoaXMudG9rZW5JZH1dYFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGVsaWdpYmxlQm94ZXMubGVuZ3RoID4gMSkge1xuICAgICAgdGhyb3cgbmV3IEZhaWxlZEVycm9yKFxuICAgICAgICBgRm91bmQgWyR7ZWxpZ2libGVCb3hlcy5sZW5ndGh9XSBtaW5pbXVtLWZlZSBib3hlcyBmb3IgdG9rZW4gWyR7dGhpcy50b2tlbklkfV1gXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYEZvdW5kIG1pbmltdW0tZmVlIGJveCBbJHtlbGlnaWJsZUJveGVzWzBdXG4gICAgICAgICAgLmJveF9pZCgpXG4gICAgICAgICAgLnRvX3N0cigpfV0gZm9yIHRva2VuIFske3RoaXMudG9rZW5JZH1dYFxuICAgICAgKTtcbiAgICAgIHJldHVybiBlbGlnaWJsZUJveGVzWzBdO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogZmV0Y2hlcyBib3ggZnJvbSB0aGUgYmxvY2tjaGFpbiB1c2luZyBleHBsb3JlciBjbGllbnRcbiAgICovXG4gIHByb3RlY3RlZCBmZXRjaEJveGVzVXNpbmdFeHBsb3JlciA9IGFzeW5jICgpOiBQcm9taXNlPEFycmF5PEVyZ29Cb3g+PiA9PiB7XG4gICAgY29uc3QgYm94ZXM6IEFycmF5PEVyZ29Cb3g+ID0gW107XG4gICAgdHJ5IHtcbiAgICAgIGxldCBjdXJyZW50UGFnZSA9IDA7XG4gICAgICBsZXQgYm94ZXNQYWdlID1cbiAgICAgICAgYXdhaXQgdGhpcy5leHBsb3JlckNsaWVudC52MS5nZXRBcGlWMUJveGVzVW5zcGVudEJ5dG9rZW5pZFAxKFxuICAgICAgICAgIHRoaXMubWluaW11bUZlZU5GVCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBvZmZzZXQ6IGN1cnJlbnRQYWdlICogdGhpcy5CT1hfRkVUQ0hJTkdfUEFHRV9TSVpFLFxuICAgICAgICAgICAgbGltaXQ6IHRoaXMuQk9YX0ZFVENISU5HX1BBR0VfU0laRSxcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYHJlcXVlc3RlZCAnZXhwbG9yZXJDbGllbnQuZ2V0QXBpVjFCb3hlc1Vuc3BlbnRCeXRva2VuaWRQMScgZm9yIHRva2VuIFske1xuICAgICAgICAgIHRoaXMubWluaW11bUZlZU5GVFxuICAgICAgICB9XS4gcmVzOiAke0pzb25CaWdJbnQuc3RyaW5naWZ5KGJveGVzUGFnZSl9YFxuICAgICAgKTtcbiAgICAgIHdoaWxlIChib3hlc1BhZ2UuaXRlbXM/Lmxlbmd0aCkge1xuICAgICAgICBib3hlcy5wdXNoKFxuICAgICAgICAgIC4uLmJveGVzUGFnZS5pdGVtcy5tYXAoKGJveCkgPT5cbiAgICAgICAgICAgIEVyZ29Cb3guZnJvbV9qc29uKEpzb25CaWdJbnQuc3RyaW5naWZ5KGJveCkpXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICBjdXJyZW50UGFnZSsrO1xuICAgICAgICBib3hlc1BhZ2UgPVxuICAgICAgICAgIGF3YWl0IHRoaXMuZXhwbG9yZXJDbGllbnQudjEuZ2V0QXBpVjFCb3hlc1Vuc3BlbnRCeXRva2VuaWRQMShcbiAgICAgICAgICAgIHRoaXMubWluaW11bUZlZU5GVCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgb2Zmc2V0OiBjdXJyZW50UGFnZSAqIHRoaXMuQk9YX0ZFVENISU5HX1BBR0VfU0laRSxcbiAgICAgICAgICAgICAgbGltaXQ6IHRoaXMuQk9YX0ZFVENISU5HX1BBR0VfU0laRSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICBgcmVxdWVzdGVkICdleHBsb3JlckNsaWVudC5nZXRBcGlWMUJveGVzVW5zcGVudEJ5dG9rZW5pZFAxJyBmb3IgdG9rZW4gWyR7XG4gICAgICAgICAgICB0aGlzLm1pbmltdW1GZWVORlRcbiAgICAgICAgICB9XS4gcmVzOiAke0pzb25CaWdJbnQuc3RyaW5naWZ5KGJveGVzUGFnZSl9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gaGFuZGxlQXBpRXJyb3IoXG4gICAgICAgIGVycm9yLFxuICAgICAgICAnRmFpbGVkIHRvIGdldCBib3hlcyBieSB0b2tlbiBpZCBmcm9tIEVyZ28gRXhwbG9yZXI6J1xuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYm94ZXM7XG4gIH07XG5cbiAgLyoqXG4gICAqIGZldGNoZXMgdGhlIGJveCBmcm9tIHRoZSBibG9ja2NoYWluIHVzaW5nIG5vZGUgY2xpZW50XG4gICAqL1xuICBwcm90ZWN0ZWQgZmV0Y2hCb3hlc1VzaW5nTm9kZSA9IGFzeW5jICgpOiBQcm9taXNlPEFycmF5PEVyZ29Cb3g+PiA9PiB7XG4gICAgY29uc3QgYm94ZXM6IEFycmF5PEVyZ29Cb3g+ID0gW107XG4gICAgdHJ5IHtcbiAgICAgIGxldCBjdXJyZW50UGFnZSA9IDA7XG4gICAgICBsZXQgYm94ZXNQYWdlID0gYXdhaXQgdGhpcy5ub2RlQ2xpZW50LmdldEJveGVzQnlUb2tlbklkVW5zcGVudChcbiAgICAgICAgdGhpcy5taW5pbXVtRmVlTkZULFxuICAgICAgICB7XG4gICAgICAgICAgb2Zmc2V0OiBjdXJyZW50UGFnZSAqIHRoaXMuQk9YX0ZFVENISU5HX1BBR0VfU0laRSxcbiAgICAgICAgICBsaW1pdDogdGhpcy5CT1hfRkVUQ0hJTkdfUEFHRV9TSVpFLFxuICAgICAgICB9XG4gICAgICApO1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgIGByZXF1ZXN0ZWQgJ25vZGVDbGllbnQuZ2V0Qm94ZXNCeVRva2VuSWRVbnNwZW50JyBmb3IgdG9rZW4gWyR7XG4gICAgICAgICAgdGhpcy5taW5pbXVtRmVlTkZUXG4gICAgICAgIH1dLiByZXM6ICR7SnNvbkJpZ0ludC5zdHJpbmdpZnkoYm94ZXNQYWdlKX1gXG4gICAgICApO1xuICAgICAgd2hpbGUgKGJveGVzUGFnZS5sZW5ndGggIT09IDApIHtcbiAgICAgICAgYm94ZXMucHVzaChcbiAgICAgICAgICAuLi5ib3hlc1BhZ2UubWFwKChib3gpID0+XG4gICAgICAgICAgICBFcmdvQm94LmZyb21fanNvbihKc29uQmlnSW50LnN0cmluZ2lmeShib3gpKVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgY3VycmVudFBhZ2UrKztcbiAgICAgICAgYm94ZXNQYWdlID0gYXdhaXQgdGhpcy5ub2RlQ2xpZW50LmdldEJveGVzQnlUb2tlbklkVW5zcGVudChcbiAgICAgICAgICB0aGlzLm1pbmltdW1GZWVORlQsXG4gICAgICAgICAge1xuICAgICAgICAgICAgb2Zmc2V0OiBjdXJyZW50UGFnZSAqIHRoaXMuQk9YX0ZFVENISU5HX1BBR0VfU0laRSxcbiAgICAgICAgICAgIGxpbWl0OiB0aGlzLkJPWF9GRVRDSElOR19QQUdFX1NJWkUsXG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICBgcmVxdWVzdGVkICdub2RlQ2xpZW50LmdldEJveGVzQnlUb2tlbklkVW5zcGVudCcgZm9yIHRva2VuIFske1xuICAgICAgICAgICAgdGhpcy5taW5pbXVtRmVlTkZUXG4gICAgICAgICAgfV0uIHJlczogJHtKc29uQmlnSW50LnN0cmluZ2lmeShib3hlc1BhZ2UpfWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgYmFzZUVycm9yID0gJ0ZhaWxlZCB0byBnZXQgYm94ZXMgYnkgdG9rZW4gaWQgZnJvbSBFcmdvIE5vZGU6JztcbiAgICAgIGhhbmRsZUFwaUVycm9yKGVycm9yLCBiYXNlRXJyb3IsIHtcbiAgICAgICAgaGFuZGxlUmVzcG9uZGVkU3RhdGU6IChlcnJvcikgPT4ge1xuICAgICAgICAgIGlmIChlcnJvci5yZXNwb25zZS5zdGF0dXMgPT09IDQwMCkgcmV0dXJuO1xuICAgICAgICAgIHRocm93IG5ldyBGYWlsZWRFcnJvcihcbiAgICAgICAgICAgIGAke2Jhc2VFcnJvcn0gWyR7ZXJyb3IucmVzcG9uc2Uuc3RhdHVzfV0gJHtlcnJvci5yZXNwb25zZS5kYXRhLnJlYXNvbn1gXG4gICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBib3hlcztcbiAgfTtcblxuICAvKipcbiAgICogcmV0dXJucyBmZXRjaGVkIGNvbmZpZyBib3hcbiAgICovXG4gIGdldEJveCA9ICgpOiBFcmdvQm94IHwgdW5kZWZpbmVkID0+IHRoaXMuYm94O1xuXG4gIC8qKlxuICAgKiBnZXRzIGN1cnJlbnQgZmVlQ29uZmlnXG4gICAqL1xuICBnZXRDb25maWdzID0gKCk6IEFycmF5PEZlZT4gPT4ge1xuICAgIGlmICghdGhpcy5ib3gpIHRocm93IEVycm9yKGBCb3ggaXMgbm90IGZldGNoZWQgeWV0YCk7XG4gICAgY29uc3QgZmVlID0gZXh0cmFjdEZlZUZyb21Cb3godGhpcy5ib3gpO1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgYEV4dHJhY3RlZCBmZWUgY29uZmlnIGZyb20gYm94IFske3RoaXMuYm94XG4gICAgICAgIC5ib3hfaWQoKVxuICAgICAgICAudG9fc3RyKCl9XTogJHtKc29uQmlnSW50LnN0cmluZ2lmeShmZWUpfWBcbiAgICApO1xuICAgIHJldHVybiBmZWU7XG4gIH07XG5cbiAgLyoqXG4gICAqIGdldHMgY29ycmVzcG9uZGluZyBjb25maWcgZm9yIHR3byBjaGFpbnMgYW5kIGhlaWdodFxuICAgKiBAcGFyYW0gZnJvbUNoYWluXG4gICAqIEBwYXJhbSBoZWlnaHQgYmxvY2tjaGFpbiBoZWlnaHQgZm9yIGZyb21DaGFpblxuICAgKiBAcGFyYW0gdG9DaGFpblxuICAgKi9cbiAgZ2V0RmVlID0gKFxuICAgIGZyb21DaGFpbjogc3RyaW5nLFxuICAgIGhlaWdodDogbnVtYmVyLFxuICAgIHRvQ2hhaW46IHN0cmluZ1xuICApOiBDaGFpbk1pbmltdW1GZWUgPT4ge1xuICAgIGlmICghdGhpcy5ib3gpIHRocm93IEVycm9yKGBCb3ggaXMgbm90IGZldGNoZWQgeWV0YCk7XG5cbiAgICBjb25zdCBmZWVzID0gdGhpcy5nZXRDb25maWdzKCkucmV2ZXJzZSgpO1xuICAgIGZvciAoY29uc3QgZmVlIG9mIGZlZXMpIHtcbiAgICAgIGlmICghT2JqZWN0Lmhhc093bihmZWUuaGVpZ2h0cywgZnJvbUNoYWluKSlcbiAgICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kRXJyb3IoXG4gICAgICAgICAgYE5vIGZlZSBmb3VuZCBmb3IgY2hhaW4gWyR7ZnJvbUNoYWlufV0gaW4gYm94IFske3RoaXMuYm94XG4gICAgICAgICAgICAuYm94X2lkKClcbiAgICAgICAgICAgIC50b19zdHIoKX1dYFxuICAgICAgICApO1xuICAgICAgaWYgKGZlZS5oZWlnaHRzW2Zyb21DaGFpbl0gPCBoZWlnaHQpIHtcbiAgICAgICAgY29uc3QgY2hhaW5GZWUgPSBmZWUuY29uZmlnc1t0b0NoYWluXTtcbiAgICAgICAgaWYgKGNoYWluRmVlKSByZXR1cm4gbmV3IENoYWluTWluaW11bUZlZShjaGFpbkZlZSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgQ2hhaW4gWyR7dG9DaGFpbn1dIGlzIG5vdCBzdXBwb3J0ZWQgYXQgZ2l2ZW4gaGVpZ2h0IG9mIGZyb21DaGFpbiBbJHtoZWlnaHR9IG9mICR7ZnJvbUNoYWlufV0gaW4gYm94IFske3RoaXMuYm94XG4gICAgICAgICAgICAgIC5ib3hfaWQoKVxuICAgICAgICAgICAgICAudG9fc3RyKCl9XWBcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRocm93IG5ldyBOb3RGb3VuZEVycm9yKFxuICAgICAgYENvbmZpZyBkb2VzIG5vdCBzdXBwb3J0IGhlaWdodCBbJHtoZWlnaHR9XSBmb3IgY2hhaW4gWyR7ZnJvbUNoYWlufV0gaW4gYm94IFske3RoaXMuYm94XG4gICAgICAgIC5ib3hfaWQoKVxuICAgICAgICAudG9fc3RyKCl9XWBcbiAgICApO1xuICB9O1xuXG4gIC8qKlxuICAgKiBnZW5lcmF0ZXMgYSBNaW5pbXVtRmVlQm94QnVpbGRlciB1c2luZyBjdXJyZW50IGJveFxuICAgKiAgbm90ZSB0aGF0ICdoZWlnaHQnIHBhcmFtZXRlciBvZiBidWlsZGVyIHdvbid0IGJlIHNldFxuICAgKi9cbiAgdG9CdWlsZGVyID0gKCk6IE1pbmltdW1GZWVCb3hCdWlsZGVyID0+IHtcbiAgICBpZiAoIXRoaXMuYm94KSB0aHJvdyBFcnJvcihgQm94IGlzIG5vdCBmZXRjaGVkIHlldGApO1xuXG4gICAgY29uc3QgYnVpbGRlciA9IG5ldyBNaW5pbXVtRmVlQm94QnVpbGRlcihcbiAgICAgIHRoaXMubWluaW11bUZlZU5GVCxcbiAgICAgIEFkZHJlc3MucmVjcmVhdGVfZnJvbV9lcmdvX3RyZWUodGhpcy5ib3guZXJnb190cmVlKCkpLnRvX2Jhc2U1OChcbiAgICAgICAgTmV0d29ya1ByZWZpeC5NYWlubmV0XG4gICAgICApXG4gICAgKVxuICAgICAgLnNldFZhbHVlKEJpZ0ludCh0aGlzLmJveC52YWx1ZSgpLmFzX2k2NCgpLnRvX3N0cigpKSlcbiAgICAgIC5zZXRUb2tlbih0aGlzLnRva2VuSWQpO1xuXG4gICAgdGhpcy5nZXRDb25maWdzKCkuZm9yRWFjaCgoZmVlKSA9PiB7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYEV4dHJhY3RlZCBmZWUgY29uZmlnIGZyb20gYm94IFske3RoaXMuYm94IS5ib3hfaWQoKS50b19zdHIoKX1dOiAke0pzb25CaWdJbnQuc3RyaW5naWZ5KFxuICAgICAgICAgIGZlZVxuICAgICAgICApfWBcbiAgICAgICk7XG4gICAgICBjb25zdCBjaGFpbkZlZSA9IG5ldyBNaW5pbXVtRmVlQ29uZmlnKCk7XG4gICAgICBPYmplY3Qua2V5cyhmZWUuaGVpZ2h0cykuZm9yRWFjaCgoY2hhaW4pID0+IHtcbiAgICAgICAgaWYgKE9iamVjdC5oYXNPd24oZmVlLmNvbmZpZ3MsIGNoYWluKSlcbiAgICAgICAgICBjaGFpbkZlZS5zZXRDaGFpbkNvbmZpZyhcbiAgICAgICAgICAgIGNoYWluLFxuICAgICAgICAgICAgZmVlLmhlaWdodHNbY2hhaW5dLFxuICAgICAgICAgICAgZmVlLmNvbmZpZ3NbY2hhaW5dXG4gICAgICAgICAgKTtcbiAgICAgICAgZWxzZSBjaGFpbkZlZS5zZXRDaGFpbkNvbmZpZyhjaGFpbiwgZmVlLmhlaWdodHNbY2hhaW5dLCB1bmRlZmluZWQpO1xuICAgICAgfSk7XG4gICAgICBidWlsZGVyLmFkZENvbmZpZyhjaGFpbkZlZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGJ1aWxkZXI7XG4gIH07XG59XG4iXX0=
@@ -1,55 +0,0 @@
1
- import { BoxValue, ErgoBoxCandidate } from 'ergo-lib-wasm-nodejs';
2
- import { MinimumFeeConfig } from './MinimumFeeConfig';
3
- import { Fee } from './types';
4
- export declare class MinimumFeeBoxBuilder {
5
- protected fees: Array<Fee>;
6
- protected boxValue: BoxValue;
7
- protected boxHeight: number;
8
- protected tokenId: string;
9
- protected minimumFeeNFT: string;
10
- protected address: string;
11
- constructor(minimumFeeNFT: string, address: string);
12
- /**
13
- * adds a feeConfig
14
- * @param feeConfig
15
- */
16
- addConfig: (feeConfig: MinimumFeeConfig) => MinimumFeeBoxBuilder;
17
- /**
18
- * removes a config by index
19
- * @param index
20
- */
21
- removeConfig: (index: number) => MinimumFeeBoxBuilder;
22
- /**
23
- * gets current feeConfig
24
- */
25
- getConfigs: () => Array<Fee>;
26
- /**
27
- * sets ErgoBox Erg value
28
- * @param nanoErg
29
- * @returns
30
- */
31
- setValue: (nanoErg: bigint) => MinimumFeeBoxBuilder;
32
- /**
33
- * sets ErgoBox creationheight
34
- * @param currentHeight
35
- */
36
- setHeight: (currentHeight: number) => MinimumFeeBoxBuilder;
37
- /**
38
- * sets config token id
39
- * @param tokenId
40
- */
41
- setToken: (tokenId: string) => MinimumFeeBoxBuilder;
42
- /**
43
- * validates some of specified configs
44
- */
45
- protected validate: () => void;
46
- /**
47
- * removes heights and configs of all chains which don't have any configs
48
- */
49
- prune: () => MinimumFeeBoxBuilder;
50
- /**
51
- * validates specified configs and builds ErgoBoxCandidate of config box using them
52
- */
53
- build: () => ErgoBoxCandidate;
54
- }
55
- //# sourceMappingURL=MinimumFeeBoxBuilder.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MinimumFeeBoxBuilder.d.ts","sourceRoot":"","sources":["../../lib/MinimumFeeBoxBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,QAAQ,EAMR,gBAAgB,EACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,GAAG,EAAE,MAAM,SAAS,CAAC;AAK9B,qBAAa,oBAAoB;IAC/B,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC7B,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC;IAChC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;gBAEd,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAMlD;;;OAGG;IACH,SAAS,cAAe,gBAAgB,KAAG,oBAAoB,CAG7D;IAEF;;;OAGG;IACH,YAAY,UAAW,MAAM,KAAG,oBAAoB,CAGlD;IAEF;;OAEG;IACH,UAAU,QAAO,MAAM,GAAG,CAAC,CAEzB;IAEF;;;;OAIG;IACH,QAAQ,YAAa,MAAM,KAAG,oBAAoB,CAGhD;IAEF;;;OAGG;IACH,SAAS,kBAAmB,MAAM,KAAG,oBAAoB,CAGvD;IAEF;;;OAGG;IACH,QAAQ,YAAa,MAAM,KAAG,oBAAoB,CAGhD;IAEF;;OAEG;IACH,SAAS,CAAC,QAAQ,QAAO,IAAI,CA6B3B;IAEF;;OAEG;IACH,KAAK,QAAO,oBAAoB,CA8B9B;IAEF;;OAEG;IACH,KAAK,QAAO,gBAAgB,CAiC1B;CACH"}
@@ -1,168 +0,0 @@
1
- import {
2
- Address,
3
- BoxValue,
4
- Contract,
5
- ErgoBoxCandidateBuilder,
6
- I64,
7
- TokenAmount,
8
- TokenId,
9
- } from 'ergo-lib-wasm-nodejs';
10
- import { InvalidConfig } from './errors';
11
- import { ERGO_NATIVE_TOKEN } from './constants';
12
- import { feeToRegisterValues } from './utils';
13
- export class MinimumFeeBoxBuilder {
14
- fees;
15
- boxValue;
16
- boxHeight;
17
- tokenId;
18
- minimumFeeNFT;
19
- address;
20
- constructor(minimumFeeNFT, address) {
21
- this.fees = [];
22
- this.minimumFeeNFT = minimumFeeNFT;
23
- this.address = address;
24
- }
25
- /**
26
- * adds a feeConfig
27
- * @param feeConfig
28
- */
29
- addConfig = (feeConfig) => {
30
- this.fees.push(feeConfig.getConfig());
31
- return this;
32
- };
33
- /**
34
- * removes a config by index
35
- * @param index
36
- */
37
- removeConfig = (index) => {
38
- this.fees.splice(index, 1);
39
- return this;
40
- };
41
- /**
42
- * gets current feeConfig
43
- */
44
- getConfigs = () => {
45
- return this.fees;
46
- };
47
- /**
48
- * sets ErgoBox Erg value
49
- * @param nanoErg
50
- * @returns
51
- */
52
- setValue = (nanoErg) => {
53
- this.boxValue = BoxValue.from_i64(I64.from_str(nanoErg.toString()));
54
- return this;
55
- };
56
- /**
57
- * sets ErgoBox creationheight
58
- * @param currentHeight
59
- */
60
- setHeight = (currentHeight) => {
61
- this.boxHeight = currentHeight;
62
- return this;
63
- };
64
- /**
65
- * sets config token id
66
- * @param tokenId
67
- */
68
- setToken = (tokenId) => {
69
- this.tokenId = tokenId;
70
- return this;
71
- };
72
- /**
73
- * validates some of specified configs
74
- */
75
- validate = () => {
76
- if (!this.boxValue)
77
- throw new InvalidConfig(`Box value argument is not defined`);
78
- if (!this.boxHeight)
79
- throw new InvalidConfig(`Box creation height argument is not defined`);
80
- if (!this.tokenId)
81
- throw new InvalidConfig(`Config token id is not defined`);
82
- if (this.fees.length === 0)
83
- throw new InvalidConfig(
84
- `No config added. Please add at least one config`
85
- );
86
- for (let i = 0; i < this.fees.length - 1; i++) {
87
- const chains = Object.keys(this.fees[0].heights);
88
- chains.forEach((chain) => {
89
- if (!this.fees[i + 1].heights[chain])
90
- throw new InvalidConfig(
91
- `Expected chain [${chain}] at index [${i + 1}]`
92
- );
93
- if (this.fees[i + 1].heights[chain] < this.fees[i].heights[chain])
94
- throw new InvalidConfig(
95
- `All heights for a chain should be ascending. Heights of chain [${chain}] at indexes [${i},${
96
- i + 1
97
- }] are invalid [${this.fees[i + 1].heights[chain]} < ${
98
- this.fees[i].heights[chain]
99
- }]`
100
- );
101
- });
102
- }
103
- };
104
- /**
105
- * removes heights and configs of all chains which don't have any configs
106
- */
107
- prune = () => {
108
- const activeChains = [];
109
- for (let i = 0; i < this.fees.length; i++) {
110
- const chains = Object.keys(this.fees[i].heights);
111
- chains.forEach((chain) => {
112
- const feeConfig = this.fees[i].configs[chain];
113
- if (
114
- feeConfig &&
115
- (feeConfig.bridgeFee !== -1n ||
116
- feeConfig.networkFee !== -1n ||
117
- feeConfig.rsnRatio !== -1n ||
118
- feeConfig.rsnRatioDivisor !== -1n ||
119
- feeConfig.feeRatio !== -1n)
120
- )
121
- activeChains.push(chain);
122
- });
123
- }
124
- for (let i = 0; i < this.fees.length; i++) {
125
- const chains = Object.keys(this.fees[i].heights);
126
- chains.forEach((chain) => {
127
- if (!activeChains.includes(chain)) {
128
- delete this.fees[i].heights[chain];
129
- delete this.fees[i].configs[chain];
130
- }
131
- });
132
- }
133
- return this;
134
- };
135
- /**
136
- * validates specified configs and builds ErgoBoxCandidate of config box using them
137
- */
138
- build = () => {
139
- this.validate();
140
- // add box value, address and creation height
141
- const boxBuilder = new ErgoBoxCandidateBuilder(
142
- this.boxValue,
143
- Contract.new(Address.from_base58(this.address).to_ergo_tree()),
144
- this.boxHeight
145
- );
146
- // add box tokens
147
- boxBuilder.add_token(
148
- TokenId.from_str(this.minimumFeeNFT),
149
- TokenAmount.from_i64(I64.from_str('1'))
150
- );
151
- if (this.tokenId !== ERGO_NATIVE_TOKEN)
152
- boxBuilder.add_token(
153
- TokenId.from_str(this.tokenId),
154
- TokenAmount.from_i64(I64.from_str('1'))
155
- );
156
- // generate register values
157
- const registerValues = feeToRegisterValues(this.fees);
158
- // add box registers
159
- boxBuilder.set_register_value(4, registerValues.R4);
160
- boxBuilder.set_register_value(5, registerValues.R5);
161
- boxBuilder.set_register_value(6, registerValues.R6);
162
- boxBuilder.set_register_value(7, registerValues.R7);
163
- boxBuilder.set_register_value(8, registerValues.R8);
164
- boxBuilder.set_register_value(9, registerValues.R9);
165
- return boxBuilder.build();
166
- };
167
- }
168
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWluaW11bUZlZUJveEJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvTWluaW11bUZlZUJveEJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLE9BQU8sRUFDUCxRQUFRLEVBQ1IsUUFBUSxFQUNSLHVCQUF1QixFQUN2QixHQUFHLEVBQ0gsV0FBVyxFQUNYLE9BQU8sR0FFUixNQUFNLHNCQUFzQixDQUFDO0FBRzlCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDekMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUU5QyxNQUFNLE9BQU8sb0JBQW9CO0lBQ3JCLElBQUksQ0FBYTtJQUNqQixRQUFRLENBQVc7SUFDbkIsU0FBUyxDQUFTO0lBQ2xCLE9BQU8sQ0FBUztJQUNoQixhQUFhLENBQVM7SUFDdEIsT0FBTyxDQUFTO0lBRTFCLFlBQVksYUFBcUIsRUFBRSxPQUFlO1FBQ2hELElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2YsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7UUFDbkMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFDekIsQ0FBQztJQUVEOzs7T0FHRztJQUNILFNBQVMsR0FBRyxDQUFDLFNBQTJCLEVBQXdCLEVBQUU7UUFDaEUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDdEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDLENBQUM7SUFFRjs7O09BR0c7SUFDSCxZQUFZLEdBQUcsQ0FBQyxLQUFhLEVBQXdCLEVBQUU7UUFDckQsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzNCLE9BQU8s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Q0FBQyxDQUFDO1FBQ3BELFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEVBQUUsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3BELFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEVBQUUsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3BELFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEVBQUUsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3BELFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEVBQUUsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXBELE9BQU8sVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzVCLENBQUMsQ0FBQztDQUNIIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWRkcmVzcyxcbiAgQm94VmFsdWUsXG4gIENvbnRyYWN0LFxuICBFcmdvQm94Q2FuZGlkYXRlQnVpbGRlcixcbiAgSTY0LFxuICBUb2tlbkFtb3VudCxcbiAgVG9rZW5JZCxcbiAgRXJnb0JveENhbmRpZGF0ZSxcbn0gZnJvbSAnZXJnby1saWItd2FzbS1ub2RlanMnO1xuaW1wb3J0IHsgTWluaW11bUZlZUNvbmZpZyB9IGZyb20gJy4vTWluaW11bUZlZUNvbmZpZyc7XG5pbXBvcnQgeyBGZWUgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IEludmFsaWRDb25maWcgfSBmcm9tICcuL2Vycm9ycyc7XG5pbXBvcnQgeyBFUkdPX05BVElWRV9UT0tFTiB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IGZlZVRvUmVnaXN0ZXJWYWx1ZXMgfSBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IGNsYXNzIE1pbmltdW1GZWVCb3hCdWlsZGVyIHtcbiAgcHJvdGVjdGVkIGZlZXM6IEFycmF5PEZlZT47XG4gIHByb3RlY3RlZCBib3hWYWx1ZTogQm94VmFsdWU7XG4gIHByb3RlY3RlZCBib3hIZWlnaHQ6IG51bWJlcjtcbiAgcHJvdGVjdGVkIHRva2VuSWQ6IHN0cmluZztcbiAgcHJvdGVjdGVkIG1pbmltdW1GZWVORlQ6IHN0cmluZztcbiAgcHJvdGVjdGVkIGFkZHJlc3M6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihtaW5pbXVtRmVlTkZUOiBzdHJpbmcsIGFkZHJlc3M6IHN0cmluZykge1xuICAgIHRoaXMuZmVlcyA9IFtdO1xuICAgIHRoaXMubWluaW11bUZlZU5GVCA9IG1pbmltdW1GZWVORlQ7XG4gICAgdGhpcy5hZGRyZXNzID0gYWRkcmVzcztcbiAgfVxuXG4gIC8qKlxuICAgKiBhZGRzIGEgZmVlQ29uZmlnXG4gICAqIEBwYXJhbSBmZWVDb25maWdcbiAgICovXG4gIGFkZENvbmZpZyA9IChmZWVDb25maWc6IE1pbmltdW1GZWVDb25maWcpOiBNaW5pbXVtRmVlQm94QnVpbGRlciA9PiB7XG4gICAgdGhpcy5mZWVzLnB1c2goZmVlQ29uZmlnLmdldENvbmZpZygpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICAvKipcbiAgICogcmVtb3ZlcyBhIGNvbmZpZyBieSBpbmRleFxuICAgKiBAcGFyYW0gaW5kZXhcbiAgICovXG4gIHJlbW92ZUNvbmZpZyA9IChpbmRleDogbnVtYmVyKTogTWluaW11bUZlZUJveEJ1aWxkZXIgPT4ge1xuICAgIHRoaXMuZmVlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBnZXRzIGN1cnJlbnQgZmVlQ29uZmlnXG4gICAqL1xuICBnZXRDb25maWdzID0gKCk6IEFycmF5PEZlZT4gPT4ge1xuICAgIHJldHVybiB0aGlzLmZlZXM7XG4gIH07XG5cbiAgLyoqXG4gICAqIHNldHMgRXJnb0JveCBFcmcgdmFsdWVcbiAgICogQHBhcmFtIG5hbm9FcmdcbiAgICogQHJldHVybnNcbiAgICovXG4gIHNldFZhbHVlID0gKG5hbm9Fcmc6IGJpZ2ludCk6IE1pbmltdW1GZWVCb3hCdWlsZGVyID0+IHtcbiAgICB0aGlzLmJveFZhbHVlID0gQm94VmFsdWUuZnJvbV9pNjQoSTY0LmZyb21fc3RyKG5hbm9FcmcudG9TdHJpbmcoKSkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBzZXRzIEVyZ29Cb3ggY3JlYXRpb25oZWlnaHRcbiAgICogQHBhcmFtIGN1cnJlbnRIZWlnaHRcbiAgICovXG4gIHNldEhlaWdodCA9IChjdXJyZW50SGVpZ2h0OiBudW1iZXIpOiBNaW5pbXVtRmVlQm94QnVpbGRlciA9PiB7XG4gICAgdGhpcy5ib3hIZWlnaHQgPSBjdXJyZW50SGVpZ2h0O1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBzZXRzIGNvbmZpZyB0b2tlbiBpZFxuICAgKiBAcGFyYW0gdG9rZW5JZFxuICAgKi9cbiAgc2V0VG9rZW4gPSAodG9rZW5JZDogc3RyaW5nKTogTWluaW11bUZlZUJveEJ1aWxkZXIgPT4ge1xuICAgIHRoaXMudG9rZW5JZCA9IHRva2VuSWQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgLyoqXG4gICAqIHZhbGlkYXRlcyBzb21lIG9mIHNwZWNpZmllZCBjb25maWdzXG4gICAqL1xuICBwcm90ZWN0ZWQgdmFsaWRhdGUgPSAoKTogdm9pZCA9PiB7XG4gICAgaWYgKCF0aGlzLmJveFZhbHVlKVxuICAgICAgdGhyb3cgbmV3IEludmFsaWRDb25maWcoYEJveCB2YWx1ZSBhcmd1bWVudCBpcyBub3QgZGVmaW5lZGApO1xuICAgIGlmICghdGhpcy5ib3hIZWlnaHQpXG4gICAgICB0aHJvdyBuZXcgSW52YWxpZENvbmZpZyhgQm94IGNyZWF0aW9uIGhlaWdodCBhcmd1bWVudCBpcyBub3QgZGVmaW5lZGApO1xuICAgIGlmICghdGhpcy50b2tlbklkKVxuICAgICAgdGhyb3cgbmV3IEludmFsaWRDb25maWcoYENvbmZpZyB0b2tlbiBpZCBpcyBub3QgZGVmaW5lZGApO1xuICAgIGlmICh0aGlzLmZlZXMubGVuZ3RoID09PSAwKVxuICAgICAgdGhyb3cgbmV3IEludmFsaWRDb25maWcoXG4gICAgICAgIGBObyBjb25maWcgYWRkZWQuIFBsZWFzZSBhZGQgYXQgbGVhc3Qgb25lIGNvbmZpZ2BcbiAgICAgICk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZmVlcy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgIGNvbnN0IGNoYWlucyA9IE9iamVjdC5rZXlzKHRoaXMuZmVlc1swXS5oZWlnaHRzKTtcbiAgICAgIGNoYWlucy5mb3JFYWNoKChjaGFpbikgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuZmVlc1tpICsgMV0uaGVpZ2h0c1tjaGFpbl0pXG4gICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRDb25maWcoXG4gICAgICAgICAgICBgRXhwZWN0ZWQgY2hhaW4gWyR7Y2hhaW59XSBhdCBpbmRleCBbJHtpICsgMX1dYFxuICAgICAgICAgICk7XG4gICAgICAgIGlmICh0aGlzLmZlZXNbaSArIDFdLmhlaWdodHNbY2hhaW5dIDwgdGhpcy5mZWVzW2ldLmhlaWdodHNbY2hhaW5dKVxuICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQ29uZmlnKFxuICAgICAgICAgICAgYEFsbCBoZWlnaHRzIGZvciBhIGNoYWluIHNob3VsZCBiZSBhc2NlbmRpbmcuIEhlaWdodHMgb2YgY2hhaW4gWyR7Y2hhaW59XSBhdCBpbmRleGVzIFske2l9LCR7XG4gICAgICAgICAgICAgIGkgKyAxXG4gICAgICAgICAgICB9XSBhcmUgaW52YWxpZCBbJHt0aGlzLmZlZXNbaSArIDFdLmhlaWdodHNbY2hhaW5dfSA8ICR7XG4gICAgICAgICAgICAgIHRoaXMuZmVlc1tpXS5oZWlnaHRzW2NoYWluXVxuICAgICAgICAgICAgfV1gXG4gICAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogcmVtb3ZlcyBoZWlnaHRzIGFuZCBjb25maWdzIG9mIGFsbCBjaGFpbnMgd2hpY2ggZG9uJ3QgaGF2ZSBhbnkgY29uZmlnc1xuICAgKi9cbiAgcHJ1bmUgPSAoKTogTWluaW11bUZlZUJveEJ1aWxkZXIgPT4ge1xuICAgIGNvbnN0IGFjdGl2ZUNoYWluczogc3RyaW5nW10gPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5mZWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjaGFpbnMgPSBPYmplY3Qua2V5cyh0aGlzLmZlZXNbaV0uaGVpZ2h0cyk7XG4gICAgICBjaGFpbnMuZm9yRWFjaCgoY2hhaW4pID0+IHtcbiAgICAgICAgY29uc3QgZmVlQ29uZmlnID0gdGhpcy5mZWVzW2ldLmNvbmZpZ3NbY2hhaW5dO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZmVlQ29uZmlnICYmXG4gICAgICAgICAgKGZlZUNvbmZpZy5icmlkZ2VGZWUgIT09IC0xbiB8fFxuICAgICAgICAgICAgZmVlQ29uZmlnLm5ldHdvcmtGZWUgIT09IC0xbiB8fFxuICAgICAgICAgICAgZmVlQ29uZmlnLnJzblJhdGlvICE9PSAtMW4gfHxcbiAgICAgICAgICAgIGZlZUNvbmZpZy5yc25SYXRpb0Rpdmlzb3IgIT09IC0xbiB8fFxuICAgICAgICAgICAgZmVlQ29uZmlnLmZlZVJhdGlvICE9PSAtMW4pXG4gICAgICAgIClcbiAgICAgICAgICBhY3RpdmVDaGFpbnMucHVzaChjaGFpbik7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZmVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgY2hhaW5zID0gT2JqZWN0LmtleXModGhpcy5mZWVzW2ldLmhlaWdodHMpO1xuICAgICAgY2hhaW5zLmZvckVhY2goKGNoYWluKSA9PiB7XG4gICAgICAgIGlmICghYWN0aXZlQ2hhaW5zLmluY2x1ZGVzKGNoYWluKSkge1xuICAgICAgICAgIGRlbGV0ZSB0aGlzLmZlZXNbaV0uaGVpZ2h0c1tjaGFpbl07XG4gICAgICAgICAgZGVsZXRlIHRoaXMuZmVlc1tpXS5jb25maWdzW2NoYWluXTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgLyoqXG4gICAqIHZhbGlkYXRlcyBzcGVjaWZpZWQgY29uZmlncyBhbmQgYnVpbGRzIEVyZ29Cb3hDYW5kaWRhdGUgb2YgY29uZmlnIGJveCB1c2luZyB0aGVtXG4gICAqL1xuICBidWlsZCA9ICgpOiBFcmdvQm94Q2FuZGlkYXRlID0+IHtcbiAgICB0aGlzLnZhbGlkYXRlKCk7XG5cbiAgICAvLyBhZGQgYm94IHZhbHVlLCBhZGRyZXNzIGFuZCBjcmVhdGlvbiBoZWlnaHRcbiAgICBjb25zdCBib3hCdWlsZGVyID0gbmV3IEVyZ29Cb3hDYW5kaWRhdGVCdWlsZGVyKFxuICAgICAgdGhpcy5ib3hWYWx1ZSxcbiAgICAgIENvbnRyYWN0Lm5ldyhBZGRyZXNzLmZyb21fYmFzZTU4KHRoaXMuYWRkcmVzcykudG9fZXJnb190cmVlKCkpLFxuICAgICAgdGhpcy5ib3hIZWlnaHRcbiAgICApO1xuXG4gICAgLy8gYWRkIGJveCB0b2tlbnNcbiAgICBib3hCdWlsZGVyLmFkZF90b2tlbihcbiAgICAgIFRva2VuSWQuZnJvbV9zdHIodGhpcy5taW5pbXVtRmVlTkZUKSxcbiAgICAgIFRva2VuQW1vdW50LmZyb21faTY0KEk2NC5mcm9tX3N0cignMScpKVxuICAgICk7XG4gICAgaWYgKHRoaXMudG9rZW5JZCAhPT0gRVJHT19OQVRJVkVfVE9LRU4pXG4gICAgICBib3hCdWlsZGVyLmFkZF90b2tlbihcbiAgICAgICAgVG9rZW5JZC5mcm9tX3N0cih0aGlzLnRva2VuSWQpLFxuICAgICAgICBUb2tlbkFtb3VudC5mcm9tX2k2NChJNjQuZnJvbV9zdHIoJzEnKSlcbiAgICAgICk7XG5cbiAgICAvLyBnZW5lcmF0ZSByZWdpc3RlciB2YWx1ZXNcbiAgICBjb25zdCByZWdpc3RlclZhbHVlcyA9IGZlZVRvUmVnaXN0ZXJWYWx1ZXModGhpcy5mZWVzKTtcblxuICAgIC8vIGFkZCBib3ggcmVnaXN0ZXJzXG4gICAgYm94QnVpbGRlci5zZXRfcmVnaXN0ZXJfdmFsdWUoNCwgcmVnaXN0ZXJWYWx1ZXMuUjQpO1xuICAgIGJveEJ1aWxkZXIuc2V0X3JlZ2lzdGVyX3ZhbHVlKDUsIHJlZ2lzdGVyVmFsdWVzLlI1KTtcbiAgICBib3hCdWlsZGVyLnNldF9yZWdpc3Rlcl92YWx1ZSg2LCByZWdpc3RlclZhbHVlcy5SNik7XG4gICAgYm94QnVpbGRlci5zZXRfcmVnaXN0ZXJfdmFsdWUoNywgcmVnaXN0ZXJWYWx1ZXMuUjcpO1xuICAgIGJveEJ1aWxkZXIuc2V0X3JlZ2lzdGVyX3ZhbHVlKDgsIHJlZ2lzdGVyVmFsdWVzLlI4KTtcbiAgICBib3hCdWlsZGVyLnNldF9yZWdpc3Rlcl92YWx1ZSg5LCByZWdpc3RlclZhbHVlcy5SOSk7XG5cbiAgICByZXR1cm4gYm94QnVpbGRlci5idWlsZCgpO1xuICB9O1xufVxuIl19
@@ -1,26 +0,0 @@
1
- import { ChainFee, Fee } from './types';
2
- export declare class MinimumFeeConfig {
3
- protected fee: Fee;
4
- constructor(fee?: Fee);
5
- /**
6
- * sets fee for a chain
7
- * @param chain
8
- * @param height
9
- * @param chainFee
10
- */
11
- setChainConfig: (
12
- chain: string,
13
- height: number,
14
- chainFee: ChainFee | undefined
15
- ) => MinimumFeeConfig;
16
- /**
17
- * removes fee for a chain
18
- * @param chain
19
- */
20
- removeChainConfig: (chain: string) => MinimumFeeConfig;
21
- /**
22
- * returns generated fee
23
- */
24
- getConfig: () => Fee;
25
- }
26
- //# sourceMappingURL=MinimumFeeConfig.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MinimumFeeConfig.d.ts","sourceRoot":"","sources":["../../lib/MinimumFeeConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,SAAS,CAAC;AAExC,qBAAa,gBAAgB;IAC3B,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC;gBAEP,GAAG,CAAC,EAAE,GAAG;IASrB;;;;;OAKG;IACH,cAAc,UACL,MAAM,UACL,MAAM,YACJ,QAAQ,GAAG,SAAS,KAC7B,gBAAgB,CAKjB;IAEF;;;OAGG;IACH,iBAAiB,UAAW,MAAM,KAAG,gBAAgB,CAInD;IAEF;;OAEG;IACH,SAAS,QAAO,GAAG,CAEjB;CACH"}
@@ -1,39 +0,0 @@
1
- export class MinimumFeeConfig {
2
- fee;
3
- constructor(fee) {
4
- this.fee = fee
5
- ? fee
6
- : {
7
- heights: {},
8
- configs: {},
9
- };
10
- }
11
- /**
12
- * sets fee for a chain
13
- * @param chain
14
- * @param height
15
- * @param chainFee
16
- */
17
- setChainConfig = (chain, height, chainFee) => {
18
- this.fee.heights[chain] = height;
19
- if (chainFee) this.fee.configs[chain] = chainFee;
20
- else delete this.fee.configs[chain];
21
- return this;
22
- };
23
- /**
24
- * removes fee for a chain
25
- * @param chain
26
- */
27
- removeChainConfig = (chain) => {
28
- delete this.fee.heights[chain];
29
- delete this.fee.configs[chain];
30
- return this;
31
- };
32
- /**
33
- * returns generated fee
34
- */
35
- getConfig = () => {
36
- return this.fee;
37
- };
38
- }
39
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWluaW11bUZlZUNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9NaW5pbXVtRmVlQ29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sT0FBTyxnQkFBZ0I7SUFDakIsR0FBRyxDQUFNO0lBRW5CLFlBQVksR0FBUztRQUNuQixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUc7WUFDWixDQUFDLENBQUMsR0FBRztZQUNMLENBQUMsQ0FBQztnQkFDRSxPQUFPLEVBQUUsRUFBRTtnQkFDWCxPQUFPLEVBQUUsRUFBRTthQUNaLENBQUM7SUFDUixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxjQUFjLEdBQUcsQ0FDZixLQUFhLEVBQ2IsTUFBYyxFQUNkLFFBQThCLEVBQ1osRUFBRTtRQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7UUFDakMsSUFBSSxRQUFRO1lBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsUUFBUSxDQUFDOztZQUM1QyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQyxDQUFDO0lBRUY7OztPQUdHO0lBQ0gsaUJBQWlCLEdBQUcsQ0FBQyxLQUFhLEVBQW9CLEVBQUU7UUFDdEQsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQyxDQUFDO0lBRUY7O09BRUc7SUFDSCxTQUFTLEdBQUcsR0FBUSxFQUFFO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUNsQixDQUFDLENBQUM7Q0FDSCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYWluRmVlLCBGZWUgfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIE1pbmltdW1GZWVDb25maWcge1xuICBwcm90ZWN0ZWQgZmVlOiBGZWU7XG5cbiAgY29uc3RydWN0b3IoZmVlPzogRmVlKSB7XG4gICAgdGhpcy5mZWUgPSBmZWVcbiAgICAgID8gZmVlXG4gICAgICA6IHtcbiAgICAgICAgICBoZWlnaHRzOiB7fSxcbiAgICAgICAgICBjb25maWdzOiB7fSxcbiAgICAgICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBzZXRzIGZlZSBmb3IgYSBjaGFpblxuICAgKiBAcGFyYW0gY2hhaW5cbiAgICogQHBhcmFtIGhlaWdodFxuICAgKiBAcGFyYW0gY2hhaW5GZWVcbiAgICovXG4gIHNldENoYWluQ29uZmlnID0gKFxuICAgIGNoYWluOiBzdHJpbmcsXG4gICAgaGVpZ2h0OiBudW1iZXIsXG4gICAgY2hhaW5GZWU6IENoYWluRmVlIHwgdW5kZWZpbmVkXG4gICk6IE1pbmltdW1GZWVDb25maWcgPT4ge1xuICAgIHRoaXMuZmVlLmhlaWdodHNbY2hhaW5dID0gaGVpZ2h0O1xuICAgIGlmIChjaGFpbkZlZSkgdGhpcy5mZWUuY29uZmlnc1tjaGFpbl0gPSBjaGFpbkZlZTtcbiAgICBlbHNlIGRlbGV0ZSB0aGlzLmZlZS5jb25maWdzW2NoYWluXTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICAvKipcbiAgICogcmVtb3ZlcyBmZWUgZm9yIGEgY2hhaW5cbiAgICogQHBhcmFtIGNoYWluXG4gICAqL1xuICByZW1vdmVDaGFpbkNvbmZpZyA9IChjaGFpbjogc3RyaW5nKTogTWluaW11bUZlZUNvbmZpZyA9PiB7XG4gICAgZGVsZXRlIHRoaXMuZmVlLmhlaWdodHNbY2hhaW5dO1xuICAgIGRlbGV0ZSB0aGlzLmZlZS5jb25maWdzW2NoYWluXTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICAvKipcbiAgICogcmV0dXJucyBnZW5lcmF0ZWQgZmVlXG4gICAqL1xuICBnZXRDb25maWcgPSAoKTogRmVlID0+IHtcbiAgICByZXR1cm4gdGhpcy5mZWU7XG4gIH07XG59XG4iXX0=
@@ -1,3 +0,0 @@
1
- export declare const ERGO_NATIVE_TOKEN = 'erg';
2
- export declare const FEE_RATIO_DIVISOR = 10000n;
3
- //# sourceMappingURL=constants.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../lib/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,QAAQ,CAAC;AACvC,eAAO,MAAM,iBAAiB,SAAS,CAAC"}
@@ -1,3 +0,0 @@
1
- export const ERGO_NATIVE_TOKEN = 'erg';
2
- export const FEE_RATIO_DIVISOR = 10000n;
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxLQUFLLENBQUM7QUFDdkMsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IEVSR09fTkFUSVZFX1RPS0VOID0gJ2VyZyc7XG5leHBvcnQgY29uc3QgRkVFX1JBVElPX0RJVklTT1IgPSAxMDAwMG47XG4iXX0=
@@ -1 +0,0 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../lib/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,aAAc,SAAQ,KAAK;gBAC1B,GAAG,EAAE,MAAM;CAGxB;AAED,qBAAa,WAAY,SAAQ,KAAK;gBACxB,GAAG,EAAE,MAAM;CAGxB;AAED,qBAAa,YAAa,SAAQ,KAAK;gBACzB,GAAG,EAAE,MAAM;CAGxB;AAED,qBAAa,kBAAmB,SAAQ,KAAK;gBAC/B,GAAG,EAAE,MAAM;CAGxB;AAED,qBAAa,aAAc,SAAQ,KAAK;gBAC1B,GAAG,EAAE,MAAM;CAGxB"}
@@ -1,26 +0,0 @@
1
- export class InvalidConfig extends Error {
2
- constructor(msg) {
3
- super('InvalidConfig: ' + msg);
4
- }
5
- }
6
- export class FailedError extends Error {
7
- constructor(msg) {
8
- super('FailedError: ' + msg);
9
- }
10
- }
11
- export class NetworkError extends Error {
12
- constructor(msg) {
13
- super('NetworkError: ' + msg);
14
- }
15
- }
16
- export class UnexpectedApiError extends Error {
17
- constructor(msg) {
18
- super('UnexpectedApiError: ' + msg);
19
- }
20
- }
21
- export class NotFoundError extends Error {
22
- constructor(msg) {
23
- super('NotFoundError: ' + msg);
24
- }
25
- }
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL2Vycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sYUFBYyxTQUFRLEtBQUs7SUFDdEMsWUFBWSxHQUFXO1FBQ3JCLEtBQUssQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8sV0FBWSxTQUFRLEtBQUs7SUFDcEMsWUFBWSxHQUFXO1FBQ3JCLEtBQUssQ0FBQyxlQUFlLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDL0IsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLFlBQWEsU0FBUSxLQUFLO0lBQ3JDLFlBQVksR0FBVztRQUNyQixLQUFLLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDaEMsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLGtCQUFtQixTQUFRLEtBQUs7SUFDM0MsWUFBWSxHQUFXO1FBQ3JCLEtBQUssQ0FBQyxzQkFBc0IsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUN0QyxDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8sYUFBYyxTQUFRLEtBQUs7SUFDdEMsWUFBWSxHQUFXO1FBQ3JCLEtBQUssQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgSW52YWxpZENvbmZpZyBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobXNnOiBzdHJpbmcpIHtcbiAgICBzdXBlcignSW52YWxpZENvbmZpZzogJyArIG1zZyk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEZhaWxlZEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcihtc2c6IHN0cmluZykge1xuICAgIHN1cGVyKCdGYWlsZWRFcnJvcjogJyArIG1zZyk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE5ldHdvcmtFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobXNnOiBzdHJpbmcpIHtcbiAgICBzdXBlcignTmV0d29ya0Vycm9yOiAnICsgbXNnKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVW5leHBlY3RlZEFwaUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcihtc2c6IHN0cmluZykge1xuICAgIHN1cGVyKCdVbmV4cGVjdGVkQXBpRXJyb3I6ICcgKyBtc2cpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOb3RGb3VuZEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcihtc2c6IHN0cmluZykge1xuICAgIHN1cGVyKCdOb3RGb3VuZEVycm9yOiAnICsgbXNnKTtcbiAgfVxufVxuIl19