mirror of
https://github.com/bknd-io/bknd/
synced 2026-08-03 08:36:01 +00:00
public commit
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
import { Const, type Static, StringRecord, Type, transformObject } from "core/utils";
|
||||
import { TaskMap, TriggerMap } from "flows";
|
||||
|
||||
export const TASKS = {
|
||||
...TaskMap
|
||||
} as const;
|
||||
|
||||
export const TRIGGERS = TriggerMap;
|
||||
|
||||
const taskSchemaObject = transformObject(TASKS, (task, name) => {
|
||||
return Type.Object(
|
||||
{
|
||||
type: Const(name),
|
||||
params: task.cls.schema
|
||||
},
|
||||
{ title: String(name), additionalProperties: false }
|
||||
);
|
||||
});
|
||||
const taskSchema = Type.Union(Object.values(taskSchemaObject));
|
||||
export type TAppFlowTaskSchema = Static<typeof taskSchema>;
|
||||
|
||||
const triggerSchemaObject = transformObject(TRIGGERS, (trigger, name) => {
|
||||
return Type.Object(
|
||||
{
|
||||
type: Const(name),
|
||||
config: trigger.cls.schema
|
||||
},
|
||||
{ title: String(name), additionalProperties: false }
|
||||
);
|
||||
});
|
||||
|
||||
const connectionSchema = Type.Object({
|
||||
source: Type.String(),
|
||||
target: Type.String(),
|
||||
config: Type.Object(
|
||||
{
|
||||
condition: Type.Optional(
|
||||
Type.Union([
|
||||
Type.Object(
|
||||
{ type: Const("success") },
|
||||
{ additionalProperties: false, title: "success" }
|
||||
),
|
||||
Type.Object(
|
||||
{ type: Const("error") },
|
||||
{ additionalProperties: false, title: "error" }
|
||||
),
|
||||
Type.Object(
|
||||
{ type: Const("matches"), path: Type.String(), value: Type.String() },
|
||||
{ additionalProperties: false, title: "matches" }
|
||||
)
|
||||
])
|
||||
),
|
||||
max_retries: Type.Optional(Type.Number())
|
||||
},
|
||||
{ default: {}, additionalProperties: false }
|
||||
)
|
||||
});
|
||||
|
||||
// @todo: rework to have fixed ids per task and connections (and preferrably arrays)
|
||||
// causes issues with canvas
|
||||
export const flowSchema = Type.Object(
|
||||
{
|
||||
trigger: Type.Union(Object.values(triggerSchemaObject)),
|
||||
tasks: Type.Optional(StringRecord(Type.Union(Object.values(taskSchemaObject)))),
|
||||
connections: Type.Optional(StringRecord(connectionSchema, { default: {} })),
|
||||
start_task: Type.Optional(Type.String()),
|
||||
responding_task: Type.Optional(Type.String())
|
||||
},
|
||||
{
|
||||
additionalProperties: false
|
||||
}
|
||||
);
|
||||
export type TAppFlowSchema = Static<typeof flowSchema>;
|
||||
|
||||
export const flowsConfigSchema = Type.Object(
|
||||
{
|
||||
basepath: Type.String({ default: "/api/flows" }),
|
||||
flows: StringRecord(flowSchema, { default: {} })
|
||||
},
|
||||
{
|
||||
default: {},
|
||||
additionalProperties: false
|
||||
}
|
||||
);
|
||||
Reference in New Issue
Block a user