72 lines · 2.5 KB · TypeScript
RawDownload
// ---------------------------------------------------------------------------// Cloud executor — stateless, per-request, with Vault-backed secrets// --------------------------------------------------------------------------- import { Effect } from "effect"; import { ScopeId, createExecutor, makeInMemorySourceRegistry, scopeKv } from "@executor/sdk";import { makePgKv, makePgPolicyEngine, makePgToolRegistry } from "@executor/storage-postgres";import { openApiPlugin, makeKvOperationStore } from "@executor/plugin-openapi";import { mcpPlugin, makeKvBindingStore } from "@executor/plugin-mcp";import {  googleDiscoveryPlugin,  makeKvBindingStore as makeKvGoogleDiscoveryBindingStore,} from "@executor/plugin-google-discovery";import {  graphqlPlugin,  makeKvOperationStore as makeKvGraphqlOperationStore,} from "@executor/plugin-graphql";import {  makeConfiguredWorkOSVaultSecretStore,  workosVaultPlugin,} from "@executor/plugin-workos-vault";import { DbService } from "./db";import { server } from "../env"; // ---------------------------------------------------------------------------// Create a fresh executor for an organization (stateless, per-request)// --------------------------------------------------------------------------- export const createOrgExecutor = (  organizationId: string,  organizationName: string,) =>  Effect.gen(function* () {    const db = yield* DbService;    const kv = makePgKv(db, organizationId);    const secrets = yield* makeConfiguredWorkOSVaultSecretStore({      credentials: {        apiKey: server.WORKOS_API_KEY,        clientId: server.WORKOS_CLIENT_ID,      },      metadataStore: scopeKv(kv, "secrets"),      scopeId: organizationId,    }).pipe(Effect.orDie);     return yield* createExecutor({      scope: {        id: ScopeId.make(organizationId),        name: organizationName,        createdAt: new Date(),      },      tools: makePgToolRegistry(db, organizationId),      sources: makeInMemorySourceRegistry(),      secrets,      policies: makePgPolicyEngine(db, organizationId),      plugins: [        openApiPlugin({          operationStore: makeKvOperationStore(kv, "openapi"),        }),        mcpPlugin({          bindingStore: makeKvBindingStore(kv, "mcp"),        }),        googleDiscoveryPlugin({          bindingStore: makeKvGoogleDiscoveryBindingStore(kv, "google-discovery"),        }),        graphqlPlugin({          operationStore: makeKvGraphqlOperationStore(kv, "graphql"),        }),        workosVaultPlugin(),      ] as const,    });  });