Rhys Sullivanfmtc92c57d6 months agoHistory
31 lines · 1.0 KB · TypeScript
RawDownload
import { HttpApiBuilder } from "effect/unstable/httpapi";import { Effect } from "effect"; import { ExecutorApi } from "../api";import { ExecutorService } from "../services";import { capture } from "@executor-js/api"; export const ScopeHandlers = HttpApiBuilder.group(ExecutorApi, "scope", (handlers) =>  handlers.handle("info", () =>    capture(      Effect.gen(function* () {        const executor = yield* ExecutorService;        // `id` / `name` / `dir` continue to point at the outermost scope so        // existing clients keep their source writes org/workspace-scoped.        // `stack` exposes the full innermost-first scope stack so the UI can        // deliberately target per-user secret writes when binding credentials.        const scope = executor.scopes.at(-1)!;        return {          id: scope.id,          name: scope.name,          dir: scope.name,          stack: executor.scopes.map((entry) => ({            id: entry.id,            name: entry.name,            dir: entry.name,          })),        };      }),    ),  ),);