@ledgerhq/vault-cli 0.67.0 → 0.67.1

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.
@@ -1,227 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- const fs_1 = __importDefault(require("fs"));
16
- const orderBy_1 = __importDefault(require("lodash/orderBy"));
17
- const chalk_1 = __importDefault(require("chalk"));
18
- const cli_table3_1 = __importDefault(require("cli-table3"));
19
- const uniq_1 = __importDefault(require("lodash/uniq"));
20
- const uniqBy_1 = __importDefault(require("lodash/uniqBy"));
21
- const vault_common_1 = require("@ledgerhq/vault-common");
22
- const gateOptions_1 = __importDefault(require("../gateOptions"));
23
- const lamOptions_1 = __importDefault(require("../lamOptions"));
24
- const cliOptions_1 = __importDefault(require("../cliOptions"));
25
- const logger_1 = __importDefault(require("../logger"));
26
- function stats(options) {
27
- return __awaiter(this, void 0, void 0, function* () {
28
- const manifest = "pool" in options
29
- ? (yield vault_common_1.recipeManifest(options.pool)).manifest
30
- : options.manifest;
31
- const { format } = options;
32
- const stats = computeStats(manifest);
33
- if (format === "table") {
34
- console.log("");
35
- console.log(chalk_1.default `{bold.green => Vault statistics}`);
36
- console.log("");
37
- console.log(chalk_1.default `{bold ${stats.users.nbOfAdmins}} Admins`);
38
- console.log(chalk_1.default `{bold ${stats.users.nbOfOperators}} Operators`);
39
- console.log(chalk_1.default `{bold ${stats.accounts.nbOfAccounts}} Accounts`);
40
- console.log("");
41
- console.log(aggregatedTable(stats.accounts.nbRulesByAccount, "Rules count by account", "# Accounts with this rules count"));
42
- console.log("");
43
- console.log(aggregatedTable(stats.accounts.nbStepsByRule, "Steps counts by rule", "# Rules with this steps count"));
44
- console.log("");
45
- console.log(aggregatedTable(stats.accounts.nbOperatorsByAccount, "Operators count by account", "# Accounts with this count of operators"));
46
- console.log("");
47
- console.log(aggregatedTable(stats.accounts.nbAccountsByOperator, "Accounts by operator", "# Operators with this count of accounts"));
48
- console.log("");
49
- }
50
- else if (format === "json") {
51
- console.log(JSON.stringify(stats));
52
- }
53
- else {
54
- throw new Error(`Unsupported format: ${format}`);
55
- }
56
- });
57
- }
58
- const aggregatedTable = (res, col1Label, col2Label) => {
59
- const table = new cli_table3_1.default({
60
- head: [col1Label, col2Label],
61
- colWidths: [28, 41],
62
- style: { head: ["blue", "bold"], border: ["grey"] },
63
- });
64
- table.push(...res.map((r) => [r.nb, r.count].map((content) => ({ hAlign: "right", content }))));
65
- return table.toString();
66
- };
67
- const computeStats = (manifest) => {
68
- var _a, _b;
69
- const { accounts, users } = manifest;
70
- return {
71
- users: {
72
- nbOfAdmins: 3 + (((_a = users === null || users === void 0 ? void 0 : users.admins) === null || _a === void 0 ? void 0 : _a.length) || 0),
73
- nbOfOperators: ((_b = users === null || users === void 0 ? void 0 : users.operators) === null || _b === void 0 ? void 0 : _b.length) || 0,
74
- },
75
- accounts: {
76
- nbOfAccounts: (accounts === null || accounts === void 0 ? void 0 : accounts.length) || 0,
77
- nbRulesByAccount: accounts
78
- ? computeNb(accounts, (acc) => { var _a; return ((_a = acc.rules) === null || _a === void 0 ? void 0 : _a.length) || 1; })
79
- : [],
80
- nbStepsByRule: accounts
81
- ? computeNb(flattenRules(accounts), (rules) => {
82
- const multiAuthRule = rules.find((r) => r.type === "MULTI_AUTHORIZATIONS");
83
- if (!multiAuthRule)
84
- return 0;
85
- return multiAuthRule.steps.length;
86
- })
87
- : [],
88
- nbOperatorsByAccount: accounts
89
- ? computeNb(accounts, (acc) => flattenAccountOperators(acc, manifest).length)
90
- : [],
91
- nbAccountsByOperator: (users === null || users === void 0 ? void 0 : users.operators)
92
- ? computeNb(users.operators, (op) => getAccessibleAccounts(op, manifest).length)
93
- : [],
94
- },
95
- };
96
- };
97
- const flattenRules = (accounts) => {
98
- const out = [];
99
- accounts.forEach((acc) => {
100
- if (acc.rules) {
101
- out.push(...acc.rules);
102
- }
103
- });
104
- return out;
105
- };
106
- const forEachMultiAuthRuleStep = (account, iteratee) => {
107
- var _a;
108
- (_a = account.rules) === null || _a === void 0 ? void 0 : _a.forEach((rulesSet) => {
109
- rulesSet.forEach((rule) => {
110
- if (rule.type !== "MULTI_AUTHORIZATIONS")
111
- return;
112
- rule.steps.forEach((step) => iteratee(step));
113
- });
114
- });
115
- };
116
- const getAccessibleAccounts = (op, manifest) => {
117
- var _a;
118
- const res = [];
119
- (_a = manifest.accounts) === null || _a === void 0 ? void 0 : _a.forEach((account) => {
120
- forEachMultiAuthRuleStep(account, (step) => {
121
- var _a;
122
- if ("group" in step) {
123
- const group = (_a = manifest.groups) === null || _a === void 0 ? void 0 : _a.find((group) => group.name === step.group);
124
- if (!group)
125
- return;
126
- if (group.users.find((u) => typeof op === "number" ? op === u : op.device === u))
127
- res.push(account);
128
- }
129
- else {
130
- if (step.users.find((u) => typeof op === "number" ? op === u : op.device === u))
131
- res.push(account);
132
- }
133
- });
134
- });
135
- return uniqBy_1.default(res, (account) => account.name);
136
- };
137
- const flattenAccountOperators = (account, manifest) => {
138
- const operators = [];
139
- forEachMultiAuthRuleStep(account, (step) => {
140
- var _a;
141
- if ("group" in step) {
142
- const group = (_a = manifest.groups) === null || _a === void 0 ? void 0 : _a.find((group) => group.name === step.group);
143
- if (!group)
144
- return;
145
- operators.push(...group.users);
146
- }
147
- else {
148
- operators.push(...step.users);
149
- }
150
- });
151
- return uniq_1.default(operators);
152
- };
153
- const computeNb = (list, iteratee) => {
154
- const res = {};
155
- list.forEach((item) => {
156
- const discriminant = iteratee(item);
157
- if (discriminant in res) {
158
- res[discriminant]++;
159
- }
160
- else {
161
- res[discriminant] = 1;
162
- }
163
- });
164
- const out = [];
165
- Object.keys(res).forEach((k) => {
166
- const r = res[k];
167
- if (typeof r === "undefined")
168
- throw new Error(`Can't get result for key ${k}`);
169
- out.push({ nb: Number(k), count: r });
170
- });
171
- return orderBy_1.default(out, ["count", "nb"], ["desc", "desc"]);
172
- };
173
- exports.default = {
174
- command: "stats",
175
- description: "Fetch statistics of target gate",
176
- help: [
177
- {
178
- header: "Examples",
179
- content: [
180
- chalk_1.default `$ ledger-vault stats --gate {blue $GATE_URL} --readOnlyUser {blue Bob}`,
181
- chalk_1.default `$ ledger-vault stats --manifest {blue my-manifest.json}`,
182
- ],
183
- },
184
- ],
185
- options: [
186
- {
187
- name: "manifest",
188
- description: "Use manifest file instead of fetching gate state",
189
- type: String,
190
- },
191
- {
192
- name: "format",
193
- alias: "f",
194
- type: String,
195
- typeLabel: "json",
196
- description: "Output format {grey (available: table, json)}",
197
- defaultValue: "table",
198
- },
199
- ...gateOptions_1.default,
200
- ...lamOptions_1.default,
201
- ...cliOptions_1.default,
202
- ],
203
- run: (options) => __awaiter(void 0, void 0, void 0, function* () {
204
- const { gate, salt, lam, networkDelay, readOnlyUser, manifest: manifestFilePath, format, } = options;
205
- if (manifestFilePath) {
206
- try {
207
- const manifest = JSON.parse(fs_1.default.readFileSync(manifestFilePath, "utf-8"));
208
- return stats({ manifest, format });
209
- }
210
- catch (err) {
211
- logger_1.default.error(err);
212
- logger_1.default.error("Invalid manifest file");
213
- }
214
- }
215
- else {
216
- const opts = {
217
- gate,
218
- salt,
219
- lam,
220
- readOnlyUser,
221
- };
222
- const pool = vault_common_1.createDevicesPool(Object.assign(Object.assign({}, opts), { lamURL: lam, networkDelay }));
223
- return stats({ pool, format });
224
- }
225
- }),
226
- };
227
- //# sourceMappingURL=stats.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/commands/stats.ts"],"names":[],"mappings":"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"}