| export * as Provider from "./provider" |
|
|
| import { Schema } from "effect" |
| import { optional } from "./schema" |
| import { Integration } from "./integration" |
| import { statics } from "./schema" |
|
|
| export const ID = Schema.String.pipe( |
| Schema.brand("ProviderV2.ID"), |
| statics((schema) => ({ |
| opencode: schema.make("opencode"), |
| anthropic: schema.make("anthropic"), |
| openai: schema.make("openai"), |
| google: schema.make("google"), |
| googleVertex: schema.make("google-vertex"), |
| githubCopilot: schema.make("github-copilot"), |
| amazonBedrock: schema.make("amazon-bedrock"), |
| azure: schema.make("azure"), |
| openrouter: schema.make("openrouter"), |
| mistral: schema.make("mistral"), |
| gitlab: schema.make("gitlab"), |
| })), |
| ) |
| export type ID = typeof ID.Type |
|
|
| export interface AISDK extends Schema.Schema.Type<typeof AISDK> {} |
| export const AISDK = Schema.Struct({ |
| type: Schema.Literal("aisdk"), |
| package: Schema.String, |
| url: Schema.String.pipe(optional), |
| settings: Schema.Record(Schema.String, Schema.Unknown).pipe(optional), |
| }).annotate({ identifier: "Provider.AISDK" }) |
|
|
| export interface Native extends Schema.Schema.Type<typeof Native> {} |
| export const Native = Schema.Struct({ |
| type: Schema.Literal("native"), |
| url: Schema.String.pipe(optional), |
| settings: Schema.Record(Schema.String, Schema.Unknown), |
| }).annotate({ identifier: "Provider.Native" }) |
|
|
| export const Api = Schema.Union([AISDK, Native]) |
| .pipe(Schema.toTaggedUnion("type")) |
| .annotate({ identifier: "Provider.Api" }) |
| export type Api = typeof Api.Type |
|
|
| export interface Request extends Schema.Schema.Type<typeof Request> {} |
| export const Request = Schema.Struct({ |
| headers: Schema.Record(Schema.String, Schema.String), |
| body: Schema.Record(Schema.String, Schema.Json), |
| }).annotate({ identifier: "Provider.Request" }) |
|
|
| export interface Info extends Schema.Schema.Type<typeof Info> {} |
| export const Info = Schema.Struct({ |
| id: ID, |
| integrationID: Integration.ID.pipe(optional), |
| name: Schema.String, |
| disabled: Schema.Boolean.pipe(optional), |
| api: Api, |
| request: Request, |
| }) |
| .annotate({ identifier: "ProviderV2.Info" }) |
| .pipe( |
| statics((schema) => ({ |
| empty: (id: ID) => |
| schema.make({ |
| id, |
| name: id, |
| api: { type: "native", settings: {} }, |
| request: { headers: {}, body: {} }, |
| }), |
| })), |
| ) |
|
|