did-jwt-vc
Advanced tools
Comparing version 2.1.6 to 2.1.7
@@ -0,1 +1,8 @@ | ||
## [2.1.7](https://github.com/decentralized-identity/did-jwt-vc/compare/2.1.6...2.1.7) (2021-08-31) | ||
### Bug Fixes | ||
* forward JWT options when creating a VC or VP ([#90](https://github.com/decentralized-identity/did-jwt-vc/issues/90)) ([13cea08](https://github.com/decentralized-identity/did-jwt-vc/commit/13cea0868a8126b9314b27283e72f6f3325eb943)), closes [#89](https://github.com/decentralized-identity/did-jwt-vc/issues/89) | ||
## [2.1.6](https://github.com/decentralized-identity/did-jwt-vc/compare/2.1.5...2.1.6) (2021-07-22) | ||
@@ -2,0 +9,0 @@ |
@@ -1,2 +0,2 @@ | ||
var e=require("did-jwt");const t=/^[A-Za-z0-9-_=]+\.[A-Za-z0-9-_=]+\.?[A-Za-z0-9-_.+/=]*$/,r="https://www.w3.org/2018/credentials/v1";function n(e){return Array.isArray(e)?e:[e]}function i(e){return Array.isArray(e)?e.map(e=>i(e)):e instanceof Date?new Date(e.getTime()):e&&"object"==typeof e?Object.getOwnPropertyNames(e).reduce((t,r)=>(Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(e,r)),t[r]=i(e[r]),t),Object.create(Object.getPrototypeOf(e))):e}function o(e){return null!=e}function a(e,t=!0){var a,l,c,s,d,f,u;let p=i(e);var v,y,b;"object"==typeof(v=e)&&v.sub&&v.iss&&v.claim&&v.iat&&(p=function(e){const{iat:t,nbf:n,claim:i,vc:o,...a}=e,l={...a,nbf:n||t,vc:{"@context":[r],type:["VerifiableCredential"],credentialSubject:i}};return o&&(e.issVc=o),l}(e)),p.credentialSubject={...e.credentialSubject,...null==(a=e.vc)?void 0:a.credentialSubject},!e.sub||null!=(l=e.credentialSubject)&&l.id||!p.credentialSubject||(p.credentialSubject.id=e.sub,t&&delete p.sub),t&&(null==(y=p.vc)||delete y.credentialSubject),void 0!==e.issuer&&"object"!=typeof e.issuer||(p.issuer=function(e){if("object"!=typeof e)return e;const t={...e};return Object.keys(t).forEach(e=>void 0===t[e]&&delete t[e]),t}({id:e.iss,...e.issuer}),!t||null!=(b=e.issuer)&&b.id||delete p.iss),!e.id&&e.jti&&(p.id=p.id||p.jti,t&&delete p.jti);const x=[...n(p.type),...n(null==(c=p.vc)?void 0:c.type)].filter(o);var w,j,O,m;p.type=[...new Set(x)],t&&(null==(w=p.vc)||delete w.type),p.evidence=null==(s=e.vc)?void 0:s.evidence,t&&(null==(j=p.vc)||delete j.evidence),p.credentialStatus=null==(d=e.vc)?void 0:d.credentialStatus,t&&(null==(O=p.vc)||delete O.credentialStatus),p.termsOfUse=null==(f=e.vc)?void 0:f.termsOfUse,t&&(null==(m=p.vc)||delete m.termsOfUse);const g=[...n(e.context),...n(e["@context"]),...n(null==(u=e.vc)?void 0:u["@context"])].filter(o);var h;return p["@context"]=[...new Set(g)],t&&(delete p.context,null==(h=p.vc)||delete h["@context"]),e.issuanceDate||!e.iat&&!e.nbf||(p.issuanceDate=new Date(1e3*(e.nbf||e.iat)).toISOString(),t&&(e.nbf?delete p.nbf:delete p.iat)),!e.expirationDate&&e.exp&&(p.expirationDate=new Date(1e3*e.exp).toISOString(),t&&delete p.exp),t&&p.vc&&0===Object.keys(p.vc).length&&delete p.vc,p}function l(t,r=!0){let n;try{n=e.decodeJWT(t)}catch(e){throw new TypeError("unknown credential format")}return{...a(n.payload,r),proof:{type:"JwtProof2020",jwt:t}}}function c(e,r=!0){var n;if("string"==typeof e){if(t.test(e))return l(e,r);{let t;try{t=JSON.parse(e)}catch(e){throw new TypeError("unknown credential format")}return c(t,r)}}return null!=(n=e.proof)&&n.jwt?i({...l(e.proof.jwt,r),proof:e.proof}):{proof:{},...a(e,r)}}function s(e,t=!0){var r,a,l;if(Array.isArray(e.credentialSubject))throw Error("credentialSubject of type array not supported");const c=i({vc:{...e.vc},...e});c.vc=c.vc;const s={...e.credentialSubject,...null==(r=e.vc)?void 0:r.credentialSubject};var d;e.sub||(c.sub=null==(d=e.credentialSubject)?void 0:d.id,t&&delete s.id);const f=[...n(e.context),...n(e["@context"]),...n(null==(a=e.vc)?void 0:a["@context"])].filter(o);c.vc["@context"]=[...new Set(f)],t&&(delete c.context,delete c["@context"]);const u=[...n(e.type),...n(null==(l=e.vc)?void 0:l.type)].filter(o);if(c.vc.type=[...new Set(u)],t&&delete c.type,e.id&&-1===Object.getOwnPropertyNames(e).indexOf("jti")&&(c.jti=e.id,t&&delete c.id),e.issuanceDate&&-1===Object.getOwnPropertyNames(e).indexOf("nbf")){const r=Date.parse(e.issuanceDate);isNaN(r)||(c.nbf=Math.floor(r/1e3),t&&delete c.issuanceDate)}if(e.expirationDate&&-1===Object.getOwnPropertyNames(e).indexOf("exp")){const r=Date.parse(e.expirationDate);isNaN(r)||(c.exp=Math.floor(r/1e3),t&&delete c.expirationDate)}var p;e.issuer&&-1===Object.getOwnPropertyNames(e).indexOf("iss")&&("object"==typeof e.issuer?(c.iss=null==(p=e.issuer)?void 0:p.id,t&&(delete c.issuer.id,0===Object.keys(c.issuer).length&&delete c.issuer)):"string"==typeof e.issuer&&(c.iss=e.iss||""+e.issuer,t&&delete c.issuer)),c.vc.credentialSubject=s,t&&delete c.credentialSubject;const v=["evidence","termsOfUse","refreshService","credentialSchema","credentialStatus"];for(const r of v)e[r]&&(c.vc[r]||(c.vc[r]=e[r]),t&&delete c[r]);return c}function d(e,t=!0){var r,a,l;const s=i(e);var d;s.verifiableCredential=[...n(e.verifiableCredential),...n(null==(r=e.vp)?void 0:r.verifiableCredential)].filter(o),s.verifiableCredential=s.verifiableCredential.map(e=>c(e,t)),t&&(null==(d=s.vp)||delete d.verifiableCredential),e.iss&&!e.holder&&(s.holder=e.iss,t&&delete s.iss),e.aud&&(s.verifier=[...n(e.verifier),...n(e.aud)].filter(o),s.verifier=[...new Set(s.verifier)],t&&delete s.aud),e.jti&&-1===Object.getOwnPropertyNames(e).indexOf("id")&&(s.id=e.id||e.jti,t&&delete s.jti);const f=[...n(e.type),...n(null==(a=e.vp)?void 0:a.type)].filter(o);var u;s.type=[...new Set(f)],t&&(null==(u=s.vp)||delete u.type);const p=[...n(e.context),...n(e["@context"]),...n(null==(l=e.vp)?void 0:l["@context"])].filter(o);var v;return s["@context"]=[...new Set(p)],t&&(delete s.context,null==(v=s.vp)||delete v["@context"]),e.issuanceDate||!e.iat&&!e.nbf||(s.issuanceDate=new Date(1e3*(e.nbf||e.iat)).toISOString(),t&&(e.nbf?delete s.nbf:delete s.iat)),!e.expirationDate&&e.exp&&(s.expirationDate=new Date(1e3*e.exp).toISOString(),t&&delete s.exp),s.vp&&0===Object.keys(s.vp).length&&t&&delete s.vp,s}function f(t,r=!0){let n;try{n=e.decodeJWT(t)}catch(e){throw new TypeError("unknown presentation format")}return{...d(n.payload,r),proof:{type:"JwtProof2020",jwt:t}}}function u(e,r=!0){var n;if("string"==typeof e){if(t.test(e))return f(e,r);{let t;try{t=JSON.parse(e)}catch(e){throw new TypeError("unknown presentation format")}return u(t,r)}}return null!=(n=e.proof)&&n.jwt?{...f(e.proof.jwt,r),proof:e.proof}:{proof:{},...d(e,r)}}function p(e,t=!0){var r,a,l;const c=i({vp:{...e.vp},...e});c.vp=c.vp;const s=[...n(e.context),...n(e["@context"]),...n(null==(r=e.vp)?void 0:r["@context"])].filter(o);c.vp["@context"]=[...new Set(s)],t&&(delete c.context,delete c["@context"]);const d=[...n(e.type),...n(null==(a=e.vp)?void 0:a.type)].filter(o);if(c.vp.type=[...new Set(d)],t&&delete c.type,e.id&&-1===Object.getOwnPropertyNames(e).indexOf("jti")&&(c.jti=e.id,t&&delete c.id),e.issuanceDate&&-1===Object.getOwnPropertyNames(e).indexOf("nbf")){const r=Date.parse(e.issuanceDate);isNaN(r)||(c.nbf=Math.floor(r/1e3),t&&delete c.issuanceDate)}if(e.expirationDate&&-1===Object.getOwnPropertyNames(e).indexOf("exp")){const r=Date.parse(e.expirationDate);isNaN(r)||(c.exp=Math.floor(r/1e3),t&&delete c.expirationDate)}var f;if((c.verifiableCredential||null!=(l=c.vp)&&l.verifiableCredential)&&(c.vp.verifiableCredential=[...n(c.verifiableCredential),...n(null==(f=c.vp)?void 0:f.verifiableCredential)].filter(o).map(e=>{var t;return"object"==typeof e&&null!=(t=e.proof)&&t.jwt?e.proof.jwt:e})),t&&delete c.verifiableCredential,e.holder&&-1===Object.getOwnPropertyNames(e).indexOf("iss")&&"string"==typeof e.holder&&(c.iss=e.holder,t&&delete c.holder),e.verifier){const r=[...n(e.verifier),...n(e.aud)].filter(o);c.aud=[...new Set(r)],t&&delete c.verifier}return c}function v(e){if("string"==typeof e&&!e.match(t))throw new TypeError(`"${e}" is not a valid JWT format`)}function y(e){if("number"==typeof e){if(!(Number.isInteger(e)&&e<1e11))throw new TypeError(`"${e}" is not a unix timestamp in seconds`)}else if("string"==typeof e)y(Math.floor(new Date(e).valueOf()/1e3));else if(!(t=e)||isNaN(t)||"[object Date]"!==Object.prototype.toString.call(t))throw new TypeError(`"${e}" is not a valid time`);var t}function b(e){const t=n(e);if(t.length<1||-1===t.indexOf(r))throw new TypeError(`@context is missing default context "${r}"`)}function x(e){const t=n(e);if(t.length<1||-1===t.indexOf("VerifiableCredential"))throw new TypeError('type is missing default "VerifiableCredential"')}function w(e){const t=n(e);if(t.length<1||-1===t.indexOf("VerifiablePresentation"))throw new TypeError('type is missing default "VerifiablePresentation"')}function j(e){if(0===Object.keys(e).length)throw new TypeError("credentialSubject must not be empty")}function O(e){b(e.vc["@context"]),x(e.vc.type),j(e.vc.credentialSubject),e.nbf&&y(e.nbf),e.exp&&y(e.exp)}function m(e){b(e["@context"]),x(e.type),j(e.credentialSubject),e.issuanceDate&&y(e.issuanceDate),e.expirationDate&&y(e.expirationDate)}function g(e){if(b(e.vp["@context"]),w(e.vp.type),e.vp.verifiableCredential&&e.vp.verifiableCredential.length>=1)for(const t of n(e.vp.verifiableCredential))"string"==typeof t?v(t):m(t);e.exp&&y(e.exp)}function h(e){if(b(e["@context"]),w(e.type),e.verifiableCredential&&e.verifiableCredential.length>=1)for(const t of e.verifiableCredential)"string"==typeof t?v(t):m(t);e.expirationDate&&y(e.expirationDate)}function S(e,t){if(t.challenge&&t.challenge!==e.nonce)throw new Error(`Presentation does not contain the mandatory challenge (JWT: nonce) for : ${t.challenge}`);if(t.domain){let r;if(e.aud&&(r=(Array.isArray(e.aud)?e.aud:[e.aud]).find(e=>t.domain===e)),void 0===r)throw new Error(`Presentation does not contain the mandatory domain (JWT: aud) for : ${t.domain}`)}}exports.createVerifiableCredentialJwt=function(t,r,n={}){try{var i;const o={iat:void 0,...s(t,n.removeOriginalFields)};return O(o),Promise.resolve(e.createJWT(o,{issuer:r.did||o.iss||"",signer:r.signer},{...n.header,alg:r.alg||(null==(i=n.header)?void 0:i.alg)||"ES256K"}))}catch(e){return Promise.reject(e)}},exports.createVerifiablePresentationJwt=function(t,r,i={}){try{var a;const l={iat:void 0,...p(t,null==i?void 0:i.removeOriginalFields)};if(i.challenge&&-1===Object.getOwnPropertyNames(l).indexOf("nonce")&&(l.nonce=i.challenge),i.domain){const e=[...n(i.domain),...n(l.aud)].filter(o);l.aud=[...new Set(e)]}return g(l),Promise.resolve(e.createJWT(l,{issuer:r.did||l.iss||"",signer:r.signer},{...i.header,alg:r.alg||(null==(a=i.header)?void 0:a.alg)||"ES256K"}))}catch(e){return Promise.reject(e)}},exports.normalizeCredential=c,exports.normalizePresentation=u,exports.transformCredentialInput=s,exports.transformPresentationInput=p,exports.validateCredentialPayload=m,exports.validateJwtCredentialPayload=O,exports.validateJwtPresentationPayload=g,exports.validatePresentationPayload=h,exports.verifyCredential=function(t,r,n={}){try{return Promise.resolve(e.verifyJWT(t,{resolver:r,...n})).then(function(e){return e.verifiableCredential=c(e.jwt,null==n?void 0:n.removeOriginalFields),m(e.verifiableCredential),e})}catch(e){return Promise.reject(e)}},exports.verifyPresentation=function(t,r,n={}){try{return Promise.resolve(e.verifyJWT(t,{resolver:r,...n})).then(function(e){return S(e.payload,n),e.verifiablePresentation=u(e.jwt,null==n?void 0:n.removeOriginalFields),h(e.verifiablePresentation),e})}catch(e){return Promise.reject(e)}},exports.verifyPresentationPayloadOptions=S; | ||
var e=require("did-jwt");const t=/^[A-Za-z0-9-_=]+\.[A-Za-z0-9-_=]+\.?[A-Za-z0-9-_.+/=]*$/,r="https://www.w3.org/2018/credentials/v1";function n(e){return Array.isArray(e)?e:[e]}function i(e){return Array.isArray(e)?e.map(e=>i(e)):e instanceof Date?new Date(e.getTime()):e&&"object"==typeof e?Object.getOwnPropertyNames(e).reduce((t,r)=>(Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(e,r)),t[r]=i(e[r]),t),Object.create(Object.getPrototypeOf(e))):e}function o(e){return null!=e}function a(e,t=!0){var a,l,c,s,d,f,u;let p=i(e);var v,y,b;"object"==typeof(v=e)&&v.sub&&v.iss&&v.claim&&v.iat&&(p=function(e){const{iat:t,nbf:n,claim:i,vc:o,...a}=e,l={...a,nbf:n||t,vc:{"@context":[r],type:["VerifiableCredential"],credentialSubject:i}};return o&&(e.issVc=o),l}(e)),p.credentialSubject={...e.credentialSubject,...null==(a=e.vc)?void 0:a.credentialSubject},!e.sub||null!=(l=e.credentialSubject)&&l.id||!p.credentialSubject||(p.credentialSubject.id=e.sub,t&&delete p.sub),t&&(null==(y=p.vc)||delete y.credentialSubject),void 0!==e.issuer&&"object"!=typeof e.issuer||(p.issuer=function(e){if("object"!=typeof e)return e;const t={...e};return Object.keys(t).forEach(e=>void 0===t[e]&&delete t[e]),t}({id:e.iss,...e.issuer}),!t||null!=(b=e.issuer)&&b.id||delete p.iss),!e.id&&e.jti&&(p.id=p.id||p.jti,t&&delete p.jti);const x=[...n(p.type),...n(null==(c=p.vc)?void 0:c.type)].filter(o);var w,j,O,m;p.type=[...new Set(x)],t&&(null==(w=p.vc)||delete w.type),p.evidence=null==(s=e.vc)?void 0:s.evidence,t&&(null==(j=p.vc)||delete j.evidence),p.credentialStatus=null==(d=e.vc)?void 0:d.credentialStatus,t&&(null==(O=p.vc)||delete O.credentialStatus),p.termsOfUse=null==(f=e.vc)?void 0:f.termsOfUse,t&&(null==(m=p.vc)||delete m.termsOfUse);const g=[...n(e.context),...n(e["@context"]),...n(null==(u=e.vc)?void 0:u["@context"])].filter(o);var h;return p["@context"]=[...new Set(g)],t&&(delete p.context,null==(h=p.vc)||delete h["@context"]),e.issuanceDate||!e.iat&&!e.nbf||(p.issuanceDate=new Date(1e3*(e.nbf||e.iat)).toISOString(),t&&(e.nbf?delete p.nbf:delete p.iat)),!e.expirationDate&&e.exp&&(p.expirationDate=new Date(1e3*e.exp).toISOString(),t&&delete p.exp),t&&p.vc&&0===Object.keys(p.vc).length&&delete p.vc,p}function l(t,r=!0){let n;try{n=e.decodeJWT(t)}catch(e){throw new TypeError("unknown credential format")}return{...a(n.payload,r),proof:{type:"JwtProof2020",jwt:t}}}function c(e,r=!0){var n;if("string"==typeof e){if(t.test(e))return l(e,r);{let t;try{t=JSON.parse(e)}catch(e){throw new TypeError("unknown credential format")}return c(t,r)}}return null!=(n=e.proof)&&n.jwt?i({...l(e.proof.jwt,r),proof:e.proof}):{proof:{},...a(e,r)}}function s(e,t=!0){var r,a,l;if(Array.isArray(e.credentialSubject))throw Error("credentialSubject of type array not supported");const c=i({vc:{...e.vc},...e});c.vc=c.vc;const s={...e.credentialSubject,...null==(r=e.vc)?void 0:r.credentialSubject};var d;e.sub||(c.sub=null==(d=e.credentialSubject)?void 0:d.id,t&&delete s.id);const f=[...n(e.context),...n(e["@context"]),...n(null==(a=e.vc)?void 0:a["@context"])].filter(o);c.vc["@context"]=[...new Set(f)],t&&(delete c.context,delete c["@context"]);const u=[...n(e.type),...n(null==(l=e.vc)?void 0:l.type)].filter(o);if(c.vc.type=[...new Set(u)],t&&delete c.type,e.id&&-1===Object.getOwnPropertyNames(e).indexOf("jti")&&(c.jti=e.id,t&&delete c.id),e.issuanceDate&&-1===Object.getOwnPropertyNames(e).indexOf("nbf")){const r=Date.parse(e.issuanceDate);isNaN(r)||(c.nbf=Math.floor(r/1e3),t&&delete c.issuanceDate)}if(e.expirationDate&&-1===Object.getOwnPropertyNames(e).indexOf("exp")){const r=Date.parse(e.expirationDate);isNaN(r)||(c.exp=Math.floor(r/1e3),t&&delete c.expirationDate)}var p;e.issuer&&-1===Object.getOwnPropertyNames(e).indexOf("iss")&&("object"==typeof e.issuer?(c.iss=null==(p=e.issuer)?void 0:p.id,t&&(delete c.issuer.id,0===Object.keys(c.issuer).length&&delete c.issuer)):"string"==typeof e.issuer&&(c.iss=e.iss||""+e.issuer,t&&delete c.issuer)),c.vc.credentialSubject=s,t&&delete c.credentialSubject;const v=["evidence","termsOfUse","refreshService","credentialSchema","credentialStatus"];for(const r of v)e[r]&&(c.vc[r]||(c.vc[r]=e[r]),t&&delete c[r]);return c}function d(e,t=!0){var r,a,l;const s=i(e);var d;s.verifiableCredential=[...n(e.verifiableCredential),...n(null==(r=e.vp)?void 0:r.verifiableCredential)].filter(o),s.verifiableCredential=s.verifiableCredential.map(e=>c(e,t)),t&&(null==(d=s.vp)||delete d.verifiableCredential),e.iss&&!e.holder&&(s.holder=e.iss,t&&delete s.iss),e.aud&&(s.verifier=[...n(e.verifier),...n(e.aud)].filter(o),s.verifier=[...new Set(s.verifier)],t&&delete s.aud),e.jti&&-1===Object.getOwnPropertyNames(e).indexOf("id")&&(s.id=e.id||e.jti,t&&delete s.jti);const f=[...n(e.type),...n(null==(a=e.vp)?void 0:a.type)].filter(o);var u;s.type=[...new Set(f)],t&&(null==(u=s.vp)||delete u.type);const p=[...n(e.context),...n(e["@context"]),...n(null==(l=e.vp)?void 0:l["@context"])].filter(o);var v;return s["@context"]=[...new Set(p)],t&&(delete s.context,null==(v=s.vp)||delete v["@context"]),e.issuanceDate||!e.iat&&!e.nbf||(s.issuanceDate=new Date(1e3*(e.nbf||e.iat)).toISOString(),t&&(e.nbf?delete s.nbf:delete s.iat)),!e.expirationDate&&e.exp&&(s.expirationDate=new Date(1e3*e.exp).toISOString(),t&&delete s.exp),s.vp&&0===Object.keys(s.vp).length&&t&&delete s.vp,s}function f(t,r=!0){let n;try{n=e.decodeJWT(t)}catch(e){throw new TypeError("unknown presentation format")}return{...d(n.payload,r),proof:{type:"JwtProof2020",jwt:t}}}function u(e,r=!0){var n;if("string"==typeof e){if(t.test(e))return f(e,r);{let t;try{t=JSON.parse(e)}catch(e){throw new TypeError("unknown presentation format")}return u(t,r)}}return null!=(n=e.proof)&&n.jwt?{...f(e.proof.jwt,r),proof:e.proof}:{proof:{},...d(e,r)}}function p(e,t=!0){var r,a,l;const c=i({vp:{...e.vp},...e});c.vp=c.vp;const s=[...n(e.context),...n(e["@context"]),...n(null==(r=e.vp)?void 0:r["@context"])].filter(o);c.vp["@context"]=[...new Set(s)],t&&(delete c.context,delete c["@context"]);const d=[...n(e.type),...n(null==(a=e.vp)?void 0:a.type)].filter(o);if(c.vp.type=[...new Set(d)],t&&delete c.type,e.id&&-1===Object.getOwnPropertyNames(e).indexOf("jti")&&(c.jti=e.id,t&&delete c.id),e.issuanceDate&&-1===Object.getOwnPropertyNames(e).indexOf("nbf")){const r=Date.parse(e.issuanceDate);isNaN(r)||(c.nbf=Math.floor(r/1e3),t&&delete c.issuanceDate)}if(e.expirationDate&&-1===Object.getOwnPropertyNames(e).indexOf("exp")){const r=Date.parse(e.expirationDate);isNaN(r)||(c.exp=Math.floor(r/1e3),t&&delete c.expirationDate)}var f;if((c.verifiableCredential||null!=(l=c.vp)&&l.verifiableCredential)&&(c.vp.verifiableCredential=[...n(c.verifiableCredential),...n(null==(f=c.vp)?void 0:f.verifiableCredential)].filter(o).map(e=>{var t;return"object"==typeof e&&null!=(t=e.proof)&&t.jwt?e.proof.jwt:e})),t&&delete c.verifiableCredential,e.holder&&-1===Object.getOwnPropertyNames(e).indexOf("iss")&&"string"==typeof e.holder&&(c.iss=e.holder,t&&delete c.holder),e.verifier){const r=[...n(e.verifier),...n(e.aud)].filter(o);c.aud=[...new Set(r)],t&&delete c.verifier}return c}function v(e){if("string"==typeof e&&!e.match(t))throw new TypeError(`"${e}" is not a valid JWT format`)}function y(e){if("number"==typeof e){if(!(Number.isInteger(e)&&e<1e11))throw new TypeError(`"${e}" is not a unix timestamp in seconds`)}else if("string"==typeof e)y(Math.floor(new Date(e).valueOf()/1e3));else if(!(t=e)||isNaN(t)||"[object Date]"!==Object.prototype.toString.call(t))throw new TypeError(`"${e}" is not a valid time`);var t}function b(e){const t=n(e);if(t.length<1||-1===t.indexOf(r))throw new TypeError(`@context is missing default context "${r}"`)}function x(e){const t=n(e);if(t.length<1||-1===t.indexOf("VerifiableCredential"))throw new TypeError('type is missing default "VerifiableCredential"')}function w(e){const t=n(e);if(t.length<1||-1===t.indexOf("VerifiablePresentation"))throw new TypeError('type is missing default "VerifiablePresentation"')}function j(e){if(0===Object.keys(e).length)throw new TypeError("credentialSubject must not be empty")}function O(e){b(e.vc["@context"]),x(e.vc.type),j(e.vc.credentialSubject),e.nbf&&y(e.nbf),e.exp&&y(e.exp)}function m(e){b(e["@context"]),x(e.type),j(e.credentialSubject),e.issuanceDate&&y(e.issuanceDate),e.expirationDate&&y(e.expirationDate)}function g(e){if(b(e.vp["@context"]),w(e.vp.type),e.vp.verifiableCredential&&e.vp.verifiableCredential.length>=1)for(const t of n(e.vp.verifiableCredential))"string"==typeof t?v(t):m(t);e.exp&&y(e.exp)}function h(e){if(b(e["@context"]),w(e.type),e.verifiableCredential&&e.verifiableCredential.length>=1)for(const t of e.verifiableCredential)"string"==typeof t?v(t):m(t);e.expirationDate&&y(e.expirationDate)}function S(e,t){if(t.challenge&&t.challenge!==e.nonce)throw new Error(`Presentation does not contain the mandatory challenge (JWT: nonce) for : ${t.challenge}`);if(t.domain){let r;if(e.aud&&(r=(Array.isArray(e.aud)?e.aud:[e.aud]).find(e=>t.domain===e)),void 0===r)throw new Error(`Presentation does not contain the mandatory domain (JWT: aud) for : ${t.domain}`)}}exports.createVerifiableCredentialJwt=function(t,r,n={}){try{var i;const o={iat:void 0,...s(t,n.removeOriginalFields)};return O(o),Promise.resolve(e.createJWT(o,{...n,issuer:r.did||o.iss||"",signer:r.signer},{...n.header,alg:r.alg||(null==(i=n.header)?void 0:i.alg)||"ES256K"}))}catch(e){return Promise.reject(e)}},exports.createVerifiablePresentationJwt=function(t,r,i={}){try{var a;const l={iat:void 0,...p(t,null==i?void 0:i.removeOriginalFields)};if(i.challenge&&-1===Object.getOwnPropertyNames(l).indexOf("nonce")&&(l.nonce=i.challenge),i.domain){const e=[...n(i.domain),...n(l.aud)].filter(o);l.aud=[...new Set(e)]}return g(l),Promise.resolve(e.createJWT(l,{...i,issuer:r.did||l.iss||"",signer:r.signer},{...i.header,alg:r.alg||(null==(a=i.header)?void 0:a.alg)||"ES256K"}))}catch(e){return Promise.reject(e)}},exports.normalizeCredential=c,exports.normalizePresentation=u,exports.transformCredentialInput=s,exports.transformPresentationInput=p,exports.validateCredentialPayload=m,exports.validateJwtCredentialPayload=O,exports.validateJwtPresentationPayload=g,exports.validatePresentationPayload=h,exports.verifyCredential=function(t,r,n={}){try{return Promise.resolve(e.verifyJWT(t,{resolver:r,...n})).then(function(e){return e.verifiableCredential=c(e.jwt,null==n?void 0:n.removeOriginalFields),m(e.verifiableCredential),e})}catch(e){return Promise.reject(e)}},exports.verifyPresentation=function(t,r,n={}){try{return Promise.resolve(e.verifyJWT(t,{resolver:r,...n})).then(function(e){return S(e.payload,n),e.verifiablePresentation=u(e.jwt,null==n?void 0:n.removeOriginalFields),h(e.verifiablePresentation),e})}catch(e){return Promise.reject(e)}},exports.verifyPresentationPayloadOptions=S; | ||
//# sourceMappingURL=index.js.map |
@@ -1,2 +0,2 @@ | ||
import{decodeJWT as e,createJWT as t,verifyJWT as n}from"did-jwt";function i(){return(i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e}).apply(this,arguments)}const r=/^[A-Za-z0-9-_=]+\.[A-Za-z0-9-_=]+\.?[A-Za-z0-9-_.+/=]*$/,o="https://www.w3.org/2018/credentials/v1",a=["iat","nbf","claim","vc"];function l(e){return Array.isArray(e)?e:[e]}function c(e){return Array.isArray(e)?e.map(e=>c(e)):e instanceof Date?new Date(e.getTime()):e&&"object"==typeof e?Object.getOwnPropertyNames(e).reduce((t,n)=>(Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n)),t[n]=c(e[n]),t),Object.create(Object.getPrototypeOf(e))):e}function s(e){return null!=e}function d(e,t=!0){var n,r,d,f,u,p,v;let b=c(e);var y,w,x;"object"==typeof(y=e)&&y.sub&&y.iss&&y.claim&&y.iat&&(b=function(e){const{iat:t,nbf:n,claim:r,vc:l}=e,c=i({},function(e,t){if(null==e)return{};var n,i,r={},o=Object.keys(e);for(i=0;i<o.length;i++)t.indexOf(n=o[i])>=0||(r[n]=e[n]);return r}(e,a),{nbf:n||t,vc:{"@context":[o],type:["VerifiableCredential"],credentialSubject:r}});return l&&(e.issVc=l),c}(e)),b.credentialSubject=i({},e.credentialSubject,null==(n=e.vc)?void 0:n.credentialSubject),!e.sub||null!=(r=e.credentialSubject)&&r.id||!b.credentialSubject||(b.credentialSubject.id=e.sub,t&&delete b.sub),t&&(null==(w=b.vc)||delete w.credentialSubject),void 0!==e.issuer&&"object"!=typeof e.issuer||(b.issuer=function(e){if("object"!=typeof e)return e;const t=i({},e);return Object.keys(t).forEach(e=>void 0===t[e]&&delete t[e]),t}(i({id:e.iss},e.issuer)),!t||null!=(x=e.issuer)&&x.id||delete b.iss),!e.id&&e.jti&&(b.id=b.id||b.jti,t&&delete b.jti);const j=[...l(b.type),...l(null==(d=b.vc)?void 0:d.type)].filter(s);var O,g,h,m;b.type=[...new Set(j)],t&&(null==(O=b.vc)||delete O.type),b.evidence=null==(f=e.vc)?void 0:f.evidence,t&&(null==(g=b.vc)||delete g.evidence),b.credentialStatus=null==(u=e.vc)?void 0:u.credentialStatus,t&&(null==(h=b.vc)||delete h.credentialStatus),b.termsOfUse=null==(p=e.vc)?void 0:p.termsOfUse,t&&(null==(m=b.vc)||delete m.termsOfUse);const S=[...l(e.context),...l(e["@context"]),...l(null==(v=e.vc)?void 0:v["@context"])].filter(s);var D;return b["@context"]=[...new Set(S)],t&&(delete b.context,null==(D=b.vc)||delete D["@context"]),e.issuanceDate||!e.iat&&!e.nbf||(b.issuanceDate=new Date(1e3*(e.nbf||e.iat)).toISOString(),t&&(e.nbf?delete b.nbf:delete b.iat)),!e.expirationDate&&e.exp&&(b.expirationDate=new Date(1e3*e.exp).toISOString(),t&&delete b.exp),t&&b.vc&&0===Object.keys(b.vc).length&&delete b.vc,b}function f(t,n=!0){let r;try{r=e(t)}catch(e){throw new TypeError("unknown credential format")}return i({},d(r.payload,n),{proof:{type:"JwtProof2020",jwt:t}})}function u(e,t=!0){var n;if("string"==typeof e){if(r.test(e))return f(e,t);{let n;try{n=JSON.parse(e)}catch(e){throw new TypeError("unknown credential format")}return u(n,t)}}return null!=(n=e.proof)&&n.jwt?c(i({},f(e.proof.jwt,t),{proof:e.proof})):i({proof:{}},d(e,t))}function p(e,t=!0){var n,r,o;if(Array.isArray(e.credentialSubject))throw Error("credentialSubject of type array not supported");const a=c(i({vc:i({},e.vc)},e));a.vc=a.vc;const d=i({},e.credentialSubject,null==(n=e.vc)?void 0:n.credentialSubject);var f;e.sub||(a.sub=null==(f=e.credentialSubject)?void 0:f.id,t&&delete d.id);const u=[...l(e.context),...l(e["@context"]),...l(null==(r=e.vc)?void 0:r["@context"])].filter(s);a.vc["@context"]=[...new Set(u)],t&&(delete a.context,delete a["@context"]);const p=[...l(e.type),...l(null==(o=e.vc)?void 0:o.type)].filter(s);if(a.vc.type=[...new Set(p)],t&&delete a.type,e.id&&-1===Object.getOwnPropertyNames(e).indexOf("jti")&&(a.jti=e.id,t&&delete a.id),e.issuanceDate&&-1===Object.getOwnPropertyNames(e).indexOf("nbf")){const n=Date.parse(e.issuanceDate);isNaN(n)||(a.nbf=Math.floor(n/1e3),t&&delete a.issuanceDate)}if(e.expirationDate&&-1===Object.getOwnPropertyNames(e).indexOf("exp")){const n=Date.parse(e.expirationDate);isNaN(n)||(a.exp=Math.floor(n/1e3),t&&delete a.expirationDate)}var v;e.issuer&&-1===Object.getOwnPropertyNames(e).indexOf("iss")&&("object"==typeof e.issuer?(a.iss=null==(v=e.issuer)?void 0:v.id,t&&(delete a.issuer.id,0===Object.keys(a.issuer).length&&delete a.issuer)):"string"==typeof e.issuer&&(a.iss=e.iss||""+e.issuer,t&&delete a.issuer)),a.vc.credentialSubject=d,t&&delete a.credentialSubject;const b=["evidence","termsOfUse","refreshService","credentialSchema","credentialStatus"];for(const n of b)e[n]&&(a.vc[n]||(a.vc[n]=e[n]),t&&delete a[n]);return a}function v(e,t=!0){var n,i,r;const o=c(e);var a;o.verifiableCredential=[...l(e.verifiableCredential),...l(null==(n=e.vp)?void 0:n.verifiableCredential)].filter(s),o.verifiableCredential=o.verifiableCredential.map(e=>u(e,t)),t&&(null==(a=o.vp)||delete a.verifiableCredential),e.iss&&!e.holder&&(o.holder=e.iss,t&&delete o.iss),e.aud&&(o.verifier=[...l(e.verifier),...l(e.aud)].filter(s),o.verifier=[...new Set(o.verifier)],t&&delete o.aud),e.jti&&-1===Object.getOwnPropertyNames(e).indexOf("id")&&(o.id=e.id||e.jti,t&&delete o.jti);const d=[...l(e.type),...l(null==(i=e.vp)?void 0:i.type)].filter(s);var f;o.type=[...new Set(d)],t&&(null==(f=o.vp)||delete f.type);const p=[...l(e.context),...l(e["@context"]),...l(null==(r=e.vp)?void 0:r["@context"])].filter(s);var v;return o["@context"]=[...new Set(p)],t&&(delete o.context,null==(v=o.vp)||delete v["@context"]),e.issuanceDate||!e.iat&&!e.nbf||(o.issuanceDate=new Date(1e3*(e.nbf||e.iat)).toISOString(),t&&(e.nbf?delete o.nbf:delete o.iat)),!e.expirationDate&&e.exp&&(o.expirationDate=new Date(1e3*e.exp).toISOString(),t&&delete o.exp),o.vp&&0===Object.keys(o.vp).length&&t&&delete o.vp,o}function b(t,n=!0){let r;try{r=e(t)}catch(e){throw new TypeError("unknown presentation format")}return i({},v(r.payload,n),{proof:{type:"JwtProof2020",jwt:t}})}function y(e,t=!0){var n;if("string"==typeof e){if(r.test(e))return b(e,t);{let n;try{n=JSON.parse(e)}catch(e){throw new TypeError("unknown presentation format")}return y(n,t)}}return null!=(n=e.proof)&&n.jwt?i({},b(e.proof.jwt,t),{proof:e.proof}):i({proof:{}},v(e,t))}function w(e,t=!0){var n,r,o;const a=c(i({vp:i({},e.vp)},e));a.vp=a.vp;const d=[...l(e.context),...l(e["@context"]),...l(null==(n=e.vp)?void 0:n["@context"])].filter(s);a.vp["@context"]=[...new Set(d)],t&&(delete a.context,delete a["@context"]);const f=[...l(e.type),...l(null==(r=e.vp)?void 0:r.type)].filter(s);if(a.vp.type=[...new Set(f)],t&&delete a.type,e.id&&-1===Object.getOwnPropertyNames(e).indexOf("jti")&&(a.jti=e.id,t&&delete a.id),e.issuanceDate&&-1===Object.getOwnPropertyNames(e).indexOf("nbf")){const n=Date.parse(e.issuanceDate);isNaN(n)||(a.nbf=Math.floor(n/1e3),t&&delete a.issuanceDate)}if(e.expirationDate&&-1===Object.getOwnPropertyNames(e).indexOf("exp")){const n=Date.parse(e.expirationDate);isNaN(n)||(a.exp=Math.floor(n/1e3),t&&delete a.expirationDate)}var u;if((a.verifiableCredential||null!=(o=a.vp)&&o.verifiableCredential)&&(a.vp.verifiableCredential=[...l(a.verifiableCredential),...l(null==(u=a.vp)?void 0:u.verifiableCredential)].filter(s).map(e=>{var t;return"object"==typeof e&&null!=(t=e.proof)&&t.jwt?e.proof.jwt:e})),t&&delete a.verifiableCredential,e.holder&&-1===Object.getOwnPropertyNames(e).indexOf("iss")&&"string"==typeof e.holder&&(a.iss=e.holder,t&&delete a.holder),e.verifier){const n=[...l(e.verifier),...l(e.aud)].filter(s);a.aud=[...new Set(n)],t&&delete a.verifier}return a}function x(e){if("string"==typeof e&&!e.match(r))throw new TypeError(`"${e}" is not a valid JWT format`)}function j(e){if("number"==typeof e){if(!(Number.isInteger(e)&&e<1e11))throw new TypeError(`"${e}" is not a unix timestamp in seconds`)}else if("string"==typeof e)j(Math.floor(new Date(e).valueOf()/1e3));else if(!(t=e)||isNaN(t)||"[object Date]"!==Object.prototype.toString.call(t))throw new TypeError(`"${e}" is not a valid time`);var t}function O(e){const t=l(e);if(t.length<1||-1===t.indexOf(o))throw new TypeError(`@context is missing default context "${o}"`)}function g(e){const t=l(e);if(t.length<1||-1===t.indexOf("VerifiableCredential"))throw new TypeError('type is missing default "VerifiableCredential"')}function h(e){const t=l(e);if(t.length<1||-1===t.indexOf("VerifiablePresentation"))throw new TypeError('type is missing default "VerifiablePresentation"')}function m(e){if(0===Object.keys(e).length)throw new TypeError("credentialSubject must not be empty")}async function S(e,n,r={}){var o;const a=i({iat:void 0},p(e,r.removeOriginalFields));return N(a),t(a,{issuer:n.did||a.iss||"",signer:n.signer},i({},r.header,{alg:n.alg||(null==(o=r.header)?void 0:o.alg)||"ES256K"}))}async function D(e,n,r={}){var o;const a=i({iat:void 0},w(e,null==r?void 0:r.removeOriginalFields));if(r.challenge&&-1===Object.getOwnPropertyNames(a).indexOf("nonce")&&(a.nonce=r.challenge),r.domain){const e=[...l(r.domain),...l(a.aud)].filter(s);a.aud=[...new Set(e)]}return P(a),t(a,{issuer:n.did||a.iss||"",signer:n.signer},i({},r.header,{alg:n.alg||(null==(o=r.header)?void 0:o.alg)||"ES256K"}))}function N(e){O(e.vc["@context"]),g(e.vc.type),m(e.vc.credentialSubject),e.nbf&&j(e.nbf),e.exp&&j(e.exp)}function C(e){O(e["@context"]),g(e.type),m(e.credentialSubject),e.issuanceDate&&j(e.issuanceDate),e.expirationDate&&j(e.expirationDate)}function P(e){if(O(e.vp["@context"]),h(e.vp.type),e.vp.verifiableCredential&&e.vp.verifiableCredential.length>=1)for(const t of l(e.vp.verifiableCredential))"string"==typeof t?x(t):C(t);e.exp&&j(e.exp)}function E(e){if(O(e["@context"]),h(e.type),e.verifiableCredential&&e.verifiableCredential.length>=1)for(const t of e.verifiableCredential)"string"==typeof t?x(t):C(t);e.expirationDate&&j(e.expirationDate)}async function T(e,t,r={}){const o=await n(e,i({resolver:t},r));return o.verifiableCredential=u(o.jwt,null==r?void 0:r.removeOriginalFields),C(o.verifiableCredential),o}function A(e,t){if(t.challenge&&t.challenge!==e.nonce)throw new Error(`Presentation does not contain the mandatory challenge (JWT: nonce) for : ${t.challenge}`);if(t.domain){let n;if(e.aud&&(n=(Array.isArray(e.aud)?e.aud:[e.aud]).find(e=>t.domain===e)),void 0===n)throw new Error(`Presentation does not contain the mandatory domain (JWT: aud) for : ${t.domain}`)}}async function k(e,t,r={}){const o=await n(e,i({resolver:t},r));return A(o.payload,r),o.verifiablePresentation=y(o.jwt,null==r?void 0:r.removeOriginalFields),E(o.verifiablePresentation),o}export{S as createVerifiableCredentialJwt,D as createVerifiablePresentationJwt,u as normalizeCredential,y as normalizePresentation,p as transformCredentialInput,w as transformPresentationInput,C as validateCredentialPayload,N as validateJwtCredentialPayload,P as validateJwtPresentationPayload,E as validatePresentationPayload,T as verifyCredential,k as verifyPresentation,A as verifyPresentationPayloadOptions}; | ||
import{decodeJWT as e,createJWT as t,verifyJWT as n}from"did-jwt";function i(){return(i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e}).apply(this,arguments)}const r=/^[A-Za-z0-9-_=]+\.[A-Za-z0-9-_=]+\.?[A-Za-z0-9-_.+/=]*$/,o="https://www.w3.org/2018/credentials/v1",a=["iat","nbf","claim","vc"];function l(e){return Array.isArray(e)?e:[e]}function c(e){return Array.isArray(e)?e.map(e=>c(e)):e instanceof Date?new Date(e.getTime()):e&&"object"==typeof e?Object.getOwnPropertyNames(e).reduce((t,n)=>(Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n)),t[n]=c(e[n]),t),Object.create(Object.getPrototypeOf(e))):e}function s(e){return null!=e}function d(e,t=!0){var n,r,d,f,u,p,v;let b=c(e);var y,w,x;"object"==typeof(y=e)&&y.sub&&y.iss&&y.claim&&y.iat&&(b=function(e){const{iat:t,nbf:n,claim:r,vc:l}=e,c=i({},function(e,t){if(null==e)return{};var n,i,r={},o=Object.keys(e);for(i=0;i<o.length;i++)t.indexOf(n=o[i])>=0||(r[n]=e[n]);return r}(e,a),{nbf:n||t,vc:{"@context":[o],type:["VerifiableCredential"],credentialSubject:r}});return l&&(e.issVc=l),c}(e)),b.credentialSubject=i({},e.credentialSubject,null==(n=e.vc)?void 0:n.credentialSubject),!e.sub||null!=(r=e.credentialSubject)&&r.id||!b.credentialSubject||(b.credentialSubject.id=e.sub,t&&delete b.sub),t&&(null==(w=b.vc)||delete w.credentialSubject),void 0!==e.issuer&&"object"!=typeof e.issuer||(b.issuer=function(e){if("object"!=typeof e)return e;const t=i({},e);return Object.keys(t).forEach(e=>void 0===t[e]&&delete t[e]),t}(i({id:e.iss},e.issuer)),!t||null!=(x=e.issuer)&&x.id||delete b.iss),!e.id&&e.jti&&(b.id=b.id||b.jti,t&&delete b.jti);const j=[...l(b.type),...l(null==(d=b.vc)?void 0:d.type)].filter(s);var O,g,h,m;b.type=[...new Set(j)],t&&(null==(O=b.vc)||delete O.type),b.evidence=null==(f=e.vc)?void 0:f.evidence,t&&(null==(g=b.vc)||delete g.evidence),b.credentialStatus=null==(u=e.vc)?void 0:u.credentialStatus,t&&(null==(h=b.vc)||delete h.credentialStatus),b.termsOfUse=null==(p=e.vc)?void 0:p.termsOfUse,t&&(null==(m=b.vc)||delete m.termsOfUse);const S=[...l(e.context),...l(e["@context"]),...l(null==(v=e.vc)?void 0:v["@context"])].filter(s);var D;return b["@context"]=[...new Set(S)],t&&(delete b.context,null==(D=b.vc)||delete D["@context"]),e.issuanceDate||!e.iat&&!e.nbf||(b.issuanceDate=new Date(1e3*(e.nbf||e.iat)).toISOString(),t&&(e.nbf?delete b.nbf:delete b.iat)),!e.expirationDate&&e.exp&&(b.expirationDate=new Date(1e3*e.exp).toISOString(),t&&delete b.exp),t&&b.vc&&0===Object.keys(b.vc).length&&delete b.vc,b}function f(t,n=!0){let r;try{r=e(t)}catch(e){throw new TypeError("unknown credential format")}return i({},d(r.payload,n),{proof:{type:"JwtProof2020",jwt:t}})}function u(e,t=!0){var n;if("string"==typeof e){if(r.test(e))return f(e,t);{let n;try{n=JSON.parse(e)}catch(e){throw new TypeError("unknown credential format")}return u(n,t)}}return null!=(n=e.proof)&&n.jwt?c(i({},f(e.proof.jwt,t),{proof:e.proof})):i({proof:{}},d(e,t))}function p(e,t=!0){var n,r,o;if(Array.isArray(e.credentialSubject))throw Error("credentialSubject of type array not supported");const a=c(i({vc:i({},e.vc)},e));a.vc=a.vc;const d=i({},e.credentialSubject,null==(n=e.vc)?void 0:n.credentialSubject);var f;e.sub||(a.sub=null==(f=e.credentialSubject)?void 0:f.id,t&&delete d.id);const u=[...l(e.context),...l(e["@context"]),...l(null==(r=e.vc)?void 0:r["@context"])].filter(s);a.vc["@context"]=[...new Set(u)],t&&(delete a.context,delete a["@context"]);const p=[...l(e.type),...l(null==(o=e.vc)?void 0:o.type)].filter(s);if(a.vc.type=[...new Set(p)],t&&delete a.type,e.id&&-1===Object.getOwnPropertyNames(e).indexOf("jti")&&(a.jti=e.id,t&&delete a.id),e.issuanceDate&&-1===Object.getOwnPropertyNames(e).indexOf("nbf")){const n=Date.parse(e.issuanceDate);isNaN(n)||(a.nbf=Math.floor(n/1e3),t&&delete a.issuanceDate)}if(e.expirationDate&&-1===Object.getOwnPropertyNames(e).indexOf("exp")){const n=Date.parse(e.expirationDate);isNaN(n)||(a.exp=Math.floor(n/1e3),t&&delete a.expirationDate)}var v;e.issuer&&-1===Object.getOwnPropertyNames(e).indexOf("iss")&&("object"==typeof e.issuer?(a.iss=null==(v=e.issuer)?void 0:v.id,t&&(delete a.issuer.id,0===Object.keys(a.issuer).length&&delete a.issuer)):"string"==typeof e.issuer&&(a.iss=e.iss||""+e.issuer,t&&delete a.issuer)),a.vc.credentialSubject=d,t&&delete a.credentialSubject;const b=["evidence","termsOfUse","refreshService","credentialSchema","credentialStatus"];for(const n of b)e[n]&&(a.vc[n]||(a.vc[n]=e[n]),t&&delete a[n]);return a}function v(e,t=!0){var n,i,r;const o=c(e);var a;o.verifiableCredential=[...l(e.verifiableCredential),...l(null==(n=e.vp)?void 0:n.verifiableCredential)].filter(s),o.verifiableCredential=o.verifiableCredential.map(e=>u(e,t)),t&&(null==(a=o.vp)||delete a.verifiableCredential),e.iss&&!e.holder&&(o.holder=e.iss,t&&delete o.iss),e.aud&&(o.verifier=[...l(e.verifier),...l(e.aud)].filter(s),o.verifier=[...new Set(o.verifier)],t&&delete o.aud),e.jti&&-1===Object.getOwnPropertyNames(e).indexOf("id")&&(o.id=e.id||e.jti,t&&delete o.jti);const d=[...l(e.type),...l(null==(i=e.vp)?void 0:i.type)].filter(s);var f;o.type=[...new Set(d)],t&&(null==(f=o.vp)||delete f.type);const p=[...l(e.context),...l(e["@context"]),...l(null==(r=e.vp)?void 0:r["@context"])].filter(s);var v;return o["@context"]=[...new Set(p)],t&&(delete o.context,null==(v=o.vp)||delete v["@context"]),e.issuanceDate||!e.iat&&!e.nbf||(o.issuanceDate=new Date(1e3*(e.nbf||e.iat)).toISOString(),t&&(e.nbf?delete o.nbf:delete o.iat)),!e.expirationDate&&e.exp&&(o.expirationDate=new Date(1e3*e.exp).toISOString(),t&&delete o.exp),o.vp&&0===Object.keys(o.vp).length&&t&&delete o.vp,o}function b(t,n=!0){let r;try{r=e(t)}catch(e){throw new TypeError("unknown presentation format")}return i({},v(r.payload,n),{proof:{type:"JwtProof2020",jwt:t}})}function y(e,t=!0){var n;if("string"==typeof e){if(r.test(e))return b(e,t);{let n;try{n=JSON.parse(e)}catch(e){throw new TypeError("unknown presentation format")}return y(n,t)}}return null!=(n=e.proof)&&n.jwt?i({},b(e.proof.jwt,t),{proof:e.proof}):i({proof:{}},v(e,t))}function w(e,t=!0){var n,r,o;const a=c(i({vp:i({},e.vp)},e));a.vp=a.vp;const d=[...l(e.context),...l(e["@context"]),...l(null==(n=e.vp)?void 0:n["@context"])].filter(s);a.vp["@context"]=[...new Set(d)],t&&(delete a.context,delete a["@context"]);const f=[...l(e.type),...l(null==(r=e.vp)?void 0:r.type)].filter(s);if(a.vp.type=[...new Set(f)],t&&delete a.type,e.id&&-1===Object.getOwnPropertyNames(e).indexOf("jti")&&(a.jti=e.id,t&&delete a.id),e.issuanceDate&&-1===Object.getOwnPropertyNames(e).indexOf("nbf")){const n=Date.parse(e.issuanceDate);isNaN(n)||(a.nbf=Math.floor(n/1e3),t&&delete a.issuanceDate)}if(e.expirationDate&&-1===Object.getOwnPropertyNames(e).indexOf("exp")){const n=Date.parse(e.expirationDate);isNaN(n)||(a.exp=Math.floor(n/1e3),t&&delete a.expirationDate)}var u;if((a.verifiableCredential||null!=(o=a.vp)&&o.verifiableCredential)&&(a.vp.verifiableCredential=[...l(a.verifiableCredential),...l(null==(u=a.vp)?void 0:u.verifiableCredential)].filter(s).map(e=>{var t;return"object"==typeof e&&null!=(t=e.proof)&&t.jwt?e.proof.jwt:e})),t&&delete a.verifiableCredential,e.holder&&-1===Object.getOwnPropertyNames(e).indexOf("iss")&&"string"==typeof e.holder&&(a.iss=e.holder,t&&delete a.holder),e.verifier){const n=[...l(e.verifier),...l(e.aud)].filter(s);a.aud=[...new Set(n)],t&&delete a.verifier}return a}function x(e){if("string"==typeof e&&!e.match(r))throw new TypeError(`"${e}" is not a valid JWT format`)}function j(e){if("number"==typeof e){if(!(Number.isInteger(e)&&e<1e11))throw new TypeError(`"${e}" is not a unix timestamp in seconds`)}else if("string"==typeof e)j(Math.floor(new Date(e).valueOf()/1e3));else if(!(t=e)||isNaN(t)||"[object Date]"!==Object.prototype.toString.call(t))throw new TypeError(`"${e}" is not a valid time`);var t}function O(e){const t=l(e);if(t.length<1||-1===t.indexOf(o))throw new TypeError(`@context is missing default context "${o}"`)}function g(e){const t=l(e);if(t.length<1||-1===t.indexOf("VerifiableCredential"))throw new TypeError('type is missing default "VerifiableCredential"')}function h(e){const t=l(e);if(t.length<1||-1===t.indexOf("VerifiablePresentation"))throw new TypeError('type is missing default "VerifiablePresentation"')}function m(e){if(0===Object.keys(e).length)throw new TypeError("credentialSubject must not be empty")}async function S(e,n,r={}){var o;const a=i({iat:void 0},p(e,r.removeOriginalFields));return N(a),t(a,i({},r,{issuer:n.did||a.iss||"",signer:n.signer}),i({},r.header,{alg:n.alg||(null==(o=r.header)?void 0:o.alg)||"ES256K"}))}async function D(e,n,r={}){var o;const a=i({iat:void 0},w(e,null==r?void 0:r.removeOriginalFields));if(r.challenge&&-1===Object.getOwnPropertyNames(a).indexOf("nonce")&&(a.nonce=r.challenge),r.domain){const e=[...l(r.domain),...l(a.aud)].filter(s);a.aud=[...new Set(e)]}return P(a),t(a,i({},r,{issuer:n.did||a.iss||"",signer:n.signer}),i({},r.header,{alg:n.alg||(null==(o=r.header)?void 0:o.alg)||"ES256K"}))}function N(e){O(e.vc["@context"]),g(e.vc.type),m(e.vc.credentialSubject),e.nbf&&j(e.nbf),e.exp&&j(e.exp)}function C(e){O(e["@context"]),g(e.type),m(e.credentialSubject),e.issuanceDate&&j(e.issuanceDate),e.expirationDate&&j(e.expirationDate)}function P(e){if(O(e.vp["@context"]),h(e.vp.type),e.vp.verifiableCredential&&e.vp.verifiableCredential.length>=1)for(const t of l(e.vp.verifiableCredential))"string"==typeof t?x(t):C(t);e.exp&&j(e.exp)}function E(e){if(O(e["@context"]),h(e.type),e.verifiableCredential&&e.verifiableCredential.length>=1)for(const t of e.verifiableCredential)"string"==typeof t?x(t):C(t);e.expirationDate&&j(e.expirationDate)}async function T(e,t,r={}){const o=await n(e,i({resolver:t},r));return o.verifiableCredential=u(o.jwt,null==r?void 0:r.removeOriginalFields),C(o.verifiableCredential),o}function A(e,t){if(t.challenge&&t.challenge!==e.nonce)throw new Error(`Presentation does not contain the mandatory challenge (JWT: nonce) for : ${t.challenge}`);if(t.domain){let n;if(e.aud&&(n=(Array.isArray(e.aud)?e.aud:[e.aud]).find(e=>t.domain===e)),void 0===n)throw new Error(`Presentation does not contain the mandatory domain (JWT: aud) for : ${t.domain}`)}}async function k(e,t,r={}){const o=await n(e,i({resolver:t},r));return A(o.payload,r),o.verifiablePresentation=y(o.jwt,null==r?void 0:r.removeOriginalFields),E(o.verifiablePresentation),o}export{S as createVerifiableCredentialJwt,D as createVerifiablePresentationJwt,u as normalizeCredential,y as normalizePresentation,p as transformCredentialInput,w as transformPresentationInput,C as validateCredentialPayload,N as validateJwtCredentialPayload,P as validateJwtPresentationPayload,E as validatePresentationPayload,T as verifyCredential,k as verifyPresentation,A as verifyPresentationPayloadOptions}; | ||
//# sourceMappingURL=index.modern.js.map |
@@ -1,2 +0,2 @@ | ||
import{decodeJWT as e,verifyJWT as t,createJWT as n}from"did-jwt";const r=/^[A-Za-z0-9-_=]+\.[A-Za-z0-9-_=]+\.?[A-Za-z0-9-_.+/=]*$/,i="https://www.w3.org/2018/credentials/v1";function o(e){return Array.isArray(e)?e:[e]}function a(e){return Array.isArray(e)?e.map(e=>a(e)):e instanceof Date?new Date(e.getTime()):e&&"object"==typeof e?Object.getOwnPropertyNames(e).reduce((t,n)=>(Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n)),t[n]=a(e[n]),t),Object.create(Object.getPrototypeOf(e))):e}function l(e){return null!=e}function c(e,t=!0){var n,r,c,s,d,f,u;let p=a(e);var v,b,y;"object"==typeof(v=e)&&v.sub&&v.iss&&v.claim&&v.iat&&(p=function(e){const{iat:t,nbf:n,claim:r,vc:o,...a}=e,l={...a,nbf:n||t,vc:{"@context":[i],type:["VerifiableCredential"],credentialSubject:r}};return o&&(e.issVc=o),l}(e)),p.credentialSubject={...e.credentialSubject,...null==(n=e.vc)?void 0:n.credentialSubject},!e.sub||null!=(r=e.credentialSubject)&&r.id||!p.credentialSubject||(p.credentialSubject.id=e.sub,t&&delete p.sub),t&&(null==(b=p.vc)||delete b.credentialSubject),void 0!==e.issuer&&"object"!=typeof e.issuer||(p.issuer=function(e){if("object"!=typeof e)return e;const t={...e};return Object.keys(t).forEach(e=>void 0===t[e]&&delete t[e]),t}({id:e.iss,...e.issuer}),!t||null!=(y=e.issuer)&&y.id||delete p.iss),!e.id&&e.jti&&(p.id=p.id||p.jti,t&&delete p.jti);const w=[...o(p.type),...o(null==(c=p.vc)?void 0:c.type)].filter(l);var x,j,O,g;p.type=[...new Set(w)],t&&(null==(x=p.vc)||delete x.type),p.evidence=null==(s=e.vc)?void 0:s.evidence,t&&(null==(j=p.vc)||delete j.evidence),p.credentialStatus=null==(d=e.vc)?void 0:d.credentialStatus,t&&(null==(O=p.vc)||delete O.credentialStatus),p.termsOfUse=null==(f=e.vc)?void 0:f.termsOfUse,t&&(null==(g=p.vc)||delete g.termsOfUse);const h=[...o(e.context),...o(e["@context"]),...o(null==(u=e.vc)?void 0:u["@context"])].filter(l);var m;return p["@context"]=[...new Set(h)],t&&(delete p.context,null==(m=p.vc)||delete m["@context"]),e.issuanceDate||!e.iat&&!e.nbf||(p.issuanceDate=new Date(1e3*(e.nbf||e.iat)).toISOString(),t&&(e.nbf?delete p.nbf:delete p.iat)),!e.expirationDate&&e.exp&&(p.expirationDate=new Date(1e3*e.exp).toISOString(),t&&delete p.exp),t&&p.vc&&0===Object.keys(p.vc).length&&delete p.vc,p}function s(t,n=!0){let r;try{r=e(t)}catch(e){throw new TypeError("unknown credential format")}return{...c(r.payload,n),proof:{type:"JwtProof2020",jwt:t}}}function d(e,t=!0){var n;if("string"==typeof e){if(r.test(e))return s(e,t);{let n;try{n=JSON.parse(e)}catch(e){throw new TypeError("unknown credential format")}return d(n,t)}}return null!=(n=e.proof)&&n.jwt?a({...s(e.proof.jwt,t),proof:e.proof}):{proof:{},...c(e,t)}}function f(e,t=!0){var n,r,i;if(Array.isArray(e.credentialSubject))throw Error("credentialSubject of type array not supported");const c=a({vc:{...e.vc},...e});c.vc=c.vc;const s={...e.credentialSubject,...null==(n=e.vc)?void 0:n.credentialSubject};var d;e.sub||(c.sub=null==(d=e.credentialSubject)?void 0:d.id,t&&delete s.id);const f=[...o(e.context),...o(e["@context"]),...o(null==(r=e.vc)?void 0:r["@context"])].filter(l);c.vc["@context"]=[...new Set(f)],t&&(delete c.context,delete c["@context"]);const u=[...o(e.type),...o(null==(i=e.vc)?void 0:i.type)].filter(l);if(c.vc.type=[...new Set(u)],t&&delete c.type,e.id&&-1===Object.getOwnPropertyNames(e).indexOf("jti")&&(c.jti=e.id,t&&delete c.id),e.issuanceDate&&-1===Object.getOwnPropertyNames(e).indexOf("nbf")){const n=Date.parse(e.issuanceDate);isNaN(n)||(c.nbf=Math.floor(n/1e3),t&&delete c.issuanceDate)}if(e.expirationDate&&-1===Object.getOwnPropertyNames(e).indexOf("exp")){const n=Date.parse(e.expirationDate);isNaN(n)||(c.exp=Math.floor(n/1e3),t&&delete c.expirationDate)}var p;e.issuer&&-1===Object.getOwnPropertyNames(e).indexOf("iss")&&("object"==typeof e.issuer?(c.iss=null==(p=e.issuer)?void 0:p.id,t&&(delete c.issuer.id,0===Object.keys(c.issuer).length&&delete c.issuer)):"string"==typeof e.issuer&&(c.iss=e.iss||""+e.issuer,t&&delete c.issuer)),c.vc.credentialSubject=s,t&&delete c.credentialSubject;const v=["evidence","termsOfUse","refreshService","credentialSchema","credentialStatus"];for(const n of v)e[n]&&(c.vc[n]||(c.vc[n]=e[n]),t&&delete c[n]);return c}function u(e,t=!0){var n,r,i;const c=a(e);var s;c.verifiableCredential=[...o(e.verifiableCredential),...o(null==(n=e.vp)?void 0:n.verifiableCredential)].filter(l),c.verifiableCredential=c.verifiableCredential.map(e=>d(e,t)),t&&(null==(s=c.vp)||delete s.verifiableCredential),e.iss&&!e.holder&&(c.holder=e.iss,t&&delete c.iss),e.aud&&(c.verifier=[...o(e.verifier),...o(e.aud)].filter(l),c.verifier=[...new Set(c.verifier)],t&&delete c.aud),e.jti&&-1===Object.getOwnPropertyNames(e).indexOf("id")&&(c.id=e.id||e.jti,t&&delete c.jti);const f=[...o(e.type),...o(null==(r=e.vp)?void 0:r.type)].filter(l);var u;c.type=[...new Set(f)],t&&(null==(u=c.vp)||delete u.type);const p=[...o(e.context),...o(e["@context"]),...o(null==(i=e.vp)?void 0:i["@context"])].filter(l);var v;return c["@context"]=[...new Set(p)],t&&(delete c.context,null==(v=c.vp)||delete v["@context"]),e.issuanceDate||!e.iat&&!e.nbf||(c.issuanceDate=new Date(1e3*(e.nbf||e.iat)).toISOString(),t&&(e.nbf?delete c.nbf:delete c.iat)),!e.expirationDate&&e.exp&&(c.expirationDate=new Date(1e3*e.exp).toISOString(),t&&delete c.exp),c.vp&&0===Object.keys(c.vp).length&&t&&delete c.vp,c}function p(t,n=!0){let r;try{r=e(t)}catch(e){throw new TypeError("unknown presentation format")}return{...u(r.payload,n),proof:{type:"JwtProof2020",jwt:t}}}function v(e,t=!0){var n;if("string"==typeof e){if(r.test(e))return p(e,t);{let n;try{n=JSON.parse(e)}catch(e){throw new TypeError("unknown presentation format")}return v(n,t)}}return null!=(n=e.proof)&&n.jwt?{...p(e.proof.jwt,t),proof:e.proof}:{proof:{},...u(e,t)}}function b(e,t=!0){var n,r,i;const c=a({vp:{...e.vp},...e});c.vp=c.vp;const s=[...o(e.context),...o(e["@context"]),...o(null==(n=e.vp)?void 0:n["@context"])].filter(l);c.vp["@context"]=[...new Set(s)],t&&(delete c.context,delete c["@context"]);const d=[...o(e.type),...o(null==(r=e.vp)?void 0:r.type)].filter(l);if(c.vp.type=[...new Set(d)],t&&delete c.type,e.id&&-1===Object.getOwnPropertyNames(e).indexOf("jti")&&(c.jti=e.id,t&&delete c.id),e.issuanceDate&&-1===Object.getOwnPropertyNames(e).indexOf("nbf")){const n=Date.parse(e.issuanceDate);isNaN(n)||(c.nbf=Math.floor(n/1e3),t&&delete c.issuanceDate)}if(e.expirationDate&&-1===Object.getOwnPropertyNames(e).indexOf("exp")){const n=Date.parse(e.expirationDate);isNaN(n)||(c.exp=Math.floor(n/1e3),t&&delete c.expirationDate)}var f;if((c.verifiableCredential||null!=(i=c.vp)&&i.verifiableCredential)&&(c.vp.verifiableCredential=[...o(c.verifiableCredential),...o(null==(f=c.vp)?void 0:f.verifiableCredential)].filter(l).map(e=>{var t;return"object"==typeof e&&null!=(t=e.proof)&&t.jwt?e.proof.jwt:e})),t&&delete c.verifiableCredential,e.holder&&-1===Object.getOwnPropertyNames(e).indexOf("iss")&&"string"==typeof e.holder&&(c.iss=e.holder,t&&delete c.holder),e.verifier){const n=[...o(e.verifier),...o(e.aud)].filter(l);c.aud=[...new Set(n)],t&&delete c.verifier}return c}function y(e){if("string"==typeof e&&!e.match(r))throw new TypeError(`"${e}" is not a valid JWT format`)}function w(e){if("number"==typeof e){if(!(Number.isInteger(e)&&e<1e11))throw new TypeError(`"${e}" is not a unix timestamp in seconds`)}else if("string"==typeof e)w(Math.floor(new Date(e).valueOf()/1e3));else if(!(t=e)||isNaN(t)||"[object Date]"!==Object.prototype.toString.call(t))throw new TypeError(`"${e}" is not a valid time`);var t}function x(e){const t=o(e);if(t.length<1||-1===t.indexOf(i))throw new TypeError(`@context is missing default context "${i}"`)}function j(e){const t=o(e);if(t.length<1||-1===t.indexOf("VerifiableCredential"))throw new TypeError('type is missing default "VerifiableCredential"')}function O(e){const t=o(e);if(t.length<1||-1===t.indexOf("VerifiablePresentation"))throw new TypeError('type is missing default "VerifiablePresentation"')}function g(e){if(0===Object.keys(e).length)throw new TypeError("credentialSubject must not be empty")}const h=function(e,n,r={}){try{return Promise.resolve(t(e,{resolver:n,...r})).then(function(e){return T(e.payload,r),e.verifiablePresentation=v(e.jwt,null==r?void 0:r.removeOriginalFields),E(e.verifiablePresentation),e})}catch(e){return Promise.reject(e)}},m=function(e,n,r={}){try{return Promise.resolve(t(e,{resolver:n,...r})).then(function(e){return e.verifiableCredential=d(e.jwt,null==r?void 0:r.removeOriginalFields),N(e.verifiableCredential),e})}catch(e){return Promise.reject(e)}},S=function(e,t,r={}){try{var i;const a={iat:void 0,...b(e,null==r?void 0:r.removeOriginalFields)};if(r.challenge&&-1===Object.getOwnPropertyNames(a).indexOf("nonce")&&(a.nonce=r.challenge),r.domain){const e=[...o(r.domain),...o(a.aud)].filter(l);a.aud=[...new Set(e)]}return C(a),Promise.resolve(n(a,{issuer:t.did||a.iss||"",signer:t.signer},{...r.header,alg:t.alg||(null==(i=r.header)?void 0:i.alg)||"ES256K"}))}catch(e){return Promise.reject(e)}},D=function(e,t,r={}){try{var i;const o={iat:void 0,...f(e,r.removeOriginalFields)};return P(o),Promise.resolve(n(o,{issuer:t.did||o.iss||"",signer:t.signer},{...r.header,alg:t.alg||(null==(i=r.header)?void 0:i.alg)||"ES256K"}))}catch(e){return Promise.reject(e)}};function P(e){x(e.vc["@context"]),j(e.vc.type),g(e.vc.credentialSubject),e.nbf&&w(e.nbf),e.exp&&w(e.exp)}function N(e){x(e["@context"]),j(e.type),g(e.credentialSubject),e.issuanceDate&&w(e.issuanceDate),e.expirationDate&&w(e.expirationDate)}function C(e){if(x(e.vp["@context"]),O(e.vp.type),e.vp.verifiableCredential&&e.vp.verifiableCredential.length>=1)for(const t of o(e.vp.verifiableCredential))"string"==typeof t?y(t):N(t);e.exp&&w(e.exp)}function E(e){if(x(e["@context"]),O(e.type),e.verifiableCredential&&e.verifiableCredential.length>=1)for(const t of e.verifiableCredential)"string"==typeof t?y(t):N(t);e.expirationDate&&w(e.expirationDate)}function T(e,t){if(t.challenge&&t.challenge!==e.nonce)throw new Error(`Presentation does not contain the mandatory challenge (JWT: nonce) for : ${t.challenge}`);if(t.domain){let n;if(e.aud&&(n=(Array.isArray(e.aud)?e.aud:[e.aud]).find(e=>t.domain===e)),void 0===n)throw new Error(`Presentation does not contain the mandatory domain (JWT: aud) for : ${t.domain}`)}}export{D as createVerifiableCredentialJwt,S as createVerifiablePresentationJwt,d as normalizeCredential,v as normalizePresentation,f as transformCredentialInput,b as transformPresentationInput,N as validateCredentialPayload,P as validateJwtCredentialPayload,C as validateJwtPresentationPayload,E as validatePresentationPayload,m as verifyCredential,h as verifyPresentation,T as verifyPresentationPayloadOptions}; | ||
import{decodeJWT as e,verifyJWT as t,createJWT as n}from"did-jwt";const r=/^[A-Za-z0-9-_=]+\.[A-Za-z0-9-_=]+\.?[A-Za-z0-9-_.+/=]*$/,i="https://www.w3.org/2018/credentials/v1";function o(e){return Array.isArray(e)?e:[e]}function a(e){return Array.isArray(e)?e.map(e=>a(e)):e instanceof Date?new Date(e.getTime()):e&&"object"==typeof e?Object.getOwnPropertyNames(e).reduce((t,n)=>(Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n)),t[n]=a(e[n]),t),Object.create(Object.getPrototypeOf(e))):e}function l(e){return null!=e}function c(e,t=!0){var n,r,c,s,d,f,u;let p=a(e);var v,b,y;"object"==typeof(v=e)&&v.sub&&v.iss&&v.claim&&v.iat&&(p=function(e){const{iat:t,nbf:n,claim:r,vc:o,...a}=e,l={...a,nbf:n||t,vc:{"@context":[i],type:["VerifiableCredential"],credentialSubject:r}};return o&&(e.issVc=o),l}(e)),p.credentialSubject={...e.credentialSubject,...null==(n=e.vc)?void 0:n.credentialSubject},!e.sub||null!=(r=e.credentialSubject)&&r.id||!p.credentialSubject||(p.credentialSubject.id=e.sub,t&&delete p.sub),t&&(null==(b=p.vc)||delete b.credentialSubject),void 0!==e.issuer&&"object"!=typeof e.issuer||(p.issuer=function(e){if("object"!=typeof e)return e;const t={...e};return Object.keys(t).forEach(e=>void 0===t[e]&&delete t[e]),t}({id:e.iss,...e.issuer}),!t||null!=(y=e.issuer)&&y.id||delete p.iss),!e.id&&e.jti&&(p.id=p.id||p.jti,t&&delete p.jti);const w=[...o(p.type),...o(null==(c=p.vc)?void 0:c.type)].filter(l);var x,j,O,g;p.type=[...new Set(w)],t&&(null==(x=p.vc)||delete x.type),p.evidence=null==(s=e.vc)?void 0:s.evidence,t&&(null==(j=p.vc)||delete j.evidence),p.credentialStatus=null==(d=e.vc)?void 0:d.credentialStatus,t&&(null==(O=p.vc)||delete O.credentialStatus),p.termsOfUse=null==(f=e.vc)?void 0:f.termsOfUse,t&&(null==(g=p.vc)||delete g.termsOfUse);const h=[...o(e.context),...o(e["@context"]),...o(null==(u=e.vc)?void 0:u["@context"])].filter(l);var m;return p["@context"]=[...new Set(h)],t&&(delete p.context,null==(m=p.vc)||delete m["@context"]),e.issuanceDate||!e.iat&&!e.nbf||(p.issuanceDate=new Date(1e3*(e.nbf||e.iat)).toISOString(),t&&(e.nbf?delete p.nbf:delete p.iat)),!e.expirationDate&&e.exp&&(p.expirationDate=new Date(1e3*e.exp).toISOString(),t&&delete p.exp),t&&p.vc&&0===Object.keys(p.vc).length&&delete p.vc,p}function s(t,n=!0){let r;try{r=e(t)}catch(e){throw new TypeError("unknown credential format")}return{...c(r.payload,n),proof:{type:"JwtProof2020",jwt:t}}}function d(e,t=!0){var n;if("string"==typeof e){if(r.test(e))return s(e,t);{let n;try{n=JSON.parse(e)}catch(e){throw new TypeError("unknown credential format")}return d(n,t)}}return null!=(n=e.proof)&&n.jwt?a({...s(e.proof.jwt,t),proof:e.proof}):{proof:{},...c(e,t)}}function f(e,t=!0){var n,r,i;if(Array.isArray(e.credentialSubject))throw Error("credentialSubject of type array not supported");const c=a({vc:{...e.vc},...e});c.vc=c.vc;const s={...e.credentialSubject,...null==(n=e.vc)?void 0:n.credentialSubject};var d;e.sub||(c.sub=null==(d=e.credentialSubject)?void 0:d.id,t&&delete s.id);const f=[...o(e.context),...o(e["@context"]),...o(null==(r=e.vc)?void 0:r["@context"])].filter(l);c.vc["@context"]=[...new Set(f)],t&&(delete c.context,delete c["@context"]);const u=[...o(e.type),...o(null==(i=e.vc)?void 0:i.type)].filter(l);if(c.vc.type=[...new Set(u)],t&&delete c.type,e.id&&-1===Object.getOwnPropertyNames(e).indexOf("jti")&&(c.jti=e.id,t&&delete c.id),e.issuanceDate&&-1===Object.getOwnPropertyNames(e).indexOf("nbf")){const n=Date.parse(e.issuanceDate);isNaN(n)||(c.nbf=Math.floor(n/1e3),t&&delete c.issuanceDate)}if(e.expirationDate&&-1===Object.getOwnPropertyNames(e).indexOf("exp")){const n=Date.parse(e.expirationDate);isNaN(n)||(c.exp=Math.floor(n/1e3),t&&delete c.expirationDate)}var p;e.issuer&&-1===Object.getOwnPropertyNames(e).indexOf("iss")&&("object"==typeof e.issuer?(c.iss=null==(p=e.issuer)?void 0:p.id,t&&(delete c.issuer.id,0===Object.keys(c.issuer).length&&delete c.issuer)):"string"==typeof e.issuer&&(c.iss=e.iss||""+e.issuer,t&&delete c.issuer)),c.vc.credentialSubject=s,t&&delete c.credentialSubject;const v=["evidence","termsOfUse","refreshService","credentialSchema","credentialStatus"];for(const n of v)e[n]&&(c.vc[n]||(c.vc[n]=e[n]),t&&delete c[n]);return c}function u(e,t=!0){var n,r,i;const c=a(e);var s;c.verifiableCredential=[...o(e.verifiableCredential),...o(null==(n=e.vp)?void 0:n.verifiableCredential)].filter(l),c.verifiableCredential=c.verifiableCredential.map(e=>d(e,t)),t&&(null==(s=c.vp)||delete s.verifiableCredential),e.iss&&!e.holder&&(c.holder=e.iss,t&&delete c.iss),e.aud&&(c.verifier=[...o(e.verifier),...o(e.aud)].filter(l),c.verifier=[...new Set(c.verifier)],t&&delete c.aud),e.jti&&-1===Object.getOwnPropertyNames(e).indexOf("id")&&(c.id=e.id||e.jti,t&&delete c.jti);const f=[...o(e.type),...o(null==(r=e.vp)?void 0:r.type)].filter(l);var u;c.type=[...new Set(f)],t&&(null==(u=c.vp)||delete u.type);const p=[...o(e.context),...o(e["@context"]),...o(null==(i=e.vp)?void 0:i["@context"])].filter(l);var v;return c["@context"]=[...new Set(p)],t&&(delete c.context,null==(v=c.vp)||delete v["@context"]),e.issuanceDate||!e.iat&&!e.nbf||(c.issuanceDate=new Date(1e3*(e.nbf||e.iat)).toISOString(),t&&(e.nbf?delete c.nbf:delete c.iat)),!e.expirationDate&&e.exp&&(c.expirationDate=new Date(1e3*e.exp).toISOString(),t&&delete c.exp),c.vp&&0===Object.keys(c.vp).length&&t&&delete c.vp,c}function p(t,n=!0){let r;try{r=e(t)}catch(e){throw new TypeError("unknown presentation format")}return{...u(r.payload,n),proof:{type:"JwtProof2020",jwt:t}}}function v(e,t=!0){var n;if("string"==typeof e){if(r.test(e))return p(e,t);{let n;try{n=JSON.parse(e)}catch(e){throw new TypeError("unknown presentation format")}return v(n,t)}}return null!=(n=e.proof)&&n.jwt?{...p(e.proof.jwt,t),proof:e.proof}:{proof:{},...u(e,t)}}function b(e,t=!0){var n,r,i;const c=a({vp:{...e.vp},...e});c.vp=c.vp;const s=[...o(e.context),...o(e["@context"]),...o(null==(n=e.vp)?void 0:n["@context"])].filter(l);c.vp["@context"]=[...new Set(s)],t&&(delete c.context,delete c["@context"]);const d=[...o(e.type),...o(null==(r=e.vp)?void 0:r.type)].filter(l);if(c.vp.type=[...new Set(d)],t&&delete c.type,e.id&&-1===Object.getOwnPropertyNames(e).indexOf("jti")&&(c.jti=e.id,t&&delete c.id),e.issuanceDate&&-1===Object.getOwnPropertyNames(e).indexOf("nbf")){const n=Date.parse(e.issuanceDate);isNaN(n)||(c.nbf=Math.floor(n/1e3),t&&delete c.issuanceDate)}if(e.expirationDate&&-1===Object.getOwnPropertyNames(e).indexOf("exp")){const n=Date.parse(e.expirationDate);isNaN(n)||(c.exp=Math.floor(n/1e3),t&&delete c.expirationDate)}var f;if((c.verifiableCredential||null!=(i=c.vp)&&i.verifiableCredential)&&(c.vp.verifiableCredential=[...o(c.verifiableCredential),...o(null==(f=c.vp)?void 0:f.verifiableCredential)].filter(l).map(e=>{var t;return"object"==typeof e&&null!=(t=e.proof)&&t.jwt?e.proof.jwt:e})),t&&delete c.verifiableCredential,e.holder&&-1===Object.getOwnPropertyNames(e).indexOf("iss")&&"string"==typeof e.holder&&(c.iss=e.holder,t&&delete c.holder),e.verifier){const n=[...o(e.verifier),...o(e.aud)].filter(l);c.aud=[...new Set(n)],t&&delete c.verifier}return c}function y(e){if("string"==typeof e&&!e.match(r))throw new TypeError(`"${e}" is not a valid JWT format`)}function w(e){if("number"==typeof e){if(!(Number.isInteger(e)&&e<1e11))throw new TypeError(`"${e}" is not a unix timestamp in seconds`)}else if("string"==typeof e)w(Math.floor(new Date(e).valueOf()/1e3));else if(!(t=e)||isNaN(t)||"[object Date]"!==Object.prototype.toString.call(t))throw new TypeError(`"${e}" is not a valid time`);var t}function x(e){const t=o(e);if(t.length<1||-1===t.indexOf(i))throw new TypeError(`@context is missing default context "${i}"`)}function j(e){const t=o(e);if(t.length<1||-1===t.indexOf("VerifiableCredential"))throw new TypeError('type is missing default "VerifiableCredential"')}function O(e){const t=o(e);if(t.length<1||-1===t.indexOf("VerifiablePresentation"))throw new TypeError('type is missing default "VerifiablePresentation"')}function g(e){if(0===Object.keys(e).length)throw new TypeError("credentialSubject must not be empty")}const h=function(e,n,r={}){try{return Promise.resolve(t(e,{resolver:n,...r})).then(function(e){return T(e.payload,r),e.verifiablePresentation=v(e.jwt,null==r?void 0:r.removeOriginalFields),E(e.verifiablePresentation),e})}catch(e){return Promise.reject(e)}},m=function(e,n,r={}){try{return Promise.resolve(t(e,{resolver:n,...r})).then(function(e){return e.verifiableCredential=d(e.jwt,null==r?void 0:r.removeOriginalFields),N(e.verifiableCredential),e})}catch(e){return Promise.reject(e)}},S=function(e,t,r={}){try{var i;const a={iat:void 0,...b(e,null==r?void 0:r.removeOriginalFields)};if(r.challenge&&-1===Object.getOwnPropertyNames(a).indexOf("nonce")&&(a.nonce=r.challenge),r.domain){const e=[...o(r.domain),...o(a.aud)].filter(l);a.aud=[...new Set(e)]}return C(a),Promise.resolve(n(a,{...r,issuer:t.did||a.iss||"",signer:t.signer},{...r.header,alg:t.alg||(null==(i=r.header)?void 0:i.alg)||"ES256K"}))}catch(e){return Promise.reject(e)}},D=function(e,t,r={}){try{var i;const o={iat:void 0,...f(e,r.removeOriginalFields)};return P(o),Promise.resolve(n(o,{...r,issuer:t.did||o.iss||"",signer:t.signer},{...r.header,alg:t.alg||(null==(i=r.header)?void 0:i.alg)||"ES256K"}))}catch(e){return Promise.reject(e)}};function P(e){x(e.vc["@context"]),j(e.vc.type),g(e.vc.credentialSubject),e.nbf&&w(e.nbf),e.exp&&w(e.exp)}function N(e){x(e["@context"]),j(e.type),g(e.credentialSubject),e.issuanceDate&&w(e.issuanceDate),e.expirationDate&&w(e.expirationDate)}function C(e){if(x(e.vp["@context"]),O(e.vp.type),e.vp.verifiableCredential&&e.vp.verifiableCredential.length>=1)for(const t of o(e.vp.verifiableCredential))"string"==typeof t?y(t):N(t);e.exp&&w(e.exp)}function E(e){if(x(e["@context"]),O(e.type),e.verifiableCredential&&e.verifiableCredential.length>=1)for(const t of e.verifiableCredential)"string"==typeof t?y(t):N(t);e.expirationDate&&w(e.expirationDate)}function T(e,t){if(t.challenge&&t.challenge!==e.nonce)throw new Error(`Presentation does not contain the mandatory challenge (JWT: nonce) for : ${t.challenge}`);if(t.domain){let n;if(e.aud&&(n=(Array.isArray(e.aud)?e.aud:[e.aud]).find(e=>t.domain===e)),void 0===n)throw new Error(`Presentation does not contain the mandatory domain (JWT: aud) for : ${t.domain}`)}}export{D as createVerifiableCredentialJwt,S as createVerifiablePresentationJwt,d as normalizeCredential,v as normalizePresentation,f as transformCredentialInput,b as transformPresentationInput,N as validateCredentialPayload,P as validateJwtCredentialPayload,C as validateJwtPresentationPayload,E as validatePresentationPayload,m as verifyCredential,h as verifyPresentation,T as verifyPresentationPayloadOptions}; | ||
//# sourceMappingURL=index.module.js.map |
@@ -1,2 +0,2 @@ | ||
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("did-jwt")):"function"==typeof define&&define.amd?define(["exports","did-jwt"],t):t((e||self).didJwtVc={},e.didJwt)}(this,function(e,t){const n="ES256K",i=/^[A-Za-z0-9-_=]+\.[A-Za-z0-9-_=]+\.?[A-Za-z0-9-_.+/=]*$/,r="https://www.w3.org/2018/credentials/v1",o="VerifiableCredential",a="VerifiablePresentation",l="JwtProof2020";function c(e){return Array.isArray(e)?e:[e]}function s(e){return Array.isArray(e)?e.map(e=>s(e)):e instanceof Date?new Date(e.getTime()):e&&"object"==typeof e?Object.getOwnPropertyNames(e).reduce((t,n)=>(Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n)),t[n]=s(e[n]),t),Object.create(Object.getPrototypeOf(e))):e}function d(e){return null!=e}function f(e,t=!0){var n,i,a,l,f,u,p;let v=s(e);var y,b,w;"object"==typeof(y=e)&&y.sub&&y.iss&&y.claim&&y.iat&&(v=function(e){const{iat:t,nbf:n,claim:i,vc:a,...l}=e,c={...l,nbf:n||t,vc:{"@context":[r],type:[o],credentialSubject:i}};return a&&(e.issVc=a),c}(e)),v.credentialSubject={...e.credentialSubject,...null==(n=e.vc)?void 0:n.credentialSubject},!e.sub||null!=(i=e.credentialSubject)&&i.id||!v.credentialSubject||(v.credentialSubject.id=e.sub,t&&delete v.sub),t&&(null==(b=v.vc)||delete b.credentialSubject),void 0!==e.issuer&&"object"!=typeof e.issuer||(v.issuer=function(e){if("object"!=typeof e)return e;const t={...e};return Object.keys(t).forEach(e=>void 0===t[e]&&delete t[e]),t}({id:e.iss,...e.issuer}),!t||null!=(w=e.issuer)&&w.id||delete v.iss),!e.id&&e.jti&&(v.id=v.id||v.jti,t&&delete v.jti);const x=[...c(v.type),...c(null==(a=v.vc)?void 0:a.type)].filter(d);var j,h,m,g;v.type=[...new Set(x)],t&&(null==(j=v.vc)||delete j.type),v.evidence=null==(l=e.vc)?void 0:l.evidence,t&&(null==(h=v.vc)||delete h.evidence),v.credentialStatus=null==(f=e.vc)?void 0:f.credentialStatus,t&&(null==(m=v.vc)||delete m.credentialStatus),v.termsOfUse=null==(u=e.vc)?void 0:u.termsOfUse,t&&(null==(g=v.vc)||delete g.termsOfUse);const O=[...c(e.context),...c(e["@context"]),...c(null==(p=e.vc)?void 0:p["@context"])].filter(d);var S;return v["@context"]=[...new Set(O)],t&&(delete v.context,null==(S=v.vc)||delete S["@context"]),e.issuanceDate||!e.iat&&!e.nbf||(v.issuanceDate=new Date(1e3*(e.nbf||e.iat)).toISOString(),t&&(e.nbf?delete v.nbf:delete v.iat)),!e.expirationDate&&e.exp&&(v.expirationDate=new Date(1e3*e.exp).toISOString(),t&&delete v.exp),t&&v.vc&&0===Object.keys(v.vc).length&&delete v.vc,v}function u(e,n=!0){let i;try{i=t.decodeJWT(e)}catch(e){throw new TypeError("unknown credential format")}return{...f(i.payload,n),proof:{type:l,jwt:e}}}function p(e,t=!0){var n;if("string"==typeof e){if(i.test(e))return u(e,t);{let n;try{n=JSON.parse(e)}catch(e){throw new TypeError("unknown credential format")}return p(n,t)}}return null!=(n=e.proof)&&n.jwt?s({...u(e.proof.jwt,t),proof:e.proof}):{proof:{},...f(e,t)}}function v(e,t=!0){var n,i,r;if(Array.isArray(e.credentialSubject))throw Error("credentialSubject of type array not supported");const o=s({vc:{...e.vc},...e});o.vc=o.vc;const a={...e.credentialSubject,...null==(n=e.vc)?void 0:n.credentialSubject};var l;e.sub||(o.sub=null==(l=e.credentialSubject)?void 0:l.id,t&&delete a.id);const f=[...c(e.context),...c(e["@context"]),...c(null==(i=e.vc)?void 0:i["@context"])].filter(d);o.vc["@context"]=[...new Set(f)],t&&(delete o.context,delete o["@context"]);const u=[...c(e.type),...c(null==(r=e.vc)?void 0:r.type)].filter(d);if(o.vc.type=[...new Set(u)],t&&delete o.type,e.id&&-1===Object.getOwnPropertyNames(e).indexOf("jti")&&(o.jti=e.id,t&&delete o.id),e.issuanceDate&&-1===Object.getOwnPropertyNames(e).indexOf("nbf")){const n=Date.parse(e.issuanceDate);isNaN(n)||(o.nbf=Math.floor(n/1e3),t&&delete o.issuanceDate)}if(e.expirationDate&&-1===Object.getOwnPropertyNames(e).indexOf("exp")){const n=Date.parse(e.expirationDate);isNaN(n)||(o.exp=Math.floor(n/1e3),t&&delete o.expirationDate)}var p;e.issuer&&-1===Object.getOwnPropertyNames(e).indexOf("iss")&&("object"==typeof e.issuer?(o.iss=null==(p=e.issuer)?void 0:p.id,t&&(delete o.issuer.id,0===Object.keys(o.issuer).length&&delete o.issuer)):"string"==typeof e.issuer&&(o.iss=e.iss||""+e.issuer,t&&delete o.issuer)),o.vc.credentialSubject=a,t&&delete o.credentialSubject;const v=["evidence","termsOfUse","refreshService","credentialSchema","credentialStatus"];for(const n of v)e[n]&&(o.vc[n]||(o.vc[n]=e[n]),t&&delete o[n]);return o}function y(e,t=!0){var n,i,r;const o=s(e);var a;o.verifiableCredential=[...c(e.verifiableCredential),...c(null==(n=e.vp)?void 0:n.verifiableCredential)].filter(d),o.verifiableCredential=o.verifiableCredential.map(e=>p(e,t)),t&&(null==(a=o.vp)||delete a.verifiableCredential),e.iss&&!e.holder&&(o.holder=e.iss,t&&delete o.iss),e.aud&&(o.verifier=[...c(e.verifier),...c(e.aud)].filter(d),o.verifier=[...new Set(o.verifier)],t&&delete o.aud),e.jti&&-1===Object.getOwnPropertyNames(e).indexOf("id")&&(o.id=e.id||e.jti,t&&delete o.jti);const l=[...c(e.type),...c(null==(i=e.vp)?void 0:i.type)].filter(d);var f;o.type=[...new Set(l)],t&&(null==(f=o.vp)||delete f.type);const u=[...c(e.context),...c(e["@context"]),...c(null==(r=e.vp)?void 0:r["@context"])].filter(d);var v;return o["@context"]=[...new Set(u)],t&&(delete o.context,null==(v=o.vp)||delete v["@context"]),e.issuanceDate||!e.iat&&!e.nbf||(o.issuanceDate=new Date(1e3*(e.nbf||e.iat)).toISOString(),t&&(e.nbf?delete o.nbf:delete o.iat)),!e.expirationDate&&e.exp&&(o.expirationDate=new Date(1e3*e.exp).toISOString(),t&&delete o.exp),o.vp&&0===Object.keys(o.vp).length&&t&&delete o.vp,o}function b(e,n=!0){let i;try{i=t.decodeJWT(e)}catch(e){throw new TypeError("unknown presentation format")}return{...y(i.payload,n),proof:{type:l,jwt:e}}}function w(e,t=!0){var n;if("string"==typeof e){if(i.test(e))return b(e,t);{let n;try{n=JSON.parse(e)}catch(e){throw new TypeError("unknown presentation format")}return w(n,t)}}return null!=(n=e.proof)&&n.jwt?{...b(e.proof.jwt,t),proof:e.proof}:{proof:{},...y(e,t)}}function x(e,t=!0){var n,i,r;const o=s({vp:{...e.vp},...e});o.vp=o.vp;const a=[...c(e.context),...c(e["@context"]),...c(null==(n=e.vp)?void 0:n["@context"])].filter(d);o.vp["@context"]=[...new Set(a)],t&&(delete o.context,delete o["@context"]);const l=[...c(e.type),...c(null==(i=e.vp)?void 0:i.type)].filter(d);if(o.vp.type=[...new Set(l)],t&&delete o.type,e.id&&-1===Object.getOwnPropertyNames(e).indexOf("jti")&&(o.jti=e.id,t&&delete o.id),e.issuanceDate&&-1===Object.getOwnPropertyNames(e).indexOf("nbf")){const n=Date.parse(e.issuanceDate);isNaN(n)||(o.nbf=Math.floor(n/1e3),t&&delete o.issuanceDate)}if(e.expirationDate&&-1===Object.getOwnPropertyNames(e).indexOf("exp")){const n=Date.parse(e.expirationDate);isNaN(n)||(o.exp=Math.floor(n/1e3),t&&delete o.expirationDate)}var f;if((o.verifiableCredential||null!=(r=o.vp)&&r.verifiableCredential)&&(o.vp.verifiableCredential=[...c(o.verifiableCredential),...c(null==(f=o.vp)?void 0:f.verifiableCredential)].filter(d).map(e=>{var t;return"object"==typeof e&&null!=(t=e.proof)&&t.jwt?e.proof.jwt:e})),t&&delete o.verifiableCredential,e.holder&&-1===Object.getOwnPropertyNames(e).indexOf("iss")&&"string"==typeof e.holder&&(o.iss=e.holder,t&&delete o.holder),e.verifier){const n=[...c(e.verifier),...c(e.aud)].filter(d);o.aud=[...new Set(n)],t&&delete o.verifier}return o}function j(e){if("string"==typeof e&&!e.match(i))throw new TypeError(`"${e}" is not a valid JWT format`)}function h(e){if("number"==typeof e){if(!(Number.isInteger(e)&&e<1e11))throw new TypeError(`"${e}" is not a unix timestamp in seconds`)}else if("string"==typeof e)h(Math.floor(new Date(e).valueOf()/1e3));else if(!(t=e)||isNaN(t)||"[object Date]"!==Object.prototype.toString.call(t))throw new TypeError(`"${e}" is not a valid time`);var t}function m(e){const t=c(e);if(t.length<1||-1===t.indexOf(r))throw new TypeError(`@context is missing default context "${r}"`)}function g(e){const t=c(e);if(t.length<1||-1===t.indexOf(o))throw new TypeError(`type is missing default "${o}"`)}function O(e){const t=c(e);if(t.length<1||-1===t.indexOf(a))throw new TypeError(`type is missing default "${a}"`)}function S(e){if(0===Object.keys(e).length)throw new TypeError("credentialSubject must not be empty")}function P(e){m(e.vc["@context"]),g(e.vc.type),S(e.vc.credentialSubject),e.nbf&&h(e.nbf),e.exp&&h(e.exp)}function D(e){m(e["@context"]),g(e.type),S(e.credentialSubject),e.issuanceDate&&h(e.issuanceDate),e.expirationDate&&h(e.expirationDate)}function C(e){if(m(e.vp["@context"]),O(e.vp.type),e.vp.verifiableCredential&&e.vp.verifiableCredential.length>=1)for(const t of c(e.vp.verifiableCredential))"string"==typeof t?j(t):D(t);e.exp&&h(e.exp)}function N(e){if(m(e["@context"]),O(e.type),e.verifiableCredential&&e.verifiableCredential.length>=1)for(const t of e.verifiableCredential)"string"==typeof t?j(t):D(t);e.expirationDate&&h(e.expirationDate)}function T(e,t){if(t.challenge&&t.challenge!==e.nonce)throw new Error(`Presentation does not contain the mandatory challenge (JWT: nonce) for : ${t.challenge}`);if(t.domain){let n;if(e.aud&&(n=(Array.isArray(e.aud)?e.aud:[e.aud]).find(e=>t.domain===e)),void 0===n)throw new Error(`Presentation does not contain the mandatory domain (JWT: aud) for : ${t.domain}`)}}e.createVerifiableCredentialJwt=function(e,i,r={}){try{var o;const a={iat:void 0,...v(e,r.removeOriginalFields)};return P(a),Promise.resolve(t.createJWT(a,{issuer:i.did||a.iss||"",signer:i.signer},{...r.header,alg:i.alg||(null==(o=r.header)?void 0:o.alg)||n}))}catch(e){return Promise.reject(e)}},e.createVerifiablePresentationJwt=function(e,i,r={}){try{var o;const a={iat:void 0,...x(e,null==r?void 0:r.removeOriginalFields)};if(r.challenge&&-1===Object.getOwnPropertyNames(a).indexOf("nonce")&&(a.nonce=r.challenge),r.domain){const e=[...c(r.domain),...c(a.aud)].filter(d);a.aud=[...new Set(e)]}return C(a),Promise.resolve(t.createJWT(a,{issuer:i.did||a.iss||"",signer:i.signer},{...r.header,alg:i.alg||(null==(o=r.header)?void 0:o.alg)||n}))}catch(e){return Promise.reject(e)}},e.normalizeCredential=p,e.normalizePresentation=w,e.transformCredentialInput=v,e.transformPresentationInput=x,e.validateCredentialPayload=D,e.validateJwtCredentialPayload=P,e.validateJwtPresentationPayload=C,e.validatePresentationPayload=N,e.verifyCredential=function(e,n,i={}){try{return Promise.resolve(t.verifyJWT(e,{resolver:n,...i})).then(function(e){return e.verifiableCredential=p(e.jwt,null==i?void 0:i.removeOriginalFields),D(e.verifiableCredential),e})}catch(e){return Promise.reject(e)}},e.verifyPresentation=function(e,n,i={}){try{return Promise.resolve(t.verifyJWT(e,{resolver:n,...i})).then(function(e){return T(e.payload,i),e.verifiablePresentation=w(e.jwt,null==i?void 0:i.removeOriginalFields),N(e.verifiablePresentation),e})}catch(e){return Promise.reject(e)}},e.verifyPresentationPayloadOptions=T}); | ||
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("did-jwt")):"function"==typeof define&&define.amd?define(["exports","did-jwt"],t):t((e||self).didJwtVc={},e.didJwt)}(this,function(e,t){const n="ES256K",i=/^[A-Za-z0-9-_=]+\.[A-Za-z0-9-_=]+\.?[A-Za-z0-9-_.+/=]*$/,r="https://www.w3.org/2018/credentials/v1",o="VerifiableCredential",a="VerifiablePresentation",l="JwtProof2020";function c(e){return Array.isArray(e)?e:[e]}function s(e){return Array.isArray(e)?e.map(e=>s(e)):e instanceof Date?new Date(e.getTime()):e&&"object"==typeof e?Object.getOwnPropertyNames(e).reduce((t,n)=>(Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n)),t[n]=s(e[n]),t),Object.create(Object.getPrototypeOf(e))):e}function d(e){return null!=e}function f(e,t=!0){var n,i,a,l,f,u,p;let v=s(e);var y,b,w;"object"==typeof(y=e)&&y.sub&&y.iss&&y.claim&&y.iat&&(v=function(e){const{iat:t,nbf:n,claim:i,vc:a,...l}=e,c={...l,nbf:n||t,vc:{"@context":[r],type:[o],credentialSubject:i}};return a&&(e.issVc=a),c}(e)),v.credentialSubject={...e.credentialSubject,...null==(n=e.vc)?void 0:n.credentialSubject},!e.sub||null!=(i=e.credentialSubject)&&i.id||!v.credentialSubject||(v.credentialSubject.id=e.sub,t&&delete v.sub),t&&(null==(b=v.vc)||delete b.credentialSubject),void 0!==e.issuer&&"object"!=typeof e.issuer||(v.issuer=function(e){if("object"!=typeof e)return e;const t={...e};return Object.keys(t).forEach(e=>void 0===t[e]&&delete t[e]),t}({id:e.iss,...e.issuer}),!t||null!=(w=e.issuer)&&w.id||delete v.iss),!e.id&&e.jti&&(v.id=v.id||v.jti,t&&delete v.jti);const x=[...c(v.type),...c(null==(a=v.vc)?void 0:a.type)].filter(d);var j,h,m,g;v.type=[...new Set(x)],t&&(null==(j=v.vc)||delete j.type),v.evidence=null==(l=e.vc)?void 0:l.evidence,t&&(null==(h=v.vc)||delete h.evidence),v.credentialStatus=null==(f=e.vc)?void 0:f.credentialStatus,t&&(null==(m=v.vc)||delete m.credentialStatus),v.termsOfUse=null==(u=e.vc)?void 0:u.termsOfUse,t&&(null==(g=v.vc)||delete g.termsOfUse);const O=[...c(e.context),...c(e["@context"]),...c(null==(p=e.vc)?void 0:p["@context"])].filter(d);var S;return v["@context"]=[...new Set(O)],t&&(delete v.context,null==(S=v.vc)||delete S["@context"]),e.issuanceDate||!e.iat&&!e.nbf||(v.issuanceDate=new Date(1e3*(e.nbf||e.iat)).toISOString(),t&&(e.nbf?delete v.nbf:delete v.iat)),!e.expirationDate&&e.exp&&(v.expirationDate=new Date(1e3*e.exp).toISOString(),t&&delete v.exp),t&&v.vc&&0===Object.keys(v.vc).length&&delete v.vc,v}function u(e,n=!0){let i;try{i=t.decodeJWT(e)}catch(e){throw new TypeError("unknown credential format")}return{...f(i.payload,n),proof:{type:l,jwt:e}}}function p(e,t=!0){var n;if("string"==typeof e){if(i.test(e))return u(e,t);{let n;try{n=JSON.parse(e)}catch(e){throw new TypeError("unknown credential format")}return p(n,t)}}return null!=(n=e.proof)&&n.jwt?s({...u(e.proof.jwt,t),proof:e.proof}):{proof:{},...f(e,t)}}function v(e,t=!0){var n,i,r;if(Array.isArray(e.credentialSubject))throw Error("credentialSubject of type array not supported");const o=s({vc:{...e.vc},...e});o.vc=o.vc;const a={...e.credentialSubject,...null==(n=e.vc)?void 0:n.credentialSubject};var l;e.sub||(o.sub=null==(l=e.credentialSubject)?void 0:l.id,t&&delete a.id);const f=[...c(e.context),...c(e["@context"]),...c(null==(i=e.vc)?void 0:i["@context"])].filter(d);o.vc["@context"]=[...new Set(f)],t&&(delete o.context,delete o["@context"]);const u=[...c(e.type),...c(null==(r=e.vc)?void 0:r.type)].filter(d);if(o.vc.type=[...new Set(u)],t&&delete o.type,e.id&&-1===Object.getOwnPropertyNames(e).indexOf("jti")&&(o.jti=e.id,t&&delete o.id),e.issuanceDate&&-1===Object.getOwnPropertyNames(e).indexOf("nbf")){const n=Date.parse(e.issuanceDate);isNaN(n)||(o.nbf=Math.floor(n/1e3),t&&delete o.issuanceDate)}if(e.expirationDate&&-1===Object.getOwnPropertyNames(e).indexOf("exp")){const n=Date.parse(e.expirationDate);isNaN(n)||(o.exp=Math.floor(n/1e3),t&&delete o.expirationDate)}var p;e.issuer&&-1===Object.getOwnPropertyNames(e).indexOf("iss")&&("object"==typeof e.issuer?(o.iss=null==(p=e.issuer)?void 0:p.id,t&&(delete o.issuer.id,0===Object.keys(o.issuer).length&&delete o.issuer)):"string"==typeof e.issuer&&(o.iss=e.iss||""+e.issuer,t&&delete o.issuer)),o.vc.credentialSubject=a,t&&delete o.credentialSubject;const v=["evidence","termsOfUse","refreshService","credentialSchema","credentialStatus"];for(const n of v)e[n]&&(o.vc[n]||(o.vc[n]=e[n]),t&&delete o[n]);return o}function y(e,t=!0){var n,i,r;const o=s(e);var a;o.verifiableCredential=[...c(e.verifiableCredential),...c(null==(n=e.vp)?void 0:n.verifiableCredential)].filter(d),o.verifiableCredential=o.verifiableCredential.map(e=>p(e,t)),t&&(null==(a=o.vp)||delete a.verifiableCredential),e.iss&&!e.holder&&(o.holder=e.iss,t&&delete o.iss),e.aud&&(o.verifier=[...c(e.verifier),...c(e.aud)].filter(d),o.verifier=[...new Set(o.verifier)],t&&delete o.aud),e.jti&&-1===Object.getOwnPropertyNames(e).indexOf("id")&&(o.id=e.id||e.jti,t&&delete o.jti);const l=[...c(e.type),...c(null==(i=e.vp)?void 0:i.type)].filter(d);var f;o.type=[...new Set(l)],t&&(null==(f=o.vp)||delete f.type);const u=[...c(e.context),...c(e["@context"]),...c(null==(r=e.vp)?void 0:r["@context"])].filter(d);var v;return o["@context"]=[...new Set(u)],t&&(delete o.context,null==(v=o.vp)||delete v["@context"]),e.issuanceDate||!e.iat&&!e.nbf||(o.issuanceDate=new Date(1e3*(e.nbf||e.iat)).toISOString(),t&&(e.nbf?delete o.nbf:delete o.iat)),!e.expirationDate&&e.exp&&(o.expirationDate=new Date(1e3*e.exp).toISOString(),t&&delete o.exp),o.vp&&0===Object.keys(o.vp).length&&t&&delete o.vp,o}function b(e,n=!0){let i;try{i=t.decodeJWT(e)}catch(e){throw new TypeError("unknown presentation format")}return{...y(i.payload,n),proof:{type:l,jwt:e}}}function w(e,t=!0){var n;if("string"==typeof e){if(i.test(e))return b(e,t);{let n;try{n=JSON.parse(e)}catch(e){throw new TypeError("unknown presentation format")}return w(n,t)}}return null!=(n=e.proof)&&n.jwt?{...b(e.proof.jwt,t),proof:e.proof}:{proof:{},...y(e,t)}}function x(e,t=!0){var n,i,r;const o=s({vp:{...e.vp},...e});o.vp=o.vp;const a=[...c(e.context),...c(e["@context"]),...c(null==(n=e.vp)?void 0:n["@context"])].filter(d);o.vp["@context"]=[...new Set(a)],t&&(delete o.context,delete o["@context"]);const l=[...c(e.type),...c(null==(i=e.vp)?void 0:i.type)].filter(d);if(o.vp.type=[...new Set(l)],t&&delete o.type,e.id&&-1===Object.getOwnPropertyNames(e).indexOf("jti")&&(o.jti=e.id,t&&delete o.id),e.issuanceDate&&-1===Object.getOwnPropertyNames(e).indexOf("nbf")){const n=Date.parse(e.issuanceDate);isNaN(n)||(o.nbf=Math.floor(n/1e3),t&&delete o.issuanceDate)}if(e.expirationDate&&-1===Object.getOwnPropertyNames(e).indexOf("exp")){const n=Date.parse(e.expirationDate);isNaN(n)||(o.exp=Math.floor(n/1e3),t&&delete o.expirationDate)}var f;if((o.verifiableCredential||null!=(r=o.vp)&&r.verifiableCredential)&&(o.vp.verifiableCredential=[...c(o.verifiableCredential),...c(null==(f=o.vp)?void 0:f.verifiableCredential)].filter(d).map(e=>{var t;return"object"==typeof e&&null!=(t=e.proof)&&t.jwt?e.proof.jwt:e})),t&&delete o.verifiableCredential,e.holder&&-1===Object.getOwnPropertyNames(e).indexOf("iss")&&"string"==typeof e.holder&&(o.iss=e.holder,t&&delete o.holder),e.verifier){const n=[...c(e.verifier),...c(e.aud)].filter(d);o.aud=[...new Set(n)],t&&delete o.verifier}return o}function j(e){if("string"==typeof e&&!e.match(i))throw new TypeError(`"${e}" is not a valid JWT format`)}function h(e){if("number"==typeof e){if(!(Number.isInteger(e)&&e<1e11))throw new TypeError(`"${e}" is not a unix timestamp in seconds`)}else if("string"==typeof e)h(Math.floor(new Date(e).valueOf()/1e3));else if(!(t=e)||isNaN(t)||"[object Date]"!==Object.prototype.toString.call(t))throw new TypeError(`"${e}" is not a valid time`);var t}function m(e){const t=c(e);if(t.length<1||-1===t.indexOf(r))throw new TypeError(`@context is missing default context "${r}"`)}function g(e){const t=c(e);if(t.length<1||-1===t.indexOf(o))throw new TypeError(`type is missing default "${o}"`)}function O(e){const t=c(e);if(t.length<1||-1===t.indexOf(a))throw new TypeError(`type is missing default "${a}"`)}function S(e){if(0===Object.keys(e).length)throw new TypeError("credentialSubject must not be empty")}function P(e){m(e.vc["@context"]),g(e.vc.type),S(e.vc.credentialSubject),e.nbf&&h(e.nbf),e.exp&&h(e.exp)}function D(e){m(e["@context"]),g(e.type),S(e.credentialSubject),e.issuanceDate&&h(e.issuanceDate),e.expirationDate&&h(e.expirationDate)}function C(e){if(m(e.vp["@context"]),O(e.vp.type),e.vp.verifiableCredential&&e.vp.verifiableCredential.length>=1)for(const t of c(e.vp.verifiableCredential))"string"==typeof t?j(t):D(t);e.exp&&h(e.exp)}function N(e){if(m(e["@context"]),O(e.type),e.verifiableCredential&&e.verifiableCredential.length>=1)for(const t of e.verifiableCredential)"string"==typeof t?j(t):D(t);e.expirationDate&&h(e.expirationDate)}function T(e,t){if(t.challenge&&t.challenge!==e.nonce)throw new Error(`Presentation does not contain the mandatory challenge (JWT: nonce) for : ${t.challenge}`);if(t.domain){let n;if(e.aud&&(n=(Array.isArray(e.aud)?e.aud:[e.aud]).find(e=>t.domain===e)),void 0===n)throw new Error(`Presentation does not contain the mandatory domain (JWT: aud) for : ${t.domain}`)}}e.createVerifiableCredentialJwt=function(e,i,r={}){try{var o;const a={iat:void 0,...v(e,r.removeOriginalFields)};return P(a),Promise.resolve(t.createJWT(a,{...r,issuer:i.did||a.iss||"",signer:i.signer},{...r.header,alg:i.alg||(null==(o=r.header)?void 0:o.alg)||n}))}catch(e){return Promise.reject(e)}},e.createVerifiablePresentationJwt=function(e,i,r={}){try{var o;const a={iat:void 0,...x(e,null==r?void 0:r.removeOriginalFields)};if(r.challenge&&-1===Object.getOwnPropertyNames(a).indexOf("nonce")&&(a.nonce=r.challenge),r.domain){const e=[...c(r.domain),...c(a.aud)].filter(d);a.aud=[...new Set(e)]}return C(a),Promise.resolve(t.createJWT(a,{...r,issuer:i.did||a.iss||"",signer:i.signer},{...r.header,alg:i.alg||(null==(o=r.header)?void 0:o.alg)||n}))}catch(e){return Promise.reject(e)}},e.normalizeCredential=p,e.normalizePresentation=w,e.transformCredentialInput=v,e.transformPresentationInput=x,e.validateCredentialPayload=D,e.validateJwtCredentialPayload=P,e.validateJwtPresentationPayload=C,e.validatePresentationPayload=N,e.verifyCredential=function(e,n,i={}){try{return Promise.resolve(t.verifyJWT(e,{resolver:n,...i})).then(function(e){return e.verifiableCredential=p(e.jwt,null==i?void 0:i.removeOriginalFields),D(e.verifiableCredential),e})}catch(e){return Promise.reject(e)}},e.verifyPresentation=function(e,n,i={}){try{return Promise.resolve(t.verifyJWT(e,{resolver:n,...i})).then(function(e){return T(e.payload,i),e.verifiablePresentation=w(e.jwt,null==i?void 0:i.removeOriginalFields),N(e.verifiablePresentation),e})}catch(e){return Promise.reject(e)}},e.verifyPresentationPayloadOptions=T}); | ||
//# sourceMappingURL=index.umd.js.map |
@@ -1,2 +0,2 @@ | ||
import { Signer, JWTVerified, JWTHeader } from 'did-jwt'; | ||
import { Signer, JWTVerified, JWTHeader, JWTOptions } from 'did-jwt'; | ||
export declare const JWT_ALG = "ES256K"; | ||
@@ -195,3 +195,3 @@ export declare const DID_FORMAT: RegExp; | ||
*/ | ||
export interface CreateCredentialOptions { | ||
export interface CreateCredentialOptions extends Partial<JWTOptions> { | ||
/** | ||
@@ -198,0 +198,0 @@ * Determines whether the JSON->JWT transformation will remove the original fields from the input payload. |
{ | ||
"name": "did-jwt-vc", | ||
"version": "2.1.6", | ||
"version": "2.1.7", | ||
"description": "Create and verify W3C Verifiable Credentials and Presentations in JWT format", | ||
@@ -30,3 +30,3 @@ "source": "src/index.ts", | ||
"dependencies": { | ||
"did-jwt": "^5.6.1", | ||
"did-jwt": "^5.7.0", | ||
"did-resolver": "^3.1.0" | ||
@@ -58,3 +58,3 @@ }, | ||
"@types/faker": "5.5.7", | ||
"@types/jest": "26.0.24", | ||
"@types/jest": "27.0.1", | ||
"@types/node": "15.12.4", | ||
@@ -61,0 +61,0 @@ "@typescript-eslint/eslint-plugin": "4.28.3", |
@@ -125,2 +125,13 @@ import { EthrDID } from 'ethr-did' | ||
}) | ||
it('creates a Verifiable Credential JWT with exp field using expiresIn of did-jwt', async () => { | ||
expect.assertions(1) | ||
const nbf = Math.floor(Date.now() / 1000) | ||
const expiresIn = 86400 | ||
const vcJwt = await createVerifiableCredentialJwt({ ...verifiableCredentialPayload, nbf }, issuer, { | ||
expiresIn, | ||
header: { alg: 'ES256K-R' }, | ||
}) | ||
const decodedVc = await decodeJWT(vcJwt) | ||
expect(decodedVc.payload.exp).toEqual(nbf + expiresIn) | ||
}) | ||
it('calls functions to validate required fields', async () => { | ||
@@ -127,0 +138,0 @@ expect.assertions(4) |
@@ -78,2 +78,3 @@ import { createJWT, verifyJWT } from 'did-jwt' | ||
{ | ||
...options, | ||
issuer: issuer.did || parsedPayload.iss || '', | ||
@@ -129,2 +130,3 @@ signer: issuer.signer, | ||
{ | ||
...options, | ||
issuer: holder.did || parsedPayload.iss || '', | ||
@@ -131,0 +133,0 @@ signer: holder.signer, |
@@ -1,2 +0,2 @@ | ||
import { Signer, JWTVerified, JWTHeader } from 'did-jwt' | ||
import { Signer, JWTVerified, JWTHeader, JWTOptions } from 'did-jwt' | ||
@@ -221,3 +221,3 @@ export const JWT_ALG = 'ES256K' | ||
*/ | ||
export interface CreateCredentialOptions { | ||
export interface CreateCredentialOptions extends Partial<JWTOptions> { | ||
/** | ||
@@ -236,2 +236,3 @@ * Determines whether the JSON->JWT transformation will remove the original fields from the input payload. | ||
header?: Partial<JWTHeader> | ||
// eslint-disable-next-line @typescript-eslint/no-explicit-any | ||
@@ -238,0 +239,0 @@ [x: string]: any |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
451451
3579
Updateddid-jwt@^5.7.0