32 lines · 1.2 KB · TypeScript
RawDownload
import { Layer, ManagedRuntime } from "effect";import { FetchHttpClient } from "effect/unstable/http";import { NodeFileSystem } from "@effect/platform-node"; import {  IntegrationsRegistry,  integrationsRegistryLayer,} from "@executor-js/integrations-registry"; import { USER_AGENT } from "./installation"; // Module-singleton runtime for the integrations.sh registry. The layer's// scoped fork fetches the registry at startup and refreshes on a 12-hour// cadence for the runtime's lifetime. Shared across every long-running// apps/local surface (HTTP server, stdio MCP) so concurrent surfaces don't// each spin up their own refresh fork.const integrationsRuntime = ManagedRuntime.make(  integrationsRegistryLayer({ userAgent: USER_AGENT }).pipe(    Layer.provide(FetchHttpClient.layer),    Layer.provide(NodeFileSystem.layer),  ),); /** * Idempotently trigger the registry layer to build, which forks the boot * fetch and recurring refresh into the runtime's scope. Fire-and-forget: * returns immediately, never throws, never blocks the caller. Failures are * absorbed inside the forked fiber and the layer's catchCause handlers. */export const startIntegrationsRefresh = (): void => {  integrationsRuntime.runFork(IntegrationsRegistry.asEffect());};