@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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zcap.js","sourceRoot":"","sources":["../../src/commands/zcap.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createRequire } from 'node:module';
|
|
3
|
+
import { Command } from 'commander';
|
|
4
|
+
import { makeDidCommand } from './commands/did.js';
|
|
5
|
+
import { makeKeyCommand } from './commands/key.js';
|
|
6
|
+
import { makeVcCommand } from './commands/vc.js';
|
|
7
|
+
import { makeWalletCommand } from './commands/wallet.js';
|
|
8
|
+
import { makeWasCommand } from './commands/was.js';
|
|
9
|
+
import { makeZcapCommand } from './commands/zcap.js';
|
|
10
|
+
const { version } = createRequire(import.meta.url)('../package.json');
|
|
11
|
+
const program = new Command();
|
|
12
|
+
program.name('di').description('DID CLI tool').version(version);
|
|
13
|
+
program.addCommand(makeDidCommand());
|
|
14
|
+
program.addCommand(makeKeyCommand());
|
|
15
|
+
program.addCommand(makeVcCommand());
|
|
16
|
+
program.addCommand(makeWalletCommand());
|
|
17
|
+
program.addCommand(makeWasCommand());
|
|
18
|
+
program.addCommand(makeZcapCommand());
|
|
19
|
+
program.parse();
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAEpD,MAAM,EAAE,OAAO,EAAE,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,iBAAiB,CAEnE,CAAA;AAED,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;AAE7B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;AAE/D,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAA;AACpC,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAA;AACpC,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,CAAA;AACnC,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAA;AACvC,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAA;AACpC,OAAO,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC,CAAA;AAErC,OAAO,CAAC,KAAK,EAAE,CAAA"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { EcdsaCurve } from '@interop/ecdsa-multikey';
|
|
2
|
+
export declare const SUPPORTED_ECDSA_CURVES = "p256, p384, p521";
|
|
3
|
+
/**
|
|
4
|
+
* Resolve a user-supplied `--curve` value to a canonical ECDSA curve
|
|
5
|
+
* identifier, or `undefined` if it is not a recognized spelling.
|
|
6
|
+
*
|
|
7
|
+
* @param options {object}
|
|
8
|
+
* @param options.curve {string} the raw `--curve` value, in any case
|
|
9
|
+
* @returns {EcdsaCurve | undefined}
|
|
10
|
+
*/
|
|
11
|
+
export declare function normalizeEcdsaCurve({ curve }: {
|
|
12
|
+
curve: string;
|
|
13
|
+
}): EcdsaCurve | undefined;
|
|
14
|
+
/**
|
|
15
|
+
* Detects whether an exported key is an ecdsa Multikey from its
|
|
16
|
+
* `publicKeyMultibase` header. Both ed25519 and ecdsa keys export with
|
|
17
|
+
* `type: "Multikey"`, so the multibase prefix is what distinguishes them: ecdsa
|
|
18
|
+
* P-256/P-384/P-521 keys carry the `ECDSA_MULTIBASE_HEADERS`, and everything
|
|
19
|
+
* else is treated as ed25519.
|
|
20
|
+
*
|
|
21
|
+
* @param options {object}
|
|
22
|
+
* @param [options.publicKeyMultibase] {string} the key's multibase header
|
|
23
|
+
* @returns {boolean}
|
|
24
|
+
*/
|
|
25
|
+
export declare function isEcdsaPublicKeyMultibase({ publicKeyMultibase }: {
|
|
26
|
+
publicKeyMultibase?: string;
|
|
27
|
+
}): boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Prints a stderr warning when a freshly created ecdsa key uses a curve that
|
|
30
|
+
* cannot issue Verifiable Credentials. The `ecdsa-rdfc-2019` cryptosuite (the
|
|
31
|
+
* only ecdsa VC suite the CLI wires up) supports P-256 and P-384 only, so a
|
|
32
|
+
* P-521 key can be created but `vc issue` will reject it.
|
|
33
|
+
*
|
|
34
|
+
* @param options {object}
|
|
35
|
+
* @param options.curve {EcdsaCurve} the canonical curve the key was created on
|
|
36
|
+
*/
|
|
37
|
+
export declare function warnIfNotVcIssuanceCapable({ curve }: {
|
|
38
|
+
curve: EcdsaCurve;
|
|
39
|
+
}): void;
|
|
40
|
+
//# sourceMappingURL=ecdsa.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ecdsa.d.ts","sourceRoot":"","sources":["../../src/keys/ecdsa.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAkBzD,eAAO,MAAM,sBAAsB,qBAAqB,CAAA;AAExD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,KAAK,EACN,EAAE;IACD,KAAK,EAAE,MAAM,CAAA;CACd,GAAG,UAAU,GAAG,SAAS,CAEzB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,yBAAyB,CAAC,EACxC,kBAAkB,EACnB,EAAE;IACD,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAC5B,GAAG,OAAO,CAGV;AAUD;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CAAC,EACzC,KAAK,EACN,EAAE;IACD,KAAK,EAAE,UAAU,CAAA;CAClB,GAAG,IAAI,CAOP"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ECDSA key-type helpers shared across the `key` and `did` commands.
|
|
3
|
+
*
|
|
4
|
+
* Maps the curve spellings the CLI accepts on `--curve` (case-insensitive
|
|
5
|
+
* short, hyphenated, and SECG names) onto the canonical curve identifiers used
|
|
6
|
+
* by `@interop/ecdsa-multikey` (`P-256` / `P-384` / `P-521`).
|
|
7
|
+
*/
|
|
8
|
+
import { ECDSA_CURVE, ECDSA_MULTIBASE_HEADERS } from '@interop/ecdsa-multikey';
|
|
9
|
+
// Accepted `--curve` spellings (lower-cased) mapped to the library's canonical
|
|
10
|
+
// curve identifier. Three forms per curve: short (`p256`), hyphenated
|
|
11
|
+
// (`p-256`), and SECG (`secp256r1`).
|
|
12
|
+
const CURVE_ALIASES = {
|
|
13
|
+
p256: ECDSA_CURVE.P256,
|
|
14
|
+
'p-256': ECDSA_CURVE.P256,
|
|
15
|
+
secp256r1: ECDSA_CURVE.P256,
|
|
16
|
+
p384: ECDSA_CURVE.P384,
|
|
17
|
+
'p-384': ECDSA_CURVE.P384,
|
|
18
|
+
secp384r1: ECDSA_CURVE.P384,
|
|
19
|
+
p521: ECDSA_CURVE.P521,
|
|
20
|
+
'p-521': ECDSA_CURVE.P521,
|
|
21
|
+
secp521r1: ECDSA_CURVE.P521
|
|
22
|
+
};
|
|
23
|
+
// Human-readable list of accepted curves, for `--help` text and error messages.
|
|
24
|
+
export const SUPPORTED_ECDSA_CURVES = 'p256, p384, p521';
|
|
25
|
+
/**
|
|
26
|
+
* Resolve a user-supplied `--curve` value to a canonical ECDSA curve
|
|
27
|
+
* identifier, or `undefined` if it is not a recognized spelling.
|
|
28
|
+
*
|
|
29
|
+
* @param options {object}
|
|
30
|
+
* @param options.curve {string} the raw `--curve` value, in any case
|
|
31
|
+
* @returns {EcdsaCurve | undefined}
|
|
32
|
+
*/
|
|
33
|
+
export function normalizeEcdsaCurve({ curve }) {
|
|
34
|
+
return CURVE_ALIASES[curve.toLowerCase()];
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Detects whether an exported key is an ecdsa Multikey from its
|
|
38
|
+
* `publicKeyMultibase` header. Both ed25519 and ecdsa keys export with
|
|
39
|
+
* `type: "Multikey"`, so the multibase prefix is what distinguishes them: ecdsa
|
|
40
|
+
* P-256/P-384/P-521 keys carry the `ECDSA_MULTIBASE_HEADERS`, and everything
|
|
41
|
+
* else is treated as ed25519.
|
|
42
|
+
*
|
|
43
|
+
* @param options {object}
|
|
44
|
+
* @param [options.publicKeyMultibase] {string} the key's multibase header
|
|
45
|
+
* @returns {boolean}
|
|
46
|
+
*/
|
|
47
|
+
export function isEcdsaPublicKeyMultibase({ publicKeyMultibase }) {
|
|
48
|
+
const header = publicKeyMultibase ?? '';
|
|
49
|
+
return ECDSA_MULTIBASE_HEADERS.some(prefix => header.startsWith(prefix));
|
|
50
|
+
}
|
|
51
|
+
// Curves the `ecdsa-rdfc-2019` VC cryptosuite can sign with. Other curves
|
|
52
|
+
// (P-521) can still be generated and resolved, but cannot issue Verifiable
|
|
53
|
+
// Credentials with the suites the CLI supports.
|
|
54
|
+
const VC_ISSUANCE_CURVES = [
|
|
55
|
+
ECDSA_CURVE.P256,
|
|
56
|
+
ECDSA_CURVE.P384
|
|
57
|
+
];
|
|
58
|
+
/**
|
|
59
|
+
* Prints a stderr warning when a freshly created ecdsa key uses a curve that
|
|
60
|
+
* cannot issue Verifiable Credentials. The `ecdsa-rdfc-2019` cryptosuite (the
|
|
61
|
+
* only ecdsa VC suite the CLI wires up) supports P-256 and P-384 only, so a
|
|
62
|
+
* P-521 key can be created but `vc issue` will reject it.
|
|
63
|
+
*
|
|
64
|
+
* @param options {object}
|
|
65
|
+
* @param options.curve {EcdsaCurve} the canonical curve the key was created on
|
|
66
|
+
*/
|
|
67
|
+
export function warnIfNotVcIssuanceCapable({ curve }) {
|
|
68
|
+
if (!VC_ISSUANCE_CURVES.includes(curve)) {
|
|
69
|
+
console.error(`Warning: ${curve} keys cannot issue Verifiable Credentials. The ` +
|
|
70
|
+
'ecdsa-rdfc-2019 cryptosuite supports P-256 and P-384 only.');
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=ecdsa.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ecdsa.js","sourceRoot":"","sources":["../../src/keys/ecdsa.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAA;AAG9E,+EAA+E;AAC/E,sEAAsE;AACtE,qCAAqC;AACrC,MAAM,aAAa,GAA+B;IAChD,IAAI,EAAE,WAAW,CAAC,IAAI;IACtB,OAAO,EAAE,WAAW,CAAC,IAAI;IACzB,SAAS,EAAE,WAAW,CAAC,IAAI;IAC3B,IAAI,EAAE,WAAW,CAAC,IAAI;IACtB,OAAO,EAAE,WAAW,CAAC,IAAI;IACzB,SAAS,EAAE,WAAW,CAAC,IAAI;IAC3B,IAAI,EAAE,WAAW,CAAC,IAAI;IACtB,OAAO,EAAE,WAAW,CAAC,IAAI;IACzB,SAAS,EAAE,WAAW,CAAC,IAAI;CAC5B,CAAA;AAED,gFAAgF;AAChF,MAAM,CAAC,MAAM,sBAAsB,GAAG,kBAAkB,CAAA;AAExD;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,EAClC,KAAK,EAGN;IACC,OAAO,aAAa,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAA;AAC3C,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,yBAAyB,CAAC,EACxC,kBAAkB,EAGnB;IACC,MAAM,MAAM,GAAG,kBAAkB,IAAI,EAAE,CAAA;IACvC,OAAO,uBAAuB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAA;AAC1E,CAAC;AAED,0EAA0E;AAC1E,2EAA2E;AAC3E,gDAAgD;AAChD,MAAM,kBAAkB,GAA0B;IAChD,WAAW,CAAC,IAAI;IAChB,WAAW,CAAC,IAAI;CACjB,CAAA;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,0BAA0B,CAAC,EACzC,KAAK,EAGN;IACC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACxC,OAAO,CAAC,KAAK,CACX,YAAY,KAAK,iDAAiD;YAChE,4DAA4D,CAC/D,CAAA;IACH,CAAC;AACH,CAAC"}
|
package/dist/meta.d.ts
ADDED
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Metadata derivation and resolution logic layered on top of the raw storage
|
|
3
|
+
* helpers: parsing key storage IDs, deriving key-to-DID associations from the
|
|
4
|
+
* stored DID documents, caching those associations in key metadata sidecars,
|
|
5
|
+
* and resolving user-supplied key, DID, zcap, and credential references
|
|
6
|
+
* (fingerprint / DID / capability or credential id, or metadata handle).
|
|
7
|
+
*/
|
|
8
|
+
import { type KeyMetadata } from './storage.js';
|
|
9
|
+
/**
|
|
10
|
+
* Parse a key storage ID of the form `YYYY-MM-DD-<type>[-<curve>]-<rawId>`
|
|
11
|
+
* into its date, key type, and (for ecdsa) curve components. Returns empty
|
|
12
|
+
* fields for storage IDs that do not match the convention.
|
|
13
|
+
*
|
|
14
|
+
* @param options {object}
|
|
15
|
+
* @param options.storageId {string}
|
|
16
|
+
* @returns {{date?: string, type?: string, curve?: string}}
|
|
17
|
+
*/
|
|
18
|
+
export declare function parseKeyStorageId({ storageId }: {
|
|
19
|
+
storageId: string;
|
|
20
|
+
}): {
|
|
21
|
+
date?: string;
|
|
22
|
+
type?: string;
|
|
23
|
+
curve?: string;
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Derive the key-to-DID associations from the locally stored DID documents.
|
|
27
|
+
*
|
|
28
|
+
* Performs a single pass over all saved DIDs and returns a map from each
|
|
29
|
+
* verification method's publicKeyMultibase to the sorted DIDs whose documents
|
|
30
|
+
* reference it. This is the source of truth shown by `key list` / `key show`;
|
|
31
|
+
* the `dids` cached in key metadata sidecars is never displayed directly.
|
|
32
|
+
*
|
|
33
|
+
* @returns {Promise<Map<string, string[]>>}
|
|
34
|
+
*/
|
|
35
|
+
export declare function mapFingerprintsToDids(): Promise<Map<string, string[]>>;
|
|
36
|
+
/**
|
|
37
|
+
* Record in a wallet key's metadata sidecar that the key participates in a
|
|
38
|
+
* DID document. No-op when no wallet key matches the fingerprint. The cached
|
|
39
|
+
* `dids` list is deduplicated and sorted; the sidecar is created if needed.
|
|
40
|
+
*
|
|
41
|
+
* @param options {object}
|
|
42
|
+
* @param options.publicKeyMultibase {string}
|
|
43
|
+
* @param options.did {string}
|
|
44
|
+
* @returns {Promise<void>}
|
|
45
|
+
*/
|
|
46
|
+
export declare function recordKeyDidAssociation({ publicKeyMultibase, did }: {
|
|
47
|
+
publicKeyMultibase: string;
|
|
48
|
+
did: string;
|
|
49
|
+
}): Promise<void>;
|
|
50
|
+
/**
|
|
51
|
+
* Remove a DID from a wallet key's cached `dids` associations, the inverse of
|
|
52
|
+
* `recordKeyDidAssociation`. No-op when no wallet key matches the fingerprint
|
|
53
|
+
* or the key's sidecar does not cache the DID.
|
|
54
|
+
*
|
|
55
|
+
* @param options {object}
|
|
56
|
+
* @param options.publicKeyMultibase {string}
|
|
57
|
+
* @param options.did {string}
|
|
58
|
+
* @returns {Promise<void>}
|
|
59
|
+
*/
|
|
60
|
+
export declare function removeKeyDidAssociation({ publicKeyMultibase, did }: {
|
|
61
|
+
publicKeyMultibase: string;
|
|
62
|
+
did: string;
|
|
63
|
+
}): Promise<void>;
|
|
64
|
+
/**
|
|
65
|
+
* Resolve a user-supplied DID reference -- a full DID or a metadata handle --
|
|
66
|
+
* to a stored DID. Anything starting with `did:` is returned as-is; otherwise
|
|
67
|
+
* the metadata sidecars of all stored DIDs are searched for a matching
|
|
68
|
+
* handle. Throws when a handle matches more than one DID (handles are not
|
|
69
|
+
* unique). Returns undefined when nothing matches.
|
|
70
|
+
*
|
|
71
|
+
* @param options {object}
|
|
72
|
+
* @param options.ref {string}
|
|
73
|
+
* @returns {Promise<string | undefined>}
|
|
74
|
+
*/
|
|
75
|
+
export declare function resolveDidRef({ ref }: {
|
|
76
|
+
ref: string;
|
|
77
|
+
}): Promise<string | undefined>;
|
|
78
|
+
/**
|
|
79
|
+
* A stored Authorization Capability (zcap), as loaded from wallet storage.
|
|
80
|
+
* Only the fields the CLI inspects are typed; the loaded object retains
|
|
81
|
+
* whatever else the stored JSON carries (e.g. `@context`, `proof`).
|
|
82
|
+
*/
|
|
83
|
+
export interface StoredZcap {
|
|
84
|
+
id?: string;
|
|
85
|
+
controller?: string;
|
|
86
|
+
invocationTarget?: string;
|
|
87
|
+
parentCapability?: string;
|
|
88
|
+
expires?: string;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Resolve a user-supplied zcap reference -- a capability id (the `urn:...`
|
|
92
|
+
* value shown by `zcap list`) or a metadata handle -- to a stored zcap.
|
|
93
|
+
* Capability id matches take precedence; otherwise the metadata sidecars are
|
|
94
|
+
* searched for a matching handle. Throws when a handle matches more than one
|
|
95
|
+
* zcap (handles are not unique). Returns undefined when nothing matches.
|
|
96
|
+
*
|
|
97
|
+
* @param options {object}
|
|
98
|
+
* @param options.ref {string}
|
|
99
|
+
* @returns {Promise<{storageId: string, zcap: StoredZcap, meta?: KeyMetadata} | undefined>}
|
|
100
|
+
*/
|
|
101
|
+
export declare function resolveZcapRef({ ref }: {
|
|
102
|
+
ref: string;
|
|
103
|
+
}): Promise<{
|
|
104
|
+
storageId: string;
|
|
105
|
+
zcap: StoredZcap;
|
|
106
|
+
meta?: KeyMetadata;
|
|
107
|
+
} | undefined>;
|
|
108
|
+
/**
|
|
109
|
+
* A stored Verifiable Credential, as loaded from wallet storage. Only the
|
|
110
|
+
* fields the CLI inspects are typed; the loaded object retains whatever else
|
|
111
|
+
* the stored JSON carries (e.g. `@context`, `credentialSubject`, `proof`).
|
|
112
|
+
*/
|
|
113
|
+
export interface StoredCredential {
|
|
114
|
+
id?: string;
|
|
115
|
+
type?: string | string[];
|
|
116
|
+
issuer?: string | {
|
|
117
|
+
id?: string;
|
|
118
|
+
};
|
|
119
|
+
validFrom?: string;
|
|
120
|
+
validUntil?: string;
|
|
121
|
+
issuanceDate?: string;
|
|
122
|
+
expirationDate?: string;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Resolve a user-supplied credential reference -- a credential id, a storage
|
|
126
|
+
* id (the file name shown for id-less credentials), or a metadata handle --
|
|
127
|
+
* to a stored credential. Credential id matches take precedence, then storage
|
|
128
|
+
* id matches; otherwise the metadata sidecars are searched for a matching
|
|
129
|
+
* handle. Throws when a handle matches more than one credential (handles are
|
|
130
|
+
* not unique). Returns undefined when nothing matches.
|
|
131
|
+
*
|
|
132
|
+
* @param options {object}
|
|
133
|
+
* @param options.ref {string}
|
|
134
|
+
* @returns {Promise<{storageId: string, credential: StoredCredential, meta?: KeyMetadata} | undefined>}
|
|
135
|
+
*/
|
|
136
|
+
export declare function resolveCredentialRef({ ref }: {
|
|
137
|
+
ref: string;
|
|
138
|
+
}): Promise<{
|
|
139
|
+
storageId: string;
|
|
140
|
+
credential: StoredCredential;
|
|
141
|
+
meta?: KeyMetadata;
|
|
142
|
+
} | undefined>;
|
|
143
|
+
/**
|
|
144
|
+
* Resolve a user-supplied key reference -- a publicKeyMultibase fingerprint
|
|
145
|
+
* or a metadata handle -- to a stored wallet key. Fingerprint matches take
|
|
146
|
+
* precedence; otherwise the metadata sidecars are searched for a matching
|
|
147
|
+
* handle. Throws when a handle matches more than one key (handles are not
|
|
148
|
+
* unique). Returns undefined when nothing matches.
|
|
149
|
+
*
|
|
150
|
+
* @param options {object}
|
|
151
|
+
* @param options.ref {string}
|
|
152
|
+
* @returns {Promise<{storageId: string, key: object, meta?: KeyMetadata} | undefined>}
|
|
153
|
+
*/
|
|
154
|
+
export declare function resolveKeyRef({ ref }: {
|
|
155
|
+
ref: string;
|
|
156
|
+
}): Promise<{
|
|
157
|
+
storageId: string;
|
|
158
|
+
key: {
|
|
159
|
+
publicKeyMultibase?: string;
|
|
160
|
+
secretKeyMultibase?: string;
|
|
161
|
+
};
|
|
162
|
+
meta?: KeyMetadata;
|
|
163
|
+
} | undefined>;
|
|
164
|
+
//# sourceMappingURL=meta.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../src/meta.ts"],"names":[],"mappings":"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"}
|
package/dist/meta.js
ADDED
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Metadata derivation and resolution logic layered on top of the raw storage
|
|
3
|
+
* helpers: parsing key storage IDs, deriving key-to-DID associations from the
|
|
4
|
+
* stored DID documents, caching those associations in key metadata sidecars,
|
|
5
|
+
* and resolving user-supplied key, DID, zcap, and credential references
|
|
6
|
+
* (fingerprint / DID / capability or credential id, or metadata handle).
|
|
7
|
+
*/
|
|
8
|
+
import { findStoredKey, listCollection, listDids, loadDidDocument, loadDidMeta, loadFromCollection, loadMetaFromCollection, saveMetaToCollection } from './storage.js';
|
|
9
|
+
/**
|
|
10
|
+
* Parse a key storage ID of the form `YYYY-MM-DD-<type>[-<curve>]-<rawId>`
|
|
11
|
+
* into its date, key type, and (for ecdsa) curve components. Returns empty
|
|
12
|
+
* fields for storage IDs that do not match the convention.
|
|
13
|
+
*
|
|
14
|
+
* @param options {object}
|
|
15
|
+
* @param options.storageId {string}
|
|
16
|
+
* @returns {{date?: string, type?: string, curve?: string}}
|
|
17
|
+
*/
|
|
18
|
+
export function parseKeyStorageId({ storageId }) {
|
|
19
|
+
const match = storageId.match(/^(\d{4}-\d{2}-\d{2})-(ed25519|ecdsa)(?:-(p\d{3}))?-/);
|
|
20
|
+
if (!match) {
|
|
21
|
+
return {};
|
|
22
|
+
}
|
|
23
|
+
return { date: match[1], type: match[2], curve: match[3] };
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Derive the key-to-DID associations from the locally stored DID documents.
|
|
27
|
+
*
|
|
28
|
+
* Performs a single pass over all saved DIDs and returns a map from each
|
|
29
|
+
* verification method's publicKeyMultibase to the sorted DIDs whose documents
|
|
30
|
+
* reference it. This is the source of truth shown by `key list` / `key show`;
|
|
31
|
+
* the `dids` cached in key metadata sidecars is never displayed directly.
|
|
32
|
+
*
|
|
33
|
+
* @returns {Promise<Map<string, string[]>>}
|
|
34
|
+
*/
|
|
35
|
+
export async function mapFingerprintsToDids() {
|
|
36
|
+
const fingerprintDids = new Map();
|
|
37
|
+
const dids = await listDids();
|
|
38
|
+
for (const did of dids) {
|
|
39
|
+
const didDocument = await loadDidDocument(did);
|
|
40
|
+
for (const method of didDocument.verificationMethod ?? []) {
|
|
41
|
+
if (!method.publicKeyMultibase) {
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
const entries = fingerprintDids.get(method.publicKeyMultibase) ?? [];
|
|
45
|
+
if (!entries.includes(did)) {
|
|
46
|
+
entries.push(did);
|
|
47
|
+
}
|
|
48
|
+
fingerprintDids.set(method.publicKeyMultibase, entries);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
for (const entries of fingerprintDids.values()) {
|
|
52
|
+
entries.sort();
|
|
53
|
+
}
|
|
54
|
+
return fingerprintDids;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Record in a wallet key's metadata sidecar that the key participates in a
|
|
58
|
+
* DID document. No-op when no wallet key matches the fingerprint. The cached
|
|
59
|
+
* `dids` list is deduplicated and sorted; the sidecar is created if needed.
|
|
60
|
+
*
|
|
61
|
+
* @param options {object}
|
|
62
|
+
* @param options.publicKeyMultibase {string}
|
|
63
|
+
* @param options.did {string}
|
|
64
|
+
* @returns {Promise<void>}
|
|
65
|
+
*/
|
|
66
|
+
export async function recordKeyDidAssociation({ publicKeyMultibase, did }) {
|
|
67
|
+
const found = await findStoredKey({ fingerprint: publicKeyMultibase });
|
|
68
|
+
if (!found) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
const meta = (await loadMetaFromCollection({
|
|
72
|
+
collection: 'keys',
|
|
73
|
+
storageId: found.storageId
|
|
74
|
+
})) ?? {};
|
|
75
|
+
const dids = [...new Set([...(meta.dids ?? []), did])].sort();
|
|
76
|
+
await saveMetaToCollection({
|
|
77
|
+
collection: 'keys',
|
|
78
|
+
storageId: found.storageId,
|
|
79
|
+
meta: { ...meta, dids }
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Remove a DID from a wallet key's cached `dids` associations, the inverse of
|
|
84
|
+
* `recordKeyDidAssociation`. No-op when no wallet key matches the fingerprint
|
|
85
|
+
* or the key's sidecar does not cache the DID.
|
|
86
|
+
*
|
|
87
|
+
* @param options {object}
|
|
88
|
+
* @param options.publicKeyMultibase {string}
|
|
89
|
+
* @param options.did {string}
|
|
90
|
+
* @returns {Promise<void>}
|
|
91
|
+
*/
|
|
92
|
+
export async function removeKeyDidAssociation({ publicKeyMultibase, did }) {
|
|
93
|
+
const found = await findStoredKey({ fingerprint: publicKeyMultibase });
|
|
94
|
+
if (!found) {
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
const meta = await loadMetaFromCollection({
|
|
98
|
+
collection: 'keys',
|
|
99
|
+
storageId: found.storageId
|
|
100
|
+
});
|
|
101
|
+
if (!meta?.dids?.includes(did)) {
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
const dids = meta.dids.filter(entry => entry !== did);
|
|
105
|
+
const updated = { ...meta };
|
|
106
|
+
if (dids.length > 0) {
|
|
107
|
+
updated.dids = dids;
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
delete updated.dids;
|
|
111
|
+
}
|
|
112
|
+
await saveMetaToCollection({
|
|
113
|
+
collection: 'keys',
|
|
114
|
+
storageId: found.storageId,
|
|
115
|
+
meta: updated
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Resolve a user-supplied DID reference -- a full DID or a metadata handle --
|
|
120
|
+
* to a stored DID. Anything starting with `did:` is returned as-is; otherwise
|
|
121
|
+
* the metadata sidecars of all stored DIDs are searched for a matching
|
|
122
|
+
* handle. Throws when a handle matches more than one DID (handles are not
|
|
123
|
+
* unique). Returns undefined when nothing matches.
|
|
124
|
+
*
|
|
125
|
+
* @param options {object}
|
|
126
|
+
* @param options.ref {string}
|
|
127
|
+
* @returns {Promise<string | undefined>}
|
|
128
|
+
*/
|
|
129
|
+
export async function resolveDidRef({ ref }) {
|
|
130
|
+
if (ref.startsWith('did:')) {
|
|
131
|
+
return ref;
|
|
132
|
+
}
|
|
133
|
+
const dids = await listDids();
|
|
134
|
+
const matches = [];
|
|
135
|
+
for (const did of dids) {
|
|
136
|
+
const meta = await loadDidMeta({ did });
|
|
137
|
+
if (meta?.handle === ref) {
|
|
138
|
+
matches.push(did);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
if (matches.length === 0) {
|
|
142
|
+
return undefined;
|
|
143
|
+
}
|
|
144
|
+
if (matches.length > 1) {
|
|
145
|
+
throw new Error(`Handle "${ref}" matches ${matches.length} DIDs; ` +
|
|
146
|
+
'use the full DID instead.');
|
|
147
|
+
}
|
|
148
|
+
return matches[0];
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Resolve a user-supplied zcap reference -- a capability id (the `urn:...`
|
|
152
|
+
* value shown by `zcap list`) or a metadata handle -- to a stored zcap.
|
|
153
|
+
* Capability id matches take precedence; otherwise the metadata sidecars are
|
|
154
|
+
* searched for a matching handle. Throws when a handle matches more than one
|
|
155
|
+
* zcap (handles are not unique). Returns undefined when nothing matches.
|
|
156
|
+
*
|
|
157
|
+
* @param options {object}
|
|
158
|
+
* @param options.ref {string}
|
|
159
|
+
* @returns {Promise<{storageId: string, zcap: StoredZcap, meta?: KeyMetadata} | undefined>}
|
|
160
|
+
*/
|
|
161
|
+
export async function resolveZcapRef({ ref }) {
|
|
162
|
+
const storageIds = await listCollection('zcaps');
|
|
163
|
+
for (const storageId of storageIds) {
|
|
164
|
+
const zcap = await loadFromCollection('zcaps', storageId);
|
|
165
|
+
if (zcap.id === ref) {
|
|
166
|
+
const meta = await loadMetaFromCollection({
|
|
167
|
+
collection: 'zcaps',
|
|
168
|
+
storageId
|
|
169
|
+
});
|
|
170
|
+
return { storageId, zcap, meta };
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
const matches = [];
|
|
174
|
+
for (const storageId of storageIds) {
|
|
175
|
+
const meta = await loadMetaFromCollection({
|
|
176
|
+
collection: 'zcaps',
|
|
177
|
+
storageId
|
|
178
|
+
});
|
|
179
|
+
if (meta?.handle === ref) {
|
|
180
|
+
matches.push({ storageId, meta });
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
if (matches.length === 0) {
|
|
184
|
+
return undefined;
|
|
185
|
+
}
|
|
186
|
+
if (matches.length > 1) {
|
|
187
|
+
throw new Error(`Handle "${ref}" matches ${matches.length} zcaps; ` +
|
|
188
|
+
'use the capability id instead.');
|
|
189
|
+
}
|
|
190
|
+
const { storageId, meta } = matches[0];
|
|
191
|
+
const zcap = await loadFromCollection('zcaps', storageId);
|
|
192
|
+
return { storageId, zcap, meta };
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Resolve a user-supplied credential reference -- a credential id, a storage
|
|
196
|
+
* id (the file name shown for id-less credentials), or a metadata handle --
|
|
197
|
+
* to a stored credential. Credential id matches take precedence, then storage
|
|
198
|
+
* id matches; otherwise the metadata sidecars are searched for a matching
|
|
199
|
+
* handle. Throws when a handle matches more than one credential (handles are
|
|
200
|
+
* not unique). Returns undefined when nothing matches.
|
|
201
|
+
*
|
|
202
|
+
* @param options {object}
|
|
203
|
+
* @param options.ref {string}
|
|
204
|
+
* @returns {Promise<{storageId: string, credential: StoredCredential, meta?: KeyMetadata} | undefined>}
|
|
205
|
+
*/
|
|
206
|
+
export async function resolveCredentialRef({ ref }) {
|
|
207
|
+
const storageIds = await listCollection('credentials');
|
|
208
|
+
for (const storageId of storageIds) {
|
|
209
|
+
const credential = await loadFromCollection('credentials', storageId);
|
|
210
|
+
if (credential.id === ref) {
|
|
211
|
+
const meta = await loadMetaFromCollection({
|
|
212
|
+
collection: 'credentials',
|
|
213
|
+
storageId
|
|
214
|
+
});
|
|
215
|
+
return { storageId, credential, meta };
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
if (storageIds.includes(ref)) {
|
|
219
|
+
const credential = await loadFromCollection('credentials', ref);
|
|
220
|
+
const meta = await loadMetaFromCollection({
|
|
221
|
+
collection: 'credentials',
|
|
222
|
+
storageId: ref
|
|
223
|
+
});
|
|
224
|
+
return { storageId: ref, credential, meta };
|
|
225
|
+
}
|
|
226
|
+
const matches = [];
|
|
227
|
+
for (const storageId of storageIds) {
|
|
228
|
+
const meta = await loadMetaFromCollection({
|
|
229
|
+
collection: 'credentials',
|
|
230
|
+
storageId
|
|
231
|
+
});
|
|
232
|
+
if (meta?.handle === ref) {
|
|
233
|
+
matches.push({ storageId, meta });
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
if (matches.length === 0) {
|
|
237
|
+
return undefined;
|
|
238
|
+
}
|
|
239
|
+
if (matches.length > 1) {
|
|
240
|
+
throw new Error(`Handle "${ref}" matches ${matches.length} credentials; ` +
|
|
241
|
+
'use the credential id instead.');
|
|
242
|
+
}
|
|
243
|
+
const { storageId, meta } = matches[0];
|
|
244
|
+
const credential = await loadFromCollection('credentials', storageId);
|
|
245
|
+
return { storageId, credential, meta };
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Resolve a user-supplied key reference -- a publicKeyMultibase fingerprint
|
|
249
|
+
* or a metadata handle -- to a stored wallet key. Fingerprint matches take
|
|
250
|
+
* precedence; otherwise the metadata sidecars are searched for a matching
|
|
251
|
+
* handle. Throws when a handle matches more than one key (handles are not
|
|
252
|
+
* unique). Returns undefined when nothing matches.
|
|
253
|
+
*
|
|
254
|
+
* @param options {object}
|
|
255
|
+
* @param options.ref {string}
|
|
256
|
+
* @returns {Promise<{storageId: string, key: object, meta?: KeyMetadata} | undefined>}
|
|
257
|
+
*/
|
|
258
|
+
export async function resolveKeyRef({ ref }) {
|
|
259
|
+
const byFingerprint = await findStoredKey({ fingerprint: ref });
|
|
260
|
+
if (byFingerprint) {
|
|
261
|
+
const meta = await loadMetaFromCollection({
|
|
262
|
+
collection: 'keys',
|
|
263
|
+
storageId: byFingerprint.storageId
|
|
264
|
+
});
|
|
265
|
+
return { ...byFingerprint, meta };
|
|
266
|
+
}
|
|
267
|
+
const storageIds = await listCollection('keys');
|
|
268
|
+
const matches = [];
|
|
269
|
+
for (const storageId of storageIds) {
|
|
270
|
+
const meta = await loadMetaFromCollection({ collection: 'keys', storageId });
|
|
271
|
+
if (meta?.handle === ref) {
|
|
272
|
+
matches.push({ storageId, meta });
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
if (matches.length === 0) {
|
|
276
|
+
return undefined;
|
|
277
|
+
}
|
|
278
|
+
if (matches.length > 1) {
|
|
279
|
+
throw new Error(`Handle "${ref}" matches ${matches.length} keys; ` +
|
|
280
|
+
'use the publicKeyMultibase fingerprint instead.');
|
|
281
|
+
}
|
|
282
|
+
const { storageId, meta } = matches[0];
|
|
283
|
+
const key = await loadFromCollection('keys', storageId);
|
|
284
|
+
return { storageId, key, meta };
|
|
285
|
+
}
|
|
286
|
+
//# sourceMappingURL=meta.js.map
|
package/dist/meta.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta.js","sourceRoot":"","sources":["../src/meta.ts"],"names":[],"mappings":"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"}
|