export * as WebSearch from "./websearch.js" import { Schema } from "effect" import { ephemeral, inventory } from "./event.js" import { optional } from "./schema.js" export const ID = Schema.String.pipe(Schema.brand("WebSearch.ID")) export type ID = typeof ID.Type export interface Provider extends Schema.Schema.Type {} export const Provider = Schema.Struct({ id: ID, name: Schema.String, }).annotate({ identifier: "WebSearch.Provider" }) export interface Input extends Schema.Schema.Type {} export const Input = Schema.Struct({ query: Schema.String, providerID: ID.pipe(optional), }).annotate({ identifier: "WebSearch.Input" }) export type ProviderInput = Pick export interface Result extends Schema.Schema.Type {} export const Result = Schema.Struct({ url: Schema.String, title: Schema.String.pipe(optional), content: Schema.String.pipe(optional), time: Schema.Struct({ published: Schema.Finite.pipe(optional), }), }).annotate({ identifier: "WebSearch.Result" }) export class Response extends Schema.Class("WebSearch.Response")({ providerID: ID, results: Schema.Array(Result), }) {} const Updated = ephemeral({ type: "websearch.updated", schema: {}, }) export const Event = { Updated, Definitions: inventory(Updated) }