@sphereon/ssi-types 0.8.1-unstable.9 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,29 +1,30 @@
1
1
  import { PresentationSubmission } from './pex';
2
2
  import { IProofPurpose, IProofType } from './did';
3
- declare type AdditionalProperties = Record<string, any>;
3
+ export type AdditionalClaims = Record<string, any>;
4
+ export type IIssuerId = string;
4
5
  export interface ICredential {
5
- expirationDate?: string;
6
- issuer: string | IIssuer;
6
+ '@context': ICredentialContextType | ICredentialContextType[];
7
+ type: string[];
8
+ credentialSchema?: undefined | ICredentialSchemaType | ICredentialSchemaType[];
9
+ issuer: IIssuerId | IIssuer;
7
10
  issuanceDate: string;
8
- credentialSubject: ICredentialSubject & AdditionalProperties;
11
+ credentialSubject: (ICredentialSubject & AdditionalClaims) | (ICredentialSubject & AdditionalClaims)[];
12
+ expirationDate?: string;
9
13
  id?: string;
10
- '@context': ICredentialContextType[] | ICredentialContextType;
11
14
  credentialStatus?: ICredentialStatus;
12
- credentialSchema?: undefined | ICredentialSchemaType | ICredentialSchemaType[];
13
15
  description?: string;
14
16
  name?: string;
15
- type: string[];
16
17
  [x: string]: any;
17
18
  }
18
19
  export interface ICredentialSubject {
19
20
  id?: string;
20
21
  }
21
- export declare type ICredentialContextType = (ICredentialContext & AdditionalProperties) | string;
22
+ export type ICredentialContextType = (ICredentialContext & AdditionalClaims) | string;
22
23
  export interface ICredentialContext {
23
24
  name?: string;
24
25
  did?: string;
25
26
  }
26
- export declare type ICredentialSchemaType = ICredentialSchema | string;
27
+ export type ICredentialSchemaType = ICredentialSchema | string;
27
28
  export interface ICredentialSchema {
28
29
  id: string;
29
30
  type?: string;
@@ -37,8 +38,10 @@ export interface IProof {
37
38
  domain?: string;
38
39
  proofValue?: string;
39
40
  jws?: string;
41
+ jwt?: string;
40
42
  nonce?: string;
41
43
  requiredRevealStatements?: string[];
44
+ [x: string]: any;
42
45
  }
43
46
  export interface ICredentialStatus {
44
47
  id: string;
@@ -51,17 +54,33 @@ export interface IIssuer {
51
54
  export interface IHasProof {
52
55
  proof: IProof | IProof[];
53
56
  }
54
- export declare type IVerifiableCredential = ICredential & IHasProof;
57
+ export type IVerifiableCredential = ICredential & IHasProof;
58
+ /**
59
+ * Represents a Json Web Token in compact form.
60
+ */
61
+ export type CompactJWT = string;
62
+ /**
63
+ * Represents a signed Verifiable Credential (includes proof), in either JSON or compact JWT format.
64
+ * See {@link https://www.w3.org/TR/vc-data-model/#credentials | VC data model}
65
+ * See {@link https://www.w3.org/TR/vc-data-model/#proof-formats | proof formats}
66
+ */
67
+ export type W3CVerifiableCredential = IVerifiableCredential | CompactJWT;
55
68
  export interface IPresentation {
56
69
  id?: string;
57
70
  '@context': ICredentialContextType | ICredentialContextType[];
58
- type: string[];
59
- verifiableCredential: IVerifiableCredential[];
71
+ type?: string | string[];
72
+ verifiableCredential?: W3CVerifiableCredential[];
60
73
  presentation_submission?: PresentationSubmission;
61
74
  holder?: string;
62
75
  [x: string]: any;
63
76
  }
64
- export declare type IVerifiablePresentation = IPresentation & IHasProof;
77
+ export type IVerifiablePresentation = IPresentation & IHasProof;
78
+ /**
79
+ * Represents a signed Verifiable Presentation (includes proof), in either JSON or compact JWT format.
80
+ * See {@link https://www.w3.org/TR/vc-data-model/#presentations | VC data model}
81
+ * See {@link https://www.w3.org/TR/vc-data-model/#proof-formats | proof formats}
82
+ */
83
+ export type W3CVerifiablePresentation = IVerifiablePresentation | CompactJWT;
65
84
  export interface WrappedVerifiableCredential {
66
85
  /**
67
86
  * Original VC that we've received
@@ -78,11 +97,11 @@ export interface WrappedVerifiableCredential {
78
97
  /**
79
98
  * The claim format, typically used during exchange transport protocols
80
99
  */
81
- format: ClaimFormat;
100
+ format: CredentialFormat;
82
101
  /**
83
- * Internal stable representation of a Credential without Proofs, created based on https://www.w3.org/TR/vc-data-model/#jwt-decoding
102
+ * Internal stable representation of a Credential
84
103
  */
85
- credential: ICredential;
104
+ credential: IVerifiableCredential;
86
105
  }
87
106
  export interface WrappedVerifiablePresentation {
88
107
  /**
@@ -100,7 +119,7 @@ export interface WrappedVerifiablePresentation {
100
119
  /**
101
120
  * The claim format, typically used during exchange transport protocols
102
121
  */
103
- format: ClaimFormat;
122
+ format: PresentationFormat;
104
123
  /**
105
124
  * Internal stable representation of a Presentation without proofs, created based on https://www.w3.org/TR/vc-data-model/#jwt-decoding
106
125
  */
@@ -117,13 +136,13 @@ export declare enum OriginalType {
117
136
  }
118
137
  export interface UniformVerifiablePresentation {
119
138
  '@context': ICredentialContextType | ICredentialContextType[];
120
- type: string[];
139
+ type: string | string[];
121
140
  verifiableCredential: WrappedVerifiableCredential[];
122
141
  presentation_submission?: PresentationSubmission;
123
142
  holder?: string;
124
143
  }
125
144
  export interface JwtDecodedVerifiableCredential {
126
- vc: ICredential;
145
+ vc: IVerifiableCredential;
127
146
  exp: string;
128
147
  iss: string;
129
148
  nbf: string;
@@ -140,9 +159,15 @@ export interface JwtDecodedVerifiablePresentation {
140
159
  jti: string;
141
160
  [x: string]: any;
142
161
  }
143
- export declare type ClaimFormat = 'jwt' | 'jwt_vc' | 'jwt_vp' | 'ldp' | 'ldp_vc' | 'ldp_vp' | string;
144
- export declare type OriginalVerifiableCredential = IVerifiableCredential | JwtDecodedVerifiableCredential | string;
145
- export declare type OriginalVerifiablePresentation = IPresentation | JwtDecodedVerifiablePresentation | string;
146
- export declare type Original = OriginalVerifiablePresentation | OriginalVerifiableCredential;
147
- export {};
162
+ export type CredentialFormat = 'jwt' | 'ldp' | 'jwt_vc' | 'ldp_vc' | string;
163
+ export type PresentationFormat = 'jwt' | 'ldp' | 'jwt_vp' | 'ldp_vp' | string;
164
+ export type ClaimFormat = CredentialFormat | PresentationFormat;
165
+ export type OriginalVerifiableCredential = W3CVerifiableCredential | JwtDecodedVerifiableCredential;
166
+ export type OriginalVerifiablePresentation = W3CVerifiablePresentation | JwtDecodedVerifiablePresentation;
167
+ export type Original = OriginalVerifiablePresentation | OriginalVerifiableCredential;
168
+ export declare const enum DocumentFormat {
169
+ JWT = 0,
170
+ JSONLD = 1,
171
+ EIP712 = 2
172
+ }
148
173
  //# sourceMappingURL=vc.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"vc.d.ts","sourceRoot":"","sources":["../../src/types/vc.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vc.d.ts","sourceRoot":"","sources":["../../src/types/vc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,OAAO,CAAA;AAC9C,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAEjD,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;AAElD,MAAM,MAAM,SAAS,GAAG,MAAM,CAAA;AAE9B,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,sBAAsB,GAAG,sBAAsB,EAAE,CAAA;IAC7D,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,gBAAgB,CAAC,EAAE,SAAS,GAAG,qBAAqB,GAAG,qBAAqB,EAAE,CAAA;IAE9E,MAAM,EAAE,SAAS,GAAG,OAAO,CAAA;IAE3B,YAAY,EAAE,MAAM,CAAA;IAEpB,iBAAiB,EAAE,CAAC,kBAAkB,GAAG,gBAAgB,CAAC,GAAG,CAAC,kBAAkB,GAAG,gBAAgB,CAAC,EAAE,CAAA;IAEtG,cAAc,CAAC,EAAE,MAAM,CAAA;IAEvB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,gBAAgB,CAAC,EAAE,iBAAiB,CAAA;IACpC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,CAAA;IAEb,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAA;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,CAAC,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,MAAM,sBAAsB,GAAG,CAAC,kBAAkB,GAAG,gBAAgB,CAAC,GAAG,MAAM,CAAA;AAErF,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAED,MAAM,MAAM,qBAAqB,GAAG,iBAAiB,GAAG,MAAM,CAAA;AAE9D,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,UAAU,GAAG,MAAM,CAAA;IACzB,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,aAAa,GAAG,MAAM,CAAA;IACpC,kBAAkB,EAAE,MAAM,CAAA;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAA;IAEnC,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAA;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAA;IAEV,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAA;CACjB;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CACzB;AAED,MAAM,MAAM,qBAAqB,GAAG,WAAW,GAAG,SAAS,CAAA;AAE3D;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,CAAA;AAE/B;;;;GAIG;AACH,MAAM,MAAM,uBAAuB,GAAG,qBAAqB,GAAG,UAAU,CAAA;AAExE,MAAM,WAAW,aAAa;IAC5B,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,UAAU,EAAE,sBAAsB,GAAG,sBAAsB,EAAE,CAAA;IAC7D,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IACxB,oBAAoB,CAAC,EAAE,uBAAuB,EAAE,CAAA;IAChD,uBAAuB,CAAC,EAAE,sBAAsB,CAAA;IAChD,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAA;CACjB;AAED,MAAM,MAAM,uBAAuB,GAAG,aAAa,GAAG,SAAS,CAAA;AAE/D;;;;GAIG;AACH,MAAM,MAAM,yBAAyB,GAAG,uBAAuB,GAAG,UAAU,CAAA;AAE5E,MAAM,WAAW,2BAA2B;IAC1C;;OAEG;IACH,QAAQ,EAAE,4BAA4B,CAAA;IACtC;;OAEG;IACH,OAAO,EAAE,8BAA8B,GAAG,qBAAqB,CAAA;IAC/D;;OAEG;IACH,IAAI,EAAE,YAAY,CAAA;IAClB;;OAEG;IACH,MAAM,EAAE,gBAAgB,CAAA;IACxB;;OAEG;IACH,UAAU,EAAE,qBAAqB,CAAA;CAClC;AAED,MAAM,WAAW,6BAA6B;IAC5C;;OAEG;IACH,QAAQ,EAAE,8BAA8B,CAAA;IACxC;;OAEG;IACH,OAAO,EAAE,gCAAgC,GAAG,uBAAuB,CAAA;IACnE;;OAEG;IACH,IAAI,EAAE,YAAY,CAAA;IAClB;;OAEG;IACH,MAAM,EAAE,kBAAkB,CAAA;IAC1B;;OAEG;IACH,YAAY,EAAE,6BAA6B,CAAA;IAC3C;;OAEG;IACH,GAAG,EAAE,2BAA2B,EAAE,CAAA;CACnC;AAED,oBAAY,YAAY;IACtB,MAAM,YAAY;IAClB,WAAW,gBAAgB;IAC3B,WAAW,gBAAgB;CAC5B;AAED,MAAM,WAAW,6BAA6B;IAC5C,UAAU,EAAE,sBAAsB,GAAG,sBAAsB,EAAE,CAAA;IAC7D,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IACvB,oBAAoB,EAAE,2BAA2B,EAAE,CAAA;IACnD,uBAAuB,CAAC,EAAE,sBAAsB,CAAA;IAChD,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,8BAA8B;IAC7C,EAAE,EAAE,qBAAqB,CAAA;IACzB,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IAEX,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAA;CACjB;AAED,MAAM,WAAW,gCAAgC;IAC/C,EAAE,EAAE,uBAAuB,CAAA;IAC3B,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IAEX,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAA;CACjB;AAED,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAA;AAC3E,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAA;AAC7E,MAAM,MAAM,WAAW,GAAG,gBAAgB,GAAG,kBAAkB,CAAA;AAE/D,MAAM,MAAM,4BAA4B,GAAG,uBAAuB,GAAG,8BAA8B,CAAA;AACnG,MAAM,MAAM,8BAA8B,GAAG,yBAAyB,GAAG,gCAAgC,CAAA;AACzG,MAAM,MAAM,QAAQ,GAAG,8BAA8B,GAAG,4BAA4B,CAAA;AAEpF,0BAAkB,cAAc;IAC9B,GAAG,IAAA;IACH,MAAM,IAAA;IACN,MAAM,IAAA;CACP"}
package/dist/types/vc.js CHANGED
@@ -1,10 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.OriginalType = void 0;
3
+ exports.DocumentFormat = exports.OriginalType = void 0;
4
4
  var OriginalType;
5
5
  (function (OriginalType) {
6
6
  OriginalType["JSONLD"] = "json-ld";
7
7
  OriginalType["JWT_ENCODED"] = "jwt-encoded";
8
8
  OriginalType["JWT_DECODED"] = "jwt-decoded";
9
9
  })(OriginalType = exports.OriginalType || (exports.OriginalType = {}));
10
+ var DocumentFormat;
11
+ (function (DocumentFormat) {
12
+ DocumentFormat[DocumentFormat["JWT"] = 0] = "JWT";
13
+ DocumentFormat[DocumentFormat["JSONLD"] = 1] = "JSONLD";
14
+ DocumentFormat[DocumentFormat["EIP712"] = 2] = "EIP712";
15
+ })(DocumentFormat = exports.DocumentFormat || (exports.DocumentFormat = {}));
10
16
  //# sourceMappingURL=vc.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"vc.js","sourceRoot":"","sources":["../../src/types/vc.ts"],"names":[],"mappings":";;;AA+IA,IAAY,YAIX;AAJD,WAAY,YAAY;IACtB,kCAAkB,CAAA;IAClB,2CAA2B,CAAA;IAC3B,2CAA2B,CAAA;AAC7B,CAAC,EAJW,YAAY,GAAZ,oBAAY,KAAZ,oBAAY,QAIvB"}
1
+ {"version":3,"file":"vc.js","sourceRoot":"","sources":["../../src/types/vc.ts"],"names":[],"mappings":";;;AAiKA,IAAY,YAIX;AAJD,WAAY,YAAY;IACtB,kCAAkB,CAAA;IAClB,2CAA2B,CAAA;IAC3B,2CAA2B,CAAA;AAC7B,CAAC,EAJW,YAAY,GAAZ,oBAAY,KAAZ,oBAAY,QAIvB;AAwCD,IAAkB,cAIjB;AAJD,WAAkB,cAAc;IAC9B,iDAAG,CAAA;IACH,uDAAM,CAAA;IACN,uDAAM,CAAA;AACR,CAAC,EAJiB,cAAc,GAAd,sBAAc,KAAd,sBAAc,QAI/B"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@sphereon/ssi-types",
3
3
  "description": "SSI Common Types",
4
- "version": "0.8.1-unstable.9+af7f532",
4
+ "version": "0.9.0",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "scripts": {
@@ -12,6 +12,7 @@
12
12
  },
13
13
  "devDependencies": {
14
14
  "@types/jest": "^27.0.2",
15
+ "@veramo/core": "4.2.0",
15
16
  "jest": "^27.3.1",
16
17
  "prettier": "^2.4.1",
17
18
  "ts-jest": "^27.0.7",
@@ -37,5 +38,5 @@
37
38
  "Verifiable Credentials",
38
39
  "DIDs"
39
40
  ],
40
- "gitHead": "af7f5324bc1718f724e3258c3f218eb85e4199cd"
41
+ "gitHead": "9119280fec93d685824f0baa454163d703431025"
41
42
  }
@@ -1,7 +1,9 @@
1
1
  import {
2
- ClaimFormat,
3
- ICredential,
2
+ DocumentFormat,
4
3
  IPresentation,
4
+ IProof,
5
+ IProofPurpose,
6
+ IProofType,
5
7
  IVerifiableCredential,
6
8
  IVerifiablePresentation,
7
9
  JwtDecodedVerifiableCredential,
@@ -9,6 +11,10 @@ import {
9
11
  OriginalType,
10
12
  OriginalVerifiableCredential,
11
13
  OriginalVerifiablePresentation,
14
+ PresentationFormat,
15
+ UniformVerifiablePresentation,
16
+ W3CVerifiableCredential,
17
+ W3CVerifiablePresentation,
12
18
  WrappedVerifiableCredential,
13
19
  WrappedVerifiablePresentation,
14
20
  } from '../types'
@@ -18,10 +24,20 @@ import { ObjectUtils } from '../utils'
18
24
  export class CredentialMapper {
19
25
  static decodeVerifiablePresentation(presentation: OriginalVerifiablePresentation): JwtDecodedVerifiablePresentation | IVerifiablePresentation {
20
26
  if (CredentialMapper.isJwtEncoded(presentation)) {
21
- return jwt_decode(presentation as string) as JwtDecodedVerifiablePresentation
27
+ const payload = jwt_decode(presentation as string) as JwtDecodedVerifiablePresentation
28
+ const header = jwt_decode(presentation as string, { header: true }) as Record<string, any>
29
+
30
+ payload.vp.proof = {
31
+ type: IProofType.JwtProof2020,
32
+ created: payload.nbf,
33
+ proofPurpose: IProofPurpose.authentication,
34
+ verificationMethod: header['kid'] ?? payload.iss,
35
+ jwt: presentation as string,
36
+ }
37
+ return payload
22
38
  } else if (CredentialMapper.isJwtDecodedPresentation(presentation)) {
23
39
  return presentation as JwtDecodedVerifiablePresentation
24
- } else if (CredentialMapper.isJsonLdString(presentation)) {
40
+ } else if (CredentialMapper.isJsonLdAsString(presentation)) {
25
41
  return JSON.parse(presentation as string) as IVerifiablePresentation
26
42
  } else {
27
43
  return presentation as IVerifiablePresentation
@@ -30,51 +46,73 @@ export class CredentialMapper {
30
46
 
31
47
  static decodeVerifiableCredential(credential: OriginalVerifiableCredential): JwtDecodedVerifiableCredential | IVerifiableCredential {
32
48
  if (CredentialMapper.isJwtEncoded(credential)) {
33
- return jwt_decode(credential as string) as JwtDecodedVerifiableCredential
49
+ const payload = jwt_decode(credential as string) as JwtDecodedVerifiableCredential
50
+ const header = jwt_decode(credential as string, { header: true }) as Record<string, any>
51
+ payload.vc.proof = {
52
+ type: IProofType.JwtProof2020,
53
+ created: payload.nbf,
54
+ proofPurpose: IProofPurpose.authentication,
55
+ verificationMethod: header['kid'] ?? payload.iss,
56
+ jwt: credential as string,
57
+ }
58
+ return payload
34
59
  } else if (CredentialMapper.isJwtDecodedCredential(credential)) {
35
60
  return credential as JwtDecodedVerifiableCredential
36
- } else if (CredentialMapper.isJsonLdString(credential)) {
61
+ } else if (CredentialMapper.isJsonLdAsString(credential)) {
37
62
  return JSON.parse(credential as string) as IVerifiableCredential
38
63
  } else {
39
64
  return credential as IVerifiableCredential
40
65
  }
41
66
  }
42
67
 
43
- static toWrappedVerifiablePresentation(presentation: OriginalVerifiablePresentation): WrappedVerifiablePresentation {
44
- const original = presentation
68
+ static toWrappedVerifiablePresentation(
69
+ originalPresentation: OriginalVerifiablePresentation,
70
+ opts?: { maxTimeSkewInMS?: number },
71
+ ): WrappedVerifiablePresentation {
72
+ const original = originalPresentation
45
73
  const isJwtEncoded: boolean = CredentialMapper.isJwtEncoded(original)
46
74
  const isJwtDecoded: boolean = CredentialMapper.isJwtDecodedPresentation(original)
47
75
 
48
76
  const type = isJwtEncoded ? OriginalType.JWT_ENCODED : isJwtDecoded ? OriginalType.JWT_DECODED : OriginalType.JSONLD
49
- const format: ClaimFormat = isJwtDecoded || isJwtEncoded ? 'jwt_vp' : 'ldp_vp'
77
+ const format: PresentationFormat = isJwtDecoded || isJwtEncoded ? 'jwt_vp' : 'ldp_vp'
50
78
  const decoded = CredentialMapper.decodeVerifiablePresentation(original)
51
- const vp: IPresentation =
52
- isJwtEncoded || isJwtDecoded
53
- ? CredentialMapper.jwtDecodedPresentationToUniformPresentation(decoded as JwtDecodedVerifiablePresentation, false)
54
- : (decoded as IPresentation)
55
- const vcs: WrappedVerifiableCredential[] = CredentialMapper.toWrappedVerifiableCredentials(vp.verifiableCredential)
79
+ let vp: OriginalVerifiablePresentation
80
+ if (isJwtEncoded || isJwtDecoded) {
81
+ vp = CredentialMapper.jwtDecodedPresentationToUniformPresentation(decoded as JwtDecodedVerifiablePresentation, false, opts)
82
+ } else {
83
+ vp = decoded as IVerifiablePresentation
84
+ }
85
+ if (!vp || !('verifiableCredential' in vp) || !vp.verifiableCredential || vp.verifiableCredential.length === 0) {
86
+ throw Error(`VP needs to have at least one verifiable credential at this point`)
87
+ }
88
+ const vcs: WrappedVerifiableCredential[] = CredentialMapper.toWrappedVerifiableCredentials(vp.verifiableCredential/*.map(value => value.original)*/, opts)
56
89
 
57
- // todo: We probably want to add proofs as well
90
+ const presentation = {
91
+ ...vp,
92
+ verifiableCredential: vcs, // We overwrite the credentials with wrapped versions, making it an InternalVerifiablePresentation. Note: we keep the singular key name of the vc data model
93
+ } as UniformVerifiablePresentation
58
94
  return {
59
95
  type,
60
96
  format,
61
97
  original,
62
98
  decoded,
63
- presentation: {
64
- ...vp,
65
- verifiableCredential: vcs, // We overwrite the credentials with wrapped versions, making it an InternalVerifiablePresentation. Note: we keep the singular key name of the vc data model
66
- },
99
+ presentation,
67
100
  vcs,
68
101
  }
69
102
  }
70
103
 
71
- static toWrappedVerifiableCredentials(verifiableCredentials: OriginalVerifiableCredential[]): WrappedVerifiableCredential[] {
72
- return verifiableCredentials.map(CredentialMapper.toWrappedVerifiableCredential)
104
+ static toWrappedVerifiableCredentials(
105
+ verifiableCredentials: OriginalVerifiableCredential[],
106
+ opts?: { maxTimeSkewInMS?: number },
107
+ ): WrappedVerifiableCredential[] {
108
+ return verifiableCredentials.map((vc) => CredentialMapper.toWrappedVerifiableCredential(vc, opts))
73
109
  }
74
110
 
75
- static toWrappedVerifiableCredential(verifiableCredential: OriginalVerifiableCredential): WrappedVerifiableCredential {
111
+ static toWrappedVerifiableCredential(
112
+ verifiableCredential: OriginalVerifiableCredential,
113
+ opts?: { maxTimeSkewInMS?: number },
114
+ ): WrappedVerifiableCredential {
76
115
  const original = verifiableCredential
77
-
78
116
  const decoded = CredentialMapper.decodeVerifiableCredential(verifiableCredential)
79
117
 
80
118
  const isJwtEncoded = CredentialMapper.isJwtEncoded(original)
@@ -82,11 +120,11 @@ export class CredentialMapper {
82
120
  const type = isJwtEncoded ? OriginalType.JWT_ENCODED : isJwtDecoded ? OriginalType.JWT_DECODED : OriginalType.JSONLD
83
121
 
84
122
  const credential =
85
- isJwtDecoded || isJwtDecoded
86
- ? CredentialMapper.jwtDecodedCredentialToUniformCredential(decoded as JwtDecodedVerifiableCredential)
87
- : (decoded as ICredential)
88
- const format = isJwtDecoded || isJwtDecoded ? 'jwt_vc' : 'ldp_vc'
89
- //todo: We probably want to add proofs as well
123
+ isJwtEncoded || isJwtDecoded
124
+ ? CredentialMapper.jwtDecodedCredentialToUniformCredential(decoded as JwtDecodedVerifiableCredential, opts)
125
+ : (decoded as IVerifiableCredential)
126
+
127
+ const format = isJwtEncoded || isJwtDecoded ? 'jwt_vc' : 'ldp_vc'
90
128
  return {
91
129
  original,
92
130
  decoded,
@@ -100,7 +138,7 @@ export class CredentialMapper {
100
138
  return ObjectUtils.isString(original) && (original as string).startsWith('ey')
101
139
  }
102
140
 
103
- private static isJsonLdString(original: OriginalVerifiableCredential | OriginalVerifiablePresentation) {
141
+ private static isJsonLdAsString(original: OriginalVerifiableCredential | OriginalVerifiablePresentation) {
104
142
  return ObjectUtils.isString(original) && (original as string).includes('@context')
105
143
  }
106
144
 
@@ -112,23 +150,30 @@ export class CredentialMapper {
112
150
  return (<JwtDecodedVerifiablePresentation>original)['vp'] !== undefined && (<JwtDecodedVerifiablePresentation>original)['iss'] !== undefined
113
151
  }
114
152
 
115
- static jwtEncodedPresentationToUniformPresentation(jwt: string, makeCredentialsUniform: boolean = true): IPresentation {
116
- return CredentialMapper.jwtDecodedPresentationToUniformPresentation(jwt_decode(jwt), makeCredentialsUniform)
153
+ static jwtEncodedPresentationToUniformPresentation(
154
+ jwt: string,
155
+ makeCredentialsUniform: boolean = true,
156
+ opts?: { maxTimeSkewInMS?: number },
157
+ ): IPresentation {
158
+ return CredentialMapper.jwtDecodedPresentationToUniformPresentation(jwt_decode(jwt), makeCredentialsUniform, opts)
117
159
  }
118
160
 
119
161
  static jwtDecodedPresentationToUniformPresentation(
120
162
  decoded: JwtDecodedVerifiablePresentation,
121
- makeCredentialsUniform: boolean = true
122
- ): IPresentation {
123
- const presentation: IPresentation = {
124
- ...(decoded.vp as IPresentation),
163
+ makeCredentialsUniform: boolean = true,
164
+ opts?: { maxTimeSkewInMS?: number },
165
+ ): IVerifiablePresentation {
166
+ const presentation: IVerifiablePresentation = {
167
+ ...(decoded.vp),
125
168
  }
126
169
  if (makeCredentialsUniform) {
127
- presentation.verifiableCredential = decoded.vp.verifiableCredential.map(CredentialMapper.toUniformCredential) as IVerifiableCredential[] // We cast it because we IPresentation needs a VC. The internal Credential doesn't have the required Proof anymore (that is intended)
170
+ if (!decoded.vp.verifiableCredential) {
171
+ throw Error('Verifiable Presentation should have a verifiable credential at this point')
172
+ }
173
+ presentation.verifiableCredential = decoded.vp.verifiableCredential.map((vc) =>
174
+ CredentialMapper.toUniformCredential(vc, opts),
175
+ )
128
176
  }
129
- // Since this is a presentation, we delete any proof just to be sure (should not occur on JWT, but better safe than sorry)
130
- delete presentation.proof
131
-
132
177
  if (decoded.iss) {
133
178
  const holder = presentation.holder
134
179
  if (holder) {
@@ -148,7 +193,7 @@ export class CredentialMapper {
148
193
  return presentation
149
194
  }
150
195
 
151
- static toUniformCredential(verifiableCredential: OriginalVerifiableCredential): ICredential {
196
+ static toUniformCredential(verifiableCredential: OriginalVerifiableCredential, opts?: { maxTimeSkewInMS?: number }): IVerifiableCredential {
152
197
  const original = verifiableCredential
153
198
  const decoded = CredentialMapper.decodeVerifiableCredential(verifiableCredential)
154
199
 
@@ -156,13 +201,13 @@ export class CredentialMapper {
156
201
  const isJwtDecoded: boolean = CredentialMapper.isJwtDecodedCredential(original)
157
202
 
158
203
  if (isJwtDecoded || isJwtEncoded) {
159
- return CredentialMapper.jwtDecodedCredentialToUniformCredential(decoded as JwtDecodedVerifiableCredential)
204
+ return CredentialMapper.jwtDecodedCredentialToUniformCredential(decoded as JwtDecodedVerifiableCredential, opts)
160
205
  } else {
161
- return decoded as ICredential
206
+ return decoded as IVerifiableCredential
162
207
  }
163
208
  }
164
209
 
165
- static toUniformPresentation(presentation: OriginalVerifiablePresentation): IPresentation {
210
+ static toUniformPresentation(presentation: OriginalVerifiablePresentation, opts?: { maxTimeSkewInMS?: number }): IVerifiablePresentation {
166
211
  const original = presentation
167
212
  const decoded = CredentialMapper.decodeVerifiablePresentation(original)
168
213
  const isJwtEncoded: boolean = CredentialMapper.isJwtEncoded(original)
@@ -170,33 +215,36 @@ export class CredentialMapper {
170
215
  const uniformPresentation =
171
216
  isJwtEncoded || isJwtDecoded
172
217
  ? CredentialMapper.jwtDecodedPresentationToUniformPresentation(decoded as JwtDecodedVerifiablePresentation, false)
173
- : (decoded as IPresentation)
174
- uniformPresentation.verifiableCredential = uniformPresentation.verifiableCredential?.map(
175
- CredentialMapper.toUniformCredential
218
+ : (decoded as IVerifiablePresentation)
219
+ uniformPresentation.verifiableCredential = uniformPresentation.verifiableCredential?.map((vc) =>
220
+ CredentialMapper.toUniformCredential(vc, opts),
176
221
  ) as IVerifiableCredential[] // We cast it because we IPresentation needs a VC. The internal Credential doesn't have the required Proof anymore (that is intended)
177
222
  return uniformPresentation
178
223
  }
179
224
 
180
- static jwtEncodedCredentialToUniformCredential(jwt: string): ICredential {
181
- return CredentialMapper.jwtDecodedCredentialToUniformCredential(jwt_decode(jwt))
225
+ static jwtEncodedCredentialToUniformCredential(jwt: string, opts?: { maxTimeSkewInMS?: number }): IVerifiableCredential {
226
+ return CredentialMapper.jwtDecodedCredentialToUniformCredential(jwt_decode(jwt), opts)
182
227
  }
183
228
 
184
- static jwtDecodedCredentialToUniformCredential(decoded: JwtDecodedVerifiableCredential): ICredential {
185
- const credential: ICredential = {
186
- ...(decoded.vc as ICredential),
229
+ static jwtDecodedCredentialToUniformCredential(decoded: JwtDecodedVerifiableCredential, opts?: { maxTimeSkewInMS?: number }): IVerifiableCredential {
230
+ const credential: IVerifiableCredential = {
231
+ ...(decoded.vc),
187
232
  }
188
- // Since this is a credential, we delete any proof just to be sure (should not occur on JWT, but better safe than sorry)
189
- delete credential.proof
233
+
234
+ const maxSkewInMS = opts?.maxTimeSkewInMS !== undefined ? opts.maxTimeSkewInMS : 999
190
235
 
191
236
  if (decoded.exp) {
192
- const expDate = credential.credentialSubject?.expirationDate
237
+ const expDate = credential.expirationDate
193
238
  const jwtExp = parseInt(decoded.exp.toString())
194
- // fix seconds to millisecs for the date
239
+ // fix seconds to millisecond for the date
195
240
  const expDateAsStr = jwtExp < 9999999999 ? new Date(jwtExp * 1000).toISOString().replace(/\.000Z/, 'Z') : new Date(jwtExp).toISOString()
196
241
  if (expDate && expDate !== expDateAsStr) {
197
- throw new Error(`Inconsistent expiration dates between JWT claim (${expDateAsStr}) and VC value (${expDate})`)
242
+ const diff = Math.abs(new Date(expDateAsStr).getTime() - new Date(expDate).getTime())
243
+ if (!maxSkewInMS || diff > maxSkewInMS) {
244
+ throw new Error(`Inconsistent expiration dates between JWT claim (${expDateAsStr}) and VC value (${expDate})`)
245
+ }
198
246
  }
199
- credential.credentialSubject.expirationDate = expDateAsStr
247
+ credential.expirationDate = expDateAsStr
200
248
  }
201
249
 
202
250
  if (decoded.nbf) {
@@ -205,7 +253,10 @@ export class CredentialMapper {
205
253
  // fix seconds to millisecs for the date
206
254
  const nbfDateAsStr = jwtNbf < 9999999999 ? new Date(jwtNbf * 1000).toISOString().replace(/\.000Z/, 'Z') : new Date(jwtNbf).toISOString()
207
255
  if (issuanceDate && issuanceDate !== nbfDateAsStr) {
208
- throw new Error(`Inconsistent issuance dates between JWT claim (${nbfDateAsStr}) and VC value (${issuanceDate})`)
256
+ const diff = Math.abs(new Date(nbfDateAsStr).getTime() - new Date(issuanceDate).getTime())
257
+ if (!maxSkewInMS || diff > maxSkewInMS) {
258
+ throw new Error(`Inconsistent issuance dates between JWT claim (${nbfDateAsStr}) and VC value (${issuanceDate})`)
259
+ }
209
260
  }
210
261
  credential.issuanceDate = nbfDateAsStr
211
262
  }
@@ -222,16 +273,22 @@ export class CredentialMapper {
222
273
  throw new Error(`Inconsistent issuers between JWT claim (${decoded.iss}) and VC value (${issuer.id})`)
223
274
  }
224
275
  }
276
+ } else {
277
+ credential.issuer = decoded.iss
225
278
  }
226
- credential.issuer = decoded.iss
227
279
  }
228
280
 
229
281
  if (decoded.sub) {
230
- const csId = credential.credentialSubject?.id
231
- if (csId && csId !== decoded.sub) {
232
- throw new Error(`Inconsistent credential subject ids between JWT claim (${decoded.sub}) and VC value (${csId})`)
282
+ const subjects = Array.isArray(credential.credentialSubject) ? credential.credentialSubject : [credential.credentialSubject]
283
+ for (let i = 0; i < subjects.length; i++) {
284
+ const csId = subjects[i].id
285
+ if (csId && csId !== decoded.sub) {
286
+ throw new Error(`Inconsistent credential subject ids between JWT claim (${decoded.sub}) and VC value (${csId})`)
287
+ }
288
+ Array.isArray(credential.credentialSubject)
289
+ ? (credential.credentialSubject[i].id = decoded.sub)
290
+ : (credential.credentialSubject.id = decoded.sub)
233
291
  }
234
- credential.credentialSubject.id = decoded.sub
235
292
  }
236
293
  if (decoded.jti) {
237
294
  const id = credential.id
@@ -240,6 +297,105 @@ export class CredentialMapper {
240
297
  }
241
298
  credential.id = decoded.jti
242
299
  }
300
+
301
+ return credential
302
+ }
303
+
304
+ static toExternalVerifiableCredential(verifiableCredential: any): IVerifiableCredential {
305
+ let proof
306
+ if (verifiableCredential.proof) {
307
+ if (!verifiableCredential.proof.type) {
308
+ throw new Error('Verifiable credential proof is missing a type')
309
+ }
310
+
311
+ if (!verifiableCredential.proof.created) {
312
+ throw new Error('Verifiable credential proof is missing a created date')
313
+ }
314
+
315
+ if (!verifiableCredential.proof.proofPurpose) {
316
+ throw new Error('Verifiable credential proof is missing a proof purpose')
317
+ }
318
+
319
+ if (!verifiableCredential.proof.verificationMethod) {
320
+ throw new Error('Verifiable credential proof is missing a verification method')
321
+ }
322
+ proof = {
323
+ ...verifiableCredential.proof,
324
+ type: verifiableCredential.proof.type,
325
+ created: verifiableCredential.proof.created,
326
+ proofPurpose: verifiableCredential.proof.proofPurpose,
327
+ verificationMethod: verifiableCredential.proof.verificationMethod,
328
+ }
329
+ }
330
+
331
+ return {
332
+ ...verifiableCredential,
333
+ type: verifiableCredential.type
334
+ ? typeof verifiableCredential.type === 'string'
335
+ ? [verifiableCredential.type]
336
+ : verifiableCredential.type
337
+ : ['VerifiableCredential'],
338
+ proof,
339
+ }
340
+ }
341
+
342
+ static storedCredentialToOriginalFormat(credential: W3CVerifiableCredential): W3CVerifiableCredential {
343
+ const type: DocumentFormat = CredentialMapper.detectDocumentType(credential)
344
+ if (typeof credential === 'string') {
345
+ if (type === DocumentFormat.JWT) {
346
+ return CredentialMapper.toCompactJWT(credential)
347
+ } else if (type === DocumentFormat.JSONLD) {
348
+ return JSON.parse(credential)
349
+ }
350
+ }
243
351
  return credential
244
352
  }
353
+
354
+ static storedPresentationToOriginalFormat(presentation: W3CVerifiablePresentation): W3CVerifiablePresentation {
355
+ const type: DocumentFormat = CredentialMapper.detectDocumentType(presentation)
356
+ if (typeof presentation === 'string') {
357
+ if (type === DocumentFormat.JWT) {
358
+ return CredentialMapper.toCompactJWT(presentation)
359
+ } else if (type === DocumentFormat.JSONLD) {
360
+ return JSON.parse(presentation)
361
+ }
362
+ }
363
+ return presentation
364
+ }
365
+
366
+ static toCompactJWT(jwtDocument: W3CVerifiableCredential | JwtDecodedVerifiableCredential | W3CVerifiablePresentation | JwtDecodedVerifiablePresentation): string {
367
+ if (CredentialMapper.detectDocumentType(jwtDocument) !== DocumentFormat.JWT) {
368
+ throw Error('Cannot convert non JWT credential to JWT')
369
+ }
370
+ if (typeof jwtDocument === 'string') {
371
+ return jwtDocument
372
+ }
373
+ let proof: string | undefined
374
+ if ('vp' in jwtDocument) {
375
+ proof = jwtDocument.vp.proof
376
+ } else if ('vc' in jwtDocument) {
377
+ proof = jwtDocument.vc.proof
378
+ } else {
379
+ proof = Array.isArray(jwtDocument.proof) ? jwtDocument.proof[0].jwt : jwtDocument.proof.jwt
380
+ }
381
+ if (!proof) {
382
+ throw Error(`Could not get JWT from supplied document`)
383
+ }
384
+ return proof
385
+ }
386
+
387
+ static detectDocumentType(document: W3CVerifiableCredential | W3CVerifiablePresentation | JwtDecodedVerifiableCredential | JwtDecodedVerifiablePresentation): DocumentFormat {
388
+ if (typeof document === 'string') {
389
+ return this.isJsonLdAsString(document) ? DocumentFormat.JSONLD : DocumentFormat.JWT
390
+ }
391
+ const proofs = 'vc' in document ? document.vc.proof : 'vp' in document ? document.vp.proof : (<IVerifiableCredential>document).proof
392
+ const proof: IProof = Array.isArray(proofs) ? proofs[0] : proofs
393
+
394
+ if (proof.jwt) {
395
+ return DocumentFormat.JWT
396
+ } else if (proof.type === 'EthereumEip712Signature2021') {
397
+ return DocumentFormat.EIP712
398
+ }
399
+ return DocumentFormat.JSONLD
400
+ }
245
401
  }
package/src/types/did.ts CHANGED
@@ -19,6 +19,7 @@ export enum IProofType {
19
19
  JcsEd25519Signature2020 = 'JcsEd25519Signature2020',
20
20
  BbsBlsSignatureProof2020 = 'BbsBlsSignatureProof2020',
21
21
  BbsBlsBoundSignatureProof2020 = 'BbsBlsBoundSignatureProof2020',
22
+ JwtProof2020 = 'JwtProof2020'
22
23
  }
23
24
 
24
25
  export interface IParsedDID {