@steadlake/run 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,3 @@
1
- import type { Steppler } from "../../src/client.js";
2
- export declare function createHandler(client: Steppler): (req: Request) => Promise<Response>;
1
+ import type { Steadlake } from "../client.js";
2
+ export declare function createHandler(client: Steadlake): (req: Request) => Promise<Response>;
3
3
  //# sourceMappingURL=generic.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"generic.d.ts","sourceRoot":"","sources":["../../src/adapters/generic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAG7C,wBAAgB,aAAa,CAAC,MAAM,EAAE,QAAQ,uCAG7C"}
1
+ {"version":3,"file":"generic.d.ts","sourceRoot":"","sources":["../../src/adapters/generic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAG9C,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,uCAG9C"}
@@ -1,5 +1,5 @@
1
- import type { Steppler } from "../../src/client.js";
2
- export declare function createNextHandler(client: Steppler): {
1
+ import type { Steadlake } from "../client.js";
2
+ export declare function createNextHandler(client: Steadlake): {
3
3
  POST: (req: Request) => Promise<Response>;
4
4
  };
5
5
  //# sourceMappingURL=next.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"next.d.ts","sourceRoot":"","sources":["../../src/adapters/next.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAG7C,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,QAAQ;gBAG5B,OAAO;EAC5B"}
1
+ {"version":3,"file":"next.d.ts","sourceRoot":"","sources":["../../src/adapters/next.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAG9C,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS;gBAG7B,OAAO;EAC5B"}
@@ -1,3 +1,3 @@
1
- import { Steppler } from "../client.js";
2
- export declare function registerWithRetry(client: Steppler, attempts?: number): Promise<void>;
1
+ import type { Steadlake } from "../client.js";
2
+ export declare function registerWithRetry(client: Steadlake, attempts?: number): Promise<void>;
3
3
  //# sourceMappingURL=register.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/adapters/register.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,SAAI,iBAoBrE"}
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/adapters/register.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,SAAI,iBAoBtE"}
@@ -7,11 +7,11 @@ export async function registerWithRetry(client, attempts = 3) {
7
7
  catch (err) {
8
8
  const msg = err instanceof Error ? err.message : String(err);
9
9
  if (i === attempts) {
10
- console.error(`[steppler] Auto-registration failed after ${attempts} attempts: ${msg}. Tasks will not be dispatched by DEW until registration succeeds.`);
10
+ console.error(`[steadlake] Auto-registration failed after ${attempts} attempts: ${msg}. Tasks will not be dispatched by DEW until registration succeeds.`);
11
11
  return;
12
12
  }
13
13
  const delay = 1000 * 2 ** (i - 1);
14
- console.warn(`[steppler] Auto-registration attempt ${i} failed, retrying in ${delay}ms: ${msg}`);
14
+ console.warn(`[steadlake] Auto-registration attempt ${i} failed, retrying in ${delay}ms: ${msg}`);
15
15
  await new Promise((res) => setTimeout(res, delay));
16
16
  }
17
17
  }
package/dist/client.d.ts CHANGED
@@ -1,10 +1,12 @@
1
- import { Steppler as StepplerClient } from "@steppler/api";
2
- import type { Task, TaskConfig } from "../src/types.js";
3
- export declare class Steppler {
1
+ import { Steadlake as SteadlakeClient } from "@steadlake/core";
2
+ import type { Task, TaskConfig } from "./types.js";
3
+ export declare class Steadlake {
4
4
  _registry: Map<string, Task<unknown, unknown>>;
5
- _client: StepplerClient;
5
+ _client: SteadlakeClient;
6
6
  _signingSecret?: string;
7
7
  _projectId: string;
8
+ _apiUrl?: string;
9
+ _apiKey: string;
8
10
  _registrationLock: Promise<void> | null;
9
11
  _registrationComplete: boolean;
10
12
  constructor(config?: {
@@ -14,6 +16,9 @@ export declare class Steppler {
14
16
  projectId?: string;
15
17
  });
16
18
  task<TPayload = unknown, TResult = unknown>(config: TaskConfig<TPayload, TResult>): Task<TPayload, TResult>;
19
+ sendEvent(runId: string, event: string, data?: unknown): Promise<void>;
20
+ resolveApproval(runId: string, stepId: string, approved: boolean, approvedBy?: string): Promise<void>;
21
+ _api(method: string, path: string, body?: unknown): Promise<unknown>;
17
22
  _autoRegister(): Promise<void>;
18
23
  init(): Promise<void>;
19
24
  _createHandler(): (req: Request) => Promise<Response>;
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,eAAe,CAAC;AAG3D,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAOnD,qBAAa,QAAQ;IACpB,SAAS,sCAA6C;IACtD,OAAO,EAAE,cAAc,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAQ;IAC/C,qBAAqB,UAAS;gBAElB,MAAM,CAAC,EAAE;QACpB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,SAAS,CAAC,EAAE,MAAM,CAAC;KACnB;IA2BD,IAAI,CAAC,QAAQ,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,EACzC,MAAM,EAAE,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,GACnC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC;IAMpB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IA2D9B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,cAAc;CAGd"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,IAAI,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAG/D,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGnD,qBAAa,SAAS;IACrB,SAAS,sCAA6C;IACtD,OAAO,EAAE,eAAe,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAQ;IAC/C,qBAAqB,UAAS;gBAElB,MAAM,CAAC,EAAE;QACpB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,SAAS,CAAC,EAAE,MAAM,CAAC;KACnB;IA6BD,IAAI,CAAC,QAAQ,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,EACzC,MAAM,EAAE,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,GACnC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC;IAMpB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAItE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrG,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAcpE,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IA2D9B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,cAAc;CAGd"}
package/dist/client.js CHANGED
@@ -1,42 +1,66 @@
1
- import { Steppler as StepplerClient } from "@steppler/api";
1
+ import { Steadlake as SteadlakeClient } from "@steadlake/core";
2
2
  import { createHandler } from "./handler.js";
3
3
  import { createTask } from "./task.js";
4
- export class Steppler {
4
+ export class Steadlake {
5
5
  _registry = new Map();
6
6
  _client;
7
7
  _signingSecret;
8
8
  _projectId;
9
+ _apiUrl;
10
+ _apiKey;
9
11
  _registrationLock = null;
10
12
  _registrationComplete = false;
11
13
  constructor(config) {
12
- const apiKey = config?.apiKey ?? process.env.STEPPLER_API_KEY ?? "";
13
- const apiUrl = config?.apiUrl ?? process.env.STEPPLER_API_URL;
14
- const signingSecret = config?.signingSecret ?? process.env.STEPPLER_SIGNING_SECRET;
15
- const projectId = config?.projectId ?? process.env.STEPPLER_PROJECT_ID ?? "";
14
+ const apiKey = config?.apiKey ?? process.env.STEADLAKE_API_KEY ?? "";
15
+ const apiUrl = config?.apiUrl ?? process.env.STEADLAKE_API_URL;
16
+ const signingSecret = config?.signingSecret ?? process.env.STEADLAKE_SIGNING_SECRET;
17
+ const projectId = config?.projectId ?? process.env.STEADLAKE_PROJECT_ID ?? "";
16
18
  if (!apiKey) {
17
- console.warn("[steppler] No API key set — provide apiKey or set STEPPLER_API_KEY");
19
+ console.warn("[steadlake] No API key set — provide apiKey or set STEADLAKE_API_KEY");
18
20
  }
19
21
  if (!projectId) {
20
- console.warn("[steppler] No project ID set — provide projectId or set STEPPLER_PROJECT_ID");
22
+ console.warn("[steadlake] No project ID set — provide projectId or set STEADLAKE_PROJECT_ID");
21
23
  }
22
24
  if (!signingSecret) {
23
- console.warn("[steppler] No signing secret set — requests from DEW will not be verified. Set STEPPLER_SIGNING_SECRET in production.");
25
+ console.warn("[steadlake] No signing secret set — requests from DEW will not be verified. Set STEADLAKE_SIGNING_SECRET in production.");
24
26
  }
27
+ this._apiKey = apiKey;
28
+ this._apiUrl = apiUrl;
25
29
  this._signingSecret = signingSecret;
26
30
  this._projectId = projectId;
27
- this._client = new StepplerClient({
31
+ this._client = new SteadlakeClient({
28
32
  bearerAuth: apiKey,
29
33
  ...(apiUrl ? { serverURL: apiUrl } : {}),
30
34
  });
31
35
  }
32
36
  task(config) {
33
- const t = createTask(config, this._client);
37
+ const t = createTask(config, this._client, this);
34
38
  this._registry.set(config.id, t);
35
39
  return t;
36
40
  }
41
+ async sendEvent(runId, event, data) {
42
+ await this._api("POST", `/v1/runs/${runId}/events`, { event, data });
43
+ }
44
+ async resolveApproval(runId, stepId, approved, approvedBy) {
45
+ await this._api("POST", `/v1/runs/${runId}/approve`, { stepId, approved, approvedBy });
46
+ }
47
+ async _api(method, path, body) {
48
+ const baseUrl = this._apiUrl ?? "https://api.warplake.com";
49
+ const res = await fetch(`${baseUrl}${path}`, {
50
+ method,
51
+ headers: {
52
+ "Content-Type": "application/json",
53
+ Authorization: `Bearer ${this._apiKey}`,
54
+ },
55
+ body: body ? JSON.stringify(body) : undefined,
56
+ });
57
+ if (!res.ok)
58
+ throw new Error(`API ${method} ${path} failed: ${res.status}`);
59
+ return res.json();
60
+ }
37
61
  async _autoRegister() {
38
62
  if (!this._projectId) {
39
- console.warn("[steppler] No projectId set — skipping auto-registration");
63
+ console.warn("[steadlake] No projectId set — skipping auto-registration");
40
64
  return;
41
65
  }
42
66
  if (this._registrationLock) {
package/dist/errors.d.ts CHANGED
@@ -1,7 +1,10 @@
1
1
  export declare class FatalError extends Error {
2
2
  constructor(message: string);
3
3
  }
4
- export declare class StepplerError extends Error {
4
+ export declare class RetryableError extends Error {
5
+ constructor(message: string);
6
+ }
7
+ export declare class SteadlakeError extends Error {
5
8
  constructor(message: string);
6
9
  }
7
10
  //# sourceMappingURL=errors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,UAAW,SAAQ,KAAK;gBACxB,OAAO,EAAE,MAAM;CAI3B;AAED,qBAAa,aAAc,SAAQ,KAAK;gBAC3B,OAAO,EAAE,MAAM;CAI3B"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,UAAW,SAAQ,KAAK;gBACxB,OAAO,EAAE,MAAM;CAI3B;AAED,qBAAa,cAAe,SAAQ,KAAK;gBAC5B,OAAO,EAAE,MAAM;CAI3B;AAED,qBAAa,cAAe,SAAQ,KAAK;gBAC5B,OAAO,EAAE,MAAM;CAI3B"}
package/dist/errors.js CHANGED
@@ -4,9 +4,15 @@ export class FatalError extends Error {
4
4
  this.name = "FatalError";
5
5
  }
6
6
  }
7
- export class StepplerError extends Error {
7
+ export class RetryableError extends Error {
8
8
  constructor(message) {
9
9
  super(message);
10
- this.name = "StepplerError";
10
+ this.name = "RetryableError";
11
+ }
12
+ }
13
+ export class SteadlakeError extends Error {
14
+ constructor(message) {
15
+ super(message);
16
+ this.name = "SteadlakeError";
11
17
  }
12
18
  }
@@ -1 +1 @@
1
- {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../src/handler.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,wBAAgB,aAAa,CAC5B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,EAC7C,aAAa,CAAC,EAAE,MAAM,IAEO,KAAK,OAAO,KAAG,OAAO,CAAC,QAAQ,CAAC,CA6E7D"}
1
+ {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../src/handler.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAoB,MAAM,YAAY,CAAC;AAEzD,wBAAgB,aAAa,CAC5B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,EAC7C,aAAa,CAAC,EAAE,MAAM,IAEO,KAAK,OAAO,KAAG,OAAO,CAAC,QAAQ,CAAC,CA0E7D"}
package/dist/handler.js CHANGED
@@ -1,11 +1,11 @@
1
1
  import { createHmac } from "node:crypto";
2
- import { FatalError } from "./errors.js";
2
+ import { FatalError, RetryableError } from "./errors.js";
3
3
  import { createStepHelpers } from "./step.js";
4
4
  export function createHandler(registry, signingSecret) {
5
5
  return async function handle(req) {
6
6
  const body = await req.text();
7
7
  if (signingSecret) {
8
- const signature = req.headers.get("X-Steppler-Signature");
8
+ const signature = req.headers.get("X-Steadlake-Signature");
9
9
  const expected = `sha256=${sign(body, signingSecret)}`;
10
10
  if (signature !== expected) {
11
11
  return new Response("Unauthorized", { status: 401 });
@@ -21,41 +21,44 @@ export function createHandler(registry, signingSecret) {
21
21
  const { runId, handler, payload, attempt = 1, state = {} } = parsed;
22
22
  const task = registry.get(handler);
23
23
  if (!task) {
24
- return new Response(`No handler registered for "${handler}"`, {
25
- status: 404,
26
- });
24
+ return new Response(`No handler registered for "${handler}"`, { status: 404 });
27
25
  }
28
26
  if (task._config.schema) {
29
27
  const result = task._config.schema.safeParse(payload);
30
28
  if (!result.success) {
31
- return new Response(JSON.stringify({
32
- error: "Payload validation failed",
33
- issues: result.error.issues,
34
- }), { status: 400, headers: { "Content-Type": "application/json" } });
29
+ return Response.json({ error: "Payload validation failed", issues: result.error.issues }, { status: 400 });
35
30
  }
36
31
  }
37
32
  const pendingEvents = [];
38
- const step = createStepHelpers(state, pendingEvents);
33
+ const emittedEvents = [];
34
+ const step = createStepHelpers(state, pendingEvents, emittedEvents, task._config.hooks);
39
35
  try {
40
36
  const result = await task._config.run({ payload, runId, attempt, step });
41
- return Response.json({
42
- result,
43
- events: pendingEvents,
44
- }, { status: 200 });
37
+ task._config.hooks?.onComplete?.(result);
38
+ return Response.json({ result, events: pendingEvents, emittedEvents }, { status: 200 });
45
39
  }
46
40
  catch (err) {
47
- if (typeof err === "object" && err !== null && "__steppler_suspend" in err) {
48
- const suspension = err;
49
- return Response.json({ suspend: true, resumeAt: suspension.resumeAt, events: pendingEvents }, { status: 202 });
41
+ if (isSuspension(err)) {
42
+ task._config.hooks?.onSuspend?.(err.step, err.reason);
43
+ return Response.json({ suspend: true, step: err.step, reason: err.reason, events: pendingEvents, emittedEvents }, { status: 202 });
50
44
  }
51
45
  if (err instanceof FatalError) {
46
+ task._config.hooks?.onError?.(err, attempt);
52
47
  return Response.json({ error: err.message, runId, fatal: true }, { status: 400 });
53
48
  }
49
+ if (err instanceof RetryableError) {
50
+ task._config.hooks?.onError?.(err, attempt);
51
+ return Response.json({ error: err.message, runId, fatal: false, retryable: true }, { status: 500 });
52
+ }
54
53
  const message = err instanceof Error ? err.message : String(err);
54
+ task._config.hooks?.onError?.(err instanceof Error ? err : new Error(message), attempt);
55
55
  return Response.json({ error: message, runId, fatal: false }, { status: 500 });
56
56
  }
57
57
  };
58
58
  }
59
+ function isSuspension(err) {
60
+ return typeof err === "object" && err !== null && "__steadlake_suspend" in err;
61
+ }
59
62
  function sign(body, secret) {
60
63
  return createHmac("sha256", secret).update(body).digest("hex");
61
64
  }
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- export { createHandler } from "../src/adapters/generic.js";
2
- export { createNextHandler } from "../src/adapters/next.js";
3
- export { Steppler } from "../src/client.js";
4
- export { FatalError } from "../src/errors.js";
5
- export type { Run, RunContext, RunResult, StepHelpers, Task, TaskConfig, TriggerOptions, } from "../src/types.js";
1
+ export { createHandler } from "./adapters/generic.js";
2
+ export { createNextHandler } from "./adapters/next.js";
3
+ export { Steadlake } from "./client.js";
4
+ export { FatalError, RetryableError, SteadlakeError } from "./errors.js";
5
+ export type { Run, RunContext, RunResult, RunStatus, StepHelpers, SuspendReason, SuspensionSignal, Task, TaskConfig, TaskHooks, TriggerOptions, } from "./types.js";
6
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,YAAY,EACX,GAAG,EACH,UAAU,EACV,SAAS,EACT,WAAW,EACX,IAAI,EACJ,UAAU,EACV,cAAc,GACd,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACzE,YAAY,EACX,GAAG,EACH,UAAU,EACV,SAAS,EACT,SAAS,EACT,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,IAAI,EACJ,UAAU,EACV,SAAS,EACT,cAAc,GACd,MAAM,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
1
  export { createHandler } from "./adapters/generic.js";
2
2
  export { createNextHandler } from "./adapters/next.js";
3
- export { Steppler } from "./client.js";
4
- export { FatalError } from "./errors.js";
3
+ export { Steadlake } from "./client.js";
4
+ export { FatalError, RetryableError, SteadlakeError } from "./errors.js";
package/dist/step.d.ts CHANGED
@@ -1,7 +1,11 @@
1
- import type { StepHelpers } from "./types.js";
1
+ import type { StepHelpers, TaskHooks } from "./types.js";
2
2
  export type PendingEvent = {
3
3
  type: string;
4
4
  metadata: Record<string, unknown>;
5
5
  };
6
- export declare function createStepHelpers(state: Record<string, unknown>, pendingEvents: PendingEvent[]): StepHelpers;
6
+ export type EmittedEvent = {
7
+ event: string;
8
+ data: unknown;
9
+ };
10
+ export declare function createStepHelpers(state: Record<string, unknown>, pendingEvents: PendingEvent[], emittedEvents: EmittedEvent[], hooks?: TaskHooks): StepHelpers;
7
11
  //# sourceMappingURL=step.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"step.d.ts","sourceRoot":"","sources":["../src/step.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,MAAM,YAAY,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC,CAAC;AAEF,wBAAgB,iBAAiB,CAChC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,aAAa,EAAE,YAAY,EAAE,GAC3B,WAAW,CA+Bb"}
1
+ {"version":3,"file":"step.d.ts","sourceRoot":"","sources":["../src/step.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAmC,SAAS,EAAE,MAAM,YAAY,CAAC;AAE1F,MAAM,MAAM,YAAY,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;CACd,CAAC;AAMF,wBAAgB,iBAAiB,CAChC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,aAAa,EAAE,YAAY,EAAE,EAC7B,aAAa,EAAE,YAAY,EAAE,EAC7B,KAAK,CAAC,EAAE,SAAS,GACf,WAAW,CA4Cb"}
package/dist/step.js CHANGED
@@ -1,15 +1,18 @@
1
- export function createStepHelpers(state, pendingEvents) {
1
+ function suspend(step, reason) {
2
+ throw { __steadlake_suspend: true, step, reason };
3
+ }
4
+ export function createStepHelpers(state, pendingEvents, emittedEvents, hooks) {
2
5
  return {
3
6
  async run(id, fn) {
4
- if (id in state) {
7
+ if (id in state)
5
8
  return state[id];
6
- }
9
+ // Persist step_started BEFORE executing fn — protects against double-execution
10
+ // on replay if process crashes mid-step (at-least-once guarantee)
7
11
  pendingEvents.push({ type: "step_started", metadata: { step: id } });
8
12
  const output = await fn();
9
- pendingEvents.push({
10
- type: "step_completed",
11
- metadata: { step: id, output },
12
- });
13
+ pendingEvents.push({ type: "step_completed", metadata: { step: id, output } });
14
+ state[id] = output;
15
+ hooks?.onStepComplete?.(id, output);
13
16
  return output;
14
17
  },
15
18
  async sleep(id, duration) {
@@ -17,26 +20,35 @@ export function createStepHelpers(state, pendingEvents) {
17
20
  return;
18
21
  const ms = parseDuration(duration);
19
22
  const resumeAt = new Date(Date.now() + ms).toISOString();
20
- pendingEvents.push({
21
- type: "step_completed",
22
- metadata: { step: id, output: null },
23
- });
24
- throw { __steppler_suspend: true, resumeAt, step: id };
23
+ pendingEvents.push({ type: "step_completed", metadata: { step: id, output: null } });
24
+ suspend(id, { type: "sleep", resumeAt });
25
+ },
26
+ async sleepUntil(id, date) {
27
+ if (id in state)
28
+ return;
29
+ const resumeAt = typeof date === "string" ? date : date.toISOString();
30
+ pendingEvents.push({ type: "step_completed", metadata: { step: id, output: null } });
31
+ suspend(id, { type: "sleepUntil", resumeAt });
32
+ },
33
+ async waitForEvent(id, opts) {
34
+ if (id in state)
35
+ return state[id];
36
+ suspend(id, { type: "waitForEvent", event: opts.event, timeout: opts.timeout });
37
+ },
38
+ async approve(id, opts) {
39
+ if (id in state)
40
+ return state[id];
41
+ suspend(id, { type: "approve", title: opts?.title, timeout: opts?.timeout });
42
+ },
43
+ emit(event, data) {
44
+ emittedEvents.push({ event, data });
25
45
  },
26
46
  };
27
47
  }
28
48
  function parseDuration(duration) {
29
- const units = {
30
- ms: 1,
31
- s: 1000,
32
- m: 60_000,
33
- h: 3_600_000,
34
- d: 86_400_000,
35
- };
49
+ const units = { ms: 1, s: 1000, m: 60_000, h: 3_600_000, d: 86_400_000 };
36
50
  const match = duration.match(/^(\d+)(ms|s|m|h|d)$/);
37
51
  if (!match)
38
52
  throw new Error(`Invalid duration format: "${duration}". Use e.g. "30s", "5m", "2h"`);
39
- const value = parseInt(match[1], 10);
40
- const unit = match[2];
41
- return value * units[unit];
53
+ return parseInt(match[1], 10) * units[match[2]];
42
54
  }
package/dist/task.d.ts CHANGED
@@ -1,4 +1,5 @@
1
- import type { Steppler as StepplerClient } from "@steppler/api";
1
+ import type { Steadlake as SteadlakeClient } from "@steadlake/core";
2
2
  import type { Task, TaskConfig } from "./types.js";
3
- export declare function createTask<TPayload, TResult>(config: TaskConfig<TPayload, TResult>, client: StepplerClient): Task<TPayload, TResult>;
3
+ import type { Steadlake } from "./client.js";
4
+ export declare function createTask<TPayload, TResult>(config: TaskConfig<TPayload, TResult>, client: SteadlakeClient, steadlake: Steadlake): Task<TPayload, TResult>;
4
5
  //# sourceMappingURL=task.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../src/task.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,KAAK,EAAkB,IAAI,EAAE,UAAU,EAAkB,MAAM,YAAY,CAAC;AAOnF,wBAAgB,UAAU,CAAC,QAAQ,EAAE,OAAO,EAC3C,MAAM,EAAE,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,EACrC,MAAM,EAAE,cAAc,GACpB,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CA6EzB"}
1
+ {"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../src/task.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,IAAI,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACpE,OAAO,KAAK,EAAkB,IAAI,EAAE,UAAU,EAAkB,MAAM,YAAY,CAAC;AAEnF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAM7C,wBAAgB,UAAU,CAAC,QAAQ,EAAE,OAAO,EAC3C,MAAM,EAAE,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,EACrC,MAAM,EAAE,eAAe,EACvB,SAAS,EAAE,SAAS,GAClB,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAoFzB"}
package/dist/task.js CHANGED
@@ -1,8 +1,8 @@
1
- import { StepplerError } from "./errors.js";
1
+ import { SteadlakeError } from "./errors.js";
2
2
  function sleep(ms) {
3
3
  return new Promise((res) => setTimeout(res, ms));
4
4
  }
5
- export function createTask(config, client) {
5
+ export function createTask(config, client, steadlake) {
6
6
  return {
7
7
  id: config.id,
8
8
  _config: config,
@@ -22,7 +22,7 @@ export function createTask(config, client) {
22
22
  }
23
23
  catch (err) {
24
24
  const msg = err instanceof Error ? err.message : String(err);
25
- throw new StepplerError(`Failed to trigger task "${config.id}": ${msg}. Check your STEPPLER_API_KEY and network connectivity.`);
25
+ throw new SteadlakeError(`Failed to trigger task "${config.id}": ${msg}. Check your STEADLAKE_API_KEY and network connectivity.`);
26
26
  }
27
27
  return {
28
28
  id: run.id,
@@ -35,9 +35,12 @@ export function createTask(config, client) {
35
35
  }
36
36
  catch (err) {
37
37
  const msg = err instanceof Error ? err.message : String(err);
38
- throw new StepplerError(`Failed to cancel run "${run.id}": ${msg}`);
38
+ throw new SteadlakeError(`Failed to cancel run "${run.id}": ${msg}`);
39
39
  }
40
40
  },
41
+ sendEvent: async (event, data) => {
42
+ await steadlake.sendEvent(run.id, event, data);
43
+ },
41
44
  };
42
45
  },
43
46
  async triggerAndWait(payload, options = {}) {
@@ -45,13 +48,13 @@ export function createTask(config, client) {
45
48
  const deadline = options.timeoutMs ? Date.now() + options.timeoutMs : null;
46
49
  while (true) {
47
50
  if (deadline && Date.now() > deadline) {
48
- throw new StepplerError(`triggerAndWait timed out after ${options.timeoutMs}ms (run ${run.id} still running)`);
51
+ throw new SteadlakeError(`triggerAndWait timed out after ${options.timeoutMs}ms (run ${run.id} is ${run.status})`);
49
52
  }
50
53
  let status;
51
54
  try {
52
55
  status = await client.runs.status({ id: run.id });
53
56
  }
54
- catch (err) {
57
+ catch {
55
58
  await sleep(1000 + Math.random() * 500);
56
59
  continue;
57
60
  }
@@ -64,7 +67,11 @@ export function createTask(config, client) {
64
67
  finishedAt: status.finishedAt ?? null,
65
68
  };
66
69
  }
67
- await sleep(800 + Math.random() * 500);
70
+ // pending, running, suspended keep polling, but back off more for suspended
71
+ const pollInterval = status.status === "suspended"
72
+ ? 5000 + Math.random() * 1000
73
+ : 800 + Math.random() * 500;
74
+ await sleep(pollInterval);
68
75
  }
69
76
  },
70
77
  };
package/dist/types.d.ts CHANGED
@@ -1,11 +1,12 @@
1
1
  import type { ZodSchema } from "zod";
2
- export type RunStatus = "pending" | "running" | "success" | "failed";
2
+ export type RunStatus = "pending" | "running" | "suspended" | "success" | "failed";
3
3
  export type Run = {
4
4
  id: string;
5
5
  status: RunStatus;
6
6
  triggerId: string;
7
7
  createdAt: string;
8
8
  cancel: () => Promise<void>;
9
+ sendEvent: (event: string, data?: unknown) => Promise<void>;
9
10
  };
10
11
  export type RunResult = {
11
12
  id: string;
@@ -25,6 +26,19 @@ export type TriggerOptions = {
25
26
  export type StepHelpers = {
26
27
  run: <T>(id: string, fn: () => Promise<T>) => Promise<T>;
27
28
  sleep: (id: string, duration: string) => Promise<void>;
29
+ sleepUntil: (id: string, date: Date | string) => Promise<void>;
30
+ waitForEvent: <T = unknown>(id: string, opts: {
31
+ event: string;
32
+ timeout?: string;
33
+ }) => Promise<T>;
34
+ approve: (id: string, opts?: {
35
+ title?: string;
36
+ timeout?: string;
37
+ }) => Promise<{
38
+ approved: boolean;
39
+ approvedBy?: string;
40
+ }>;
41
+ emit: (event: string, data: unknown) => void;
28
42
  };
29
43
  export type RunContext<TPayload = unknown> = {
30
44
  payload: TPayload;
@@ -32,6 +46,12 @@ export type RunContext<TPayload = unknown> = {
32
46
  attempt: number;
33
47
  step: StepHelpers;
34
48
  };
49
+ export type TaskHooks = {
50
+ onStepComplete?: (stepId: string, result: unknown) => void;
51
+ onSuspend?: (stepId: string, reason: SuspendReason) => void;
52
+ onComplete?: (result: unknown) => void;
53
+ onError?: (error: Error, attempt: number) => void;
54
+ };
35
55
  export type TaskConfig<TPayload = unknown, TResult = unknown> = {
36
56
  id: string;
37
57
  name?: string;
@@ -56,6 +76,7 @@ export type TaskConfig<TPayload = unknown, TResult = unknown> = {
56
76
  maxTimeoutInMs?: number;
57
77
  };
58
78
  timeout?: number;
79
+ hooks?: TaskHooks;
59
80
  run: (context: RunContext<TPayload>) => Promise<TResult>;
60
81
  };
61
82
  export type Task<TPayload = unknown, TResult = unknown> = {
@@ -64,4 +85,24 @@ export type Task<TPayload = unknown, TResult = unknown> = {
64
85
  trigger: (payload: TPayload, options?: TriggerOptions) => Promise<Run>;
65
86
  triggerAndWait: (payload: TPayload, options?: TriggerOptions) => Promise<RunResult>;
66
87
  };
88
+ export type SuspendReason = {
89
+ type: "sleep";
90
+ resumeAt: string;
91
+ } | {
92
+ type: "sleepUntil";
93
+ resumeAt: string;
94
+ } | {
95
+ type: "waitForEvent";
96
+ event: string;
97
+ timeout?: string;
98
+ } | {
99
+ type: "approve";
100
+ title?: string;
101
+ timeout?: string;
102
+ };
103
+ export type SuspensionSignal = {
104
+ __steadlake_suspend: true;
105
+ step: string;
106
+ reason: SuspendReason;
107
+ };
67
108
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "name": "@steadlake/run",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
+ "description": "Durable task execution SDK for Steadlake — define tasks with steps, retries, scheduling, and event-driven workflows.",
4
5
  "files": [
5
6
  "dist"
6
7
  ],
@@ -31,11 +32,11 @@
31
32
  "format:check": "oxfmt --check ."
32
33
  },
33
34
  "dependencies": {
34
- "@steppler/api": "^0.2.5",
35
+ "@steadlake/core": "^0.3.2",
35
36
  "oxfmt": "^0.44.0"
36
37
  },
37
38
  "devDependencies": {
38
- "@types/node": "^25.5.2",
39
- "typescript": "^6.0.2"
39
+ "@types/node": "^25.9.3",
40
+ "typescript": "^6.0.3"
40
41
  }
41
42
  }