@sphereon/ssi-sdk.credential-vcdm 0.33.1-feature.jose.vcdm.56 → 0.33.1-feature.jose.vcdm.58

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -38,6 +38,8 @@ __export(index_exports, {
38
38
  extractIssuer: () => extractIssuer2,
39
39
  isRevoked: () => isRevoked,
40
40
  pickSigningKey: () => pickSigningKey,
41
+ preProcessCredentialPayload: () => preProcessCredentialPayload,
42
+ preProcessPresentation: () => preProcessPresentation,
41
43
  removeDIDParameters: () => removeDIDParameters
42
44
  });
43
45
  module.exports = __toCommonJS(index_exports);
@@ -152,14 +154,15 @@ var W3cMessageHandler = class extends import_message_handler.AbstractMessageHand
152
154
  }
153
155
  };
154
156
 
155
- // src/action-handler.ts
157
+ // src/vcdmCredentialPlugin.ts
156
158
  var import_core = require("@veramo/core");
157
- var import_utils3 = require("@veramo/utils");
158
159
  var import_debug2 = __toESM(require("debug"), 1);
159
160
 
160
161
  // src/functions.ts
161
162
  var import_utils2 = require("@veramo/utils");
162
163
  var import_did_jwt = require("did-jwt");
164
+ var import_ssi_types = require("@sphereon/ssi-types");
165
+ var import_ssi_sdk_ext = require("@sphereon/ssi-sdk-ext.did-utils");
163
166
  function extractIssuer2(input, options = {}) {
164
167
  if (!(0, import_utils2.isDefined)(input)) {
165
168
  return "";
@@ -189,15 +192,12 @@ function removeDIDParameters(did) {
189
192
  return did.replace(/\?.*$/, "");
190
193
  }
191
194
  __name(removeDIDParameters, "removeDIDParameters");
192
- function pickSigningKey(identifier, keyRef) {
193
- let key;
194
- if (!keyRef) {
195
- key = identifier.keys.find((k) => k.type === "Secp256k1" || k.type === "Ed25519" || k.type === "Secp256r1");
196
- if (!key) throw Error("key_not_found: No signing key for " + identifier.did);
197
- } else {
198
- key = identifier.keys.find((k) => k.kid === keyRef);
199
- if (!key) throw Error("key_not_found: No signing key for " + identifier.did + " with kid " + keyRef);
200
- }
195
+ async function pickSigningKey({ identifier, kmsKeyRef }, context) {
196
+ const key = await (0, import_ssi_sdk_ext.getKey)({
197
+ identifier,
198
+ vmRelationship: "assertionMethod",
199
+ kmsKeyRef
200
+ }, context);
201
201
  return key;
202
202
  }
203
203
  __name(pickSigningKey, "pickSigningKey");
@@ -212,8 +212,96 @@ async function isRevoked(credential, context) {
212
212
  throw new Error(`invalid_setup: The credential status can't be verified because there is no ICredentialStatusVerifier plugin installed.`);
213
213
  }
214
214
  __name(isRevoked, "isRevoked");
215
+ function preProcessCredentialPayload({ credential, now = /* @__PURE__ */ new Date() }) {
216
+ const credentialContext = (0, import_ssi_types.addVcdmContextIfNeeded)(credential?.["@context"]);
217
+ const isVdcm1 = (0, import_ssi_types.isVcdm1Credential)(credential);
218
+ const isVdcm2 = (0, import_ssi_types.isVcdm2Credential)(credential);
219
+ const credentialType = (0, import_utils2.processEntryToArray)(credential?.type, "VerifiableCredential");
220
+ let issuanceDate = credential?.validFrom ?? credential?.issuanceDate ?? (typeof now === "number" ? new Date(now) : now).toISOString();
221
+ let expirationDate = credential?.validUntil ?? credential?.expirationDate;
222
+ if (issuanceDate instanceof Date) {
223
+ issuanceDate = issuanceDate.toISOString();
224
+ }
225
+ const credentialPayload = {
226
+ ...credential,
227
+ "@context": credentialContext,
228
+ type: credentialType,
229
+ ...isVdcm1 && {
230
+ issuanceDate
231
+ },
232
+ ...isVdcm1 && expirationDate && {
233
+ expirationDate
234
+ },
235
+ ...isVdcm2 && {
236
+ validFrom: issuanceDate
237
+ },
238
+ ...isVdcm2 && expirationDate && {
239
+ validUntil: expirationDate
240
+ }
241
+ };
242
+ if (isVdcm1) {
243
+ delete credentialPayload.validFrom;
244
+ delete credentialPayload.validUntil;
245
+ } else if (isVdcm2) {
246
+ delete credentialPayload.issuanceDate;
247
+ delete credentialPayload.expirationDate;
248
+ }
249
+ const issuer = extractIssuer2(credentialPayload, {
250
+ removeParameters: true
251
+ });
252
+ if (!issuer || typeof issuer === "undefined") {
253
+ throw new Error("invalid_argument: args.credential.issuer must not be empty");
254
+ }
255
+ return {
256
+ credential: credentialPayload,
257
+ issuer,
258
+ now
259
+ };
260
+ }
261
+ __name(preProcessCredentialPayload, "preProcessCredentialPayload");
262
+ function preProcessPresentation(args) {
263
+ const { presentation, now = /* @__PURE__ */ new Date() } = args;
264
+ const credentials = presentation?.verifiableCredential ?? [];
265
+ const v1Credential = credentials.find((cred) => typeof cred === "object" && cred["@context"].includes(import_ssi_types.VCDM_CREDENTIAL_CONTEXT_V1)) ? import_ssi_types.VCDM_CREDENTIAL_CONTEXT_V1 : void 0;
266
+ const v2Credential = credentials.find((cred) => typeof cred === "object" && cred["@context"].includes(import_ssi_types.VCDM_CREDENTIAL_CONTEXT_V2)) ? import_ssi_types.VCDM_CREDENTIAL_CONTEXT_V2 : void 0;
267
+ const presentationContext = (0, import_ssi_types.addVcdmContextIfNeeded)(args?.presentation?.["@context"] ?? [], v2Credential ?? v1Credential ?? import_ssi_types.VCDM_CREDENTIAL_CONTEXT_V2);
268
+ const presentationType = (0, import_utils2.processEntryToArray)(args?.presentation?.type, "VerifiablePresentation");
269
+ let issuanceDate = presentation?.validFrom ?? presentation?.issuanceDate ?? (typeof now === "number" ? new Date(now) : now).toISOString();
270
+ if (issuanceDate instanceof Date) {
271
+ issuanceDate = issuanceDate.toISOString();
272
+ }
273
+ const presentationPayload = {
274
+ ...presentation,
275
+ "@context": presentationContext,
276
+ type: presentationType,
277
+ ...v1Credential && {
278
+ issuanceDate
279
+ },
280
+ ...v2Credential && {
281
+ validFrom: issuanceDate
282
+ }
283
+ };
284
+ if (!(0, import_utils2.isDefined)(presentationPayload.holder) || !presentationPayload.holder) {
285
+ throw new Error("invalid_argument: args.presentation.holderDID must not be empty");
286
+ }
287
+ if (presentationPayload.verifiableCredential) {
288
+ presentationPayload.verifiableCredential = presentationPayload.verifiableCredential.map((cred) => {
289
+ if (typeof cred !== "string" && cred.proof.jwt) {
290
+ return cred.proof.jwt;
291
+ } else {
292
+ return cred;
293
+ }
294
+ });
295
+ }
296
+ return {
297
+ presentation: presentationPayload,
298
+ holder: removeDIDParameters(presentationPayload.holder)
299
+ };
300
+ }
301
+ __name(preProcessPresentation, "preProcessPresentation");
215
302
 
216
- // src/action-handler.ts
303
+ // src/vcdmCredentialPlugin.ts
304
+ var import_ssi_sdk = require("@sphereon/ssi-sdk.core");
217
305
  var debug2 = (0, import_debug2.default)("sphereon:ssi-sdk:vcdm");
218
306
  var VcdmCredentialPlugin = class {
219
307
  static {
@@ -258,29 +346,10 @@ var VcdmCredentialPlugin = class {
258
346
  /** {@inheritdoc @veramo/core#ICredentialIssuer.createVerifiableCredential} */
259
347
  async createVerifiableCredential(args, context) {
260
348
  let {
261
- credential,
262
- proofFormat,
263
- /* keyRef, removeOriginalFields,*/
264
- now
265
- /*, ...otherOptions */
349
+ proofFormat
350
+ /* keyRef, removeOriginalFields, now , ...otherOptions */
266
351
  } = args;
267
- const credentialContext = (0, import_utils3.processEntryToArray)(credential["@context"], import_utils3.MANDATORY_CREDENTIAL_CONTEXT);
268
- const credentialType = (0, import_utils3.processEntryToArray)(credential.type, "VerifiableCredential");
269
- now = typeof now === "number" ? new Date(now * 1e3) : now;
270
- if (!Object.getOwnPropertyNames(credential).includes("issuanceDate")) {
271
- credential.issuanceDate = (now instanceof Date ? now : /* @__PURE__ */ new Date()).toISOString();
272
- }
273
- credential = {
274
- ...credential,
275
- "@context": credentialContext,
276
- type: credentialType
277
- };
278
- const issuer = extractIssuer2(credential, {
279
- removeParameters: true
280
- });
281
- if (!issuer || typeof issuer === "undefined") {
282
- throw new Error("invalid_argument: credential.issuer must not be empty");
283
- }
352
+ const { credential, issuer, now } = preProcessCredentialPayload(args);
284
353
  try {
285
354
  await context.agent.didManagerGet({
286
355
  did: issuer
@@ -294,10 +363,14 @@ var VcdmCredentialPlugin = class {
294
363
  if (issuer2.canIssueCredentialType({
295
364
  proofFormat
296
365
  })) {
297
- return await issuer2.createVerifiableCredential(args, context);
366
+ return await issuer2.createVerifiableCredential({
367
+ ...args,
368
+ credential,
369
+ now
370
+ }, context);
298
371
  }
299
372
  }
300
- throw new Error("invalid_setup: No issuer found for the requested proof format");
373
+ throw new Error(`invalid_setup: No issuer found for the requested proof format: ${proofFormat}, supported: ${issuers.map((i) => i.getTypeProofFormat()).join(",")}`);
301
374
  }
302
375
  __name(findAndIssueCredential, "findAndIssueCredential");
303
376
  const verifiableCredential = await findAndIssueCredential(this.issuers);
@@ -326,7 +399,7 @@ var VcdmCredentialPlugin = class {
326
399
  return issuer.verifyCredential(args, context);
327
400
  }
328
401
  }
329
- return Promise.reject(Error("invalid_setup: No issuer found for the provided credential"));
402
+ return Promise.reject(Error(`invalid_setup: No verifier found for the provided credential credential type: ${JSON.stringify(args.credential.type)} proof type ${(0, import_ssi_sdk.asArray)(args.credential.proof)?.[0]?.type} supported: ${issuers.map((i) => i.getTypeProofFormat()).join(",")}`));
330
403
  }
331
404
  __name(findAndVerifyCredential, "findAndVerifyCredential");
332
405
  verificationResult = await findAndVerifyCredential(this.issuers);
@@ -344,36 +417,21 @@ var VcdmCredentialPlugin = class {
344
417
  }
345
418
  /** {@inheritdoc @veramo/core#ICredentialIssuer.createVerifiablePresentation} */
346
419
  async createVerifiablePresentation(args, context) {
347
- let { presentation, proofFormat } = args;
348
- const presentationContext = (0, import_utils3.processEntryToArray)(args?.presentation?.["@context"], import_utils3.MANDATORY_CREDENTIAL_CONTEXT);
349
- const presentationType = (0, import_utils3.processEntryToArray)(args?.presentation?.type, "VerifiablePresentation");
350
- presentation = {
351
- ...presentation,
352
- "@context": presentationContext,
353
- type: presentationType
354
- };
355
- if (!(0, import_utils3.isDefined)(presentation.holder)) {
356
- throw new Error("invalid_argument: presentation.holder must not be empty");
357
- }
358
- if (presentation.verifiableCredential) {
359
- presentation.verifiableCredential = presentation.verifiableCredential.map((cred) => {
360
- if (typeof cred !== "string" && cred.proof.jwt) {
361
- return cred.proof.jwt;
362
- } else {
363
- return cred;
364
- }
365
- });
366
- }
420
+ const { proofFormat } = args;
421
+ const { presentation } = preProcessPresentation(args);
367
422
  let verifiablePresentation;
368
423
  async function findAndCreatePresentation(issuers) {
369
424
  for (const issuer of issuers) {
370
425
  if (issuer.canIssueCredentialType({
371
426
  proofFormat
372
427
  })) {
373
- return await issuer.createVerifiablePresentation(args, context);
428
+ return await issuer.createVerifiablePresentation({
429
+ ...args,
430
+ presentation
431
+ }, context);
374
432
  }
375
433
  }
376
- throw new Error("invalid_setup: No issuer found for the requested proof format");
434
+ throw new Error(`invalid_setup: No issuer found for the requested proof format: ${proofFormat}, supported: ${issuers.map((i) => i.getTypeProofFormat()).join(",")}`);
377
435
  }
378
436
  __name(findAndCreatePresentation, "findAndCreatePresentation");
379
437
  verifiablePresentation = await findAndCreatePresentation(this.issuers);
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/message-handler.ts","../src/action-handler.ts","../src/functions.ts"],"sourcesContent":["/**\n * Provides a {@link @veramo/credential-w3c#CredentialPlugin | plugin} for the {@link @veramo/core#Agent} that\n * implements\n * {@link @veramo/core#ICredentialIssuer} interface.\n *\n * Provides a {@link @veramo/credential-w3c#W3cMessageHandler | plugin} for the\n * {@link @veramo/message-handler#MessageHandler} that verifies Credentials and Presentations in a message.\n *\n * @packageDocumentation\n */\nexport type * from './types'\nexport { W3cMessageHandler, MessageTypes } from './message-handler'\nimport { VcdmCredentialPlugin } from './action-handler'\n\n/**\n * @deprecated please use {@link VcdmCredentialPlugin} instead\n * @public\n */\nconst CredentialIssuer = VcdmCredentialPlugin\nexport { CredentialIssuer, VcdmCredentialPlugin }\n\n// For backward compatibility, re-export the plugin types that were moved to core in v4\nexport type { ICredentialIssuer, ICredentialVerifier } from '@veramo/core'\n\nexport * from './functions'\n","import type {\n IAgentContext,\n ICredentialVerifier,\n IResolver,\n VerifiableCredential,\n VerifiablePresentation,\n} from '@veramo/core'\nimport { AbstractMessageHandler, Message } from '@veramo/message-handler'\nimport { asArray, computeEntryHash, decodeCredentialToObject, extractIssuer } from '@veramo/utils'\n\nimport {\n normalizeCredential,\n normalizePresentation,\n validateJwtCredentialPayload,\n validateJwtPresentationPayload,\n}// @ts-ignore\nfrom 'did-jwt-vc'\n\nimport { v4 as uuidv4 } from 'uuid'\nimport Debug from 'debug'\n\nconst debug = Debug('sphereon:vcdm:message-handler')\n\n/**\n * These types are used by `@veramo/data-store` when storing Verifiable Credentials and Presentations\n *\n * @internal\n */\nexport const MessageTypes = {\n /** Represents a Verifiable Credential */\n vc: 'w3c.vc',\n /** Represents a Verifiable Presentation */\n vp: 'w3c.vp',\n}\n\n/**\n * Represents the requirements that this plugin has.\n * The agent that is using this plugin is expected to provide these methods.\n *\n * This interface can be used for static type checks, to make sure your application is properly initialized.\n */\nexport type IContext = IAgentContext<IResolver & ICredentialVerifier>\n\n/**\n * An implementation of the {@link @veramo/message-handler#AbstractMessageHandler}.\n *\n * This plugin can handle incoming W3C Verifiable Credentials and Presentations and prepare them\n * for internal storage as {@link @veramo/message-handler#Message} types.\n *\n * The current version can only handle `JWT` encoded\n *\n * @remarks {@link @veramo/core#IDataStore | IDataStore }\n *\n * @public\n */\nexport class W3cMessageHandler extends AbstractMessageHandler {\n async handle(message: Message, context: IContext): Promise<Message> {\n const meta = message.getLastMetaData()\n\n // console.log(JSON.stringify(message, null, 2))\n\n //FIXME: messages should not be expected to be only JWT\n if (meta?.type === 'JWT' && message.raw) {\n const { data } = message\n\n try {\n validateJwtPresentationPayload(data)\n\n //FIXME: flagging this for potential privacy leaks\n debug('JWT is', MessageTypes.vp)\n const presentation = normalizePresentation(message.raw)\n const credentials = presentation.verifiableCredential\n\n message.id = computeEntryHash(message.raw)\n message.type = MessageTypes.vp\n message.from = presentation.holder\n message.to = presentation.verifier?.[0]\n\n if (presentation.tag) {\n message.threadId = presentation.tag\n }\n\n message.createdAt = presentation.issuanceDate\n message.presentations = [presentation]\n message.credentials = credentials\n\n return message\n } catch (e) {}\n\n try {\n validateJwtCredentialPayload(data)\n //FIXME: flagging this for potential privacy leaks\n debug('JWT is', MessageTypes.vc)\n const credential = normalizeCredential(message.raw)\n\n message.id = computeEntryHash(message.raw)\n message.type = MessageTypes.vc\n message.from = credential.issuer.id\n message.to = credential.credentialSubject.id\n\n if (credential.tag) {\n message.threadId = credential.tag\n }\n\n message.createdAt = credential.issuanceDate\n message.credentials = [credential]\n return message\n } catch (e) {}\n }\n\n // LDS Verification and Handling\n if (message.type === MessageTypes.vc && message.data) {\n // verify credential\n const credential = message.data as VerifiableCredential\n\n const result = await context.agent.verifyCredential({ credential })\n if (result.verified) {\n message.id = computeEntryHash(message.raw || message.id || uuidv4())\n message.type = MessageTypes.vc\n message.from = extractIssuer(credential)\n message.to = credential.credentialSubject.id\n\n if (credential.tag) {\n message.threadId = credential.tag\n }\n\n message.createdAt = credential.issuanceDate\n message.credentials = [credential]\n return message\n } else {\n throw new Error(result.error?.message)\n }\n }\n\n if (message.type === MessageTypes.vp && message.data) {\n // verify presentation\n const presentation = message.data as VerifiablePresentation\n\n // throws on error.\n const result = await context.agent.verifyPresentation({\n presentation,\n // FIXME: HARDCODED CHALLENGE VERIFICATION FOR NOW\n challenge: 'VERAMO',\n domain: 'VERAMO',\n })\n if (result.verified) {\n message.id = computeEntryHash(message.raw || message.id || uuidv4())\n message.type = MessageTypes.vp\n message.from = presentation.holder\n // message.to = presentation.verifier?.[0]\n\n if (presentation.tag) {\n message.threadId = presentation.tag\n }\n\n // message.createdAt = presentation.issuanceDate\n message.presentations = [presentation]\n message.credentials = asArray(presentation.verifiableCredential).map(decodeCredentialToObject)\n return message\n } else {\n throw new Error(result.error?.message)\n }\n }\n\n return super.handle(message, context)\n }\n}\n","import type { IAgentPlugin, IIdentifier, IVerifyResult, VerifiableCredential, VerifiablePresentation } from '@veramo/core'\nimport { schema } from '@veramo/core'\n\nimport type {\n ICreateVerifiableCredentialLDArgs,\n ICreateVerifiablePresentationLDArgs,\n IVcdmCredentialPlugin,\n IVcdmCredentialProvider,\n IVcdmIssuerAgentContext,\n IVcdmVerifierAgentContext,\n IVerifyCredentialLDArgs,\n IVerifyPresentationLDArgs,\n} from './types'\n\nimport { isDefined, MANDATORY_CREDENTIAL_CONTEXT, processEntryToArray } from '@veramo/utils'\nimport Debug from 'debug'\nimport { extractIssuer, isRevoked } from './functions'\nimport type { W3CVerifiableCredential, W3CVerifiablePresentation } from '@sphereon/ssi-types'\nimport type { VerifiableCredentialSP, VerifiablePresentationSP } from '@sphereon/ssi-sdk.core'\n\nconst debug = Debug('sphereon:ssi-sdk:vcdm')\n\n/**\n * A plugin that implements the {@link @sphereon/ssi-sdk.credential-vcdm#IVcdmCredentialPlugin} methods.\n *\n * @public\n */\nexport class VcdmCredentialPlugin implements IAgentPlugin {\n readonly methods: IVcdmCredentialPlugin\n readonly schema = {\n components: {\n schemas: {\n ...schema.ICredentialIssuer.components.schemas,\n ...schema.ICredentialVerifier.components.schemas,\n },\n methods: {\n ...schema.ICredentialIssuer.components.methods,\n ...schema.ICredentialVerifier.components.methods,\n },\n },\n }\n private issuers: IVcdmCredentialProvider[]\n\n constructor(options: { issuers: IVcdmCredentialProvider[] }) {\n this.issuers = options.issuers\n this.methods = {\n listUsableProofFormats: this.listUsableProofFormats.bind(this),\n createVerifiableCredential: this.createVerifiableCredential.bind(this),\n verifyCredential: this.verifyCredential.bind(this),\n createVerifiablePresentation: this.createVerifiablePresentation.bind(this),\n verifyPresentation: this.verifyPresentation.bind(this),\n }\n }\n\n async listUsableProofFormats(did: IIdentifier, context: IVcdmIssuerAgentContext): Promise<string[]> {\n const signingOptions: string[] = []\n const keys = did.keys\n for (const key of keys) {\n for (const issuer of this.issuers) {\n if (issuer.matchKeyForType(key)) {\n signingOptions.push(issuer.getTypeProofFormat())\n }\n }\n }\n return signingOptions\n }\n\n /** {@inheritdoc @veramo/core#ICredentialIssuer.createVerifiableCredential} */\n async createVerifiableCredential(args: ICreateVerifiableCredentialLDArgs, context: IVcdmIssuerAgentContext): Promise<VerifiableCredentialSP> {\n let { credential, proofFormat, /* keyRef, removeOriginalFields,*/ now /*, ...otherOptions */ } = args\n const credentialContext = processEntryToArray(credential['@context'], MANDATORY_CREDENTIAL_CONTEXT)\n const credentialType = processEntryToArray(credential.type, 'VerifiableCredential')\n\n // only add issuanceDate for JWT\n now = typeof now === 'number' ? new Date(now * 1000) : now\n if (!Object.getOwnPropertyNames(credential).includes('issuanceDate')) {\n credential.issuanceDate = (now instanceof Date ? now : new Date()).toISOString()\n }\n\n credential = {\n ...credential,\n '@context': credentialContext,\n type: credentialType,\n }\n\n //FIXME: if the identifier is not found, the error message should reflect that.\n const issuer = extractIssuer(credential, { removeParameters: true })\n if (!issuer || typeof issuer === 'undefined') {\n throw new Error('invalid_argument: credential.issuer must not be empty')\n }\n\n try {\n await context.agent.didManagerGet({ did: issuer })\n } catch (e) {\n throw new Error(`invalid_argument: credential.issuer must be a DID managed by this agent. ${e}`)\n }\n try {\n async function findAndIssueCredential(issuers: IVcdmCredentialProvider[]) {\n for (const issuer of issuers) {\n if (issuer.canIssueCredentialType({ proofFormat })) {\n return await issuer.createVerifiableCredential(args, context)\n }\n }\n throw new Error('invalid_setup: No issuer found for the requested proof format')\n }\n const verifiableCredential = await findAndIssueCredential(this.issuers)\n return verifiableCredential\n } catch (error) {\n debug(error)\n return Promise.reject(error)\n }\n }\n\n /** {@inheritdoc @veramo/core#ICredentialVerifier.verifyCredential} */\n async verifyCredential(args: IVerifyCredentialLDArgs, context: IVcdmVerifierAgentContext): Promise<IVerifyResult> {\n let { credential, policies /*, ...otherOptions*/ } = args\n let verifiedCredential: VerifiableCredential\n let verificationResult: IVerifyResult | undefined = { verified: false }\n\n async function findAndVerifyCredential(issuers: IVcdmCredentialProvider[]): Promise<IVerifyResult> {\n for (const issuer of issuers) {\n if (issuer.canVerifyDocumentType({ document: credential as W3CVerifiableCredential })) {\n return issuer.verifyCredential(args, context)\n }\n }\n return Promise.reject(Error('invalid_setup: No issuer found for the provided credential'))\n }\n verificationResult = await findAndVerifyCredential(this.issuers)\n verifiedCredential = <VerifiableCredential>credential\n\n if (policies?.credentialStatus !== false && (await isRevoked(verifiedCredential, context as any))) {\n verificationResult = {\n verified: false,\n error: {\n message: 'revoked: The credential was revoked by the issuer',\n errorCode: 'revoked',\n },\n }\n }\n\n return verificationResult\n }\n\n /** {@inheritdoc @veramo/core#ICredentialIssuer.createVerifiablePresentation} */\n async createVerifiablePresentation(args: ICreateVerifiablePresentationLDArgs, context: IVcdmIssuerAgentContext): Promise<VerifiablePresentationSP> {\n let {\n presentation,\n proofFormat,\n /* domain,\n challenge,\n removeOriginalFields,\n keyRef,*/\n // save,\n /*now,*/\n /*...otherOptions*/\n } = args\n const presentationContext: string[] = processEntryToArray(args?.presentation?.['@context'], MANDATORY_CREDENTIAL_CONTEXT)\n const presentationType = processEntryToArray(args?.presentation?.type, 'VerifiablePresentation')\n presentation = {\n ...presentation,\n '@context': presentationContext,\n type: presentationType,\n }\n\n if (!isDefined(presentation.holder)) {\n throw new Error('invalid_argument: presentation.holder must not be empty')\n }\n\n if (presentation.verifiableCredential) {\n presentation.verifiableCredential = presentation.verifiableCredential.map((cred) => {\n // map JWT credentials to their canonical form\n if (typeof cred !== 'string' && cred.proof.jwt) {\n return cred.proof.jwt\n } else {\n return cred\n }\n })\n }\n\n let verifiablePresentation: VerifiablePresentation | undefined\n\n async function findAndCreatePresentation(issuers: IVcdmCredentialProvider[]) {\n for (const issuer of issuers) {\n if (issuer.canIssueCredentialType({ proofFormat })) {\n return await issuer.createVerifiablePresentation(args, context)\n }\n }\n throw new Error('invalid_setup: No issuer found for the requested proof format')\n }\n\n verifiablePresentation = await findAndCreatePresentation(this.issuers)\n return verifiablePresentation as VerifiablePresentationSP // fixme: this is a hack to get around the fact that the return type is not correct.\n }\n\n /** {@inheritdoc @veramo/core#ICredentialVerifier.verifyPresentation} */\n async verifyPresentation(args: IVerifyPresentationLDArgs, context: IVcdmVerifierAgentContext): Promise<IVerifyResult> {\n let { presentation /*domain, challenge, fetchRemoteContexts, policies, ...otherOptions*/ } = args\n async function findAndVerifyPresentation(issuers: IVcdmCredentialProvider[]): Promise<IVerifyResult> {\n for (const issuer of issuers) {\n if (issuer.canVerifyDocumentType({ document: presentation as W3CVerifiablePresentation })) {\n return issuer.verifyPresentation(args, context)\n }\n }\n throw new Error('invalid_setup: No verifier found for the provided presentation')\n }\n const result = await findAndVerifyPresentation(this.issuers)\n return result\n }\n}\n","import {\n CredentialPayload,\n IAgentContext, ICredentialStatusVerifier,\n IIdentifier,\n IKey,\n IssuerType,\n PresentationPayload,\n VerifiableCredential,\n W3CVerifiableCredential,\n W3CVerifiablePresentation\n} from '@veramo/core'\nimport { isDefined } from '@veramo/utils'\nimport { decodeJWT } from 'did-jwt'\n\n/**\n * Decodes a credential or presentation and returns the issuer ID\n * `iss` from a JWT or `issuer`/`issuer.id` from a VC or `holder` from a VP\n *\n * @param input - the credential or presentation whose issuer/holder needs to be extracted.\n * @param options - options for the extraction\n * removeParameters - Remove all DID parameters from the issuer ID\n *\n * @beta This API may change without a BREAKING CHANGE notice.\n */\nexport function extractIssuer(\n input?:\n | W3CVerifiableCredential\n | W3CVerifiablePresentation\n | CredentialPayload\n | PresentationPayload\n | null,\n options: { removeParameters?: boolean } = {}\n): string {\n if (!isDefined(input)) {\n return ''\n } else if (typeof input === 'string') {\n // JWT\n try {\n const { payload } = decodeJWT(input.split(`~`)[0])\n const iss = payload.iss ?? ''\n return !!options.removeParameters ? removeDIDParameters(iss) : iss\n } catch (e: any) {\n return ''\n }\n } else {\n // JSON\n let iss: IssuerType\n if (input.issuer) {\n iss = input.issuer\n } else if (input.holder) {\n iss = input.holder\n } else {\n iss = ''\n }\n if (typeof iss !== 'string') iss = iss.id ?? ''\n return !!options.removeParameters ? removeDIDParameters(iss) : iss\n }\n}\n\n\n/**\n * Remove all DID parameters from a DID url after the query part (?)\n *\n * @param did - the DID URL\n *\n * @beta This API may change without a BREAKING CHANGE notice.\n */\nexport function removeDIDParameters(did: string): string {\n return did.replace(/\\?.*$/, '')\n}\n\n\nexport function pickSigningKey(identifier: IIdentifier, keyRef?: string): IKey {\n let key: IKey | undefined\n\n if (!keyRef) {\n key = identifier.keys.find((k) => k.type === 'Secp256k1' || k.type === 'Ed25519' || k.type === 'Secp256r1')\n if (!key) throw Error('key_not_found: No signing key for ' + identifier.did)\n } else {\n key = identifier.keys.find((k) => k.kid === keyRef)\n if (!key) throw Error('key_not_found: No signing key for ' + identifier.did + ' with kid ' + keyRef)\n }\n\n return key as IKey\n}\n\nexport async function isRevoked(credential: VerifiableCredential, context: IAgentContext<ICredentialStatusVerifier>): Promise<boolean> {\n if (!credential.credentialStatus) return false\n\n if (typeof context.agent.checkCredentialStatus === 'function') {\n const status = await context.agent.checkCredentialStatus({ credential })\n return status?.revoked == true || status?.verified === false\n }\n\n throw new Error(`invalid_setup: The credential status can't be verified because there is no ICredentialStatusVerifier plugin installed.`)\n}\n"],"mappings":"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","names":["extractIssuer","debug","Debug","MessageTypes","vc","vp","W3cMessageHandler","AbstractMessageHandler","handle","message","context","meta","getLastMetaData","type","raw","data","validateJwtPresentationPayload","presentation","normalizePresentation","credentials","verifiableCredential","id","computeEntryHash","from","holder","to","verifier","tag","threadId","createdAt","issuanceDate","presentations","e","validateJwtCredentialPayload","credential","normalizeCredential","issuer","credentialSubject","result","agent","verifyCredential","verified","uuidv4","extractIssuer","Error","error","verifyPresentation","challenge","domain","asArray","map","decodeCredentialToObject","import_utils","import_debug","import_utils","extractIssuer","input","options","isDefined","payload","decodeJWT","split","iss","removeParameters","removeDIDParameters","e","issuer","holder","id","did","replace","pickSigningKey","identifier","keyRef","key","keys","find","k","type","Error","kid","isRevoked","credential","context","credentialStatus","agent","checkCredentialStatus","status","revoked","verified","debug","Debug","VcdmCredentialPlugin","methods","schema","components","schemas","ICredentialIssuer","ICredentialVerifier","issuers","constructor","options","listUsableProofFormats","bind","createVerifiableCredential","verifyCredential","createVerifiablePresentation","verifyPresentation","did","context","signingOptions","keys","key","issuer","matchKeyForType","push","getTypeProofFormat","args","credential","proofFormat","now","credentialContext","processEntryToArray","MANDATORY_CREDENTIAL_CONTEXT","credentialType","type","Date","Object","getOwnPropertyNames","includes","issuanceDate","toISOString","extractIssuer","removeParameters","Error","agent","didManagerGet","e","findAndIssueCredential","canIssueCredentialType","verifiableCredential","error","Promise","reject","policies","verifiedCredential","verificationResult","verified","findAndVerifyCredential","canVerifyDocumentType","document","credentialStatus","isRevoked","message","errorCode","presentation","presentationContext","presentationType","isDefined","holder","map","cred","proof","jwt","verifiablePresentation","findAndCreatePresentation","findAndVerifyPresentation","result","CredentialIssuer","VcdmCredentialPlugin"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/message-handler.ts","../src/vcdmCredentialPlugin.ts","../src/functions.ts"],"sourcesContent":["/**\n * Provides a {@link @veramo/credential-w3c#CredentialPlugin | plugin} for the {@link @veramo/core#Agent} that\n * implements\n * {@link @veramo/core#ICredentialIssuer} interface.\n *\n * Provides a {@link @veramo/credential-w3c#W3cMessageHandler | plugin} for the\n * {@link @veramo/message-handler#MessageHandler} that verifies Credentials and Presentations in a message.\n *\n * @packageDocumentation\n */\nexport type * from './types'\nexport { W3cMessageHandler, MessageTypes } from './message-handler'\nimport { VcdmCredentialPlugin } from './vcdmCredentialPlugin'\n\n/**\n * @deprecated please use {@link VcdmCredentialPlugin} instead\n * @public\n */\nconst CredentialIssuer = VcdmCredentialPlugin\nexport { CredentialIssuer, VcdmCredentialPlugin }\n\n// For backward compatibility, re-export the plugin types that were moved to core in v4\nexport type { ICredentialIssuer, ICredentialVerifier } from '@veramo/core'\n\nexport * from './functions'\n","import type {\n IAgentContext,\n ICredentialVerifier,\n IResolver,\n VerifiableCredential,\n VerifiablePresentation,\n} from '@veramo/core'\nimport { AbstractMessageHandler, Message } from '@veramo/message-handler'\nimport { asArray, computeEntryHash, decodeCredentialToObject, extractIssuer } from '@veramo/utils'\n\nimport {\n normalizeCredential,\n normalizePresentation,\n validateJwtCredentialPayload,\n validateJwtPresentationPayload,\n}// @ts-ignore\nfrom 'did-jwt-vc'\n\nimport { v4 as uuidv4 } from 'uuid'\nimport Debug from 'debug'\n\nconst debug = Debug('sphereon:vcdm:message-handler')\n\n/**\n * These types are used by `@veramo/data-store` when storing Verifiable Credentials and Presentations\n *\n * @internal\n */\nexport const MessageTypes = {\n /** Represents a Verifiable Credential */\n vc: 'w3c.vc',\n /** Represents a Verifiable Presentation */\n vp: 'w3c.vp',\n}\n\n/**\n * Represents the requirements that this plugin has.\n * The agent that is using this plugin is expected to provide these methods.\n *\n * This interface can be used for static type checks, to make sure your application is properly initialized.\n */\nexport type IContext = IAgentContext<IResolver & ICredentialVerifier>\n\n/**\n * An implementation of the {@link @veramo/message-handler#AbstractMessageHandler}.\n *\n * This plugin can handle incoming W3C Verifiable Credentials and Presentations and prepare them\n * for internal storage as {@link @veramo/message-handler#Message} types.\n *\n * The current version can only handle `JWT` encoded\n *\n * @remarks {@link @veramo/core#IDataStore | IDataStore }\n *\n * @public\n */\nexport class W3cMessageHandler extends AbstractMessageHandler {\n async handle(message: Message, context: IContext): Promise<Message> {\n const meta = message.getLastMetaData()\n\n // console.log(JSON.stringify(message, null, 2))\n\n //FIXME: messages should not be expected to be only JWT\n if (meta?.type === 'JWT' && message.raw) {\n const { data } = message\n\n try {\n validateJwtPresentationPayload(data)\n\n //FIXME: flagging this for potential privacy leaks\n debug('JWT is', MessageTypes.vp)\n const presentation = normalizePresentation(message.raw)\n const credentials = presentation.verifiableCredential\n\n message.id = computeEntryHash(message.raw)\n message.type = MessageTypes.vp\n message.from = presentation.holder\n message.to = presentation.verifier?.[0]\n\n if (presentation.tag) {\n message.threadId = presentation.tag\n }\n\n message.createdAt = presentation.issuanceDate\n message.presentations = [presentation]\n message.credentials = credentials\n\n return message\n } catch (e) {}\n\n try {\n validateJwtCredentialPayload(data)\n //FIXME: flagging this for potential privacy leaks\n debug('JWT is', MessageTypes.vc)\n const credential = normalizeCredential(message.raw)\n\n message.id = computeEntryHash(message.raw)\n message.type = MessageTypes.vc\n message.from = credential.issuer.id\n message.to = credential.credentialSubject.id\n\n if (credential.tag) {\n message.threadId = credential.tag\n }\n\n message.createdAt = credential.issuanceDate\n message.credentials = [credential]\n return message\n } catch (e) {}\n }\n\n // LDS Verification and Handling\n if (message.type === MessageTypes.vc && message.data) {\n // verify credential\n const credential = message.data as VerifiableCredential\n\n const result = await context.agent.verifyCredential({ credential })\n if (result.verified) {\n message.id = computeEntryHash(message.raw || message.id || uuidv4())\n message.type = MessageTypes.vc\n message.from = extractIssuer(credential)\n message.to = credential.credentialSubject.id\n\n if (credential.tag) {\n message.threadId = credential.tag\n }\n\n message.createdAt = credential.issuanceDate\n message.credentials = [credential]\n return message\n } else {\n throw new Error(result.error?.message)\n }\n }\n\n if (message.type === MessageTypes.vp && message.data) {\n // verify presentation\n const presentation = message.data as VerifiablePresentation\n\n // throws on error.\n const result = await context.agent.verifyPresentation({\n presentation,\n // FIXME: HARDCODED CHALLENGE VERIFICATION FOR NOW\n challenge: 'VERAMO',\n domain: 'VERAMO',\n })\n if (result.verified) {\n message.id = computeEntryHash(message.raw || message.id || uuidv4())\n message.type = MessageTypes.vp\n message.from = presentation.holder\n // message.to = presentation.verifier?.[0]\n\n if (presentation.tag) {\n message.threadId = presentation.tag\n }\n\n // message.createdAt = presentation.issuanceDate\n message.presentations = [presentation]\n message.credentials = asArray(presentation.verifiableCredential).map(decodeCredentialToObject)\n return message\n } else {\n throw new Error(result.error?.message)\n }\n }\n\n return super.handle(message, context)\n }\n}\n","import type { IAgentPlugin, IIdentifier, IVerifyResult, VerifiableCredential } from '@veramo/core'\nimport { schema } from '@veramo/core'\n\nimport type {\n ICreateVerifiableCredentialLDArgs,\n ICreateVerifiablePresentationLDArgs,\n IVcdmCredentialPlugin,\n IVcdmCredentialProvider,\n IVcdmIssuerAgentContext,\n IVcdmVerifierAgentContext,\n IVerifyCredentialLDArgs,\n IVerifyPresentationLDArgs,\n} from './types'\nimport Debug from 'debug'\nimport { isRevoked, preProcessCredentialPayload, preProcessPresentation } from './functions'\nimport type { W3CVerifiableCredential, W3CVerifiablePresentation } from '@sphereon/ssi-types'\nimport { asArray, VerifiableCredentialSP, VerifiablePresentationSP } from '@sphereon/ssi-sdk.core'\n\nconst debug = Debug('sphereon:ssi-sdk:vcdm')\n\n/**\n * A plugin that implements the {@link @sphereon/ssi-sdk.credential-vcdm#IVcdmCredentialPlugin} methods.\n *\n * @public\n */\nexport class VcdmCredentialPlugin implements IAgentPlugin {\n readonly methods: IVcdmCredentialPlugin\n readonly schema = {\n components: {\n schemas: {\n ...schema.ICredentialIssuer.components.schemas,\n ...schema.ICredentialVerifier.components.schemas,\n },\n methods: {\n ...schema.ICredentialIssuer.components.methods,\n ...schema.ICredentialVerifier.components.methods,\n },\n },\n }\n private issuers: IVcdmCredentialProvider[]\n\n constructor(options: { issuers: IVcdmCredentialProvider[] }) {\n this.issuers = options.issuers\n this.methods = {\n listUsableProofFormats: this.listUsableProofFormats.bind(this),\n createVerifiableCredential: this.createVerifiableCredential.bind(this),\n verifyCredential: this.verifyCredential.bind(this),\n createVerifiablePresentation: this.createVerifiablePresentation.bind(this),\n verifyPresentation: this.verifyPresentation.bind(this),\n }\n }\n\n async listUsableProofFormats(did: IIdentifier, context: IVcdmIssuerAgentContext): Promise<string[]> {\n const signingOptions: string[] = []\n const keys = did.keys\n for (const key of keys) {\n for (const issuer of this.issuers) {\n if (issuer.matchKeyForType(key)) {\n signingOptions.push(issuer.getTypeProofFormat())\n }\n }\n }\n return signingOptions\n }\n\n /** {@inheritdoc @veramo/core#ICredentialIssuer.createVerifiableCredential} */\n async createVerifiableCredential(args: ICreateVerifiableCredentialLDArgs, context: IVcdmIssuerAgentContext): Promise<VerifiableCredentialSP> {\n let { proofFormat /* keyRef, removeOriginalFields, now , ...otherOptions */ } = args\n const { credential, issuer, now } = preProcessCredentialPayload(args)\n\n try {\n await context.agent.didManagerGet({ did: issuer })\n } catch (e) {\n throw new Error(`invalid_argument: credential.issuer must be a DID managed by this agent. ${e}`)\n }\n try {\n async function findAndIssueCredential(issuers: IVcdmCredentialProvider[]) {\n for (const issuer of issuers) {\n if (issuer.canIssueCredentialType({ proofFormat })) {\n return await issuer.createVerifiableCredential({ ...args, credential, now }, context)\n }\n }\n throw new Error(\n `invalid_setup: No issuer found for the requested proof format: ${proofFormat}, supported: ${issuers.map((i) => i.getTypeProofFormat()).join(',')}`,\n )\n }\n const verifiableCredential = await findAndIssueCredential(this.issuers)\n return verifiableCredential\n } catch (error) {\n debug(error)\n return Promise.reject(error)\n }\n }\n\n /** {@inheritdoc @veramo/core#ICredentialVerifier.verifyCredential} */\n async verifyCredential(args: IVerifyCredentialLDArgs, context: IVcdmVerifierAgentContext): Promise<IVerifyResult> {\n let { credential, policies /*, ...otherOptions*/ } = args\n let verifiedCredential: VerifiableCredential\n let verificationResult: IVerifyResult | undefined = { verified: false }\n\n async function findAndVerifyCredential(issuers: IVcdmCredentialProvider[]): Promise<IVerifyResult> {\n for (const issuer of issuers) {\n if (issuer.canVerifyDocumentType({ document: credential as W3CVerifiableCredential })) {\n return issuer.verifyCredential(args, context)\n }\n }\n return Promise.reject(\n Error(\n `invalid_setup: No verifier found for the provided credential credential type: ${JSON.stringify(args.credential.type)} proof type ${asArray(args.credential.proof)?.[0]?.type} supported: ${issuers.map((i) => i.getTypeProofFormat()).join(',')}`,\n ),\n )\n }\n verificationResult = await findAndVerifyCredential(this.issuers)\n verifiedCredential = <VerifiableCredential>credential\n\n if (policies?.credentialStatus !== false && (await isRevoked(verifiedCredential, context as any))) {\n verificationResult = {\n verified: false,\n error: {\n message: 'revoked: The credential was revoked by the issuer',\n errorCode: 'revoked',\n },\n }\n }\n\n return verificationResult\n }\n\n /** {@inheritdoc @veramo/core#ICredentialIssuer.createVerifiablePresentation} */\n async createVerifiablePresentation(args: ICreateVerifiablePresentationLDArgs, context: IVcdmIssuerAgentContext): Promise<VerifiablePresentationSP> {\n const { proofFormat } = args\n const { presentation } = preProcessPresentation(args)\n\n let verifiablePresentation: VerifiablePresentationSP\n\n async function findAndCreatePresentation(issuers: IVcdmCredentialProvider[]) {\n for (const issuer of issuers) {\n if (issuer.canIssueCredentialType({ proofFormat })) {\n return await issuer.createVerifiablePresentation({ ...args, presentation }, context)\n }\n }\n throw new Error(\n `invalid_setup: No issuer found for the requested proof format: ${proofFormat}, supported: ${issuers.map((i) => i.getTypeProofFormat()).join(',')}`,\n )\n }\n\n verifiablePresentation = await findAndCreatePresentation(this.issuers)\n return verifiablePresentation\n }\n\n /** {@inheritdoc @veramo/core#ICredentialVerifier.verifyPresentation} */\n async verifyPresentation(args: IVerifyPresentationLDArgs, context: IVcdmVerifierAgentContext): Promise<IVerifyResult> {\n let { presentation /*domain, challenge, fetchRemoteContexts, policies, ...otherOptions*/ } = args\n async function findAndVerifyPresentation(issuers: IVcdmCredentialProvider[]): Promise<IVerifyResult> {\n for (const issuer of issuers) {\n if (issuer.canVerifyDocumentType({ document: presentation as W3CVerifiablePresentation })) {\n return issuer.verifyPresentation(args, context)\n }\n }\n throw new Error('invalid_setup: No verifier found for the provided presentation')\n }\n const result = await findAndVerifyPresentation(this.issuers)\n return result\n }\n}\n","import type {\n CredentialPayload,\n IAgentContext,\n ICredentialStatusVerifier,\n IDIDManager,\n IIdentifier,\n IResolver,\n IssuerType,\n PresentationPayload,\n VerifiableCredential,\n W3CVerifiableCredential,\n W3CVerifiablePresentation,\n} from '@veramo/core'\nimport { _ExtendedIKey, isDefined, processEntryToArray } from '@veramo/utils'\nimport { decodeJWT } from 'did-jwt'\nimport {\n addVcdmContextIfNeeded,\n isVcdm1Credential,\n isVcdm2Credential,\n VCDM_CREDENTIAL_CONTEXT_V1,\n VCDM_CREDENTIAL_CONTEXT_V2,\n} from '@sphereon/ssi-types'\nimport { ICreateVerifiablePresentationLDArgs } from './types'\nimport { getKey } from '@sphereon/ssi-sdk-ext.did-utils'\n\n/**\n * Decodes a credential or presentation and returns the issuer ID\n * `iss` from a JWT or `issuer`/`issuer.id` from a VC or `holder` from a VP\n *\n * @param input - the credential or presentation whose issuer/holder needs to be extracted.\n * @param options - options for the extraction\n * removeParameters - Remove all DID parameters from the issuer ID\n *\n * @beta This API may change without a BREAKING CHANGE notice.\n */\nexport function extractIssuer(\n input?: W3CVerifiableCredential | W3CVerifiablePresentation | CredentialPayload | PresentationPayload | null,\n options: { removeParameters?: boolean } = {},\n): string {\n if (!isDefined(input)) {\n return ''\n } else if (typeof input === 'string') {\n // JWT\n try {\n const { payload } = decodeJWT(input.split(`~`)[0])\n const iss = payload.iss ?? ''\n return !!options.removeParameters ? removeDIDParameters(iss) : iss\n } catch (e: any) {\n return ''\n }\n } else {\n // JSON\n let iss: IssuerType\n if (input.issuer) {\n iss = input.issuer\n } else if (input.holder) {\n iss = input.holder\n } else {\n iss = ''\n }\n if (typeof iss !== 'string') iss = iss.id ?? ''\n return !!options.removeParameters ? removeDIDParameters(iss) : iss\n }\n}\n\n/**\n * Remove all DID parameters from a DID url after the query part (?)\n *\n * @param did - the DID URL\n *\n * @beta This API may change without a BREAKING CHANGE notice.\n */\nexport function removeDIDParameters(did: string): string {\n return did.replace(/\\?.*$/, '')\n}\n\nexport async function pickSigningKey(\n { identifier, kmsKeyRef }: { identifier: IIdentifier; kmsKeyRef?: string },\n context: IAgentContext<IResolver & IDIDManager>,\n): Promise<_ExtendedIKey> {\n const key = await getKey({ identifier, vmRelationship: 'assertionMethod', kmsKeyRef: kmsKeyRef }, context)\n return key\n}\n\nexport async function isRevoked(credential: VerifiableCredential, context: IAgentContext<ICredentialStatusVerifier>): Promise<boolean> {\n if (!credential.credentialStatus) return false\n\n if (typeof context.agent.checkCredentialStatus === 'function') {\n const status = await context.agent.checkCredentialStatus({ credential })\n return status?.revoked == true || status?.verified === false\n }\n\n throw new Error(`invalid_setup: The credential status can't be verified because there is no ICredentialStatusVerifier plugin installed.`)\n}\n\nexport function preProcessCredentialPayload({ credential, now = new Date() }: { credential: CredentialPayload; now?: number | Date }) {\n const credentialContext = addVcdmContextIfNeeded(credential?.['@context'])\n const isVdcm1 = isVcdm1Credential(credential)\n const isVdcm2 = isVcdm2Credential(credential)\n const credentialType = processEntryToArray(credential?.type, 'VerifiableCredential')\n let issuanceDate = credential?.validFrom ?? credential?.issuanceDate ?? (typeof now === 'number' ? new Date(now) : now).toISOString()\n let expirationDate = credential?.validUntil ?? credential?.expirationDate\n if (issuanceDate instanceof Date) {\n issuanceDate = issuanceDate.toISOString()\n }\n const credentialPayload: CredentialPayload = {\n ...credential,\n '@context': credentialContext,\n type: credentialType,\n ...(isVdcm1 && { issuanceDate }),\n ...(isVdcm1 && expirationDate && { expirationDate }),\n ...(isVdcm2 && { validFrom: issuanceDate }),\n ...(isVdcm2 && expirationDate && { validUntil: expirationDate }),\n }\n if (isVdcm1) {\n delete credentialPayload.validFrom\n delete credentialPayload.validUntil\n } else if (isVdcm2) {\n delete credentialPayload.issuanceDate\n delete credentialPayload.expirationDate\n }\n\n // debug(JSON.stringify(credentialPayload))\n\n const issuer = extractIssuer(credentialPayload, { removeParameters: true })\n if (!issuer || typeof issuer === 'undefined') {\n throw new Error('invalid_argument: args.credential.issuer must not be empty')\n }\n return { credential: credentialPayload, issuer, now }\n}\n\nexport function preProcessPresentation(args: ICreateVerifiablePresentationLDArgs) {\n const { presentation, now = new Date() } = args\n const credentials = presentation?.verifiableCredential ?? []\n const v1Credential = credentials.find((cred) => typeof cred === 'object' && cred['@context'].includes(VCDM_CREDENTIAL_CONTEXT_V1))\n ? VCDM_CREDENTIAL_CONTEXT_V1\n : undefined\n const v2Credential = credentials.find((cred) => typeof cred === 'object' && cred['@context'].includes(VCDM_CREDENTIAL_CONTEXT_V2))\n ? VCDM_CREDENTIAL_CONTEXT_V2\n : undefined\n const presentationContext = addVcdmContextIfNeeded(\n args?.presentation?.['@context'] ?? [],\n v2Credential ?? v1Credential ?? VCDM_CREDENTIAL_CONTEXT_V2,\n )\n const presentationType = processEntryToArray(args?.presentation?.type, 'VerifiablePresentation')\n\n let issuanceDate = presentation?.validFrom ?? presentation?.issuanceDate ?? (typeof now === 'number' ? new Date(now) : now).toISOString()\n if (issuanceDate instanceof Date) {\n issuanceDate = issuanceDate.toISOString()\n }\n const presentationPayload: PresentationPayload = {\n ...presentation,\n '@context': presentationContext,\n type: presentationType,\n ...(v1Credential && { issuanceDate }), // V1 only for JWT, but we remove it in the jsonld processor anyway\n ...(v2Credential && { validFrom: issuanceDate }),\n }\n // Workaround for bug in TypeError: Cannot read property 'length' of undefined\n // at VeramoEd25519Signature2018.preSigningPresModification\n /*if (!presentation.verifier) {\n presentation.verifier = []\n }*/\n\n if (!isDefined(presentationPayload.holder) || !presentationPayload.holder) {\n throw new Error('invalid_argument: args.presentation.holderDID must not be empty')\n }\n if (presentationPayload.verifiableCredential) {\n presentationPayload.verifiableCredential = presentationPayload.verifiableCredential.map((cred) => {\n // map JWT credentials to their canonical form\n if (typeof cred !== 'string' && cred.proof.jwt) {\n return cred.proof.jwt\n } else {\n return cred\n }\n })\n }\n return { presentation: presentationPayload, holder: removeDIDParameters(presentationPayload.holder) }\n}\n"],"mappings":"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","names":["extractIssuer","debug","Debug","MessageTypes","vc","vp","W3cMessageHandler","AbstractMessageHandler","handle","message","context","meta","getLastMetaData","type","raw","data","validateJwtPresentationPayload","presentation","normalizePresentation","credentials","verifiableCredential","id","computeEntryHash","from","holder","to","verifier","tag","threadId","createdAt","issuanceDate","presentations","e","validateJwtCredentialPayload","credential","normalizeCredential","issuer","credentialSubject","result","agent","verifyCredential","verified","uuidv4","extractIssuer","Error","error","verifyPresentation","challenge","domain","asArray","map","decodeCredentialToObject","import_debug","import_utils","extractIssuer","input","options","isDefined","payload","decodeJWT","split","iss","removeParameters","removeDIDParameters","e","issuer","holder","id","did","replace","pickSigningKey","identifier","kmsKeyRef","context","key","getKey","vmRelationship","isRevoked","credential","credentialStatus","agent","checkCredentialStatus","status","revoked","verified","Error","preProcessCredentialPayload","now","Date","credentialContext","addVcdmContextIfNeeded","isVdcm1","isVcdm1Credential","isVdcm2","isVcdm2Credential","credentialType","processEntryToArray","type","issuanceDate","validFrom","toISOString","expirationDate","validUntil","credentialPayload","preProcessPresentation","args","presentation","credentials","verifiableCredential","v1Credential","find","cred","includes","VCDM_CREDENTIAL_CONTEXT_V1","undefined","v2Credential","VCDM_CREDENTIAL_CONTEXT_V2","presentationContext","presentationType","presentationPayload","map","proof","jwt","debug","Debug","VcdmCredentialPlugin","methods","schema","components","schemas","ICredentialIssuer","ICredentialVerifier","issuers","constructor","options","listUsableProofFormats","bind","createVerifiableCredential","verifyCredential","createVerifiablePresentation","verifyPresentation","did","context","signingOptions","keys","key","issuer","matchKeyForType","push","getTypeProofFormat","args","proofFormat","credential","now","preProcessCredentialPayload","agent","didManagerGet","e","Error","findAndIssueCredential","canIssueCredentialType","map","i","join","verifiableCredential","error","Promise","reject","policies","verifiedCredential","verificationResult","verified","findAndVerifyCredential","canVerifyDocumentType","document","JSON","stringify","type","asArray","proof","credentialStatus","isRevoked","message","errorCode","presentation","preProcessPresentation","verifiablePresentation","findAndCreatePresentation","findAndVerifyPresentation","result","CredentialIssuer","VcdmCredentialPlugin"]}
package/dist/index.d.cts CHANGED
@@ -1,10 +1,10 @@
1
- import { IPluginMethodMap, PresentationPayload, IAgentContext, IResolver, IDIDManager, CredentialPayload, VerifiableCredential, VerificationPolicies, IVerifyResult, VerifiablePresentation, IKey, ICredentialVerifier, IAgentPlugin, IIdentifier, W3CVerifiableCredential as W3CVerifiableCredential$1, W3CVerifiablePresentation as W3CVerifiablePresentation$1, ICredentialStatusVerifier } from '@veramo/core';
1
+ import { IPluginMethodMap, PresentationPayload, IAgentContext, IResolver, IDIDManager, IKeyManager, CredentialPayload, VerificationPolicies, IVerifyResult, IKey, ICredentialVerifier, IAgentPlugin, IIdentifier, W3CVerifiableCredential as W3CVerifiableCredential$1, W3CVerifiablePresentation as W3CVerifiablePresentation$1, VerifiableCredential, ICredentialStatusVerifier } from '@veramo/core';
2
2
  export { ICredentialIssuer, ICredentialVerifier } from '@veramo/core';
3
3
  import { VerifiablePresentationSP, VerifiableCredentialSP } from '@sphereon/ssi-sdk.core';
4
- import { ISphereonKeyManager } from '@sphereon/ssi-sdk-ext.key-manager';
5
4
  import { IIssueCredentialStatusOpts } from '@sphereon/ssi-sdk.vc-status-list';
6
- import { W3CVerifiableCredential, W3CVerifiablePresentation } from '@sphereon/ssi-types';
5
+ import { W3CVerifiablePresentation, W3CVerifiableCredential } from '@sphereon/ssi-types';
7
6
  import { AbstractMessageHandler, Message } from '@veramo/message-handler';
7
+ import { _ExtendedIKey } from '@veramo/utils';
8
8
 
9
9
  type IVcdmCredentialPlugin = IVcdmCredentialIssuer & IVcdmCredentialVerifier;
10
10
  /**
@@ -147,7 +147,7 @@ interface IVerifyCredentialLDArgs {
147
147
  * of the `credential`
148
148
  *
149
149
  */
150
- credential: VerifiableCredential;
150
+ credential: VerifiableCredentialSP;
151
151
  /**
152
152
  * Set this to true if you want the '@context' URLs to be fetched in case they are not pre-loaded.
153
153
  *
@@ -170,6 +170,7 @@ interface IVerifyCredentialLDArgs {
170
170
  * Allows you to use the default integrated statusList 2021 support. If a checkStatus function is provided, this will be ignored
171
171
  */
172
172
  statusList?: StatusListCheck;
173
+ [key: string]: any;
173
174
  }
174
175
  interface StatusListCheck {
175
176
  /**
@@ -196,7 +197,7 @@ interface IVerifyPresentationLDArgs {
196
197
  * of the `credential`
197
198
  *
198
199
  */
199
- presentation: VerifiablePresentation;
200
+ presentation: VerifiablePresentationSP | W3CVerifiablePresentation;
200
201
  /**
201
202
  * Optional (only for JWT) string challenge parameter to verify the verifiable presentation against
202
203
  */
@@ -227,6 +228,7 @@ interface IVerifyPresentationLDArgs {
227
228
  * Allows you to use the default integrated statusList 2021 support. If a checkStatus function is provided, this will be ignored
228
229
  */
229
230
  statusList?: StatusListCheck;
231
+ [key: string]: any;
230
232
  }
231
233
  /**
232
234
  * Represents the requirements that this plugin has.
@@ -244,7 +246,7 @@ interface IVerifyPresentationLDArgs {
244
246
  *
245
247
  * @beta
246
248
  */
247
- type IVcdmIssuerAgentContext = IAgentContext<IResolver & IDIDManager & Pick<ISphereonKeyManager, 'keyManagerGet' | 'keyManagerSign' | 'keyManagerVerify'>>;
249
+ type IVcdmIssuerAgentContext = IAgentContext<IResolver & IDIDManager & Pick<IKeyManager, 'keyManagerGet' | 'keyManagerSign' | 'keyManagerVerify'>>;
248
250
  type ContextDoc = {
249
251
  '@context': string | Record<string, any>;
250
252
  };
@@ -524,8 +526,23 @@ declare function extractIssuer(input?: W3CVerifiableCredential$1 | W3CVerifiable
524
526
  * @beta This API may change without a BREAKING CHANGE notice.
525
527
  */
526
528
  declare function removeDIDParameters(did: string): string;
527
- declare function pickSigningKey(identifier: IIdentifier, keyRef?: string): IKey;
529
+ declare function pickSigningKey({ identifier, kmsKeyRef }: {
530
+ identifier: IIdentifier;
531
+ kmsKeyRef?: string;
532
+ }, context: IAgentContext<IResolver & IDIDManager>): Promise<_ExtendedIKey>;
528
533
  declare function isRevoked(credential: VerifiableCredential, context: IAgentContext<ICredentialStatusVerifier>): Promise<boolean>;
534
+ declare function preProcessCredentialPayload({ credential, now }: {
535
+ credential: CredentialPayload;
536
+ now?: number | Date;
537
+ }): {
538
+ credential: CredentialPayload;
539
+ issuer: string;
540
+ now: number | Date;
541
+ };
542
+ declare function preProcessPresentation(args: ICreateVerifiablePresentationLDArgs): {
543
+ presentation: PresentationPayload;
544
+ holder: string;
545
+ };
529
546
 
530
547
  /**
531
548
  * Provides a {@link @veramo/credential-w3c#CredentialPlugin | plugin} for the {@link @veramo/core#Agent} that
@@ -544,4 +561,4 @@ declare function isRevoked(credential: VerifiableCredential, context: IAgentCont
544
561
  */
545
562
  declare const CredentialIssuer: typeof VcdmCredentialPlugin;
546
563
 
547
- export { type ContextDoc, CredentialIssuer, type IAssertionProofPurpose, type IAuthenticationProofPurpose, type ICanIssueCredentialTypeArgs, type ICanVerifyDocumentTypeArgs, type IControllerProofPurpose, type ICreateVerifiableCredentialLDArgs, type ICreateVerifiablePresentationLDArgs, type IProofPurpose, type IVcdmCredentialIssuer, type IVcdmCredentialPlugin, type IVcdmCredentialProvider, type IVcdmCredentialVerifier, type IVcdmIssuerAgentContext, type IVcdmVerifierAgentContext, type IVerifyCredentialLDArgs, type IVerifyPresentationLDArgs, MessageTypes, type StatusListCheck, VcdmCredentialPlugin, W3cMessageHandler, extractIssuer, isRevoked, pickSigningKey, removeDIDParameters };
564
+ export { type ContextDoc, CredentialIssuer, type IAssertionProofPurpose, type IAuthenticationProofPurpose, type ICanIssueCredentialTypeArgs, type ICanVerifyDocumentTypeArgs, type IControllerProofPurpose, type ICreateVerifiableCredentialLDArgs, type ICreateVerifiablePresentationLDArgs, type IProofPurpose, type IVcdmCredentialIssuer, type IVcdmCredentialPlugin, type IVcdmCredentialProvider, type IVcdmCredentialVerifier, type IVcdmIssuerAgentContext, type IVcdmVerifierAgentContext, type IVerifyCredentialLDArgs, type IVerifyPresentationLDArgs, MessageTypes, type StatusListCheck, VcdmCredentialPlugin, W3cMessageHandler, extractIssuer, isRevoked, pickSigningKey, preProcessCredentialPayload, preProcessPresentation, removeDIDParameters };
package/dist/index.d.ts CHANGED
@@ -1,10 +1,10 @@
1
- import { IPluginMethodMap, PresentationPayload, IAgentContext, IResolver, IDIDManager, CredentialPayload, VerifiableCredential, VerificationPolicies, IVerifyResult, VerifiablePresentation, IKey, ICredentialVerifier, IAgentPlugin, IIdentifier, W3CVerifiableCredential as W3CVerifiableCredential$1, W3CVerifiablePresentation as W3CVerifiablePresentation$1, ICredentialStatusVerifier } from '@veramo/core';
1
+ import { IPluginMethodMap, PresentationPayload, IAgentContext, IResolver, IDIDManager, IKeyManager, CredentialPayload, VerificationPolicies, IVerifyResult, IKey, ICredentialVerifier, IAgentPlugin, IIdentifier, W3CVerifiableCredential as W3CVerifiableCredential$1, W3CVerifiablePresentation as W3CVerifiablePresentation$1, VerifiableCredential, ICredentialStatusVerifier } from '@veramo/core';
2
2
  export { ICredentialIssuer, ICredentialVerifier } from '@veramo/core';
3
3
  import { VerifiablePresentationSP, VerifiableCredentialSP } from '@sphereon/ssi-sdk.core';
4
- import { ISphereonKeyManager } from '@sphereon/ssi-sdk-ext.key-manager';
5
4
  import { IIssueCredentialStatusOpts } from '@sphereon/ssi-sdk.vc-status-list';
6
- import { W3CVerifiableCredential, W3CVerifiablePresentation } from '@sphereon/ssi-types';
5
+ import { W3CVerifiablePresentation, W3CVerifiableCredential } from '@sphereon/ssi-types';
7
6
  import { AbstractMessageHandler, Message } from '@veramo/message-handler';
7
+ import { _ExtendedIKey } from '@veramo/utils';
8
8
 
9
9
  type IVcdmCredentialPlugin = IVcdmCredentialIssuer & IVcdmCredentialVerifier;
10
10
  /**
@@ -147,7 +147,7 @@ interface IVerifyCredentialLDArgs {
147
147
  * of the `credential`
148
148
  *
149
149
  */
150
- credential: VerifiableCredential;
150
+ credential: VerifiableCredentialSP;
151
151
  /**
152
152
  * Set this to true if you want the '@context' URLs to be fetched in case they are not pre-loaded.
153
153
  *
@@ -170,6 +170,7 @@ interface IVerifyCredentialLDArgs {
170
170
  * Allows you to use the default integrated statusList 2021 support. If a checkStatus function is provided, this will be ignored
171
171
  */
172
172
  statusList?: StatusListCheck;
173
+ [key: string]: any;
173
174
  }
174
175
  interface StatusListCheck {
175
176
  /**
@@ -196,7 +197,7 @@ interface IVerifyPresentationLDArgs {
196
197
  * of the `credential`
197
198
  *
198
199
  */
199
- presentation: VerifiablePresentation;
200
+ presentation: VerifiablePresentationSP | W3CVerifiablePresentation;
200
201
  /**
201
202
  * Optional (only for JWT) string challenge parameter to verify the verifiable presentation against
202
203
  */
@@ -227,6 +228,7 @@ interface IVerifyPresentationLDArgs {
227
228
  * Allows you to use the default integrated statusList 2021 support. If a checkStatus function is provided, this will be ignored
228
229
  */
229
230
  statusList?: StatusListCheck;
231
+ [key: string]: any;
230
232
  }
231
233
  /**
232
234
  * Represents the requirements that this plugin has.
@@ -244,7 +246,7 @@ interface IVerifyPresentationLDArgs {
244
246
  *
245
247
  * @beta
246
248
  */
247
- type IVcdmIssuerAgentContext = IAgentContext<IResolver & IDIDManager & Pick<ISphereonKeyManager, 'keyManagerGet' | 'keyManagerSign' | 'keyManagerVerify'>>;
249
+ type IVcdmIssuerAgentContext = IAgentContext<IResolver & IDIDManager & Pick<IKeyManager, 'keyManagerGet' | 'keyManagerSign' | 'keyManagerVerify'>>;
248
250
  type ContextDoc = {
249
251
  '@context': string | Record<string, any>;
250
252
  };
@@ -524,8 +526,23 @@ declare function extractIssuer(input?: W3CVerifiableCredential$1 | W3CVerifiable
524
526
  * @beta This API may change without a BREAKING CHANGE notice.
525
527
  */
526
528
  declare function removeDIDParameters(did: string): string;
527
- declare function pickSigningKey(identifier: IIdentifier, keyRef?: string): IKey;
529
+ declare function pickSigningKey({ identifier, kmsKeyRef }: {
530
+ identifier: IIdentifier;
531
+ kmsKeyRef?: string;
532
+ }, context: IAgentContext<IResolver & IDIDManager>): Promise<_ExtendedIKey>;
528
533
  declare function isRevoked(credential: VerifiableCredential, context: IAgentContext<ICredentialStatusVerifier>): Promise<boolean>;
534
+ declare function preProcessCredentialPayload({ credential, now }: {
535
+ credential: CredentialPayload;
536
+ now?: number | Date;
537
+ }): {
538
+ credential: CredentialPayload;
539
+ issuer: string;
540
+ now: number | Date;
541
+ };
542
+ declare function preProcessPresentation(args: ICreateVerifiablePresentationLDArgs): {
543
+ presentation: PresentationPayload;
544
+ holder: string;
545
+ };
529
546
 
530
547
  /**
531
548
  * Provides a {@link @veramo/credential-w3c#CredentialPlugin | plugin} for the {@link @veramo/core#Agent} that
@@ -544,4 +561,4 @@ declare function isRevoked(credential: VerifiableCredential, context: IAgentCont
544
561
  */
545
562
  declare const CredentialIssuer: typeof VcdmCredentialPlugin;
546
563
 
547
- export { type ContextDoc, CredentialIssuer, type IAssertionProofPurpose, type IAuthenticationProofPurpose, type ICanIssueCredentialTypeArgs, type ICanVerifyDocumentTypeArgs, type IControllerProofPurpose, type ICreateVerifiableCredentialLDArgs, type ICreateVerifiablePresentationLDArgs, type IProofPurpose, type IVcdmCredentialIssuer, type IVcdmCredentialPlugin, type IVcdmCredentialProvider, type IVcdmCredentialVerifier, type IVcdmIssuerAgentContext, type IVcdmVerifierAgentContext, type IVerifyCredentialLDArgs, type IVerifyPresentationLDArgs, MessageTypes, type StatusListCheck, VcdmCredentialPlugin, W3cMessageHandler, extractIssuer, isRevoked, pickSigningKey, removeDIDParameters };
564
+ export { type ContextDoc, CredentialIssuer, type IAssertionProofPurpose, type IAuthenticationProofPurpose, type ICanIssueCredentialTypeArgs, type ICanVerifyDocumentTypeArgs, type IControllerProofPurpose, type ICreateVerifiableCredentialLDArgs, type ICreateVerifiablePresentationLDArgs, type IProofPurpose, type IVcdmCredentialIssuer, type IVcdmCredentialPlugin, type IVcdmCredentialProvider, type IVcdmCredentialVerifier, type IVcdmIssuerAgentContext, type IVcdmVerifierAgentContext, type IVerifyCredentialLDArgs, type IVerifyPresentationLDArgs, MessageTypes, type StatusListCheck, VcdmCredentialPlugin, W3cMessageHandler, extractIssuer, isRevoked, pickSigningKey, preProcessCredentialPayload, preProcessPresentation, removeDIDParameters };