From 444ee2d486877bece37585ca6de77200fd18bd8f Mon Sep 17 00:00:00 2001 From: sovrgn <boyan.tsolov@vereign.com> Date: Tue, 26 Sep 2023 12:21:31 +0300 Subject: [PATCH] chore: abstract dtos to encompass a wider range of use cases --- .../src/app/app.controller.ts | 4 +- .../app/managers/attestation.controller.ts | 10 +- .../src/app/managers/connection.controller.ts | 6 +- .../src/app/managers/proof.controller.ts | 20 ++- apps/proof-manager/src/app/app.controller.ts | 4 +- .../src/askar-nats/event.handler.service.ts | 22 ++- libs/askar/src/askar-rest/rest.controller.ts | 7 +- libs/askar/src/askar/agent.service.ts | 140 +++++++++++++----- .../dtos/generics/connection.record.dto.ts | 38 +++++ .../connection.ref.dto.ts} | 8 +- .../creddef.record.dto.ts} | 11 +- .../dtos/src/dtos/generics/creddef.ref.dto.ts | 12 ++ .../credential.record.dto.ts} | 10 +- .../credential.ref.dto.ts} | 13 +- .../proof.record.dto.ts} | 9 +- libs/dtos/src/dtos/generics/proof.ref.dto.ts | 17 +++ .../src/dtos/generics/schema.record.dto.ts | 33 +++++ .../schema.ref.dto.ts} | 7 +- .../dtos/requests/accept.proof.request.dto.ts | 13 -- ...eate.credential.definition.request.dto.ts} | 0 .../requests/decline.proof.request.dto.ts | 10 -- .../dtos/requests/get.proof.request.dto.ts | 7 - .../accept.invitation.response.dto.ts | 8 - .../responses/create.schema.response.dto.ts | 24 --- .../responses/decline.proof.response.dto.ts | 25 ---- .../responses/issue.proof.response.dto.ts | 22 --- .../dtos/src/errors/schema.not.found.error.ts | 10 ++ libs/dtos/src/events/dtoToEventTransformer.ts | 22 ++- libs/dtos/src/index.ts | 30 ++-- 29 files changed, 323 insertions(+), 219 deletions(-) create mode 100644 libs/dtos/src/dtos/generics/connection.record.dto.ts rename libs/dtos/src/dtos/{requests/get.connection.request.dto.ts => generics/connection.ref.dto.ts} (64%) rename libs/dtos/src/dtos/{responses/create.credential.definition.response.dto.ts => generics/creddef.record.dto.ts} (60%) create mode 100644 libs/dtos/src/dtos/generics/creddef.ref.dto.ts rename libs/dtos/src/dtos/{responses/issue.credential.response.dto.ts => generics/credential.record.dto.ts} (86%) rename libs/dtos/src/dtos/{requests/accept.credential.offer.request.dto.ts => generics/credential.ref.dto.ts} (57%) rename libs/dtos/src/dtos/{responses/get.proof.response.dto.ts => generics/proof.record.dto.ts} (69%) create mode 100644 libs/dtos/src/dtos/generics/proof.ref.dto.ts create mode 100644 libs/dtos/src/dtos/generics/schema.record.dto.ts rename libs/dtos/src/dtos/{requests/get.schema.request.dto.ts => generics/schema.ref.dto.ts} (71%) delete mode 100644 libs/dtos/src/dtos/requests/accept.proof.request.dto.ts rename libs/dtos/src/dtos/requests/{create.credential.definition.requset.dto.ts => create.credential.definition.request.dto.ts} (100%) delete mode 100644 libs/dtos/src/dtos/requests/decline.proof.request.dto.ts delete mode 100644 libs/dtos/src/dtos/requests/get.proof.request.dto.ts delete mode 100644 libs/dtos/src/dtos/responses/accept.invitation.response.dto.ts delete mode 100644 libs/dtos/src/dtos/responses/create.schema.response.dto.ts delete mode 100644 libs/dtos/src/dtos/responses/decline.proof.response.dto.ts delete mode 100644 libs/dtos/src/dtos/responses/issue.proof.response.dto.ts create mode 100644 libs/dtos/src/errors/schema.not.found.error.ts diff --git a/apps/connection-manager/src/app/app.controller.ts b/apps/connection-manager/src/app/app.controller.ts index a8c5c05c..ae335291 100644 --- a/apps/connection-manager/src/app/app.controller.ts +++ b/apps/connection-manager/src/app/app.controller.ts @@ -7,7 +7,7 @@ import { ConnectionEvent, CreateInvitationResponseDto, GatewayAcceptedResponseDto, - GetConnectionRequestDto, + ConnectionRefDto, makeEvent, } from "@ocm-engine/dtos"; @@ -21,7 +21,7 @@ export class AppController { async create( @Body() payload: { - data: null | CreateInvitationResponseDto | GetConnectionRequestDto; + data: null | CreateInvitationResponseDto | ConnectionRefDto; type: ConnectionEvent; source: string; }, diff --git a/apps/gateway/src/app/managers/attestation.controller.ts b/apps/gateway/src/app/managers/attestation.controller.ts index 536fc82c..3e8c1fa9 100644 --- a/apps/gateway/src/app/managers/attestation.controller.ts +++ b/apps/gateway/src/app/managers/attestation.controller.ts @@ -2,7 +2,7 @@ import { Body, Controller, Get, Param, Post, UseFilters } from "@nestjs/common"; import { AllExceptionsHandler } from "../exception.handler"; import { AttestationManagerClient } from "@ocm-engine/clients"; import { - AcceptCredentialOfferRequestDto, + CredentialRefDto, CreateCredentialDefinitionRequsetDto, CreateSchemaRequestDto, CRED_DEF_CREATE, @@ -11,7 +11,7 @@ import { CRED_OFFER_ACCEPT, CRED_OFFER_LIST, GatewayAcceptedResponseDto, - GetSchemaRequestDto, + SchemaRefDto, IssueCredentialRequestDto, MakeBasicMessageRequestDto, MESSAGE_MAKE, @@ -165,8 +165,8 @@ export class AttestationController { "Method will fetch specific schema or return null. The id of the response will be matched when you receive event from the websocket", tags: ["Schema"], }) - async getSchemaById(@Body() schemaRequestDto: GetSchemaRequestDto) { - return this.amClient.sendPayload<GetSchemaRequestDto>({ + async getSchemaById(@Body() schemaRequestDto: SchemaRefDto) { + return this.amClient.sendPayload<SchemaRefDto>({ pattern: "schemas", payload: { source: "/schemas-by-id", @@ -504,7 +504,7 @@ export class AttestationController { tags: ["Credentials Offers"], }) acceptCredential(@Param("credential_record_id") credentialRecordId: string) { - const data = new AcceptCredentialOfferRequestDto(); + const data = new CredentialRefDto(); data.credentialRecordId = credentialRecordId; return this.amClient.sendPayload({ pattern: "credentials", diff --git a/apps/gateway/src/app/managers/connection.controller.ts b/apps/gateway/src/app/managers/connection.controller.ts index 6ed9f733..8aec8f26 100644 --- a/apps/gateway/src/app/managers/connection.controller.ts +++ b/apps/gateway/src/app/managers/connection.controller.ts @@ -15,7 +15,7 @@ import { CONNECTION_LIST, CreateInvitationResponseDto, GatewayAcceptedResponseDto, - GetConnectionRequestDto, + ConnectionRefDto, } from "@ocm-engine/dtos"; import { AllExceptionsHandler } from "../exception.handler"; import { @@ -238,10 +238,10 @@ export class ConnectionController { tags: ["Connections"], }) async getById(@Param("id") id: string) { - const request = new GetConnectionRequestDto(); + const request = new ConnectionRefDto(); request.connectionId = id; - return this.cmClient.sendPayload<GetConnectionRequestDto>({ + return this.cmClient.sendPayload<ConnectionRefDto>({ pattern: "connections", payload: { source: "/connections/:id", diff --git a/apps/gateway/src/app/managers/proof.controller.ts b/apps/gateway/src/app/managers/proof.controller.ts index 86e8a299..91942b2e 100644 --- a/apps/gateway/src/app/managers/proof.controller.ts +++ b/apps/gateway/src/app/managers/proof.controller.ts @@ -1,10 +1,8 @@ import { Body, Controller, Get, Param, Post, UseFilters } from "@nestjs/common"; import { - AcceptProofRequestDto, - DeclineProofRequestDto, + ProofRefDto, GatewayAcceptedResponseDto, - GetProofRequestDto, - GetSchemaRequestDto, + SchemaRefDto, IssueProofRequestDto, PROOF_ACCEPT, PROOF_DECLINE, @@ -62,7 +60,7 @@ export class ProofController { tags: ["Credentials Proof"], }) proofs() { - return this.pmClient.sendPayload<GetSchemaRequestDto>({ + return this.pmClient.sendPayload<SchemaRefDto>({ pattern: "proofs", payload: { source: "/credential/proofs", @@ -108,10 +106,10 @@ export class ProofController { tags: ["Credentials Proof"], }) getProofById(@Param("proof_record_id") proofRecordId: string) { - const data = new GetProofRequestDto(); + const data = new ProofRefDto(); data.proofRecordId = proofRecordId; - return this.pmClient.sendPayload<GetProofRequestDto>({ + return this.pmClient.sendPayload<ProofRefDto>({ pattern: "proofs", payload: { source: "/credentials/proof/:proof_record_id", @@ -230,8 +228,8 @@ export class ProofController { "Method accept credential proof. The id of the response will be matched when you receive event from the websocket", tags: ["Credentials Proof"], }) - acceptProof(@Body() acceptProofRequestDto: AcceptProofRequestDto) { - return this.pmClient.sendPayload<AcceptProofRequestDto>({ + acceptProof(@Body() acceptProofRequestDto: ProofRefDto) { + return this.pmClient.sendPayload<ProofRefDto>({ pattern: "proofs", payload: { source: "/credentials/proofs/accept", @@ -277,10 +275,10 @@ export class ProofController { tags: ["Credentials Proof"], }) declineProofRequest(@Param("proof_record_id") proofRecordId: string) { - const data = new DeclineProofRequestDto(); + const data = new ProofRefDto(); data.proofRecordId = proofRecordId; - return this.pmClient.sendPayload<DeclineProofRequestDto>({ + return this.pmClient.sendPayload<ProofRefDto>({ pattern: "proofs", payload: { source: "/credentials/proof/:proof_record_id/decline", diff --git a/apps/proof-manager/src/app/app.controller.ts b/apps/proof-manager/src/app/app.controller.ts index 8f80bb48..2df10222 100644 --- a/apps/proof-manager/src/app/app.controller.ts +++ b/apps/proof-manager/src/app/app.controller.ts @@ -3,7 +3,7 @@ import { Body, Controller, Logger } from "@nestjs/common"; import { ProducerService } from "@ocm-engine/nats"; import { MessagePattern, RpcException } from "@nestjs/microservices"; import { - AcceptProofRequestDto, + ProofRefDto, CloudEventDto, GatewayAcceptedResponseDto, makeEvent, @@ -20,7 +20,7 @@ export class AppController { async create( @Body() payload: { - data: null | AcceptProofRequestDto; + data: null | ProofRefDto; type: ProofEvent; source: string; }, diff --git a/libs/askar/src/askar-nats/event.handler.service.ts b/libs/askar/src/askar-nats/event.handler.service.ts index b1a634a6..39e24f6d 100644 --- a/libs/askar/src/askar-nats/event.handler.service.ts +++ b/libs/askar/src/askar-nats/event.handler.service.ts @@ -1,8 +1,8 @@ import { Injectable, Logger } from "@nestjs/common"; import { AgentService } from "../askar/agent.service"; import { - AcceptCredentialOfferRequestDto, - AcceptProofRequestDto, + CredentialRefDto, + ProofRefDto, CloudEventDto, CONNECTION_ACCEPT, CONNECTION_CREATE, @@ -16,12 +16,11 @@ import { CRED_LIST, CRED_OFFER_ACCEPT, CRED_OFFER_LIST, - GetConnectionRequestDto, - GetSchemaRequestDto, + ConnectionRefDto, + SchemaRefDto, IssueCredentialRequestDto, IssueProofRequestDto, MakeBasicMessageRequestDto, - DeclineProofRequestDto, MESSAGE_MAKE, PROOF_ACCEPT, PROOF_ISSUE, @@ -30,7 +29,6 @@ import { SCHEMA_CREATE, SCHEMA_GET, SCHEMA_LIST, - GetProofRequestDto, PROOF_DECLINE, } from "@ocm-engine/dtos"; import asyncRetry from "async-retry"; @@ -60,7 +58,7 @@ export class EventHandlerService { break; case CONNECTION_GET: - dto = event.data as GetConnectionRequestDto; + dto = event.data as ConnectionRefDto; data = await this.agentService.getConnectionById(dto.connectionId); break; @@ -73,7 +71,7 @@ export class EventHandlerService { break; case SCHEMA_GET: - dto = event.data as GetSchemaRequestDto; + dto = event.data as SchemaRefDto; data = await this.agentService.getSchemaById(dto.schemaId); break; case CRED_DEF_CREATE: @@ -97,7 +95,7 @@ export class EventHandlerService { break; case CRED_OFFER_ACCEPT: - dto = event.data as AcceptCredentialOfferRequestDto; + dto = event.data as CredentialRefDto; data = await this.agentService.acceptCredential( dto.credentialRecordId, ); @@ -113,18 +111,18 @@ export class EventHandlerService { break; case PROOF_GET: - dto = event.data as GetProofRequestDto; + dto = event.data as ProofRefDto; data = await this.agentService.getProofById(dto.proofRecordId); break; case PROOF_ACCEPT: data = await this.agentService.acceptProof( - event.data as AcceptProofRequestDto, + event.data as ProofRefDto, ); break; case PROOF_DECLINE: - dto = event.data as DeclineProofRequestDto; + dto = event.data as ProofRefDto; data = await this.agentService.declineProofRequest( dto.proofRecordId, ); diff --git a/libs/askar/src/askar-rest/rest.controller.ts b/libs/askar/src/askar-rest/rest.controller.ts index 8227d7dd..cc1a2780 100644 --- a/libs/askar/src/askar-rest/rest.controller.ts +++ b/libs/askar/src/askar-rest/rest.controller.ts @@ -8,8 +8,7 @@ import { IssueProofRequestDto, CreateSchemaRequestDto, MakeBasicMessageRequestDto, - AcceptProofRequestDto, - GetProofRequestDto, + ProofRefDto, } from "@ocm-engine/dtos"; import { AllExceptionsHandler } from "./exception.handler"; @@ -80,12 +79,12 @@ export class RestController { } @Get("credential/proof/:proof_record_id") - getProof(@Param("proof_record_id") data: GetProofRequestDto) { + getProof(@Param("proof_record_id") data: ProofRefDto) { return this.agentService.getProofById(data.proofRecordId); } @Post(`/credential/proof/accept`) - acceptProof(@Body() acceptProofRequestDto: AcceptProofRequestDto) { + acceptProof(@Body() acceptProofRequestDto: ProofRefDto) { return this.agentService.acceptProof(acceptProofRequestDto); } diff --git a/libs/askar/src/askar/agent.service.ts b/libs/askar/src/askar/agent.service.ts index f8fc6455..c0369dbf 100644 --- a/libs/askar/src/askar/agent.service.ts +++ b/libs/askar/src/askar/agent.service.ts @@ -1,24 +1,23 @@ import { Injectable } from "@nestjs/common"; import { AskarService } from "./askar.service"; import { - AcceptInvitationResponseDto, - AcceptProofRequestDto, + ConnectionRecordDto, + ProofRefDto, ConnectionNotFoundError, CreateCredentialDefinitionRequsetDto, - CreateCredentialDefinitionResponseDto, + CreddefRecordDto, CreateInvitationResponseDto, CreateSchemaRequestDto, - CreateSchemaResponseDto, + SchemaRecordDto, CredentialNotCreatedError, IssueCredentialRequestDto, - IssueCredentialResponseDto, + CredentialRecordDto, IssueProofRequestDto, - IssueProofResponseDto, - GetProofByIdResponseDto, + ProofRecordDto, MakeBasicMessageRequestDto, MakeBasicMessageResponseDto, SchemaNotCreatedError, - DeclineProofResponseDto, + SchemaNotFoundError, } from "@ocm-engine/dtos"; import { AutoAcceptProof, @@ -54,7 +53,7 @@ export class AgentService { throw new ConnectionNotFoundError(); } - const r = new AcceptInvitationResponseDto(); + const r = new ConnectionRecordDto(); r.connectionName = connectionRecord.theirLabel; r.connectionId = connectionRecord.id; r.did = connectionRecord.did; @@ -65,20 +64,89 @@ export class AgentService { return r; }; - fetchConnections() { - return this.askar.agent.connections.getAll(); + async fetchConnections() { + let agentResponse = await this.askar.agent.connections.getAll(); + + let connectionArray = agentResponse.map((singleConnectionRes) => { + let connectionResponse = new ConnectionRecordDto(); + connectionResponse.connectionId = singleConnectionRes.id; + connectionResponse.state = singleConnectionRes.state; + connectionResponse.connectionName = singleConnectionRes.theirLabel; + connectionResponse.alias = singleConnectionRes.alias; + connectionResponse.did = singleConnectionRes.did; + connectionResponse.invitationDid = singleConnectionRes.invitationDid; + connectionResponse.outOfBandId = singleConnectionRes.outOfBandId; + connectionResponse.createdAt = singleConnectionRes.createdAt; + + + return connectionResponse + }) + + if (connectionArray.length < 1) { + throw new ConnectionNotFoundError(); + } + + return connectionArray } - getConnectionById = (id: string) => { - return this.askar.agent.connections.findById(id); + getConnectionById = async (id: string) => { + let agentResponse = await this.askar.agent.connections.findById(id); + + if (!agentResponse) { + throw new ConnectionNotFoundError(); + } + + let connectionResponse = new ConnectionRecordDto(); + connectionResponse.connectionId = agentResponse.id; + connectionResponse.state = agentResponse.state; + connectionResponse.connectionName = agentResponse.theirLabel; + connectionResponse.alias = agentResponse.alias; + connectionResponse.did = agentResponse.did; + connectionResponse.invitationDid = agentResponse.invitationDid; + connectionResponse.outOfBandId = agentResponse.outOfBandId; + connectionResponse.createdAt = agentResponse.createdAt; + + + return connectionResponse }; - fetchSchemas = () => { - return this.askar.agent.modules.anoncreds.getCreatedSchemas({}); + fetchSchemas = async () => { + let agentResponse = await this.askar.agent.modules.anoncreds.getCreatedSchemas({}); + + let schemaResponse = agentResponse.map((singleSchemaRes) => { + let schemaResponse = new SchemaRecordDto(); + schemaResponse.schemaId = singleSchemaRes.schemaId; + schemaResponse.name = singleSchemaRes.schema.name; + schemaResponse.attributes = singleSchemaRes.schema.attrNames; + schemaResponse.version = singleSchemaRes.schema.version; + schemaResponse.issuerId = singleSchemaRes.schema.issuerId; + schemaResponse.methodName = singleSchemaRes.methodName; + + return schemaResponse + }) + + if (schemaResponse.length < 1) { + throw new SchemaNotFoundError() + } + + return schemaResponse }; - getSchemaById = (schemaId: string) => { - return this.askar.agent.modules.anoncreds.getSchema(schemaId); + getSchemaById = async (schemaId: string) => { + let agentResponse = await this.askar.agent.modules.anoncreds.getSchema(schemaId); + + if (!agentResponse || !agentResponse.schema) { + throw new SchemaNotFoundError(); + } + + let schemaResponse = new SchemaRecordDto(); + schemaResponse.schemaId = agentResponse.schemaId; + schemaResponse.name = agentResponse.schema.name; + schemaResponse.attributes = agentResponse.schema.attrNames; + schemaResponse.version = agentResponse.schema.version; + schemaResponse.issuerId = agentResponse.schema.issuerId; + + return schemaResponse }; createSchema = async (schema: CreateSchemaRequestDto) => { @@ -99,7 +167,7 @@ export class AgentService { throw new SchemaNotCreatedError(); } - const response = new CreateSchemaResponseDto(); + const response = new SchemaRecordDto(); response.name = schemaResult.schemaState.schema.name; response.schemaId = schemaResult.schemaState.schemaId; @@ -129,12 +197,12 @@ export class AgentService { throw new CredentialNotCreatedError(); } - const response = new CreateCredentialDefinitionResponseDto(); + const response = new CreddefRecordDto(); response.credentialDefinitionId = credDef.credentialDefinitionState.credentialDefinitionId; response.schemaId = credDef.credentialDefinitionState.credentialDefinition.schemaId; - response.isserId = + response.issuerId = credDef.credentialDefinitionState.credentialDefinition.issuerId; response.tag = credDef.credentialDefinitionState.credentialDefinition.tag; @@ -160,7 +228,7 @@ export class AgentService { }); console.log(JSON.stringify(credentialExchangeRecord, null, 2)); - const response = new IssueCredentialResponseDto(); + const response = new CredentialRecordDto(); response.credentialId = credentialExchangeRecord.id; response.connectionId = credentialExchangeRecord.connectionId; response.attributes = credentialExchangeRecord.credentialAttributes; @@ -188,7 +256,7 @@ export class AgentService { credentialRecordId, }); - const response = new IssueCredentialResponseDto(); + const response = new CredentialRecordDto(); response.credentialId = credentialExchangeRecord.id; response.connectionId = credentialExchangeRecord.connectionId; response.attributes = credentialExchangeRecord.credentialAttributes; @@ -202,9 +270,9 @@ export class AgentService { state: CredentialState.Done, }); - const response: Array<IssueCredentialResponseDto> = []; + const response: Array<CredentialRecordDto> = []; for (const offer of credentials) { - const t = new IssueCredentialResponseDto(); + const t = new CredentialRecordDto(); t.credentialId = offer.id; t.connectionId = offer.connectionId; t.createdAt = offer.createdAt; @@ -220,9 +288,9 @@ export class AgentService { state: CredentialState.OfferReceived, }); - const response: Array<IssueCredentialResponseDto> = []; + const response: Array<CredentialRecordDto> = []; for (const offer of offers) { - const t = new IssueCredentialResponseDto(); + const t = new CredentialRecordDto(); t.credentialId = offer.id; t.connectionId = offer.connectionId; t.createdAt = offer.createdAt; @@ -290,7 +358,7 @@ export class AgentService { }, }); - const response = new IssueProofResponseDto(); + const response = new ProofRecordDto(); response.proofId = exchangeRecord.id; response.connectionId = exchangeRecord.connectionId; response.state = exchangeRecord.state; @@ -305,9 +373,9 @@ export class AgentService { state: ProofState.RequestReceived, }); - const response: Array<IssueProofResponseDto> = []; + const response: Array<ProofRecordDto> = []; for (const proof of proofs) { - const t = new IssueProofResponseDto(); + const t = new ProofRecordDto(); t.proofId = proof.id; t.connectionId = proof.connectionId; t.state = proof.state; @@ -327,7 +395,7 @@ export class AgentService { return proofRecord; } - const proofResponse = new GetProofByIdResponseDto(); + const proofResponse = new ProofRecordDto(); proofResponse.proofId = proofRecord.id; proofResponse.connectionId = proofRecord.connectionId; @@ -338,11 +406,11 @@ export class AgentService { return proofResponse; }; - acceptProof = async (acceptProofDto: AcceptProofRequestDto) => { + acceptProof = async (acceptProofDto: ProofRefDto) => { if (acceptProofDto.proofUrl) { return this.acceptOobProof(acceptProofDto.proofUrl); } - return this.acceptConnectionProof(acceptProofDto.proofId); + return this.acceptConnectionProof(acceptProofDto.proofRecordId); }; acceptOobProof = async (url: string) => { @@ -366,7 +434,7 @@ export class AgentService { proofFormats: requestedCredentials.proofFormats, }); - const response = new IssueProofResponseDto(); + const response = new ProofRecordDto(); response.proofId = acceptedRecord.id; response.state = acceptedRecord.state; @@ -392,7 +460,7 @@ export class AgentService { console.log(JSON.stringify(proof, null, 2)); - const response = new IssueProofResponseDto(); + const response = new ProofRecordDto(); response.proofId = proof.id; response.connectionId = proof.connectionId; response.state = proof.state; @@ -408,7 +476,7 @@ export class AgentService { // sendProblemReport: false, // REVIEW: do we have a use case for this key? }); - const declineResponse = new DeclineProofResponseDto(); + const declineResponse = new ProofRecordDto(); declineResponse.proofId = resultFromDecline.id; declineResponse.connectionId = resultFromDecline.connectionId; declineResponse.state = resultFromDecline.state; @@ -433,7 +501,7 @@ export class AgentService { const connectionInfo = await this.getConnectionById(message.connectionId); response.connectionId = m.connectionId; - response.to = connectionInfo?.theirLabel || ""; + response.to = connectionInfo?.connectionName || ""; response.id = m.id; response.message = m.content; diff --git a/libs/dtos/src/dtos/generics/connection.record.dto.ts b/libs/dtos/src/dtos/generics/connection.record.dto.ts new file mode 100644 index 00000000..0e0f86ed --- /dev/null +++ b/libs/dtos/src/dtos/generics/connection.record.dto.ts @@ -0,0 +1,38 @@ +import { IsDateString, IsNotEmpty, IsString } from "class-validator"; + + +// INFO: should cover: + +// 1. get connection response +// 2. accept connection response + + +export class ConnectionRecordDto { + //@example 6464b521-005a-4379-91e0-a3692b31cafd + @IsNotEmpty() + @IsString() + connectionId: string; + + @IsNotEmpty() + @IsString() + state: string; + + @IsString() + connectionName?: string; + + @IsString() + alias?: string; + + @IsString() + did?: string; + + @IsString() + invitationDid?: string; + + @IsString() + outOfBandId?: string; + + @IsDateString() + @IsNotEmpty() + createdAt: Date; +} \ No newline at end of file diff --git a/libs/dtos/src/dtos/requests/get.connection.request.dto.ts b/libs/dtos/src/dtos/generics/connection.ref.dto.ts similarity index 64% rename from libs/dtos/src/dtos/requests/get.connection.request.dto.ts rename to libs/dtos/src/dtos/generics/connection.ref.dto.ts index 786adaf6..a935be7c 100644 --- a/libs/dtos/src/dtos/requests/get.connection.request.dto.ts +++ b/libs/dtos/src/dtos/generics/connection.ref.dto.ts @@ -1,6 +1,12 @@ import { IsNotEmpty, IsString } from "class-validator"; -export class GetConnectionRequestDto { + +// INFO: should cover: + +// 1. get connection request + + +export class ConnectionRefDto { //@example 6464b521-005a-4379-91e0-a3692b31cafd @IsNotEmpty() @IsString() diff --git a/libs/dtos/src/dtos/responses/create.credential.definition.response.dto.ts b/libs/dtos/src/dtos/generics/creddef.record.dto.ts similarity index 60% rename from libs/dtos/src/dtos/responses/create.credential.definition.response.dto.ts rename to libs/dtos/src/dtos/generics/creddef.record.dto.ts index b45b8c4d..c4ade28c 100644 --- a/libs/dtos/src/dtos/responses/create.credential.definition.response.dto.ts +++ b/libs/dtos/src/dtos/generics/creddef.record.dto.ts @@ -1,6 +1,13 @@ import { IsNotEmpty, IsString } from "class-validator"; -export class CreateCredentialDefinitionResponseDto { + +// INFO: should cover: + +// 1. get credential definition response +// 2. create credential definition response + + +export class CreddefRecordDto { @IsNotEmpty() @IsString() credentialDefinitionId: string; @@ -11,7 +18,7 @@ export class CreateCredentialDefinitionResponseDto { @IsNotEmpty() @IsString() - isserId: string; + issuerId: string; @IsNotEmpty() @IsString() diff --git a/libs/dtos/src/dtos/generics/creddef.ref.dto.ts b/libs/dtos/src/dtos/generics/creddef.ref.dto.ts new file mode 100644 index 00000000..636e0fae --- /dev/null +++ b/libs/dtos/src/dtos/generics/creddef.ref.dto.ts @@ -0,0 +1,12 @@ +import { IsNotEmpty, IsString } from "class-validator"; + +// INFO: should cover: + +// 1. get credential definition request + + +export class CreddefRefDto { + @IsNotEmpty() + @IsString() + credentialDefinitionId: string; +} diff --git a/libs/dtos/src/dtos/responses/issue.credential.response.dto.ts b/libs/dtos/src/dtos/generics/credential.record.dto.ts similarity index 86% rename from libs/dtos/src/dtos/responses/issue.credential.response.dto.ts rename to libs/dtos/src/dtos/generics/credential.record.dto.ts index 82f6c702..4ca5d571 100644 --- a/libs/dtos/src/dtos/responses/issue.credential.response.dto.ts +++ b/libs/dtos/src/dtos/generics/credential.record.dto.ts @@ -8,6 +8,14 @@ import { import { Type } from "class-transformer"; import { IssueCredentialAttributes } from "../requests/issue.credential.request.dto"; + +// INFO: should cover: + +// 1. create credential response +// 2. get credential response + + + export class Credential { @IsNotEmpty() @IsString() @@ -18,7 +26,7 @@ export class Credential { credentialRecordId: string; } -export class IssueCredentialResponseDto { +export class CredentialRecordDto { @IsArray() @ValidateNested({ each: true }) @Type(() => Credential) diff --git a/libs/dtos/src/dtos/requests/accept.credential.offer.request.dto.ts b/libs/dtos/src/dtos/generics/credential.ref.dto.ts similarity index 57% rename from libs/dtos/src/dtos/requests/accept.credential.offer.request.dto.ts rename to libs/dtos/src/dtos/generics/credential.ref.dto.ts index baaa860e..16efe77a 100644 --- a/libs/dtos/src/dtos/requests/accept.credential.offer.request.dto.ts +++ b/libs/dtos/src/dtos/generics/credential.ref.dto.ts @@ -1,8 +1,17 @@ import { IsNotEmpty, IsString } from "class-validator"; -export class AcceptCredentialOfferRequestDto { + + +// INFO: should cover: + +// 1. accept credential request +// 2. get credential request + + + +export class CredentialRefDto { //@example cf8395a5-9a53-4e06-8a5d-04e0fc00ca04 @IsNotEmpty() @IsString() credentialRecordId: string; -} +} \ No newline at end of file diff --git a/libs/dtos/src/dtos/responses/get.proof.response.dto.ts b/libs/dtos/src/dtos/generics/proof.record.dto.ts similarity index 69% rename from libs/dtos/src/dtos/responses/get.proof.response.dto.ts rename to libs/dtos/src/dtos/generics/proof.record.dto.ts index d044786c..5a71b0cd 100644 --- a/libs/dtos/src/dtos/responses/get.proof.response.dto.ts +++ b/libs/dtos/src/dtos/generics/proof.record.dto.ts @@ -4,7 +4,14 @@ import { IsString } from "class-validator"; -export class GetProofByIdResponseDto { + +// INFO: should cover: + +// 1. decline proof response +// 2. get proof response +// 3. issue proof response + +export class ProofRecordDto { @IsString() @IsNotEmpty() proofId: string; diff --git a/libs/dtos/src/dtos/generics/proof.ref.dto.ts b/libs/dtos/src/dtos/generics/proof.ref.dto.ts new file mode 100644 index 00000000..a90a890b --- /dev/null +++ b/libs/dtos/src/dtos/generics/proof.ref.dto.ts @@ -0,0 +1,17 @@ +import { IsNotEmpty, IsString } from "class-validator"; + + +// INFO: should cover: + +// 1. get proof request +// 2. decline proof request +// 3. accept proof request + +export class ProofRefDto { + @IsString() + @IsNotEmpty() + proofRecordId: string; + + @IsString() + proofUrl?: string; +} \ No newline at end of file diff --git a/libs/dtos/src/dtos/generics/schema.record.dto.ts b/libs/dtos/src/dtos/generics/schema.record.dto.ts new file mode 100644 index 00000000..2c4e889b --- /dev/null +++ b/libs/dtos/src/dtos/generics/schema.record.dto.ts @@ -0,0 +1,33 @@ +import { IsDateString, IsNotEmpty, IsString } from "class-validator"; + + +// INFO: should cover: + +// 1. create schema response +// 2. get schema response + +export class SchemaRecordDto { + @IsNotEmpty() + @IsString() + schemaId: string; + + @IsString() + @IsNotEmpty() + name: string; + + @IsNotEmpty() + attributes: string[]; + + @IsNotEmpty() + @IsString() + version: string; + + @IsDateString() + updatedAt?: Date; + + @IsString() + issuerId?: string; + + @IsString() + methodName?: string; +} \ No newline at end of file diff --git a/libs/dtos/src/dtos/requests/get.schema.request.dto.ts b/libs/dtos/src/dtos/generics/schema.ref.dto.ts similarity index 71% rename from libs/dtos/src/dtos/requests/get.schema.request.dto.ts rename to libs/dtos/src/dtos/generics/schema.ref.dto.ts index acdf35ca..8bc0debe 100644 --- a/libs/dtos/src/dtos/requests/get.schema.request.dto.ts +++ b/libs/dtos/src/dtos/generics/schema.ref.dto.ts @@ -1,6 +1,11 @@ import { IsNotEmpty, IsString } from "class-validator"; -export class GetSchemaRequestDto { + +// INFO: should cover: + +// 1. get schema request + +export class SchemaRefDto { //@example "did:indy:LEDNGER:SXM76gQwRnjkgoz2oBnGjd/anoncreds/v0/SCHEMA/test schema/1.0.2" @IsNotEmpty() @IsString() diff --git a/libs/dtos/src/dtos/requests/accept.proof.request.dto.ts b/libs/dtos/src/dtos/requests/accept.proof.request.dto.ts deleted file mode 100644 index 5483583e..00000000 --- a/libs/dtos/src/dtos/requests/accept.proof.request.dto.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { IsNotEmpty, IsString, ValidateIf } from "class-validator"; - -export class AcceptProofRequestDto { - @IsString() - @IsNotEmpty() - @ValidateIf((o) => o.proofUrl === undefined) - proofId: string; - - @IsString() - @IsNotEmpty() - @ValidateIf((o) => o.proofId === undefined) - proofUrl: string; -} diff --git a/libs/dtos/src/dtos/requests/create.credential.definition.requset.dto.ts b/libs/dtos/src/dtos/requests/create.credential.definition.request.dto.ts similarity index 100% rename from libs/dtos/src/dtos/requests/create.credential.definition.requset.dto.ts rename to libs/dtos/src/dtos/requests/create.credential.definition.request.dto.ts diff --git a/libs/dtos/src/dtos/requests/decline.proof.request.dto.ts b/libs/dtos/src/dtos/requests/decline.proof.request.dto.ts deleted file mode 100644 index 2b37d7f4..00000000 --- a/libs/dtos/src/dtos/requests/decline.proof.request.dto.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { IsBoolean, IsNotEmpty, IsString } from "class-validator"; - -export class DeclineProofRequestDto { - @IsString() - @IsNotEmpty() - proofRecordId: string; - - @IsBoolean() - sendProblemReport?: boolean; -} \ No newline at end of file diff --git a/libs/dtos/src/dtos/requests/get.proof.request.dto.ts b/libs/dtos/src/dtos/requests/get.proof.request.dto.ts deleted file mode 100644 index fdc7f72f..00000000 --- a/libs/dtos/src/dtos/requests/get.proof.request.dto.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { IsNotEmpty, IsString } from "class-validator"; - -export class GetProofRequestDto { - @IsString() - @IsNotEmpty() - proofRecordId: string; -} diff --git a/libs/dtos/src/dtos/responses/accept.invitation.response.dto.ts b/libs/dtos/src/dtos/responses/accept.invitation.response.dto.ts deleted file mode 100644 index c3e482ae..00000000 --- a/libs/dtos/src/dtos/responses/accept.invitation.response.dto.ts +++ /dev/null @@ -1,8 +0,0 @@ -export class AcceptInvitationResponseDto { - public connectionId: string; - public connectionName?: string; - public did?: string; - public invitationDid?: string; - public outOfBandId?: string; - public createdAt: Date; -} diff --git a/libs/dtos/src/dtos/responses/create.schema.response.dto.ts b/libs/dtos/src/dtos/responses/create.schema.response.dto.ts deleted file mode 100644 index a36c118e..00000000 --- a/libs/dtos/src/dtos/responses/create.schema.response.dto.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { ArrayMinSize, IsArray, IsNotEmpty, IsString } from "class-validator"; - -export class CreateSchemaResponseDto { - @IsNotEmpty() - @IsString() - schemaId: string; - - @IsNotEmpty() - @IsString() - issuerId: string; - - @IsNotEmpty() - @IsString() - name: string; - - @IsNotEmpty() - @IsString() - version: string; - - @IsArray() - @IsString({ each: true }) - @ArrayMinSize(1) - attributes: string[]; -} diff --git a/libs/dtos/src/dtos/responses/decline.proof.response.dto.ts b/libs/dtos/src/dtos/responses/decline.proof.response.dto.ts deleted file mode 100644 index e8e48859..00000000 --- a/libs/dtos/src/dtos/responses/decline.proof.response.dto.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { - IsDateString, - IsNotEmpty, - IsString -} from "class-validator"; - -export class DeclineProofResponseDto { - @IsString() - @IsNotEmpty() - proofId: string; - - @IsString() - connectionId?: string; - - @IsString() - @IsNotEmpty() - state: string; - - @IsDateString() - updatedAt?: Date; - - @IsNotEmpty() - @IsDateString() - createdAt: Date; -} \ No newline at end of file diff --git a/libs/dtos/src/dtos/responses/issue.proof.response.dto.ts b/libs/dtos/src/dtos/responses/issue.proof.response.dto.ts deleted file mode 100644 index 01d9789d..00000000 --- a/libs/dtos/src/dtos/responses/issue.proof.response.dto.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { IsDateString, IsNotEmpty, IsString } from "class-validator"; - -export class IssueProofResponseDto { - @IsString() - @IsNotEmpty() - proofId: string; - - //@example 6464b521-005a-4379-91e0-a3692b31cafd - @IsString() - connectionId?: string; - - @IsString() - @IsNotEmpty() - state: string; - - @IsDateString() - updatedAt?: Date; - - @IsNotEmpty() - @IsDateString() - createdAt: Date; -} diff --git a/libs/dtos/src/errors/schema.not.found.error.ts b/libs/dtos/src/errors/schema.not.found.error.ts new file mode 100644 index 00000000..68ba7147 --- /dev/null +++ b/libs/dtos/src/errors/schema.not.found.error.ts @@ -0,0 +1,10 @@ +export class SchemaNotFoundError extends Error { + constructor(message = "Schema not found") { + super(message); + this.name = "SchemaNotFoundError"; + + if (Error.captureStackTrace) { + Error.captureStackTrace(this, SchemaNotFoundError); + } + } +} \ No newline at end of file diff --git a/libs/dtos/src/events/dtoToEventTransformer.ts b/libs/dtos/src/events/dtoToEventTransformer.ts index a120dee8..328e56b2 100644 --- a/libs/dtos/src/events/dtoToEventTransformer.ts +++ b/libs/dtos/src/events/dtoToEventTransformer.ts @@ -8,34 +8,30 @@ import { } from "./types"; import { CloudEventDto } from "./event"; import { ConnectionUnsupportedTypeError } from "../errors/connection.unsupported.type.error"; -import { CreateCredentialDefinitionRequsetDto } from "../dtos/requests/create.credential.definition.requset.dto"; +import { CreateCredentialDefinitionRequsetDto } from "../dtos/requests/create.credential.definition.request.dto"; import { CreateInvitationResponseDto } from "../dtos/responses/create.invitation.response.dto"; import { CreateSchemaRequestDto } from "../dtos/requests/create.schema.request.dto"; -import { GetConnectionRequestDto } from "../dtos/requests/get.connection.request.dto"; +import { ConnectionRefDto } from "../dtos/generics/connection.ref.dto"; import { IssueCredentialRequestDto } from "../dtos/requests/issue.credential.request.dto"; import { IssueProofRequestDto } from "../dtos/requests/issue.proof.request.dto"; -import { AcceptCredentialOfferRequestDto } from "../dtos/requests/accept.credential.offer.request.dto"; +import { CredentialRefDto } from "../dtos/generics/credential.ref.dto"; import { MakeBasicMessageResponseDto } from "../dtos/responses/make.basic.message.response.dto"; import { MakeBasicMessageRequestDto } from "../dtos/requests/make.basic.message.request.dto"; -import { AcceptProofRequestDto } from "../dtos/requests/accept.proof.request.dto"; -import { GetProofByIdResponseDto } from "../dtos/responses/get.proof.response.dto"; -import { DeclineProofRequestDto } from '../dtos/requests/decline.proof.request.dto'; -import { DeclineProofResponseDto } from "../dtos/responses/decline.proof.response.dto"; +import { ProofRefDto } from "../dtos/generics/proof.ref.dto"; +import { ProofRecordDto } from "../dtos/generics/proof.record.dto"; export const makeEvent = (payload: { data: | null | IssueProofRequestDto - | AcceptCredentialOfferRequestDto + | CredentialRefDto | CreateInvitationResponseDto - | GetConnectionRequestDto + | ConnectionRefDto | CreateSchemaRequestDto - | AcceptProofRequestDto - | DeclineProofRequestDto - | DeclineProofResponseDto + | ProofRefDto | CreateSchemaRequestDto | CreateCredentialDefinitionRequsetDto - | GetProofByIdResponseDto + | ProofRecordDto | IssueCredentialRequestDto | MakeBasicMessageResponseDto | MakeBasicMessageRequestDto; diff --git a/libs/dtos/src/index.ts b/libs/dtos/src/index.ts index ce0ac84a..f5021a4d 100644 --- a/libs/dtos/src/index.ts +++ b/libs/dtos/src/index.ts @@ -1,32 +1,34 @@ export * from "./dtos.module"; + + +export * from "./dtos/generics/connection.record.dto"; +export * from "./dtos/generics/connection.ref.dto"; +export * from "./dtos/generics/creddef.record.dto"; +export * from "./dtos/generics/creddef.ref.dto"; +export * from "./dtos/generics/credential.record.dto"; +export * from "./dtos/generics/credential.ref.dto"; +export * from "./dtos/generics/proof.record.dto"; +export * from "./dtos/generics/proof.ref.dto"; +export * from "./dtos/generics/schema.record.dto"; +export * from "./dtos/generics/schema.ref.dto"; + + export * from "./dtos/requests/create.schema.request.dto"; -export * from "./dtos/requests/create.credential.definition.requset.dto"; +export * from "./dtos/requests/create.credential.definition.request.dto"; export * from "./dtos/requests/issue.credential.request.dto"; export * from "./dtos/requests/issue.proof.request.dto"; -export * from "./dtos/requests/get.connection.request.dto"; -export * from "./dtos/requests/get.schema.request.dto"; -export * from "./dtos/requests/accept.credential.offer.request.dto"; -export * from "./dtos/requests/accept.proof.request.dto"; export * from "./dtos/requests/make.basic.message.request.dto"; -export * from "./dtos/requests/get.proof.request.dto"; -export * from "./dtos/requests/decline.proof.request.dto"; export * from "./dtos/responses/create.invitation.response.dto"; -export * from "./dtos/responses/accept.invitation.response.dto"; -export * from "./dtos/responses/create.schema.response.dto"; -export * from "./dtos/responses/create.credential.definition.response.dto"; -export * from "./dtos/responses/issue.credential.response.dto"; -export * from "./dtos/responses/issue.proof.response.dto"; export * from "./dtos/responses/gateway.accepted.response.dto"; export * from "./dtos/responses/make.basic.message.response.dto"; -export * from "./dtos/responses/get.proof.response.dto"; -export * from "./dtos/responses/decline.proof.response.dto"; export * from "./errors/connection.not.found.error"; export * from "./errors/schema.not.created.error"; export * from "./errors/credential.not.created.error"; export * from "./errors/ledger.provider.fail.registration.error"; export * from "./errors/connection.unsupported.type.error"; +export * from "./errors/schema.not.found.error"; export * from "./events/event"; export * from "./events/types"; -- GitLab