144 lines · 5.9 KB · TypeScript
RawDownload
import { HttpApiBuilder } from "effect/unstable/httpapi";import { Context, Effect } from "effect"; import { addGroup, capture } from "@executor-js/api";import type { MicrosoftPluginExtension } from "../sdk/plugin";import { MicrosoftGroup } from "./group"; export class MicrosoftExtensionService extends Context.Service<  MicrosoftExtensionService,  MicrosoftPluginExtension>()("MicrosoftExtensionService") {} const ExecutorApiWithMicrosoft = addGroup(MicrosoftGroup); export const MicrosoftHandlers = HttpApiBuilder.group(  ExecutorApiWithMicrosoft,  "microsoft",  (handlers) =>    handlers      .handle("addGraph", ({ payload }) =>        capture(          Effect.gen(function* () {            const ext = yield* MicrosoftExtensionService;            return yield* ext.addGraph({              presetIds: payload.presetIds,              customScopes: payload.customScopes,              slug: payload.slug,              name: payload.name,              description: payload.description,              baseUrl: payload.baseUrl,              specUrl: payload.specUrl,              authorizationUrl: payload.authorizationUrl,              tokenUrl: payload.tokenUrl,              clientCredentialsTokenUrl: payload.clientCredentialsTokenUrl,            });          }),        ),      )      .handle("getIntegration", ({ params }) =>        capture(          Effect.gen(function* () {            const ext = yield* MicrosoftExtensionService;            const integration = yield* ext.getIntegration(params.slug);            return integration              ? {                  slug: integration.slug,                  description: integration.description,                  kind: integration.kind,                  canRemove: integration.canRemove,                  canRefresh: integration.canRefresh,                }              : null;          }),        ),      )      .handle("getConfig", ({ params }) =>        capture(          Effect.gen(function* () {            const ext = yield* MicrosoftExtensionService;            const config = yield* ext.getConfig(params.slug);            return config              ? {                  sourceUrl: config.sourceUrl,                  microsoftGraphPresetIds: config.microsoftGraphPresetIds                    ? [...config.microsoftGraphPresetIds]                    : undefined,                  microsoftGraphCustomScopes: config.microsoftGraphCustomScopes                    ? [...config.microsoftGraphCustomScopes]                    : undefined,                  microsoftGraphScopes: config.microsoftGraphScopes                    ? [...config.microsoftGraphScopes]                    : undefined,                  microsoftGraphExactPaths: config.microsoftGraphExactPaths                    ? [...config.microsoftGraphExactPaths]                    : undefined,                  microsoftGraphPathPrefixes: config.microsoftGraphPathPrefixes                    ? [...config.microsoftGraphPathPrefixes]                    : undefined,                  microsoftGraphTagPrefixes: config.microsoftGraphTagPrefixes                    ? [...config.microsoftGraphTagPrefixes]                    : undefined,                  microsoftGraphCoversFullGraph: config.microsoftGraphCoversFullGraph,                  microsoftGraphAuthorizationUrl: config.microsoftGraphAuthorizationUrl,                  microsoftGraphTokenUrl: config.microsoftGraphTokenUrl,                  microsoftGraphClientCredentialsTokenUrl:                    config.microsoftGraphClientCredentialsTokenUrl,                  baseUrl: config.baseUrl,                  headers: config.headers ? { ...config.headers } : undefined,                  queryParams: config.queryParams ? { ...config.queryParams } : undefined,                  authenticationTemplate: config.authenticationTemplate                    ? [...config.authenticationTemplate]                    : undefined,                }              : null;          }),        ),      )      .handle("configure", ({ params, payload }) =>        capture(          Effect.gen(function* () {            const ext = yield* MicrosoftExtensionService;            const authenticationTemplate = yield* ext.configure(params.slug, {              authenticationTemplate: payload.authenticationTemplate,              mode: payload.mode ?? "merge",            });            return { authenticationTemplate: [...authenticationTemplate] };          }),        ),      )      .handle("updateGraph", ({ params, payload }) =>        capture(          Effect.gen(function* () {            const ext = yield* MicrosoftExtensionService;            const result = yield* ext.updateGraph(params.slug, {              ...(payload.presetIds !== undefined ? { presetIds: payload.presetIds } : {}),              ...(payload.customScopes !== undefined ? { customScopes: payload.customScopes } : {}),              ...(payload.baseUrl !== undefined ? { baseUrl: payload.baseUrl } : {}),              ...(payload.specUrl !== undefined ? { specUrl: payload.specUrl } : {}),              ...(payload.authorizationUrl !== undefined                ? { authorizationUrl: payload.authorizationUrl }                : {}),              ...(payload.tokenUrl !== undefined ? { tokenUrl: payload.tokenUrl } : {}),              ...(payload.clientCredentialsTokenUrl !== undefined                ? { clientCredentialsTokenUrl: payload.clientCredentialsTokenUrl }                : {}),            });            return {              slug: result.slug,              toolCount: result.toolCount,              addedTools: [...result.addedTools],              removedTools: [...result.removedTools],            };          }),        ),      )      .handle("removeGraph", ({ params }) =>        capture(          Effect.gen(function* () {            const ext = yield* MicrosoftExtensionService;            yield* ext.removeGraph(params.slug);          }),        ),      ),);