@peac/cli 0.10.0 → 0.10.10

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 (57) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +78 -5
  3. package/dist/commands/conformance.d.ts +16 -0
  4. package/dist/commands/conformance.d.ts.map +1 -0
  5. package/dist/commands/samples.d.ts +17 -0
  6. package/dist/commands/samples.d.ts.map +1 -0
  7. package/dist/index.cjs +2257 -0
  8. package/dist/index.cjs.map +1 -0
  9. package/dist/index.mjs +2236 -0
  10. package/dist/index.mjs.map +1 -0
  11. package/dist/lib/conformance/digest.d.ts +64 -0
  12. package/dist/lib/conformance/digest.d.ts.map +1 -0
  13. package/dist/lib/conformance/index.d.ts +11 -0
  14. package/dist/lib/conformance/index.d.ts.map +1 -0
  15. package/dist/lib/conformance/manifest.d.ts +15 -0
  16. package/dist/lib/conformance/manifest.d.ts.map +1 -0
  17. package/dist/lib/conformance/profiles.d.ts +33 -0
  18. package/dist/lib/conformance/profiles.d.ts.map +1 -0
  19. package/dist/lib/conformance/types.d.ts +186 -0
  20. package/dist/lib/conformance/types.d.ts.map +1 -0
  21. package/dist/lib/conformance/validators.d.ts +27 -0
  22. package/dist/lib/conformance/validators.d.ts.map +1 -0
  23. package/dist/lib/conformance-runner.d.ts +29 -0
  24. package/dist/lib/conformance-runner.d.ts.map +1 -0
  25. package/dist/lib/samples-loader.d.ts +44 -0
  26. package/dist/lib/samples-loader.d.ts.map +1 -0
  27. package/dist/lib/version.d.ts +22 -0
  28. package/dist/lib/version.d.ts.map +1 -0
  29. package/package.json +27 -13
  30. package/dist/cli.js +0 -90
  31. package/dist/cli.js.map +0 -1
  32. package/dist/commands/bridge/index.js +0 -20
  33. package/dist/commands/bridge/index.js.map +0 -1
  34. package/dist/commands/bridge/install.js +0 -27
  35. package/dist/commands/bridge/install.js.map +0 -1
  36. package/dist/commands/bridge/start.js +0 -123
  37. package/dist/commands/bridge/start.js.map +0 -1
  38. package/dist/commands/bridge/status.js +0 -192
  39. package/dist/commands/bridge/status.js.map +0 -1
  40. package/dist/commands/bridge/stop.js +0 -130
  41. package/dist/commands/bridge/stop.js.map +0 -1
  42. package/dist/commands/bundle.js +0 -363
  43. package/dist/commands/bundle.js.map +0 -1
  44. package/dist/commands/discover.js +0 -39
  45. package/dist/commands/discover.js.map +0 -1
  46. package/dist/commands/hash.js +0 -106
  47. package/dist/commands/hash.js.map +0 -1
  48. package/dist/commands/policy.js +0 -712
  49. package/dist/commands/policy.js.map +0 -1
  50. package/dist/commands/verify.js +0 -50
  51. package/dist/commands/verify.js.map +0 -1
  52. package/dist/index.js +0 -217
  53. package/dist/index.js.map +0 -1
  54. package/dist/types.js +0 -6
  55. package/dist/types.js.map +0 -1
  56. package/dist/utils.js +0 -101
  57. package/dist/utils.js.map +0 -1
@@ -1,363 +0,0 @@
1
- "use strict";
2
- /**
3
- * PEAC Bundle CLI Commands (v0.9.30+)
4
- *
5
- * Commands for creating and verifying dispute bundles:
6
- * - create: Create a dispute bundle from receipts and keys
7
- * - verify: Verify a dispute bundle (offline by default)
8
- * - info: Show bundle manifest information
9
- *
10
- * Automation flags:
11
- * - --json: Machine-readable JSON output
12
- * - --online: Enable external key fetching (verify only, not yet implemented)
13
- */
14
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
15
- if (k2 === undefined) k2 = k;
16
- var desc = Object.getOwnPropertyDescriptor(m, k);
17
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
18
- desc = { enumerable: true, get: function() { return m[k]; } };
19
- }
20
- Object.defineProperty(o, k2, desc);
21
- }) : (function(o, m, k, k2) {
22
- if (k2 === undefined) k2 = k;
23
- o[k2] = m[k];
24
- }));
25
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
26
- Object.defineProperty(o, "default", { enumerable: true, value: v });
27
- }) : function(o, v) {
28
- o["default"] = v;
29
- });
30
- var __importStar = (this && this.__importStar) || (function () {
31
- var ownKeys = function(o) {
32
- ownKeys = Object.getOwnPropertyNames || function (o) {
33
- var ar = [];
34
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
35
- return ar;
36
- };
37
- return ownKeys(o);
38
- };
39
- return function (mod) {
40
- if (mod && mod.__esModule) return mod;
41
- var result = {};
42
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
43
- __setModuleDefault(result, mod);
44
- return result;
45
- };
46
- })();
47
- Object.defineProperty(exports, "__esModule", { value: true });
48
- exports.bundleCommand = void 0;
49
- const commander_1 = require("commander");
50
- const fs = __importStar(require("fs"));
51
- const path = __importStar(require("path"));
52
- const audit_1 = require("@peac/audit");
53
- /**
54
- * Get global options from parent command
55
- */
56
- function getGlobalOptions(cmd) {
57
- const parent = cmd.parent;
58
- if (!parent)
59
- return {};
60
- return parent.opts();
61
- }
62
- /**
63
- * Output result - handles JSON vs human-readable format
64
- */
65
- function output(data, opts, humanMessage) {
66
- if (opts.json) {
67
- console.log(JSON.stringify(data, null, 2));
68
- }
69
- else if (humanMessage) {
70
- console.log(humanMessage);
71
- }
72
- }
73
- /**
74
- * Output error - handles JSON vs human-readable format
75
- */
76
- function outputError(error, details, opts) {
77
- if (opts.json) {
78
- console.log(JSON.stringify({ success: false, error, ...details }, null, 2));
79
- }
80
- else {
81
- console.error(`Error: ${error}`);
82
- if (details.code) {
83
- console.error(`Code: ${details.code}`);
84
- }
85
- }
86
- }
87
- /**
88
- * Read receipts from a directory or files
89
- */
90
- function readReceipts(receiptsPath) {
91
- const receipts = [];
92
- const stat = fs.statSync(receiptsPath);
93
- if (stat.isDirectory()) {
94
- // Read all .jws files in directory
95
- const files = fs.readdirSync(receiptsPath);
96
- for (const file of files) {
97
- if (file.endsWith('.jws')) {
98
- const content = fs.readFileSync(path.join(receiptsPath, file), 'utf8').trim();
99
- receipts.push(content);
100
- }
101
- }
102
- }
103
- else {
104
- // Single file - read it
105
- const content = fs.readFileSync(receiptsPath, 'utf8').trim();
106
- receipts.push(content);
107
- }
108
- return receipts;
109
- }
110
- /**
111
- * Read JWKS from file
112
- */
113
- function readJwks(keysPath) {
114
- const content = fs.readFileSync(keysPath, 'utf8');
115
- return JSON.parse(content);
116
- }
117
- const bundle = new commander_1.Command('bundle').description('Dispute bundle operations (v0.9.30+)');
118
- exports.bundleCommand = bundle;
119
- /**
120
- * peac bundle create --dispute <ref> --receipts <path> --keys <file> [--policy <file>] -o <output>
121
- */
122
- bundle
123
- .command('create')
124
- .description('Create a dispute bundle from receipts and keys')
125
- .requiredOption('-d, --dispute <ref>', 'Dispute reference (ULID)')
126
- .requiredOption('-r, --receipts <path>', 'Path to receipts (directory or file)')
127
- .requiredOption('-k, --keys <file>', 'Path to JWKS file with public keys')
128
- .option('-p, --policy <file>', 'Path to policy YAML file')
129
- .option('-c, --created-by <uri>', 'Creator URI (default: cli)')
130
- .requiredOption('-o, --output <file>', 'Output bundle file path')
131
- .option('--bundle-id <id>', 'Custom bundle ID (generated if not provided)')
132
- .action(async (options, cmd) => {
133
- const globalOpts = getGlobalOptions(cmd);
134
- try {
135
- // Validate input paths exist
136
- if (!fs.existsSync(options.receipts)) {
137
- outputError('Receipts path not found', { path: options.receipts }, globalOpts);
138
- process.exit(1);
139
- }
140
- if (!fs.existsSync(options.keys)) {
141
- outputError('JWKS file not found', { path: options.keys }, globalOpts);
142
- process.exit(1);
143
- }
144
- // Read inputs
145
- const receipts = readReceipts(options.receipts);
146
- const keys = readJwks(options.keys);
147
- if (receipts.length === 0) {
148
- outputError('No receipts found', { path: options.receipts }, globalOpts);
149
- process.exit(1);
150
- }
151
- // Read policy if provided
152
- let policy;
153
- if (options.policy) {
154
- if (!fs.existsSync(options.policy)) {
155
- outputError('Policy file not found', { path: options.policy }, globalOpts);
156
- process.exit(1);
157
- }
158
- policy = fs.readFileSync(options.policy, 'utf8');
159
- }
160
- // Create bundle
161
- const createOptions = {
162
- dispute_ref: options.dispute,
163
- created_by: options.createdBy ?? 'peac-cli',
164
- receipts,
165
- keys,
166
- policy,
167
- bundle_id: options.bundleId,
168
- };
169
- const result = await (0, audit_1.createDisputeBundle)(createOptions);
170
- if (!result.ok) {
171
- outputError(result.error.message, { code: result.error.code }, globalOpts);
172
- process.exit(1);
173
- }
174
- // Write output
175
- fs.writeFileSync(options.output, result.value);
176
- // Read back to get manifest info
177
- const readResult = await (0, audit_1.readDisputeBundle)(result.value);
178
- if (readResult.ok) {
179
- const manifest = readResult.value.manifest;
180
- output({
181
- success: true,
182
- bundle_id: manifest.bundle_id,
183
- content_hash: manifest.content_hash,
184
- receipts_count: manifest.receipts.length,
185
- keys_count: manifest.keys.length,
186
- output_path: options.output,
187
- }, globalOpts, `Bundle created successfully:
188
- Bundle ID: ${manifest.bundle_id}
189
- Content hash: ${manifest.content_hash}
190
- Receipts: ${manifest.receipts.length}
191
- Keys: ${manifest.keys.length}
192
- Output: ${options.output}`);
193
- }
194
- else {
195
- output({ success: true, output_path: options.output }, globalOpts, `Bundle created: ${options.output}`);
196
- }
197
- process.exit(0);
198
- }
199
- catch (err) {
200
- outputError(err.message, {}, globalOpts);
201
- process.exit(1);
202
- }
203
- });
204
- /**
205
- * peac bundle verify <bundle> [--online] [--output <file>] [--format json|text]
206
- *
207
- * NOTE: Verification is OFFLINE by default - uses only keys bundled in the archive.
208
- * Use --online to enable external key fetching (not yet implemented).
209
- */
210
- bundle
211
- .command('verify')
212
- .description('Verify a dispute bundle (offline by default)')
213
- .argument('<bundle>', 'Path to bundle ZIP file')
214
- .option('--online', 'Allow external key fetching (not yet implemented)', false)
215
- .option('-o, --output <file>', 'Output report to file')
216
- .option('-f, --format <format>', 'Output format: json or text', 'text')
217
- .action(async (bundlePath, options, cmd) => {
218
- const globalOpts = getGlobalOptions(cmd);
219
- try {
220
- // Validate bundle exists
221
- if (!fs.existsSync(bundlePath)) {
222
- outputError('Bundle file not found', { path: bundlePath }, globalOpts);
223
- process.exit(1);
224
- }
225
- // Read bundle
226
- const zipBuffer = fs.readFileSync(bundlePath);
227
- // Verify bundle - offline by default, online if explicitly requested
228
- const offline = !options.online;
229
- const result = await (0, audit_1.verifyBundle)(zipBuffer, { offline });
230
- if (!result.ok) {
231
- outputError(result.error.message, { code: result.error.code }, globalOpts);
232
- process.exit(1);
233
- }
234
- const report = result.value;
235
- // Format output
236
- let outputContent;
237
- if (options.format === 'json' || globalOpts.json) {
238
- outputContent = (0, audit_1.serializeReport)(report, true);
239
- }
240
- else {
241
- outputContent = (0, audit_1.formatReportText)(report);
242
- }
243
- // Write to file or stdout
244
- if (options.output) {
245
- fs.writeFileSync(options.output, outputContent);
246
- output({
247
- success: true,
248
- report_hash: report.report_hash,
249
- summary: report.summary,
250
- recommendation: report.auditor_summary.recommendation,
251
- output_path: options.output,
252
- }, globalOpts, `Verification complete:
253
- ${report.auditor_summary.headline}
254
- Recommendation: ${report.auditor_summary.recommendation.toUpperCase()}
255
- Report hash: ${report.report_hash}
256
- Report saved to: ${options.output}`);
257
- }
258
- else if (globalOpts.json) {
259
- // JSON to stdout
260
- console.log(outputContent);
261
- }
262
- else {
263
- // Text to stdout
264
- console.log(outputContent);
265
- }
266
- // Exit code based on recommendation
267
- const exitCode = report.auditor_summary.recommendation === 'valid' ? 0 : 1;
268
- process.exit(exitCode);
269
- }
270
- catch (err) {
271
- outputError(err.message, {}, globalOpts);
272
- process.exit(1);
273
- }
274
- });
275
- /**
276
- * peac bundle info <bundle>
277
- */
278
- bundle
279
- .command('info')
280
- .description('Show bundle manifest information')
281
- .argument('<bundle>', 'Path to bundle ZIP file')
282
- .action(async (bundlePath, options, cmd) => {
283
- const globalOpts = getGlobalOptions(cmd);
284
- try {
285
- // Validate bundle exists
286
- if (!fs.existsSync(bundlePath)) {
287
- outputError('Bundle file not found', { path: bundlePath }, globalOpts);
288
- process.exit(1);
289
- }
290
- // Read bundle
291
- const zipBuffer = fs.readFileSync(bundlePath);
292
- const result = await (0, audit_1.readDisputeBundle)(zipBuffer);
293
- if (!result.ok) {
294
- outputError(result.error.message, { code: result.error.code }, globalOpts);
295
- process.exit(1);
296
- }
297
- const { manifest, receipts, keys, policy } = result.value;
298
- if (globalOpts.json) {
299
- console.log(JSON.stringify({
300
- success: true,
301
- manifest: {
302
- version: manifest.version,
303
- bundle_id: manifest.bundle_id,
304
- dispute_ref: manifest.dispute_ref,
305
- created_by: manifest.created_by,
306
- created_at: manifest.created_at,
307
- time_range: manifest.time_range,
308
- content_hash: manifest.content_hash,
309
- receipts_count: manifest.receipts.length,
310
- keys_count: manifest.keys.length,
311
- has_policy: !!policy,
312
- },
313
- }, null, 2));
314
- }
315
- else {
316
- console.log(`PEAC Dispute Bundle Info
317
- ========================
318
-
319
- Version: ${manifest.version}
320
- Bundle ID: ${manifest.bundle_id}
321
- Dispute Ref: ${manifest.dispute_ref}
322
- Created By: ${manifest.created_by}
323
- Created At: ${manifest.created_at}
324
-
325
- Time Range
326
- ----------
327
- Start: ${manifest.time_range.start}
328
- End: ${manifest.time_range.end}
329
-
330
- Contents
331
- --------
332
- Receipts: ${manifest.receipts.length}
333
- Keys: ${keys.keys.length}
334
- Policy: ${policy ? 'Yes' : 'No'}
335
-
336
- Integrity
337
- ---------
338
- Content Hash: ${manifest.content_hash}
339
- `);
340
- // List receipts
341
- if (manifest.receipts.length > 0) {
342
- console.log('Receipts:');
343
- for (const receipt of manifest.receipts) {
344
- console.log(` - ${receipt.receipt_id} (${receipt.issued_at})`);
345
- }
346
- console.log('');
347
- }
348
- // List keys
349
- if (manifest.keys.length > 0) {
350
- console.log('Keys:');
351
- for (const key of manifest.keys) {
352
- console.log(` - ${key.kid} (${key.alg})`);
353
- }
354
- }
355
- }
356
- process.exit(0);
357
- }
358
- catch (err) {
359
- outputError(err.message, {}, globalOpts);
360
- process.exit(1);
361
- }
362
- });
363
- //# sourceMappingURL=bundle.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../src/commands/bundle.ts"],"names":[],"mappings":"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"}
@@ -1,39 +0,0 @@
1
- "use strict";
2
- /**
3
- * peac discover <url> command
4
- * Thin wrapper around @peac/disc for discovery
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.DiscoverCommand = void 0;
8
- const disc_1 = require("@peac/disc");
9
- const utils_js_1 = require("../utils.js");
10
- class DiscoverCommand {
11
- async execute(url, options = {}) {
12
- const timer = (0, utils_js_1.timing)();
13
- try {
14
- const parsedUrl = new URL(url);
15
- if (!['http:', 'https:'].includes(parsedUrl.protocol)) {
16
- throw new Error('URL must use http: or https: protocol');
17
- }
18
- const discoveryResult = await (0, disc_1.discover)(url);
19
- // Assert peac.txt ≤ 20 lines if present
20
- if (discoveryResult?.data) {
21
- // The discover function from @peac/disc returns a ParseResult
22
- // We'll just validate line count if needed at the API level
23
- }
24
- return {
25
- success: true,
26
- data: discoveryResult,
27
- timing: timer.end(),
28
- };
29
- }
30
- catch (error) {
31
- return {
32
- ...(0, utils_js_1.handleError)(error),
33
- timing: timer.end(),
34
- };
35
- }
36
- }
37
- }
38
- exports.DiscoverCommand = DiscoverCommand;
39
- //# sourceMappingURL=discover.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"discover.js","sourceRoot":"","sources":["../../src/commands/discover.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,qCAAsC;AAEtC,0CAAkD;AAElD,MAAa,eAAe;IAC1B,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,UAAsB,EAAE;QACjD,MAAM,KAAK,GAAG,IAAA,iBAAM,GAAE,CAAC;QAEvB,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;YAC/B,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACtD,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;YAC3D,CAAC;YAED,MAAM,eAAe,GAAG,MAAM,IAAA,eAAQ,EAAC,GAAG,CAAC,CAAC;YAE5C,wCAAwC;YACxC,IAAI,eAAe,EAAE,IAAI,EAAE,CAAC;gBAC1B,8DAA8D;gBAC9D,4DAA4D;YAC9D,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,eAAe;gBACrB,MAAM,EAAE,KAAK,CAAC,GAAG,EAAE;aACpB,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,GAAG,IAAA,sBAAW,EAAC,KAAc,CAAC;gBAC9B,MAAM,EAAE,KAAK,CAAC,GAAG,EAAE;aACpB,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AA9BD,0CA8BC"}
@@ -1,106 +0,0 @@
1
- "use strict";
2
- /**
3
- * peac hash <policy.json> command
4
- * Canonical digest computation using JCS
5
- */
6
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
- if (k2 === undefined) k2 = k;
8
- var desc = Object.getOwnPropertyDescriptor(m, k);
9
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
- desc = { enumerable: true, get: function() { return m[k]; } };
11
- }
12
- Object.defineProperty(o, k2, desc);
13
- }) : (function(o, m, k, k2) {
14
- if (k2 === undefined) k2 = k;
15
- o[k2] = m[k];
16
- }));
17
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
- Object.defineProperty(o, "default", { enumerable: true, value: v });
19
- }) : function(o, v) {
20
- o["default"] = v;
21
- });
22
- var __importStar = (this && this.__importStar) || (function () {
23
- var ownKeys = function(o) {
24
- ownKeys = Object.getOwnPropertyNames || function (o) {
25
- var ar = [];
26
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
- return ar;
28
- };
29
- return ownKeys(o);
30
- };
31
- return function (mod) {
32
- if (mod && mod.__esModule) return mod;
33
- var result = {};
34
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
- __setModuleDefault(result, mod);
36
- return result;
37
- };
38
- })();
39
- Object.defineProperty(exports, "__esModule", { value: true });
40
- exports.HashCommand = void 0;
41
- const promises_1 = require("fs/promises");
42
- const utils_js_1 = require("../utils.js");
43
- class HashCommand {
44
- async execute(policyPath, options = {}) {
45
- const timer = (0, utils_js_1.timing)();
46
- try {
47
- // Read and parse policy file
48
- const policyContent = await (0, promises_1.readFile)(policyPath, 'utf-8');
49
- const policy = JSON.parse(policyContent);
50
- // Compute canonical hash using @peac/crypto
51
- const { jcsHash } = await Promise.resolve().then(() => __importStar(require('@peac/crypto')));
52
- const digest = await jcsHash(policy);
53
- const result = {
54
- algorithm: 'SHA-256',
55
- format: 'JCS',
56
- digest,
57
- input_size: Buffer.byteLength(policyContent, 'utf-8'),
58
- };
59
- return {
60
- success: true,
61
- data: result,
62
- timing: timer.end(),
63
- };
64
- }
65
- catch (error) {
66
- return {
67
- ...(0, utils_js_1.handleError)(error),
68
- timing: timer.end(),
69
- };
70
- }
71
- }
72
- async executeFromStdin(options = {}) {
73
- const timer = (0, utils_js_1.timing)();
74
- try {
75
- // Read from stdin
76
- const chunks = [];
77
- for await (const chunk of process.stdin) {
78
- chunks.push(chunk);
79
- }
80
- const policyContent = Buffer.concat(chunks).toString('utf-8');
81
- const policy = JSON.parse(policyContent);
82
- // Compute canonical hash using @peac/crypto
83
- const { jcsHash } = await Promise.resolve().then(() => __importStar(require('@peac/crypto')));
84
- const digest = await jcsHash(policy);
85
- const result = {
86
- algorithm: 'SHA-256',
87
- format: 'JCS',
88
- digest,
89
- input_size: Buffer.byteLength(policyContent, 'utf-8'),
90
- };
91
- return {
92
- success: true,
93
- data: result,
94
- timing: timer.end(),
95
- };
96
- }
97
- catch (error) {
98
- return {
99
- ...(0, utils_js_1.handleError)(error),
100
- timing: timer.end(),
101
- };
102
- }
103
- }
104
- }
105
- exports.HashCommand = HashCommand;
106
- //# sourceMappingURL=hash.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hash.js","sourceRoot":"","sources":["../../src/commands/hash.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,0CAAuC;AAEvC,0CAAkD;AAElD,MAAa,WAAW;IACtB,KAAK,CAAC,OAAO,CAAC,UAAkB,EAAE,UAAsB,EAAE;QACxD,MAAM,KAAK,GAAG,IAAA,iBAAM,GAAE,CAAC;QAEvB,IAAI,CAAC;YACH,6BAA6B;YAC7B,MAAM,aAAa,GAAG,MAAM,IAAA,mBAAQ,EAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAEzC,4CAA4C;YAC5C,MAAM,EAAE,OAAO,EAAE,GAAG,wDAAa,cAAc,GAAC,CAAC;YACjD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;YAErC,MAAM,MAAM,GAAe;gBACzB,SAAS,EAAE,SAAS;gBACpB,MAAM,EAAE,KAAK;gBACb,MAAM;gBACN,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,aAAa,EAAE,OAAO,CAAC;aACtD,CAAC;YAEF,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,MAAM;gBACZ,MAAM,EAAE,KAAK,CAAC,GAAG,EAAE;aACpB,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,GAAG,IAAA,sBAAW,EAAC,KAAc,CAAC;gBAC9B,MAAM,EAAE,KAAK,CAAC,GAAG,EAAE;aACpB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,UAAsB,EAAE;QAC7C,MAAM,KAAK,GAAG,IAAA,iBAAM,GAAE,CAAC;QAEvB,IAAI,CAAC;YACH,kBAAkB;YAClB,MAAM,MAAM,GAAiB,EAAE,CAAC;YAChC,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;gBACxC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC;YAED,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC9D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAEzC,4CAA4C;YAC5C,MAAM,EAAE,OAAO,EAAE,GAAG,wDAAa,cAAc,GAAC,CAAC;YACjD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;YAErC,MAAM,MAAM,GAAe;gBACzB,SAAS,EAAE,SAAS;gBACpB,MAAM,EAAE,KAAK;gBACb,MAAM;gBACN,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,aAAa,EAAE,OAAO,CAAC;aACtD,CAAC;YAEF,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,MAAM;gBACZ,MAAM,EAAE,KAAK,CAAC,GAAG,EAAE;aACpB,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,GAAG,IAAA,sBAAW,EAAC,KAAc,CAAC;gBAC9B,MAAM,EAAE,KAAK,CAAC,GAAG,EAAE;aACpB,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AArED,kCAqEC"}