diff --git a/lib/StartSdk.ts b/lib/StartSdk.ts index b771f73..e97060c 100644 --- a/lib/StartSdk.ts +++ b/lib/StartSdk.ts @@ -51,6 +51,7 @@ import { SetInterfaces, setupInterfaces, } from "./interfaces/setupInterfaces" +import { successFailure } from "./trigger/successFailure" // prettier-ignore type AnyNeverCond = @@ -96,10 +97,12 @@ export class StartSdk { input: Type }) => Promise, ) => createAction(metaData, fn), + HealthCheck: { + of: healthCheck, + }, healthCheck: { checkPortListening, checkWebUrl, - of: healthCheck, runHealthScript, }, patterns, @@ -186,6 +189,7 @@ export class StartSdk { defaultTrigger, cooldownTrigger, changeOnFirstSuccess, + successFailure, }, Backups: { diff --git a/lib/trigger/defaultTrigger.ts b/lib/trigger/defaultTrigger.ts index 7c34cc7..bd52dc7 100644 --- a/lib/trigger/defaultTrigger.ts +++ b/lib/trigger/defaultTrigger.ts @@ -1,7 +1,8 @@ import { cooldownTrigger } from "./cooldownTrigger" import { changeOnFirstSuccess } from "./changeOnFirstSuccess" +import { successFailure } from "./successFailure" -export const defaultTrigger = changeOnFirstSuccess({ - beforeFirstSuccess: cooldownTrigger(0), - afterFirstSuccess: cooldownTrigger(30000), +export const defaultTrigger = successFailure({ + duringSuccess: cooldownTrigger(0), + duringError: cooldownTrigger(30000), }) diff --git a/lib/trigger/successFailure.ts b/lib/trigger/successFailure.ts new file mode 100644 index 0000000..1886402 --- /dev/null +++ b/lib/trigger/successFailure.ts @@ -0,0 +1,32 @@ +import { Trigger } from "." + +export function successFailure(o: { + duringSuccess: Trigger + duringError: Trigger +}): Trigger { + return async function* (getInput) { + while (true) { + const beforeSuccess = o.duringSuccess(getInput) + yield + let currentValue = getInput() + beforeSuccess.next() + for ( + let res = await beforeSuccess.next(); + currentValue?.lastResult !== "passing" && !res.done; + res = await beforeSuccess.next() + ) { + yield + currentValue = getInput() + } + const duringError = o.duringError(getInput) + for ( + let res = await duringError.next(); + currentValue?.lastResult === "passing" && !res.done; + res = await duringError.next() + ) { + yield + currentValue = getInput() + } + } + } +}