@devramps/sdk-typescript 0.1.0

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.
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PollingStep = void 0;
4
+ const base_step_1 = require("./base-step");
5
+ /**
6
+ * A polling step for long-running operations that need status checks.
7
+ *
8
+ * Users extend this class and implement:
9
+ * - `trigger(params)` - Start the operation, return initial polling state
10
+ * - `poll(params, pollingState)` - Check status, return POLL_AGAIN, SUCCESS, or FAILED
11
+ *
12
+ * Optionally override `prepare` to require approval before triggering.
13
+ *
14
+ * @typeParam TParams - The input parameters type (validated by schema)
15
+ * @typeParam TPollingState - The polling state type passed between poll calls
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * type JobParams = { target: string };
20
+ * type JobPollingState = { jobId: string; startedAt: number };
21
+ *
22
+ * @Step({ name: "Long Job", type: "long-job", schema: jobSchema })
23
+ * class LongJobStep extends PollingStep<JobParams, JobPollingState> {
24
+ * async trigger(params: JobParams): Promise<TriggerOutput<JobPollingState>> {
25
+ * const jobId = await startJob(params);
26
+ * return StepOutputs.triggered({ jobId, startedAt: Date.now() });
27
+ * }
28
+ *
29
+ * async poll(params: JobParams, state: JobPollingState): Promise<PollOutput<JobPollingState>> {
30
+ * const status = await checkJob(state.jobId);
31
+ * if (status === "running") {
32
+ * return StepOutputs.pollAgain(state, 5000);
33
+ * }
34
+ * return StepOutputs.success({ result: status });
35
+ * }
36
+ * }
37
+ * ```
38
+ *
39
+ * @example With approval
40
+ * ```typescript
41
+ * @Step({ name: "Dangerous Job", type: "dangerous-job", schema: dangerousSchema })
42
+ * class DangerousJobStep extends PollingStep<DangerousParams, DangerousPollingState> {
43
+ * async prepare(params: DangerousParams): Promise<PrepareOutput> {
44
+ * return StepOutputs.approvalRequired({
45
+ * message: `Run dangerous job on ${params.target}?`,
46
+ * });
47
+ * }
48
+ *
49
+ * async trigger(params: DangerousParams, approval: ApprovalContext): Promise<TriggerOutput<DangerousPollingState>> {
50
+ * const jobId = await startDangerousJob(params);
51
+ * return StepOutputs.triggered({ jobId });
52
+ * }
53
+ *
54
+ * async poll(params: DangerousParams, state: DangerousPollingState): Promise<PollOutput<DangerousPollingState>> {
55
+ * // ... check status
56
+ * }
57
+ * }
58
+ * ```
59
+ */
60
+ class PollingStep extends base_step_1.BaseStep {
61
+ /**
62
+ * Called by the registry to execute the trigger phase.
63
+ * @internal
64
+ */
65
+ async executeTrigger(params, approval) {
66
+ return this.trigger(params, approval);
67
+ }
68
+ /**
69
+ * Called by the registry to execute the poll phase.
70
+ * @internal
71
+ */
72
+ async executePoll(params, pollingState) {
73
+ return this.poll(params, pollingState);
74
+ }
75
+ getMetadata() {
76
+ throw new Error("getMetadata not implemented. Did you forget to add the @Step decorator?");
77
+ }
78
+ }
79
+ exports.PollingStep = PollingStep;
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9sbGluZy1zdGVwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jhc2UvcG9sbGluZy1zdGVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLDJDQUF1QztBQVF2Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0RHO0FBQ0gsTUFBc0IsV0FHcEIsU0FBUSxvQkFBaUI7SUF1QnpCOzs7T0FHRztJQUNILEtBQUssQ0FBQyxjQUFjLENBQ2xCLE1BQWUsRUFDZixRQUEwQjtRQUUxQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsV0FBVyxDQUNmLE1BQWUsRUFDZixZQUEyQjtRQUUzQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxXQUFXO1FBQ1QsTUFBTSxJQUFJLEtBQUssQ0FDYix5RUFBeUUsQ0FDMUUsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQXJERCxrQ0FxREMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFN0ZXBNZXRhZGF0YSB9IGZyb20gXCIuL2Jhc2Utc3RlcFwiO1xuaW1wb3J0IHsgQmFzZVN0ZXAgfSBmcm9tIFwiLi9iYXNlLXN0ZXBcIjtcbmltcG9ydCB0eXBlIHtcbiAgQXBwcm92YWxDb250ZXh0LFxuICBQb2xsT3V0cHV0LFxuICBTdGVwT3V0cHV0LFxuICBUcmlnZ2VyT3V0cHV0LFxufSBmcm9tIFwiLi4vb3V0cHV0L3N0ZXAtb3V0cHV0XCI7XG5cbi8qKlxuICogQSBwb2xsaW5nIHN0ZXAgZm9yIGxvbmctcnVubmluZyBvcGVyYXRpb25zIHRoYXQgbmVlZCBzdGF0dXMgY2hlY2tzLlxuICpcbiAqIFVzZXJzIGV4dGVuZCB0aGlzIGNsYXNzIGFuZCBpbXBsZW1lbnQ6XG4gKiAtIGB0cmlnZ2VyKHBhcmFtcylgIC0gU3RhcnQgdGhlIG9wZXJhdGlvbiwgcmV0dXJuIGluaXRpYWwgcG9sbGluZyBzdGF0ZVxuICogLSBgcG9sbChwYXJhbXMsIHBvbGxpbmdTdGF0ZSlgIC0gQ2hlY2sgc3RhdHVzLCByZXR1cm4gUE9MTF9BR0FJTiwgU1VDQ0VTUywgb3IgRkFJTEVEXG4gKlxuICogT3B0aW9uYWxseSBvdmVycmlkZSBgcHJlcGFyZWAgdG8gcmVxdWlyZSBhcHByb3ZhbCBiZWZvcmUgdHJpZ2dlcmluZy5cbiAqXG4gKiBAdHlwZVBhcmFtIFRQYXJhbXMgLSBUaGUgaW5wdXQgcGFyYW1ldGVycyB0eXBlICh2YWxpZGF0ZWQgYnkgc2NoZW1hKVxuICogQHR5cGVQYXJhbSBUUG9sbGluZ1N0YXRlIC0gVGhlIHBvbGxpbmcgc3RhdGUgdHlwZSBwYXNzZWQgYmV0d2VlbiBwb2xsIGNhbGxzXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHR5cGUgSm9iUGFyYW1zID0geyB0YXJnZXQ6IHN0cmluZyB9O1xuICogdHlwZSBKb2JQb2xsaW5nU3RhdGUgPSB7IGpvYklkOiBzdHJpbmc7IHN0YXJ0ZWRBdDogbnVtYmVyIH07XG4gKlxuICogQFN0ZXAoeyBuYW1lOiBcIkxvbmcgSm9iXCIsIHR5cGU6IFwibG9uZy1qb2JcIiwgc2NoZW1hOiBqb2JTY2hlbWEgfSlcbiAqIGNsYXNzIExvbmdKb2JTdGVwIGV4dGVuZHMgUG9sbGluZ1N0ZXA8Sm9iUGFyYW1zLCBKb2JQb2xsaW5nU3RhdGU+IHtcbiAqICAgYXN5bmMgdHJpZ2dlcihwYXJhbXM6IEpvYlBhcmFtcyk6IFByb21pc2U8VHJpZ2dlck91dHB1dDxKb2JQb2xsaW5nU3RhdGU+PiB7XG4gKiAgICAgY29uc3Qgam9iSWQgPSBhd2FpdCBzdGFydEpvYihwYXJhbXMpO1xuICogICAgIHJldHVybiBTdGVwT3V0cHV0cy50cmlnZ2VyZWQoeyBqb2JJZCwgc3RhcnRlZEF0OiBEYXRlLm5vdygpIH0pO1xuICogICB9XG4gKlxuICogICBhc3luYyBwb2xsKHBhcmFtczogSm9iUGFyYW1zLCBzdGF0ZTogSm9iUG9sbGluZ1N0YXRlKTogUHJvbWlzZTxQb2xsT3V0cHV0PEpvYlBvbGxpbmdTdGF0ZT4+IHtcbiAqICAgICBjb25zdCBzdGF0dXMgPSBhd2FpdCBjaGVja0pvYihzdGF0ZS5qb2JJZCk7XG4gKiAgICAgaWYgKHN0YXR1cyA9PT0gXCJydW5uaW5nXCIpIHtcbiAqICAgICAgIHJldHVybiBTdGVwT3V0cHV0cy5wb2xsQWdhaW4oc3RhdGUsIDUwMDApO1xuICogICAgIH1cbiAqICAgICByZXR1cm4gU3RlcE91dHB1dHMuc3VjY2Vzcyh7IHJlc3VsdDogc3RhdHVzIH0pO1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZSBXaXRoIGFwcHJvdmFsXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBAU3RlcCh7IG5hbWU6IFwiRGFuZ2Vyb3VzIEpvYlwiLCB0eXBlOiBcImRhbmdlcm91cy1qb2JcIiwgc2NoZW1hOiBkYW5nZXJvdXNTY2hlbWEgfSlcbiAqIGNsYXNzIERhbmdlcm91c0pvYlN0ZXAgZXh0ZW5kcyBQb2xsaW5nU3RlcDxEYW5nZXJvdXNQYXJhbXMsIERhbmdlcm91c1BvbGxpbmdTdGF0ZT4ge1xuICogICBhc3luYyBwcmVwYXJlKHBhcmFtczogRGFuZ2Vyb3VzUGFyYW1zKTogUHJvbWlzZTxQcmVwYXJlT3V0cHV0PiB7XG4gKiAgICAgcmV0dXJuIFN0ZXBPdXRwdXRzLmFwcHJvdmFsUmVxdWlyZWQoe1xuICogICAgICAgbWVzc2FnZTogYFJ1biBkYW5nZXJvdXMgam9iIG9uICR7cGFyYW1zLnRhcmdldH0/YCxcbiAqICAgICB9KTtcbiAqICAgfVxuICpcbiAqICAgYXN5bmMgdHJpZ2dlcihwYXJhbXM6IERhbmdlcm91c1BhcmFtcywgYXBwcm92YWw6IEFwcHJvdmFsQ29udGV4dCk6IFByb21pc2U8VHJpZ2dlck91dHB1dDxEYW5nZXJvdXNQb2xsaW5nU3RhdGU+PiB7XG4gKiAgICAgY29uc3Qgam9iSWQgPSBhd2FpdCBzdGFydERhbmdlcm91c0pvYihwYXJhbXMpO1xuICogICAgIHJldHVybiBTdGVwT3V0cHV0cy50cmlnZ2VyZWQoeyBqb2JJZCB9KTtcbiAqICAgfVxuICpcbiAqICAgYXN5bmMgcG9sbChwYXJhbXM6IERhbmdlcm91c1BhcmFtcywgc3RhdGU6IERhbmdlcm91c1BvbGxpbmdTdGF0ZSk6IFByb21pc2U8UG9sbE91dHB1dDxEYW5nZXJvdXNQb2xsaW5nU3RhdGU+PiB7XG4gKiAgICAgLy8gLi4uIGNoZWNrIHN0YXR1c1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFBvbGxpbmdTdGVwPFxuICBUUGFyYW1zLFxuICBUUG9sbGluZ1N0YXRlIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuPiBleHRlbmRzIEJhc2VTdGVwPFRQYXJhbXM+IHtcbiAgLyoqXG4gICAqIFN0YXJ0IHRoZSBsb25nLXJ1bm5pbmcgb3BlcmF0aW9uLlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHZhbGlkYXRlZCBpbnB1dCBwYXJhbWV0ZXJzXG4gICAqIEBwYXJhbSBhcHByb3ZhbCAtIEFwcHJvdmFsIGNvbnRleHQgaWYgdGhpcyBzdGVwIHJlcXVpcmVzIGFwcHJvdmFsIChoYXMgcHJlcGFyZSBtZXRob2QpXG4gICAqIEByZXR1cm5zIFRSSUdHRVJFRCB3aXRoIGluaXRpYWwgcG9sbGluZyBzdGF0ZSwgb3IgRkFJTEVEXG4gICAqL1xuICBhYnN0cmFjdCB0cmlnZ2VyKFxuICAgIHBhcmFtczogVFBhcmFtcyxcbiAgICBhcHByb3ZhbD86IEFwcHJvdmFsQ29udGV4dFxuICApOiBQcm9taXNlPFRyaWdnZXJPdXRwdXQ8VFBvbGxpbmdTdGF0ZT4+O1xuXG4gIC8qKlxuICAgKiBDaGVjayB0aGUgc3RhdHVzIG9mIHRoZSBvcGVyYXRpb24uXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgb3JpZ2luYWwgaW5wdXQgcGFyYW1ldGVyc1xuICAgKiBAcGFyYW0gcG9sbGluZ1N0YXRlIC0gU3RhdGUgZnJvbSBwcmV2aW91cyB0cmlnZ2VyKCkgb3IgcG9sbCgpIGNhbGxcbiAgICogQHJldHVybnMgUE9MTF9BR0FJTiB3aXRoIHVwZGF0ZWQgc3RhdGUsIFNVQ0NFU1MsIG9yIEZBSUxFRFxuICAgKi9cbiAgYWJzdHJhY3QgcG9sbChcbiAgICBwYXJhbXM6IFRQYXJhbXMsXG4gICAgcG9sbGluZ1N0YXRlOiBUUG9sbGluZ1N0YXRlXG4gICk6IFByb21pc2U8UG9sbE91dHB1dDxUUG9sbGluZ1N0YXRlPj47XG5cbiAgLyoqXG4gICAqIENhbGxlZCBieSB0aGUgcmVnaXN0cnkgdG8gZXhlY3V0ZSB0aGUgdHJpZ2dlciBwaGFzZS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBhc3luYyBleGVjdXRlVHJpZ2dlcihcbiAgICBwYXJhbXM6IFRQYXJhbXMsXG4gICAgYXBwcm92YWw/OiBBcHByb3ZhbENvbnRleHRcbiAgKTogUHJvbWlzZTxTdGVwT3V0cHV0PiB7XG4gICAgcmV0dXJuIHRoaXMudHJpZ2dlcihwYXJhbXMsIGFwcHJvdmFsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgYnkgdGhlIHJlZ2lzdHJ5IHRvIGV4ZWN1dGUgdGhlIHBvbGwgcGhhc2UuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgYXN5bmMgZXhlY3V0ZVBvbGwoXG4gICAgcGFyYW1zOiBUUGFyYW1zLFxuICAgIHBvbGxpbmdTdGF0ZTogVFBvbGxpbmdTdGF0ZVxuICApOiBQcm9taXNlPFN0ZXBPdXRwdXQ+IHtcbiAgICByZXR1cm4gdGhpcy5wb2xsKHBhcmFtcywgcG9sbGluZ1N0YXRlKTtcbiAgfVxuXG4gIGdldE1ldGFkYXRhKCk6IFN0ZXBNZXRhZGF0YSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJnZXRNZXRhZGF0YSBub3QgaW1wbGVtZW50ZWQuIERpZCB5b3UgZm9yZ2V0IHRvIGFkZCB0aGUgQFN0ZXAgZGVjb3JhdG9yP1wiXG4gICAgKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,5 @@
1
+ import { BaseStep } from "./base-step";
2
+ export declare abstract class RequiresApprovalStep<T> extends BaseStep<T> {
3
+ abstract run(): Promise<void>;
4
+ abstract runAfterApproval(): Promise<void>;
5
+ }
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RequiresApprovalStep = void 0;
4
+ const base_step_1 = require("./base-step");
5
+ class RequiresApprovalStep extends base_step_1.BaseStep {
6
+ }
7
+ exports.RequiresApprovalStep = RequiresApprovalStep;
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWlyZXMtYXBwcm92YWwtc3RlcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iYXNlL3JlcXVpcmVzLWFwcHJvdmFsLXN0ZXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkNBQXVDO0FBRXZDLE1BQXNCLG9CQUF3QixTQUFRLG9CQUFXO0NBR2hFO0FBSEQsb0RBR0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlU3RlcCB9IGZyb20gXCIuL2Jhc2Utc3RlcFwiO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUmVxdWlyZXNBcHByb3ZhbFN0ZXA8VD4gZXh0ZW5kcyBCYXNlU3RlcDxUPiB7XG4gIGFic3RyYWN0IHJ1bigpOiBQcm9taXNlPHZvaWQ+O1xuICBhYnN0cmFjdCBydW5BZnRlckFwcHJvdmFsKCk6IFByb21pc2U8dm9pZD47XG59XG4iXX0=
@@ -0,0 +1,51 @@
1
+ import type { StepMetadata } from "./base-step";
2
+ import { BaseStep } from "./base-step";
3
+ import type { ApprovalContext, RunOutput, StepOutput } from "../output/step-output";
4
+ /**
5
+ * A simple step that runs once with the provided params.
6
+ *
7
+ * Users extend this class and implement the `run` method.
8
+ * Optionally override `prepare` to require approval before execution.
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * @Step({ name: "Deploy", type: "deploy", schema: deploySchema })
13
+ * class DeployStep extends SimpleStep<DeployParams> {
14
+ * async run(params: DeployParams): Promise<RunOutput> {
15
+ * this.logger.info("Deploying", { target: params.target });
16
+ * return StepOutputs.success({ deploymentId: "123" });
17
+ * }
18
+ * }
19
+ * ```
20
+ *
21
+ * @example With approval
22
+ * ```typescript
23
+ * @Step({ name: "Delete User", type: "delete-user", schema: deleteUserSchema })
24
+ * class DeleteUserStep extends SimpleStep<DeleteUserParams> {
25
+ * async prepare(params: DeleteUserParams): Promise<PrepareOutput> {
26
+ * return StepOutputs.approvalRequired({
27
+ * message: `Delete user ${params.userId}?`,
28
+ * });
29
+ * }
30
+ *
31
+ * async run(params: DeleteUserParams, approval: ApprovalContext): Promise<RunOutput> {
32
+ * this.logger.info("Deleting user", { approvedBy: approval.approverId });
33
+ * return StepOutputs.success();
34
+ * }
35
+ * }
36
+ * ```
37
+ */
38
+ export declare abstract class SimpleStep<TParams> extends BaseStep<TParams> {
39
+ /**
40
+ * Execute the step logic.
41
+ * @param params - The validated input parameters
42
+ * @param approval - Approval context if this step requires approval (has prepare method)
43
+ */
44
+ abstract run(params: TParams, approval?: ApprovalContext): Promise<RunOutput>;
45
+ /**
46
+ * Called by the registry to execute this step.
47
+ * @internal
48
+ */
49
+ execute(params: TParams, approval?: ApprovalContext): Promise<StepOutput>;
50
+ getMetadata(): StepMetadata;
51
+ }
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SimpleStep = void 0;
4
+ const base_step_1 = require("./base-step");
5
+ /**
6
+ * A simple step that runs once with the provided params.
7
+ *
8
+ * Users extend this class and implement the `run` method.
9
+ * Optionally override `prepare` to require approval before execution.
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * @Step({ name: "Deploy", type: "deploy", schema: deploySchema })
14
+ * class DeployStep extends SimpleStep<DeployParams> {
15
+ * async run(params: DeployParams): Promise<RunOutput> {
16
+ * this.logger.info("Deploying", { target: params.target });
17
+ * return StepOutputs.success({ deploymentId: "123" });
18
+ * }
19
+ * }
20
+ * ```
21
+ *
22
+ * @example With approval
23
+ * ```typescript
24
+ * @Step({ name: "Delete User", type: "delete-user", schema: deleteUserSchema })
25
+ * class DeleteUserStep extends SimpleStep<DeleteUserParams> {
26
+ * async prepare(params: DeleteUserParams): Promise<PrepareOutput> {
27
+ * return StepOutputs.approvalRequired({
28
+ * message: `Delete user ${params.userId}?`,
29
+ * });
30
+ * }
31
+ *
32
+ * async run(params: DeleteUserParams, approval: ApprovalContext): Promise<RunOutput> {
33
+ * this.logger.info("Deleting user", { approvedBy: approval.approverId });
34
+ * return StepOutputs.success();
35
+ * }
36
+ * }
37
+ * ```
38
+ */
39
+ class SimpleStep extends base_step_1.BaseStep {
40
+ /**
41
+ * Called by the registry to execute this step.
42
+ * @internal
43
+ */
44
+ async execute(params, approval) {
45
+ return this.run(params, approval);
46
+ }
47
+ getMetadata() {
48
+ throw new Error("getMetadata not implemented. Did you forget to add the @Step decorator?");
49
+ }
50
+ }
51
+ exports.SimpleStep = SimpleStep;
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlLXN0ZXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYmFzZS9zaW1wbGUtc3RlcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSwyQ0FBdUM7QUFHdkM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWlDRztBQUNILE1BQXNCLFVBQW9CLFNBQVEsb0JBQWlCO0lBUWpFOzs7T0FHRztJQUNILEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBZSxFQUFFLFFBQTBCO1FBQ3ZELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELFdBQVc7UUFDVCxNQUFNLElBQUksS0FBSyxDQUNiLHlFQUF5RSxDQUMxRSxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBckJELGdDQXFCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgU3RlcE1ldGFkYXRhIH0gZnJvbSBcIi4vYmFzZS1zdGVwXCI7XG5pbXBvcnQgeyBCYXNlU3RlcCB9IGZyb20gXCIuL2Jhc2Utc3RlcFwiO1xuaW1wb3J0IHR5cGUgeyBBcHByb3ZhbENvbnRleHQsIFJ1bk91dHB1dCwgU3RlcE91dHB1dCB9IGZyb20gXCIuLi9vdXRwdXQvc3RlcC1vdXRwdXRcIjtcblxuLyoqXG4gKiBBIHNpbXBsZSBzdGVwIHRoYXQgcnVucyBvbmNlIHdpdGggdGhlIHByb3ZpZGVkIHBhcmFtcy5cbiAqXG4gKiBVc2VycyBleHRlbmQgdGhpcyBjbGFzcyBhbmQgaW1wbGVtZW50IHRoZSBgcnVuYCBtZXRob2QuXG4gKiBPcHRpb25hbGx5IG92ZXJyaWRlIGBwcmVwYXJlYCB0byByZXF1aXJlIGFwcHJvdmFsIGJlZm9yZSBleGVjdXRpb24uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIEBTdGVwKHsgbmFtZTogXCJEZXBsb3lcIiwgdHlwZTogXCJkZXBsb3lcIiwgc2NoZW1hOiBkZXBsb3lTY2hlbWEgfSlcbiAqIGNsYXNzIERlcGxveVN0ZXAgZXh0ZW5kcyBTaW1wbGVTdGVwPERlcGxveVBhcmFtcz4ge1xuICogICBhc3luYyBydW4ocGFyYW1zOiBEZXBsb3lQYXJhbXMpOiBQcm9taXNlPFJ1bk91dHB1dD4ge1xuICogICAgIHRoaXMubG9nZ2VyLmluZm8oXCJEZXBsb3lpbmdcIiwgeyB0YXJnZXQ6IHBhcmFtcy50YXJnZXQgfSk7XG4gKiAgICAgcmV0dXJuIFN0ZXBPdXRwdXRzLnN1Y2Nlc3MoeyBkZXBsb3ltZW50SWQ6IFwiMTIzXCIgfSk7XG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIFdpdGggYXBwcm92YWxcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIEBTdGVwKHsgbmFtZTogXCJEZWxldGUgVXNlclwiLCB0eXBlOiBcImRlbGV0ZS11c2VyXCIsIHNjaGVtYTogZGVsZXRlVXNlclNjaGVtYSB9KVxuICogY2xhc3MgRGVsZXRlVXNlclN0ZXAgZXh0ZW5kcyBTaW1wbGVTdGVwPERlbGV0ZVVzZXJQYXJhbXM+IHtcbiAqICAgYXN5bmMgcHJlcGFyZShwYXJhbXM6IERlbGV0ZVVzZXJQYXJhbXMpOiBQcm9taXNlPFByZXBhcmVPdXRwdXQ+IHtcbiAqICAgICByZXR1cm4gU3RlcE91dHB1dHMuYXBwcm92YWxSZXF1aXJlZCh7XG4gKiAgICAgICBtZXNzYWdlOiBgRGVsZXRlIHVzZXIgJHtwYXJhbXMudXNlcklkfT9gLFxuICogICAgIH0pO1xuICogICB9XG4gKlxuICogICBhc3luYyBydW4ocGFyYW1zOiBEZWxldGVVc2VyUGFyYW1zLCBhcHByb3ZhbDogQXBwcm92YWxDb250ZXh0KTogUHJvbWlzZTxSdW5PdXRwdXQ+IHtcbiAqICAgICB0aGlzLmxvZ2dlci5pbmZvKFwiRGVsZXRpbmcgdXNlclwiLCB7IGFwcHJvdmVkQnk6IGFwcHJvdmFsLmFwcHJvdmVySWQgfSk7XG4gKiAgICAgcmV0dXJuIFN0ZXBPdXRwdXRzLnN1Y2Nlc3MoKTtcbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTaW1wbGVTdGVwPFRQYXJhbXM+IGV4dGVuZHMgQmFzZVN0ZXA8VFBhcmFtcz4ge1xuICAvKipcbiAgICogRXhlY3V0ZSB0aGUgc3RlcCBsb2dpYy5cbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSB2YWxpZGF0ZWQgaW5wdXQgcGFyYW1ldGVyc1xuICAgKiBAcGFyYW0gYXBwcm92YWwgLSBBcHByb3ZhbCBjb250ZXh0IGlmIHRoaXMgc3RlcCByZXF1aXJlcyBhcHByb3ZhbCAoaGFzIHByZXBhcmUgbWV0aG9kKVxuICAgKi9cbiAgYWJzdHJhY3QgcnVuKHBhcmFtczogVFBhcmFtcywgYXBwcm92YWw/OiBBcHByb3ZhbENvbnRleHQpOiBQcm9taXNlPFJ1bk91dHB1dD47XG5cbiAgLyoqXG4gICAqIENhbGxlZCBieSB0aGUgcmVnaXN0cnkgdG8gZXhlY3V0ZSB0aGlzIHN0ZXAuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgYXN5bmMgZXhlY3V0ZShwYXJhbXM6IFRQYXJhbXMsIGFwcHJvdmFsPzogQXBwcm92YWxDb250ZXh0KTogUHJvbWlzZTxTdGVwT3V0cHV0PiB7XG4gICAgcmV0dXJuIHRoaXMucnVuKHBhcmFtcywgYXBwcm92YWwpO1xuICB9XG5cbiAgZ2V0TWV0YWRhdGEoKTogU3RlcE1ldGFkYXRhIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcImdldE1ldGFkYXRhIG5vdCBpbXBsZW1lbnRlZC4gRGlkIHlvdSBmb3JnZXQgdG8gYWRkIHRoZSBAU3RlcCBkZWNvcmF0b3I/XCJcbiAgICApO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,24 @@
1
+ import type { ZodType, z } from "zod";
2
+ import { BaseStep } from "../base/base-step";
3
+ export interface StepConfig<S extends ZodType> {
4
+ name: string;
5
+ type: string;
6
+ schema: S;
7
+ }
8
+ /**
9
+ * Decorator that adds metadata to a step class.
10
+ * This is required for all steps to be registered with StepRegistry.
11
+ *
12
+ * The decorated class must extend SimpleStep or PollingStep.
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * @Step({ name: "My Step", type: "my-step", schema: mySchema })
17
+ * class MyStep extends SimpleStep<MyParams> {
18
+ * async run(params: MyParams): Promise<RunOutput> {
19
+ * return StepOutputs.success();
20
+ * }
21
+ * }
22
+ * ```
23
+ */
24
+ export declare function Step<S extends ZodType>(config: StepConfig<S>): <T extends new (...args: any[]) => BaseStep<z.infer<S>>>(Base: T) => T;
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Step = Step;
4
+ const base_step_1 = require("../base/base-step");
5
+ /**
6
+ * Decorator that adds metadata to a step class.
7
+ * This is required for all steps to be registered with StepRegistry.
8
+ *
9
+ * The decorated class must extend SimpleStep or PollingStep.
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * @Step({ name: "My Step", type: "my-step", schema: mySchema })
14
+ * class MyStep extends SimpleStep<MyParams> {
15
+ * async run(params: MyParams): Promise<RunOutput> {
16
+ * return StepOutputs.success();
17
+ * }
18
+ * }
19
+ * ```
20
+ */
21
+ function Step(config) {
22
+ return function (Base) {
23
+ const Enhanced = class extends Base {
24
+ getMetadata() {
25
+ // Detect step kind by checking for PollingStep methods
26
+ const hasPollingMethods = "trigger" in this &&
27
+ typeof this.trigger === "function" &&
28
+ "poll" in this &&
29
+ typeof this.poll === "function";
30
+ const stepKind = hasPollingMethods ? "polling" : "simple";
31
+ // Check if prepare is overridden (not the default BaseStep.prepare)
32
+ const requiresApproval = this.prepare !== base_step_1.BaseStep.prototype.prepare;
33
+ return {
34
+ type: config.type,
35
+ name: config.name,
36
+ schema: config.schema,
37
+ stepKind,
38
+ requiresApproval,
39
+ };
40
+ }
41
+ };
42
+ return Enhanced;
43
+ };
44
+ }
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kZWNvcmF0b3JzL3N0ZXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUEwQkEsb0JBOEJDO0FBdERELGlEQUE2QztBQVE3Qzs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxTQUFnQixJQUFJLENBQW9CLE1BQXFCO0lBQzNELE9BQU8sVUFDTCxJQUFPO1FBRVAsTUFBTSxRQUFRLEdBQUcsS0FBTSxTQUFRLElBQUk7WUFDeEIsV0FBVztnQkFDbEIsdURBQXVEO2dCQUN2RCxNQUFNLGlCQUFpQixHQUNyQixTQUFTLElBQUksSUFBSTtvQkFDakIsT0FBUSxJQUFZLENBQUMsT0FBTyxLQUFLLFVBQVU7b0JBQzNDLE1BQU0sSUFBSSxJQUFJO29CQUNkLE9BQVEsSUFBWSxDQUFDLElBQUksS0FBSyxVQUFVLENBQUM7Z0JBRTNDLE1BQU0sUUFBUSxHQUFhLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztnQkFFcEUsb0VBQW9FO2dCQUNwRSxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxPQUFPLEtBQUssb0JBQVEsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDO2dCQUVyRSxPQUFPO29CQUNMLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtvQkFDakIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO29CQUNqQixNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07b0JBQ3JCLFFBQVE7b0JBQ1IsZ0JBQWdCO2lCQUNqQixDQUFDO1lBQ0osQ0FBQztTQUNGLENBQUM7UUFFRixPQUFPLFFBQWEsQ0FBQztJQUN2QixDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBab2RUeXBlLCB6IH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHR5cGUgeyBTdGVwS2luZCwgU3RlcE1ldGFkYXRhIH0gZnJvbSBcIi4uL2Jhc2UvYmFzZS1zdGVwXCI7XG5pbXBvcnQgeyBCYXNlU3RlcCB9IGZyb20gXCIuLi9iYXNlL2Jhc2Utc3RlcFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN0ZXBDb25maWc8UyBleHRlbmRzIFpvZFR5cGU+IHtcbiAgbmFtZTogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG4gIHNjaGVtYTogUztcbn1cblxuLyoqXG4gKiBEZWNvcmF0b3IgdGhhdCBhZGRzIG1ldGFkYXRhIHRvIGEgc3RlcCBjbGFzcy5cbiAqIFRoaXMgaXMgcmVxdWlyZWQgZm9yIGFsbCBzdGVwcyB0byBiZSByZWdpc3RlcmVkIHdpdGggU3RlcFJlZ2lzdHJ5LlxuICpcbiAqIFRoZSBkZWNvcmF0ZWQgY2xhc3MgbXVzdCBleHRlbmQgU2ltcGxlU3RlcCBvciBQb2xsaW5nU3RlcC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogQFN0ZXAoeyBuYW1lOiBcIk15IFN0ZXBcIiwgdHlwZTogXCJteS1zdGVwXCIsIHNjaGVtYTogbXlTY2hlbWEgfSlcbiAqIGNsYXNzIE15U3RlcCBleHRlbmRzIFNpbXBsZVN0ZXA8TXlQYXJhbXM+IHtcbiAqICAgYXN5bmMgcnVuKHBhcmFtczogTXlQYXJhbXMpOiBQcm9taXNlPFJ1bk91dHB1dD4ge1xuICogICAgIHJldHVybiBTdGVwT3V0cHV0cy5zdWNjZXNzKCk7XG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gU3RlcDxTIGV4dGVuZHMgWm9kVHlwZT4oY29uZmlnOiBTdGVwQ29uZmlnPFM+KSB7XG4gIHJldHVybiBmdW5jdGlvbiA8VCBleHRlbmRzIG5ldyAoLi4uYXJnczogYW55W10pID0+IEJhc2VTdGVwPHouaW5mZXI8Uz4+PihcbiAgICBCYXNlOiBUXG4gICk6IFQge1xuICAgIGNvbnN0IEVuaGFuY2VkID0gY2xhc3MgZXh0ZW5kcyBCYXNlIHtcbiAgICAgIG92ZXJyaWRlIGdldE1ldGFkYXRhKCk6IFN0ZXBNZXRhZGF0YTxTPiB7XG4gICAgICAgIC8vIERldGVjdCBzdGVwIGtpbmQgYnkgY2hlY2tpbmcgZm9yIFBvbGxpbmdTdGVwIG1ldGhvZHNcbiAgICAgICAgY29uc3QgaGFzUG9sbGluZ01ldGhvZHMgPVxuICAgICAgICAgIFwidHJpZ2dlclwiIGluIHRoaXMgJiZcbiAgICAgICAgICB0eXBlb2YgKHRoaXMgYXMgYW55KS50cmlnZ2VyID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgICAgICBcInBvbGxcIiBpbiB0aGlzICYmXG4gICAgICAgICAgdHlwZW9mICh0aGlzIGFzIGFueSkucG9sbCA9PT0gXCJmdW5jdGlvblwiO1xuXG4gICAgICAgIGNvbnN0IHN0ZXBLaW5kOiBTdGVwS2luZCA9IGhhc1BvbGxpbmdNZXRob2RzID8gXCJwb2xsaW5nXCIgOiBcInNpbXBsZVwiO1xuXG4gICAgICAgIC8vIENoZWNrIGlmIHByZXBhcmUgaXMgb3ZlcnJpZGRlbiAobm90IHRoZSBkZWZhdWx0IEJhc2VTdGVwLnByZXBhcmUpXG4gICAgICAgIGNvbnN0IHJlcXVpcmVzQXBwcm92YWwgPSB0aGlzLnByZXBhcmUgIT09IEJhc2VTdGVwLnByb3RvdHlwZS5wcmVwYXJlO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZTogY29uZmlnLnR5cGUsXG4gICAgICAgICAgbmFtZTogY29uZmlnLm5hbWUsXG4gICAgICAgICAgc2NoZW1hOiBjb25maWcuc2NoZW1hLFxuICAgICAgICAgIHN0ZXBLaW5kLFxuICAgICAgICAgIHJlcXVpcmVzQXBwcm92YWwsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBFbmhhbmNlZCBhcyBUO1xuICB9O1xufVxuIl19
@@ -0,0 +1,7 @@
1
+ export { BaseStep, StepClass, StepMetadata, StepKind } from "./base/base-step";
2
+ export { SimpleStep } from "./base/simple-step";
3
+ export { PollingStep } from "./base/polling-step";
4
+ export { Step, StepConfig } from "./decorators/step";
5
+ export { ApprovalContext, ApprovalContextSchema, PrepareOutput, RunOutput, TriggerOutput, TriggeredOutput, PollOutput, PollAgainOutput, SuccessOutput, FailedOutput, ApprovalRequiredOutput, StepOutput, PrepareOutputSchema, RunOutputSchema, TriggerOutputSchema, PollOutputSchema, StepOutputSchema, StepOutputs, } from "./output/step-output";
6
+ export { StepRegistry, StepRegistryInput, StepRegistryInputSchema } from "./registry/step-registry";
7
+ export { StepLogger, StepLoggerConfig, LogEntry, LogLevel } from "./logging/step-logger";
package/dist/index.js ADDED
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ // =============================================================================
3
+ // Step SDK - Public API
4
+ // =============================================================================
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.StepLogger = exports.StepRegistryInputSchema = exports.StepRegistry = exports.StepOutputs = exports.StepOutputSchema = exports.PollOutputSchema = exports.TriggerOutputSchema = exports.RunOutputSchema = exports.PrepareOutputSchema = exports.ApprovalContextSchema = exports.Step = exports.PollingStep = exports.SimpleStep = exports.BaseStep = void 0;
7
+ // Base classes for creating steps
8
+ var base_step_1 = require("./base/base-step");
9
+ Object.defineProperty(exports, "BaseStep", { enumerable: true, get: function () { return base_step_1.BaseStep; } });
10
+ var simple_step_1 = require("./base/simple-step");
11
+ Object.defineProperty(exports, "SimpleStep", { enumerable: true, get: function () { return simple_step_1.SimpleStep; } });
12
+ var polling_step_1 = require("./base/polling-step");
13
+ Object.defineProperty(exports, "PollingStep", { enumerable: true, get: function () { return polling_step_1.PollingStep; } });
14
+ // Decorator for adding metadata to steps
15
+ var step_1 = require("./decorators/step");
16
+ Object.defineProperty(exports, "Step", { enumerable: true, get: function () { return step_1.Step; } });
17
+ // Output types and helper functions
18
+ var step_output_1 = require("./output/step-output");
19
+ Object.defineProperty(exports, "ApprovalContextSchema", { enumerable: true, get: function () { return step_output_1.ApprovalContextSchema; } });
20
+ // Output schemas for validation
21
+ Object.defineProperty(exports, "PrepareOutputSchema", { enumerable: true, get: function () { return step_output_1.PrepareOutputSchema; } });
22
+ Object.defineProperty(exports, "RunOutputSchema", { enumerable: true, get: function () { return step_output_1.RunOutputSchema; } });
23
+ Object.defineProperty(exports, "TriggerOutputSchema", { enumerable: true, get: function () { return step_output_1.TriggerOutputSchema; } });
24
+ Object.defineProperty(exports, "PollOutputSchema", { enumerable: true, get: function () { return step_output_1.PollOutputSchema; } });
25
+ Object.defineProperty(exports, "StepOutputSchema", { enumerable: true, get: function () { return step_output_1.StepOutputSchema; } });
26
+ // Helper functions
27
+ Object.defineProperty(exports, "StepOutputs", { enumerable: true, get: function () { return step_output_1.StepOutputs; } });
28
+ // Registry for running steps
29
+ var step_registry_1 = require("./registry/step-registry");
30
+ Object.defineProperty(exports, "StepRegistry", { enumerable: true, get: function () { return step_registry_1.StepRegistry; } });
31
+ Object.defineProperty(exports, "StepRegistryInputSchema", { enumerable: true, get: function () { return step_registry_1.StepRegistryInputSchema; } });
32
+ // Logging
33
+ var step_logger_1 = require("./logging/step-logger");
34
+ Object.defineProperty(exports, "StepLogger", { enumerable: true, get: function () { return step_logger_1.StepLogger; } });
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLGdGQUFnRjtBQUNoRix3QkFBd0I7QUFDeEIsZ0ZBQWdGOzs7QUFFaEYsa0NBQWtDO0FBQ2xDLDhDQUErRTtBQUF0RSxxR0FBQSxRQUFRLE9BQUE7QUFDakIsa0RBQWdEO0FBQXZDLHlHQUFBLFVBQVUsT0FBQTtBQUNuQixvREFBa0Q7QUFBekMsMkdBQUEsV0FBVyxPQUFBO0FBRXBCLHlDQUF5QztBQUN6QywwQ0FBcUQ7QUFBNUMsNEZBQUEsSUFBSSxPQUFBO0FBRWIsb0NBQW9DO0FBQ3BDLG9EQXlCOEI7QUF0QjVCLG9IQUFBLHFCQUFxQixPQUFBO0FBY3JCLGdDQUFnQztBQUNoQyxrSEFBQSxtQkFBbUIsT0FBQTtBQUNuQiw4R0FBQSxlQUFlLE9BQUE7QUFDZixrSEFBQSxtQkFBbUIsT0FBQTtBQUNuQiwrR0FBQSxnQkFBZ0IsT0FBQTtBQUNoQiwrR0FBQSxnQkFBZ0IsT0FBQTtBQUNoQixtQkFBbUI7QUFDbkIsMEdBQUEsV0FBVyxPQUFBO0FBR2IsNkJBQTZCO0FBQzdCLDBEQUFvRztBQUEzRiw2R0FBQSxZQUFZLE9BQUE7QUFBcUIsd0hBQUEsdUJBQXVCLE9BQUE7QUFFakUsVUFBVTtBQUNWLHFEQUF5RjtBQUFoRix5R0FBQSxVQUFVLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU3RlcCBTREsgLSBQdWJsaWMgQVBJXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vLyBCYXNlIGNsYXNzZXMgZm9yIGNyZWF0aW5nIHN0ZXBzXG5leHBvcnQgeyBCYXNlU3RlcCwgU3RlcENsYXNzLCBTdGVwTWV0YWRhdGEsIFN0ZXBLaW5kIH0gZnJvbSBcIi4vYmFzZS9iYXNlLXN0ZXBcIjtcbmV4cG9ydCB7IFNpbXBsZVN0ZXAgfSBmcm9tIFwiLi9iYXNlL3NpbXBsZS1zdGVwXCI7XG5leHBvcnQgeyBQb2xsaW5nU3RlcCB9IGZyb20gXCIuL2Jhc2UvcG9sbGluZy1zdGVwXCI7XG5cbi8vIERlY29yYXRvciBmb3IgYWRkaW5nIG1ldGFkYXRhIHRvIHN0ZXBzXG5leHBvcnQgeyBTdGVwLCBTdGVwQ29uZmlnIH0gZnJvbSBcIi4vZGVjb3JhdG9ycy9zdGVwXCI7XG5cbi8vIE91dHB1dCB0eXBlcyBhbmQgaGVscGVyIGZ1bmN0aW9uc1xuZXhwb3J0IHtcbiAgLy8gQXBwcm92YWwgY29udGV4dFxuICBBcHByb3ZhbENvbnRleHQsXG4gIEFwcHJvdmFsQ29udGV4dFNjaGVtYSxcbiAgLy8gUGhhc2Utc3BlY2lmaWMgb3V0cHV0c1xuICBQcmVwYXJlT3V0cHV0LFxuICBSdW5PdXRwdXQsXG4gIFRyaWdnZXJPdXRwdXQsXG4gIFRyaWdnZXJlZE91dHB1dCxcbiAgUG9sbE91dHB1dCxcbiAgUG9sbEFnYWluT3V0cHV0LFxuICAvLyBDb21tb24gb3V0cHV0c1xuICBTdWNjZXNzT3V0cHV0LFxuICBGYWlsZWRPdXRwdXQsXG4gIEFwcHJvdmFsUmVxdWlyZWRPdXRwdXQsXG4gIC8vIENvbWJpbmVkIG91dHB1dCB0eXBlXG4gIFN0ZXBPdXRwdXQsXG4gIC8vIE91dHB1dCBzY2hlbWFzIGZvciB2YWxpZGF0aW9uXG4gIFByZXBhcmVPdXRwdXRTY2hlbWEsXG4gIFJ1bk91dHB1dFNjaGVtYSxcbiAgVHJpZ2dlck91dHB1dFNjaGVtYSxcbiAgUG9sbE91dHB1dFNjaGVtYSxcbiAgU3RlcE91dHB1dFNjaGVtYSxcbiAgLy8gSGVscGVyIGZ1bmN0aW9uc1xuICBTdGVwT3V0cHV0cyxcbn0gZnJvbSBcIi4vb3V0cHV0L3N0ZXAtb3V0cHV0XCI7XG5cbi8vIFJlZ2lzdHJ5IGZvciBydW5uaW5nIHN0ZXBzXG5leHBvcnQgeyBTdGVwUmVnaXN0cnksIFN0ZXBSZWdpc3RyeUlucHV0LCBTdGVwUmVnaXN0cnlJbnB1dFNjaGVtYSB9IGZyb20gXCIuL3JlZ2lzdHJ5L3N0ZXAtcmVnaXN0cnlcIjtcblxuLy8gTG9nZ2luZ1xuZXhwb3J0IHsgU3RlcExvZ2dlciwgU3RlcExvZ2dlckNvbmZpZywgTG9nRW50cnksIExvZ0xldmVsIH0gZnJvbSBcIi4vbG9nZ2luZy9zdGVwLWxvZ2dlclwiO1xuIl19
@@ -0,0 +1,35 @@
1
+ export type LogLevel = "info" | "error";
2
+ export interface LogEntry {
3
+ timestamp: string;
4
+ level: LogLevel;
5
+ message: string;
6
+ data?: Record<string, unknown>;
7
+ stepType: string;
8
+ executionId: string;
9
+ }
10
+ export interface StepLoggerConfig {
11
+ logDir: string;
12
+ executionId: string;
13
+ stepType: string;
14
+ }
15
+ /**
16
+ * File-based structured logger for steps.
17
+ * Writes JSON lines to {logDir}/{executionId}.jsonl
18
+ */
19
+ export declare class StepLogger {
20
+ private readonly logFilePath;
21
+ private readonly stepType;
22
+ private readonly executionId;
23
+ constructor(config: StepLoggerConfig);
24
+ info(message: string, data?: Record<string, unknown>): void;
25
+ error(message: string, data?: Record<string, unknown>): void;
26
+ private write;
27
+ }
28
+ /**
29
+ * No-op logger for use when logging is not configured.
30
+ */
31
+ export declare class NoOpLogger extends StepLogger {
32
+ constructor();
33
+ info(_message: string, _data?: Record<string, unknown>): void;
34
+ error(_message: string, _data?: Record<string, unknown>): void;
35
+ }
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.NoOpLogger = exports.StepLogger = void 0;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ /**
40
+ * File-based structured logger for steps.
41
+ * Writes JSON lines to {logDir}/{executionId}.jsonl
42
+ */
43
+ class StepLogger {
44
+ logFilePath;
45
+ stepType;
46
+ executionId;
47
+ constructor(config) {
48
+ this.stepType = config.stepType;
49
+ this.executionId = config.executionId;
50
+ this.logFilePath = path.join(config.logDir, `${config.executionId}.jsonl`);
51
+ // Ensure log directory exists
52
+ const logDir = path.dirname(this.logFilePath);
53
+ if (!fs.existsSync(logDir)) {
54
+ fs.mkdirSync(logDir, { recursive: true });
55
+ }
56
+ }
57
+ info(message, data) {
58
+ this.write("info", message, data);
59
+ }
60
+ error(message, data) {
61
+ this.write("error", message, data);
62
+ }
63
+ write(level, message, data) {
64
+ const entry = {
65
+ timestamp: new Date().toISOString(),
66
+ level,
67
+ message,
68
+ stepType: this.stepType,
69
+ executionId: this.executionId,
70
+ };
71
+ if (data !== undefined) {
72
+ entry.data = data;
73
+ }
74
+ fs.appendFileSync(this.logFilePath, JSON.stringify(entry) + "\n");
75
+ }
76
+ }
77
+ exports.StepLogger = StepLogger;
78
+ /**
79
+ * No-op logger for use when logging is not configured.
80
+ */
81
+ class NoOpLogger extends StepLogger {
82
+ constructor() {
83
+ // Pass dummy config - methods are overridden anyway
84
+ super({ logDir: "/tmp", executionId: "noop", stepType: "noop" });
85
+ }
86
+ info(_message, _data) {
87
+ // No-op
88
+ }
89
+ error(_message, _data) {
90
+ // No-op
91
+ }
92
+ }
93
+ exports.NoOpLogger = NoOpLogger;
94
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1sb2dnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbG9nZ2luZy9zdGVwLWxvZ2dlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx1Q0FBeUI7QUFDekIsMkNBQTZCO0FBbUI3Qjs7O0dBR0c7QUFDSCxNQUFhLFVBQVU7SUFDSixXQUFXLENBQVM7SUFDcEIsUUFBUSxDQUFTO0lBQ2pCLFdBQVcsQ0FBUztJQUVyQyxZQUFZLE1BQXdCO1FBQ2xDLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUNoQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUM7UUFDdEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsV0FBVyxRQUFRLENBQUMsQ0FBQztRQUUzRSw4QkFBOEI7UUFDOUIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUMzQixFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzVDLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxDQUFDLE9BQWUsRUFBRSxJQUE4QjtRQUNsRCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFlLEVBQUUsSUFBOEI7UUFDbkQsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFTyxLQUFLLENBQ1gsS0FBZSxFQUNmLE9BQWUsRUFDZixJQUE4QjtRQUU5QixNQUFNLEtBQUssR0FBYTtZQUN0QixTQUFTLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7WUFDbkMsS0FBSztZQUNMLE9BQU87WUFDUCxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO1NBQzlCLENBQUM7UUFFRixJQUFJLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN2QixLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNwQixDQUFDO1FBRUQsRUFBRSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDcEUsQ0FBQztDQUNGO0FBNUNELGdDQTRDQztBQUVEOztHQUVHO0FBQ0gsTUFBYSxVQUFXLFNBQVEsVUFBVTtJQUN4QztRQUNFLG9EQUFvRDtRQUNwRCxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVRLElBQUksQ0FBQyxRQUFnQixFQUFFLEtBQStCO1FBQzdELFFBQVE7SUFDVixDQUFDO0lBRVEsS0FBSyxDQUFDLFFBQWdCLEVBQUUsS0FBK0I7UUFDOUQsUUFBUTtJQUNWLENBQUM7Q0FDRjtBQWJELGdDQWFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbmV4cG9ydCB0eXBlIExvZ0xldmVsID0gXCJpbmZvXCIgfCBcImVycm9yXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9nRW50cnkge1xuICB0aW1lc3RhbXA6IHN0cmluZztcbiAgbGV2ZWw6IExvZ0xldmVsO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgc3RlcFR5cGU6IHN0cmluZztcbiAgZXhlY3V0aW9uSWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGVwTG9nZ2VyQ29uZmlnIHtcbiAgbG9nRGlyOiBzdHJpbmc7XG4gIGV4ZWN1dGlvbklkOiBzdHJpbmc7XG4gIHN0ZXBUeXBlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRmlsZS1iYXNlZCBzdHJ1Y3R1cmVkIGxvZ2dlciBmb3Igc3RlcHMuXG4gKiBXcml0ZXMgSlNPTiBsaW5lcyB0byB7bG9nRGlyfS97ZXhlY3V0aW9uSWR9Lmpzb25sXG4gKi9cbmV4cG9ydCBjbGFzcyBTdGVwTG9nZ2VyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBsb2dGaWxlUGF0aDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHN0ZXBUeXBlOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgZXhlY3V0aW9uSWQ6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihjb25maWc6IFN0ZXBMb2dnZXJDb25maWcpIHtcbiAgICB0aGlzLnN0ZXBUeXBlID0gY29uZmlnLnN0ZXBUeXBlO1xuICAgIHRoaXMuZXhlY3V0aW9uSWQgPSBjb25maWcuZXhlY3V0aW9uSWQ7XG4gICAgdGhpcy5sb2dGaWxlUGF0aCA9IHBhdGguam9pbihjb25maWcubG9nRGlyLCBgJHtjb25maWcuZXhlY3V0aW9uSWR9Lmpzb25sYCk7XG5cbiAgICAvLyBFbnN1cmUgbG9nIGRpcmVjdG9yeSBleGlzdHNcbiAgICBjb25zdCBsb2dEaXIgPSBwYXRoLmRpcm5hbWUodGhpcy5sb2dGaWxlUGF0aCk7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKGxvZ0RpcikpIHtcbiAgICAgIGZzLm1rZGlyU3luYyhsb2dEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIH1cbiAgfVxuXG4gIGluZm8obWVzc2FnZTogc3RyaW5nLCBkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB2b2lkIHtcbiAgICB0aGlzLndyaXRlKFwiaW5mb1wiLCBtZXNzYWdlLCBkYXRhKTtcbiAgfVxuXG4gIGVycm9yKG1lc3NhZ2U6IHN0cmluZywgZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdm9pZCB7XG4gICAgdGhpcy53cml0ZShcImVycm9yXCIsIG1lc3NhZ2UsIGRhdGEpO1xuICB9XG5cbiAgcHJpdmF0ZSB3cml0ZShcbiAgICBsZXZlbDogTG9nTGV2ZWwsXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICAgIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICApOiB2b2lkIHtcbiAgICBjb25zdCBlbnRyeTogTG9nRW50cnkgPSB7XG4gICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIGxldmVsLFxuICAgICAgbWVzc2FnZSxcbiAgICAgIHN0ZXBUeXBlOiB0aGlzLnN0ZXBUeXBlLFxuICAgICAgZXhlY3V0aW9uSWQ6IHRoaXMuZXhlY3V0aW9uSWQsXG4gICAgfTtcblxuICAgIGlmIChkYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGVudHJ5LmRhdGEgPSBkYXRhO1xuICAgIH1cblxuICAgIGZzLmFwcGVuZEZpbGVTeW5jKHRoaXMubG9nRmlsZVBhdGgsIEpTT04uc3RyaW5naWZ5KGVudHJ5KSArIFwiXFxuXCIpO1xuICB9XG59XG5cbi8qKlxuICogTm8tb3AgbG9nZ2VyIGZvciB1c2Ugd2hlbiBsb2dnaW5nIGlzIG5vdCBjb25maWd1cmVkLlxuICovXG5leHBvcnQgY2xhc3MgTm9PcExvZ2dlciBleHRlbmRzIFN0ZXBMb2dnZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvLyBQYXNzIGR1bW15IGNvbmZpZyAtIG1ldGhvZHMgYXJlIG92ZXJyaWRkZW4gYW55d2F5XG4gICAgc3VwZXIoeyBsb2dEaXI6IFwiL3RtcFwiLCBleGVjdXRpb25JZDogXCJub29wXCIsIHN0ZXBUeXBlOiBcIm5vb3BcIiB9KTtcbiAgfVxuXG4gIG92ZXJyaWRlIGluZm8oX21lc3NhZ2U6IHN0cmluZywgX2RhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHZvaWQge1xuICAgIC8vIE5vLW9wXG4gIH1cblxuICBvdmVycmlkZSBlcnJvcihfbWVzc2FnZTogc3RyaW5nLCBfZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdm9pZCB7XG4gICAgLy8gTm8tb3BcbiAgfVxufVxuIl19