Skip to content
Snippets Groups Projects
Unverified Commit 8c8ba4fe authored by Boyan Tsolov's avatar Boyan Tsolov Committed by Zdravko Iliev
Browse files

feat: decline proof request by providing id

parent 4f49de31
No related branches found
No related tags found
2 merge requests!42fix: add response dto's for the core api,!39feat: improve proof api
import { Body, Controller, Get, Post, UseFilters } from "@nestjs/common"; import { Body, Controller, Get, Post, UseFilters } from "@nestjs/common";
import { import {
AcceptProofRequestDto, AcceptProofRequestDto,
DeclineProofRequestDto,
GatewayAcceptedResponseDto, GatewayAcceptedResponseDto,
GetProofRequestDto, GetProofRequestDto,
GetSchemaRequestDto, GetSchemaRequestDto,
IssueProofRequestDto, IssueProofRequestDto,
PROOF_ACCEPT, PROOF_ACCEPT,
PROOF_DECLINE,
PROOF_GET, PROOF_GET,
PROOF_ISSUE, PROOF_ISSUE,
PROOF_LIST, PROOF_LIST,
...@@ -239,4 +241,54 @@ export class ProofController { ...@@ -239,4 +241,54 @@ export class ProofController {
}, },
}); });
} }
@Post("/credentials/proof/:proof_record_id/decline")
@ApiResponse({
status: 200,
description:
"Request is accepted for execution, the response id will match the event id received from the web socket",
type: GatewayAcceptedResponseDto,
})
@ApiInternalServerErrorResponse({
description:
"Error in sending data to proof manager. This error shows that proof manager could not convert request to event or proof manager could not send the event to the broker.",
content: {
"application/json": {
schema: {
type: "object",
properties: {
statusCode: {
type: "number",
example: 500,
},
message: {
type: "string",
example: "connect ECONNREFUSED 0.0.0.0.0:1919",
},
},
},
},
},
})
@ApiOperation({
summary: "Decline a proof request.",
description:
"Method to decline a proof request by id. Status - request-receive. The id of the response will be matched when you receive event from the websocket",
tags: ["Credentials Proof Decline Request Id"],
})
declineProofRequest(@Param("proof_record_id") proofRecordId: string) {
const data = new DeclineProofRequestDto();
data.proofRecordId = proofRecordId;
return this.pmClient.sendPayload<DeclineProofRequestDto>({
pattern: "proofs",
payload: {
source: "/credentials/proof/:proof_record_id/decline",
data,
type: PROOF_DECLINE,
},
});
}
} }
...@@ -21,6 +21,7 @@ import { ...@@ -21,6 +21,7 @@ import {
IssueCredentialRequestDto, IssueCredentialRequestDto,
IssueProofRequestDto, IssueProofRequestDto,
MakeBasicMessageRequestDto, MakeBasicMessageRequestDto,
DeclineProofRequestDto,
MESSAGE_MAKE, MESSAGE_MAKE,
PROOF_ACCEPT, PROOF_ACCEPT,
PROOF_ISSUE, PROOF_ISSUE,
...@@ -30,6 +31,7 @@ import { ...@@ -30,6 +31,7 @@ import {
SCHEMA_GET, SCHEMA_GET,
SCHEMA_LIST, SCHEMA_LIST,
GetProofRequestDto, GetProofRequestDto,
PROOF_DECLINE,
} from "@ocm-engine/dtos"; } from "@ocm-engine/dtos";
import asyncRetry from "async-retry"; import asyncRetry from "async-retry";
...@@ -121,6 +123,11 @@ export class EventHandlerService { ...@@ -121,6 +123,11 @@ export class EventHandlerService {
); );
break; break;
case PROOF_DECLINE:
dto = event.data as DeclineProofRequestDto;
data = await this.agentService.declineProofRequest(dto.proofRecordId);
break;
case MESSAGE_MAKE: case MESSAGE_MAKE:
dto = event.data as MakeBasicMessageRequestDto; dto = event.data as MakeBasicMessageRequestDto;
data = await this.agentService.sendMessage(dto); data = await this.agentService.sendMessage(dto);
......
...@@ -89,6 +89,11 @@ export class RestController { ...@@ -89,6 +89,11 @@ export class RestController {
return this.agentService.acceptProof(acceptProofRequestDto); return this.agentService.acceptProof(acceptProofRequestDto);
} }
@Post(`/credential/proof/:proof_record_id/decline`)
declineProofRequest(@Param("proof_record_id") proofRecordId: string) {
return this.agentService.declineProofRequest(proofRecordId);
}
@Post("/resolve") @Post("/resolve")
resolve(@Body("did") did: string) { resolve(@Body("did") did: string) {
return this.agentService.resolve(did); return this.agentService.resolve(did);
......
...@@ -18,6 +18,7 @@ import { ...@@ -18,6 +18,7 @@ import {
MakeBasicMessageRequestDto, MakeBasicMessageRequestDto,
MakeBasicMessageResponseDto, MakeBasicMessageResponseDto,
SchemaNotCreatedError, SchemaNotCreatedError,
DeclineProofResponseDto,
} from "@ocm-engine/dtos"; } from "@ocm-engine/dtos";
import { import {
AutoAcceptProof, AutoAcceptProof,
...@@ -466,6 +467,23 @@ export class AgentService { ...@@ -466,6 +467,23 @@ export class AgentService {
return response; return response;
}; };
declineProofRequest = async (proofRecordId: string) => {
const resultFromDecline = await this.askar.agent.proofs.declineRequest({
proofRecordId,
// sendProblemReport: false, // REVIEW: do we have a use case for this key?
})
const declineResponse = new DeclineProofResponseDto();
declineResponse.proofId = resultFromDecline.id;
declineResponse.connectionId = resultFromDecline.connectionId;
declineResponse.state = resultFromDecline.state;
declineResponse.updatedAt = resultFromDecline.updatedAt;
declineResponse.createdAt = resultFromDecline.createdAt;
return declineResponse;
};
resolve = async (did: string) => { resolve = async (did: string) => {
return this.askar.agent.dids.resolve(did); return this.askar.agent.dids.resolve(did);
}; };
......
import { IsBoolean, IsNotEmpty, IsString } from "class-validator";
export class DeclineProofRequestDto {
@IsString()
@IsNotEmpty()
proofRecordId: string;
@IsBoolean()
sendProblemReport?: boolean;
}
\ No newline at end of file
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
...@@ -19,6 +19,8 @@ import { MakeBasicMessageResponseDto } from "../dtos/responses/make.basic.messag ...@@ -19,6 +19,8 @@ import { MakeBasicMessageResponseDto } from "../dtos/responses/make.basic.messag
import { MakeBasicMessageRequestDto } from "../dtos/requests/make.basic.message.request.dto"; import { MakeBasicMessageRequestDto } from "../dtos/requests/make.basic.message.request.dto";
import { AcceptProofRequestDto } from "../dtos/requests/accept.proof.request.dto"; import { AcceptProofRequestDto } from "../dtos/requests/accept.proof.request.dto";
import { GetProofByIdResponseDto } from "../dtos/responses/getById.proof.response.dto"; import { GetProofByIdResponseDto } from "../dtos/responses/getById.proof.response.dto";
import { DeclineProofRequestDto } from '../dtos/requests/decline.proof.request.dto';
import { DeclineProofResponseDto } from "../dtos/responses/decline.proof.response.dto";
export const makeEvent = (payload: { export const makeEvent = (payload: {
data: data:
...@@ -29,6 +31,9 @@ export const makeEvent = (payload: { ...@@ -29,6 +31,9 @@ export const makeEvent = (payload: {
| GetConnectionRequestDto | GetConnectionRequestDto
| CreateSchemaRequestDto | CreateSchemaRequestDto
| AcceptProofRequestDto | AcceptProofRequestDto
| DeclineProofRequestDto
| DeclineProofResponseDto
| CreateSchemaRequestDto
| CreateCredentialDefinitionRequsetDto | CreateCredentialDefinitionRequsetDto
| GetProofByIdResponseDto | GetProofByIdResponseDto
| IssueCredentialRequestDto | IssueCredentialRequestDto
......
...@@ -52,18 +52,21 @@ export type ProofEvent = ...@@ -52,18 +52,21 @@ export type ProofEvent =
| "proofs.list" | "proofs.list"
| "proofs.accept" | "proofs.accept"
| "proofs.issue" | "proofs.issue"
| "proofs.get"; | "proofs.get"
| "proofs.decline"
export const PROOF_LIST = "proofs.list"; export const PROOF_LIST = "proofs.list";
export const PROOF_GET = "proofs.get" export const PROOF_GET = "proofs.get"
export const PROOF_ACCEPT = "proofs.accept"; export const PROOF_ACCEPT = "proofs.accept";
export const PROOF_ISSUE = "proofs.issue"; export const PROOF_ISSUE = "proofs.issue";
export const PROOF_DECLINE = "proofs.decline"
export const PROOF_EVENTS: ProofEvent[] = [ export const PROOF_EVENTS: ProofEvent[] = [
PROOF_ACCEPT, PROOF_ACCEPT,
PROOF_LIST, PROOF_LIST,
PROOF_ISSUE, PROOF_ISSUE,
PROOF_GET, PROOF_GET,
PROOF_DECLINE,
]; ];
export type BasicMessageEvent = "messages.make"; export type BasicMessageEvent = "messages.make";
......
...@@ -9,6 +9,7 @@ export * from "./dtos/requests/accept.credential.offer.request.dto"; ...@@ -9,6 +9,7 @@ export * from "./dtos/requests/accept.credential.offer.request.dto";
export * from "./dtos/requests/accept.proof.request.dto"; export * from "./dtos/requests/accept.proof.request.dto";
export * from "./dtos/requests/make.basic.message.request.dto"; export * from "./dtos/requests/make.basic.message.request.dto";
export * from "./dtos/requests/get.proof.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/create.invitation.response.dto";
export * from "./dtos/responses/accept.invitation.response.dto"; export * from "./dtos/responses/accept.invitation.response.dto";
...@@ -18,7 +19,8 @@ export * from "./dtos/responses/issue.credential.response.dto"; ...@@ -18,7 +19,8 @@ export * from "./dtos/responses/issue.credential.response.dto";
export * from "./dtos/responses/issue.proof.response.dto"; export * from "./dtos/responses/issue.proof.response.dto";
export * from "./dtos/responses/gateway.accepted.response.dto"; export * from "./dtos/responses/gateway.accepted.response.dto";
export * from "./dtos/responses/make.basic.message.response.dto"; export * from "./dtos/responses/make.basic.message.response.dto";
export * from "./dtos/responses/getById.proof.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/connection.not.found.error";
export * from "./errors/schema.not.created.error"; export * from "./errors/schema.not.created.error";
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment