@witnet/sdk 1.0.0-beta.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/LICENSE +21 -0
- package/README.md +103 -0
- package/dist/package.json +72 -0
- package/dist/src/bin/helpers.d.ts +91 -0
- package/dist/src/bin/helpers.d.ts.map +1 -0
- package/dist/src/bin/helpers.js +816 -0
- package/dist/src/index.d.ts +5 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +47 -0
- package/dist/src/lib/crypto/account.d.ts +32 -0
- package/dist/src/lib/crypto/account.d.ts.map +1 -0
- package/dist/src/lib/crypto/account.js +106 -0
- package/dist/src/lib/crypto/coinbase.d.ts +10 -0
- package/dist/src/lib/crypto/coinbase.d.ts.map +1 -0
- package/dist/src/lib/crypto/coinbase.js +28 -0
- package/dist/src/lib/crypto/index.d.ts +8 -0
- package/dist/src/lib/crypto/index.d.ts.map +1 -0
- package/dist/src/lib/crypto/index.js +30 -0
- package/dist/src/lib/crypto/interfaces.d.ts +85 -0
- package/dist/src/lib/crypto/interfaces.d.ts.map +1 -0
- package/dist/src/lib/crypto/interfaces.js +3 -0
- package/dist/src/lib/crypto/payloads/DataRequestPayload.d.ts +55 -0
- package/dist/src/lib/crypto/payloads/DataRequestPayload.d.ts.map +1 -0
- package/dist/src/lib/crypto/payloads/DataRequestPayload.js +339 -0
- package/dist/src/lib/crypto/payloads/StakePayload.d.ts +28 -0
- package/dist/src/lib/crypto/payloads/StakePayload.d.ts.map +1 -0
- package/dist/src/lib/crypto/payloads/StakePayload.js +142 -0
- package/dist/src/lib/crypto/payloads/UnstakePayload.d.ts +36 -0
- package/dist/src/lib/crypto/payloads/UnstakePayload.d.ts.map +1 -0
- package/dist/src/lib/crypto/payloads/UnstakePayload.js +154 -0
- package/dist/src/lib/crypto/payloads/ValueTransferPayload.d.ts +25 -0
- package/dist/src/lib/crypto/payloads/ValueTransferPayload.d.ts.map +1 -0
- package/dist/src/lib/crypto/payloads/ValueTransferPayload.js +128 -0
- package/dist/src/lib/crypto/payloads.d.ts +57 -0
- package/dist/src/lib/crypto/payloads.d.ts.map +1 -0
- package/dist/src/lib/crypto/payloads.js +170 -0
- package/dist/src/lib/crypto/signer.d.ts +33 -0
- package/dist/src/lib/crypto/signer.d.ts.map +1 -0
- package/dist/src/lib/crypto/signer.js +194 -0
- package/dist/src/lib/crypto/transmitters/DataRequests.d.ts +15 -0
- package/dist/src/lib/crypto/transmitters/DataRequests.d.ts.map +1 -0
- package/dist/src/lib/crypto/transmitters/DataRequests.js +23 -0
- package/dist/src/lib/crypto/transmitters/StakeDeposits.d.ts +12 -0
- package/dist/src/lib/crypto/transmitters/StakeDeposits.d.ts.map +1 -0
- package/dist/src/lib/crypto/transmitters/StakeDeposits.js +17 -0
- package/dist/src/lib/crypto/transmitters/StakeWithdrawals.d.ts +18 -0
- package/dist/src/lib/crypto/transmitters/StakeWithdrawals.d.ts.map +1 -0
- package/dist/src/lib/crypto/transmitters/StakeWithdrawals.js +53 -0
- package/dist/src/lib/crypto/transmitters/ValueTransfers.d.ts +11 -0
- package/dist/src/lib/crypto/transmitters/ValueTransfers.d.ts.map +1 -0
- package/dist/src/lib/crypto/transmitters/ValueTransfers.js +16 -0
- package/dist/src/lib/crypto/transmitters.d.ts +47 -0
- package/dist/src/lib/crypto/transmitters.d.ts.map +1 -0
- package/dist/src/lib/crypto/transmitters.js +416 -0
- package/dist/src/lib/crypto/types.d.ts +161 -0
- package/dist/src/lib/crypto/types.d.ts.map +1 -0
- package/dist/src/lib/crypto/types.js +273 -0
- package/dist/src/lib/crypto/utils.d.ts +21 -0
- package/dist/src/lib/crypto/utils.d.ts.map +1 -0
- package/dist/src/lib/crypto/utils.js +156 -0
- package/dist/src/lib/crypto/wallet.d.ts +120 -0
- package/dist/src/lib/crypto/wallet.d.ts.map +1 -0
- package/dist/src/lib/crypto/wallet.js +258 -0
- package/dist/src/lib/index.d.ts +5 -0
- package/dist/src/lib/index.d.ts.map +1 -0
- package/dist/src/lib/index.js +44 -0
- package/dist/src/lib/radon/ccdr/eth.d.ts +160 -0
- package/dist/src/lib/radon/ccdr/eth.d.ts.map +1 -0
- package/dist/src/lib/radon/ccdr/eth.js +272 -0
- package/dist/src/lib/radon/ccdr/index.d.ts +14 -0
- package/dist/src/lib/radon/ccdr/index.d.ts.map +1 -0
- package/dist/src/lib/radon/ccdr/index.js +39 -0
- package/dist/src/lib/radon/ccdr/wit.d.ts +23 -0
- package/dist/src/lib/radon/ccdr/wit.d.ts.map +1 -0
- package/dist/src/lib/radon/ccdr/wit.js +35 -0
- package/dist/src/lib/radon/filters.d.ts +14 -0
- package/dist/src/lib/radon/filters.d.ts.map +1 -0
- package/dist/src/lib/radon/filters.js +45 -0
- package/dist/src/lib/radon/index.d.ts +296 -0
- package/dist/src/lib/radon/index.d.ts.map +1 -0
- package/dist/src/lib/radon/index.js +707 -0
- package/dist/src/lib/radon/reducers.d.ts +29 -0
- package/dist/src/lib/radon/reducers.d.ts.map +1 -0
- package/dist/src/lib/radon/reducers.js +66 -0
- package/dist/src/lib/radon/types.d.ts +521 -0
- package/dist/src/lib/radon/types.d.ts.map +1 -0
- package/dist/src/lib/radon/types.js +936 -0
- package/dist/src/lib/radon/utils.d.ts +53 -0
- package/dist/src/lib/radon/utils.d.ts.map +1 -0
- package/dist/src/lib/radon/utils.js +153 -0
- package/dist/src/lib/rpc/index.d.ts +3 -0
- package/dist/src/lib/rpc/index.d.ts.map +1 -0
- package/dist/src/lib/rpc/index.js +19 -0
- package/dist/src/lib/rpc/nodes.d.ts +40 -0
- package/dist/src/lib/rpc/nodes.d.ts.map +1 -0
- package/dist/src/lib/rpc/nodes.js +293 -0
- package/dist/src/lib/rpc/provider.d.ts +88 -0
- package/dist/src/lib/rpc/provider.d.ts.map +1 -0
- package/dist/src/lib/rpc/provider.js +336 -0
- package/dist/src/lib/rpc/reporter.d.ts +18 -0
- package/dist/src/lib/rpc/reporter.d.ts.map +1 -0
- package/dist/src/lib/rpc/reporter.js +30 -0
- package/dist/src/lib/rpc/types.d.ts +409 -0
- package/dist/src/lib/rpc/types.d.ts.map +1 -0
- package/dist/src/lib/rpc/types.js +81 -0
- package/dist/src/lib/types.d.ts +18 -0
- package/dist/src/lib/types.d.ts.map +1 -0
- package/dist/src/lib/types.js +7 -0
- package/dist/src/lib/utils.d.ts +13 -0
- package/dist/src/lib/utils.d.ts.map +1 -0
- package/dist/src/lib/utils.js +97 -0
- package/dist/witnet/assets/index.d.ts +30 -0
- package/dist/witnet/assets/index.d.ts.map +1 -0
- package/dist/witnet/assets/index.js +6 -0
- package/dist/witnet/assets/modals/index.d.ts +18 -0
- package/dist/witnet/assets/modals/index.d.ts.map +1 -0
- package/dist/witnet/assets/modals/index.js +21 -0
- package/dist/witnet/assets/modals/web3/eth.d.ts +5 -0
- package/dist/witnet/assets/modals/web3/eth.d.ts.map +1 -0
- package/dist/witnet/assets/modals/web3/eth.js +26 -0
- package/dist/witnet/assets/modals/web3/wit.d.ts +4 -0
- package/dist/witnet/assets/modals/web3/wit.d.ts.map +1 -0
- package/dist/witnet/assets/modals/web3/wit.js +20 -0
- package/dist/witnet/assets/requests.d.ts +11 -0
- package/dist/witnet/assets/requests.d.ts.map +1 -0
- package/dist/witnet/assets/requests.js +88 -0
- package/dist/witnet/witnet.proto.json +1325 -0
- package/package.json +72 -0
- package/src/bin/cli/history.js +31 -0
- package/src/bin/cli/inspect.js +359 -0
- package/src/bin/cli/network.js +592 -0
- package/src/bin/cli/nodes.js +364 -0
- package/src/bin/cli/radon.js +814 -0
- package/src/bin/cli/wallet.js +1000 -0
- package/src/bin/helpers.js +829 -0
- package/src/bin/postinstall.js +9 -0
- package/src/bin/toolkit.js +294 -0
- package/witnet/assets/_index.js +8 -0
- package/witnet/assets/_requests.js +25 -0
- package/witnet/assets/_sources.js +36 -0
- package/witnet/assets/_templates.js +36 -0
- package/witnet/assets/index.js +4 -0
- package/witnet/assets/modals/index.js +25 -0
- package/witnet/assets/modals/web3/btc.js +0 -0
- package/witnet/assets/modals/web3/eth.js +29 -0
- package/witnet/assets/modals/web3/sol.js +0 -0
- package/witnet/assets/modals/web3/wit.js +23 -0
- package/witnet/assets/requests.js +94 -0
- package/witnet/witnet.proto.json +1325 -0
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.JsonRpcProvider = exports.JsonRpcProviderError = void 0;
|
|
37
|
+
const axios_1 = __importStar(require("axios"));
|
|
38
|
+
const jsonBig = require('json-bigint');
|
|
39
|
+
const protobufjs_1 = require("protobufjs");
|
|
40
|
+
const protoRoot = protobufjs_1.Root.fromJSON(require("../../../witnet/witnet.proto.json"));
|
|
41
|
+
const protoBuf = protoRoot.lookupType("ConsensusConstants");
|
|
42
|
+
const types_1 = require("../crypto/types");
|
|
43
|
+
const utils = __importStar(require("../utils"));
|
|
44
|
+
const types_2 = require("./types");
|
|
45
|
+
class JsonRpcProviderError extends Error {
|
|
46
|
+
constructor(method, params, error) {
|
|
47
|
+
super(`${method}(${JSON.stringify(params)}): ${JSON.stringify(error)})`);
|
|
48
|
+
delete error?.stack;
|
|
49
|
+
this.error = error;
|
|
50
|
+
this.method = method;
|
|
51
|
+
this.params = params;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
exports.JsonRpcProviderError = JsonRpcProviderError;
|
|
55
|
+
class JsonRpcProvider {
|
|
56
|
+
/**
|
|
57
|
+
* Create and initialize a JsonRpcProvider object connected to the default Wit/RPC endpoint.
|
|
58
|
+
* Defaults to https://rpc-01.witnet.io if no WITNET_SDK_PROVIDER_URL envar is settled
|
|
59
|
+
* on the environment.
|
|
60
|
+
*/
|
|
61
|
+
static async fromEnv(url) {
|
|
62
|
+
return JsonRpcProvider.fromURL(url || process.env.WITNET_SDK_PROVIDER_URL || "https://rpc-01.witnet.io");
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Create and initialize a JsonRpcProvider object connected to the specified Wit/RPC endpoint.
|
|
66
|
+
* @param url Wit/RPC endpoint URL.
|
|
67
|
+
*/
|
|
68
|
+
static async fromURL(url) {
|
|
69
|
+
const provider = new JsonRpcProvider(url);
|
|
70
|
+
return provider.constants().then(() => provider);
|
|
71
|
+
}
|
|
72
|
+
constructor(url) {
|
|
73
|
+
this.endpoints = [];
|
|
74
|
+
if (url !== undefined) {
|
|
75
|
+
const urls = url.replaceAll(',', ';').split(';');
|
|
76
|
+
urls.forEach(url => {
|
|
77
|
+
const [schema,] = utils.parseURL(url);
|
|
78
|
+
if (!schema.startsWith("http://") && !schema.startsWith("https://")) {
|
|
79
|
+
throw Error(`Witnet.JsonRpcProvider: unsupported URL schema ${schema}`);
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
this.endpoints = urls;
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
this.endpoints.push(process.env.WITNET_SDK_PROVIDER_URL || "https://rpc-01.witnet.io");
|
|
86
|
+
}
|
|
87
|
+
this._headers = new axios_1.AxiosHeaders({
|
|
88
|
+
"Content-Type": "application/json"
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
get network() {
|
|
92
|
+
if (this._constants) {
|
|
93
|
+
return this._constants.bootstrapping_committee[0].startsWith('wit') ? "mainnet" : "testnet";
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
return undefined;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
get networkId() {
|
|
100
|
+
if (this._constants) {
|
|
101
|
+
const obj = {};
|
|
102
|
+
obj.activityPeriod = this._constants.activity_period;
|
|
103
|
+
obj.bootstrapHash = { SHA256: Array.from(utils.fromHexString(this._constants.bootstrap_hash)) };
|
|
104
|
+
obj.bootstrappingCommittee = this._constants.bootstrapping_committee;
|
|
105
|
+
obj.checkpointZeroTimestamp = this._constants.checkpoint_zero_timestamp;
|
|
106
|
+
obj.checkpointsPeriod = this._constants.checkpoints_period;
|
|
107
|
+
obj.collateralAge = this._constants.collateral_age;
|
|
108
|
+
obj.collateralMinimum = this._constants.collateral_minimum;
|
|
109
|
+
obj.epochsWithMinimumDifficulty = this._constants.epochs_with_minimum_difficulty;
|
|
110
|
+
obj.extraRounds = this._constants.extra_rounds;
|
|
111
|
+
obj.genesisHash = { SHA256: Array.from(utils.fromHexString(this._constants.genesis_hash)) };
|
|
112
|
+
obj.halvingPeriod = this._constants.halving_period;
|
|
113
|
+
obj.initialBlockReward = this._constants.initial_block_reward;
|
|
114
|
+
obj.maxDrWeight = this._constants.max_dr_weight;
|
|
115
|
+
obj.maxVtWeight = this._constants.max_vt_weight;
|
|
116
|
+
if (this._constants.minimum_difficulty > 0)
|
|
117
|
+
obj.minimumDifficulty = this._constants.minimum_difficulty;
|
|
118
|
+
obj.miningBackupFactor = this._constants.mining_backup_factor;
|
|
119
|
+
obj.miningReplicationFactor = this._constants.mining_replication_factor;
|
|
120
|
+
obj.reputationExpireAlphaDiff = this._constants.reputation_expire_alpha_diff;
|
|
121
|
+
obj.reputationIssuance = this._constants.reputation_issuance;
|
|
122
|
+
obj.reputationIssuanceStop = this._constants.reputation_issuance_stop;
|
|
123
|
+
obj.reputationPenalizationFactor = this._constants.reputation_penalization_factor;
|
|
124
|
+
obj.superblockCommitteeDecreasingPeriod = this._constants.superblock_committee_decreasing_period;
|
|
125
|
+
obj.superblockCommitteeDecreasingStep = this._constants.superblock_committee_decreasing_step;
|
|
126
|
+
obj.superblockPeriod = this._constants.superblock_period;
|
|
127
|
+
obj.superblockSigningCommitteeSize = this._constants.superblock_signing_committee_size;
|
|
128
|
+
// console.log(obj)
|
|
129
|
+
const message = protoBuf.fromObject(obj);
|
|
130
|
+
// console.log(message)
|
|
131
|
+
const buffer = protoBuf.encode(message).finish();
|
|
132
|
+
const hash = utils.toHexString(utils.sha256(buffer));
|
|
133
|
+
// console.log(hash)
|
|
134
|
+
const hex = hash.substring(0, 4);
|
|
135
|
+
return parseInt(hex, 16);
|
|
136
|
+
}
|
|
137
|
+
return undefined;
|
|
138
|
+
}
|
|
139
|
+
nextURL() {
|
|
140
|
+
return this.endpoints[Math.floor(Math.random() * this.endpoints.length)];
|
|
141
|
+
}
|
|
142
|
+
async callApiMethod(method, params) {
|
|
143
|
+
const url = this.nextURL();
|
|
144
|
+
return axios_1.default
|
|
145
|
+
.post(url, {
|
|
146
|
+
jsonrpc: '2.0',
|
|
147
|
+
id: +new Date(),
|
|
148
|
+
method,
|
|
149
|
+
params,
|
|
150
|
+
}, {
|
|
151
|
+
headers: this._headers,
|
|
152
|
+
transformResponse: function (response) { return jsonBig().parse(response); },
|
|
153
|
+
}).then((response) => {
|
|
154
|
+
if (response?.error || response?.data?.error) {
|
|
155
|
+
throw new JsonRpcProviderError(method, params, response?.error || response?.data?.error);
|
|
156
|
+
}
|
|
157
|
+
else
|
|
158
|
+
return response?.data?.result;
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
/// ---------------------------------------------------------------------------------------------------------------
|
|
162
|
+
/**
|
|
163
|
+
* Get the list of block hashes within given range, as known by the provider.
|
|
164
|
+
* @param {number} since - First epoch for which to return block hashes. If negative, return block hashes from the last n epochs.
|
|
165
|
+
* @param {number} limit - Number of block hashes to return. If negative, return the last n block hashes from this epoch range.
|
|
166
|
+
*/
|
|
167
|
+
async blocks(since = -1, limit = 1) {
|
|
168
|
+
return this.callApiMethod(types_2.Methods.GetBlockChain, [since, limit,]);
|
|
169
|
+
}
|
|
170
|
+
/// Get consensus constants used by the node
|
|
171
|
+
async constants() {
|
|
172
|
+
if (!this._constants) {
|
|
173
|
+
return this
|
|
174
|
+
.callApiMethod(types_2.Methods.GetConsensusConstants)
|
|
175
|
+
.then((constants) => {
|
|
176
|
+
this._constants = constants;
|
|
177
|
+
return constants;
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
return this._constants;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
/// Get limited list of currently top holders, as known by the provider.
|
|
185
|
+
async holders(minBalance = 0, maxBalance) {
|
|
186
|
+
return this
|
|
187
|
+
.callApiMethod(types_2.Methods.GetBalance2, {
|
|
188
|
+
all: {
|
|
189
|
+
minBalance,
|
|
190
|
+
...maxBalance ? { maxBalance } : {}
|
|
191
|
+
}
|
|
192
|
+
}).then((balances) => {
|
|
193
|
+
const reverseCompare = (a, b) => {
|
|
194
|
+
const a_tot = a.locked + a.unlocked + a.staked;
|
|
195
|
+
const b_tot = b.locked + b.unlocked + b.staked;
|
|
196
|
+
if (a_tot < b_tot)
|
|
197
|
+
return 1;
|
|
198
|
+
else if (a_tot > b_tot)
|
|
199
|
+
return -1;
|
|
200
|
+
else
|
|
201
|
+
return 0;
|
|
202
|
+
};
|
|
203
|
+
return Object.fromEntries(Object.entries(balances)
|
|
204
|
+
.sort((a, b) => reverseCompare(a[1], b[1])));
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
/// Get list of known peers
|
|
208
|
+
async knownPeers() {
|
|
209
|
+
return this.callApiMethod(types_2.Methods.KnownPeers);
|
|
210
|
+
}
|
|
211
|
+
/// Get all the pending transactions
|
|
212
|
+
async mempool() {
|
|
213
|
+
return this.callApiMethod(types_2.Methods.GetMempool);
|
|
214
|
+
}
|
|
215
|
+
/// Get priority and time-to-block estimations for different priority tiers.
|
|
216
|
+
async priorities() {
|
|
217
|
+
return this.callApiMethod(types_2.Methods.Priority);
|
|
218
|
+
}
|
|
219
|
+
/// Get information about protocol versions and which version is currently being enforced.
|
|
220
|
+
async protocolInfo() {
|
|
221
|
+
return this.callApiMethod(types_2.Methods.Protocol);
|
|
222
|
+
}
|
|
223
|
+
/// Get a full list of staking powers ordered by rank
|
|
224
|
+
async powers(query) {
|
|
225
|
+
return this.callApiMethod(types_2.Methods.QueryStakingPowers, query);
|
|
226
|
+
}
|
|
227
|
+
/// Get a full list of current stake entries Query the amount of nanowits staked by an address.
|
|
228
|
+
async stakes(query) {
|
|
229
|
+
return this
|
|
230
|
+
.callApiMethod(types_2.Methods.QueryStakes, query)
|
|
231
|
+
.catch(err => {
|
|
232
|
+
if (err?.error?.message && err.error.message.indexOf("not registered") > -1) {
|
|
233
|
+
return [];
|
|
234
|
+
}
|
|
235
|
+
else {
|
|
236
|
+
throw err;
|
|
237
|
+
}
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
/// Get node status
|
|
241
|
+
async syncStatus() {
|
|
242
|
+
return this.callApiMethod(types_2.Methods.SyncStatus);
|
|
243
|
+
}
|
|
244
|
+
async wips() {
|
|
245
|
+
return this.callApiMethod(types_2.Methods.SignalingInfo);
|
|
246
|
+
}
|
|
247
|
+
async witnesses(_since) {
|
|
248
|
+
// todo: witnesses estimation should instead be computed in proportion to
|
|
249
|
+
// ratio of validators that have honestly witnessed data requests
|
|
250
|
+
// vs validators that have honestly witnessed data requests and
|
|
251
|
+
// never revealed "i passed" out of majority,
|
|
252
|
+
// within the specified range of epochs.
|
|
253
|
+
let census = 0;
|
|
254
|
+
return this
|
|
255
|
+
.stakes({ params: { distinct: true } }) // todo: implement `count` flag on IJsonRpcProvider.stakes()
|
|
256
|
+
.then(records => {
|
|
257
|
+
census = records.length;
|
|
258
|
+
return this.blocks(-16, 16); // todo: blocks() should return epoch, hash and validator pkh for each block
|
|
259
|
+
})
|
|
260
|
+
.then(records => {
|
|
261
|
+
return Promise.all(records.map(record => this.getBlock(record[1])));
|
|
262
|
+
})
|
|
263
|
+
.then(blocks => {
|
|
264
|
+
const validators = [];
|
|
265
|
+
blocks.map(block => {
|
|
266
|
+
const pkh = types_1.PublicKey.fromProtobuf(block.block_sig.public_key).hash().toBech32(this.network);
|
|
267
|
+
if (!validators.includes(pkh))
|
|
268
|
+
validators.push(pkh);
|
|
269
|
+
});
|
|
270
|
+
return Math.min(validators.length, Math.floor(this.network === "testnet" ? census / 2 : census / 4));
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
/// ---------------------------------------------------------------------------------------------------------------
|
|
274
|
+
/// Get balance
|
|
275
|
+
async getBalance(pkh) {
|
|
276
|
+
return this
|
|
277
|
+
.callApiMethod(types_2.Methods.GetBalance2, { pkh })
|
|
278
|
+
.then((balance) => ({
|
|
279
|
+
locked: BigInt(balance.locked),
|
|
280
|
+
staked: BigInt(balance.staked),
|
|
281
|
+
unlocked: BigInt(balance.unlocked),
|
|
282
|
+
}));
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Get block info by hash
|
|
286
|
+
* @param {Hash} blockHash - Hash of the block that we are querying.
|
|
287
|
+
* @param {boolean} showTransactionHash - Whether to include an extra field containing array of transaction hashes.
|
|
288
|
+
*/
|
|
289
|
+
async getBlock(blockHash, showTransactionHash = false) {
|
|
290
|
+
return this.callApiMethod(types_2.Methods.GetBlock, [blockHash, showTransactionHash,]);
|
|
291
|
+
}
|
|
292
|
+
async getDataRequest(drTxHash) {
|
|
293
|
+
return this.callApiMethod(types_2.Methods.DataRequestReport, [drTxHash,]);
|
|
294
|
+
}
|
|
295
|
+
/// Get the blocks that pertain to the superblock index
|
|
296
|
+
async getSuperblock(epoch) {
|
|
297
|
+
return this.callApiMethod(types_2.Methods.GetSuperblock, { "block_epoch": epoch });
|
|
298
|
+
}
|
|
299
|
+
async getTransaction(txHash) {
|
|
300
|
+
return this.callApiMethod(types_2.Methods.GetTransaction, [txHash,]);
|
|
301
|
+
}
|
|
302
|
+
async getTransactionReceipt(txHash) {
|
|
303
|
+
// todo: fetch/update receipt from provider, if not cached
|
|
304
|
+
return JsonRpcProvider.receipts[txHash];
|
|
305
|
+
}
|
|
306
|
+
/// Get utxos
|
|
307
|
+
async getUtxos(pkh, smallFirst = true) {
|
|
308
|
+
return this
|
|
309
|
+
.callApiMethod(types_2.Methods.GetUtxoInfo, [pkh,])
|
|
310
|
+
.then((result) => {
|
|
311
|
+
const inversor = smallFirst ? 1 : -1;
|
|
312
|
+
return result.utxos.sort((a, b) => {
|
|
313
|
+
if (a.value > b.value)
|
|
314
|
+
return inversor;
|
|
315
|
+
else if (a.value < b.value)
|
|
316
|
+
return -inversor;
|
|
317
|
+
else
|
|
318
|
+
return 0;
|
|
319
|
+
}).map((utxo) => ({
|
|
320
|
+
...utxo,
|
|
321
|
+
value: BigInt(utxo.value),
|
|
322
|
+
}));
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
/// ---------------------------------------------------------------------------------------------------------------
|
|
326
|
+
async sendRawTransaction(transaction) {
|
|
327
|
+
return this.callApiMethod(types_2.Methods.Inventory, { transaction });
|
|
328
|
+
}
|
|
329
|
+
/// Get supply info
|
|
330
|
+
async supplyInfo() {
|
|
331
|
+
return this.callApiMethod(types_2.Methods.GetSupplyInfo);
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
exports.JsonRpcProvider = JsonRpcProvider;
|
|
335
|
+
JsonRpcProvider.receipts = {};
|
|
336
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3JwYy9wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBc0Q7QUFDdEQsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ3ZDLDJDQUE4QztBQUM5QyxNQUFNLFNBQVMsR0FBRyxpQkFBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsbUNBQW1DLENBQUMsQ0FBQyxDQUFBO0FBQ2xGLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsb0JBQW9CLENBQUMsQ0FBQTtBQUUzRCwyQ0FBb0Y7QUFFcEYsZ0RBQWlDO0FBRWpDLG1DQU1nQjtBQThCaEIsTUFBYSxvQkFBcUIsU0FBUSxLQUFLO0lBSTNDLFlBQVksTUFBYyxFQUFFLE1BQWEsRUFBRSxLQUFXO1FBQ2xELEtBQUssQ0FBQyxHQUFHLE1BQU0sSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ3hFLE9BQU8sS0FBSyxFQUFFLEtBQUssQ0FBQTtRQUNuQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtRQUNsQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtRQUNwQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtJQUN4QixDQUFDO0NBQ0o7QUFYRCxvREFXQztBQUVELE1BQWEsZUFBZTtJQVN4Qjs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBWTtRQUM3QixPQUFPLGVBQWUsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLElBQUksMEJBQTBCLENBQUMsQ0FB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QUFDLENBQUM7WUFDbEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBa0IsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDNUIsR0FBRyxJQUFJO2dCQUNQLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQzthQUM1QixDQUFDLENBQUMsQ0FBQTtRQUNQLENBQUMsQ0FBQyxDQUFBO0lBQ1YsQ0FBQztJQUVELG1IQUFtSDtJQUM1RyxLQUFLLENBQUMsa0JBQWtCLENBQUMsV0FBZ0I7UUFDNUMsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFVLGVBQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFBO0lBQzFFLENBQUM7SUFFRCxtQkFBbUI7SUFDWixLQUFLLENBQUMsVUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQWEsZUFBTyxDQUFDLGFBQWEsQ0FBQyxDQUFBO0lBQ2hFLENBQUM7O0FBMVRMLDBDQTJUQztBQXZUaUIsd0JBQVEsR0FBcUMsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVmYXVsdCBhcyBheGlvcywgQXhpb3NIZWFkZXJzIH0gZnJvbSBcImF4aW9zXCJcclxuY29uc3QganNvbkJpZyA9IHJlcXVpcmUoJ2pzb24tYmlnaW50Jyk7XHJcbmltcG9ydCB7IFJvb3QgYXMgUHJvdG9Sb290IH0gZnJvbSBcInByb3RvYnVmanNcIlxyXG5jb25zdCBwcm90b1Jvb3QgPSBQcm90b1Jvb3QuZnJvbUpTT04ocmVxdWlyZShcIi4uLy4uLy4uL3dpdG5ldC93aXRuZXQucHJvdG8uanNvblwiKSkgXHJcbmNvbnN0IHByb3RvQnVmID0gcHJvdG9Sb290Lmxvb2t1cFR5cGUoXCJDb25zZW5zdXNDb25zdGFudHNcIilcclxuXHJcbmltcG9ydCB7IFB1YmxpY0tleSwgUHVibGljS2V5SGFzaFN0cmluZywgVHJhbnNhY3Rpb25SZWNlaXB0IH0gZnJvbSBcIi4uL2NyeXB0by90eXBlc1wiXHJcbmltcG9ydCB7IEVwb2NoLCBIYXNoLCBOZXR3b3JrLCBVdHhvTWV0YWRhdGEgfSBmcm9tIFwiLi4vdHlwZXNcIlxyXG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tIFwiLi4vdXRpbHNcIlxyXG5cclxuaW1wb3J0IHtcclxuICAgIEJhbGFuY2UsIEJhbGFuY2UyLCBCbG9jaywgQ29uc2Vuc3VzQ29uc3RhbnRzLCBEYXRhUmVxdWVzdFJlcG9ydCwgXHJcbiAgICBNZW1wb29sLCBNZXRob2RzLCBQZWVyQWRkciwgUHJpb3JpdGllcywgUHJvdG9jb2xJbmZvLCBcclxuICAgIFF1ZXJ5U3Rha2VzLCBRdWVyeVN0YWtpbmdQb3dlcnMsXHJcbiAgICBUcmFuc2FjdGlvblJlcG9ydCwgU2lnbmFsaW5nSW5mbywgU3Rha2VFbnRyeSwgU3Rha2luZ1Bvd2VyLCBcclxuICAgIFN1cGVyYmxvY2tSZXBvcnQsIFN1cHBseUluZm8sIFN5bmNTdGF0dXMsIFV0eG9JbmZvLFxyXG59IGZyb20gXCIuL3R5cGVzXCJcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUpzb25ScGNQcm92aWRlciB7XHJcbiAgICBuZXR3b3JrPzogTmV0d29yaztcclxuICAgIG5ldHdvcmtJZD86IG51bWJlcjtcclxuICAgIFxyXG4gICAgYmxvY2tzKHNpbmNlOiBFcG9jaCwgbGltaXQ6IG51bWJlcik6IFByb21pc2U8QXJyYXk8W251bWJlciwgSGFzaC8qLCBQdWJsaWNLZXlIYXNoU3RyaW5nKi9dPj47XHJcbiAgICBjb25zdGFudHMoKTogUHJvbWlzZTxDb25zZW5zdXNDb25zdGFudHM+O1xyXG4gICAgaG9sZGVycyhsaW1pdD86IG51bWJlcik6IFByb21pc2U8UmVjb3JkPFB1YmxpY0tleUhhc2hTdHJpbmcsIEJhbGFuY2UyPj4gXHJcbiAgICBtZW1wb29sKCk6IFByb21pc2U8TWVtcG9vbD47XHJcbiAgICBwb3dlcnMocGFyYW1zPzogUXVlcnlTdGFraW5nUG93ZXJzKTogUHJvbWlzZTxBcnJheTxTdGFraW5nUG93ZXI+PjtcclxuICAgIHByaW9yaXRpZXMoKTogUHJvbWlzZTxQcmlvcml0aWVzPjtcclxuICAgIHByb3RvY29sSW5mbygpOiBQcm9taXNlPFByb3RvY29sSW5mbz47XHJcbiAgICBzdGFrZXMocGFyYW1zOiBRdWVyeVN0YWtlcyk6IFByb21pc2U8QXJyYXk8U3Rha2VFbnRyeT4+OyBcclxuICAgIHN1cHBseUluZm8oKTogUHJvbWlzZTxTdXBwbHlJbmZvPjtcclxuICAgIHN5bmNTdGF0dXMoKTogUHJvbWlzZTxhbnk+O1xyXG4gICAgd2lwcygpOiBQcm9taXNlPFNpZ25hbGluZ0luZm8+O1xyXG4gICAgd2l0bmVzc2VzKCk6IFByb21pc2U8bnVtYmVyPjtcclxuXHJcbiAgICBnZXRCYWxhbmNlKHBraDogUHVibGljS2V5SGFzaFN0cmluZyk6IFByb21pc2U8QmFsYW5jZTI+O1xyXG4gICAgZ2V0QmxvY2soYmxvY2tIYXNoOiBIYXNoLCBzaG93VHJhbnNhY3Rpb25IYXNoZXM/OiBib29sZWFuKTogUHJvbWlzZTxCbG9jaz47XHJcbiAgICBnZXREYXRhUmVxdWVzdChkclR4SGFzaDogSGFzaCk6IFByb21pc2U8RGF0YVJlcXVlc3RSZXBvcnQ+O1xyXG4gICAgZ2V0U3VwZXJibG9jayhlcG9jaDogRXBvY2gpOiBQcm9taXNlPFN1cGVyYmxvY2tSZXBvcnQ+O1xyXG4gICAgZ2V0VHJhbnNhY3Rpb24odHhIYXNoOiBIYXNoKTogUHJvbWlzZTxUcmFuc2FjdGlvblJlcG9ydD47XHJcbiAgICBnZXRUcmFuc2FjdGlvblJlY2VpcHQodHhIYXNoOiBIYXNoKTogUHJvbWlzZTxUcmFuc2FjdGlvblJlY2VpcHQ+O1xyXG4gICAgZ2V0VXR4b3MocGtoOiBQdWJsaWNLZXlIYXNoU3RyaW5nLCBzbWFsbGVzdEZpcnN0PzogYm9vbGVhbik6IFByb21pc2U8QXJyYXk8VXR4b01ldGFkYXRhPj47XHJcbiAgICAgICAgXHJcbiAgICBzZW5kUmF3VHJhbnNhY3Rpb24odHg6IGFueSk6IFByb21pc2U8Ym9vbGVhbj47XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBKc29uUnBjUHJvdmlkZXJFcnJvciBleHRlbmRzIEVycm9yIHtcclxuICAgIHJlYWRvbmx5IGVycm9yPzogYW55O1xyXG4gICAgcmVhZG9ubHkgbWV0aG9kOiBzdHJpbmc7XHJcbiAgICByZWFkb25seSBwYXJhbXM6IGFueVtdO1xyXG4gICAgY29uc3RydWN0b3IobWV0aG9kOiBzdHJpbmcsIHBhcmFtczogYW55W10sIGVycm9yPzogYW55KSB7XHJcbiAgICAgICAgc3VwZXIoYCR7bWV0aG9kfSgke0pTT04uc3RyaW5naWZ5KHBhcmFtcyl9KTogJHtKU09OLnN0cmluZ2lmeShlcnJvcil9KWApXHJcbiAgICAgICAgZGVsZXRlIGVycm9yPy5zdGFja1xyXG4gICAgICAgIHRoaXMuZXJyb3IgPSBlcnJvclxyXG4gICAgICAgIHRoaXMubWV0aG9kID0gbWV0aG9kXHJcbiAgICAgICAgdGhpcy5wYXJhbXMgPSBwYXJhbXNcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEpzb25ScGNQcm92aWRlciBpbXBsZW1lbnRzIElKc29uUnBjUHJvdmlkZXIge1xyXG4gICAgXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgZW5kcG9pbnRzOiBzdHJpbmdbXVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgcmVjZWlwdHM6IFJlY29yZDxIYXNoLCBUcmFuc2FjdGlvblJlY2VpcHQ+ID0ge307XHJcblxyXG4gICAgcHJvdGVjdGVkIF9jb25zdGFudHM/OiBDb25zZW5zdXNDb25zdGFudHNcclxuICAgIHByb3RlY3RlZCBfaGVhZGVyczogQXhpb3NIZWFkZXJzO1xyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZSBhbmQgaW5pdGlhbGl6ZSBhIEpzb25ScGNQcm92aWRlciBvYmplY3QgY29ubmVjdGVkIHRvIHRoZSBkZWZhdWx0IFdpdC9SUEMgZW5kcG9pbnQuXHJcbiAgICAgKiBEZWZhdWx0cyB0byBodHRwczovL3JwYy0wMS53aXRuZXQuaW8gaWYgbm8gV0lUTkVUX1NES19QUk9WSURFUl9VUkwgZW52YXIgaXMgc2V0dGxlZFxyXG4gICAgICogb24gdGhlIGVudmlyb25tZW50LlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgYXN5bmMgZnJvbUVudih1cmw/OiBzdHJpbmcpOiBQcm9taXNlPEpzb25ScGNQcm92aWRlcj4ge1xyXG4gICAgICAgIHJldHVybiBKc29uUnBjUHJvdmlkZXIuZnJvbVVSTCh1cmwgfHwgcHJvY2Vzcy5lbnYuV0lUTkVUX1NES19QUk9WSURFUl9VUkwgfHwgXCJodHRwczovL3JwYy0wMS53aXRuZXQuaW9cIilcclxuICAgIH1cclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGUgYW5kIGluaXRpYWxpemUgYSBKc29uUnBjUHJvdmlkZXIgb2JqZWN0IGNvbm5lY3RlZCB0byB0aGUgc3BlY2lmaWVkIFdpdC9SUEMgZW5kcG9pbnQuXHJcbiAgICAgKiBAcGFyYW0gdXJsIFdpdC9SUEMgZW5kcG9pbnQgVVJMLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgYXN5bmMgZnJvbVVSTCh1cmw6IHN0cmluZyk6IFByb21pc2U8SnNvblJwY1Byb3ZpZGVyPiB7XHJcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSBuZXcgSnNvblJwY1Byb3ZpZGVyKHVybClcclxuICAgICAgICByZXR1cm4gcHJvdmlkZXIuY29uc3RhbnRzKCkudGhlbigoKSA9PiBwcm92aWRlcilcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3Rvcih1cmw/OiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLmVuZHBvaW50cyA9IFtdXHJcbiAgICAgICAgaWYgKHVybCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHVybHMgPSB1cmwucmVwbGFjZUFsbCgnLCcsICc7Jykuc3BsaXQoJzsnKVxyXG4gICAgICAgICAgICB1cmxzLmZvckVhY2godXJsID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IFtzY2hlbWEsIF0gPSB1dGlscy5wYXJzZVVSTCh1cmwpXHJcbiAgICAgICAgICAgICAgICBpZiAoIXNjaGVtYS5zdGFydHNXaXRoKFwiaHR0cDovL1wiKSAmJiAhc2NoZW1hLnN0YXJ0c1dpdGgoXCJodHRwczovL1wiKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKGBXaXRuZXQuSnNvblJwY1Byb3ZpZGVyOiB1bnN1cHBvcnRlZCBVUkwgc2NoZW1hICR7c2NoZW1hfWApXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIHRoaXMuZW5kcG9pbnRzID0gdXJsc1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZW5kcG9pbnRzLnB1c2gocHJvY2Vzcy5lbnYuV0lUTkVUX1NES19QUk9WSURFUl9VUkwgfHwgXCJodHRwczovL3JwYy0wMS53aXRuZXQuaW9cIilcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5faGVhZGVycyA9IG5ldyBBeGlvc0hlYWRlcnMoeyBcclxuICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IG5ldHdvcmsoKTogTmV0d29yayB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2NvbnN0YW50cykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY29uc3RhbnRzLmJvb3RzdHJhcHBpbmdfY29tbWl0dGVlWzBdLnN0YXJ0c1dpdGgoJ3dpdCcpID8gXCJtYWlubmV0XCI6IFwidGVzdG5ldFwiXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IG5ldHdvcmtJZCgpOiBudW1iZXIgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIGlmICh0aGlzLl9jb25zdGFudHMpIHtcclxuICAgICAgICAgICAgY29uc3Qgb2JqOiBhbnkgPSB7fVxyXG4gICAgICAgICAgICBvYmouYWN0aXZpdHlQZXJpb2QgPSB0aGlzLl9jb25zdGFudHMuYWN0aXZpdHlfcGVyaW9kO1xyXG4gICAgICAgICAgICBvYmouYm9vdHN0cmFwSGFzaCA9IHsgU0hBMjU2OiBBcnJheS5mcm9tKHV0aWxzLmZyb21IZXhTdHJpbmcodGhpcy5fY29uc3RhbnRzLmJvb3RzdHJhcF9oYXNoKSkgfVxyXG4gICAgICAgICAgICBvYmouYm9vdHN0cmFwcGluZ0NvbW1pdHRlZSA9IHRoaXMuX2NvbnN0YW50cy5ib290c3RyYXBwaW5nX2NvbW1pdHRlZVxyXG4gICAgICAgICAgICBvYmouY2hlY2twb2ludFplcm9UaW1lc3RhbXAgPSB0aGlzLl9jb25zdGFudHMuY2hlY2twb2ludF96ZXJvX3RpbWVzdGFtcFxyXG4gICAgICAgICAgICBvYmouY2hlY2twb2ludHNQZXJpb2QgPSB0aGlzLl9jb25zdGFudHMuY2hlY2twb2ludHNfcGVyaW9kXHJcbiAgICAgICAgICAgIG9iai5jb2xsYXRlcmFsQWdlID0gdGhpcy5fY29uc3RhbnRzLmNvbGxhdGVyYWxfYWdlXHJcbiAgICAgICAgICAgIG9iai5jb2xsYXRlcmFsTWluaW11bSA9IHRoaXMuX2NvbnN0YW50cy5jb2xsYXRlcmFsX21pbmltdW1cclxuICAgICAgICAgICAgb2JqLmVwb2Noc1dpdGhNaW5pbXVtRGlmZmljdWx0eSA9IHRoaXMuX2NvbnN0YW50cy5lcG9jaHNfd2l0aF9taW5pbXVtX2RpZmZpY3VsdHlcclxuICAgICAgICAgICAgb2JqLmV4dHJhUm91bmRzID0gdGhpcy5fY29uc3RhbnRzLmV4dHJhX3JvdW5kc1xyXG4gICAgICAgICAgICBvYmouZ2VuZXNpc0hhc2ggPSB7IFNIQTI1NjogQXJyYXkuZnJvbSh1dGlscy5mcm9tSGV4U3RyaW5nKHRoaXMuX2NvbnN0YW50cy5nZW5lc2lzX2hhc2gpKSB9XHJcbiAgICAgICAgICAgIG9iai5oYWx2aW5nUGVyaW9kID0gdGhpcy5fY29uc3RhbnRzLmhhbHZpbmdfcGVyaW9kXHJcbiAgICAgICAgICAgIG9iai5pbml0aWFsQmxvY2tSZXdhcmQgPSB0aGlzLl9jb25zdGFudHMuaW5pdGlhbF9ibG9ja19yZXdhcmRcclxuICAgICAgICAgICAgb2JqLm1heERyV2VpZ2h0ID0gdGhpcy5fY29uc3RhbnRzLm1heF9kcl93ZWlnaHRcclxuICAgICAgICAgICAgb2JqLm1heFZ0V2VpZ2h0ID0gdGhpcy5fY29uc3RhbnRzLm1heF92dF93ZWlnaHRcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2NvbnN0YW50cy5taW5pbXVtX2RpZmZpY3VsdHkgPiAwKSBvYmoubWluaW11bURpZmZpY3VsdHkgPSB0aGlzLl9jb25zdGFudHMubWluaW11bV9kaWZmaWN1bHR5XHJcbiAgICAgICAgICAgIG9iai5taW5pbmdCYWNrdXBGYWN0b3IgPSB0aGlzLl9jb25zdGFudHMubWluaW5nX2JhY2t1cF9mYWN0b3JcclxuICAgICAgICAgICAgb2JqLm1pbmluZ1JlcGxpY2F0aW9uRmFjdG9yID0gdGhpcy5fY29uc3RhbnRzLm1pbmluZ19yZXBsaWNhdGlvbl9mYWN0b3JcclxuICAgICAgICAgICAgb2JqLnJlcHV0YXRpb25FeHBpcmVBbHBoYURpZmYgPSB0aGlzLl9jb25zdGFudHMucmVwdXRhdGlvbl9leHBpcmVfYWxwaGFfZGlmZlxyXG4gICAgICAgICAgICBvYmoucmVwdXRhdGlvbklzc3VhbmNlID0gdGhpcy5fY29uc3RhbnRzLnJlcHV0YXRpb25faXNzdWFuY2VcclxuICAgICAgICAgICAgb2JqLnJlcHV0YXRpb25Jc3N1YW5jZVN0b3AgPSB0aGlzLl9jb25zdGFudHMucmVwdXRhdGlvbl9pc3N1YW5jZV9zdG9wXHJcbiAgICAgICAgICAgIG9iai5yZXB1dGF0aW9uUGVuYWxpemF0aW9uRmFjdG9yID0gdGhpcy5fY29uc3RhbnRzLnJlcHV0YXRpb25fcGVuYWxpemF0aW9uX2ZhY3RvclxyXG4gICAgICAgICAgICBvYmouc3VwZXJibG9ja0NvbW1pdHRlZURlY3JlYXNpbmdQZXJpb2QgPSB0aGlzLl9jb25zdGFudHMuc3VwZXJibG9ja19jb21taXR0ZWVfZGVjcmVhc2luZ19wZXJpb2RcclxuICAgICAgICAgICAgb2JqLnN1cGVyYmxvY2tDb21taXR0ZWVEZWNyZWFzaW5nU3RlcCA9IHRoaXMuX2NvbnN0YW50cy5zdXBlcmJsb2NrX2NvbW1pdHRlZV9kZWNyZWFzaW5nX3N0ZXBcclxuICAgICAgICAgICAgb2JqLnN1cGVyYmxvY2tQZXJpb2QgPSB0aGlzLl9jb25zdGFudHMuc3VwZXJibG9ja19wZXJpb2RcclxuICAgICAgICAgICAgb2JqLnN1cGVyYmxvY2tTaWduaW5nQ29tbWl0dGVlU2l6ZSA9IHRoaXMuX2NvbnN0YW50cy5zdXBlcmJsb2NrX3NpZ25pbmdfY29tbWl0dGVlX3NpemVcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2cob2JqKVxyXG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gcHJvdG9CdWYuZnJvbU9iamVjdChvYmopXHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKG1lc3NhZ2UpXHJcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IHByb3RvQnVmLmVuY29kZShtZXNzYWdlKS5maW5pc2goKVxyXG4gICAgICAgICAgICBjb25zdCBoYXNoID0gdXRpbHMudG9IZXhTdHJpbmcodXRpbHMuc2hhMjU2KGJ1ZmZlcikpIFxyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhoYXNoKVxyXG4gICAgICAgICAgICBjb25zdCBoZXggPSBoYXNoLnN1YnN0cmluZygwLCA0KVxyXG4gICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQoaGV4LCAxNilcclxuICAgICAgICB9IFxyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWRcclxuICAgIH1cclxuICAgIFxyXG4gICAgcHJvdGVjdGVkIG5leHRVUkwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lbmRwb2ludHNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogdGhpcy5lbmRwb2ludHMubGVuZ3RoKV1cclxuICAgIH1cclxuICAgIFxyXG4gICAgcHJvdGVjdGVkIGFzeW5jIGNhbGxBcGlNZXRob2Q8VD4obWV0aG9kOiBzdHJpbmcsIHBhcmFtcz86IEFycmF5PGFueT4gfCBhbnkgKTogUHJvbWlzZTxFcnJvciB8IGFueT4ge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMubmV4dFVSTCgpXHJcbiAgICAgICAgcmV0dXJuIGF4aW9zXHJcbiAgICAgICAgICAgIC5wb3N0KFxyXG4gICAgICAgICAgICAgICAgdXJsLFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGpzb25ycGM6ICcyLjAnLFxyXG4gICAgICAgICAgICAgICAgICAgIGlkOiArIG5ldyBEYXRlKCksXHJcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcyxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5faGVhZGVycyxcclxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1SZXNwb25zZTogZnVuY3Rpb24ocmVzcG9uc2UpIHsgcmV0dXJuIGpzb25CaWcoKS5wYXJzZShyZXNwb25zZSkgfSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICApLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZT8uZXJyb3IgfHwgcmVzcG9uc2U/LmRhdGE/LmVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEpzb25ScGNQcm92aWRlckVycm9yKG1ldGhvZCwgcGFyYW1zLCByZXNwb25zZT8uZXJyb3IgfHwgcmVzcG9uc2U/LmRhdGE/LmVycm9yKTtcclxuXHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgcmV0dXJuIHJlc3BvbnNlPy5kYXRhPy5yZXN1bHQgYXMgVDtcclxuICAgICAgICAgICAgfSlcclxuICAgIH1cclxuICAgIFxyXG4gICAgLy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICBcclxuICAgIC8qKlxyXG4gICAgICogR2V0IHRoZSBsaXN0IG9mIGJsb2NrIGhhc2hlcyB3aXRoaW4gZ2l2ZW4gcmFuZ2UsIGFzIGtub3duIGJ5IHRoZSBwcm92aWRlci5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzaW5jZSAtIEZpcnN0IGVwb2NoIGZvciB3aGljaCB0byByZXR1cm4gYmxvY2sgaGFzaGVzLiBJZiBuZWdhdGl2ZSwgcmV0dXJuIGJsb2NrIGhhc2hlcyBmcm9tIHRoZSBsYXN0IG4gZXBvY2hzLlxyXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW1pdCAtIE51bWJlciBvZiBibG9jayBoYXNoZXMgdG8gcmV0dXJuLiBJZiBuZWdhdGl2ZSwgcmV0dXJuIHRoZSBsYXN0IG4gYmxvY2sgaGFzaGVzIGZyb20gdGhpcyBlcG9jaCByYW5nZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGFzeW5jIGJsb2NrcyhzaW5jZTogbnVtYmVyID0gLTEsIGxpbWl0OiBudW1iZXIgPSAxLCk6IFByb21pc2U8QXJyYXk8W251bWJlciwgSGFzaF0+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbEFwaU1ldGhvZDxbTnVtYmVyLCBIYXNoXT4oTWV0aG9kcy5HZXRCbG9ja0NoYWluLCBbc2luY2UsIGxpbWl0LCBdKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLy8vIEdldCBjb25zZW5zdXMgY29uc3RhbnRzIHVzZWQgYnkgdGhlIG5vZGVcclxuICAgIHB1YmxpYyBhc3luYyBjb25zdGFudHMoKTogUHJvbWlzZTxDb25zZW5zdXNDb25zdGFudHM+IHtcclxuICAgICAgICBpZiAoIXRoaXMuX2NvbnN0YW50cykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgICAgICAgICAgICAgLmNhbGxBcGlNZXRob2Q8Q29uc2Vuc3VzQ29uc3RhbnRzPihNZXRob2RzLkdldENvbnNlbnN1c0NvbnN0YW50cylcclxuICAgICAgICAgICAgICAgIC50aGVuKChjb25zdGFudHM6IENvbnNlbnN1c0NvbnN0YW50cykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnN0YW50cyA9IGNvbnN0YW50c1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb25zdGFudHNcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnN0YW50c1xyXG4gICAgICAgIH0gICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy8vIEdldCBsaW1pdGVkIGxpc3Qgb2YgY3VycmVudGx5IHRvcCBob2xkZXJzLCBhcyBrbm93biBieSB0aGUgcHJvdmlkZXIuXHJcbiAgICBwdWJsaWMgYXN5bmMgaG9sZGVycyhtaW5CYWxhbmNlID0gMCwgbWF4QmFsYW5jZT86IG51bWJlcik6IFByb21pc2U8UmVjb3JkPFB1YmxpY0tleUhhc2hTdHJpbmcsIEJhbGFuY2UyPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICAgICAgICAgIC5jYWxsQXBpTWV0aG9kPFJlY29yZDxQdWJsaWNLZXlIYXNoU3RyaW5nLCBCYWxhbmNlPj4oTWV0aG9kcy5HZXRCYWxhbmNlMiwge1xyXG4gICAgICAgICAgICAgICAgYWxsOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWluQmFsYW5jZSxcclxuICAgICAgICAgICAgICAgICAgICAuLi4gbWF4QmFsYW5jZSA/IHsgbWF4QmFsYW5jZSB9IDoge31cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSkudGhlbigoYmFsYW5jZXM6IFJlY29yZDxQdWJsaWNLZXlIYXNoU3RyaW5nLCBCYWxhbmNlMj4pID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VDb21wYXJlID0gKGE6IEJhbGFuY2UyLCBiOiBCYWxhbmNlMikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFfdG90ID0gYS5sb2NrZWQgKyBhLnVubG9ja2VkICsgYS5zdGFrZWRcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBiX3RvdCA9IGIubG9ja2VkICsgYi51bmxvY2tlZCArIGIuc3Rha2VkXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFfdG90IDwgYl90b3QpIHJldHVybiAxO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGFfdG90ID4gYl90b3QpIHJldHVybiAtMTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHJldHVybiAwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcclxuICAgICAgICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyhiYWxhbmNlcylcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnNvcnQoKGE6IChzdHJpbmcgfCBCYWxhbmNlMilbXSwgYjogKHN0cmluZyB8IEJhbGFuY2UyKVtdKSA9PiByZXZlcnNlQ29tcGFyZShhWzFdIGFzIEJhbGFuY2UyLCBiWzFdIGFzIEJhbGFuY2UyKSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vLyBHZXQgbGlzdCBvZiBrbm93biBwZWVyc1xyXG4gICAgcHVibGljIGFzeW5jIGtub3duUGVlcnMoKTogUHJvbWlzZTxBcnJheTxQZWVyQWRkcj4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYWxsQXBpTWV0aG9kPEFycmF5PFBlZXJBZGRyPj4oTWV0aG9kcy5Lbm93blBlZXJzKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLy8vIEdldCBhbGwgdGhlIHBlbmRpbmcgdHJhbnNhY3Rpb25zXHJcbiAgICBwdWJsaWMgYXN5bmMgbWVtcG9vbCgpOiBQcm9taXNlPE1lbXBvb2w+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYWxsQXBpTWV0aG9kPE1lbXBvb2w+KE1ldGhvZHMuR2V0TWVtcG9vbCk7XHJcbiAgICB9ICAgIFxyXG4gICAgXHJcbiAgICAvLy8gR2V0IHByaW9yaXR5IGFuZCB0aW1lLXRvLWJsb2NrIGVzdGltYXRpb25zIGZvciBkaWZmZXJlbnQgcHJpb3JpdHkgdGllcnMuXHJcbiAgICBwdWJsaWMgYXN5bmMgcHJpb3JpdGllcygpOiBQcm9taXNlPFByaW9yaXRpZXM+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYWxsQXBpTWV0aG9kPFByaW9yaXRpZXM+KE1ldGhvZHMuUHJpb3JpdHkpXHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vLyBHZXQgaW5mb3JtYXRpb24gYWJvdXQgcHJvdG9jb2wgdmVyc2lvbnMgYW5kIHdoaWNoIHZlcnNpb24gaXMgY3VycmVudGx5IGJlaW5nIGVuZm9yY2VkLlxyXG4gICAgcHVibGljIGFzeW5jIHByb3RvY29sSW5mbygpOiBQcm9taXNlPFByb3RvY29sSW5mbz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxBcGlNZXRob2Q8UHJvdG9jb2xJbmZvPihNZXRob2RzLlByb3RvY29sKVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLy8gR2V0IGEgZnVsbCBsaXN0IG9mIHN0YWtpbmcgcG93ZXJzIG9yZGVyZWQgYnkgcmFua1xyXG4gICAgcHVibGljIGFzeW5jIHBvd2VycyhxdWVyeT86IFF1ZXJ5U3Rha2luZ1Bvd2Vycyk6IFByb21pc2U8QXJyYXk8U3Rha2luZ1Bvd2VyPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxBcGlNZXRob2Q8QXJyYXk8U3Rha2luZ1Bvd2VyPj4oTWV0aG9kcy5RdWVyeVN0YWtpbmdQb3dlcnMsIHF1ZXJ5KVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLy8gR2V0IGEgZnVsbCBsaXN0IG9mIGN1cnJlbnQgc3Rha2UgZW50cmllcyAgUXVlcnkgdGhlIGFtb3VudCBvZiBuYW5vd2l0cyBzdGFrZWQgYnkgYW4gYWRkcmVzcy5cclxuICAgIHB1YmxpYyBhc3luYyBzdGFrZXMocXVlcnk/OiBRdWVyeVN0YWtlcyk6IFByb21pc2U8QXJyYXk8U3Rha2VFbnRyeT4+IHtcclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgICAgICAgICAuY2FsbEFwaU1ldGhvZDxBcnJheTxTdGFrZUVudHJ5Pj4oTWV0aG9kcy5RdWVyeVN0YWtlcywgcXVlcnkpXHJcbiAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVycj8uZXJyb3I/Lm1lc3NhZ2UgJiYgZXJyLmVycm9yLm1lc3NhZ2UuaW5kZXhPZihcIm5vdCByZWdpc3RlcmVkXCIpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW11cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vLyBHZXQgbm9kZSBzdGF0dXNcclxuICAgIHB1YmxpYyBhc3luYyBzeW5jU3RhdHVzKCk6IFByb21pc2U8U3luY1N0YXR1cz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxBcGlNZXRob2Q8U3luY1N0YXR1cz4oTWV0aG9kcy5TeW5jU3RhdHVzKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgcHVibGljIGFzeW5jIHdpcHMoKTogUHJvbWlzZTxTaWduYWxpbmdJbmZvPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbEFwaU1ldGhvZDxTaWduYWxpbmdJbmZvPihNZXRob2RzLlNpZ25hbGluZ0luZm8pXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIHdpdG5lc3Nlcyhfc2luY2U/OiBudW1iZXIpOiBQcm9taXNlPG51bWJlcj4ge1xyXG4gICAgICAgIC8vIHRvZG86IHdpdG5lc3NlcyBlc3RpbWF0aW9uIHNob3VsZCBpbnN0ZWFkIGJlIGNvbXB1dGVkIGluIHByb3BvcnRpb24gdG9cclxuICAgICAgICAvLyAgICAgICByYXRpbyBvZiB2YWxpZGF0b3JzIHRoYXQgaGF2ZSBob25lc3RseSB3aXRuZXNzZWQgZGF0YSByZXF1ZXN0c1xyXG4gICAgICAgIC8vICAgICAgIHZzIHZhbGlkYXRvcnMgdGhhdCBoYXZlIGhvbmVzdGx5IHdpdG5lc3NlZCBkYXRhIHJlcXVlc3RzIGFuZFxyXG4gICAgICAgIC8vICAgICAgIG5ldmVyIHJldmVhbGVkIFwiaSBwYXNzZWRcIiBvdXQgb2YgbWFqb3JpdHksIFxyXG4gICAgICAgIC8vICAgICAgIHdpdGhpbiB0aGUgc3BlY2lmaWVkIHJhbmdlIG9mIGVwb2Nocy5cclxuICAgICAgICBsZXQgY2Vuc3VzID0gMFxyXG4gICAgICAgIHJldHVybiB0aGlzIFxyXG4gICAgICAgICAgICAuc3Rha2VzKHsgcGFyYW1zOiB7IGRpc3RpbmN0OiB0cnVlIH19KSAvLyB0b2RvOiBpbXBsZW1lbnQgYGNvdW50YCBmbGFnIG9uIElKc29uUnBjUHJvdmlkZXIuc3Rha2VzKClcclxuICAgICAgICAgICAgLnRoZW4ocmVjb3JkcyA9PiB7XHJcbiAgICAgICAgICAgICAgICBjZW5zdXMgPSByZWNvcmRzLmxlbmd0aFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmxvY2tzKC0xNiwgMTYpIC8vIHRvZG86IGJsb2NrcygpIHNob3VsZCByZXR1cm4gZXBvY2gsIGhhc2ggYW5kIHZhbGlkYXRvciBwa2ggZm9yIGVhY2ggYmxvY2tcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnRoZW4ocmVjb3JkcyA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocmVjb3Jkcy5tYXAocmVjb3JkID0+IHRoaXMuZ2V0QmxvY2socmVjb3JkWzFdKSkpXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC50aGVuKGJsb2NrcyA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWxpZGF0b3JzOiBBcnJheTxQdWJsaWNLZXlIYXNoU3RyaW5nPiA9IFtdXHJcbiAgICAgICAgICAgICAgICBibG9ja3MubWFwKGJsb2NrID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwa2ggPSBQdWJsaWNLZXkuZnJvbVByb3RvYnVmKGJsb2NrLmJsb2NrX3NpZy5wdWJsaWNfa2V5KS5oYXNoKCkudG9CZWNoMzIodGhpcy5uZXR3b3JrKVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdmFsaWRhdG9ycy5pbmNsdWRlcyhwa2gpKSB2YWxpZGF0b3JzLnB1c2gocGtoKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5taW4oXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9ycy5sZW5ndGgsXHJcbiAgICAgICAgICAgICAgICAgICAgTWF0aC5mbG9vcih0aGlzLm5ldHdvcmsgPT09IFwidGVzdG5ldFwiID8gY2Vuc3VzIC8gMiA6IGNlbnN1cyAvIDQpXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vLyBHZXQgYmFsYW5jZVxyXG4gICAgcHVibGljIGFzeW5jIGdldEJhbGFuY2UocGtoOiBQdWJsaWNLZXlIYXNoU3RyaW5nKTogUHJvbWlzZTxCYWxhbmNlMj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICAgICAgICAgIC5jYWxsQXBpTWV0aG9kPEJhbGFuY2UyPihNZXRob2RzLkdldEJhbGFuY2UyLCB7IHBraCB9KVxyXG4gICAgICAgICAgICAudGhlbigoYmFsYW5jZTogQmFsYW5jZTIpID0+ICh7XHJcbiAgICAgICAgICAgICAgICBsb2NrZWQ6IEJpZ0ludChiYWxhbmNlLmxvY2tlZCksXHJcbiAgICAgICAgICAgICAgICBzdGFrZWQ6IEJpZ0ludChiYWxhbmNlLnN0YWtlZCksXHJcbiAgICAgICAgICAgICAgICB1bmxvY2tlZDogQmlnSW50KGJhbGFuY2UudW5sb2NrZWQpLFxyXG4gICAgICAgICAgICB9KSlcclxuICAgIH1cclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgYmxvY2sgaW5mbyBieSBoYXNoXHJcbiAgICAgKiBAcGFyYW0ge0hhc2h9IGJsb2NrSGFzaCAtIEhhc2ggb2YgdGhlIGJsb2NrIHRoYXQgd2UgYXJlIHF1ZXJ5aW5nLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBzaG93VHJhbnNhY3Rpb25IYXNoIC0gV2hldGhlciB0byBpbmNsdWRlIGFuIGV4dHJhIGZpZWxkIGNvbnRhaW5pbmcgYXJyYXkgb2YgdHJhbnNhY3Rpb24gaGFzaGVzLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXN5bmMgZ2V0QmxvY2soXHJcbiAgICAgICAgICAgIGJsb2NrSGFzaDogSGFzaCxcclxuICAgICAgICAgICAgc2hvd1RyYW5zYWN0aW9uSGFzaCA9IGZhbHNlLFxyXG4gICAgICAgICk6IFByb21pc2U8QmxvY2s+XHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbEFwaU1ldGhvZDxCbG9jaz4oTWV0aG9kcy5HZXRCbG9jaywgW2Jsb2NrSGFzaCwgc2hvd1RyYW5zYWN0aW9uSGFzaCwgXSlcclxuICAgIH1cclxuICAgIFxyXG4gICAgcHVibGljIGFzeW5jIGdldERhdGFSZXF1ZXN0KGRyVHhIYXNoOiBIYXNoKTogUHJvbWlzZTxEYXRhUmVxdWVzdFJlcG9ydD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxBcGlNZXRob2Q8RGF0YVJlcXVlc3RSZXBvcnQ+KE1ldGhvZHMuRGF0YVJlcXVlc3RSZXBvcnQsIFtkclR4SGFzaCwgXSlcclxuICAgIH1cclxuICAgIFxyXG4gICAgLy8vIEdldCB0aGUgYmxvY2tzIHRoYXQgcGVydGFpbiB0byB0aGUgc3VwZXJibG9jayBpbmRleFxyXG4gICAgcHVibGljIGFzeW5jIGdldFN1cGVyYmxvY2soZXBvY2g6IEVwb2NoKTogUHJvbWlzZTxTdXBlcmJsb2NrUmVwb3J0PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbEFwaU1ldGhvZDxTdXBlcmJsb2NrUmVwb3J0PihNZXRob2RzLkdldFN1cGVyYmxvY2ssIHsgXCJibG9ja19lcG9jaFwiOiBlcG9jaCB9KTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgcHVibGljIGFzeW5jIGdldFRyYW5zYWN0aW9uKHR4SGFzaDogSGFzaCk6IFByb21pc2U8VHJhbnNhY3Rpb25SZXBvcnQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYWxsQXBpTWV0aG9kPFRyYW5zYWN0aW9uUmVwb3J0PihNZXRob2RzLkdldFRyYW5zYWN0aW9uLCBbdHhIYXNoLCBdKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgZ2V0VHJhbnNhY3Rpb25SZWNlaXB0KHR4SGFzaDogSGFzaCk6IFByb21pc2U8VHJhbnNhY3Rpb25SZWNlaXB0PiB7XHJcbiAgICAgICAgLy8gdG9kbzogZmV0Y2gvdXBkYXRlIHJlY2VpcHQgZnJvbSBwcm92aWRlciwgaWYgbm90IGNhY2hlZFxyXG4gICAgICAgIHJldHVybiBKc29uUnBjUHJvdmlkZXIucmVjZWlwdHNbdHhIYXNoXVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLy8gR2V0IHV0eG9zXHJcbiAgICBwdWJsaWMgYXN5bmMgZ2V0VXR4b3MocGtoOiBQdWJsaWNLZXlIYXNoU3RyaW5nLCBzbWFsbEZpcnN0ID0gdHJ1ZSk6IFByb21pc2U8QXJyYXk8VXR4b01ldGFkYXRhPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICAgICAgICAgIC5jYWxsQXBpTWV0aG9kPFV0eG9JbmZvPihNZXRob2RzLkdldFV0eG9JbmZvLCBbcGtoLCBdKVxyXG4gICAgICAgICAgICAudGhlbigocmVzdWx0OiBVdHhvSW5mbykgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaW52ZXJzb3IgPSBzbWFsbEZpcnN0ID8gMSA6IC0xXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnV0eG9zLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYS52YWx1ZSA+IGIudmFsdWUpIHJldHVybiBpbnZlcnNvcjtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChhLnZhbHVlIDwgYi52YWx1ZSkgcmV0dXJuIC0gaW52ZXJzb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gMDtcclxuICAgICAgICAgICAgICAgIH0pLm1hcCgodXR4bzogVXR4b01ldGFkYXRhKSA9PiAoe1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLnV0eG8sXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IEJpZ0ludCh1dHhvLnZhbHVlKSxcclxuICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICBwdWJsaWMgYXN5bmMgc2VuZFJhd1RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uOiBhbnkpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYWxsQXBpTWV0aG9kPGJvb2xlYW4+KE1ldGhvZHMuSW52ZW50b3J5LCB7IHRyYW5zYWN0aW9uIH0pXHJcbiAgICB9XHJcblxyXG4gICAgLy8vIEdldCBzdXBwbHkgaW5mb1xyXG4gICAgcHVibGljIGFzeW5jIHN1cHBseUluZm8oKTogUHJvbWlzZTxTdXBwbHlJbmZvPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbEFwaU1ldGhvZDxTdXBwbHlJbmZvPihNZXRob2RzLkdldFN1cHBseUluZm8pXHJcbiAgICB9XHJcbn0iXX0=
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { IJsonRpcProvider, JsonRpcProvider } from "./provider";
|
|
2
|
+
import { DataRequestReport, PeerAddr, SupplyInfo } from "./types";
|
|
3
|
+
import { Hash } from "../types";
|
|
4
|
+
export interface IReporter extends IJsonRpcProvider {
|
|
5
|
+
providers(): Promise<Array<string>>;
|
|
6
|
+
supplyInfo(): Promise<SupplyInfo>;
|
|
7
|
+
getDataRequest(drTxHash: Hash, channel?: string): Promise<DataRequestReport>;
|
|
8
|
+
searchDataRequests(radHash: Hash): Promise<any>;
|
|
9
|
+
}
|
|
10
|
+
export declare class Reporter extends JsonRpcProvider implements IReporter {
|
|
11
|
+
constructor(url?: string);
|
|
12
|
+
peers(): Promise<Array<PeerAddr>>;
|
|
13
|
+
providers(): Promise<Array<string>>;
|
|
14
|
+
supplyInfo(): Promise<SupplyInfo>;
|
|
15
|
+
reportDataRequest(drTxHash: Hash, channel?: string): Promise<DataRequestReport>;
|
|
16
|
+
searchDataRequests(radHash: Hash): Promise<any>;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=reporter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../../../../src/lib/rpc/reporter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAC9D,OAAO,EAAE,iBAAiB,EAAW,QAAQ,EAAE,UAAU,EAAG,MAAM,SAAS,CAAA;AAC3E,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AAE/B,MAAM,WAAW,SAAU,SAAQ,gBAAgB;IAC/C,SAAS,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;IACnC,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC;IAElC,cAAc,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAA;IAC5E,kBAAkB,CAAC,OAAO,EAAE,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;CACnD;AAED,qBAAa,QAAS,SAAQ,eAAgB,YAAW,SAAS;gBAClD,GAAG,CAAC,EAAE,MAAM;IAKjB,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAI3B,SAAS,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAKnC,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC;IAKjC,iBAAiB,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAI/E,kBAAkB,CAAC,OAAO,EAAE,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC;CAG/D"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Reporter = void 0;
|
|
4
|
+
const provider_1 = require("./provider");
|
|
5
|
+
const types_1 = require("./types");
|
|
6
|
+
class Reporter extends provider_1.JsonRpcProvider {
|
|
7
|
+
constructor(url) {
|
|
8
|
+
super(url || process.env.WITNET_TOOLKIT_REPORTER_URL || "https://kermit.witnet.io");
|
|
9
|
+
}
|
|
10
|
+
/// ---------------------------------------------------------------------------------------------------------------
|
|
11
|
+
peers() {
|
|
12
|
+
return this.callApiMethod(types_1.Methods.KnownPeers);
|
|
13
|
+
}
|
|
14
|
+
async providers() {
|
|
15
|
+
return this.callApiMethod(types_1.Methods.Providers);
|
|
16
|
+
}
|
|
17
|
+
/// Get supply info
|
|
18
|
+
async supplyInfo() {
|
|
19
|
+
return this.callApiMethod(types_1.Methods.GetSupplyInfo);
|
|
20
|
+
}
|
|
21
|
+
/// ---------------------------------------------------------------------------------------------------------------
|
|
22
|
+
async reportDataRequest(drTxHash, channel) {
|
|
23
|
+
return this.callApiMethod(types_1.Methods.DataRequestReport, [drTxHash, channel,]);
|
|
24
|
+
}
|
|
25
|
+
async searchDataRequests(radHash) {
|
|
26
|
+
return this.callApiMethod(types_1.Methods.SearchDataRequests, [radHash,]);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
exports.Reporter = Reporter;
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3JwYy9yZXBvcnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5Q0FBOEQ7QUFDOUQsbUNBQTJFO0FBVzNFLE1BQWEsUUFBUyxTQUFRLDBCQUFlO0lBQ3pDLFlBQVksR0FBWTtRQUNwQixLQUFLLENBQUMsR0FBRyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLElBQUksMEJBQTBCLENBQUMsQ0FBQTtJQUN2RixDQUFDO0lBRUQsbUhBQW1IO0lBQzVHLEtBQUs7UUFDUixPQUFPLElBQUksQ0FBQyxhQUFhLENBQWtCLGVBQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRU0sS0FBSyxDQUFDLFNBQVM7UUFDbEIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFnQixlQUFPLENBQUMsU0FBUyxDQUFDLENBQUE7SUFDL0QsQ0FBQztJQUVELG1CQUFtQjtJQUNaLEtBQUssQ0FBQyxVQUFVO1FBQ25CLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBYSxlQUFPLENBQUMsYUFBYSxDQUFDLENBQUE7SUFDaEUsQ0FBQztJQUVELG1IQUFtSDtJQUM1RyxLQUFLLENBQUMsaUJBQWlCLENBQUMsUUFBYyxFQUFFLE9BQWdCO1FBQzNELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBb0IsZUFBTyxDQUFDLGlCQUFpQixFQUFFLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRyxDQUFDLENBQUE7SUFDbEcsQ0FBQztJQUVNLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxPQUFhO1FBQ3pDLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBTSxlQUFPLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxPQUFPLEVBQUcsQ0FBQyxDQUFBO0lBQzNFLENBQUM7Q0FDSjtBQTNCRCw0QkEyQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJSnNvblJwY1Byb3ZpZGVyLCBKc29uUnBjUHJvdmlkZXIgfSBmcm9tIFwiLi9wcm92aWRlclwiXHJcbmltcG9ydCB7IERhdGFSZXF1ZXN0UmVwb3J0LCBNZXRob2RzLCBQZWVyQWRkciwgU3VwcGx5SW5mbywgfSBmcm9tIFwiLi90eXBlc1wiXHJcbmltcG9ydCB7IEhhc2ggfSBmcm9tIFwiLi4vdHlwZXNcIlxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJUmVwb3J0ZXIgZXh0ZW5kcyBJSnNvblJwY1Byb3ZpZGVyIHtcclxuICAgIHByb3ZpZGVycygpOiBQcm9taXNlPEFycmF5PHN0cmluZz4+XHJcbiAgICBzdXBwbHlJbmZvKCk6IFByb21pc2U8U3VwcGx5SW5mbz47XHJcblxyXG4gICAgZ2V0RGF0YVJlcXVlc3QoZHJUeEhhc2g6IEhhc2gsIGNoYW5uZWw/OiBzdHJpbmcpOiBQcm9taXNlPERhdGFSZXF1ZXN0UmVwb3J0PlxyXG4gICAgc2VhcmNoRGF0YVJlcXVlc3RzKHJhZEhhc2g6IEhhc2gpOiBQcm9taXNlPGFueT47XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBSZXBvcnRlciBleHRlbmRzIEpzb25ScGNQcm92aWRlciBpbXBsZW1lbnRzIElSZXBvcnRlciB7XHJcbiAgICBjb25zdHJ1Y3Rvcih1cmw/OiBzdHJpbmcpIHtcclxuICAgICAgICBzdXBlcih1cmwgfHwgcHJvY2Vzcy5lbnYuV0lUTkVUX1RPT0xLSVRfUkVQT1JURVJfVVJMIHx8IFwiaHR0cHM6Ly9rZXJtaXQud2l0bmV0LmlvXCIpXHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIHB1YmxpYyBwZWVycygpOiBQcm9taXNlPEFycmF5PFBlZXJBZGRyPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxBcGlNZXRob2Q8QXJyYXk8UGVlckFkZHI+PihNZXRob2RzLktub3duUGVlcnMpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBwdWJsaWMgYXN5bmMgcHJvdmlkZXJzKCk6IFByb21pc2U8QXJyYXk8c3RyaW5nPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxBcGlNZXRob2Q8QXJyYXk8c3RyaW5nPj4oTWV0aG9kcy5Qcm92aWRlcnMpXHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vLyBHZXQgc3VwcGx5IGluZm9cclxuICAgIHB1YmxpYyBhc3luYyBzdXBwbHlJbmZvKCk6IFByb21pc2U8U3VwcGx5SW5mbz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxBcGlNZXRob2Q8U3VwcGx5SW5mbz4oTWV0aG9kcy5HZXRTdXBwbHlJbmZvKVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICBwdWJsaWMgYXN5bmMgcmVwb3J0RGF0YVJlcXVlc3QoZHJUeEhhc2g6IEhhc2gsIGNoYW5uZWw/OiBzdHJpbmcpOiBQcm9taXNlPERhdGFSZXF1ZXN0UmVwb3J0PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbEFwaU1ldGhvZDxEYXRhUmVxdWVzdFJlcG9ydD4oTWV0aG9kcy5EYXRhUmVxdWVzdFJlcG9ydCwgW2RyVHhIYXNoLCBjaGFubmVsLCBdKVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICBwdWJsaWMgYXN5bmMgc2VhcmNoRGF0YVJlcXVlc3RzKHJhZEhhc2g6IEhhc2gpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxBcGlNZXRob2Q8YW55PihNZXRob2RzLlNlYXJjaERhdGFSZXF1ZXN0cywgW3JhZEhhc2gsIF0pXHJcbiAgICB9XHJcbn1cclxuIl19
|