@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,5 @@
1
+ export * from "./crypto";
2
+ export * from "./radon";
3
+ export * from "./rpc";
4
+ export * from "./types";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,cAAc,SAAS,CAAA;AACvB,cAAc,OAAO,CAAA;AACrB,cAAc,SAAS,CAAA"}
@@ -0,0 +1,21 @@
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./crypto"), exports);
18
+ __exportStar(require("./radon"), exports);
19
+ __exportStar(require("./rpc"), exports);
20
+ __exportStar(require("./types"), exports);
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQ0FBd0I7QUFDeEIsMENBQXVCO0FBQ3ZCLHdDQUFxQjtBQUNyQiwwQ0FBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9jcnlwdG9cIlxuZXhwb3J0ICogZnJvbSBcIi4vcmFkb25cIlxuZXhwb3J0ICogZnJvbSBcIi4vcnBjXCJcbmV4cG9ydCAqIGZyb20gXCIuL3R5cGVzXCJcbiJdfQ==
@@ -0,0 +1,55 @@
1
+ import { RadonReducer } from "./reducers";
2
+ import { RadonCCDR, RadonRetrieval } from "./retrievals";
3
+ export type Args = string[] | string[][];
4
+ export interface Specs {
5
+ retrieve: RadonRetrieval[];
6
+ aggregate: RadonReducer;
7
+ tally: RadonReducer;
8
+ }
9
+ declare class Class {
10
+ readonly retrieve: RadonRetrieval[];
11
+ readonly aggregate: RadonReducer;
12
+ readonly tally: RadonReducer;
13
+ constructor(specs: Specs);
14
+ opsCount(): number;
15
+ }
16
+ export declare class RadonRequest extends Class {
17
+ /**
18
+ * Decodes a RadonRequest artifact out from a Protobuf-serialized bytecode.
19
+ * @param bytecode Radon request bytecode.
20
+ * @returns RadonRequest object.
21
+ */
22
+ static fromBytecode(bytecode: any): RadonRequest;
23
+ static fromCCDR(ccdr: RadonCCDR, providers: string[], args: string[], tally?: RadonReducer): RadonRequest;
24
+ constructor(specs: {
25
+ retrieve: RadonRetrieval | RadonRetrieval[];
26
+ aggregate?: RadonReducer;
27
+ tally?: RadonReducer;
28
+ });
29
+ protected _encode(): Buffer;
30
+ execDryRun(): Promise<string>;
31
+ radHash(): string;
32
+ toBytecode(): string;
33
+ toJSON(humanize?: boolean): any;
34
+ toProtobuf(): any;
35
+ weight(): number;
36
+ }
37
+ export declare class RadonTemplate extends Class {
38
+ readonly argsCount: number;
39
+ readonly homogeneous: boolean;
40
+ readonly samples?: Record<string, Args>;
41
+ static fromCCDR(specs: {
42
+ ccdr: RadonCCDR;
43
+ providers: string[];
44
+ tally?: RadonReducer;
45
+ }, samples?: Record<string, Args>): RadonTemplate;
46
+ constructor(specs: {
47
+ retrieve: RadonRetrieval | RadonRetrieval[];
48
+ aggregate?: RadonReducer;
49
+ tally?: RadonReducer;
50
+ }, samples?: Record<string, Args>);
51
+ buildRequest(...args: string[][]): RadonRequest;
52
+ buildRequestModal(...args: string[]): RadonRequest;
53
+ }
54
+ export {};
55
+ //# sourceMappingURL=artifacts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifacts.d.ts","sourceRoot":"","sources":["../../../src/lib/radon/artifacts.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,YAAY,EAAQ,MAAM,YAAY,CAAA;AAC/C,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAKxD,MAAM,MAAM,IAAI,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,EAAE,CAAC;AAEzC,MAAM,WAAW,KAAK;IAClB,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,SAAS,EAAE,YAAY,CAAC;IACxB,KAAK,EAAE,YAAY,CAAC;CACvB;AAED,cAAM,KAAK;IAEP,SAAgB,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3C,SAAgB,SAAS,EAAE,YAAY,CAAC;IACxC,SAAgB,KAAK,EAAE,YAAY,CAAC;gBAExB,KAAK,EAAE,KAAK;IAgBjB,QAAQ,IAAI,MAAM;CAK5B;AAED,qBAAa,YAAa,SAAQ,KAAK;IAEnC;;;;OAIG;WACW,YAAY,CAAC,QAAQ,EAAE,GAAG;WAsC1B,QAAQ,CACd,IAAI,EAAE,SAAS,EACf,SAAS,EAAE,MAAM,EAAE,EACnB,IAAI,EAAE,MAAM,EAAE,EACd,KAAK,CAAC,EAAE,YAAY,GACrB,YAAY;gBAaP,KAAK,EAAE;QACf,QAAQ,EAAE,cAAc,GAAG,cAAc,EAAE,CAAC;QAC5C,SAAS,CAAC,EAAE,YAAY,CAAC;QACzB,KAAK,CAAC,EAAE,YAAY,CAAC;KACxB;IAaD,SAAS,CAAC,OAAO,IAAI,MAAM;IAWd,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAInC,OAAO,IAAI,MAAM;IAIjB,UAAU,IAAI,MAAM;IAIpB,MAAM,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,GAAG;IAS/B,UAAU,IAAI,GAAG;IASjB,MAAM,IAAI,MAAM;CAG1B;AAED,qBAAa,aAAc,SAAQ,KAAK;IACpC,SAAgB,SAAS,EAAE,MAAM,CAAC;IAClC,SAAgB,WAAW,EAAE,OAAO,CAAC;IACrC,SAAgB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;WAEjC,QAAQ,CACd,KAAK,EAAE;QACH,IAAI,EAAE,SAAS,CAAC;QAChB,SAAS,EAAE,MAAM,EAAE,CAAC;QACpB,KAAK,CAAC,EAAE,YAAY,CAAA;KACvB,EACD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,GAC/B,aAAa;gBA0BhB,KAAK,EAAE;QACH,QAAQ,EAAE,cAAc,GAAG,cAAc,EAAE,CAAC;QAC5C,SAAS,CAAC,EAAE,YAAY,CAAC;QACzB,KAAK,CAAC,EAAE,YAAY,CAAC;KACxB,EACD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;IAqC3B,YAAY,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,YAAY;IAkB/C,iBAAiB,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,YAAY;CAc5D"}
@@ -0,0 +1,347 @@
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 __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
29
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
30
+ return new (P || (P = Promise))(function (resolve, reject) {
31
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
32
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
33
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
34
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
35
+ });
36
+ };
37
+ var __generator = (this && this.__generator) || function (thisArg, body) {
38
+ 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);
39
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
40
+ function verb(n) { return function (v) { return step([n, v]); }; }
41
+ function step(op) {
42
+ if (f) throw new TypeError("Generator is already executing.");
43
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
44
+ 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;
45
+ if (y = 0, t) op = [op[0] & 2, t.value];
46
+ switch (op[0]) {
47
+ case 0: case 1: t = op; break;
48
+ case 4: _.label++; return { value: op[1], done: false };
49
+ case 5: _.label++; y = op[1]; op = [0]; continue;
50
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
51
+ default:
52
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
53
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
54
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
55
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
56
+ if (t[2]) _.ops.pop();
57
+ _.trys.pop(); continue;
58
+ }
59
+ op = body.call(thisArg, _);
60
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
61
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
62
+ }
63
+ };
64
+ var __read = (this && this.__read) || function (o, n) {
65
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
66
+ if (!m) return o;
67
+ var i = m.call(o), r, ar = [], e;
68
+ try {
69
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
70
+ }
71
+ catch (error) { e = { error: error }; }
72
+ finally {
73
+ try {
74
+ if (r && !r.done && (m = i["return"])) m.call(i);
75
+ }
76
+ finally { if (e) throw e.error; }
77
+ }
78
+ return ar;
79
+ };
80
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
81
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
82
+ if (ar || !(i in from)) {
83
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
84
+ ar[i] = from[i];
85
+ }
86
+ }
87
+ return to.concat(ar || Array.prototype.slice.call(from));
88
+ };
89
+ Object.defineProperty(exports, "__esModule", { value: true });
90
+ exports.RadonTemplate = exports.RadonRequest = void 0;
91
+ var cbor_1 = require("cbor");
92
+ var helpers_1 = require("../../bin/helpers");
93
+ var utils_1 = require("../crypto/utils");
94
+ var utils_2 = require("./utils");
95
+ var filters_1 = require("./filters");
96
+ var reducers_1 = require("./reducers");
97
+ var retrievals_1 = require("./retrievals");
98
+ var protoBuf = require("protobufjs").Root.fromJSON(require("../../../witnet/witnet.proto.json"));
99
+ var RADRequest = protoBuf.lookupType("RADRequest");
100
+ var Class = /** @class */ (function () {
101
+ function Class(specs) {
102
+ var _a;
103
+ if (!specs.retrieve || !Array.isArray(specs.retrieve) || specs.retrieve.length == 0) {
104
+ throw TypeError("RadonArtifact: cannot build if no retrievals are passed");
105
+ }
106
+ (_a = specs.retrieve) === null || _a === void 0 ? void 0 : _a.forEach(function (retrieval, index) {
107
+ if (retrieval === undefined) {
108
+ throw TypeError("RadonArtifact: retrieval #".concat(index, " is undefined"));
109
+ }
110
+ else if (!(retrieval instanceof retrievals_1.RadonRetrieval)) {
111
+ throw TypeError("RadonArtifact: retrieval #".concat(index, ": invalid type"));
112
+ }
113
+ });
114
+ this.retrieve = specs.retrieve;
115
+ this.aggregate = specs.aggregate;
116
+ this.tally = specs.tally;
117
+ }
118
+ Class.prototype.opsCount = function () {
119
+ var _a, _b, _c;
120
+ return (((_a = this.retrieve) === null || _a === void 0 ? void 0 : _a.map(function (retrieval) { return retrieval.opsCount(); }).reduce(function (sum, a) { return sum + a; })) || 0)
121
+ + ((_b = this.aggregate) === null || _b === void 0 ? void 0 : _b.opsCount())
122
+ + ((_c = this.tally) === null || _c === void 0 ? void 0 : _c.opsCount());
123
+ };
124
+ return Class;
125
+ }());
126
+ var RadonRequest = /** @class */ (function (_super) {
127
+ __extends(RadonRequest, _super);
128
+ function RadonRequest(specs) {
129
+ var _this = this;
130
+ var retrieve = Array.isArray(specs.retrieve) ? specs.retrieve : [specs.retrieve];
131
+ _this = _super.call(this, {
132
+ retrieve: retrieve,
133
+ aggregate: (specs === null || specs === void 0 ? void 0 : specs.aggregate) || (0, reducers_1.Mode)(),
134
+ tally: (specs === null || specs === void 0 ? void 0 : specs.tally) || (0, reducers_1.Mode)(),
135
+ }) || this;
136
+ var argsCount = retrieve.map(function (retrieval) { return retrieval.argsCount; }).reduce(function (prev, curr) { return prev + curr; });
137
+ if (argsCount > 0) {
138
+ throw TypeError("RadonRequest: parameterized retrievals were passed");
139
+ }
140
+ return _this;
141
+ }
142
+ /**
143
+ * Decodes a RadonRequest artifact out from a Protobuf-serialized bytecode.
144
+ * @param bytecode Radon request bytecode.
145
+ * @returns RadonRequest object.
146
+ */
147
+ RadonRequest.fromBytecode = function (bytecode) {
148
+ var _a, _b;
149
+ var buffer;
150
+ if ((0, helpers_1.isHexString)(bytecode)) {
151
+ buffer = (0, helpers_1.fromHexString)(bytecode);
152
+ }
153
+ else if (bytecode instanceof Uint8Array) {
154
+ buffer = Buffer.from(bytecode);
155
+ }
156
+ else if (bytecode instanceof Buffer) {
157
+ buffer = bytecode;
158
+ }
159
+ else {
160
+ throw new TypeError("RadonRequest: unsupported bytecode format: ".concat(bytecode));
161
+ }
162
+ var obj = RADRequest.decode(buffer);
163
+ var retrieve = obj.retrieve.map(function (retrieval) {
164
+ var specs = {};
165
+ if (retrieval === null || retrieval === void 0 ? void 0 : retrieval.url) {
166
+ specs.url = retrieval.url;
167
+ }
168
+ if (retrieval === null || retrieval === void 0 ? void 0 : retrieval.headers) {
169
+ specs.headers = Object.fromEntries(retrieval.headers.map(function (stringPair) { return [
170
+ stringPair.left,
171
+ stringPair.right
172
+ ]; }));
173
+ }
174
+ if ((retrieval === null || retrieval === void 0 ? void 0 : retrieval.body) && retrieval.body.length > 0) {
175
+ specs.body = (0, helpers_1.utf8ArrayToStr)(Object.values(retrieval.body));
176
+ }
177
+ if (retrieval === null || retrieval === void 0 ? void 0 : retrieval.script)
178
+ specs.script = (0, utils_2.parseRadonScript)((0, helpers_1.toHexString)(retrieval.script));
179
+ return new retrievals_1.RadonRetrieval(retrieval.kind, specs);
180
+ });
181
+ var decodeFilter = function (f) {
182
+ if ((f === null || f === void 0 ? void 0 : f.args) && f.args.length > 0)
183
+ return new filters_1.RadonFilter(f.op, (0, cbor_1.decode)(f.args));
184
+ else
185
+ return new filters_1.RadonFilter(f.op);
186
+ };
187
+ return new RadonRequest({
188
+ retrieve: retrieve,
189
+ aggregate: new reducers_1.RadonReducer(obj.aggregate.reducer, (_a = obj.aggregate.filters) === null || _a === void 0 ? void 0 : _a.map(decodeFilter)),
190
+ tally: new reducers_1.RadonReducer(obj.tally.reducer, (_b = obj.tally.filters) === null || _b === void 0 ? void 0 : _b.map(decodeFilter))
191
+ });
192
+ };
193
+ RadonRequest.fromCCDR = function (ccdr, providers, args, tally) {
194
+ if (!(ccdr instanceof retrievals_1.RadonCCDR)) {
195
+ throw new TypeError("RadonRequest: cannot create from ".concat((ccdr === null || ccdr === void 0 ? void 0 : ccdr.constructor) ? "instance of ".concat(ccdr.constructor.name, ".") : "object: ".concat(ccdr)));
196
+ }
197
+ var template = RadonTemplate.fromCCDR({ ccdr: ccdr, providers: providers, tally: tally });
198
+ return template.buildRequestModal.apply(template, __spreadArray([], __read(args), false));
199
+ };
200
+ RadonRequest.prototype._encode = function () {
201
+ var payload = this.toProtobuf();
202
+ var errMsg = RADRequest.verify(payload);
203
+ if (errMsg) {
204
+ throw Error(errMsg);
205
+ }
206
+ else {
207
+ var message = RADRequest.fromObject(payload);
208
+ return RADRequest.encode(message).finish();
209
+ }
210
+ };
211
+ RadonRequest.prototype.execDryRun = function () {
212
+ return __awaiter(this, void 0, void 0, function () {
213
+ return __generator(this, function (_a) {
214
+ switch (_a.label) {
215
+ case 0: return [4 /*yield*/, (0, helpers_1.execRadonBytecode)(this.toBytecode(), '--json')];
216
+ case 1: return [2 /*return*/, (_a.sent()).trim()];
217
+ }
218
+ });
219
+ });
220
+ };
221
+ RadonRequest.prototype.radHash = function () {
222
+ return (0, helpers_1.toHexString)((0, utils_1.sha256)(this._encode())); //.slice(0, 40)
223
+ };
224
+ RadonRequest.prototype.toBytecode = function () {
225
+ return (0, helpers_1.toHexString)(this._encode()); //encodeRADRequest(this.toProtobuf()), true)
226
+ };
227
+ RadonRequest.prototype.toJSON = function (humanize) {
228
+ return __assign({ retrieve: this.retrieve.map(function (retrieval) { return retrieval.toJSON(humanize); }), aggregate: this.aggregate.toJSON(humanize), tally: this.tally.toJSON(humanize) }, (humanize ? {} : { time_lock: 0 }));
229
+ };
230
+ RadonRequest.prototype.toProtobuf = function () {
231
+ return {
232
+ //timeLock: 0,
233
+ retrieve: this.retrieve.map(function (retrieval) { return retrieval.toProtobuf(); }),
234
+ aggregate: this.aggregate.toProtobuf(),
235
+ tally: this.tally.toProtobuf(),
236
+ };
237
+ };
238
+ RadonRequest.prototype.weight = function () {
239
+ return this.toBytecode().slice(2).length / 2;
240
+ };
241
+ return RadonRequest;
242
+ }(Class));
243
+ exports.RadonRequest = RadonRequest;
244
+ var RadonTemplate = /** @class */ (function (_super) {
245
+ __extends(RadonTemplate, _super);
246
+ function RadonTemplate(specs, samples) {
247
+ var _this = this;
248
+ var retrieve = Array.isArray(specs.retrieve) ? specs.retrieve : [specs.retrieve];
249
+ _this = _super.call(this, {
250
+ retrieve: retrieve,
251
+ aggregate: (specs === null || specs === void 0 ? void 0 : specs.aggregate) || (0, reducers_1.Mode)(),
252
+ tally: (specs === null || specs === void 0 ? void 0 : specs.tally) || (0, reducers_1.Mode)(),
253
+ }) || this;
254
+ _this.argsCount = retrieve.map(function (retrieval) { return retrieval === null || retrieval === void 0 ? void 0 : retrieval.argsCount; }).reduce(function (prev, curr) { return Math.max(prev, curr); }, 0);
255
+ if (_this.argsCount == 0) {
256
+ throw TypeError("RadonTemplate: no parameterized retrievals were passed");
257
+ }
258
+ _this.homogeneous = !retrieve.find(function (retrieval) { return retrieval.argsCount !== _this.argsCount; });
259
+ if (samples) {
260
+ Object.keys(samples).forEach(function (sample) {
261
+ var sampleArgs = Object(samples)[sample];
262
+ if (typeof sampleArgs === "string") {
263
+ sampleArgs = [sampleArgs];
264
+ }
265
+ if (sampleArgs.length > 0) {
266
+ if (!Array.isArray(sampleArgs[0])) {
267
+ Object(samples)[sample] = Array(retrieve.length).fill(sampleArgs);
268
+ sampleArgs = Object(samples)[sample];
269
+ }
270
+ else if ((sampleArgs === null || sampleArgs === void 0 ? void 0 : sampleArgs.length) != retrieve.length) {
271
+ throw TypeError("RadonTemplate: arguments mismatch in sample \"".concat(sample, "\": ").concat(sampleArgs === null || sampleArgs === void 0 ? void 0 : sampleArgs.length, " samples given vs. ").concat(retrieve.length, " expected"));
272
+ }
273
+ sampleArgs === null || sampleArgs === void 0 ? void 0 : sampleArgs.forEach(function (subargs, index) {
274
+ if (subargs.length < retrieve[index].argsCount) {
275
+ throw TypeError("\u001B[1;33mRadonRequestTemplate: arguments mismatch in test \u001B[1;31m'".concat(sample, "'\u001B[1;33m: \u001B[1;37mRetrieval #").concat(index, "\u001B[1;33m: ").concat(subargs === null || subargs === void 0 ? void 0 : subargs.length, " parameters given vs. ").concat(retrieve[index].argsCount, " expected\u001B[0m"));
276
+ }
277
+ });
278
+ }
279
+ });
280
+ _this.samples = samples;
281
+ }
282
+ return _this;
283
+ }
284
+ RadonTemplate.fromCCDR = function (specs, samples) {
285
+ var _a;
286
+ var _b;
287
+ if (!(specs.ccdr instanceof retrievals_1.RadonCCDR)) {
288
+ throw new TypeError("RadonRequest: cannot create from ".concat(((_b = specs.ccdr) === null || _b === void 0 ? void 0 : _b.constructor) ? "instance of ".concat(specs.ccdr.constructor.name, ".") : "from object: ".concat(specs.ccdr)));
289
+ }
290
+ if (specs.ccdr.argsCount < 2) {
291
+ throw TypeError("RadonTemplate.fromCCDR: requires parameterized CCDR.");
292
+ }
293
+ specs.providers.forEach(function (provider) {
294
+ var _a = __read((0, helpers_1.parseURL)(provider), 1), schema = _a[0];
295
+ if (!schema.startsWith("http://") && !schema.startsWith("https://")) {
296
+ throw TypeError("RadonTemplate.fromCCDR: invalid provider: ".concat(provider));
297
+ }
298
+ });
299
+ return new RadonTemplate({
300
+ retrieve: (_a = specs.ccdr).spawnRetrievals.apply(_a, __spreadArray([], __read(specs.providers), false)),
301
+ aggregate: (0, reducers_1.Mode)(),
302
+ tally: specs.tally || (0, reducers_1.Mode)(),
303
+ }, samples);
304
+ };
305
+ RadonTemplate.prototype.buildRequest = function () {
306
+ var args = [];
307
+ for (var _i = 0; _i < arguments.length; _i++) {
308
+ args[_i] = arguments[_i];
309
+ }
310
+ var retrieve = [];
311
+ if (args.length !== this.retrieve.length) {
312
+ throw new TypeError("RadonRequest: mismatching args vectors (".concat(args.length, " != ").concat(this.retrieve.length, "): [").concat(args, "]}"));
313
+ }
314
+ this.retrieve.forEach(function (retrieval, index) {
315
+ if (retrieval.argsCount !== args[index].length) {
316
+ throw new TypeError("RadonRequest: mismatching args passed to retrieval #".concat(index + 1, " (").concat(args[index].length, " != ").concat(retrieval.argsCount, "): [").concat(args[index], "]"));
317
+ }
318
+ retrieve.push(retrieval.foldArgs.apply(retrieval, __spreadArray([], __read(args[index]), false)));
319
+ });
320
+ return new RadonRequest({
321
+ retrieve: retrieve,
322
+ aggregate: this.aggregate,
323
+ tally: this.tally,
324
+ });
325
+ };
326
+ RadonTemplate.prototype.buildRequestModal = function () {
327
+ var args = [];
328
+ for (var _i = 0; _i < arguments.length; _i++) {
329
+ args[_i] = arguments[_i];
330
+ }
331
+ var retrieve = [];
332
+ this.retrieve.forEach(function (retrieval, index) {
333
+ if (retrieval.argsCount !== args.length) {
334
+ throw new TypeError("RadonRequest: mismatching args passed to retrieval #".concat(index + 1, " (").concat(args.length, " != ").concat(retrieval.argsCount, "): [").concat(args, "]"));
335
+ }
336
+ retrieve.push(retrieval.foldArgs.apply(retrieval, __spreadArray([], __read(args), false)));
337
+ });
338
+ return new RadonRequest({
339
+ retrieve: retrieve,
340
+ aggregate: this.aggregate,
341
+ tally: this.tally,
342
+ });
343
+ };
344
+ return RadonTemplate;
345
+ }(Class));
346
+ exports.RadonTemplate = RadonTemplate;
347
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJ0aWZhY3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9yYWRvbi9hcnRpZmFjdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNkJBQTJDO0FBRTNDLDZDQU8wQjtBQUUxQix5Q0FBd0M7QUFDeEMsaUNBQTBDO0FBRTFDLHFDQUF1QztBQUN2Qyx1Q0FBK0M7QUFDL0MsMkNBQXdEO0FBRXhELElBQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDLENBQUE7QUFDbEcsSUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQTtBQVVwRDtJQU1JLGVBQVksS0FBWTs7UUFDcEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNsRixNQUFNLFNBQVMsQ0FBQyx5REFBeUQsQ0FBQyxDQUFBO1FBQzlFLENBQUM7UUFDRCxNQUFBLEtBQUssQ0FBQyxRQUFRLDBDQUFFLE9BQU8sQ0FBQyxVQUFDLFNBQVMsRUFBRSxLQUFLO1lBQ3JDLElBQUksU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUMxQixNQUFNLFNBQVMsQ0FBQyxvQ0FBNkIsS0FBSyxrQkFBZSxDQUFDLENBQUE7WUFDdEUsQ0FBQztpQkFBTSxJQUFJLENBQUMsQ0FBQyxTQUFTLFlBQVksMkJBQWMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hELE1BQU0sU0FBUyxDQUFDLG9DQUE2QixL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QUFTLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUN0QyxNQUFNLElBQUksU0FBUyxDQUFDLDhEQUF1RCxLQUFLLEdBQUcsQ0FBQyxlQUFLLElBQUksQ0FBQyxNQUFNLGlCQUFPLFNBQVMsQ0FBQyxTQUFTLGlCQUFPLElBQUksTUFBRyxDQUFDLENBQUE7WUFDakosQ0FBQztZQUNELFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsT0FBbEIsU0FBUywyQkFBYSxJQUFJLFdBQUUsQ0FBQTtRQUM5QyxDQUFDLENBQUMsQ0FBQTtRQUNGLE9BQU8sSUFBSSxZQUFZLENBQUM7WUFDcEIsUUFBUSxVQUFBO1lBQ1IsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3pCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztTQUNwQixDQUFDLENBQUE7SUFDTixDQUFDO0lBQ0wsb0JBQUM7QUFBRCxDQUFDLEFBaEhELENBQW1DLEtBQUssR0FnSHZDO0FBaEhZLHNDQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVjb2RlIGFzIGNib3JEZWNvZGUgfSBmcm9tICdjYm9yJ1xuXG5pbXBvcnQge1xuICAgIGV4ZWNSYWRvbkJ5dGVjb2RlLFxuICAgIGZyb21IZXhTdHJpbmcsXG4gICAgaXNIZXhTdHJpbmcsXG4gICAgcGFyc2VVUkwsXG4gICAgdG9IZXhTdHJpbmcsXG4gICAgdXRmOEFycmF5VG9TdHIsXG59IGZyb20gXCIuLi8uLi9iaW4vaGVscGVyc1wiXG5cbmltcG9ydCB7IHNoYTI1NiB9IGZyb20gXCIuLi9jcnlwdG8vdXRpbHNcIlxuaW1wb3J0IHsgcGFyc2VSYWRvblNjcmlwdCB9IGZyb20gXCIuL3V0aWxzXCJcblxuaW1wb3J0IHsgUmFkb25GaWx0ZXIgfSBmcm9tIFwiLi9maWx0ZXJzXCJcbmltcG9ydCB7IFJhZG9uUmVkdWNlciwgTW9kZSB9IGZyb20gXCIuL3JlZHVjZXJzXCJcbmltcG9ydCB7IFJhZG9uQ0NEUiwgUmFkb25SZXRyaWV2YWwgfSBmcm9tIFwiLi9yZXRyaWV2YWxzXCJcblxuY29uc3QgcHJvdG9CdWYgPSByZXF1aXJlKFwicHJvdG9idWZqc1wiKS5Sb290LmZyb21KU09OKHJlcXVpcmUoXCIuLi8uLi8uLi93aXRuZXQvd2l0bmV0LnByb3RvLmpzb25cIikpXG5jb25zdCBSQURSZXF1ZXN0ID0gcHJvdG9CdWYubG9va3VwVHlwZShcIlJBRFJlcXVlc3RcIilcblxuZXhwb3J0IHR5cGUgQXJncyA9IHN0cmluZ1tdIHwgc3RyaW5nW11bXTtcblxuZXhwb3J0IGludGVyZmFjZSBTcGVjcyB7XG4gICAgcmV0cmlldmU6IFJhZG9uUmV0cmlldmFsW107XG4gICAgYWdncmVnYXRlOiBSYWRvblJlZHVjZXI7XG4gICAgdGFsbHk6IFJhZG9uUmVkdWNlcjtcbn1cblxuY2xhc3MgQ2xhc3MgeyAgICBcbiAgICBcbiAgICBwdWJsaWMgcmVhZG9ubHkgcmV0cmlldmU6IFJhZG9uUmV0cmlldmFsW107XG4gICAgcHVibGljIHJlYWRvbmx5IGFnZ3JlZ2F0ZTogUmFkb25SZWR1Y2VyO1xuICAgIHB1YmxpYyByZWFkb25seSB0YWxseTogUmFkb25SZWR1Y2VyO1xuICAgIFxuICAgIGNvbnN0cnVjdG9yKHNwZWNzOiBTcGVjcykge1xuICAgICAgICBpZiAoIXNwZWNzLnJldHJpZXZlIHx8ICFBcnJheS5pc0FycmF5KHNwZWNzLnJldHJpZXZlKSB8fCBzcGVjcy5yZXRyaWV2ZS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiUmFkb25BcnRpZmFjdDogY2Fubm90IGJ1aWxkIGlmIG5vIHJldHJpZXZhbHMgYXJlIHBhc3NlZFwiKVxuICAgICAgICB9XG4gICAgICAgIHNwZWNzLnJldHJpZXZlPy5mb3JFYWNoKChyZXRyaWV2YWwsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAocmV0cmlldmFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoYFJhZG9uQXJ0aWZhY3Q6IHJldHJpZXZhbCAjJHtpbmRleH0gaXMgdW5kZWZpbmVkYClcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIShyZXRyaWV2YWwgaW5zdGFuY2VvZiBSYWRvblJldHJpZXZhbCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoYFJhZG9uQXJ0aWZhY3Q6IHJldHJpZXZhbCAjJHtpbmRleH06IGludmFsaWQgdHlwZWApXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIHRoaXMucmV0cmlldmUgPSBzcGVjcy5yZXRyaWV2ZTtcbiAgICAgICAgdGhpcy5hZ2dyZWdhdGUgPSBzcGVjcy5hZ2dyZWdhdGU7XG4gICAgICAgIHRoaXMudGFsbHkgPSBzcGVjcy50YWxseTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3BzQ291bnQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLnJldHJpZXZlPy5tYXAocmV0cmlldmFsID0+IHJldHJpZXZhbC5vcHNDb3VudCgpKS5yZWR1Y2UoKHN1bSwgYSkgPT4gc3VtICsgYSkgfHwgMClcbiAgICAgICAgICAgICsgdGhpcy5hZ2dyZWdhdGU/Lm9wc0NvdW50KClcbiAgICAgICAgICAgICsgdGhpcy50YWxseT8ub3BzQ291bnQoKVxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJhZG9uUmVxdWVzdCBleHRlbmRzIENsYXNzIHsgICBcbiAgIFxuICAgIC8qKlxuICAgICAqIERlY29kZXMgYSBSYWRvblJlcXVlc3QgYXJ0aWZhY3Qgb3V0IGZyb20gYSBQcm90b2J1Zi1zZXJpYWxpemVkIGJ5dGVjb2RlLlxuICAgICAqIEBwYXJhbSBieXRlY29kZSBSYWRvbiByZXF1ZXN0IGJ5dGVjb2RlLlxuICAgICAqIEByZXR1cm5zIFJhZG9uUmVxdWVzdCBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBmcm9tQnl0ZWNvZGUoYnl0ZWNvZGU6IGFueSkge1xuICAgICAgICBsZXQgYnVmZmVyXG4gICAgICAgIGlmIChpc0hleFN0cmluZyhieXRlY29kZSkpIHtcbiAgICAgICAgICAgIGJ1ZmZlciA9IGZyb21IZXhTdHJpbmcoYnl0ZWNvZGUpXG4gICAgICAgIH0gZWxzZSBpZiAoYnl0ZWNvZGUgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG4gICAgICAgICAgICBidWZmZXIgPSBCdWZmZXIuZnJvbShieXRlY29kZSlcbiAgICAgICAgfSBlbHNlIGlmIChieXRlY29kZSBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuICAgICAgICAgICAgYnVmZmVyID0gYnl0ZWNvZGVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFJhZG9uUmVxdWVzdDogdW5zdXBwb3J0ZWQgYnl0ZWNvZGUgZm9ybWF0OiAke2J5dGVjb2RlfWApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb2JqOiBhbnkgPSBSQURSZXF1ZXN0LmRlY29kZShidWZmZXIpXG4gICAgICAgIGNvbnN0IHJldHJpZXZlID0gb2JqLnJldHJpZXZlLm1hcCgocmV0cmlldmFsOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNwZWNzOiBhbnkgPSB7fVxuICAgICAgICAgICAgaWYgKHJldHJpZXZhbD8udXJsKSB7IHNwZWNzLnVybCA9IHJldHJpZXZhbC51cmwgfVxuICAgICAgICAgICAgaWYgKHJldHJpZXZhbD8uaGVhZGVycykge1xuICAgICAgICAgICAgICAgIHNwZWNzLmhlYWRlcnMgPSBPYmplY3QuZnJvbUVudHJpZXMocmV0cmlldmFsLmhlYWRlcnMubWFwKChzdHJpbmdQYWlyOiBhbnkpID0+IFtcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nUGFpci5sZWZ0LFxuICAgICAgICAgICAgICAgICAgICBzdHJpbmdQYWlyLnJpZ2h0XG4gICAgICAgICAgICAgICAgXSkpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmV0cmlldmFsPy5ib2R5ICYmIHJldHJpZXZhbC5ib2R5Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBzcGVjcy5ib2R5ID0gdXRmOEFycmF5VG9TdHIoT2JqZWN0LnZhbHVlcyhyZXRyaWV2YWwuYm9keSkpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmV0cmlldmFsPy5zY3JpcHQpIHNwZWNzLnNjcmlwdCA9IHBhcnNlUmFkb25TY3JpcHQodG9IZXhTdHJpbmcocmV0cmlldmFsLnNjcmlwdCkpXG4gICAgICAgICAgICByZXR1cm4gbmV3IFJhZG9uUmV0cmlldmFsKHJldHJpZXZhbC5raW5kLCBzcGVjcylcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgZGVjb2RlRmlsdGVyID0gKGY6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKGY/LmFyZ3MgJiYgZi5hcmdzLmxlbmd0aCA+IDApIHJldHVybiBuZXcgUmFkb25GaWx0ZXIoZi5vcCwgY2JvckRlY29kZShmLmFyZ3MpKVxuICAgICAgICAgICAgZWxzZSByZXR1cm4gbmV3IFJhZG9uRmlsdGVyKGYub3ApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgUmFkb25SZXF1ZXN0KHtcbiAgICAgICAgICAgIHJldHJpZXZlLFxuICAgICAgICAgICAgYWdncmVnYXRlOiBuZXcgUmFkb25SZWR1Y2VyKG9iai5hZ2dyZWdhdGUucmVkdWNlciwgb2JqLmFnZ3JlZ2F0ZS5maWx0ZXJzPy5tYXAoZGVjb2RlRmlsdGVyKSksXG4gICAgICAgICAgICB0YWxseTogbmV3IFJhZG9uUmVkdWNlcihvYmoudGFsbHkucmVkdWNlciwgb2JqLnRhbGx5LmZpbHRlcnM/Lm1hcChkZWNvZGVGaWx0ZXIpKVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZnJvbUNDRFIoXG4gICAgICAgICAgICBjY2RyOiBSYWRvbkNDRFIsIFxuICAgICAgICAgICAgcHJvdmlkZXJzOiBzdHJpbmdbXSwgXG4gICAgICAgICAgICBhcmdzOiBzdHJpbmdbXSxcbiAgICAgICAgICAgIHRhbGx5PzogUmFkb25SZWR1Y2VyXG4gICAgICAgICk6IFJhZG9uUmVxdWVzdFxuICAgIHtcbiAgICAgICAgaWYgKCEoY2NkciBpbnN0YW5jZW9mIFJhZG9uQ0NEUikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICAgICAgYFJhZG9uUmVxdWVzdDogY2Fubm90IGNyZWF0ZSBmcm9tICR7XG4gICAgICAgICAgICAgICAgICAgIChjY2RyIGFzIGFueSk/LmNvbnN0cnVjdG9yID8gYGluc3RhbmNlIG9mICR7KGNjZHIgYXMgYW55KS5jb25zdHJ1Y3Rvci5uYW1lfS5gIDogYG9iamVjdDogJHtjY2RyfWBcbiAgICAgICAgICAgICAgICB9YFxuICAgICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRlbXBsYXRlID0gUmFkb25UZW1wbGF0ZS5mcm9tQ0NEUih7IGNjZHIsIHByb3ZpZGVycywgdGFsbHkgfSlcbiAgICAgICAgcmV0dXJuIHRlbXBsYXRlLmJ1aWxkUmVxdWVzdE1vZGFsKC4uLmFyZ3MpXG4gICAgfVxuICAgIFxuICAgIGNvbnN0cnVjdG9yKHNwZWNzOiB7IFxuICAgICAgICByZXRyaWV2ZTogUmFkb25SZXRyaWV2YWwgfCBSYWRvblJldHJpZXZhbFtdLCBcbiAgICAgICAgYWdncmVnYXRlPzogUmFkb25SZWR1Y2VyLCBcbiAgICAgICAgdGFsbHk/OiBSYWRvblJlZHVjZXIsXG4gICAgfSkge1xuICAgICAgICBjb25zdCByZXRyaWV2ZSA9IEFycmF5LmlzQXJyYXkoc3BlY3MucmV0cmlldmUpID8gc3BlY3MucmV0cmlldmUgYXMgUmFkb25SZXRyaWV2YWxbXSA6IFsgc3BlY3MucmV0cmlldmUgXVxuICAgICAgICBzdXBlcih7XG4gICAgICAgICAgICByZXRyaWV2ZSxcbiAgICAgICAgICAgIGFnZ3JlZ2F0ZTogc3BlY3M/LmFnZ3JlZ2F0ZSB8fCBNb2RlKCksXG4gICAgICAgICAgICB0YWxseTogc3BlY3M/LnRhbGx5IHx8IE1vZGUoKSxcbiAgICAgICAgfSlcbiAgICAgICAgbGV0IGFyZ3NDb3VudCA9IHJldHJpZXZlLm1hcChyZXRyaWV2YWwgPT4gcmV0cmlldmFsLmFyZ3NDb3VudCkucmVkdWNlKChwcmV2LCBjdXJyKSA9PiBwcmV2ICsgY3VycilcbiAgICAgICAgaWYgKGFyZ3NDb3VudCA+IDApIHtcbiAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIlJhZG9uUmVxdWVzdDogcGFyYW1ldGVyaXplZCByZXRyaWV2YWxzIHdlcmUgcGFzc2VkXCIpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX2VuY29kZSgpOiBCdWZmZXIge1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gdGhpcy50b1Byb3RvYnVmKClcbiAgICAgICAgY29uc3QgZXJyTXNnID0gUkFEUmVxdWVzdC52ZXJpZnkocGF5bG9hZClcbiAgICAgICAgaWYgKGVyck1zZykge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoZXJyTXNnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBSQURSZXF1ZXN0LmZyb21PYmplY3QocGF5bG9hZCk7XG4gICAgICAgICAgICByZXR1cm4gUkFEUmVxdWVzdC5lbmNvZGUobWVzc2FnZSkuZmluaXNoKClcbiAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBwdWJsaWMgYXN5bmMgZXhlY0RyeVJ1bigpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gKGF3YWl0IGV4ZWNSYWRvbkJ5dGVjb2RlKHRoaXMudG9CeXRlY29kZSgpLCAnLS1qc29uJykpLnRyaW0oKVxuICAgIH1cbiAgICBcbiAgICBwdWJsaWMgcmFkSGFzaCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdG9IZXhTdHJpbmcoc2hhMjU2KHRoaXMuX2VuY29kZSgpKSkvLy5zbGljZSgwLCA0MClcbiAgICB9XG4gICAgXG4gICAgcHVibGljIHRvQnl0ZWNvZGUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRvSGV4U3RyaW5nKHRoaXMuX2VuY29kZSgpKS8vZW5jb2RlUkFEUmVxdWVzdCh0aGlzLnRvUHJvdG9idWYoKSksIHRydWUpXG4gICAgfVxuXG4gICAgcHVibGljIHRvSlNPTihodW1hbml6ZT86IGJvb2xlYW4pOiBhbnkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmV0cmlldmU6IHRoaXMucmV0cmlldmUubWFwKHJldHJpZXZhbCA9PiByZXRyaWV2YWwudG9KU09OKGh1bWFuaXplKSksXG4gICAgICAgICAgICBhZ2dyZWdhdGU6IHRoaXMuYWdncmVnYXRlLnRvSlNPTihodW1hbml6ZSksXG4gICAgICAgICAgICB0YWxseTogdGhpcy50YWxseS50b0pTT04oaHVtYW5pemUpLFxuICAgICAgICAgICAgLi4uKGh1bWFuaXplID8ge30gOiB7IHRpbWVfbG9jazogMCB9KSxcbiAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBwdWJsaWMgdG9Qcm90b2J1ZigpOiBhbnkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLy90aW1lTG9jazogMCxcbiAgICAgICAgICAgIHJldHJpZXZlOiB0aGlzLnJldHJpZXZlLm1hcChyZXRyaWV2YWwgPT4gcmV0cmlldmFsLnRvUHJvdG9idWYoKSksXG4gICAgICAgICAgICBhZ2dyZWdhdGU6IHRoaXMuYWdncmVnYXRlLnRvUHJvdG9idWYoKSxcbiAgICAgICAgICAgIHRhbGx5OiB0aGlzLnRhbGx5LnRvUHJvdG9idWYoKSxcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyB3ZWlnaHQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9CeXRlY29kZSgpLnNsaWNlKDIpLmxlbmd0aCAvIDI7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmFkb25UZW1wbGF0ZSBleHRlbmRzIENsYXNzIHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgYXJnc0NvdW50OiBudW1iZXI7XG4gICAgcHVibGljIHJlYWRvbmx5IGhvbW9nZW5lb3VzOiBib29sZWFuO1xuICAgIHB1YmxpYyByZWFkb25seSBzYW1wbGVzPzogUmVjb3JkPHN0cmluZywgQXJncz47XG5cbiAgICBwdWJsaWMgc3RhdGljIGZyb21DQ0RSKFxuICAgICAgICAgICAgc3BlY3M6IHtcbiAgICAgICAgICAgICAgICBjY2RyOiBSYWRvbkNDRFIsIFxuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogc3RyaW5nW10sIFxuICAgICAgICAgICAgICAgIHRhbGx5PzogUmFkb25SZWR1Y2VyXG4gICAgICAgICAgICB9LCBcbiAgICAgICAgICAgIHNhbXBsZXM/OiBSZWNvcmQ8c3RyaW5nLCBBcmdzPixcbiAgICAgICAgKTogUmFkb25UZW1wbGF0ZVxuICAgIHtcbiAgICAgICAgaWYgKCEoc3BlY3MuY2NkciBpbnN0YW5jZW9mIFJhZG9uQ0NEUikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICAgICAgYFJhZG9uUmVxdWVzdDogY2Fubm90IGNyZWF0ZSBmcm9tICR7XG4gICAgICAgICAgICAgICAgICAgIChzcGVjcy5jY2RyIGFzIGFueSk/LmNvbnN0cnVjdG9yID8gYGluc3RhbmNlIG9mICR7KHNwZWNzLmNjZHIgYXMgYW55KS5jb25zdHJ1Y3Rvci5uYW1lfS5gIDogYGZyb20gb2JqZWN0OiAke3NwZWNzLmNjZHJ9YFxuICAgICAgICAgICAgICAgIH1gXG4gICAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNwZWNzLmNjZHIuYXJnc0NvdW50IDwgMikge1xuICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKGBSYWRvblRlbXBsYXRlLmZyb21DQ0RSOiByZXF1aXJlcyBwYXJhbWV0ZXJpemVkIENDRFIuYClcbiAgICAgICAgfVxuICAgICAgICBzcGVjcy5wcm92aWRlcnMuZm9yRWFjaChwcm92aWRlciA9PiB7XG4gICAgICAgICAgICBjb25zdCBbc2NoZW1hLCBdID0gcGFyc2VVUkwocHJvdmlkZXIpXG4gICAgICAgICAgICBpZiAoIXNjaGVtYS5zdGFydHNXaXRoKFwiaHR0cDovL1wiKSAmJiAhc2NoZW1hLnN0YXJ0c1dpdGgoXCJodHRwczovL1wiKSkge1xuICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihgUmFkb25UZW1wbGF0ZS5mcm9tQ0NEUjogaW52YWxpZCBwcm92aWRlcjogJHtwcm92aWRlcn1gKVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICByZXR1cm4gbmV3IFJhZG9uVGVtcGxhdGUoe1xuICAgICAgICAgICAgcmV0cmlldmU6IHNwZWNzLmNjZHIuc3Bhd25SZXRyaWV2YWxzKC4uLnNwZWNzLnByb3ZpZGVycyksXG4gICAgICAgICAgICBhZ2dyZWdhdGU6IE1vZGUoKSxcbiAgICAgICAgICAgIHRhbGx5OiBzcGVjcy50YWxseSB8fCBNb2RlKCksXG4gICAgICAgIH0sIHNhbXBsZXMpXG4gICAgfVxuICAgIFxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBzcGVjczogeyBcbiAgICAgICAgICAgIHJldHJpZXZlOiBSYWRvblJldHJpZXZhbCB8IFJhZG9uUmV0cmlldmFsW10sIFxuICAgICAgICAgICAgYWdncmVnYXRlPzogUmFkb25SZWR1Y2VyLCBcbiAgICAgICAgICAgIHRhbGx5PzogUmFkb25SZWR1Y2VyLFxuICAgICAgICB9LFxuICAgICAgICBzYW1wbGVzPzogUmVjb3JkPHN0cmluZywgQXJncz5cbiAgICApIHtcbiAgICAgICAgY29uc3QgcmV0cmlldmUgPSBBcnJheS5pc0FycmF5KHNwZWNzLnJldHJpZXZlKSA/IHNwZWNzLnJldHJpZXZlIGFzIFJhZG9uUmV0cmlldmFsW10gOiBbIHNwZWNzLnJldHJpZXZlIF1cbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgcmV0cmlldmUsXG4gICAgICAgICAgICBhZ2dyZWdhdGU6IHNwZWNzPy5hZ2dyZWdhdGUgfHwgTW9kZSgpLFxuICAgICAgICAgICAgdGFsbHk6IHNwZWNzPy50YWxseSB8fCBNb2RlKCksXG4gICAgICAgIH0pXG4gICAgICAgIHRoaXMuYXJnc0NvdW50ID0gcmV0cmlldmUubWFwKHJldHJpZXZhbCA9PiByZXRyaWV2YWw/LmFyZ3NDb3VudCkucmVkdWNlKChwcmV2LCBjdXJyKSA9PiBNYXRoLm1heChwcmV2LCBjdXJyKSwgMClcbiAgICAgICAgaWYgKHRoaXMuYXJnc0NvdW50ID09IDApIHtcbiAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIlJhZG9uVGVtcGxhdGU6IG5vIHBhcmFtZXRlcml6ZWQgcmV0cmlldmFscyB3ZXJlIHBhc3NlZFwiKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuaG9tb2dlbmVvdXMgPSAhcmV0cmlldmUuZmluZChyZXRyaWV2YWwgPT4gcmV0cmlldmFsLmFyZ3NDb3VudCAhPT0gdGhpcy5hcmdzQ291bnQpXG4gICAgICAgIGlmIChzYW1wbGVzKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhzYW1wbGVzKS5mb3JFYWNoKHNhbXBsZSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHNhbXBsZUFyZ3M6IEFyZ3MgPSBPYmplY3Qoc2FtcGxlcylbc2FtcGxlXVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc2FtcGxlQXJncyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICBzYW1wbGVBcmdzID0gIFsgc2FtcGxlQXJncyBdIFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc2FtcGxlQXJncy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShzYW1wbGVBcmdzWzBdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0KHNhbXBsZXMpW3NhbXBsZV0gPSBBcnJheShyZXRyaWV2ZS5sZW5ndGgpLmZpbGwoc2FtcGxlQXJncylcbiAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZUFyZ3MgPSBPYmplY3Qoc2FtcGxlcylbc2FtcGxlXVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNhbXBsZUFyZ3M/Lmxlbmd0aCAhPSByZXRyaWV2ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihgUmFkb25UZW1wbGF0ZTogYXJndW1lbnRzIG1pc21hdGNoIGluIHNhbXBsZSBcIiR7c2FtcGxlfVwiOiAke3NhbXBsZUFyZ3M/Lmxlbmd0aH0gc2FtcGxlcyBnaXZlbiB2cy4gJHtyZXRyaWV2ZS5sZW5ndGh9IGV4cGVjdGVkYClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzYW1wbGVBcmdzPy5mb3JFYWNoKChzdWJhcmdzLCBpbmRleCk9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3ViYXJncy5sZW5ndGggPCByZXRyaWV2ZVtpbmRleF0uYXJnc0NvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKGBcXHgxYlsxOzMzbVJhZG9uUmVxdWVzdFRlbXBsYXRlOiBhcmd1bWVudHMgbWlzbWF0Y2ggaW4gdGVzdCBcXHgxYlsxOzMxbScke3NhbXBsZX0nXFx4MWJbMTszM206IFxceDFiWzE7MzdtUmV0cmlldmFsICMke2luZGV4fVxceDFiWzE7MzNtOiAke3N1YmFyZ3M/Lmxlbmd0aH0gcGFyYW1ldGVycyBnaXZlbiB2cy4gJHtyZXRyaWV2ZVtpbmRleF0uYXJnc0NvdW50fSBleHBlY3RlZFxceDFiWzBtYClcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgdGhpcy5zYW1wbGVzID0gc2FtcGxlc1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGJ1aWxkUmVxdWVzdCguLi5hcmdzOiBzdHJpbmdbXVtdKTogUmFkb25SZXF1ZXN0IHtcbiAgICAgICAgY29uc3QgcmV0cmlldmU6IFJhZG9uUmV0cmlldmFsW10gPSBbXVxuICAgICAgICBpZiAoYXJncy5sZW5ndGggIT09IHRoaXMucmV0cmlldmUubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBSYWRvblJlcXVlc3Q6IG1pc21hdGNoaW5nIGFyZ3MgdmVjdG9ycyAoJHthcmdzLmxlbmd0aH0gIT0gJHt0aGlzLnJldHJpZXZlLmxlbmd0aH0pOiBbJHthcmdzfV19YClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJldHJpZXZlLmZvckVhY2goKHJldHJpZXZhbCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXRyaWV2YWwuYXJnc0NvdW50ICE9PSBhcmdzW2luZGV4XS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBSYWRvblJlcXVlc3Q6IG1pc21hdGNoaW5nIGFyZ3MgcGFzc2VkIHRvIHJldHJpZXZhbCAjJHtpbmRleCArIDF9ICgke2FyZ3NbaW5kZXhdLmxlbmd0aH0gIT0gJHtyZXRyaWV2YWwuYXJnc0NvdW50fSk6IFske2FyZ3NbaW5kZXhdfV1gKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0cmlldmUucHVzaChyZXRyaWV2YWwuZm9sZEFyZ3MoLi4uYXJnc1tpbmRleF0pKVxuICAgICAgICB9KVxuICAgICAgICByZXR1cm4gbmV3IFJhZG9uUmVxdWVzdCh7XG4gICAgICAgICAgICByZXRyaWV2ZSxcbiAgICAgICAgICAgIGFnZ3JlZ2F0ZTogdGhpcy5hZ2dyZWdhdGUsXG4gICAgICAgICAgICB0YWxseTogdGhpcy50YWxseSxcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBwdWJsaWMgYnVpbGRSZXF1ZXN0TW9kYWwoLi4uYXJnczogc3RyaW5nW10pOiBSYWRvblJlcXVlc3Qge1xuICAgICAgICBjb25zdCByZXRyaWV2ZTogUmFkb25SZXRyaWV2YWxbXSA9IFtdXG4gICAgICAgIHRoaXMucmV0cmlldmUuZm9yRWFjaCgocmV0cmlldmFsLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKHJldHJpZXZhbC5hcmdzQ291bnQgIT09IGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgUmFkb25SZXF1ZXN0OiBtaXNtYXRjaGluZyBhcmdzIHBhc3NlZCB0byByZXRyaWV2YWwgIyR7aW5kZXggKyAxfSAoJHthcmdzLmxlbmd0aH0gIT0gJHtyZXRyaWV2YWwuYXJnc0NvdW50fSk6IFske2FyZ3N9XWApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXRyaWV2ZS5wdXNoKHJldHJpZXZhbC5mb2xkQXJncyguLi5hcmdzKSlcbiAgICAgICAgfSlcbiAgICAgICAgcmV0dXJuIG5ldyBSYWRvblJlcXVlc3Qoe1xuICAgICAgICAgICAgcmV0cmlldmUsXG4gICAgICAgICAgICBhZ2dyZWdhdGU6IHRoaXMuYWdncmVnYXRlLFxuICAgICAgICAgICAgdGFsbHk6IHRoaXMudGFsbHksXG4gICAgICAgIH0pXG4gICAgfVxufVxuIl19
@@ -0,0 +1,100 @@
1
+ import { CrossChainRPC, BlockNumber, Bytes, Bytes32, HexString, HexStringOfLength } from ".";
2
+ export type EthAddress = HexStringOfLength<40>;
3
+ export type EthBlockHead = BlockNumber | EthBlockTag;
4
+ export type EthBlockTag = "latest" | "earliest" | "pending" | "finalized";
5
+ /**
6
+ * Retrieve the number of most recent block.
7
+ */
8
+ export declare const blockNumber: () => CrossChainRPC;
9
+ /**
10
+ * Invoke message call immediately without creating a transaction
11
+ * on the remote block chain. Often used for executing read-only smart contract
12
+ * functions, for example the balanceOf for an ERC-20 contract.
13
+ * @param tx The transaction call object.
14
+ */
15
+ export declare const call: (tx: {
16
+ from?: EthAddress;
17
+ to: EthAddress;
18
+ gas?: number | HexString;
19
+ gasPrice?: number | HexString;
20
+ value?: number | HexString;
21
+ data?: HexString;
22
+ }) => CrossChainRPC;
23
+ /**
24
+ * Generates and returns an estimate of how much gas is necessary
25
+ * to allow the transaction to complete. The transaction will not be
26
+ * added to the blockchain. Note that the estimate may be significantly
27
+ * more than the amount of gas actually used by the transaction, for a
28
+ * variety of reasons including EVM mechanics and node performance.
29
+ * @param tx The transaction call object.
30
+ */
31
+ export declare const estimateGas: (tx: {
32
+ from?: EthAddress;
33
+ to: EthAddress;
34
+ gas?: number | HexString;
35
+ gasPrice?: number | HexString;
36
+ value?: number | HexString;
37
+ data?: HexString;
38
+ }) => CrossChainRPC;
39
+ /**
40
+ * Retrieve the balance of the account of given address.
41
+ * @param address Web3 address on remote EVM chain.
42
+ */
43
+ export declare const getBalance: (address: EthAddress, block?: EthBlockHead) => CrossChainRPC;
44
+ /**
45
+ * Retrieve code at a given address.
46
+ * @param address EthAddress from where to get the code.
47
+ */
48
+ export declare const getCode: (address: EthAddress) => CrossChainRPC;
49
+ /**
50
+ * Retrieve an array of all logs matching a given filter object.
51
+ * @param filter The filter options.
52
+ */
53
+ export declare const getLogs: (filter: {
54
+ fromBlock?: EthBlockHead;
55
+ toBlock?: EthBlockHead;
56
+ address?: EthAddress | EthAddress[];
57
+ topics?: Bytes32[];
58
+ blockHash?: Bytes32;
59
+ }) => CrossChainRPC;
60
+ /**
61
+ * Retrieve an estimate of the current price per gas in wei.
62
+ */
63
+ export declare const gasPrice: () => CrossChainRPC;
64
+ /**
65
+ * Retrieve the value from a storage position at a given address.
66
+ * @param address EthAddress of the storage.
67
+ * @param offset Offset within storage address.
68
+ */
69
+ export declare const getStorageAt: (address: EthAddress, offset: Bytes32) => CrossChainRPC;
70
+ /**
71
+ * Retrieve the information about a remote transaction given a block hash and a transaction index.
72
+ * @param txHash Hash of the remote transaction.
73
+ */
74
+ export declare const getTransactionByBlockHashAndIndex: (blockHash: Bytes32, txIndex: number | Bytes32) => CrossChainRPC;
75
+ /**
76
+ * Retrieve the information about a remote transaction given a block number and a transaction index.
77
+ * @param txHash Hash of the remote transaction.
78
+ */
79
+ export declare const getTransactionByBlockNumberAndIndex: (blockNumber: EthBlockHead, txIndex: number | Bytes32) => CrossChainRPC;
80
+ /**
81
+ * Retrieve the information about a remote transaction given its transaction hash.
82
+ * @param txHash Hash of the remote transaction.
83
+ */
84
+ export declare const getTransactionByHash: (txHash: Bytes32) => CrossChainRPC;
85
+ /**
86
+ * Retrieve the number of transactions sent from an address.
87
+ * @param address EthAddress from where to get transaction count.
88
+ */
89
+ export declare const getTransactionCount: (address: EthAddress) => CrossChainRPC;
90
+ /**
91
+ * Retrieve the receipt of a remote transaction given its transaction hash.
92
+ * @param txHash Hash of the remote transaction.
93
+ */
94
+ export declare const getTransactionReceipt: (txHash: Bytes32) => CrossChainRPC;
95
+ /**
96
+ * Invoke remote call transaction, or remote contract creation.
97
+ * @param data The signed transaction data.
98
+ */
99
+ export declare const sendRawTransaction: (data: Bytes) => CrossChainRPC;
100
+ //# sourceMappingURL=eth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eth.d.ts","sourceRoot":"","sources":["../../../../src/lib/radon/ccdr/eth.ts"],"names":[],"mappings":"AAMA,OAAO,EACH,aAAa,EACb,WAAW,EACX,KAAK,EACL,OAAO,EACP,SAAS,EACT,iBAAiB,EACpB,MAAM,GAAG,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC;AAC/C,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,WAAW,CAAC;AACrD,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,WAAW,CAAA;AAWzE;;GAEG;AACH,eAAO,MAAM,WAAW,qBAA6C,CAAC;AAEtE;;;;;GAKG;AACH,eAAO,MAAM,IAAI,OAAQ;IACrB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,EAAE,EAAE,UAAU,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,IAAI,CAAC,EAAE,SAAS,CAAA;CACnB,kBAiBA,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,OAAQ;IAC5B,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,EAAE,EAAE,UAAU,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,IAAI,CAAC,EAAE,SAAS,CAAA;CACnB,kBAiBA,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,UAAU,YAAa,UAAU,UAAU,YAAY,kBAMnE,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,OAAO,YAAa,UAAU,kBAM1C,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,OAAO,WAAY;IAC5B,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,OAAO,CAAC,EAAE,UAAU,GAAG,UAAU,EAAE,CAAC;IACpC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB,kBA6BA,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,QAAQ,qBAA0C,CAAC;AAEhE;;;;GAIG;AACH,eAAO,MAAM,YAAY,YAAa,UAAU,UAAU,OAAO,kBAQhE,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iCAAiC,cAAe,OAAO,WAAW,MAAM,GAAG,OAAO,kBAQ9F,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,mCAAmC,gBAC/B,YAAY,WAChB,MAAM,GAAG,OAAO,kBAa5B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,oBAAoB,WAAY,OAAO,kBAMnD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,mBAAmB,YAAa,UAAU,kBAMtD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,WAAY,OAAO,kBAMpD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,SAAU,KAAK,kBAM7C,CAAC"}