/* oxlint-disable executor/no-effect-escape-hatch -- boundary: HttpApi handler adapter maps plugin extension failures into InternalError */import { Context, Effect } from "effect";import { HttpApiBuilder } from "effect/unstable/httpapi"; import { addGroup, capture } from "@executor-js/api";import { InternalError } from "@executor-js/sdk/shared";import type { AppsExtension } from "./apps-plugin";import { AppsGroup } from "./routes"; export class AppsExtensionService extends Context.Service<AppsExtensionService, AppsExtension>()( "AppsExtensionService",) {} const ExecutorApiWithApps = addGroup(AppsGroup); const captureUnexpected = <A, E, R>( effect: Effect.Effect<A, E, R>,): Effect.Effect<A, InternalError, R> => capture(effect.pipe(Effect.catch((cause: unknown) => Effect.die(cause)))); export const AppsHandlers = HttpApiBuilder.group(ExecutorApiWithApps, "apps", (handlers) => handlers .handle("listSources", () => captureUnexpected( Effect.gen(function* () { const ext = yield* AppsExtensionService; const sources = yield* ext.listSources(); return { sources }; }), ), ) .handle("createSource", ({ payload }) => captureUnexpected( Effect.gen(function* () { const ext = yield* AppsExtensionService; const source = yield* ext.createSource(payload); return { source }; }), ), ) .handle("getSource", ({ params }) => captureUnexpected( Effect.gen(function* () { const ext = yield* AppsExtensionService; const source = yield* ext.getSource(params.slug); return { source }; }), ), ) .handle("deleteSource", ({ params }) => captureUnexpected( Effect.gen(function* () { const ext = yield* AppsExtensionService; return yield* ext.deleteSource(params.slug); }), ), ) .handle("syncSource", ({ params }) => captureUnexpected( Effect.gen(function* () { const ext = yield* AppsExtensionService; return yield* ext.syncSource(params.slug); }), ), ),);
/* oxlint-disable executor/no-effect-escape-hatch -- boundary: HttpApi handler adapter maps plugin extension failures into InternalError */
import { Context, Effect } from "effect";
import { HttpApiBuilder } from "effect/unstable/httpapi";
import { addGroup, capture } from "@executor-js/api";
import { InternalError } from "@executor-js/sdk/shared";
import type { AppsExtension } from "./apps-plugin";
import { AppsGroup } from "./routes";
export class AppsExtensionService extends Context.Service<AppsExtensionService, AppsExtension>()(
"AppsExtensionService",
) {}
const ExecutorApiWithApps = addGroup(AppsGroup);
const captureUnexpected = <A, E, R>(
effect: Effect.Effect<A, E, R>,
): Effect.Effect<A, InternalError, R> =>
capture(effect.pipe(Effect.catch((cause: unknown) => Effect.die(cause))));
export const AppsHandlers = HttpApiBuilder.group(ExecutorApiWithApps, "apps", (handlers) =>
handlers
.handle("listSources", () =>
captureUnexpected(
Effect.gen(function* () {
const ext = yield* AppsExtensionService;
const sources = yield* ext.listSources();
return { sources };
}),
),
)
.handle("createSource", ({ payload }) =>
captureUnexpected(
Effect.gen(function* () {
const ext = yield* AppsExtensionService;
const source = yield* ext.createSource(payload);
return { source };
}),
),
)
.handle("getSource", ({ params }) =>
captureUnexpected(
Effect.gen(function* () {
const ext = yield* AppsExtensionService;
const source = yield* ext.getSource(params.slug);
return { source };
}),
),
)
.handle("deleteSource", ({ params }) =>
captureUnexpected(
Effect.gen(function* () {
const ext = yield* AppsExtensionService;
return yield* ext.deleteSource(params.slug);
}),
),
)
.handle("syncSource", ({ params }) =>
captureUnexpected(
Effect.gen(function* () {
const ext = yield* AppsExtensionService;
return yield* ext.syncSource(params.slug);
}),
),
),
);