diff --git a/apps/api-gateway/src/connection/connection.controller.ts b/apps/api-gateway/src/connection/connection.controller.ts index 7e1d04c14..8c598a292 100644 --- a/apps/api-gateway/src/connection/connection.controller.ts +++ b/apps/api-gateway/src/connection/connection.controller.ts @@ -165,10 +165,10 @@ export class ConnectionController { @ApiResponse({ status: 200, description: 'Success', type: AuthTokenResponse }) async getConnectionWebhook( @Body() connectionDto: ConnectionDto, - @Param('id') id: number, + @Param('id') id: string, @Res() res: Response ): Promise { - this.logger.debug(`connectionDto ::: ${JSON.stringify(connectionDto)}`); + this.logger.debug(`connectionDto ::: ${JSON.stringify(connectionDto)} ${id}`); const connectionData = await this.connectionService.getConnectionWebhook(connectionDto, id); const finalResponse: IResponseType = { statusCode: HttpStatus.CREATED, diff --git a/apps/api-gateway/src/connection/connection.service.ts b/apps/api-gateway/src/connection/connection.service.ts index 0a2413d14..702556404 100644 --- a/apps/api-gateway/src/connection/connection.service.ts +++ b/apps/api-gateway/src/connection/connection.service.ts @@ -28,7 +28,7 @@ export class ConnectionService extends BaseService { } } - getConnectionWebhook(connectionDto: ConnectionDto, id: number): Promise<{ + getConnectionWebhook(connectionDto: ConnectionDto, id: string): Promise<{ response: object; }> { const payload = { connectionId: connectionDto.id, state: connectionDto.state, orgDid: connectionDto.theirDid, theirLabel: connectionDto.theirLabel, autoAcceptConnection: connectionDto.autoAcceptConnection, outOfBandId: connectionDto.outOfBandId, createDateTime: connectionDto.createdAt, lastChangedDateTime: connectionDto.updatedAt, orgId: id }; diff --git a/apps/api-gateway/src/issuance/issuance.service.ts b/apps/api-gateway/src/issuance/issuance.service.ts index 6f32c6cb2..15d45a990 100644 --- a/apps/api-gateway/src/issuance/issuance.service.ts +++ b/apps/api-gateway/src/issuance/issuance.service.ts @@ -50,7 +50,7 @@ export class IssuanceService extends BaseService { getIssueCredentialWebhook(issueCredentialDto: IssuanceDto, id: string): Promise<{ response: object; }> { - const payload = { createDateTime: issueCredentialDto.createdAt, connectionId: issueCredentialDto.connectionId, threadId: issueCredentialDto.threadId, protocolVersion: issueCredentialDto.protocolVersion, credentialAttributes: issueCredentialDto.credentialAttributes, orgId: id }; + const payload = { issueCredentialDto, id }; return this.sendNats(this.issuanceProxy, 'webhook-get-issue-credential', payload); } diff --git a/apps/api-gateway/src/platform/platform.controller.ts b/apps/api-gateway/src/platform/platform.controller.ts index 2905c9e49..92fc479be 100644 --- a/apps/api-gateway/src/platform/platform.controller.ts +++ b/apps/api-gateway/src/platform/platform.controller.ts @@ -1,4 +1,4 @@ -import { Controller, Get, HttpStatus, Logger, Query, Res, UseFilters, UseGuards } from '@nestjs/common'; +import { Controller, Get, HttpStatus, Logger, Param, Query, Res, UseFilters, UseGuards } from '@nestjs/common'; import { PlatformService } from './platform.service'; import { ApiBearerAuth, ApiOperation, ApiResponse, ApiTags } from '@nestjs/swagger'; import { ApiResponseDto } from '../dtos/apiResponse.dto'; @@ -71,5 +71,27 @@ export class PlatformController { }; return res.status(HttpStatus.OK).json(finalResponse); } + + @Get('/network/url/:indyNamespace') + @ApiTags('ledgers') + @ApiOperation({ + summary: 'Get network url from platform.', + description: 'Get network url from platform.' + }) + @UseGuards(AuthGuard('jwt')) + @ApiResponse({ status: 200, description: 'Success', type: ApiResponseDto }) + async getNetwrkUrl( + @Param('indyNamespace') indyNamespace: string, + @Res() res: Response + ): Promise { + const networksResponse = await this.platformService.getNetworkUrl(indyNamespace); + + const finalResponse: IResponseType = { + statusCode: HttpStatus.OK, + message: ResponseMessages.ledger.success.fetch, + data: networksResponse.response + }; + return res.status(HttpStatus.OK).json(finalResponse); + } } diff --git a/apps/api-gateway/src/platform/platform.service.ts b/apps/api-gateway/src/platform/platform.service.ts index e15742fd6..1d91103ca 100644 --- a/apps/api-gateway/src/platform/platform.service.ts +++ b/apps/api-gateway/src/platform/platform.service.ts @@ -26,4 +26,13 @@ export class PlatformService extends BaseService { const payload = {}; return this.sendNats(this.platformServiceProxy, 'get-all-ledgers', payload); } + + async getNetworkUrl(indyNamespace: string): Promise<{ + response: object; + }> { + const payload = { + indyNamespace + }; + return this.sendNats(this.platformServiceProxy, 'get-network-url', payload); + } } diff --git a/apps/connection/src/connection.repository.ts b/apps/connection/src/connection.repository.ts index 38331f0c7..770c92fc2 100644 --- a/apps/connection/src/connection.repository.ts +++ b/apps/connection/src/connection.repository.ts @@ -96,6 +96,7 @@ export class ConnectionRepository { // eslint-disable-next-line camelcase async saveConnectionWebhook(createDateTime: string, lastChangedDateTime: string, connectionId: string, state: string, orgDid: string, theirLabel: string, autoAcceptConnection: boolean, outOfBandId: string, orgId: string): Promise { try { + const agentDetails = await this.prisma.connections.upsert({ where: { connectionId @@ -103,11 +104,7 @@ export class ConnectionRepository { update: { lastChangedDateTime, lastChangedBy: orgId, - state, - orgDid, - theirLabel, - autoAcceptConnection, - outOfBandId + state }, create: { createDateTime, @@ -116,10 +113,6 @@ export class ConnectionRepository { lastChangedBy: orgId, connectionId, state, - orgDid, - theirLabel, - autoAcceptConnection, - outOfBandId, orgId } }); diff --git a/apps/issuance/interfaces/issuance.interfaces.ts b/apps/issuance/interfaces/issuance.interfaces.ts index 3b1804b5b..4725e367d 100644 --- a/apps/issuance/interfaces/issuance.interfaces.ts +++ b/apps/issuance/interfaces/issuance.interfaces.ts @@ -37,6 +37,13 @@ export interface IIssuanceWebhookInterface { protocolVersion: string; credentialAttributes: ICredentialAttributesInterface[]; orgId: string; + id: string; + state: string; +} + +export interface IssueCredentialWebhookPayload { + issueCredentialDto: IIssuanceWebhookInterface; + id: string; } export interface ICredentialAttributesInterface { @@ -87,10 +94,10 @@ export interface FileUpload { name?: string; upload_type?: string; status?: string; - orgId?: string; + orgId?: string; createDateTime?: Date; lastChangedDateTime?: Date; - } +} export interface FileUploadData { fileUpload: string; @@ -104,7 +111,7 @@ export interface FileUploadData { } export interface ClientDetails { - + clientId: string; userId?: string; diff --git a/apps/issuance/src/issuance.controller.ts b/apps/issuance/src/issuance.controller.ts index c66718824..99acb1099 100644 --- a/apps/issuance/src/issuance.controller.ts +++ b/apps/issuance/src/issuance.controller.ts @@ -1,6 +1,6 @@ import { Controller, Logger } from '@nestjs/common'; import { MessagePattern } from '@nestjs/microservices'; -import { ClientDetails, IIssuance, IIssuanceWebhookInterface, IIssueCredentials, IIssueCredentialsDefinitions, ImportFileDetails, OutOfBandCredentialOffer, PreviewRequest } from '../interfaces/issuance.interfaces'; +import { ClientDetails, IIssuance, IIssueCredentials, IIssueCredentialsDefinitions, ImportFileDetails, IssueCredentialWebhookPayload, OutOfBandCredentialOffer, PreviewRequest } from '../interfaces/issuance.interfaces'; import { IssuanceService } from './issuance.service'; @Controller() @@ -36,10 +36,9 @@ export class IssuanceController { @MessagePattern({ cmd: 'webhook-get-issue-credential' }) - async getIssueCredentialWebhook(payload: IIssuanceWebhookInterface): Promise { - const { createDateTime, connectionId, threadId, protocolVersion, credentialAttributes, orgId } = payload; - - return this.issuanceService.getIssueCredentialWebhook(createDateTime, connectionId, threadId, protocolVersion, credentialAttributes, orgId); + async getIssueCredentialWebhook(payload: IssueCredentialWebhookPayload): Promise { + const { issueCredentialDto, id } = payload; + return this.issuanceService.getIssueCredentialWebhook(issueCredentialDto, id); } @MessagePattern({ cmd: 'out-of-band-credential-offer' }) diff --git a/apps/issuance/src/issuance.repository.ts b/apps/issuance/src/issuance.repository.ts index f9faeab40..d84b5b4aa 100644 --- a/apps/issuance/src/issuance.repository.ts +++ b/apps/issuance/src/issuance.repository.ts @@ -4,7 +4,7 @@ import { PrismaService } from '@credebl/prisma-service'; // eslint-disable-next-line camelcase import { agent_invitations, credentials, file_data, file_upload, org_agents, organisation, platform_config, shortening_url } from '@prisma/client'; import { ResponseMessages } from '@credebl/common/response-messages'; -import { FileUploadData, PreviewRequest, SchemaDetails } from '../interfaces/issuance.interfaces'; +import { FileUploadData, IIssuanceWebhookInterface, PreviewRequest, SchemaDetails } from '../interfaces/issuance.interfaces'; import { FileUploadStatus } from 'apps/api-gateway/src/enum'; @Injectable() export class IssuanceRepository { @@ -48,9 +48,10 @@ export class IssuanceRepository { * @returns Get saved credential details */ // eslint-disable-next-line camelcase - async saveIssuedCredentialDetails(createDateTime: string, connectionId: string, threadId: string, protocolVersion: string, credentialAttributes: object[], orgId: string): Promise { + async saveIssuedCredentialDetails(payload: IIssuanceWebhookInterface, orgId: string): Promise { try { + const { connectionId, createDateTime, id, threadId, state } = payload; const credentialDetails = await this.prisma.credentials.upsert({ where: { threadId @@ -59,19 +60,17 @@ export class IssuanceRepository { lastChangedBy: orgId, createDateTime, threadId, - protocolVersion, - credentialAttributes, - orgId: String(orgId) + state }, create: { createDateTime, lastChangedBy: orgId, createdBy: orgId, connectionId, + state, threadId, - protocolVersion, - credentialAttributes, - orgId: String(orgId) + credentialExchangeId: id, + orgId } }); return credentialDetails; @@ -284,7 +283,7 @@ export class IssuanceRepository { skip: (getAllfileDetails?.pageNumber - 1) * getAllfileDetails?.pageSize, orderBy: { createDateTime: 'desc' - } + } }); const fileListWithDetails = await Promise.all( @@ -343,7 +342,7 @@ export class IssuanceRepository { skip: (getAllfileDetails?.pageNumber - 1) * getAllfileDetails?.pageSize, orderBy: { createDateTime: 'desc' - } + } }); const fileCount = await this.prisma.file_data.count({ where: { @@ -386,7 +385,7 @@ export class IssuanceRepository { return this.prisma.file_data.update({ where: { id: jobId }, data: { - credential_data: null + credential_data: null } }); } diff --git a/apps/issuance/src/issuance.service.ts b/apps/issuance/src/issuance.service.ts index 0e5093cd8..876dcb87c 100644 --- a/apps/issuance/src/issuance.service.ts +++ b/apps/issuance/src/issuance.service.ts @@ -8,7 +8,7 @@ import { CommonConstants } from '@credebl/common/common.constant'; import { ResponseMessages } from '@credebl/common/response-messages'; import { ClientProxy, RpcException } from '@nestjs/microservices'; import { map } from 'rxjs'; -import { ClientDetails, FileUploadData, ICredentialAttributesInterface, ImportFileDetails, OutOfBandCredentialOfferPayload, PreviewRequest, SchemaDetails } from '../interfaces/issuance.interfaces'; +import { ClientDetails, FileUploadData, IIssuanceWebhookInterface, ImportFileDetails, OutOfBandCredentialOfferPayload, PreviewRequest, SchemaDetails } from '../interfaces/issuance.interfaces'; import { OrgAgentType } from '@credebl/enum/enum'; import { platform_config } from '@prisma/client'; import * as QRCode from 'qrcode'; @@ -262,9 +262,9 @@ export class IssuanceService { } } - async getIssueCredentialWebhook(createDateTime: string, connectionId: string, threadId: string, protocolVersion: string, credentialAttributes: ICredentialAttributesInterface[], orgId: string): Promise { + async getIssueCredentialWebhook(payload: IIssuanceWebhookInterface, id: string): Promise { try { - const agentDetails = await this.issuanceRepository.saveIssuedCredentialDetails(createDateTime, connectionId, threadId, protocolVersion, credentialAttributes, orgId); + const agentDetails = await this.issuanceRepository.saveIssuedCredentialDetails(payload, id); return agentDetails; } catch (error) { this.logger.error(`[getIssueCredentialsbyCredentialRecordId] - error in get credentials : ${JSON.stringify(error)}`); @@ -624,7 +624,7 @@ export class IssuanceService { } await this.validateFileHeaders(fileHeader, attributeNameArray); - await this.validateFileData(fileData); + await this.validateFileData(fileData); const resData = { schemaLedgerId: credDefResponse.schemaLedgerId, @@ -632,7 +632,7 @@ export class IssuanceService { fileData: parsedData, fileName: importFileDetails.fileName }; - + const newCacheKey = uuidv4(); await this.cacheManager.set(newCacheKey, JSON.stringify(resData), 3600); diff --git a/apps/issuance/templates/out-of-band-issuance.template.ts b/apps/issuance/templates/out-of-band-issuance.template.ts index 61464c339..94e6cb561 100644 --- a/apps/issuance/templates/out-of-band-issuance.template.ts +++ b/apps/issuance/templates/out-of-band-issuance.template.ts @@ -2,61 +2,66 @@ export class OutOfBandIssuance { public outOfBandIssuance(email: string, orgName: string, agentEndPoint: string): string { try { return ` - - - - - - - - - -
-
- CREDEBL logo -
-
-

- Hello user , -

-

- The organization ${orgName} has requested your assistance in issuing your credential. - We are delighted to notify you that a credential has been successfully issued to you. To acknowledge and access it, kindly proceed with the instructions outlined below: -

    -
  • Download the ADEYA Wallet from the Play Store.
  • -
  • Create an Account.
  • -
  • Scan the QR code provided below.
  • -
  • Accept the Credential request.
  • -
  • Check your wallet to access the issued Credential.
  • -
  • To obtain your credential, you can either click the button below or scan the QR code provided in the attachment.
  • -
- - If you need help or have any questions, don't hesitate to reach out to our dedicated support team. -

+ + + + + + + + + +
+
+ CREDEBL logo +
+
+

+ Hello user, +

+

+ The organization ${orgName} has initiated issuance of your digital credential. + + To acknowledge and access your credential, kindly proceed with following steps: +

    +
  • Download the ADEYA SSI + Android Play Store / +iOS App Store.
  • +
  • Complete the onboarding process.
  • +
  • Open the link provided in the ADEYA SSI App.
  • +
  • Accept the Credential.
  • +
  • Check "Credentials" tab in the ADEYA SSI App to view the issued Credential.
  • +
+ + +

+

+ Note: If the above steps do not work for you, please open the attached QR Code image on another device, and scan the QR code using the ADEYA SSI App from your mobile device. + The QR Code is single-use. +

+ +
+

+ If you need help, don't hesitate to reach out to our dedicated support team at support@blockster.global. +

-
-
-
- - f - t -
-

- Best Regards,The CREDEBL Team -

-
-
-
- - `; +
+
+ +

+ CREDEBL - by Blockster Labs Pvt. Ltd. +

+
+
+
+ + `; } catch (error) {} } } diff --git a/apps/ledger/src/ledger.controller.ts b/apps/ledger/src/ledger.controller.ts index 03b57fc2d..f7c38642e 100644 --- a/apps/ledger/src/ledger.controller.ts +++ b/apps/ledger/src/ledger.controller.ts @@ -11,4 +11,11 @@ export class LedgerController { async getAllLedgers(): Promise { return this.ledgerService.getAllLedgers(); } + + @MessagePattern({ cmd: 'get-network-url' }) + async getNetworkUrl(payload: object): Promise<{ + networkUrl: string; + }> { + return this.ledgerService.getNetworkUrl(payload); + } } diff --git a/apps/ledger/src/ledger.service.ts b/apps/ledger/src/ledger.service.ts index b8254d3f4..d13c2668b 100644 --- a/apps/ledger/src/ledger.service.ts +++ b/apps/ledger/src/ledger.service.ts @@ -28,4 +28,21 @@ export class LedgerService extends BaseService { throw new RpcException(error.response ? error.response : error); } } + + async getNetworkUrl(payload: object): Promise<{ + networkUrl: string; + }> { + try { + const getNetworkUrl = await this.ledgerRepository.getNetworkUrl(payload); + + if (!getNetworkUrl) { + throw new NotFoundException(ResponseMessages.ledger.error.NotFound); + } + + return getNetworkUrl; + } catch (error) { + this.logger.error(`Error in retrieving network url: ${error}`); + throw new RpcException(error.response ? error.response : error); + } + } } diff --git a/apps/ledger/src/repositories/ledger.repository.ts b/apps/ledger/src/repositories/ledger.repository.ts index c1f39ef33..db2b290be 100644 --- a/apps/ledger/src/repositories/ledger.repository.ts +++ b/apps/ledger/src/repositories/ledger.repository.ts @@ -19,4 +19,23 @@ export class LedgerRepository { throw error; } } + + async getNetworkUrl(payload: object): Promise<{ + networkUrl: string; + }> { + + try { + return this.prisma.ledgers.findFirst({ + where: { + indyNamespace: payload["indyNamespace"] + }, + select: { + networkUrl: true + } + }); + } catch (error) { + this.logger.error(`Error in getNetworkUrl: ${error}`); + throw error; + } + } } \ No newline at end of file diff --git a/apps/user/templates/arbiter-template.ts b/apps/user/templates/arbiter-template.ts index 147329589..483c0f296 100644 --- a/apps/user/templates/arbiter-template.ts +++ b/apps/user/templates/arbiter-template.ts @@ -87,7 +87,7 @@ export class ArbiterTemplate {

Date: 24, 25, 26 November 2023 | Place: Cidco Exhibition Centre, Navi Mumbai, India
-
Blockchain-based certificate issued using "credebl.id", by Blockster Labs Pvt. Ltd.
+
Blockchain-based certificate issued using credebl.id, by Blockster Labs Pvt. Ltd.
diff --git a/apps/user/templates/participant-template.ts b/apps/user/templates/participant-template.ts index 25399510f..75b4f0cac 100644 --- a/apps/user/templates/participant-template.ts +++ b/apps/user/templates/participant-template.ts @@ -83,7 +83,7 @@ export class ParticipantTemplate {

exceptional memory skills demonstrated during the competition.

Date: 24, 25, 26 November 2023 | Place: Cidco Exhibition Centre, Navi Mumbai, India
-
Blockchain-based certificate issued using "credebl.id", by Blockster Labs Pvt. Ltd.
+
Blockchain-based certificate issued using credebl.id, by Blockster Labs Pvt. Ltd.
diff --git a/apps/user/templates/winner-template.ts b/apps/user/templates/winner-template.ts index f38aea4df..49526e6da 100644 --- a/apps/user/templates/winner-template.ts +++ b/apps/user/templates/winner-template.ts @@ -87,7 +87,7 @@ export class WinnerTemplate {

exceptional memory skills demonstrated during the competition.

Date: 24, 25, 26 November 2023 | Place: Cidco Exhibition Centre, Navi Mumbai, India
-
Blockchain-based certificate issued using "credebl.id", by Blockster Labs Pvt. Ltd.
+
Blockchain-based certificate issued using credebl.id, by Blockster Labs Pvt. Ltd.
diff --git a/apps/user/templates/world-record-template.ts b/apps/user/templates/world-record-template.ts index 3df9edcb4..70f9b8d36 100644 --- a/apps/user/templates/world-record-template.ts +++ b/apps/user/templates/world-record-template.ts @@ -85,7 +85,7 @@ export class WorldRecordTemplate {

exceptional memory skills demonstrated during the competition.

Date: 24, 25, 26 November 2023 | Place: Cidco Exhibition Centre, Navi Mumbai, India
-
Blockchain-based certificate issued using "credebl.id", by Blockster Labs Pvt. Ltd.
+
Blockchain-based certificate issued using credebl.id, by Blockster Labs Pvt. Ltd.
diff --git a/libs/prisma-service/prisma/migrations/20231124163136_ledger_network_url/migration.sql b/libs/prisma-service/prisma/migrations/20231124163136_ledger_network_url/migration.sql new file mode 100644 index 000000000..afef77bcd --- /dev/null +++ b/libs/prisma-service/prisma/migrations/20231124163136_ledger_network_url/migration.sql @@ -0,0 +1,48 @@ +/* + Warnings: + + - You are about to drop the column `autoAcceptConnection` on the `connections` table. All the data in the column will be lost. + - You are about to drop the column `orgDid` on the `connections` table. All the data in the column will be lost. + - You are about to drop the column `outOfBandId` on the `connections` table. All the data in the column will be lost. + - You are about to drop the column `theirLabel` on the `connections` table. All the data in the column will be lost. + - You are about to drop the column `credentialAttributes` on the `credentials` table. All the data in the column will be lost. + - You are about to drop the column `protocolVersion` on the `credentials` table. All the data in the column will be lost. + +*/ +-- DropForeignKey +ALTER TABLE "connections" DROP CONSTRAINT "connections_orgId_fkey"; + +-- DropForeignKey +ALTER TABLE "credentials" DROP CONSTRAINT "credentials_orgId_fkey"; + +-- DropForeignKey +ALTER TABLE "presentations" DROP CONSTRAINT "presentations_orgId_fkey"; + +-- AlterTable +ALTER TABLE "connections" DROP COLUMN "autoAcceptConnection", +DROP COLUMN "orgDid", +DROP COLUMN "outOfBandId", +DROP COLUMN "theirLabel", +ALTER COLUMN "orgId" DROP NOT NULL; + +-- AlterTable +ALTER TABLE "credentials" DROP COLUMN "credentialAttributes", +DROP COLUMN "protocolVersion", +ADD COLUMN "credentialExchangeId" TEXT NOT NULL DEFAULT '', +ADD COLUMN "state" TEXT NOT NULL DEFAULT '', +ALTER COLUMN "orgId" DROP NOT NULL; + +-- AlterTable +ALTER TABLE "ledgers" ADD COLUMN "networkUrl" VARCHAR; + +-- AlterTable +ALTER TABLE "presentations" ALTER COLUMN "orgId" DROP NOT NULL; + +-- AddForeignKey +ALTER TABLE "connections" ADD CONSTRAINT "connections_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "organisation"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "credentials" ADD CONSTRAINT "credentials_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "organisation"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "presentations" ADD CONSTRAINT "presentations_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "organisation"("id") ON DELETE SET NULL ON UPDATE CASCADE; diff --git a/libs/prisma-service/prisma/schema.prisma b/libs/prisma-service/prisma/schema.prisma index f3747dca8..24e1ea358 100644 --- a/libs/prisma-service/prisma/schema.prisma +++ b/libs/prisma-service/prisma/schema.prisma @@ -206,6 +206,7 @@ model ledgers { registerDIDEndpoint String @db.VarChar registerDIDPayload Json? indyNamespace String? @db.VarChar + networkUrl String? @db.VarChar org_agents org_agents[] schema schema[] } @@ -275,47 +276,43 @@ model agent_invitations { } model connections { - 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 - connectionId String @unique - state String - orgDid String - theirLabel String - autoAcceptConnection Boolean - outOfBandId String - orgId String @db.Uuid - organisation organisation @relation(fields: [orgId], references: [id]) + 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 + connectionId String @unique + state String + orgId String? @db.Uuid + organisation organisation? @relation(fields: [orgId], references: [id]) } model credentials { - 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 + 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 connectionId String? - threadId String @unique - protocolVersion String? - credentialAttributes Json[] - orgId String @db.Uuid - organisation organisation @relation(fields: [orgId], references: [id]) + threadId String @unique + credentialExchangeId String @default("") + state String @default("") + orgId String? @db.Uuid + organisation organisation? @relation(fields: [orgId], references: [id]) } model presentations { - 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 + 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 connectionId String? state String? - threadId String @unique + threadId String @unique isVerified Boolean? - orgId String @db.Uuid - organisation organisation @relation(fields: [orgId], references: [id]) + orgId String? @db.Uuid + organisation organisation? @relation(fields: [orgId], references: [id]) } model ecosystem_roles { @@ -433,7 +430,7 @@ model file_upload { deletedAt DateTime? @db.Timestamp(6) file_data file_data[] organisation organisation? @relation(fields: [orgId], references: [id]) - orgId String? @db.Uuid + orgId String? @db.Uuid } model file_data {