diff --git a/apps/connection-manager/src/app/app.controller.ts b/apps/connection-manager/src/app/app.controller.ts index a8c5c05cc61c66aae8fce0bf9e1c86cdbe4a3e8b..ae335291e68abc9a0c6e431aaa872519c7631595 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 536fc82cb7564ea2e17f888c4dcf3bd3ddc9d6b8..3e8c1fa9c0ac2bca490a178e7999e1be2dce6f42 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 6ed9f7336ed7e9e7b81f3b4411bea213806c1ca8..8aec8f265561f06cf58f76b2f8904639b36a7cf3 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 86e8a2999b23b7709918fdcd98719d1b894b87f6..91942b2ecaec6e6268a80161fd0d07210008ebd1 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 8f80bb48ed6abd241e156069437b38519f8e79a9..2df10222b83ee1cc3752466755f8955d84c8ddcb 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 b1a634a6b3b166e1bcb849a4e5d0e6c53a0f87f4..39e24f6df01929a5c7e421028d10d5a610a2968f 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 8227d7dd6ab466a4ce94aa370eb68f31f7c8a1b5..cc1a278039b3991c5ed318e0499e2f6ed98ede03 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 f8fc64551742b3a47e78064507b77c55dd033bf4..c0369dbf923c0969d7cc54c5ad4d35a9fdc64c12 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 0000000000000000000000000000000000000000..0e0f86ed81ec28cc72eed742b3b458391895e85d --- /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 786adaf646d3a1d7e3ec06060b4fa478fa3f47d4..a935be7c5031b9faf659eeb439973f92c40ed97f 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 b45b8c4dd0fef80022fac5ad550262b500321f94..c4ade28ceac27be8e6c7985986e8b75172b0e362 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 0000000000000000000000000000000000000000..636e0fae06fee876d411745f0aa0e2402f972870 --- /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 82f6c702f83eb2ac6567b53981307546f4691035..4ca5d5719960d351b8e79b515a4536e0847213dc 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 baaa860e4e40458f64af76f576939d8e72eb8779..16efe77a10d3b804ec7fd118dac7f00635a202e6 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 d044786caa05eadd9a57eb1836369f03ffbbc2e4..5a71b0cdea8b27ebafea9daeb6970c5383e56921 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 0000000000000000000000000000000000000000..a90a890bb66ed8b6d6d6a41618798e53f3f505e6 --- /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 0000000000000000000000000000000000000000..2c4e889b94adaa21b0ac262c9a8eade3c8059f20 --- /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 acdf35ca546ede92f0f5aa27097b892a9ba14bfc..8bc0debe2c82d07d846784c222c365ecf0e62e0c 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 5483583ebef614b46ee6cae700136126f61f8f26..0000000000000000000000000000000000000000 --- 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 2b37d7f4d915c4c193426f7c04d7d1db1ca80da4..0000000000000000000000000000000000000000 --- 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 fdc7f72fdfbf960f6c20d4d36366cfb9afbfc7fc..0000000000000000000000000000000000000000 --- 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 c3e482ae58fed1ae2d5448b67003fce64406cf38..0000000000000000000000000000000000000000 --- 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 a36c118ec11d0850d02e87cdc4bc916f5b781d5d..0000000000000000000000000000000000000000 --- 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 e8e4885995ca4ff29db1dc4ac39b0bd8183389d3..0000000000000000000000000000000000000000 --- 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 01d9789d07ab383f724c0f25b21037d387043419..0000000000000000000000000000000000000000 --- 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 0000000000000000000000000000000000000000..68ba71472c68dcc63b398fa3e2f8bbb2f246d648 --- /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 a120dee89f47017180b2ffa1d8a3eeab2bf48fd9..328e56b2ee1e8a4154da47a1febed16528a11afa 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 ce0ac84aac42b0426913d8f6ed022b7e085fc050..f5021a4dc3719dde1ef6dda64d69fb32a9c08233 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";