From 4efe78b60ceb8e24f76bafb453b72201457e9aa8 Mon Sep 17 00:00:00 2001 From: pranalidhanavade Date: Wed, 22 Oct 2025 13:38:03 +0530 Subject: [PATCH 01/16] refactor: create shared agent wallet api Signed-off-by: pranalidhanavade --- .../src/agent-service.service.ts | 59 ++++++++++--------- .../repositories/agent-service.repository.ts | 35 +++++------ .../agent-service/dto/create-tenant.dto.ts | 46 +++++++-------- 3 files changed, 72 insertions(+), 68 deletions(-) diff --git a/apps/agent-service/src/agent-service.service.ts b/apps/agent-service/src/agent-service.service.ts index fb41a1801..217bb4bf7 100644 --- a/apps/agent-service/src/agent-service.service.ts +++ b/apps/agent-service/src/agent-service.service.ts @@ -764,7 +764,6 @@ export class AgentServiceService { description: ResponseMessages.errorMessages.conflict }); } - // Create tenant this._createTenant(payload, user); return agentStatusResponse; @@ -812,8 +811,10 @@ export class AgentServiceService { payload.endpoint = platformAdminSpinnedUp.org_agents[0].agentEndPoint; // Create tenant wallet and DID + // wallet create step const tenantDetails = await this.createTenantAndNotify(payload, platformAdminSpinnedUp); - if (!tenantDetails?.walletResponseDetails?.id || !tenantDetails?.DIDCreationOption?.did) { + + if (!tenantDetails?.walletResponseDetails?.id) { this.logger.error(`Error in getting wallet id and wallet did`); throw new NotFoundException(ResponseMessages.agent.error.notAbleToSpinUpAgent, { cause: new Error(), @@ -833,9 +834,9 @@ export class AgentServiceService { // Get agent type details const agentTypeId = await this.agentServiceRepository.getAgentTypeId(AgentType.AFJ); const storeOrgAgentData: IStoreOrgAgentDetails = { - did: tenantDetails.DIDCreationOption.did, + // did: tenantDetails.DIDCreationOption.did, isDidPublic: true, - didDoc: tenantDetails.DIDCreationOption.didDocument || tenantDetails.DIDCreationOption.didDoc, //changed the didDoc into didDocument + // didDoc: tenantDetails.DIDCreationOption.didDocument || tenantDetails.DIDCreationOption.didDoc, //changed the didDoc into didDocument agentSpinUpStatus: AgentSpinUpStatus.COMPLETED, agentsTypeId: agentTypeId, orgId: payload.orgId, @@ -843,7 +844,7 @@ export class AgentServiceService { orgAgentTypeId, tenantId: tenantDetails.walletResponseDetails['id'], walletName: payload.label, - ledgerId: ledgerIdData.map((item) => item.id), + // ledgerId: ledgerIdData.map((item) => item.id), id: agentProcess?.id, apiKey: await this.commonService.dataEncryption(tenantDetails.walletResponseDetails['token']) }; @@ -854,23 +855,23 @@ export class AgentServiceService { const orgAgentDetails = await this.agentServiceRepository.storeOrgAgentDetails(storeOrgAgentData); - const createdDidDetails = { - orgId: payload.orgId, - did: tenantDetails.DIDCreationOption.did, - didDocument: tenantDetails.DIDCreationOption.didDocument || tenantDetails.DIDCreationOption.didDoc, - isPrimaryDid: true, - orgAgentId: orgAgentDetails.id, - userId: user.id - }; + // const createdDidDetails = { + // orgId: payload.orgId, + // did: tenantDetails.DIDCreationOption.did, + // didDocument: tenantDetails.DIDCreationOption.didDocument || tenantDetails.DIDCreationOption.didDoc, + // isPrimaryDid: true, + // orgAgentId: orgAgentDetails.id, + // userId: user.id + // }; - await this.agentServiceRepository.storeDidDetails(createdDidDetails); + // await this.agentServiceRepository.storeDidDetails(createdDidDetails); - this.notifyClientSocket('invitation-url-creation-started', payload.clientSocketId); + // this.notifyClientSocket('invitation-url-creation-started', payload.clientSocketId); // Create the legacy connection invitation - await this._createConnectionInvitation(payload.orgId, user, getOrganization.name); + // await this._createConnectionInvitation(payload.orgId, user, getOrganization.name); - this.notifyClientSocket('invitation-url-creation-success', payload.clientSocketId); + // this.notifyClientSocket('invitation-url-creation-success', payload.clientSocketId); } catch (error) { this.handleError(error, payload.clientSocketId); @@ -930,7 +931,6 @@ export class AgentServiceService { } } } - const getApiKey = await this.getOrgAgentApiKey(orgId); const url = this.constructUrl(agentDetails); @@ -1122,17 +1122,20 @@ export class AgentServiceService { if (!walletResponseDetails && !walletResponseDetails.id && !walletResponseDetails.token) { throw new InternalServerErrorException('Error while creating the wallet'); } - const didCreateOption = { - didPayload: WalletSetupPayload, - agentEndpoint: platformAdminSpinnedUp.org_agents[0].agentEndPoint, - apiKey: walletResponseDetails.token - }; - const DIDCreationOption = await this._createDID(didCreateOption); - if (!DIDCreationOption) { - throw new InternalServerErrorException('Error while creating the wallet'); - } + // const didCreateOption = { + // didPayload: WalletSetupPayload, + // agentEndpoint: platformAdminSpinnedUp.org_agents[0].agentEndPoint, + // apiKey: walletResponseDetails.token + // }; + // const DIDCreationOption = await this._createDID(didCreateOption); + // if (!DIDCreationOption) { + // throw new InternalServerErrorException('Error while creating the wallet'); + // } - return { walletResponseDetails, DIDCreationOption }; + return { + walletResponseDetails + // DIDCreationOption + }; } // diff --git a/apps/agent-service/src/repositories/agent-service.repository.ts b/apps/agent-service/src/repositories/agent-service.repository.ts index f561694e5..7bb89dac5 100644 --- a/apps/agent-service/src/repositories/agent-service.repository.ts +++ b/apps/agent-service/src/repositories/agent-service.repository.ts @@ -1,17 +1,5 @@ -import { PrismaService } from '@credebl/prisma-service'; +import { AgentType, PrismaTables } from '@credebl/enum/enum'; import { ConflictException, Injectable, Logger } from '@nestjs/common'; -/* eslint-disable camelcase */ -import { - Prisma, - ledgerConfig, - ledgers, - org_agents, - org_agents_type, - org_dids, - organisation, - platform_config, - user -} from '@prisma/client'; import { ICreateOrgAgent, ILedgers, @@ -24,7 +12,20 @@ import { LedgerNameSpace, OrgDid } from '../interface/agent-service.interface'; -import { AgentType, PrismaTables } from '@credebl/enum/enum'; +/* eslint-disable camelcase */ +import { + Prisma, + ledgerConfig, + ledgers, + org_agents, + org_agents_type, + org_dids, + organisation, + platform_config, + user +} from '@prisma/client'; + +import { PrismaService } from '@credebl/prisma-service'; @Injectable() export class AgentServiceRepository { @@ -157,15 +158,15 @@ export class AgentServiceRepository { // eslint-disable-next-line camelcase async storeOrgAgentDetails(storeOrgAgentDetails: IStoreOrgAgentDetails): Promise { try { - const { id, userId, ledgerId, did, didDoc, ...commonFields } = storeOrgAgentDetails; + const { id, userId, ledgerId, didDoc, ...commonFields } = storeOrgAgentDetails; const firstLedgerId = Array.isArray(ledgerId) ? ledgerId[0] : null; const data = { ...commonFields, ledgerId: firstLedgerId, createdBy: userId, lastChangedBy: userId, - didDocument: didDoc, - orgDid: did + didDocument: didDoc + // orgDid: '' }; // eslint-disable-next-line camelcase diff --git a/apps/api-gateway/src/agent-service/dto/create-tenant.dto.ts b/apps/api-gateway/src/agent-service/dto/create-tenant.dto.ts index e26131431..77e0cfe34 100644 --- a/apps/api-gateway/src/agent-service/dto/create-tenant.dto.ts +++ b/apps/api-gateway/src/agent-service/dto/create-tenant.dto.ts @@ -1,28 +1,28 @@ -import { trim } from '@credebl/common/cast.helper'; import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger'; +import { IsOptional, IsString, MaxLength, MinLength } from 'class-validator'; + import { Transform } from 'class-transformer'; -import { MaxLength, IsString, MinLength, IsOptional } from 'class-validator'; -import { CreateDidDto } from './create-did.dto'; -export class CreateTenantDto extends CreateDidDto { - @ApiProperty() - @MaxLength(25, { message: 'Maximum length for label must be 25 characters.' }) - @IsString({ message: 'label must be in string format.' }) - @Transform(({ value }) => trim(value)) - @MinLength(2, { message: 'Minimum length for label must be 2 characters.' }) - label: string; +import { trim } from '@credebl/common/cast.helper'; + +export class CreateTenantDto { + @ApiProperty() + @MaxLength(25, { message: 'Maximum length for label must be 25 characters.' }) + @IsString({ message: 'label must be in string format.' }) + @Transform(({ value }) => trim(value)) + @MinLength(2, { message: 'Minimum length for label must be 2 characters.' }) + label: string; - @ApiProperty({ example: 'ojIckSD2jqNzOqIrAGzL' }) - @IsOptional() - @ApiPropertyOptional() - @IsString({ message: 'did must be in string format.' }) - clientSocketId?: string; + @ApiProperty({ example: 'ojIckSD2jqNzOqIrAGzL' }) + @IsOptional() + @ApiPropertyOptional() + @IsString({ message: 'did must be in string format.' }) + clientSocketId?: string; - @ApiProperty({ example: 'XzFjo1RTZ2h9UVFCnPUyaQ' }) - @IsOptional() - @ApiPropertyOptional() - @IsString({ message: 'did must be in string format.' }) - did?: string; + @ApiProperty({ example: 'XzFjo1RTZ2h9UVFCnPUyaQ' }) + @IsOptional() + @ApiPropertyOptional() + @IsString({ message: 'did must be in string format.' }) + did?: string; - orgId: string; - -} \ No newline at end of file + orgId: string; +} From 600f68e3494bd52d5f22947b19165cf0d153e9ea Mon Sep 17 00:00:00 2001 From: pranalidhanavade Date: Tue, 28 Oct 2025 19:41:11 +0530 Subject: [PATCH 02/16] refactor: changes in shared agent api to support wallet creation without did for shared agent Signed-off-by: pranalidhanavade --- .../src/agent-service.service.ts | 35 +++++++++++-------- .../repositories/agent-service.repository.ts | 8 +++-- .../agent-service/agent-service.controller.ts | 3 ++ 3 files changed, 28 insertions(+), 18 deletions(-) diff --git a/apps/agent-service/src/agent-service.service.ts b/apps/agent-service/src/agent-service.service.ts index 217bb4bf7..2f9b58b1f 100644 --- a/apps/agent-service/src/agent-service.service.ts +++ b/apps/agent-service/src/agent-service.service.ts @@ -1,3 +1,4 @@ +/* eslint-disable no-console */ /* eslint-disable quotes */ /* eslint-disable @typescript-eslint/explicit-module-boundary-types */ /* eslint-disable yoda */ @@ -230,7 +231,7 @@ export class AgentServiceService { this.emitAgentSpinupInitiatedEvent(agentSpinupDto, socket); const agentSpinUpStatus = AgentSpinUpStatus.PROCESSED; - agentProcess = await this.createOrgAgent(agentSpinUpStatus, userId); + agentProcess = await this.createOrgAgent(agentSpinUpStatus, userId, agentSpinupDto.orgId); // AFJ agent spin-up this._agentSpinup( @@ -441,9 +442,9 @@ export class AgentServiceService { return socket; } - async createOrgAgent(agentSpinUpStatus: AgentSpinUpStatus, userId: string): Promise { + async createOrgAgent(agentSpinUpStatus: AgentSpinUpStatus, userId: string, orgId: string): Promise { try { - const agentProcess = await this.agentServiceRepository.createOrgAgent(agentSpinUpStatus, userId); + const agentProcess = await this.agentServiceRepository.createOrgAgent(agentSpinUpStatus, userId, orgId); this.logger.log(`Organization agent created with status: ${agentSpinUpStatus}`); return agentProcess; } catch (error) { @@ -743,19 +744,21 @@ export class AgentServiceService { * @returns Get agent status */ async createTenant(payload: ITenantDto, user: IUserRequestInterface): Promise { + console.log('🚀 ~ AgentServiceService ~ createTenant ~ payload:777777777777777777777777', payload); try { const agentStatusResponse = { agentSpinupStatus: AgentSpinUpStatus.PROCESSED }; const getOrgAgent = await this.agentServiceRepository.getAgentDetails(payload.orgId); + console.log('🚀 ~ AgentServiceService ~ createTenant ~ getOrgAgent:888888888888', getOrgAgent); - if (AgentSpinUpStatus.COMPLETED === getOrgAgent?.agentSpinUpStatus) { - this.logger.error(`Your wallet is already been created.`); - throw new ConflictException(ResponseMessages.agent.error.walletAlreadyCreated, { - cause: new Error(), - description: ResponseMessages.errorMessages.conflict - }); - } + // if (AgentSpinUpStatus.COMPLETED === getOrgAgent?.agentSpinUpStatus) { + // this.logger.error(`Your wallet is already been created.`); + // throw new ConflictException(ResponseMessages.agent.error.walletAlreadyCreated, { + // cause: new Error(), + // description: ResponseMessages.errorMessages.conflict + // }); + // } if (AgentSpinUpStatus.PROCESSED === getOrgAgent?.agentSpinUpStatus) { this.logger.error(`Your wallet is already processing.`); @@ -780,6 +783,7 @@ export class AgentServiceService { * @returns Get agent status */ async _createTenant(payload: ITenantDto, user: IUserRequestInterface): Promise { + console.log('🚀 ~ AgentServiceService ~ _createTenant ~ payload:9999999999999', payload); let agentProcess; let ledgerIdData = []; try { @@ -804,7 +808,7 @@ export class AgentServiceService { const agentSpinUpStatus = AgentSpinUpStatus.PROCESSED; // Create and stored agent details - agentProcess = await this.agentServiceRepository.createOrgAgent(agentSpinUpStatus, user?.id); + agentProcess = await this.agentServiceRepository.createOrgAgent(agentSpinUpStatus, user?.id, payload.orgId); // Get platform admin details const platformAdminSpinnedUp = await this.getPlatformAdminAndNotify(payload.clientSocketId); @@ -837,7 +841,7 @@ export class AgentServiceService { // did: tenantDetails.DIDCreationOption.did, isDidPublic: true, // didDoc: tenantDetails.DIDCreationOption.didDocument || tenantDetails.DIDCreationOption.didDoc, //changed the didDoc into didDocument - agentSpinUpStatus: AgentSpinUpStatus.COMPLETED, + agentSpinUpStatus: AgentSpinUpStatus.PROCESSED, agentsTypeId: agentTypeId, orgId: payload.orgId, agentEndPoint: platformAdminSpinnedUp.org_agents[0].agentEndPoint, @@ -848,6 +852,7 @@ export class AgentServiceService { id: agentProcess?.id, apiKey: await this.commonService.dataEncryption(tenantDetails.walletResponseDetails['token']) }; + console.log('🚀 ~ AgentServiceService ~ _createTenant ~ storeOrgAgentData:', storeOrgAgentData); // Get organization data const getOrganization = await this.agentServiceRepository.getOrgDetails(payload.orgId); @@ -875,9 +880,9 @@ export class AgentServiceService { } catch (error) { this.handleError(error, payload.clientSocketId); - if (agentProcess && agentProcess?.id) { - this.agentServiceRepository.removeOrgAgent(agentProcess?.id); - } + // if (agentProcess && agentProcess?.id) { + // this.agentServiceRepository.removeOrgAgent(agentProcess?.id); + // } throw error; } } diff --git a/apps/agent-service/src/repositories/agent-service.repository.ts b/apps/agent-service/src/repositories/agent-service.repository.ts index 7bb89dac5..a40ad626e 100644 --- a/apps/agent-service/src/repositories/agent-service.repository.ts +++ b/apps/agent-service/src/repositories/agent-service.repository.ts @@ -101,13 +101,14 @@ export class AgentServiceRepository { } // eslint-disable-next-line camelcase - async createOrgAgent(agentSpinUpStatus: number, userId: string): Promise { + async createOrgAgent(agentSpinUpStatus: number, userId: string, orgId: string): Promise { try { return this.prisma.org_agents.create({ data: { agentSpinUpStatus, createdBy: userId, - lastChangedBy: userId + lastChangedBy: userId, + orgId }, select: { id: true @@ -158,10 +159,11 @@ export class AgentServiceRepository { // eslint-disable-next-line camelcase async storeOrgAgentDetails(storeOrgAgentDetails: IStoreOrgAgentDetails): Promise { try { - const { id, userId, ledgerId, didDoc, ...commonFields } = storeOrgAgentDetails; + const { id, orgId, userId, ledgerId, didDoc, ...commonFields } = storeOrgAgentDetails; const firstLedgerId = Array.isArray(ledgerId) ? ledgerId[0] : null; const data = { ...commonFields, + orgId, ledgerId: firstLedgerId, createdBy: userId, lastChangedBy: userId, diff --git a/apps/api-gateway/src/agent-service/agent-service.controller.ts b/apps/api-gateway/src/agent-service/agent-service.controller.ts index f90bbb90a..957ce6560 100644 --- a/apps/api-gateway/src/agent-service/agent-service.controller.ts +++ b/apps/api-gateway/src/agent-service/agent-service.controller.ts @@ -1,3 +1,4 @@ +/* eslint-disable no-console */ /* eslint-disable no-param-reassign */ /* eslint-disable camelcase */ /* eslint-disable @typescript-eslint/no-explicit-any */ @@ -259,7 +260,9 @@ export class AgentController { @Res() res: Response ): Promise { createTenantDto.orgId = orgId; + console.log('🚀 ~ AgentController ~ createTenant ~ orgId:', orgId); const tenantDetails = await this.agentService.createTenant(createTenantDto, user); + console.log('🚀 ~ AgentController ~ createTenant ~ tenantDetails:', tenantDetails); const finalResponse: IResponse = { statusCode: HttpStatus.CREATED, From c3381862ba82bc41640a765b36fdad705c80b4ec Mon Sep 17 00:00:00 2001 From: pranalidhanavade Date: Mon, 3 Nov 2025 16:03:34 +0530 Subject: [PATCH 03/16] refactor: org agent setup logic Signed-off-by: pranalidhanavade --- .../src/agent-service.controller.ts | 37 ++++++++++--------- .../src/agent-service.service.ts | 14 ++++--- .../repositories/agent-service.repository.ts | 37 ++++++++++++++++--- libs/common/src/response-messages/index.ts | 2 +- 4 files changed, 59 insertions(+), 31 deletions(-) diff --git a/apps/agent-service/src/agent-service.controller.ts b/apps/agent-service/src/agent-service.controller.ts index d368781cd..2a293086b 100644 --- a/apps/agent-service/src/agent-service.controller.ts +++ b/apps/agent-service/src/agent-service.controller.ts @@ -1,32 +1,33 @@ -import { Controller } from '@nestjs/common'; -import { MessagePattern } from '@nestjs/microservices'; -import { AgentServiceService } from './agent-service.service'; import { + IAgentConfigure, + IAgentProofRequest, + IAgentSpinupDto, IAgentStatus, IConnectionDetails, - IUserRequestInterface, - ISendProofRequestPayload, - IAgentSpinUpSatus, + ICreateConnectionInvitation, + IDidCreate, IGetCredDefAgentRedirection, IGetSchemaAgentRedirection, - IAgentSpinupDto, IIssuanceCreateOffer, + IOutOfBandCredentialOffer, + ISendProofRequestPayload, + IStoreAgent, + IStoreOrgAgentDetails, ITenantCredDef, ITenantDto, - ITenantSchema, - IOutOfBandCredentialOffer, - IAgentProofRequest, - IDidCreate, - IWallet, ITenantRecord, - ICreateConnectionInvitation, - IStoreAgent, - IAgentConfigure + ITenantSchema, + IUserRequestInterface, + IWallet } from './interface/agent-service.interface'; -import { user } from '@prisma/client'; -import { InvitationMessage } from '@credebl/common/interfaces/agent-service.interface'; + +import { AgentServiceService } from './agent-service.service'; import { AgentSpinUpStatus } from '@credebl/enum/enum'; +import { Controller } from '@nestjs/common'; +import { InvitationMessage } from '@credebl/common/interfaces/agent-service.interface'; +import { MessagePattern } from '@nestjs/microservices'; import { SignDataDto } from '../../api-gateway/src/agent-service/dto/agent-service.dto'; +import { user } from '@prisma/client'; @Controller() export class AgentServiceController { @@ -49,7 +50,7 @@ export class AgentServiceController { async createTenant(payload: { createTenantDto: ITenantDto; user: IUserRequestInterface; - }): Promise { + }): Promise { return this.agentServiceService.createTenant(payload.createTenantDto, payload.user); } diff --git a/apps/agent-service/src/agent-service.service.ts b/apps/agent-service/src/agent-service.service.ts index 2f9b58b1f..2c8fc9dda 100644 --- a/apps/agent-service/src/agent-service.service.ts +++ b/apps/agent-service/src/agent-service.service.ts @@ -743,7 +743,7 @@ export class AgentServiceService { * @param user * @returns Get agent status */ - async createTenant(payload: ITenantDto, user: IUserRequestInterface): Promise { + async createTenant(payload: ITenantDto, user: IUserRequestInterface): Promise { console.log('🚀 ~ AgentServiceService ~ createTenant ~ payload:777777777777777777777777', payload); try { const agentStatusResponse = { @@ -768,8 +768,8 @@ export class AgentServiceService { }); } // Create tenant - this._createTenant(payload, user); - return agentStatusResponse; + const createdTenant = await this._createTenant(payload, user); + return createdTenant; } catch (error) { this.logger.error(`error in create tenant : ${JSON.stringify(error)}`); throw new RpcException(error.response ? error.response : error); @@ -782,7 +782,7 @@ export class AgentServiceService { * @param user * @returns Get agent status */ - async _createTenant(payload: ITenantDto, user: IUserRequestInterface): Promise { + async _createTenant(payload: ITenantDto, user: IUserRequestInterface): Promise { console.log('🚀 ~ AgentServiceService ~ _createTenant ~ payload:9999999999999', payload); let agentProcess; let ledgerIdData = []; @@ -839,7 +839,7 @@ export class AgentServiceService { const agentTypeId = await this.agentServiceRepository.getAgentTypeId(AgentType.AFJ); const storeOrgAgentData: IStoreOrgAgentDetails = { // did: tenantDetails.DIDCreationOption.did, - isDidPublic: true, + // isDidPublic: true, // didDoc: tenantDetails.DIDCreationOption.didDocument || tenantDetails.DIDCreationOption.didDoc, //changed the didDoc into didDocument agentSpinUpStatus: AgentSpinUpStatus.PROCESSED, agentsTypeId: agentTypeId, @@ -852,13 +852,14 @@ export class AgentServiceService { id: agentProcess?.id, apiKey: await this.commonService.dataEncryption(tenantDetails.walletResponseDetails['token']) }; - console.log('🚀 ~ AgentServiceService ~ _createTenant ~ storeOrgAgentData:', storeOrgAgentData); + console.log('🚀 ~ AgentServiceService ~ _createTenant ~ storeOrgAgentData:111111111111111111', storeOrgAgentData); // Get organization data const getOrganization = await this.agentServiceRepository.getOrgDetails(payload.orgId); this.notifyClientSocket('agent-spinup-process-completed', payload.clientSocketId); const orgAgentDetails = await this.agentServiceRepository.storeOrgAgentDetails(storeOrgAgentData); + console.log('🚀 ~ AgentServiceService ~ _createTenant ~ orgAgentDetails:222222222222222222222', orgAgentDetails); // const createdDidDetails = { // orgId: payload.orgId, @@ -877,6 +878,7 @@ export class AgentServiceService { // await this._createConnectionInvitation(payload.orgId, user, getOrganization.name); // this.notifyClientSocket('invitation-url-creation-success', payload.clientSocketId); + return orgAgentDetails; } catch (error) { this.handleError(error, payload.clientSocketId); diff --git a/apps/agent-service/src/repositories/agent-service.repository.ts b/apps/agent-service/src/repositories/agent-service.repository.ts index a40ad626e..d1564d629 100644 --- a/apps/agent-service/src/repositories/agent-service.repository.ts +++ b/apps/agent-service/src/repositories/agent-service.repository.ts @@ -157,7 +157,14 @@ export class AgentServiceRepository { * @returns */ // eslint-disable-next-line camelcase - async storeOrgAgentDetails(storeOrgAgentDetails: IStoreOrgAgentDetails): Promise { + async storeOrgAgentDetails(storeOrgAgentDetails: IStoreOrgAgentDetails): Promise<{ + orgId: string; + agentSpinUpStatus: number; + agentEndPoint: string; + tenantId: string; + walletName: string; + id: string; + }> { try { const { id, orgId, userId, ledgerId, didDoc, ...commonFields } = storeOrgAgentDetails; const firstLedgerId = Array.isArray(ledgerId) ? ledgerId[0] : null; @@ -172,14 +179,32 @@ export class AgentServiceRepository { }; // eslint-disable-next-line camelcase - const query: Promise = id + const query = id ? this.prisma.org_agents.update({ where: { id }, - data + data, + select: { + id: true, + orgId: true, + agentSpinUpStatus: true, + agentEndPoint: true, + tenantId: true, + walletName: true + } }) - : this.prisma.org_agents.create({ data }); - - return { id: (await query).id }; + : this.prisma.org_agents.create({ + data, + select: { + id: true, + orgId: true, + agentSpinUpStatus: true, + agentEndPoint: true, + tenantId: true, + walletName: true + } + }); + + return await query; } catch (error) { this.logger.error(`[storeAgentDetails] - store agent details: ${JSON.stringify(error)}`); throw error; diff --git a/libs/common/src/response-messages/index.ts b/libs/common/src/response-messages/index.ts index bd8f5f6fd..82da49781 100644 --- a/libs/common/src/response-messages/index.ts +++ b/libs/common/src/response-messages/index.ts @@ -223,7 +223,7 @@ export const ResponseMessages = { }, agent: { success: { - create: 'Agent process initiated successfully. Please wait', + create: 'Organization wallet created successfully', createWallet: 'Wallet created successfully', createDid: 'Did created successfully', health: 'Agent health details retrieved successfully.', From a0918f4066d29ca676f78a9c05e0ef3b574ef83d Mon Sep 17 00:00:00 2001 From: pranalidhanavade Date: Wed, 26 Nov 2025 19:33:59 +0530 Subject: [PATCH 04/16] refactor: agent spinup status issue Signed-off-by: pranalidhanavade --- .../src/agent-provisioning.service.ts | 12 ++++--- .../src/agent-service.service.ts | 6 +++- .../repositories/agent-service.repository.ts | 31 ++++++++++++++++--- 3 files changed, 39 insertions(+), 10 deletions(-) diff --git a/apps/agent-provisioning/src/agent-provisioning.service.ts b/apps/agent-provisioning/src/agent-provisioning.service.ts index 2f2cc5b2e..d46358d8b 100644 --- a/apps/agent-provisioning/src/agent-provisioning.service.ts +++ b/apps/agent-provisioning/src/agent-provisioning.service.ts @@ -1,9 +1,11 @@ -import { Injectable, Logger, NotFoundException } from '@nestjs/common'; -import { RpcException } from '@nestjs/microservices'; -import { IWalletProvision } from './interface/agent-provisioning.interfaces'; import * as dotenv from 'dotenv'; -import { AgentType } from '@credebl/enum/enum'; import * as fs from 'fs'; + +import { Injectable, Logger, NotFoundException } from '@nestjs/common'; + +import { AgentType } from '@credebl/enum/enum'; +import { IWalletProvision } from './interface/agent-provisioning.interfaces'; +import { RpcException } from '@nestjs/microservices'; import { exec } from 'child_process'; dotenv.config(); @@ -16,7 +18,7 @@ export class AgentProvisioningService { * @param payload * @returns Get DID and verkey */ - async walletProvision(payload: IWalletProvision): Promise { + async walletProvision(payload: IWalletProvision): Promise { try { const { containerName, diff --git a/apps/agent-service/src/agent-service.service.ts b/apps/agent-service/src/agent-service.service.ts index 2c8fc9dda..bc86a8e2e 100644 --- a/apps/agent-service/src/agent-service.service.ts +++ b/apps/agent-service/src/agent-service.service.ts @@ -128,7 +128,7 @@ export class AgentServiceService { let agentProcess: ICreateOrgAgent; try { await this.processWalletProvision(agentSpinupDto, user); - return { agentSpinupStatus: AgentSpinUpStatus.PROCESSED }; + return { agentSpinupStatus: AgentSpinUpStatus.COMPLETED }; } catch (error) { this.handleErrorOnWalletProvision(agentSpinupDto, error, agentProcess); throw new RpcException(error.response ?? error); @@ -145,6 +145,7 @@ export class AgentServiceService { this.agentServiceRepository.getPlatformConfigDetails(), this.agentServiceRepository.getAgentTypeDetails(), this.agentServiceRepository.getLedgerDetails( + // TODO: Do we want to get first element from ledgerName agentSpinupDto.ledgerName ? agentSpinupDto.ledgerName : [Ledgers.Indicio_Demonet] ) ]); @@ -968,6 +969,9 @@ export class AgentServiceService { if (isPrimaryDid) { await this.setPrimaryDidAndLedger(orgId, storeDidDetails, createDidPayload.network, createDidPayload.method); } + if (agentDetails.agentSpinUpStatus === AgentSpinUpStatus.PROCESSED) { + await this.agentServiceRepository.updateAgentSpinupStatus(orgId); + } return storeDidDetails; } catch (error) { diff --git a/apps/agent-service/src/repositories/agent-service.repository.ts b/apps/agent-service/src/repositories/agent-service.repository.ts index d1564d629..0ea0e4f3c 100644 --- a/apps/agent-service/src/repositories/agent-service.repository.ts +++ b/apps/agent-service/src/repositories/agent-service.repository.ts @@ -1,4 +1,4 @@ -import { AgentType, PrismaTables } from '@credebl/enum/enum'; +import { AgentSpinUpStatus, AgentType, PrismaTables } from '@credebl/enum/enum'; import { ConflictException, Injectable, Logger } from '@nestjs/common'; import { ICreateOrgAgent, @@ -166,7 +166,7 @@ export class AgentServiceRepository { id: string; }> { try { - const { id, orgId, userId, ledgerId, didDoc, ...commonFields } = storeOrgAgentDetails; + const { id, orgId, did, userId, ledgerId, didDoc, ...commonFields } = storeOrgAgentDetails; const firstLedgerId = Array.isArray(ledgerId) ? ledgerId[0] : null; const data = { ...commonFields, @@ -174,8 +174,8 @@ export class AgentServiceRepository { ledgerId: firstLedgerId, createdBy: userId, lastChangedBy: userId, - didDocument: didDoc - // orgDid: '' + didDocument: didDoc, + orgDid: did }; // eslint-disable-next-line camelcase @@ -261,6 +261,29 @@ export class AgentServiceRepository { } } + + /** + * Set primary DID + * @param did + * @returns did details + */ + // eslint-disable-next-line camelcase + async updateAgentSpinupStatus(orgId: string): Promise { + try { + return await this.prisma.org_agents.update({ + where: { + orgId + }, + data: { + agentSpinUpStatus: AgentSpinUpStatus.COMPLETED + } + }); + } catch (error) { + this.logger.error(`[setprimaryDid] - Update DID details: ${JSON.stringify(error)}`); + throw error; + } + } + // eslint-disable-next-line camelcase async updateLedgerId(orgId: string, ledgerId: string): Promise { try { From 90f814492433078a689b777ed9d15d38428098c3 Mon Sep 17 00:00:00 2001 From: pranalidhanavade Date: Thu, 27 Nov 2025 12:10:03 +0530 Subject: [PATCH 05/16] refactor: agent spinup flow with shared agent Signed-off-by: pranalidhanavade --- .../agent-provisioning/src/agent-provisioning.service.ts | 3 ++- apps/agent-service/src/agent-service.service.ts | 6 ------ .../src/repositories/agent-service.repository.ts | 9 +++------ .../src/agent-service/agent-service.controller.ts | 3 --- 4 files changed, 5 insertions(+), 16 deletions(-) diff --git a/apps/agent-provisioning/src/agent-provisioning.service.ts b/apps/agent-provisioning/src/agent-provisioning.service.ts index d46358d8b..725240084 100644 --- a/apps/agent-provisioning/src/agent-provisioning.service.ts +++ b/apps/agent-provisioning/src/agent-provisioning.service.ts @@ -7,6 +7,7 @@ import { AgentType } from '@credebl/enum/enum'; import { IWalletProvision } from './interface/agent-provisioning.interfaces'; import { RpcException } from '@nestjs/microservices'; import { exec } from 'child_process'; + dotenv.config(); @Injectable() @@ -18,7 +19,7 @@ export class AgentProvisioningService { * @param payload * @returns Get DID and verkey */ - async walletProvision(payload: IWalletProvision): Promise { + async walletProvision(payload: IWalletProvision): Promise { try { const { containerName, diff --git a/apps/agent-service/src/agent-service.service.ts b/apps/agent-service/src/agent-service.service.ts index bc86a8e2e..24553fbbd 100644 --- a/apps/agent-service/src/agent-service.service.ts +++ b/apps/agent-service/src/agent-service.service.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-console */ /* eslint-disable quotes */ /* eslint-disable @typescript-eslint/explicit-module-boundary-types */ /* eslint-disable yoda */ @@ -745,13 +744,11 @@ export class AgentServiceService { * @returns Get agent status */ async createTenant(payload: ITenantDto, user: IUserRequestInterface): Promise { - console.log('🚀 ~ AgentServiceService ~ createTenant ~ payload:777777777777777777777777', payload); try { const agentStatusResponse = { agentSpinupStatus: AgentSpinUpStatus.PROCESSED }; const getOrgAgent = await this.agentServiceRepository.getAgentDetails(payload.orgId); - console.log('🚀 ~ AgentServiceService ~ createTenant ~ getOrgAgent:888888888888', getOrgAgent); // if (AgentSpinUpStatus.COMPLETED === getOrgAgent?.agentSpinUpStatus) { // this.logger.error(`Your wallet is already been created.`); @@ -784,7 +781,6 @@ export class AgentServiceService { * @returns Get agent status */ async _createTenant(payload: ITenantDto, user: IUserRequestInterface): Promise { - console.log('🚀 ~ AgentServiceService ~ _createTenant ~ payload:9999999999999', payload); let agentProcess; let ledgerIdData = []; try { @@ -853,14 +849,12 @@ export class AgentServiceService { id: agentProcess?.id, apiKey: await this.commonService.dataEncryption(tenantDetails.walletResponseDetails['token']) }; - console.log('🚀 ~ AgentServiceService ~ _createTenant ~ storeOrgAgentData:111111111111111111', storeOrgAgentData); // Get organization data const getOrganization = await this.agentServiceRepository.getOrgDetails(payload.orgId); this.notifyClientSocket('agent-spinup-process-completed', payload.clientSocketId); const orgAgentDetails = await this.agentServiceRepository.storeOrgAgentDetails(storeOrgAgentData); - console.log('🚀 ~ AgentServiceService ~ _createTenant ~ orgAgentDetails:222222222222222222222', orgAgentDetails); // const createdDidDetails = { // orgId: payload.orgId, diff --git a/apps/agent-service/src/repositories/agent-service.repository.ts b/apps/agent-service/src/repositories/agent-service.repository.ts index 0ea0e4f3c..e8287f4b1 100644 --- a/apps/agent-service/src/repositories/agent-service.repository.ts +++ b/apps/agent-service/src/repositories/agent-service.repository.ts @@ -6,7 +6,6 @@ import { IOrgAgent, IOrgAgentsResponse, IOrgLedgers, - IStoreAgent, IStoreDidDetails, IStoreOrgAgentDetails, LedgerNameSpace, @@ -261,11 +260,9 @@ export class AgentServiceRepository { } } - /** - * Set primary DID - * @param did - * @returns did details + * Update agent spinup status + * @param orgId */ // eslint-disable-next-line camelcase async updateAgentSpinupStatus(orgId: string): Promise { @@ -279,7 +276,7 @@ export class AgentServiceRepository { } }); } catch (error) { - this.logger.error(`[setprimaryDid] - Update DID details: ${JSON.stringify(error)}`); + this.logger.error(`[updateAgentSpinupStatus] - Update agent spinup status: ${JSON.stringify(error)}`); throw error; } } diff --git a/apps/api-gateway/src/agent-service/agent-service.controller.ts b/apps/api-gateway/src/agent-service/agent-service.controller.ts index 957ce6560..f90bbb90a 100644 --- a/apps/api-gateway/src/agent-service/agent-service.controller.ts +++ b/apps/api-gateway/src/agent-service/agent-service.controller.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-console */ /* eslint-disable no-param-reassign */ /* eslint-disable camelcase */ /* eslint-disable @typescript-eslint/no-explicit-any */ @@ -260,9 +259,7 @@ export class AgentController { @Res() res: Response ): Promise { createTenantDto.orgId = orgId; - console.log('🚀 ~ AgentController ~ createTenant ~ orgId:', orgId); const tenantDetails = await this.agentService.createTenant(createTenantDto, user); - console.log('🚀 ~ AgentController ~ createTenant ~ tenantDetails:', tenantDetails); const finalResponse: IResponse = { statusCode: HttpStatus.CREATED, From f664a187da344fb5a901292929c34e08f5fdd5c2 Mon Sep 17 00:00:00 2001 From: pranalidhanavade Date: Thu, 27 Nov 2025 12:26:25 +0530 Subject: [PATCH 06/16] removed unnecessary comments Signed-off-by: pranalidhanavade --- apps/agent-service/src/agent-service.service.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apps/agent-service/src/agent-service.service.ts b/apps/agent-service/src/agent-service.service.ts index 24553fbbd..5066fb89d 100644 --- a/apps/agent-service/src/agent-service.service.ts +++ b/apps/agent-service/src/agent-service.service.ts @@ -811,8 +811,7 @@ export class AgentServiceService { const platformAdminSpinnedUp = await this.getPlatformAdminAndNotify(payload.clientSocketId); payload.endpoint = platformAdminSpinnedUp.org_agents[0].agentEndPoint; - // Create tenant wallet and DID - // wallet create step + // Create tenant wallet const tenantDetails = await this.createTenantAndNotify(payload, platformAdminSpinnedUp); if (!tenantDetails?.walletResponseDetails?.id) { From 8de4546243081d58fe18b1dcffe954b9b76110f2 Mon Sep 17 00:00:00 2001 From: pranalidhanavade Date: Thu, 27 Nov 2025 12:55:31 +0530 Subject: [PATCH 07/16] resolve: coderabbit comments Signed-off-by: pranalidhanavade --- .../src/agent-service.service.ts | 35 ------------------- .../agent-service/dto/create-tenant.dto.ts | 2 +- 2 files changed, 1 insertion(+), 36 deletions(-) diff --git a/apps/agent-service/src/agent-service.service.ts b/apps/agent-service/src/agent-service.service.ts index 5066fb89d..c67869e7e 100644 --- a/apps/agent-service/src/agent-service.service.ts +++ b/apps/agent-service/src/agent-service.service.ts @@ -834,9 +834,6 @@ export class AgentServiceService { // Get agent type details const agentTypeId = await this.agentServiceRepository.getAgentTypeId(AgentType.AFJ); const storeOrgAgentData: IStoreOrgAgentDetails = { - // did: tenantDetails.DIDCreationOption.did, - // isDidPublic: true, - // didDoc: tenantDetails.DIDCreationOption.didDocument || tenantDetails.DIDCreationOption.didDoc, //changed the didDoc into didDocument agentSpinUpStatus: AgentSpinUpStatus.PROCESSED, agentsTypeId: agentTypeId, orgId: payload.orgId, @@ -844,7 +841,6 @@ export class AgentServiceService { orgAgentTypeId, tenantId: tenantDetails.walletResponseDetails['id'], walletName: payload.label, - // ledgerId: ledgerIdData.map((item) => item.id), id: agentProcess?.id, apiKey: await this.commonService.dataEncryption(tenantDetails.walletResponseDetails['token']) }; @@ -855,30 +851,10 @@ export class AgentServiceService { const orgAgentDetails = await this.agentServiceRepository.storeOrgAgentDetails(storeOrgAgentData); - // const createdDidDetails = { - // orgId: payload.orgId, - // did: tenantDetails.DIDCreationOption.did, - // didDocument: tenantDetails.DIDCreationOption.didDocument || tenantDetails.DIDCreationOption.didDoc, - // isPrimaryDid: true, - // orgAgentId: orgAgentDetails.id, - // userId: user.id - // }; - - // await this.agentServiceRepository.storeDidDetails(createdDidDetails); - - // this.notifyClientSocket('invitation-url-creation-started', payload.clientSocketId); - - // Create the legacy connection invitation - // await this._createConnectionInvitation(payload.orgId, user, getOrganization.name); - - // this.notifyClientSocket('invitation-url-creation-success', payload.clientSocketId); return orgAgentDetails; } catch (error) { this.handleError(error, payload.clientSocketId); - // if (agentProcess && agentProcess?.id) { - // this.agentServiceRepository.removeOrgAgent(agentProcess?.id); - // } throw error; } } @@ -1126,19 +1102,8 @@ export class AgentServiceService { if (!walletResponseDetails && !walletResponseDetails.id && !walletResponseDetails.token) { throw new InternalServerErrorException('Error while creating the wallet'); } - // const didCreateOption = { - // didPayload: WalletSetupPayload, - // agentEndpoint: platformAdminSpinnedUp.org_agents[0].agentEndPoint, - // apiKey: walletResponseDetails.token - // }; - // const DIDCreationOption = await this._createDID(didCreateOption); - // if (!DIDCreationOption) { - // throw new InternalServerErrorException('Error while creating the wallet'); - // } - return { walletResponseDetails - // DIDCreationOption }; } // diff --git a/apps/api-gateway/src/agent-service/dto/create-tenant.dto.ts b/apps/api-gateway/src/agent-service/dto/create-tenant.dto.ts index 77e0cfe34..6ca54a5e5 100644 --- a/apps/api-gateway/src/agent-service/dto/create-tenant.dto.ts +++ b/apps/api-gateway/src/agent-service/dto/create-tenant.dto.ts @@ -15,7 +15,7 @@ export class CreateTenantDto { @ApiProperty({ example: 'ojIckSD2jqNzOqIrAGzL' }) @IsOptional() @ApiPropertyOptional() - @IsString({ message: 'did must be in string format.' }) + @IsString({ message: 'clientSocketId must be in string format.' }) clientSocketId?: string; @ApiProperty({ example: 'XzFjo1RTZ2h9UVFCnPUyaQ' }) From fbc2a1c67e27cce83e966603b3cbf7c834489c15 Mon Sep 17 00:00:00 2001 From: pranalidhanavade Date: Fri, 28 Nov 2025 18:25:01 +0530 Subject: [PATCH 08/16] resolve: sonarlint comments Signed-off-by: pranalidhanavade --- apps/agent-service/src/agent-service.service.ts | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/apps/agent-service/src/agent-service.service.ts b/apps/agent-service/src/agent-service.service.ts index c67869e7e..f564fd6f5 100644 --- a/apps/agent-service/src/agent-service.service.ts +++ b/apps/agent-service/src/agent-service.service.ts @@ -33,7 +33,6 @@ import { ISendProofRequestPayload, IIssuanceCreateOffer, IOutOfBandCredentialOffer, - IAgentSpinUpSatus, ICreateTenant, IAgentStatus, ICreateOrgAgent, @@ -144,7 +143,7 @@ export class AgentServiceService { this.agentServiceRepository.getPlatformConfigDetails(), this.agentServiceRepository.getAgentTypeDetails(), this.agentServiceRepository.getLedgerDetails( - // TODO: Do we want to get first element from ledgerName + // FIXME: Do we want to get first element from ledgerName agentSpinupDto.ledgerName ? agentSpinupDto.ledgerName : [Ledgers.Indicio_Demonet] ) ]); @@ -745,19 +744,8 @@ export class AgentServiceService { */ async createTenant(payload: ITenantDto, user: IUserRequestInterface): Promise { try { - const agentStatusResponse = { - agentSpinupStatus: AgentSpinUpStatus.PROCESSED - }; const getOrgAgent = await this.agentServiceRepository.getAgentDetails(payload.orgId); - // if (AgentSpinUpStatus.COMPLETED === getOrgAgent?.agentSpinUpStatus) { - // this.logger.error(`Your wallet is already been created.`); - // throw new ConflictException(ResponseMessages.agent.error.walletAlreadyCreated, { - // cause: new Error(), - // description: ResponseMessages.errorMessages.conflict - // }); - // } - if (AgentSpinUpStatus.PROCESSED === getOrgAgent?.agentSpinUpStatus) { this.logger.error(`Your wallet is already processing.`); throw new ConflictException(ResponseMessages.agent.error.walletAlreadyProcessing, { @@ -844,8 +832,6 @@ export class AgentServiceService { id: agentProcess?.id, apiKey: await this.commonService.dataEncryption(tenantDetails.walletResponseDetails['token']) }; - // Get organization data - const getOrganization = await this.agentServiceRepository.getOrgDetails(payload.orgId); this.notifyClientSocket('agent-spinup-process-completed', payload.clientSocketId); From 8d5aa2ed673e9bbde0f810621c6efc8b1b666efe Mon Sep 17 00:00:00 2001 From: pranalidhanavade Date: Mon, 1 Dec 2025 11:59:16 +0530 Subject: [PATCH 09/16] resolve: sonarlint warnings Signed-off-by: pranalidhanavade --- apps/agent-service/src/agent-service.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/agent-service/src/agent-service.service.ts b/apps/agent-service/src/agent-service.service.ts index f564fd6f5..b574f0515 100644 --- a/apps/agent-service/src/agent-service.service.ts +++ b/apps/agent-service/src/agent-service.service.ts @@ -488,7 +488,7 @@ export class AgentServiceService { ledgerId: string[], agentProcess: ICreateOrgAgent ): Promise { - let ledgerIdData = []; + let ledgerIdData; try { if (agentSpinupDto.method !== DidMethod.KEY && agentSpinupDto.method !== DidMethod.WEB) { From 5d3c97891ed76edc40cda7b0c05591a6f970df42 Mon Sep 17 00:00:00 2001 From: pranalidhanavade Date: Mon, 1 Dec 2025 12:13:09 +0530 Subject: [PATCH 10/16] resolve: coderabbit warnings Signed-off-by: pranalidhanavade --- apps/agent-service/src/agent-service.service.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/agent-service/src/agent-service.service.ts b/apps/agent-service/src/agent-service.service.ts index b574f0515..8679df981 100644 --- a/apps/agent-service/src/agent-service.service.ts +++ b/apps/agent-service/src/agent-service.service.ts @@ -143,7 +143,7 @@ export class AgentServiceService { this.agentServiceRepository.getPlatformConfigDetails(), this.agentServiceRepository.getAgentTypeDetails(), this.agentServiceRepository.getLedgerDetails( - // FIXME: Do we want to get first element from ledgerName + // TODO: Do we want to get first element from ledgerName agentSpinupDto.ledgerName ? agentSpinupDto.ledgerName : [Ledgers.Indicio_Demonet] ) ]); @@ -1085,7 +1085,7 @@ export class AgentServiceService { platformAdminSpinnedUp.org_agents[0].agentEndPoint, getDcryptedToken ); - if (!walletResponseDetails && !walletResponseDetails.id && !walletResponseDetails.token) { + if (!walletResponseDetails || !walletResponseDetails.id || !walletResponseDetails.token) { throw new InternalServerErrorException('Error while creating the wallet'); } return { From 341d46cc1438ec06130cd13d68ea640946c2e600 Mon Sep 17 00:00:00 2001 From: pranalidhanavade Date: Mon, 1 Dec 2025 12:42:24 +0530 Subject: [PATCH 11/16] resolve: coderabbit warning Signed-off-by: pranalidhanavade --- apps/agent-service/src/agent-service.service.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/agent-service/src/agent-service.service.ts b/apps/agent-service/src/agent-service.service.ts index 8679df981..4d09c1f41 100644 --- a/apps/agent-service/src/agent-service.service.ts +++ b/apps/agent-service/src/agent-service.service.ts @@ -125,7 +125,7 @@ export class AgentServiceService { }> { let agentProcess: ICreateOrgAgent; try { - await this.processWalletProvision(agentSpinupDto, user); + await this.agentWalletProvision(agentSpinupDto, user); return { agentSpinupStatus: AgentSpinUpStatus.COMPLETED }; } catch (error) { this.handleErrorOnWalletProvision(agentSpinupDto, error, agentProcess); @@ -133,7 +133,7 @@ export class AgentServiceService { } } - private async processWalletProvision(agentSpinupDto: IAgentSpinupDto, user: IUserRequestInterface): Promise { + private async agentWalletProvision(agentSpinupDto: IAgentSpinupDto, user: IUserRequestInterface): Promise { let platformAdminUser; let userId: string; let agentProcess: ICreateOrgAgent; From 96d8cbd07d95d7588210ae7efba4f02d512301fb Mon Sep 17 00:00:00 2001 From: pranalidhanavade Date: Mon, 1 Dec 2025 13:17:51 +0530 Subject: [PATCH 12/16] resolve: coderabbit warnings Signed-off-by: pranalidhanavade --- apps/agent-service/src/agent-service.service.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/agent-service/src/agent-service.service.ts b/apps/agent-service/src/agent-service.service.ts index 4d09c1f41..c69529167 100644 --- a/apps/agent-service/src/agent-service.service.ts +++ b/apps/agent-service/src/agent-service.service.ts @@ -125,7 +125,7 @@ export class AgentServiceService { }> { let agentProcess: ICreateOrgAgent; try { - await this.agentWalletProvision(agentSpinupDto, user); + await this.provisionWallet(agentSpinupDto, user); return { agentSpinupStatus: AgentSpinUpStatus.COMPLETED }; } catch (error) { this.handleErrorOnWalletProvision(agentSpinupDto, error, agentProcess); @@ -133,7 +133,7 @@ export class AgentServiceService { } } - private async agentWalletProvision(agentSpinupDto: IAgentSpinupDto, user: IUserRequestInterface): Promise { + private async provisionWallet(agentSpinupDto: IAgentSpinupDto, user: IUserRequestInterface): Promise { let platformAdminUser; let userId: string; let agentProcess: ICreateOrgAgent; From b05e0acc8ac6463ad4c6af71c64339a935494656 Mon Sep 17 00:00:00 2001 From: pranalidhanavade Date: Mon, 1 Dec 2025 18:21:19 +0530 Subject: [PATCH 13/16] revert: changes related to create invitation URL Signed-off-by: pranalidhanavade --- apps/agent-service/src/agent-service.service.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/apps/agent-service/src/agent-service.service.ts b/apps/agent-service/src/agent-service.service.ts index c69529167..384a12419 100644 --- a/apps/agent-service/src/agent-service.service.ts +++ b/apps/agent-service/src/agent-service.service.ts @@ -833,14 +833,23 @@ export class AgentServiceService { apiKey: await this.commonService.dataEncryption(tenantDetails.walletResponseDetails['token']) }; + // Get organization data + const getOrganization = await this.agentServiceRepository.getOrgDetails(payload.orgId); + this.notifyClientSocket('agent-spinup-process-completed', payload.clientSocketId); const orgAgentDetails = await this.agentServiceRepository.storeOrgAgentDetails(storeOrgAgentData); + this.notifyClientSocket('invitation-url-creation-started', payload.clientSocketId); + + // Create the legacy connection invitation + await this._createConnectionInvitation(payload.orgId, user, getOrganization.name); + + this.notifyClientSocket('invitation-url-creation-success', payload.clientSocketId); + return orgAgentDetails; } catch (error) { this.handleError(error, payload.clientSocketId); - throw error; } } From 6fb1b25a4748b8dc6949373ed2b558c04f2c7d90 Mon Sep 17 00:00:00 2001 From: pranalidhanavade Date: Mon, 1 Dec 2025 18:51:18 +0530 Subject: [PATCH 14/16] resolved: comments on PR Signed-off-by: pranalidhanavade --- apps/agent-service/src/agent-service.service.ts | 6 +++--- .../src/repositories/agent-service.repository.ts | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/agent-service/src/agent-service.service.ts b/apps/agent-service/src/agent-service.service.ts index 384a12419..4f400ca47 100644 --- a/apps/agent-service/src/agent-service.service.ts +++ b/apps/agent-service/src/agent-service.service.ts @@ -232,7 +232,7 @@ export class AgentServiceService { const agentSpinUpStatus = AgentSpinUpStatus.PROCESSED; agentProcess = await this.createOrgAgent(agentSpinUpStatus, userId, agentSpinupDto.orgId); - // AFJ agent spin-up + // Credo agent spin-up this._agentSpinup( walletProvisionPayload, agentSpinupDto, @@ -747,8 +747,8 @@ export class AgentServiceService { const getOrgAgent = await this.agentServiceRepository.getAgentDetails(payload.orgId); if (AgentSpinUpStatus.PROCESSED === getOrgAgent?.agentSpinUpStatus) { - this.logger.error(`Your wallet is already processing.`); - throw new ConflictException(ResponseMessages.agent.error.walletAlreadyProcessing, { + this.logger.error(`Your wallet is already created.`); + throw new ConflictException(ResponseMessages.agent.error.walletAlreadyCreated, { cause: new Error(), description: ResponseMessages.errorMessages.conflict }); diff --git a/apps/agent-service/src/repositories/agent-service.repository.ts b/apps/agent-service/src/repositories/agent-service.repository.ts index e8287f4b1..04f53aa82 100644 --- a/apps/agent-service/src/repositories/agent-service.repository.ts +++ b/apps/agent-service/src/repositories/agent-service.repository.ts @@ -203,7 +203,7 @@ export class AgentServiceRepository { } }); - return await query; + return query; } catch (error) { this.logger.error(`[storeAgentDetails] - store agent details: ${JSON.stringify(error)}`); throw error; From 5b52f1ba0a94d37b681e081f987810ef33b0d333 Mon Sep 17 00:00:00 2001 From: pranalidhanavade Date: Mon, 1 Dec 2025 18:56:25 +0530 Subject: [PATCH 15/16] fix: comments on PR Signed-off-by: pranalidhanavade --- .../src/agent-service.service.ts | 29 +++++++------------ .../repositories/agent-service.repository.ts | 2 +- libs/enum/src/enum.ts | 4 +-- 3 files changed, 14 insertions(+), 21 deletions(-) diff --git a/apps/agent-service/src/agent-service.service.ts b/apps/agent-service/src/agent-service.service.ts index 4f400ca47..524ffe4f8 100644 --- a/apps/agent-service/src/agent-service.service.ts +++ b/apps/agent-service/src/agent-service.service.ts @@ -126,7 +126,7 @@ export class AgentServiceService { let agentProcess: ICreateOrgAgent; try { await this.provisionWallet(agentSpinupDto, user); - return { agentSpinupStatus: AgentSpinUpStatus.COMPLETED }; + return { agentSpinupStatus: AgentSpinUpStatus.DID_CREATED }; } catch (error) { this.handleErrorOnWalletProvision(agentSpinupDto, error, agentProcess); throw new RpcException(error.response ?? error); @@ -182,20 +182,13 @@ export class AgentServiceService { // Get genesis URL and ledger details const ledgerDetails = await this.agentServiceRepository.getGenesisUrl(agentSpinupDto.ledgerId); - if (AgentSpinUpStatus.PROCESSED === getOrgAgent?.agentSpinUpStatus) { - throw new BadRequestException(ResponseMessages.agent.error.walletAlreadyProcessing, { + if (AgentSpinUpStatus.WALLET_CREATED === getOrgAgent?.agentSpinUpStatus) { + throw new BadRequestException(ResponseMessages.agent.error.walletAlreadyCreated, { cause: new Error(), description: ResponseMessages.errorMessages.badRequest }); } - if (AgentSpinUpStatus.COMPLETED === getOrgAgent?.agentSpinUpStatus) { - throw new ConflictException(ResponseMessages.agent.error.walletAlreadyCreated, { - cause: new Error(), - description: ResponseMessages.errorMessages.conflict - }); - } - if (!agentSpinupDto.orgId) { if (platformAdminOrgDetails) { agentSpinupDto.orgId = platformAdminOrgDetails; @@ -229,7 +222,7 @@ export class AgentServiceService { const socket: Socket = await this.initSocketConnection(`${process.env.SOCKET_HOST}`); this.emitAgentSpinupInitiatedEvent(agentSpinupDto, socket); - const agentSpinUpStatus = AgentSpinUpStatus.PROCESSED; + const agentSpinUpStatus = AgentSpinUpStatus.WALLET_CREATED; agentProcess = await this.createOrgAgent(agentSpinUpStatus, userId, agentSpinupDto.orgId); // Credo agent spin-up @@ -298,7 +291,7 @@ export class AgentServiceService { const storeAgentConfig = await this.agentServiceRepository.storeOrgAgentDetails({ did, isDidPublic: true, - agentSpinUpStatus: AgentSpinUpStatus.COMPLETED, + agentSpinUpStatus: AgentSpinUpStatus.DID_CREATED, walletName, agentsTypeId, orgId, @@ -626,7 +619,7 @@ export class AgentServiceService { did: '', verkey: '', isDidPublic: true, - agentSpinUpStatus: AgentSpinUpStatus.COMPLETED, + agentSpinUpStatus: AgentSpinUpStatus.DID_CREATED, walletName: payload.walletName, agentsTypeId: payload.agentsTypeId, orgId: payload.orgId, @@ -746,7 +739,7 @@ export class AgentServiceService { try { const getOrgAgent = await this.agentServiceRepository.getAgentDetails(payload.orgId); - if (AgentSpinUpStatus.PROCESSED === getOrgAgent?.agentSpinUpStatus) { + if (AgentSpinUpStatus.WALLET_CREATED === getOrgAgent?.agentSpinUpStatus) { this.logger.error(`Your wallet is already created.`); throw new ConflictException(ResponseMessages.agent.error.walletAlreadyCreated, { cause: new Error(), @@ -790,7 +783,7 @@ export class AgentServiceService { } ledgerIdData = await this.agentServiceRepository.getLedgerDetails(ledger); - const agentSpinUpStatus = AgentSpinUpStatus.PROCESSED; + const agentSpinUpStatus = AgentSpinUpStatus.WALLET_CREATED; // Create and stored agent details agentProcess = await this.agentServiceRepository.createOrgAgent(agentSpinUpStatus, user?.id, payload.orgId); @@ -810,7 +803,7 @@ export class AgentServiceService { }); } - if (AgentSpinUpStatus.COMPLETED !== platformAdminSpinnedUp.org_agents[0].agentSpinUpStatus) { + if (AgentSpinUpStatus.DID_CREATED !== platformAdminSpinnedUp.org_agents[0].agentSpinUpStatus) { this.logger.error(`Platform-admin agent is not spun-up`); throw new NotFoundException(ResponseMessages.agent.error.platformAdminNotAbleToSpinp, { cause: new Error(), @@ -822,7 +815,7 @@ export class AgentServiceService { // Get agent type details const agentTypeId = await this.agentServiceRepository.getAgentTypeId(AgentType.AFJ); const storeOrgAgentData: IStoreOrgAgentDetails = { - agentSpinUpStatus: AgentSpinUpStatus.PROCESSED, + agentSpinUpStatus: AgentSpinUpStatus.WALLET_CREATED, agentsTypeId: agentTypeId, orgId: payload.orgId, agentEndPoint: platformAdminSpinnedUp.org_agents[0].agentEndPoint, @@ -933,7 +926,7 @@ export class AgentServiceService { if (isPrimaryDid) { await this.setPrimaryDidAndLedger(orgId, storeDidDetails, createDidPayload.network, createDidPayload.method); } - if (agentDetails.agentSpinUpStatus === AgentSpinUpStatus.PROCESSED) { + if (agentDetails.agentSpinUpStatus === AgentSpinUpStatus.WALLET_CREATED) { await this.agentServiceRepository.updateAgentSpinupStatus(orgId); } diff --git a/apps/agent-service/src/repositories/agent-service.repository.ts b/apps/agent-service/src/repositories/agent-service.repository.ts index 04f53aa82..02516fa4e 100644 --- a/apps/agent-service/src/repositories/agent-service.repository.ts +++ b/apps/agent-service/src/repositories/agent-service.repository.ts @@ -272,7 +272,7 @@ export class AgentServiceRepository { orgId }, data: { - agentSpinUpStatus: AgentSpinUpStatus.COMPLETED + agentSpinUpStatus: AgentSpinUpStatus.DID_CREATED } }); } catch (error) { diff --git a/libs/enum/src/enum.ts b/libs/enum/src/enum.ts index 9dc8b31ca..5a4949e7e 100644 --- a/libs/enum/src/enum.ts +++ b/libs/enum/src/enum.ts @@ -87,8 +87,8 @@ export enum OrgAgentType { export enum AgentSpinUpStatus { PENDING = 0, - PROCESSED = 1, - COMPLETED = 2 + WALLET_CREATED = 1, + DID_CREATED = 2 } export enum UserCertificateId { From e7fc1b2b5cb5d1b6524db3704a423ba2e15594d5 Mon Sep 17 00:00:00 2001 From: pranalidhanavade Date: Mon, 1 Dec 2025 19:01:30 +0530 Subject: [PATCH 16/16] fix: resolved comments on PR Signed-off-by: pranalidhanavade --- apps/agent-service/src/repositories/agent-service.repository.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/agent-service/src/repositories/agent-service.repository.ts b/apps/agent-service/src/repositories/agent-service.repository.ts index 02516fa4e..bdf32a8f2 100644 --- a/apps/agent-service/src/repositories/agent-service.repository.ts +++ b/apps/agent-service/src/repositories/agent-service.repository.ts @@ -265,6 +265,7 @@ export class AgentServiceRepository { * @param orgId */ // eslint-disable-next-line camelcase + // TODO: Combine these org_agents update functions into one common update method. async updateAgentSpinupStatus(orgId: string): Promise { try { return await this.prisma.org_agents.update({ @@ -282,6 +283,7 @@ export class AgentServiceRepository { } // eslint-disable-next-line camelcase + // TODO: Combine these org_agents update functions into one common update method. async updateLedgerId(orgId: string, ledgerId: string): Promise { try { return await this.prisma.org_agents.update({