@scenario-labs/sdk 0.1.3 → 0.3.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/CHANGELOG.md +49 -0
- package/LICENSE +1 -1
- package/README.md +29 -27
- package/client.d.mts +33 -16
- package/client.d.mts.map +1 -1
- package/client.d.ts +33 -16
- package/client.d.ts.map +1 -1
- package/client.js +88 -50
- package/client.js.map +1 -1
- package/client.mjs +86 -48
- package/client.mjs.map +1 -1
- package/core/api-promise.d.mts +2 -2
- package/core/api-promise.d.mts.map +1 -1
- package/core/api-promise.d.ts +2 -2
- package/core/api-promise.d.ts.map +1 -1
- package/core/api-promise.js.map +1 -1
- package/core/api-promise.mjs.map +1 -1
- package/core/error.d.mts +2 -2
- package/core/error.d.mts.map +1 -1
- package/core/error.d.ts +2 -2
- package/core/error.d.ts.map +1 -1
- package/core/error.js +4 -4
- package/core/error.js.map +1 -1
- package/core/error.mjs +2 -2
- package/core/error.mjs.map +1 -1
- package/core/resource.d.mts +3 -3
- package/core/resource.d.mts.map +1 -1
- package/core/resource.d.ts +3 -3
- package/core/resource.d.ts.map +1 -1
- package/core/resource.js.map +1 -1
- package/core/resource.mjs.map +1 -1
- package/index.d.mts +9 -3
- package/index.d.mts.map +1 -1
- package/index.d.ts +9 -3
- package/index.d.ts.map +1 -1
- package/index.js +18 -6
- package/index.js.map +1 -1
- package/index.mjs +8 -3
- package/index.mjs.map +1 -1
- package/internal/parse.d.mts +2 -2
- package/internal/parse.d.mts.map +1 -1
- package/internal/parse.d.ts +2 -2
- package/internal/parse.d.ts.map +1 -1
- package/internal/parse.js.map +1 -1
- package/internal/parse.mjs.map +1 -1
- package/internal/request-options.d.mts +4 -0
- package/internal/request-options.d.mts.map +1 -1
- package/internal/request-options.d.ts +4 -0
- package/internal/request-options.d.ts.map +1 -1
- package/internal/request-options.js.map +1 -1
- package/internal/request-options.mjs.map +1 -1
- package/internal/shims.js +1 -1
- package/internal/shims.js.map +1 -1
- package/internal/shims.mjs +1 -1
- package/internal/shims.mjs.map +1 -1
- package/internal/uploads.d.mts +4 -4
- package/internal/uploads.d.mts.map +1 -1
- package/internal/uploads.d.ts +4 -4
- package/internal/uploads.d.ts.map +1 -1
- package/internal/uploads.js.map +1 -1
- package/internal/uploads.mjs.map +1 -1
- package/internal/utils/base64.js +2 -2
- package/internal/utils/base64.js.map +1 -1
- package/internal/utils/base64.mjs +3 -3
- package/internal/utils/base64.mjs.map +1 -1
- package/internal/utils/log.d.mts +3 -3
- package/internal/utils/log.d.mts.map +1 -1
- package/internal/utils/log.d.ts +3 -3
- package/internal/utils/log.d.ts.map +1 -1
- package/internal/utils/log.js.map +1 -1
- package/internal/utils/log.mjs.map +1 -1
- package/internal/utils/path.js +1 -1
- package/internal/utils/path.js.map +1 -1
- package/internal/utils/path.mjs +2 -2
- package/internal/utils/path.mjs.map +1 -1
- package/internal/utils/values.js +5 -5
- package/internal/utils/values.js.map +1 -1
- package/internal/utils/values.mjs +6 -6
- package/internal/utils/values.mjs.map +1 -1
- package/lib/generate.d.mts +19 -0
- package/lib/generate.d.mts.map +1 -0
- package/lib/generate.d.ts +19 -0
- package/lib/generate.d.ts.map +1 -0
- package/lib/generate.js +35 -0
- package/lib/generate.js.map +1 -0
- package/lib/generate.mjs +31 -0
- package/lib/generate.mjs.map +1 -0
- package/lib/job.d.mts +48 -0
- package/lib/job.d.mts.map +1 -0
- package/lib/job.d.ts +48 -0
- package/lib/job.d.ts.map +1 -0
- package/lib/job.js +50 -0
- package/lib/job.js.map +1 -0
- package/lib/job.mjs +45 -0
- package/lib/job.mjs.map +1 -0
- package/lib/models.d.mts +20 -0
- package/lib/models.d.mts.map +1 -0
- package/lib/models.d.ts +20 -0
- package/lib/models.d.ts.map +1 -0
- package/lib/models.js +28 -0
- package/lib/models.js.map +1 -0
- package/lib/models.mjs +23 -0
- package/lib/models.mjs.map +1 -0
- package/lib/scenario.d.mts +39 -0
- package/lib/scenario.d.mts.map +1 -0
- package/lib/scenario.d.ts +39 -0
- package/lib/scenario.d.ts.map +1 -0
- package/lib/scenario.js +46 -0
- package/lib/scenario.js.map +1 -0
- package/lib/scenario.mjs +42 -0
- package/lib/scenario.mjs.map +1 -0
- package/lib/workflow.d.mts +53 -0
- package/lib/workflow.d.mts.map +1 -0
- package/lib/workflow.d.ts +53 -0
- package/lib/workflow.d.ts.map +1 -0
- package/lib/workflow.js +67 -0
- package/lib/workflow.js.map +1 -0
- package/lib/workflow.mjs +62 -0
- package/lib/workflow.mjs.map +1 -0
- package/lib/workflow_validator.d.mts +22 -0
- package/lib/workflow_validator.d.mts.map +1 -0
- package/lib/workflow_validator.d.ts +22 -0
- package/lib/workflow_validator.d.ts.map +1 -0
- package/lib/workflow_validator.js +124 -0
- package/lib/workflow_validator.js.map +1 -0
- package/lib/workflow_validator.mjs +121 -0
- package/lib/workflow_validator.mjs.map +1 -0
- package/package.json +13 -3
- package/resources/assets/assets.d.mts +399 -88
- package/resources/assets/assets.d.mts.map +1 -1
- package/resources/assets/assets.d.ts +399 -88
- package/resources/assets/assets.d.ts.map +1 -1
- package/resources/assets/assets.js.map +1 -1
- package/resources/assets/assets.mjs.map +1 -1
- package/resources/assets/public.d.mts +30 -27
- package/resources/assets/public.d.mts.map +1 -1
- package/resources/assets/public.d.ts +30 -27
- package/resources/assets/public.d.ts.map +1 -1
- package/resources/assets/public.js +2 -2
- package/resources/assets/public.js.map +1 -1
- package/resources/assets/public.mjs +2 -2
- package/resources/assets/public.mjs.map +1 -1
- package/resources/collections/collections.d.mts +1 -1
- package/resources/collections/collections.d.ts +1 -1
- package/resources/generate.d.mts +4188 -1370
- package/resources/generate.d.mts.map +1 -1
- package/resources/generate.d.ts +4188 -1370
- package/resources/generate.d.ts.map +1 -1
- package/resources/index.d.mts +1 -1
- package/resources/index.d.mts.map +1 -1
- package/resources/index.d.ts +1 -1
- package/resources/index.d.ts.map +1 -1
- package/resources/jobs.d.mts +943 -33
- package/resources/jobs.d.mts.map +1 -1
- package/resources/jobs.d.ts +943 -33
- package/resources/jobs.d.ts.map +1 -1
- package/resources/jobs.js +3 -2
- package/resources/jobs.js.map +1 -1
- package/resources/jobs.mjs +3 -2
- package/resources/jobs.mjs.map +1 -1
- package/resources/models/description.d.mts +8 -8
- package/resources/models/description.d.mts.map +1 -1
- package/resources/models/description.d.ts +8 -8
- package/resources/models/description.d.ts.map +1 -1
- package/resources/models/examples.d.mts +640 -34
- package/resources/models/examples.d.mts.map +1 -1
- package/resources/models/examples.d.ts +640 -34
- package/resources/models/examples.d.ts.map +1 -1
- package/resources/models/models.d.mts +1323 -301
- package/resources/models/models.d.mts.map +1 -1
- package/resources/models/models.d.ts +1323 -301
- package/resources/models/models.d.ts.map +1 -1
- package/resources/models/models.js.map +1 -1
- package/resources/models/models.mjs.map +1 -1
- package/resources/models/train.d.mts +718 -90
- package/resources/models/train.d.mts.map +1 -1
- package/resources/models/train.d.ts +718 -90
- package/resources/models/train.d.ts.map +1 -1
- package/resources/models/train.js +9 -4
- package/resources/models/train.js.map +1 -1
- package/resources/models/train.mjs +9 -4
- package/resources/models/train.mjs.map +1 -1
- package/resources/models/training-images.d.mts +2 -2
- package/resources/models/training-images.d.mts.map +1 -1
- package/resources/models/training-images.d.ts +2 -2
- package/resources/models/training-images.d.ts.map +1 -1
- package/resources/search.d.mts +6 -31
- package/resources/search.d.mts.map +1 -1
- package/resources/search.d.ts +6 -31
- package/resources/search.d.ts.map +1 -1
- package/resources/search.js +6 -2
- package/resources/search.js.map +1 -1
- package/resources/search.mjs +6 -2
- package/resources/search.mjs.map +1 -1
- package/resources/tags.d.mts +1 -1
- package/resources/tags.d.ts +1 -1
- package/resources/usages.d.mts +401 -16
- package/resources/usages.d.mts.map +1 -1
- package/resources/usages.d.ts +401 -16
- package/resources/usages.d.ts.map +1 -1
- package/resources/workflows.d.mts +2738 -101
- package/resources/workflows.d.mts.map +1 -1
- package/resources/workflows.d.ts +2738 -101
- package/resources/workflows.d.ts.map +1 -1
- package/src/client.ts +102 -42
- package/src/core/api-promise.ts +4 -4
- package/src/core/error.ts +2 -2
- package/src/core/resource.ts +3 -3
- package/src/index.ts +9 -3
- package/src/internal/parse.ts +2 -2
- package/src/internal/request-options.ts +2 -0
- package/src/internal/shims.ts +1 -1
- package/src/internal/uploads.ts +5 -5
- package/src/internal/utils/base64.ts +3 -3
- package/src/internal/utils/log.ts +3 -3
- package/src/internal/utils/path.ts +2 -2
- package/src/internal/utils/values.ts +6 -6
- package/src/lib/generate.ts +77 -0
- package/src/lib/job.ts +78 -0
- package/src/lib/models.ts +27 -0
- package/src/lib/scenario.ts +39 -0
- package/src/lib/workflow.ts +99 -0
- package/src/lib/workflow_validator.ts +167 -0
- package/src/resources/assets/assets.ts +788 -177
- package/src/resources/assets/public.ts +151 -29
- package/src/resources/collections/collections.ts +1 -1
- package/src/resources/generate.ts +6254 -2217
- package/src/resources/index.ts +2 -2
- package/src/resources/jobs.ts +1355 -26
- package/src/resources/models/description.ts +50 -8
- package/src/resources/models/examples.ts +906 -56
- package/src/resources/models/models.ts +1867 -330
- package/src/resources/models/train.ts +976 -98
- package/src/resources/models/training-images.ts +2 -2
- package/src/resources/search.ts +13 -39
- package/src/resources/tags.ts +1 -1
- package/src/resources/usages.ts +544 -11
- package/src/resources/workflows.ts +4586 -914
- package/src/version.ts +1 -1
- package/version.d.mts +1 -1
- package/version.d.ts +1 -1
- package/version.js +1 -1
- package/version.mjs +1 -1
package/lib/workflow.mjs
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { Workflows, } from "../resources/workflows.mjs";
|
|
2
|
+
import { enhanceJob } from "./job.mjs";
|
|
3
|
+
import { validateWorkflowFlow } from "./workflow_validator.mjs";
|
|
4
|
+
/**
|
|
5
|
+
* Enhanced workflow object with helper methods.
|
|
6
|
+
* Has all original workflow fields plus `findNode()`, `getNodesByType()`.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* const response = await client.workflows.retrieve(workflowId);
|
|
11
|
+
* response.workflow.findNode('final_image');
|
|
12
|
+
* response.workflow.getNodesByType('custom-model');
|
|
13
|
+
* response.workflow.name; // original fields still work
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
export class WorkflowEntity {
|
|
17
|
+
/** Find a node in the workflow definition by ID. */
|
|
18
|
+
findNode(nodeId) {
|
|
19
|
+
return this.flow.find((node) => node.id === nodeId);
|
|
20
|
+
}
|
|
21
|
+
/** Get all nodes of a specific type from the workflow definition. */
|
|
22
|
+
getNodesByType(type) {
|
|
23
|
+
return this.flow.filter((node) => node.type === type);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Validate the structural integrity of a workflow flow.
|
|
27
|
+
* Throws an `Error` with a human-readable message on the first violation found.
|
|
28
|
+
*/
|
|
29
|
+
validate() {
|
|
30
|
+
validateWorkflowFlow(this.flow);
|
|
31
|
+
}
|
|
32
|
+
/** @internal Create a WorkflowEntity from raw workflow data. */
|
|
33
|
+
static from(data) {
|
|
34
|
+
return Object.assign(Object.create(WorkflowEntity.prototype), data);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Enhanced Workflows resource.
|
|
39
|
+
* Extends the generated {@link Workflows} — all original methods are inherited.
|
|
40
|
+
* Overrides `retrieve()`, `run()`, and `approveUser()` to return enriched response objects.
|
|
41
|
+
*/
|
|
42
|
+
export class EnhancedWorkflows extends Workflows {
|
|
43
|
+
/**
|
|
44
|
+
* Get workflow by ID. Returns an enhanced response where `workflow` has
|
|
45
|
+
* `findNode()`, `getNodesByType()`, and `validate()`.
|
|
46
|
+
*/
|
|
47
|
+
retrieve(workflowID, options) {
|
|
48
|
+
return super.retrieve(workflowID, options)._thenUnwrap((data) => ({
|
|
49
|
+
...data,
|
|
50
|
+
workflow: WorkflowEntity.from(data.workflow),
|
|
51
|
+
}));
|
|
52
|
+
}
|
|
53
|
+
/** Run a workflow. Returns an enhanced response where `job` has `.wait()`. */
|
|
54
|
+
run(workflowID, params, options) {
|
|
55
|
+
return enhanceJob(this._client, super.run(workflowID, params, options));
|
|
56
|
+
}
|
|
57
|
+
/** Approve a user approval node. Returns an enhanced response where `job` has `.wait()`. */
|
|
58
|
+
approveUser(workflowID, body, options) {
|
|
59
|
+
return enhanceJob(this._client, super.approveUser(workflowID, body, options));
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=workflow.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow.mjs","sourceRoot":"","sources":["../src/lib/workflow.ts"],"names":[],"mappings":"OAEO,EACL,SAAS,GAMV;OACM,EAAgB,UAAU,EAAE;OAC5B,EAAE,oBAAoB,EAAE;AAK/B;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,cAAc;IACzB,oDAAoD;IACpD,QAAQ,CAEN,MAAc;QAEd,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;IACtD,CAAC;IAED,qEAAqE;IACrE,cAAc,CAA2D,IAAc;QACrF,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACxD,CAAC;IAED;;;OAGG;IACH,QAAQ;QACN,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,gEAAgE;IAChE,MAAM,CAAC,IAAI,CAAC,IAAuC;QACjD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,CAAC;IACtE,CAAC;CACF;AAOD;;;;GAIG;AACH,MAAM,OAAO,iBAAkB,SAAQ,SAAS;IAC9C;;;OAGG;IACM,QAAQ,CACf,UAAkB,EAClB,OAAwB;QAExB,OAAO,KAAK,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAChE,GAAG,IAAI;YACP,QAAQ,EAAE,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;SAC7C,CAAC,CAAC,CAAC;IACN,CAAC;IAED,8EAA8E;IACrE,GAAG,CACV,UAAkB,EAClB,MAAyB,EACzB,OAAwB;QAExB,OAAO,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC1E,CAAC;IAED,4FAA4F;IACnF,WAAW,CAClB,UAAkB,EAClB,IAA+B,EAC/B,OAAwB;QAExB,OAAO,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,WAAW,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IAChF,CAAC;CACF"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validates the structural integrity of a workflow flow (array of nodes).
|
|
3
|
+
*
|
|
4
|
+
* Throws an `Error` with a human-readable message on the first violation found.
|
|
5
|
+
*
|
|
6
|
+
* Checks performed:
|
|
7
|
+
* 1. Every node has a non-empty string `id`
|
|
8
|
+
* 2. Node IDs are unique within the flow
|
|
9
|
+
* 3. Every node `type` is a recognized workflow node type
|
|
10
|
+
* 4. Per-type required fields:
|
|
11
|
+
* - custom-model → modelId
|
|
12
|
+
* - workflow → workflowId
|
|
13
|
+
* - logic → logicType
|
|
14
|
+
* - for-each → loopBodyNodeIds (non-empty) OR count (>0)
|
|
15
|
+
* 5. Cross-references all point to node IDs that exist in the flow:
|
|
16
|
+
* - dependsOn entries
|
|
17
|
+
* - input ref.node (excluding "workflow" which is a reserved keyword)
|
|
18
|
+
* - input ref.conditional entries
|
|
19
|
+
* - loopBodyNodeIds entries
|
|
20
|
+
*/
|
|
21
|
+
export declare function validateWorkflowFlow(flow: unknown[]): void;
|
|
22
|
+
//# sourceMappingURL=workflow_validator.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow_validator.d.mts","sourceRoot":"","sources":["../src/lib/workflow_validator.ts"],"names":[],"mappings":"AAoCA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CA4E1D"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validates the structural integrity of a workflow flow (array of nodes).
|
|
3
|
+
*
|
|
4
|
+
* Throws an `Error` with a human-readable message on the first violation found.
|
|
5
|
+
*
|
|
6
|
+
* Checks performed:
|
|
7
|
+
* 1. Every node has a non-empty string `id`
|
|
8
|
+
* 2. Node IDs are unique within the flow
|
|
9
|
+
* 3. Every node `type` is a recognized workflow node type
|
|
10
|
+
* 4. Per-type required fields:
|
|
11
|
+
* - custom-model → modelId
|
|
12
|
+
* - workflow → workflowId
|
|
13
|
+
* - logic → logicType
|
|
14
|
+
* - for-each → loopBodyNodeIds (non-empty) OR count (>0)
|
|
15
|
+
* 5. Cross-references all point to node IDs that exist in the flow:
|
|
16
|
+
* - dependsOn entries
|
|
17
|
+
* - input ref.node (excluding "workflow" which is a reserved keyword)
|
|
18
|
+
* - input ref.conditional entries
|
|
19
|
+
* - loopBodyNodeIds entries
|
|
20
|
+
*/
|
|
21
|
+
export declare function validateWorkflowFlow(flow: unknown[]): void;
|
|
22
|
+
//# sourceMappingURL=workflow_validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow_validator.d.ts","sourceRoot":"","sources":["../src/lib/workflow_validator.ts"],"names":[],"mappings":"AAoCA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CA4E1D"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateWorkflowFlow = validateWorkflowFlow;
|
|
4
|
+
const VALID_NODE_TYPES = new Set([
|
|
5
|
+
'custom-model',
|
|
6
|
+
'for-each',
|
|
7
|
+
'generate-prompt',
|
|
8
|
+
'list',
|
|
9
|
+
'logic',
|
|
10
|
+
'model',
|
|
11
|
+
'remove-background',
|
|
12
|
+
'transform',
|
|
13
|
+
'user-approval',
|
|
14
|
+
'workflow',
|
|
15
|
+
]);
|
|
16
|
+
/**
|
|
17
|
+
* Validates the structural integrity of a workflow flow (array of nodes).
|
|
18
|
+
*
|
|
19
|
+
* Throws an `Error` with a human-readable message on the first violation found.
|
|
20
|
+
*
|
|
21
|
+
* Checks performed:
|
|
22
|
+
* 1. Every node has a non-empty string `id`
|
|
23
|
+
* 2. Node IDs are unique within the flow
|
|
24
|
+
* 3. Every node `type` is a recognized workflow node type
|
|
25
|
+
* 4. Per-type required fields:
|
|
26
|
+
* - custom-model → modelId
|
|
27
|
+
* - workflow → workflowId
|
|
28
|
+
* - logic → logicType
|
|
29
|
+
* - for-each → loopBodyNodeIds (non-empty) OR count (>0)
|
|
30
|
+
* 5. Cross-references all point to node IDs that exist in the flow:
|
|
31
|
+
* - dependsOn entries
|
|
32
|
+
* - input ref.node (excluding "workflow" which is a reserved keyword)
|
|
33
|
+
* - input ref.conditional entries
|
|
34
|
+
* - loopBodyNodeIds entries
|
|
35
|
+
*/
|
|
36
|
+
function validateWorkflowFlow(flow) {
|
|
37
|
+
const nodeIds = new Set();
|
|
38
|
+
const firstSeenAt = new Map();
|
|
39
|
+
// Pass 1 — per-node checks (ID, type, required fields)
|
|
40
|
+
for (let i = 0; i < flow.length; i++) {
|
|
41
|
+
const node = flow[i];
|
|
42
|
+
if (typeof node.id !== 'string' || !node.id) {
|
|
43
|
+
throw new Error(`Node at index ${i} is missing an "id" field`);
|
|
44
|
+
}
|
|
45
|
+
if (nodeIds.has(node.id)) {
|
|
46
|
+
throw new Error(`Duplicate node id "${node.id}" at index ${i} (first seen at index ${firstSeenAt.get(node.id)})`);
|
|
47
|
+
}
|
|
48
|
+
nodeIds.add(node.id);
|
|
49
|
+
firstSeenAt.set(node.id, i);
|
|
50
|
+
const label = `"${node.id}"`;
|
|
51
|
+
if (typeof node.type !== 'string' || !VALID_NODE_TYPES.has(node.type)) {
|
|
52
|
+
throw new Error(`Node ${label} has invalid type "${node.type}". Valid types are: ${[...VALID_NODE_TYPES].join(', ')}`);
|
|
53
|
+
}
|
|
54
|
+
const type = node.type;
|
|
55
|
+
if (type === 'custom-model' && !node.modelId) {
|
|
56
|
+
throw new Error(`Node ${label} (custom-model) is missing required field "modelId"`);
|
|
57
|
+
}
|
|
58
|
+
if (type === 'workflow' && !node.workflowId) {
|
|
59
|
+
throw new Error(`Node ${label} (workflow) is missing required field "workflowId"`);
|
|
60
|
+
}
|
|
61
|
+
if (type === 'logic' && !node.logicType) {
|
|
62
|
+
throw new Error(`Node ${label} (logic) is missing required field "logicType"`);
|
|
63
|
+
}
|
|
64
|
+
if (type === 'for-each') {
|
|
65
|
+
const hasLoopBody = Array.isArray(node.loopBodyNodeIds) && node.loopBodyNodeIds.length > 0;
|
|
66
|
+
const hasCount = typeof node.count === 'number' && node.count > 0;
|
|
67
|
+
if (!hasLoopBody && !hasCount) {
|
|
68
|
+
throw new Error(`Node ${label} (for-each) requires either "loopBodyNodeIds" (non-empty array) or "count" (positive number)`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
// Pass 2 — cross-reference checks (all node IDs are now collected)
|
|
73
|
+
for (const rawNode of flow) {
|
|
74
|
+
const node = rawNode;
|
|
75
|
+
const nodeId = node.id;
|
|
76
|
+
if (Array.isArray(node.dependsOn)) {
|
|
77
|
+
for (const depId of node.dependsOn) {
|
|
78
|
+
if (typeof depId === 'string' && !nodeIds.has(depId)) {
|
|
79
|
+
throw new Error(`Node "${nodeId}" dependsOn unknown node "${depId}"`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
if (Array.isArray(node.inputs)) {
|
|
84
|
+
for (const input of node.inputs) {
|
|
85
|
+
validateInputRefs(nodeId, input, nodeIds);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
if (Array.isArray(node.loopBodyNodeIds)) {
|
|
89
|
+
for (const bodyId of node.loopBodyNodeIds) {
|
|
90
|
+
if (typeof bodyId === 'string' && !nodeIds.has(bodyId)) {
|
|
91
|
+
throw new Error(`Node "${nodeId}" loopBodyNodeIds references unknown node "${bodyId}"`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
function validateInputRefs(nodeId, input, nodeIds) {
|
|
98
|
+
const inputName = typeof input.name === 'string' && input.name ? input.name : '(unnamed)';
|
|
99
|
+
if (input.ref) {
|
|
100
|
+
const { node: refNode, conditional } = input.ref;
|
|
101
|
+
// "workflow" is a reserved keyword meaning "take from the workflow's own inputs"
|
|
102
|
+
if (typeof refNode === 'string' && refNode !== 'workflow' && !nodeIds.has(refNode)) {
|
|
103
|
+
throw new Error(`Node "${nodeId}" input "${inputName}" references unknown node "${refNode}"`);
|
|
104
|
+
}
|
|
105
|
+
if (Array.isArray(conditional)) {
|
|
106
|
+
for (const condId of conditional) {
|
|
107
|
+
if (typeof condId === 'string' && !nodeIds.has(condId)) {
|
|
108
|
+
throw new Error(`Node "${nodeId}" input "${inputName}" has a conditional ref pointing to unknown node "${condId}"`);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
// Recurse into INPUTS_ARRAY sub-inputs
|
|
114
|
+
if (Array.isArray(input.items)) {
|
|
115
|
+
for (const item of input.items) {
|
|
116
|
+
if (Array.isArray(item)) {
|
|
117
|
+
for (const subInput of item) {
|
|
118
|
+
validateInputRefs(nodeId, subInput, nodeIds);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=workflow_validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow_validator.js","sourceRoot":"","sources":["../src/lib/workflow_validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
const VALID_NODE_TYPES = new Set([
|
|
2
|
+
'custom-model',
|
|
3
|
+
'for-each',
|
|
4
|
+
'generate-prompt',
|
|
5
|
+
'list',
|
|
6
|
+
'logic',
|
|
7
|
+
'model',
|
|
8
|
+
'remove-background',
|
|
9
|
+
'transform',
|
|
10
|
+
'user-approval',
|
|
11
|
+
'workflow',
|
|
12
|
+
]);
|
|
13
|
+
/**
|
|
14
|
+
* Validates the structural integrity of a workflow flow (array of nodes).
|
|
15
|
+
*
|
|
16
|
+
* Throws an `Error` with a human-readable message on the first violation found.
|
|
17
|
+
*
|
|
18
|
+
* Checks performed:
|
|
19
|
+
* 1. Every node has a non-empty string `id`
|
|
20
|
+
* 2. Node IDs are unique within the flow
|
|
21
|
+
* 3. Every node `type` is a recognized workflow node type
|
|
22
|
+
* 4. Per-type required fields:
|
|
23
|
+
* - custom-model → modelId
|
|
24
|
+
* - workflow → workflowId
|
|
25
|
+
* - logic → logicType
|
|
26
|
+
* - for-each → loopBodyNodeIds (non-empty) OR count (>0)
|
|
27
|
+
* 5. Cross-references all point to node IDs that exist in the flow:
|
|
28
|
+
* - dependsOn entries
|
|
29
|
+
* - input ref.node (excluding "workflow" which is a reserved keyword)
|
|
30
|
+
* - input ref.conditional entries
|
|
31
|
+
* - loopBodyNodeIds entries
|
|
32
|
+
*/
|
|
33
|
+
export function validateWorkflowFlow(flow) {
|
|
34
|
+
const nodeIds = new Set();
|
|
35
|
+
const firstSeenAt = new Map();
|
|
36
|
+
// Pass 1 — per-node checks (ID, type, required fields)
|
|
37
|
+
for (let i = 0; i < flow.length; i++) {
|
|
38
|
+
const node = flow[i];
|
|
39
|
+
if (typeof node.id !== 'string' || !node.id) {
|
|
40
|
+
throw new Error(`Node at index ${i} is missing an "id" field`);
|
|
41
|
+
}
|
|
42
|
+
if (nodeIds.has(node.id)) {
|
|
43
|
+
throw new Error(`Duplicate node id "${node.id}" at index ${i} (first seen at index ${firstSeenAt.get(node.id)})`);
|
|
44
|
+
}
|
|
45
|
+
nodeIds.add(node.id);
|
|
46
|
+
firstSeenAt.set(node.id, i);
|
|
47
|
+
const label = `"${node.id}"`;
|
|
48
|
+
if (typeof node.type !== 'string' || !VALID_NODE_TYPES.has(node.type)) {
|
|
49
|
+
throw new Error(`Node ${label} has invalid type "${node.type}". Valid types are: ${[...VALID_NODE_TYPES].join(', ')}`);
|
|
50
|
+
}
|
|
51
|
+
const type = node.type;
|
|
52
|
+
if (type === 'custom-model' && !node.modelId) {
|
|
53
|
+
throw new Error(`Node ${label} (custom-model) is missing required field "modelId"`);
|
|
54
|
+
}
|
|
55
|
+
if (type === 'workflow' && !node.workflowId) {
|
|
56
|
+
throw new Error(`Node ${label} (workflow) is missing required field "workflowId"`);
|
|
57
|
+
}
|
|
58
|
+
if (type === 'logic' && !node.logicType) {
|
|
59
|
+
throw new Error(`Node ${label} (logic) is missing required field "logicType"`);
|
|
60
|
+
}
|
|
61
|
+
if (type === 'for-each') {
|
|
62
|
+
const hasLoopBody = Array.isArray(node.loopBodyNodeIds) && node.loopBodyNodeIds.length > 0;
|
|
63
|
+
const hasCount = typeof node.count === 'number' && node.count > 0;
|
|
64
|
+
if (!hasLoopBody && !hasCount) {
|
|
65
|
+
throw new Error(`Node ${label} (for-each) requires either "loopBodyNodeIds" (non-empty array) or "count" (positive number)`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// Pass 2 — cross-reference checks (all node IDs are now collected)
|
|
70
|
+
for (const rawNode of flow) {
|
|
71
|
+
const node = rawNode;
|
|
72
|
+
const nodeId = node.id;
|
|
73
|
+
if (Array.isArray(node.dependsOn)) {
|
|
74
|
+
for (const depId of node.dependsOn) {
|
|
75
|
+
if (typeof depId === 'string' && !nodeIds.has(depId)) {
|
|
76
|
+
throw new Error(`Node "${nodeId}" dependsOn unknown node "${depId}"`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
if (Array.isArray(node.inputs)) {
|
|
81
|
+
for (const input of node.inputs) {
|
|
82
|
+
validateInputRefs(nodeId, input, nodeIds);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
if (Array.isArray(node.loopBodyNodeIds)) {
|
|
86
|
+
for (const bodyId of node.loopBodyNodeIds) {
|
|
87
|
+
if (typeof bodyId === 'string' && !nodeIds.has(bodyId)) {
|
|
88
|
+
throw new Error(`Node "${nodeId}" loopBodyNodeIds references unknown node "${bodyId}"`);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
function validateInputRefs(nodeId, input, nodeIds) {
|
|
95
|
+
const inputName = typeof input.name === 'string' && input.name ? input.name : '(unnamed)';
|
|
96
|
+
if (input.ref) {
|
|
97
|
+
const { node: refNode, conditional } = input.ref;
|
|
98
|
+
// "workflow" is a reserved keyword meaning "take from the workflow's own inputs"
|
|
99
|
+
if (typeof refNode === 'string' && refNode !== 'workflow' && !nodeIds.has(refNode)) {
|
|
100
|
+
throw new Error(`Node "${nodeId}" input "${inputName}" references unknown node "${refNode}"`);
|
|
101
|
+
}
|
|
102
|
+
if (Array.isArray(conditional)) {
|
|
103
|
+
for (const condId of conditional) {
|
|
104
|
+
if (typeof condId === 'string' && !nodeIds.has(condId)) {
|
|
105
|
+
throw new Error(`Node "${nodeId}" input "${inputName}" has a conditional ref pointing to unknown node "${condId}"`);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
// Recurse into INPUTS_ARRAY sub-inputs
|
|
111
|
+
if (Array.isArray(input.items)) {
|
|
112
|
+
for (const item of input.items) {
|
|
113
|
+
if (Array.isArray(item)) {
|
|
114
|
+
for (const subInput of item) {
|
|
115
|
+
validateInputRefs(nodeId, subInput, nodeIds);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=workflow_validator.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow_validator.mjs","sourceRoot":"","sources":["../src/lib/workflow_validator.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@scenario-labs/sdk",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "The official TypeScript library for the Scenario
|
|
5
|
-
"author": "Scenario
|
|
3
|
+
"version": "0.3.0",
|
|
4
|
+
"description": "The official TypeScript library for the Scenario API",
|
|
5
|
+
"author": "Scenario <support@scenario.com>",
|
|
6
6
|
"types": "./index.d.ts",
|
|
7
7
|
"main": "./index.js",
|
|
8
8
|
"type": "commonjs",
|
|
@@ -81,6 +81,16 @@
|
|
|
81
81
|
"./index.mjs": {
|
|
82
82
|
"default": "./index.mjs"
|
|
83
83
|
},
|
|
84
|
+
"./lib/*.mjs": {
|
|
85
|
+
"default": "./lib/*.mjs"
|
|
86
|
+
},
|
|
87
|
+
"./lib/*.js": {
|
|
88
|
+
"default": "./lib/*.js"
|
|
89
|
+
},
|
|
90
|
+
"./lib/*": {
|
|
91
|
+
"import": "./lib/*.mjs",
|
|
92
|
+
"require": "./lib/*.js"
|
|
93
|
+
},
|
|
84
94
|
"./resource": {
|
|
85
95
|
"import": "./resource.mjs",
|
|
86
96
|
"require": "./resource.js"
|