@witnet/sdk 1.0.3 → 1.0.4

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 (197) hide show
  1. package/.env_witnet +6 -6
  2. package/LICENSE +21 -21
  3. package/README.md +103 -103
  4. package/dist/bin/helpers.d.ts +88 -0
  5. package/dist/bin/helpers.d.ts.map +1 -0
  6. package/dist/bin/helpers.js +866 -0
  7. package/dist/index.d.ts +4 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +42 -0
  10. package/dist/lib/crypto/account.d.ts +18 -0
  11. package/dist/lib/crypto/account.d.ts.map +1 -0
  12. package/dist/lib/crypto/account.js +152 -0
  13. package/dist/lib/crypto/coinbase.d.ts +9 -0
  14. package/dist/lib/crypto/coinbase.d.ts.map +1 -0
  15. package/dist/lib/crypto/coinbase.js +39 -0
  16. package/dist/lib/crypto/index.d.ts +7 -0
  17. package/dist/lib/crypto/index.d.ts.map +1 -0
  18. package/dist/lib/crypto/index.js +28 -0
  19. package/dist/lib/crypto/interfaces.d.ts +80 -0
  20. package/dist/lib/crypto/interfaces.d.ts.map +1 -0
  21. package/dist/lib/crypto/interfaces.js +3 -0
  22. package/dist/lib/crypto/payloads/DataRequestPayload.d.ts +47 -0
  23. package/dist/lib/crypto/payloads/DataRequestPayload.d.ts.map +1 -0
  24. package/dist/lib/crypto/payloads/DataRequestPayload.js +384 -0
  25. package/dist/lib/crypto/payloads/StakePayload.d.ts +27 -0
  26. package/dist/lib/crypto/payloads/StakePayload.d.ts.map +1 -0
  27. package/dist/lib/crypto/payloads/StakePayload.js +184 -0
  28. package/dist/lib/crypto/payloads/UnstakePayload.d.ts +35 -0
  29. package/dist/lib/crypto/payloads/UnstakePayload.d.ts.map +1 -0
  30. package/dist/lib/crypto/payloads/UnstakePayload.js +244 -0
  31. package/dist/lib/crypto/payloads/ValueTransferPayload.d.ts +24 -0
  32. package/dist/lib/crypto/payloads/ValueTransferPayload.d.ts.map +1 -0
  33. package/dist/lib/crypto/payloads/ValueTransferPayload.js +182 -0
  34. package/dist/lib/crypto/payloads.d.ts +54 -0
  35. package/dist/lib/crypto/payloads.d.ts.map +1 -0
  36. package/dist/lib/crypto/payloads.js +224 -0
  37. package/dist/lib/crypto/signer.d.ts +26 -0
  38. package/dist/lib/crypto/signer.d.ts.map +1 -0
  39. package/dist/lib/crypto/signer.js +299 -0
  40. package/dist/lib/crypto/transmitters/DataRequests.d.ts +14 -0
  41. package/dist/lib/crypto/transmitters/DataRequests.d.ts.map +1 -0
  42. package/dist/lib/crypto/transmitters/DataRequests.js +62 -0
  43. package/dist/lib/crypto/transmitters/StakeDeposits.d.ts +11 -0
  44. package/dist/lib/crypto/transmitters/StakeDeposits.d.ts.map +1 -0
  45. package/dist/lib/crypto/transmitters/StakeDeposits.js +48 -0
  46. package/dist/lib/crypto/transmitters/StakeWithdrawals.d.ts +17 -0
  47. package/dist/lib/crypto/transmitters/StakeWithdrawals.d.ts.map +1 -0
  48. package/dist/lib/crypto/transmitters/StakeWithdrawals.js +115 -0
  49. package/dist/lib/crypto/transmitters/ValueTransfers.d.ts +10 -0
  50. package/dist/lib/crypto/transmitters/ValueTransfers.d.ts.map +1 -0
  51. package/dist/lib/crypto/transmitters/ValueTransfers.js +47 -0
  52. package/dist/lib/crypto/transmitters.d.ts +46 -0
  53. package/dist/lib/crypto/transmitters.d.ts.map +1 -0
  54. package/dist/lib/crypto/transmitters.js +506 -0
  55. package/dist/lib/crypto/types.d.ts +127 -0
  56. package/dist/lib/crypto/types.d.ts.map +1 -0
  57. package/dist/lib/crypto/types.js +261 -0
  58. package/dist/lib/crypto/utils.d.ts +10 -0
  59. package/dist/lib/crypto/utils.d.ts.map +1 -0
  60. package/dist/lib/crypto/utils.js +97 -0
  61. package/dist/lib/crypto/wallet.d.ts +26 -0
  62. package/dist/lib/crypto/wallet.d.ts.map +1 -0
  63. package/dist/lib/crypto/wallet.js +327 -0
  64. package/dist/lib/helpers.d.ts +90 -0
  65. package/dist/lib/helpers.d.ts.map +1 -0
  66. package/dist/lib/helpers.js +1031 -0
  67. package/dist/lib/index.d.ts +5 -0
  68. package/dist/lib/index.d.ts.map +1 -0
  69. package/dist/lib/index.js +21 -0
  70. package/dist/lib/radon/artifacts.d.ts +55 -0
  71. package/dist/lib/radon/artifacts.d.ts.map +1 -0
  72. package/dist/lib/radon/artifacts.js +347 -0
  73. package/dist/lib/radon/ccdr/eth.d.ts +100 -0
  74. package/dist/lib/radon/ccdr/eth.d.ts.map +1 -0
  75. package/dist/lib/radon/ccdr/eth.js +237 -0
  76. package/dist/lib/radon/ccdr/index.d.ts +34 -0
  77. package/dist/lib/radon/ccdr/index.d.ts.map +1 -0
  78. package/dist/lib/radon/ccdr/index.js +63 -0
  79. package/dist/lib/radon/ccdr/wit.d.ts +29 -0
  80. package/dist/lib/radon/ccdr/wit.d.ts.map +1 -0
  81. package/dist/lib/radon/ccdr/wit.js +60 -0
  82. package/dist/lib/radon/filters.d.ts +14 -0
  83. package/dist/lib/radon/filters.d.ts.map +1 -0
  84. package/dist/lib/radon/filters.js +47 -0
  85. package/dist/lib/radon/index.d.ts +36 -0
  86. package/dist/lib/radon/index.d.ts.map +1 -0
  87. package/dist/lib/radon/index.js +154 -0
  88. package/dist/lib/radon/reducers.d.ts +29 -0
  89. package/dist/lib/radon/reducers.d.ts.map +1 -0
  90. package/dist/lib/radon/reducers.js +101 -0
  91. package/dist/lib/radon/retrievals.d.ts +120 -0
  92. package/dist/lib/radon/retrievals.d.ts.map +1 -0
  93. package/dist/lib/radon/retrievals.js +358 -0
  94. package/dist/lib/radon/sources.d.ts +102 -0
  95. package/dist/lib/radon/sources.d.ts.map +1 -0
  96. package/dist/lib/radon/sources.js +294 -0
  97. package/dist/lib/radon/types.d.ts +521 -0
  98. package/dist/lib/radon/types.d.ts.map +1 -0
  99. package/dist/lib/radon/types.js +1066 -0
  100. package/dist/lib/radon/utils.d.ts +55 -0
  101. package/dist/lib/radon/utils.d.ts.map +1 -0
  102. package/dist/lib/radon/utils.js +181 -0
  103. package/dist/lib/rpc/farm.d.ts +66 -0
  104. package/dist/lib/rpc/farm.d.ts.map +1 -0
  105. package/dist/lib/rpc/farm.js +808 -0
  106. package/dist/lib/rpc/index.d.ts +3 -0
  107. package/dist/lib/rpc/index.d.ts.map +1 -0
  108. package/dist/lib/rpc/index.js +19 -0
  109. package/dist/lib/rpc/node.d.ts +38 -0
  110. package/dist/lib/rpc/node.d.ts.map +1 -0
  111. package/dist/lib/rpc/node.js +335 -0
  112. package/dist/lib/rpc/nodes.d.ts +40 -0
  113. package/dist/lib/rpc/nodes.d.ts.map +1 -0
  114. package/dist/lib/rpc/nodes.js +531 -0
  115. package/dist/lib/rpc/provider.d.ts +72 -0
  116. package/dist/lib/rpc/provider.d.ts.map +1 -0
  117. package/dist/lib/rpc/provider.js +402 -0
  118. package/dist/lib/rpc/reporter.d.ts +18 -0
  119. package/dist/lib/rpc/reporter.d.ts.map +1 -0
  120. package/dist/lib/rpc/reporter.js +99 -0
  121. package/dist/lib/rpc/types.d.ts +396 -0
  122. package/dist/lib/rpc/types.d.ts.map +1 -0
  123. package/dist/lib/rpc/types.js +81 -0
  124. package/dist/lib/rpc/wallet.d.ts +72 -0
  125. package/dist/lib/rpc/wallet.d.ts.map +1 -0
  126. package/dist/lib/rpc/wallet.js +41 -0
  127. package/dist/lib/types.d.ts +19 -0
  128. package/dist/lib/types.d.ts.map +1 -0
  129. package/dist/lib/types.js +7 -0
  130. package/dist/lib/utils.d.ts +5 -0
  131. package/dist/lib/utils.d.ts.map +1 -0
  132. package/dist/lib/utils.js +51 -0
  133. package/dist/package.json +1 -1
  134. package/dist/src/bin/helpers.js +1 -1
  135. package/dist/src/index.js +1 -1
  136. package/dist/src/lib/crypto/account.js +1 -1
  137. package/dist/src/lib/crypto/coinbase.js +1 -1
  138. package/dist/src/lib/crypto/index.js +1 -1
  139. package/dist/src/lib/crypto/interfaces.js +1 -1
  140. package/dist/src/lib/crypto/payloads/DataRequestPayload.js +1 -1
  141. package/dist/src/lib/crypto/payloads/StakePayload.js +1 -1
  142. package/dist/src/lib/crypto/payloads/UnstakePayload.js +1 -1
  143. package/dist/src/lib/crypto/payloads/ValueTransferPayload.js +1 -1
  144. package/dist/src/lib/crypto/payloads.js +1 -1
  145. package/dist/src/lib/crypto/signer.js +1 -1
  146. package/dist/src/lib/crypto/transmitters/DataRequests.js +1 -1
  147. package/dist/src/lib/crypto/transmitters/StakeDeposits.js +1 -1
  148. package/dist/src/lib/crypto/transmitters/StakeWithdrawals.js +1 -1
  149. package/dist/src/lib/crypto/transmitters/ValueTransfers.js +1 -1
  150. package/dist/src/lib/crypto/transmitters.js +1 -1
  151. package/dist/src/lib/crypto/types.js +1 -1
  152. package/dist/src/lib/crypto/utils.js +1 -1
  153. package/dist/src/lib/crypto/wallet.js +1 -1
  154. package/dist/src/lib/index.js +1 -1
  155. package/dist/src/lib/radon/ccdr/eth.js +1 -1
  156. package/dist/src/lib/radon/ccdr/index.js +1 -1
  157. package/dist/src/lib/radon/ccdr/wit.js +1 -1
  158. package/dist/src/lib/radon/filters.js +1 -1
  159. package/dist/src/lib/radon/index.js +1 -1
  160. package/dist/src/lib/radon/reducers.js +1 -1
  161. package/dist/src/lib/radon/types.js +1 -1
  162. package/dist/src/lib/radon/utils.js +1 -1
  163. package/dist/src/lib/rpc/index.js +1 -1
  164. package/dist/src/lib/rpc/nodes.js +1 -1
  165. package/dist/src/lib/rpc/provider.js +1 -1
  166. package/dist/src/lib/rpc/reporter.js +1 -1
  167. package/dist/src/lib/rpc/types.js +1 -1
  168. package/dist/src/lib/types.d.ts +1 -1
  169. package/dist/src/lib/types.d.ts.map +1 -1
  170. package/dist/src/lib/types.js +1 -1
  171. package/dist/src/lib/utils.js +1 -1
  172. package/dist/witnet/assets/index.js +1 -1
  173. package/dist/witnet/assets/modals/index.js +1 -1
  174. package/dist/witnet/assets/modals/web3/eth.js +1 -1
  175. package/dist/witnet/assets/modals/web3/ipfs.js +1 -1
  176. package/dist/witnet/assets/modals/web3/wit.js +1 -1
  177. package/dist/witnet/assets/requests.js +1 -1
  178. package/package.json +1 -1
  179. package/src/bin/cli/history.js +31 -31
  180. package/src/bin/cli/inspect.js +405 -405
  181. package/src/bin/cli/network.js +594 -594
  182. package/src/bin/cli/nodes.js +364 -364
  183. package/src/bin/cli/radon.js +815 -815
  184. package/src/bin/cli/wallet.js +1117 -1117
  185. package/src/bin/helpers.js +840 -840
  186. package/src/bin/postinstall.js +9 -9
  187. package/src/bin/toolkit.js +295 -295
  188. package/witnet/assets/_index.js +8 -8
  189. package/witnet/assets/_requests.js +25 -25
  190. package/witnet/assets/_sources.js +36 -36
  191. package/witnet/assets/_templates.js +36 -36
  192. package/witnet/assets/index.js +4 -4
  193. package/witnet/assets/modals/index.js +9 -9
  194. package/witnet/assets/modals/web3/eth.js +29 -29
  195. package/witnet/assets/modals/web3/ipfs.js +19 -19
  196. package/witnet/assets/modals/web3/wit.js +21 -21
  197. package/witnet/assets/requests.js +95 -95
@@ -0,0 +1,72 @@
1
+ import { AxiosHeaders } from "axios";
2
+ import { PublicKeyHashString, TransactionReceipt } from "../crypto/types";
3
+ import { Epoch, Hash, Network, UtxoMetadata } from "../types";
4
+ import { Balance2, Block, ConsensusConstants, DataRequestReport, Mempool, PeerAddr, Priorities, ProtocolInfo, QueryStakes, QueryStakingPowers, TransactionReport, SignalingInfo, StakeEntry, StakingPower, SuperblockReport } from "./types";
5
+ export interface IProvider {
6
+ network?: Network;
7
+ blocks(since: Epoch, limit: number): Promise<Array<[number, Hash]>>;
8
+ constants(): Promise<ConsensusConstants>;
9
+ holders(limit?: number): Promise<Record<PublicKeyHashString, Balance2>>;
10
+ mempool(): Promise<Mempool>;
11
+ powers(params?: QueryStakingPowers): Promise<Array<StakingPower>>;
12
+ priorities(): Promise<Priorities>;
13
+ protocolInfo(): Promise<ProtocolInfo>;
14
+ stakes(params: QueryStakes): Promise<Array<StakeEntry>>;
15
+ syncStatus(): Promise<any>;
16
+ wips(): Promise<SignalingInfo>;
17
+ getBalance(pkh: PublicKeyHashString): Promise<Balance2>;
18
+ getBlock(blockHash: Hash, showTransactionHashes?: boolean): Promise<Block>;
19
+ getDataRequest(drTxHash: Hash): Promise<DataRequestReport>;
20
+ getTransaction(txHash: Hash): Promise<TransactionReport>;
21
+ getTransactionReceipt(txHash: Hash): Promise<TransactionReceipt>;
22
+ getSuperblock(epoch: Epoch): Promise<SuperblockReport>;
23
+ getUtxoInfo(pkh: PublicKeyHashString, smallestFirst?: boolean): Promise<Array<UtxoMetadata>>;
24
+ sendRawTransaction(tx: any): Promise<boolean>;
25
+ }
26
+ export declare class ProviderError extends Error {
27
+ readonly error?: any;
28
+ readonly method: string;
29
+ readonly params: any[];
30
+ constructor(method: string, params: any[], error?: any);
31
+ }
32
+ export declare class Provider implements IProvider {
33
+ network?: Network;
34
+ static receipts: Record<Hash, TransactionReceipt>;
35
+ readonly endpoints: string[];
36
+ protected _constants?: ConsensusConstants;
37
+ protected _headers: AxiosHeaders;
38
+ static initialized(url?: string): Promise<Provider>;
39
+ constructor(url: string);
40
+ protected nextURL(): string;
41
+ protected callApiMethod<T>(method: string, params?: Array<any> | any): Promise<Error | any>;
42
+ /**
43
+ * Get the list of block hashes within given range, as known by the provider.
44
+ * @param {number} since - First epoch for which to return block hashes. If negative, return block hashes from the last n epochs.
45
+ * @param {number} limit - Number of block hashes to return. If negative, return the last n block hashes from this epoch range.
46
+ */
47
+ blocks(since?: number, limit?: number): Promise<Array<[number, Hash]>>;
48
+ constants(): Promise<ConsensusConstants>;
49
+ holders(minBalance?: number, maxBalance?: number): Promise<Record<PublicKeyHashString, Balance2>>;
50
+ knownPeers(): Promise<Array<PeerAddr>>;
51
+ mempool(): Promise<Mempool>;
52
+ priorities(): Promise<Priorities>;
53
+ protocolInfo(): Promise<ProtocolInfo>;
54
+ powers(query?: QueryStakingPowers): Promise<Array<StakingPower>>;
55
+ stakes(query?: QueryStakes): Promise<Array<StakeEntry>>;
56
+ syncStatus(): Promise<any>;
57
+ wips(): Promise<SignalingInfo>;
58
+ getBalance(pkh: PublicKeyHashString): Promise<Balance2>;
59
+ /**
60
+ * Get block info by hash
61
+ * @param {Hash} blockHash - Hash of the block that we are querying.
62
+ * @param {boolean} showTransactionHash - Whether to include an extra field containing array of transaction hashes.
63
+ */
64
+ getBlock(blockHash: Hash, showTransactionHash?: boolean): Promise<Block>;
65
+ getDataRequest(drTxHash: Hash): Promise<DataRequestReport>;
66
+ getSuperblock(epoch: Epoch): Promise<SuperblockReport>;
67
+ getTransaction(txHash: Hash): Promise<TransactionReport>;
68
+ getTransactionReceipt(txHash: Hash): Promise<TransactionReceipt>;
69
+ getUtxoInfo(pkh: PublicKeyHashString, smallFirst?: boolean): Promise<Array<UtxoMetadata>>;
70
+ sendRawTransaction(transaction: any): Promise<boolean>;
71
+ }
72
+ //# sourceMappingURL=provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/lib/rpc/provider.ts"],"names":[],"mappings":"AAEA,OAAO,EAAoB,YAAY,EAAE,MAAM,OAAO,CAAA;AAEtD,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACzE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAE7D,OAAO,EACM,QAAQ,EAAE,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAC/D,OAAO,EAAW,QAAQ,EAAE,UAAU,EAAE,YAAY,EACpD,WAAW,EAAE,kBAAkB,EAC/B,iBAAiB,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAC1D,gBAAgB,EACnB,MAAM,SAAS,CAAA;AAEhB,MAAM,WAAW,SAAS;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAGlB,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,IAAI,CAA0B,CAAC,CAAC,CAAC;IAC7F,SAAS,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACzC,OAAO,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAAC,CAAA;IACvE,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5B,MAAM,CAAC,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;IAClE,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC;IAClC,YAAY,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC;IACtC,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;IACxD,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3B,IAAI,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC;IAE/B,UAAU,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IACxD,QAAQ,CAAC,SAAS,EAAE,IAAI,EAAE,qBAAqB,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAC3E,cAAc,CAAC,QAAQ,EAAE,IAAI,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC3D,cAAc,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACzD,qBAAqB,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACjE,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACvD,WAAW,CAAC,GAAG,EAAE,mBAAmB,EAAE,aAAa,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;IAE7F,kBAAkB,CAAC,EAAE,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACjD;AAED,qBAAa,aAAc,SAAQ,KAAK;IACpC,QAAQ,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC;gBACX,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,KAAK,CAAC,EAAE,GAAG;CAOzD;AAED,qBAAa,QAAS,YAAW,SAAS;IAE/B,OAAO,CAAC,EAAE,OAAO,CAAC;IACzB,OAAc,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAM;IAE9D,SAAgB,SAAS,EAAE,MAAM,EAAE,CAAA;IAEnC,SAAS,CAAC,UAAU,CAAC,EAAE,kBAAkB,CAAA;IACzC,SAAS,CAAC,QAAQ,EAAE,YAAY,CAAC;WAEpB,WAAW,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;gBAK7C,GAAG,EAAE,MAAM;IAmBvB,SAAS,CAAC,OAAO,IAAI,MAAM;cAIX,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,GAAI,OAAO,CAAC,KAAK,GAAG,GAAG,CAAC;IAyBlG;;;;OAIG;IACU,MAAM,CAAC,KAAK,GAAE,MAAW,EAAE,KAAK,GAAE,MAAU,GAAI,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IAK9E,SAAS,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAexC,OAAO,CAAC,UAAU,SAAI,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAAC;IAuB5F,UAAU,IAAI,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAKtC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAK3B,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC;IAKjC,YAAY,IAAI,OAAO,CAAC,YAAY,CAAC;IAKrC,MAAM,CAAC,KAAK,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAKhE,MAAM,CAAC,KAAK,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAavD,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC;IAI1B,IAAI,IAAI,OAAO,CAAC,aAAa,CAAC;IAM9B,UAAU,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAIpE;;;;OAIG;IACU,QAAQ,CACb,SAAS,EAAE,IAAI,EACf,mBAAmB,UAAQ,GAC5B,OAAO,CAAC,KAAK,CAAC;IAKR,cAAc,CAAC,QAAQ,EAAE,IAAI,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAK1D,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAItD,cAAc,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAIxD,qBAAqB,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAMtE,WAAW,CAAC,GAAG,EAAE,mBAAmB,EAAE,UAAU,UAAO,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAchF,kBAAkB,CAAC,WAAW,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;CAGtE"}
@@ -0,0 +1,402 @@
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ if (typeof b !== "function" && b !== null)
11
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
+ extendStatics(d, b);
13
+ function __() { this.constructor = d; }
14
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
+ };
16
+ })();
17
+ var __assign = (this && this.__assign) || function () {
18
+ __assign = Object.assign || function(t) {
19
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
20
+ s = arguments[i];
21
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
22
+ t[p] = s[p];
23
+ }
24
+ return t;
25
+ };
26
+ return __assign.apply(this, arguments);
27
+ };
28
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
29
+ if (k2 === undefined) k2 = k;
30
+ var desc = Object.getOwnPropertyDescriptor(m, k);
31
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
32
+ desc = { enumerable: true, get: function() { return m[k]; } };
33
+ }
34
+ Object.defineProperty(o, k2, desc);
35
+ }) : (function(o, m, k, k2) {
36
+ if (k2 === undefined) k2 = k;
37
+ o[k2] = m[k];
38
+ }));
39
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
40
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
41
+ }) : function(o, v) {
42
+ o["default"] = v;
43
+ });
44
+ var __importStar = (this && this.__importStar) || (function () {
45
+ var ownKeys = function(o) {
46
+ ownKeys = Object.getOwnPropertyNames || function (o) {
47
+ var ar = [];
48
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
49
+ return ar;
50
+ };
51
+ return ownKeys(o);
52
+ };
53
+ return function (mod) {
54
+ if (mod && mod.__esModule) return mod;
55
+ var result = {};
56
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
57
+ __setModuleDefault(result, mod);
58
+ return result;
59
+ };
60
+ })();
61
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
62
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
63
+ return new (P || (P = Promise))(function (resolve, reject) {
64
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
65
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
66
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
67
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
68
+ });
69
+ };
70
+ var __generator = (this && this.__generator) || function (thisArg, body) {
71
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
72
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
73
+ function verb(n) { return function (v) { return step([n, v]); }; }
74
+ function step(op) {
75
+ if (f) throw new TypeError("Generator is already executing.");
76
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
77
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
78
+ if (y = 0, t) op = [op[0] & 2, t.value];
79
+ switch (op[0]) {
80
+ case 0: case 1: t = op; break;
81
+ case 4: _.label++; return { value: op[1], done: false };
82
+ case 5: _.label++; y = op[1]; op = [0]; continue;
83
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
84
+ default:
85
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
86
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
87
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
88
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
89
+ if (t[2]) _.ops.pop();
90
+ _.trys.pop(); continue;
91
+ }
92
+ op = body.call(thisArg, _);
93
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
94
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
95
+ }
96
+ };
97
+ var __read = (this && this.__read) || function (o, n) {
98
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
99
+ if (!m) return o;
100
+ var i = m.call(o), r, ar = [], e;
101
+ try {
102
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
103
+ }
104
+ catch (error) { e = { error: error }; }
105
+ finally {
106
+ try {
107
+ if (r && !r.done && (m = i["return"])) m.call(i);
108
+ }
109
+ finally { if (e) throw e.error; }
110
+ }
111
+ return ar;
112
+ };
113
+ Object.defineProperty(exports, "__esModule", { value: true });
114
+ exports.Provider = exports.ProviderError = void 0;
115
+ var utils = __importStar(require("../utils"));
116
+ var axios_1 = __importStar(require("axios"));
117
+ var types_1 = require("./types");
118
+ var ProviderError = /** @class */ (function (_super) {
119
+ __extends(ProviderError, _super);
120
+ function ProviderError(method, params, error) {
121
+ var _this = _super.call(this, "".concat(method, "(").concat(JSON.stringify(params), "): ").concat(JSON.stringify(error), ")")) || this;
122
+ error === null || error === void 0 ? true : delete error.stack;
123
+ _this.error = error;
124
+ _this.method = method;
125
+ _this.params = params;
126
+ return _this;
127
+ }
128
+ return ProviderError;
129
+ }(Error));
130
+ exports.ProviderError = ProviderError;
131
+ var Provider = /** @class */ (function () {
132
+ function Provider(url) {
133
+ this.endpoints = [];
134
+ if (url !== undefined) {
135
+ var urls = url.replaceAll(',', ';').split(';');
136
+ urls.forEach(function (url) {
137
+ var _a = __read(utils.parseURL(url), 1), schema = _a[0];
138
+ if (!schema.startsWith("http://") && !schema.startsWith("https://")) {
139
+ throw Error("Witnet.Provider: unsupported URL schema ".concat(schema));
140
+ }
141
+ });
142
+ this.endpoints = urls;
143
+ }
144
+ else {
145
+ this.endpoints.push(process.env.WITNET_TOOLKIT_PROVIDER_URL || "https://rpc-01.witnet.io");
146
+ }
147
+ this._headers = new axios_1.AxiosHeaders({
148
+ "Content-Type": "application/json"
149
+ });
150
+ }
151
+ Provider.initialized = function (url) {
152
+ return __awaiter(this, void 0, void 0, function () {
153
+ var provider;
154
+ return __generator(this, function (_a) {
155
+ provider = new Provider(url || "https://rpc.witnet.io");
156
+ return [2 /*return*/, provider.constants().then(function () { return provider; })];
157
+ });
158
+ });
159
+ };
160
+ Provider.prototype.nextURL = function () {
161
+ return this.endpoints[Math.floor(Math.random() * this.endpoints.length)];
162
+ };
163
+ Provider.prototype.callApiMethod = function (method, params) {
164
+ return __awaiter(this, void 0, void 0, function () {
165
+ var url;
166
+ return __generator(this, function (_a) {
167
+ url = this.nextURL();
168
+ return [2 /*return*/, axios_1.default
169
+ .post(url, {
170
+ jsonrpc: '2.0',
171
+ id: +new Date(),
172
+ method: method,
173
+ params: params,
174
+ }, {
175
+ headers: this._headers,
176
+ }).then(function (response) {
177
+ var _a, _b, _c;
178
+ if ((response === null || response === void 0 ? void 0 : response.error) || ((_a = response === null || response === void 0 ? void 0 : response.data) === null || _a === void 0 ? void 0 : _a.error)) {
179
+ throw new ProviderError(method, params, (response === null || response === void 0 ? void 0 : response.error) || ((_b = response === null || response === void 0 ? void 0 : response.data) === null || _b === void 0 ? void 0 : _b.error));
180
+ }
181
+ else
182
+ return (_c = response === null || response === void 0 ? void 0 : response.data) === null || _c === void 0 ? void 0 : _c.result;
183
+ })];
184
+ });
185
+ });
186
+ };
187
+ /// ---------------------------------------------------------------------------------------------------------------
188
+ /**
189
+ * Get the list of block hashes within given range, as known by the provider.
190
+ * @param {number} since - First epoch for which to return block hashes. If negative, return block hashes from the last n epochs.
191
+ * @param {number} limit - Number of block hashes to return. If negative, return the last n block hashes from this epoch range.
192
+ */
193
+ Provider.prototype.blocks = function () {
194
+ return __awaiter(this, arguments, void 0, function (since, limit) {
195
+ if (since === void 0) { since = -1; }
196
+ if (limit === void 0) { limit = 1; }
197
+ return __generator(this, function (_a) {
198
+ return [2 /*return*/, this.callApiMethod(types_1.Methods.GetBlockChain, [since, limit,])];
199
+ });
200
+ });
201
+ };
202
+ /// Get consensus constants used by the node
203
+ Provider.prototype.constants = function () {
204
+ return __awaiter(this, void 0, void 0, function () {
205
+ var _this = this;
206
+ return __generator(this, function (_a) {
207
+ if (!this._constants) {
208
+ return [2 /*return*/, this
209
+ .callApiMethod(types_1.Methods.GetConsensusConstants)
210
+ .then(function (constants) {
211
+ _this.network = constants.bootstrapping_committee[0].startsWith('wit') ? "mainnet" : "testnet";
212
+ _this._constants = constants;
213
+ return constants;
214
+ })];
215
+ }
216
+ else {
217
+ return [2 /*return*/, this._constants];
218
+ }
219
+ return [2 /*return*/];
220
+ });
221
+ });
222
+ };
223
+ /// Get limited list of currently top holders, as known by the provider.
224
+ Provider.prototype.holders = function () {
225
+ return __awaiter(this, arguments, void 0, function (minBalance, maxBalance) {
226
+ if (minBalance === void 0) { minBalance = 0; }
227
+ return __generator(this, function (_a) {
228
+ return [2 /*return*/, this
229
+ .callApiMethod(types_1.Methods.GetBalance2, {
230
+ all: __assign({ minBalance: minBalance }, maxBalance ? { maxBalance: maxBalance } : {})
231
+ }).then(function (balances) {
232
+ var reverseCompare = function (a, b) {
233
+ var a_tot = a.locked + a.unlocked + a.staked;
234
+ var b_tot = b.locked + b.unlocked + b.staked;
235
+ if (a_tot < b_tot)
236
+ return 1;
237
+ else if (a_tot > b_tot)
238
+ return -1;
239
+ else
240
+ return 0;
241
+ };
242
+ return Object.fromEntries(Object.entries(balances)
243
+ .sort(function (a, b) { return reverseCompare(a[1], b[1]); }));
244
+ })];
245
+ });
246
+ });
247
+ };
248
+ /// Get list of known peers
249
+ Provider.prototype.knownPeers = function () {
250
+ return __awaiter(this, void 0, void 0, function () {
251
+ return __generator(this, function (_a) {
252
+ return [2 /*return*/, this.callApiMethod(types_1.Methods.KnownPeers)];
253
+ });
254
+ });
255
+ };
256
+ /// Get all the pending transactions
257
+ Provider.prototype.mempool = function () {
258
+ return __awaiter(this, void 0, void 0, function () {
259
+ return __generator(this, function (_a) {
260
+ return [2 /*return*/, this.callApiMethod(types_1.Methods.GetMempool)];
261
+ });
262
+ });
263
+ };
264
+ /// Get priority and time-to-block estimations for different priority tiers.
265
+ Provider.prototype.priorities = function () {
266
+ return __awaiter(this, void 0, void 0, function () {
267
+ return __generator(this, function (_a) {
268
+ return [2 /*return*/, this.callApiMethod(types_1.Methods.Priority)];
269
+ });
270
+ });
271
+ };
272
+ /// Get information about protocol versions and which version is currently being enforced.
273
+ Provider.prototype.protocolInfo = function () {
274
+ return __awaiter(this, void 0, void 0, function () {
275
+ return __generator(this, function (_a) {
276
+ return [2 /*return*/, this.callApiMethod(types_1.Methods.Protocol)];
277
+ });
278
+ });
279
+ };
280
+ /// Get a full list of staking powers ordered by rank
281
+ Provider.prototype.powers = function (query) {
282
+ return __awaiter(this, void 0, void 0, function () {
283
+ return __generator(this, function (_a) {
284
+ return [2 /*return*/, this.callApiMethod(types_1.Methods.QueryStakingPowers, query)];
285
+ });
286
+ });
287
+ };
288
+ /// Get a full list of current stake entries Query the amount of nanowits staked by an address.
289
+ Provider.prototype.stakes = function (query) {
290
+ return __awaiter(this, void 0, void 0, function () {
291
+ return __generator(this, function (_a) {
292
+ return [2 /*return*/, this
293
+ .callApiMethod(types_1.Methods.QueryStakes, query)
294
+ .catch(function (err) {
295
+ var _a;
296
+ if (((_a = err === null || err === void 0 ? void 0 : err.error) === null || _a === void 0 ? void 0 : _a.message) && err.error.message.indexOf("not registered") > -1) {
297
+ return [];
298
+ }
299
+ else {
300
+ throw err;
301
+ }
302
+ })];
303
+ });
304
+ });
305
+ };
306
+ /// Get node status
307
+ Provider.prototype.syncStatus = function () {
308
+ return __awaiter(this, void 0, void 0, function () {
309
+ return __generator(this, function (_a) {
310
+ return [2 /*return*/, this.callApiMethod(types_1.Methods.SyncStatus)];
311
+ });
312
+ });
313
+ };
314
+ Provider.prototype.wips = function () {
315
+ return __awaiter(this, void 0, void 0, function () {
316
+ return __generator(this, function (_a) {
317
+ return [2 /*return*/, this.callApiMethod(types_1.Methods.SignalingInfo)];
318
+ });
319
+ });
320
+ };
321
+ /// ---------------------------------------------------------------------------------------------------------------
322
+ /// Get balance
323
+ Provider.prototype.getBalance = function (pkh) {
324
+ return __awaiter(this, void 0, void 0, function () {
325
+ return __generator(this, function (_a) {
326
+ return [2 /*return*/, this.callApiMethod(types_1.Methods.GetBalance2, { pkh: pkh })];
327
+ });
328
+ });
329
+ };
330
+ /**
331
+ * Get block info by hash
332
+ * @param {Hash} blockHash - Hash of the block that we are querying.
333
+ * @param {boolean} showTransactionHash - Whether to include an extra field containing array of transaction hashes.
334
+ */
335
+ Provider.prototype.getBlock = function (blockHash_1) {
336
+ return __awaiter(this, arguments, void 0, function (blockHash, showTransactionHash) {
337
+ if (showTransactionHash === void 0) { showTransactionHash = false; }
338
+ return __generator(this, function (_a) {
339
+ return [2 /*return*/, this.callApiMethod(types_1.Methods.GetBlock, [blockHash, showTransactionHash,])];
340
+ });
341
+ });
342
+ };
343
+ Provider.prototype.getDataRequest = function (drTxHash) {
344
+ return __awaiter(this, void 0, void 0, function () {
345
+ return __generator(this, function (_a) {
346
+ return [2 /*return*/, this.callApiMethod(types_1.Methods.DataRequestReport, [drTxHash,])];
347
+ });
348
+ });
349
+ };
350
+ /// Get the blocks that pertain to the superblock index
351
+ Provider.prototype.getSuperblock = function (epoch) {
352
+ return __awaiter(this, void 0, void 0, function () {
353
+ return __generator(this, function (_a) {
354
+ return [2 /*return*/, this.callApiMethod(types_1.Methods.GetSuperblock, { "block_epoch": epoch })];
355
+ });
356
+ });
357
+ };
358
+ Provider.prototype.getTransaction = function (txHash) {
359
+ return __awaiter(this, void 0, void 0, function () {
360
+ return __generator(this, function (_a) {
361
+ return [2 /*return*/, this.callApiMethod(types_1.Methods.GetTransaction, [txHash,])];
362
+ });
363
+ });
364
+ };
365
+ Provider.prototype.getTransactionReceipt = function (txHash) {
366
+ return __awaiter(this, void 0, void 0, function () {
367
+ return __generator(this, function (_a) {
368
+ // todo: fetch/update receipt from provider, if not cached
369
+ return [2 /*return*/, Provider.receipts[txHash]];
370
+ });
371
+ });
372
+ };
373
+ /// Get utxos
374
+ Provider.prototype.getUtxoInfo = function (pkh, smallFirst) {
375
+ if (smallFirst === void 0) { smallFirst = true; }
376
+ return this
377
+ .callApiMethod(types_1.Methods.GetUtxoInfo, [pkh,])
378
+ .then(function (result) {
379
+ var inversor = smallFirst ? 1 : -1;
380
+ return result.utxos.sort(function (a, b) {
381
+ if (a.value > b.value)
382
+ return inversor;
383
+ else if (a.value < b.value)
384
+ return -inversor;
385
+ else
386
+ return 0;
387
+ });
388
+ });
389
+ };
390
+ /// ---------------------------------------------------------------------------------------------------------------
391
+ Provider.prototype.sendRawTransaction = function (transaction) {
392
+ return __awaiter(this, void 0, void 0, function () {
393
+ return __generator(this, function (_a) {
394
+ return [2 /*return*/, this.callApiMethod(types_1.Methods.Inventory, { transaction: transaction })];
395
+ });
396
+ });
397
+ };
398
+ Provider.receipts = {};
399
+ return Provider;
400
+ }());
401
+ exports.Provider = Provider;
402
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3JwYy9wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw4Q0FBaUM7QUFFakMsNkNBQXNEO0FBS3RELGlDQU1nQjtBQTRCaEI7SUFBbUMsaUNBQUs7SUFJcEMsdUJBQVksTUFBYyxFQUFFLE1BQWEsRUFBRSxLQUFXO1FBQ2xELFlBQUEsTUFBSyxZQUFDLFVBQUcsTUFBTSxjQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLGdCQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQUcsQ0FBQyxTQUFBO1FBQ2pFLEtBQUssYUFBTCxLQUFLLDRCQUFMLEtBQUssQ0FBRSxLQUFLLENBQUE7UUFDbkIsS0FBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUE7UUFDbEIsS0FBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUE7UUFDcEIsS0FBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUE7O0lBQ3hCLENBQUM7SUFDTCxvQkFBQztBQUFELENBQUMsQUFYRCxDQUFtQyxLQUFLLEdBV3ZDO0FBWFksc0NBQWE7QUFhMUI7SUFlSSxrQkFBWSxHQUFXO1FBQ25CLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFBO1FBQ25CLElBQUksR0FBRyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3BCLElBQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUNoRCxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQUEsR0FBRztnQkFDTixJQUFBLEtB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LENBQUM7SUFFRCxtSEFBbUg7SUFDdEcscUNBQWtCLEdBQS9CLFVBQWdDLFdBQWdCOzs7Z0JBQzVDLHNCQUFPLElBQUksQ0FBQyxhQUFhLENBQVUsZUFBTyxDQUFDLFNBQVMsRUFBRSxFQUFFLFdBQVcsYUFBQSxFQUFFLENBQUMsRUFBQTs7O0tBQ3pFO0lBaE5hLGlCQUFRLEdBQXFDLEVBQUUsQ0FBQztJQWlObEUsZUFBQztDQUFBLEFBcE5ELElBb05DO0FBcE5ZLDRCQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdXRpbHMgZnJvbSBcIi4uL3V0aWxzXCJcblxuaW1wb3J0IHsgZGVmYXVsdCBhcyBheGlvcywgQXhpb3NIZWFkZXJzIH0gZnJvbSBcImF4aW9zXCJcblxuaW1wb3J0IHsgUHVibGljS2V5SGFzaFN0cmluZywgVHJhbnNhY3Rpb25SZWNlaXB0IH0gZnJvbSBcIi4uL2NyeXB0by90eXBlc1wiXG5pbXBvcnQgeyBFcG9jaCwgSGFzaCwgTmV0d29yaywgVXR4b01ldGFkYXRhIH0gZnJvbSBcIi4uL3R5cGVzXCJcblxuaW1wb3J0IHtcbiAgICBCYWxhbmNlLCBCYWxhbmNlMiwgQmxvY2ssIENvbnNlbnN1c0NvbnN0YW50cywgRGF0YVJlcXVlc3RSZXBvcnQsIFxuICAgIE1lbXBvb2wsIE1ldGhvZHMsIFBlZXJBZGRyLCBQcmlvcml0aWVzLCBQcm90b2NvbEluZm8sIFxuICAgIFF1ZXJ5U3Rha2VzLCBRdWVyeVN0YWtpbmdQb3dlcnMsXG4gICAgVHJhbnNhY3Rpb25SZXBvcnQsIFNpZ25hbGluZ0luZm8sIFN0YWtlRW50cnksIFN0YWtpbmdQb3dlciwgXG4gICAgU3VwZXJibG9ja1JlcG9ydCwgU3luY1N0YXR1cywgVXR4b0luZm8sIFxufSBmcm9tIFwiLi90eXBlc1wiXG5cbmV4cG9ydCBpbnRlcmZhY2UgSVByb3ZpZGVyIHtcbiAgICBuZXR3b3JrPzogTmV0d29yaztcbiAgICAvLyByZWNlaXB0czogUmVjb3JkPEhhc2gsIGFueT47XG4gICAgXG4gICAgYmxvY2tzKHNpbmNlOiBFcG9jaCwgbGltaXQ6IG51bWJlcik6IFByb21pc2U8QXJyYXk8W251bWJlciwgSGFzaC8qLCBQdWJsaWNLZXlIYXNoU3RyaW5nKi9dPj47XG4gICAgY29uc3RhbnRzKCk6IFByb21pc2U8Q29uc2Vuc3VzQ29uc3RhbnRzPjtcbiAgICBob2xkZXJzKGxpbWl0PzogbnVtYmVyKTogUHJvbWlzZTxSZWNvcmQ8UHVibGljS2V5SGFzaFN0cmluZywgQmFsYW5jZTI+PiBcbiAgICBtZW1wb29sKCk6IFByb21pc2U8TWVtcG9vbD47XG4gICAgcG93ZXJzKHBhcmFtcz86IFF1ZXJ5U3Rha2luZ1Bvd2Vycyk6IFByb21pc2U8QXJyYXk8U3Rha2luZ1Bvd2VyPj47XG4gICAgcHJpb3JpdGllcygpOiBQcm9taXNlPFByaW9yaXRpZXM+O1xuICAgIHByb3RvY29sSW5mbygpOiBQcm9taXNlPFByb3RvY29sSW5mbz47XG4gICAgc3Rha2VzKHBhcmFtczogUXVlcnlTdGFrZXMpOiBQcm9taXNlPEFycmF5PFN0YWtlRW50cnk+PjsgXG4gICAgc3luY1N0YXR1cygpOiBQcm9taXNlPGFueT47XG4gICAgd2lwcygpOiBQcm9taXNlPFNpZ25hbGluZ0luZm8+O1xuXG4gICAgZ2V0QmFsYW5jZShwa2g6IFB1YmxpY0tleUhhc2hTdHJpbmcpOiBQcm9taXNlPEJhbGFuY2UyPjtcbiAgICBnZXRCbG9jayhibG9ja0hhc2g6IEhhc2gsIHNob3dUcmFuc2FjdGlvbkhhc2hlcz86IGJvb2xlYW4pOiBQcm9taXNlPEJsb2NrPjtcbiAgICBnZXREYXRhUmVxdWVzdChkclR4SGFzaDogSGFzaCk6IFByb21pc2U8RGF0YVJlcXVlc3RSZXBvcnQ+O1xuICAgIGdldFRyYW5zYWN0aW9uKHR4SGFzaDogSGFzaCk6IFByb21pc2U8VHJhbnNhY3Rpb25SZXBvcnQ+O1xuICAgIGdldFRyYW5zYWN0aW9uUmVjZWlwdCh0eEhhc2g6IEhhc2gpOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVjZWlwdD47XG4gICAgZ2V0U3VwZXJibG9jayhlcG9jaDogRXBvY2gpOiBQcm9taXNlPFN1cGVyYmxvY2tSZXBvcnQ+O1xuICAgIGdldFV0eG9JbmZvKHBraDogUHVibGljS2V5SGFzaFN0cmluZywgc21hbGxlc3RGaXJzdD86IGJvb2xlYW4pOiBQcm9taXNlPEFycmF5PFV0eG9NZXRhZGF0YT4+O1xuICAgICAgICBcbiAgICBzZW5kUmF3VHJhbnNhY3Rpb24odHg6IGFueSk6IFByb21pc2U8Ym9vbGVhbj47XG59XG5cbmV4cG9ydCBjbGFzcyBQcm92aWRlckVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIHJlYWRvbmx5IGVycm9yPzogYW55O1xuICAgIHJlYWRvbmx5IG1ldGhvZDogc3RyaW5nO1xuICAgIHJlYWRvbmx5IHBhcmFtczogYW55W107XG4gICAgY29uc3RydWN0b3IobWV0aG9kOiBzdHJpbmcsIHBhcmFtczogYW55W10sIGVycm9yPzogYW55KSB7XG4gICAgICAgIHN1cGVyKGAke21ldGhvZH0oJHtKU09OLnN0cmluZ2lmeShwYXJhbXMpfSk6ICR7SlNPTi5zdHJpbmdpZnkoZXJyb3IpfSlgKVxuICAgICAgICBkZWxldGUgZXJyb3I/LnN0YWNrXG4gICAgICAgIHRoaXMuZXJyb3IgPSBlcnJvclxuICAgICAgICB0aGlzLm1ldGhvZCA9IG1ldGhvZFxuICAgICAgICB0aGlzLnBhcmFtcyA9IHBhcmFtc1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFByb3ZpZGVyIGltcGxlbWVudHMgSVByb3ZpZGVyIHtcbiAgICBcbiAgICBwdWJsaWMgbmV0d29yaz86IE5ldHdvcms7XG4gICAgcHVibGljIHN0YXRpYyByZWNlaXB0czogUmVjb3JkPEhhc2gsIFRyYW5zYWN0aW9uUmVjZWlwdD4gPSB7fTtcblxuICAgIHB1YmxpYyByZWFkb25seSBlbmRwb2ludHM6IHN0cmluZ1tdXG4gICAgXG4gICAgcHJvdGVjdGVkIF9jb25zdGFudHM/OiBDb25zZW5zdXNDb25zdGFudHNcbiAgICBwcm90ZWN0ZWQgX2hlYWRlcnM6IEF4aW9zSGVhZGVycztcbiAgICBcbiAgICBzdGF0aWMgYXN5bmMgaW5pdGlhbGl6ZWQodXJsPzogc3RyaW5nKTogUHJvbWlzZTxQcm92aWRlcj4ge1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IG5ldyBQcm92aWRlcih1cmwgfHwgXCJodHRwczovL3JwYy53aXRuZXQuaW9cIilcbiAgICAgICAgcmV0dXJuIHByb3ZpZGVyLmNvbnN0YW50cygpLnRoZW4oKCkgPT4gcHJvdmlkZXIpXG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IodXJsOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5lbmRwb2ludHMgPSBbXVxuICAgICAgICBpZiAodXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHVybHMgPSB1cmwucmVwbGFjZUFsbCgnLCcsICc7Jykuc3BsaXQoJzsnKVxuICAgICAgICAgICAgdXJscy5mb3JFYWNoKHVybCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgW3NjaGVtYSwgXSA9IHV0aWxzLnBhcnNlVVJMKHVybClcbiAgICAgICAgICAgICAgICBpZiAoIXNjaGVtYS5zdGFydHNXaXRoKFwiaHR0cDovL1wiKSAmJiAhc2NoZW1hLnN0YXJ0c1dpdGgoXCJodHRwczovL1wiKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihgV2l0bmV0LlByb3ZpZGVyOiB1bnN1cHBvcnRlZCBVUkwgc2NoZW1hICR7c2NoZW1hfWApXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHRoaXMuZW5kcG9pbnRzID0gdXJsc1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lbmRwb2ludHMucHVzaChwcm9jZXNzLmVudi5XSVRORVRfVE9PTEtJVF9QUk9WSURFUl9VUkwgfHwgXCJodHRwczovL3JwYy0wMS53aXRuZXQuaW9cIilcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9oZWFkZXJzID0gbmV3IEF4aW9zSGVhZGVycyh7IFxuICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgXG4gICAgICAgIH0pXG4gICAgfVxuICAgIFxuICAgIHByb3RlY3RlZCBuZXh0VVJMKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmVuZHBvaW50c1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiB0aGlzLmVuZHBvaW50cy5sZW5ndGgpXVxuICAgIH1cbiAgICBcbiAgICBwcm90ZWN0ZWQgYXN5bmMgY2FsbEFwaU1ldGhvZDxUPihtZXRob2Q6IHN0cmluZywgcGFyYW1zPzogQXJyYXk8YW55PiB8IGFueSApOiBQcm9taXNlPEVycm9yIHwgYW55PiB7XG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMubmV4dFVSTCgpXG4gICAgICAgIHJldHVybiBheGlvc1xuICAgICAgICAgICAgLnBvc3QoXG4gICAgICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAganNvbnJwYzogJzIuMCcsXG4gICAgICAgICAgICAgICAgICAgIGlkOiArIG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLl9oZWFkZXJzLFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgKS50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlPy5lcnJvciB8fCByZXNwb25zZT8uZGF0YT8uZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFByb3ZpZGVyRXJyb3IobWV0aG9kLCBwYXJhbXMsIHJlc3BvbnNlPy5lcnJvciB8fCByZXNwb25zZT8uZGF0YT8uZXJyb3IpO1xuXG4gICAgICAgICAgICAgICAgfSBlbHNlIHJldHVybiByZXNwb25zZT8uZGF0YT8ucmVzdWx0IGFzIFQ7XG4gICAgICAgICAgICB9KVxuICAgIH1cbiAgICBcbiAgICAvLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICBcbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGxpc3Qgb2YgYmxvY2sgaGFzaGVzIHdpdGhpbiBnaXZlbiByYW5nZSwgYXMga25vd24gYnkgdGhlIHByb3ZpZGVyLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzaW5jZSAtIEZpcnN0IGVwb2NoIGZvciB3aGljaCB0byByZXR1cm4gYmxvY2sgaGFzaGVzLiBJZiBuZWdhdGl2ZSwgcmV0dXJuIGJsb2NrIGhhc2hlcyBmcm9tIHRoZSBsYXN0IG4gZXBvY2hzLlxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gbGltaXQgLSBOdW1iZXIgb2YgYmxvY2sgaGFzaGVzIHRvIHJldHVybi4gSWYgbmVnYXRpdmUsIHJldHVybiB0aGUgbGFzdCBuIGJsb2NrIGhhc2hlcyBmcm9tIHRoaXMgZXBvY2ggcmFuZ2UuXG4gICAgICovXG4gICAgcHVibGljIGFzeW5jIGJsb2NrcyhzaW5jZTogbnVtYmVyID0gLTEsIGxpbWl0OiBudW1iZXIgPSAxLCk6IFByb21pc2U8QXJyYXk8W251bWJlciwgSGFzaF0+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxBcGlNZXRob2Q8W051bWJlciwgSGFzaF0+KE1ldGhvZHMuR2V0QmxvY2tDaGFpbiwgW3NpbmNlLCBsaW1pdCwgXSk7XG4gICAgfVxuICAgIFxuICAgIC8vLyBHZXQgY29uc2Vuc3VzIGNvbnN0YW50cyB1c2VkIGJ5IHRoZSBub2RlXG4gICAgcHVibGljIGFzeW5jIGNvbnN0YW50cygpOiBQcm9taXNlPENvbnNlbnN1c0NvbnN0YW50cz4ge1xuICAgICAgICBpZiAoIXRoaXMuX2NvbnN0YW50cykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXNcbiAgICAgICAgICAgICAgICAuY2FsbEFwaU1ldGhvZDxDb25zZW5zdXNDb25zdGFudHM+KE1ldGhvZHMuR2V0Q29uc2Vuc3VzQ29uc3RhbnRzKVxuICAgICAgICAgICAgICAgIC50aGVuKChjb25zdGFudHM6IENvbnNlbnN1c0NvbnN0YW50cykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5ldHdvcmsgPSBjb25zdGFudHMuYm9vdHN0cmFwcGluZ19jb21taXR0ZWVbMF0uc3RhcnRzV2l0aCgnd2l0JykgPyBcIm1haW5uZXRcIjogXCJ0ZXN0bmV0XCJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29uc3RhbnRzID0gY29uc3RhbnRzXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb25zdGFudHNcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnN0YW50c1xuICAgICAgICB9ICAgIFxuICAgIH1cblxuICAgIC8vLyBHZXQgbGltaXRlZCBsaXN0IG9mIGN1cnJlbnRseSB0b3AgaG9sZGVycywgYXMga25vd24gYnkgdGhlIHByb3ZpZGVyLlxuICAgIHB1YmxpYyBhc3luYyBob2xkZXJzKG1pbkJhbGFuY2UgPSAwLCBtYXhCYWxhbmNlPzogbnVtYmVyKTogUHJvbWlzZTxSZWNvcmQ8UHVibGljS2V5SGFzaFN0cmluZywgQmFsYW5jZTI+PiB7XG4gICAgICAgIHJldHVybiB0aGlzXG4gICAgICAgICAgICAuY2FsbEFwaU1ldGhvZDxSZWNvcmQ8UHVibGljS2V5SGFzaFN0cmluZywgQmFsYW5jZT4+KE1ldGhvZHMuR2V0QmFsYW5jZTIsIHtcbiAgICAgICAgICAgICAgICBhbGw6IHtcbiAgICAgICAgICAgICAgICAgICAgbWluQmFsYW5jZSxcbiAgICAgICAgICAgICAgICAgICAgLi4uIG1heEJhbGFuY2UgPyB7IG1heEJhbGFuY2UgfSA6IHt9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkudGhlbigoYmFsYW5jZXM6IFJlY29yZDxQdWJsaWNLZXlIYXNoU3RyaW5nLCBCYWxhbmNlMj4pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlQ29tcGFyZSA9IChhOiBCYWxhbmNlMiwgYjogQmFsYW5jZTIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYV90b3QgPSBhLmxvY2tlZCArIGEudW5sb2NrZWQgKyBhLnN0YWtlZFxuICAgICAgICAgICAgICAgICAgICBjb25zdCBiX3RvdCA9IGIubG9ja2VkICsgYi51bmxvY2tlZCArIGIuc3Rha2VkXG4gICAgICAgICAgICAgICAgICAgIGlmIChhX3RvdCA8IGJfdG90KSByZXR1cm4gMTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYV90b3QgPiBiX3RvdCkgcmV0dXJuIC0xO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIHJldHVybiAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyhiYWxhbmNlcylcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zb3J0KChhOiAoc3RyaW5nIHwgQmFsYW5jZTIpW10sIGI6IChzdHJpbmcgfCBCYWxhbmNlMilbXSkgPT4gcmV2ZXJzZUNvbXBhcmUoYVsxXSBhcyBCYWxhbmNlMiwgYlsxXSBhcyBCYWxhbmNlMikpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pXG4gICAgfVxuICAgIFxuICAgIC8vLyBHZXQgbGlzdCBvZiBrbm93biBwZWVyc1xuICAgIHB1YmxpYyBhc3luYyBrbm93blBlZXJzKCk6IFByb21pc2U8QXJyYXk8UGVlckFkZHI+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxBcGlNZXRob2Q8QXJyYXk8UGVlckFkZHI+PihNZXRob2RzLktub3duUGVlcnMpO1xuICAgIH1cbiAgICBcbiAgICAvLy8gR2V0IGFsbCB0aGUgcGVuZGluZyB0cmFuc2FjdGlvbnNcbiAgICBwdWJsaWMgYXN5bmMgbWVtcG9vbCgpOiBQcm9taXNlPE1lbXBvb2w+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbEFwaU1ldGhvZDxNZW1wb29sPihNZXRob2RzLkdldE1lbXBvb2wpO1xuICAgIH0gICAgXG4gICAgXG4gICAgLy8vIEdldCBwcmlvcml0eSBhbmQgdGltZS10by1ibG9jayBlc3RpbWF0aW9ucyBmb3IgZGlmZmVyZW50IHByaW9yaXR5IHRpZXJzLlxuICAgIHB1YmxpYyBhc3luYyBwcmlvcml0aWVzKCk6IFByb21pc2U8UHJpb3JpdGllcz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxsQXBpTWV0aG9kPFByaW9yaXRpZXM+KE1ldGhvZHMuUHJpb3JpdHkpXG4gICAgfVxuICAgIFxuICAgIC8vLyBHZXQgaW5mb3JtYXRpb24gYWJvdXQgcHJvdG9jb2wgdmVyc2lvbnMgYW5kIHdoaWNoIHZlcnNpb24gaXMgY3VycmVudGx5IGJlaW5nIGVuZm9yY2VkLlxuICAgIHB1YmxpYyBhc3luYyBwcm90b2NvbEluZm8oKTogUHJvbWlzZTxQcm90b2NvbEluZm8+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbEFwaU1ldGhvZDxQcm90b2NvbEluZm8+KE1ldGhvZHMuUHJvdG9jb2wpXG4gICAgfVxuICAgIFxuICAgIC8vLyBHZXQgYSBmdWxsIGxpc3Qgb2Ygc3Rha2luZyBwb3dlcnMgb3JkZXJlZCBieSByYW5rXG4gICAgcHVibGljIGFzeW5jIHBvd2VycyhxdWVyeT86IFF1ZXJ5U3Rha2luZ1Bvd2Vycyk6IFByb21pc2U8QXJyYXk8U3Rha2luZ1Bvd2VyPj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxsQXBpTWV0aG9kPEFycmF5PFN0YWtpbmdQb3dlcj4+KE1ldGhvZHMuUXVlcnlTdGFraW5nUG93ZXJzLCBxdWVyeSlcbiAgICB9XG4gICAgXG4gICAgLy8vIEdldCBhIGZ1bGwgbGlzdCBvZiBjdXJyZW50IHN0YWtlIGVudHJpZXMgIFF1ZXJ5IHRoZSBhbW91bnQgb2YgbmFub3dpdHMgc3Rha2VkIGJ5IGFuIGFkZHJlc3MuXG4gICAgcHVibGljIGFzeW5jIHN0YWtlcyhxdWVyeT86IFF1ZXJ5U3Rha2VzKTogUHJvbWlzZTxBcnJheTxTdGFrZUVudHJ5Pj4ge1xuICAgICAgICByZXR1cm4gdGhpc1xuICAgICAgICAgICAgLmNhbGxBcGlNZXRob2Q8QXJyYXk8U3Rha2VFbnRyeT4+KE1ldGhvZHMuUXVlcnlTdGFrZXMsIHF1ZXJ5KVxuICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVycj8uZXJyb3I/Lm1lc3NhZ2UgJiYgZXJyLmVycm9yLm1lc3NhZ2UuaW5kZXhPZihcIm5vdCByZWdpc3RlcmVkXCIpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICB9XG4gICAgXG4gICAgLy8vIEdldCBub2RlIHN0YXR1c1xuICAgIHB1YmxpYyBhc3luYyBzeW5jU3RhdHVzKCk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxBcGlNZXRob2Q8U3luY1N0YXR1cz4oTWV0aG9kcy5TeW5jU3RhdHVzKTtcbiAgICB9XG4gICAgXG4gICAgcHVibGljIGFzeW5jIHdpcHMoKTogUHJvbWlzZTxTaWduYWxpbmdJbmZvPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxBcGlNZXRob2Q8U2lnbmFsaW5nSW5mbz4oTWV0aG9kcy5TaWduYWxpbmdJbmZvKVxuICAgIH1cbiAgICBcbiAgICAvLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8vIEdldCBiYWxhbmNlXG4gICAgcHVibGljIGFzeW5jIGdldEJhbGFuY2UocGtoOiBQdWJsaWNLZXlIYXNoU3RyaW5nKTogUHJvbWlzZTxCYWxhbmNlMj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxsQXBpTWV0aG9kPEJhbGFuY2UyPihNZXRob2RzLkdldEJhbGFuY2UyLCB7IHBraCB9KTtcbiAgICB9XG4gICAgXG4gICAgLyoqXG4gICAgICogR2V0IGJsb2NrIGluZm8gYnkgaGFzaFxuICAgICAqIEBwYXJhbSB7SGFzaH0gYmxvY2tIYXNoIC0gSGFzaCBvZiB0aGUgYmxvY2sgdGhhdCB3ZSBhcmUgcXVlcnlpbmcuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBzaG93VHJhbnNhY3Rpb25IYXNoIC0gV2hldGhlciB0byBpbmNsdWRlIGFuIGV4dHJhIGZpZWxkIGNvbnRhaW5pbmcgYXJyYXkgb2YgdHJhbnNhY3Rpb24gaGFzaGVzLlxuICAgICAqL1xuICAgIHB1YmxpYyBhc3luYyBnZXRCbG9jayhcbiAgICAgICAgICAgIGJsb2NrSGFzaDogSGFzaCxcbiAgICAgICAgICAgIHNob3dUcmFuc2FjdGlvbkhhc2ggPSBmYWxzZSxcbiAgICAgICAgKTogUHJvbWlzZTxCbG9jaz5cbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxBcGlNZXRob2Q8QmxvY2s+KE1ldGhvZHMuR2V0QmxvY2ssIFtibG9ja0hhc2gsIHNob3dUcmFuc2FjdGlvbkhhc2gsIF0pXG4gICAgfVxuICAgIFxuICAgIHB1YmxpYyBhc3luYyBnZXREYXRhUmVxdWVzdChkclR4SGFzaDogSGFzaCk6IFByb21pc2U8RGF0YVJlcXVlc3RSZXBvcnQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbEFwaU1ldGhvZDxEYXRhUmVxdWVzdFJlcG9ydD4oTWV0aG9kcy5EYXRhUmVxdWVzdFJlcG9ydCwgW2RyVHhIYXNoLCBdKVxuICAgIH1cbiAgICBcbiAgICAvLy8gR2V0IHRoZSBibG9ja3MgdGhhdCBwZXJ0YWluIHRvIHRoZSBzdXBlcmJsb2NrIGluZGV4XG4gICAgcHVibGljIGFzeW5jIGdldFN1cGVyYmxvY2soZXBvY2g6IEVwb2NoKTogUHJvbWlzZTxTdXBlcmJsb2NrUmVwb3J0PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxBcGlNZXRob2Q8U3VwZXJibG9ja1JlcG9ydD4oTWV0aG9kcy5HZXRTdXBlcmJsb2NrLCB7IFwiYmxvY2tfZXBvY2hcIjogZXBvY2ggfSk7XG4gICAgfVxuICAgIFxuICAgIHB1YmxpYyBhc3luYyBnZXRUcmFuc2FjdGlvbih0eEhhc2g6IEhhc2gpOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVwb3J0PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxBcGlNZXRob2Q8VHJhbnNhY3Rpb25SZXBvcnQ+KE1ldGhvZHMuR2V0VHJhbnNhY3Rpb24sIFt0eEhhc2gsIF0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRUcmFuc2FjdGlvblJlY2VpcHQodHhIYXNoOiBIYXNoKTogUHJvbWlzZTxUcmFuc2FjdGlvblJlY2VpcHQ+IHtcbiAgICAgICAgLy8gdG9kbzogZmV0Y2gvdXBkYXRlIHJlY2VpcHQgZnJvbSBwcm92aWRlciwgaWYgbm90IGNhY2hlZFxuICAgICAgICByZXR1cm4gUHJvdmlkZXIucmVjZWlwdHNbdHhIYXNoXVxuICAgIH1cbiAgICBcbiAgICAvLy8gR2V0IHV0eG9zXG4gICAgcHVibGljIGdldFV0eG9JbmZvKHBraDogUHVibGljS2V5SGFzaFN0cmluZywgc21hbGxGaXJzdCA9IHRydWUpOiBQcm9taXNlPEFycmF5PFV0eG9NZXRhZGF0YT4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXNcbiAgICAgICAgICAgIC5jYWxsQXBpTWV0aG9kPFV0eG9JbmZvPihNZXRob2RzLkdldFV0eG9JbmZvLCBbcGtoLCBdKVxuICAgICAgICAgICAgLnRoZW4oKHJlc3VsdDogVXR4b0luZm8pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbnZlcnNvciA9IHNtYWxsRmlyc3QgPyAxIDogLTFcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnV0eG9zLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGEudmFsdWUgPiBiLnZhbHVlKSByZXR1cm4gaW52ZXJzb3I7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGEudmFsdWUgPCBiLnZhbHVlKSByZXR1cm4gLSBpbnZlcnNvcjtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSlcbiAgICB9XG4gICAgXG4gICAgLy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIHB1YmxpYyBhc3luYyBzZW5kUmF3VHJhbnNhY3Rpb24odHJhbnNhY3Rpb246IGFueSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxsQXBpTWV0aG9kPGJvb2xlYW4+KE1ldGhvZHMuSW52ZW50b3J5LCB7IHRyYW5zYWN0aW9uIH0pXG4gICAgfVxufSJdfQ==
@@ -0,0 +1,18 @@
1
+ import { IProvider, Provider } from "./provider";
2
+ import { DataRequestReport, PeerAddr, SupplyInfo } from "./types";
3
+ import { Hash } from "../types";
4
+ export interface IReporter extends IProvider {
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 Provider 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,SAAS,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAChD,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,SAAS;IACxC,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,QAAS,YAAW,SAAS;gBAC3C,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"}