@interop/did-cli 0.6.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/CHANGELOG.md +341 -0
- package/LICENSE.md +21 -0
- package/README.md +1307 -0
- package/dist/commands/did.d.ts +3 -0
- package/dist/commands/did.d.ts.map +1 -0
- package/dist/commands/did.js +605 -0
- package/dist/commands/did.js.map +1 -0
- package/dist/commands/key.d.ts +3 -0
- package/dist/commands/key.d.ts.map +1 -0
- package/dist/commands/key.js +430 -0
- package/dist/commands/key.js.map +1 -0
- package/dist/commands/vc.d.ts +79 -0
- package/dist/commands/vc.d.ts.map +1 -0
- package/dist/commands/vc.js +528 -0
- package/dist/commands/vc.js.map +1 -0
- package/dist/commands/wallet.d.ts +14 -0
- package/dist/commands/wallet.d.ts.map +1 -0
- package/dist/commands/wallet.js +48 -0
- package/dist/commands/wallet.js.map +1 -0
- package/dist/commands/was.d.ts +500 -0
- package/dist/commands/was.d.ts.map +1 -0
- package/dist/commands/was.js +1833 -0
- package/dist/commands/was.js.map +1 -0
- package/dist/commands/zcap.d.ts +85 -0
- package/dist/commands/zcap.d.ts.map +1 -0
- package/dist/commands/zcap.js +447 -0
- package/dist/commands/zcap.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/keys/ecdsa.d.ts +40 -0
- package/dist/keys/ecdsa.d.ts.map +1 -0
- package/dist/keys/ecdsa.js +73 -0
- package/dist/keys/ecdsa.js.map +1 -0
- package/dist/meta.d.ts +164 -0
- package/dist/meta.d.ts.map +1 -0
- package/dist/meta.js +286 -0
- package/dist/meta.js.map +1 -0
- package/dist/storage.d.ts +191 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.js +307 -0
- package/dist/storage.js.map +1 -0
- package/dist/table.d.ts +43 -0
- package/dist/table.d.ts.map +1 -0
- package/dist/table.js +61 -0
- package/dist/table.js.map +1 -0
- package/dist/vc/fixtures/welcomeCredential.d.ts +22 -0
- package/dist/vc/fixtures/welcomeCredential.d.ts.map +1 -0
- package/dist/vc/fixtures/welcomeCredential.js +25 -0
- package/dist/vc/fixtures/welcomeCredential.js.map +1 -0
- package/dist/vc/issue.d.ts +24 -0
- package/dist/vc/issue.d.ts.map +1 -0
- package/dist/vc/issue.js +211 -0
- package/dist/vc/issue.js.map +1 -0
- package/dist/vc/registries.d.ts +30 -0
- package/dist/vc/registries.d.ts.map +1 -0
- package/dist/vc/registries.js +53 -0
- package/dist/vc/registries.js.map +1 -0
- package/dist/vc/registryManager.d.ts +25 -0
- package/dist/vc/registryManager.d.ts.map +1 -0
- package/dist/vc/registryManager.js +29 -0
- package/dist/vc/registryManager.js.map +1 -0
- package/dist/vc/suites/expirationSuite.d.ts +23 -0
- package/dist/vc/suites/expirationSuite.d.ts.map +1 -0
- package/dist/vc/suites/expirationSuite.js +84 -0
- package/dist/vc/suites/expirationSuite.js.map +1 -0
- package/dist/vc/suites/issuerDetailsSuite.d.ts +22 -0
- package/dist/vc/suites/issuerDetailsSuite.d.ts.map +1 -0
- package/dist/vc/suites/issuerDetailsSuite.js +69 -0
- package/dist/vc/suites/issuerDetailsSuite.js.map +1 -0
- package/dist/vc/verify.d.ts +46 -0
- package/dist/vc/verify.d.ts.map +1 -0
- package/dist/vc/verify.js +147 -0
- package/dist/vc/verify.js.map +1 -0
- package/dist/was/address.d.ts +44 -0
- package/dist/was/address.d.ts.map +1 -0
- package/dist/was/address.js +98 -0
- package/dist/was/address.js.map +1 -0
- package/dist/was/capability.d.ts +65 -0
- package/dist/was/capability.d.ts.map +1 -0
- package/dist/was/capability.js +108 -0
- package/dist/was/capability.js.map +1 -0
- package/dist/was/client.d.ts +108 -0
- package/dist/was/client.d.ts.map +1 -0
- package/dist/was/client.js +142 -0
- package/dist/was/client.js.map +1 -0
- package/dist/was/io.d.ts +71 -0
- package/dist/was/io.d.ts.map +1 -0
- package/dist/was/io.js +146 -0
- package/dist/was/io.js.map +1 -0
- package/dist/was/registry.d.ts +79 -0
- package/dist/was/registry.d.ts.map +1 -0
- package/dist/was/registry.js +99 -0
- package/dist/was/registry.js.map +1 -0
- package/dist/zcap/create.d.ts +20 -0
- package/dist/zcap/create.d.ts.map +1 -0
- package/dist/zcap/create.js +29 -0
- package/dist/zcap/create.js.map +1 -0
- package/dist/zcap/delegate.d.ts +44 -0
- package/dist/zcap/delegate.d.ts.map +1 -0
- package/dist/zcap/delegate.js +77 -0
- package/dist/zcap/delegate.js.map +1 -0
- package/dist/zcap/encoding.d.ts +17 -0
- package/dist/zcap/encoding.d.ts.map +1 -0
- package/dist/zcap/encoding.js +37 -0
- package/dist/zcap/encoding.js.map +1 -0
- package/dist/zcap/signer.d.ts +20 -0
- package/dist/zcap/signer.d.ts.map +1 -0
- package/dist/zcap/signer.js +62 -0
- package/dist/zcap/signer.js.map +1 -0
- package/dist/zcap/ttl.d.ts +19 -0
- package/dist/zcap/ttl.d.ts.map +1 -0
- package/dist/zcap/ttl.js +40 -0
- package/dist/zcap/ttl.js.map +1 -0
- package/package.json +64 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,341 @@
|
|
|
1
|
+
# History
|
|
2
|
+
|
|
3
|
+
## 0.7.0 - TBD
|
|
4
|
+
|
|
5
|
+
### Changed
|
|
6
|
+
|
|
7
|
+
- **BREAKING**: Move the default wallet storage directory from `~/.wallet/` to
|
|
8
|
+
`~/.config/did-cli-wallet/` (honoring `$XDG_CONFIG_HOME` when set), to avoid
|
|
9
|
+
colliding with other tools that use the generic `~/.wallet` name. Existing
|
|
10
|
+
data can be moved with `mv ~/.wallet ~/.config/did-cli-wallet`. The
|
|
11
|
+
`WALLET_DIR` and `DIDS_DIR` environment variables still override the default
|
|
12
|
+
as before.
|
|
13
|
+
- `di --version` now reports the version from `package.json` instead of a
|
|
14
|
+
hardcoded string.
|
|
15
|
+
- Relax the `engines` requirement from Node `>=24` to `>=22` (the oldest
|
|
16
|
+
currently supported LTS line).
|
|
17
|
+
|
|
18
|
+
## 0.6.0 - 2026-06-11
|
|
19
|
+
|
|
20
|
+
### Added
|
|
21
|
+
|
|
22
|
+
- Add a `was` command group: a CLI for Wallet Attached Storage (WAS) servers
|
|
23
|
+
via `@interop/was-client`, signing every request with a locally stored
|
|
24
|
+
`did:key` DID (Ed25519 keys only for now). Commands take a single positional
|
|
25
|
+
WAS path -- `SPACE[/COLLECTION[/RESOURCE]]` -- where the space part is a
|
|
26
|
+
local registry handle, a bare space id, or a full space https URL.
|
|
27
|
+
- Add `was space create/list/show/update/delete/forget/add` subcommands
|
|
28
|
+
(`update` aliases `configure`; `delete` aliases `rm`; `show` aliases
|
|
29
|
+
`view`/`cat`). `create --save` and `add` register the space in a local
|
|
30
|
+
space registry (`~/.wallet/was-spaces/`, with the usual `.meta.json`
|
|
31
|
+
handle/description sidecars); `space list` reads the registry (servers do
|
|
32
|
+
not implement List Spaces yet; `--remote` asks the server anyway), and
|
|
33
|
+
`forget` removes only the registry entry while `delete` deletes the space
|
|
34
|
+
on the server.
|
|
35
|
+
- Add `was collection create/list/show/update/delete` subcommands (group
|
|
36
|
+
alias `coll`; `update` aliases `configure`, `delete` aliases `rm`) and
|
|
37
|
+
`was resource add/put/get/list/delete` subcommands (group alias `res`,
|
|
38
|
+
same `delete` alias). Resource payloads come from a file argument or
|
|
39
|
+
stdin: `*.json` files (and content that parses to a JSON object/array)
|
|
40
|
+
are sent as JSON, anything else as binary `application/octet-stream`,
|
|
41
|
+
and an explicit `--content-type` sends the bytes as-is with that type.
|
|
42
|
+
`resource get` pretty-prints JSON to stdout and writes binary raw
|
|
43
|
+
(`--output <file>` to save either to a file).
|
|
44
|
+
- Add top-level shorthand verbs that dispatch on the path depth:
|
|
45
|
+
`was ls <path>` (collections of a space, or resources of a collection),
|
|
46
|
+
`was get` / `was put` (resource shorthands), and `was rm <path>`
|
|
47
|
+
(uniform delete of whatever the path points at).
|
|
48
|
+
- Add `was grant <path> --to <did> --action <verb...>` to delegate access
|
|
49
|
+
to a space, collection, or resource. Actions are HTTP verbs (lowercase
|
|
50
|
+
accepted); expiration via `--ttl` (default `1y`) or an explicit
|
|
51
|
+
`--expires`. Prints `{ delegatedCapability, encoded }` (the same shape
|
|
52
|
+
as `zcap delegate`); `--save` (with `--handle` / `--description`)
|
|
53
|
+
stores the capability in the existing zcap store (`~/.wallet/zcaps/`).
|
|
54
|
+
- Add `--capability <ref>` to `was ls`/`get`/`put`/`rm` and
|
|
55
|
+
`was resource add/get/put` for the receiving side of delegation: the
|
|
56
|
+
ref is a multibase-encoded capability string, a capability JSON file,
|
|
57
|
+
or the id/handle of a stored zcap. The capability's invocation target
|
|
58
|
+
supplies the server URL and the operation depth (no path argument
|
|
59
|
+
needed), and the signing DID falls back from `--did` / `WAS_DID` to the
|
|
60
|
+
capability's controller (the delegatee).
|
|
61
|
+
- Add `was policy show/set/clear` to manage access-control policies at
|
|
62
|
+
space, collection, or resource depth (`set` takes `--type <type>` for a
|
|
63
|
+
simple type-only policy, or a policy JSON file), plus the
|
|
64
|
+
`was publish <path>` / `was unpublish <path>` sugar: `publish` makes
|
|
65
|
+
the path world-readable (`PublicCanRead`) and prints its public URL;
|
|
66
|
+
`unpublish` reverts it to capability-only access.
|
|
67
|
+
- Add `was space export <space> [--output <file.tar>]` (tar to a file or
|
|
68
|
+
raw to stdout) and `was space import <space> [file.tar]` (tar from a
|
|
69
|
+
file or stdin; prints the import stats summary).
|
|
70
|
+
- Add an env-gated end-to-end integration test of the whole `was` flow
|
|
71
|
+
(space/collection/resource round-trip, delegation, capability read,
|
|
72
|
+
publish + unauthenticated fetch); it is skipped unless
|
|
73
|
+
`WAS_TEST_SERVER_URL` points at a running WAS server.
|
|
74
|
+
- Registered spaces supply the server URL and signing controller DID
|
|
75
|
+
defaults; otherwise they resolve from `--server` / `WAS_SERVER_URL` and
|
|
76
|
+
`--did` / `WAS_DID` (or the origin of a full space URL address).
|
|
77
|
+
- Exit codes: `0` success, `1` operation error (typed WAS errors,
|
|
78
|
+
not-found/not-visible reads), `2` input error (bad path syntax, unknown
|
|
79
|
+
handle/DID, missing server URL).
|
|
80
|
+
- Bring `zcap` storage features in line with the `key` and `did` commands:
|
|
81
|
+
- Add metadata support for locally stored zcaps, persisted as `.meta.json`
|
|
82
|
+
sidecar files next to the stored capability
|
|
83
|
+
(`~/.wallet/zcaps/<storageId>.meta.json`). `zcap create --save` and
|
|
84
|
+
`zcap delegate --save` now write a sidecar with the `created` timestamp,
|
|
85
|
+
and accept `--handle` / `--description` (exit `1` without `--save`).
|
|
86
|
+
- Add `zcap show <id>` (aliases: `view`, `cat`) to print a stored capability
|
|
87
|
+
by capability id or metadata handle, with `--meta` to display its metadata
|
|
88
|
+
(plus controller, invocation target, and expiration) as a field/value
|
|
89
|
+
table, or as JSON with `--meta --json`.
|
|
90
|
+
- Add `zcap meta <id>` to show or edit the metadata of a stored zcap (no
|
|
91
|
+
options prints the current metadata; an empty string value clears a field;
|
|
92
|
+
metadata edits never rewrite the stored capability file).
|
|
93
|
+
- Add `zcap remove <id>` (aliases: `delete`, `rm`) to remove a stored zcap
|
|
94
|
+
and its metadata sidecar. Note that removal does not revoke a delegated
|
|
95
|
+
capability that has already been handed out.
|
|
96
|
+
- `zcap show`, `zcap meta`, and `zcap remove` accept a metadata handle in
|
|
97
|
+
place of a capability id (exit `1` when the handle is ambiguous).
|
|
98
|
+
- Add local wallet storage for Verifiable Credentials
|
|
99
|
+
(`~/.wallet/credentials/`, with the usual `.meta.json` handle/description
|
|
100
|
+
sidecars), mirroring the zcap storage features:
|
|
101
|
+
- Add a `vc import` command that stores an existing credential, read from a
|
|
102
|
+
file argument, an http(s) URL, or stdin. The input's `type` must include
|
|
103
|
+
`VerifiableCredential`; it is stored as-is (not verified on import). The
|
|
104
|
+
file is named after the credential's `id`; an id-less credential is
|
|
105
|
+
stored under a digest of its content, so re-importing it overwrites
|
|
106
|
+
rather than duplicates. Exit codes: `0` imported, `1` not a credential,
|
|
107
|
+
`2` fetch/read/parse error.
|
|
108
|
+
- Add `--save` to `vc issue` to store the freshly issued credential;
|
|
109
|
+
`--handle` / `--description` tag it (exit `1` without `--save`).
|
|
110
|
+
- Add `vc list` (`--json` / `--plain`) to render a metadata table of the
|
|
111
|
+
stored credentials (`HANDLE | TYPE | ISSUER | CREATED | ID |
|
|
112
|
+
DESCRIPTION`), `vc show <id>` (aliases: `view`, `cat`; `--meta` for the
|
|
113
|
+
metadata, `--meta --json` for it as JSON), `vc meta <id>` to edit the
|
|
114
|
+
metadata sidecar, and `vc remove <id>` (aliases: `delete`, `rm`). All
|
|
115
|
+
accept a credential id, a storage id (for id-less credentials), or a
|
|
116
|
+
metadata handle.
|
|
117
|
+
- `vc verify` and `vc issue` also accept an http(s) URL as the credential
|
|
118
|
+
source now, in addition to a file argument or stdin.
|
|
119
|
+
|
|
120
|
+
### Changed
|
|
121
|
+
|
|
122
|
+
- **BREAKING**: Saved DIDs now live under the wallet directory:
|
|
123
|
+
`~/.wallet/dids/<method>/` instead of `~/.dids/<method>/`. Existing data can
|
|
124
|
+
be moved with `mv ~/.dids ~/.wallet/dids`. The `DIDS_DIR` environment
|
|
125
|
+
variable still overrides the DIDs location when set; its default is now
|
|
126
|
+
derived from `WALLET_DIR` (`$WALLET_DIR/dids`).
|
|
127
|
+
- **BREAKING**: `zcap list` now prints a metadata table by default
|
|
128
|
+
(`HANDLE | TYPE | CREATED | ID | DESCRIPTION`, where TYPE is `root` or
|
|
129
|
+
`delegated`), matching `did list`. Pass the new `--plain` flag for the
|
|
130
|
+
previous one-id-per-line output.
|
|
131
|
+
- **BREAKING**: `zcap list --json` now outputs an array of objects with
|
|
132
|
+
metadata (`{id, type, created?, handle?, description?}`) instead of an
|
|
133
|
+
array of plain id strings.
|
|
134
|
+
|
|
135
|
+
## 0.5.0 - 2026-06-11
|
|
136
|
+
|
|
137
|
+
### Added
|
|
138
|
+
|
|
139
|
+
- Add `key remove <id>` and `did remove <did>` commands (aliases: `delete`,
|
|
140
|
+
`rm`) to remove a locally stored key or DID from wallet storage, looked up
|
|
141
|
+
by fingerprint/DID or by metadata handle. `key remove` deletes the key file
|
|
142
|
+
and its `.meta.json` metadata sidecar; `did remove` deletes the DID
|
|
143
|
+
document, its `.keys.json` key file, and its `.meta.json` metadata sidecar,
|
|
144
|
+
and also scrubs the removed DID from the cached `dids` associations of any
|
|
145
|
+
matching wallet keys (the inverse of the caching done by
|
|
146
|
+
`did create --save` and `did add-key`).
|
|
147
|
+
- Add metadata support for locally stored keys and DIDs, persisted as
|
|
148
|
+
`.meta.json` sidecar files next to the stored item (`~/.wallet/keys/
|
|
149
|
+
<storageId>.meta.json` and `~/.dids/<method>/<did>.meta.json`, following the
|
|
150
|
+
existing `.keys.json` sidecar pattern). Metadata fields: `created` (ISO 8601
|
|
151
|
+
timestamp written at `--save` time), `handle` (a short user-defined tag),
|
|
152
|
+
`description` (longer free text), and -- for keys -- `dids`, a cache of the
|
|
153
|
+
stored DIDs whose documents reference the key. Stored key files and DID
|
|
154
|
+
documents remain spec-pure Multikey / DID document JSON; a missing sidecar
|
|
155
|
+
means "no metadata" (no migration needed) and orphaned sidecars are ignored.
|
|
156
|
+
- Add `--handle` / `--description` options to `key create --save` and
|
|
157
|
+
`did create --save` (exit `1` without `--save`), and new `key meta <id>` /
|
|
158
|
+
`did meta <did>` commands to show or edit metadata after the fact (no
|
|
159
|
+
options prints the current metadata; an empty string value clears a field;
|
|
160
|
+
metadata edits never rewrite the stored key/DID file). `key meta` backfills
|
|
161
|
+
`created` from the storage file name's date prefix for keys saved before
|
|
162
|
+
metadata support.
|
|
163
|
+
- `key show`, `key meta`, `did show`, and `did meta` now also accept a
|
|
164
|
+
metadata handle in place of a fingerprint/DID (exit `1` when the handle is
|
|
165
|
+
ambiguous -- handles are not required to be unique).
|
|
166
|
+
- Add `--meta` to `key show` and `did show` to display the item's metadata as
|
|
167
|
+
a vertical field/value table (or as JSON with `--meta --json`). The DIDs
|
|
168
|
+
shown for a key are always derived by scanning the locally stored DID
|
|
169
|
+
documents for the key's `publicKeyMultibase`, so they cannot go stale; the
|
|
170
|
+
cached `dids` list is refreshed by `did create --save`, `did add-key`, and
|
|
171
|
+
every `key meta` write.
|
|
172
|
+
- Add `did show <did>` and `key show <id>` commands to display a locally stored
|
|
173
|
+
DID document or key (aliases: `view`, `cat`). `did show` prints the stored DID
|
|
174
|
+
document (which holds no secret material). `key show` looks up a stored key by
|
|
175
|
+
its `publicKeyMultibase` fingerprint and prints the public key object only --
|
|
176
|
+
it re-imports the stored key pair and re-exports the public half, so the secret
|
|
177
|
+
key never appears in the output. These are distinct from a future `get`
|
|
178
|
+
command, which will resolve DIDs/keys rather than read local storage.
|
|
179
|
+
|
|
180
|
+
### Changed
|
|
181
|
+
|
|
182
|
+
- **BREAKING**: `key list` and `did list` now print a metadata table by
|
|
183
|
+
default (`HANDLE | TYPE | CREATED | FINGERPRINT | DIDS | DESCRIPTION` for
|
|
184
|
+
keys; `HANDLE | METHOD | CREATED | DID | DESCRIPTION` for DIDs), ordered by
|
|
185
|
+
storage file name (chronological for keys) instead of by fingerprint. Pass
|
|
186
|
+
the new `--plain` flag for the previous one-item-per-line output.
|
|
187
|
+
- **BREAKING**: `key list --json` and `did list --json` now output an array of
|
|
188
|
+
objects with metadata (`{fingerprint, storageId, type, curve?, created?,
|
|
189
|
+
handle?, description?, dids}` for keys; `{did, method, created?, handle?,
|
|
190
|
+
description?}` for DIDs) instead of an array of plain strings.
|
|
191
|
+
|
|
192
|
+
## 0.4.0 - 2026-06-09
|
|
193
|
+
|
|
194
|
+
### Added
|
|
195
|
+
|
|
196
|
+
- Add ECDSA key support via `@interop/ecdsa-multikey`, selected with
|
|
197
|
+
`--type ecdsa`, to `key create`, `did create key`, `did create web`, and
|
|
198
|
+
`did add-key`. The curve is chosen with `--curve` (defaults to `p256`;
|
|
199
|
+
supported: `p256`, `p384`, `p521`, each also accepted in hyphenated `p-256`
|
|
200
|
+
and SECG `secp256r1` spellings, case-insensitively). Keys are serialized as
|
|
201
|
+
Multikey, the same as Ed25519. ECDSA key generation is non-deterministic, so
|
|
202
|
+
`--with-seed` / `SECRET_KEY_SEED` are rejected (exit `1`) with `--type ecdsa`.
|
|
203
|
+
ECDSA `did:key`s are minted via the driver's `fromKeyPair()` (no suite
|
|
204
|
+
registration required).
|
|
205
|
+
- Support issuing Verifiable Credentials with ECDSA keys in `vc issue`. The
|
|
206
|
+
signing key's type is detected from its `publicKeyMultibase` header, and ECDSA
|
|
207
|
+
keys sign with the `ecdsa-rdfc-2019` cryptosuite (via `@interop/ecdsa-signature`).
|
|
208
|
+
`--suite` now defaults per key type (`eddsa-rdfc-2022` for ed25519,
|
|
209
|
+
`ecdsa-rdfc-2019` for ecdsa) instead of always defaulting to `eddsa-rdfc-2022`.
|
|
210
|
+
- Warn at key creation time (`key create`, `did create key`, `did create web`,
|
|
211
|
+
`did add-key`) when a `p521` ECDSA key is generated: P-521 keys can be created
|
|
212
|
+
but cannot issue Verifiable Credentials, because the `ecdsa-rdfc-2019`
|
|
213
|
+
cryptosuite supports P-256 and P-384 only.
|
|
214
|
+
- `vc verify` now verifies ECDSA (`ecdsa-rdfc-2019`) credentials, completing the
|
|
215
|
+
ECDSA issue/verify round trip. This required upstream support in
|
|
216
|
+
`@interop/verifier-core` `^3.2.0` (ECDSA `did:key` resolution and the
|
|
217
|
+
`ecdsa-rdfc-2019` suite in its defaults), so the previous CLI-side crypto-suite
|
|
218
|
+
injection was removed in favor of verifier-core's defaults.
|
|
219
|
+
|
|
220
|
+
### Changed
|
|
221
|
+
|
|
222
|
+
- Update to the `@interop/data-integrity-core` `^7.0.0` chain, in which
|
|
223
|
+
`AbstractKeyPair.export()` is now `async`: `@interop/data-integrity-core`
|
|
224
|
+
`^7.0.0`, `@interop/data-integrity-proof` `^3.3.0`, `@interop/did-method-key`
|
|
225
|
+
`^7.3.1`, `@interop/did-web-resolver` `^6.2.1`, `@interop/ecdsa-multikey`
|
|
226
|
+
`^2.3.0`, and `@interop/ed25519-verification-key` `^8.0.0`. All
|
|
227
|
+
`keyPair.export(...)` call sites now `await` the result.
|
|
228
|
+
|
|
229
|
+
## 0.3.0 - 2026-06-09
|
|
230
|
+
|
|
231
|
+
### Added
|
|
232
|
+
|
|
233
|
+
- Add `did:web` support to `did create` (`./di did create web --url <url>`):
|
|
234
|
+
generates a `did:web` DID with a single Ed25519 verification key (wired into
|
|
235
|
+
`authentication`, `assertionMethod`, `capabilityDelegation`, and
|
|
236
|
+
`capabilityInvocation`) via `@interop/did-web-resolver`'s `driver().generate()`.
|
|
237
|
+
`--url` is required (a `did:web` DID is tied to a domain). The key is derived
|
|
238
|
+
from a seed exactly as `did:key` is (`SECRET_KEY_SEED` env var or `--with-seed`).
|
|
239
|
+
`--save` writes the DID document and key material to `~/.dids/web/`, with the
|
|
240
|
+
key file stored as an object keyed by verification method id so additional keys
|
|
241
|
+
can be appended later.
|
|
242
|
+
- Add `did add-key <did>` command: adds a new verification key to an existing,
|
|
243
|
+
locally stored `did:web` DID via `@interop/did-web-resolver`'s
|
|
244
|
+
`addVerificationMethod()`, updating both the stored DID document and its
|
|
245
|
+
key file (keyed by verification method id) in place. The key is derived from a
|
|
246
|
+
seed (`SECRET_KEY_SEED` env var or `--with-seed`). `--purpose <purpose...>`
|
|
247
|
+
selects the verification relationships to wire the key into (defaults to
|
|
248
|
+
`authentication`, `assertionMethod`, `capabilityDelegation`, and
|
|
249
|
+
`capabilityInvocation`). Only `did:web` DIDs are supported; exits `1`
|
|
250
|
+
on an unknown DID, a non-`did:web` DID, or an unsupported purpose.
|
|
251
|
+
|
|
252
|
+
### Fixed
|
|
253
|
+
|
|
254
|
+
- `vc issue --did <did:web:...>` now works. Issuance read the `<did>.keys.json`
|
|
255
|
+
file as a single exported key pair (the `did:key` shape), but `did:web` stores
|
|
256
|
+
keys as a map keyed by verification method id, so the secret-key lookup always
|
|
257
|
+
failed with "No stored secret key found". The issuer now resolves the signing
|
|
258
|
+
key from either storage shape.
|
|
259
|
+
|
|
260
|
+
## 0.2.0 - 2026-06-08
|
|
261
|
+
|
|
262
|
+
### Changed
|
|
263
|
+
|
|
264
|
+
- **BREAKING**: Rename the CLI binary from `did` to `di` (bin script and `package.json`
|
|
265
|
+
`bin` entry), so commands now read `./di key create`, `./di vc verify`, etc.
|
|
266
|
+
- **BREAKING**: Rename the `id` command group to `did`, so DID commands now read
|
|
267
|
+
`./di did create` and `./di did list`.
|
|
268
|
+
- Bump `@interop/verifier-core` to `^3.1.0`, which reports an explicit
|
|
269
|
+
`ISSUER_PROOF_MISMATCH` problem (title `Issuer / Proof Mismatch`) when a
|
|
270
|
+
credential's `issuer` does not match the controller of its proof's
|
|
271
|
+
verification method, instead of a generic `INVALID_SIGNATURE`.
|
|
272
|
+
|
|
273
|
+
### Added
|
|
274
|
+
|
|
275
|
+
- Implement `zcap create` command: builds an unsigned root Authorization
|
|
276
|
+
Capability (zcap) for an invocation target via `@interop/zcap`'s
|
|
277
|
+
`createRootCapability`, printing `{ rootCapability, encoded }` to stdout (the
|
|
278
|
+
`encoded` field is the capability JSON as a multibase base58btc string). Takes
|
|
279
|
+
a required `--controller` (the controller DID) and `--url` (the
|
|
280
|
+
`invocationTarget`); `--save` writes the capability to local wallet storage
|
|
281
|
+
(`~/.wallet/zcaps/`). Exits `0` / `1` for success / error.
|
|
282
|
+
- Implement `zcap delegate` command: signs a delegated capability via
|
|
283
|
+
`@interop/ezcap`'s `ZcapClient`, printing `{ delegatedCapability, encoded }`
|
|
284
|
+
to stdout. Supports a first-level delegation from the root capability for a
|
|
285
|
+
`--url`, or a further (attenuated) delegation of an existing `--capability`
|
|
286
|
+
(a multibase string or a JSON file path), narrowed with `--invocation-target`.
|
|
287
|
+
Takes a required `--delegatee` (the delegated capability's controller),
|
|
288
|
+
optional `--allow <action...>` (defaults to inheriting the parent's actions),
|
|
289
|
+
and either `--ttl` (duration, default `1y`) or an `--expires` ISO 8601
|
|
290
|
+
override. The signing key is sourced from a stored DID (`--did`) or, as a
|
|
291
|
+
fallback, the `ZCAP_CONTROLLER_KEY_SEED` env var together with `--controller`
|
|
292
|
+
(the seed-derived `did:key` is verified against `--controller`). `--save`
|
|
293
|
+
writes the capability to `~/.wallet/zcaps/`. Exits `0` / `1` for success /
|
|
294
|
+
error.
|
|
295
|
+
- Implement `vc issue` command: reads an unsigned Verifiable Credential as JSON
|
|
296
|
+
from a file or stdin and issues (signs) it with a locally-stored DID via
|
|
297
|
+
`@interop/vc`, printing the issued credential to stdout (appending a proof if
|
|
298
|
+
one already exists). The credential's `issuer` is set to the signing DID when
|
|
299
|
+
absent, and must match the signing DID when present (otherwise issuance is
|
|
300
|
+
aborted). Takes a required `--did`, an optional `--key` (a verification method
|
|
301
|
+
id, validated against the DID's `assertionMethod` array; defaults to the first
|
|
302
|
+
`assertionMethod` key), and an optional `--suite` (`eddsa-rdfc-2022` by
|
|
303
|
+
default, or `Ed25519Signature2020`). Exits `0` / `1` / `2` for issued /
|
|
304
|
+
issuance error / read error. Adds `loadDidDocument()` and `loadDidKeys()`
|
|
305
|
+
storage helpers.
|
|
306
|
+
- Implement `key list` command: prints the fingerprints (multibase-encoded
|
|
307
|
+
public keys) of key pairs saved in local wallet storage (one per line to
|
|
308
|
+
stdout, nothing if empty), or as a JSON array with `--json`. Adds
|
|
309
|
+
`listCollection()` and `loadFromCollection()` storage helpers.
|
|
310
|
+
- Implement `id list` command: prints the DIDs saved in local storage across all
|
|
311
|
+
method subdirectories (one per line to stdout, nothing if empty), or as a JSON
|
|
312
|
+
array with `--json`. Adds a `listDids()` storage helper.
|
|
313
|
+
- Implement `zcap list` command: prints the ids (the `urn:zcap:...` values) of
|
|
314
|
+
capabilities saved in local wallet storage (`~/.wallet/zcaps/`), one per line
|
|
315
|
+
to stdout (nothing if empty), or as a JSON array with `--json`. Reuses the
|
|
316
|
+
`listCollection()` and `loadFromCollection()` storage helpers.
|
|
317
|
+
- Add `vc verify` command: reads a Verifiable Credential as JSON from a file or
|
|
318
|
+
stdin and runs full verification via `@interop/verifier-core` plus
|
|
319
|
+
`@digitalcredentials/issuer-registry-client` (cryptographic signature,
|
|
320
|
+
expiration, revocation / status, and issuer registry recognition). Prints the
|
|
321
|
+
full verifier-core result by default, or a compact object with `--summary`,
|
|
322
|
+
and exits `0` / `1` / `2` for verified / not-verified / read error.
|
|
323
|
+
|
|
324
|
+
## 0.1.0 - 2026-06-01
|
|
325
|
+
|
|
326
|
+
### Changed
|
|
327
|
+
|
|
328
|
+
- Update to latest refactored `@interop/*` deps (`did-method-key@7.1.0`,
|
|
329
|
+
`ed25519-verification-key@7.0.1`, which pull in `did-io@4.0.1` and
|
|
330
|
+
`data-integrity-core@6.1.0`).
|
|
331
|
+
|
|
332
|
+
### Removed
|
|
333
|
+
|
|
334
|
+
- Remove unused `@digitalcredentials/ssi` dependency (no longer imported; the
|
|
335
|
+
`@interop/*` forks now use `@interop/data-integrity-core` instead).
|
|
336
|
+
|
|
337
|
+
## 0.0.1 -
|
|
338
|
+
|
|
339
|
+
### Added
|
|
340
|
+
|
|
341
|
+
- Initial commits
|
package/LICENSE.md
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Interop Alliance
|
|
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.
|