195 lines · 5.9 KB · TypeScript
RawDownload
import { HttpApiEndpoint, HttpApiGroup } from "effect/unstable/httpapi";import { Schema } from "effect";import { ApiKeyAuthMethod, ApiKeyAuthTemplate } from "@executor-js/sdk/http-auth";import {  InternalError,  IntegrationAlreadyExistsError,  IntegrationNotFoundError,  IntegrationSlug,} from "@executor-js/sdk/shared";import {  OpenApiExtractionError,  OpenApiOAuthError,  OpenApiParseError,} from "@executor-js/plugin-openapi"; const DomainErrors = [  InternalError,  OpenApiParseError,  OpenApiExtractionError,  OpenApiOAuthError,  IntegrationAlreadyExistsError,] as const; const IntegrationNotFound = IntegrationNotFoundError.annotate({ httpApiStatus: 404 }); const UpdateErrors = [  InternalError,  OpenApiParseError,  OpenApiExtractionError,  OpenApiOAuthError,  IntegrationNotFound,] as const; const SlugParams = {  slug: Schema.String,}; const OAuthTemplatePayload = Schema.Struct({  slug: Schema.String,  kind: Schema.Literal("oauth2"),  authorizationUrl: Schema.String,  tokenUrl: Schema.String,  scopes: Schema.Array(Schema.String),}); const AuthenticationPayload = Schema.Union([OAuthTemplatePayload, ApiKeyAuthTemplate]);const AuthenticationResponse = Schema.Union([OAuthTemplatePayload, ApiKeyAuthMethod]); const AddPresetWorkloadPayload = Schema.Struct({  presetId: Schema.String,  slug: Schema.optional(Schema.String),  name: Schema.optional(Schema.String),}); const AddCustomWorkloadPayload = Schema.Struct({  custom: Schema.Struct({    customScopes: Schema.Array(Schema.String),    slug: Schema.optional(Schema.String),    name: Schema.String,    description: Schema.optional(Schema.String),    specUrl: Schema.optional(Schema.String),    authorizationUrl: Schema.optional(Schema.String),    tokenUrl: Schema.optional(Schema.String),    clientCredentialsTokenUrl: Schema.optional(Schema.String),  }),}); const AddWorkloadPayload = Schema.Union([AddPresetWorkloadPayload, AddCustomWorkloadPayload]); const AddWorkloadsPayload = Schema.Struct({  workloads: Schema.Array(AddWorkloadPayload),  baseUrl: Schema.optional(Schema.String),}); const AddWorkloadsResponse = Schema.Struct({  added: Schema.Array(    Schema.Struct({      slug: IntegrationSlug,      presetId: Schema.String,      toolCount: Schema.Number,    }),  ),  skipped: Schema.Array(    Schema.Struct({      slug: IntegrationSlug,      presetId: Schema.String,      reason: Schema.Literal("already_exists"),    }),  ),  failed: Schema.Array(    Schema.Struct({      slug: IntegrationSlug,      presetId: Schema.String,      error: Schema.String,    }),  ),}); const UpdateGraphPayload = Schema.Struct({  presetIds: Schema.optional(Schema.Array(Schema.String)),  customScopes: Schema.optional(Schema.Array(Schema.String)),  baseUrl: Schema.optional(Schema.String),  specUrl: Schema.optional(Schema.String),  authorizationUrl: Schema.optional(Schema.String),  tokenUrl: Schema.optional(Schema.String),  clientCredentialsTokenUrl: Schema.optional(Schema.String),}); const UpdateGraphResponse = Schema.Struct({  slug: IntegrationSlug,  toolCount: Schema.Number,  addedTools: Schema.Array(Schema.String),  removedTools: Schema.Array(Schema.String),}); const IntegrationView = Schema.Struct({  slug: IntegrationSlug,  description: Schema.String,  kind: Schema.String,  canRemove: Schema.Boolean,  canRefresh: Schema.Boolean,}); const MicrosoftConfigView = Schema.Struct({  sourceUrl: Schema.optional(Schema.String),  microsoftGraphPresetIds: Schema.optional(Schema.Array(Schema.String)),  microsoftGraphCustomScopes: Schema.optional(Schema.Array(Schema.String)),  microsoftGraphScopes: Schema.optional(Schema.Array(Schema.String)),  microsoftGraphExactPaths: Schema.optional(Schema.Array(Schema.String)),  microsoftGraphPathPrefixes: Schema.optional(Schema.Array(Schema.String)),  microsoftGraphTagPrefixes: Schema.optional(Schema.Array(Schema.String)),  microsoftGraphCoversFullGraph: Schema.optional(Schema.Boolean),  microsoftGraphAuthorizationUrl: Schema.optional(Schema.String),  microsoftGraphTokenUrl: Schema.optional(Schema.String),  microsoftGraphClientCredentialsTokenUrl: Schema.optional(Schema.String),  baseUrl: Schema.optional(Schema.String),  headers: Schema.optional(Schema.Record(Schema.String, Schema.String)),  queryParams: Schema.optional(Schema.Record(Schema.String, Schema.String)),  authenticationTemplate: Schema.optional(Schema.Array(AuthenticationResponse)),}); const ConfigurePayload = Schema.Struct({  authenticationTemplate: Schema.Array(AuthenticationPayload),  mode: Schema.optional(Schema.Literals(["merge", "replace"])),}); const ConfigureResponse = Schema.Struct({  authenticationTemplate: Schema.Array(AuthenticationResponse),}); export const MicrosoftGroup = HttpApiGroup.make("microsoft")  .add(    HttpApiEndpoint.post("addWorkloads", "/microsoft/workloads", {      payload: AddWorkloadsPayload,      success: AddWorkloadsResponse,      error: DomainErrors,    }),  )  .add(    HttpApiEndpoint.get("getIntegration", "/microsoft/integrations/:slug", {      params: SlugParams,      success: Schema.NullOr(IntegrationView),      error: DomainErrors,    }),  )  .add(    HttpApiEndpoint.get("getConfig", "/microsoft/integrations/:slug/config", {      params: SlugParams,      success: Schema.NullOr(MicrosoftConfigView),      error: DomainErrors,    }),  )  .add(    HttpApiEndpoint.post("configure", "/microsoft/integrations/:slug/config", {      params: SlugParams,      payload: ConfigurePayload,      success: ConfigureResponse,      error: DomainErrors,    }),  )  .add(    HttpApiEndpoint.post("updateGraph", "/microsoft/integrations/:slug/graph", {      params: SlugParams,      payload: UpdateGraphPayload,      success: UpdateGraphResponse,      error: UpdateErrors,    }),  )  .add(    HttpApiEndpoint.delete("removeGraph", "/microsoft/integrations/:slug", {      params: SlugParams,      success: Schema.Void,      error: DomainErrors,    }),  );