Skip to content

Commit

Permalink
feat: support credentials using ConditionalProof2022 (#133)
Browse files Browse the repository at this point in the history
  • Loading branch information
theblockstalk authored May 9, 2023
1 parent 567f559 commit 6cc9bed
Show file tree
Hide file tree
Showing 3 changed files with 2,428 additions and 3,202 deletions.
6 changes: 3 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,8 @@
],
"license": "ISC",
"dependencies": {
"did-jwt": "^7.0.0",
"did-resolver": "^4.0.0"
"did-jwt": "^7.1.0",
"did-resolver": "^4.1.0"
},
"repository": {
"type": "git",
Expand Down Expand Up @@ -83,4 +83,4 @@
"engines": {
"node": ">=18"
}
}
}
44 changes: 31 additions & 13 deletions src/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { createJWT, verifyJWT } from 'did-jwt'
import { createJWT, createMultisignatureJWT, verifyJWT } from 'did-jwt'
import { Resolvable } from 'did-resolver'
import * as validators from './validators'
import {
Expand Down Expand Up @@ -79,26 +79,44 @@ export {
*/
export async function createVerifiableCredentialJwt(
payload: JwtCredentialPayload | CredentialPayload,
issuer: Issuer,
issuer: Issuer | Issuer[],
options: CreateCredentialOptions = {}
): Promise<JWT> {
const parsedPayload: JwtCredentialPayload = {
iat: undefined,
...transformCredentialInput(payload, options.removeOriginalFields),
}
validateJwtCredentialPayload(parsedPayload)
return createJWT(
parsedPayload,
{
...options,
issuer: issuer.did || parsedPayload.iss || '',
signer: issuer.signer,
},
{
...options.header,
alg: issuer.alg || options.header?.alg || JWT_ALG,

if (!Array.isArray(issuer)) {
return createJWT(
parsedPayload,
{
...options,
issuer: issuer.did || parsedPayload.iss || '',
signer: issuer.signer,
},
{
...options.header,
alg: issuer.alg || options.header?.alg || JWT_ALG,
}
)
} else {
const did = issuer[0].did
const issuers = []
for (const iss of issuer) {
if (iss.did !== did) {
throw new Error('All issuers must be the same did to comply with the Verifiable Conditions spec')
}
issuers.push({
issuer: iss.did || parsedPayload.iss || '',
signer: iss.signer,
alg: iss.alg || options.header?.alg || JWT_ALG,
})
}
)

return createMultisignatureJWT(parsedPayload, { ...options }, issuers)
}
}

/**
Expand Down
Loading

0 comments on commit 6cc9bed

Please sign in to comment.