@witnet/sdk 1.0.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +103 -0
  3. package/dist/package.json +72 -0
  4. package/dist/src/bin/helpers.d.ts +91 -0
  5. package/dist/src/bin/helpers.d.ts.map +1 -0
  6. package/dist/src/bin/helpers.js +816 -0
  7. package/dist/src/index.d.ts +5 -0
  8. package/dist/src/index.d.ts.map +1 -0
  9. package/dist/src/index.js +47 -0
  10. package/dist/src/lib/crypto/account.d.ts +32 -0
  11. package/dist/src/lib/crypto/account.d.ts.map +1 -0
  12. package/dist/src/lib/crypto/account.js +106 -0
  13. package/dist/src/lib/crypto/coinbase.d.ts +10 -0
  14. package/dist/src/lib/crypto/coinbase.d.ts.map +1 -0
  15. package/dist/src/lib/crypto/coinbase.js +28 -0
  16. package/dist/src/lib/crypto/index.d.ts +8 -0
  17. package/dist/src/lib/crypto/index.d.ts.map +1 -0
  18. package/dist/src/lib/crypto/index.js +30 -0
  19. package/dist/src/lib/crypto/interfaces.d.ts +85 -0
  20. package/dist/src/lib/crypto/interfaces.d.ts.map +1 -0
  21. package/dist/src/lib/crypto/interfaces.js +3 -0
  22. package/dist/src/lib/crypto/payloads/DataRequestPayload.d.ts +55 -0
  23. package/dist/src/lib/crypto/payloads/DataRequestPayload.d.ts.map +1 -0
  24. package/dist/src/lib/crypto/payloads/DataRequestPayload.js +339 -0
  25. package/dist/src/lib/crypto/payloads/StakePayload.d.ts +28 -0
  26. package/dist/src/lib/crypto/payloads/StakePayload.d.ts.map +1 -0
  27. package/dist/src/lib/crypto/payloads/StakePayload.js +142 -0
  28. package/dist/src/lib/crypto/payloads/UnstakePayload.d.ts +36 -0
  29. package/dist/src/lib/crypto/payloads/UnstakePayload.d.ts.map +1 -0
  30. package/dist/src/lib/crypto/payloads/UnstakePayload.js +154 -0
  31. package/dist/src/lib/crypto/payloads/ValueTransferPayload.d.ts +25 -0
  32. package/dist/src/lib/crypto/payloads/ValueTransferPayload.d.ts.map +1 -0
  33. package/dist/src/lib/crypto/payloads/ValueTransferPayload.js +128 -0
  34. package/dist/src/lib/crypto/payloads.d.ts +57 -0
  35. package/dist/src/lib/crypto/payloads.d.ts.map +1 -0
  36. package/dist/src/lib/crypto/payloads.js +170 -0
  37. package/dist/src/lib/crypto/signer.d.ts +33 -0
  38. package/dist/src/lib/crypto/signer.d.ts.map +1 -0
  39. package/dist/src/lib/crypto/signer.js +194 -0
  40. package/dist/src/lib/crypto/transmitters/DataRequests.d.ts +15 -0
  41. package/dist/src/lib/crypto/transmitters/DataRequests.d.ts.map +1 -0
  42. package/dist/src/lib/crypto/transmitters/DataRequests.js +23 -0
  43. package/dist/src/lib/crypto/transmitters/StakeDeposits.d.ts +12 -0
  44. package/dist/src/lib/crypto/transmitters/StakeDeposits.d.ts.map +1 -0
  45. package/dist/src/lib/crypto/transmitters/StakeDeposits.js +17 -0
  46. package/dist/src/lib/crypto/transmitters/StakeWithdrawals.d.ts +18 -0
  47. package/dist/src/lib/crypto/transmitters/StakeWithdrawals.d.ts.map +1 -0
  48. package/dist/src/lib/crypto/transmitters/StakeWithdrawals.js +53 -0
  49. package/dist/src/lib/crypto/transmitters/ValueTransfers.d.ts +11 -0
  50. package/dist/src/lib/crypto/transmitters/ValueTransfers.d.ts.map +1 -0
  51. package/dist/src/lib/crypto/transmitters/ValueTransfers.js +16 -0
  52. package/dist/src/lib/crypto/transmitters.d.ts +47 -0
  53. package/dist/src/lib/crypto/transmitters.d.ts.map +1 -0
  54. package/dist/src/lib/crypto/transmitters.js +416 -0
  55. package/dist/src/lib/crypto/types.d.ts +161 -0
  56. package/dist/src/lib/crypto/types.d.ts.map +1 -0
  57. package/dist/src/lib/crypto/types.js +273 -0
  58. package/dist/src/lib/crypto/utils.d.ts +21 -0
  59. package/dist/src/lib/crypto/utils.d.ts.map +1 -0
  60. package/dist/src/lib/crypto/utils.js +156 -0
  61. package/dist/src/lib/crypto/wallet.d.ts +120 -0
  62. package/dist/src/lib/crypto/wallet.d.ts.map +1 -0
  63. package/dist/src/lib/crypto/wallet.js +258 -0
  64. package/dist/src/lib/index.d.ts +5 -0
  65. package/dist/src/lib/index.d.ts.map +1 -0
  66. package/dist/src/lib/index.js +44 -0
  67. package/dist/src/lib/radon/ccdr/eth.d.ts +160 -0
  68. package/dist/src/lib/radon/ccdr/eth.d.ts.map +1 -0
  69. package/dist/src/lib/radon/ccdr/eth.js +272 -0
  70. package/dist/src/lib/radon/ccdr/index.d.ts +14 -0
  71. package/dist/src/lib/radon/ccdr/index.d.ts.map +1 -0
  72. package/dist/src/lib/radon/ccdr/index.js +39 -0
  73. package/dist/src/lib/radon/ccdr/wit.d.ts +23 -0
  74. package/dist/src/lib/radon/ccdr/wit.d.ts.map +1 -0
  75. package/dist/src/lib/radon/ccdr/wit.js +35 -0
  76. package/dist/src/lib/radon/filters.d.ts +14 -0
  77. package/dist/src/lib/radon/filters.d.ts.map +1 -0
  78. package/dist/src/lib/radon/filters.js +45 -0
  79. package/dist/src/lib/radon/index.d.ts +296 -0
  80. package/dist/src/lib/radon/index.d.ts.map +1 -0
  81. package/dist/src/lib/radon/index.js +707 -0
  82. package/dist/src/lib/radon/reducers.d.ts +29 -0
  83. package/dist/src/lib/radon/reducers.d.ts.map +1 -0
  84. package/dist/src/lib/radon/reducers.js +66 -0
  85. package/dist/src/lib/radon/types.d.ts +521 -0
  86. package/dist/src/lib/radon/types.d.ts.map +1 -0
  87. package/dist/src/lib/radon/types.js +936 -0
  88. package/dist/src/lib/radon/utils.d.ts +53 -0
  89. package/dist/src/lib/radon/utils.d.ts.map +1 -0
  90. package/dist/src/lib/radon/utils.js +153 -0
  91. package/dist/src/lib/rpc/index.d.ts +3 -0
  92. package/dist/src/lib/rpc/index.d.ts.map +1 -0
  93. package/dist/src/lib/rpc/index.js +19 -0
  94. package/dist/src/lib/rpc/nodes.d.ts +40 -0
  95. package/dist/src/lib/rpc/nodes.d.ts.map +1 -0
  96. package/dist/src/lib/rpc/nodes.js +293 -0
  97. package/dist/src/lib/rpc/provider.d.ts +88 -0
  98. package/dist/src/lib/rpc/provider.d.ts.map +1 -0
  99. package/dist/src/lib/rpc/provider.js +336 -0
  100. package/dist/src/lib/rpc/reporter.d.ts +18 -0
  101. package/dist/src/lib/rpc/reporter.d.ts.map +1 -0
  102. package/dist/src/lib/rpc/reporter.js +30 -0
  103. package/dist/src/lib/rpc/types.d.ts +409 -0
  104. package/dist/src/lib/rpc/types.d.ts.map +1 -0
  105. package/dist/src/lib/rpc/types.js +81 -0
  106. package/dist/src/lib/types.d.ts +18 -0
  107. package/dist/src/lib/types.d.ts.map +1 -0
  108. package/dist/src/lib/types.js +7 -0
  109. package/dist/src/lib/utils.d.ts +13 -0
  110. package/dist/src/lib/utils.d.ts.map +1 -0
  111. package/dist/src/lib/utils.js +97 -0
  112. package/dist/witnet/assets/index.d.ts +30 -0
  113. package/dist/witnet/assets/index.d.ts.map +1 -0
  114. package/dist/witnet/assets/index.js +6 -0
  115. package/dist/witnet/assets/modals/index.d.ts +18 -0
  116. package/dist/witnet/assets/modals/index.d.ts.map +1 -0
  117. package/dist/witnet/assets/modals/index.js +21 -0
  118. package/dist/witnet/assets/modals/web3/eth.d.ts +5 -0
  119. package/dist/witnet/assets/modals/web3/eth.d.ts.map +1 -0
  120. package/dist/witnet/assets/modals/web3/eth.js +26 -0
  121. package/dist/witnet/assets/modals/web3/wit.d.ts +4 -0
  122. package/dist/witnet/assets/modals/web3/wit.d.ts.map +1 -0
  123. package/dist/witnet/assets/modals/web3/wit.js +20 -0
  124. package/dist/witnet/assets/requests.d.ts +11 -0
  125. package/dist/witnet/assets/requests.d.ts.map +1 -0
  126. package/dist/witnet/assets/requests.js +88 -0
  127. package/dist/witnet/witnet.proto.json +1325 -0
  128. package/package.json +72 -0
  129. package/src/bin/cli/history.js +31 -0
  130. package/src/bin/cli/inspect.js +359 -0
  131. package/src/bin/cli/network.js +592 -0
  132. package/src/bin/cli/nodes.js +364 -0
  133. package/src/bin/cli/radon.js +814 -0
  134. package/src/bin/cli/wallet.js +1000 -0
  135. package/src/bin/helpers.js +829 -0
  136. package/src/bin/postinstall.js +9 -0
  137. package/src/bin/toolkit.js +294 -0
  138. package/witnet/assets/_index.js +8 -0
  139. package/witnet/assets/_requests.js +25 -0
  140. package/witnet/assets/_sources.js +36 -0
  141. package/witnet/assets/_templates.js +36 -0
  142. package/witnet/assets/index.js +4 -0
  143. package/witnet/assets/modals/index.js +25 -0
  144. package/witnet/assets/modals/web3/btc.js +0 -0
  145. package/witnet/assets/modals/web3/eth.js +29 -0
  146. package/witnet/assets/modals/web3/sol.js +0 -0
  147. package/witnet/assets/modals/web3/wit.js +23 -0
  148. package/witnet/assets/requests.js +94 -0
  149. package/witnet/witnet.proto.json +1325 -0
@@ -0,0 +1,53 @@
1
+ import { RadonRequest, RadonModal, RadonTemplate, RadonRetrieval } from "./index";
2
+ import { RadonAny } from "./types";
3
+ export { execRadonBytecode } from "../../bin/helpers";
4
+ /**
5
+ * Decodes a Radon script out from a Protobuf-serialized bytecode.
6
+ * @param hexString Radon script bytecode.
7
+ * @returns Radon script object (i.e. chain of Radon operators with a deterministic output Radon type).
8
+ */
9
+ export declare function parseRadonScript(bytecode: any): RadonAny;
10
+ export declare function flattenRadonAssets<T extends RadonRequest | RadonTemplate | RadonModal | RadonRetrieval>(tree: any, type?: {
11
+ new (specs: any): T;
12
+ }, headers?: string[]): any;
13
+ export declare function requireRadonAsset<T extends RadonRequest | RadonTemplate | RadonModal | RadonRetrieval>(specs: {
14
+ artifact: string;
15
+ assets?: any;
16
+ type?: {
17
+ new (specs: any): T;
18
+ };
19
+ }): T;
20
+ /**
21
+ * Search Witnet Radon assets declared or imported within current repository,
22
+ * whose names complies with the provided `pattern` and `filterFn`.
23
+ * If no `filterFn` is specified, search will include assets whose names
24
+ * are suffixed by given `pattern` (case insensitive).
25
+ * @param options Search options
26
+ * @param filterFn Filtering function.
27
+ * @returns An array of Radon assets of the specified kind complying with the search pattern.
28
+ */
29
+ export declare function searchRadonAssets<T extends RadonRequest | RadonTemplate | RadonModal | RadonRetrieval>(options: {
30
+ /**
31
+ * Object containing structured heriarchy of Radon assets. If not provided, Radon assets declared within project's environment.
32
+ */
33
+ assets?: any;
34
+ /**
35
+ * Limits number of returned Radon assets.
36
+ */
37
+ limit?: number;
38
+ /**
39
+ * Offsets returned array of Radon assets.
40
+ */
41
+ offset?: number;
42
+ /**
43
+ * Name pattern searched for.
44
+ */
45
+ pattern: string;
46
+ /**
47
+ * Specific type of Radon asset to search for: `RadonRequest`, `RadonRequest`, `RadonRetrieval` or `RadonCCDR`.
48
+ */
49
+ type?: {
50
+ new (specs: any): T;
51
+ };
52
+ }, filterFn?: (key: string, pattern: string) => boolean): Array<[key: string, artifact: T]>;
53
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/lib/radon/utils.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAEjF,OAAO,EACL,QAAQ,EAST,MAAM,SAAS,CAAA;AAIhB,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAErD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,GAAG,GAAG,QAAQ,CAaxD;AAGD,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,YAAY,GAAG,aAAa,GAAG,UAAU,GAAG,cAAc,EACrG,IAAI,EAAE,GAAG,EACT,IAAI,CAAC,EAAE;IAAE,KAAI,KAAK,EAAE,GAAG,GAAG,CAAC,CAAC;CAAE,EAC9B,OAAO,CAAC,EAAE,MAAM,EAAE,GACjB,GAAG,CA0BL;AAED,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,YAAY,GAAG,aAAa,GAAG,UAAU,GAAG,cAAc,EAAE,KAAK,EAAE;IAC7G,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,IAAI,CAAC,EAAE;QAAE,KAAK,KAAK,EAAE,GAAG,GAAG,CAAC,CAAC;KAAE,CAAC;CACjC,GAAG,CAAC,CAYJ;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,YAAY,GAAG,aAAa,GAAG,UAAU,GAAG,cAAc,EACpG,OAAO,EAAE;IACP;;OAEG;IACH,MAAM,CAAC,EAAE,GAAG,CAAC;IACb;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,IAAI,CAAC,EAAE;QAAE,KAAK,KAAK,EAAE,GAAG,GAAG,CAAC,CAAC;KAAE,CAAC;CACjC,EACD,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,GACnD,KAAK,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAanC"}
@@ -0,0 +1,153 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.execRadonBytecode = void 0;
4
+ exports.parseRadonScript = parseRadonScript;
5
+ exports.flattenRadonAssets = flattenRadonAssets;
6
+ exports.requireRadonAsset = requireRadonAsset;
7
+ exports.searchRadonAssets = searchRadonAssets;
8
+ require('dotenv').config();
9
+ const cbor_1 = require("cbor");
10
+ const helpers_1 = require("../../bin/helpers");
11
+ const index_1 = require("./index");
12
+ const types_1 = require("./types");
13
+ const WITNET_ASSETS_PATH = process.env.WITNET_SDK_RADON_ASSETS_PATH || "../../../../../witnet/assets";
14
+ var helpers_2 = require("../../bin/helpers");
15
+ Object.defineProperty(exports, "execRadonBytecode", { enumerable: true, get: function () { return helpers_2.execRadonBytecode; } });
16
+ /**
17
+ * Decodes a Radon script out from a Protobuf-serialized bytecode.
18
+ * @param hexString Radon script bytecode.
19
+ * @returns Radon script object (i.e. chain of Radon operators with a deterministic output Radon type).
20
+ */
21
+ function parseRadonScript(bytecode) {
22
+ let buffer;
23
+ if ((0, helpers_1.isHexString)(bytecode)) {
24
+ buffer = (0, helpers_1.fromHexString)(bytecode);
25
+ }
26
+ else if (bytecode instanceof Uint8Array) {
27
+ buffer = Buffer.from(bytecode);
28
+ }
29
+ else if (bytecode instanceof Buffer) {
30
+ buffer = bytecode;
31
+ }
32
+ else {
33
+ throw new TypeError(`Unsupported RadonScript bytecode format: ${bytecode}`);
34
+ }
35
+ const array = (0, cbor_1.decode)(buffer);
36
+ return parseScript(array);
37
+ }
38
+ function flattenRadonAssets(tree, type, headers) {
39
+ if (!headers)
40
+ headers = [];
41
+ const entries = [];
42
+ for (const key in tree) {
43
+ if ((type && tree[key] instanceof type)
44
+ || (!type && (tree[key] instanceof index_1.RadonRequest
45
+ || tree[key] instanceof index_1.RadonTemplate
46
+ || tree[key] instanceof index_1.RadonModal
47
+ || tree[key] instanceof index_1.RadonRetrieval))) {
48
+ entries.push({
49
+ key,
50
+ artifact: tree[key],
51
+ });
52
+ }
53
+ else if (typeof tree[key] === "object") {
54
+ entries.push(...flattenRadonAssets(tree[key], type, [...headers, key]));
55
+ }
56
+ }
57
+ return entries;
58
+ }
59
+ ;
60
+ function requireRadonAsset(specs) {
61
+ const stuff = (specs?.assets
62
+ ? flattenRadonAssets(specs.assets, specs?.type)
63
+ : loadModuleAssets({ flattened: true, type: specs?.type }));
64
+ const found = stuff.find((entry) => entry.key === specs.artifact);
65
+ if (found) {
66
+ return found[0].artifact;
67
+ }
68
+ else {
69
+ throw Error(`Radon asset "${specs.artifact}" not available.`);
70
+ }
71
+ }
72
+ /**
73
+ * Search Witnet Radon assets declared or imported within current repository,
74
+ * whose names complies with the provided `pattern` and `filterFn`.
75
+ * If no `filterFn` is specified, search will include assets whose names
76
+ * are suffixed by given `pattern` (case insensitive).
77
+ * @param options Search options
78
+ * @param filterFn Filtering function.
79
+ * @returns An array of Radon assets of the specified kind complying with the search pattern.
80
+ */
81
+ function searchRadonAssets(options, filterFn) {
82
+ const defaultFilter = (key, pattern) => key.toLowerCase().endsWith(pattern.toLowerCase());
83
+ const stuff = (options?.assets
84
+ ? flattenRadonAssets(options.assets, options?.type)
85
+ : loadModuleAssets({ flattened: true, type: options?.type }));
86
+ return (stuff
87
+ .filter((entry) => (filterFn || defaultFilter)(entry.key, options.pattern || ""))
88
+ .slice(options?.offset || 0, options?.limit)
89
+ .map((entry) => [entry.key, entry.artifact]));
90
+ }
91
+ // ====================================================================================================================
92
+ // --- INTERNAL METHODS -----------------------------------------------------------------------------------------------
93
+ function loadModuleAssets(options) {
94
+ // const stuff = options?.legacy ? require(`${WITNET_ASSETS_PATH}`).legacy : {
95
+ // requests: require(`${WITNET_ASSETS_PATH}/requests`),
96
+ // templates: require(`${WITNET_ASSETS_PATH}/templates`),
97
+ // retrievals: require(`${WITNET_ASSETS_PATH}/retrievals`),
98
+ // };
99
+ const stuff = require(`${WITNET_ASSETS_PATH}`);
100
+ return options?.flattened ? flattenRadonAssets(stuff, options?.type) : stuff;
101
+ }
102
+ function parseScript(array, script) {
103
+ if (Array.isArray(array)) {
104
+ array.forEach(item => {
105
+ if (Array.isArray(item)) {
106
+ script = parseScriptOperator(script, item[0], ...item.slice(1));
107
+ }
108
+ else {
109
+ script = parseScriptOperator(script, item);
110
+ }
111
+ });
112
+ return script;
113
+ }
114
+ else {
115
+ return parseScriptOperator(script, array);
116
+ }
117
+ }
118
+ function parseScriptOperator(script, opcode, args) {
119
+ if (!script) {
120
+ const found = Object.entries({
121
+ "10": types_1.RadonArray,
122
+ "20": types_1.RadonBoolean,
123
+ "30": types_1.RadonBytes,
124
+ "40": types_1.RadonInteger,
125
+ "50": types_1.RadonFloat,
126
+ "60": types_1.RadonMap,
127
+ "70": types_1.RadonString,
128
+ }).find(entry => entry[0] === (parseInt(opcode) & 0xf0).toString(16));
129
+ if (found) {
130
+ script = new found[1];
131
+ }
132
+ else {
133
+ throw TypeError(`unknown Radon operator: ${opcode}`);
134
+ }
135
+ }
136
+ if (opcode) {
137
+ let operator = types_1.RadonOperators[opcode].split(/(?=[A-Z])/).slice(1).join("");
138
+ operator = operator.charAt(0).toLowerCase() + operator.slice(1);
139
+ switch (operator) {
140
+ case "filter":
141
+ case "map":
142
+ case "sort":
143
+ case "alter":
144
+ const innerScript = parseScript(args);
145
+ return script[operator](innerScript, ...args.slice(1));
146
+ // case "alter":
147
+ // return script[operator](args[0], parseScript(args[1], ...args.slice(2)));
148
+ default:
149
+ return script[operator](args);
150
+ }
151
+ }
152
+ }
153
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3JhZG9uL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQTRCQSw0Q0FhQztBQUdELGdEQThCQztBQUVELDhDQWdCQztBQVdELDhDQXFDQztBQTVJRCxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUE7QUFDMUIsK0JBQTJDO0FBRTNDLCtDQUE4RDtBQUU5RCxtQ0FBaUY7QUFFakYsbUNBVWdCO0FBRWhCLE1BQU0sa0JBQWtCLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsSUFBSSw4QkFBOEIsQ0FBQTtBQUVyRyw2Q0FBcUQ7QUFBNUMsNEdBQUEsaUJBQWlCLE9BQUE7QUFFMUI7Ozs7R0FJRztBQUNILFNBQWdCLGdCQUFnQixDQUFDLFFBQWE7SUFDNUMsSUFBSSxNQUFNLENBQUE7SUFDVixJQUFJLElBQUEscUJBQVcsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQzFCLE1BQU0sR0FBRyxJQUFBLHVCQUFhLEVBQUMsUUFBUSxDQUFDLENBQUE7SUFDbEMsQ0FBQztTQUFNLElBQUksUUFBUSxZQUFZLFVBQVUsRUFBRSxDQUFDO1FBQzFDLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQ2hDLENBQUM7U0FBTSxJQUFJLFFBQVEsWUFBWSxNQUFNLEVBQUUsQ0FBQztRQUN0QyxNQUFNLEdBQUcsUUFBUSxDQUFBO0lBQ25CLENBQUM7U0FBTSxDQUFDO1FBQ04sTUFBTSxJQUFJLFNBQVMsQ0FBQyw0Q0FBNEMsUUFBUSxFQUFFLENBQUMsQ0FBQTtJQUM3RSxDQUFDO0lBQ0QsTUFBTSxLQUFLLEdBQUcsSUFBQSxhQUFVLEVBQUMsTUFBTSxDQUFDLENBQUE7SUFDaEMsT0FBTyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUE7QUFDM0IsQ0FBQztBQUdELFNBQWdCLGtCQUFrQixDQUNo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QVEsUUFBUSxFQUFFLENBQUM7WUFDakIsS0FBSyxRQUFRLENBQUM7WUFBQyxLQUFLLEtBQUssQ0FBQztZQUFDLEtBQUssTUFBTSxDQUFDO1lBQUMsS0FBSyxPQUFPO2dCQUNsRCxNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUE7Z0JBQ3JDLE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUV6RCxnQkFBZ0I7WUFDaEIsOEVBQThFO1lBRTlFO2dCQUNFLE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ2pDLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbInJlcXVpcmUoJ2RvdGVudicpLmNvbmZpZygpXHJcbmltcG9ydCB7IGRlY29kZSBhcyBjYm9yRGVjb2RlIH0gZnJvbSAnY2JvcidcclxuXHJcbmltcG9ydCB7IGZyb21IZXhTdHJpbmcsIGlzSGV4U3RyaW5nIH0gZnJvbSBcIi4uLy4uL2Jpbi9oZWxwZXJzXCJcclxuXHJcbmltcG9ydCB7IFJhZG9uUmVxdWVzdCwgUmFkb25Nb2RhbCwgUmFkb25UZW1wbGF0ZSwgUmFkb25SZXRyaWV2YWwgfSBmcm9tIFwiLi9pbmRleFwiXHJcblxyXG5pbXBvcnQge1xyXG4gIFJhZG9uQW55LFxyXG4gIFJhZG9uQXJyYXksXHJcbiAgUmFkb25Cb29sZWFuLFxyXG4gIFJhZG9uQnl0ZXMsXHJcbiAgUmFkb25GbG9hdCxcclxuICBSYWRvbkludGVnZXIsXHJcbiAgUmFkb25NYXAsXHJcbiAgUmFkb25TdHJpbmcsXHJcbiAgUmFkb25PcGVyYXRvcnMsXHJcbn0gZnJvbSBcIi4vdHlwZXNcIlxyXG5cclxuY29uc3QgV0lUTkVUX0FTU0VUU19QQVRIID0gcHJvY2Vzcy5lbnYuV0lUTkVUX1NES19SQURPTl9BU1NFVFNfUEFUSCB8fCBcIi4uLy4uLy4uLy4uLy4uL3dpdG5ldC9hc3NldHNcIlxyXG5cclxuZXhwb3J0IHsgZXhlY1JhZG9uQnl0ZWNvZGUgfSBmcm9tIFwiLi4vLi4vYmluL2hlbHBlcnNcIlxyXG5cclxuLyoqXHJcbiAqIERlY29kZXMgYSBSYWRvbiBzY3JpcHQgb3V0IGZyb20gYSBQcm90b2J1Zi1zZXJpYWxpemVkIGJ5dGVjb2RlLlxyXG4gKiBAcGFyYW0gaGV4U3RyaW5nIFJhZG9uIHNjcmlwdCBieXRlY29kZS5cclxuICogQHJldHVybnMgUmFkb24gc2NyaXB0IG9iamVjdCAoaS5lLiBjaGFpbiBvZiBSYWRvbiBvcGVyYXRvcnMgd2l0aCBhIGRldGVybWluaXN0aWMgb3V0cHV0IFJhZG9uIHR5cGUpLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUmFkb25TY3JpcHQoYnl0ZWNvZGU6IGFueSk6IFJhZG9uQW55IHtcclxuICBsZXQgYnVmZmVyXHJcbiAgaWYgKGlzSGV4U3RyaW5nKGJ5dGVjb2RlKSkge1xyXG4gICAgYnVmZmVyID0gZnJvbUhleFN0cmluZyhieXRlY29kZSlcclxuICB9IGVsc2UgaWYgKGJ5dGVjb2RlIGluc3RhbmNlb2YgVWludDhBcnJheSkge1xyXG4gICAgYnVmZmVyID0gQnVmZmVyLmZyb20oYnl0ZWNvZGUpXHJcbiAgfSBlbHNlIGlmIChieXRlY29kZSBpbnN0YW5jZW9mIEJ1ZmZlcikge1xyXG4gICAgYnVmZmVyID0gYnl0ZWNvZGVcclxuICB9IGVsc2Uge1xyXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgVW5zdXBwb3J0ZWQgUmFkb25TY3JpcHQgYnl0ZWNvZGUgZm9ybWF0OiAke2J5dGVjb2RlfWApXHJcbiAgfVxyXG4gIGNvbnN0IGFycmF5ID0gY2JvckRlY29kZShidWZmZXIpXHJcbiAgcmV0dXJuIHBhcnNlU2NyaXB0KGFycmF5KVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZsYXR0ZW5SYWRvbkFzc2V0czxUIGV4dGVuZHMgUmFkb25SZXF1ZXN0IHwgUmFkb25UZW1wbGF0ZSB8IFJhZG9uTW9kYWwgfCBSYWRvblJldHJpZXZhbD4oXHJcbiAgdHJlZTogYW55LFxyXG4gIHR5cGU/OiB7IG5ldyhzcGVjczogYW55KTogVDsgfSxcclxuICBoZWFkZXJzPzogc3RyaW5nW11cclxuKTogYW55IHtcclxuICBpZiAoIWhlYWRlcnMpIGhlYWRlcnMgPSBbXVxyXG4gIGNvbnN0IGVudHJpZXMgPSBbXVxyXG4gIGZvciAoY29uc3Qga2V5IGluIHRyZWUpIHtcclxuICAgIGlmIChcclxuICAgICAgKHR5cGUgJiYgdHJlZVtrZXldIGluc3RhbmNlb2YgdHlwZSlcclxuICAgICAgfHwgKCF0eXBlICYmIChcclxuICAgICAgICAgIHRyZWVba2V5XSBpbnN0YW5jZW9mIFJhZG9uUmVxdWVzdFxyXG4gICAgICAgICAgfHwgdHJlZVtrZXldIGluc3RhbmNlb2YgUmFkb25UZW1wbGF0ZVxyXG4gICAgICAgICAgfHwgdHJlZVtrZXldIGluc3RhbmNlb2YgUmFkb25Nb2RhbFxyXG4gICAgICAgICAgfHwgdHJlZVtrZXldIGluc3RhbmNlb2YgUmFkb25SZXRyaWV2YWxcclxuICAgICAgKSlcclxuICAgICkge1xyXG4gICAgICBlbnRyaWVzLnB1c2goe1xyXG4gICAgICAgIGtleSxcclxuICAgICAgICBhcnRpZmFjdDogdHJlZVtrZXldLFxyXG4gICAgICB9KVxyXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdHJlZVtrZXldID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgIGVudHJpZXMucHVzaCguLi5mbGF0dGVuUmFkb25Bc3NldHMoXHJcbiAgICAgICAgdHJlZVtrZXldLFxyXG4gICAgICAgIHR5cGUsXHJcbiAgICAgICAgWy4uLmhlYWRlcnMsIGtleV1cclxuICAgICAgKSlcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIGVudHJpZXNcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZXF1aXJlUmFkb25Bc3NldDxUIGV4dGVuZHMgUmFkb25SZXF1ZXN0IHwgUmFkb25UZW1wbGF0ZSB8IFJhZG9uTW9kYWwgfCBSYWRvblJldHJpZXZhbD4oc3BlY3M6IHtcclxuICBhcnRpZmFjdDogc3RyaW5nLFxyXG4gIGFzc2V0cz86IGFueSxcclxuICB0eXBlPzogeyBuZXcgKHNwZWNzOiBhbnkpOiBUOyB9LFxyXG59KTogVCB7XHJcbiAgY29uc3Qgc3R1ZmYgPSAoXHJcbiAgICBzcGVjcz8uYXNzZXRzIFxyXG4gICAgICA/IGZsYXR0ZW5SYWRvbkFzc2V0cyhzcGVjcy5hc3NldHMsIHNwZWNzPy50eXBlKSBcclxuICAgICAgOiBsb2FkTW9kdWxlQXNzZXRzKHsgZmxhdHRlbmVkOiB0cnVlLCB0eXBlOiBzcGVjcz8udHlwZSB9KVxyXG4gICk7XHJcbiAgY29uc3QgZm91bmQgPSBzdHVmZi5maW5kKChlbnRyeTogeyBrZXk6IHN0cmluZywgYXJ0aWZhY3Q6IGFueSB9KSA9PiBlbnRyeS5rZXkgPT09IHNwZWNzLmFydGlmYWN0KVxyXG4gIGlmIChmb3VuZCkge1xyXG4gICAgcmV0dXJuIGZvdW5kWzBdLmFydGlmYWN0XHJcbiAgfSBlbHNlIHtcclxuICAgIHRocm93IEVycm9yKGBSYWRvbiBhc3NldCBcIiR7c3BlY3MuYXJ0aWZhY3R9XCIgbm90IGF2YWlsYWJsZS5gKVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIFNlYXJjaCBXaXRuZXQgUmFkb24gYXNzZXRzIGRlY2xhcmVkIG9yIGltcG9ydGVkIHdpdGhpbiBjdXJyZW50IHJlcG9zaXRvcnksIFxyXG4gKiB3aG9zZSBuYW1lcyBjb21wbGllcyB3aXRoIHRoZSBwcm92aWRlZCBgcGF0dGVybmAgYW5kIGBmaWx0ZXJGbmAuIFxyXG4gKiBJZiBubyBgZmlsdGVyRm5gIGlzIHNwZWNpZmllZCwgc2VhcmNoIHdpbGwgaW5jbHVkZSBhc3NldHMgd2hvc2UgbmFtZXMgXHJcbiAqIGFyZSBzdWZmaXhlZCBieSBnaXZlbiBgcGF0dGVybmAgKGNhc2UgaW5zZW5zaXRpdmUpLlxyXG4gKiBAcGFyYW0gb3B0aW9ucyBTZWFyY2ggb3B0aW9uc1xyXG4gKiBAcGFyYW0gZmlsdGVyRm4gRmlsdGVyaW5nIGZ1bmN0aW9uLlxyXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBSYWRvbiBhc3NldHMgb2YgdGhlIHNwZWNpZmllZCBraW5kIGNvbXBseWluZyB3aXRoIHRoZSBzZWFyY2ggcGF0dGVybi4gXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gc2VhcmNoUmFkb25Bc3NldHM8VCBleHRlbmRzIFJhZG9uUmVxdWVzdCB8IFJhZG9uVGVtcGxhdGUgfCBSYWRvbk1vZGFsIHwgUmFkb25SZXRyaWV2YWw+KFxyXG4gIG9wdGlvbnM6IHtcclxuICAgIC8qKlxyXG4gICAgICogT2JqZWN0IGNvbnRhaW5pbmcgc3RydWN0dXJlZCBoZXJpYXJjaHkgb2YgUmFkb24gYXNzZXRzLiBJZiBub3QgcHJvdmlkZWQsIFJhZG9uIGFzc2V0cyBkZWNsYXJlZCB3aXRoaW4gcHJvamVjdCdzIGVudmlyb25tZW50LlxyXG4gICAgICovXHJcbiAgICBhc3NldHM/OiBhbnksXHJcbiAgICAvKipcclxuICAgICAqIExpbWl0cyBudW1iZXIgb2YgcmV0dXJuZWQgUmFkb24gYXNzZXRzLlxyXG4gICAgICovXHJcbiAgICBsaW1pdD86IG51bWJlcixcclxuICAgIC8qKlxyXG4gICAgICogT2Zmc2V0cyByZXR1cm5lZCBhcnJheSBvZiBSYWRvbiBhc3NldHMuXHJcbiAgICAgKi9cclxuICAgIG9mZnNldD86IG51bWJlcixcclxuICAgIC8qKlxyXG4gICAgICogTmFtZSBwYXR0ZXJuIHNlYXJjaGVkIGZvci5cclxuICAgICAqL1xyXG4gICAgcGF0dGVybjogc3RyaW5nLFxyXG4gICAgLyoqXHJcbiAgICAgKiBTcGVjaWZpYyB0eXBlIG9mIFJhZG9uIGFzc2V0IHRvIHNlYXJjaCBmb3I6IGBSYWRvblJlcXVlc3RgLCBgUmFkb25SZXF1ZXN0YCwgYFJhZG9uUmV0cmlldmFsYCBvciBgUmFkb25DQ0RSYC5cclxuICAgICAqL1xyXG4gICAgdHlwZT86IHsgbmV3IChzcGVjczogYW55KTogVDsgfSxcclxuICB9LFxyXG4gIGZpbHRlckZuPzogKGtleTogc3RyaW5nLCBwYXR0ZXJuOiBzdHJpbmcpID0+IGJvb2xlYW4sXHJcbik6IEFycmF5PFtrZXk6IHN0cmluZywgYXJ0aWZhY3Q6IFRdPiB7XHJcbiAgY29uc3QgZGVmYXVsdEZpbHRlciA9IChrZXk6IHN0cmluZywgcGF0dGVybjogc3RyaW5nKSA9PiBrZXkudG9Mb3dlckNhc2UoKS5lbmRzV2l0aChwYXR0ZXJuLnRvTG93ZXJDYXNlKCkpXHJcbiAgY29uc3Qgc3R1ZmYgPSAoXHJcbiAgICBvcHRpb25zPy5hc3NldHNcclxuICAgICAgPyBmbGF0dGVuUmFkb25Bc3NldHMob3B0aW9ucy5hc3NldHMsIG9wdGlvbnM/LnR5cGUpXHJcbiAgICAgIDogbG9hZE1vZHVsZUFzc2V0cyh7IGZsYXR0ZW5lZDogdHJ1ZSwgdHlwZTogb3B0aW9ucz8udHlwZSB9KVxyXG4gICk7XHJcbiAgcmV0dXJuIChcclxuICAgIHN0dWZmXHJcbiAgICAgIC5maWx0ZXIoKGVudHJ5OiB7IGtleTogc3RyaW5nLCBhcnRpZmFjdDogYW55IH0pID0+IChmaWx0ZXJGbiB8fCBkZWZhdWx0RmlsdGVyKShlbnRyeS5rZXksIG9wdGlvbnMucGF0dGVybiB8fCBcIlwiKSlcclxuICAgICAgLnNsaWNlKG9wdGlvbnM/Lm9mZnNldCB8fCAwLCBvcHRpb25zPy5saW1pdClcclxuICAgICAgLm1hcCgoZW50cnk6IHsga2V5OiBzdHJpbmcsIGFydGlmYWN0OiBhbnkgfCBUIH0pID0+IFtlbnRyeS5rZXksIGVudHJ5LmFydGlmYWN0XSlcclxuICApO1xyXG59XHJcblxyXG5cclxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy8gLS0tIElOVEVSTkFMIE1FVEhPRFMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbmZ1bmN0aW9uIGxvYWRNb2R1bGVBc3NldHM8VCBleHRlbmRzIFJhZG9uUmVxdWVzdCB8IFJhZG9uVGVtcGxhdGUgfCBSYWRvbk1vZGFsIHwgUmFkb25SZXRyaWV2YWw+KFxyXG4gIG9wdGlvbnM6IHtcclxuICAgIC8vIGxlZ2FjeT86IGJvb2xlYW4sXHJcbiAgICBmbGF0dGVuZWQ/OiBib29sZWFuLFxyXG4gICAgdHlwZT86IHsgbmV3KHNwZWNzOiBhbnkpOiBUOyB9LFxyXG4gIH0sXHJcbik6IGFueSB7XHJcbiAgLy8gY29uc3Qgc3R1ZmYgPSBvcHRpb25zPy5sZWdhY3kgPyByZXF1aXJlKGAke1dJVE5FVF9BU1NFVFNfUEFUSH1gKS5sZWdhY3kgOiB7XHJcbiAgLy8gICByZXF1ZXN0czogcmVxdWlyZShgJHtXSVRORVRfQVNTRVRTX1BBVEh9L3JlcXVlc3RzYCksXHJcbiAgLy8gICB0ZW1wbGF0ZXM6IHJlcXVpcmUoYCR7V0lUTkVUX0FTU0VUU19QQVRIfS90ZW1wbGF0ZXNgKSxcclxuICAvLyAgIHJldHJpZXZhbHM6IHJlcXVpcmUoYCR7V0lUTkVUX0FTU0VUU19QQVRIfS9yZXRyaWV2YWxzYCksXHJcbiAgLy8gfTtcclxuICBjb25zdCBzdHVmZiA9IHJlcXVpcmUoYCR7V0lUTkVUX0FTU0VUU19QQVRIfWApXHJcbiAgcmV0dXJuIG9wdGlvbnM/LmZsYXR0ZW5lZCA/IGZsYXR0ZW5SYWRvbkFzc2V0cyhzdHVmZiwgb3B0aW9ucz8udHlwZSkgOiBzdHVmZlxyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZVNjcmlwdChhcnJheTogYW55LCBzY3JpcHQ/OiBhbnkpOiBhbnkge1xyXG4gIGlmIChBcnJheS5pc0FycmF5KGFycmF5KSkge1xyXG4gICAgYXJyYXkuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbSkpIHtcclxuICAgICAgICBzY3JpcHQgPSBwYXJzZVNjcmlwdE9wZXJhdG9yKHNjcmlwdCwgaXRlbVswXSwgLi4uaXRlbS5zbGljZSgxKSlcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzY3JpcHQgPSBwYXJzZVNjcmlwdE9wZXJhdG9yKHNjcmlwdCwgaXRlbSlcclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIHJldHVybiBzY3JpcHRcclxuICB9IGVsc2Uge1xyXG4gICAgcmV0dXJuIHBhcnNlU2NyaXB0T3BlcmF0b3Ioc2NyaXB0LCBhcnJheSlcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBhcnNlU2NyaXB0T3BlcmF0b3Ioc2NyaXB0OiBhbnksIG9wY29kZTogYW55LCBhcmdzPzogYW55KTogYW55IHtcclxuICBpZiAoIXNjcmlwdCkge1xyXG4gICAgY29uc3QgZm91bmQgPSBPYmplY3QuZW50cmllcyh7XHJcbiAgICAgIFwiMTBcIjogUmFkb25BcnJheSxcclxuICAgICAgXCIyMFwiOiBSYWRvbkJvb2xlYW4sXHJcbiAgICAgIFwiMzBcIjogUmFkb25CeXRlcyxcclxuICAgICAgXCI0MFwiOiBSYWRvbkludGVnZXIsXHJcbiAgICAgIFwiNTBcIjogUmFkb25GbG9hdCxcclxuICAgICAgXCI2MFwiOiBSYWRvbk1hcCxcclxuICAgICAgXCI3MFwiOiBSYWRvblN0cmluZyxcclxuICAgIH0pLmZpbmQoZW50cnkgPT4gZW50cnlbMF0gPT09IChwYXJzZUludChvcGNvZGUpICYgMHhmMCkudG9TdHJpbmcoMTYpKVxyXG4gICAgaWYgKGZvdW5kKSB7XHJcbiAgICAgIHNjcmlwdCA9IG5ldyBmb3VuZFsxXVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhyb3cgVHlwZUVycm9yKGB1bmtub3duIFJhZG9uIG9wZXJhdG9yOiAke29wY29kZX1gKVxyXG4gICAgfVxyXG4gIH1cclxuICBpZiAob3Bjb2RlKSB7XHJcbiAgICBsZXQgb3BlcmF0b3IgPSBSYWRvbk9wZXJhdG9yc1tvcGNvZGVdLnNwbGl0KC8oPz1bQS1aXSkvKS5zbGljZSgxKS5qb2luKFwiXCIpXHJcbiAgICBvcGVyYXRvciA9IG9wZXJhdG9yLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgb3BlcmF0b3Iuc2xpY2UoMSlcclxuICAgIHN3aXRjaCAob3BlcmF0b3IpIHtcclxuICAgICAgY2FzZSBcImZpbHRlclwiOiBjYXNlIFwibWFwXCI6IGNhc2UgXCJzb3J0XCI6IGNhc2UgXCJhbHRlclwiOlxyXG4gICAgICAgIGNvbnN0IGlubmVyU2NyaXB0ID0gcGFyc2VTY3JpcHQoYXJncylcclxuICAgICAgICByZXR1cm4gc2NyaXB0W29wZXJhdG9yXShpbm5lclNjcmlwdCwgLi4uYXJncy5zbGljZSgxKSk7XHJcblxyXG4gICAgICAvLyBjYXNlIFwiYWx0ZXJcIjpcclxuICAgICAgLy8gICByZXR1cm4gc2NyaXB0W29wZXJhdG9yXShhcmdzWzBdLCBwYXJzZVNjcmlwdChhcmdzWzFdLCAuLi5hcmdzLnNsaWNlKDIpKSk7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBzY3JpcHRbb3BlcmF0b3JdKGFyZ3MpXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,3 @@
1
+ export * from "./nodes";
2
+ export * from "./provider";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/rpc/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA;AACvB,cAAc,YAAY,CAAA"}
@@ -0,0 +1,19 @@
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("./nodes"), exports);
18
+ __exportStar(require("./provider"), exports);
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3JwYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMENBQXVCO0FBQ3ZCLDZDQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL25vZGVzXCJcclxuZXhwb3J0ICogZnJvbSBcIi4vcHJvdmlkZXJcIlxyXG4iXX0=
@@ -0,0 +1,40 @@
1
+ import { PublicKey, PublicKeyHashString } from "../crypto/types";
2
+ import { IJsonRpcProvider, JsonRpcProvider } from "./provider";
3
+ import { Balance2, NodeStats, PeerAddr, SyncStatus } from "./types";
4
+ import { Epoch, HexString, Nonce } from "../types";
5
+ export interface IJsonRpcNodeFarm extends IJsonRpcProvider {
6
+ addresses(): Promise<Record<string, PublicKeyHashString>>;
7
+ balances(): Promise<Record<string, [PublicKeyHashString, Balance2]>>;
8
+ masterKeys(): Promise<Record<string, [PublicKeyHashString, string]>>;
9
+ publicKeys(): Promise<Record<string, [PublicKeyHashString, PublicKey]>>;
10
+ syncStatus(): Promise<Record<string, SyncStatus>>;
11
+ peers(validator?: PublicKeyHashString): Promise<Array<PeerAddr>>;
12
+ stats(): Promise<Record<string, NodeStats>>;
13
+ withdrawers(): Promise<Record<PublicKeyHashString, [BigInt, Nonce, number]>>;
14
+ addPeers(peers: Array<string>): Promise<Record<string, Boolean>>;
15
+ authorizeStakes(withdrawer: PublicKeyHashString): Promise<Record<string, [PublicKeyHashString, HexString]>>;
16
+ clearPeers(): Promise<Record<string, Boolean>>;
17
+ initializePeers(): Promise<Record<string, Boolean>>;
18
+ rewind(epoch: Epoch): Promise<Record<string, Boolean>>;
19
+ }
20
+ export declare class JsonRpcNodeFarm extends JsonRpcProvider implements IJsonRpcNodeFarm {
21
+ constructor(url?: string);
22
+ protected batchApiPkhMethod<T>(method: string, params?: any): Promise<Record<string, [PublicKeyHashString, T]>>;
23
+ protected batchApiPkhMethodNoPkh<T>(method: string, ...params: Array<any>): Promise<Record<string, [PublicKeyHashString, T]>>;
24
+ protected batchApiMethod<T>(method: string, params?: Array<any> | any): Promise<Record<string, T>>;
25
+ protected callApiMethod<T>(url: string, method: string, params?: Array<any> | any): Promise<Error | any>;
26
+ addresses(): Promise<Record<string, PublicKeyHashString>>;
27
+ balances(): Promise<Record<string, [PublicKeyHashString, Balance2]>>;
28
+ masterKeys(): Promise<Record<string, [PublicKeyHashString, string]>>;
29
+ publicKeys(): Promise<Record<string, [PublicKeyHashString, PublicKey]>>;
30
+ peers(): Promise<Array<PeerAddr>>;
31
+ stats(): Promise<Record<string, NodeStats>>;
32
+ syncStatus(): Promise<any>;
33
+ withdrawers(limit?: number, offset?: number): Promise<Record<PublicKeyHashString, [bigint, Nonce, number]>>;
34
+ addPeers(peers: Array<string>): Promise<Record<string, Boolean>>;
35
+ authorizeStakes(withdrawer: PublicKeyHashString): Promise<Record<string, [PublicKeyHashString, HexString]>>;
36
+ clearPeers(): Promise<Record<string, Boolean>>;
37
+ initializePeers(): Promise<Record<string, Boolean>>;
38
+ rewind(epoch: Epoch): Promise<Record<string, Boolean>>;
39
+ }
40
+ //# sourceMappingURL=nodes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nodes.d.ts","sourceRoot":"","sources":["../../../../src/lib/rpc/nodes.ts"],"names":[],"mappings":"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"}