From 52cfdb6a9c4238b7228bd3716292032d6b0fccd1 Mon Sep 17 00:00:00 2001 From: bhavanakarwade <137506897+bhavanakarwade@users.noreply.github.com> Date: Fri, 26 Jul 2024 19:20:41 +0530 Subject: [PATCH] merge: DEV to QA (26/07/2024) (#877) * fix: create organisation changes and added geo-location attribute in response Signed-off-by: Ganesh Nawle * fix: send email verification issue Signed-off-by: bhavanakarwade * fix: send email verification issue (#823) Signed-off-by: bhavanakarwade * refactor: bulk issuance template list response changes (#824) * refactor: updated schema response for get API Signed-off-by: tipusinghaw * fix: schema already exist logic Signed-off-by: tipusinghaw * fix: schema attribute while w3c schema creation Signed-off-by: tipusinghaw --------- Signed-off-by: tipusinghaw * feat: batch bulk issunace (#826) * feat: batch bulk issuance Signed-off-by: tipusinghaw * stoped queue to remove issuance data Signed-off-by: tipusinghaw * feat: added delay for 1 min Signed-off-by: tipusinghaw * refactor: changed batch config Signed-off-by: tipusinghaw * feat: changed delay time for batch Signed-off-by: tipusinghaw * feat: added batch for retry Signed-off-by: tipusinghaw * refactor: added common constant in libs Signed-off-by: tipusinghaw * refactor: removed duplicate value from schema DTO Signed-off-by: tipusinghaw --------- Signed-off-by: tipusinghaw * fix: constant issue for bulk issunace (#827) * feat: batch bulk issuance Signed-off-by: tipusinghaw * stoped queue to remove issuance data Signed-off-by: tipusinghaw * feat: added delay for 1 min Signed-off-by: tipusinghaw * refactor: changed batch config Signed-off-by: tipusinghaw * feat: changed delay time for batch Signed-off-by: tipusinghaw * feat: added batch for retry Signed-off-by: tipusinghaw * refactor: added common constant in libs Signed-off-by: tipusinghaw * refactor: removed duplicate value from schema DTO Signed-off-by: tipusinghaw * fix: constent issue Signed-off-by: tipusinghaw --------- Signed-off-by: tipusinghaw * refcator: schema endorsement flow Signed-off-by: bhavanakarwade * fix: resolved sonar lint issues Signed-off-by: bhavanakarwade * fix: worked on sonarcloud issues Signed-off-by: bhavanakarwade * refactor: schema endorsement flow (#828) * fix: send email verification issue Signed-off-by: bhavanakarwade * refcator: schema endorsement flow Signed-off-by: bhavanakarwade * fix: resolved sonar lint issues Signed-off-by: bhavanakarwade * fix: worked on sonarcloud issues Signed-off-by: bhavanakarwade --------- Signed-off-by: bhavanakarwade * fix: delete organization bugs Signed-off-by: bhavanakarwade * fix: delete organization bugs (#829) * fix: send email verification issue Signed-off-by: bhavanakarwade * refcator: schema endorsement flow Signed-off-by: bhavanakarwade * fix: resolved sonar lint issues Signed-off-by: bhavanakarwade * fix: worked on sonarcloud issues Signed-off-by: bhavanakarwade * fix: delete organization bugs Signed-off-by: bhavanakarwade --------- Signed-off-by: bhavanakarwade * fix: cred def id space fixes Signed-off-by: bhavanakarwade * feature:added schema details in file_upload data and fix minor changes Signed-off-by: Ganesh Nawle * feature:added schema details in file_upload data,fix minor exception changes and resovle PR conflict Signed-off-by: Ganesh Nawle * feat: added schema details in table Signed-off-by: Ganesh Nawle * refactor: endorsement flow for key and web method (#831) * refactor: endorsement flow for key and web method Signed-off-by: bhavanakarwade * refactor: send email for issuance Signed-off-by: bhavanakarwade --------- Signed-off-by: bhavanakarwade * fix: prisma model issue and refactored file_upload model Signed-off-by: Ganesh Nawle * fix: prisma migration issue Signed-off-by: Ganesh Nawle * fix: prisma migration issue (#835) Signed-off-by: Ganesh Nawle * fix: prisma migration issue Signed-off-by: Ganesh Nawle * fix: create organization bug Signed-off-by: bhavanakarwade * fix: parameter and response related bugs (#837) * fix: send email verification issue Signed-off-by: bhavanakarwade * refcator: schema endorsement flow Signed-off-by: bhavanakarwade * fix: resolved sonar lint issues Signed-off-by: bhavanakarwade * fix: worked on sonarcloud issues Signed-off-by: bhavanakarwade * fix: delete organization bugs Signed-off-by: bhavanakarwade * fix: cred def id space fixes Signed-off-by: bhavanakarwade * fix: create organization bug Signed-off-by: bhavanakarwade --------- Signed-off-by: bhavanakarwade * fix:rollback statistics changes Signed-off-by: Ganesh Nawle * fix: pagination issue for preview file Signed-off-by: bhavanakarwade * fix: pagination issue Signed-off-by: bhavanakarwade * Fix/bugs (#839) * fix: send email verification issue Signed-off-by: bhavanakarwade * refcator: schema endorsement flow Signed-off-by: bhavanakarwade * fix: resolved sonar lint issues Signed-off-by: bhavanakarwade * fix: worked on sonarcloud issues Signed-off-by: bhavanakarwade * fix: delete organization bugs Signed-off-by: bhavanakarwade * fix: cred def id space fixes Signed-off-by: bhavanakarwade * fix: create organization bug Signed-off-by: bhavanakarwade * fix: pagination issue for preview file Signed-off-by: bhavanakarwade * fix: pagination issue Signed-off-by: bhavanakarwade --------- Signed-off-by: bhavanakarwade * fix: imageurl issue in verification Signed-off-by: bhavanakarwade * fix: imageurl issue for verification process (#840) * fix: send email verification issue Signed-off-by: bhavanakarwade * refcator: schema endorsement flow Signed-off-by: bhavanakarwade * fix: resolved sonar lint issues Signed-off-by: bhavanakarwade * fix: worked on sonarcloud issues Signed-off-by: bhavanakarwade * fix: delete organization bugs Signed-off-by: bhavanakarwade * fix: cred def id space fixes Signed-off-by: bhavanakarwade * fix: create organization bug Signed-off-by: bhavanakarwade * fix: pagination issue for preview file Signed-off-by: bhavanakarwade * fix: pagination issue Signed-off-by: bhavanakarwade * fix: imageurl issue in verification Signed-off-by: bhavanakarwade --------- Signed-off-by: bhavanakarwade * fix: made request if parameter optional Signed-off-by: bhavanakarwade * fix: made reuqest Id parameter optional (#841) * fix: send email verification issue Signed-off-by: bhavanakarwade * refcator: schema endorsement flow Signed-off-by: bhavanakarwade * fix: resolved sonar lint issues Signed-off-by: bhavanakarwade * fix: worked on sonarcloud issues Signed-off-by: bhavanakarwade * fix: delete organization bugs Signed-off-by: bhavanakarwade * fix: cred def id space fixes Signed-off-by: bhavanakarwade * fix: create organization bug Signed-off-by: bhavanakarwade * fix: pagination issue for preview file Signed-off-by: bhavanakarwade * fix: pagination issue Signed-off-by: bhavanakarwade * fix: imageurl issue in verification Signed-off-by: bhavanakarwade * fix: made request if parameter optional Signed-off-by: bhavanakarwade --------- Signed-off-by: bhavanakarwade * refactor: added templateId mapping in file upload functionality Signed-off-by: bhavanakarwade * refactor: interface types Signed-off-by: bhavanakarwade * refactor: added temaplateId column in file_upload table (#842) * fix: send email verification issue Signed-off-by: bhavanakarwade * refcator: schema endorsement flow Signed-off-by: bhavanakarwade * fix: resolved sonar lint issues Signed-off-by: bhavanakarwade * fix: worked on sonarcloud issues Signed-off-by: bhavanakarwade * fix: delete organization bugs Signed-off-by: bhavanakarwade * fix: cred def id space fixes Signed-off-by: bhavanakarwade * fix: create organization bug Signed-off-by: bhavanakarwade * fix: pagination issue for preview file Signed-off-by: bhavanakarwade * fix: pagination issue Signed-off-by: bhavanakarwade * fix: imageurl issue in verification Signed-off-by: bhavanakarwade * fix: made request if parameter optional Signed-off-by: bhavanakarwade * refactor: added templateId mapping in file upload functionality Signed-off-by: bhavanakarwade * refactor: interface types Signed-off-by: bhavanakarwade --------- Signed-off-by: bhavanakarwade * feat: changed issuance email template for EDUCRED Signed-off-by: Ganesh Nawle * fix:refactored preview uploaded file api changed query Param to path param Signed-off-by: Ganesh Nawle * added-logger statement Signed-off-by: Ganesh Nawle * fix:Minor fixes Signed-off-by: Ganesh Nawle * fix:removed all console logs Signed-off-by: Ganesh Nawle * feat:refactored api to add dynamic support to email template Signed-off-by: Ganesh Nawle * feat: added holder guard Signed-off-by: KulkarniShashank * feat: error message changes in user dto Signed-off-by: KulkarniShashank * feat: create cloud wallet (#852) * feat: creat cloud wallet Signed-off-by: tipusinghaw * fix: added error handling logic in common file Signed-off-by: tipusinghaw * fix: changed nkey veriable Signed-off-by: tipusinghaw --------- Signed-off-by: tipusinghaw * fix: add validation in the user role guard (#854) * fix: add validation in the user role guard Signed-off-by: KulkarniShashank * fix: modify validation in the user role guard Signed-off-by: KulkarniShashank * fix: modify validation and error message changes in the user role guard Signed-off-by: KulkarniShashank --------- Signed-off-by: KulkarniShashank * refactor: store holder role in user role mapping table Signed-off-by: KulkarniShashank * feat: configure cloud base wallet Signed-off-by: KulkarniShashank * fix: remove holder guard for base wallet configure API Signed-off-by: KulkarniShashank * feat: implement proof presentation for holder (#860) * feat: accept proof request by holder API Signed-off-by: KulkarniShashank * feat: holder get proof presentation and get proof presentation by id Signed-off-by: KulkarniShashank * refactor: changes in accept proof request and get proof request Signed-off-by: KulkarniShashank --------- Signed-off-by: KulkarniShashank * feat: Added DID creation method for cloud wallet (#861) * feat: creat cloud wallet Signed-off-by: tipusinghaw * fix: added error handling logic in common file Signed-off-by: tipusinghaw * fix: changed nkey veriable Signed-off-by: tipusinghaw * feat: creat DID for wallet Signed-off-by: tipusinghaw * resolve conflicts Signed-off-by: tipusinghaw * Resolve sonar cloud issue Signed-off-by: tipusinghaw --------- Signed-off-by: tipusinghaw * feat: create connection for holder (#863) * feat: connection invitaion creation Signed-off-by: KulkarniShashank * Merge branch 'develop' of https://github.com/credebl/platform into feat/connection-holder Signed-off-by: KulkarniShashank --------- Signed-off-by: KulkarniShashank * added cloud-wallet Dockerfile Signed-off-by: sahil.kamble@ayanworks.com * feat: implement credential APIs for cloud wallet (#865) * feat: creat cloud wallet Signed-off-by: tipusinghaw * fix: added error handling logic in common file Signed-off-by: tipusinghaw * fix: changed nkey veriable Signed-off-by: tipusinghaw * feat: creat DID for wallet Signed-off-by: tipusinghaw * resolve conflicts Signed-off-by: tipusinghaw * feat: credential APIs for cloud-wallet Signed-off-by: tipusinghaw * fix: changed create DID route Signed-off-by: tipusinghaw * fix: changed create DID route Signed-off-by: tipusinghaw --------- Signed-off-by: tipusinghaw * feat: implemented prettyvc while bulk issuance Signed-off-by: bhavanakarwade * fix: issuance process Signed-off-by: bhavanakarwade * feat: Added basic message on cloud wallet (#868) * feat: creat cloud wallet Signed-off-by: tipusinghaw * fix: added error handling logic in common file Signed-off-by: tipusinghaw * fix: changed nkey veriable Signed-off-by: tipusinghaw * feat: creat DID for wallet Signed-off-by: tipusinghaw * resolve conflicts Signed-off-by: tipusinghaw * feat: credential APIs for cloud-wallet Signed-off-by: tipusinghaw * fix: changed create DID route Signed-off-by: tipusinghaw * fix: changed create DID route Signed-off-by: tipusinghaw * feat: added baisc message implementation in cloud wallet Signed-off-by: tipusinghaw --------- Signed-off-by: tipusinghaw * wip: pretty for bulk issuance Signed-off-by: bhavanakarwade * wip: made autoacceptcredential flag always Signed-off-by: bhavanakarwade * fix: client id and client secret encrypt and decrypt Signed-off-by: KulkarniShashank * fix: datatype issue Signed-off-by: bhavanakarwade * fix: dcrypted the clientId and client secret Signed-off-by: KulkarniShashank * feat: implement prettyVc in bulk issuance porcess (#869) * fix: send email verification issue Signed-off-by: bhavanakarwade * refcator: schema endorsement flow Signed-off-by: bhavanakarwade * fix: resolved sonar lint issues Signed-off-by: bhavanakarwade * fix: worked on sonarcloud issues Signed-off-by: bhavanakarwade * fix: delete organization bugs Signed-off-by: bhavanakarwade * fix: cred def id space fixes Signed-off-by: bhavanakarwade * fix: create organization bug Signed-off-by: bhavanakarwade * fix: pagination issue for preview file Signed-off-by: bhavanakarwade * fix: pagination issue Signed-off-by: bhavanakarwade * fix: imageurl issue in verification Signed-off-by: bhavanakarwade * fix: made request if parameter optional Signed-off-by: bhavanakarwade * refactor: added templateId mapping in file upload functionality Signed-off-by: bhavanakarwade * refactor: interface types Signed-off-by: bhavanakarwade * feat: implemented prettyvc while bulk issuance Signed-off-by: bhavanakarwade * fix: issuance process Signed-off-by: bhavanakarwade * wip: pretty for bulk issuance Signed-off-by: bhavanakarwade * wip: made autoacceptcredential flag always Signed-off-by: bhavanakarwade * fix: datatype issue Signed-off-by: bhavanakarwade --------- Signed-off-by: bhavanakarwade * refactor: added agent url Signed-off-by: bhavanakarwade * Fix/bugs (#874) * fix: send email verification issue Signed-off-by: bhavanakarwade * refcator: schema endorsement flow Signed-off-by: bhavanakarwade * fix: resolved sonar lint issues Signed-off-by: bhavanakarwade * fix: worked on sonarcloud issues Signed-off-by: bhavanakarwade * fix: delete organization bugs Signed-off-by: bhavanakarwade * fix: cred def id space fixes Signed-off-by: bhavanakarwade * fix: create organization bug Signed-off-by: bhavanakarwade * fix: pagination issue for preview file Signed-off-by: bhavanakarwade * fix: pagination issue Signed-off-by: bhavanakarwade * fix: imageurl issue in verification Signed-off-by: bhavanakarwade * fix: made request if parameter optional Signed-off-by: bhavanakarwade * refactor: added templateId mapping in file upload functionality Signed-off-by: bhavanakarwade * refactor: interface types Signed-off-by: bhavanakarwade * feat: implemented prettyvc while bulk issuance Signed-off-by: bhavanakarwade * fix: issuance process Signed-off-by: bhavanakarwade * wip: pretty for bulk issuance Signed-off-by: bhavanakarwade * wip: made autoacceptcredential flag always Signed-off-by: bhavanakarwade * fix: datatype issue Signed-off-by: bhavanakarwade * refactor: added agent url Signed-off-by: bhavanakarwade --------- Signed-off-by: bhavanakarwade * refactor: added logs to test bulk issuance payload Signed-off-by: bhavanakarwade * Fix/bugs (#875) * fix: send email verification issue Signed-off-by: bhavanakarwade * refcator: schema endorsement flow Signed-off-by: bhavanakarwade * fix: resolved sonar lint issues Signed-off-by: bhavanakarwade * fix: worked on sonarcloud issues Signed-off-by: bhavanakarwade * fix: delete organization bugs Signed-off-by: bhavanakarwade * fix: cred def id space fixes Signed-off-by: bhavanakarwade * fix: create organization bug Signed-off-by: bhavanakarwade * fix: pagination issue for preview file Signed-off-by: bhavanakarwade * fix: pagination issue Signed-off-by: bhavanakarwade * fix: imageurl issue in verification Signed-off-by: bhavanakarwade * fix: made request if parameter optional Signed-off-by: bhavanakarwade * refactor: added templateId mapping in file upload functionality Signed-off-by: bhavanakarwade * refactor: interface types Signed-off-by: bhavanakarwade * feat: implemented prettyvc while bulk issuance Signed-off-by: bhavanakarwade * fix: issuance process Signed-off-by: bhavanakarwade * wip: pretty for bulk issuance Signed-off-by: bhavanakarwade * wip: made autoacceptcredential flag always Signed-off-by: bhavanakarwade * fix: datatype issue Signed-off-by: bhavanakarwade * refactor: added agent url Signed-off-by: bhavanakarwade * refactor: added logs to test bulk issuance payload Signed-off-by: bhavanakarwade --------- Signed-off-by: bhavanakarwade * refactor: remove unnecessary code Signed-off-by: bhavanakarwade * fix: remove unnecessary logs Signed-off-by: bhavanakarwade --------- Signed-off-by: Ganesh Nawle Signed-off-by: bhavanakarwade Signed-off-by: tipusinghaw Signed-off-by: KulkarniShashank Signed-off-by: sahil.kamble@ayanworks.com Co-authored-by: Ganesh Nawle Co-authored-by: ganesh_nawle <155989339+ganeshawle25@users.noreply.github.com> Co-authored-by: tipusinghaw <126460794+tipusinghaw@users.noreply.github.com> Co-authored-by: shitrerohit <37360542+shitrerohit@users.noreply.github.com> Co-authored-by: KulkarniShashank Co-authored-by: Shashank Kulkarni <44693969+KulkarniShashank@users.noreply.github.com> Co-authored-by: sahil.kamble@ayanworks.com Co-authored-by: KambleSahil3 <157386770+KambleSahil3@users.noreply.github.com> Co-authored-by: pallavighule <61926403+pallavighule@users.noreply.github.com> Signed-off-by: KulkarniShashank --- .../src/issuance/dtos/issuance.dto.ts | 118 ++++++++++++------ .../src/issuance/issuance.controller.ts | 3 +- .../src/issuance/issuance.service.ts | 4 +- apps/api-gateway/src/main.ts | 2 +- .../interfaces/issuance.interfaces.ts | 29 ++--- apps/issuance/src/issuance.service.ts | 36 ++++-- libs/common/src/cast.helper.ts | 8 +- .../src/interfaces/issuance.interface.ts | 26 ---- libs/prisma-service/prisma/schema.prisma | 2 +- 9 files changed, 132 insertions(+), 96 deletions(-) diff --git a/apps/api-gateway/src/issuance/dtos/issuance.dto.ts b/apps/api-gateway/src/issuance/dtos/issuance.dto.ts index fd5470c7b..b1a495666 100644 --- a/apps/api-gateway/src/issuance/dtos/issuance.dto.ts +++ b/apps/api-gateway/src/issuance/dtos/issuance.dto.ts @@ -19,6 +19,26 @@ class Issuer { @Type(() => String) id: string | { id?: string }; } + +class PrettyVc { + @ApiPropertyOptional() + @IsOptional() + @Transform(({ value }) => trim(value)) + @IsString({ message: 'Certificate must be in string format.' }) + certificate: string; + + @ApiPropertyOptional({example: 'a4'}) + @IsOptional() + @Transform(({ value }) => trim(value)) + @IsString({ message: 'Size must be in string format.' }) + size: string; + + @ApiPropertyOptional({example: 'landscape'}) + @IsOptional() + @Transform(({ value }) => trim(value)) + @IsString({ message: 'orientation must be in string format.' }) + orientation: string; +} export class Credential { @ApiProperty() @IsNotEmpty({ message: 'context is required' }) @@ -35,8 +55,7 @@ export class Credential { @Type(() => String) @IsOptional() id?:string; - - + @ApiProperty() @ValidateNested({ each: true }) @Type(() => Issuer) @@ -48,6 +67,11 @@ export class Credential { @Type(() => String) issuanceDate:string; + @ApiPropertyOptional() + @IsOptional() + @Type(() => PrettyVc) + prettyVc?: PrettyVc; + @ApiProperty() @IsString({ message: 'expiration date should be string' }) @IsNotEmpty({ message: 'expiration date is required' }) @@ -55,10 +79,10 @@ export class Credential { @IsOptional() expirationDate?:string; - @ApiProperty() - @IsNotEmpty({ message: ' credential subject required' }) - credentialSubject: SingleOrArray; - [key: string]: unknown + @ApiProperty() + @IsNotEmpty({ message: ' credential subject required' }) + credentialSubject: SingleOrArray; + [key: string]: unknown } @@ -458,16 +482,21 @@ export class OOBCredentialDtoWithEmail { proofPurpose: 'assertionMethod' } } - ] - }) - @IsNotEmpty({ message: 'Please provide valid attributes' }) - @IsArray({ message: 'attributes should be array' }) - @ArrayMaxSize(Number(process.env.OOB_BATCH_SIZE), { - message: `Limit reached (${process.env.OOB_BATCH_SIZE} credentials max). Easily handle larger batches via seamless CSV file uploads` - }) - @ValidateNested({ each: true }) - @Type(() => CredentialOffer) - credentialOffer: CredentialOffer[]; + ] + }) + @IsNotEmpty({ message: 'Please provide valid attributes' }) + @IsArray({ message: 'attributes should be array' }) + @ArrayMaxSize(Number(process.env.OOB_BATCH_SIZE), { message: `Limit reached (${process.env.OOB_BATCH_SIZE} credentials max). Easily handle larger batches via seamless CSV file uploads` }) + @ValidateNested({ each: true }) + @Type(() => CredentialOffer) + credentialOffer: CredentialOffer[]; + + @ApiProperty({ example: 'string' }) + @IsNotEmpty({ message: 'Please provide valid credential definition id' }) + @IsString({ message: 'credential definition id should be string' }) + @IsOptional() + @Transform(({ value }) => value.trim()) + credentialDefinitionId?: string; @ApiProperty({ example: 'string' }) @IsNotEmpty({ message: 'Please provide valid credential definition id' }) @@ -559,26 +588,43 @@ export class ClientDetails { @Type(() => Boolean) isSelectiveIssuance?: boolean = false; - userId?: string; - - @ApiPropertyOptional({ example: 'https://example.com/logo.png' }) - @Transform(({ value }) => trim(value)) - @IsOptional() - @IsUrl({ - // eslint-disable-next-line camelcase - require_protocol: true, - // eslint-disable-next-line camelcase - require_tld: true - }, - { message: 'brandLogoUrl should be a valid URL' }) - organizationLogoUrl?: string; - - @ApiPropertyOptional({ example: 'MyPlatform' }) - @Transform(({ value }) => trim(value)) - @IsOptional() - @IsString({ message: 'platformName should be string' }) - platformName?: string; - + userId?: string; + +@ApiPropertyOptional({ example: 'https://example.com/logo.png' }) +@Transform(({ value }) => trim(value)) +@IsOptional() +@IsUrl({ + // eslint-disable-next-line camelcase + require_protocol: true, + // eslint-disable-next-line camelcase + require_tld: true + }, +{ message: 'brandLogoUrl should be a valid URL' }) +organizationLogoUrl?: string; + +@ApiPropertyOptional({ example: 'MyPlatform' }) +@Transform(({ value }) => trim(value)) +@IsOptional() +@IsString({ message: 'platformName should be string' }) +platformName?: string; + +@ApiPropertyOptional() +@Transform(({ value }) => trim(value)) +@IsOptional() +@IsString({ message: 'Certificate should be string' }) +certificate?: string; + +@ApiPropertyOptional({ example: 'a4' }) +@Transform(({ value }) => trim(value)) +@IsOptional() +@IsString({ message: 'Size should be string' }) +size?: string; + +@ApiPropertyOptional({ example: 'landscape' }) +@Transform(({ value }) => trim(value)) +@IsOptional() +@IsString({ message: 'Orientation should be string' }) +orientation?: string; } export class TemplateDetails { diff --git a/apps/api-gateway/src/issuance/issuance.controller.ts b/apps/api-gateway/src/issuance/issuance.controller.ts index f05d7ad4d..568a4f406 100644 --- a/apps/api-gateway/src/issuance/issuance.controller.ts +++ b/apps/api-gateway/src/issuance/issuance.controller.ts @@ -413,6 +413,7 @@ async downloadBulkIssuanceCSVTemplate( @Param('orgId') orgId: string, @User() user: user, @Query(new ValidationPipe({ transform: true })) query: CredentialQuery, + @Res() res: Response, @Body() fileDetails?: object, @UploadedFile() file?: Express.Multer.File ): Promise { @@ -737,7 +738,7 @@ if (id && 'default' === issueCredentialDto.contextCorrelationId) { const webhookUrl = await this.issueCredentialService._getWebhookUrl(issueCredentialDto.contextCorrelationId, id).catch(error => { this.logger.debug(`error in getting webhook url ::: ${JSON.stringify(error)}`); - }); + }); if (webhookUrl) { const plainIssuanceDto = JSON.parse(JSON.stringify(issueCredentialDto)); diff --git a/apps/api-gateway/src/issuance/issuance.service.ts b/apps/api-gateway/src/issuance/issuance.service.ts index f9e615ada..957317f99 100644 --- a/apps/api-gateway/src/issuance/issuance.service.ts +++ b/apps/api-gateway/src/issuance/issuance.service.ts @@ -122,9 +122,9 @@ export class IssuanceService extends BaseService { return this.sendNatsMessage(this.issuanceProxy, 'issue-bulk-credentials', payload); } - async retryBulkCredential(fileId: string, orgId: string, clientDetails: ClientDetails): Promise<{ response: object }> { + async retryBulkCredential(fileId: string, orgId: string, clientDetails: ClientDetails): Promise { const payload = { fileId, orgId, clientDetails }; - return this.sendNats(this.issuanceProxy, 'retry-bulk-credentials', payload); + return this.sendNatsMessage(this.issuanceProxy, 'retry-bulk-credentials', payload); } async _getWebhookUrl(tenantId?: string, orgId?: string): Promise { diff --git a/apps/api-gateway/src/main.ts b/apps/api-gateway/src/main.ts index e9a3fdd99..122572087 100644 --- a/apps/api-gateway/src/main.ts +++ b/apps/api-gateway/src/main.ts @@ -31,7 +31,7 @@ async function bootstrap(): Promise { const expressApp = app.getHttpAdapter().getInstance(); expressApp.set('x-powered-by', false); app.use(express.json({ limit: '50mb' })); - app.use(express.urlencoded({ limit: '50mb' })); + app.use(express.urlencoded({ limit: '50mb', extended: true })); app.use(function (req, res, next) { let err = null; diff --git a/apps/issuance/interfaces/issuance.interfaces.ts b/apps/issuance/interfaces/issuance.interfaces.ts index f70873cc0..b365d16c3 100644 --- a/apps/issuance/interfaces/issuance.interfaces.ts +++ b/apps/issuance/interfaces/issuance.interfaces.ts @@ -141,15 +141,6 @@ export interface ICredential{ '@context':[]; type: string[]; prettyVc?: IPrettyVc; - issuer?: { - id: string; - }; - issuanceDate?: string; - credentialSubject?: ICredentialSubject; -} - -interface ICredentialSubject { - [key: string]: string; } export interface IOptions{ @@ -242,6 +233,9 @@ export interface IClientDetails { fileName?: string; organizationLogoUrl?: string; platformName?: string; + certificate?: string; + size?: string; + orientation?: string; } export interface IIssuedCredentialsSearchInterface { issuedCredentialsSearchCriteria: IIssuedCredentialsSearchCriteria; @@ -292,6 +286,7 @@ export interface SendEmailCredentialOffer { organizationDetails: organisation; platformName?: string, organizationLogoUrl?: string; + prettyVc?: IPrettyVc; } export interface TemplateDetailsInterface { @@ -336,6 +331,9 @@ export interface IQueuePayload{ isLastData: boolean; organizationLogoUrl?: string; platformName?: string; + certificate?: string; + size?: string; + orientation?: string; } interface FileDetails { @@ -368,10 +366,13 @@ export interface IDeletedFileUploadRecords { } export interface BulkPayloadDetails { - clientId: string, - orgId: string, - requestId?: string, - isRetry: boolean - organizationLogoUrl?: string, + clientId: string; + orgId: string; + requestId?: string; + isRetry: boolean; + organizationLogoUrl?: string; platformName?: string; + certificate?: string; + size?: string; + orientation?: string; } diff --git a/apps/issuance/src/issuance.service.ts b/apps/issuance/src/issuance.service.ts index b84594261..31ab5454c 100644 --- a/apps/issuance/src/issuance.service.ts +++ b/apps/issuance/src/issuance.service.ts @@ -10,7 +10,7 @@ import { ResponseMessages } from '@credebl/common/response-messages'; import { ClientProxy, RpcException } from '@nestjs/microservices'; import { map } from 'rxjs'; import { BulkPayloadDetails, CredentialOffer, FileUpload, FileUploadData, IAttributes, IBulkPayloadObject, IClientDetails, ICreateOfferResponse, ICredentialPayload, IIssuance, IIssueData, IPattern, IQueuePayload, ISchemaAttributes, ISendOfferNatsPayload, ImportFileDetails, IssueCredentialWebhookPayload, OutOfBandCredentialOfferPayload, PreviewRequest, SchemaDetails, SendEmailCredentialOffer, TemplateDetailsInterface } from '../interfaces/issuance.interfaces'; -import { IssuanceProcessState, OrgAgentType, PromiseResult, SchemaType, TemplateIdentifier} from '@credebl/enum/enum'; +import { AutoAccept, IssuanceProcessState, OrgAgentType, PromiseResult, SchemaType, TemplateIdentifier, W3CSchemaDataType} from '@credebl/enum/enum'; import * as QRCode from 'qrcode'; import { OutOfBandIssuance } from '../templates/out-of-band-issuance.template'; import { EmailDto } from '@credebl/common/dtos/email.dto'; @@ -463,7 +463,7 @@ export class IssuanceService { } } -async outOfBandCredentialOffer(outOfBandCredential: OutOfBandCredentialOfferPayload, platformName?: string, organizationLogoUrl?: string): Promise { +async outOfBandCredentialOffer(outOfBandCredential: OutOfBandCredentialOfferPayload, platformName?: string, organizationLogoUrl?: string, prettyVc?: IPrettyVc): Promise { try { const { credentialOffer, @@ -566,6 +566,7 @@ async outOfBandCredentialOffer(outOfBandCredential: OutOfBandCredentialOfferPayl organizationDetails: organisation; platformName?: string; organizationLogoUrl?: string; + prettyVc?: IPrettyVc; } = { credentialType, protocolVersion, @@ -583,7 +584,12 @@ async outOfBandCredentialOffer(outOfBandCredential: OutOfBandCredentialOfferPayl emailId: emailId || '', index: 0, platformName: platformName || null, - organizationLogoUrl: organizationLogoUrl || null + organizationLogoUrl: organizationLogoUrl || null, + prettyVc: { + certificate: prettyVc?.certificate, + size: prettyVc?.size, + orientation: prettyVc?.orientation + } }; if (credentialOffer) { @@ -1229,7 +1235,10 @@ return newCacheKey; isRetry, isLastData: false, organizationLogoUrl: bulkPayloadDetails?.organizationLogoUrl, - platformName: bulkPayloadDetails?.platformName + platformName: bulkPayloadDetails?.platformName, + certificate: bulkPayloadDetails?.certificate, + size: bulkPayloadDetails?.size, + orientation: bulkPayloadDetails?.orientation } })); @@ -1344,7 +1353,10 @@ return newCacheKey; requestId, isRetry: false, organizationLogoUrl: clientDetails?.organizationLogoUrl, - platformName: clientDetails?.platformName + platformName: clientDetails?.platformName, + certificate: clientDetails?.certificate, + size: clientDetails?.size, + orientation: clientDetails?.orientation }; this.processInBatches(bulkPayload, bulkPayloadDetails); @@ -1384,7 +1396,10 @@ return newCacheKey; orgId, isRetry: true, organizationLogoUrl: clientDetails?.organizationLogoUrl, - platformName: clientDetails?.platformName + platformName: clientDetails?.platformName, + certificate: clientDetails?.certificate, + size: clientDetails?.size, + orientation: clientDetails?.orientation }; this.processInBatches(bulkpayloadRetry, bulkPayloadDetails); } catch (error) { @@ -1459,8 +1474,8 @@ return newCacheKey; schemaLedgerId, credentialData: jobDetails.credential_data, orgDid, - orgId, - isReuseConnection: true + orgId + }; prettyVc = { @@ -1471,11 +1486,8 @@ return newCacheKey; oobIssuancepayload = await createOobJsonldIssuancePayload(JsonldCredentialDetails, prettyVc); } - const oobCredentials = await this.outOfBandCredentialOffer( - oobIssuancepayload, jobDetails?.platformName, jobDetails?.organizationLogoUrl - ); - + oobIssuancepayload, jobDetails?.platformName, jobDetails?.organizationLogoUrl, prettyVc); if (oobCredentials) { await this.issuanceRepository.deleteFileDataByJobId(jobDetails.id); } diff --git a/libs/common/src/cast.helper.ts b/libs/common/src/cast.helper.ts index e77b08b47..c1e42fd91 100644 --- a/libs/common/src/cast.helper.ts +++ b/libs/common/src/cast.helper.ts @@ -12,6 +12,7 @@ import { registerDecorator } from 'class-validator'; import { ResponseMessages } from './response-messages'; +import { IJsonldCredential, IPrettyVc } from './interfaces/issuance.interface'; interface ToNumberOptions { default?: number; @@ -199,9 +200,9 @@ export const validateEmail = (email: string): boolean => { // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/explicit-function-return-type -export const createOobJsonldIssuancePayload = (JsonldCredentialDetails: IJsonldCredential) => { +export const createOobJsonldIssuancePayload = (JsonldCredentialDetails: IJsonldCredential, prettyVc: IPrettyVc) => { const {credentialData, orgDid, orgId, schemaLedgerId, schemaName} = JsonldCredentialDetails; - const credentialSubject = { 'id': 'did:key:kdfJmG7pi1MnrX4y4nkJe' }; + const credentialSubject = { }; for (const key in credentialData) { if (credentialData.hasOwnProperty(key) && TemplateIdentifier.EMAIL_COLUMN !== key) { @@ -223,7 +224,8 @@ export const createOobJsonldIssuancePayload = (JsonldCredentialDetails: IJsonldC 'id': `${orgDid}` }, 'issuanceDate': new Date().toISOString(), - credentialSubject + credentialSubject, + prettyVc }, 'options': { 'proofType': 'Ed25519Signature2018', diff --git a/libs/common/src/interfaces/issuance.interface.ts b/libs/common/src/interfaces/issuance.interface.ts index ea8192510..4192ebc0d 100644 --- a/libs/common/src/interfaces/issuance.interface.ts +++ b/libs/common/src/interfaces/issuance.interface.ts @@ -86,30 +86,4 @@ export interface IIssuedCredential { size: string; orientation: string; } - - interface ICredentialSubject { - [key: string]: string; - } - - interface ICredential { - "@context": string[]; - type: string[]; - issuer?: { - id: string; - }; - issuanceDate?: string; - credentialSubject?: ICredentialSubject; - } - - interface IOptions { - proofType: string; - proofPurpose: string; - } - - export interface ICredentialData { - emailId?: string; - connectionId?: string; - credential?: ICredential; - options?: IOptions; - } \ No newline at end of file diff --git a/libs/prisma-service/prisma/schema.prisma b/libs/prisma-service/prisma/schema.prisma index a9ce39275..a4ac67c76 100644 --- a/libs/prisma-service/prisma/schema.prisma +++ b/libs/prisma-service/prisma/schema.prisma @@ -484,7 +484,7 @@ model file_upload { organisation organisation? @relation(fields: [orgId], references: [id]) orgId String? @db.Uuid credential_type String? - templateId String? @db.VarChar + templateId String? @db.VarChar } model file_data {