@scenario-labs/sdk 0.2.0 → 1.0.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.
Files changed (218) hide show
  1. package/CHANGELOG.md +48 -0
  2. package/README.md +44 -8
  3. package/client.d.mts +36 -16
  4. package/client.d.mts.map +1 -1
  5. package/client.d.ts +36 -16
  6. package/client.d.ts.map +1 -1
  7. package/client.js +21 -11
  8. package/client.js.map +1 -1
  9. package/client.mjs +21 -11
  10. package/client.mjs.map +1 -1
  11. package/core/pagination.d.mts +153 -0
  12. package/core/pagination.d.mts.map +1 -0
  13. package/core/pagination.d.ts +153 -0
  14. package/core/pagination.d.ts.map +1 -0
  15. package/core/pagination.js +276 -0
  16. package/core/pagination.js.map +1 -0
  17. package/core/pagination.mjs +263 -0
  18. package/core/pagination.mjs.map +1 -0
  19. package/index.d.mts +3 -0
  20. package/index.d.mts.map +1 -1
  21. package/index.d.ts +3 -0
  22. package/index.d.ts.map +1 -1
  23. package/index.js +9 -1
  24. package/index.js.map +1 -1
  25. package/index.mjs +3 -0
  26. package/index.mjs.map +1 -1
  27. package/internal/request-options.d.mts +1 -1
  28. package/internal/request-options.d.mts.map +1 -1
  29. package/internal/request-options.d.ts +1 -1
  30. package/internal/request-options.d.ts.map +1 -1
  31. package/lib/models.d.mts +34 -2
  32. package/lib/models.d.mts.map +1 -1
  33. package/lib/models.d.ts +34 -2
  34. package/lib/models.d.ts.map +1 -1
  35. package/lib/models.js +39 -2
  36. package/lib/models.js.map +1 -1
  37. package/lib/models.mjs +37 -1
  38. package/lib/models.mjs.map +1 -1
  39. package/lib/scenario.d.mts +2 -0
  40. package/lib/scenario.d.mts.map +1 -1
  41. package/lib/scenario.d.ts +2 -0
  42. package/lib/scenario.d.ts.map +1 -1
  43. package/lib/scenario.js +2 -0
  44. package/lib/scenario.js.map +1 -1
  45. package/lib/scenario.mjs +2 -0
  46. package/lib/scenario.mjs.map +1 -1
  47. package/lib/upload.d.mts +89 -0
  48. package/lib/upload.d.mts.map +1 -0
  49. package/lib/upload.d.ts +89 -0
  50. package/lib/upload.d.ts.map +1 -0
  51. package/lib/upload.js +193 -0
  52. package/lib/upload.js.map +1 -0
  53. package/lib/upload.mjs +156 -0
  54. package/lib/upload.mjs.map +1 -0
  55. package/lib/workflow.d.mts +19 -3
  56. package/lib/workflow.d.mts.map +1 -1
  57. package/lib/workflow.d.ts +19 -3
  58. package/lib/workflow.d.ts.map +1 -1
  59. package/lib/workflow.js +26 -5
  60. package/lib/workflow.js.map +1 -1
  61. package/lib/workflow.mjs +26 -5
  62. package/lib/workflow.mjs.map +1 -1
  63. package/lib/workflow_import_validator.d.mts +40 -0
  64. package/lib/workflow_import_validator.d.mts.map +1 -0
  65. package/lib/workflow_import_validator.d.ts +40 -0
  66. package/lib/workflow_import_validator.d.ts.map +1 -0
  67. package/lib/workflow_import_validator.js +69 -0
  68. package/lib/workflow_import_validator.js.map +1 -0
  69. package/lib/workflow_import_validator.mjs +64 -0
  70. package/lib/workflow_import_validator.mjs.map +1 -0
  71. package/lib/workflow_validator.d.mts +22 -0
  72. package/lib/workflow_validator.d.mts.map +1 -0
  73. package/lib/workflow_validator.d.ts +22 -0
  74. package/lib/workflow_validator.d.ts.map +1 -0
  75. package/lib/workflow_validator.js +124 -0
  76. package/lib/workflow_validator.js.map +1 -0
  77. package/lib/workflow_validator.mjs +121 -0
  78. package/lib/workflow_validator.mjs.map +1 -0
  79. package/package.json +11 -1
  80. package/pagination.d.mts +2 -0
  81. package/pagination.d.mts.map +1 -0
  82. package/pagination.d.ts +2 -0
  83. package/pagination.d.ts.map +1 -0
  84. package/pagination.js +6 -0
  85. package/pagination.js.map +1 -0
  86. package/pagination.mjs +2 -0
  87. package/pagination.mjs.map +1 -0
  88. package/resources/assets/assets.d.mts +631 -648
  89. package/resources/assets/assets.d.mts.map +1 -1
  90. package/resources/assets/assets.d.ts +631 -648
  91. package/resources/assets/assets.d.ts.map +1 -1
  92. package/resources/assets/assets.js +5 -4
  93. package/resources/assets/assets.js.map +1 -1
  94. package/resources/assets/assets.mjs +5 -4
  95. package/resources/assets/assets.mjs.map +1 -1
  96. package/resources/assets/index.d.mts +1 -1
  97. package/resources/assets/index.d.mts.map +1 -1
  98. package/resources/assets/index.d.ts +1 -1
  99. package/resources/assets/index.d.ts.map +1 -1
  100. package/resources/assets/index.js.map +1 -1
  101. package/resources/assets/index.mjs.map +1 -1
  102. package/resources/collections/assets.d.mts +8 -2
  103. package/resources/collections/assets.d.mts.map +1 -1
  104. package/resources/collections/assets.d.ts +8 -2
  105. package/resources/collections/assets.d.ts.map +1 -1
  106. package/resources/collections/assets.js +2 -2
  107. package/resources/collections/assets.js.map +1 -1
  108. package/resources/collections/assets.mjs +2 -2
  109. package/resources/collections/assets.mjs.map +1 -1
  110. package/resources/collections/collections.d.mts +42 -53
  111. package/resources/collections/collections.d.mts.map +1 -1
  112. package/resources/collections/collections.d.ts +42 -53
  113. package/resources/collections/collections.d.ts.map +1 -1
  114. package/resources/collections/collections.js +5 -1
  115. package/resources/collections/collections.js.map +1 -1
  116. package/resources/collections/collections.mjs +5 -1
  117. package/resources/collections/collections.mjs.map +1 -1
  118. package/resources/collections/index.d.mts +3 -3
  119. package/resources/collections/index.d.mts.map +1 -1
  120. package/resources/collections/index.d.ts +3 -3
  121. package/resources/collections/index.d.ts.map +1 -1
  122. package/resources/collections/index.js.map +1 -1
  123. package/resources/collections/index.mjs +2 -2
  124. package/resources/collections/index.mjs.map +1 -1
  125. package/resources/collections/models.d.mts +8 -2
  126. package/resources/collections/models.d.mts.map +1 -1
  127. package/resources/collections/models.d.ts +8 -2
  128. package/resources/collections/models.d.ts.map +1 -1
  129. package/resources/collections/models.js +2 -2
  130. package/resources/collections/models.js.map +1 -1
  131. package/resources/collections/models.mjs +2 -2
  132. package/resources/collections/models.mjs.map +1 -1
  133. package/resources/index.d.mts +7 -7
  134. package/resources/index.d.mts.map +1 -1
  135. package/resources/index.d.ts +7 -7
  136. package/resources/index.d.ts.map +1 -1
  137. package/resources/index.js.map +1 -1
  138. package/resources/index.mjs.map +1 -1
  139. package/resources/jobs.d.mts +369 -380
  140. package/resources/jobs.d.mts.map +1 -1
  141. package/resources/jobs.d.ts +369 -380
  142. package/resources/jobs.d.ts.map +1 -1
  143. package/resources/jobs.js +2 -1
  144. package/resources/jobs.js.map +1 -1
  145. package/resources/jobs.mjs +2 -1
  146. package/resources/jobs.mjs.map +1 -1
  147. package/resources/models/index.d.mts +1 -1
  148. package/resources/models/index.d.mts.map +1 -1
  149. package/resources/models/index.d.ts +1 -1
  150. package/resources/models/index.d.ts.map +1 -1
  151. package/resources/models/index.js.map +1 -1
  152. package/resources/models/index.mjs.map +1 -1
  153. package/resources/models/models.d.mts +956 -967
  154. package/resources/models/models.d.mts.map +1 -1
  155. package/resources/models/models.d.ts +956 -967
  156. package/resources/models/models.d.ts.map +1 -1
  157. package/resources/models/models.js +2 -1
  158. package/resources/models/models.js.map +1 -1
  159. package/resources/models/models.mjs +2 -1
  160. package/resources/models/models.mjs.map +1 -1
  161. package/resources/models/train.d.mts +38 -38
  162. package/resources/models/train.d.mts.map +1 -1
  163. package/resources/models/train.d.ts +38 -38
  164. package/resources/models/train.d.ts.map +1 -1
  165. package/resources/search.d.mts +215 -295
  166. package/resources/search.d.mts.map +1 -1
  167. package/resources/search.d.ts +215 -295
  168. package/resources/search.d.ts.map +1 -1
  169. package/resources/search.js +9 -2
  170. package/resources/search.js.map +1 -1
  171. package/resources/search.mjs +9 -2
  172. package/resources/search.mjs.map +1 -1
  173. package/resources/tags.d.mts +23 -35
  174. package/resources/tags.d.mts.map +1 -1
  175. package/resources/tags.d.ts +23 -35
  176. package/resources/tags.d.ts.map +1 -1
  177. package/resources/tags.js +2 -1
  178. package/resources/tags.js.map +1 -1
  179. package/resources/tags.mjs +2 -1
  180. package/resources/tags.mjs.map +1 -1
  181. package/resources/workflows.d.mts +688 -704
  182. package/resources/workflows.d.mts.map +1 -1
  183. package/resources/workflows.d.ts +688 -704
  184. package/resources/workflows.d.ts.map +1 -1
  185. package/resources/workflows.js +5 -1
  186. package/resources/workflows.js.map +1 -1
  187. package/resources/workflows.mjs +5 -1
  188. package/resources/workflows.mjs.map +1 -1
  189. package/src/client.ts +118 -15
  190. package/src/core/pagination.ts +497 -0
  191. package/src/index.ts +9 -0
  192. package/src/internal/request-options.ts +1 -1
  193. package/src/lib/models.ts +62 -2
  194. package/src/lib/scenario.ts +2 -0
  195. package/src/lib/upload.ts +250 -0
  196. package/src/lib/workflow.ts +39 -5
  197. package/src/lib/workflow_import_validator.ts +104 -0
  198. package/src/lib/workflow_validator.ts +167 -0
  199. package/src/pagination.ts +2 -0
  200. package/src/resources/assets/assets.ts +971 -905
  201. package/src/resources/assets/index.ts +3 -0
  202. package/src/resources/collections/assets.ts +14 -2
  203. package/src/resources/collections/collections.ts +49 -56
  204. package/src/resources/collections/index.ts +15 -2
  205. package/src/resources/collections/models.ts +14 -2
  206. package/src/resources/index.ts +10 -1
  207. package/src/resources/jobs.ts +613 -622
  208. package/src/resources/models/index.ts +1 -0
  209. package/src/resources/models/models.ts +1118 -1130
  210. package/src/resources/models/train.ts +40 -40
  211. package/src/resources/search.ts +239 -327
  212. package/src/resources/tags.ts +32 -39
  213. package/src/resources/workflows.ts +850 -864
  214. package/src/version.ts +1 -1
  215. package/version.d.mts +1 -1
  216. package/version.d.ts +1 -1
  217. package/version.js +1 -1
  218. package/version.mjs +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"workflow.mjs","sourceRoot":"","sources":["../src/lib/workflow.ts"],"names":[],"mappings":"OAEO,EACL,SAAS,GAMV;OACM,EAAgB,UAAU,EAAE;AAKnC;;;;;;;;;;;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,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"}
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;AAO/B;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,cAAc;IAGzB,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;;;;;OAKG;IACH,GAAG,CAED,MAAyB,EACzB,OAAwB;QAExB,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC;IAED,gEAAgE;IAChE,MAAM,CAAC,IAAI,CACT,MAAgB,EAChB,IAAuC;QAEvC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,CAAC;QAC5E,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/E,OAAO,MAAM,CAAC;IAChB,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,OAAmB,EAAE,IAAI,CAAC,QAAQ,CAAC;SACvE,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,40 @@
1
+ export declare class WorkflowImportError extends Error {
2
+ constructor(message: string);
3
+ }
4
+ export type WorkflowEditorNodeType = 'text' | 'asset' | 'model' | 'llm' | 'transformText' | 'splitText' | 'ifElse' | 'groupItems' | 'sliceAssets' | 'forEach' | 'forEachEnd' | 'stickyNote';
5
+ export declare const VALID_EDITOR_NODE_TYPES: readonly WorkflowEditorNodeType[];
6
+ export interface WorkflowExportData {
7
+ version: '1.0';
8
+ name: string;
9
+ description: string;
10
+ editorInfo: {
11
+ nodes: Array<{
12
+ type: WorkflowEditorNodeType;
13
+ [key: string]: unknown;
14
+ }>;
15
+ edges: Array<{
16
+ [key: string]: unknown;
17
+ }>;
18
+ inputKeys: string[];
19
+ };
20
+ inputs: unknown[];
21
+ tagSet: string[];
22
+ uiConfig?: object;
23
+ exportedAt: string;
24
+ exportedBy: string;
25
+ }
26
+ /**
27
+ * Validates a workflow export payload (e.g. from a JSON file import).
28
+ *
29
+ * Throws a `WorkflowImportError` with a human-readable message on the first
30
+ * violation found. Returns the validated data cast to `WorkflowExportData`.
31
+ *
32
+ * Checks performed:
33
+ * 1. Data is a non-null object
34
+ * 2. `version` field is present and equals "1.0"
35
+ * 3. `editorInfo` has non-empty `nodes` and `edges` arrays
36
+ * 4. Each node's `type` is a recognized editor node type
37
+ * 5. `inputs` is an array
38
+ */
39
+ export declare function validateEditorInfo(data: unknown): WorkflowExportData;
40
+ //# sourceMappingURL=workflow_import_validator.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow_import_validator.d.mts","sourceRoot":"","sources":["../src/lib/workflow_import_validator.ts"],"names":[],"mappings":"AAAA,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,OAAO,EAAE,MAAM;CAI5B;AAED,MAAM,MAAM,sBAAsB,GAC9B,MAAM,GACN,OAAO,GACP,OAAO,GACP,KAAK,GACL,eAAe,GACf,WAAW,GACX,QAAQ,GACR,YAAY,GACZ,aAAa,GACb,SAAS,GACT,YAAY,GACZ,YAAY,CAAC;AAEjB,eAAO,MAAM,uBAAuB,EAAE,SAAS,sBAAsB,EAapE,CAAC;AAEF,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,KAAK,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE;QACV,KAAK,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,sBAAsB,CAAC;YAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;SAAE,CAAC,CAAC;QACvE,KAAK,EAAE,KAAK,CAAC;YAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;SAAE,CAAC,CAAC;QACzC,SAAS,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;IACF,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,kBAAkB,CAsCpE"}
@@ -0,0 +1,40 @@
1
+ export declare class WorkflowImportError extends Error {
2
+ constructor(message: string);
3
+ }
4
+ export type WorkflowEditorNodeType = 'text' | 'asset' | 'model' | 'llm' | 'transformText' | 'splitText' | 'ifElse' | 'groupItems' | 'sliceAssets' | 'forEach' | 'forEachEnd' | 'stickyNote';
5
+ export declare const VALID_EDITOR_NODE_TYPES: readonly WorkflowEditorNodeType[];
6
+ export interface WorkflowExportData {
7
+ version: '1.0';
8
+ name: string;
9
+ description: string;
10
+ editorInfo: {
11
+ nodes: Array<{
12
+ type: WorkflowEditorNodeType;
13
+ [key: string]: unknown;
14
+ }>;
15
+ edges: Array<{
16
+ [key: string]: unknown;
17
+ }>;
18
+ inputKeys: string[];
19
+ };
20
+ inputs: unknown[];
21
+ tagSet: string[];
22
+ uiConfig?: object;
23
+ exportedAt: string;
24
+ exportedBy: string;
25
+ }
26
+ /**
27
+ * Validates a workflow export payload (e.g. from a JSON file import).
28
+ *
29
+ * Throws a `WorkflowImportError` with a human-readable message on the first
30
+ * violation found. Returns the validated data cast to `WorkflowExportData`.
31
+ *
32
+ * Checks performed:
33
+ * 1. Data is a non-null object
34
+ * 2. `version` field is present and equals "1.0"
35
+ * 3. `editorInfo` has non-empty `nodes` and `edges` arrays
36
+ * 4. Each node's `type` is a recognized editor node type
37
+ * 5. `inputs` is an array
38
+ */
39
+ export declare function validateEditorInfo(data: unknown): WorkflowExportData;
40
+ //# sourceMappingURL=workflow_import_validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow_import_validator.d.ts","sourceRoot":"","sources":["../src/lib/workflow_import_validator.ts"],"names":[],"mappings":"AAAA,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,OAAO,EAAE,MAAM;CAI5B;AAED,MAAM,MAAM,sBAAsB,GAC9B,MAAM,GACN,OAAO,GACP,OAAO,GACP,KAAK,GACL,eAAe,GACf,WAAW,GACX,QAAQ,GACR,YAAY,GACZ,aAAa,GACb,SAAS,GACT,YAAY,GACZ,YAAY,CAAC;AAEjB,eAAO,MAAM,uBAAuB,EAAE,SAAS,sBAAsB,EAapE,CAAC;AAEF,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,KAAK,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE;QACV,KAAK,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,sBAAsB,CAAC;YAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;SAAE,CAAC,CAAC;QACvE,KAAK,EAAE,KAAK,CAAC;YAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;SAAE,CAAC,CAAC;QACzC,SAAS,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;IACF,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,kBAAkB,CAsCpE"}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VALID_EDITOR_NODE_TYPES = exports.WorkflowImportError = void 0;
4
+ exports.validateEditorInfo = validateEditorInfo;
5
+ class WorkflowImportError extends Error {
6
+ constructor(message) {
7
+ super(message);
8
+ this.name = 'WorkflowImportError';
9
+ }
10
+ }
11
+ exports.WorkflowImportError = WorkflowImportError;
12
+ exports.VALID_EDITOR_NODE_TYPES = [
13
+ 'text',
14
+ 'asset',
15
+ 'model',
16
+ 'llm',
17
+ 'transformText',
18
+ 'splitText',
19
+ 'ifElse',
20
+ 'groupItems',
21
+ 'sliceAssets',
22
+ 'forEach',
23
+ 'forEachEnd',
24
+ 'stickyNote',
25
+ ];
26
+ /**
27
+ * Validates a workflow export payload (e.g. from a JSON file import).
28
+ *
29
+ * Throws a `WorkflowImportError` with a human-readable message on the first
30
+ * violation found. Returns the validated data cast to `WorkflowExportData`.
31
+ *
32
+ * Checks performed:
33
+ * 1. Data is a non-null object
34
+ * 2. `version` field is present and equals "1.0"
35
+ * 3. `editorInfo` has non-empty `nodes` and `edges` arrays
36
+ * 4. Each node's `type` is a recognized editor node type
37
+ * 5. `inputs` is an array
38
+ */
39
+ function validateEditorInfo(data) {
40
+ if (typeof data !== 'object' || data === null) {
41
+ throw new WorkflowImportError('Invalid JSON format');
42
+ }
43
+ const workflow = data;
44
+ if (!workflow.version) {
45
+ throw new WorkflowImportError('Missing version field');
46
+ }
47
+ if (workflow.version !== '1.0') {
48
+ throw new WorkflowImportError(`Unsupported version: ${workflow.version}`);
49
+ }
50
+ if (!workflow.editorInfo || !workflow.editorInfo.nodes || !workflow.editorInfo.edges) {
51
+ throw new WorkflowImportError('Missing editorInfo structure');
52
+ }
53
+ if (!Array.isArray(workflow.editorInfo.nodes)) {
54
+ throw new WorkflowImportError('Invalid nodes array');
55
+ }
56
+ if (!Array.isArray(workflow.editorInfo.edges)) {
57
+ throw new WorkflowImportError('Invalid edges array');
58
+ }
59
+ if (!workflow.inputs || !Array.isArray(workflow.inputs)) {
60
+ throw new WorkflowImportError('Invalid inputs array');
61
+ }
62
+ for (const node of workflow.editorInfo.nodes) {
63
+ if (!exports.VALID_EDITOR_NODE_TYPES.includes(node.type)) {
64
+ throw new WorkflowImportError(`Invalid node type: ${node.type}`);
65
+ }
66
+ }
67
+ return workflow;
68
+ }
69
+ //# sourceMappingURL=workflow_import_validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow_import_validator.js","sourceRoot":"","sources":["../src/lib/workflow_import_validator.ts"],"names":[],"mappings":";;;AAiEA,gDAsCC;AAvGD,MAAa,mBAAoB,SAAQ,KAAK;IAC5C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AALD,kDAKC;AAgBY,QAAA,uBAAuB,GAAsC;IACxE,MAAM;IACN,OAAO;IACP,OAAO;IACP,KAAK;IACL,eAAe;IACf,WAAW;IACX,QAAQ;IACR,YAAY;IACZ,aAAa;IACb,SAAS;IACT,YAAY;IACZ,YAAY;CACb,CAAC;AAkBF;;;;;;;;;;;;GAYG;AACH,SAAgB,kBAAkB,CAAC,IAAa;IAC9C,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAC9C,MAAM,IAAI,mBAAmB,CAAC,qBAAqB,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,QAAQ,GAAG,IAAmC,CAAC;IAErD,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QACtB,MAAM,IAAI,mBAAmB,CAAC,uBAAuB,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,QAAQ,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;QAC/B,MAAM,IAAI,mBAAmB,CAAC,wBAAwB,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5E,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,UAAU,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACrF,MAAM,IAAI,mBAAmB,CAAC,8BAA8B,CAAC,CAAC;IAChE,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,mBAAmB,CAAC,qBAAqB,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,mBAAmB,CAAC,qBAAqB,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACxD,MAAM,IAAI,mBAAmB,CAAC,sBAAsB,CAAC,CAAC;IACxD,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QAC7C,IAAI,CAAE,+BAA6C,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACxE,MAAM,IAAI,mBAAmB,CAAC,sBAAsB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED,OAAO,QAA8B,CAAC;AACxC,CAAC"}
@@ -0,0 +1,64 @@
1
+ export class WorkflowImportError extends Error {
2
+ constructor(message) {
3
+ super(message);
4
+ this.name = 'WorkflowImportError';
5
+ }
6
+ }
7
+ export const VALID_EDITOR_NODE_TYPES = [
8
+ 'text',
9
+ 'asset',
10
+ 'model',
11
+ 'llm',
12
+ 'transformText',
13
+ 'splitText',
14
+ 'ifElse',
15
+ 'groupItems',
16
+ 'sliceAssets',
17
+ 'forEach',
18
+ 'forEachEnd',
19
+ 'stickyNote',
20
+ ];
21
+ /**
22
+ * Validates a workflow export payload (e.g. from a JSON file import).
23
+ *
24
+ * Throws a `WorkflowImportError` with a human-readable message on the first
25
+ * violation found. Returns the validated data cast to `WorkflowExportData`.
26
+ *
27
+ * Checks performed:
28
+ * 1. Data is a non-null object
29
+ * 2. `version` field is present and equals "1.0"
30
+ * 3. `editorInfo` has non-empty `nodes` and `edges` arrays
31
+ * 4. Each node's `type` is a recognized editor node type
32
+ * 5. `inputs` is an array
33
+ */
34
+ export function validateEditorInfo(data) {
35
+ if (typeof data !== 'object' || data === null) {
36
+ throw new WorkflowImportError('Invalid JSON format');
37
+ }
38
+ const workflow = data;
39
+ if (!workflow.version) {
40
+ throw new WorkflowImportError('Missing version field');
41
+ }
42
+ if (workflow.version !== '1.0') {
43
+ throw new WorkflowImportError(`Unsupported version: ${workflow.version}`);
44
+ }
45
+ if (!workflow.editorInfo || !workflow.editorInfo.nodes || !workflow.editorInfo.edges) {
46
+ throw new WorkflowImportError('Missing editorInfo structure');
47
+ }
48
+ if (!Array.isArray(workflow.editorInfo.nodes)) {
49
+ throw new WorkflowImportError('Invalid nodes array');
50
+ }
51
+ if (!Array.isArray(workflow.editorInfo.edges)) {
52
+ throw new WorkflowImportError('Invalid edges array');
53
+ }
54
+ if (!workflow.inputs || !Array.isArray(workflow.inputs)) {
55
+ throw new WorkflowImportError('Invalid inputs array');
56
+ }
57
+ for (const node of workflow.editorInfo.nodes) {
58
+ if (!VALID_EDITOR_NODE_TYPES.includes(node.type)) {
59
+ throw new WorkflowImportError(`Invalid node type: ${node.type}`);
60
+ }
61
+ }
62
+ return workflow;
63
+ }
64
+ //# sourceMappingURL=workflow_import_validator.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow_import_validator.mjs","sourceRoot":"","sources":["../src/lib/workflow_import_validator.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAC5C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAgBD,MAAM,CAAC,MAAM,uBAAuB,GAAsC;IACxE,MAAM;IACN,OAAO;IACP,OAAO;IACP,KAAK;IACL,eAAe;IACf,WAAW;IACX,QAAQ;IACR,YAAY;IACZ,aAAa;IACb,SAAS;IACT,YAAY;IACZ,YAAY;CACb,CAAC;AAkBF;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAa;IAC9C,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAC9C,MAAM,IAAI,mBAAmB,CAAC,qBAAqB,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,QAAQ,GAAG,IAAmC,CAAC;IAErD,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QACtB,MAAM,IAAI,mBAAmB,CAAC,uBAAuB,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,QAAQ,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;QAC/B,MAAM,IAAI,mBAAmB,CAAC,wBAAwB,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5E,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,UAAU,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACrF,MAAM,IAAI,mBAAmB,CAAC,8BAA8B,CAAC,CAAC;IAChE,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,mBAAmB,CAAC,qBAAqB,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,mBAAmB,CAAC,qBAAqB,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACxD,MAAM,IAAI,mBAAmB,CAAC,sBAAsB,CAAC,CAAC;IACxD,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QAC7C,IAAI,CAAE,uBAA6C,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACxE,MAAM,IAAI,mBAAmB,CAAC,sBAAsB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED,OAAO,QAA8B,CAAC;AACxC,CAAC"}
@@ -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,6 +1,6 @@
1
1
  {
2
2
  "name": "@scenario-labs/sdk",
3
- "version": "0.2.0",
3
+ "version": "1.0.0",
4
4
  "description": "The official TypeScript library for the Scenario API",
5
5
  "author": "Scenario <support@scenario.com>",
6
6
  "types": "./index.d.ts",
@@ -91,6 +91,16 @@
91
91
  "import": "./lib/*.mjs",
92
92
  "require": "./lib/*.js"
93
93
  },
94
+ "./pagination": {
95
+ "import": "./pagination.mjs",
96
+ "require": "./pagination.js"
97
+ },
98
+ "./pagination.js": {
99
+ "default": "./pagination.js"
100
+ },
101
+ "./pagination.mjs": {
102
+ "default": "./pagination.mjs"
103
+ },
94
104
  "./resource": {
95
105
  "import": "./resource.mjs",
96
106
  "require": "./resource.js"
@@ -0,0 +1,2 @@
1
+ export * from "./core/pagination.mjs";
2
+ //# sourceMappingURL=pagination.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.d.mts","sourceRoot":"","sources":["src/pagination.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export * from "./core/pagination.js";
2
+ //# sourceMappingURL=pagination.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["src/pagination.ts"],"names":[],"mappings":""}
package/pagination.js ADDED
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("./internal/tslib.js");
4
+ /** @deprecated Import from ./core/pagination instead */
5
+ tslib_1.__exportStar(require("./core/pagination.js"), exports);
6
+ //# sourceMappingURL=pagination.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.js","sourceRoot":"","sources":["src/pagination.ts"],"names":[],"mappings":";;;AAAA,wDAAwD;AACxD,+DAAkC"}
package/pagination.mjs ADDED
@@ -0,0 +1,2 @@
1
+ export * from "./core/pagination.mjs";
2
+ //# sourceMappingURL=pagination.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.mjs","sourceRoot":"","sources":["src/pagination.ts"],"names":[],"mappings":""}