Something went wrong. Try again.
opencode v2 mirror
Something went wrong. Try again.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697import type { ConnectionInfo } from "@opencode/client"import type { IntegrationApi } from "@opencode/client/effect/api"import { Credential } from "@opencode/schema/credential"import { Form } from "@opencode/schema/form"import type { Effect, Scope } from "effect"import type { Transform } from "./registration.js"
type IntegrationRef = { id: string; name: string }
export interface IntegrationOAuthMethod { readonly id: string readonly type: "oauth" readonly label: string readonly form?: Form.Fields}
export interface IntegrationCommandMethod { readonly id: string readonly type: "command" readonly label: string readonly command: ReadonlyArray<string>}
export interface IntegrationKeyMethod { readonly type: "key" readonly label?: string readonly form?: Form.Fields}
export interface IntegrationEnvMethod { readonly type: "env" readonly names: ReadonlyArray<string>}
export type IntegrationMethod = | IntegrationOAuthMethod | IntegrationCommandMethod | IntegrationKeyMethod | IntegrationEnvMethod
export type IntegrationOAuthAuthorization = { readonly url: string readonly instructions: string readonly expiresAt?: number} & ( | { readonly mode: "auto" readonly callback: Effect.Effect<Credential.OAuth, unknown> } | { readonly mode: "code" readonly callback: (code: string) => Effect.Effect<Credential.OAuth, unknown> })export type IntegrationOAuthMethodRegistration = { readonly integrationID: string readonly method: IntegrationOAuthMethod readonly authorize: (answer: Form.Answer) => Effect.Effect<IntegrationOAuthAuthorization, unknown, Scope.Scope> readonly refresh?: (credential: Credential.OAuth) => Effect.Effect<Credential.OAuth, unknown> readonly label?: (credential: Credential.OAuth) => string | undefined}export type IntegrationMethodRegistration = | IntegrationOAuthMethodRegistration | { readonly integrationID: string readonly method: IntegrationCommandMethod } | { readonly integrationID: string readonly method: IntegrationKeyMethod } | { readonly integrationID: string readonly method: IntegrationEnvMethod }
export interface IntegrationEditor { list(): readonly IntegrationRef[] get(id: string): IntegrationRef | undefined update(id: string, update: (integration: IntegrationRef) => void): void remove(id: string): void readonly method: { list(integrationID: string): readonly IntegrationMethod[] update(input: IntegrationMethodRegistration): void remove(integrationID: string, method: IntegrationMethod): void }}
export interface IntegrationDomain extends Omit<IntegrationApi<unknown>, "wellknown"> { readonly transform: Transform<IntegrationEditor> readonly reload: () => Effect.Effect<void> readonly connection: { readonly active: (integrationID: string) => Effect.Effect<ConnectionInfo | undefined> readonly resolve: (connection: ConnectionInfo) => Effect.Effect<Credential.Value | undefined, unknown> }}