Skip to main content
Glama
func.ts7.37 kB
import { ActionKind, ActionPrototypeId } from "@/api/sdf/dal/action"; import { InputSocketId, OutputSocketId, SchemaVariantId } from "./schema"; import { ComponentId } from "./component"; import { PropId } from "./prop"; export type FuncArgumentId = string; export type FuncId = string; export type AttributePrototypeArgumentId = string; export type AttributePrototypeId = string; export type ManagementPrototypeId = string; export enum FuncKind { Action = "Action", Attribute = "Attribute", Authentication = "Authentication", CodeGeneration = "CodeGeneration", Intrinsic = "Intrinsic", Qualification = "Qualification", SchemaVariantDefinition = "SchemaVariantDefinition", Unknown = "Unknown", Management = "Management", } export enum CustomizableFuncKind { Action = "Action", Attribute = "Attribute", Authentication = "Authentication", CodeGeneration = "CodeGeneration", Qualification = "Qualification", Management = "Management", } // TODO(nick,wendy): this is ugly to use in some places. We probably need to think of a better interface. Blame me, not Wendy. export function customizableFuncKindToFuncKind( customizableFuncKind: CustomizableFuncKind, ): FuncKind { switch (customizableFuncKind) { case CustomizableFuncKind.Action: return FuncKind.Action; case CustomizableFuncKind.Attribute: return FuncKind.Attribute; case CustomizableFuncKind.Authentication: return FuncKind.Authentication; case CustomizableFuncKind.CodeGeneration: return FuncKind.CodeGeneration; case CustomizableFuncKind.Qualification: return FuncKind.Qualification; case CustomizableFuncKind.Management: return FuncKind.Management; default: throw new Error( "this should not be possible since CustomizableFuncKind is a subset of FuncKind", ); } } export type FUNC_LABELS = { pluralLabel: string; singularLabel: string }; export type FUNC_TYPES = Record<CustomizableFuncKind, FUNC_LABELS>; export const CUSTOMIZABLE_FUNC_TYPES: FUNC_TYPES = { [CustomizableFuncKind.Action]: { pluralLabel: "Actions", singularLabel: "Action", }, [CustomizableFuncKind.Attribute]: { pluralLabel: "Attributes", singularLabel: "Attribute", }, [CustomizableFuncKind.Authentication]: { pluralLabel: "Authenticators", singularLabel: "Authentication", }, [CustomizableFuncKind.CodeGeneration]: { pluralLabel: "Code Generators", singularLabel: "Code Generation", }, [CustomizableFuncKind.Management]: { pluralLabel: "Management", singularLabel: "Management", }, [CustomizableFuncKind.Qualification]: { pluralLabel: "Qualifications", singularLabel: "Qualification", }, }; export const isCustomizableFuncKind = (f: FuncKind) => f in CUSTOMIZABLE_FUNC_TYPES; export enum FuncArgumentKind { Array = "array", Boolean = "boolean", Float = "float", Integer = "integer", Json = "json", Object = "object", String = "string", Map = "map", Any = "any", } export interface FuncArgument { id: string; name: string; kind: FuncArgumentKind; elementKind?: FuncArgumentKind; created_at: IsoDateString; updated_at: IsoDateString; } export enum FuncBackendKind { Array = "Array", Boolean = "Boolean", Diff = "Diff", Identity = "Identity", Float = "Float", Integer = "Integer", JsAction = "JsAction", JsAttribute = "JsAction", JsAuthentication = "JsAuthentication", Json = "Json", JsReconciliation = "JsReconciliation", JsSchemaVariantDefinition = "JsSchemaVariantDefinition", Map = "Map", NormalizeToArray = "NormalizeToArray", Object = "Object", ResourcePayloadToValue = "ResourcePayloadToValue", String = "String", Unset = "Unset", Validation = "Validation", } export interface FuncSummary { funcId: FuncId; kind: FuncKind; name: string; displayName: string | null; description: string | null; isLocked: boolean; arguments: FuncArgument[]; backendKind: FuncBackendKind; bindings: FuncBinding[]; types?: string | null; } export interface FuncCode { funcId: FuncId; code: string; } export interface AttributeArgumentBinding { funcArgumentId: FuncArgumentId; attributePrototypeArgumentId: AttributePrototypeArgumentId | null; propId: PropId | null; inputSocketId: InputSocketId | null; } export enum FuncBindingKind { Action = "action", Attribute = "attribute", Authentication = "authentication", CodeGeneration = "codeGeneration", Qualification = "qualification", Management = "management", } export interface Action { bindingKind: FuncBindingKind.Action; // uneditable funcId: FuncId | null; schemaVariantId: SchemaVariantId | null; actionPrototypeId: ActionPrototypeId | null; // editable kind: ActionKind | null; } export interface Attribute { bindingKind: FuncBindingKind.Attribute; // uneditable funcId: FuncId | null; attributePrototypeId: AttributePrototypeId | null; // needed on create schemaVariantId: SchemaVariantId | null; componentId: ComponentId | null; // editable propId: PropId | null; outputSocketId: OutputSocketId | null; argumentBindings: AttributeArgumentBinding[]; } export interface Management { bindingKind: FuncBindingKind.Management; // uneditable funcId: FuncId | null; managementPrototypeId: ManagementPrototypeId | null; // needed on create schemaVariantId: SchemaVariantId | null; componentId: ComponentId | null; } export interface Authentication { bindingKind: FuncBindingKind.Authentication; funcId: FuncId; schemaVariantId: SchemaVariantId; } export interface CodeGeneration { bindingKind: FuncBindingKind.CodeGeneration; funcId: FuncId | null; schemaVariantId: SchemaVariantId | null; attributePrototypeId: AttributePrototypeId | null; componentId: ComponentId | null; // editable inputs: LeafInputLocation[]; } export interface Qualification { bindingKind: FuncBindingKind.Qualification; funcId: FuncId | null; schemaVariantId: SchemaVariantId | null; attributePrototypeId: AttributePrototypeId | null; componentId: ComponentId | null; // editable inputs: LeafInputLocation[]; } export type FuncBinding = | Action | Attribute | Authentication | CodeGeneration | Qualification | Management; export type LeafInputLocation = | "code" | "deletedAt" | "domain" | "resource" | "secrets"; export interface BindingWithBackendKind extends Attribute { backendKind: FuncBackendKind; attributePrototypeId: NonNullable<AttributePrototypeId>; } export interface PropDisplay { id: PropId; path: string; name: string; value?: PropId | InputSocketId; attributePrototypeId?: AttributePrototypeId; funcId: FuncId; } export interface BindingWithBackendKindAndPropId extends BindingWithBackendKind { propId: NonNullable<PropId>; } export interface IntrinsicDisplay { attributePrototypeId: AttributePrototypeId; outputSocketId: OutputSocketId; socketName: string; backendKind: FuncBackendKind; value: InputSocketId | PropId | undefined; funcId: FuncId; } // PSA: this is how to type guard filter so later operations know the field // is no longer nullable b/c the filter removed any objects where the property was null export interface BindingWithBackendKindAndOutputSocket extends BindingWithBackendKind { outputSocketId: NonNullable<OutputSocketId>; }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/systeminit/si'

If you have feedback or need assistance with the MCP directory API, please join our Discord server