@peac/cli 0.9.18
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.
- package/README.md +23 -0
- package/dist/cli.d.ts +7 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +87 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/bridge/index.d.ts +6 -0
- package/dist/commands/bridge/index.d.ts.map +1 -0
- package/dist/commands/bridge/index.js +20 -0
- package/dist/commands/bridge/index.js.map +1 -0
- package/dist/commands/bridge/install.d.ts +6 -0
- package/dist/commands/bridge/install.d.ts.map +1 -0
- package/dist/commands/bridge/install.js +27 -0
- package/dist/commands/bridge/install.js.map +1 -0
- package/dist/commands/bridge/start.d.ts +6 -0
- package/dist/commands/bridge/start.d.ts.map +1 -0
- package/dist/commands/bridge/start.js +123 -0
- package/dist/commands/bridge/start.js.map +1 -0
- package/dist/commands/bridge/status.d.ts +6 -0
- package/dist/commands/bridge/status.d.ts.map +1 -0
- package/dist/commands/bridge/status.js +192 -0
- package/dist/commands/bridge/status.js.map +1 -0
- package/dist/commands/bridge/stop.d.ts +6 -0
- package/dist/commands/bridge/stop.d.ts.map +1 -0
- package/dist/commands/bridge/stop.js +130 -0
- package/dist/commands/bridge/stop.js.map +1 -0
- package/dist/commands/discover.d.ts +9 -0
- package/dist/commands/discover.d.ts.map +1 -0
- package/dist/commands/discover.js +39 -0
- package/dist/commands/discover.js.map +1 -0
- package/dist/commands/hash.d.ts +10 -0
- package/dist/commands/hash.d.ts.map +1 -0
- package/dist/commands/hash.js +106 -0
- package/dist/commands/hash.js.map +1 -0
- package/dist/commands/policy.d.ts +13 -0
- package/dist/commands/policy.d.ts.map +1 -0
- package/dist/commands/policy.js +364 -0
- package/dist/commands/policy.js.map +1 -0
- package/dist/commands/verify.d.ts +13 -0
- package/dist/commands/verify.d.ts.map +1 -0
- package/dist/commands/verify.js +50 -0
- package/dist/commands/verify.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +213 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +49 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +16 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +101 -0
- package/dist/utils.js.map +1 -0
- package/package.json +48 -0
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* peac bridge stop - Stop the bridge server
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.stopCommand = stopCommand;
|
|
7
|
+
const commander_1 = require("commander");
|
|
8
|
+
const fs_1 = require("fs");
|
|
9
|
+
const path_1 = require("path");
|
|
10
|
+
const os_1 = require("os");
|
|
11
|
+
const child_process_1 = require("child_process");
|
|
12
|
+
// Windows-safe process termination
|
|
13
|
+
async function killProcess(pid, signal) {
|
|
14
|
+
return new Promise((resolve, reject) => {
|
|
15
|
+
if (process.platform === 'win32') {
|
|
16
|
+
// Use taskkill on Windows
|
|
17
|
+
const force = signal === 'SIGKILL' ? '/F' : '';
|
|
18
|
+
const taskkill = (0, child_process_1.spawn)('taskkill', ['/PID', pid.toString(), force].filter(Boolean));
|
|
19
|
+
taskkill.on('exit', (code) => {
|
|
20
|
+
if (code === 0 || code === 128) {
|
|
21
|
+
// 128 = process not found
|
|
22
|
+
resolve();
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
reject(new Error(`taskkill failed with code ${code}`));
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
taskkill.on('error', reject);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
// Use standard signals on Unix-like systems
|
|
32
|
+
try {
|
|
33
|
+
process.kill(pid, signal || 'SIGTERM');
|
|
34
|
+
resolve();
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
reject(error);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
function stopCommand() {
|
|
43
|
+
return new commander_1.Command('stop').description('Stop the PEAC Bridge').action(async () => {
|
|
44
|
+
const peacDir = (0, path_1.join)((0, os_1.homedir)(), '.peac');
|
|
45
|
+
const pidFile = (0, path_1.join)(peacDir, 'bridge.pid');
|
|
46
|
+
const configFile = (0, path_1.join)(peacDir, 'bridge.json');
|
|
47
|
+
// Check if PID file exists
|
|
48
|
+
if (!(0, fs_1.existsSync)(pidFile)) {
|
|
49
|
+
console.log('Bridge is not running (no PID file found)');
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
try {
|
|
53
|
+
// Read PID from file
|
|
54
|
+
const pidStr = (0, fs_1.readFileSync)(pidFile, 'utf-8').trim();
|
|
55
|
+
const pid = parseInt(pidStr, 10);
|
|
56
|
+
if (isNaN(pid)) {
|
|
57
|
+
console.error('Invalid PID in bridge.pid file');
|
|
58
|
+
(0, fs_1.unlinkSync)(pidFile);
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
// Check if process is running
|
|
62
|
+
try {
|
|
63
|
+
process.kill(pid, 0); // Signal 0 checks if process exists
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
if (error.code === 'ESRCH') {
|
|
67
|
+
console.log('Bridge process not found (cleaning up stale PID file)');
|
|
68
|
+
(0, fs_1.unlinkSync)(pidFile);
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
throw error;
|
|
72
|
+
}
|
|
73
|
+
// Stop the bridge process
|
|
74
|
+
console.log(`Stopping PEAC Bridge (PID: ${pid})`);
|
|
75
|
+
try {
|
|
76
|
+
// Try graceful shutdown first (SIGTERM)
|
|
77
|
+
await killProcess(pid, 'SIGTERM');
|
|
78
|
+
// Wait a moment for graceful shutdown
|
|
79
|
+
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
80
|
+
// Check if still running
|
|
81
|
+
try {
|
|
82
|
+
process.kill(pid, 0);
|
|
83
|
+
// Still running, force kill
|
|
84
|
+
console.log('Force stopping bridge process...');
|
|
85
|
+
await killProcess(pid, 'SIGKILL');
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
if (error.code === 'ESRCH') {
|
|
89
|
+
// Process stopped gracefully
|
|
90
|
+
console.log('Bridge stopped successfully');
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
if (error.code === 'ESRCH') {
|
|
96
|
+
console.log('Bridge stopped successfully');
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
console.error('Failed to stop bridge:', error.message);
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
// Clean up PID file
|
|
104
|
+
(0, fs_1.unlinkSync)(pidFile);
|
|
105
|
+
// Update config file
|
|
106
|
+
if ((0, fs_1.existsSync)(configFile)) {
|
|
107
|
+
try {
|
|
108
|
+
const config = JSON.parse((0, fs_1.readFileSync)(configFile, 'utf-8'));
|
|
109
|
+
delete config.pid;
|
|
110
|
+
delete config.started_at;
|
|
111
|
+
delete config.log_file;
|
|
112
|
+
config.stopped_at = new Date().toISOString();
|
|
113
|
+
(0, fs_1.writeFileSync)(configFile, JSON.stringify(config, null, 2));
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
// Config update failed, but bridge was stopped
|
|
117
|
+
console.warn('Failed to update config file, but bridge was stopped');
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
console.error('Failed to stop bridge:', error.message);
|
|
123
|
+
// Clean up potentially stale PID file
|
|
124
|
+
if ((0, fs_1.existsSync)(pidFile)) {
|
|
125
|
+
(0, fs_1.unlinkSync)(pidFile);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=stop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stop.js","sourceRoot":"","sources":["../../../src/commands/bridge/stop.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAsCH,kCA6FC;AAjID,yCAAoC;AACpC,2BAAyE;AACzE,+BAA4B;AAC5B,2BAA6B;AAC7B,iDAAsC;AAEtC,mCAAmC;AACnC,KAAK,UAAU,WAAW,CAAC,GAAW,EAAE,MAAe;IACrD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACjC,0BAA0B;YAC1B,MAAM,KAAK,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/C,MAAM,QAAQ,GAAG,IAAA,qBAAK,EAAC,UAAU,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;YAEpF,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;gBAC3B,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;oBAC/B,0BAA0B;oBAC1B,OAAO,EAAE,CAAC;gBACZ,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,IAAI,KAAK,CAAC,6BAA6B,IAAI,EAAE,CAAC,CAAC,CAAC;gBACzD,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,4CAA4C;YAC5C,IAAI,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,IAAI,SAAS,CAAC,CAAC;gBACvC,OAAO,EAAE,CAAC;YACZ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,CAAC;YAChB,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,WAAW;IACzB,OAAO,IAAI,mBAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;QAC/E,MAAM,OAAO,GAAG,IAAA,WAAI,EAAC,IAAA,YAAO,GAAE,EAAE,OAAO,CAAC,CAAC;QACzC,MAAM,OAAO,GAAG,IAAA,WAAI,EAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAC5C,MAAM,UAAU,GAAG,IAAA,WAAI,EAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QAEhD,2BAA2B;QAC3B,IAAI,CAAC,IAAA,eAAU,EAAC,OAAO,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;YACzD,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,qBAAqB;YACrB,MAAM,MAAM,GAAG,IAAA,iBAAY,EAAC,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;YACrD,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAEjC,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;gBAChD,IAAA,eAAU,EAAC,OAAO,CAAC,CAAC;gBACpB,OAAO;YACT,CAAC;YAED,8BAA8B;YAC9B,IAAI,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,oCAAoC;YAC5D,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBAC3B,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;oBACrE,IAAA,eAAU,EAAC,OAAO,CAAC,CAAC;oBACpB,OAAO;gBACT,CAAC;gBACD,MAAM,KAAK,CAAC;YACd,CAAC;YAED,0BAA0B;YAC1B,OAAO,CAAC,GAAG,CAAC,8BAA8B,GAAG,GAAG,CAAC,CAAC;YAElD,IAAI,CAAC;gBACH,wCAAwC;gBACxC,MAAM,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;gBAElC,sCAAsC;gBACtC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;gBAE1D,yBAAyB;gBACzB,IAAI,CAAC;oBACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;oBACrB,4BAA4B;oBAC5B,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;oBAChD,MAAM,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;gBACpC,CAAC;gBAAC,OAAO,KAAU,EAAE,CAAC;oBACpB,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;wBAC3B,6BAA6B;wBAC7B,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;oBAC7C,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBAC3B,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;gBAC7C,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;oBACvD,OAAO;gBACT,CAAC;YACH,CAAC;YAED,oBAAoB;YACpB,IAAA,eAAU,EAAC,OAAO,CAAC,CAAC;YAEpB,qBAAqB;YACrB,IAAI,IAAA,eAAU,EAAC,UAAU,CAAC,EAAE,CAAC;gBAC3B,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;oBAC7D,OAAO,MAAM,CAAC,GAAG,CAAC;oBAClB,OAAO,MAAM,CAAC,UAAU,CAAC;oBACzB,OAAO,MAAM,CAAC,QAAQ,CAAC;oBACvB,MAAM,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;oBAE7C,IAAA,kBAAa,EAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC7D,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,+CAA+C;oBAC/C,OAAO,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;gBACvE,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YAEvD,sCAAsC;YACtC,IAAI,IAAA,eAAU,EAAC,OAAO,CAAC,EAAE,CAAC;gBACxB,IAAA,eAAU,EAAC,OAAO,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* peac discover <url> command
|
|
3
|
+
* Thin wrapper around @peac/disc for discovery
|
|
4
|
+
*/
|
|
5
|
+
import type { CLIOptions, CommandResult } from '../types.js';
|
|
6
|
+
export declare class DiscoverCommand {
|
|
7
|
+
execute(url: string, options?: CLIOptions): Promise<CommandResult>;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=discover.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../src/commands/discover.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG7D,qBAAa,eAAe;IACpB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,UAAe,GAAG,OAAO,CAAC,aAAa,CAAC;CA6B7E"}
|
|
@@ -0,0 +1,39 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* peac hash <policy.json> command
|
|
3
|
+
* Canonical digest computation using JCS
|
|
4
|
+
*/
|
|
5
|
+
import type { CLIOptions, CommandResult } from '../types.js';
|
|
6
|
+
export declare class HashCommand {
|
|
7
|
+
execute(policyPath: string, options?: CLIOptions): Promise<CommandResult>;
|
|
8
|
+
executeFromStdin(options?: CLIOptions): Promise<CommandResult>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=hash.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../src/commands/hash.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAc,MAAM,aAAa,CAAC;AAGzE,qBAAa,WAAW;IAChB,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,GAAE,UAAe,GAAG,OAAO,CAAC,aAAa,CAAC;IAgC7E,gBAAgB,CAAC,OAAO,GAAE,UAAe,GAAG,OAAO,CAAC,aAAa,CAAC;CAoCzE"}
|
|
@@ -0,0 +1,106 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PEAC Policy CLI Commands
|
|
3
|
+
*
|
|
4
|
+
* Commands for managing policy files:
|
|
5
|
+
* - init: Create a new policy file
|
|
6
|
+
* - validate: Validate policy syntax and schema
|
|
7
|
+
* - explain: Debug rule matching
|
|
8
|
+
* - generate: Compile policy to deployment artifacts
|
|
9
|
+
*/
|
|
10
|
+
import { Command } from 'commander';
|
|
11
|
+
declare const policy: Command;
|
|
12
|
+
export { policy };
|
|
13
|
+
//# sourceMappingURL=policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../src/commands/policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyBpC,QAAA,MAAM,MAAM,SAA8D,CAAC;AAgX3E,OAAO,EAAE,MAAM,EAAE,CAAC"}
|