@dudousxd/nestjs-durable-dashboard 0.5.0 → 0.6.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.
- package/dist/client/durable-client.d.ts +5 -2
- package/dist/client/durable-client.d.ts.map +1 -1
- package/dist/client/durable-client.js +3 -2
- package/dist/client/durable-client.js.map +1 -1
- package/dist/server/dashboard.service.d.ts +14 -2
- package/dist/server/dashboard.service.d.ts.map +1 -1
- package/dist/server/dashboard.service.js +18 -2
- package/dist/server/dashboard.service.js.map +1 -1
- package/dist/server/durable-api.controller.d.ts +12 -1
- package/dist/server/durable-api.controller.d.ts.map +1 -1
- package/dist/server/durable-api.controller.js +50 -4
- package/dist/server/durable-api.controller.js.map +1 -1
- package/dist/spa/assets/index-1Bi3Vr4p.js +62 -0
- package/dist/spa/assets/{index-Nl3xSMco.css → index-CJXUdG02.css} +1 -1
- package/dist/spa/index.html +2 -2
- package/package.json +2 -2
- package/dist/spa/assets/index-xV2a3OK0.js +0 -62
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type RunStatus = 'running' | 'suspended' | 'completed' | 'failed' | 'cancelled';
|
|
1
|
+
export type RunStatus = 'running' | 'suspended' | 'completed' | 'failed' | 'cancelled' | 'dead';
|
|
2
2
|
export type StepKind = 'local' | 'remote' | 'sleep' | 'signal';
|
|
3
3
|
export interface WorkflowRun {
|
|
4
4
|
id: string;
|
|
@@ -12,6 +12,7 @@ export interface WorkflowRun {
|
|
|
12
12
|
code?: string;
|
|
13
13
|
};
|
|
14
14
|
wakeAt?: number;
|
|
15
|
+
recoveryAttempts?: number;
|
|
15
16
|
createdAt: string;
|
|
16
17
|
updatedAt: string;
|
|
17
18
|
}
|
|
@@ -75,7 +76,9 @@ export declare const durableClient: {
|
|
|
75
76
|
runs(status?: RunStatus): Promise<WorkflowRun[]>;
|
|
76
77
|
run(id: string): Promise<RunDetail>;
|
|
77
78
|
retry(id: string): Promise<WorkflowRun>;
|
|
78
|
-
cancel(id: string
|
|
79
|
+
cancel(id: string, opts?: {
|
|
80
|
+
compensate?: boolean;
|
|
81
|
+
}): Promise<WorkflowRun>;
|
|
79
82
|
continue(id: string): Promise<WorkflowRun>;
|
|
80
83
|
/**
|
|
81
84
|
* Live-tail a run's lifecycle events over SSE (replaces polling). Calls `onEvent` per event;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"durable-client.d.ts","sourceRoot":"","sources":["../../src/client/durable-client.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"durable-client.d.ts","sourceRoot":"","sources":["../../src/client/durable-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,8 +20,9 @@ export const durableClient = {
|
|
|
20
20
|
retry(id) {
|
|
21
21
|
return http(`/runs/${encodeURIComponent(id)}/retry`, { method: 'POST' });
|
|
22
22
|
},
|
|
23
|
-
cancel(id) {
|
|
24
|
-
|
|
23
|
+
cancel(id, opts) {
|
|
24
|
+
const qs = opts?.compensate ? '?compensate=true' : '';
|
|
25
|
+
return http(`/runs/${encodeURIComponent(id)}/cancel${qs}`, { method: 'POST' });
|
|
25
26
|
},
|
|
26
27
|
continue(id) {
|
|
27
28
|
return http(`/runs/${encodeURIComponent(id)}/continue`, { method: 'POST' });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"durable-client.js","sourceRoot":"","sources":["../../src/client/durable-client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"durable-client.js","sourceRoot":"","sources":["../../src/client/durable-client.ts"],"names":[],"mappings":"AAmFA,SAAS,OAAO;IACd,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,eAAe;QAAE,OAAO,MAAM,CAAC,eAAe,CAAC;IAC3F,MAAM,IAAI,GAAG,CAAC,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,gBAAgB,CAAC,IAAI,UAAU,CAAC;IACtF,OAAO,GAAG,IAAI,MAAM,CAAC;AACvB,CAAC;AAED,KAAK,UAAU,IAAI,CAAI,IAAY,EAAE,IAAkB;IACrD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,CAAC,CAAC;IAChD,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;IAChE,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAM,CAAC;AACjC,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,IAAI,CAAC,MAAkB;QACrB,OAAO,IAAI,CAAgB,MAAM,CAAC,CAAC,CAAC,gBAAgB,MAAM,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC1E,CAAC;IACD,GAAG,CAAC,EAAU;QACZ,OAAO,IAAI,CAAY,SAAS,kBAAkB,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC5D,CAAC;IACD,KAAK,CAAC,EAAU;QACd,OAAO,IAAI,CAAc,SAAS,kBAAkB,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACxF,CAAC;IACD,MAAM,CAAC,EAAU,EAAE,IAA+B;QAChD,MAAM,EAAE,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;QACtD,OAAO,IAAI,CAAc,SAAS,kBAAkB,CAAC,EAAE,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC9F,CAAC;IACD,QAAQ,CAAC,EAAU;QACjB,OAAO,IAAI,CAAc,SAAS,kBAAkB,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC3F,CAAC;IACD;;;OAGG;IACH,SAAS,CAAC,EAAU,EAAE,OAAqC;QACzD,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,GAAG,OAAO,EAAE,SAAS,kBAAkB,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;QACrF,MAAM,CAAC,SAAS,GAAG,CAAC,GAAG,EAAE,EAAE;YACzB,IAAI,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAgB,CAAC,CAAC;YAC/C,CAAC;YAAC,MAAM,CAAC;gBACP,4BAA4B;YAC9B,CAAC;QACH,CAAC,CAAC;QACF,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IAC9B,CAAC;CACF,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type EngineEvent, type RunQuery, type RunResult, type StateStore, type StepCheckpoint, WorkflowEngine, type WorkflowRun } from '@dudousxd/nestjs-durable-core';
|
|
1
|
+
import { type EngineEvent, type RunQuery, type RunResult, type StateStore, type StepCheckpoint, type UpdateResult, WorkflowEngine, type WorkflowRun } from '@dudousxd/nestjs-durable-core';
|
|
2
2
|
import { Observable } from 'rxjs';
|
|
3
3
|
export interface RunDetail {
|
|
4
4
|
run: WorkflowRun;
|
|
@@ -14,9 +14,21 @@ export declare class DashboardService {
|
|
|
14
14
|
getRunDetail(runId: string): Promise<RunDetail | null>;
|
|
15
15
|
/** Re-run a failed/incomplete run; completed steps replay from their checkpoints. */
|
|
16
16
|
retry(runId: string): Promise<RunResult>;
|
|
17
|
-
cancel(runId: string
|
|
17
|
+
cancel(runId: string, opts?: {
|
|
18
|
+
compensate?: boolean;
|
|
19
|
+
}): Promise<RunResult | null>;
|
|
18
20
|
/** Resume a run paused at a `ctx.breakpoint` (the "continue" button). */
|
|
19
21
|
continue(runId: string): Promise<RunResult | null>;
|
|
22
|
+
/**
|
|
23
|
+
* Deliver a `ctx.webhook()` callback: turn an inbound POST (token + body) into the signal the
|
|
24
|
+
* waiting run is parked on. Returns the run result, or `null` if no run waits on that token (a
|
|
25
|
+
* stale/duplicate callback) — a safe no-op the controller maps to 404.
|
|
26
|
+
*/
|
|
27
|
+
deliverWebhook(token: string, body: unknown): Promise<RunResult | null>;
|
|
28
|
+
/** Side-effect-free read of a value a run published via `ctx.setEvent` (a live query). */
|
|
29
|
+
getEvent(runId: string, key: string): Promise<unknown>;
|
|
30
|
+
/** Deliver a validated `ctx.onUpdate` to a run; the validator may reject it (see UpdateResult). */
|
|
31
|
+
update(runId: string, name: string, arg: unknown): Promise<UpdateResult>;
|
|
20
32
|
/**
|
|
21
33
|
* Live stream of a run's lifecycle events for SSE. Backed by `engine.subscribe`, which — when the
|
|
22
34
|
* transport has a control plane — receives events from EVERY instance, so a dashboard-only pod
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard.service.d.ts","sourceRoot":"","sources":["../../src/server/dashboard.service.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,QAAQ,EACb,KAAK,SAAS,EAEd,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,cAAc,EACd,KAAK,WAAW,EACjB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAElC,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,WAAW,CAAC;IACjB,2EAA2E;IAC3E,QAAQ,EAAE,cAAc,EAAE,CAAC;CAC5B;AAED,2DAA2D;AAC3D,qBACa,gBAAgB;IAEJ,OAAO,CAAC,QAAQ,CAAC,KAAK;IAC3C,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADe,KAAK,EAAE,UAAU,EACtC,MAAM,EAAE,cAAc;IAGzC,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAI3C,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAO5D,qFAAqF;IACrF,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAIxC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"dashboard.service.d.ts","sourceRoot":"","sources":["../../src/server/dashboard.service.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,QAAQ,EACb,KAAK,SAAS,EAEd,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,cAAc,EACd,KAAK,WAAW,EACjB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAElC,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,WAAW,CAAC;IACjB,2EAA2E;IAC3E,QAAQ,EAAE,cAAc,EAAE,CAAC;CAC5B;AAED,2DAA2D;AAC3D,qBACa,gBAAgB;IAEJ,OAAO,CAAC,QAAQ,CAAC,KAAK;IAC3C,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADe,KAAK,EAAE,UAAU,EACtC,MAAM,EAAE,cAAc;IAGzC,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAI3C,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAO5D,qFAAqF;IACrF,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAIxC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAIjF,yEAAyE;IACzE,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAIlD;;;;OAIG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAIvE,0FAA0F;IAC1F,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAItD,mGAAmG;IACnG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC;IAIxE;;;;OAIG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAAC;QAAE,IAAI,EAAE,WAAW,CAAA;KAAE,CAAC;CAQ5D"}
|
|
@@ -35,13 +35,29 @@ let DashboardService = class DashboardService {
|
|
|
35
35
|
retry(runId) {
|
|
36
36
|
return this.engine.resume(runId);
|
|
37
37
|
}
|
|
38
|
-
cancel(runId) {
|
|
39
|
-
return this.engine.cancel(runId);
|
|
38
|
+
cancel(runId, opts) {
|
|
39
|
+
return this.engine.cancel(runId, opts);
|
|
40
40
|
}
|
|
41
41
|
/** Resume a run paused at a `ctx.breakpoint` (the "continue" button). */
|
|
42
42
|
continue(runId) {
|
|
43
43
|
return this.engine.continue(runId);
|
|
44
44
|
}
|
|
45
|
+
/**
|
|
46
|
+
* Deliver a `ctx.webhook()` callback: turn an inbound POST (token + body) into the signal the
|
|
47
|
+
* waiting run is parked on. Returns the run result, or `null` if no run waits on that token (a
|
|
48
|
+
* stale/duplicate callback) — a safe no-op the controller maps to 404.
|
|
49
|
+
*/
|
|
50
|
+
deliverWebhook(token, body) {
|
|
51
|
+
return this.engine.signal(token, body);
|
|
52
|
+
}
|
|
53
|
+
/** Side-effect-free read of a value a run published via `ctx.setEvent` (a live query). */
|
|
54
|
+
getEvent(runId, key) {
|
|
55
|
+
return this.engine.getEvent(runId, key);
|
|
56
|
+
}
|
|
57
|
+
/** Deliver a validated `ctx.onUpdate` to a run; the validator may reject it (see UpdateResult). */
|
|
58
|
+
update(runId, name, arg) {
|
|
59
|
+
return this.engine.update(runId, name, arg);
|
|
60
|
+
}
|
|
45
61
|
/**
|
|
46
62
|
* Live stream of a run's lifecycle events for SSE. Backed by `engine.subscribe`, which — when the
|
|
47
63
|
* transport has a control plane — receives events from EVERY instance, so a dashboard-only pod
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard.service.js","sourceRoot":"","sources":["../../src/server/dashboard.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAIL,WAAW,
|
|
1
|
+
{"version":3,"file":"dashboard.service.js","sourceRoot":"","sources":["../../src/server/dashboard.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAIL,WAAW,EAIX,cAAc,GAEf,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAQlC,2DAA2D;AAEpD,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IAEa;IACrB;IAFnB,YACwC,KAAiB,EACtC,MAAsB;QADD,UAAK,GAAL,KAAK,CAAY;QACtC,WAAM,GAAN,MAAM,CAAgB;IACtC,CAAC;IAEJ,QAAQ,CAAC,KAAe;QACtB,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,KAAa;QAC9B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QACzD,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;IAC3B,CAAC;IAED,qFAAqF;IACrF,KAAK,CAAC,KAAa;QACjB,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,CAAC,KAAa,EAAE,IAA+B;QACnD,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,yEAAyE;IACzE,QAAQ,CAAC,KAAa;QACpB,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAED;;;;OAIG;IACH,cAAc,CAAC,KAAa,EAAE,IAAa;QACzC,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,0FAA0F;IAC1F,QAAQ,CAAC,KAAa,EAAE,GAAW;QACjC,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC1C,CAAC;IAED,mGAAmG;IACnG,MAAM,CAAC,KAAa,EAAE,IAAY,EAAE,GAAY;QAC9C,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IAC9C,CAAC;IAED;;;;OAIG;IACH,SAAS,CAAC,KAAa;QACrB,OAAO,IAAI,UAAU,CAAwB,CAAC,UAAU,EAAE,EAAE;YAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC1C,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK;oBAAE,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YAC9D,CAAC,CAAC,CAAC;YACH,OAAO,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;QACrB,CAAC,CAAC,CAAC;IACL,CAAC;CACF,CAAA;AA/DY,gBAAgB;IAD5B,UAAU,EAAE;IAGR,WAAA,MAAM,CAAC,WAAW,CAAC,CAAA;6CACK,cAAc;GAH9B,gBAAgB,CA+D5B"}
|
|
@@ -12,7 +12,18 @@ export declare class DurableApiController {
|
|
|
12
12
|
data: import("@dudousxd/nestjs-durable-core").EngineEvent;
|
|
13
13
|
}>;
|
|
14
14
|
retry(id: string): Promise<import("@dudousxd/nestjs-durable-core").RunResult>;
|
|
15
|
-
cancel(id: string): Promise<import("@dudousxd/nestjs-durable-core").RunResult>;
|
|
15
|
+
cancel(id: string, compensate?: string): Promise<import("@dudousxd/nestjs-durable-core").RunResult>;
|
|
16
16
|
continue(id: string): Promise<import("@dudousxd/nestjs-durable-core").RunResult>;
|
|
17
|
+
/**
|
|
18
|
+
* Public callback endpoint for `ctx.webhook()`: a third party POSTs here (the url handed to it),
|
|
19
|
+
* and the body resumes the waiting run. NOTE: this is reachable by external systems — protect it
|
|
20
|
+
* by treating the token as a secret (it embeds runId:seq) and/or fronting it with signature
|
|
21
|
+
* verification in your own middleware.
|
|
22
|
+
*/
|
|
23
|
+
webhook(token: string, body: unknown): Promise<import("@dudousxd/nestjs-durable-core").RunResult>;
|
|
24
|
+
/** Live query: the latest value a run published for `key` via `ctx.setEvent` (no side effect). */
|
|
25
|
+
event(id: string, key: string): Promise<unknown>;
|
|
26
|
+
/** Deliver a validated `ctx.onUpdate` to a run; the body is the update argument. */
|
|
27
|
+
update(id: string, name: string, body: unknown): Promise<import("@dudousxd/nestjs-durable-core").UpdateResult>;
|
|
17
28
|
}
|
|
18
29
|
//# sourceMappingURL=durable-api.controller.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"durable-api.controller.d.ts","sourceRoot":"","sources":["../../src/server/durable-api.controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"durable-api.controller.d.ts","sourceRoot":"","sources":["../../src/server/durable-api.controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAW/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,kGAAkG;AAClG,qBACa,oBAAoB;IACnB,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAAT,SAAS,EAAE,gBAAgB;IAGxD,IAAI,CAAkB,MAAM,CAAC,EAAE,SAAS,EAAqB,QAAQ,CAAC,EAAE,MAAM;IAKxE,GAAG,CAAc,EAAE,EAAE,MAAM;IAMjC;yGACqG;IAErG,MAAM,CAAc,EAAE,EAAE,MAAM;;;IAK9B,KAAK,CAAc,EAAE,EAAE,MAAM;IAKvB,MAAM,CAAc,EAAE,EAAE,MAAM,EAAuB,UAAU,CAAC,EAAE,MAAM;IAOxE,QAAQ,CAAc,EAAE,EAAE,MAAM;IAMtC;;;;;OAKG;IAEG,OAAO,CAAiB,KAAK,EAAE,MAAM,EAAU,IAAI,EAAE,OAAO;IAMlE,kGAAkG;IAElG,KAAK,CAAc,EAAE,EAAE,MAAM,EAAgB,GAAG,EAAE,MAAM;IAIxD,oFAAoF;IAEpF,MAAM,CAAc,EAAE,EAAE,MAAM,EAAiB,IAAI,EAAE,MAAM,EAAU,IAAI,EAAE,OAAO;CAGnF"}
|
|
@@ -10,7 +10,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
10
10
|
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
11
11
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
12
12
|
};
|
|
13
|
-
import { Controller, Get, NotFoundException, Param, Post, Query, Sse } from '@nestjs/common';
|
|
13
|
+
import { Body, Controller, Get, NotFoundException, Param, Post, Query, Sse, } from '@nestjs/common';
|
|
14
14
|
import { DashboardService } from './dashboard.service.js';
|
|
15
15
|
/** JSON API consumed by the control-plane SPA. Mounted at `apiBasePath` (set by RouterModule). */
|
|
16
16
|
let DurableApiController = class DurableApiController {
|
|
@@ -35,8 +35,8 @@ let DurableApiController = class DurableApiController {
|
|
|
35
35
|
retry(id) {
|
|
36
36
|
return this.dashboard.retry(id);
|
|
37
37
|
}
|
|
38
|
-
async cancel(id) {
|
|
39
|
-
const result = await this.dashboard.cancel(id);
|
|
38
|
+
async cancel(id, compensate) {
|
|
39
|
+
const result = await this.dashboard.cancel(id, { compensate: compensate === 'true' });
|
|
40
40
|
if (!result)
|
|
41
41
|
throw new NotFoundException(`run ${id} not found`);
|
|
42
42
|
return result;
|
|
@@ -47,6 +47,26 @@ let DurableApiController = class DurableApiController {
|
|
|
47
47
|
throw new NotFoundException(`run ${id} is not paused at a breakpoint`);
|
|
48
48
|
return result;
|
|
49
49
|
}
|
|
50
|
+
/**
|
|
51
|
+
* Public callback endpoint for `ctx.webhook()`: a third party POSTs here (the url handed to it),
|
|
52
|
+
* and the body resumes the waiting run. NOTE: this is reachable by external systems — protect it
|
|
53
|
+
* by treating the token as a secret (it embeds runId:seq) and/or fronting it with signature
|
|
54
|
+
* verification in your own middleware.
|
|
55
|
+
*/
|
|
56
|
+
async webhook(token, body) {
|
|
57
|
+
const result = await this.dashboard.deliverWebhook(token, body);
|
|
58
|
+
if (!result)
|
|
59
|
+
throw new NotFoundException(`no run is waiting on webhook ${token}`);
|
|
60
|
+
return result;
|
|
61
|
+
}
|
|
62
|
+
/** Live query: the latest value a run published for `key` via `ctx.setEvent` (no side effect). */
|
|
63
|
+
event(id, key) {
|
|
64
|
+
return this.dashboard.getEvent(id, key);
|
|
65
|
+
}
|
|
66
|
+
/** Deliver a validated `ctx.onUpdate` to a run; the body is the update argument. */
|
|
67
|
+
update(id, name, body) {
|
|
68
|
+
return this.dashboard.update(id, name, body);
|
|
69
|
+
}
|
|
50
70
|
};
|
|
51
71
|
__decorate([
|
|
52
72
|
Get('runs'),
|
|
@@ -80,8 +100,9 @@ __decorate([
|
|
|
80
100
|
__decorate([
|
|
81
101
|
Post('runs/:id/cancel'),
|
|
82
102
|
__param(0, Param('id')),
|
|
103
|
+
__param(1, Query('compensate')),
|
|
83
104
|
__metadata("design:type", Function),
|
|
84
|
-
__metadata("design:paramtypes", [String]),
|
|
105
|
+
__metadata("design:paramtypes", [String, String]),
|
|
85
106
|
__metadata("design:returntype", Promise)
|
|
86
107
|
], DurableApiController.prototype, "cancel", null);
|
|
87
108
|
__decorate([
|
|
@@ -91,6 +112,31 @@ __decorate([
|
|
|
91
112
|
__metadata("design:paramtypes", [String]),
|
|
92
113
|
__metadata("design:returntype", Promise)
|
|
93
114
|
], DurableApiController.prototype, "continue", null);
|
|
115
|
+
__decorate([
|
|
116
|
+
Post('webhooks/:token'),
|
|
117
|
+
__param(0, Param('token')),
|
|
118
|
+
__param(1, Body()),
|
|
119
|
+
__metadata("design:type", Function),
|
|
120
|
+
__metadata("design:paramtypes", [String, Object]),
|
|
121
|
+
__metadata("design:returntype", Promise)
|
|
122
|
+
], DurableApiController.prototype, "webhook", null);
|
|
123
|
+
__decorate([
|
|
124
|
+
Get('runs/:id/events/:key'),
|
|
125
|
+
__param(0, Param('id')),
|
|
126
|
+
__param(1, Param('key')),
|
|
127
|
+
__metadata("design:type", Function),
|
|
128
|
+
__metadata("design:paramtypes", [String, String]),
|
|
129
|
+
__metadata("design:returntype", void 0)
|
|
130
|
+
], DurableApiController.prototype, "event", null);
|
|
131
|
+
__decorate([
|
|
132
|
+
Post('runs/:id/updates/:name'),
|
|
133
|
+
__param(0, Param('id')),
|
|
134
|
+
__param(1, Param('name')),
|
|
135
|
+
__param(2, Body()),
|
|
136
|
+
__metadata("design:type", Function),
|
|
137
|
+
__metadata("design:paramtypes", [String, String, Object]),
|
|
138
|
+
__metadata("design:returntype", void 0)
|
|
139
|
+
], DurableApiController.prototype, "update", null);
|
|
94
140
|
DurableApiController = __decorate([
|
|
95
141
|
Controller(),
|
|
96
142
|
__metadata("design:paramtypes", [DashboardService])
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"durable-api.controller.js","sourceRoot":"","sources":["../../src/server/durable-api.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"durable-api.controller.js","sourceRoot":"","sources":["../../src/server/durable-api.controller.ts"],"names":[],"mappings":"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"}
|