@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.
Files changed (54) hide show
  1. package/README.md +23 -0
  2. package/dist/cli.d.ts +7 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +87 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/commands/bridge/index.d.ts +6 -0
  7. package/dist/commands/bridge/index.d.ts.map +1 -0
  8. package/dist/commands/bridge/index.js +20 -0
  9. package/dist/commands/bridge/index.js.map +1 -0
  10. package/dist/commands/bridge/install.d.ts +6 -0
  11. package/dist/commands/bridge/install.d.ts.map +1 -0
  12. package/dist/commands/bridge/install.js +27 -0
  13. package/dist/commands/bridge/install.js.map +1 -0
  14. package/dist/commands/bridge/start.d.ts +6 -0
  15. package/dist/commands/bridge/start.d.ts.map +1 -0
  16. package/dist/commands/bridge/start.js +123 -0
  17. package/dist/commands/bridge/start.js.map +1 -0
  18. package/dist/commands/bridge/status.d.ts +6 -0
  19. package/dist/commands/bridge/status.d.ts.map +1 -0
  20. package/dist/commands/bridge/status.js +192 -0
  21. package/dist/commands/bridge/status.js.map +1 -0
  22. package/dist/commands/bridge/stop.d.ts +6 -0
  23. package/dist/commands/bridge/stop.d.ts.map +1 -0
  24. package/dist/commands/bridge/stop.js +130 -0
  25. package/dist/commands/bridge/stop.js.map +1 -0
  26. package/dist/commands/discover.d.ts +9 -0
  27. package/dist/commands/discover.d.ts.map +1 -0
  28. package/dist/commands/discover.js +39 -0
  29. package/dist/commands/discover.js.map +1 -0
  30. package/dist/commands/hash.d.ts +10 -0
  31. package/dist/commands/hash.d.ts.map +1 -0
  32. package/dist/commands/hash.js +106 -0
  33. package/dist/commands/hash.js.map +1 -0
  34. package/dist/commands/policy.d.ts +13 -0
  35. package/dist/commands/policy.d.ts.map +1 -0
  36. package/dist/commands/policy.js +364 -0
  37. package/dist/commands/policy.js.map +1 -0
  38. package/dist/commands/verify.d.ts +13 -0
  39. package/dist/commands/verify.d.ts.map +1 -0
  40. package/dist/commands/verify.js +50 -0
  41. package/dist/commands/verify.js.map +1 -0
  42. package/dist/index.d.ts +7 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +213 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/types.d.ts +49 -0
  47. package/dist/types.d.ts.map +1 -0
  48. package/dist/types.js +6 -0
  49. package/dist/types.js.map +1 -0
  50. package/dist/utils.d.ts +16 -0
  51. package/dist/utils.d.ts.map +1 -0
  52. package/dist/utils.js +101 -0
  53. package/dist/utils.js.map +1 -0
  54. 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":"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"}
@@ -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"}