@atlasauth/pca-cli 0.0.0-stage → 0.2.0
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/LICENSE +21 -0
- package/README.md +53 -2
- package/dist/cli.d.ts +10 -0
- package/dist/cli.js +138 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +76 -0
- package/dist/index.js +280 -0
- package/dist/index.js.map +1 -0
- package/package.json +56 -3
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Atlas Authorization
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,54 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @atlasauth/pca-cli
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
The `pca` developer CLI for Proof-Carrying Authority (PCA). Decode a PCActn, run the verifier and see why it passed or failed each check, mint a throwaway dev keypair, simulate a policy over a list of actions, and emit a `.well-known/pca-configuration` discovery document.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```sh
|
|
8
|
+
npm i -g @atlasauth/pca-cli
|
|
9
|
+
# or run without installing:
|
|
10
|
+
npx @atlasauth/pca-cli <command>
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
This installs the `pca` binary. It depends on `@atlasauth/pca`.
|
|
14
|
+
|
|
15
|
+
## Usage
|
|
16
|
+
|
|
17
|
+
```sh
|
|
18
|
+
# Summarize a PCActn (JSON or base64url). A file path, or '-' to read STDIN.
|
|
19
|
+
pca decode action.txt
|
|
20
|
+
pca decode -
|
|
21
|
+
|
|
22
|
+
# Run the core verifier and explain each check (PASS / FAIL / -), ending in ALLOW or DENY.
|
|
23
|
+
pca explain action.txt --aud ins_acme
|
|
24
|
+
|
|
25
|
+
# Mint a throwaway Ed25519 dev keypair (base64url).
|
|
26
|
+
pca keygen
|
|
27
|
+
|
|
28
|
+
# Replay actions against a compiled policy: auto / step_up / deny, with the trust budget after each.
|
|
29
|
+
pca simulate policy.json actions.json
|
|
30
|
+
|
|
31
|
+
# Emit a discovery document for a resource server to publish.
|
|
32
|
+
pca discovery --aud ins_acme [--suites ed25519,ml-dsa-65] [--stepup <url>] [--revocation <url>] [--beacon <url>] [--attest <url>]
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Input files:
|
|
36
|
+
|
|
37
|
+
```jsonc
|
|
38
|
+
// policy.json
|
|
39
|
+
{ "permissions": { "stripe": ["refund"] }, "limits": { "refund": "$500/day" } }
|
|
40
|
+
// actions.json
|
|
41
|
+
[ { "verb": "stripe.refund", "resource": "charge:ch_1", "params": { "amount": 42 } } ]
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
The command functions (`cmdDecode`, `cmdExplain`, `cmdKeygen`, `cmdSimulate`, `cmdDiscovery`) are also exported for programmatic use.
|
|
45
|
+
|
|
46
|
+
## Status
|
|
47
|
+
|
|
48
|
+
`decode`, `explain` and `simulate` are read-only inspectors for development. `explain` verifies against the grant in the PCActn's own capability chain, so its verdict is the local, grant-relative view; checks that need server-side state (revocation, attestation, threshold co-signatures, taint) are shown as not enforced. Nothing here authorizes anything: the resource server's verifier, with its stored counter and revocation state, remains the authority. Cryptography in PCA is unaudited.
|
|
49
|
+
|
|
50
|
+
Source and issues: https://github.com/Atlas-Authorization/pca
|
|
51
|
+
|
|
52
|
+
## License
|
|
53
|
+
|
|
54
|
+
MIT - see LICENSE
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* `pca` — the PCA developer CLI entrypoint.
|
|
4
|
+
*
|
|
5
|
+
* A tiny, dependency-free argv parser dispatches to the pure command functions in `./index`. Input
|
|
6
|
+
* that is a PCActn / JSON is read from a file path argument, or from STDIN when the argument is `-`.
|
|
7
|
+
* Errors print to stderr and set a non-zero `process.exitCode` (we never call `process.exit`, so
|
|
8
|
+
* buffered stdout always flushes first).
|
|
9
|
+
*/
|
|
10
|
+
export {};
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* `pca` — the PCA developer CLI entrypoint.
|
|
5
|
+
*
|
|
6
|
+
* A tiny, dependency-free argv parser dispatches to the pure command functions in `./index`. Input
|
|
7
|
+
* that is a PCActn / JSON is read from a file path argument, or from STDIN when the argument is `-`.
|
|
8
|
+
* Errors print to stderr and set a non-zero `process.exitCode` (we never call `process.exit`, so
|
|
9
|
+
* buffered stdout always flushes first).
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
const node_fs_1 = require("node:fs");
|
|
13
|
+
const index_1 = require("./index");
|
|
14
|
+
const USAGE = `pca — Proof-Carrying Authority dev CLI
|
|
15
|
+
|
|
16
|
+
Usage:
|
|
17
|
+
pca decode <file|-> Summarize a PCActn (JSON or base64url).
|
|
18
|
+
pca explain <file|-> [--aud <id>] Run the real verifier and explain each check (PASS/FAIL/—).
|
|
19
|
+
pca keygen Mint a throwaway Ed25519 dev keypair (base64url).
|
|
20
|
+
pca simulate <policy.json> <actions.json>
|
|
21
|
+
Replay actions against a compiled policy (auto/step_up/deny).
|
|
22
|
+
pca discovery --aud <id> [--suites a,b] [--stepup <url>] [--revocation <url>] [--beacon <url>] [--attest <url>]
|
|
23
|
+
Emit a .well-known/pca-configuration document.
|
|
24
|
+
|
|
25
|
+
Notes:
|
|
26
|
+
<-> reads from STDIN. Nothing here authorizes anything — the resource server's verifier decides.
|
|
27
|
+
`;
|
|
28
|
+
/** Read a positional file argument, or STDIN when it is '-'. */
|
|
29
|
+
function readSource(arg) {
|
|
30
|
+
if (arg === '-')
|
|
31
|
+
return (0, node_fs_1.readFileSync)(0, 'utf8');
|
|
32
|
+
return (0, node_fs_1.readFileSync)(arg, 'utf8');
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Minimal hand-rolled parser (no dependency): everything after the sub-command, splitting
|
|
36
|
+
* `--flag value` and `--flag=value` out of the positionals. A bare `--flag` with no value is treated
|
|
37
|
+
* as the empty string.
|
|
38
|
+
*/
|
|
39
|
+
function parseArgs(argv) {
|
|
40
|
+
const positionals = [];
|
|
41
|
+
const flags = {};
|
|
42
|
+
for (let i = 0; i < argv.length; i++) {
|
|
43
|
+
const a = argv[i];
|
|
44
|
+
if (a === undefined)
|
|
45
|
+
continue;
|
|
46
|
+
if (a.startsWith('--')) {
|
|
47
|
+
const body = a.slice(2);
|
|
48
|
+
const eq = body.indexOf('=');
|
|
49
|
+
if (eq >= 0) {
|
|
50
|
+
flags[body.slice(0, eq)] = body.slice(eq + 1);
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
const next = argv[i + 1];
|
|
54
|
+
if (next !== undefined && !next.startsWith('--')) {
|
|
55
|
+
flags[body] = next;
|
|
56
|
+
i++;
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
flags[body] = '';
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
positionals.push(a);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return { positionals, flags };
|
|
68
|
+
}
|
|
69
|
+
async function main() {
|
|
70
|
+
const argv = process.argv.slice(2);
|
|
71
|
+
const command = argv[0];
|
|
72
|
+
if (command === undefined || command === '--help' || command === '-h' || command === 'help') {
|
|
73
|
+
process.stdout.write(USAGE);
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
const { positionals, flags } = parseArgs(argv.slice(1));
|
|
77
|
+
switch (command) {
|
|
78
|
+
case 'decode': {
|
|
79
|
+
const src = positionals[0];
|
|
80
|
+
if (src === undefined)
|
|
81
|
+
throw new Error("decode: expected a file path or '-' for STDIN");
|
|
82
|
+
process.stdout.write((0, index_1.cmdDecode)(readSource(src)) + '\n');
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
case 'explain': {
|
|
86
|
+
const src = positionals[0];
|
|
87
|
+
if (src === undefined)
|
|
88
|
+
throw new Error("explain: expected a file path or '-' for STDIN");
|
|
89
|
+
const opts = {};
|
|
90
|
+
if (flags.aud !== undefined && flags.aud !== '')
|
|
91
|
+
opts.audience = flags.aud;
|
|
92
|
+
const res = await (0, index_1.cmdExplain)(readSource(src), opts);
|
|
93
|
+
process.stdout.write(res.text + '\n');
|
|
94
|
+
if (!res.allow)
|
|
95
|
+
process.exitCode = 1;
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
case 'keygen': {
|
|
99
|
+
process.stdout.write((0, index_1.cmdKeygen)().text + '\n');
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
case 'simulate': {
|
|
103
|
+
const policyPath = positionals[0];
|
|
104
|
+
const actionsPath = positionals[1];
|
|
105
|
+
if (policyPath === undefined || actionsPath === undefined) {
|
|
106
|
+
throw new Error('simulate: expected <policy.json> <actions.json>');
|
|
107
|
+
}
|
|
108
|
+
process.stdout.write((0, index_1.cmdSimulate)(readSource(policyPath), readSource(actionsPath)) + '\n');
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
case 'discovery': {
|
|
112
|
+
if (flags.aud === undefined || flags.aud === '')
|
|
113
|
+
throw new Error('discovery: --aud <id> is required');
|
|
114
|
+
const endpoints = {};
|
|
115
|
+
if (flags.attest)
|
|
116
|
+
endpoints.attestation_challenge = flags.attest;
|
|
117
|
+
if (flags.revocation)
|
|
118
|
+
endpoints.revocation_epoch = flags.revocation;
|
|
119
|
+
if (flags.beacon)
|
|
120
|
+
endpoints.liveness_beacon = flags.beacon;
|
|
121
|
+
if (flags.stepup)
|
|
122
|
+
endpoints.stepup = flags.stepup;
|
|
123
|
+
process.stdout.write((0, index_1.cmdDiscovery)({
|
|
124
|
+
audience: flags.aud,
|
|
125
|
+
...(flags.suites ? { suites: flags.suites.split(',').map((s) => s.trim()).filter(Boolean) } : {}),
|
|
126
|
+
...(Object.keys(endpoints).length ? { endpoints } : {}),
|
|
127
|
+
}) + '\n');
|
|
128
|
+
break;
|
|
129
|
+
}
|
|
130
|
+
default:
|
|
131
|
+
throw new Error(`unknown command '${command}'\n\n${USAGE}`);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
main().catch((e) => {
|
|
135
|
+
process.stderr.write(`pca: ${e instanceof Error ? e.message : String(e)}\n`);
|
|
136
|
+
process.exitCode = 1;
|
|
137
|
+
});
|
|
138
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `pca` developer CLI — the honest inspector for Proof-Carrying Authority.
|
|
3
|
+
*
|
|
4
|
+
* Four pure command functions, each taking parsed arguments and returning a string (or a small
|
|
5
|
+
* structured result) so they are unit-testable without spawning a process. They lean ENTIRELY on
|
|
6
|
+
* `@atlasauth/pca`'s own primitives — the same decode / verify / compile / simulate code the
|
|
7
|
+
* resource server and the facade use — so what the CLI prints is what the verifier actually does.
|
|
8
|
+
*
|
|
9
|
+
* HONEST about scope: nothing here authorizes anything. `decode` and `explain` are read-only
|
|
10
|
+
* inspectors; `explain` runs the REAL `verifyPCActnCore` against a grant it reads straight out of
|
|
11
|
+
* the PCActn's own capability chain, so a "verdict" it prints is the local, grant-relative view —
|
|
12
|
+
* the resource server, with its stored counter / revocation / attestation state, remains the
|
|
13
|
+
* authority. `keygen` mints a throwaway dev keypair (never a production holder). `simulate` is a
|
|
14
|
+
* pure offline planning replay: it mutates nothing, signs nothing, and reaches no network.
|
|
15
|
+
*/
|
|
16
|
+
import { decodePCActn } from '@atlasauth/pca';
|
|
17
|
+
/**
|
|
18
|
+
* Parse CLI input that is EITHER PCActn JSON text or its base64url wire form. Detection is
|
|
19
|
+
* structural: a leading `{` (after trimming) is JSON; anything else is tried as base64url whose
|
|
20
|
+
* decoded bytes must be UTF-8 PCActn JSON. Either way the bytes go through the strict
|
|
21
|
+
* `decodePCActn` parser, so a malformed object throws a clear Error.
|
|
22
|
+
*/
|
|
23
|
+
export declare function parsePCActnInput(input: string): ReturnType<typeof decodePCActn>;
|
|
24
|
+
/**
|
|
25
|
+
* Decode a PCActn (JSON or base64url) and return a readable summary: verb, resource, audience, the
|
|
26
|
+
* issued/expiry window (ISO + raw ms), counter, capability-chain depth, the claimed risk, and
|
|
27
|
+
* whether a threshold or zk-compliance field rides along. Throws a clear Error on malformed input.
|
|
28
|
+
*/
|
|
29
|
+
export declare function cmdDecode(input: string): string;
|
|
30
|
+
export interface ExplainResult {
|
|
31
|
+
allow: boolean;
|
|
32
|
+
checks: Record<string, string>;
|
|
33
|
+
reasons: string[];
|
|
34
|
+
text: string;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* The "why did it (not) verify?" explainer. Decodes the PCActn, takes its `cap_chain[0]` as the root
|
|
38
|
+
* grant (the capability the whole chain descends from), and runs the REAL `verifyPCActnCore` against
|
|
39
|
+
* it, then formats each check as PASS / FAIL / — (not enforced by this verifier profile) with a final
|
|
40
|
+
* verdict line. `--aud` supplies this verifier's audience; omit it to accept any audience.
|
|
41
|
+
*/
|
|
42
|
+
export declare function cmdExplain(input: string, opts: {
|
|
43
|
+
audience?: string;
|
|
44
|
+
now?: number;
|
|
45
|
+
}): Promise<ExplainResult>;
|
|
46
|
+
export interface KeygenResult {
|
|
47
|
+
publicKey: string;
|
|
48
|
+
secretKey: string;
|
|
49
|
+
text: string;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Mint a throwaway Ed25519 dev keypair and return both keys base64url-encoded plus a clearly labelled
|
|
53
|
+
* block. This is a DEV convenience — not a production holder key. The secret signs PCActns as this
|
|
54
|
+
* holder and must stay private; the public key is what a grant binds to (`holder`).
|
|
55
|
+
*/
|
|
56
|
+
export declare function cmdKeygen(): KeygenResult;
|
|
57
|
+
export interface DiscoveryCmdOptions {
|
|
58
|
+
audience: string;
|
|
59
|
+
suites?: string[];
|
|
60
|
+
endpoints?: {
|
|
61
|
+
attestation_challenge?: string;
|
|
62
|
+
revocation_epoch?: string;
|
|
63
|
+
liveness_beacon?: string;
|
|
64
|
+
stepup?: string;
|
|
65
|
+
grant?: string;
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
/** Emit a `.well-known/pca-configuration` document for a resource server to publish. */
|
|
69
|
+
export declare function cmdDiscovery(opts: DiscoveryCmdOptions): string;
|
|
70
|
+
/**
|
|
71
|
+
* Compile a policy spec `{ permissions, limits? }` and replay an actions array against it, printing a
|
|
72
|
+
* per-action table (auto / step_up / deny + the trust budget remaining after each), the static lints
|
|
73
|
+
* `lintPolicy` found, and the autonomy bound (the most this grant can spend/risk between human
|
|
74
|
+
* co-signs). Pure and offline — the resource server's verifier remains the authority at run time.
|
|
75
|
+
*/
|
|
76
|
+
export declare function cmdSimulate(policyJson: string, actionsJson: string): string;
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* The `pca` developer CLI — the honest inspector for Proof-Carrying Authority.
|
|
4
|
+
*
|
|
5
|
+
* Four pure command functions, each taking parsed arguments and returning a string (or a small
|
|
6
|
+
* structured result) so they are unit-testable without spawning a process. They lean ENTIRELY on
|
|
7
|
+
* `@atlasauth/pca`'s own primitives — the same decode / verify / compile / simulate code the
|
|
8
|
+
* resource server and the facade use — so what the CLI prints is what the verifier actually does.
|
|
9
|
+
*
|
|
10
|
+
* HONEST about scope: nothing here authorizes anything. `decode` and `explain` are read-only
|
|
11
|
+
* inspectors; `explain` runs the REAL `verifyPCActnCore` against a grant it reads straight out of
|
|
12
|
+
* the PCActn's own capability chain, so a "verdict" it prints is the local, grant-relative view —
|
|
13
|
+
* the resource server, with its stored counter / revocation / attestation state, remains the
|
|
14
|
+
* authority. `keygen` mints a throwaway dev keypair (never a production holder). `simulate` is a
|
|
15
|
+
* pure offline planning replay: it mutates nothing, signs nothing, and reaches no network.
|
|
16
|
+
*/
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.parsePCActnInput = parsePCActnInput;
|
|
19
|
+
exports.cmdDecode = cmdDecode;
|
|
20
|
+
exports.cmdExplain = cmdExplain;
|
|
21
|
+
exports.cmdKeygen = cmdKeygen;
|
|
22
|
+
exports.cmdDiscovery = cmdDiscovery;
|
|
23
|
+
exports.cmdSimulate = cmdSimulate;
|
|
24
|
+
const pca_1 = require("@atlasauth/pca");
|
|
25
|
+
// ---- small helpers --------------------------------------------------------------------------------
|
|
26
|
+
/** Message of an unknown throwable without an `any`/suppression cast. */
|
|
27
|
+
function errMessage(e) {
|
|
28
|
+
return e instanceof Error ? e.message : String(e);
|
|
29
|
+
}
|
|
30
|
+
function isRecord(v) {
|
|
31
|
+
return typeof v === 'object' && v !== null && !Array.isArray(v);
|
|
32
|
+
}
|
|
33
|
+
/** Parse JSON into `unknown` (never `any`) with a labelled error. */
|
|
34
|
+
function parseJson(s, label) {
|
|
35
|
+
try {
|
|
36
|
+
return JSON.parse(s);
|
|
37
|
+
}
|
|
38
|
+
catch (e) {
|
|
39
|
+
throw new Error(`${label}: invalid JSON: ${errMessage(e)}`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/** Epoch-ms → ISO 8601, or a clear marker when the value is not a finite instant. */
|
|
43
|
+
function iso(ms) {
|
|
44
|
+
if (typeof ms !== 'number' || !Number.isFinite(ms))
|
|
45
|
+
return '(none)';
|
|
46
|
+
const d = new Date(ms);
|
|
47
|
+
return Number.isNaN(d.getTime()) ? '(invalid)' : d.toISOString();
|
|
48
|
+
}
|
|
49
|
+
/** Right-pad to `width` for simple fixed-column tables. */
|
|
50
|
+
function pad(s, width) {
|
|
51
|
+
return s.length >= width ? s : s + ' '.repeat(width - s.length);
|
|
52
|
+
}
|
|
53
|
+
// ---- decode ---------------------------------------------------------------------------------------
|
|
54
|
+
/**
|
|
55
|
+
* Parse CLI input that is EITHER PCActn JSON text or its base64url wire form. Detection is
|
|
56
|
+
* structural: a leading `{` (after trimming) is JSON; anything else is tried as base64url whose
|
|
57
|
+
* decoded bytes must be UTF-8 PCActn JSON. Either way the bytes go through the strict
|
|
58
|
+
* `decodePCActn` parser, so a malformed object throws a clear Error.
|
|
59
|
+
*/
|
|
60
|
+
function parsePCActnInput(input) {
|
|
61
|
+
const trimmed = input.trim();
|
|
62
|
+
if (trimmed.length === 0)
|
|
63
|
+
throw new Error('empty input: expected a PCActn as JSON text or base64url');
|
|
64
|
+
if (trimmed.startsWith('{')) {
|
|
65
|
+
try {
|
|
66
|
+
return (0, pca_1.decodePCActn)(trimmed);
|
|
67
|
+
}
|
|
68
|
+
catch (e) {
|
|
69
|
+
throw new Error(`not a valid PCActn (JSON): ${errMessage(e)}`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
let bytes;
|
|
73
|
+
try {
|
|
74
|
+
bytes = (0, pca_1.unb64u)(trimmed);
|
|
75
|
+
}
|
|
76
|
+
catch (e) {
|
|
77
|
+
throw new Error(`input is neither JSON (no leading '{') nor valid base64url: ${errMessage(e)}`);
|
|
78
|
+
}
|
|
79
|
+
let text;
|
|
80
|
+
try {
|
|
81
|
+
text = new TextDecoder('utf-8', { fatal: true }).decode(bytes);
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
throw new Error('base64url decoded to bytes that are not valid UTF-8; not a PCActn');
|
|
85
|
+
}
|
|
86
|
+
try {
|
|
87
|
+
return (0, pca_1.decodePCActn)(text);
|
|
88
|
+
}
|
|
89
|
+
catch (e) {
|
|
90
|
+
throw new Error(`base64url decoded but is not a valid PCActn: ${errMessage(e)}`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Decode a PCActn (JSON or base64url) and return a readable summary: verb, resource, audience, the
|
|
95
|
+
* issued/expiry window (ISO + raw ms), counter, capability-chain depth, the claimed risk, and
|
|
96
|
+
* whether a threshold or zk-compliance field rides along. Throws a clear Error on malformed input.
|
|
97
|
+
*/
|
|
98
|
+
function cmdDecode(input) {
|
|
99
|
+
const p = parsePCActnInput(input);
|
|
100
|
+
const chainDepth = Array.isArray(p.cap_chain) ? p.cap_chain.length : 0;
|
|
101
|
+
const riskR = isRecord(p.risk_claim) && typeof p.risk_claim.r === 'number' ? String(p.risk_claim.r) : '(none)';
|
|
102
|
+
const lines = [
|
|
103
|
+
'PCActn summary',
|
|
104
|
+
` verb ${p.action.verb}`,
|
|
105
|
+
` resource ${p.action.resource}`,
|
|
106
|
+
` reversibility ${p.action.reversibility_class}`,
|
|
107
|
+
` audience ${p.aud || '(none)'}`,
|
|
108
|
+
` issued (iat) ${iso(p.iat)} [${p.iat}]`,
|
|
109
|
+
` expires (exp) ${iso(p.exp)} [${p.exp}]`,
|
|
110
|
+
` counter ${p.counter}`,
|
|
111
|
+
` cap-chain depth ${chainDepth}`,
|
|
112
|
+
` risk_claim.r ${riskR}`,
|
|
113
|
+
` threshold ${p.threshold !== undefined ? 'present' : 'absent'}`,
|
|
114
|
+
` zk_compliance ${p.zk_compliance !== undefined ? 'present' : 'absent'}`,
|
|
115
|
+
];
|
|
116
|
+
return lines.join('\n');
|
|
117
|
+
}
|
|
118
|
+
// ---- explain --------------------------------------------------------------------------------------
|
|
119
|
+
const STATUS_LABEL = { pass: 'PASS', fail: 'FAIL', 'not-enforced': '—' };
|
|
120
|
+
/**
|
|
121
|
+
* The "why did it (not) verify?" explainer. Decodes the PCActn, takes its `cap_chain[0]` as the root
|
|
122
|
+
* grant (the capability the whole chain descends from), and runs the REAL `verifyPCActnCore` against
|
|
123
|
+
* it, then formats each check as PASS / FAIL / — (not enforced by this verifier profile) with a final
|
|
124
|
+
* verdict line. `--aud` supplies this verifier's audience; omit it to accept any audience.
|
|
125
|
+
*/
|
|
126
|
+
async function cmdExplain(input, opts) {
|
|
127
|
+
const p = parsePCActnInput(input);
|
|
128
|
+
const grant = Array.isArray(p.cap_chain) ? p.cap_chain[0] : undefined;
|
|
129
|
+
if (!grant)
|
|
130
|
+
throw new Error('cannot explain: the PCActn has an empty capability chain (no root grant)');
|
|
131
|
+
const result = await (0, pca_1.verifyPCActnCore)(p, {
|
|
132
|
+
grant,
|
|
133
|
+
audience: opts.audience ?? null,
|
|
134
|
+
nowEpoch: opts.now,
|
|
135
|
+
});
|
|
136
|
+
const checks = {};
|
|
137
|
+
for (const [name, status] of Object.entries(result.checks)) {
|
|
138
|
+
checks[name] = STATUS_LABEL[status] ?? status;
|
|
139
|
+
}
|
|
140
|
+
const reasons = [];
|
|
141
|
+
if (result.reason)
|
|
142
|
+
reasons.push(result.reason);
|
|
143
|
+
const audLine = opts.audience === undefined ? 'any (not supplied)' : opts.audience;
|
|
144
|
+
const width = Math.max(...Object.keys(checks).map((k) => k.length), 0) + 2;
|
|
145
|
+
const checkLines = Object.entries(result.checks).map(([name, status]) => {
|
|
146
|
+
const label = STATUS_LABEL[status] ?? status;
|
|
147
|
+
const note = status === 'not-enforced' ? ' (not enforced by this verifier profile)' : '';
|
|
148
|
+
return ` ${pad(name, width)}${label}${note}`;
|
|
149
|
+
});
|
|
150
|
+
const text = [
|
|
151
|
+
'PCActn verification (explain)',
|
|
152
|
+
` verb ${p.action.verb}`,
|
|
153
|
+
` resource ${p.action.resource}`,
|
|
154
|
+
` action audience ${p.aud || '(none)'}`,
|
|
155
|
+
` verifier aud ${audLine}`,
|
|
156
|
+
'',
|
|
157
|
+
...checkLines,
|
|
158
|
+
'',
|
|
159
|
+
` VERDICT: ${result.allow ? 'ALLOW' : 'DENY'}`,
|
|
160
|
+
...(reasons.length ? ['', ' reasons:', ...reasons.map((r) => ` - ${r}`)] : []),
|
|
161
|
+
].join('\n');
|
|
162
|
+
return { allow: result.allow, checks, reasons, text };
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Mint a throwaway Ed25519 dev keypair and return both keys base64url-encoded plus a clearly labelled
|
|
166
|
+
* block. This is a DEV convenience — not a production holder key. The secret signs PCActns as this
|
|
167
|
+
* holder and must stay private; the public key is what a grant binds to (`holder`).
|
|
168
|
+
*/
|
|
169
|
+
function cmdKeygen() {
|
|
170
|
+
const kp = (0, pca_1.generateKeyPair)();
|
|
171
|
+
const publicKey = (0, pca_1.b64u)(kp.publicKey);
|
|
172
|
+
const secretKey = (0, pca_1.b64u)(kp.secretKey);
|
|
173
|
+
const text = [
|
|
174
|
+
'PCA dev keypair (Ed25519)',
|
|
175
|
+
` public ${publicKey}`,
|
|
176
|
+
` secret ${secretKey}`,
|
|
177
|
+
'',
|
|
178
|
+
' Keep the SECRET key private — it signs PCActns as this holder.',
|
|
179
|
+
' Share only the public key (a grant binds to it as `holder`).',
|
|
180
|
+
].join('\n');
|
|
181
|
+
return { publicKey, secretKey, text };
|
|
182
|
+
}
|
|
183
|
+
/** Emit a `.well-known/pca-configuration` document for a resource server to publish. */
|
|
184
|
+
function cmdDiscovery(opts) {
|
|
185
|
+
const doc = (0, pca_1.buildDiscoveryDocument)({
|
|
186
|
+
audience: opts.audience,
|
|
187
|
+
...(opts.suites && opts.suites.length ? { signatureSuites: opts.suites } : {}),
|
|
188
|
+
...(opts.endpoints && Object.keys(opts.endpoints).length ? { endpoints: opts.endpoints } : {}),
|
|
189
|
+
});
|
|
190
|
+
return JSON.stringify(doc, null, 2);
|
|
191
|
+
}
|
|
192
|
+
function parsePolicySpec(policyJson) {
|
|
193
|
+
const spec = parseJson(policyJson, 'policy');
|
|
194
|
+
if (!isRecord(spec))
|
|
195
|
+
throw new Error('policy must be a JSON object { permissions, limits? }');
|
|
196
|
+
if (!isRecord(spec.permissions))
|
|
197
|
+
throw new Error('policy.permissions must be an object { connector: [action, ...] }');
|
|
198
|
+
const permissions = {};
|
|
199
|
+
for (const [connector, acts] of Object.entries(spec.permissions)) {
|
|
200
|
+
if (!Array.isArray(acts))
|
|
201
|
+
throw new Error(`policy.permissions.${connector} must be an array of action names`);
|
|
202
|
+
const names = [];
|
|
203
|
+
for (const a of acts) {
|
|
204
|
+
if (typeof a !== 'string')
|
|
205
|
+
throw new Error(`policy.permissions.${connector} must contain only strings`);
|
|
206
|
+
names.push(a);
|
|
207
|
+
}
|
|
208
|
+
permissions[connector] = names;
|
|
209
|
+
}
|
|
210
|
+
if (spec.limits === undefined)
|
|
211
|
+
return { permissions };
|
|
212
|
+
if (!isRecord(spec.limits))
|
|
213
|
+
throw new Error('policy.limits must be an object { action: "$X/period" }');
|
|
214
|
+
const limits = {};
|
|
215
|
+
for (const [k, v] of Object.entries(spec.limits)) {
|
|
216
|
+
if (typeof v !== 'string')
|
|
217
|
+
throw new Error(`policy.limits.${k} must be a string like "$500/day"`);
|
|
218
|
+
limits[k] = v;
|
|
219
|
+
}
|
|
220
|
+
return { permissions, limits };
|
|
221
|
+
}
|
|
222
|
+
function parseSimActions(actionsJson) {
|
|
223
|
+
const arr = parseJson(actionsJson, 'actions');
|
|
224
|
+
if (!Array.isArray(arr))
|
|
225
|
+
throw new Error('actions must be a JSON array of { verb, resource, params?, at? }');
|
|
226
|
+
return arr.map((raw, i) => {
|
|
227
|
+
if (!isRecord(raw))
|
|
228
|
+
throw new Error(`actions[${i}] must be an object`);
|
|
229
|
+
if (typeof raw.verb !== 'string')
|
|
230
|
+
throw new Error(`actions[${i}].verb must be a string`);
|
|
231
|
+
if (typeof raw.resource !== 'string')
|
|
232
|
+
throw new Error(`actions[${i}].resource must be a string`);
|
|
233
|
+
const out = { verb: raw.verb, resource: raw.resource };
|
|
234
|
+
if (raw.params !== undefined) {
|
|
235
|
+
if (!isRecord(raw.params))
|
|
236
|
+
throw new Error(`actions[${i}].params must be an object`);
|
|
237
|
+
out.params = raw.params;
|
|
238
|
+
}
|
|
239
|
+
if (raw.at !== undefined) {
|
|
240
|
+
if (typeof raw.at !== 'number' || !Number.isFinite(raw.at))
|
|
241
|
+
throw new Error(`actions[${i}].at must be a number (epoch ms)`);
|
|
242
|
+
out.at = raw.at;
|
|
243
|
+
}
|
|
244
|
+
return out;
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Compile a policy spec `{ permissions, limits? }` and replay an actions array against it, printing a
|
|
249
|
+
* per-action table (auto / step_up / deny + the trust budget remaining after each), the static lints
|
|
250
|
+
* `lintPolicy` found, and the autonomy bound (the most this grant can spend/risk between human
|
|
251
|
+
* co-signs). Pure and offline — the resource server's verifier remains the authority at run time.
|
|
252
|
+
*/
|
|
253
|
+
function cmdSimulate(policyJson, actionsJson) {
|
|
254
|
+
const { permissions, limits } = parsePolicySpec(policyJson);
|
|
255
|
+
const policy = (0, pca_1.compilePolicy)({ permissions, ...(limits !== undefined ? { limits } : {}) });
|
|
256
|
+
const actions = parseSimActions(actionsJson);
|
|
257
|
+
const report = (0, pca_1.simulate)(policy, actions);
|
|
258
|
+
const lints = (0, pca_1.lintPolicy)(policy);
|
|
259
|
+
const { bMax, kappa } = policy.riskPolicy;
|
|
260
|
+
const safety = kappa > 0 ? Math.max(0, bMax) / kappa : 0;
|
|
261
|
+
const autonomyBound = safety * kappa;
|
|
262
|
+
const header = ` ${pad('#', 3)}${pad('verb', 18)}${pad('resource', 20)}${pad('outcome', 10)}budgetAfter`;
|
|
263
|
+
const rows = report.results.map((r, i) => ` ${pad(String(i + 1), 3)}${pad(r.action.verb, 18)}${pad(r.action.resource, 20)}${pad(r.outcome, 10)}${r.budgetAfter.toFixed(2)}`);
|
|
264
|
+
const lintLines = lints.length
|
|
265
|
+
? lints.map((l) => ` [${l.level}] ${l.code}: ${l.message}`)
|
|
266
|
+
: [' (none)'];
|
|
267
|
+
return [
|
|
268
|
+
`Policy simulation (${report.results.length} action${report.results.length === 1 ? '' : 's'})`,
|
|
269
|
+
'',
|
|
270
|
+
header,
|
|
271
|
+
...rows,
|
|
272
|
+
'',
|
|
273
|
+
` auto=${report.auto} step_up=${report.stepUp} deny=${report.deny} endBudget=${report.endBudget.toFixed(2)} peakRisk=${report.peakRisk.toFixed(3)}`,
|
|
274
|
+
` autonomy bound: ${autonomyBound.toFixed(2)} (most this grant can spend/risk between human co-signs)`,
|
|
275
|
+
'',
|
|
276
|
+
'Lints:',
|
|
277
|
+
...lintLines,
|
|
278
|
+
].join('\n');
|
|
279
|
+
}
|
|
280
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,59 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atlasauth/pca-cli",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "The pca dev CLI: decode and explain a PCActn (why it passed or failed each check), mint a dev grant/key, and simulate a policy over actions.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"cli",
|
|
7
|
+
"debugging",
|
|
8
|
+
"policy simulation",
|
|
9
|
+
"agent authorization",
|
|
10
|
+
"proof-carrying authority",
|
|
11
|
+
"pca",
|
|
12
|
+
"ai agents"
|
|
13
|
+
],
|
|
14
|
+
"license": "MIT",
|
|
15
|
+
"homepage": "https://github.com/Atlas-Authorization/pca#readme",
|
|
16
|
+
"bugs": {
|
|
17
|
+
"url": "https://github.com/Atlas-Authorization/pca/issues"
|
|
18
|
+
},
|
|
19
|
+
"repository": {
|
|
20
|
+
"type": "git",
|
|
21
|
+
"url": "git+https://github.com/Atlas-Authorization/pca.git",
|
|
22
|
+
"directory": "packages/pca-cli"
|
|
23
|
+
},
|
|
24
|
+
"main": "./dist/index.js",
|
|
25
|
+
"types": "./dist/index.d.ts",
|
|
26
|
+
"bin": {
|
|
27
|
+
"pca": "./dist/cli.js"
|
|
28
|
+
},
|
|
29
|
+
"exports": {
|
|
30
|
+
".": {
|
|
31
|
+
"types": "./dist/index.d.ts",
|
|
32
|
+
"default": "./dist/index.js"
|
|
33
|
+
},
|
|
34
|
+
"./package.json": "./package.json"
|
|
35
|
+
},
|
|
36
|
+
"dependencies": {
|
|
37
|
+
"@atlasauth/pca": "0.2.0"
|
|
38
|
+
},
|
|
39
|
+
"devDependencies": {
|
|
40
|
+
"typescript": "^5.6.3",
|
|
41
|
+
"vitest": "^2.1.4"
|
|
42
|
+
},
|
|
43
|
+
"files": [
|
|
44
|
+
"dist",
|
|
45
|
+
"README.md",
|
|
46
|
+
"LICENSE"
|
|
47
|
+
],
|
|
48
|
+
"engines": {
|
|
49
|
+
"node": ">=20"
|
|
50
|
+
},
|
|
51
|
+
"publishConfig": {
|
|
52
|
+
"access": "public"
|
|
53
|
+
},
|
|
54
|
+
"scripts": {
|
|
55
|
+
"build": "tsc -p tsconfig.build.json",
|
|
56
|
+
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
57
|
+
"test": "vitest run"
|
|
58
|
+
}
|
|
6
59
|
}
|