import {isCoordinate} from "../coordinate"; import { Is, isArrayWithLength, isBoolean, isIntersection, isLiteral, isOptional, isString, isStruct, isUnion, isUnknown } from "@byte.london/byteguards"; import {isAuthorWithProperties} from "../author"; import {isMediaObject} from "./media"; import {MediaTypeValues} from "../../types/payloads/media"; import { Outgoing, OutgoingBase, OutgoingList, OutgoingMedia, OutgoingPayload, OutgoingRichContent } from "../../types/payloads/outgoing"; export const isOutgoingBase: Is = isStruct({ coordinate: isCoordinate, text: isOptional(isString), type: isLiteral<'message'>('message'), author: isAuthorWithProperties, processSynchronously: isOptional(isBoolean) }) export const isOutgoingList: Is = isIntersection(isOutgoingBase, isStruct({ list: isUnknown })) export const isOutgoingPayload: Is = isIntersection(isOutgoingBase, isStruct({ payload: isString })) export const isOutgoingMedia: Is = isIntersection(isOutgoingBase, isStruct({ media: isArrayWithLength(1)(isMediaObject) })) export const isOutgoingRichContent: Is = isIntersection(isOutgoingBase, isStruct({ mediaType: isLiteral(...MediaTypeValues), url: isString, title: isString, mediaUrl: isString, mimeType: isString })) export const isOutgoing: Is = isUnion(isOutgoingMedia, isOutgoingRichContent, isOutgoingPayload)