@metalabel/dfos-protocol 0.27.0 → 0.28.1
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 +16 -10
- package/dist/chain/index.d.ts +2 -2
- package/dist/chain/index.js +1 -1
- package/dist/{chunk-Q376VG5Z.js → chunk-W4ESJVMO.js} +55 -21
- package/dist/credentials/index.d.ts +1 -1
- package/dist/{dfos-credential-DFZRl0FD.d.ts → dfos-credential-DU7WvoHE.d.ts} +5 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/examples/identity-restore.json +21 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -26,19 +26,25 @@ import { createJws, dagCborCanonicalEncode, verifyJws } from '@metalabel/dfos-pr
|
|
|
26
26
|
|
|
27
27
|
## Subpath Exports
|
|
28
28
|
|
|
29
|
-
| Export | Description
|
|
30
|
-
| -------------------------------------- |
|
|
31
|
-
| `@metalabel/dfos-protocol/chain` | Identity & content chains, services, artifacts, countersigns, revocations, credit claims |
|
|
32
|
-
| `@metalabel/dfos-protocol/credentials` | Auth tokens (DID-signed JWT) and DFOS credentials for authorization
|
|
33
|
-
| `@metalabel/dfos-protocol/crypto` | Ed25519, JWS, JWT, dag-cbor, base64url, ID generation
|
|
29
|
+
| Export | Description |
|
|
30
|
+
| -------------------------------------- | ------------------------------------------------------------------------------------------------------- |
|
|
31
|
+
| `@metalabel/dfos-protocol/chain` | Identity & content chains, services, artifacts, countersigns, revocations, credit claims, sign requests |
|
|
32
|
+
| `@metalabel/dfos-protocol/credentials` | Auth tokens (DID-signed JWT) and DFOS credentials for authorization |
|
|
33
|
+
| `@metalabel/dfos-protocol/crypto` | Ed25519, JWS, JWT, dag-cbor, base64url, ID generation |
|
|
34
|
+
| `@metalabel/dfos-protocol/fold` | Canonical linearization and LWW-map folds for index documents |
|
|
34
35
|
|
|
35
36
|
## Specifications
|
|
36
37
|
|
|
37
|
-
| Document | Description
|
|
38
|
-
| ------------------------------------------------ |
|
|
39
|
-
| [PROTOCOL.md](../../specs/PROTOCOL.md) | Core protocol — chains, signatures, verification, test vectors
|
|
40
|
-
| [DID-METHOD.md](../../specs/DID-METHOD.md) | W3C DID method specification for `did:dfos`
|
|
41
|
-
| [CONTENT-MODEL.md](../../specs/CONTENT-MODEL.md) | Standard content schemas (post, profile)
|
|
38
|
+
| Document | Description |
|
|
39
|
+
| ------------------------------------------------ | --------------------------------------------------------------------------------- |
|
|
40
|
+
| [PROTOCOL.md](../../specs/PROTOCOL.md) | Core protocol — chains, signatures, verification, test vectors |
|
|
41
|
+
| [DID-METHOD.md](../../specs/DID-METHOD.md) | W3C DID method specification for `did:dfos` |
|
|
42
|
+
| [CONTENT-MODEL.md](../../specs/CONTENT-MODEL.md) | Standard content schemas (post, profile) |
|
|
43
|
+
| [CREDENTIALS.md](../../specs/CREDENTIALS.md) | UCAN-style authorization credentials for the DFOS protocol |
|
|
44
|
+
| [CREDITS.md](../../specs/CREDITS.md) | Verifiable attribution for DFOS content |
|
|
45
|
+
| [SIGNING.md](../../specs/SIGNING.md) | A transport-agnostic way for one party to ask another to produce a DFOS signature |
|
|
46
|
+
|
|
47
|
+
Release history lives at https://github.com/metalabel/dfos/releases.
|
|
42
48
|
|
|
43
49
|
## Examples
|
|
44
50
|
|
package/dist/chain/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { I as IdentityOperation, t as Signer, v as VerifiedIdentity, S as ServiceEntry, d as ContentOperation, R as RevocationChecker, e as CountersignPayload, a as ArtifactPayload } from '../dfos-credential-
|
|
2
|
-
export { A as ARTIFACT_CID_ANCHOR_RE, C as CONTENT_ID_ANCHOR_RE, g as CreditClaimPayload, h as Iso8601, M as MAX_ARTIFACT_PAYLOAD_SIZE, j as MAX_CREDIT_CLAIM_SIZE, k as MAX_OPERATION_SIZE, l as MAX_SERVICES_ENTRIES, m as MAX_SERVICES_PAYLOAD_SIZE, n as MAX_SIGN_REQUEST_PAYLOAD_SIZE, o as MAX_SIGN_REQUEST_SIZE, p as MultikeyPublicKey, q as RevocationPayload, r as ServicesArray, s as SignRequestPayload, B as parseProtocolTimestampUnix } from '../dfos-credential-
|
|
1
|
+
import { I as IdentityOperation, t as Signer, v as VerifiedIdentity, S as ServiceEntry, d as ContentOperation, R as RevocationChecker, e as CountersignPayload, a as ArtifactPayload } from '../dfos-credential-DU7WvoHE.js';
|
|
2
|
+
export { A as ARTIFACT_CID_ANCHOR_RE, C as CONTENT_ID_ANCHOR_RE, g as CreditClaimPayload, h as Iso8601, M as MAX_ARTIFACT_PAYLOAD_SIZE, j as MAX_CREDIT_CLAIM_SIZE, k as MAX_OPERATION_SIZE, l as MAX_SERVICES_ENTRIES, m as MAX_SERVICES_PAYLOAD_SIZE, n as MAX_SIGN_REQUEST_PAYLOAD_SIZE, o as MAX_SIGN_REQUEST_SIZE, p as MultikeyPublicKey, q as RevocationPayload, r as ServicesArray, s as SignRequestPayload, B as parseProtocolTimestampUnix } from '../dfos-credential-DU7WvoHE.js';
|
|
3
3
|
import 'zod';
|
|
4
4
|
|
|
5
5
|
/** Ed25519 public key multicodec value */
|
package/dist/chain/index.js
CHANGED
|
@@ -96,10 +96,17 @@ var IdentityDelete = z.looseObject({
|
|
|
96
96
|
previousOperationCID: CIDString,
|
|
97
97
|
createdAt: Iso8601
|
|
98
98
|
});
|
|
99
|
+
var IdentityRestore = z.looseObject({
|
|
100
|
+
version: z.literal(1),
|
|
101
|
+
type: z.literal("restore"),
|
|
102
|
+
previousOperationCID: CIDString,
|
|
103
|
+
createdAt: Iso8601
|
|
104
|
+
});
|
|
99
105
|
var IdentityOperation = z.discriminatedUnion("type", [
|
|
100
106
|
IdentityCreate,
|
|
101
107
|
IdentityUpdate,
|
|
102
|
-
IdentityDelete
|
|
108
|
+
IdentityDelete,
|
|
109
|
+
IdentityRestore
|
|
103
110
|
]);
|
|
104
111
|
var VerifiedIdentity = z.strictObject({
|
|
105
112
|
did: z.string(),
|
|
@@ -257,7 +264,12 @@ var verifyIdentityChain = async (input) => {
|
|
|
257
264
|
if (decoded.header.typ !== "did:dfos:identity-op") {
|
|
258
265
|
throw new Error(`log[${idx}]: invalid typ: ${decoded.header.typ}`);
|
|
259
266
|
}
|
|
260
|
-
if (state.isDeleted
|
|
267
|
+
if (state.isDeleted && op.type !== "restore") {
|
|
268
|
+
throw new Error(`log[${idx}]: cannot modify a deleted identity`);
|
|
269
|
+
}
|
|
270
|
+
if (!state.isDeleted && op.type === "restore") {
|
|
271
|
+
throw new Error(`log[${idx}]: restore must immediately follow delete`);
|
|
272
|
+
}
|
|
261
273
|
if (idx === 0 && op.type !== "create") {
|
|
262
274
|
throw new Error(`log[${idx}]: first operation must be create`);
|
|
263
275
|
}
|
|
@@ -273,7 +285,7 @@ var verifyIdentityChain = async (input) => {
|
|
|
273
285
|
state.controllerKeys = op.controllerKeys;
|
|
274
286
|
state.services = op.services ?? [];
|
|
275
287
|
}
|
|
276
|
-
if (op.type
|
|
288
|
+
if (op.type !== "create") {
|
|
277
289
|
if (op.previousOperationCID !== state.previousOperationCID) {
|
|
278
290
|
throw new Error(`log[${idx}]: previousCID is incorrect`);
|
|
279
291
|
}
|
|
@@ -370,6 +382,9 @@ var verifyIdentityChain = async (input) => {
|
|
|
370
382
|
case "delete":
|
|
371
383
|
state.isDeleted = true;
|
|
372
384
|
break;
|
|
385
|
+
case "restore":
|
|
386
|
+
state.isDeleted = false;
|
|
387
|
+
break;
|
|
373
388
|
}
|
|
374
389
|
}
|
|
375
390
|
if (!state.did) throw new Error("did is not set");
|
|
@@ -384,9 +399,6 @@ var verifyIdentityChain = async (input) => {
|
|
|
384
399
|
};
|
|
385
400
|
var verifyIdentityExtensionFromTrustedState = async (input) => {
|
|
386
401
|
const { currentState, headCID, lastCreatedAt, newOp } = input;
|
|
387
|
-
if (currentState.isDeleted) {
|
|
388
|
-
throw new Error("cannot extend a deleted identity");
|
|
389
|
-
}
|
|
390
402
|
const decoded = decodeJwsUnsafe(newOp);
|
|
391
403
|
if (!decoded) throw new Error("failed to decode JWS");
|
|
392
404
|
const result = IdentityOperation.safeParse(decoded.payload);
|
|
@@ -395,6 +407,12 @@ var verifyIdentityExtensionFromTrustedState = async (input) => {
|
|
|
395
407
|
throw new Error(messages);
|
|
396
408
|
}
|
|
397
409
|
const op = result.data;
|
|
410
|
+
if (currentState.isDeleted && op.type !== "restore") {
|
|
411
|
+
throw new Error("cannot extend a deleted identity");
|
|
412
|
+
}
|
|
413
|
+
if (!currentState.isDeleted && op.type === "restore") {
|
|
414
|
+
throw new Error("restore must immediately follow delete");
|
|
415
|
+
}
|
|
398
416
|
if (decoded.header.typ !== "did:dfos:identity-op") {
|
|
399
417
|
throw new Error(`invalid typ: ${decoded.header.typ}`);
|
|
400
418
|
}
|
|
@@ -443,21 +461,37 @@ var verifyIdentityExtensionFromTrustedState = async (input) => {
|
|
|
443
461
|
});
|
|
444
462
|
if (op.services) await assertServicesWithinCap(op.services);
|
|
445
463
|
}
|
|
446
|
-
const newState =
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
464
|
+
const newState = (() => {
|
|
465
|
+
switch (op.type) {
|
|
466
|
+
case "update":
|
|
467
|
+
return {
|
|
468
|
+
did: currentState.did,
|
|
469
|
+
isDeleted: false,
|
|
470
|
+
authKeys: op.authKeys,
|
|
471
|
+
assertKeys: op.assertKeys,
|
|
472
|
+
controllerKeys: op.controllerKeys,
|
|
473
|
+
services: op.services ?? []
|
|
474
|
+
};
|
|
475
|
+
case "delete":
|
|
476
|
+
return {
|
|
477
|
+
did: currentState.did,
|
|
478
|
+
isDeleted: true,
|
|
479
|
+
authKeys: currentState.authKeys,
|
|
480
|
+
assertKeys: currentState.assertKeys,
|
|
481
|
+
controllerKeys: currentState.controllerKeys,
|
|
482
|
+
services: currentState.services
|
|
483
|
+
};
|
|
484
|
+
case "restore":
|
|
485
|
+
return {
|
|
486
|
+
did: currentState.did,
|
|
487
|
+
isDeleted: false,
|
|
488
|
+
authKeys: currentState.authKeys,
|
|
489
|
+
assertKeys: currentState.assertKeys,
|
|
490
|
+
controllerKeys: currentState.controllerKeys,
|
|
491
|
+
services: currentState.services
|
|
492
|
+
};
|
|
493
|
+
}
|
|
494
|
+
})();
|
|
461
495
|
return { state: newState, operationCID, createdAt: op.createdAt };
|
|
462
496
|
};
|
|
463
497
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { b as Attenuation, c as AuthTokenClaims, f as CredentialVerificationError, D as DFOSCredentialPayload, i as MAX_CREDENTIAL_SIZE, R as RevocationChecker, V as VerifiedDFOSCredential, u as VerifiedDelegationChain, w as createDFOSCredential, x as decodeDFOSCredentialUnsafe, y as isAttenuated, z as matchesResource, E as verifyDFOSCredential, F as verifyDelegationChain } from '../dfos-credential-
|
|
1
|
+
export { b as Attenuation, c as AuthTokenClaims, f as CredentialVerificationError, D as DFOSCredentialPayload, i as MAX_CREDENTIAL_SIZE, R as RevocationChecker, V as VerifiedDFOSCredential, u as VerifiedDelegationChain, w as createDFOSCredential, x as decodeDFOSCredentialUnsafe, y as isAttenuated, z as matchesResource, E as verifyDFOSCredential, F as verifyDelegationChain } from '../dfos-credential-DU7WvoHE.js';
|
|
2
2
|
import 'zod';
|
|
3
3
|
|
|
4
4
|
interface AuthTokenCreateOptions {
|
|
@@ -148,6 +148,11 @@ declare const IdentityOperation: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
148
148
|
type: z.ZodLiteral<"delete">;
|
|
149
149
|
previousOperationCID: z.ZodString;
|
|
150
150
|
createdAt: z.ZodISODateTime;
|
|
151
|
+
}, z.core.$loose>, z.ZodObject<{
|
|
152
|
+
version: z.ZodLiteral<1>;
|
|
153
|
+
type: z.ZodLiteral<"restore">;
|
|
154
|
+
previousOperationCID: z.ZodString;
|
|
155
|
+
createdAt: z.ZodISODateTime;
|
|
151
156
|
}, z.core.$loose>], "type">;
|
|
152
157
|
type IdentityOperation = z.infer<typeof IdentityOperation>;
|
|
153
158
|
declare const VerifiedIdentity: z.ZodObject<{
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { JwsHeader, JwsVerificationError, JwtClaims, JwtCreateOptions, JwtHeader, JwtVerificationError, JwtVerifyOptions, PrefixedID, assertJwsProfile, base64urlDecode, base64urlEncode, createJws, createJwt, createNewEd25519Keypair, dagCborCanonicalEncode, decodeJwsUnsafe, decodeJwtUnsafe, generateId, generateIdNoPrefix, importEd25519Keypair, isCanonicallyEqual, isValidEd25519Signature, isValidId, normalizedId, parseDagCborCID, signPayloadEd25519, verifyJws, verifyJwt } from './crypto/index.js';
|
|
2
|
-
export { A as ARTIFACT_CID_ANCHOR_RE, a as ArtifactPayload, b as Attenuation, c as AuthTokenClaims, C as CONTENT_ID_ANCHOR_RE, d as ContentOperation, e as CountersignPayload, f as CredentialVerificationError, g as CreditClaimPayload, D as DFOSCredentialPayload, I as IdentityOperation, h as Iso8601, M as MAX_ARTIFACT_PAYLOAD_SIZE, i as MAX_CREDENTIAL_SIZE, j as MAX_CREDIT_CLAIM_SIZE, k as MAX_OPERATION_SIZE, l as MAX_SERVICES_ENTRIES, m as MAX_SERVICES_PAYLOAD_SIZE, n as MAX_SIGN_REQUEST_PAYLOAD_SIZE, o as MAX_SIGN_REQUEST_SIZE, p as MultikeyPublicKey, R as RevocationChecker, q as RevocationPayload, S as ServiceEntry, r as ServicesArray, s as SignRequestPayload, t as Signer, V as VerifiedDFOSCredential, u as VerifiedDelegationChain, v as VerifiedIdentity, w as createDFOSCredential, x as decodeDFOSCredentialUnsafe, y as isAttenuated, z as matchesResource, B as parseProtocolTimestampUnix, E as verifyDFOSCredential, F as verifyDelegationChain } from './dfos-credential-
|
|
2
|
+
export { A as ARTIFACT_CID_ANCHOR_RE, a as ArtifactPayload, b as Attenuation, c as AuthTokenClaims, C as CONTENT_ID_ANCHOR_RE, d as ContentOperation, e as CountersignPayload, f as CredentialVerificationError, g as CreditClaimPayload, D as DFOSCredentialPayload, I as IdentityOperation, h as Iso8601, M as MAX_ARTIFACT_PAYLOAD_SIZE, i as MAX_CREDENTIAL_SIZE, j as MAX_CREDIT_CLAIM_SIZE, k as MAX_OPERATION_SIZE, l as MAX_SERVICES_ENTRIES, m as MAX_SERVICES_PAYLOAD_SIZE, n as MAX_SIGN_REQUEST_PAYLOAD_SIZE, o as MAX_SIGN_REQUEST_SIZE, p as MultikeyPublicKey, R as RevocationChecker, q as RevocationPayload, S as ServiceEntry, r as ServicesArray, s as SignRequestPayload, t as Signer, V as VerifiedDFOSCredential, u as VerifiedDelegationChain, v as VerifiedIdentity, w as createDFOSCredential, x as decodeDFOSCredentialUnsafe, y as isAttenuated, z as matchesResource, B as parseProtocolTimestampUnix, E as verifyDFOSCredential, F as verifyDelegationChain } from './dfos-credential-DU7WvoHE.js';
|
|
3
3
|
export { AnchorKind, CreditClaimFailureReason, CreditClaimVerifyError, CreditEntry, CreditEntryState, ED25519_PRIV_MULTICODEC, ED25519_PUB_MULTICODEC, RECOGNIZED_SERVICE_TYPES, SignRequestFailureReason, SignRequestVerifyError, VerifiedArtifact, VerifiedContentChain, VerifiedCountersignature, VerifiedCreditClaim, VerifiedCreditEntry, VerifiedRevocation, VerifiedSignRequest, anchorsByLabel, assertCanonicalSignRequestPayload, assertServicesWithinCap, buildSignRequest, classifyAnchor, decodeMultikey, deriveChainIdentifier, deriveContentId, encodeEd25519Multikey, isRecognizedServiceType, relayEndpoints, signArtifact, signContentOperation, signCountersignature, signCreditClaim, signIdentityOperation, signRevocation, verifyArtifact, verifyContentChain, verifyContentExtensionFromTrustedState, verifyCountersignature, verifyCreditClaim, verifyCreditEntry, verifyIdentityChain, verifyIdentityExtensionFromTrustedState, verifyRevocation, verifySignRequest } from './chain/index.js';
|
|
4
4
|
export { AuthTokenCreateOptions, AuthTokenVerificationError, AuthTokenVerifyOptions, VerifiedAuthToken, createAuthToken, verifyAuthToken } from './credentials/index.js';
|
|
5
5
|
export { FoldOperation, INDEX_V1_SCHEMA, IndexDelta, IndexDocument, IndexEntry, LwwDelta, OrderKey, byteCompare, compareHeadPreference, compareLinear, foldIndexV1, foldLwwMap, linearize } from './fold/index.js';
|
package/dist/index.js
CHANGED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"description": "Identity chain: genesis + key rotation + delete + restore",
|
|
3
|
+
"type": "identity",
|
|
4
|
+
"chain": [
|
|
5
|
+
"eyJhbGciOiJFZERTQSIsInR5cCI6ImRpZDpkZm9zOmlkZW50aXR5LW9wIiwia2lkIjoia2V5X3I5ZXYzNGZ2YzIzejk5OXZlYWFmdDgzbm4yOXp2aGUiLCJjaWQiOiJiYWZ5cmVpY29naHZqem52bGl1bG94eG1iZjU0dHB6cXdhaG5xcGlsazduY3hlcGppbmVkcGtnYTNuZSJ9.eyJ2ZXJzaW9uIjoxLCJ0eXBlIjoiY3JlYXRlIiwiYXV0aEtleXMiOlt7ImlkIjoia2V5X3I5ZXYzNGZ2YzIzejk5OXZlYWFmdDgzbm4yOXp2aGUiLCJ0eXBlIjoiTXVsdGlrZXkiLCJwdWJsaWNLZXlNdWx0aWJhc2UiOiJ6Nk1rcnpMTU53b0pTVjRQM1ljY1djYnRrOHZkOUx0Z01LbkxlYURMVXFMdUFTamIifV0sImFzc2VydEtleXMiOlt7ImlkIjoia2V5X3I5ZXYzNGZ2YzIzejk5OXZlYWFmdDgzbm4yOXp2aGUiLCJ0eXBlIjoiTXVsdGlrZXkiLCJwdWJsaWNLZXlNdWx0aWJhc2UiOiJ6Nk1rcnpMTU53b0pTVjRQM1ljY1djYnRrOHZkOUx0Z01LbkxlYURMVXFMdUFTamIifV0sImNvbnRyb2xsZXJLZXlzIjpbeyJpZCI6ImtleV9yOWV2MzRmdmMyM3o5OTl2ZWFhZnQ4M25uMjl6dmhlIiwidHlwZSI6Ik11bHRpa2V5IiwicHVibGljS2V5TXVsdGliYXNlIjoiejZNa3J6TE1Od29KU1Y0UDNZY2NXY2J0azh2ZDlMdGdNS25MZWFETFVxTHVBU2piIn1dLCJjcmVhdGVkQXQiOiIyMDI2LTAzLTA3VDAwOjAwOjAwLjAwMFoifQ.TeznHnzrtKOGTr0FzkDL2z-luMWnAbKXrmDbi-Exgw_xMPCnYwGHORMjw-BM28f0RoTirIAeD7d20W5RSuGuBg",
|
|
6
|
+
"eyJhbGciOiJFZERTQSIsInR5cCI6ImRpZDpkZm9zOmlkZW50aXR5LW9wIiwia2lkIjoiZGlkOmRmb3M6Y25ubmZ0OWY4YTJybjkzOGQ2bmt6MzhyODQ3djJrciNrZXlfcjlldjM0ZnZjMjN6OTk5dmVhYWZ0ODNubjI5enZoZSIsImNpZCI6ImJhZnlyZWliZnVoNjN1djMzaTJpNWVvb2UzYm9pdDJydXlqZWh1YnNyeWVtdXV6Nm1ydGxlajI2cmVpIn0.eyJ2ZXJzaW9uIjoxLCJ0eXBlIjoidXBkYXRlIiwicHJldmlvdXNPcGVyYXRpb25DSUQiOiJiYWZ5cmVpY29naHZqem52bGl1bG94eG1iZjU0dHB6cXdhaG5xcGlsazduY3hlcGppbmVkcGtnYTNuZSIsImF1dGhLZXlzIjpbeyJpZCI6ImtleV9lejlhODc0dGNrcjNkdjkzM2QzY2tkbjd6NnpyY3Q4IiwidHlwZSI6Ik11bHRpa2V5IiwicHVibGljS2V5TXVsdGliYXNlIjoiejZNa2ZVZDY1SnJBaGZkZ0Z1TUNjY1U5VGhRdmpCMmZKQU1VSGt1dWFqRjk5MmdLIn1dLCJhc3NlcnRLZXlzIjpbeyJpZCI6ImtleV9lejlhODc0dGNrcjNkdjkzM2QzY2tkbjd6NnpyY3Q4IiwidHlwZSI6Ik11bHRpa2V5IiwicHVibGljS2V5TXVsdGliYXNlIjoiejZNa2ZVZDY1SnJBaGZkZ0Z1TUNjY1U5VGhRdmpCMmZKQU1VSGt1dWFqRjk5MmdLIn1dLCJjb250cm9sbGVyS2V5cyI6W3siaWQiOiJrZXlfZXo5YTg3NHRja3IzZHY5MzNkM2NrZG43ejZ6cmN0OCIsInR5cGUiOiJNdWx0aWtleSIsInB1YmxpY0tleU11bHRpYmFzZSI6Ino2TWtmVWQ2NUpyQWhmZGdGdU1DY2NVOVRoUXZqQjJmSkFNVUhrdXVhakY5OTJnSyJ9XSwiY3JlYXRlZEF0IjoiMjAyNi0wMy0wN1QwMDowMTowMC4wMDBaIn0.7fqvWGEVYW9atA1uqpp7lIUOWp4dATLpLjOmFWzJN-8gTL-QnXDCeyGcBu5AXhHzO52fauwUavh1KrB6wBYuCw",
|
|
7
|
+
"eyJhbGciOiJFZERTQSIsInR5cCI6ImRpZDpkZm9zOmlkZW50aXR5LW9wIiwia2lkIjoiZGlkOmRmb3M6Y25ubmZ0OWY4YTJybjkzOGQ2bmt6MzhyODQ3djJrciNrZXlfZXo5YTg3NHRja3IzZHY5MzNkM2NrZG43ejZ6cmN0OCIsImNpZCI6ImJhZnlyZWljbDNhMnQ2dmh6NXZndnM1b2pkdzV3Y3dnb3ozdGF4cXF3ZXhwYnBsdG0yZ2gzcTQyenlpIn0.eyJ2ZXJzaW9uIjoxLCJ0eXBlIjoiZGVsZXRlIiwicHJldmlvdXNPcGVyYXRpb25DSUQiOiJiYWZ5cmVpYmZ1aDYzdXYzM2kyaTVlb29lM2JvaXQycnV5amVodWJzcnllbXV1ejZtcnRsZWoyNnJlaSIsImNyZWF0ZWRBdCI6IjIwMjYtMDMtMDdUMDA6MDI6MDAuMDAwWiJ9.00Dy7qeK7I0hC3P1yvERLJINBLNiEV9LhG8BXdUMIGGLTsxuMcuhn3Yquq96SQa8mzl-BztzD5LMxBohYZxQAg",
|
|
8
|
+
"eyJhbGciOiJFZERTQSIsInR5cCI6ImRpZDpkZm9zOmlkZW50aXR5LW9wIiwia2lkIjoiZGlkOmRmb3M6Y25ubmZ0OWY4YTJybjkzOGQ2bmt6MzhyODQ3djJrciNrZXlfZXo5YTg3NHRja3IzZHY5MzNkM2NrZG43ejZ6cmN0OCIsImNpZCI6ImJhZnlyZWlleWF2dWU2dnh6dDYzdWxrcXB3ZXRmd3F2Znpka2VxNnQzcTNnd3JqbnFnaG1panJneWJhIn0.eyJ2ZXJzaW9uIjoxLCJ0eXBlIjoicmVzdG9yZSIsInByZXZpb3VzT3BlcmF0aW9uQ0lEIjoiYmFmeXJlaWNsM2EydDZ2aHo1dmd2czVvamR3NXdjd2dvejN0YXhxcXdleHBicGx0bTJnaDNxNDJ6eWkiLCJjcmVhdGVkQXQiOiIyMDI2LTAzLTA3VDAwOjAzOjAwLjAwMFoifQ.lVKZj34IGmyf-0Un7TELSPP3i57gWMe8j5d4d06gFnh8r4hpf5_1VHMUrwwkt7CFnWcd4Ui4CdeXPKS8jpIeAg"
|
|
9
|
+
],
|
|
10
|
+
"expected": {
|
|
11
|
+
"did": "did:dfos:cnnnft9f8a2rn938d6nkz38r847v2kr",
|
|
12
|
+
"isDeleted": false,
|
|
13
|
+
"controllerKeys": [
|
|
14
|
+
{
|
|
15
|
+
"id": "key_ez9a874tckr3dv933d3ckdn7z6zrct8",
|
|
16
|
+
"type": "Multikey",
|
|
17
|
+
"publicKeyMultibase": "z6MkfUd65JrAhfdgFuMCccU9ThQvjB2fJAMUHkuuajF992gK"
|
|
18
|
+
}
|
|
19
|
+
]
|
|
20
|
+
}
|
|
21
|
+
}
|