import * as gracely from "gracely" import * as isoly from "isoly" import * as authly from "authly" import * as base from "@payfunc/model-base" import { Recurring } from "../Recurring" export interface Base { id?: authly.Identifier number: string amount?: number items?: number | base.Item | base.Item[] currency: isoly.Currency descriptor?: string capture?: "auto" recurring?: Recurring category?: "purchase" | "withdrawal" | "payout" browser?: base.Browser contact?: base.Contact target?: string } export namespace Base { export function is(value: Base | any): value is Base { return ( typeof value == "object" && value && (value.id == undefined || authly.Identifier.is(value.id, 16)) && typeof value.number == "string" && isNaN(+value.amount) != isNaN(+value.items) && (value.amount == undefined || (typeof value.amount == "number" && !isNaN(value.amount))) && (value.items == undefined || (typeof value.items == "number" && !isNaN(value.items))) && isoly.Currency.is(value.currency) && (value.descriptor == undefined || typeof value.descriptor == "string") && (value.capture == undefined || value.capture == "auto") && (value.recurring == undefined || Recurring.is(value.recurring)) && (value.category == undefined || value.category == "purchase" || value.category == "withdrawal" || value.category == "payout") && (value.contact == undefined || base.Contact.is(value.contact)) && (value.browser == undefined || base.Browser.is(value.browser)) && (value.target == undefined || typeof value.target == "string") ) } export function flaw(value: Base | any): gracely.Flaw { return { type: "Authorization.Creatable", flaws: typeof value != "object" || !value ? undefined : ([ value.id == undefined || authly.Identifier.is(value.id, 16) || { property: "id", type: "authly.Identifier | undefined", condition: "length == 16", }, typeof value.number == "string" || { property: "number", type: "string" }, (value.amount != undefined && value.items == undefined) || (value.amount == undefined && value.items != undefined) || { property: "amount | items", type: "number", flaw: [ { property: "amount", type: "undefined | number" }, { property: "items", type: "undefined | number", }, ], condition: `One of the properties "amount" or "items" must have a value defined. The other is not allowed to be set.`, }, value.amount == undefined || typeof value.amount == "number" || isNaN(value.amount) || { property: "amount", type: "undefined | number" }, value.items == undefined || typeof value.items == "number" || { property: "items", type: "undefined | number", }, isoly.Currency.is(value.currency) || { property: "currency", type: "isoly.Currency" }, value.descriptor == undefined || typeof value.descriptor == "string" || { property: "descriptor", type: "string | undefined" }, value.capture == undefined || value.capture == "auto" || { property: "capture", type: '"auto" | undefined' }, value.recurring == undefined || Recurring.is(value.recurring) || { property: "recurring", type: `Authorization.Recurring | undefined`, }, value.category == undefined || value.category == "purchase" || value.category == "withdrawal" || value.category == "payout" || { property: "category", type: `"purchase" | "withdrawal" | "payout" | undefined`, }, value.contact == undefined || base.Contact.is(value.contact) || base.Contact.flaw(value.contact), value.browser == undefined || base.Browser.is(value.browser) || { property: "browser", type: "base.Browser | undefined" }, value.target == undefined || typeof value.target == "string" || { property: "target", type: "string | undefined" }, ].filter(gracely.Flaw.is) as gracely.Flaw[]), } } }