| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- export * as Integration from "./integration"
- import { Schema } from "effect"
- import { optional } from "./schema"
- import { define, inventory } from "./event"
- import { Connection } from "./connection"
- import { ascending } from "./identifier"
- import { statics } from "./schema"
- import { IntegrationID, IntegrationMethodID } from "./integration-id"
- export const ID = IntegrationID
- export type ID = typeof ID.Type
- export const MethodID = IntegrationMethodID
- export type MethodID = typeof MethodID.Type
- export interface When extends Schema.Schema.Type<typeof When> {}
- export const When = Schema.Struct({
- key: Schema.String,
- op: Schema.Literals(["eq", "neq"]),
- value: Schema.String,
- }).annotate({ identifier: "Integration.When" })
- export interface TextPrompt extends Schema.Schema.Type<typeof TextPrompt> {}
- export const TextPrompt = Schema.Struct({
- type: Schema.Literal("text"),
- key: Schema.String,
- message: Schema.String,
- placeholder: optional(Schema.String),
- when: optional(When),
- }).annotate({ identifier: "Integration.TextPrompt" })
- export interface SelectPrompt extends Schema.Schema.Type<typeof SelectPrompt> {}
- export const SelectPrompt = Schema.Struct({
- type: Schema.Literal("select"),
- key: Schema.String,
- message: Schema.String,
- options: Schema.Array(
- Schema.Struct({
- label: Schema.String,
- value: Schema.String,
- hint: optional(Schema.String),
- }),
- ),
- when: optional(When),
- }).annotate({ identifier: "Integration.SelectPrompt" })
- export const Prompt = Schema.Union([TextPrompt, SelectPrompt]).pipe(Schema.toTaggedUnion("type"))
- export type Prompt = typeof Prompt.Type
- export interface OAuthMethod extends Schema.Schema.Type<typeof OAuthMethod> {}
- export const OAuthMethod = Schema.Struct({
- id: MethodID,
- type: Schema.Literal("oauth"),
- label: Schema.String,
- prompts: optional(Schema.Array(Prompt)),
- }).annotate({ identifier: "Integration.OAuthMethod" })
- export interface KeyMethod extends Schema.Schema.Type<typeof KeyMethod> {}
- export const KeyMethod = Schema.Struct({
- type: Schema.Literal("key"),
- label: optional(Schema.String),
- }).annotate({ identifier: "Integration.KeyMethod" })
- export interface EnvMethod extends Schema.Schema.Type<typeof EnvMethod> {}
- export const EnvMethod = Schema.Struct({
- type: Schema.Literal("env"),
- names: Schema.Array(Schema.String),
- }).annotate({ identifier: "Integration.EnvMethod" })
- export const Method = Schema.Union([OAuthMethod, KeyMethod, EnvMethod])
- .pipe(Schema.toTaggedUnion("type"))
- .annotate({ identifier: "Integration.Method" })
- export type Method = typeof Method.Type
- export const Inputs = Schema.Record(Schema.String, Schema.String).annotate({ identifier: "Integration.Inputs" })
- export type Inputs = typeof Inputs.Type
- const Updated = define({
- type: "integration.updated",
- schema: {},
- })
- const ConnectionUpdated = define({
- type: "integration.connection.updated",
- schema: { integrationID: ID },
- })
- export const Event = { Updated, ConnectionUpdated, Definitions: inventory(Updated, ConnectionUpdated) }
- export interface Ref extends Schema.Schema.Type<typeof Ref> {}
- export const Ref = Schema.Struct({
- id: ID,
- name: Schema.String,
- }).annotate({ identifier: "Integration.Ref" })
- export class Info extends Schema.Class<Info>("Integration.Info")({
- id: ID,
- name: Schema.String,
- methods: Schema.Array(Method),
- connections: Schema.Array(Connection.Info),
- }) {}
- export const AttemptID = Schema.String.pipe(
- Schema.brand("Integration.AttemptID"),
- statics((schema) => ({ create: () => schema.make("con_" + ascending()) })),
- )
- export type AttemptID = typeof AttemptID.Type
- const AttemptTime = Schema.Struct({
- created: Schema.Number,
- expires: Schema.Number,
- })
- export class Attempt extends Schema.Class<Attempt>("Integration.Attempt")({
- attemptID: AttemptID,
- url: Schema.String,
- instructions: Schema.String,
- mode: Schema.Literals(["auto", "code"]),
- time: AttemptTime,
- }) {}
- export const AttemptStatus = Schema.Union([
- Schema.Struct({ status: Schema.Literal("pending"), time: AttemptTime }),
- Schema.Struct({ status: Schema.Literal("complete"), time: AttemptTime }),
- Schema.Struct({ status: Schema.Literal("failed"), message: Schema.String, time: AttemptTime }),
- Schema.Struct({ status: Schema.Literal("expired"), time: AttemptTime }),
- ])
- .pipe(Schema.toTaggedUnion("status"))
- .annotate({ identifier: "Integration.AttemptStatus" })
- export type AttemptStatus = typeof AttemptStatus.Type
|