import * as z from "zod"; import {tealClientOptionsSchema, tealDataSchema} from "../client/tealfm.ts"; import {pollingOptionsSchema} from "../common.ts"; import {commonSourceConfigSchema, commonSourceDataSchema, commonSourceOptionsSchema, type EnvSourceSchema} from "./index.ts"; export const tealSourceDataSchema = z.object({ identifier: tealDataSchema.shape.identifier.meta(tealDataSchema.shape.identifier.meta() ?? {}), serviceAllow: z.array(z.string()).optional(), serviceDeny: z.array(z.string()).optional(), ...commonSourceDataSchema.shape, ...pollingOptionsSchema.shape, }); export type TealSourceData = z.infer; const envDataSchema = z.object({ SOURCE_TEALFM_IDENTIFIER: tealSourceDataSchema.shape.identifier, }); export const envSchemas: EnvSourceSchema = { env: envDataSchema, prefix: 'SOURCE_TEALFM', toConfig: (partial) => ({ configureAs: 'source', data: { identifier: partial.SOURCE_TEALFM_IDENTIFIER, } }) }; export const tealSourceOptionsSchema = z.object({ ...commonSourceOptionsSchema.shape, ...tealClientOptionsSchema.shape, }); export type TealSourceOptions = z.infer; export const tealSourceConfigSchema = z.object({ ...commonSourceConfigSchema.shape, /** * Should always be `souce` when using Tealfm as a Source * * @default source * @examples ["source"] * */ configureAs: z.literal('source').meta({ description: "Should always be `souce` when using Tealfm as a Source", default: "source", examples: ["source"] }), data: tealSourceDataSchema, options: tealSourceOptionsSchema.optional(), }); export type TealSourceConfig = z.infer; export const tealSourceAIOConfigSchema = z.object({ ...tealSourceConfigSchema.shape, // can be optional since it always appears in a source array configureAs: tealSourceConfigSchema.shape.configureAs.optional(), type: z.literal('tealfm'), }).meta({title: 'teal.fm'}); export type TealSourceAIOConfig = z.infer;