Skip to content
Snippets Groups Projects
dtoToEventTransformer.ts 1.58 KiB
Newer Older
import {
  ALL_EVENTS,
  ConnectionEvent,
  CredentialEvent,
  ProofEvent,
  SchemaEvent,
} 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 { 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 { 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";

export const makeEvent = (payload: {
  data:
    | null
    | IssueProofRequestDto
    | AcceptCredentialOfferRequestDto
    | CreateInvitationResponseDto
    | GetConnectionRequestDto
    | CreateSchemaRequestDto
    | CreateSchemaRequestDto
    | CreateCredentialDefinitionRequsetDto
    | IssueCredentialRequestDto;
  type: SchemaEvent | CredentialEvent | ProofEvent | ConnectionEvent;
  source: string;
}) => {
  if (ALL_EVENTS.includes(payload.type)) {
    throw new ConnectionUnsupportedTypeError();
  }

  const event = new CloudEventDto<typeof payload.data>();
  event.subject = payload.type;
  event.source = payload.source;
  event.type = payload.type;
  event.data = payload.data;

  return event;
};