import { Layer } from "effect";import { accountProviderMiddlewareLayer } from "@executor-js/api/server";import { BetterAuth, type BetterAuthHandle } from "../auth/better-auth";import { betterAuthAccountProvider } from "./better-auth-account-provider";// ---------------------------------------------------------------------------// Self-host account seam: the per-request `AccountProvider` middleware backed by// Better Auth. `ExecutorApp.make` mounts the shared, provider-neutral// `AccountHandlers` behind it under the `/api` prefix (same prefixed router as// the plugin API). The provider does its OWN auth (each handler resolves the// session via the request headers), so it is NOT wrapped by the execution-stack// middleware — account requests never build a code executor.//// The handlers `yield* AccountProvider` at request time; providing it through a// router middleware (like the plugin API's ExecutionStackMiddleware provides// ExecutorService) satisfies the requirement without leaking into the app// layer's output. The Better Auth `AccountProvider` is self-contained, so it// goes through the common-case `accountProviderMiddlewareLayer` (wraps it in// `requestScopedMiddleware`).// ---------------------------------------------------------------------------export const selfHostAccountMiddleware = (betterAuth: BetterAuthHandle) => accountProviderMiddlewareLayer( betterAuthAccountProvider.pipe(Layer.provide(Layer.succeed(BetterAuth)(betterAuth))), );
import { Layer } from "effect";
import { accountProviderMiddlewareLayer } from "@executor-js/api/server";
import { BetterAuth, type BetterAuthHandle } from "../auth/better-auth";
import { betterAuthAccountProvider } from "./better-auth-account-provider";
// ---------------------------------------------------------------------------
// Self-host account seam: the per-request `AccountProvider` middleware backed by
// Better Auth. `ExecutorApp.make` mounts the shared, provider-neutral
// `AccountHandlers` behind it under the `/api` prefix (same prefixed router as
// the plugin API). The provider does its OWN auth (each handler resolves the
// session via the request headers), so it is NOT wrapped by the execution-stack
// middleware — account requests never build a code executor.
//
// The handlers `yield* AccountProvider` at request time; providing it through a
// router middleware (like the plugin API's ExecutionStackMiddleware provides
// ExecutorService) satisfies the requirement without leaking into the app
// layer's output. The Better Auth `AccountProvider` is self-contained, so it
// goes through the common-case `accountProviderMiddlewareLayer` (wraps it in
// `requestScopedMiddleware`).
// ---------------------------------------------------------------------------
export const selfHostAccountMiddleware = (betterAuth: BetterAuthHandle) =>
accountProviderMiddlewareLayer(
betterAuthAccountProvider.pipe(Layer.provide(Layer.succeed(BetterAuth)(betterAuth))),
);