@twin.org/identity-connector-entity-storage 0.0.3-next.1 → 0.0.3-next.11

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.
@@ -84,7 +84,7 @@ export class EntityStorageIdentityConnector {
84
84
  const bitString = new BitString(EntityStorageIdentityConnector._REVOCATION_BITS_SIZE);
85
85
  const compressed = await Compression.compress(bitString.getBits(), CompressionType.Gzip);
86
86
  const didDocument = {
87
- "@context": DidContexts.Context,
87
+ "@context": DidContexts.Namespace,
88
88
  id: did,
89
89
  service: [
90
90
  {
@@ -147,9 +147,8 @@ export class EntityStorageIdentityConnector {
147
147
  if (Is.stringValue(verificationMethodId)) {
148
148
  // If there is a verification method id, we will try to get the key from the vault.
149
149
  try {
150
- const defaultMethodId = `${controller}/${verificationMethodId}`;
151
150
  // If there is an existing key, we will use it.
152
- const existingKey = await this._vaultConnector.getKey(defaultMethodId);
151
+ const existingKey = await this._vaultConnector.getKey(EntityStorageIdentityConnector.buildVaultKey(didDocument.id, verificationMethodId));
153
152
  methodKeyPublic = existingKey.publicKey;
154
153
  }
155
154
  catch { }
@@ -412,7 +411,7 @@ export class EntityStorageIdentityConnector {
412
411
  finalTypes.push(credType);
413
412
  }
414
413
  const verifiableCredential = {
415
- "@context": JsonLdProcessor.combineContexts(DidContexts.ContextVCv1, credContext),
414
+ "@context": JsonLdProcessor.combineContexts(DidContexts.NamespaceVCv1, credContext),
416
415
  id,
417
416
  type: finalTypes,
418
417
  credentialSubject: subjectClone,
@@ -458,6 +457,9 @@ export class EntityStorageIdentityConnector {
458
457
  sub: credId,
459
458
  vc: jwtVc
460
459
  };
460
+ if (Is.date(options?.expirationDate)) {
461
+ jwtPayload.exp = Math.floor(options.expirationDate.getTime() / 1000);
462
+ }
461
463
  const signature = await Jwt.encodeWithSigner(jwtHeader, jwtPayload, async (header, payload) => VaultConnectorHelper.jwtSigner(this._vaultConnector, EntityStorageIdentityConnector.buildVaultKey(idParts.id, idParts.fragment ?? ""), header, payload));
462
464
  return {
463
465
  verifiableCredential,
@@ -695,7 +697,7 @@ export class EntityStorageIdentityConnector {
695
697
  finalTypes.push(types);
696
698
  }
697
699
  const verifiablePresentation = {
698
- "@context": JsonLdProcessor.combineContexts(DidContexts.ContextVCv1, contexts),
700
+ "@context": JsonLdProcessor.combineContexts(DidContexts.NamespaceVCv1, contexts),
699
701
  id: presentationId,
700
702
  type: finalTypes,
701
703
  verifiableCredential: verifiableCredentials,
@@ -772,7 +774,7 @@ export class EntityStorageIdentityConnector {
772
774
  }
773
775
  await EntityStorageIdentityConnector.verifyDocument(issuerDidDocument, this._vaultConnector);
774
776
  issuers.push({
775
- "@context": DidContexts.Context,
777
+ "@context": DidContexts.Namespace,
776
778
  ...issuerDidDocument
777
779
  });
778
780
  const vc = jwt.payload.vc;
@@ -780,14 +782,14 @@ export class EntityStorageIdentityConnector {
780
782
  const credentialStatus = vc.credentialStatus;
781
783
  if (Is.object(credentialStatus)) {
782
784
  revoked = await this.checkRevocation({
783
- "@context": DidContexts.Context,
785
+ "@context": DidContexts.Namespace,
784
786
  ...issuerDidDocument
785
787
  }, credentialStatus.revocationBitmapIndex);
786
788
  }
787
789
  else if (Is.arrayValue(credentialStatus)) {
788
790
  for (let i = 0; i < credentialStatus.length; i++) {
789
791
  revoked = await this.checkRevocation({
790
- "@context": DidContexts.Context,
792
+ "@context": DidContexts.Namespace,
791
793
  ...issuerDidDocument
792
794
  }, credentialStatus[i].revocationBitmapIndex);
793
795
  if (revoked) {
@@ -1 +1 @@
1
- {"version":3,"file":"entityStorageIdentityConnector.js","sourceRoot":"","sources":["../../src/entityStorageIdentityConnector.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport {\n\tBaseError,\n\tBitString,\n\tCoerce,\n\tCompression,\n\tCompressionType,\n\tConverter,\n\tGeneralError,\n\tGuards,\n\tIs,\n\tJsonHelper,\n\tNotFoundError,\n\tObjectHelper,\n\tRandomHelper\n} from \"@twin.org/core\";\nimport {\n\tJsonLdProcessor,\n\ttype IJsonLdContextDefinitionRoot,\n\ttype IJsonLdNodeObject\n} from \"@twin.org/data-json-ld\";\nimport {\n\tEntityStorageConnectorFactory,\n\ttype IEntityStorageConnector\n} from \"@twin.org/entity-storage-models\";\nimport { DocumentHelper, type IIdentityConnector } from \"@twin.org/identity-models\";\nimport { nameof } from \"@twin.org/nameof\";\nimport {\n\tDidContexts,\n\tDidTypes,\n\tDidVerificationMethodType,\n\tProofHelper,\n\tProofTypes,\n\ttype IDidDocument,\n\ttype IDidDocumentVerificationMethod,\n\ttype IDidService,\n\ttype IDidVerifiableCredentialV1,\n\ttype IDidVerifiablePresentationV1,\n\ttype IProof\n} from \"@twin.org/standards-w3c-did\";\nimport {\n\tVaultConnectorFactory,\n\tVaultConnectorHelper,\n\tVaultKeyType,\n\ttype IVaultConnector\n} from \"@twin.org/vault-models\";\nimport { Jwk, Jwt, type IJwk, type IJwtHeader, type IJwtPayload } from \"@twin.org/web\";\nimport type { IdentityDocument } from \"./entities/identityDocument.js\";\nimport type { IEntityStorageIdentityConnectorConstructorOptions } from \"./models/IEntityStorageIdentityConnectorConstructorOptions.js\";\n\n/**\n * Class for performing identity operations using entity storage.\n */\nexport class EntityStorageIdentityConnector implements IIdentityConnector {\n\t/**\n\t * Runtime name for the class.\n\t */\n\tpublic static readonly CLASS_NAME: string = nameof<EntityStorageIdentityConnector>();\n\n\t/**\n\t * The namespace supported by the identity connector.\n\t */\n\tpublic static readonly NAMESPACE: string = \"entity-storage\";\n\n\t/**\n\t * The size of the revocation bitmap in bits (16Kb).\n\t * @internal\n\t */\n\tprivate static readonly _REVOCATION_BITS_SIZE: number = 131072;\n\n\t/**\n\t * The entity storage for identities.\n\t * @internal\n\t */\n\tprotected readonly _didDocumentEntityStorage: IEntityStorageConnector<IdentityDocument>;\n\n\t/**\n\t * The vault for the keys.\n\t * @internal\n\t */\n\tprotected readonly _vaultConnector: IVaultConnector;\n\n\t/**\n\t * Create a new instance of EntityStorageIdentityConnector.\n\t * @param options The options for the identity connector.\n\t */\n\tconstructor(options?: IEntityStorageIdentityConnectorConstructorOptions) {\n\t\tthis._didDocumentEntityStorage = EntityStorageConnectorFactory.get(\n\t\t\toptions?.didDocumentEntityStorageType ?? \"identity-document\"\n\t\t);\n\t\tthis._vaultConnector = VaultConnectorFactory.get(options?.vaultConnectorType ?? \"vault\");\n\t}\n\n\t/**\n\t * Build the key name to access the specified key in the vault.\n\t * @param identity The identity of the user to access the vault keys.\n\t * @returns The vault key.\n\t * @internal\n\t */\n\tpublic static buildVaultKey(identity: string, key: string): string {\n\t\treturn `${identity}/${key}`;\n\t}\n\n\t/**\n\t * Verify the document in storage.\n\t * @param didDocument The did document that was stored.\n\t * @internal\n\t */\n\tpublic static async verifyDocument(\n\t\tdidDocument: IdentityDocument,\n\t\tvaultConnector: IVaultConnector\n\t): Promise<void> {\n\t\tconst stringifiedDocument = JsonHelper.canonicalize(didDocument.document);\n\t\tconst docBytes = Converter.utf8ToBytes(stringifiedDocument);\n\n\t\tconst verified = await vaultConnector.verify(\n\t\t\tEntityStorageIdentityConnector.buildVaultKey(didDocument.id, \"did\"),\n\t\t\tdocBytes,\n\t\t\tConverter.base64ToBytes(didDocument.signature)\n\t\t);\n\n\t\tif (!verified) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\"signatureVerificationFailed\"\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Returns the class name of the component.\n\t * @returns The class name of the component.\n\t */\n\tpublic className(): string {\n\t\treturn EntityStorageIdentityConnector.CLASS_NAME;\n\t}\n\n\t/**\n\t * Create a new document.\n\t * @param controller The controller of the identity who can make changes.\n\t * @returns The created document.\n\t */\n\tpublic async createDocument(controller: string): Promise<IDidDocument> {\n\t\tGuards.stringValue(EntityStorageIdentityConnector.CLASS_NAME, nameof(controller), controller);\n\n\t\ttry {\n\t\t\tconst did = `did:${EntityStorageIdentityConnector.NAMESPACE}:${Converter.bytesToHex(RandomHelper.generate(32), true)}`;\n\n\t\t\tawait this._vaultConnector.createKey(\n\t\t\t\tEntityStorageIdentityConnector.buildVaultKey(did, \"did\"),\n\t\t\t\tVaultKeyType.Ed25519\n\t\t\t);\n\n\t\t\tconst bitString = new BitString(EntityStorageIdentityConnector._REVOCATION_BITS_SIZE);\n\t\t\tconst compressed = await Compression.compress(bitString.getBits(), CompressionType.Gzip);\n\n\t\t\tconst didDocument: IDidDocument = {\n\t\t\t\t\"@context\": DidContexts.Context,\n\t\t\t\tid: did,\n\t\t\t\tservice: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: `${did}#revocation`,\n\t\t\t\t\t\ttype: \"BitstringStatusList\",\n\t\t\t\t\t\tserviceEndpoint: `data:application/octet-stream;base64,${Converter.bytesToBase64Url(compressed)}`\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t};\n\n\t\t\tawait this.updateDocument(controller, didDocument);\n\n\t\t\treturn didDocument;\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\"createDocumentFailed\",\n\t\t\t\tundefined,\n\t\t\t\terror\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Remove a document.\n\t * @param controller The controller of the identity who can make changes.\n\t * @param documentId The id of the document to remove.\n\t * @returns Nothing.\n\t */\n\tpublic async removeDocument(controller: string, documentId: string): Promise<void> {\n\t\tGuards.stringValue(EntityStorageIdentityConnector.CLASS_NAME, nameof(controller), controller);\n\t\tGuards.stringValue(EntityStorageIdentityConnector.CLASS_NAME, nameof(documentId), documentId);\n\n\t\ttry {\n\t\t\tconst didDocument = await this._didDocumentEntityStorage.get(documentId);\n\t\t\tif (Is.empty(didDocument)) {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\t\"documentNotFound\",\n\t\t\t\t\tdocumentId\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tawait this._didDocumentEntityStorage.remove(documentId);\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\"removeDocumentFailed\",\n\t\t\t\tundefined,\n\t\t\t\terror\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Add a verification method to the document in JSON Web key Format.\n\t * @param controller The controller of the identity who can make changes.\n\t * @param documentId The id of the document to add the verification method to.\n\t * @param verificationMethodType The type of the verification method to add.\n\t * @param verificationMethodId The id of the verification method, if undefined uses the kid of the generated JWK.\n\t * @returns The verification method.\n\t * @throws NotFoundError if the id can not be resolved.\n\t * @throws NotSupportedError if the platform does not support multiple keys.\n\t */\n\tpublic async addVerificationMethod(\n\t\tcontroller: string,\n\t\tdocumentId: string,\n\t\tverificationMethodType: DidVerificationMethodType,\n\t\tverificationMethodId?: string\n\t): Promise<IDidDocumentVerificationMethod> {\n\t\tGuards.stringValue(EntityStorageIdentityConnector.CLASS_NAME, nameof(controller), controller);\n\t\tGuards.stringValue(EntityStorageIdentityConnector.CLASS_NAME, nameof(documentId), documentId);\n\t\tGuards.arrayOneOf<DidVerificationMethodType>(\n\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\tnameof(verificationMethodType),\n\t\t\tverificationMethodType,\n\t\t\tObject.values(DidVerificationMethodType)\n\t\t);\n\n\t\tlet tempKeyId;\n\t\ttry {\n\t\t\tconst didIdentityDocument = await this._didDocumentEntityStorage.get(documentId);\n\t\t\tif (Is.undefined(didIdentityDocument)) {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\t\"documentNotFound\",\n\t\t\t\t\tdocumentId\n\t\t\t\t);\n\t\t\t}\n\t\t\tawait EntityStorageIdentityConnector.verifyDocument(\n\t\t\t\tdidIdentityDocument,\n\t\t\t\tthis._vaultConnector\n\t\t\t);\n\n\t\t\tconst didDocument = didIdentityDocument.document;\n\n\t\t\tlet methodKeyPublic;\n\t\t\tif (Is.stringValue(verificationMethodId)) {\n\t\t\t\t// If there is a verification method id, we will try to get the key from the vault.\n\t\t\t\ttry {\n\t\t\t\t\tconst defaultMethodId = `${controller}/${verificationMethodId}`;\n\t\t\t\t\t// If there is an existing key, we will use it.\n\t\t\t\t\tconst existingKey = await this._vaultConnector.getKey(defaultMethodId);\n\t\t\t\t\tmethodKeyPublic = existingKey.publicKey;\n\t\t\t\t} catch {}\n\t\t\t}\n\n\t\t\tif (Is.empty(methodKeyPublic)) {\n\t\t\t\t// If there is no existing key, we will create a new one with a temporary name.\n\t\t\t\ttempKeyId = `temp-vm-${Converter.bytesToBase64Url(RandomHelper.generate(16))}`;\n\t\t\t\tmethodKeyPublic = await this._vaultConnector.createKey(\n\t\t\t\t\tEntityStorageIdentityConnector.buildVaultKey(didDocument.id, tempKeyId),\n\t\t\t\t\tVaultKeyType.Ed25519\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst jwkParams: IJwk = {\n\t\t\t\talg: \"EdDSA\",\n\t\t\t\tkty: \"OKP\",\n\t\t\t\tcrv: \"Ed25519\",\n\t\t\t\tx: Converter.bytesToBase64Url(methodKeyPublic)\n\t\t\t};\n\n\t\t\tconst kid = await Jwk.generateKid(jwkParams);\n\n\t\t\tconst methodId = `${documentId}#${verificationMethodId ?? kid}`;\n\n\t\t\tif (Is.stringValue(tempKeyId)) {\n\t\t\t\t// If we created a temporary key, we will rename it to the final method id.\n\t\t\t\tawait this._vaultConnector.renameKey(\n\t\t\t\t\tEntityStorageIdentityConnector.buildVaultKey(didDocument.id, tempKeyId),\n\t\t\t\t\tEntityStorageIdentityConnector.buildVaultKey(didDocument.id, verificationMethodId ?? kid)\n\t\t\t\t);\n\t\t\t\ttempKeyId = undefined;\n\t\t\t}\n\n\t\t\tconst methods = this.getAllMethods(didDocument);\n\t\t\tconst existingMethodIndex = methods.findIndex(m => {\n\t\t\t\tif (Is.string(m.method)) {\n\t\t\t\t\treturn m.method === methodId;\n\t\t\t\t}\n\t\t\t\treturn m.method.id === methodId;\n\t\t\t});\n\n\t\t\tif (existingMethodIndex !== -1) {\n\t\t\t\tconst methodArray =\n\t\t\t\t\tdidDocument[methods[existingMethodIndex].arrayKey as keyof IDidDocument];\n\n\t\t\t\tif (Is.array(methodArray)) {\n\t\t\t\t\tmethodArray.splice(existingMethodIndex, 1);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst didVerificationMethod: IDidDocumentVerificationMethod = {\n\t\t\t\tid: methodId,\n\t\t\t\tcontroller: documentId,\n\t\t\t\ttype: \"JsonWebKey\",\n\t\t\t\tpublicKeyJwk: {\n\t\t\t\t\t...jwkParams,\n\t\t\t\t\tkid\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tdidDocument[verificationMethodType] ??= [];\n\t\t\tdidDocument[verificationMethodType]?.push(didVerificationMethod);\n\n\t\t\tawait this.updateDocument(controller, didDocument);\n\n\t\t\treturn didVerificationMethod;\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\"addVerificationMethodFailed\",\n\t\t\t\tundefined,\n\t\t\t\terror\n\t\t\t);\n\t\t} finally {\n\t\t\tif (Is.stringValue(tempKeyId)) {\n\t\t\t\t// If we created a temporary key and it is still in use, we will remove it from the vault.\n\t\t\t\ttry {\n\t\t\t\t\tawait this._vaultConnector.removeKey(tempKeyId);\n\t\t\t\t} catch {}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Remove a verification method from the document.\n\t * @param controller The controller of the identity who can make changes.\n\t * @param verificationMethodId The id of the verification method.\n\t * @returns Nothing.\n\t * @throws NotFoundError if the id can not be resolved.\n\t * @throws NotSupportedError if the platform does not support multiple revocable keys.\n\t */\n\tpublic async removeVerificationMethod(\n\t\tcontroller: string,\n\t\tverificationMethodId: string\n\t): Promise<void> {\n\t\tGuards.stringValue(EntityStorageIdentityConnector.CLASS_NAME, nameof(controller), controller);\n\t\tGuards.stringValue(\n\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\tnameof(verificationMethodId),\n\t\t\tverificationMethodId\n\t\t);\n\n\t\ttry {\n\t\t\tconst idParts = DocumentHelper.parseId(verificationMethodId);\n\t\t\tif (Is.empty(idParts.fragment)) {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\t\"missingDid\",\n\t\t\t\t\tverificationMethodId\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst didIdentityDocument = await this._didDocumentEntityStorage.get(idParts.id);\n\t\t\tif (Is.undefined(didIdentityDocument)) {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\t\"documentNotFound\",\n\t\t\t\t\tidParts.id\n\t\t\t\t);\n\t\t\t}\n\t\t\tawait EntityStorageIdentityConnector.verifyDocument(\n\t\t\t\tdidIdentityDocument,\n\t\t\t\tthis._vaultConnector\n\t\t\t);\n\t\t\tconst didDocument = didIdentityDocument.document;\n\n\t\t\tconst methods = this.getAllMethods(didDocument);\n\t\t\tconst existingMethodIndex = methods.findIndex(m => {\n\t\t\t\tif (Is.string(m.method)) {\n\t\t\t\t\treturn m.method === verificationMethodId;\n\t\t\t\t}\n\t\t\t\treturn m.method.id === verificationMethodId;\n\t\t\t});\n\n\t\t\tif (existingMethodIndex !== -1) {\n\t\t\t\tconst methodArray =\n\t\t\t\t\tdidDocument[methods[existingMethodIndex].arrayKey as keyof IDidDocument];\n\n\t\t\t\tif (Is.array(methodArray)) {\n\t\t\t\t\tmethodArray.splice(existingMethodIndex, 1);\n\t\t\t\t\tif (methodArray.length === 0) {\n\t\t\t\t\t\tdelete didDocument[methods[existingMethodIndex].arrayKey as keyof IDidDocument];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\t\"verificationMethodNotFound\",\n\t\t\t\t\tverificationMethodId\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tawait this.updateDocument(controller, didDocument);\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\"removeVerificationMethodFailed\",\n\t\t\t\tundefined,\n\t\t\t\terror\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Add a service to the document.\n\t * @param controller The controller of the identity who can make changes.\n\t * @param documentId The id of the document to add the service to.\n\t * @param serviceId The id of the service.\n\t * @param serviceType The type of the service.\n\t * @param serviceEndpoint The endpoint for the service.\n\t * @returns The service.\n\t * @throws NotFoundError if the id can not be resolved.\n\t */\n\tpublic async addService(\n\t\tcontroller: string,\n\t\tdocumentId: string,\n\t\tserviceId: string,\n\t\tserviceType: string | string[],\n\t\tserviceEndpoint: string | string[]\n\t): Promise<IDidService> {\n\t\tGuards.stringValue(EntityStorageIdentityConnector.CLASS_NAME, nameof(controller), controller);\n\t\tGuards.stringValue(EntityStorageIdentityConnector.CLASS_NAME, nameof(documentId), documentId);\n\t\tGuards.stringValue(EntityStorageIdentityConnector.CLASS_NAME, nameof(serviceId), serviceId);\n\t\tif (Is.array(serviceType)) {\n\t\t\tGuards.arrayValue<string>(\n\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\tnameof(serviceType),\n\t\t\t\tserviceType\n\t\t\t);\n\t\t} else {\n\t\t\tGuards.stringValue(\n\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\tnameof(serviceType),\n\t\t\t\tserviceType\n\t\t\t);\n\t\t}\n\t\tif (Is.array(serviceEndpoint)) {\n\t\t\tGuards.arrayValue<string>(\n\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\tnameof(serviceEndpoint),\n\t\t\t\tserviceEndpoint\n\t\t\t);\n\t\t} else {\n\t\t\tGuards.stringValue(\n\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\tnameof(serviceEndpoint),\n\t\t\t\tserviceEndpoint\n\t\t\t);\n\t\t}\n\n\t\ttry {\n\t\t\tconst didIdentityDocument = await this._didDocumentEntityStorage.get(documentId);\n\t\t\tif (Is.undefined(didIdentityDocument)) {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\t\"documentNotFound\",\n\t\t\t\t\tdocumentId\n\t\t\t\t);\n\t\t\t}\n\t\t\tawait EntityStorageIdentityConnector.verifyDocument(\n\t\t\t\tdidIdentityDocument,\n\t\t\t\tthis._vaultConnector\n\t\t\t);\n\t\t\tconst didDocument = didIdentityDocument.document;\n\n\t\t\tconst fullServiceId = serviceId.includes(\"#\") ? serviceId : `${documentId}#${serviceId}`;\n\n\t\t\tif (Is.array(didDocument.service)) {\n\t\t\t\tconst existingServiceIndex = didDocument.service.findIndex(s => s.id === fullServiceId);\n\t\t\t\tif (existingServiceIndex !== -1) {\n\t\t\t\t\tdidDocument.service?.splice(existingServiceIndex, 1);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst didService: IDidService = {\n\t\t\t\tid: fullServiceId,\n\t\t\t\ttype: serviceType,\n\t\t\t\tserviceEndpoint\n\t\t\t};\n\n\t\t\tdidDocument.service ??= [];\n\t\t\tdidDocument.service.push(didService);\n\n\t\t\tawait this.updateDocument(controller, didDocument);\n\n\t\t\treturn didService;\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\"addServiceFailed\",\n\t\t\t\tundefined,\n\t\t\t\terror\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Remove a service from the document.\n\t * @param controller The controller of the identity who can make changes.\n\t * @param serviceId The id of the service.\n\t * @returns Nothing.\n\t * @throws NotFoundError if the id can not be resolved.\n\t */\n\tpublic async removeService(controller: string, serviceId: string): Promise<void> {\n\t\tGuards.stringValue(EntityStorageIdentityConnector.CLASS_NAME, nameof(controller), controller);\n\t\tGuards.stringValue(EntityStorageIdentityConnector.CLASS_NAME, nameof(serviceId), serviceId);\n\n\t\ttry {\n\t\t\tconst idParts = DocumentHelper.parseId(serviceId);\n\t\t\tif (Is.empty(idParts.fragment)) {\n\t\t\t\tthrow new NotFoundError(EntityStorageIdentityConnector.CLASS_NAME, \"missingDid\", serviceId);\n\t\t\t}\n\n\t\t\tconst didIdentityDocument = await this._didDocumentEntityStorage.get(idParts.id);\n\t\t\tif (Is.undefined(didIdentityDocument)) {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\t\"documentNotFound\",\n\t\t\t\t\tidParts.id\n\t\t\t\t);\n\t\t\t}\n\t\t\tawait EntityStorageIdentityConnector.verifyDocument(\n\t\t\t\tdidIdentityDocument,\n\t\t\t\tthis._vaultConnector\n\t\t\t);\n\t\t\tconst didDocument = didIdentityDocument.document;\n\n\t\t\tif (Is.array(didDocument.service)) {\n\t\t\t\tconst existingServiceIndex = didDocument.service.findIndex(s => s.id === serviceId);\n\t\t\t\tif (existingServiceIndex !== -1) {\n\t\t\t\t\tdidDocument.service?.splice(existingServiceIndex, 1);\n\t\t\t\t\tif (didDocument.service?.length === 0) {\n\t\t\t\t\t\tdelete didDocument.service;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\t\"serviceNotFound\",\n\t\t\t\t\tserviceId\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tawait this.updateDocument(controller, didDocument);\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\"removeServiceFailed\",\n\t\t\t\tundefined,\n\t\t\t\terror\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Create a verifiable credential for a verification method.\n\t * @param controller The controller of the identity who can make changes.\n\t * @param verificationMethodId The verification method id to use.\n\t * @param id The id of the credential.\n\t * @param subject The credential subject to store in the verifiable credential.\n\t * @param options Additional options for creating the verifiable credential.\n\t * @param options.revocationIndex The bitmap revocation index of the credential, if undefined will not have revocation status.\n\t * @param options.expirationDate The date the verifiable credential is valid until.\n\t * @returns The created verifiable credential and its token.\n\t * @throws NotFoundError if the id can not be resolved.\n\t */\n\tpublic async createVerifiableCredential(\n\t\tcontroller: string,\n\t\tverificationMethodId: string,\n\t\tid: string | undefined,\n\t\tsubject: IJsonLdNodeObject,\n\t\toptions?: {\n\t\t\trevocationIndex?: number;\n\t\t\texpirationDate?: Date;\n\t\t}\n\t): Promise<{\n\t\tverifiableCredential: IDidVerifiableCredentialV1;\n\t\tjwt: string;\n\t}> {\n\t\tGuards.stringValue(EntityStorageIdentityConnector.CLASS_NAME, nameof(controller), controller);\n\t\tGuards.stringValue(\n\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\tnameof(verificationMethodId),\n\t\t\tverificationMethodId\n\t\t);\n\t\tGuards.object<IJsonLdNodeObject>(\n\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\tnameof(subject),\n\t\t\tsubject\n\t\t);\n\t\tif (!Is.undefined(options?.revocationIndex)) {\n\t\t\tGuards.number(\n\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\tnameof(options.revocationIndex),\n\t\t\t\toptions.revocationIndex\n\t\t\t);\n\t\t}\n\n\t\ttry {\n\t\t\tconst idParts = DocumentHelper.parseId(verificationMethodId);\n\t\t\tif (Is.empty(idParts.fragment)) {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\t\"missingDid\",\n\t\t\t\t\tverificationMethodId\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst issuerIdentityDocument = await this._didDocumentEntityStorage.get(idParts.id);\n\t\t\tif (Is.undefined(issuerIdentityDocument)) {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\t\"documentNotFound\",\n\t\t\t\t\tidParts.id\n\t\t\t\t);\n\t\t\t}\n\t\t\tawait EntityStorageIdentityConnector.verifyDocument(\n\t\t\t\tissuerIdentityDocument,\n\t\t\t\tthis._vaultConnector\n\t\t\t);\n\t\t\tconst issuerDidDocument = issuerIdentityDocument.document;\n\n\t\t\tconst methods = this.getAllMethods(issuerDidDocument);\n\t\t\tconst methodAndArray = methods.find(m => {\n\t\t\t\tif (Is.string(m.method)) {\n\t\t\t\t\treturn m.method === verificationMethodId;\n\t\t\t\t}\n\t\t\t\treturn m.method.id === verificationMethodId;\n\t\t\t});\n\n\t\t\tif (!methodAndArray) {\n\t\t\t\tthrow new GeneralError(EntityStorageIdentityConnector.CLASS_NAME, \"methodMissing\", {\n\t\t\t\t\tmethod: verificationMethodId\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst verificationDidMethod = methodAndArray.method;\n\t\t\tif (!Is.stringValue(verificationDidMethod.publicKeyJwk?.x)) {\n\t\t\t\tthrow new GeneralError(EntityStorageIdentityConnector.CLASS_NAME, \"publicKeyJwkMissing\", {\n\t\t\t\t\tmethod: verificationMethodId\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst revocationService = issuerDidDocument.service?.find(s => s.id.endsWith(\"#revocation\"));\n\n\t\t\tconst subjectClone = ObjectHelper.clone(subject);\n\n\t\t\tconst finalTypes: string[] = [DidTypes.VerifiableCredential];\n\t\t\tconst credContext = ObjectHelper.extractProperty<IJsonLdContextDefinitionRoot>(subjectClone, [\n\t\t\t\t\"@context\"\n\t\t\t]);\n\t\t\tconst credId = ObjectHelper.extractProperty<string>(subjectClone, [\"@id\", \"id\"], false);\n\t\t\tconst credType = ObjectHelper.extractProperty<string>(subjectClone, [\"@type\", \"type\"]);\n\t\t\tif (Is.stringValue(credType)) {\n\t\t\t\tfinalTypes.push(credType);\n\t\t\t}\n\n\t\t\tconst verifiableCredential: IDidVerifiableCredentialV1 = {\n\t\t\t\t\"@context\": JsonLdProcessor.combineContexts(DidContexts.ContextVCv1, credContext) as [\n\t\t\t\t\ttypeof DidContexts.ContextVCv1\n\t\t\t\t],\n\t\t\t\tid,\n\t\t\t\ttype: finalTypes,\n\t\t\t\tcredentialSubject: subjectClone,\n\t\t\t\tissuer: issuerDidDocument.id,\n\t\t\t\tissuanceDate: new Date(Date.now()).toISOString(),\n\t\t\t\texpirationDate: Is.date(options?.expirationDate)\n\t\t\t\t\t? options?.expirationDate.toISOString()\n\t\t\t\t\t: undefined,\n\t\t\t\tcredentialStatus:\n\t\t\t\t\trevocationService && !Is.undefined(options?.revocationIndex)\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tid: revocationService.id,\n\t\t\t\t\t\t\t\ttype: Is.array(revocationService.type)\n\t\t\t\t\t\t\t\t\t? revocationService.type[0]\n\t\t\t\t\t\t\t\t\t: revocationService.type,\n\t\t\t\t\t\t\t\trevocationBitmapIndex: options.revocationIndex.toString()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: undefined\n\t\t\t};\n\n\t\t\tconst jwtHeader: IJwtHeader = {\n\t\t\t\tkid: verificationDidMethod.id,\n\t\t\t\ttyp: \"JWT\",\n\t\t\t\talg: \"EdDSA\"\n\t\t\t};\n\n\t\t\tconst jwtVc = ObjectHelper.pick(ObjectHelper.clone(verifiableCredential), [\n\t\t\t\t\"@context\",\n\t\t\t\t\"type\",\n\t\t\t\t\"credentialSubject\",\n\t\t\t\t\"credentialStatus\"\n\t\t\t]);\n\n\t\t\tif (Is.array(jwtVc.credentialSubject)) {\n\t\t\t\tjwtVc.credentialSubject = jwtVc.credentialSubject.map(c => {\n\t\t\t\t\tObjectHelper.propertyDelete(c, \"id\");\n\t\t\t\t\treturn c;\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tObjectHelper.propertyDelete(jwtVc.credentialSubject, \"id\");\n\t\t\t}\n\n\t\t\tconst jwtPayload: IJwtPayload = {\n\t\t\t\tiss: idParts.id,\n\t\t\t\tnbf: Math.floor(Date.now() / 1000),\n\t\t\t\tjti: verifiableCredential.id,\n\t\t\t\tsub: credId,\n\t\t\t\tvc: jwtVc\n\t\t\t};\n\n\t\t\tconst signature = await Jwt.encodeWithSigner(jwtHeader, jwtPayload, async (header, payload) =>\n\t\t\t\tVaultConnectorHelper.jwtSigner(\n\t\t\t\t\tthis._vaultConnector,\n\t\t\t\t\tEntityStorageIdentityConnector.buildVaultKey(idParts.id, idParts.fragment ?? \"\"),\n\t\t\t\t\theader,\n\t\t\t\t\tpayload\n\t\t\t\t)\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\tverifiableCredential,\n\t\t\t\tjwt: signature\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\"createVerifiableCredentialFailed\",\n\t\t\t\tundefined,\n\t\t\t\terror\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Check a verifiable credential is valid.\n\t * @param credentialJwt The credential to verify.\n\t * @returns The credential stored in the jwt and the revocation status.\n\t */\n\tpublic async checkVerifiableCredential(credentialJwt: string): Promise<{\n\t\trevoked: boolean;\n\t\tverifiableCredential?: IDidVerifiableCredentialV1;\n\t}> {\n\t\tGuards.stringValue(\n\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\tnameof(credentialJwt),\n\t\t\tcredentialJwt\n\t\t);\n\n\t\ttry {\n\t\t\tconst jwtDecoded = await Jwt.decode(credentialJwt);\n\n\t\t\tconst jwtHeader = jwtDecoded.header;\n\t\t\tconst jwtPayload = jwtDecoded.payload;\n\t\t\tconst jwtSignature = jwtDecoded.signature;\n\n\t\t\tif (\n\t\t\t\tIs.undefined(jwtHeader) ||\n\t\t\t\tIs.undefined(jwtPayload) ||\n\t\t\t\tIs.undefined(jwtPayload.iss) ||\n\t\t\t\tIs.undefined(jwtSignature)\n\t\t\t) {\n\t\t\t\tthrow new NotFoundError(EntityStorageIdentityConnector.CLASS_NAME, \"jwkSignatureFailed\");\n\t\t\t}\n\n\t\t\tconst issuerDocumentId = jwtPayload.iss;\n\t\t\tconst issuerIdentityDocument = await this._didDocumentEntityStorage.get(issuerDocumentId);\n\t\t\tif (Is.undefined(issuerIdentityDocument)) {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\t\"documentNotFound\",\n\t\t\t\t\tissuerDocumentId\n\t\t\t\t);\n\t\t\t}\n\t\t\tawait EntityStorageIdentityConnector.verifyDocument(\n\t\t\t\tissuerIdentityDocument,\n\t\t\t\tthis._vaultConnector\n\t\t\t);\n\t\t\tconst issuerDidDocument = issuerIdentityDocument.document;\n\n\t\t\tconst methods = this.getAllMethods(issuerDidDocument);\n\t\t\tconst methodAndArray = methods.find(m => {\n\t\t\t\tif (Is.string(m.method)) {\n\t\t\t\t\treturn m.method === jwtHeader.kid;\n\t\t\t\t}\n\t\t\t\treturn m.method.id === jwtHeader.kid;\n\t\t\t});\n\n\t\t\tif (!methodAndArray) {\n\t\t\t\tthrow new GeneralError(EntityStorageIdentityConnector.CLASS_NAME, \"methodMissing\", {\n\t\t\t\t\tmethod: jwtHeader.kid\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst didMethod = methodAndArray.method;\n\t\t\tif (!Is.stringValue(didMethod.publicKeyJwk?.x)) {\n\t\t\t\tthrow new GeneralError(EntityStorageIdentityConnector.CLASS_NAME, \"publicKeyJwkMissing\", {\n\t\t\t\t\tmethod: jwtHeader.kid\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tawait Jwt.verifySignature(credentialJwt, await Jwk.toCryptoKey(didMethod.publicKeyJwk));\n\n\t\t\tconst verifiableCredential = jwtPayload.vc as IDidVerifiableCredentialV1;\n\t\t\tif (Is.object(verifiableCredential)) {\n\t\t\t\tif (Is.string(jwtPayload.jti)) {\n\t\t\t\t\tverifiableCredential.id = jwtPayload.jti;\n\t\t\t\t}\n\t\t\t\tverifiableCredential.issuer = issuerDocumentId;\n\t\t\t\tif (Is.number(jwtPayload.nbf)) {\n\t\t\t\t\tverifiableCredential.issuanceDate = new Date(jwtPayload.nbf * 1000).toISOString();\n\t\t\t\t}\n\t\t\t\tif (Is.array(verifiableCredential.credentialSubject)) {\n\t\t\t\t\tverifiableCredential.credentialSubject = verifiableCredential.credentialSubject.map(c => {\n\t\t\t\t\t\tObjectHelper.propertySet(c, \"id\", jwtPayload.sub);\n\t\t\t\t\t\treturn c;\n\t\t\t\t\t});\n\t\t\t\t} else if (Is.object(verifiableCredential.credentialSubject)) {\n\t\t\t\t\tObjectHelper.propertySet(verifiableCredential.credentialSubject, \"id\", jwtPayload.sub);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst credentialStatus = verifiableCredential.credentialStatus;\n\t\t\tlet revoked = false;\n\t\t\tif (Is.object(credentialStatus)) {\n\t\t\t\trevoked = await this.checkRevocation(\n\t\t\t\t\tissuerDidDocument,\n\t\t\t\t\tcredentialStatus.revocationBitmapIndex\n\t\t\t\t);\n\t\t\t} else if (Is.arrayValue(credentialStatus)) {\n\t\t\t\tfor (let i = 0; i < credentialStatus.length; i++) {\n\t\t\t\t\trevoked = await this.checkRevocation(\n\t\t\t\t\t\tissuerDidDocument,\n\t\t\t\t\t\tcredentialStatus[i].revocationBitmapIndex\n\t\t\t\t\t);\n\t\t\t\t\tif (revoked) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\trevoked,\n\t\t\t\tverifiableCredential: revoked ? undefined : verifiableCredential\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\"checkingVerifiableCredentialFailed\",\n\t\t\t\tundefined,\n\t\t\t\terror\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Revoke verifiable credential(s).\n\t * @param controller The controller of the identity who can make changes.\n\t * @param issuerDocumentId The id of the document to update the revocation list for.\n\t * @param credentialIndices The revocation bitmap index or indices to revoke.\n\t * @returns Nothing.\n\t */\n\tpublic async revokeVerifiableCredentials(\n\t\tcontroller: string,\n\t\tissuerDocumentId: string,\n\t\tcredentialIndices: number[]\n\t): Promise<void> {\n\t\tGuards.stringValue(EntityStorageIdentityConnector.CLASS_NAME, nameof(controller), controller);\n\t\tGuards.stringValue(\n\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\tnameof(issuerDocumentId),\n\t\t\tissuerDocumentId\n\t\t);\n\t\tGuards.arrayValue(\n\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\tnameof(credentialIndices),\n\t\t\tcredentialIndices\n\t\t);\n\n\t\ttry {\n\t\t\tconst issuerIdentityDocument = await this._didDocumentEntityStorage.get(issuerDocumentId);\n\t\t\tif (Is.undefined(issuerIdentityDocument)) {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\t\"documentNotFound\",\n\t\t\t\t\tissuerDocumentId\n\t\t\t\t);\n\t\t\t}\n\t\t\tawait EntityStorageIdentityConnector.verifyDocument(\n\t\t\t\tissuerIdentityDocument,\n\t\t\t\tthis._vaultConnector\n\t\t\t);\n\t\t\tconst issuerDidDocument = issuerIdentityDocument.document;\n\n\t\t\tconst revocationService = issuerDidDocument.service?.find(s => s.id.endsWith(\"#revocation\"));\n\t\t\tif (\n\t\t\t\trevocationService &&\n\t\t\t\tIs.string(revocationService.serviceEndpoint) &&\n\t\t\t\trevocationService.type === \"BitstringStatusList\"\n\t\t\t) {\n\t\t\t\tconst revocationParts = revocationService.serviceEndpoint.split(\",\");\n\t\t\t\tif (revocationParts.length === 2) {\n\t\t\t\t\tconst compressedRevocationBytes = Converter.base64UrlToBytes(revocationParts[1]);\n\t\t\t\t\tconst decompressed = await Compression.decompress(\n\t\t\t\t\t\tcompressedRevocationBytes,\n\t\t\t\t\t\tCompressionType.Gzip\n\t\t\t\t\t);\n\n\t\t\t\t\tconst bitString = BitString.fromBits(\n\t\t\t\t\t\tdecompressed,\n\t\t\t\t\t\tEntityStorageIdentityConnector._REVOCATION_BITS_SIZE\n\t\t\t\t\t);\n\n\t\t\t\t\tfor (const credentialIndex of credentialIndices) {\n\t\t\t\t\t\tbitString.setBit(credentialIndex, true);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst compressed = await Compression.compress(bitString.getBits(), CompressionType.Gzip);\n\t\t\t\t\trevocationService.serviceEndpoint = `data:application/octet-stream;base64,${Converter.bytesToBase64Url(compressed)}`;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tawait this.updateDocument(controller, issuerDidDocument);\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\"revokeVerifiableCredentialsFailed\",\n\t\t\t\tundefined,\n\t\t\t\terror\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Unrevoke verifiable credential(s).\n\t * @param controller The controller of the identity who can make changes.\n\t * @param issuerDocumentId The id of the document to update the revocation list for.\n\t * @param credentialIndices The revocation bitmap index or indices to un revoke.\n\t * @returns Nothing.\n\t */\n\tpublic async unrevokeVerifiableCredentials(\n\t\tcontroller: string,\n\t\tissuerDocumentId: string,\n\t\tcredentialIndices: number[]\n\t): Promise<void> {\n\t\tGuards.stringValue(EntityStorageIdentityConnector.CLASS_NAME, nameof(controller), controller);\n\t\tGuards.stringValue(\n\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\tnameof(issuerDocumentId),\n\t\t\tissuerDocumentId\n\t\t);\n\t\tGuards.arrayValue(\n\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\tnameof(credentialIndices),\n\t\t\tcredentialIndices\n\t\t);\n\n\t\ttry {\n\t\t\tconst issuerIdentityDocument = await this._didDocumentEntityStorage.get(issuerDocumentId);\n\t\t\tif (Is.undefined(issuerIdentityDocument)) {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\t\"documentNotFound\",\n\t\t\t\t\tissuerDocumentId\n\t\t\t\t);\n\t\t\t}\n\t\t\tawait EntityStorageIdentityConnector.verifyDocument(\n\t\t\t\tissuerIdentityDocument,\n\t\t\t\tthis._vaultConnector\n\t\t\t);\n\t\t\tconst issuerDidDocument = issuerIdentityDocument.document;\n\n\t\t\tconst revocationService = issuerDidDocument.service?.find(s => s.id.endsWith(\"#revocation\"));\n\t\t\tif (\n\t\t\t\trevocationService &&\n\t\t\t\tIs.string(revocationService.serviceEndpoint) &&\n\t\t\t\trevocationService.type === \"BitstringStatusList\"\n\t\t\t) {\n\t\t\t\tconst revocationParts = revocationService.serviceEndpoint.split(\",\");\n\t\t\t\tif (revocationParts.length === 2) {\n\t\t\t\t\tconst compressedRevocationBytes = Converter.base64UrlToBytes(revocationParts[1]);\n\t\t\t\t\tconst decompressed = await Compression.decompress(\n\t\t\t\t\t\tcompressedRevocationBytes,\n\t\t\t\t\t\tCompressionType.Gzip\n\t\t\t\t\t);\n\n\t\t\t\t\tconst bitString = BitString.fromBits(\n\t\t\t\t\t\tdecompressed,\n\t\t\t\t\t\tEntityStorageIdentityConnector._REVOCATION_BITS_SIZE\n\t\t\t\t\t);\n\n\t\t\t\t\tfor (const credentialIndex of credentialIndices) {\n\t\t\t\t\t\tbitString.setBit(credentialIndex, false);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst compressed = await Compression.compress(bitString.getBits(), CompressionType.Gzip);\n\t\t\t\t\trevocationService.serviceEndpoint = `data:application/octet-stream;base64,${Converter.bytesToBase64Url(compressed)}`;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tawait this.updateDocument(controller, issuerDidDocument);\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\"unrevokeVerifiableCredentialsFailed\",\n\t\t\t\tundefined,\n\t\t\t\terror\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Create a verifiable presentation from the supplied verifiable credentials.\n\t * @param controller The controller of the identity who can make changes.\n\t * @param verificationMethodId The method to associate with the presentation.\n\t * @param presentationId The id of the presentation.\n\t * @param contexts The contexts for the data stored in the verifiable credential.\n\t * @param types The types for the data stored in the verifiable credential.\n\t * @param verifiableCredentials The credentials to use for creating the presentation in jwt format.\n\t * @param expiresInMinutes The time in minutes for the presentation to expire.\n\t * @returns The created verifiable presentation and its token.\n\t * @throws NotFoundError if the id can not be resolved.\n\t */\n\tpublic async createVerifiablePresentation(\n\t\tcontroller: string,\n\t\tverificationMethodId: string,\n\t\tpresentationId: string | undefined,\n\t\tcontexts: IJsonLdContextDefinitionRoot | undefined,\n\t\ttypes: string | string[] | undefined,\n\t\tverifiableCredentials: (string | IDidVerifiableCredentialV1)[],\n\t\texpiresInMinutes?: number\n\t): Promise<{\n\t\tverifiablePresentation: IDidVerifiablePresentationV1;\n\t\tjwt: string;\n\t}> {\n\t\tGuards.stringValue(EntityStorageIdentityConnector.CLASS_NAME, nameof(controller), controller);\n\t\tGuards.stringValue(\n\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\tnameof(verificationMethodId),\n\t\t\tverificationMethodId\n\t\t);\n\t\tif (Is.array(types)) {\n\t\t\tGuards.arrayValue(EntityStorageIdentityConnector.CLASS_NAME, nameof(types), types);\n\t\t} else if (Is.string(types)) {\n\t\t\tGuards.stringValue(EntityStorageIdentityConnector.CLASS_NAME, nameof(types), types);\n\t\t}\n\t\tGuards.arrayValue(\n\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\tnameof(verifiableCredentials),\n\t\t\tverifiableCredentials\n\t\t);\n\t\tif (!Is.undefined(expiresInMinutes)) {\n\t\t\tGuards.integer(\n\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\tnameof(expiresInMinutes),\n\t\t\t\texpiresInMinutes\n\t\t\t);\n\t\t}\n\n\t\ttry {\n\t\t\tconst idParts = DocumentHelper.parseId(verificationMethodId);\n\t\t\tif (Is.empty(idParts.fragment)) {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\t\"missingDid\",\n\t\t\t\t\tverificationMethodId\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst holderIdentityDocument = await this._didDocumentEntityStorage.get(idParts.id);\n\t\t\tif (Is.undefined(holderIdentityDocument)) {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\t\"documentNotFound\",\n\t\t\t\t\tidParts.id\n\t\t\t\t);\n\t\t\t}\n\t\t\tawait EntityStorageIdentityConnector.verifyDocument(\n\t\t\t\tholderIdentityDocument,\n\t\t\t\tthis._vaultConnector\n\t\t\t);\n\t\t\tconst holderDidDocument = holderIdentityDocument.document;\n\n\t\t\tconst methods = this.getAllMethods(holderDidDocument);\n\t\t\tconst methodAndArray = methods.find(m => {\n\t\t\t\tif (Is.string(m.method)) {\n\t\t\t\t\treturn m.method === verificationMethodId;\n\t\t\t\t}\n\t\t\t\treturn m.method.id === verificationMethodId;\n\t\t\t});\n\n\t\t\tif (!methodAndArray) {\n\t\t\t\tthrow new GeneralError(EntityStorageIdentityConnector.CLASS_NAME, \"methodMissing\", {\n\t\t\t\t\tmethod: verificationMethodId\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst didMethod = methodAndArray.method;\n\t\t\tif (!Is.stringValue(didMethod.publicKeyJwk?.x)) {\n\t\t\t\tthrow new GeneralError(EntityStorageIdentityConnector.CLASS_NAME, \"publicKeyJwkMissing\", {\n\t\t\t\t\tmethod: verificationMethodId\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst finalTypes: string[] = [DidTypes.VerifiablePresentation];\n\t\t\tif (Is.array(types)) {\n\t\t\t\tfinalTypes.push(...types);\n\t\t\t} else if (Is.stringValue(types)) {\n\t\t\t\tfinalTypes.push(types);\n\t\t\t}\n\n\t\t\tconst verifiablePresentation: IDidVerifiablePresentationV1 = {\n\t\t\t\t\"@context\": JsonLdProcessor.combineContexts(DidContexts.ContextVCv1, contexts) as [\n\t\t\t\t\ttypeof DidContexts.ContextVCv1\n\t\t\t\t],\n\t\t\t\tid: presentationId,\n\t\t\t\ttype: finalTypes,\n\t\t\t\tverifiableCredential: verifiableCredentials,\n\t\t\t\tholder: idParts.id\n\t\t\t};\n\n\t\t\tconst jwtHeader: IJwtHeader = {\n\t\t\t\tkid: didMethod.id,\n\t\t\t\ttyp: \"JWT\",\n\t\t\t\talg: \"EdDSA\"\n\t\t\t};\n\n\t\t\tconst jwtVp = ObjectHelper.pick(ObjectHelper.clone(verifiablePresentation), [\n\t\t\t\t\"@context\",\n\t\t\t\t\"type\",\n\t\t\t\t\"verifiableCredential\"\n\t\t\t]);\n\n\t\t\tconst jwtPayload: IJwtPayload = {\n\t\t\t\tiss: idParts.id,\n\t\t\t\tnbf: Math.floor(Date.now() / 1000),\n\t\t\t\tvp: jwtVp\n\t\t\t};\n\n\t\t\tif (Is.integer(expiresInMinutes)) {\n\t\t\t\tconst expiresInSeconds = expiresInMinutes * 60;\n\t\t\t\tjwtPayload.exp = Math.floor(Date.now() / 1000) + expiresInSeconds;\n\t\t\t}\n\n\t\t\tconst signature = await Jwt.encodeWithSigner(jwtHeader, jwtPayload, async (header, payload) =>\n\t\t\t\tVaultConnectorHelper.jwtSigner(\n\t\t\t\t\tthis._vaultConnector,\n\t\t\t\t\tEntityStorageIdentityConnector.buildVaultKey(idParts.id, idParts.fragment ?? \"\"),\n\t\t\t\t\theader,\n\t\t\t\t\tpayload\n\t\t\t\t)\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\tverifiablePresentation,\n\t\t\t\tjwt: signature\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\"createVerifiablePresentationFailed\",\n\t\t\t\tundefined,\n\t\t\t\terror\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Check a verifiable presentation is valid.\n\t * @param presentationJwt The presentation to verify.\n\t * @returns The presentation stored in the jwt and the revocation status.\n\t */\n\tpublic async checkVerifiablePresentation(presentationJwt: string): Promise<{\n\t\trevoked: boolean;\n\t\tverifiablePresentation?: IDidVerifiablePresentationV1;\n\t\tissuers?: IDidDocument[];\n\t}> {\n\t\tGuards.stringValue(\n\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\tnameof(presentationJwt),\n\t\t\tpresentationJwt\n\t\t);\n\n\t\ttry {\n\t\t\tconst jwtDecoded = await Jwt.decode(presentationJwt);\n\n\t\t\tconst jwtHeader = jwtDecoded.header;\n\t\t\tconst jwtPayload = jwtDecoded.payload;\n\t\t\tconst jwtSignature = jwtDecoded.signature;\n\n\t\t\tif (\n\t\t\t\tIs.undefined(jwtHeader) ||\n\t\t\t\tIs.undefined(jwtPayload) ||\n\t\t\t\tIs.undefined(jwtPayload.iss) ||\n\t\t\t\tIs.undefined(jwtSignature)\n\t\t\t) {\n\t\t\t\tthrow new NotFoundError(EntityStorageIdentityConnector.CLASS_NAME, \"jwkSignatureFailed\");\n\t\t\t}\n\n\t\t\tconst holderDocumentId = jwtPayload.iss;\n\t\t\tconst holderIdentityDocument = await this._didDocumentEntityStorage.get(holderDocumentId);\n\t\t\tif (Is.undefined(holderIdentityDocument)) {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\t\"documentNotFound\",\n\t\t\t\t\tholderDocumentId\n\t\t\t\t);\n\t\t\t}\n\t\t\tawait EntityStorageIdentityConnector.verifyDocument(\n\t\t\t\tholderIdentityDocument,\n\t\t\t\tthis._vaultConnector\n\t\t\t);\n\n\t\t\tconst issuers: IDidDocument[] = [];\n\t\t\tconst tokensRevoked: boolean[] = [];\n\t\t\tconst verifiablePresentation = jwtPayload?.vp as IDidVerifiablePresentationV1;\n\t\t\tif (\n\t\t\t\tIs.object<IDidVerifiablePresentationV1>(verifiablePresentation) &&\n\t\t\t\tIs.array(verifiablePresentation.verifiableCredential)\n\t\t\t) {\n\t\t\t\tfor (const vcJwt of verifiablePresentation.verifiableCredential) {\n\t\t\t\t\tlet revoked = true;\n\t\t\t\t\tif (Is.stringValue(vcJwt)) {\n\t\t\t\t\t\tconst jwt = await Jwt.decode(vcJwt);\n\n\t\t\t\t\t\tif (Is.string(jwt.payload?.iss)) {\n\t\t\t\t\t\t\tconst issuerDocumentId = jwt.payload.iss;\n\t\t\t\t\t\t\tverifiablePresentation.holder = issuerDocumentId;\n\n\t\t\t\t\t\t\tconst issuerDidDocument = await this._didDocumentEntityStorage.get(issuerDocumentId);\n\t\t\t\t\t\t\tif (Is.undefined(issuerDidDocument)) {\n\t\t\t\t\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\t\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\t\t\t\t\t\"documentNotFound\",\n\t\t\t\t\t\t\t\t\tissuerDocumentId\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tawait EntityStorageIdentityConnector.verifyDocument(\n\t\t\t\t\t\t\t\tissuerDidDocument,\n\t\t\t\t\t\t\t\tthis._vaultConnector\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tissuers.push({\n\t\t\t\t\t\t\t\t\"@context\": DidContexts.Context,\n\t\t\t\t\t\t\t\t...issuerDidDocument\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tconst vc = jwt.payload.vc as IDidVerifiableCredentialV1;\n\t\t\t\t\t\t\tif (Is.object<IDidVerifiableCredentialV1>(vc)) {\n\t\t\t\t\t\t\t\tconst credentialStatus = vc.credentialStatus;\n\t\t\t\t\t\t\t\tif (Is.object(credentialStatus)) {\n\t\t\t\t\t\t\t\t\trevoked = await this.checkRevocation(\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"@context\": DidContexts.Context,\n\t\t\t\t\t\t\t\t\t\t\t...issuerDidDocument\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tcredentialStatus.revocationBitmapIndex\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t} else if (Is.arrayValue(credentialStatus)) {\n\t\t\t\t\t\t\t\t\tfor (let i = 0; i < credentialStatus.length; i++) {\n\t\t\t\t\t\t\t\t\t\trevoked = await this.checkRevocation(\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\"@context\": DidContexts.Context,\n\t\t\t\t\t\t\t\t\t\t\t\t...issuerDidDocument\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\tcredentialStatus[i].revocationBitmapIndex\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\tif (revoked) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\trevoked = false;\n\t\t\t\t\t}\n\t\t\t\t\ttokensRevoked.push(revoked);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\trevoked: tokensRevoked.some(Boolean),\n\t\t\t\tverifiablePresentation,\n\t\t\t\tissuers\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tif (BaseError.isErrorMessage(error, /revoked/i)) {\n\t\t\t\treturn {\n\t\t\t\t\trevoked: true\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tthrow new GeneralError(\n\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\"checkingVerifiablePresentationFailed\",\n\t\t\t\tundefined,\n\t\t\t\terror\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Create a proof for arbitrary data with the specified verification method.\n\t * @param controller The controller of the identity who can make changes.\n\t * @param verificationMethodId The verification method id to use.\n\t * @param proofType The type of proof to create.\n\t * @param unsecureDocument The unsecure document to create the proof for.\n\t * @returns The proof.\n\t */\n\tpublic async createProof(\n\t\tcontroller: string,\n\t\tverificationMethodId: string,\n\t\tproofType: ProofTypes,\n\t\tunsecureDocument: IJsonLdNodeObject\n\t): Promise<IProof> {\n\t\tGuards.stringValue(EntityStorageIdentityConnector.CLASS_NAME, nameof(controller), controller);\n\t\tGuards.stringValue(\n\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\tnameof(verificationMethodId),\n\t\t\tverificationMethodId\n\t\t);\n\t\tGuards.arrayOneOf<ProofTypes>(\n\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\tnameof(proofType),\n\t\t\tproofType,\n\t\t\tObject.values(ProofTypes)\n\t\t);\n\t\tGuards.object<IJsonLdNodeObject>(\n\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\tnameof(unsecureDocument),\n\t\t\tunsecureDocument\n\t\t);\n\n\t\ttry {\n\t\t\tconst idParts = DocumentHelper.parseId(verificationMethodId);\n\t\t\tif (Is.empty(idParts.fragment)) {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\t\"missingDid\",\n\t\t\t\t\tverificationMethodId\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst didIdentityDocument = await this._didDocumentEntityStorage.get(idParts.id);\n\t\t\tif (Is.undefined(didIdentityDocument)) {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\t\"documentNotFound\",\n\t\t\t\t\tidParts.id\n\t\t\t\t);\n\t\t\t}\n\t\t\tawait EntityStorageIdentityConnector.verifyDocument(\n\t\t\t\tdidIdentityDocument,\n\t\t\t\tthis._vaultConnector\n\t\t\t);\n\t\t\tconst didDocument = didIdentityDocument.document;\n\n\t\t\tconst methods = this.getAllMethods(didDocument);\n\t\t\tconst methodAndArray = methods.find(m => {\n\t\t\t\tif (Is.string(m.method)) {\n\t\t\t\t\treturn m.method === verificationMethodId;\n\t\t\t\t}\n\t\t\t\treturn m.method.id === verificationMethodId;\n\t\t\t});\n\n\t\t\tif (!methodAndArray) {\n\t\t\t\tthrow new GeneralError(EntityStorageIdentityConnector.CLASS_NAME, \"methodMissing\", {\n\t\t\t\t\tmethod: verificationMethodId\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst didMethod = methodAndArray.method;\n\t\t\tif (!Is.stringValue(didMethod.publicKeyJwk?.x)) {\n\t\t\t\tthrow new GeneralError(EntityStorageIdentityConnector.CLASS_NAME, \"publicKeyJwkMissing\", {\n\t\t\t\t\tmethod: verificationMethodId\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst vaultKey = EntityStorageIdentityConnector.buildVaultKey(\n\t\t\t\tdidDocument.id,\n\t\t\t\tidParts.fragment ?? \"\"\n\t\t\t);\n\t\t\tconst key = await this._vaultConnector.getKey(vaultKey);\n\n\t\t\tconst signedProof = await ProofHelper.createProof(\n\t\t\t\tproofType,\n\t\t\t\tunsecureDocument,\n\t\t\t\tProofHelper.createUnsignedProof(proofType, verificationMethodId),\n\t\t\t\tawait Jwk.fromEd25519Private(key.privateKey)\n\t\t\t);\n\n\t\t\treturn signedProof;\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\"createProofFailed\",\n\t\t\t\tundefined,\n\t\t\t\terror\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Verify proof for arbitrary data with the specified verification method.\n\t * @param document The document to verify.\n\t * @param proof The proof to verify.\n\t * @returns True if the proof is verified.\n\t */\n\tpublic async verifyProof(document: IJsonLdNodeObject, proof: IProof): Promise<boolean> {\n\t\tGuards.object<IJsonLdNodeObject>(\n\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\tnameof(document),\n\t\t\tdocument\n\t\t);\n\t\tGuards.object<IProof>(EntityStorageIdentityConnector.CLASS_NAME, nameof(proof), proof);\n\t\tGuards.stringValue(\n\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\tnameof(proof.verificationMethod),\n\t\t\tproof.verificationMethod\n\t\t);\n\n\t\ttry {\n\t\t\tconst idParts = DocumentHelper.parseId(proof.verificationMethod);\n\t\t\tif (Is.empty(idParts.fragment)) {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\t\"missingDid\",\n\t\t\t\t\tproof.verificationMethod\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst didIdentityDocument = await this._didDocumentEntityStorage.get(idParts.id);\n\t\t\tif (Is.undefined(didIdentityDocument)) {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\t\"documentNotFound\",\n\t\t\t\t\tidParts.id\n\t\t\t\t);\n\t\t\t}\n\t\t\tawait EntityStorageIdentityConnector.verifyDocument(\n\t\t\t\tdidIdentityDocument,\n\t\t\t\tthis._vaultConnector\n\t\t\t);\n\t\t\tconst didDocument = didIdentityDocument.document;\n\n\t\t\tconst methods = this.getAllMethods(didDocument);\n\n\t\t\tconst methodAndArray = methods.find(m => {\n\t\t\t\tif (Is.string(m.method)) {\n\t\t\t\t\treturn m.method === proof.verificationMethod;\n\t\t\t\t}\n\t\t\t\treturn m.method.id === proof.verificationMethod;\n\t\t\t});\n\n\t\t\tif (!methodAndArray) {\n\t\t\t\tthrow new GeneralError(EntityStorageIdentityConnector.CLASS_NAME, \"methodMissing\", {\n\t\t\t\t\tmethod: proof.verificationMethod\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst didMethod = methodAndArray.method;\n\t\t\tif (!Is.stringValue(didMethod.publicKeyJwk?.x)) {\n\t\t\t\tthrow new GeneralError(EntityStorageIdentityConnector.CLASS_NAME, \"publicKeyJwkMissing\", {\n\t\t\t\t\tmethod: proof.verificationMethod\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst result = await ProofHelper.verifyProof(document, proof, didMethod.publicKeyJwk);\n\t\t\treturn result;\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\"verifyProofFailed\",\n\t\t\t\tundefined,\n\t\t\t\terror\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Get all the methods from a document.\n\t * @param document The document to get the methods from.\n\t * @returns The methods.\n\t * @internal\n\t */\n\tprivate getAllMethods(\n\t\tdocument: IDidDocument\n\t): { arrayKey: string; method: Partial<IDidDocumentVerificationMethod> }[] {\n\t\tconst methods: {\n\t\t\tarrayKey: string;\n\t\t\tmethod: Partial<IDidDocumentVerificationMethod>;\n\t\t}[] = [];\n\n\t\tconst methodTypes: DidVerificationMethodType[] = Object.values(DidVerificationMethodType);\n\n\t\tfor (const methodType of methodTypes) {\n\t\t\tconst mt = document[methodType];\n\t\t\tif (Is.arrayValue(mt)) {\n\t\t\t\tmethods.push(\n\t\t\t\t\t...mt.map(m => ({\n\t\t\t\t\t\tarrayKey: methodType,\n\t\t\t\t\t\tmethod: Is.string(m) ? { id: m } : m\n\t\t\t\t\t}))\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\treturn methods;\n\t}\n\n\t/**\n\t * Check if a revocation index is revoked.\n\t * @param document The document to check.\n\t * @param revocationBitmapIndex The revocation index to check.\n\t * @returns True if the index is revoked.\n\t * @internal\n\t */\n\tprivate async checkRevocation(\n\t\tdocument: IDidDocument,\n\t\trevocationBitmapIndex?: unknown\n\t): Promise<boolean> {\n\t\tif (Is.stringValue(revocationBitmapIndex)) {\n\t\t\tconst revocationIndex = Coerce.number(revocationBitmapIndex);\n\t\t\tif (Is.number(revocationIndex)) {\n\t\t\t\tconst revocationService = document.service?.find(s => s.id.endsWith(\"#revocation\"));\n\t\t\t\tif (\n\t\t\t\t\trevocationService &&\n\t\t\t\t\tIs.string(revocationService.serviceEndpoint) &&\n\t\t\t\t\trevocationService.type === \"BitstringStatusList\"\n\t\t\t\t) {\n\t\t\t\t\tconst revocationParts = revocationService.serviceEndpoint.split(\",\");\n\t\t\t\t\tif (revocationParts.length === 2) {\n\t\t\t\t\t\tconst compressedRevocationBytes = Converter.base64UrlToBytes(revocationParts[1]);\n\t\t\t\t\t\tconst decompressed = await Compression.decompress(\n\t\t\t\t\t\t\tcompressedRevocationBytes,\n\t\t\t\t\t\t\tCompressionType.Gzip\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tconst bitString = BitString.fromBits(\n\t\t\t\t\t\t\tdecompressed,\n\t\t\t\t\t\t\tEntityStorageIdentityConnector._REVOCATION_BITS_SIZE\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\treturn bitString.getBit(revocationIndex);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Update the document in storage.\n\t * @param controller The controller of the document.\n\t * @param didDocument The did document to store.\n\t * @internal\n\t */\n\tprivate async updateDocument(controller: string, didDocument: IDidDocument): Promise<void> {\n\t\tconst stringifiedDocument = JsonHelper.canonicalize(didDocument);\n\t\tconst docBytes = Converter.utf8ToBytes(stringifiedDocument);\n\n\t\tconst signature = await this._vaultConnector.sign(\n\t\t\tEntityStorageIdentityConnector.buildVaultKey(didDocument.id, \"did\"),\n\t\t\tdocBytes\n\t\t);\n\n\t\tawait this._didDocumentEntityStorage.set({\n\t\t\tid: didDocument.id,\n\t\t\tdocument: didDocument,\n\t\t\tsignature: Converter.bytesToBase64(signature),\n\t\t\tcontroller\n\t\t});\n\t}\n}\n"]}
1
+ {"version":3,"file":"entityStorageIdentityConnector.js","sourceRoot":"","sources":["../../src/entityStorageIdentityConnector.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport {\n\tBaseError,\n\tBitString,\n\tCoerce,\n\tCompression,\n\tCompressionType,\n\tConverter,\n\tGeneralError,\n\tGuards,\n\tIs,\n\tJsonHelper,\n\tNotFoundError,\n\tObjectHelper,\n\tRandomHelper\n} from \"@twin.org/core\";\nimport {\n\tJsonLdProcessor,\n\ttype IJsonLdContextDefinitionRoot,\n\ttype IJsonLdNodeObject\n} from \"@twin.org/data-json-ld\";\nimport {\n\tEntityStorageConnectorFactory,\n\ttype IEntityStorageConnector\n} from \"@twin.org/entity-storage-models\";\nimport { DocumentHelper, type IIdentityConnector } from \"@twin.org/identity-models\";\nimport { nameof } from \"@twin.org/nameof\";\nimport {\n\tDidContexts,\n\tDidTypes,\n\tDidVerificationMethodType,\n\tProofHelper,\n\tProofTypes,\n\ttype IDidDocument,\n\ttype IDidDocumentVerificationMethod,\n\ttype IDidService,\n\ttype IDidVerifiableCredentialV1,\n\ttype IDidVerifiablePresentationV1,\n\ttype IProof\n} from \"@twin.org/standards-w3c-did\";\nimport {\n\tVaultConnectorFactory,\n\tVaultConnectorHelper,\n\tVaultKeyType,\n\ttype IVaultConnector\n} from \"@twin.org/vault-models\";\nimport { Jwk, Jwt, type IJwk, type IJwtHeader, type IJwtPayload } from \"@twin.org/web\";\nimport type { IdentityDocument } from \"./entities/identityDocument.js\";\nimport type { IEntityStorageIdentityConnectorConstructorOptions } from \"./models/IEntityStorageIdentityConnectorConstructorOptions.js\";\n\n/**\n * Class for performing identity operations using entity storage.\n */\nexport class EntityStorageIdentityConnector implements IIdentityConnector {\n\t/**\n\t * Runtime name for the class.\n\t */\n\tpublic static readonly CLASS_NAME: string = nameof<EntityStorageIdentityConnector>();\n\n\t/**\n\t * The namespace supported by the identity connector.\n\t */\n\tpublic static readonly NAMESPACE: string = \"entity-storage\";\n\n\t/**\n\t * The size of the revocation bitmap in bits (16Kb).\n\t * @internal\n\t */\n\tprivate static readonly _REVOCATION_BITS_SIZE: number = 131072;\n\n\t/**\n\t * The entity storage for identities.\n\t * @internal\n\t */\n\tprotected readonly _didDocumentEntityStorage: IEntityStorageConnector<IdentityDocument>;\n\n\t/**\n\t * The vault for the keys.\n\t * @internal\n\t */\n\tprotected readonly _vaultConnector: IVaultConnector;\n\n\t/**\n\t * Create a new instance of EntityStorageIdentityConnector.\n\t * @param options The options for the identity connector.\n\t */\n\tconstructor(options?: IEntityStorageIdentityConnectorConstructorOptions) {\n\t\tthis._didDocumentEntityStorage = EntityStorageConnectorFactory.get(\n\t\t\toptions?.didDocumentEntityStorageType ?? \"identity-document\"\n\t\t);\n\t\tthis._vaultConnector = VaultConnectorFactory.get(options?.vaultConnectorType ?? \"vault\");\n\t}\n\n\t/**\n\t * Build the key name to access the specified key in the vault.\n\t * @param identity The identity of the user to access the vault keys.\n\t * @returns The vault key.\n\t * @internal\n\t */\n\tpublic static buildVaultKey(identity: string, key: string): string {\n\t\treturn `${identity}/${key}`;\n\t}\n\n\t/**\n\t * Verify the document in storage.\n\t * @param didDocument The did document that was stored.\n\t * @internal\n\t */\n\tpublic static async verifyDocument(\n\t\tdidDocument: IdentityDocument,\n\t\tvaultConnector: IVaultConnector\n\t): Promise<void> {\n\t\tconst stringifiedDocument = JsonHelper.canonicalize(didDocument.document);\n\t\tconst docBytes = Converter.utf8ToBytes(stringifiedDocument);\n\n\t\tconst verified = await vaultConnector.verify(\n\t\t\tEntityStorageIdentityConnector.buildVaultKey(didDocument.id, \"did\"),\n\t\t\tdocBytes,\n\t\t\tConverter.base64ToBytes(didDocument.signature)\n\t\t);\n\n\t\tif (!verified) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\"signatureVerificationFailed\"\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Returns the class name of the component.\n\t * @returns The class name of the component.\n\t */\n\tpublic className(): string {\n\t\treturn EntityStorageIdentityConnector.CLASS_NAME;\n\t}\n\n\t/**\n\t * Create a new document.\n\t * @param controller The controller of the identity who can make changes.\n\t * @returns The created document.\n\t */\n\tpublic async createDocument(controller: string): Promise<IDidDocument> {\n\t\tGuards.stringValue(EntityStorageIdentityConnector.CLASS_NAME, nameof(controller), controller);\n\n\t\ttry {\n\t\t\tconst did = `did:${EntityStorageIdentityConnector.NAMESPACE}:${Converter.bytesToHex(RandomHelper.generate(32), true)}`;\n\n\t\t\tawait this._vaultConnector.createKey(\n\t\t\t\tEntityStorageIdentityConnector.buildVaultKey(did, \"did\"),\n\t\t\t\tVaultKeyType.Ed25519\n\t\t\t);\n\n\t\t\tconst bitString = new BitString(EntityStorageIdentityConnector._REVOCATION_BITS_SIZE);\n\t\t\tconst compressed = await Compression.compress(bitString.getBits(), CompressionType.Gzip);\n\n\t\t\tconst didDocument: IDidDocument = {\n\t\t\t\t\"@context\": DidContexts.Namespace,\n\t\t\t\tid: did,\n\t\t\t\tservice: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: `${did}#revocation`,\n\t\t\t\t\t\ttype: \"BitstringStatusList\",\n\t\t\t\t\t\tserviceEndpoint: `data:application/octet-stream;base64,${Converter.bytesToBase64Url(compressed)}`\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t};\n\n\t\t\tawait this.updateDocument(controller, didDocument);\n\n\t\t\treturn didDocument;\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\"createDocumentFailed\",\n\t\t\t\tundefined,\n\t\t\t\terror\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Remove a document.\n\t * @param controller The controller of the identity who can make changes.\n\t * @param documentId The id of the document to remove.\n\t * @returns Nothing.\n\t */\n\tpublic async removeDocument(controller: string, documentId: string): Promise<void> {\n\t\tGuards.stringValue(EntityStorageIdentityConnector.CLASS_NAME, nameof(controller), controller);\n\t\tGuards.stringValue(EntityStorageIdentityConnector.CLASS_NAME, nameof(documentId), documentId);\n\n\t\ttry {\n\t\t\tconst didDocument = await this._didDocumentEntityStorage.get(documentId);\n\t\t\tif (Is.empty(didDocument)) {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\t\"documentNotFound\",\n\t\t\t\t\tdocumentId\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tawait this._didDocumentEntityStorage.remove(documentId);\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\"removeDocumentFailed\",\n\t\t\t\tundefined,\n\t\t\t\terror\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Add a verification method to the document in JSON Web key Format.\n\t * @param controller The controller of the identity who can make changes.\n\t * @param documentId The id of the document to add the verification method to.\n\t * @param verificationMethodType The type of the verification method to add.\n\t * @param verificationMethodId The id of the verification method, if undefined uses the kid of the generated JWK.\n\t * @returns The verification method.\n\t * @throws NotFoundError if the id can not be resolved.\n\t * @throws NotSupportedError if the platform does not support multiple keys.\n\t */\n\tpublic async addVerificationMethod(\n\t\tcontroller: string,\n\t\tdocumentId: string,\n\t\tverificationMethodType: DidVerificationMethodType,\n\t\tverificationMethodId?: string\n\t): Promise<IDidDocumentVerificationMethod> {\n\t\tGuards.stringValue(EntityStorageIdentityConnector.CLASS_NAME, nameof(controller), controller);\n\t\tGuards.stringValue(EntityStorageIdentityConnector.CLASS_NAME, nameof(documentId), documentId);\n\t\tGuards.arrayOneOf<DidVerificationMethodType>(\n\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\tnameof(verificationMethodType),\n\t\t\tverificationMethodType,\n\t\t\tObject.values(DidVerificationMethodType)\n\t\t);\n\n\t\tlet tempKeyId;\n\t\ttry {\n\t\t\tconst didIdentityDocument = await this._didDocumentEntityStorage.get(documentId);\n\t\t\tif (Is.undefined(didIdentityDocument)) {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\t\"documentNotFound\",\n\t\t\t\t\tdocumentId\n\t\t\t\t);\n\t\t\t}\n\t\t\tawait EntityStorageIdentityConnector.verifyDocument(\n\t\t\t\tdidIdentityDocument,\n\t\t\t\tthis._vaultConnector\n\t\t\t);\n\n\t\t\tconst didDocument = didIdentityDocument.document;\n\n\t\t\tlet methodKeyPublic;\n\t\t\tif (Is.stringValue(verificationMethodId)) {\n\t\t\t\t// If there is a verification method id, we will try to get the key from the vault.\n\t\t\t\ttry {\n\t\t\t\t\t// If there is an existing key, we will use it.\n\t\t\t\t\tconst existingKey = await this._vaultConnector.getKey(\n\t\t\t\t\t\tEntityStorageIdentityConnector.buildVaultKey(didDocument.id, verificationMethodId)\n\t\t\t\t\t);\n\t\t\t\t\tmethodKeyPublic = existingKey.publicKey;\n\t\t\t\t} catch {}\n\t\t\t}\n\n\t\t\tif (Is.empty(methodKeyPublic)) {\n\t\t\t\t// If there is no existing key, we will create a new one with a temporary name.\n\t\t\t\ttempKeyId = `temp-vm-${Converter.bytesToBase64Url(RandomHelper.generate(16))}`;\n\t\t\t\tmethodKeyPublic = await this._vaultConnector.createKey(\n\t\t\t\t\tEntityStorageIdentityConnector.buildVaultKey(didDocument.id, tempKeyId),\n\t\t\t\t\tVaultKeyType.Ed25519\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst jwkParams: IJwk = {\n\t\t\t\talg: \"EdDSA\",\n\t\t\t\tkty: \"OKP\",\n\t\t\t\tcrv: \"Ed25519\",\n\t\t\t\tx: Converter.bytesToBase64Url(methodKeyPublic)\n\t\t\t};\n\n\t\t\tconst kid = await Jwk.generateKid(jwkParams);\n\n\t\t\tconst methodId = `${documentId}#${verificationMethodId ?? kid}`;\n\n\t\t\tif (Is.stringValue(tempKeyId)) {\n\t\t\t\t// If we created a temporary key, we will rename it to the final method id.\n\t\t\t\tawait this._vaultConnector.renameKey(\n\t\t\t\t\tEntityStorageIdentityConnector.buildVaultKey(didDocument.id, tempKeyId),\n\t\t\t\t\tEntityStorageIdentityConnector.buildVaultKey(didDocument.id, verificationMethodId ?? kid)\n\t\t\t\t);\n\t\t\t\ttempKeyId = undefined;\n\t\t\t}\n\n\t\t\tconst methods = this.getAllMethods(didDocument);\n\t\t\tconst existingMethodIndex = methods.findIndex(m => {\n\t\t\t\tif (Is.string(m.method)) {\n\t\t\t\t\treturn m.method === methodId;\n\t\t\t\t}\n\t\t\t\treturn m.method.id === methodId;\n\t\t\t});\n\n\t\t\tif (existingMethodIndex !== -1) {\n\t\t\t\tconst methodArray =\n\t\t\t\t\tdidDocument[methods[existingMethodIndex].arrayKey as keyof IDidDocument];\n\n\t\t\t\tif (Is.array(methodArray)) {\n\t\t\t\t\tmethodArray.splice(existingMethodIndex, 1);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst didVerificationMethod: IDidDocumentVerificationMethod = {\n\t\t\t\tid: methodId,\n\t\t\t\tcontroller: documentId,\n\t\t\t\ttype: \"JsonWebKey\",\n\t\t\t\tpublicKeyJwk: {\n\t\t\t\t\t...jwkParams,\n\t\t\t\t\tkid\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tdidDocument[verificationMethodType] ??= [];\n\t\t\tdidDocument[verificationMethodType]?.push(didVerificationMethod);\n\n\t\t\tawait this.updateDocument(controller, didDocument);\n\n\t\t\treturn didVerificationMethod;\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\"addVerificationMethodFailed\",\n\t\t\t\tundefined,\n\t\t\t\terror\n\t\t\t);\n\t\t} finally {\n\t\t\tif (Is.stringValue(tempKeyId)) {\n\t\t\t\t// If we created a temporary key and it is still in use, we will remove it from the vault.\n\t\t\t\ttry {\n\t\t\t\t\tawait this._vaultConnector.removeKey(tempKeyId);\n\t\t\t\t} catch {}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Remove a verification method from the document.\n\t * @param controller The controller of the identity who can make changes.\n\t * @param verificationMethodId The id of the verification method.\n\t * @returns Nothing.\n\t * @throws NotFoundError if the id can not be resolved.\n\t * @throws NotSupportedError if the platform does not support multiple revocable keys.\n\t */\n\tpublic async removeVerificationMethod(\n\t\tcontroller: string,\n\t\tverificationMethodId: string\n\t): Promise<void> {\n\t\tGuards.stringValue(EntityStorageIdentityConnector.CLASS_NAME, nameof(controller), controller);\n\t\tGuards.stringValue(\n\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\tnameof(verificationMethodId),\n\t\t\tverificationMethodId\n\t\t);\n\n\t\ttry {\n\t\t\tconst idParts = DocumentHelper.parseId(verificationMethodId);\n\t\t\tif (Is.empty(idParts.fragment)) {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\t\"missingDid\",\n\t\t\t\t\tverificationMethodId\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst didIdentityDocument = await this._didDocumentEntityStorage.get(idParts.id);\n\t\t\tif (Is.undefined(didIdentityDocument)) {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\t\"documentNotFound\",\n\t\t\t\t\tidParts.id\n\t\t\t\t);\n\t\t\t}\n\t\t\tawait EntityStorageIdentityConnector.verifyDocument(\n\t\t\t\tdidIdentityDocument,\n\t\t\t\tthis._vaultConnector\n\t\t\t);\n\t\t\tconst didDocument = didIdentityDocument.document;\n\n\t\t\tconst methods = this.getAllMethods(didDocument);\n\t\t\tconst existingMethodIndex = methods.findIndex(m => {\n\t\t\t\tif (Is.string(m.method)) {\n\t\t\t\t\treturn m.method === verificationMethodId;\n\t\t\t\t}\n\t\t\t\treturn m.method.id === verificationMethodId;\n\t\t\t});\n\n\t\t\tif (existingMethodIndex !== -1) {\n\t\t\t\tconst methodArray =\n\t\t\t\t\tdidDocument[methods[existingMethodIndex].arrayKey as keyof IDidDocument];\n\n\t\t\t\tif (Is.array(methodArray)) {\n\t\t\t\t\tmethodArray.splice(existingMethodIndex, 1);\n\t\t\t\t\tif (methodArray.length === 0) {\n\t\t\t\t\t\tdelete didDocument[methods[existingMethodIndex].arrayKey as keyof IDidDocument];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\t\"verificationMethodNotFound\",\n\t\t\t\t\tverificationMethodId\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tawait this.updateDocument(controller, didDocument);\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\"removeVerificationMethodFailed\",\n\t\t\t\tundefined,\n\t\t\t\terror\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Add a service to the document.\n\t * @param controller The controller of the identity who can make changes.\n\t * @param documentId The id of the document to add the service to.\n\t * @param serviceId The id of the service.\n\t * @param serviceType The type of the service.\n\t * @param serviceEndpoint The endpoint for the service.\n\t * @returns The service.\n\t * @throws NotFoundError if the id can not be resolved.\n\t */\n\tpublic async addService(\n\t\tcontroller: string,\n\t\tdocumentId: string,\n\t\tserviceId: string,\n\t\tserviceType: string | string[],\n\t\tserviceEndpoint: string | string[]\n\t): Promise<IDidService> {\n\t\tGuards.stringValue(EntityStorageIdentityConnector.CLASS_NAME, nameof(controller), controller);\n\t\tGuards.stringValue(EntityStorageIdentityConnector.CLASS_NAME, nameof(documentId), documentId);\n\t\tGuards.stringValue(EntityStorageIdentityConnector.CLASS_NAME, nameof(serviceId), serviceId);\n\t\tif (Is.array(serviceType)) {\n\t\t\tGuards.arrayValue<string>(\n\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\tnameof(serviceType),\n\t\t\t\tserviceType\n\t\t\t);\n\t\t} else {\n\t\t\tGuards.stringValue(\n\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\tnameof(serviceType),\n\t\t\t\tserviceType\n\t\t\t);\n\t\t}\n\t\tif (Is.array(serviceEndpoint)) {\n\t\t\tGuards.arrayValue<string>(\n\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\tnameof(serviceEndpoint),\n\t\t\t\tserviceEndpoint\n\t\t\t);\n\t\t} else {\n\t\t\tGuards.stringValue(\n\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\tnameof(serviceEndpoint),\n\t\t\t\tserviceEndpoint\n\t\t\t);\n\t\t}\n\n\t\ttry {\n\t\t\tconst didIdentityDocument = await this._didDocumentEntityStorage.get(documentId);\n\t\t\tif (Is.undefined(didIdentityDocument)) {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\t\"documentNotFound\",\n\t\t\t\t\tdocumentId\n\t\t\t\t);\n\t\t\t}\n\t\t\tawait EntityStorageIdentityConnector.verifyDocument(\n\t\t\t\tdidIdentityDocument,\n\t\t\t\tthis._vaultConnector\n\t\t\t);\n\t\t\tconst didDocument = didIdentityDocument.document;\n\n\t\t\tconst fullServiceId = serviceId.includes(\"#\") ? serviceId : `${documentId}#${serviceId}`;\n\n\t\t\tif (Is.array(didDocument.service)) {\n\t\t\t\tconst existingServiceIndex = didDocument.service.findIndex(s => s.id === fullServiceId);\n\t\t\t\tif (existingServiceIndex !== -1) {\n\t\t\t\t\tdidDocument.service?.splice(existingServiceIndex, 1);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst didService: IDidService = {\n\t\t\t\tid: fullServiceId,\n\t\t\t\ttype: serviceType,\n\t\t\t\tserviceEndpoint\n\t\t\t};\n\n\t\t\tdidDocument.service ??= [];\n\t\t\tdidDocument.service.push(didService);\n\n\t\t\tawait this.updateDocument(controller, didDocument);\n\n\t\t\treturn didService;\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\"addServiceFailed\",\n\t\t\t\tundefined,\n\t\t\t\terror\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Remove a service from the document.\n\t * @param controller The controller of the identity who can make changes.\n\t * @param serviceId The id of the service.\n\t * @returns Nothing.\n\t * @throws NotFoundError if the id can not be resolved.\n\t */\n\tpublic async removeService(controller: string, serviceId: string): Promise<void> {\n\t\tGuards.stringValue(EntityStorageIdentityConnector.CLASS_NAME, nameof(controller), controller);\n\t\tGuards.stringValue(EntityStorageIdentityConnector.CLASS_NAME, nameof(serviceId), serviceId);\n\n\t\ttry {\n\t\t\tconst idParts = DocumentHelper.parseId(serviceId);\n\t\t\tif (Is.empty(idParts.fragment)) {\n\t\t\t\tthrow new NotFoundError(EntityStorageIdentityConnector.CLASS_NAME, \"missingDid\", serviceId);\n\t\t\t}\n\n\t\t\tconst didIdentityDocument = await this._didDocumentEntityStorage.get(idParts.id);\n\t\t\tif (Is.undefined(didIdentityDocument)) {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\t\"documentNotFound\",\n\t\t\t\t\tidParts.id\n\t\t\t\t);\n\t\t\t}\n\t\t\tawait EntityStorageIdentityConnector.verifyDocument(\n\t\t\t\tdidIdentityDocument,\n\t\t\t\tthis._vaultConnector\n\t\t\t);\n\t\t\tconst didDocument = didIdentityDocument.document;\n\n\t\t\tif (Is.array(didDocument.service)) {\n\t\t\t\tconst existingServiceIndex = didDocument.service.findIndex(s => s.id === serviceId);\n\t\t\t\tif (existingServiceIndex !== -1) {\n\t\t\t\t\tdidDocument.service?.splice(existingServiceIndex, 1);\n\t\t\t\t\tif (didDocument.service?.length === 0) {\n\t\t\t\t\t\tdelete didDocument.service;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\t\"serviceNotFound\",\n\t\t\t\t\tserviceId\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tawait this.updateDocument(controller, didDocument);\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\"removeServiceFailed\",\n\t\t\t\tundefined,\n\t\t\t\terror\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Create a verifiable credential for a verification method.\n\t * @param controller The controller of the identity who can make changes.\n\t * @param verificationMethodId The verification method id to use.\n\t * @param id The id of the credential.\n\t * @param subject The credential subject to store in the verifiable credential.\n\t * @param options Additional options for creating the verifiable credential.\n\t * @param options.revocationIndex The bitmap revocation index of the credential, if undefined will not have revocation status.\n\t * @param options.expirationDate The date the verifiable credential is valid until.\n\t * @returns The created verifiable credential and its token.\n\t * @throws NotFoundError if the id can not be resolved.\n\t */\n\tpublic async createVerifiableCredential(\n\t\tcontroller: string,\n\t\tverificationMethodId: string,\n\t\tid: string | undefined,\n\t\tsubject: IJsonLdNodeObject,\n\t\toptions?: {\n\t\t\trevocationIndex?: number;\n\t\t\texpirationDate?: Date;\n\t\t}\n\t): Promise<{\n\t\tverifiableCredential: IDidVerifiableCredentialV1;\n\t\tjwt: string;\n\t}> {\n\t\tGuards.stringValue(EntityStorageIdentityConnector.CLASS_NAME, nameof(controller), controller);\n\t\tGuards.stringValue(\n\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\tnameof(verificationMethodId),\n\t\t\tverificationMethodId\n\t\t);\n\t\tGuards.object<IJsonLdNodeObject>(\n\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\tnameof(subject),\n\t\t\tsubject\n\t\t);\n\t\tif (!Is.undefined(options?.revocationIndex)) {\n\t\t\tGuards.number(\n\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\tnameof(options.revocationIndex),\n\t\t\t\toptions.revocationIndex\n\t\t\t);\n\t\t}\n\n\t\ttry {\n\t\t\tconst idParts = DocumentHelper.parseId(verificationMethodId);\n\t\t\tif (Is.empty(idParts.fragment)) {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\t\"missingDid\",\n\t\t\t\t\tverificationMethodId\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst issuerIdentityDocument = await this._didDocumentEntityStorage.get(idParts.id);\n\t\t\tif (Is.undefined(issuerIdentityDocument)) {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\t\"documentNotFound\",\n\t\t\t\t\tidParts.id\n\t\t\t\t);\n\t\t\t}\n\t\t\tawait EntityStorageIdentityConnector.verifyDocument(\n\t\t\t\tissuerIdentityDocument,\n\t\t\t\tthis._vaultConnector\n\t\t\t);\n\t\t\tconst issuerDidDocument = issuerIdentityDocument.document;\n\n\t\t\tconst methods = this.getAllMethods(issuerDidDocument);\n\t\t\tconst methodAndArray = methods.find(m => {\n\t\t\t\tif (Is.string(m.method)) {\n\t\t\t\t\treturn m.method === verificationMethodId;\n\t\t\t\t}\n\t\t\t\treturn m.method.id === verificationMethodId;\n\t\t\t});\n\n\t\t\tif (!methodAndArray) {\n\t\t\t\tthrow new GeneralError(EntityStorageIdentityConnector.CLASS_NAME, \"methodMissing\", {\n\t\t\t\t\tmethod: verificationMethodId\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst verificationDidMethod = methodAndArray.method;\n\t\t\tif (!Is.stringValue(verificationDidMethod.publicKeyJwk?.x)) {\n\t\t\t\tthrow new GeneralError(EntityStorageIdentityConnector.CLASS_NAME, \"publicKeyJwkMissing\", {\n\t\t\t\t\tmethod: verificationMethodId\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst revocationService = issuerDidDocument.service?.find(s => s.id.endsWith(\"#revocation\"));\n\n\t\t\tconst subjectClone = ObjectHelper.clone(subject);\n\n\t\t\tconst finalTypes: string[] = [DidTypes.VerifiableCredential];\n\t\t\tconst credContext = ObjectHelper.extractProperty<IJsonLdContextDefinitionRoot>(subjectClone, [\n\t\t\t\t\"@context\"\n\t\t\t]);\n\t\t\tconst credId = ObjectHelper.extractProperty<string>(subjectClone, [\"@id\", \"id\"], false);\n\t\t\tconst credType = ObjectHelper.extractProperty<string>(subjectClone, [\"@type\", \"type\"]);\n\t\t\tif (Is.stringValue(credType)) {\n\t\t\t\tfinalTypes.push(credType);\n\t\t\t}\n\n\t\t\tconst verifiableCredential: IDidVerifiableCredentialV1 = {\n\t\t\t\t\"@context\": JsonLdProcessor.combineContexts(DidContexts.NamespaceVCv1, credContext) as [\n\t\t\t\t\ttypeof DidContexts.NamespaceVCv1\n\t\t\t\t],\n\t\t\t\tid,\n\t\t\t\ttype: finalTypes,\n\t\t\t\tcredentialSubject: subjectClone,\n\t\t\t\tissuer: issuerDidDocument.id,\n\t\t\t\tissuanceDate: new Date(Date.now()).toISOString(),\n\t\t\t\texpirationDate: Is.date(options?.expirationDate)\n\t\t\t\t\t? options?.expirationDate.toISOString()\n\t\t\t\t\t: undefined,\n\t\t\t\tcredentialStatus:\n\t\t\t\t\trevocationService && !Is.undefined(options?.revocationIndex)\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tid: revocationService.id,\n\t\t\t\t\t\t\t\ttype: Is.array(revocationService.type)\n\t\t\t\t\t\t\t\t\t? revocationService.type[0]\n\t\t\t\t\t\t\t\t\t: revocationService.type,\n\t\t\t\t\t\t\t\trevocationBitmapIndex: options.revocationIndex.toString()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: undefined\n\t\t\t};\n\n\t\t\tconst jwtHeader: IJwtHeader = {\n\t\t\t\tkid: verificationDidMethod.id,\n\t\t\t\ttyp: \"JWT\",\n\t\t\t\talg: \"EdDSA\"\n\t\t\t};\n\n\t\t\tconst jwtVc = ObjectHelper.pick(ObjectHelper.clone(verifiableCredential), [\n\t\t\t\t\"@context\",\n\t\t\t\t\"type\",\n\t\t\t\t\"credentialSubject\",\n\t\t\t\t\"credentialStatus\"\n\t\t\t]);\n\n\t\t\tif (Is.array(jwtVc.credentialSubject)) {\n\t\t\t\tjwtVc.credentialSubject = jwtVc.credentialSubject.map(c => {\n\t\t\t\t\tObjectHelper.propertyDelete(c, \"id\");\n\t\t\t\t\treturn c;\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tObjectHelper.propertyDelete(jwtVc.credentialSubject, \"id\");\n\t\t\t}\n\n\t\t\tconst jwtPayload: IJwtPayload = {\n\t\t\t\tiss: idParts.id,\n\t\t\t\tnbf: Math.floor(Date.now() / 1000),\n\t\t\t\tjti: verifiableCredential.id,\n\t\t\t\tsub: credId,\n\t\t\t\tvc: jwtVc\n\t\t\t};\n\n\t\t\tif (Is.date(options?.expirationDate)) {\n\t\t\t\tjwtPayload.exp = Math.floor(options.expirationDate.getTime() / 1000);\n\t\t\t}\n\n\t\t\tconst signature = await Jwt.encodeWithSigner(jwtHeader, jwtPayload, async (header, payload) =>\n\t\t\t\tVaultConnectorHelper.jwtSigner(\n\t\t\t\t\tthis._vaultConnector,\n\t\t\t\t\tEntityStorageIdentityConnector.buildVaultKey(idParts.id, idParts.fragment ?? \"\"),\n\t\t\t\t\theader,\n\t\t\t\t\tpayload\n\t\t\t\t)\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\tverifiableCredential,\n\t\t\t\tjwt: signature\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\"createVerifiableCredentialFailed\",\n\t\t\t\tundefined,\n\t\t\t\terror\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Check a verifiable credential is valid.\n\t * @param credentialJwt The credential to verify.\n\t * @returns The credential stored in the jwt and the revocation status.\n\t */\n\tpublic async checkVerifiableCredential(credentialJwt: string): Promise<{\n\t\trevoked: boolean;\n\t\tverifiableCredential?: IDidVerifiableCredentialV1;\n\t}> {\n\t\tGuards.stringValue(\n\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\tnameof(credentialJwt),\n\t\t\tcredentialJwt\n\t\t);\n\n\t\ttry {\n\t\t\tconst jwtDecoded = await Jwt.decode(credentialJwt);\n\n\t\t\tconst jwtHeader = jwtDecoded.header;\n\t\t\tconst jwtPayload = jwtDecoded.payload;\n\t\t\tconst jwtSignature = jwtDecoded.signature;\n\n\t\t\tif (\n\t\t\t\tIs.undefined(jwtHeader) ||\n\t\t\t\tIs.undefined(jwtPayload) ||\n\t\t\t\tIs.undefined(jwtPayload.iss) ||\n\t\t\t\tIs.undefined(jwtSignature)\n\t\t\t) {\n\t\t\t\tthrow new NotFoundError(EntityStorageIdentityConnector.CLASS_NAME, \"jwkSignatureFailed\");\n\t\t\t}\n\n\t\t\tconst issuerDocumentId = jwtPayload.iss;\n\t\t\tconst issuerIdentityDocument = await this._didDocumentEntityStorage.get(issuerDocumentId);\n\t\t\tif (Is.undefined(issuerIdentityDocument)) {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\t\"documentNotFound\",\n\t\t\t\t\tissuerDocumentId\n\t\t\t\t);\n\t\t\t}\n\t\t\tawait EntityStorageIdentityConnector.verifyDocument(\n\t\t\t\tissuerIdentityDocument,\n\t\t\t\tthis._vaultConnector\n\t\t\t);\n\t\t\tconst issuerDidDocument = issuerIdentityDocument.document;\n\n\t\t\tconst methods = this.getAllMethods(issuerDidDocument);\n\t\t\tconst methodAndArray = methods.find(m => {\n\t\t\t\tif (Is.string(m.method)) {\n\t\t\t\t\treturn m.method === jwtHeader.kid;\n\t\t\t\t}\n\t\t\t\treturn m.method.id === jwtHeader.kid;\n\t\t\t});\n\n\t\t\tif (!methodAndArray) {\n\t\t\t\tthrow new GeneralError(EntityStorageIdentityConnector.CLASS_NAME, \"methodMissing\", {\n\t\t\t\t\tmethod: jwtHeader.kid\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst didMethod = methodAndArray.method;\n\t\t\tif (!Is.stringValue(didMethod.publicKeyJwk?.x)) {\n\t\t\t\tthrow new GeneralError(EntityStorageIdentityConnector.CLASS_NAME, \"publicKeyJwkMissing\", {\n\t\t\t\t\tmethod: jwtHeader.kid\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tawait Jwt.verifySignature(credentialJwt, await Jwk.toCryptoKey(didMethod.publicKeyJwk));\n\n\t\t\tconst verifiableCredential = jwtPayload.vc as IDidVerifiableCredentialV1;\n\t\t\tif (Is.object(verifiableCredential)) {\n\t\t\t\tif (Is.string(jwtPayload.jti)) {\n\t\t\t\t\tverifiableCredential.id = jwtPayload.jti;\n\t\t\t\t}\n\t\t\t\tverifiableCredential.issuer = issuerDocumentId;\n\t\t\t\tif (Is.number(jwtPayload.nbf)) {\n\t\t\t\t\tverifiableCredential.issuanceDate = new Date(jwtPayload.nbf * 1000).toISOString();\n\t\t\t\t}\n\t\t\t\tif (Is.array(verifiableCredential.credentialSubject)) {\n\t\t\t\t\tverifiableCredential.credentialSubject = verifiableCredential.credentialSubject.map(c => {\n\t\t\t\t\t\tObjectHelper.propertySet(c, \"id\", jwtPayload.sub);\n\t\t\t\t\t\treturn c;\n\t\t\t\t\t});\n\t\t\t\t} else if (Is.object(verifiableCredential.credentialSubject)) {\n\t\t\t\t\tObjectHelper.propertySet(verifiableCredential.credentialSubject, \"id\", jwtPayload.sub);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst credentialStatus = verifiableCredential.credentialStatus;\n\t\t\tlet revoked = false;\n\t\t\tif (Is.object(credentialStatus)) {\n\t\t\t\trevoked = await this.checkRevocation(\n\t\t\t\t\tissuerDidDocument,\n\t\t\t\t\tcredentialStatus.revocationBitmapIndex\n\t\t\t\t);\n\t\t\t} else if (Is.arrayValue(credentialStatus)) {\n\t\t\t\tfor (let i = 0; i < credentialStatus.length; i++) {\n\t\t\t\t\trevoked = await this.checkRevocation(\n\t\t\t\t\t\tissuerDidDocument,\n\t\t\t\t\t\tcredentialStatus[i].revocationBitmapIndex\n\t\t\t\t\t);\n\t\t\t\t\tif (revoked) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\trevoked,\n\t\t\t\tverifiableCredential: revoked ? undefined : verifiableCredential\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\"checkingVerifiableCredentialFailed\",\n\t\t\t\tundefined,\n\t\t\t\terror\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Revoke verifiable credential(s).\n\t * @param controller The controller of the identity who can make changes.\n\t * @param issuerDocumentId The id of the document to update the revocation list for.\n\t * @param credentialIndices The revocation bitmap index or indices to revoke.\n\t * @returns Nothing.\n\t */\n\tpublic async revokeVerifiableCredentials(\n\t\tcontroller: string,\n\t\tissuerDocumentId: string,\n\t\tcredentialIndices: number[]\n\t): Promise<void> {\n\t\tGuards.stringValue(EntityStorageIdentityConnector.CLASS_NAME, nameof(controller), controller);\n\t\tGuards.stringValue(\n\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\tnameof(issuerDocumentId),\n\t\t\tissuerDocumentId\n\t\t);\n\t\tGuards.arrayValue(\n\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\tnameof(credentialIndices),\n\t\t\tcredentialIndices\n\t\t);\n\n\t\ttry {\n\t\t\tconst issuerIdentityDocument = await this._didDocumentEntityStorage.get(issuerDocumentId);\n\t\t\tif (Is.undefined(issuerIdentityDocument)) {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\t\"documentNotFound\",\n\t\t\t\t\tissuerDocumentId\n\t\t\t\t);\n\t\t\t}\n\t\t\tawait EntityStorageIdentityConnector.verifyDocument(\n\t\t\t\tissuerIdentityDocument,\n\t\t\t\tthis._vaultConnector\n\t\t\t);\n\t\t\tconst issuerDidDocument = issuerIdentityDocument.document;\n\n\t\t\tconst revocationService = issuerDidDocument.service?.find(s => s.id.endsWith(\"#revocation\"));\n\t\t\tif (\n\t\t\t\trevocationService &&\n\t\t\t\tIs.string(revocationService.serviceEndpoint) &&\n\t\t\t\trevocationService.type === \"BitstringStatusList\"\n\t\t\t) {\n\t\t\t\tconst revocationParts = revocationService.serviceEndpoint.split(\",\");\n\t\t\t\tif (revocationParts.length === 2) {\n\t\t\t\t\tconst compressedRevocationBytes = Converter.base64UrlToBytes(revocationParts[1]);\n\t\t\t\t\tconst decompressed = await Compression.decompress(\n\t\t\t\t\t\tcompressedRevocationBytes,\n\t\t\t\t\t\tCompressionType.Gzip\n\t\t\t\t\t);\n\n\t\t\t\t\tconst bitString = BitString.fromBits(\n\t\t\t\t\t\tdecompressed,\n\t\t\t\t\t\tEntityStorageIdentityConnector._REVOCATION_BITS_SIZE\n\t\t\t\t\t);\n\n\t\t\t\t\tfor (const credentialIndex of credentialIndices) {\n\t\t\t\t\t\tbitString.setBit(credentialIndex, true);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst compressed = await Compression.compress(bitString.getBits(), CompressionType.Gzip);\n\t\t\t\t\trevocationService.serviceEndpoint = `data:application/octet-stream;base64,${Converter.bytesToBase64Url(compressed)}`;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tawait this.updateDocument(controller, issuerDidDocument);\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\"revokeVerifiableCredentialsFailed\",\n\t\t\t\tundefined,\n\t\t\t\terror\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Unrevoke verifiable credential(s).\n\t * @param controller The controller of the identity who can make changes.\n\t * @param issuerDocumentId The id of the document to update the revocation list for.\n\t * @param credentialIndices The revocation bitmap index or indices to un revoke.\n\t * @returns Nothing.\n\t */\n\tpublic async unrevokeVerifiableCredentials(\n\t\tcontroller: string,\n\t\tissuerDocumentId: string,\n\t\tcredentialIndices: number[]\n\t): Promise<void> {\n\t\tGuards.stringValue(EntityStorageIdentityConnector.CLASS_NAME, nameof(controller), controller);\n\t\tGuards.stringValue(\n\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\tnameof(issuerDocumentId),\n\t\t\tissuerDocumentId\n\t\t);\n\t\tGuards.arrayValue(\n\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\tnameof(credentialIndices),\n\t\t\tcredentialIndices\n\t\t);\n\n\t\ttry {\n\t\t\tconst issuerIdentityDocument = await this._didDocumentEntityStorage.get(issuerDocumentId);\n\t\t\tif (Is.undefined(issuerIdentityDocument)) {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\t\"documentNotFound\",\n\t\t\t\t\tissuerDocumentId\n\t\t\t\t);\n\t\t\t}\n\t\t\tawait EntityStorageIdentityConnector.verifyDocument(\n\t\t\t\tissuerIdentityDocument,\n\t\t\t\tthis._vaultConnector\n\t\t\t);\n\t\t\tconst issuerDidDocument = issuerIdentityDocument.document;\n\n\t\t\tconst revocationService = issuerDidDocument.service?.find(s => s.id.endsWith(\"#revocation\"));\n\t\t\tif (\n\t\t\t\trevocationService &&\n\t\t\t\tIs.string(revocationService.serviceEndpoint) &&\n\t\t\t\trevocationService.type === \"BitstringStatusList\"\n\t\t\t) {\n\t\t\t\tconst revocationParts = revocationService.serviceEndpoint.split(\",\");\n\t\t\t\tif (revocationParts.length === 2) {\n\t\t\t\t\tconst compressedRevocationBytes = Converter.base64UrlToBytes(revocationParts[1]);\n\t\t\t\t\tconst decompressed = await Compression.decompress(\n\t\t\t\t\t\tcompressedRevocationBytes,\n\t\t\t\t\t\tCompressionType.Gzip\n\t\t\t\t\t);\n\n\t\t\t\t\tconst bitString = BitString.fromBits(\n\t\t\t\t\t\tdecompressed,\n\t\t\t\t\t\tEntityStorageIdentityConnector._REVOCATION_BITS_SIZE\n\t\t\t\t\t);\n\n\t\t\t\t\tfor (const credentialIndex of credentialIndices) {\n\t\t\t\t\t\tbitString.setBit(credentialIndex, false);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst compressed = await Compression.compress(bitString.getBits(), CompressionType.Gzip);\n\t\t\t\t\trevocationService.serviceEndpoint = `data:application/octet-stream;base64,${Converter.bytesToBase64Url(compressed)}`;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tawait this.updateDocument(controller, issuerDidDocument);\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\"unrevokeVerifiableCredentialsFailed\",\n\t\t\t\tundefined,\n\t\t\t\terror\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Create a verifiable presentation from the supplied verifiable credentials.\n\t * @param controller The controller of the identity who can make changes.\n\t * @param verificationMethodId The method to associate with the presentation.\n\t * @param presentationId The id of the presentation.\n\t * @param contexts The contexts for the data stored in the verifiable credential.\n\t * @param types The types for the data stored in the verifiable credential.\n\t * @param verifiableCredentials The credentials to use for creating the presentation in jwt format.\n\t * @param expiresInMinutes The time in minutes for the presentation to expire.\n\t * @returns The created verifiable presentation and its token.\n\t * @throws NotFoundError if the id can not be resolved.\n\t */\n\tpublic async createVerifiablePresentation(\n\t\tcontroller: string,\n\t\tverificationMethodId: string,\n\t\tpresentationId: string | undefined,\n\t\tcontexts: IJsonLdContextDefinitionRoot | undefined,\n\t\ttypes: string | string[] | undefined,\n\t\tverifiableCredentials: (string | IDidVerifiableCredentialV1)[],\n\t\texpiresInMinutes?: number\n\t): Promise<{\n\t\tverifiablePresentation: IDidVerifiablePresentationV1;\n\t\tjwt: string;\n\t}> {\n\t\tGuards.stringValue(EntityStorageIdentityConnector.CLASS_NAME, nameof(controller), controller);\n\t\tGuards.stringValue(\n\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\tnameof(verificationMethodId),\n\t\t\tverificationMethodId\n\t\t);\n\t\tif (Is.array(types)) {\n\t\t\tGuards.arrayValue(EntityStorageIdentityConnector.CLASS_NAME, nameof(types), types);\n\t\t} else if (Is.string(types)) {\n\t\t\tGuards.stringValue(EntityStorageIdentityConnector.CLASS_NAME, nameof(types), types);\n\t\t}\n\t\tGuards.arrayValue(\n\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\tnameof(verifiableCredentials),\n\t\t\tverifiableCredentials\n\t\t);\n\t\tif (!Is.undefined(expiresInMinutes)) {\n\t\t\tGuards.integer(\n\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\tnameof(expiresInMinutes),\n\t\t\t\texpiresInMinutes\n\t\t\t);\n\t\t}\n\n\t\ttry {\n\t\t\tconst idParts = DocumentHelper.parseId(verificationMethodId);\n\t\t\tif (Is.empty(idParts.fragment)) {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\t\"missingDid\",\n\t\t\t\t\tverificationMethodId\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst holderIdentityDocument = await this._didDocumentEntityStorage.get(idParts.id);\n\t\t\tif (Is.undefined(holderIdentityDocument)) {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\t\"documentNotFound\",\n\t\t\t\t\tidParts.id\n\t\t\t\t);\n\t\t\t}\n\t\t\tawait EntityStorageIdentityConnector.verifyDocument(\n\t\t\t\tholderIdentityDocument,\n\t\t\t\tthis._vaultConnector\n\t\t\t);\n\t\t\tconst holderDidDocument = holderIdentityDocument.document;\n\n\t\t\tconst methods = this.getAllMethods(holderDidDocument);\n\t\t\tconst methodAndArray = methods.find(m => {\n\t\t\t\tif (Is.string(m.method)) {\n\t\t\t\t\treturn m.method === verificationMethodId;\n\t\t\t\t}\n\t\t\t\treturn m.method.id === verificationMethodId;\n\t\t\t});\n\n\t\t\tif (!methodAndArray) {\n\t\t\t\tthrow new GeneralError(EntityStorageIdentityConnector.CLASS_NAME, \"methodMissing\", {\n\t\t\t\t\tmethod: verificationMethodId\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst didMethod = methodAndArray.method;\n\t\t\tif (!Is.stringValue(didMethod.publicKeyJwk?.x)) {\n\t\t\t\tthrow new GeneralError(EntityStorageIdentityConnector.CLASS_NAME, \"publicKeyJwkMissing\", {\n\t\t\t\t\tmethod: verificationMethodId\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst finalTypes: string[] = [DidTypes.VerifiablePresentation];\n\t\t\tif (Is.array(types)) {\n\t\t\t\tfinalTypes.push(...types);\n\t\t\t} else if (Is.stringValue(types)) {\n\t\t\t\tfinalTypes.push(types);\n\t\t\t}\n\n\t\t\tconst verifiablePresentation: IDidVerifiablePresentationV1 = {\n\t\t\t\t\"@context\": JsonLdProcessor.combineContexts(DidContexts.NamespaceVCv1, contexts) as [\n\t\t\t\t\ttypeof DidContexts.NamespaceVCv1\n\t\t\t\t],\n\t\t\t\tid: presentationId,\n\t\t\t\ttype: finalTypes,\n\t\t\t\tverifiableCredential: verifiableCredentials,\n\t\t\t\tholder: idParts.id\n\t\t\t};\n\n\t\t\tconst jwtHeader: IJwtHeader = {\n\t\t\t\tkid: didMethod.id,\n\t\t\t\ttyp: \"JWT\",\n\t\t\t\talg: \"EdDSA\"\n\t\t\t};\n\n\t\t\tconst jwtVp = ObjectHelper.pick(ObjectHelper.clone(verifiablePresentation), [\n\t\t\t\t\"@context\",\n\t\t\t\t\"type\",\n\t\t\t\t\"verifiableCredential\"\n\t\t\t]);\n\n\t\t\tconst jwtPayload: IJwtPayload = {\n\t\t\t\tiss: idParts.id,\n\t\t\t\tnbf: Math.floor(Date.now() / 1000),\n\t\t\t\tvp: jwtVp\n\t\t\t};\n\n\t\t\tif (Is.integer(expiresInMinutes)) {\n\t\t\t\tconst expiresInSeconds = expiresInMinutes * 60;\n\t\t\t\tjwtPayload.exp = Math.floor(Date.now() / 1000) + expiresInSeconds;\n\t\t\t}\n\n\t\t\tconst signature = await Jwt.encodeWithSigner(jwtHeader, jwtPayload, async (header, payload) =>\n\t\t\t\tVaultConnectorHelper.jwtSigner(\n\t\t\t\t\tthis._vaultConnector,\n\t\t\t\t\tEntityStorageIdentityConnector.buildVaultKey(idParts.id, idParts.fragment ?? \"\"),\n\t\t\t\t\theader,\n\t\t\t\t\tpayload\n\t\t\t\t)\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\tverifiablePresentation,\n\t\t\t\tjwt: signature\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\"createVerifiablePresentationFailed\",\n\t\t\t\tundefined,\n\t\t\t\terror\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Check a verifiable presentation is valid.\n\t * @param presentationJwt The presentation to verify.\n\t * @returns The presentation stored in the jwt and the revocation status.\n\t */\n\tpublic async checkVerifiablePresentation(presentationJwt: string): Promise<{\n\t\trevoked: boolean;\n\t\tverifiablePresentation?: IDidVerifiablePresentationV1;\n\t\tissuers?: IDidDocument[];\n\t}> {\n\t\tGuards.stringValue(\n\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\tnameof(presentationJwt),\n\t\t\tpresentationJwt\n\t\t);\n\n\t\ttry {\n\t\t\tconst jwtDecoded = await Jwt.decode(presentationJwt);\n\n\t\t\tconst jwtHeader = jwtDecoded.header;\n\t\t\tconst jwtPayload = jwtDecoded.payload;\n\t\t\tconst jwtSignature = jwtDecoded.signature;\n\n\t\t\tif (\n\t\t\t\tIs.undefined(jwtHeader) ||\n\t\t\t\tIs.undefined(jwtPayload) ||\n\t\t\t\tIs.undefined(jwtPayload.iss) ||\n\t\t\t\tIs.undefined(jwtSignature)\n\t\t\t) {\n\t\t\t\tthrow new NotFoundError(EntityStorageIdentityConnector.CLASS_NAME, \"jwkSignatureFailed\");\n\t\t\t}\n\n\t\t\tconst holderDocumentId = jwtPayload.iss;\n\t\t\tconst holderIdentityDocument = await this._didDocumentEntityStorage.get(holderDocumentId);\n\t\t\tif (Is.undefined(holderIdentityDocument)) {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\t\"documentNotFound\",\n\t\t\t\t\tholderDocumentId\n\t\t\t\t);\n\t\t\t}\n\t\t\tawait EntityStorageIdentityConnector.verifyDocument(\n\t\t\t\tholderIdentityDocument,\n\t\t\t\tthis._vaultConnector\n\t\t\t);\n\n\t\t\tconst issuers: IDidDocument[] = [];\n\t\t\tconst tokensRevoked: boolean[] = [];\n\t\t\tconst verifiablePresentation = jwtPayload?.vp as IDidVerifiablePresentationV1;\n\t\t\tif (\n\t\t\t\tIs.object<IDidVerifiablePresentationV1>(verifiablePresentation) &&\n\t\t\t\tIs.array(verifiablePresentation.verifiableCredential)\n\t\t\t) {\n\t\t\t\tfor (const vcJwt of verifiablePresentation.verifiableCredential) {\n\t\t\t\t\tlet revoked = true;\n\t\t\t\t\tif (Is.stringValue(vcJwt)) {\n\t\t\t\t\t\tconst jwt = await Jwt.decode(vcJwt);\n\n\t\t\t\t\t\tif (Is.string(jwt.payload?.iss)) {\n\t\t\t\t\t\t\tconst issuerDocumentId = jwt.payload.iss;\n\t\t\t\t\t\t\tverifiablePresentation.holder = issuerDocumentId;\n\n\t\t\t\t\t\t\tconst issuerDidDocument = await this._didDocumentEntityStorage.get(issuerDocumentId);\n\t\t\t\t\t\t\tif (Is.undefined(issuerDidDocument)) {\n\t\t\t\t\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\t\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\t\t\t\t\t\"documentNotFound\",\n\t\t\t\t\t\t\t\t\tissuerDocumentId\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tawait EntityStorageIdentityConnector.verifyDocument(\n\t\t\t\t\t\t\t\tissuerDidDocument,\n\t\t\t\t\t\t\t\tthis._vaultConnector\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tissuers.push({\n\t\t\t\t\t\t\t\t\"@context\": DidContexts.Namespace,\n\t\t\t\t\t\t\t\t...issuerDidDocument\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tconst vc = jwt.payload.vc as IDidVerifiableCredentialV1;\n\t\t\t\t\t\t\tif (Is.object<IDidVerifiableCredentialV1>(vc)) {\n\t\t\t\t\t\t\t\tconst credentialStatus = vc.credentialStatus;\n\t\t\t\t\t\t\t\tif (Is.object(credentialStatus)) {\n\t\t\t\t\t\t\t\t\trevoked = await this.checkRevocation(\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"@context\": DidContexts.Namespace,\n\t\t\t\t\t\t\t\t\t\t\t...issuerDidDocument\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tcredentialStatus.revocationBitmapIndex\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t} else if (Is.arrayValue(credentialStatus)) {\n\t\t\t\t\t\t\t\t\tfor (let i = 0; i < credentialStatus.length; i++) {\n\t\t\t\t\t\t\t\t\t\trevoked = await this.checkRevocation(\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\"@context\": DidContexts.Namespace,\n\t\t\t\t\t\t\t\t\t\t\t\t...issuerDidDocument\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\tcredentialStatus[i].revocationBitmapIndex\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\tif (revoked) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\trevoked = false;\n\t\t\t\t\t}\n\t\t\t\t\ttokensRevoked.push(revoked);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\trevoked: tokensRevoked.some(Boolean),\n\t\t\t\tverifiablePresentation,\n\t\t\t\tissuers\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tif (BaseError.isErrorMessage(error, /revoked/i)) {\n\t\t\t\treturn {\n\t\t\t\t\trevoked: true\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tthrow new GeneralError(\n\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\"checkingVerifiablePresentationFailed\",\n\t\t\t\tundefined,\n\t\t\t\terror\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Create a proof for arbitrary data with the specified verification method.\n\t * @param controller The controller of the identity who can make changes.\n\t * @param verificationMethodId The verification method id to use.\n\t * @param proofType The type of proof to create.\n\t * @param unsecureDocument The unsecure document to create the proof for.\n\t * @returns The proof.\n\t */\n\tpublic async createProof(\n\t\tcontroller: string,\n\t\tverificationMethodId: string,\n\t\tproofType: ProofTypes,\n\t\tunsecureDocument: IJsonLdNodeObject\n\t): Promise<IProof> {\n\t\tGuards.stringValue(EntityStorageIdentityConnector.CLASS_NAME, nameof(controller), controller);\n\t\tGuards.stringValue(\n\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\tnameof(verificationMethodId),\n\t\t\tverificationMethodId\n\t\t);\n\t\tGuards.arrayOneOf<ProofTypes>(\n\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\tnameof(proofType),\n\t\t\tproofType,\n\t\t\tObject.values(ProofTypes)\n\t\t);\n\t\tGuards.object<IJsonLdNodeObject>(\n\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\tnameof(unsecureDocument),\n\t\t\tunsecureDocument\n\t\t);\n\n\t\ttry {\n\t\t\tconst idParts = DocumentHelper.parseId(verificationMethodId);\n\t\t\tif (Is.empty(idParts.fragment)) {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\t\"missingDid\",\n\t\t\t\t\tverificationMethodId\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst didIdentityDocument = await this._didDocumentEntityStorage.get(idParts.id);\n\t\t\tif (Is.undefined(didIdentityDocument)) {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\t\"documentNotFound\",\n\t\t\t\t\tidParts.id\n\t\t\t\t);\n\t\t\t}\n\t\t\tawait EntityStorageIdentityConnector.verifyDocument(\n\t\t\t\tdidIdentityDocument,\n\t\t\t\tthis._vaultConnector\n\t\t\t);\n\t\t\tconst didDocument = didIdentityDocument.document;\n\n\t\t\tconst methods = this.getAllMethods(didDocument);\n\t\t\tconst methodAndArray = methods.find(m => {\n\t\t\t\tif (Is.string(m.method)) {\n\t\t\t\t\treturn m.method === verificationMethodId;\n\t\t\t\t}\n\t\t\t\treturn m.method.id === verificationMethodId;\n\t\t\t});\n\n\t\t\tif (!methodAndArray) {\n\t\t\t\tthrow new GeneralError(EntityStorageIdentityConnector.CLASS_NAME, \"methodMissing\", {\n\t\t\t\t\tmethod: verificationMethodId\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst didMethod = methodAndArray.method;\n\t\t\tif (!Is.stringValue(didMethod.publicKeyJwk?.x)) {\n\t\t\t\tthrow new GeneralError(EntityStorageIdentityConnector.CLASS_NAME, \"publicKeyJwkMissing\", {\n\t\t\t\t\tmethod: verificationMethodId\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst vaultKey = EntityStorageIdentityConnector.buildVaultKey(\n\t\t\t\tdidDocument.id,\n\t\t\t\tidParts.fragment ?? \"\"\n\t\t\t);\n\t\t\tconst key = await this._vaultConnector.getKey(vaultKey);\n\n\t\t\tconst signedProof = await ProofHelper.createProof(\n\t\t\t\tproofType,\n\t\t\t\tunsecureDocument,\n\t\t\t\tProofHelper.createUnsignedProof(proofType, verificationMethodId),\n\t\t\t\tawait Jwk.fromEd25519Private(key.privateKey)\n\t\t\t);\n\n\t\t\treturn signedProof;\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\"createProofFailed\",\n\t\t\t\tundefined,\n\t\t\t\terror\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Verify proof for arbitrary data with the specified verification method.\n\t * @param document The document to verify.\n\t * @param proof The proof to verify.\n\t * @returns True if the proof is verified.\n\t */\n\tpublic async verifyProof(document: IJsonLdNodeObject, proof: IProof): Promise<boolean> {\n\t\tGuards.object<IJsonLdNodeObject>(\n\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\tnameof(document),\n\t\t\tdocument\n\t\t);\n\t\tGuards.object<IProof>(EntityStorageIdentityConnector.CLASS_NAME, nameof(proof), proof);\n\t\tGuards.stringValue(\n\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\tnameof(proof.verificationMethod),\n\t\t\tproof.verificationMethod\n\t\t);\n\n\t\ttry {\n\t\t\tconst idParts = DocumentHelper.parseId(proof.verificationMethod);\n\t\t\tif (Is.empty(idParts.fragment)) {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\t\"missingDid\",\n\t\t\t\t\tproof.verificationMethod\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst didIdentityDocument = await this._didDocumentEntityStorage.get(idParts.id);\n\t\t\tif (Is.undefined(didIdentityDocument)) {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\t\"documentNotFound\",\n\t\t\t\t\tidParts.id\n\t\t\t\t);\n\t\t\t}\n\t\t\tawait EntityStorageIdentityConnector.verifyDocument(\n\t\t\t\tdidIdentityDocument,\n\t\t\t\tthis._vaultConnector\n\t\t\t);\n\t\t\tconst didDocument = didIdentityDocument.document;\n\n\t\t\tconst methods = this.getAllMethods(didDocument);\n\n\t\t\tconst methodAndArray = methods.find(m => {\n\t\t\t\tif (Is.string(m.method)) {\n\t\t\t\t\treturn m.method === proof.verificationMethod;\n\t\t\t\t}\n\t\t\t\treturn m.method.id === proof.verificationMethod;\n\t\t\t});\n\n\t\t\tif (!methodAndArray) {\n\t\t\t\tthrow new GeneralError(EntityStorageIdentityConnector.CLASS_NAME, \"methodMissing\", {\n\t\t\t\t\tmethod: proof.verificationMethod\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst didMethod = methodAndArray.method;\n\t\t\tif (!Is.stringValue(didMethod.publicKeyJwk?.x)) {\n\t\t\t\tthrow new GeneralError(EntityStorageIdentityConnector.CLASS_NAME, \"publicKeyJwkMissing\", {\n\t\t\t\t\tmethod: proof.verificationMethod\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst result = await ProofHelper.verifyProof(document, proof, didMethod.publicKeyJwk);\n\t\t\treturn result;\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tEntityStorageIdentityConnector.CLASS_NAME,\n\t\t\t\t\"verifyProofFailed\",\n\t\t\t\tundefined,\n\t\t\t\terror\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Get all the methods from a document.\n\t * @param document The document to get the methods from.\n\t * @returns The methods.\n\t * @internal\n\t */\n\tprivate getAllMethods(\n\t\tdocument: IDidDocument\n\t): { arrayKey: string; method: Partial<IDidDocumentVerificationMethod> }[] {\n\t\tconst methods: {\n\t\t\tarrayKey: string;\n\t\t\tmethod: Partial<IDidDocumentVerificationMethod>;\n\t\t}[] = [];\n\n\t\tconst methodTypes: DidVerificationMethodType[] = Object.values(DidVerificationMethodType);\n\n\t\tfor (const methodType of methodTypes) {\n\t\t\tconst mt = document[methodType];\n\t\t\tif (Is.arrayValue(mt)) {\n\t\t\t\tmethods.push(\n\t\t\t\t\t...mt.map(m => ({\n\t\t\t\t\t\tarrayKey: methodType,\n\t\t\t\t\t\tmethod: Is.string(m) ? { id: m } : m\n\t\t\t\t\t}))\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\treturn methods;\n\t}\n\n\t/**\n\t * Check if a revocation index is revoked.\n\t * @param document The document to check.\n\t * @param revocationBitmapIndex The revocation index to check.\n\t * @returns True if the index is revoked.\n\t * @internal\n\t */\n\tprivate async checkRevocation(\n\t\tdocument: IDidDocument,\n\t\trevocationBitmapIndex?: unknown\n\t): Promise<boolean> {\n\t\tif (Is.stringValue(revocationBitmapIndex)) {\n\t\t\tconst revocationIndex = Coerce.number(revocationBitmapIndex);\n\t\t\tif (Is.number(revocationIndex)) {\n\t\t\t\tconst revocationService = document.service?.find(s => s.id.endsWith(\"#revocation\"));\n\t\t\t\tif (\n\t\t\t\t\trevocationService &&\n\t\t\t\t\tIs.string(revocationService.serviceEndpoint) &&\n\t\t\t\t\trevocationService.type === \"BitstringStatusList\"\n\t\t\t\t) {\n\t\t\t\t\tconst revocationParts = revocationService.serviceEndpoint.split(\",\");\n\t\t\t\t\tif (revocationParts.length === 2) {\n\t\t\t\t\t\tconst compressedRevocationBytes = Converter.base64UrlToBytes(revocationParts[1]);\n\t\t\t\t\t\tconst decompressed = await Compression.decompress(\n\t\t\t\t\t\t\tcompressedRevocationBytes,\n\t\t\t\t\t\t\tCompressionType.Gzip\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tconst bitString = BitString.fromBits(\n\t\t\t\t\t\t\tdecompressed,\n\t\t\t\t\t\t\tEntityStorageIdentityConnector._REVOCATION_BITS_SIZE\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\treturn bitString.getBit(revocationIndex);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Update the document in storage.\n\t * @param controller The controller of the document.\n\t * @param didDocument The did document to store.\n\t * @internal\n\t */\n\tprivate async updateDocument(controller: string, didDocument: IDidDocument): Promise<void> {\n\t\tconst stringifiedDocument = JsonHelper.canonicalize(didDocument);\n\t\tconst docBytes = Converter.utf8ToBytes(stringifiedDocument);\n\n\t\tconst signature = await this._vaultConnector.sign(\n\t\t\tEntityStorageIdentityConnector.buildVaultKey(didDocument.id, \"did\"),\n\t\t\tdocBytes\n\t\t);\n\n\t\tawait this._didDocumentEntityStorage.set({\n\t\t\tid: didDocument.id,\n\t\t\tdocument: didDocument,\n\t\t\tsignature: Converter.bytesToBase64(signature),\n\t\t\tcontroller\n\t\t});\n\t}\n}\n"]}
package/docs/changelog.md CHANGED
@@ -1,5 +1,179 @@
1
1
  # @twin.org/identity-connector-entity-storage- Changelog
2
2
 
3
+ ## [0.0.3-next.11](https://github.com/twinfoundation/identity/compare/identity-connector-entity-storage-v0.0.3-next.10...identity-connector-entity-storage-v0.0.3-next.11) (2026-01-15)
4
+
5
+
6
+ ### Features
7
+
8
+ * add context id features ([#62](https://github.com/twinfoundation/identity/issues/62)) ([e02ecca](https://github.com/twinfoundation/identity/commit/e02ecca9c45a849104bfbf7bc18a1f44e6eea8a1))
9
+ * add expiration date option to vc creation ([73e05e1](https://github.com/twinfoundation/identity/commit/73e05e1ae61112c7e056889969751f4ff82d9f29))
10
+ * add identity remove ([eebc13f](https://github.com/twinfoundation/identity/commit/eebc13f4c2cd994d2d9cce4da2128fb346c80ba7))
11
+ * add validate-locales ([04d74b4](https://github.com/twinfoundation/identity/commit/04d74b4d1ebe42672e8ca75a7bdb8e3556afd0be))
12
+ * eslint migration to flat config ([fd6246d](https://github.com/twinfoundation/identity/commit/fd6246d566280b6d5d10a108eb1e92c4b510f2f2))
13
+ * identity key separator use slash ([1319d0d](https://github.com/twinfoundation/identity/commit/1319d0d07164a36b3ec279e6421b8835ffefc3d3))
14
+ * re-use vault keys if available ([5a848d7](https://github.com/twinfoundation/identity/commit/5a848d7520829d9c891ec889fd773fbc0ee77ba5))
15
+ * update framework core ([c824497](https://github.com/twinfoundation/identity/commit/c82449709af0215eb7af496cf687c93fb30b5ae0))
16
+ * update namespaces and contexts ([#90](https://github.com/twinfoundation/identity/issues/90)) ([0c34d64](https://github.com/twinfoundation/identity/commit/0c34d64add8cca77856fa2d0357e774d72fbbfc1))
17
+ * use new generateKid method ([f0fe779](https://github.com/twinfoundation/identity/commit/f0fe779323b675575bb9f80aa74f1957dc57a094))
18
+ * use shared store mechanism ([#27](https://github.com/twinfoundation/identity/issues/27)) ([ce41f3f](https://github.com/twinfoundation/identity/commit/ce41f3fc3da1b206ec06da7ea5b2c968f788804d))
19
+
20
+
21
+ ### Bug Fixes
22
+
23
+ * add exp to jwt payload in entity storage vc ([41f0fbd](https://github.com/twinfoundation/identity/commit/41f0fbd641b4fd1fe3b23f1a16f4748e09b31f50))
24
+ * associate vault keys with document not controller ([#86](https://github.com/twinfoundation/identity/issues/86)) ([6430f4b](https://github.com/twinfoundation/identity/commit/6430f4b559315a1fe99b60c6db1c661d317bc243))
25
+ * Import path and bump version ([#21](https://github.com/twinfoundation/identity/issues/21)) ([ccea845](https://github.com/twinfoundation/identity/commit/ccea845bf32562267280bc1b3dde1c9af1a00360))
26
+ * Install sdk-wasm ([#20](https://github.com/twinfoundation/identity/issues/20)) ([75ec14e](https://github.com/twinfoundation/identity/commit/75ec14e072f8c219863a1c028a3b0783802086e9))
27
+ * update vault key naming convention to use document ID prefix ([#94](https://github.com/twinfoundation/identity/issues/94)) ([ab125c1](https://github.com/twinfoundation/identity/commit/ab125c1b7eb189b5dceaddc69e5e53e33a0886db))
28
+
29
+
30
+ ### Dependencies
31
+
32
+ * The following workspace dependencies were updated
33
+ * dependencies
34
+ * @twin.org/identity-models bumped from 0.0.3-next.10 to 0.0.3-next.11
35
+
36
+ ## [0.0.3-next.10](https://github.com/twinfoundation/identity/compare/identity-connector-entity-storage-v0.0.3-next.9...identity-connector-entity-storage-v0.0.3-next.10) (2026-01-15)
37
+
38
+
39
+ ### Miscellaneous Chores
40
+
41
+ * **identity-connector-entity-storage:** Synchronize repo versions
42
+
43
+
44
+ ### Dependencies
45
+
46
+ * The following workspace dependencies were updated
47
+ * dependencies
48
+ * @twin.org/identity-models bumped from 0.0.3-next.9 to 0.0.3-next.10
49
+
50
+ ## [0.0.3-next.9](https://github.com/twinfoundation/identity/compare/identity-connector-entity-storage-v0.0.3-next.8...identity-connector-entity-storage-v0.0.3-next.9) (2026-01-14)
51
+
52
+
53
+ ### Bug Fixes
54
+
55
+ * update vault key naming convention to use document ID prefix ([#94](https://github.com/twinfoundation/identity/issues/94)) ([ab125c1](https://github.com/twinfoundation/identity/commit/ab125c1b7eb189b5dceaddc69e5e53e33a0886db))
56
+
57
+
58
+ ### Dependencies
59
+
60
+ * The following workspace dependencies were updated
61
+ * dependencies
62
+ * @twin.org/identity-models bumped from 0.0.3-next.8 to 0.0.3-next.9
63
+
64
+ ## [0.0.3-next.8](https://github.com/twinfoundation/identity/compare/identity-connector-entity-storage-v0.0.3-next.7...identity-connector-entity-storage-v0.0.3-next.8) (2026-01-14)
65
+
66
+
67
+ ### Features
68
+
69
+ * update namespaces and contexts ([#90](https://github.com/twinfoundation/identity/issues/90)) ([0c34d64](https://github.com/twinfoundation/identity/commit/0c34d64add8cca77856fa2d0357e774d72fbbfc1))
70
+
71
+
72
+ ### Dependencies
73
+
74
+ * The following workspace dependencies were updated
75
+ * dependencies
76
+ * @twin.org/identity-models bumped from 0.0.3-next.7 to 0.0.3-next.8
77
+
78
+ ## [0.0.3-next.7](https://github.com/twinfoundation/identity/compare/identity-connector-entity-storage-v0.0.3-next.6...identity-connector-entity-storage-v0.0.3-next.7) (2026-01-13)
79
+
80
+
81
+ ### Bug Fixes
82
+
83
+ * associate vault keys with document not controller ([#86](https://github.com/twinfoundation/identity/issues/86)) ([6430f4b](https://github.com/twinfoundation/identity/commit/6430f4b559315a1fe99b60c6db1c661d317bc243))
84
+
85
+
86
+ ### Dependencies
87
+
88
+ * The following workspace dependencies were updated
89
+ * dependencies
90
+ * @twin.org/identity-models bumped from 0.0.3-next.6 to 0.0.3-next.7
91
+
92
+ ## [0.0.3-next.6](https://github.com/twinfoundation/identity/compare/identity-connector-entity-storage-v0.0.3-next.5...identity-connector-entity-storage-v0.0.3-next.6) (2025-11-26)
93
+
94
+
95
+ ### Miscellaneous Chores
96
+
97
+ * **identity-connector-entity-storage:** Synchronize repo versions
98
+
99
+
100
+ ### Dependencies
101
+
102
+ * The following workspace dependencies were updated
103
+ * dependencies
104
+ * @twin.org/identity-models bumped from 0.0.3-next.5 to 0.0.3-next.6
105
+
106
+ ## [0.0.3-next.5](https://github.com/twinfoundation/identity/compare/identity-connector-entity-storage-v0.0.3-next.4...identity-connector-entity-storage-v0.0.3-next.5) (2025-11-20)
107
+
108
+
109
+ ### Miscellaneous Chores
110
+
111
+ * **identity-connector-entity-storage:** Synchronize repo versions
112
+
113
+
114
+ ### Dependencies
115
+
116
+ * The following workspace dependencies were updated
117
+ * dependencies
118
+ * @twin.org/identity-models bumped from 0.0.3-next.4 to 0.0.3-next.5
119
+
120
+ ## [0.0.3-next.4](https://github.com/twinfoundation/identity/compare/identity-connector-entity-storage-v0.0.3-next.3...identity-connector-entity-storage-v0.0.3-next.4) (2025-11-17)
121
+
122
+
123
+ ### Features
124
+
125
+ * add context id features ([#62](https://github.com/twinfoundation/identity/issues/62)) ([e02ecca](https://github.com/twinfoundation/identity/commit/e02ecca9c45a849104bfbf7bc18a1f44e6eea8a1))
126
+ * add expiration date option to vc creation ([73e05e1](https://github.com/twinfoundation/identity/commit/73e05e1ae61112c7e056889969751f4ff82d9f29))
127
+ * add identity remove ([eebc13f](https://github.com/twinfoundation/identity/commit/eebc13f4c2cd994d2d9cce4da2128fb346c80ba7))
128
+ * add validate-locales ([04d74b4](https://github.com/twinfoundation/identity/commit/04d74b4d1ebe42672e8ca75a7bdb8e3556afd0be))
129
+ * eslint migration to flat config ([fd6246d](https://github.com/twinfoundation/identity/commit/fd6246d566280b6d5d10a108eb1e92c4b510f2f2))
130
+ * identity key separator use slash ([1319d0d](https://github.com/twinfoundation/identity/commit/1319d0d07164a36b3ec279e6421b8835ffefc3d3))
131
+ * re-use vault keys if available ([5a848d7](https://github.com/twinfoundation/identity/commit/5a848d7520829d9c891ec889fd773fbc0ee77ba5))
132
+ * update framework core ([c824497](https://github.com/twinfoundation/identity/commit/c82449709af0215eb7af496cf687c93fb30b5ae0))
133
+ * use new generateKid method ([f0fe779](https://github.com/twinfoundation/identity/commit/f0fe779323b675575bb9f80aa74f1957dc57a094))
134
+ * use shared store mechanism ([#27](https://github.com/twinfoundation/identity/issues/27)) ([ce41f3f](https://github.com/twinfoundation/identity/commit/ce41f3fc3da1b206ec06da7ea5b2c968f788804d))
135
+
136
+
137
+ ### Bug Fixes
138
+
139
+ * Import path and bump version ([#21](https://github.com/twinfoundation/identity/issues/21)) ([ccea845](https://github.com/twinfoundation/identity/commit/ccea845bf32562267280bc1b3dde1c9af1a00360))
140
+ * Install sdk-wasm ([#20](https://github.com/twinfoundation/identity/issues/20)) ([75ec14e](https://github.com/twinfoundation/identity/commit/75ec14e072f8c219863a1c028a3b0783802086e9))
141
+
142
+
143
+ ### Dependencies
144
+
145
+ * The following workspace dependencies were updated
146
+ * dependencies
147
+ * @twin.org/identity-models bumped from 0.0.3-next.3 to 0.0.3-next.4
148
+
149
+ ## [0.0.3-next.3](https://github.com/twinfoundation/identity/compare/identity-connector-entity-storage-v0.0.3-next.2...identity-connector-entity-storage-v0.0.3-next.3) (2025-11-17)
150
+
151
+
152
+ ### Miscellaneous Chores
153
+
154
+ * **identity-connector-entity-storage:** Synchronize repo versions
155
+
156
+
157
+ ### Dependencies
158
+
159
+ * The following workspace dependencies were updated
160
+ * dependencies
161
+ * @twin.org/identity-models bumped from 0.0.3-next.2 to 0.0.3-next.3
162
+
163
+ ## [0.0.3-next.2](https://github.com/twinfoundation/identity/compare/identity-connector-entity-storage-v0.0.3-next.1...identity-connector-entity-storage-v0.0.3-next.2) (2025-11-14)
164
+
165
+
166
+ ### Miscellaneous Chores
167
+
168
+ * **identity-connector-entity-storage:** Synchronize repo versions
169
+
170
+
171
+ ### Dependencies
172
+
173
+ * The following workspace dependencies were updated
174
+ * dependencies
175
+ * @twin.org/identity-models bumped from 0.0.3-next.1 to 0.0.3-next.2
176
+
3
177
  ## [0.0.3-next.1](https://github.com/twinfoundation/identity/compare/identity-connector-entity-storage-v0.0.3-next.0...identity-connector-entity-storage-v0.0.3-next.1) (2025-11-11)
4
178
 
5
179
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@twin.org/identity-connector-entity-storage",
3
- "version": "0.0.3-next.1",
3
+ "version": "0.0.3-next.11",
4
4
  "description": "Identity connector implementation using entity storage",
5
5
  "repository": {
6
6
  "type": "git",
@@ -19,7 +19,7 @@
19
19
  "@twin.org/data-core": "next",
20
20
  "@twin.org/data-json-ld": "next",
21
21
  "@twin.org/entity": "next",
22
- "@twin.org/identity-models": "0.0.3-next.1",
22
+ "@twin.org/identity-models": "0.0.3-next.11",
23
23
  "@twin.org/nameof": "next",
24
24
  "@twin.org/standards-w3c-did": "next",
25
25
  "@twin.org/vault-models": "next",