@peac/cli 0.10.0 → 0.10.9
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 +78 -5
- package/dist/commands/conformance.d.ts +16 -0
- package/dist/commands/conformance.d.ts.map +1 -0
- package/dist/commands/conformance.js +301 -0
- package/dist/commands/conformance.js.map +1 -0
- package/dist/commands/samples.d.ts +17 -0
- package/dist/commands/samples.d.ts.map +1 -0
- package/dist/commands/samples.js +360 -0
- package/dist/commands/samples.js.map +1 -0
- package/dist/commands/workflow.d.ts +11 -0
- package/dist/commands/workflow.d.ts.map +1 -0
- package/dist/commands/workflow.js +214 -0
- package/dist/commands/workflow.js.map +1 -0
- package/dist/index.js +34 -11
- package/dist/index.js.map +1 -1
- package/dist/lib/conformance/digest.d.ts +64 -0
- package/dist/lib/conformance/digest.d.ts.map +1 -0
- package/dist/lib/conformance/digest.js +202 -0
- package/dist/lib/conformance/digest.js.map +1 -0
- package/dist/lib/conformance/index.d.ts +11 -0
- package/dist/lib/conformance/index.d.ts.map +1 -0
- package/dist/lib/conformance/index.js +30 -0
- package/dist/lib/conformance/index.js.map +1 -0
- package/dist/lib/conformance/manifest.d.ts +15 -0
- package/dist/lib/conformance/manifest.d.ts.map +1 -0
- package/dist/lib/conformance/manifest.js +66 -0
- package/dist/lib/conformance/manifest.js.map +1 -0
- package/dist/lib/conformance/profiles.d.ts +33 -0
- package/dist/lib/conformance/profiles.d.ts.map +1 -0
- package/dist/lib/conformance/profiles.js +138 -0
- package/dist/lib/conformance/profiles.js.map +1 -0
- package/dist/lib/conformance/types.d.ts +186 -0
- package/dist/lib/conformance/types.d.ts.map +1 -0
- package/dist/lib/conformance/types.js +8 -0
- package/dist/lib/conformance/types.js.map +1 -0
- package/dist/lib/conformance/validators.d.ts +27 -0
- package/dist/lib/conformance/validators.d.ts.map +1 -0
- package/dist/lib/conformance/validators.js +415 -0
- package/dist/lib/conformance/validators.js.map +1 -0
- package/dist/lib/conformance-runner.d.ts +29 -0
- package/dist/lib/conformance-runner.d.ts.map +1 -0
- package/dist/lib/conformance-runner.js +433 -0
- package/dist/lib/conformance-runner.js.map +1 -0
- package/dist/lib/samples-loader.d.ts +44 -0
- package/dist/lib/samples-loader.d.ts.map +1 -0
- package/dist/lib/samples-loader.js +311 -0
- package/dist/lib/samples-loader.js.map +1 -0
- package/dist/lib/version.d.ts +22 -0
- package/dist/lib/version.d.ts.map +1 -0
- package/dist/lib/version.js +61 -0
- package/dist/lib/version.js.map +1 -0
- package/package.json +17 -8
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* PEAC Samples Loader
|
|
4
|
+
*
|
|
5
|
+
* Loads sample definitions from specs/conformance/samples/ when available,
|
|
6
|
+
* falling back to embedded defaults when running outside the repo.
|
|
7
|
+
*
|
|
8
|
+
* This ensures a single source of truth (specs folder is canonical).
|
|
9
|
+
*/
|
|
10
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
13
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
14
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
15
|
+
}
|
|
16
|
+
Object.defineProperty(o, k2, desc);
|
|
17
|
+
}) : (function(o, m, k, k2) {
|
|
18
|
+
if (k2 === undefined) k2 = k;
|
|
19
|
+
o[k2] = m[k];
|
|
20
|
+
}));
|
|
21
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
22
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
23
|
+
}) : function(o, v) {
|
|
24
|
+
o["default"] = v;
|
|
25
|
+
});
|
|
26
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
27
|
+
var ownKeys = function(o) {
|
|
28
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
29
|
+
var ar = [];
|
|
30
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
31
|
+
return ar;
|
|
32
|
+
};
|
|
33
|
+
return ownKeys(o);
|
|
34
|
+
};
|
|
35
|
+
return function (mod) {
|
|
36
|
+
if (mod && mod.__esModule) return mod;
|
|
37
|
+
var result = {};
|
|
38
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
39
|
+
__setModuleDefault(result, mod);
|
|
40
|
+
return result;
|
|
41
|
+
};
|
|
42
|
+
})();
|
|
43
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
44
|
+
exports.findSamplesDir = findSamplesDir;
|
|
45
|
+
exports.getSamples = getSamples;
|
|
46
|
+
exports.getSampleById = getSampleById;
|
|
47
|
+
exports.listSampleIds = listSampleIds;
|
|
48
|
+
const fs = __importStar(require("fs"));
|
|
49
|
+
const path = __importStar(require("path"));
|
|
50
|
+
/**
|
|
51
|
+
* Embedded fallback samples (used when specs folder not available)
|
|
52
|
+
*/
|
|
53
|
+
const EMBEDDED_SAMPLES = [
|
|
54
|
+
{
|
|
55
|
+
id: 'basic-receipt',
|
|
56
|
+
name: 'Basic Receipt',
|
|
57
|
+
description: 'Minimal valid PEAC receipt with only required fields',
|
|
58
|
+
category: 'valid',
|
|
59
|
+
claims: {
|
|
60
|
+
iss: 'https://sandbox.peacprotocol.org',
|
|
61
|
+
aud: 'https://example.com',
|
|
62
|
+
iat: 0, // Placeholder - will be set at generation time
|
|
63
|
+
exp: 0, // Placeholder - will be set at generation time
|
|
64
|
+
rid: 'sample-basic-001',
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
id: 'full-receipt',
|
|
69
|
+
name: 'Full Receipt',
|
|
70
|
+
description: 'PEAC receipt with all optional claims populated',
|
|
71
|
+
category: 'valid',
|
|
72
|
+
claims: {
|
|
73
|
+
iss: 'https://sandbox.peacprotocol.org',
|
|
74
|
+
aud: 'https://api.example.com',
|
|
75
|
+
sub: 'user:demo-user',
|
|
76
|
+
iat: 0,
|
|
77
|
+
exp: 0,
|
|
78
|
+
rid: 'sample-full-001',
|
|
79
|
+
purpose_declared: ['search', 'index'],
|
|
80
|
+
purpose_enforced: 'search',
|
|
81
|
+
purpose_reason: 'allowed',
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
id: 'interaction-evidence',
|
|
86
|
+
name: 'Interaction Evidence',
|
|
87
|
+
description: 'Receipt with InteractionEvidence extension for AI agent calls',
|
|
88
|
+
category: 'valid',
|
|
89
|
+
claims: {
|
|
90
|
+
iss: 'https://sandbox.peacprotocol.org',
|
|
91
|
+
aud: 'https://agent.example.com',
|
|
92
|
+
sub: 'agent:demo-agent-v1',
|
|
93
|
+
iat: 0,
|
|
94
|
+
exp: 0,
|
|
95
|
+
rid: 'sample-ie-001',
|
|
96
|
+
ext: {
|
|
97
|
+
'org.peacprotocol/interaction@0.1': {
|
|
98
|
+
version: '0.1',
|
|
99
|
+
interaction_id: 'int_sample_001',
|
|
100
|
+
started_at: '2026-01-01T00:00:00.000Z',
|
|
101
|
+
completed_at: '2026-01-01T00:00:01.000Z',
|
|
102
|
+
outcome: { kind: 'success' },
|
|
103
|
+
input: { hash: 'sha256:abc123...', byte_length: 1024 },
|
|
104
|
+
output: { hash: 'sha256:def456...', byte_length: 2048 },
|
|
105
|
+
},
|
|
106
|
+
},
|
|
107
|
+
},
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
id: 'payment-evidence',
|
|
111
|
+
name: 'Payment Evidence',
|
|
112
|
+
description: 'Receipt with payment evidence (402 flow)',
|
|
113
|
+
category: 'valid',
|
|
114
|
+
claims: {
|
|
115
|
+
iss: 'https://sandbox.peacprotocol.org',
|
|
116
|
+
aud: 'https://api.example.com',
|
|
117
|
+
iat: 0,
|
|
118
|
+
exp: 0,
|
|
119
|
+
rid: 'sample-payment-001',
|
|
120
|
+
amt: '100',
|
|
121
|
+
cur: 'USD',
|
|
122
|
+
payment: {
|
|
123
|
+
rail: 'x402',
|
|
124
|
+
reference: 'pay_sample_001',
|
|
125
|
+
amount: '100',
|
|
126
|
+
currency: 'USD',
|
|
127
|
+
},
|
|
128
|
+
},
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
id: 'long-expiry',
|
|
132
|
+
name: 'Long Expiry',
|
|
133
|
+
description: 'Receipt with 24-hour expiration',
|
|
134
|
+
category: 'valid',
|
|
135
|
+
claims: {
|
|
136
|
+
iss: 'https://sandbox.peacprotocol.org',
|
|
137
|
+
aud: 'https://example.com',
|
|
138
|
+
iat: 0,
|
|
139
|
+
exp: 0, // Will be set to iat + 86400 at generation time
|
|
140
|
+
rid: 'sample-long-expiry-001',
|
|
141
|
+
},
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
id: 'expired',
|
|
145
|
+
name: 'Expired Receipt',
|
|
146
|
+
description: 'Receipt that has already expired (for testing rejection)',
|
|
147
|
+
category: 'invalid',
|
|
148
|
+
claims: {
|
|
149
|
+
iss: 'https://sandbox.peacprotocol.org',
|
|
150
|
+
aud: 'https://example.com',
|
|
151
|
+
iat: 0, // Will be set to now - 7200 at generation time
|
|
152
|
+
exp: 0, // Will be set to now - 3600 at generation time
|
|
153
|
+
rid: 'sample-expired-001',
|
|
154
|
+
},
|
|
155
|
+
expectedError: 'E_EXPIRED_RECEIPT',
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
id: 'future-iat',
|
|
159
|
+
name: 'Future IAT',
|
|
160
|
+
description: 'Receipt with iat in the future (should be rejected)',
|
|
161
|
+
category: 'invalid',
|
|
162
|
+
claims: {
|
|
163
|
+
iss: 'https://sandbox.peacprotocol.org',
|
|
164
|
+
aud: 'https://example.com',
|
|
165
|
+
iat: 0, // Will be set to now + 3600 at generation time
|
|
166
|
+
exp: 0, // Will be set to now + 7200 at generation time
|
|
167
|
+
rid: 'sample-future-iat-001',
|
|
168
|
+
},
|
|
169
|
+
expectedError: 'E_FUTURE_IAT',
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
id: 'missing-iss',
|
|
173
|
+
name: 'Missing Issuer',
|
|
174
|
+
description: 'Receipt missing required iss claim (for testing validation)',
|
|
175
|
+
category: 'invalid',
|
|
176
|
+
claims: {
|
|
177
|
+
aud: 'https://example.com',
|
|
178
|
+
iat: 0,
|
|
179
|
+
exp: 0,
|
|
180
|
+
rid: 'sample-no-iss-001',
|
|
181
|
+
},
|
|
182
|
+
expectedError: 'E_MISSING_CLAIM',
|
|
183
|
+
},
|
|
184
|
+
];
|
|
185
|
+
/**
|
|
186
|
+
* Find samples directory
|
|
187
|
+
*/
|
|
188
|
+
function findSamplesDir(customPath) {
|
|
189
|
+
// Use custom path if provided
|
|
190
|
+
if (customPath) {
|
|
191
|
+
if (fs.existsSync(customPath)) {
|
|
192
|
+
return customPath;
|
|
193
|
+
}
|
|
194
|
+
return null;
|
|
195
|
+
}
|
|
196
|
+
// Try relative to CLI package
|
|
197
|
+
const cliPath = path.resolve(__dirname, '../../../../specs/conformance/samples');
|
|
198
|
+
if (fs.existsSync(cliPath)) {
|
|
199
|
+
return cliPath;
|
|
200
|
+
}
|
|
201
|
+
// Try relative to repo root
|
|
202
|
+
const repoPath = path.resolve(process.cwd(), 'specs/conformance/samples');
|
|
203
|
+
if (fs.existsSync(repoPath)) {
|
|
204
|
+
return repoPath;
|
|
205
|
+
}
|
|
206
|
+
// Try one level up
|
|
207
|
+
const upPath = path.resolve(process.cwd(), '../../specs/conformance/samples');
|
|
208
|
+
if (fs.existsSync(upPath)) {
|
|
209
|
+
return upPath;
|
|
210
|
+
}
|
|
211
|
+
return null;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Load sample definition from a JSON file
|
|
215
|
+
*/
|
|
216
|
+
function loadSampleFromFile(filePath, id, category) {
|
|
217
|
+
try {
|
|
218
|
+
const content = JSON.parse(fs.readFileSync(filePath, 'utf8'));
|
|
219
|
+
// Handle both formats: fixture-style (header/payload) and claims-only
|
|
220
|
+
const claims = content.payload ?? content.claims ?? content;
|
|
221
|
+
const description = content.$comment ?? content.description ?? `Sample ${id}`;
|
|
222
|
+
return {
|
|
223
|
+
id,
|
|
224
|
+
name: id
|
|
225
|
+
.split('-')
|
|
226
|
+
.map((w) => w.charAt(0).toUpperCase() + w.slice(1))
|
|
227
|
+
.join(' '),
|
|
228
|
+
description,
|
|
229
|
+
category,
|
|
230
|
+
claims,
|
|
231
|
+
header: content.header,
|
|
232
|
+
expectedError: content.expected_error,
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
catch {
|
|
236
|
+
return null;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Load samples from specs directory
|
|
241
|
+
*/
|
|
242
|
+
function loadSamplesFromDir(samplesDir) {
|
|
243
|
+
const samples = [];
|
|
244
|
+
// Load from valid/ directory
|
|
245
|
+
const validDir = path.join(samplesDir, 'valid');
|
|
246
|
+
if (fs.existsSync(validDir)) {
|
|
247
|
+
const files = fs.readdirSync(validDir).filter((f) => f.endsWith('.json'));
|
|
248
|
+
for (const file of files) {
|
|
249
|
+
const id = file.replace('.json', '');
|
|
250
|
+
const sample = loadSampleFromFile(path.join(validDir, file), id, 'valid');
|
|
251
|
+
if (sample)
|
|
252
|
+
samples.push(sample);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
// Load from invalid/ directory
|
|
256
|
+
const invalidDir = path.join(samplesDir, 'invalid');
|
|
257
|
+
if (fs.existsSync(invalidDir)) {
|
|
258
|
+
const files = fs.readdirSync(invalidDir).filter((f) => f.endsWith('.json'));
|
|
259
|
+
for (const file of files) {
|
|
260
|
+
const id = file.replace('.json', '');
|
|
261
|
+
const sample = loadSampleFromFile(path.join(invalidDir, file), id, 'invalid');
|
|
262
|
+
if (sample)
|
|
263
|
+
samples.push(sample);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
// Load from edge/ directory if present
|
|
267
|
+
const edgeDir = path.join(samplesDir, 'edge');
|
|
268
|
+
if (fs.existsSync(edgeDir)) {
|
|
269
|
+
const files = fs.readdirSync(edgeDir).filter((f) => f.endsWith('.json'));
|
|
270
|
+
for (const file of files) {
|
|
271
|
+
const id = file.replace('.json', '');
|
|
272
|
+
const sample = loadSampleFromFile(path.join(edgeDir, file), id, 'edge');
|
|
273
|
+
if (sample)
|
|
274
|
+
samples.push(sample);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
return samples;
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Get sample definitions
|
|
281
|
+
*
|
|
282
|
+
* Loads from specs/conformance/samples/ when available (canonical source),
|
|
283
|
+
* falls back to embedded samples when running outside the repo.
|
|
284
|
+
*/
|
|
285
|
+
function getSamples(customSamplesPath) {
|
|
286
|
+
const samplesDir = findSamplesDir(customSamplesPath);
|
|
287
|
+
if (samplesDir) {
|
|
288
|
+
const dirSamples = loadSamplesFromDir(samplesDir);
|
|
289
|
+
if (dirSamples.length > 0) {
|
|
290
|
+
return dirSamples;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
// Fall back to embedded samples
|
|
294
|
+
return EMBEDDED_SAMPLES;
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Get a specific sample by ID
|
|
298
|
+
*/
|
|
299
|
+
function getSampleById(id, customSamplesPath) {
|
|
300
|
+
const samples = getSamples(customSamplesPath);
|
|
301
|
+
return samples.find((s) => s.id === id) ?? null;
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* List available sample IDs by category
|
|
305
|
+
*/
|
|
306
|
+
function listSampleIds(category, customSamplesPath) {
|
|
307
|
+
const samples = getSamples(customSamplesPath);
|
|
308
|
+
const filtered = category ? samples.filter((s) => s.category === category) : samples;
|
|
309
|
+
return filtered.map((s) => s.id);
|
|
310
|
+
}
|
|
311
|
+
//# sourceMappingURL=samples-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"samples-loader.js","sourceRoot":"","sources":["../../src/lib/samples-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI Version Utility
|
|
3
|
+
*
|
|
4
|
+
* Reads version from package.json at runtime to avoid hardcoding.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Get CLI version from package.json
|
|
8
|
+
*
|
|
9
|
+
* Uses multiple strategies to find package.json:
|
|
10
|
+
* 1. __dirname relative path (for CJS)
|
|
11
|
+
* 2. Process.cwd() fallback
|
|
12
|
+
*/
|
|
13
|
+
export declare function getVersion(): string;
|
|
14
|
+
/**
|
|
15
|
+
* Get runtime string (e.g., "node-22.0.0")
|
|
16
|
+
*/
|
|
17
|
+
export declare function getRuntime(): string;
|
|
18
|
+
/**
|
|
19
|
+
* Get git commit hash if available
|
|
20
|
+
*/
|
|
21
|
+
export declare function getCommit(): string | undefined;
|
|
22
|
+
//# sourceMappingURL=version.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/lib/version.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH;;;;;;GAMG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAyBnC;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,MAAM,GAAG,SAAS,CAG9C"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* CLI Version Utility
|
|
4
|
+
*
|
|
5
|
+
* Reads version from package.json at runtime to avoid hardcoding.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.getVersion = getVersion;
|
|
9
|
+
exports.getRuntime = getRuntime;
|
|
10
|
+
exports.getCommit = getCommit;
|
|
11
|
+
const node_path_1 = require("node:path");
|
|
12
|
+
const node_fs_1 = require("node:fs");
|
|
13
|
+
/**
|
|
14
|
+
* Get CLI version from package.json
|
|
15
|
+
*
|
|
16
|
+
* Uses multiple strategies to find package.json:
|
|
17
|
+
* 1. __dirname relative path (for CJS)
|
|
18
|
+
* 2. Process.cwd() fallback
|
|
19
|
+
*/
|
|
20
|
+
function getVersion() {
|
|
21
|
+
// Strategy 1: Try relative path from this file (dist/lib/version.js -> package.json)
|
|
22
|
+
try {
|
|
23
|
+
const pkgPath = (0, node_path_1.join)(__dirname, '..', '..', 'package.json');
|
|
24
|
+
if ((0, node_fs_1.existsSync)(pkgPath)) {
|
|
25
|
+
const pkg = JSON.parse((0, node_fs_1.readFileSync)(pkgPath, 'utf8'));
|
|
26
|
+
if (pkg.version)
|
|
27
|
+
return pkg.version;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
// Continue to next strategy
|
|
32
|
+
}
|
|
33
|
+
// Strategy 2: Try from CWD (running in monorepo)
|
|
34
|
+
try {
|
|
35
|
+
const pkgPath = (0, node_path_1.join)(process.cwd(), 'packages', 'cli', 'package.json');
|
|
36
|
+
if ((0, node_fs_1.existsSync)(pkgPath)) {
|
|
37
|
+
const pkg = JSON.parse((0, node_fs_1.readFileSync)(pkgPath, 'utf8'));
|
|
38
|
+
if (pkg.version)
|
|
39
|
+
return pkg.version;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
// Continue to fallback
|
|
44
|
+
}
|
|
45
|
+
// Strategy 3: Fallback version (should rarely happen)
|
|
46
|
+
return '0.0.0-unknown';
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Get runtime string (e.g., "node-22.0.0")
|
|
50
|
+
*/
|
|
51
|
+
function getRuntime() {
|
|
52
|
+
return `node-${process.version.slice(1)}`;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Get git commit hash if available
|
|
56
|
+
*/
|
|
57
|
+
function getCommit() {
|
|
58
|
+
// Could be enhanced to read from .git or environment variable
|
|
59
|
+
return process.env.GIT_COMMIT ?? process.env.GITHUB_SHA;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/lib/version.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AAYH,gCAyBC;AAKD,gCAEC;AAKD,8BAGC;AAlDD,yCAAiC;AACjC,qCAAmD;AAEnD;;;;;;GAMG;AACH,SAAgB,UAAU;IACxB,qFAAqF;IACrF,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAA,gBAAI,EAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;QAC5D,IAAI,IAAA,oBAAU,EAAC,OAAO,CAAC,EAAE,CAAC;YACxB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,sBAAY,EAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;YACtD,IAAI,GAAG,CAAC,OAAO;gBAAE,OAAO,GAAG,CAAC,OAAO,CAAC;QACtC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,4BAA4B;IAC9B,CAAC;IAED,iDAAiD;IACjD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAA,gBAAI,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;QACvE,IAAI,IAAA,oBAAU,EAAC,OAAO,CAAC,EAAE,CAAC;YACxB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,sBAAY,EAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;YACtD,IAAI,GAAG,CAAC,OAAO;gBAAE,OAAO,GAAG,CAAC,OAAO,CAAC;QACtC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,uBAAuB;IACzB,CAAC;IAED,sDAAsD;IACtD,OAAO,eAAe,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,SAAgB,UAAU;IACxB,OAAO,QAAQ,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,SAAgB,SAAS;IACvB,8DAA8D;IAC9D,OAAO,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;AAC1D,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@peac/cli",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.9",
|
|
4
4
|
"description": "PEAC protocol command-line tools",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -22,18 +22,27 @@
|
|
|
22
22
|
"dist",
|
|
23
23
|
"README.md"
|
|
24
24
|
],
|
|
25
|
+
"exports": {
|
|
26
|
+
".": {
|
|
27
|
+
"types": "./dist/index.d.ts",
|
|
28
|
+
"import": "./dist/index.js",
|
|
29
|
+
"require": "./dist/index.js",
|
|
30
|
+
"default": "./dist/index.js"
|
|
31
|
+
}
|
|
32
|
+
},
|
|
25
33
|
"publishConfig": {
|
|
26
|
-
"access": "public"
|
|
34
|
+
"access": "public",
|
|
35
|
+
"provenance": true
|
|
27
36
|
},
|
|
28
37
|
"dependencies": {
|
|
29
38
|
"chalk": "^4.1.2",
|
|
30
39
|
"commander": "^11.0.0",
|
|
31
|
-
"@peac/
|
|
32
|
-
"@peac/protocol": "0.10.
|
|
33
|
-
"@peac/
|
|
34
|
-
"@peac/
|
|
35
|
-
"@peac/
|
|
36
|
-
"@peac/
|
|
40
|
+
"@peac/audit": "0.10.9",
|
|
41
|
+
"@peac/protocol": "0.10.9",
|
|
42
|
+
"@peac/disc": "0.10.9",
|
|
43
|
+
"@peac/schema": "0.10.9",
|
|
44
|
+
"@peac/crypto": "0.10.9",
|
|
45
|
+
"@peac/policy-kit": "0.10.9"
|
|
37
46
|
},
|
|
38
47
|
"devDependencies": {
|
|
39
48
|
"@types/node": "^20.10.0",
|