@credda/cli 0.1.1 → 0.1.2
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 +136 -1
- package/dist/cli.d.ts +50 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +701 -5
- package/dist/cli.js.map +1 -1
- package/dist/cli.test.js +626 -1
- package/dist/cli.test.js.map +1 -1
- package/dist/index.js +24 -1
- package/dist/index.js.map +1 -1
- package/package.json +12 -12
package/README.md
CHANGED
|
@@ -29,6 +29,17 @@ credda verify <file|-> # OFFLINE-verify a credential someone handed you:
|
|
|
29
29
|
# '-' reads stdin. Exit 0 valid / 2 invalid.
|
|
30
30
|
credda registry # federated trust registry (/.well-known)
|
|
31
31
|
credda did # issuer DID document
|
|
32
|
+
credda benchmarks # cohort-benchmark catalog: the dimensions you can
|
|
33
|
+
# benchmark on and the k-anonymity floor below
|
|
34
|
+
# which no cohort is disclosed
|
|
35
|
+
credda reason-codes # adverse-action reason-code catalog (ECOA / Reg B).
|
|
36
|
+
# Credda supplies the attribution only — it is not
|
|
37
|
+
# a creditor and issues no notice.
|
|
38
|
+
credda badges list # the closed set of Open Badges 3.0 achievements
|
|
39
|
+
credda badges get <badgeId> # this issuer will sign, and one definition
|
|
40
|
+
credda professional-record public <token>
|
|
41
|
+
# the professional record behind a share token —
|
|
42
|
+
# the token IS the subject's consent to present it
|
|
32
43
|
```
|
|
33
44
|
|
|
34
45
|
Platform — set `CREDDA_API_KEY` (a `crd_live_…` platform key):
|
|
@@ -38,11 +49,135 @@ credda score <userId> # current score
|
|
|
38
49
|
credda explain <userId> # factor-level explanation
|
|
39
50
|
credda components <userId> # six named 0-100 components
|
|
40
51
|
credda risk <userId> # advisory risk signals
|
|
41
|
-
credda
|
|
52
|
+
credda trust-summary <userId> [--narrative]
|
|
53
|
+
# deterministic, evidence-based summary + strengths
|
|
54
|
+
# + risks. It explains; it is never a verdict.
|
|
55
|
+
# --narrative adds an advisory AI retelling.
|
|
56
|
+
credda benchmark <userId> [--dimension <d>]
|
|
57
|
+
# where the subject sits in its cohort: percentile
|
|
58
|
+
# + the cohort distribution. `available:false`
|
|
59
|
+
# when the cohort is below the k-anonymity floor
|
|
60
|
+
# (insufficient_data) or the subject has no score
|
|
61
|
+
# yet (no_score).
|
|
62
|
+
credda distribution [--dimension <d>] [--cohort <c>]
|
|
63
|
+
# aggregate, k-anonymised cohort distribution.
|
|
64
|
+
# Omit --cohort for every cohort on the dimension.
|
|
65
|
+
credda users [--score-min <n>] [--score-max <n>] [--band <b>]
|
|
66
|
+
[--subject-type <PERSON|AGENT>] [--active-since <iso>]
|
|
67
|
+
[--verified] [--min-verified <n>]
|
|
68
|
+
[--sort <score|lastActivity|registered|externalId>]
|
|
69
|
+
[--order <asc|desc>] [--cursor <c>] [--limit <n>]
|
|
70
|
+
# query + export your book of subjects. The filter
|
|
71
|
+
# set is closed and validated — no query DSL.
|
|
72
|
+
credda usage [days] # your platform's metered usage (trailing window)
|
|
73
|
+
credda usage --from 2026-06-01 --to 2026-06-30
|
|
74
|
+
# explicit statement range (mutually exclusive
|
|
75
|
+
# with [days])
|
|
76
|
+
credda usage --csv usage.csv
|
|
77
|
+
# write the flat CSV statement to a file
|
|
78
|
+
# (raw ?format=csv fetch; combines with either window)
|
|
79
|
+
credda activity [--action <A>] [--from <t>] [--to <t>] [--cursor <c>] [--limit <n>]
|
|
80
|
+
# your platform's own activity/audit log,
|
|
81
|
+
# newest-first, cursor-paginated
|
|
82
|
+
credda verified-profile <userId>
|
|
83
|
+
# how much of a subject's CLAIMED record
|
|
84
|
+
# (education/skills/certifications/employment) is
|
|
85
|
+
# third-party verified. Counts WHETHER a claim is
|
|
86
|
+
# verified, never how prestigious it is — and can
|
|
87
|
+
# never move the Reliability Score.
|
|
88
|
+
credda qualify <userId> --category <education|skill|certification|employment>
|
|
89
|
+
[--label <l>] [--issuer <i>] [--verified-by <witness>]
|
|
90
|
+
# record a qualification claim. Always recorded;
|
|
91
|
+
# counts as VERIFIED only with a genuine
|
|
92
|
+
# third-party --verified-by witness.
|
|
93
|
+
credda professional-record get <userId>
|
|
94
|
+
# résumé-shaped summary of a VERIFIED work record.
|
|
95
|
+
# Describes a record — not a hiring verdict, a
|
|
96
|
+
# background check, or a consumer report.
|
|
97
|
+
credda professional-record credential <userId> [--ttl <seconds>]
|
|
98
|
+
# mint the signed, offline-verifiable credential
|
|
99
|
+
# (+ an "Add to LinkedIn" certification link)
|
|
42
100
|
credda mint <userId> # mint a share token
|
|
43
101
|
credda revoke <userId> # revoke a share token
|
|
44
102
|
```
|
|
45
103
|
|
|
104
|
+
Confirmation requests — the counterparty-confirmation primitive. You propose an
|
|
105
|
+
outcome and deliver the one-time token yourself; the event is written, verified,
|
|
106
|
+
only when that distinct party confirms:
|
|
107
|
+
|
|
108
|
+
```sh
|
|
109
|
+
credda confirmations create --user worker_7 --type CONTRACT_FULFILLED \
|
|
110
|
+
--counterparty client_42 --counterparty-name "Acme Ltd" \
|
|
111
|
+
--description "Kitchen refit" [--stake HIGH] [--value 1200] \
|
|
112
|
+
[--due <iso>] [--completed <iso>] [--return-url <url>] \
|
|
113
|
+
[--expires-in 14] [--idempotency-key <k>]
|
|
114
|
+
# needs CREDDA_API_KEY. The token is shown ONCE;
|
|
115
|
+
# creating a request writes no event.
|
|
116
|
+
credda confirmations list [--status PENDING] [--cursor <c>] [--limit <n>]
|
|
117
|
+
credda confirmations get <id>
|
|
118
|
+
credda confirmations cancel <id> # only while PENDING
|
|
119
|
+
|
|
120
|
+
# ⚠️ These two are the COUNTERPARTY's calls and take NO API key — they hold a
|
|
121
|
+
# token, not a Credda account:
|
|
122
|
+
credda confirmations preview <id> --token <t>
|
|
123
|
+
credda confirmations respond <id> --token <t> --confirm
|
|
124
|
+
credda confirmations respond <id> --token <t> --decline
|
|
125
|
+
# --confirm writes the verified event; --decline
|
|
126
|
+
# writes nothing. Single-use either way, and
|
|
127
|
+
# there is no default: you must say which.
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
Threshold policies — declarative "tell me when this line is crossed", delivered
|
|
131
|
+
as `policy.threshold_crossed` through your webhooks. Config only: a policy never
|
|
132
|
+
reads into, blocks, or changes a score:
|
|
133
|
+
|
|
134
|
+
```sh
|
|
135
|
+
credda policies create --name "Watch 60" --user worker_7 \
|
|
136
|
+
--metric score --direction down --threshold 60
|
|
137
|
+
credda policies create --name "Anyone entering High Risk" --all \
|
|
138
|
+
--metric band --direction enter --band "High Risk"
|
|
139
|
+
credda policies list [--cursor <c>] [--limit <n>]
|
|
140
|
+
credda policies get <id>
|
|
141
|
+
credda policies update <id> [--threshold <n>] [--direction <d>] [--band <b>]
|
|
142
|
+
[--component <c>] [--name <n>] [--activate | --deactivate]
|
|
143
|
+
# the metric is immutable — delete and recreate
|
|
144
|
+
credda policies delete <id>
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
Score monitors — set `CREDDA_API_KEY`. Edge-triggered threshold/band watches
|
|
148
|
+
that deliver `monitor.triggered` through your subscribed webhooks;
|
|
149
|
+
notification config only — a monitor never affects a score:
|
|
150
|
+
|
|
151
|
+
```sh
|
|
152
|
+
credda monitors list [--cursor <c>] [--limit <n>]
|
|
153
|
+
credda monitors get <id>
|
|
154
|
+
credda monitors create --user <externalId> --below 40
|
|
155
|
+
# at least one condition required:
|
|
156
|
+
# --below <score> downward crossing (also fires
|
|
157
|
+
# on a FIRST score already below)
|
|
158
|
+
# --above <score> upward crossing
|
|
159
|
+
# --band-change any band change
|
|
160
|
+
credda monitors delete <id>
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
Bulk screenings — set `CREDDA_API_KEY`. Async batch score reads (up to
|
|
164
|
+
10,000 ids per job), strictly read-only:
|
|
165
|
+
|
|
166
|
+
```sh
|
|
167
|
+
credda screen u1,u2 u3 # ids inline, comma/space separated
|
|
168
|
+
credda screen --file roster.csv
|
|
169
|
+
# one id per line, or a CSV whose FIRST column is
|
|
170
|
+
# the id (a leading id/userId/externalId header
|
|
171
|
+
# row is skipped; no quoted-CSV handling)
|
|
172
|
+
credda screen u1,u2 --wait # poll until the job finishes, print the summary
|
|
173
|
+
# (exit 1 if the job FAILED)
|
|
174
|
+
credda screenings list [--cursor <c>] [--limit <n>]
|
|
175
|
+
credda screenings get <id> # job status + summary
|
|
176
|
+
credda screenings results <id> # per-user results as JSON
|
|
177
|
+
credda screenings results <id> --csv out.csv
|
|
178
|
+
# write the CSV attachment instead (raw fetch)
|
|
179
|
+
```
|
|
180
|
+
|
|
46
181
|
Webhooks — set `CREDDA_API_KEY`:
|
|
47
182
|
|
|
48
183
|
```sh
|
package/dist/cli.d.ts
CHANGED
|
@@ -31,9 +31,57 @@ export interface CliContext {
|
|
|
31
31
|
port: number;
|
|
32
32
|
secret?: string;
|
|
33
33
|
}) => Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* Raw authenticated GET returning the response body as text — for the CSV
|
|
36
|
+
* endpoints (`?format=csv`), which the typed SDK deliberately leaves to raw
|
|
37
|
+
* fetch. `path` is relative to the `/api/v1` prefix.
|
|
38
|
+
*/
|
|
39
|
+
fetchCsv?: (path: string, apiKey: string) => Promise<string>;
|
|
40
|
+
/** Write a file to disk (CSV outputs). Injected so the router stays fs-free. */
|
|
41
|
+
writeFile?: (path: string, content: string) => Promise<void>;
|
|
42
|
+
/** Sleep between `screen --wait` polls. Injected so tests don't wait. */
|
|
43
|
+
sleep?: (ms: number) => Promise<void>;
|
|
44
|
+
/** Poll interval for `screen --wait` (default 2000ms). */
|
|
45
|
+
pollIntervalMs?: number;
|
|
34
46
|
}
|
|
35
|
-
export declare const VERSION = "0.
|
|
36
|
-
export declare const HELP = "credda \u2014 portable trust from the terminal\n\nPublic (no API key):\n credda lookup <token> Trust check for a share token\n credda export <token> Full self-verifying trust export bundle\n credda verify <file|-> Offline-verify a credential: a W3C VC-JWT,\n a compact Trust Credential, or a saved trust\n export bundle (auto-detected). '-' = stdin.\n credda registry Federated trust registry\n credda did Issuer DID document\n\nPlatform (needs CREDDA_API_KEY):\n credda score <userId> Current score\n credda explain <userId> Factor-level score explanation\n credda components <userId> Six named 0-100 score components\n credda risk <userId> Advisory risk signals\n credda usage [days]
|
|
47
|
+
export declare const VERSION = "0.1.2";
|
|
48
|
+
export declare const HELP = "credda \u2014 portable trust from the terminal\n\nPublic (no API key):\n credda lookup <token> Trust check for a share token\n credda export <token> Full self-verifying trust export bundle\n credda verify <file|-> Offline-verify a credential: a W3C VC-JWT,\n a compact Trust Credential, or a saved trust\n export bundle (auto-detected). '-' = stdin.\n credda registry Federated trust registry\n credda did Issuer DID document\n credda benchmarks Cohort-benchmark catalog (dimensions + k-anonymity)\n credda reason-codes Adverse-action reason-code catalog (ECOA / Reg B)\n credda badges list Open Badges 3.0 achievements this issuer signs\n credda badges get <badgeId> One achievement definition\n credda professional-record public <token>\n The professional record behind a share token\n (the subject's own consent to present it)\n\nPlatform (needs CREDDA_API_KEY):\n credda score <userId> Current score\n credda explain <userId> Factor-level score explanation\n credda components <userId> Six named 0-100 score components\n credda risk <userId> Advisory risk signals\n credda trust-summary <userId> [--narrative]\n Deterministic, evidence-based trust summary\n (explains; never a verdict). --narrative adds an\n advisory AI retelling when the server has AI on.\n credda benchmark <userId> [--dimension <d>]\n Where a subject sits within its cohort:\n percentile + the cohort distribution\n credda distribution [--dimension <d>] [--cohort <c>]\n Aggregate, k-anonymised cohort distribution.\n Omit --cohort for every cohort on the dimension.\n credda users [--score-min <n>] [--score-max <n>] [--band <b>] [--subject-type <PERSON|AGENT>]\n [--active-since <iso>] [--verified] [--min-verified <n>]\n [--sort <score|lastActivity|registered|externalId>] [--order <asc|desc>]\n [--cursor <c>] [--limit <n>]\n Query + export your book of subjects\n credda usage [days] [--from <date> --to <date>] [--csv <outfile>]\n Your platform's metered API usage. Either a\n trailing [days] window OR an inclusive\n --from/--to date range (YYYY-MM-DD), not both.\n --csv writes the flat CSV statement to a file.\n credda activity [--action <A>] [--from <t> --to <t>] [--cursor <c>] [--limit <n>]\n Your platform's own activity/audit log,\n newest-first, cursor-paginated\n credda verified-profile <userId>\n How much of a subject's CLAIMED record\n (education/skills/certifications/employment) is\n third-party verified. Counts whether a claim is\n verified, never how prestigious it is \u2014 and it\n can never move the Reliability Score.\n credda qualify <userId> --category <education|skill|certification|employment>\n [--label <l>] [--issuer <i>] [--verified-by <witness>]\n Record a qualification claim. Always recorded;\n counts as VERIFIED only with a genuine\n third-party --verified-by witness.\n credda professional-record get <userId>\n R\u00E9sum\u00E9-shaped summary of a VERIFIED work record.\n Describes a record \u2014 not a hiring verdict, a\n background check, or a consumer report.\n credda professional-record credential <userId> [--ttl <seconds>]\n Mint the signed, offline-verifiable Professional\n Record Credential (+ an \"Add to LinkedIn\" link)\n credda mint <userId> Mint a share token for a user\n credda revoke <userId> Revoke a user's share token\n\nConfirmation requests \u2014 the counterparty-confirmation primitive. You PROPOSE an\noutcome and deliver the one-time token to the counterparty over YOUR OWN channel;\nthe event is written, verified, only when that distinct party confirms:\n credda confirmations create --user <externalId> --type <eventType>\n --counterparty <ref> [--counterparty-name <n>] [--description <d>]\n [--stake <HIGH|MEDIUM|LOW>] [--value <n>] [--due <iso>] [--completed <iso>]\n [--return-url <url>] [--expires-in <days>] [--idempotency-key <k>]\n Needs CREDDA_API_KEY. Token shown ONCE.\n credda confirmations list [--status <s>] [--cursor <c>] [--limit <n>]\n credda confirmations get <id>\n credda confirmations cancel <id>\n credda confirmations preview <id> --token <t>\n What the counterparty is asked to confirm.\n NO API key \u2014 the token is the capability.\n credda confirmations respond <id> --token <t> (--confirm | --decline)\n The counterparty's decision. NO API key.\n --confirm writes the event; --decline writes\n nothing. Single-use either way.\n\nThreshold policies (needs CREDDA_API_KEY) \u2014 declarative \"tell me when this line\nis crossed\"; delivers policy.threshold_crossed through your webhooks. Config\nonly: a policy never reads into, blocks, or changes a score:\n credda policies list [--cursor <c>] [--limit <n>]\n credda policies get <id>\n credda policies create --name <n> (--user <externalId> | --all)\n --metric <score|component|band|verified_events>\n [--direction <up|down|enter|leave>] [--threshold <n>]\n [--component <reliability|timeliness|trustworthiness|verification|consistency|momentum>]\n [--band <b>]\n credda policies update <id> [--name <n>] [--direction <d>] [--threshold <n>]\n [--component <c>] [--band <b>] [--activate | --deactivate]\n The metric is immutable \u2014 delete + recreate.\n credda policies delete <id>\n\nScore monitors (needs CREDDA_API_KEY) \u2014 edge-triggered watches that deliver\n\"monitor.triggered\" through your webhooks; notification config only, a\nmonitor never affects a score:\n credda monitors list [--cursor <c>] [--limit <n>]\n credda monitors get <id>\n credda monitors create --user <externalId> [--below <score>] [--above <score>] [--band-change]\n At least one condition required. --below fires\n on a downward crossing (and on a first score\n already below it), --above on an upward\n crossing, --band-change on any band change.\n credda monitors delete <id>\n\nBulk screenings (needs CREDDA_API_KEY) \u2014 async batch score reads, up to\n10,000 ids per job, strictly read-only:\n credda screen <ids...> Submit ids (comma/space separated), or:\n credda screen --file <path> One id per line, or a CSV whose FIRST column\n is the id (a leading \"id\"/\"userId\"/\n \"externalId\" header row is skipped).\n [--wait] Poll until the job finishes, then print the\n summary (exit 1 if the job FAILED).\n credda screenings list [--cursor <c>] [--limit <n>]\n credda screenings get <id> Job status + summary\n credda screenings results <id> [--csv <outfile>]\n Per-user results (JSON; --csv writes the CSV\n attachment to a file instead)\n\nWebhooks (needs CREDDA_API_KEY):\n credda webhooks list Your webhook subscriptions\n credda webhooks create <url> <event..> Subscribe (secret shown ONCE)\n credda webhooks delete <id> Remove a webhook\n credda webhooks test <id> Send a synthetic signed delivery\n credda webhooks deliveries <id> Recent delivery attempts (incl. retries)\n credda webhooks recent [event..] Recent events across ALL your endpoints\n (sample data for automation platforms;\n falls back to catalog examples, flagged\n isExample, when nothing has fired yet)\n\nLocal development:\n credda listen [port] Local webhook receiver: verifies each delivery's\n HMAC signature (CREDDA_WEBHOOK_SECRET) and\n pretty-prints the payload. Default port 4141.\n Credda delivers to public HTTPS only \u2014 expose\n this port with your own tunnel (e.g. cloudflared).\n\nEnvironment:\n CREDDA_API_URL API base (default https://api.credda.io)\n CREDDA_API_KEY Platform API key for keyed commands\n CREDDA_WEBHOOK_SECRET whsec_\u2026 signing secret for \"credda listen\"\n\nExit codes: 0 ok/valid \u00B7 1 error \u00B7 2 credential failed verification";
|
|
49
|
+
/**
|
|
50
|
+
* Extra stderr lines for a failed command.
|
|
51
|
+
*
|
|
52
|
+
* The important one is the **request id**: it is the single fastest way for
|
|
53
|
+
* Credda to diagnose a failure, and a CLI user has nowhere else to find it.
|
|
54
|
+
* Also surfaces the machine code (so it can be looked up in
|
|
55
|
+
* `GET /api/v1/errors`) and any `Retry-After` the server asked for.
|
|
56
|
+
*
|
|
57
|
+
* Duck-typed rather than `instanceof CreddaError` on purpose — the router
|
|
58
|
+
* imports only TYPES from the SDK, so it stays pure and trivially mockable.
|
|
59
|
+
* Pure and exported for testing.
|
|
60
|
+
*/
|
|
61
|
+
export declare function errorHints(e: unknown): string[];
|
|
62
|
+
/**
|
|
63
|
+
* Tiny flag parser: `--name value` for valued flags, bare `--name` for
|
|
64
|
+
* booleans, everything else positional. Unknown `--flags` are an error rather
|
|
65
|
+
* than silently becoming positionals.
|
|
66
|
+
*/
|
|
67
|
+
export declare function parseFlags(args: string[], spec?: {
|
|
68
|
+
valued?: string[];
|
|
69
|
+
boolean?: string[];
|
|
70
|
+
}): {
|
|
71
|
+
positional: string[];
|
|
72
|
+
flags: Record<string, string | true>;
|
|
73
|
+
};
|
|
74
|
+
/**
|
|
75
|
+
* Parse the ids for `credda screen`. Inline args may be comma- and/or
|
|
76
|
+
* space-separated. A file is one id per line — or a CSV, in which case only
|
|
77
|
+
* the FIRST column is read (a leading header row named id/userId/externalId
|
|
78
|
+
* is skipped). Deduped, order-preserving. Deliberately simple: no quoted-CSV
|
|
79
|
+
* handling — an id containing a comma isn't a valid external id anyway.
|
|
80
|
+
*/
|
|
81
|
+
export declare function parseIdList(input: {
|
|
82
|
+
inline?: string[];
|
|
83
|
+
fileText?: string;
|
|
84
|
+
}): string[];
|
|
37
85
|
/** Classify verify input: trust-export bundle JSON, VC-JWT, or compact credential. */
|
|
38
86
|
export declare function classifyCredentialInput(raw: string): {
|
|
39
87
|
kind: 'export';
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,kBAAkB,EAClB,UAAU,EACV,mBAAmB,EACnB,WAAW,
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|