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);
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);