@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
package/dist/index.js ADDED
@@ -0,0 +1,213 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /**
4
+ * PEAC Protocol CLI
5
+ * Command-line tools for receipt verification and conformance testing
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
20
+ }) : function(o, v) {
21
+ o["default"] = v;
22
+ });
23
+ var __importStar = (this && this.__importStar) || (function () {
24
+ var ownKeys = function(o) {
25
+ ownKeys = Object.getOwnPropertyNames || function (o) {
26
+ var ar = [];
27
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
+ return ar;
29
+ };
30
+ return ownKeys(o);
31
+ };
32
+ return function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ })();
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ const commander_1 = require("commander");
42
+ const protocol_1 = require("@peac/protocol");
43
+ const protocol_2 = require("@peac/protocol");
44
+ const crypto_1 = require("@peac/crypto");
45
+ const fs = __importStar(require("fs"));
46
+ const policy_1 = require("./commands/policy");
47
+ const program = new commander_1.Command();
48
+ program.name('peac').description('PEAC protocol command-line tools').version('0.9.15');
49
+ /**
50
+ * peac verify <jws>
51
+ */
52
+ program
53
+ .command('verify')
54
+ .description('Verify a PEAC receipt JWS')
55
+ .argument('<jws>', 'JWS compact serialization or path to file containing JWS')
56
+ .option('-v, --verbose', 'Show detailed output')
57
+ .action(async (jwsInput, options) => {
58
+ try {
59
+ // Check if input is a file path
60
+ let jws = jwsInput;
61
+ if (fs.existsSync(jwsInput)) {
62
+ jws = fs.readFileSync(jwsInput, 'utf-8').trim();
63
+ }
64
+ console.log('Verifying PEAC receipt...\n');
65
+ // First, decode to show receipt info
66
+ const { header, payload } = (0, crypto_1.decode)(jws);
67
+ console.log('Receipt Information:');
68
+ console.log(` Receipt ID: ${payload.rid}`);
69
+ console.log(` Issuer: ${payload.iss}`);
70
+ console.log(` Audience: ${payload.aud}`);
71
+ console.log(` Amount: ${payload.amt} ${payload.cur}`);
72
+ console.log(` Payment: ${payload.payment.rail} (${payload.payment.reference})`);
73
+ console.log(` Issued: ${new Date(payload.iat * 1000).toISOString()}`);
74
+ if (payload.exp) {
75
+ console.log(` Expires: ${new Date(payload.exp * 1000).toISOString()}`);
76
+ }
77
+ console.log();
78
+ // Verify signature
79
+ console.log('Verifying signature...');
80
+ const result = await (0, protocol_1.verifyReceipt)(jws);
81
+ if (result.ok) {
82
+ console.log('Signature valid!');
83
+ if (result.perf) {
84
+ console.log(` Verification time: ${result.perf.verify_ms.toFixed(2)}ms`);
85
+ if (result.perf.jwks_fetch_ms) {
86
+ console.log(` JWKS fetch time: ${result.perf.jwks_fetch_ms.toFixed(2)}ms`);
87
+ }
88
+ }
89
+ process.exit(0);
90
+ }
91
+ else {
92
+ console.log(`Verification failed: ${result.reason}`);
93
+ if (result.details) {
94
+ console.log(` Details: ${result.details}`);
95
+ }
96
+ process.exit(1);
97
+ }
98
+ }
99
+ catch (err) {
100
+ console.error('Error:', err instanceof Error ? err.message : String(err));
101
+ process.exit(1);
102
+ }
103
+ });
104
+ /**
105
+ * peac validate-discovery <path|url>
106
+ */
107
+ program
108
+ .command('validate-discovery')
109
+ .description('Validate a PEAC discovery manifest')
110
+ .argument('<input>', 'Path to peac.txt file or issuer URL')
111
+ .action(async (input) => {
112
+ try {
113
+ console.log('Validating discovery manifest...\n');
114
+ let discovery;
115
+ if (input.startsWith('http://') || input.startsWith('https://')) {
116
+ // Fetch from URL
117
+ console.log(`Fetching from ${input}...`);
118
+ discovery = await (0, protocol_2.fetchDiscovery)(input);
119
+ }
120
+ else {
121
+ // Read from file
122
+ const text = fs.readFileSync(input, 'utf-8');
123
+ discovery = (0, protocol_2.parseDiscovery)(text);
124
+ }
125
+ console.log('Discovery manifest is valid!\n');
126
+ console.log('Discovery Information:');
127
+ console.log(` Version: ${discovery.version}`);
128
+ console.log(` Issuer: ${discovery.issuer}`);
129
+ console.log(` Verify: ${discovery.verify}`);
130
+ console.log(` JWKS: ${discovery.jwks}`);
131
+ if (discovery.payments && discovery.payments.length > 0) {
132
+ console.log(` Payments: ${discovery.payments.map((p) => p.rail).join(', ')}`);
133
+ }
134
+ if (discovery.aipref) {
135
+ console.log(` AIPREF: ${discovery.aipref}`);
136
+ }
137
+ if (discovery.slos) {
138
+ console.log(` SLOs: ${discovery.slos}`);
139
+ }
140
+ if (discovery.security) {
141
+ console.log(` Security: ${discovery.security}`);
142
+ }
143
+ process.exit(0);
144
+ }
145
+ catch (err) {
146
+ console.error('Error:', err instanceof Error ? err.message : String(err));
147
+ process.exit(1);
148
+ }
149
+ });
150
+ /**
151
+ * peac decode <jws>
152
+ */
153
+ program
154
+ .command('decode')
155
+ .description('Decode a PEAC receipt JWS (without verification)')
156
+ .argument('<jws>', 'JWS compact serialization or path to file containing JWS')
157
+ .option('--json', 'Output as JSON')
158
+ .action((jwsInput, options) => {
159
+ try {
160
+ // Check if input is a file path
161
+ let jws = jwsInput;
162
+ if (fs.existsSync(jwsInput)) {
163
+ jws = fs.readFileSync(jwsInput, 'utf-8').trim();
164
+ }
165
+ const { header, payload } = (0, crypto_1.decode)(jws);
166
+ if (options.json) {
167
+ console.log(JSON.stringify({ header, payload }, null, 2));
168
+ }
169
+ else {
170
+ console.log('PEAC Receipt (Decoded, Not Verified)\n');
171
+ console.log('Header:');
172
+ console.log(` typ: ${header.typ}`);
173
+ console.log(` alg: ${header.alg}`);
174
+ console.log(` kid: ${header.kid}`);
175
+ console.log();
176
+ console.log('Claims:');
177
+ console.log(` iss: ${payload.iss}`);
178
+ console.log(` aud: ${payload.aud}`);
179
+ console.log(` iat: ${payload.iat} (${new Date(payload.iat * 1000).toISOString()})`);
180
+ if (payload.exp) {
181
+ console.log(` exp: ${payload.exp} (${new Date(payload.exp * 1000).toISOString()})`);
182
+ }
183
+ console.log(` rid: ${payload.rid}`);
184
+ console.log(` amt: ${payload.amt}`);
185
+ console.log(` cur: ${payload.cur}`);
186
+ console.log();
187
+ console.log('Payment:');
188
+ console.log(` rail: ${payload.payment.rail}`);
189
+ console.log(` reference: ${payload.payment.reference}`);
190
+ console.log(` amount: ${payload.payment.amount}`);
191
+ console.log(` currency: ${payload.payment.currency}`);
192
+ if (payload.subject) {
193
+ console.log();
194
+ console.log('Subject:');
195
+ console.log(` uri: ${payload.subject.uri}`);
196
+ }
197
+ if (payload.ext) {
198
+ console.log();
199
+ console.log('Extensions:');
200
+ console.log(JSON.stringify(payload.ext, null, 2));
201
+ }
202
+ }
203
+ process.exit(0);
204
+ }
205
+ catch (err) {
206
+ console.error('Error:', err instanceof Error ? err.message : String(err));
207
+ process.exit(1);
208
+ }
209
+ });
210
+ // Policy commands (v0.9.17+)
211
+ program.addCommand(policy_1.policy);
212
+ program.parse();
213
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Types for PEAC CLI
3
+ */
4
+ export interface CLIOptions {
5
+ verbose?: boolean;
6
+ json?: boolean;
7
+ timeout?: number;
8
+ }
9
+ export interface CommandResult {
10
+ success: boolean;
11
+ data?: any;
12
+ error?: string;
13
+ timing?: {
14
+ started: number;
15
+ completed: number;
16
+ duration: number;
17
+ };
18
+ }
19
+ export interface DiscoverResult {
20
+ url: string;
21
+ sources: Array<{
22
+ type: 'aipref' | 'agent-permissions' | 'peac.txt';
23
+ url: string;
24
+ status: 'found' | 'not_found' | 'error';
25
+ etag?: string;
26
+ content?: any;
27
+ }>;
28
+ }
29
+ export interface HashResult {
30
+ algorithm: 'SHA-256';
31
+ format: 'JCS';
32
+ digest: string;
33
+ input_size: number;
34
+ }
35
+ export interface VerifyResult {
36
+ valid: boolean;
37
+ receipt?: {
38
+ header: any;
39
+ payload: any;
40
+ };
41
+ policy_hash?: string;
42
+ reconstructed?: {
43
+ hash?: string;
44
+ matches?: boolean;
45
+ };
46
+ resource?: string;
47
+ error?: string;
48
+ }
49
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE;QACP,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,QAAQ,GAAG,mBAAmB,GAAG,UAAU,CAAC;QAClD,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,OAAO,GAAG,WAAW,GAAG,OAAO,CAAC;QACxC,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,GAAG,CAAC;KACf,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,SAAS,CAAC;IACrB,MAAM,EAAE,KAAK,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE;QACR,MAAM,EAAE,GAAG,CAAC;QACZ,OAAO,EAAE,GAAG,CAAC;KACd,CAAC;IACF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC;IACF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
package/dist/types.js ADDED
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ /**
3
+ * Types for PEAC CLI
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * CLI utilities and formatting
3
+ */
4
+ import type { CommandResult } from './types.js';
5
+ export declare function formatOutput(result: CommandResult, json?: boolean): string;
6
+ export declare function createExitHandler(): (code: number) => never;
7
+ export declare function handleError(error: Error): CommandResult;
8
+ export declare function timing(): {
9
+ started: number;
10
+ end: () => {
11
+ started: number;
12
+ completed: number;
13
+ duration: number;
14
+ };
15
+ };
16
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,UAAQ,GAAG,MAAM,CAwBxE;AAiDD,wBAAgB,iBAAiB,KACvB,MAAM,MAAM,WAGrB;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,aAAa,CAKvD;AAED,wBAAgB,MAAM;;;;;;;EAarB"}
package/dist/utils.js ADDED
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ /**
3
+ * CLI utilities and formatting
4
+ */
5
+ var __importDefault = (this && this.__importDefault) || function (mod) {
6
+ return (mod && mod.__esModule) ? mod : { "default": mod };
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.formatOutput = formatOutput;
10
+ exports.createExitHandler = createExitHandler;
11
+ exports.handleError = handleError;
12
+ exports.timing = timing;
13
+ const chalk_1 = __importDefault(require("chalk"));
14
+ function formatOutput(result, json = false) {
15
+ if (json) {
16
+ return JSON.stringify(result, null, 2);
17
+ }
18
+ if (!result.success) {
19
+ return chalk_1.default.red(`Error: ${result.error}`);
20
+ }
21
+ // Format based on data type
22
+ if (result.data && typeof result.data === 'object') {
23
+ if (result.data.sources) {
24
+ // Discovery result
25
+ return formatDiscoveryResult(result.data);
26
+ }
27
+ else if (result.data.digest) {
28
+ // Hash result
29
+ return formatHashResult(result.data);
30
+ }
31
+ else if (result.data.valid !== undefined) {
32
+ // Verify result
33
+ return formatVerifyResult(result.data);
34
+ }
35
+ }
36
+ return JSON.stringify(result.data, null, 2);
37
+ }
38
+ function formatDiscoveryResult(data) {
39
+ const lines = [`Discovery for: ${chalk_1.default.blue(data.url)}`, ''];
40
+ for (const source of data.sources) {
41
+ const status = source.status === 'found'
42
+ ? chalk_1.default.green('[found]')
43
+ : source.status === 'not_found'
44
+ ? chalk_1.default.yellow('[not found]')
45
+ : chalk_1.default.red('[error]');
46
+ lines.push(`${status} ${source.type}: ${source.url}`);
47
+ if (source.etag) {
48
+ lines.push(` ETag: ${source.etag}`);
49
+ }
50
+ }
51
+ return lines.join('\\n');
52
+ }
53
+ function formatHashResult(data) {
54
+ return [
55
+ `Algorithm: ${data.algorithm}`,
56
+ `Format: ${data.format}`,
57
+ `Digest: ${chalk_1.default.green(data.digest)}`,
58
+ `Input size: ${data.input_size} bytes`,
59
+ ].join('\\n');
60
+ }
61
+ function formatVerifyResult(data) {
62
+ if (data.valid) {
63
+ const lines = [chalk_1.default.green('Receipt verified successfully'), ''];
64
+ if (data.policy_hash) {
65
+ lines.push(`Policy hash: ${data.policy_hash}`);
66
+ }
67
+ if (data.resource) {
68
+ lines.push(`Resource: ${data.resource}`);
69
+ }
70
+ return lines.join('\\n');
71
+ }
72
+ else {
73
+ return chalk_1.default.red(`Verification failed: ${data.error || 'Unknown error'}`);
74
+ }
75
+ }
76
+ function createExitHandler() {
77
+ return (code) => {
78
+ process.exit(code);
79
+ };
80
+ }
81
+ function handleError(error) {
82
+ return {
83
+ success: false,
84
+ error: error.message,
85
+ };
86
+ }
87
+ function timing() {
88
+ const started = Date.now();
89
+ return {
90
+ started,
91
+ end: () => {
92
+ const completed = Date.now();
93
+ return {
94
+ started,
95
+ completed,
96
+ duration: completed - started,
97
+ };
98
+ },
99
+ };
100
+ }
101
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "@peac/cli",
3
+ "version": "0.9.18",
4
+ "description": "PEAC protocol command-line tools",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "bin": {
8
+ "peac": "./dist/index.js"
9
+ },
10
+ "repository": {
11
+ "type": "git",
12
+ "url": "https://github.com/peacprotocol/peac.git",
13
+ "directory": "packages/cli"
14
+ },
15
+ "author": "jithinraj <7850727+jithinraj@users.noreply.github.com>",
16
+ "license": "Apache-2.0",
17
+ "bugs": {
18
+ "url": "https://github.com/peacprotocol/peac/issues"
19
+ },
20
+ "homepage": "https://github.com/peacprotocol/peac#readme",
21
+ "files": [
22
+ "dist",
23
+ "README.md"
24
+ ],
25
+ "publishConfig": {
26
+ "access": "public"
27
+ },
28
+ "scripts": {
29
+ "build": "tsc",
30
+ "test": "vitest run",
31
+ "test:watch": "vitest",
32
+ "clean": "rm -rf dist"
33
+ },
34
+ "dependencies": {
35
+ "@peac/schema": "workspace:*",
36
+ "@peac/protocol": "workspace:*",
37
+ "@peac/crypto": "workspace:*",
38
+ "@peac/disc": "workspace:*",
39
+ "@peac/policy-kit": "workspace:*",
40
+ "chalk": "^4.1.2",
41
+ "commander": "^11.0.0"
42
+ },
43
+ "devDependencies": {
44
+ "@types/node": "^20.10.0",
45
+ "typescript": "^5.3.3",
46
+ "vitest": "^1.1.0"
47
+ }
48
+ }