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, }), );
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,
}),
);