51 lines · 2.5 KB · TypeScript
RawDownload
import type { IntegrationSlug } from "@executor-js/sdk/shared";import * as Atom from "effect/unstable/reactivity/Atom";import { ReactivityKey } from "@executor-js/react/api/reactivity-keys";import { OpenApiClient } from "./client"; // ---------------------------------------------------------------------------// Query atoms — v2: the integration catalog is the unit of identity (the v1// per-scope `source` row is gone). `getIntegration` returns the catalog entry// (slug/description/kind/canRemove/canRefresh); credentials are owner-scoped// connections read from the shared `connections` API, not bound per source.// --------------------------------------------------------------------------- export const openApiIntegrationAtom = (slug: IntegrationSlug) =>  OpenApiClient.query("openapi", "getIntegration", {    params: { slug },    timeToLive: "15 seconds",    reactivityKeys: [ReactivityKey.integrations, ReactivityKey.tools],  }); // The full opaque config (including `authenticationTemplate`), used by the// configure UX to render existing auth methods and add custom ones.export const openApiConfigAtom = (slug: IntegrationSlug) =>  OpenApiClient.query("openapi", "getConfig", {    params: { slug },    timeToLive: "15 seconds",    reactivityKeys: [ReactivityKey.integrations, ReactivityKey.tools],  }); // ---------------------------------------------------------------------------// Mutation atoms// --------------------------------------------------------------------------- export const previewOpenApiSpec = OpenApiClient.mutation("openapi", "previewSpec"); export const addOpenApiSpec = OpenApiClient.mutation("openapi", "addSpec"); export const removeOpenApiSpec = OpenApiClient.mutation("openapi", "removeSpec"); /** Re-fetch (or replace) the integration's spec and rebuild its tools in *  place — connections, policies, and the description survive. Pass *  `reactivityKeys: integrationWriteKeys` at the call site. */export const updateOpenApiSpec = OpenApiClient.mutation("openapi", "updateSpec"); // Add / merge custom auth methods onto an integration's `authenticationTemplate`.export const openapiConfigure = OpenApiClient.mutation("openapi", "configure"); // `getIntegration` is read-only; the atom family lets a caller pass a slug.export const openApiIntegrationFamily = Atom.family(openApiIntegrationAtom); // `getConfig` is read-only; the atom family lets a caller pass a slug.export const openApiConfigFamily = Atom.family(openApiConfigAtom);