From 0c6dc70b1ce24e3cf0c09250623cf38db7f181f9 Mon Sep 17 00:00:00 2001 From: RinkalBhojani Date: Wed, 4 Mar 2026 21:55:17 +0530 Subject: [PATCH] fix: expectedOrigins added to intent based proof request creation API Signed-off-by: RinkalBhojani --- .../dtos/create-intent-based-verification.dto.ts | 14 +++++++++++++- .../oid4vc-verification.controller.ts | 14 +++++++------- .../oid4vc-verification.service.ts | 4 ++-- .../src/oid4vc-verification.controller.ts | 6 ++++-- .../src/oid4vc-verification.service.ts | 9 +++++---- 5 files changed, 31 insertions(+), 16 deletions(-) diff --git a/apps/api-gateway/src/oid4vc-verification/dtos/create-intent-based-verification.dto.ts b/apps/api-gateway/src/oid4vc-verification/dtos/create-intent-based-verification.dto.ts index 8d329ea7c..e6d64b8c6 100644 --- a/apps/api-gateway/src/oid4vc-verification/dtos/create-intent-based-verification.dto.ts +++ b/apps/api-gateway/src/oid4vc-verification/dtos/create-intent-based-verification.dto.ts @@ -1,5 +1,5 @@ import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger'; -import { IsDefined, IsEnum, IsOptional, IsString, ValidateNested } from 'class-validator'; +import { IsArray, IsDefined, IsEnum, IsOptional, IsString, ValidateIf, ValidateNested } from 'class-validator'; import { Type } from 'class-transformer'; import { ResponseMode } from '@credebl/enum/enum'; import { RequestSignerDto } from './oid4vc-verifier-presentation.dto'; @@ -20,4 +20,16 @@ export class CreateIntentBasedVerificationDto { @ValidateNested() @Type(() => RequestSignerDto) requestSigner?: RequestSignerDto; + + //TODO: check e2e flow and add ResponseMode based restrictions + // @IsOptional() + @ApiPropertyOptional({ + type: [String], + description: 'Required when responseMode is dc_api or dc_api.jwt', + example: ['https://example.com'] + }) + @ValidateIf((obj) => obj.responseMode === ResponseMode.DC_API || obj.responseMode === ResponseMode.DC_API_JWT) + @IsDefined({ message: 'expectedOrigins is required when responseMode is dc_api or dc_api.jwt' }) + @IsArray() + expectedOrigins: string[]; } diff --git a/apps/api-gateway/src/oid4vc-verification/oid4vc-verification.controller.ts b/apps/api-gateway/src/oid4vc-verification/oid4vc-verification.controller.ts index 24d536d1f..db9a2b2d0 100644 --- a/apps/api-gateway/src/oid4vc-verification/oid4vc-verification.controller.ts +++ b/apps/api-gateway/src/oid4vc-verification/oid4vc-verification.controller.ts @@ -401,14 +401,14 @@ export class Oid4vcVerificationController { return res.status(HttpStatus.OK).json({ success: true, - message: 'Verifier details retrieved successfully.', + message: 'Verification presentation details retrieved successfully.', data: result }); } catch (error) { this.logger.debug( - `Error in getVerificationPresentation(): ${error.message || 'Failed to fetch verifier presentation.'}` + `Error in getVerificationPresentation(): ${error.message || 'Failed to fetch verification presentation.'}` ); - throw new BadRequestException(error.message || 'Failed to fetch verifier presentation.'); + throw new BadRequestException(error.message || 'Failed to fetch verification presentation.'); } } @@ -457,19 +457,19 @@ export class Oid4vcVerificationController { ); this.logger.debug( - `Verifier presentation response details fetched successfully for verificationPresentationId: ${verificationPresentationId}` + `Verification presentation response details fetched successfully for verificationPresentationId: ${verificationPresentationId}` ); return res.status(HttpStatus.OK).json({ success: true, - message: 'Verifier presentation response details retrieved successfully.', + message: 'Verification presentation response details retrieved successfully.', data: result }); } catch (error) { this.logger.debug( - `Error in getVerificationPresentationResponse(): ${error.message || 'Failed to fetch verifier presentation response details.'}` + `Error in getVerificationPresentationResponse(): ${error.message || 'Failed to fetch verification presentation response details.'}` ); - throw new BadRequestException(error.message || 'Failed to fetch verifier presentation response details.'); + throw new BadRequestException(error.message || 'Failed to fetch verification presentation response details.'); } } /** diff --git a/apps/api-gateway/src/oid4vc-verification/oid4vc-verification.service.ts b/apps/api-gateway/src/oid4vc-verification/oid4vc-verification.service.ts index b3e5b7489..1fe1c4a95 100644 --- a/apps/api-gateway/src/oid4vc-verification/oid4vc-verification.service.ts +++ b/apps/api-gateway/src/oid4vc-verification/oid4vc-verification.service.ts @@ -27,8 +27,8 @@ export class Oid4vcVerificationService { createIntentDto: CreateIntentBasedVerificationDto, userDetails: user ): Promise { - const { intent, responseMode, requestSigner } = createIntentDto; - const payload = { orgId, verifierId, intent, responseMode, requestSigner, userDetails }; + const { intent, responseMode, requestSigner, expectedOrigins } = createIntentDto; + const payload = { orgId, verifierId, intent, responseMode, requestSigner, expectedOrigins, userDetails }; this.logger.debug( `[createIntentBasedVerificationPresentation] Called with orgId=${orgId}, verifierId=${verifierId}, intent=${intent}, user=${userDetails?.id}` ); diff --git a/apps/oid4vc-verification/src/oid4vc-verification.controller.ts b/apps/oid4vc-verification/src/oid4vc-verification.controller.ts index a27615906..64eeeb825 100644 --- a/apps/oid4vc-verification/src/oid4vc-verification.controller.ts +++ b/apps/oid4vc-verification/src/oid4vc-verification.controller.ts @@ -112,8 +112,9 @@ export class Oid4vpVerificationController { responseMode: string; requestSigner: IRequestSigner; userDetails: user; + expectedOrigins?: string[]; }): Promise { - const { orgId, verifierId, intent, responseMode, requestSigner, userDetails } = payload; + const { orgId, verifierId, intent, responseMode, requestSigner, expectedOrigins, userDetails } = payload; this.logger.debug( `[createIntentBasedVerificationPresentation] Received 'oid4vp-intent-based-verification-presentation' for orgId=${orgId}, verifierId=${verifierId}, intent=${intent}, user=${userDetails?.id ?? 'unknown'}` ); @@ -123,7 +124,8 @@ export class Oid4vpVerificationController { intent, responseMode, requestSigner, - userDetails + userDetails, + expectedOrigins ); } diff --git a/apps/oid4vc-verification/src/oid4vc-verification.service.ts b/apps/oid4vc-verification/src/oid4vc-verification.service.ts index c151a1bc7..644f3d995 100644 --- a/apps/oid4vc-verification/src/oid4vc-verification.service.ts +++ b/apps/oid4vc-verification/src/oid4vc-verification.service.ts @@ -312,7 +312,8 @@ export class Oid4vpVerificationService extends BaseService { intent: string, responseMode: string, requestSigner: IRequestSigner, - userDetails: user + userDetails: user, + expectedOrigins?: string[] ): Promise { this.logger.debug( `[createIntentBasedVerificationPresentation] called for orgId=${orgId}, verifierId=${verifierId}, intent=${intent}, user=${userDetails?.id ?? 'unknown'}` @@ -354,7 +355,8 @@ export class Oid4vpVerificationService extends BaseService { verifierId: verifier.publicVerifierId, dcql: templateData?.template?.templateJson.dcql, responseMode, - requestSigner: null + requestSigner: null, + expectedOrigins }; // Handle request signer based on method @@ -426,8 +428,7 @@ export class Oid4vpVerificationService extends BaseService { : getAgentUrl(agentEndPoint, CommonConstants.OIDC_VERIFIER_SESSION_GET_BY_QUERY); if (!query.id) { - //TODO: Temp fix due to deployment issues - url = buildUrlWithQuery(url, query as Record); + url = buildUrlWithQuery(url, query as Record); } this.logger.debug(`[getVerifierSession] calling agent URL=${url}`);