Skip to content

Commit

Permalink
chore: renamed offerMode
Browse files Browse the repository at this point in the history
  • Loading branch information
sanderPostma committed Feb 8, 2025
1 parent bf593f4 commit 342f440
Show file tree
Hide file tree
Showing 11 changed files with 51 additions and 51 deletions.
2 changes: 1 addition & 1 deletion packages/client/lib/__tests__/OpenID4VCIClient.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -268,7 +268,7 @@ it('determine to be version 13', async () => {
credential_configuration_ids: ['Omzetbelasting'],
credential_issuer: 'https://example.com',
} satisfies CredentialOfferPayloadV1_0_13;
const offerUri = createCredentialOfferURIFromObject({ credential_offer: offer }, 'by_value');
const offerUri = createCredentialOfferURIFromObject({ credential_offer: offer }, 'VALUE');

expect(determineSpecVersionFromOffer(offer)).toEqual(OpenId4VCIVersion.VER_1_0_13);
expect(determineSpecVersionFromURI(offerUri)).toEqual(OpenId4VCIVersion.VER_1_0_13);
Expand Down
4 changes: 2 additions & 2 deletions packages/client/lib/__tests__/SdJwt.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ describe('sd-jwt vc', () => {
'succeed with a full flow',
async () => {
const offerUri = await vcIssuer.createCredentialOfferURI({
credentialOfferPayloadMode: 'by_value',
offerMode: 'VALUE',
grants: {
'urn:ietf:params:oauth:grant-type:pre-authorized_code': {
tx_code: {
Expand Down Expand Up @@ -188,7 +188,7 @@ describe('sd-jwt vc', () => {
'succeed with a full flow without did',
async () => {
const offerUri = await vcIssuer.createCredentialOfferURI({
credentialOfferPayloadMode: 'by_value',
offerMode: 'VALUE',
grants: {
'urn:ietf:params:oauth:grant-type:pre-authorized_code': {
tx_code: {
Expand Down
4 changes: 2 additions & 2 deletions packages/issuer-rest/lib/OID4VCIServer.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import {
AuthorizationRequest,
CredentialConfigurationSupportedV1_0_13,
CredentialOfferPayloadMode,
CredentialOfferMode,
IssuerCredentialSubjectDisplay,
OID4VCICredentialFormat,
QRCodeOpts,
Expand Down Expand Up @@ -91,7 +91,7 @@ export interface IDeleteCredentialOfferEndpointOpts extends ISingleEndpointOpts
export interface ICreateCredentialOfferEndpointOpts extends ISingleEndpointOpts {
getOfferPath?: string
qrCodeOpts?: QRCodeOpts
defaultCredentialOfferPayloadMode?: CredentialOfferPayloadMode
defaultCredentialOfferPayloadMode?: CredentialOfferMode
}

export interface IGetIssueStatusEndpointOpts extends ISingleEndpointOpts {
Expand Down
2 changes: 1 addition & 1 deletion packages/issuer-rest/lib/__tests__/ClientIssuerIT.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -199,7 +199,7 @@ describe('VcIssuer', () => {
expect(server.issuer).toBeDefined()
uri = await vcIssuer
.createCredentialOfferURI({
credentialOfferPayloadMode: 'by_value',
offerMode: 'VALUE',
grants: {
authorization_code: {
issuer_state: issuerState,
Expand Down
12 changes: 6 additions & 6 deletions packages/issuer-rest/lib/oid4vci-api-functions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import {
AuthorizationRequest,
CommonAuthorizationChallengeRequest,
CredentialIssuerMetadataOptsV1_0_13,
CredentialOfferPayloadMode,
CredentialOfferMode,
CredentialOfferRESTRequest,
CredentialRequestV1_0_13,
determineGrantTypes,
Expand Down Expand Up @@ -462,7 +462,7 @@ export function deleteCredentialOfferEndpoint<DIDDoc extends object>(

function buildIssuerPayloadUri(request: Request<CredentialOfferRESTRequest>, issuerPayloadPathConst?: string) {

Check warning on line 463 in packages/issuer-rest/lib/oid4vci-api-functions.ts

View check run for this annotation

Codecov / codecov/patch

packages/issuer-rest/lib/oid4vci-api-functions.ts#L463

Added line #L463 was not covered by tests
if (!issuerPayloadPathConst) {
return Promise.reject(Error('issuePayloadPath must bet set for credentialOfferPayloadMode by_uri_reference!'))
return Promise.reject(Error('issuePayloadPath must bet set for offerMode REFERENCE!'))

Check warning on line 465 in packages/issuer-rest/lib/oid4vci-api-functions.ts

View check run for this annotation

Codecov / codecov/patch

packages/issuer-rest/lib/oid4vci-api-functions.ts#L465

Added line #L465 was not covered by tests
}

const protocol = request.headers['x-forwarded-proto']?.toString() ?? request.protocol
Expand Down Expand Up @@ -512,15 +512,15 @@ export function createCredentialOfferEndpoint<DIDDoc extends object>(
})
}
const qrCodeOpts = request.body.qrCodeOpts ?? opts?.qrCodeOpts
const credentialOfferPayloadMode: CredentialOfferPayloadMode = request.body.credentialOfferPayloadMode
const offerMode: CredentialOfferMode = request.body.offerMode
?? opts?.defaultCredentialOfferPayloadMode
?? 'by_value' // default to existing mode when nothing specified
?? 'VALUE' // default to existing mode when nothing specified

Check warning on line 517 in packages/issuer-rest/lib/oid4vci-api-functions.ts

View check run for this annotation

Codecov / codecov/patch

packages/issuer-rest/lib/oid4vci-api-functions.ts#L517

Added line #L517 was not covered by tests


const result = await issuer.createCredentialOfferURI({

Check warning on line 520 in packages/issuer-rest/lib/oid4vci-api-functions.ts

View check run for this annotation

Codecov / codecov/patch

packages/issuer-rest/lib/oid4vci-api-functions.ts#L520

Added line #L520 was not covered by tests
...request.body,
credentialOfferPayloadMode,
...(credentialOfferPayloadMode === 'by_uri_reference' && { issuerPayloadUri: buildIssuerPayloadUri(request, issuerPayloadPathConst) }),
offerMode: offerMode,
...(offerMode === 'REFERENCE' && { issuerPayloadUri: buildIssuerPayloadUri(request, issuerPayloadPathConst) }),
qrCodeOpts,
grants
})
Expand Down
14 changes: 7 additions & 7 deletions packages/issuer/lib/VcIssuer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import {
CredentialIssuerMetadata,
CredentialIssuerMetadataOptsV1_0_13,
CredentialOfferEventNames,
CredentialOfferPayloadMode,
CredentialOfferMode,
CredentialOfferSession,
CredentialOfferV1_0_13,
CredentialRequest,
Expand Down Expand Up @@ -167,7 +167,7 @@ export class VcIssuer<DIDDoc extends object> {
}

public async createCredentialOfferURI(opts: {
credentialOfferPayloadMode: CredentialOfferPayloadMode
offerMode: CredentialOfferMode
issuerPayloadUri?: string
grants?: CredentialOfferGrantInput
credential_configuration_ids?: Array<string>
Expand All @@ -180,9 +180,9 @@ export class VcIssuer<DIDDoc extends object> {
qrCodeOpts?: QRCodeOpts,
statusListOpts?: Array<StatusListOpts>
}): Promise<CreateCredentialOfferURIResult> {
const { credentialOfferPayloadMode, issuerPayloadUri, credential_configuration_ids, statusListOpts } = opts
if (credentialOfferPayloadMode === 'by_uri_reference' && !issuerPayloadUri) {
return Promise.reject(Error('issuePayloadPath must bet set for credentialOfferPayloadMode by_uri_reference!'))
const { offerMode, issuerPayloadUri, credential_configuration_ids, statusListOpts } = opts
if (offerMode === 'REFERENCE' && !issuerPayloadUri) {
return Promise.reject(Error('issuePayloadPath must bet set for offerMode REFERENCE!'))
}

const grants = opts.grants ? { ...opts.grants } : {}
Expand Down Expand Up @@ -228,7 +228,7 @@ export class VcIssuer<DIDDoc extends object> {
}
const createdAt = +new Date()
const lastUpdatedAt = createdAt
if (credentialOfferPayloadMode === 'by_uri_reference') {
if (offerMode === 'REFERENCE') {
if (!this.uris) {
throw Error('No URI state manager set, whilst apparently credential offer URIs are being used')
}
Expand Down Expand Up @@ -277,7 +277,7 @@ export class VcIssuer<DIDDoc extends object> {
await this.credentialOfferSessions.set(issuerState, session)
}

const uri = createCredentialOfferURIFromObject(credentialOffer, credentialOfferPayloadMode, { ...opts, baseUri })
const uri = createCredentialOfferURIFromObject(credentialOffer, offerMode, { ...opts, baseUri })
let qrCodeDataUri: string | undefined
if (opts.qrCodeOpts) {
const { AwesomeQR } = await import('awesome-qr')
Expand Down
22 changes: 11 additions & 11 deletions packages/issuer/lib/__tests__/CredentialOfferUtils.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ describe('CredentialOfferUtils should', () => {
},
},
} satisfies CredentialOfferPayloadV1_0_13
expect(createCredentialOfferURI('by_value', undefined, { credentialOffer })).toEqual(
expect(createCredentialOfferURI('VALUE', undefined, { credentialOffer })).toEqual(
'openid-credential-offer://?credential_offer=%7B%22credential_issuer%22%3A%22https%3A%2F%2Fcredential-issuer.example.com%22%2C%22credential_configuration_ids%22%3A%5B%22UniversityDegreeCredential%22%5D%2C%22grants%22%3A%7B%22authorization_code%22%3A%7B%22issuer_state%22%3A%22eyJhbGciOiJSU0Et...FYUaBy%22%7D%7D%7D',
)
})
Expand Down Expand Up @@ -91,7 +91,7 @@ describe('CredentialOfferUtils should', () => {

expect(
createCredentialOfferURIv1_0_11(
'by_value',
'VALUE',
{
credential_issuer: credentialOffer.credential_issuer,
credential_endpoint: 'test_issuer',
Expand Down Expand Up @@ -124,7 +124,7 @@ describe('CredentialOfferUtils should', () => {
} as CredentialOfferPayloadV1_0_11

expect(
createCredentialOfferURIv1_0_11('by_value',
createCredentialOfferURIv1_0_11('VALUE',
{
credential_issuer: credentialOffer.credential_issuer,
credential_endpoint: 'test_issuer',
Expand All @@ -138,12 +138,12 @@ describe('CredentialOfferUtils should', () => {
)
})

it('should create a deeplink with by_uri_reference mode', () => {
it('should create a deeplink with REFERENCE mode', () => {
const credentialOfferUri = 'https://example.com/credential-offer-1234'

expect(
createCredentialOfferURIv1_0_11(
'by_uri_reference',
'REFERENCE',
{
credential_issuer: 'https://credential-issuer.example.com',
credential_endpoint: 'test_issuer',
Expand All @@ -157,12 +157,12 @@ describe('CredentialOfferUtils should', () => {
)
})

it('should create an https link with by_uri_reference mode', () => {
it('should create an https link with REFERENCE mode', () => {
const credentialOfferUri = 'https://example.com/credential-offer-1234'

expect(
createCredentialOfferURIv1_0_11(
'by_uri_reference',
'REFERENCE',
{
credential_issuer: 'https://credential-issuer.example.com',
credential_endpoint: 'test_issuer',
Expand All @@ -181,7 +181,7 @@ describe('CredentialOfferUtils should', () => {

expect(
createCredentialOfferURIv1_0_11(
'by_uri_reference',
'REFERENCE',
{
credential_issuer: 'https://credential-issuer.example.com',
credential_endpoint: 'test_issuer',
Expand All @@ -193,10 +193,10 @@ describe('CredentialOfferUtils should', () => {
).toEqual(credentialOfferUri)
})

it('should throw error when credential_offer_uri is missing in by_uri_reference mode', () => {
it('should throw error when credential_offer_uri is missing in REFERENCE mode', () => {
expect(() =>
createCredentialOfferURIv1_0_11(
'by_uri_reference',
'REFERENCE',
{
credential_issuer: 'https://credential-issuer.example.com',
credential_endpoint: 'test_issuer',
Expand All @@ -205,6 +205,6 @@ describe('CredentialOfferUtils should', () => {
},
{ scheme: 'https', baseUri: 'credential-issuer.example.com' }
)
).toThrow('credential_offer_uri must be set for credentialOfferPayloadMode by_uri_reference')
).toThrow('credential_offer_uri must be set for offerMode REFERENCE')
})
})
16 changes: 8 additions & 8 deletions packages/issuer/lib/__tests__/VcIssuer.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,7 @@ describe('VcIssuer', () => {

it.skip('should create credential offer', async () => {
const { uri, ...rest } = await vcIssuer.createCredentialOfferURI({
credentialOfferPayloadMode: 'by_value',
offerMode: 'VALUE',
grants: {
authorization_code: {
issuer_state: issuerState
Expand Down Expand Up @@ -287,7 +287,7 @@ describe('VcIssuer', () => {
await expect(
vcIssuer
.createCredentialOfferURI({
credentialOfferPayloadMode: 'by_uri_reference',
offerMode: 'REFERENCE',
issuerPayloadUri: 'http://issuer-example.com/:id',
grants: {
authorization_code: {
Expand Down Expand Up @@ -709,9 +709,9 @@ describe('VcIssuer without did', () => {
).rejects.toThrow(Error(ALG_ERROR))
})

it('should create credential offer uri with by_uri_reference mode', async () => {
it('should create credential offer uri with REFERENCE mode', async () => {
const result = await vcIssuer.createCredentialOfferURI({
credentialOfferPayloadMode: 'by_uri_reference',
offerMode: 'REFERENCE',
issuerPayloadUri: 'https://example.com/api/credentials/:id',
grants: {
authorization_code: {
Expand All @@ -727,22 +727,22 @@ describe('VcIssuer without did', () => {
expect(result.session.credentialOffer.credential_offer_uri).toMatch(/https:\/\/example\.com\/api\/credentials\/[\w-]+/)
})

it('should throw error if issuePayloadPath is missing with by_uri_reference mode', async () => {
it('should throw error if issuePayloadPath is missing with REFERENCE mode', async () => {
await expect(
vcIssuer.createCredentialOfferURI({
credentialOfferPayloadMode: 'by_uri_reference',
offerMode: 'REFERENCE',
grants: {
authorization_code: {
issuer_state: issuerState
}
}
})
).rejects.toThrow('issuePayloadPath must bet set for credentialOfferPayloadMode by_uri_reference!')
).rejects.toThrow('issuePayloadPath must bet set for offerMode REFERENCE!')
})

it('should get credential offer session by uri', async () => {
const result = await vcIssuer.createCredentialOfferURI({
credentialOfferPayloadMode: 'by_uri_reference',
offerMode: 'REFERENCE',
issuerPayloadUri: 'https://example.com/api/credentials/:id',
grants: {
authorization_code: {
Expand Down
20 changes: 10 additions & 10 deletions packages/issuer/lib/functions/CredentialOfferUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import {
CredentialIssuerMetadataOpts,
CredentialIssuerMetadataOptsV1_0_13,
CredentialIssuerMetadataV1_0_11,
CredentialOfferPayloadMode,
CredentialOfferMode,
CredentialOfferPayloadV1_0_11,
CredentialOfferPayloadV1_0_13,
CredentialOfferSession,
Expand Down Expand Up @@ -163,31 +163,31 @@ export function createCredentialOfferObjectv1_0_11(

export function createCredentialOfferURIFromObject(
credentialOffer: CredentialOfferV1_0_13 | UniformCredentialOffer,
credentialOfferPayloadMode: CredentialOfferPayloadMode,
offerMode: CredentialOfferMode,
opts?: { scheme?: string; baseUri?: string }
) {
const {
scheme,
baseUri
} = parseCredentialOfferSchemeAndBaseUri(opts?.scheme, opts?.baseUri, credentialOffer.credential_offer?.credential_issuer)

if (credentialOfferPayloadMode === 'by_uri_reference') {
if (offerMode === 'REFERENCE') {
if (!credentialOffer.credential_offer_uri) {
throw Error(`credential_offer_uri must be set for credentialOfferPayloadMode ${credentialOfferPayloadMode}`)
throw Error(`credential_offer_uri must be set for offerMode ${offerMode}`)
}
if (credentialOffer.credential_offer_uri.includes('credential_offer_uri=')) {
// discard the scheme. Apparently a URI is set and it already contains the actual uri, so assume that takes priority
return credentialOffer.credential_offer_uri
}
return `${scheme}://${baseUri}?credential_offer_uri=${encodeURIComponent(credentialOffer.credential_offer_uri)}`
} else if (credentialOfferPayloadMode === 'by_value') {
} else if (offerMode === 'VALUE') {
return `${scheme}://${baseUri}?credential_offer=${encodeURIComponent(JSON.stringify(credentialOffer.credential_offer))}`
}
throw Error(`unsupported credentialOfferPayloadMode ${credentialOfferPayloadMode}`)
throw Error(`unsupported offerMode ${offerMode}`)

Check warning on line 186 in packages/issuer/lib/functions/CredentialOfferUtils.ts

View check run for this annotation

Codecov / codecov/patch

packages/issuer/lib/functions/CredentialOfferUtils.ts#L186

Added line #L186 was not covered by tests
}

export function createCredentialOfferURI(
credentialOfferPayloadMode: CredentialOfferPayloadMode,
offerMode: CredentialOfferMode,
issuerMetadata?: IssuerMetadataV1_0_13,
// todo: probably it's wise to create another builder for CredentialOfferPayload that will generate different kinds of CredentialOfferPayload
opts?: {
Expand All @@ -199,11 +199,11 @@ export function createCredentialOfferURI(
},
): string {
const credentialOffer = createCredentialOfferObject(issuerMetadata, opts)
return createCredentialOfferURIFromObject(credentialOffer, credentialOfferPayloadMode, opts)
return createCredentialOfferURIFromObject(credentialOffer, offerMode, opts)
}

export function createCredentialOfferURIv1_0_11(
credentialOfferPayloadMode: CredentialOfferPayloadMode,
offerMode: CredentialOfferMode,
issuerMetadata?: CredentialIssuerMetadataV1_0_11,
// todo: probably it's wise to create another builder for CredentialOfferPayload that will generate different kinds of CredentialOfferPayload
opts?: {
Expand All @@ -215,7 +215,7 @@ export function createCredentialOfferURIv1_0_11(
},
): string {
const credentialOffer = createCredentialOfferObjectv1_0_11(issuerMetadata, opts)
return createCredentialOfferURIFromObject(credentialOffer, credentialOfferPayloadMode, opts)
return createCredentialOfferURIFromObject(credentialOffer, offerMode, opts)
}

export const isPreAuthorizedCodeExpired = (state: CredentialOfferSession, expirationDurationInSeconds: number) => {
Expand Down
2 changes: 1 addition & 1 deletion packages/oid4vci-common/lib/types/Generic.types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ export type KeyProofType = 'jwt' | 'cwt' | 'ldp_vp';

export type PoPMode = 'pop' | 'JWT'; // Proof of possession, or regular JWT

export type CredentialOfferPayloadMode = 'by_value' | 'by_uri_reference';
export type CredentialOfferMode = 'VALUE' | 'REFERENCE';

/**
* Important Note: please be aware that these Common interfaces are based on versions v1_0.11 and v1_0.09
Expand Down
4 changes: 2 additions & 2 deletions packages/oid4vci-common/lib/types/v1_0_13.types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import {
AlgValue,
CommonCredentialRequest,
CredentialDataSupplierInput,
CredentialOfferPayloadMode,
CredentialOfferMode,
CredentialRequestMsoMdoc,
CredentialRequestSdJwtVc,
CredentialsSupportedDisplay,
Expand Down Expand Up @@ -159,7 +159,7 @@ export interface CredentialOfferRESTRequest extends Partial<CredentialOfferPaylo
qrCodeOpts?: QRCodeOpts;
credentialDataSupplierInput?: CredentialDataSupplierInput;
statusListOpts?: Array<StatusListOpts>
credentialOfferPayloadMode?: CredentialOfferPayloadMode;
offerMode?: CredentialOfferMode;
}

export interface CredentialOfferPayloadV1_0_13 {
Expand Down

0 comments on commit 342f440

Please sign in to comment.