diff --git a/apps/api-gateway/src/connection/dtos/connection.dto.ts b/apps/api-gateway/src/connection/dtos/connection.dto.ts index cc8b0303f..0b140f476 100644 --- a/apps/api-gateway/src/connection/dtos/connection.dto.ts +++ b/apps/api-gateway/src/connection/dtos/connection.dto.ts @@ -58,6 +58,12 @@ export class CreateOutOfBandConnectionInvitation { @IsOptional() @IsNotEmpty({ message: 'Please provide recipientKey' }) recipientKey: string; + + @ApiPropertyOptional() + @IsString() + @IsOptional() + @IsNotEmpty({ message: 'Please provide invitation did' }) + invitationDid?: string; orgId; } @@ -125,6 +131,12 @@ export class CreateConnectionDto { @IsOptional() @IsNotEmpty({ message: 'Please provide recipientKey' }) recipientKey: string; + + @ApiPropertyOptional() + @IsString() + @IsOptional() + @IsNotEmpty({ message: 'Please provide invitation did' }) + invitationDid?: string; } export class ConnectionDto { diff --git a/apps/connection/src/connection.repository.ts b/apps/connection/src/connection.repository.ts index 430304f97..e5d461d34 100644 --- a/apps/connection/src/connection.repository.ts +++ b/apps/connection/src/connection.repository.ts @@ -49,7 +49,7 @@ export class ConnectionRepository { connectionInvitation: string, agentId: string, orgId: string, - recipientKey: string + invitationDid : string // eslint-disable-next-line camelcase ): Promise { try { @@ -59,7 +59,7 @@ export class ConnectionRepository { agentId, connectionInvitation, multiUse: true, - recipientKey + invitationDid } }); return agentDetails; diff --git a/apps/connection/src/connection.service.ts b/apps/connection/src/connection.service.ts index 1c1eaa7f2..73acbf018 100644 --- a/apps/connection/src/connection.service.ts +++ b/apps/connection/src/connection.service.ts @@ -620,7 +620,8 @@ export class ConnectionService { multiUseInvitation, orgId, routing, - recipientKey + recipientKey, + invitationDid } = payload?.createOutOfBandConnectionInvitation; const agentDetails = await this.connectionRepository.getAgentEndPoint(payload?.createOutOfBandConnectionInvitation?.orgId); @@ -645,7 +646,8 @@ export class ConnectionService { appendedAttachments: appendedAttachments || undefined, routing: routing || undefined, messages: messages || undefined, - recipientKey: recipientKey || undefined + recipientKey: recipientKey || undefined, + invitationDid: invitationDid || undefined }; const createConnectionInvitationFlag = 'connection-invitation'; @@ -662,12 +664,13 @@ export class ConnectionService { connectionInvitationUrl, connectionPayload.multiUseInvitation ); - const recipientsKey = createConnectionInvitation?.response?.recipientKey || recipientKey; + + const invitationsDid = createConnectionInvitation?.response?.invitationDid || invitationDid; const saveConnectionDetails = await this.connectionRepository.saveAgentConnectionInvitations( shortenedUrl, agentId, orgId, - recipientsKey + invitationsDid ); const connectionDetailRecords: ConnectionResponseDetail = { id: saveConnectionDetails.id, @@ -680,7 +683,7 @@ export class ConnectionService { lastChangedDateTime: saveConnectionDetails.lastChangedDateTime, lastChangedBy: saveConnectionDetails.lastChangedBy, recordId: createConnectionInvitation.response.outOfBandRecord.id, - recipientKey: saveConnectionDetails.recipientKey + invitationDid: saveConnectionDetails.invitationDid }; return connectionDetailRecords; } catch (error) { diff --git a/apps/connection/src/interfaces/connection.interfaces.ts b/apps/connection/src/interfaces/connection.interfaces.ts index 703e5081b..49f06697a 100644 --- a/apps/connection/src/interfaces/connection.interfaces.ts +++ b/apps/connection/src/interfaces/connection.interfaces.ts @@ -16,6 +16,7 @@ export interface IConnection { handshakeProtocols: string[]; orgId: string; recipientKey?: string; + invitationDid?: string } export interface IUserRequestInterface { userId: string; @@ -265,7 +266,7 @@ export interface ConnectionResponseDetail { lastChangedDateTime: Date; lastChangedBy: number; recordId: string; - recipientKey:string; + invitationDid?: string } export interface ICreateConnectionInvitation { @@ -283,6 +284,7 @@ export interface ICreateConnectionInvitation { appendedAttachments?: object[]; orgId?: string; recipientKey?: string; + invitationDid?: string; } export interface ICreateOutOfbandConnectionInvitation { diff --git a/apps/issuance/src/issuance.repository.ts b/apps/issuance/src/issuance.repository.ts index 1a6256ff4..579c5002e 100644 --- a/apps/issuance/src/issuance.repository.ts +++ b/apps/issuance/src/issuance.repository.ts @@ -72,7 +72,7 @@ export class IssuanceRepository { } - async getRecipientKeyByOrgId(orgId: string): Promise { + async getInvitationDidByOrgId(orgId: string): Promise { try { return this.prisma.agent_invitations.findMany({ where: { @@ -83,7 +83,7 @@ export class IssuanceRepository { } }); } catch (error) { - this.logger.error(`Error in getRecipientKey in issuance repository: ${error.message}`); + this.logger.error(`Error in getInvitationDid in issuance repository: ${error.message}`); throw error; } } diff --git a/apps/issuance/src/issuance.service.ts b/apps/issuance/src/issuance.service.ts index dbf92c525..9e842068d 100644 --- a/apps/issuance/src/issuance.service.ts +++ b/apps/issuance/src/issuance.service.ts @@ -194,12 +194,12 @@ export class IssuanceService { } const agentDetails = await this.issuanceRepository.getAgentEndPoint(orgId); - let recipientKey: string | undefined; + let invitationDid: string | undefined; if (true === reuseConnection) { - const data: agent_invitations[] = await this.issuanceRepository.getRecipientKeyByOrgId(orgId); + const data: agent_invitations[] = await this.issuanceRepository.getInvitationDidByOrgId(orgId); if (data && 0 < data.length) { const [firstElement] = data; - recipientKey = firstElement?.recipientKey ?? undefined; + invitationDid = firstElement?.invitationDid ?? undefined; } } const { agentEndPoint, organisation } = agentDetails; @@ -233,7 +233,7 @@ export class IssuanceService { imageUrl: organisation?.logoUrl || payload?.imageUrl || undefined, label: organisation?.name, comment: comment || '', - recipientKey:recipientKey || undefined + invitationDid:invitationDid || undefined }; } @@ -254,7 +254,7 @@ export class IssuanceService { imageUrl: organisation?.logoUrl || payload?.imageUrl || undefined, label: organisation?.name, comment: comment || '', - recipientKey:recipientKey || undefined + invitationDid:invitationDid || undefined }; } const credentialCreateOfferDetails = await this._outOfBandCredentialOffer(issueData, url, orgId); diff --git a/apps/verification/src/interfaces/verification.interface.ts b/apps/verification/src/interfaces/verification.interface.ts index ecfc8904d..16c0e41db 100644 --- a/apps/verification/src/interfaces/verification.interface.ts +++ b/apps/verification/src/interfaces/verification.interface.ts @@ -164,6 +164,7 @@ export interface ISendProofRequestPayload { presentationDefinition?:IProofRequestPresentationDefinition; reuseConnection?: boolean; recipientKey?:string; + invitationDid?: string } export interface IWSendProofRequestPayload { diff --git a/apps/verification/src/repositories/verification.repository.ts b/apps/verification/src/repositories/verification.repository.ts index b64b24145..1c1bc6125 100644 --- a/apps/verification/src/repositories/verification.repository.ts +++ b/apps/verification/src/repositories/verification.repository.ts @@ -187,7 +187,7 @@ export class VerificationRepository { } // eslint-disable-next-line camelcase - async getRecipientKeyByOrgId(orgId: string): Promise { + async getInvitationDidByOrgId(orgId: string): Promise { try { return this.prisma.agent_invitations.findMany({ where: { @@ -198,7 +198,7 @@ export class VerificationRepository { } }); } catch (error) { - this.logger.error(`Error in getRecipientKey in verification repository: ${error.message}`); + this.logger.error(`Error in getInvitationDid in verification repository: ${error.message}`); throw error; } } diff --git a/apps/verification/src/verification.service.ts b/apps/verification/src/verification.service.ts index 22daea915..2db511234 100644 --- a/apps/verification/src/verification.service.ts +++ b/apps/verification/src/verification.service.ts @@ -348,12 +348,12 @@ export class VerificationService { // Destructuring 'outOfBandRequestProof' to remove emailId, as it is not used while agent operation const { isShortenUrl, emailId, type, reuseConnection, ...updateOutOfBandRequestProof } = outOfBandRequestProof; - let recipientKey: string | undefined; + let invitationDid: string | undefined; if (true === reuseConnection) { - const data: agent_invitations[] = await this.verificationRepository.getRecipientKeyByOrgId(user.orgId); + const data: agent_invitations[] = await this.verificationRepository.getInvitationDidByOrgId(user.orgId); if (data && 0 < data.length) { const [firstElement] = data; - recipientKey = firstElement?.recipientKey ?? undefined; + invitationDid = firstElement?.invitationDid ?? undefined; } } outOfBandRequestProof.autoAcceptProof = outOfBandRequestProof.autoAcceptProof || AutoAccept.Always; @@ -363,7 +363,7 @@ export class VerificationService { if (ProofRequestType.INDY === type) { updateOutOfBandRequestProof.protocolVersion = updateOutOfBandRequestProof.protocolVersion || 'v1'; - updateOutOfBandRequestProof.recipientKey = recipientKey || undefined; + updateOutOfBandRequestProof.invitationDid = invitationDid || undefined; payload = { orgId: user.orgId, url, @@ -390,7 +390,7 @@ export class VerificationService { } }, autoAcceptProof:outOfBandRequestProof.autoAcceptProof, - recipientKey:recipientKey || undefined + invitationDid:invitationDid || undefined } }; } diff --git a/libs/common/src/interfaces/agent-service.interface.ts b/libs/common/src/interfaces/agent-service.interface.ts index 235e00210..26613351d 100644 --- a/libs/common/src/interfaces/agent-service.interface.ts +++ b/libs/common/src/interfaces/agent-service.interface.ts @@ -11,6 +11,7 @@ export interface InvitationMessage { }; outOfBandRecord: OutOfBandRecord; recipientKey?:string + invitationDid?: string }; } diff --git a/libs/common/src/interfaces/connection.interface.ts b/libs/common/src/interfaces/connection.interface.ts index 9ff7c4785..996b48c4c 100644 --- a/libs/common/src/interfaces/connection.interface.ts +++ b/libs/common/src/interfaces/connection.interface.ts @@ -31,5 +31,6 @@ export interface IConnectionsListCount { lastChangedDateTime: Date; lastChangedBy: number; recipientKey?:string; + invitationDid?: string } \ No newline at end of file diff --git a/libs/prisma-service/prisma/migrations/20240430114046_add_invitation_did/migration.sql b/libs/prisma-service/prisma/migrations/20240430114046_add_invitation_did/migration.sql new file mode 100644 index 000000000..6afe6c21e --- /dev/null +++ b/libs/prisma-service/prisma/migrations/20240430114046_add_invitation_did/migration.sql @@ -0,0 +1,2 @@ +-- AlterTable +ALTER TABLE "agent_invitations" ADD COLUMN "invitationDid" TEXT; diff --git a/libs/prisma-service/prisma/schema.prisma b/libs/prisma-service/prisma/schema.prisma index bd3cbf946..36a639341 100644 --- a/libs/prisma-service/prisma/schema.prisma +++ b/libs/prisma-service/prisma/schema.prisma @@ -198,17 +198,17 @@ model org_agents { } model org_dids { - id String @id @default(uuid()) @db.Uuid - createDateTime DateTime @default(now()) @db.Timestamptz(6) - createdBy String @db.Uuid - lastChangedDateTime DateTime @default(now()) @db.Timestamptz(6) - lastChangedBy String @db.Uuid - orgId String @db.Uuid - isPrimaryDid Boolean - did String @db.VarChar(500) + id String @id @default(uuid()) @db.Uuid + createDateTime DateTime @default(now()) @db.Timestamptz(6) + createdBy String @db.Uuid + lastChangedDateTime DateTime @default(now()) @db.Timestamptz(6) + lastChangedBy String @db.Uuid + orgId String @db.Uuid + isPrimaryDid Boolean + did String @db.VarChar(500) didDocument Json - orgAgentId String @db.Uuid - org_agents org_agents @relation(fields: [orgAgentId], references: [id]) + orgAgentId String @db.Uuid + org_agents org_agents @relation(fields: [orgAgentId], references: [id]) } model org_agents_type { @@ -309,6 +309,7 @@ model agent_invitations { org_agents org_agents @relation(fields: [agentId], references: [id]) organisation organisation @relation(fields: [orgId], references: [id]) recipientKey String? + invitationDid String? } model connections {