import * as gracely from "gracely" import * as model from "@payfunc/model-card" import { Acceptor as ProcessorAcceptor } from "./Acceptor" import { Configuration as ProcessorConfiguration } from "./Configuration" export interface Processor { silverflow?: { reference: string acceptor: ProcessorAcceptor key: string } ipg?: { reference: string } baboba?: { reference: string settle?: boolean } clearhaus?: { reference: string key: string bin: Partial> } } export namespace Processor { export function is(value: any | Processor): value is Processor { return ( typeof value == "object" && value && (value.silverflow == undefined || (typeof value.silverflow == "object" && value.silverflow && typeof value.silverflow.reference == "string" && ProcessorAcceptor.is(value.silverflow.acceptor) && typeof value.silverflow.key == "string")) && (value.ipg == undefined || (typeof value.ipg == "object" && value.ipg && typeof value.ipg.reference == "string")) && (value.baboba == undefined || (typeof value.baboba == "object" && value.baboba && typeof value.baboba.reference == "string" && (value.baboba.settle == undefined || typeof value.baboba.settle == "boolean"))) && (value.clearhaus == undefined || (typeof value.clearhaus == "object" && value.clearhaus && typeof value.clearhaus.reference == "string" && typeof value.clearhaus.key == "string" && typeof value.clearhaus.bin == "object" && value.clearhaus.bin && Object.entries(value.clearhaus.bin).every( ([scheme, bin]) => model.Card.Scheme.is(scheme) && typeof bin == "string" ))) ) } export function flaw(value: any | Processor): gracely.Flaw { return { type: "Processor", flaws: typeof value != "object" || !value ? undefined : ([ value.silverflow == undefined || (typeof value.silverflow == "object" && value.silverflow && typeof value.reference == "string" && ProcessorAcceptor.is(value.acceptor) && typeof value.key == "string") || { property: "silverflow", type: "{reference: string, acceptor: Acceptor, key: string} | undefined", }, value.ipg == undefined || (typeof value.ipg == "object" && value.ipg && typeof value.ipg.reference == "string") || { property: "ipg", type: "{reference: string} | undefined", }, value.baboba == undefined || (typeof value.baboba == "object" && value.baboba && typeof value.baboba.reference == "string" && (value.baboba.settle == undefined || typeof value.baboba.settle == "boolean")) || { property: "baboba", type: "{reference: string; settle?: boolean} | undefined", }, value.clearhaus == undefined || (typeof value.clearhaus == "object" && value.clearhaus && typeof value.clearhaus.reference == "string" && typeof value.clearhaus.key == "string" && typeof value.clearhaus.bin == "object" && value.clearhaus.bin && Object.entries(value.clearhaus.bin).every( ([scheme, bin]) => model.Card.Scheme.is(scheme) && typeof bin == "string" )) || { property: "clearhaus", type: "{key: string, reference: string, bin: Partial>} | undefined", }, ].filter(gracely.Flaw.is) as gracely.Flaw[]), } } export type Acceptor = ProcessorAcceptor export namespace Acceptor { export const is = ProcessorAcceptor.is export const flaw = ProcessorAcceptor.flaw } export type Configuration = ProcessorConfiguration export namespace Configuration { export const is = ProcessorConfiguration.is export const flaw = ProcessorConfiguration.flaw } }