@uploadista/core 0.0.16 → 0.0.17-beta.2
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/flow/index.cjs +1 -1
- package/dist/flow/index.d.cts +2 -2
- package/dist/flow/index.d.mts +2 -2
- package/dist/flow/index.mjs +1 -1
- package/dist/flow-7dlRoq1h.cjs +1 -0
- package/dist/flow-l-iFJavi.mjs +2 -0
- package/dist/flow-l-iFJavi.mjs.map +1 -0
- package/dist/{index-DJ5ug-bj.d.mts → index-BTGpo7gz.d.mts} +1022 -1052
- package/dist/index-BTGpo7gz.d.mts.map +1 -0
- package/dist/{index-Dp6mTOB2.d.cts → index-D9YSNFdA.d.cts} +1022 -1052
- package/dist/index-D9YSNFdA.d.cts.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.mts +2 -2
- package/dist/index.mjs +1 -1
- package/dist/testing/index.cjs +3 -3
- package/dist/testing/index.d.cts +1 -1
- package/dist/testing/index.d.mts +1 -1
- package/dist/testing/index.mjs +3 -3
- package/dist/types/index.d.cts +1 -1
- package/dist/types/index.d.mts +1 -1
- package/dist/upload/index.d.cts +1 -1
- package/dist/upload/index.d.mts +1 -1
- package/package.json +3 -3
- package/src/flow/flow-server.ts +9 -7
- package/src/flow/flow.ts +117 -16
- package/src/flow/node-types/index.ts +61 -18
- package/src/flow/node.ts +3 -16
- package/src/flow/nodes/index.ts +0 -1
- package/src/flow/nodes/input-node.ts +0 -2
- package/src/flow/nodes/transform-node.ts +4 -0
- package/src/flow/type-guards.ts +79 -0
- package/src/flow/typed-flow.ts +29 -17
- package/src/flow/types/flow-types.ts +45 -18
- package/tests/flow/flow.test.ts +35 -48
- package/tests/flow/node.test.ts +4 -12
- package/tests/flow/type-system.test.ts +719 -769
- package/tests/types/typed-event-emitter.test.ts +26 -7
- package/type-tests/flow.test-d.ts +21 -16
- package/type-tests/type-utils.test-d.ts +3 -2
- package/dist/flow-BtI159Fi.mjs +0 -2
- package/dist/flow-BtI159Fi.mjs.map +0 -1
- package/dist/flow-DK3kacMQ.cjs +0 -1
- package/dist/index-DJ5ug-bj.d.mts.map +0 -1
- package/dist/index-Dp6mTOB2.d.cts.map +0 -1
- package/src/flow/nodes/storage-node.ts +0 -130
package/dist/flow/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`../types-B140y5RX.cjs`),require(`../uploadista-error-B9lL5xFQ.cjs`),require(`../errors-CRm1FHHT.cjs`);const e=require(`../flow-
|
|
1
|
+
require(`../types-B140y5RX.cjs`),require(`../uploadista-error-B9lL5xFQ.cjs`),require(`../errors-CRm1FHHT.cjs`);const e=require(`../flow-7dlRoq1h.cjs`);require(`../upload-DsehAabn.cjs`),require(`../checksum-DIrJRrlk.cjs`),require(`../stream-limiter-B6dfCtCy.cjs`),exports.CredentialProvider=e.N,exports.DocumentAiPlugin=e.M,exports.DocumentPlugin=e.j,exports.EventType=e.ht,exports.FlowProvider=e.V,exports.FlowServer=e.H,exports.FlowTypeRegistry=e.pt,exports.FlowWaitUntil=e.U,exports.IMAGE_DESCRIPTION_OUTPUT_TYPE_ID=e.ct,exports.ImageAiPlugin=e.A,exports.ImagePlugin=e.k,exports.NodeType=e.at,exports.OCR_OUTPUT_TYPE_ID=e.lt,exports.ParallelScheduler=e.it,exports.STORAGE_OUTPUT_TYPE_ID=e.ut,exports.VideoPlugin=e.a,exports.VirusScanPlugin=e.i,exports.ZipPlugin=e.r,exports.blurTransformSchema=e.s,exports.brightnessTransformSchema=e.c,exports.completeNodeExecution=e.z,exports.contrastTransformSchema=e.l,exports.createFlow=e.n,exports.createFlowEdge=e.gt,exports.createFlowNode=e.ot,exports.createFlowServer=e.W,exports.createFlowWithSchema=e.K,exports.createInputNode=e.F,exports.createTransformNode=e.P,exports.createTypeGuard=e.J,exports.describeImageParamsSchema=e.O,exports.describeVideoMetadataSchema=e.D,exports.extractFrameVideoParamsSchema=e.E,exports.filterOutputsByType=e.Y,exports.flipTransformSchema=e.u,exports.flowServer=e.G,exports.flowTypeRegistry=e.mt,exports.getFirstOutputByType=e.X,exports.getFlowData=e.q,exports.getNodeData=e.st,exports.getOutputByNodeId=e.Z,exports.getSingleOutputByType=e.Q,exports.grayscaleTransformSchema=e.d,exports.hasOutputOfType=e.$,exports.imageDescriptionOutputSchema=e.dt,exports.inputDataSchema=e.I,exports.inputNodeParamsSchema=e.L,exports.isImageDescriptionOutput=e.et,exports.isOcrOutput=e.tt,exports.isStorageOutput=e.nt,exports.isUploadFile=e.rt,exports.logoTransformSchema=e.f,exports.ocrOutputSchema=e.ft,exports.optimizeParamsSchema=e.T,exports.removeBackgroundParamsSchema=e.w,exports.resizeParamsSchema=e.C,exports.resizeTransformSchema=e.p,exports.resizeVideoParamsSchema=e.S,exports.resolveUploadMetadata=e.R,exports.rotateTransformSchema=e.m,exports.runArgsSchema=e.t,exports.sepiaTransformSchema=e.h,exports.sharpenTransformSchema=e.g,exports.textTransformSchema=e._,exports.transcodeVideoParamsSchema=e.x,exports.transformImageParamsSchema=e.v,exports.transformationSchema=e.y,exports.trimVideoParamsSchema=e.o,exports.waitingNodeExecution=e.B,exports.watermarkTransformSchema=e.b;
|
package/dist/flow/index.d.cts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import "../uploadista-error-Bb-qIIKM.cjs";
|
|
2
2
|
import "../index-_wQ5ClJU.cjs";
|
|
3
|
-
import { $ as
|
|
3
|
+
import { $ as transcodeVideoParamsSchema, $r as createFlowEdge, $t as SplitPdfResult, A as isUploadFile, Ai as NodeType, An as flowServer, Ar as createFlowWithSchema, At as logoTransformSchema, B as ZipPluginLayer, Bt as resizeParamsSchema, C as getFirstOutputByType, Ci as FlowEventNodePause, Cn as FlowServer, Cr as NodeTypeCategory, Ct as TransformationType, D as isImageDescriptionOutput, Di as ConditionField, Dn as FlowWaitUntil, Dr as Flow, Dt as contrastTransformSchema, E as hasOutputOfType, Ei as FlowEventNodeStart, En as FlowServerShape, Er as flowTypeRegistry, Et as brightnessTransformSchema, F as Plugin, Ft as textTransformSchema, G as VirusScanPluginLayer, Gt as ImageAiPluginLayer, H as ScanMetadata, Ht as optimizeParamsSchema, I as PluginLayer, It as transformImageParamsSchema, J as VideoPluginLayer, Jt as DocumentPlugin, K as VirusScanPluginShape, Kt as ImageAiPluginShape, L as ZipInput, Lt as transformationSchema, M as removeBackgroundParamsSchema, Mi as getNodeData, Mn as FlowJobStatus, Mt as rotateTransformSchema, N as DescribeImageParams, Nn as FlowJobTask, Nt as sepiaTransformSchema, O as isOcrOutput, Oi as ConditionOperator, On as WaitUntilCallback, Or as FlowData, Ot as flipTransformSchema, P as describeImageParamsSchema, Pn as FlowJobTaskStatus, Pt as sharpenTransformSchema, Q as TranscodeVideoParams, Qr as FlowEdge, Qt as SplitPdfParams, R as ZipParams, Rt as watermarkTransformSchema, S as filterOutputsByType, Si as FlowEventNodeError, Sn as FlowProviderShape, Sr as FlowTypeRegistry, St as Transformation, T as getSingleOutputByType, Ti as FlowEventNodeResume, Tn as FlowServerOptions, Tr as ValidationResult, Tt as blurTransformSchema, U as ScanResult, Ut as ImageAiContext, V as ZipPluginShape, Vt as OptimizeParams, W as VirusScanPlugin, Wt as ImageAiPlugin, X as TrimVideoParams, Xt as DocumentPluginShape, Y as VideoPluginShape, Yt as DocumentPluginLayer, Z as trimVideoParamsSchema, Zt as MergePdfParams, _ as ExtractLayerService, _i as FlowEventFlowPause, _n as InputNodeParams, _r as OCR_OUTPUT_TYPE_ID, _t as RotateTransform, a as FlowInputMap, ai as NodeConnectionValidator, an as OcrResolution, at as describeVideoMetadataSchema, b as FlowCondition, bi as FlowEventJobStart, bn as inputNodeParamsSchema, br as imageDescriptionOutputSchema, bt as TextTransform, c as FlowRequirements, ci as TypeCompatibilityChecker, cn as CredentialProvider, ct as ImagePluginShape, d as TypedFlow, di as waitingNodeExecution, dn as ExecutionLevel, dt as ContrastTransform, ei as BuiltInTypedOutput, en as DocumentAiContext, et as ResizeVideoParams, f as TypedFlowConfig, fi as EventType, fn as ParallelScheduler, ft as FlipTransform, g as ExtractEffectRequirements, gi as FlowEventFlowError, gn as InputData, gr as ImageDescriptionOutput, gt as ResizeTransform, h as ExtractEffectError, hi as FlowEventFlowEnd, hn as createTransformNode, hr as IMAGE_DESCRIPTION_OUTPUT_TYPE_ID, ht as OverlayPosition, i as runArgsSchema, ii as FlowNodeData, in as OcrParams, it as DescribeVideoMetadata, j as RemoveBackgroundParams, ji as createFlowNode, jn as FlowJob, jr as getFlowData, jt as resizeTransformSchema, k as isStorageOutput, ki as ConditionValue, kn as createFlowServer, kr as FlowExecutionResult, kt as grayscaleTransformSchema, l as NodeDefinition, li as TypedOutput, ln as CredentialProviderLayer, lt as BlurTransform, m as createFlow, mi as FlowEventFlowCancel, mn as TransformNodeConfig, mt as LogoTransform, n as resolveUploadMetadata, ni as FlowConfig, nn as DocumentAiPluginLayer, nt as ExtractFrameVideoParams, o as FlowOutputMap, oi as NodeExecutionResult, on as OcrResult, ot as ImagePlugin, p as TypedFlowEdge, pi as FlowEvent, pn as ParallelSchedulerConfig, pt as GrayscaleTransform, q as VideoPlugin, qt as DocumentMetadata, r as RunArgs, ri as FlowNode, rn as DocumentAiPluginShape, rt as extractFrameVideoParamsSchema, s as FlowPluginRequirements, si as NodeTypeMap, sn as OcrTaskType, st as ImagePluginLayer, t as ResolvedUploadMetadata, ti as CustomTypedOutput, tn as DocumentAiPlugin, tt as resizeVideoParamsSchema, u as NodeDefinitionsRecord, ui as completeNodeExecution, un as CredentialProviderShape, ut as BrightnessTransform, v as ExtractLayerServices, vi as FlowEventFlowStart, vn as createInputNode, vr as OcrOutput, vt as SepiaTransform, w as getOutputByNodeId, wi as FlowEventNodeResponse, wn as FlowServerLayer, wr as NodeTypeDefinition, wt as WatermarkTransform, x as createTypeGuard, xi as FlowEventNodeEnd, xn as FlowProvider, xr as ocrOutputSchema, xt as TransformImageParams, y as ResolveEffect, yi as FlowEventJobEnd, yn as inputDataSchema, yr as STORAGE_OUTPUT_TYPE_ID, yt as SharpenTransform, z as ZipPlugin, zt as ResizeParams } from "../index-D9YSNFdA.cjs";
|
|
4
4
|
import "../index-B_SvQ0MU.cjs";
|
|
5
5
|
import "../index-qIN6ULCb.cjs";
|
|
6
|
-
export { BlurTransform, BrightnessTransform, BuiltInTypedOutput, ConditionField, ConditionOperator, ConditionValue, ContrastTransform, CredentialProvider, CredentialProviderLayer, CredentialProviderShape, CustomTypedOutput, DescribeImageParams, DescribeVideoMetadata, DocumentAiContext, DocumentAiPlugin, DocumentAiPluginLayer, DocumentAiPluginShape, DocumentMetadata, DocumentPlugin, DocumentPluginLayer, DocumentPluginShape, EventType, ExecutionLevel, ExtractEffectError, ExtractEffectRequirements, ExtractFrameVideoParams, ExtractLayerService, ExtractLayerServices, FlipTransform, Flow, FlowCondition, FlowConfig, FlowData, FlowEdge, FlowEvent, FlowEventFlowCancel, FlowEventFlowEnd, FlowEventFlowError, FlowEventFlowPause, FlowEventFlowStart, FlowEventJobEnd, FlowEventJobStart, FlowEventNodeEnd, FlowEventNodeError, FlowEventNodePause, FlowEventNodeResponse, FlowEventNodeResume, FlowEventNodeStart, FlowExecutionResult, FlowInputMap, FlowJob, FlowJobStatus, FlowJobTask, FlowJobTaskStatus, FlowNode, FlowNodeData, FlowOutputMap, FlowPluginRequirements, FlowProvider, FlowProviderShape, FlowRequirements, FlowServer, FlowServerLayer, FlowServerOptions, FlowServerShape, FlowTypeRegistry, FlowWaitUntil, GrayscaleTransform, ImageAiContext, ImageAiPlugin, ImageAiPluginLayer, ImageAiPluginShape, ImagePlugin, ImagePluginLayer, ImagePluginShape, InputData, InputNodeParams, LogoTransform, MergePdfParams, NodeConnectionValidator, NodeDefinition, NodeDefinitionsRecord, NodeExecutionResult, NodeType, NodeTypeCategory, NodeTypeDefinition, NodeTypeMap, OcrParams, OcrResolution, OcrResult, OcrTaskType, OptimizeParams, OverlayPosition, ParallelScheduler, ParallelSchedulerConfig, Plugin, PluginLayer, RemoveBackgroundParams, ResizeParams, ResizeTransform, ResizeVideoParams, ResolveEffect, ResolvedUploadMetadata, RotateTransform, RunArgs, STORAGE_OUTPUT_TYPE_ID,
|
|
6
|
+
export { BlurTransform, BrightnessTransform, BuiltInTypedOutput, ConditionField, ConditionOperator, ConditionValue, ContrastTransform, CredentialProvider, CredentialProviderLayer, CredentialProviderShape, CustomTypedOutput, DescribeImageParams, DescribeVideoMetadata, DocumentAiContext, DocumentAiPlugin, DocumentAiPluginLayer, DocumentAiPluginShape, DocumentMetadata, DocumentPlugin, DocumentPluginLayer, DocumentPluginShape, EventType, ExecutionLevel, ExtractEffectError, ExtractEffectRequirements, ExtractFrameVideoParams, ExtractLayerService, ExtractLayerServices, FlipTransform, Flow, FlowCondition, FlowConfig, FlowData, FlowEdge, FlowEvent, FlowEventFlowCancel, FlowEventFlowEnd, FlowEventFlowError, FlowEventFlowPause, FlowEventFlowStart, FlowEventJobEnd, FlowEventJobStart, FlowEventNodeEnd, FlowEventNodeError, FlowEventNodePause, FlowEventNodeResponse, FlowEventNodeResume, FlowEventNodeStart, FlowExecutionResult, FlowInputMap, FlowJob, FlowJobStatus, FlowJobTask, FlowJobTaskStatus, FlowNode, FlowNodeData, FlowOutputMap, FlowPluginRequirements, FlowProvider, FlowProviderShape, FlowRequirements, FlowServer, FlowServerLayer, FlowServerOptions, FlowServerShape, FlowTypeRegistry, FlowWaitUntil, GrayscaleTransform, IMAGE_DESCRIPTION_OUTPUT_TYPE_ID, ImageAiContext, ImageAiPlugin, ImageAiPluginLayer, ImageAiPluginShape, ImageDescriptionOutput, ImagePlugin, ImagePluginLayer, ImagePluginShape, InputData, InputNodeParams, LogoTransform, MergePdfParams, NodeConnectionValidator, NodeDefinition, NodeDefinitionsRecord, NodeExecutionResult, NodeType, NodeTypeCategory, NodeTypeDefinition, NodeTypeMap, OCR_OUTPUT_TYPE_ID, OcrOutput, OcrParams, OcrResolution, OcrResult, OcrTaskType, OptimizeParams, OverlayPosition, ParallelScheduler, ParallelSchedulerConfig, Plugin, PluginLayer, RemoveBackgroundParams, ResizeParams, ResizeTransform, ResizeVideoParams, ResolveEffect, ResolvedUploadMetadata, RotateTransform, RunArgs, STORAGE_OUTPUT_TYPE_ID, ScanMetadata, ScanResult, SepiaTransform, SharpenTransform, SplitPdfParams, SplitPdfResult, TextTransform, TranscodeVideoParams, TransformImageParams, TransformNodeConfig, Transformation, TransformationType, TrimVideoParams, TypeCompatibilityChecker, TypedFlow, TypedFlowConfig, TypedFlowEdge, TypedOutput, ValidationResult, VideoPlugin, VideoPluginLayer, VideoPluginShape, VirusScanPlugin, VirusScanPluginLayer, VirusScanPluginShape, WaitUntilCallback, WatermarkTransform, ZipInput, ZipParams, ZipPlugin, ZipPluginLayer, ZipPluginShape, blurTransformSchema, brightnessTransformSchema, completeNodeExecution, contrastTransformSchema, createFlow, createFlowEdge, createFlowNode, createFlowServer, createFlowWithSchema, createInputNode, createTransformNode, createTypeGuard, describeImageParamsSchema, describeVideoMetadataSchema, extractFrameVideoParamsSchema, filterOutputsByType, flipTransformSchema, flowServer, flowTypeRegistry, getFirstOutputByType, getFlowData, getNodeData, getOutputByNodeId, getSingleOutputByType, grayscaleTransformSchema, hasOutputOfType, imageDescriptionOutputSchema, inputDataSchema, inputNodeParamsSchema, isImageDescriptionOutput, isOcrOutput, isStorageOutput, isUploadFile, logoTransformSchema, ocrOutputSchema, optimizeParamsSchema, removeBackgroundParamsSchema, resizeParamsSchema, resizeTransformSchema, resizeVideoParamsSchema, resolveUploadMetadata, rotateTransformSchema, runArgsSchema, sepiaTransformSchema, sharpenTransformSchema, textTransformSchema, transcodeVideoParamsSchema, transformImageParamsSchema, transformationSchema, trimVideoParamsSchema, waitingNodeExecution, watermarkTransformSchema };
|
package/dist/flow/index.d.mts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import "../uploadista-error-D7Gubrr1.mjs";
|
|
2
2
|
import "../index-C-svZlpj.mjs";
|
|
3
|
-
import { $ as
|
|
3
|
+
import { $ as transcodeVideoParamsSchema, $r as createFlowEdge, $t as SplitPdfResult, A as isUploadFile, Ai as NodeType, An as flowServer, Ar as createFlowWithSchema, At as logoTransformSchema, B as ZipPluginLayer, Bt as resizeParamsSchema, C as getFirstOutputByType, Ci as FlowEventNodePause, Cn as FlowServer, Cr as NodeTypeCategory, Ct as TransformationType, D as isImageDescriptionOutput, Di as ConditionField, Dn as FlowWaitUntil, Dr as Flow, Dt as contrastTransformSchema, E as hasOutputOfType, Ei as FlowEventNodeStart, En as FlowServerShape, Er as flowTypeRegistry, Et as brightnessTransformSchema, F as Plugin, Ft as textTransformSchema, G as VirusScanPluginLayer, Gt as ImageAiPluginLayer, H as ScanMetadata, Ht as optimizeParamsSchema, I as PluginLayer, It as transformImageParamsSchema, J as VideoPluginLayer, Jt as DocumentPlugin, K as VirusScanPluginShape, Kt as ImageAiPluginShape, L as ZipInput, Lt as transformationSchema, M as removeBackgroundParamsSchema, Mi as getNodeData, Mn as FlowJobStatus, Mt as rotateTransformSchema, N as DescribeImageParams, Nn as FlowJobTask, Nt as sepiaTransformSchema, O as isOcrOutput, Oi as ConditionOperator, On as WaitUntilCallback, Or as FlowData, Ot as flipTransformSchema, P as describeImageParamsSchema, Pn as FlowJobTaskStatus, Pt as sharpenTransformSchema, Q as TranscodeVideoParams, Qr as FlowEdge, Qt as SplitPdfParams, R as ZipParams, Rt as watermarkTransformSchema, S as filterOutputsByType, Si as FlowEventNodeError, Sn as FlowProviderShape, Sr as FlowTypeRegistry, St as Transformation, T as getSingleOutputByType, Ti as FlowEventNodeResume, Tn as FlowServerOptions, Tr as ValidationResult, Tt as blurTransformSchema, U as ScanResult, Ut as ImageAiContext, V as ZipPluginShape, Vt as OptimizeParams, W as VirusScanPlugin, Wt as ImageAiPlugin, X as TrimVideoParams, Xt as DocumentPluginShape, Y as VideoPluginShape, Yt as DocumentPluginLayer, Z as trimVideoParamsSchema, Zt as MergePdfParams, _ as ExtractLayerService, _i as FlowEventFlowPause, _n as InputNodeParams, _r as OCR_OUTPUT_TYPE_ID, _t as RotateTransform, a as FlowInputMap, ai as NodeConnectionValidator, an as OcrResolution, at as describeVideoMetadataSchema, b as FlowCondition, bi as FlowEventJobStart, bn as inputNodeParamsSchema, br as imageDescriptionOutputSchema, bt as TextTransform, c as FlowRequirements, ci as TypeCompatibilityChecker, cn as CredentialProvider, ct as ImagePluginShape, d as TypedFlow, di as waitingNodeExecution, dn as ExecutionLevel, dt as ContrastTransform, ei as BuiltInTypedOutput, en as DocumentAiContext, et as ResizeVideoParams, f as TypedFlowConfig, fi as EventType, fn as ParallelScheduler, ft as FlipTransform, g as ExtractEffectRequirements, gi as FlowEventFlowError, gn as InputData, gr as ImageDescriptionOutput, gt as ResizeTransform, h as ExtractEffectError, hi as FlowEventFlowEnd, hn as createTransformNode, hr as IMAGE_DESCRIPTION_OUTPUT_TYPE_ID, ht as OverlayPosition, i as runArgsSchema, ii as FlowNodeData, in as OcrParams, it as DescribeVideoMetadata, j as RemoveBackgroundParams, ji as createFlowNode, jn as FlowJob, jr as getFlowData, jt as resizeTransformSchema, k as isStorageOutput, ki as ConditionValue, kn as createFlowServer, kr as FlowExecutionResult, kt as grayscaleTransformSchema, l as NodeDefinition, li as TypedOutput, ln as CredentialProviderLayer, lt as BlurTransform, m as createFlow, mi as FlowEventFlowCancel, mn as TransformNodeConfig, mt as LogoTransform, n as resolveUploadMetadata, ni as FlowConfig, nn as DocumentAiPluginLayer, nt as ExtractFrameVideoParams, o as FlowOutputMap, oi as NodeExecutionResult, on as OcrResult, ot as ImagePlugin, p as TypedFlowEdge, pi as FlowEvent, pn as ParallelSchedulerConfig, pt as GrayscaleTransform, q as VideoPlugin, qt as DocumentMetadata, r as RunArgs, ri as FlowNode, rn as DocumentAiPluginShape, rt as extractFrameVideoParamsSchema, s as FlowPluginRequirements, si as NodeTypeMap, sn as OcrTaskType, st as ImagePluginLayer, t as ResolvedUploadMetadata, ti as CustomTypedOutput, tn as DocumentAiPlugin, tt as resizeVideoParamsSchema, u as NodeDefinitionsRecord, ui as completeNodeExecution, un as CredentialProviderShape, ut as BrightnessTransform, v as ExtractLayerServices, vi as FlowEventFlowStart, vn as createInputNode, vr as OcrOutput, vt as SepiaTransform, w as getOutputByNodeId, wi as FlowEventNodeResponse, wn as FlowServerLayer, wr as NodeTypeDefinition, wt as WatermarkTransform, x as createTypeGuard, xi as FlowEventNodeEnd, xn as FlowProvider, xr as ocrOutputSchema, xt as TransformImageParams, y as ResolveEffect, yi as FlowEventJobEnd, yn as inputDataSchema, yr as STORAGE_OUTPUT_TYPE_ID, yt as SharpenTransform, z as ZipPlugin, zt as ResizeParams } from "../index-BTGpo7gz.mjs";
|
|
4
4
|
import "../index-BGi1r_fi.mjs";
|
|
5
5
|
import "../index-DIWuZlxd.mjs";
|
|
6
|
-
export { BlurTransform, BrightnessTransform, BuiltInTypedOutput, ConditionField, ConditionOperator, ConditionValue, ContrastTransform, CredentialProvider, CredentialProviderLayer, CredentialProviderShape, CustomTypedOutput, DescribeImageParams, DescribeVideoMetadata, DocumentAiContext, DocumentAiPlugin, DocumentAiPluginLayer, DocumentAiPluginShape, DocumentMetadata, DocumentPlugin, DocumentPluginLayer, DocumentPluginShape, EventType, ExecutionLevel, ExtractEffectError, ExtractEffectRequirements, ExtractFrameVideoParams, ExtractLayerService, ExtractLayerServices, FlipTransform, Flow, FlowCondition, FlowConfig, FlowData, FlowEdge, FlowEvent, FlowEventFlowCancel, FlowEventFlowEnd, FlowEventFlowError, FlowEventFlowPause, FlowEventFlowStart, FlowEventJobEnd, FlowEventJobStart, FlowEventNodeEnd, FlowEventNodeError, FlowEventNodePause, FlowEventNodeResponse, FlowEventNodeResume, FlowEventNodeStart, FlowExecutionResult, FlowInputMap, FlowJob, FlowJobStatus, FlowJobTask, FlowJobTaskStatus, FlowNode, FlowNodeData, FlowOutputMap, FlowPluginRequirements, FlowProvider, FlowProviderShape, FlowRequirements, FlowServer, FlowServerLayer, FlowServerOptions, FlowServerShape, FlowTypeRegistry, FlowWaitUntil, GrayscaleTransform, ImageAiContext, ImageAiPlugin, ImageAiPluginLayer, ImageAiPluginShape, ImagePlugin, ImagePluginLayer, ImagePluginShape, InputData, InputNodeParams, LogoTransform, MergePdfParams, NodeConnectionValidator, NodeDefinition, NodeDefinitionsRecord, NodeExecutionResult, NodeType, NodeTypeCategory, NodeTypeDefinition, NodeTypeMap, OcrParams, OcrResolution, OcrResult, OcrTaskType, OptimizeParams, OverlayPosition, ParallelScheduler, ParallelSchedulerConfig, Plugin, PluginLayer, RemoveBackgroundParams, ResizeParams, ResizeTransform, ResizeVideoParams, ResolveEffect, ResolvedUploadMetadata, RotateTransform, RunArgs, STORAGE_OUTPUT_TYPE_ID,
|
|
6
|
+
export { BlurTransform, BrightnessTransform, BuiltInTypedOutput, ConditionField, ConditionOperator, ConditionValue, ContrastTransform, CredentialProvider, CredentialProviderLayer, CredentialProviderShape, CustomTypedOutput, DescribeImageParams, DescribeVideoMetadata, DocumentAiContext, DocumentAiPlugin, DocumentAiPluginLayer, DocumentAiPluginShape, DocumentMetadata, DocumentPlugin, DocumentPluginLayer, DocumentPluginShape, EventType, ExecutionLevel, ExtractEffectError, ExtractEffectRequirements, ExtractFrameVideoParams, ExtractLayerService, ExtractLayerServices, FlipTransform, Flow, FlowCondition, FlowConfig, FlowData, FlowEdge, FlowEvent, FlowEventFlowCancel, FlowEventFlowEnd, FlowEventFlowError, FlowEventFlowPause, FlowEventFlowStart, FlowEventJobEnd, FlowEventJobStart, FlowEventNodeEnd, FlowEventNodeError, FlowEventNodePause, FlowEventNodeResponse, FlowEventNodeResume, FlowEventNodeStart, FlowExecutionResult, FlowInputMap, FlowJob, FlowJobStatus, FlowJobTask, FlowJobTaskStatus, FlowNode, FlowNodeData, FlowOutputMap, FlowPluginRequirements, FlowProvider, FlowProviderShape, FlowRequirements, FlowServer, FlowServerLayer, FlowServerOptions, FlowServerShape, FlowTypeRegistry, FlowWaitUntil, GrayscaleTransform, IMAGE_DESCRIPTION_OUTPUT_TYPE_ID, ImageAiContext, ImageAiPlugin, ImageAiPluginLayer, ImageAiPluginShape, ImageDescriptionOutput, ImagePlugin, ImagePluginLayer, ImagePluginShape, InputData, InputNodeParams, LogoTransform, MergePdfParams, NodeConnectionValidator, NodeDefinition, NodeDefinitionsRecord, NodeExecutionResult, NodeType, NodeTypeCategory, NodeTypeDefinition, NodeTypeMap, OCR_OUTPUT_TYPE_ID, OcrOutput, OcrParams, OcrResolution, OcrResult, OcrTaskType, OptimizeParams, OverlayPosition, ParallelScheduler, ParallelSchedulerConfig, Plugin, PluginLayer, RemoveBackgroundParams, ResizeParams, ResizeTransform, ResizeVideoParams, ResolveEffect, ResolvedUploadMetadata, RotateTransform, RunArgs, STORAGE_OUTPUT_TYPE_ID, ScanMetadata, ScanResult, SepiaTransform, SharpenTransform, SplitPdfParams, SplitPdfResult, TextTransform, TranscodeVideoParams, TransformImageParams, TransformNodeConfig, Transformation, TransformationType, TrimVideoParams, TypeCompatibilityChecker, TypedFlow, TypedFlowConfig, TypedFlowEdge, TypedOutput, ValidationResult, VideoPlugin, VideoPluginLayer, VideoPluginShape, VirusScanPlugin, VirusScanPluginLayer, VirusScanPluginShape, WaitUntilCallback, WatermarkTransform, ZipInput, ZipParams, ZipPlugin, ZipPluginLayer, ZipPluginShape, blurTransformSchema, brightnessTransformSchema, completeNodeExecution, contrastTransformSchema, createFlow, createFlowEdge, createFlowNode, createFlowServer, createFlowWithSchema, createInputNode, createTransformNode, createTypeGuard, describeImageParamsSchema, describeVideoMetadataSchema, extractFrameVideoParamsSchema, filterOutputsByType, flipTransformSchema, flowServer, flowTypeRegistry, getFirstOutputByType, getFlowData, getNodeData, getOutputByNodeId, getSingleOutputByType, grayscaleTransformSchema, hasOutputOfType, imageDescriptionOutputSchema, inputDataSchema, inputNodeParamsSchema, isImageDescriptionOutput, isOcrOutput, isStorageOutput, isUploadFile, logoTransformSchema, ocrOutputSchema, optimizeParamsSchema, removeBackgroundParamsSchema, resizeParamsSchema, resizeTransformSchema, resizeVideoParamsSchema, resolveUploadMetadata, rotateTransformSchema, runArgsSchema, sepiaTransformSchema, sharpenTransformSchema, textTransformSchema, transcodeVideoParamsSchema, transformImageParamsSchema, transformationSchema, trimVideoParamsSchema, waitingNodeExecution, watermarkTransformSchema };
|
package/dist/flow/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import"../uploadista-error-DR65duXB.mjs";import"../errors-DEFjN-xn.mjs";import{$ as e,A as t,B as n,C as r,D as i,E as a,F as o,G as s,H as c,I as l,J as u,K as d,L as f,M as p,N as m,O as h,P as g,Q as _,R as v,S as y,T as b,U as x,V as S,W as C,X as w,Y as T,Z as E,_ as D,a as O,at as k,b as A,c as j,ct as M,d as N,dt as P,et as F,f as I,ft as L,g as R,
|
|
1
|
+
import"../uploadista-error-DR65duXB.mjs";import"../errors-DEFjN-xn.mjs";import{$ as e,A as t,B as n,C as r,D as i,E as a,F as o,G as s,H as c,I as l,J as u,K as d,L as f,M as p,N as m,O as h,P as g,Q as _,R as v,S as y,T as b,U as x,V as S,W as C,X as w,Y as T,Z as E,_ as D,a as O,at as k,b as A,c as j,ct as M,d as N,dt as P,et as F,f as I,ft as L,g as R,gt as z,h as B,ht as V,i as H,it as U,j as W,k as G,l as K,lt as q,m as J,mt as Y,n as X,nt as Z,o as Q,ot as $,p as ee,pt as te,q as ne,r as re,rt as ie,s as ae,st as oe,t as se,tt as ce,u as le,ut as ue,v as de,w as fe,x as pe,y as me,z as he}from"../flow-l-iFJavi.mjs";import"../types-D54Q_YmF.mjs";import"../upload-DDke4PGB.mjs";import"../checksum-Cwf-Mqw5.mjs";import"../stream-limiter-Dfyh6hbh.mjs";export{m as CredentialProvider,p as DocumentAiPlugin,W as DocumentPlugin,V as EventType,S as FlowProvider,c as FlowServer,te as FlowTypeRegistry,x as FlowWaitUntil,M as IMAGE_DESCRIPTION_OUTPUT_TYPE_ID,t as ImageAiPlugin,G as ImagePlugin,k as NodeType,q as OCR_OUTPUT_TYPE_ID,U as ParallelScheduler,ue as STORAGE_OUTPUT_TYPE_ID,O as VideoPlugin,H as VirusScanPlugin,re as ZipPlugin,ae as blurTransformSchema,j as brightnessTransformSchema,he as completeNodeExecution,K as contrastTransformSchema,X as createFlow,z as createFlowEdge,$ as createFlowNode,C as createFlowServer,d as createFlowWithSchema,o as createInputNode,g as createTransformNode,u as createTypeGuard,h as describeImageParamsSchema,i as describeVideoMetadataSchema,a as extractFrameVideoParamsSchema,T as filterOutputsByType,le as flipTransformSchema,s as flowServer,Y as flowTypeRegistry,w as getFirstOutputByType,ne as getFlowData,oe as getNodeData,E as getOutputByNodeId,_ as getSingleOutputByType,N as grayscaleTransformSchema,e as hasOutputOfType,P as imageDescriptionOutputSchema,l as inputDataSchema,f as inputNodeParamsSchema,F as isImageDescriptionOutput,ce as isOcrOutput,Z as isStorageOutput,ie as isUploadFile,I as logoTransformSchema,L as ocrOutputSchema,b as optimizeParamsSchema,fe as removeBackgroundParamsSchema,r as resizeParamsSchema,ee as resizeTransformSchema,y as resizeVideoParamsSchema,v as resolveUploadMetadata,J as rotateTransformSchema,se as runArgsSchema,B as sepiaTransformSchema,R as sharpenTransformSchema,D as textTransformSchema,pe as transcodeVideoParamsSchema,de as transformImageParamsSchema,me as transformationSchema,Q as trimVideoParamsSchema,n as waitingNodeExecution,A as watermarkTransformSchema};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e=require(`./types-B140y5RX.cjs`),t=require(`./uploadista-error-B9lL5xFQ.cjs`),n=require(`./upload-DsehAabn.cjs`);let r=require(`effect`),i=require(`zod`);function a({source:e,target:t,sourcePort:n,targetPort:r}){return{source:e,target:t,sourcePort:n,targetPort:r}}let o=function(e){return e.JobStart=`job-start`,e.JobEnd=`job-end`,e.FlowStart=`flow-start`,e.FlowEnd=`flow-end`,e.FlowError=`flow-error`,e.FlowPause=`flow-pause`,e.FlowCancel=`flow-cancel`,e.NodeStart=`node-start`,e.NodeEnd=`node-end`,e.NodePause=`node-pause`,e.NodeResume=`node-resume`,e.NodeError=`node-error`,e.NodeStream=`node-stream`,e.NodeResponse=`node-response`,e}({});var s=class{types;constructor(){this.types=new Map}register(e){if(this.types.has(e.id))throw t.n.fromCode(`VALIDATION_ERROR`,{body:`Node type "${e.id}" is already registered. Types cannot be modified or re-registered.`,details:{typeId:e.id}});this.types.set(e.id,e)}get(e){return this.types.get(e)}listByCategory(e){let t=[];for(let n of this.types.values())n.category===e&&t.push(n);return t}validate(e,n){let r=this.types.get(e);if(!r)return{success:!1,error:t.n.fromCode(`VALIDATION_ERROR`,{body:`Node type "${e}" is not registered`,details:{typeId:e}})};try{return{success:!0,data:r.schema.parse(n)}}catch(n){return{success:!1,error:t.n.fromCode(`VALIDATION_ERROR`,{body:`Data validation failed for type "${e}"`,cause:n,details:{typeId:e,validationErrors:n}})}}}has(e){return this.types.has(e)}size(){return this.types.size}};const c=new s,l=`storage-output-v1`,u=`ocr-output-v1`,d=`image-description-output-v1`,f=i.z.object({extractedText:i.z.string(),format:i.z.enum([`markdown`,`plain`,`structured`]),taskType:i.z.enum([`convertToMarkdown`,`freeOcr`,`parseFigure`,`locateObject`]),confidence:i.z.number().min(0).max(1).optional()}),p=i.z.object({description:i.z.string(),confidence:i.z.number().min(0).max(1).optional(),metadata:i.z.record(i.z.string(),i.z.unknown()).optional()});c.register({id:l,category:`output`,schema:e.D,version:`1.0.0`,description:`Storage output node that saves files to configured storage backend`}),c.register({id:u,category:`output`,schema:f,version:`1.0.0`,description:`OCR output node that extracts structured text from documents using AI`}),c.register({id:d,category:`output`,schema:p,version:`1.0.0`,description:`Image description output node that generates AI-powered descriptions of images`});let m=function(e){return e.input=`input`,e.process=`process`,e.conditional=`conditional`,e.multiplex=`multiplex`,e.merge=`merge`,e}({});function h({id:e,name:n,description:i,type:a,inputSchema:o,outputSchema:s,run:l,condition:u,multiInput:d=!1,multiOutput:f=!1,pausable:p=!1,retry:h,nodeTypeId:g}){return r.Effect.gen(function*(){if(g){let n=c.get(g);if(!n)return yield*t.n.fromCode(`INVALID_NODE_TYPE`,{body:`Node type "${g}" is not registered`,details:{nodeTypeId:g,nodeId:e}}).toEffect();if(a===m.input&&n.category!==`input`)return yield*t.n.fromCode(`TYPE_CATEGORY_MISMATCH`,{body:`Node type "${g}" is registered as "${n.category}" but node "${e}" is type "${a}"`,details:{nodeTypeId:g,nodeId:e,expectedCategory:`input`,actualCategory:n.category}}).toEffect()}return{id:e,name:n,description:i,type:a,inputSchema:o,outputSchema:s,pausable:p,run:({data:i,jobId:a,flowId:c,storageId:u,clientId:d})=>r.Effect.gen(function*(){let f=yield*l({data:yield*r.Effect.try({try:()=>o.parse(i),catch:r=>{let i=r instanceof Error?r.message:String(r);return t.n.fromCode(`FLOW_INPUT_VALIDATION_ERROR`,{body:`Node '${n}' (${e}) input validation failed: ${i}`,cause:r})}}),jobId:a,storageId:u,flowId:c,clientId:d});return f.type===`waiting`?{type:`waiting`,partialData:f.partialData,nodeType:g,nodeId:e}:{type:`complete`,data:yield*r.Effect.try({try:()=>s.parse(f.data),catch:r=>{let i=r instanceof Error?r.message:String(r);return t.n.fromCode(`FLOW_OUTPUT_VALIDATION_ERROR`,{body:`Node '${n}' (${e}) output validation failed: ${i}`,cause:r})}}),nodeType:g,nodeId:e}}),condition:u,multiInput:d,multiOutput:f,retry:h}})}const g=e=>({id:e.id,name:e.name,description:e.description,type:e.type});var _=class{maxConcurrency;constructor(e={}){this.maxConcurrency=e.maxConcurrency??4}groupNodesByExecutionLevel(e,t){let n={},r={};e.forEach(e=>{n[e.id]=[],r[e.id]=0}),t.forEach(e=>{n[e.source]?.push(e.target),r[e.target]=(r[e.target]||0)+1});let i=[],a=new Set,o=0;for(;a.size<e.length;){let e=Object.keys(r).filter(e=>r[e]===0&&!a.has(e));if(e.length===0)throw Error(`Cycle detected in flow graph - cannot execute in parallel`);i.push({level:o++,nodes:e}),e.forEach(e=>{a.add(e),delete r[e],n[e]?.forEach(e=>{r[e]!==void 0&&r[e]--})})}return i}executeNodesInParallel(e){return r.Effect.all(e.map(e=>e()),{concurrency:this.maxConcurrency})}canExecuteInParallel(e,t,n){return e.every(e=>(n[e]||[]).every(e=>t.has(e)))}getStats(){return{maxConcurrency:this.maxConcurrency}}};function v(e){return t=>{if(t.nodeType!==e)return!1;let n=c.get(e);return n?n.schema.safeParse(t.data).success:!1}}function y(t){return!t||typeof t!=`object`?!1:e.D.safeParse(t).success}const b=v(`storage-output-v1`),x=v(u),S=v(d);function C(e,t){return e.filter(t)}function w(e,n){return r.Effect.gen(function*(){let r=C(e,n);return r.length===0?yield*t.n.fromCode(`OUTPUT_NOT_FOUND`,{body:`No output of the specified type was found in the flow results`}).toEffect():r.length>1?yield*t.n.fromCode(`MULTIPLE_OUTPUTS_FOUND`,{body:`Found ${r.length} outputs of the specified type, expected exactly one`,details:{foundCount:r.length,nodeIds:r.map(e=>e.nodeId)}}).toEffect():r[0]})}function T(e,t){return C(e,t)[0]}function E(e,t){return e.find(e=>e.nodeId===t)}function D(e,t){return e.some(t)}const O=(e,t)=>{if(e===t)return!0;try{return!!(e&&t&&typeof e==`object`&&typeof t==`object`)}catch{return!0}};var k=class{typeChecker;constructor(e=O){this.typeChecker=e}validateConnection(e,t,n){return this.getCompatibleTypes(e.outputSchema,t.inputSchema)}getCompatibleTypes(e,t){return this.typeChecker(e,t)}validateFlow(e,t){let n=[],r=new Map(e.map(e=>[e.id,e]));for(let e of t){let t=r.get(e.source),i=r.get(e.target);if(!t){n.push(`Source node ${e.source} not found`);continue}if(!i){n.push(`Target node ${e.target} not found`);continue}this.validateConnection(t,i,e)||n.push(`Schema mismatch: ${t.id} output schema incompatible with ${i.id} input schema`)}return{isValid:n.length===0,errors:n}}getExpectedInputSchemas(e,t,n){let r=new Map(t.map(e=>[e.id,e])),i={};for(let t of n)if(t.target===e){let e=r.get(t.source);if(e){let n=t.sourcePort||t.source;i[n]=e.outputSchema}}return i}getActualOutputSchemas(e,t,n){let r=new Map(t.map(e=>[e.id,e])),i={};for(let t of n)if(t.source===e){let e=r.get(t.target);if(e){let n=t.targetPort||t.target;i[n]=e.inputSchema}}return i}validateData(e,t){try{return t.parse(e),{isValid:!0,errors:[]}}catch(e){return e instanceof Error&&`errors`in e?{isValid:!1,errors:e.errors.map(e=>`${e.path.join(`.`)}: ${e.message}`)}:{isValid:!1,errors:[e instanceof Error?e.message:`Validation failed`]}}}};const A=e=>({id:e.id,name:e.name,nodes:e.nodes.map(g),edges:e.edges});function j(n){return r.Effect.gen(function*(){let a=yield*r.Effect.all(n.nodes.map(e=>r.Effect.isEffect(e)?e:r.Effect.succeed(e))),{flowId:s,name:c,onEvent:l,checkJobStatus:u,edges:d,inputSchema:f,outputSchema:p,typeChecker:m}=n,h=a,g=new k(m),v=()=>{let e={},t={},n={};return h.forEach(r=>{e[r.id]=[],n[r.id]=[],t[r.id]=0}),d.forEach(r=>{e[r.source]?.push(r.target),n[r.target]?.push(r.source),t[r.target]=(t[r.target]||0)+1}),{graph:e,reverseGraph:n,inDegree:t}},b=()=>{let{graph:e,inDegree:t}=v(),n=[],r=[];for(Object.keys(t).forEach(e=>{t[e]===0&&n.push(e)});n.length>0;){let i=n.shift();if(!i)throw Error(`No current node found`);r.push(i),e[i]?.forEach(e=>{t[e]=(t[e]||0)-1,t[e]===0&&n.push(e)})}return r},x=(e,t)=>{if(!e.condition)return r.Effect.succeed(!0);let{field:n,operator:i,value:a}=e.condition,o=t,s=o?.metadata?.[n]||o?.[n],c=(()=>{switch(i){case`equals`:return s===a;case`notEquals`:return s!==a;case`greaterThan`:return Number(s)>Number(a);case`lessThan`:return Number(s)<Number(a);case`contains`:return String(s).includes(String(a));case`startsWith`:return String(s).startsWith(String(a));default:return!0}})();return r.Effect.succeed(c)},S=(e,t)=>{let{reverseGraph:n}=v(),r=n[e]||[],i={};return r.forEach(e=>{let n=t.get(e);n!==void 0&&(i[e]=n)}),i},C=e=>{let t=h.filter(e=>e.type===`input`),n={};return t.forEach(t=>{e&&typeof e==`object`&&t.id in e&&(n[t.id]=f.parse(e[t.id]))}),n},w=e=>!d.some(t=>t.source===e),T=e=>{let t=h.filter(e=>w(e.id)),n={};return t.forEach(t=>{let r=e.get(t.id);r!==void 0&&(n[t.id]=r)}),n},E=(e,t)=>{let n=h.filter(e=>w(e.id)),r=[];return n.forEach(n=>{let i=e.get(n.id);if(i!==void 0){let e=t.get(n.id);r.push({nodeId:n.id,nodeType:e,data:i,timestamp:new Date().toISOString()})}}),r},D=(t,n,i)=>r.Effect.gen(function*(){if(t.storage.id===n)return t;let a=yield*e.w,o=yield*a.getDataStore(t.storage.id,i),s=yield*a.getDataStore(n,i),c=yield*o.read(t.id),l=r.Stream.make(c),u={...t,storage:{id:n,type:t.storage.type}},d=yield*s.create(u);return yield*s.write({file_id:d.id,stream:l,offset:0},{}),d}),O=(e,i,a,c,d,f,p)=>r.Effect.gen(function*(){let m=d.get(e);if(!m)return yield*t.n.fromCode(`FLOW_NODE_NOT_FOUND`).toEffect();if(u){let e=yield*u(f);if(e===`paused`)return yield*t.n.fromCode(`FLOW_PAUSED`,{cause:`Flow ${s} was paused by user at job ${f}`}).toEffect();if(e===`cancelled`)return yield*t.n.fromCode(`FLOW_CANCELLED`,{cause:`Flow ${s} was cancelled by user at job ${f}`}).toEffect()}l&&(yield*l({jobId:f,flowId:s,nodeId:e,eventType:o.NodeStart,nodeName:m.name,nodeType:m.type}));let h=m.retry?.maxRetries??0,g=m.retry?.retryDelay??1e3,_=m.retry?.exponentialBackoff??!0,v=0,b=null;for(;v<=h;)try{let u,d={};if(m.type===`input`){if(u=a[e],u===void 0)return yield*r.Effect.logError(`Input node ${e} has no input data`),yield*t.n.fromCode(`FLOW_NODE_ERROR`,{cause:Error(`Input node ${e} has no input data`)}).toEffect()}else{if(d=S(e,c),Object.keys(d).length===0)return yield*r.Effect.logError(`Node ${e} has no input data`),yield*t.n.fromCode(`FLOW_NODE_ERROR`,{cause:Error(`Node ${e} has no input data`)}).toEffect();if(m.multiInput)u=d;else{let n=Object.keys(d)[0];if(!n)return yield*t.n.fromCode(`FLOW_NODE_ERROR`,{cause:Error(`Node ${e} has no input data`)}).toEffect();u=d[n]}}if(m.type===`conditional`&&!(yield*x(m,u)))return l&&(yield*l({jobId:f,flowId:s,nodeId:e,eventType:o.NodeEnd,nodeName:m.name})),{nodeId:e,result:u,success:!0,waiting:!1};let h=yield*m.run({data:u,inputs:d,jobId:f,flowId:s,storageId:i,clientId:p});if(h.type===`waiting`){let t=h.partialData;return l&&(yield*l({jobId:f,flowId:s,nodeId:e,eventType:o.NodePause,nodeName:m.name,partialData:t})),{nodeId:e,result:t,success:!0,waiting:!0,nodeType:h.nodeType}}let g=h.data;return w(e)&&(y(g)&&g.storage.id!==i&&(yield*r.Effect.logDebug(`Auto-persisting sink node ${e} output from ${g.storage.id} to ${i}`),g=yield*D(g,i,p)),n.hooks?.onNodeOutput&&(yield*r.Effect.logDebug(`Calling onNodeOutput hook for sink node ${e}`),g=yield*n.hooks.onNodeOutput({output:g,nodeId:e,flowId:s,jobId:f,storageId:i,clientId:p}))),l&&(yield*l({jobId:f,flowId:s,nodeId:e,eventType:o.NodeEnd,nodeName:m.name,result:g})),{nodeId:e,result:g,success:!0,waiting:!1,nodeType:h.nodeType}}catch(n){if(b=n instanceof t.n?n:t.n.fromCode(`FLOW_NODE_ERROR`,{cause:n}),v<h){v++;let t=_?g*2**(v-1):g;yield*r.Effect.logWarning(`Node ${e} (${m.name}) failed, retrying (${v}/${h}) after ${t}ms`),yield*r.Effect.sleep(t);continue}return l&&(yield*l({jobId:f,flowId:s,nodeId:e,eventType:o.NodeError,nodeName:m.name,error:b.body,retryCount:v})),yield*b.toEffect()}return b?yield*b.toEffect():yield*t.n.fromCode(`FLOW_NODE_ERROR`,{cause:Error(`Unexpected error in retry loop`)}).toEffect()}),A=({inputs:e,storageId:a,jobId:c,resumeFrom:u,clientId:f})=>r.Effect.gen(function*(){!u&&l&&(yield*l({jobId:c,eventType:o.FlowStart,flowId:s}));let m=C(e||{}),g,v,y;u?(g=u.executionOrder,v=u.nodeResults,y=u.currentIndex):(g=b(),v=new Map,y=0);let x=new Map;if(g.length!==h.length)return yield*t.n.fromCode(`FLOW_CYCLE_ERROR`).toEffect();let S=new Map(h.map(e=>[e.id,e]));if(n.parallelExecution?.enabled??!1){yield*r.Effect.logDebug(`Flow ${s}: Executing in parallel mode (maxConcurrency: ${n.parallelExecution?.maxConcurrency??4})`);let e=new _({maxConcurrency:n.parallelExecution?.maxConcurrency??4}),t=e.groupNodesByExecutionLevel(h,d);yield*r.Effect.logDebug(`Flow ${s}: Grouped nodes into ${t.length} execution levels`);let i={};h.forEach(e=>{i[e.id]=[]}),d.forEach(e=>{i[e.target]?.push(e.source)});for(let n of t){yield*r.Effect.logDebug(`Flow ${s}: Executing level ${n.level} with nodes: ${n.nodes.join(`, `)}`);let t=n.nodes.map(e=>()=>r.Effect.gen(function*(){if(u&&e===u.executionOrder[y]&&l){let t=S.get(e);t&&(yield*l({jobId:c,flowId:s,nodeId:e,eventType:o.NodeResume,nodeName:t.name,nodeType:t.type}))}return{nodeId:e,nodeResult:yield*O(e,a,m,v,S,c,f)}})),i=yield*e.executeNodesInParallel(t);for(let{nodeId:e,nodeResult:t}of i){if(t.waiting)return t.result!==void 0&&(v.set(e,t.result),t.nodeType&&x.set(e,t.nodeType)),{type:`paused`,nodeId:e,executionState:{executionOrder:g,currentIndex:g.indexOf(e),inputs:m}};t.success&&(v.set(e,t.result),t.nodeType&&x.set(e,t.nodeType))}}}else{yield*r.Effect.logDebug(`Flow ${s}: Executing in sequential mode`);for(let e=y;e<g.length;e++){let n=g[e];if(!n)return yield*t.n.fromCode(`FLOW_NODE_NOT_FOUND`).toEffect();if(u&&e===y&&l){let e=S.get(n);e&&(yield*l({jobId:c,flowId:s,nodeId:n,eventType:o.NodeResume,nodeName:e.name,nodeType:e.type}))}let r=yield*O(n,a,m,v,S,c,f);if(r.waiting)return r.result!==void 0&&(v.set(r.nodeId,r.result),r.nodeType&&x.set(r.nodeId,r.nodeType)),{type:`paused`,nodeId:r.nodeId,executionState:{executionOrder:g,currentIndex:e,inputs:m}};r.success&&(v.set(r.nodeId,r.result),r.nodeType&&x.set(r.nodeId,r.nodeType))}}let D=T(v),k=E(v,x),A=i.z.record(i.z.string(),p).safeParse(D);if(!A.success){let e=`Flow output validation failed: ${A.error.message}. Expected outputs: ${JSON.stringify(Object.keys(T(v)))}. Sink nodes: ${h.filter(e=>w(e.id)).map(e=>e.id).join(`, `)}`;return l&&(yield*l({jobId:c,eventType:o.FlowError,flowId:s,error:e})),yield*t.n.fromCode(`FLOW_OUTPUT_VALIDATION_ERROR`,{body:e,cause:A.error}).toEffect()}let j=A.data;return l&&(yield*l({jobId:c,eventType:o.FlowEnd,flowId:s,outputs:k,result:j})),{type:`completed`,result:j,outputs:k}});return{id:s,name:c,nodes:h,edges:d,inputSchema:f,outputSchema:p,onEvent:l,checkJobStatus:u,hooks:n.hooks,run:({inputs:e,storageId:t,jobId:n,clientId:r})=>A({inputs:e,storageId:t,jobId:n,clientId:r}),resume:({jobId:e,storageId:t,nodeResults:n,executionState:r,clientId:i})=>A({inputs:r.inputs,storageId:t,jobId:e,resumeFrom:{executionOrder:r.executionOrder,nodeResults:new Map(Object.entries(n)),currentIndex:r.currentIndex},clientId:i}),validateTypes:()=>{let e=h;return g.validateFlow(e,d)},validateInputs:e=>g.validateData(e,f),validateOutputs:e=>g.validateData(e,p)}})}var M=class e extends r.Context.Tag(`FlowWaitUntil`)(){static optional=r.Effect.serviceOption(e)},N=class extends r.Context.Tag(`FlowProvider`)(){},P=class extends r.Context.Tag(`FlowServer`)(){};const ee=e=>typeof e==`object`&&!!e&&`id`in e,te=e=>typeof e==`object`&&e&&`nodeId`in e&&`data`in e&&`timestamp`in e?e.data:e;function F(e,n,i){let a=t=>{let a=e=>r.Effect.gen(function*(){let n=yield*i.get(t);n&&(yield*i.set(t,{...n,...e,updatedAt:new Date}))});return s=>r.Effect.gen(function*(){switch(e.onEvent&&(yield*r.Effect.catchAll(e.onEvent(s),e=>(r.Effect.logError(`Original onEvent failed`,e),r.Effect.succeed({eventId:null})))),yield*n.emit(t,s),r.Effect.logInfo(`Updating job ${t} with event ${s.eventType}`),s.eventType){case o.FlowStart:yield*a({status:`running`});break;case o.FlowEnd:yield*r.Effect.gen(function*(){let e=yield*i.get(t);e&&s.outputs&&(yield*i.set(t,{...e,result:s.outputs,updatedAt:new Date}))});break;case o.FlowError:yield*a({status:`failed`,error:s.error});break;case o.NodeStart:yield*r.Effect.gen(function*(){let e=yield*i.get(t);if(e){let n=e.tasks.find(e=>e.nodeId===s.nodeId)?e.tasks.map(e=>e.nodeId===s.nodeId?{...e,status:`running`,updatedAt:new Date}:e):[...e.tasks,{nodeId:s.nodeId,status:`running`,createdAt:new Date,updatedAt:new Date}];yield*i.set(t,{...e,tasks:n,updatedAt:new Date})}});break;case o.NodePause:yield*r.Effect.gen(function*(){let e=yield*i.get(t);if(e){let n=e.tasks.find(e=>e.nodeId===s.nodeId)?e.tasks.map(e=>e.nodeId===s.nodeId?{...e,status:`paused`,result:s.partialData,updatedAt:new Date}:e):[...e.tasks,{nodeId:s.nodeId,status:`paused`,result:s.partialData,createdAt:new Date,updatedAt:new Date}];yield*i.set(t,{...e,tasks:n,updatedAt:new Date})}});break;case o.NodeResume:yield*r.Effect.gen(function*(){let e=yield*i.get(t);if(e){let n=e.tasks.map(e=>e.nodeId===s.nodeId?{...e,status:`running`,updatedAt:new Date}:e);yield*i.set(t,{...e,tasks:n,updatedAt:new Date})}});break;case o.NodeEnd:yield*r.Effect.gen(function*(){let n=yield*i.get(t);if(n){let r=n.tasks.map(e=>e.nodeId===s.nodeId?{...e,status:`completed`,result:s.result,updatedAt:new Date}:e),a=!e.edges.some(e=>e.source===s.nodeId),o=s.result,c=te(o),l=n.intermediateFiles||[];a&&ee(c)&&c.id?l=l.filter(e=>e!==c.id):!a&&ee(c)&&c.id&&(l.includes(c.id)||l.push(c.id)),yield*i.set(t,{...n,tasks:r,intermediateFiles:l,updatedAt:new Date})}});break;case o.NodeError:yield*r.Effect.gen(function*(){let e=yield*i.get(t);if(e){let n=e.tasks.map(e=>e.nodeId===s.nodeId?{...e,status:`failed`,error:s.error,retryCount:s.retryCount,updatedAt:new Date}:e);yield*i.set(t,{...e,tasks:n,error:s.error,updatedAt:new Date})}});break}return{eventId:t}})},s=e=>e=>r.Effect.gen(function*(){let n=yield*i.get(e);return n?n.status===`paused`?`paused`:n.status===`cancelled`?`cancelled`:`running`:yield*r.Effect.fail(t.n.fromCode(`FLOW_JOB_NOT_FOUND`,{cause:`Job ${e} not found`}))});return{...e,run:t=>r.Effect.gen(function*(){let n=t.jobId||crypto.randomUUID(),r=a(n),i=s(n);return yield*(yield*j({flowId:e.id,name:e.name,nodes:e.nodes,edges:e.edges,inputSchema:e.inputSchema,outputSchema:e.outputSchema,onEvent:r,checkJobStatus:i})).run({...t,jobId:n,clientId:t.clientId})}),resume:t=>r.Effect.gen(function*(){let n=t.jobId,r=a(n),i=s(n);return yield*(yield*j({flowId:e.id,name:e.name,nodes:e.nodes,edges:e.edges,inputSchema:e.inputSchema,outputSchema:e.outputSchema,onEvent:r,checkJobStatus:i})).resume(t)})}}function I(){return r.Effect.gen(function*(){let i=yield*N,a=yield*e.h,s=yield*e.s,c=yield*n.n,l=(e,n)=>r.Effect.gen(function*(){let i=yield*s.get(e);return i?yield*s.set(e,{...i,...n}):yield*r.Effect.fail(t.n.fromCode(`FLOW_JOB_NOT_FOUND`,{cause:`Job ${e} not found`}))}),u=(e,t)=>r.Effect.gen(function*(){let n=yield*s.get(e);!n||!n.intermediateFiles||n.intermediateFiles.length===0||(yield*r.Effect.logInfo(`Cleaning up ${n.intermediateFiles.length} intermediate files for job ${e}`),yield*r.Effect.all(n.intermediateFiles.map(e=>r.Effect.gen(function*(){yield*c.delete(e,t),yield*r.Effect.logDebug(`Deleted intermediate file ${e}`)}).pipe(r.Effect.catchAll(t=>r.Effect.gen(function*(){return yield*r.Effect.logWarning(`Failed to delete intermediate file ${e}: ${t}`),r.Effect.succeed(void 0)})))),{concurrency:5}),yield*l(e,{intermediateFiles:[]}))}),d=({jobId:e,flow:n,storageId:i,clientId:c,inputs:d})=>r.Effect.gen(function*(){console.log(`[FlowServer] executeFlowInBackground started for job: ${e}`),yield*l(e,{status:`running`}),console.log(`[FlowServer] Creating flowWithEvents for job: ${e}`);let t=F(n,a,s);console.log(`[FlowServer] Running flow for job: ${e}`);let r=yield*t.run({inputs:d,storageId:i,jobId:e,clientId:c});return console.log(`[FlowServer] Flow completed for job: ${e}, result type: ${r.type}`),r.type===`paused`?yield*l(e,{status:`paused`,pausedAt:r.nodeId,executionState:r.executionState,updatedAt:new Date}):(yield*l(e,{status:`completed`,updatedAt:new Date,endedAt:new Date}),yield*u(e,c)),r}).pipe(r.Effect.catchAll(n=>r.Effect.gen(function*(){yield*r.Effect.logError(`Flow execution failed`,n);let i=n instanceof t.n?n.body:String(n);yield*r.Effect.logInfo(`Updating job ${e} to failed status with error: ${i}`),yield*l(e,{status:`failed`,error:i,updatedAt:new Date}).pipe(r.Effect.catchAll(t=>r.Effect.gen(function*(){return yield*r.Effect.logError(`Failed to update job ${e}`,t),r.Effect.succeed(void 0)})));let d=yield*s.get(e);throw d&&(yield*a.emit(e,{jobId:e,eventType:o.FlowError,flowId:d.flowId,error:i}).pipe(r.Effect.catchAll(t=>r.Effect.gen(function*(){return yield*r.Effect.logError(`Failed to emit FlowError event for job ${e}`,t),r.Effect.succeed(void 0)})))),yield*u(e,c).pipe(r.Effect.catchAll(t=>r.Effect.gen(function*(){return yield*r.Effect.logWarning(`Failed to cleanup intermediate files for job ${e}`,t),r.Effect.succeed(void 0)}))),n})));return{getFlow:(e,t)=>r.Effect.gen(function*(){return yield*i.getFlow(e,t)}),getFlowData:(e,t)=>r.Effect.gen(function*(){return A(yield*i.getFlow(e,t))}),runFlow:({flowId:e,storageId:n,clientId:a,inputs:o})=>r.Effect.gen(function*(){let c=yield*M.optional,l=yield*r.Effect.try({try:()=>$.parse({inputs:o}),catch:e=>t.n.fromCode(`FLOW_INPUT_VALIDATION_ERROR`,{cause:e})}),u=crypto.randomUUID(),f=new Date,p={id:u,flowId:e,storageId:n,clientId:a,status:`started`,createdAt:f,updatedAt:f,tasks:[]};yield*s.set(u,p);let m=yield*i.getFlow(e,a);console.log(`[FlowServer] About to fork flow execution for job: ${u}`);let h=d({jobId:u,flow:m,storageId:n,clientId:a,inputs:l.inputs}).pipe(r.Effect.tapErrorCause(e=>r.Effect.logError(`Flow execution failed`,e)));if(r.Option.isSome(c)){console.log(`[FlowServer] Using waitUntil for job: ${u}`);let e=yield*r.Effect.runtime(),t=r.Runtime.runPromise(e)(h);c.value(t)}else console.log(`[FlowServer] Using Effect.forkDaemon for job: ${u}`),yield*r.Effect.forkDaemon(h);return console.log(`[FlowServer] Flow execution started for job: ${u}`),p}),getJobStatus:e=>r.Effect.gen(function*(){return(yield*s.get(e))||(yield*r.Effect.fail(t.n.fromCode(`FLOW_JOB_NOT_FOUND`,{cause:`Job ${e} not found`})))}),resumeFlow:({jobId:e,nodeId:n,newData:c,clientId:d})=>r.Effect.gen(function*(){let f=yield*M.optional,p=yield*s.get(e);if(!p)return console.error(`Job not found`),yield*r.Effect.fail(t.n.fromCode(`FLOW_JOB_NOT_FOUND`,{cause:`Job ${e} not found`}));if(p.status!==`paused`)return console.error(`Job is not paused`),yield*r.Effect.fail(t.n.fromCode(`FLOW_JOB_ERROR`,{cause:`Job ${e} is not paused (status: ${p.status})`}));if(p.pausedAt!==n)return console.error(`Job is not paused at the expected node`),yield*r.Effect.fail(t.n.fromCode(`FLOW_JOB_ERROR`,{cause:`Job ${e} is paused at node ${p.pausedAt}, not ${n}`}));if(!p.executionState)return console.error(`Job has no execution state`),yield*r.Effect.fail(t.n.fromCode(`FLOW_JOB_ERROR`,{cause:`Job ${e} has no execution state`}));let m={...p.tasks.reduce((e,t)=>(t.result!==void 0&&(e[t.nodeId]=t.result),e),{}),[n]:c},h={...p.executionState.inputs,[n]:c};yield*l(e,{status:`running`});let g=yield*i.getFlow(p.flowId,p.clientId),_=r.Effect.gen(function*(){let n=F(g,a,s);if(!p.executionState)return yield*r.Effect.fail(t.n.fromCode(`FLOW_JOB_ERROR`,{cause:`Job ${e} has no execution state`}));let i=yield*n.resume({jobId:e,storageId:p.storageId,nodeResults:m,executionState:{...p.executionState,inputs:h},clientId:p.clientId});return i.type===`paused`?yield*l(e,{status:`paused`,pausedAt:i.nodeId,executionState:i.executionState,updatedAt:new Date}):(yield*l(e,{status:`completed`,pausedAt:void 0,executionState:void 0,updatedAt:new Date,endedAt:new Date}),yield*u(e,d)),i}).pipe(r.Effect.catchAll(n=>r.Effect.gen(function*(){yield*r.Effect.logError(`Flow resume failed`,n);let i=n instanceof t.n?n.body:String(n);yield*r.Effect.logInfo(`Updating job ${e} to failed status with error: ${i}`),yield*l(e,{status:`failed`,error:i,updatedAt:new Date}).pipe(r.Effect.catchAll(t=>r.Effect.gen(function*(){return yield*r.Effect.logError(`Failed to update job ${e}`,t),r.Effect.succeed(void 0)})));let c=yield*s.get(e);throw c&&(yield*a.emit(e,{jobId:e,eventType:o.FlowError,flowId:c.flowId,error:i}).pipe(r.Effect.catchAll(t=>r.Effect.gen(function*(){return yield*r.Effect.logError(`Failed to emit FlowError event for job ${e}`,t),r.Effect.succeed(void 0)})))),yield*u(e,d).pipe(r.Effect.catchAll(t=>r.Effect.gen(function*(){return yield*r.Effect.logWarning(`Failed to cleanup intermediate files for job ${e}`,t),r.Effect.succeed(void 0)}))),n}))).pipe(r.Effect.tapErrorCause(e=>r.Effect.logError(`Flow resume failed`,e)));if(r.Option.isSome(f)){console.log(`[FlowServer] Using waitUntil for resume job: ${e}`);let t=yield*r.Effect.runtime(),n=r.Runtime.runPromise(t)(_);f.value(n)}else console.log(`[FlowServer] Using Effect.forkDaemon for resume job: ${e}`),yield*r.Effect.forkDaemon(_);return(yield*s.get(e))||(yield*r.Effect.fail(t.n.fromCode(`FLOW_JOB_NOT_FOUND`,{cause:`Job ${e} not found after update`})))}),pauseFlow:(e,n)=>r.Effect.gen(function*(){let i=yield*s.get(e);if(!i)return yield*r.Effect.fail(t.n.fromCode(`FLOW_JOB_NOT_FOUND`,{cause:`Job ${e} not found`}));if(n!==null&&i.clientId!==n)return yield*r.Effect.fail(t.n.fromCode(`FLOW_NOT_AUTHORIZED`,{cause:`Client ${n} is not authorized to pause job ${e}`}));if(i.status!==`running`)return yield*r.Effect.fail(t.n.fromCode(`FLOW_JOB_ERROR`,{cause:`Job ${e} cannot be paused (current status: ${i.status})`}));let c=i.tasks.find(e=>e.status===`running`)?.nodeId;return yield*l(e,{status:`paused`,pausedAt:c,updatedAt:new Date}),yield*a.emit(e,{jobId:e,flowId:i.flowId,eventType:o.FlowPause,pausedAt:c}),(yield*s.get(e))||(yield*r.Effect.fail(t.n.fromCode(`FLOW_JOB_NOT_FOUND`,{cause:`Job ${e} not found after pause`})))}),cancelFlow:(e,n)=>r.Effect.gen(function*(){let i=yield*s.get(e);return i?n!==null&&i.clientId!==n?yield*r.Effect.fail(t.n.fromCode(`FLOW_NOT_AUTHORIZED`,{cause:`Client ${n} is not authorized to cancel job ${e}`})):i.status!==`running`&&i.status!==`paused`&&i.status!==`started`?yield*r.Effect.fail(t.n.fromCode(`FLOW_JOB_ERROR`,{cause:`Job ${e} cannot be cancelled (current status: ${i.status})`})):(yield*l(e,{status:`cancelled`,updatedAt:new Date,endedAt:new Date}),yield*a.emit(e,{jobId:e,flowId:i.flowId,eventType:o.FlowCancel}),yield*u(e,n),(yield*s.get(e))||(yield*r.Effect.fail(t.n.fromCode(`FLOW_JOB_NOT_FOUND`,{cause:`Job ${e} not found after cancellation`})))):yield*r.Effect.fail(t.n.fromCode(`FLOW_JOB_NOT_FOUND`,{cause:`Job ${e} not found`}))}),subscribeToFlowEvents:(e,t)=>r.Effect.gen(function*(){yield*a.subscribe(e,t)}),unsubscribeFromFlowEvents:e=>r.Effect.gen(function*(){yield*a.unsubscribe(e)})}})}const ne=r.Layer.effect(P,I()),L=e=>({type:`complete`,data:e}),R=e=>({type:`waiting`,partialData:e});function z(e){if(!e)return{type:``,fileName:``,metadata:void 0,metadataJson:void 0};let t={...e},n=String(t.type||t.mimeType||t[`content-type`]||``);n&&(t.type||=n,t.mimeType||=n);let r=String(t.fileName||t.originalName||t.name||``);return r&&(t.fileName||=r,t.originalName||=r,t.name||=r),{type:n,fileName:r,metadata:t,metadataJson:JSON.stringify(t)}}const re=i.z.object({operation:i.z.literal(`init`),storageId:i.z.string(),metadata:i.z.record(i.z.string(),i.z.any()).optional()}),ie=i.z.object({operation:i.z.literal(`finalize`),uploadId:i.z.string()}),ae=i.z.object({operation:i.z.literal(`url`),url:i.z.string(),storageId:i.z.string().optional(),metadata:i.z.record(i.z.string(),i.z.any()).optional()}),B=i.z.union([re,ie,ae]),oe=i.z.object({allowedMimeTypes:i.z.array(i.z.string()).optional(),minSize:i.z.number().positive().optional(),maxSize:i.z.number().positive().optional()});function V(e,n){return r.Effect.gen(function*(){if(n){if(n.allowedMimeTypes&&n.allowedMimeTypes.length>0&&!n.allowedMimeTypes.some(t=>{if(t.endsWith(`/*`)){let n=t.slice(0,-2);return e.type.startsWith(n)}return e.type===t}))throw yield*t.n.fromCode(`VALIDATION_ERROR`,{cause:Error(`File type "${e.type}" is not allowed. Allowed types: ${n.allowedMimeTypes.join(`, `)}`)}).toEffect();if(n.minSize!==void 0&&e.size<n.minSize)throw yield*t.n.fromCode(`VALIDATION_ERROR`,{cause:Error(`File size (${e.size} bytes) is below minimum (${n.minSize} bytes)`)}).toEffect();if(n.maxSize!==void 0&&e.size>n.maxSize)throw yield*t.n.fromCode(`VALIDATION_ERROR`,{cause:Error(`File size (${e.size} bytes) exceeds maximum (${n.maxSize} bytes)`)}).toEffect()}})}function se(i,a){return r.Effect.gen(function*(){let o=yield*n.n;return yield*h({id:i,name:`Input`,description:`Handles file input through multiple methods - streaming upload (init/finalize) or direct URL fetch`,type:m.input,inputSchema:B,outputSchema:e.D,run:({data:e,flowId:s,jobId:c,clientId:l})=>r.Effect.gen(function*(){switch(e.operation){case`init`:{let t={storageId:e.storageId,size:e.metadata?.size||0,type:e.metadata?.mimeType||`application/octet-stream`,fileName:e.metadata?.originalName,lastModified:e.metadata?.size?Date.now():void 0,metadata:e.metadata?JSON.stringify(e.metadata):void 0,flow:{flowId:s,nodeId:i,jobId:c}};return R(yield*o.createUpload(t,l))}case`finalize`:{let t=yield*o.getUpload(e.uploadId),{type:n}=z(t.metadata);return yield*V({type:n,size:t.size||0},a),L(t)}case`url`:{let t=yield*n.o(e.url),r=yield*n.a(t),u=e.metadata?.mimeType||t.headers.get(`content-type`)||`application/octet-stream`,d=e.metadata?.size||Number(t.headers.get(`content-length`)||0),f=e.metadata?.originalName||e.url.split(`/`).pop()||`file`;yield*V({type:u,size:d},a);let p=new ReadableStream({start(e){e.enqueue(new Uint8Array(r)),e.close()}}),m={storageId:e.storageId||`buffer`,size:d,type:u,fileName:f,lastModified:Date.now(),metadata:e.metadata?JSON.stringify(e.metadata):void 0};return L({...yield*o.upload(m,l,p),flow:{flowId:s,nodeId:i,jobId:c}})}default:throw yield*t.n.fromCode(`VALIDATION_ERROR`,{cause:Error(`Invalid operation`)}).toEffect()}})})})}function ce({id:t,name:i,description:a,nodeTypeId:o,transform:s}){return r.Effect.gen(function*(){let c=yield*n.n;return yield*h({id:t,name:i,description:a,type:m.process,nodeTypeId:o,inputSchema:e.D,outputSchema:e.D,run:({data:e,storageId:n,flowId:i,jobId:a,clientId:o})=>r.Effect.gen(function*(){let r={flowId:i,nodeId:t,jobId:a},l=yield*s(yield*c.read(e.id,o),e),u=l instanceof Uint8Array?l:l.bytes,d=l instanceof Uint8Array?void 0:l.type,f=l instanceof Uint8Array?void 0:l.fileName,p=new ReadableStream({start(e){e.enqueue(u),e.close()}}),{type:m,fileName:h,metadata:g,metadataJson:_}=z(e.metadata),v=yield*c.upload({storageId:n,size:u.byteLength,type:d??m,fileName:f??h,lastModified:0,metadata:_,flow:r},o,p),y=g?{...g,...d&&{mimeType:d,type:d,"content-type":d},...f&&{fileName:f,originalName:f,name:f,extension:f.split(`.`).pop()||g.extension}}:v.metadata;return L(y?{...v,metadata:y}:v)})})})}var le=class extends r.Context.Tag(`CredentialProvider`)(){},ue=class extends r.Context.Tag(`DocumentAiPlugin`)(){},de=class extends r.Context.Tag(`DocumentPlugin`)(){},fe=class extends r.Context.Tag(`ImageAiPlugin`)(){},pe=class extends r.Context.Tag(`ImagePlugin`)(){};const me=i.z.object({serviceType:i.z.enum([`replicate`]).optional()}),he=i.z.object({duration:i.z.number().nonnegative(),width:i.z.number().positive(),height:i.z.number().positive(),codec:i.z.string(),format:i.z.string(),bitrate:i.z.number().nonnegative(),frameRate:i.z.number().positive(),aspectRatio:i.z.string(),hasAudio:i.z.boolean(),audioCodec:i.z.string().optional(),audioBitrate:i.z.number().nonnegative().optional(),size:i.z.number().nonnegative()}),ge=i.z.object({timestamp:i.z.number().nonnegative(),format:i.z.enum([`png`,`jpeg`]).optional(),quality:i.z.number().min(1).max(100).optional()}),_e=i.z.object({quality:i.z.number().min(0).max(100),format:i.z.enum([`jpeg`,`webp`,`png`,`avif`])}),ve=i.z.object({serviceType:i.z.enum([`replicate`]).optional()}),ye=i.z.object({width:i.z.number().positive().optional(),height:i.z.number().positive().optional(),fit:i.z.enum([`contain`,`cover`,`fill`])}).refine(e=>e.width||e.height,`Either width or height must be specified for resize`),be=i.z.object({width:i.z.number().positive().optional(),height:i.z.number().positive().optional(),aspectRatio:i.z.enum([`keep`,`ignore`]).optional(),scaling:i.z.enum([`bicubic`,`bilinear`,`lanczos`]).optional()}).refine(e=>e.width||e.height,`Either width or height must be specified for video resize`),xe=i.z.object({format:i.z.enum([`mp4`,`webm`,`mov`,`avi`]),codec:i.z.enum([`h264`,`h265`,`vp9`,`av1`]).optional(),videoBitrate:i.z.string().optional(),audioBitrate:i.z.string().optional(),audioCodec:i.z.enum([`aac`,`mp3`,`opus`,`vorbis`]).optional()}),H=i.z.object({type:i.z.literal(`resize`),width:i.z.number().positive().optional(),height:i.z.number().positive().optional(),fit:i.z.enum([`contain`,`cover`,`fill`])}),U=i.z.object({type:i.z.literal(`blur`),sigma:i.z.number().min(.3).max(1e3)}),W=i.z.object({type:i.z.literal(`rotate`),angle:i.z.number(),background:i.z.string().optional()}),G=i.z.object({type:i.z.literal(`flip`),direction:i.z.enum([`horizontal`,`vertical`])}),K=i.z.object({type:i.z.literal(`grayscale`)}),q=i.z.object({type:i.z.literal(`sepia`)}),J=i.z.object({type:i.z.literal(`brightness`),value:i.z.number().min(-100).max(100)}),Y=i.z.object({type:i.z.literal(`contrast`),value:i.z.number().min(-100).max(100)}),X=i.z.object({type:i.z.literal(`sharpen`),sigma:i.z.number().positive().optional()}),Z=i.z.object({type:i.z.literal(`watermark`),imagePath:i.z.string().min(1).url(),position:i.z.enum([`top-left`,`top-right`,`bottom-left`,`bottom-right`,`center`]),opacity:i.z.number().min(0).max(1),offsetX:i.z.number().optional(),offsetY:i.z.number().optional()}),Q=i.z.object({type:i.z.literal(`logo`),imagePath:i.z.string().min(1).url(),position:i.z.enum([`top-left`,`top-right`,`bottom-left`,`bottom-right`,`center`]),scale:i.z.number().min(.1).max(2),offsetX:i.z.number().optional(),offsetY:i.z.number().optional()}),Se=i.z.object({type:i.z.literal(`text`),text:i.z.string().min(1),position:i.z.enum([`top-left`,`top-right`,`bottom-left`,`bottom-right`,`center`]),fontSize:i.z.number().positive(),color:i.z.string().min(1),fontFamily:i.z.string().optional(),offsetX:i.z.number().optional(),offsetY:i.z.number().optional()}),Ce=i.z.discriminatedUnion(`type`,[H,U,W,G,K,q,J,Y,X,Z,Q,Se]),we=i.z.object({transformations:i.z.array(Ce).min(1)}),Te=i.z.object({startTime:i.z.number().nonnegative(),endTime:i.z.number().positive().optional(),duration:i.z.number().positive().optional()}).refine(e=>!e.endTime||!e.duration,`Cannot specify both endTime and duration`).refine(e=>!e.endTime||e.endTime>e.startTime,`endTime must be greater than startTime`);var Ee=class extends r.Context.Tag(`VideoPlugin`)(){},De=class extends r.Context.Tag(`VirusScanPlugin`)(){},Oe=class extends r.Context.Tag(`ZipPlugin`)(){};const ke=(e,t)=>{if(e.length===0)return t;let[n,...r]=e;return r.reduce((e,t)=>i.z.union([e,t]),n)};function Ae(e){return r.Effect.gen(function*(){let n=Object.entries(e.nodes),a=e=>r.Effect.isEffect(e)?e:r.Effect.succeed(e),o=yield*r.Effect.forEach(n,([e,n])=>r.Effect.flatMap(a(n),n=>n.id===e?r.Effect.succeed([e,n]):r.Effect.fail(t.n.fromCode(`FLOW_NODE_ERROR`,{cause:Error(`Node key ${e} does not match node id ${n.id}`)})))),s=Object.fromEntries(o),c=o.map(([,e])=>e),l=o.filter(([,e])=>e.type===m.input).map(([,e])=>e.inputSchema),u=e.edges.map(e=>({source:s[e.source]?.id??e.source,target:s[e.target]?.id??e.target,sourcePort:e.sourcePort,targetPort:e.targetPort})),d=new Set(o.map(([e])=>s[e]?.id).filter(e=>e&&!u.some(t=>t.source===e))),f=o.filter(([,e])=>d.has(e.id)).map(([,e])=>e.outputSchema),p=e.inputSchema??ke(l,i.z.unknown()),h=e.outputSchema??ke(f,i.z.unknown());return yield*j({flowId:e.flowId,name:e.name,nodes:c,edges:u,inputSchema:p,outputSchema:h,typeChecker:e.typeChecker,onEvent:e.onEvent,parallelExecution:e.parallelExecution})})}const $=i.z.object({inputs:i.z.record(i.z.string(),i.z.any())});Object.defineProperty(exports,`$`,{enumerable:!0,get:function(){return D}}),Object.defineProperty(exports,`A`,{enumerable:!0,get:function(){return fe}}),Object.defineProperty(exports,`B`,{enumerable:!0,get:function(){return R}}),Object.defineProperty(exports,`C`,{enumerable:!0,get:function(){return ye}}),Object.defineProperty(exports,`D`,{enumerable:!0,get:function(){return he}}),Object.defineProperty(exports,`E`,{enumerable:!0,get:function(){return ge}}),Object.defineProperty(exports,`F`,{enumerable:!0,get:function(){return se}}),Object.defineProperty(exports,`G`,{enumerable:!0,get:function(){return ne}}),Object.defineProperty(exports,`H`,{enumerable:!0,get:function(){return P}}),Object.defineProperty(exports,`I`,{enumerable:!0,get:function(){return B}}),Object.defineProperty(exports,`J`,{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,`K`,{enumerable:!0,get:function(){return j}}),Object.defineProperty(exports,`L`,{enumerable:!0,get:function(){return oe}}),Object.defineProperty(exports,`M`,{enumerable:!0,get:function(){return ue}}),Object.defineProperty(exports,`N`,{enumerable:!0,get:function(){return le}}),Object.defineProperty(exports,`O`,{enumerable:!0,get:function(){return me}}),Object.defineProperty(exports,`P`,{enumerable:!0,get:function(){return ce}}),Object.defineProperty(exports,`Q`,{enumerable:!0,get:function(){return w}}),Object.defineProperty(exports,`R`,{enumerable:!0,get:function(){return z}}),Object.defineProperty(exports,`S`,{enumerable:!0,get:function(){return be}}),Object.defineProperty(exports,`T`,{enumerable:!0,get:function(){return _e}}),Object.defineProperty(exports,`U`,{enumerable:!0,get:function(){return M}}),Object.defineProperty(exports,`V`,{enumerable:!0,get:function(){return N}}),Object.defineProperty(exports,`W`,{enumerable:!0,get:function(){return I}}),Object.defineProperty(exports,`X`,{enumerable:!0,get:function(){return T}}),Object.defineProperty(exports,`Y`,{enumerable:!0,get:function(){return C}}),Object.defineProperty(exports,`Z`,{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return Se}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return Ee}}),Object.defineProperty(exports,`at`,{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,`b`,{enumerable:!0,get:function(){return Z}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return J}}),Object.defineProperty(exports,`ct`,{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return K}}),Object.defineProperty(exports,`dt`,{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,`et`,{enumerable:!0,get:function(){return S}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return Q}}),Object.defineProperty(exports,`ft`,{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return X}}),Object.defineProperty(exports,`gt`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return q}}),Object.defineProperty(exports,`ht`,{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return De}}),Object.defineProperty(exports,`it`,{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,`j`,{enumerable:!0,get:function(){return de}}),Object.defineProperty(exports,`k`,{enumerable:!0,get:function(){return pe}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return Y}}),Object.defineProperty(exports,`lt`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return W}}),Object.defineProperty(exports,`mt`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return Ae}}),Object.defineProperty(exports,`nt`,{enumerable:!0,get:function(){return b}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return Te}}),Object.defineProperty(exports,`ot`,{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return H}}),Object.defineProperty(exports,`pt`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`q`,{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return Oe}}),Object.defineProperty(exports,`rt`,{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return U}}),Object.defineProperty(exports,`st`,{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return $}}),Object.defineProperty(exports,`tt`,{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return G}}),Object.defineProperty(exports,`ut`,{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,`v`,{enumerable:!0,get:function(){return we}}),Object.defineProperty(exports,`w`,{enumerable:!0,get:function(){return ve}}),Object.defineProperty(exports,`x`,{enumerable:!0,get:function(){return xe}}),Object.defineProperty(exports,`y`,{enumerable:!0,get:function(){return Ce}}),Object.defineProperty(exports,`z`,{enumerable:!0,get:function(){return L}});
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{n as e}from"./uploadista-error-DR65duXB.mjs";import{D as t,h as n,s as r,w as i}from"./types-D54Q_YmF.mjs";import{a,n as o,o as s}from"./upload-DDke4PGB.mjs";import{Context as c,Effect as l,Layer as u,Option as d,Runtime as f,Stream as p}from"effect";import{z as m}from"zod";function h({source:e,target:t,sourcePort:n,targetPort:r}){return{source:e,target:t,sourcePort:n,targetPort:r}}let g=function(e){return e.JobStart=`job-start`,e.JobEnd=`job-end`,e.FlowStart=`flow-start`,e.FlowEnd=`flow-end`,e.FlowError=`flow-error`,e.FlowPause=`flow-pause`,e.FlowCancel=`flow-cancel`,e.NodeStart=`node-start`,e.NodeEnd=`node-end`,e.NodePause=`node-pause`,e.NodeResume=`node-resume`,e.NodeError=`node-error`,e.NodeStream=`node-stream`,e.NodeResponse=`node-response`,e}({});var _=class{types;constructor(){this.types=new Map}register(t){if(this.types.has(t.id))throw e.fromCode(`VALIDATION_ERROR`,{body:`Node type "${t.id}" is already registered. Types cannot be modified or re-registered.`,details:{typeId:t.id}});this.types.set(t.id,t)}get(e){return this.types.get(e)}listByCategory(e){let t=[];for(let n of this.types.values())n.category===e&&t.push(n);return t}validate(t,n){let r=this.types.get(t);if(!r)return{success:!1,error:e.fromCode(`VALIDATION_ERROR`,{body:`Node type "${t}" is not registered`,details:{typeId:t}})};try{return{success:!0,data:r.schema.parse(n)}}catch(n){return{success:!1,error:e.fromCode(`VALIDATION_ERROR`,{body:`Data validation failed for type "${t}"`,cause:n,details:{typeId:t,validationErrors:n}})}}}has(e){return this.types.has(e)}size(){return this.types.size}};const v=new _,y=`storage-output-v1`,b=`ocr-output-v1`,x=`image-description-output-v1`,S=m.object({extractedText:m.string(),format:m.enum([`markdown`,`plain`,`structured`]),taskType:m.enum([`convertToMarkdown`,`freeOcr`,`parseFigure`,`locateObject`]),confidence:m.number().min(0).max(1).optional()}),C=m.object({description:m.string(),confidence:m.number().min(0).max(1).optional(),metadata:m.record(m.string(),m.unknown()).optional()});v.register({id:y,category:`output`,schema:t,version:`1.0.0`,description:`Storage output node that saves files to configured storage backend`}),v.register({id:b,category:`output`,schema:S,version:`1.0.0`,description:`OCR output node that extracts structured text from documents using AI`}),v.register({id:x,category:`output`,schema:C,version:`1.0.0`,description:`Image description output node that generates AI-powered descriptions of images`});let w=function(e){return e.input=`input`,e.process=`process`,e.conditional=`conditional`,e.multiplex=`multiplex`,e.merge=`merge`,e}({});function T({id:t,name:n,description:r,type:i,inputSchema:a,outputSchema:o,run:s,condition:c,multiInput:u=!1,multiOutput:d=!1,pausable:f=!1,retry:p,nodeTypeId:m}){return l.gen(function*(){if(m){let n=v.get(m);if(!n)return yield*e.fromCode(`INVALID_NODE_TYPE`,{body:`Node type "${m}" is not registered`,details:{nodeTypeId:m,nodeId:t}}).toEffect();if(i===w.input&&n.category!==`input`)return yield*e.fromCode(`TYPE_CATEGORY_MISMATCH`,{body:`Node type "${m}" is registered as "${n.category}" but node "${t}" is type "${i}"`,details:{nodeTypeId:m,nodeId:t,expectedCategory:`input`,actualCategory:n.category}}).toEffect()}return{id:t,name:n,description:r,type:i,inputSchema:a,outputSchema:o,pausable:f,run:({data:r,jobId:i,flowId:c,storageId:u,clientId:d})=>l.gen(function*(){let f=yield*s({data:yield*l.try({try:()=>a.parse(r),catch:r=>{let i=r instanceof Error?r.message:String(r);return e.fromCode(`FLOW_INPUT_VALIDATION_ERROR`,{body:`Node '${n}' (${t}) input validation failed: ${i}`,cause:r})}}),jobId:i,storageId:u,flowId:c,clientId:d});return f.type===`waiting`?{type:`waiting`,partialData:f.partialData,nodeType:m,nodeId:t}:{type:`complete`,data:yield*l.try({try:()=>o.parse(f.data),catch:r=>{let i=r instanceof Error?r.message:String(r);return e.fromCode(`FLOW_OUTPUT_VALIDATION_ERROR`,{body:`Node '${n}' (${t}) output validation failed: ${i}`,cause:r})}}),nodeType:m,nodeId:t}}),condition:c,multiInput:u,multiOutput:d,retry:p}})}const E=e=>({id:e.id,name:e.name,description:e.description,type:e.type});var D=class{maxConcurrency;constructor(e={}){this.maxConcurrency=e.maxConcurrency??4}groupNodesByExecutionLevel(e,t){let n={},r={};e.forEach(e=>{n[e.id]=[],r[e.id]=0}),t.forEach(e=>{n[e.source]?.push(e.target),r[e.target]=(r[e.target]||0)+1});let i=[],a=new Set,o=0;for(;a.size<e.length;){let e=Object.keys(r).filter(e=>r[e]===0&&!a.has(e));if(e.length===0)throw Error(`Cycle detected in flow graph - cannot execute in parallel`);i.push({level:o++,nodes:e}),e.forEach(e=>{a.add(e),delete r[e],n[e]?.forEach(e=>{r[e]!==void 0&&r[e]--})})}return i}executeNodesInParallel(e){return l.all(e.map(e=>e()),{concurrency:this.maxConcurrency})}canExecuteInParallel(e,t,n){return e.every(e=>(n[e]||[]).every(e=>t.has(e)))}getStats(){return{maxConcurrency:this.maxConcurrency}}};function O(e){return t=>{if(t.nodeType!==e)return!1;let n=v.get(e);return n?n.schema.safeParse(t.data).success:!1}}function k(e){return!e||typeof e!=`object`?!1:t.safeParse(e).success}const A=O(`storage-output-v1`),j=O(b),ee=O(x);function M(e,t){return e.filter(t)}function te(t,n){return l.gen(function*(){let r=M(t,n);return r.length===0?yield*e.fromCode(`OUTPUT_NOT_FOUND`,{body:`No output of the specified type was found in the flow results`}).toEffect():r.length>1?yield*e.fromCode(`MULTIPLE_OUTPUTS_FOUND`,{body:`Found ${r.length} outputs of the specified type, expected exactly one`,details:{foundCount:r.length,nodeIds:r.map(e=>e.nodeId)}}).toEffect():r[0]})}function ne(e,t){return M(e,t)[0]}function re(e,t){return e.find(e=>e.nodeId===t)}function ie(e,t){return e.some(t)}const ae=(e,t)=>{if(e===t)return!0;try{return!!(e&&t&&typeof e==`object`&&typeof t==`object`)}catch{return!0}};var oe=class{typeChecker;constructor(e=ae){this.typeChecker=e}validateConnection(e,t,n){return this.getCompatibleTypes(e.outputSchema,t.inputSchema)}getCompatibleTypes(e,t){return this.typeChecker(e,t)}validateFlow(e,t){let n=[],r=new Map(e.map(e=>[e.id,e]));for(let e of t){let t=r.get(e.source),i=r.get(e.target);if(!t){n.push(`Source node ${e.source} not found`);continue}if(!i){n.push(`Target node ${e.target} not found`);continue}this.validateConnection(t,i,e)||n.push(`Schema mismatch: ${t.id} output schema incompatible with ${i.id} input schema`)}return{isValid:n.length===0,errors:n}}getExpectedInputSchemas(e,t,n){let r=new Map(t.map(e=>[e.id,e])),i={};for(let t of n)if(t.target===e){let e=r.get(t.source);if(e){let n=t.sourcePort||t.source;i[n]=e.outputSchema}}return i}getActualOutputSchemas(e,t,n){let r=new Map(t.map(e=>[e.id,e])),i={};for(let t of n)if(t.source===e){let e=r.get(t.target);if(e){let n=t.targetPort||t.target;i[n]=e.inputSchema}}return i}validateData(e,t){try{return t.parse(e),{isValid:!0,errors:[]}}catch(e){return e instanceof Error&&`errors`in e?{isValid:!1,errors:e.errors.map(e=>`${e.path.join(`.`)}: ${e.message}`)}:{isValid:!1,errors:[e instanceof Error?e.message:`Validation failed`]}}}};const N=e=>({id:e.id,name:e.name,nodes:e.nodes.map(E),edges:e.edges});function P(t){return l.gen(function*(){let n=yield*l.all(t.nodes.map(e=>l.isEffect(e)?e:l.succeed(e))),{flowId:r,name:a,onEvent:o,checkJobStatus:s,edges:c,inputSchema:u,outputSchema:d,typeChecker:f}=t,h=n,_=new oe(f),v=()=>{let e={},t={},n={};return h.forEach(r=>{e[r.id]=[],n[r.id]=[],t[r.id]=0}),c.forEach(r=>{e[r.source]?.push(r.target),n[r.target]?.push(r.source),t[r.target]=(t[r.target]||0)+1}),{graph:e,reverseGraph:n,inDegree:t}},y=()=>{let{graph:e,inDegree:t}=v(),n=[],r=[];for(Object.keys(t).forEach(e=>{t[e]===0&&n.push(e)});n.length>0;){let i=n.shift();if(!i)throw Error(`No current node found`);r.push(i),e[i]?.forEach(e=>{t[e]=(t[e]||0)-1,t[e]===0&&n.push(e)})}return r},b=(e,t)=>{if(!e.condition)return l.succeed(!0);let{field:n,operator:r,value:i}=e.condition,a=t,o=a?.metadata?.[n]||a?.[n],s=(()=>{switch(r){case`equals`:return o===i;case`notEquals`:return o!==i;case`greaterThan`:return Number(o)>Number(i);case`lessThan`:return Number(o)<Number(i);case`contains`:return String(o).includes(String(i));case`startsWith`:return String(o).startsWith(String(i));default:return!0}})();return l.succeed(s)},x=(e,t)=>{let{reverseGraph:n}=v(),r=n[e]||[],i={};return r.forEach(e=>{let n=t.get(e);n!==void 0&&(i[e]=n)}),i},S=e=>{let t=h.filter(e=>e.type===`input`),n={};return t.forEach(t=>{e&&typeof e==`object`&&t.id in e&&(n[t.id]=u.parse(e[t.id]))}),n},C=e=>!c.some(t=>t.source===e),w=e=>{let t=h.filter(e=>C(e.id)),n={};return t.forEach(t=>{let r=e.get(t.id);r!==void 0&&(n[t.id]=r)}),n},T=(e,t)=>{let n=h.filter(e=>C(e.id)),r=[];return n.forEach(n=>{let i=e.get(n.id);if(i!==void 0){let e=t.get(n.id);r.push({nodeId:n.id,nodeType:e,data:i,timestamp:new Date().toISOString()})}}),r},E=(e,t,n)=>l.gen(function*(){if(e.storage.id===t)return e;let r=yield*i,a=yield*r.getDataStore(e.storage.id,n),o=yield*r.getDataStore(t,n),s=yield*a.read(e.id),c=p.make(s),l={...e,storage:{id:t,type:e.storage.type}},u=yield*o.create(l);return yield*o.write({file_id:u.id,stream:c,offset:0},{}),u}),O=(n,i,a,c,u,d,f)=>l.gen(function*(){let p=u.get(n);if(!p)return yield*e.fromCode(`FLOW_NODE_NOT_FOUND`).toEffect();if(s){let t=yield*s(d);if(t===`paused`)return yield*e.fromCode(`FLOW_PAUSED`,{cause:`Flow ${r} was paused by user at job ${d}`}).toEffect();if(t===`cancelled`)return yield*e.fromCode(`FLOW_CANCELLED`,{cause:`Flow ${r} was cancelled by user at job ${d}`}).toEffect()}o&&(yield*o({jobId:d,flowId:r,nodeId:n,eventType:g.NodeStart,nodeName:p.name,nodeType:p.type}));let m=p.retry?.maxRetries??0,h=p.retry?.retryDelay??1e3,_=p.retry?.exponentialBackoff??!0,v=0,y=null;for(;v<=m;)try{let s,u={};if(p.type===`input`){if(s=a[n],s===void 0)return yield*l.logError(`Input node ${n} has no input data`),yield*e.fromCode(`FLOW_NODE_ERROR`,{cause:Error(`Input node ${n} has no input data`)}).toEffect()}else{if(u=x(n,c),Object.keys(u).length===0)return yield*l.logError(`Node ${n} has no input data`),yield*e.fromCode(`FLOW_NODE_ERROR`,{cause:Error(`Node ${n} has no input data`)}).toEffect();if(p.multiInput)s=u;else{let t=Object.keys(u)[0];if(!t)return yield*e.fromCode(`FLOW_NODE_ERROR`,{cause:Error(`Node ${n} has no input data`)}).toEffect();s=u[t]}}if(p.type===`conditional`&&!(yield*b(p,s)))return o&&(yield*o({jobId:d,flowId:r,nodeId:n,eventType:g.NodeEnd,nodeName:p.name})),{nodeId:n,result:s,success:!0,waiting:!1};let m=yield*p.run({data:s,inputs:u,jobId:d,flowId:r,storageId:i,clientId:f});if(m.type===`waiting`){let e=m.partialData;return o&&(yield*o({jobId:d,flowId:r,nodeId:n,eventType:g.NodePause,nodeName:p.name,partialData:e})),{nodeId:n,result:e,success:!0,waiting:!0,nodeType:m.nodeType}}let h=m.data;return C(n)&&(k(h)&&h.storage.id!==i&&(yield*l.logDebug(`Auto-persisting sink node ${n} output from ${h.storage.id} to ${i}`),h=yield*E(h,i,f)),t.hooks?.onNodeOutput&&(yield*l.logDebug(`Calling onNodeOutput hook for sink node ${n}`),h=yield*t.hooks.onNodeOutput({output:h,nodeId:n,flowId:r,jobId:d,storageId:i,clientId:f}))),o&&(yield*o({jobId:d,flowId:r,nodeId:n,eventType:g.NodeEnd,nodeName:p.name,result:h})),{nodeId:n,result:h,success:!0,waiting:!1,nodeType:m.nodeType}}catch(t){if(y=t instanceof e?t:e.fromCode(`FLOW_NODE_ERROR`,{cause:t}),v<m){v++;let e=_?h*2**(v-1):h;yield*l.logWarning(`Node ${n} (${p.name}) failed, retrying (${v}/${m}) after ${e}ms`),yield*l.sleep(e);continue}return o&&(yield*o({jobId:d,flowId:r,nodeId:n,eventType:g.NodeError,nodeName:p.name,error:y.body,retryCount:v})),yield*y.toEffect()}return y?yield*y.toEffect():yield*e.fromCode(`FLOW_NODE_ERROR`,{cause:Error(`Unexpected error in retry loop`)}).toEffect()}),A=({inputs:n,storageId:i,jobId:a,resumeFrom:s,clientId:u})=>l.gen(function*(){!s&&o&&(yield*o({jobId:a,eventType:g.FlowStart,flowId:r}));let f=S(n||{}),p,_,v;s?(p=s.executionOrder,_=s.nodeResults,v=s.currentIndex):(p=y(),_=new Map,v=0);let b=new Map;if(p.length!==h.length)return yield*e.fromCode(`FLOW_CYCLE_ERROR`).toEffect();let x=new Map(h.map(e=>[e.id,e]));if(t.parallelExecution?.enabled??!1){yield*l.logDebug(`Flow ${r}: Executing in parallel mode (maxConcurrency: ${t.parallelExecution?.maxConcurrency??4})`);let e=new D({maxConcurrency:t.parallelExecution?.maxConcurrency??4}),n=e.groupNodesByExecutionLevel(h,c);yield*l.logDebug(`Flow ${r}: Grouped nodes into ${n.length} execution levels`);let d={};h.forEach(e=>{d[e.id]=[]}),c.forEach(e=>{d[e.target]?.push(e.source)});for(let t of n){yield*l.logDebug(`Flow ${r}: Executing level ${t.level} with nodes: ${t.nodes.join(`, `)}`);let n=t.nodes.map(e=>()=>l.gen(function*(){if(s&&e===s.executionOrder[v]&&o){let t=x.get(e);t&&(yield*o({jobId:a,flowId:r,nodeId:e,eventType:g.NodeResume,nodeName:t.name,nodeType:t.type}))}return{nodeId:e,nodeResult:yield*O(e,i,f,_,x,a,u)}})),c=yield*e.executeNodesInParallel(n);for(let{nodeId:e,nodeResult:t}of c){if(t.waiting)return t.result!==void 0&&(_.set(e,t.result),t.nodeType&&b.set(e,t.nodeType)),{type:`paused`,nodeId:e,executionState:{executionOrder:p,currentIndex:p.indexOf(e),inputs:f}};t.success&&(_.set(e,t.result),t.nodeType&&b.set(e,t.nodeType))}}}else{yield*l.logDebug(`Flow ${r}: Executing in sequential mode`);for(let t=v;t<p.length;t++){let n=p[t];if(!n)return yield*e.fromCode(`FLOW_NODE_NOT_FOUND`).toEffect();if(s&&t===v&&o){let e=x.get(n);e&&(yield*o({jobId:a,flowId:r,nodeId:n,eventType:g.NodeResume,nodeName:e.name,nodeType:e.type}))}let c=yield*O(n,i,f,_,x,a,u);if(c.waiting)return c.result!==void 0&&(_.set(c.nodeId,c.result),c.nodeType&&b.set(c.nodeId,c.nodeType)),{type:`paused`,nodeId:c.nodeId,executionState:{executionOrder:p,currentIndex:t,inputs:f}};c.success&&(_.set(c.nodeId,c.result),c.nodeType&&b.set(c.nodeId,c.nodeType))}}let E=w(_),k=T(_,b),A=m.record(m.string(),d).safeParse(E);if(!A.success){let t=`Flow output validation failed: ${A.error.message}. Expected outputs: ${JSON.stringify(Object.keys(w(_)))}. Sink nodes: ${h.filter(e=>C(e.id)).map(e=>e.id).join(`, `)}`;return o&&(yield*o({jobId:a,eventType:g.FlowError,flowId:r,error:t})),yield*e.fromCode(`FLOW_OUTPUT_VALIDATION_ERROR`,{body:t,cause:A.error}).toEffect()}let j=A.data;return o&&(yield*o({jobId:a,eventType:g.FlowEnd,flowId:r,outputs:k,result:j})),{type:`completed`,result:j,outputs:k}});return{id:r,name:a,nodes:h,edges:c,inputSchema:u,outputSchema:d,onEvent:o,checkJobStatus:s,hooks:t.hooks,run:({inputs:e,storageId:t,jobId:n,clientId:r})=>A({inputs:e,storageId:t,jobId:n,clientId:r}),resume:({jobId:e,storageId:t,nodeResults:n,executionState:r,clientId:i})=>A({inputs:r.inputs,storageId:t,jobId:e,resumeFrom:{executionOrder:r.executionOrder,nodeResults:new Map(Object.entries(n)),currentIndex:r.currentIndex},clientId:i}),validateTypes:()=>{let e=h;return _.validateFlow(e,c)},validateInputs:e=>_.validateData(e,u),validateOutputs:e=>_.validateData(e,d)}})}var F=class e extends c.Tag(`FlowWaitUntil`)(){static optional=l.serviceOption(e)},I=class extends c.Tag(`FlowProvider`)(){},L=class extends c.Tag(`FlowServer`)(){};const R=e=>typeof e==`object`&&!!e&&`id`in e,se=e=>typeof e==`object`&&e&&`nodeId`in e&&`data`in e&&`timestamp`in e?e.data:e;function z(t,n,r){let i=e=>{let i=t=>l.gen(function*(){let n=yield*r.get(e);n&&(yield*r.set(e,{...n,...t,updatedAt:new Date}))});return a=>l.gen(function*(){switch(t.onEvent&&(yield*l.catchAll(t.onEvent(a),e=>(l.logError(`Original onEvent failed`,e),l.succeed({eventId:null})))),yield*n.emit(e,a),l.logInfo(`Updating job ${e} with event ${a.eventType}`),a.eventType){case g.FlowStart:yield*i({status:`running`});break;case g.FlowEnd:yield*l.gen(function*(){let t=yield*r.get(e);t&&a.outputs&&(yield*r.set(e,{...t,result:a.outputs,updatedAt:new Date}))});break;case g.FlowError:yield*i({status:`failed`,error:a.error});break;case g.NodeStart:yield*l.gen(function*(){let t=yield*r.get(e);if(t){let n=t.tasks.find(e=>e.nodeId===a.nodeId)?t.tasks.map(e=>e.nodeId===a.nodeId?{...e,status:`running`,updatedAt:new Date}:e):[...t.tasks,{nodeId:a.nodeId,status:`running`,createdAt:new Date,updatedAt:new Date}];yield*r.set(e,{...t,tasks:n,updatedAt:new Date})}});break;case g.NodePause:yield*l.gen(function*(){let t=yield*r.get(e);if(t){let n=t.tasks.find(e=>e.nodeId===a.nodeId)?t.tasks.map(e=>e.nodeId===a.nodeId?{...e,status:`paused`,result:a.partialData,updatedAt:new Date}:e):[...t.tasks,{nodeId:a.nodeId,status:`paused`,result:a.partialData,createdAt:new Date,updatedAt:new Date}];yield*r.set(e,{...t,tasks:n,updatedAt:new Date})}});break;case g.NodeResume:yield*l.gen(function*(){let t=yield*r.get(e);if(t){let n=t.tasks.map(e=>e.nodeId===a.nodeId?{...e,status:`running`,updatedAt:new Date}:e);yield*r.set(e,{...t,tasks:n,updatedAt:new Date})}});break;case g.NodeEnd:yield*l.gen(function*(){let n=yield*r.get(e);if(n){let i=n.tasks.map(e=>e.nodeId===a.nodeId?{...e,status:`completed`,result:a.result,updatedAt:new Date}:e),o=!t.edges.some(e=>e.source===a.nodeId),s=a.result,c=se(s),l=n.intermediateFiles||[];o&&R(c)&&c.id?l=l.filter(e=>e!==c.id):!o&&R(c)&&c.id&&(l.includes(c.id)||l.push(c.id)),yield*r.set(e,{...n,tasks:i,intermediateFiles:l,updatedAt:new Date})}});break;case g.NodeError:yield*l.gen(function*(){let t=yield*r.get(e);if(t){let n=t.tasks.map(e=>e.nodeId===a.nodeId?{...e,status:`failed`,error:a.error,retryCount:a.retryCount,updatedAt:new Date}:e);yield*r.set(e,{...t,tasks:n,error:a.error,updatedAt:new Date})}});break}return{eventId:e}})},a=t=>t=>l.gen(function*(){let n=yield*r.get(t);return n?n.status===`paused`?`paused`:n.status===`cancelled`?`cancelled`:`running`:yield*l.fail(e.fromCode(`FLOW_JOB_NOT_FOUND`,{cause:`Job ${t} not found`}))});return{...t,run:e=>l.gen(function*(){let n=e.jobId||crypto.randomUUID(),r=i(n),o=a(n);return yield*(yield*P({flowId:t.id,name:t.name,nodes:t.nodes,edges:t.edges,inputSchema:t.inputSchema,outputSchema:t.outputSchema,onEvent:r,checkJobStatus:o})).run({...e,jobId:n,clientId:e.clientId})}),resume:e=>l.gen(function*(){let n=e.jobId,r=i(n),o=a(n);return yield*(yield*P({flowId:t.id,name:t.name,nodes:t.nodes,edges:t.edges,inputSchema:t.inputSchema,outputSchema:t.outputSchema,onEvent:r,checkJobStatus:o})).resume(e)})}}function B(){return l.gen(function*(){let t=yield*I,i=yield*n,a=yield*r,s=yield*o,c=(t,n)=>l.gen(function*(){let r=yield*a.get(t);return r?yield*a.set(t,{...r,...n}):yield*l.fail(e.fromCode(`FLOW_JOB_NOT_FOUND`,{cause:`Job ${t} not found`}))}),u=(e,t)=>l.gen(function*(){let n=yield*a.get(e);!n||!n.intermediateFiles||n.intermediateFiles.length===0||(yield*l.logInfo(`Cleaning up ${n.intermediateFiles.length} intermediate files for job ${e}`),yield*l.all(n.intermediateFiles.map(e=>l.gen(function*(){yield*s.delete(e,t),yield*l.logDebug(`Deleted intermediate file ${e}`)}).pipe(l.catchAll(t=>l.gen(function*(){return yield*l.logWarning(`Failed to delete intermediate file ${e}: ${t}`),l.succeed(void 0)})))),{concurrency:5}),yield*c(e,{intermediateFiles:[]}))}),p=({jobId:t,flow:n,storageId:r,clientId:o,inputs:s})=>l.gen(function*(){console.log(`[FlowServer] executeFlowInBackground started for job: ${t}`),yield*c(t,{status:`running`}),console.log(`[FlowServer] Creating flowWithEvents for job: ${t}`);let e=z(n,i,a);console.log(`[FlowServer] Running flow for job: ${t}`);let l=yield*e.run({inputs:s,storageId:r,jobId:t,clientId:o});return console.log(`[FlowServer] Flow completed for job: ${t}, result type: ${l.type}`),l.type===`paused`?yield*c(t,{status:`paused`,pausedAt:l.nodeId,executionState:l.executionState,updatedAt:new Date}):(yield*c(t,{status:`completed`,updatedAt:new Date,endedAt:new Date}),yield*u(t,o)),l}).pipe(l.catchAll(n=>l.gen(function*(){yield*l.logError(`Flow execution failed`,n);let r=n instanceof e?n.body:String(n);yield*l.logInfo(`Updating job ${t} to failed status with error: ${r}`),yield*c(t,{status:`failed`,error:r,updatedAt:new Date}).pipe(l.catchAll(e=>l.gen(function*(){return yield*l.logError(`Failed to update job ${t}`,e),l.succeed(void 0)})));let s=yield*a.get(t);throw s&&(yield*i.emit(t,{jobId:t,eventType:g.FlowError,flowId:s.flowId,error:r}).pipe(l.catchAll(e=>l.gen(function*(){return yield*l.logError(`Failed to emit FlowError event for job ${t}`,e),l.succeed(void 0)})))),yield*u(t,o).pipe(l.catchAll(e=>l.gen(function*(){return yield*l.logWarning(`Failed to cleanup intermediate files for job ${t}`,e),l.succeed(void 0)}))),n})));return{getFlow:(e,n)=>l.gen(function*(){return yield*t.getFlow(e,n)}),getFlowData:(e,n)=>l.gen(function*(){return N(yield*t.getFlow(e,n))}),runFlow:({flowId:n,storageId:r,clientId:i,inputs:o})=>l.gen(function*(){let s=yield*F.optional,c=yield*l.try({try:()=>$.parse({inputs:o}),catch:t=>e.fromCode(`FLOW_INPUT_VALIDATION_ERROR`,{cause:t})}),u=crypto.randomUUID(),m=new Date,h={id:u,flowId:n,storageId:r,clientId:i,status:`started`,createdAt:m,updatedAt:m,tasks:[]};yield*a.set(u,h);let g=yield*t.getFlow(n,i);console.log(`[FlowServer] About to fork flow execution for job: ${u}`);let _=p({jobId:u,flow:g,storageId:r,clientId:i,inputs:c.inputs}).pipe(l.tapErrorCause(e=>l.logError(`Flow execution failed`,e)));if(d.isSome(s)){console.log(`[FlowServer] Using waitUntil for job: ${u}`);let e=yield*l.runtime(),t=f.runPromise(e)(_);s.value(t)}else console.log(`[FlowServer] Using Effect.forkDaemon for job: ${u}`),yield*l.forkDaemon(_);return console.log(`[FlowServer] Flow execution started for job: ${u}`),h}),getJobStatus:t=>l.gen(function*(){return(yield*a.get(t))||(yield*l.fail(e.fromCode(`FLOW_JOB_NOT_FOUND`,{cause:`Job ${t} not found`})))}),resumeFlow:({jobId:n,nodeId:r,newData:o,clientId:s})=>l.gen(function*(){let p=yield*F.optional,m=yield*a.get(n);if(!m)return console.error(`Job not found`),yield*l.fail(e.fromCode(`FLOW_JOB_NOT_FOUND`,{cause:`Job ${n} not found`}));if(m.status!==`paused`)return console.error(`Job is not paused`),yield*l.fail(e.fromCode(`FLOW_JOB_ERROR`,{cause:`Job ${n} is not paused (status: ${m.status})`}));if(m.pausedAt!==r)return console.error(`Job is not paused at the expected node`),yield*l.fail(e.fromCode(`FLOW_JOB_ERROR`,{cause:`Job ${n} is paused at node ${m.pausedAt}, not ${r}`}));if(!m.executionState)return console.error(`Job has no execution state`),yield*l.fail(e.fromCode(`FLOW_JOB_ERROR`,{cause:`Job ${n} has no execution state`}));let h={...m.tasks.reduce((e,t)=>(t.result!==void 0&&(e[t.nodeId]=t.result),e),{}),[r]:o},_={...m.executionState.inputs,[r]:o};yield*c(n,{status:`running`});let v=yield*t.getFlow(m.flowId,m.clientId),y=l.gen(function*(){let t=z(v,i,a);if(!m.executionState)return yield*l.fail(e.fromCode(`FLOW_JOB_ERROR`,{cause:`Job ${n} has no execution state`}));let r=yield*t.resume({jobId:n,storageId:m.storageId,nodeResults:h,executionState:{...m.executionState,inputs:_},clientId:m.clientId});return r.type===`paused`?yield*c(n,{status:`paused`,pausedAt:r.nodeId,executionState:r.executionState,updatedAt:new Date}):(yield*c(n,{status:`completed`,pausedAt:void 0,executionState:void 0,updatedAt:new Date,endedAt:new Date}),yield*u(n,s)),r}).pipe(l.catchAll(t=>l.gen(function*(){yield*l.logError(`Flow resume failed`,t);let r=t instanceof e?t.body:String(t);yield*l.logInfo(`Updating job ${n} to failed status with error: ${r}`),yield*c(n,{status:`failed`,error:r,updatedAt:new Date}).pipe(l.catchAll(e=>l.gen(function*(){return yield*l.logError(`Failed to update job ${n}`,e),l.succeed(void 0)})));let o=yield*a.get(n);throw o&&(yield*i.emit(n,{jobId:n,eventType:g.FlowError,flowId:o.flowId,error:r}).pipe(l.catchAll(e=>l.gen(function*(){return yield*l.logError(`Failed to emit FlowError event for job ${n}`,e),l.succeed(void 0)})))),yield*u(n,s).pipe(l.catchAll(e=>l.gen(function*(){return yield*l.logWarning(`Failed to cleanup intermediate files for job ${n}`,e),l.succeed(void 0)}))),t}))).pipe(l.tapErrorCause(e=>l.logError(`Flow resume failed`,e)));if(d.isSome(p)){console.log(`[FlowServer] Using waitUntil for resume job: ${n}`);let e=yield*l.runtime(),t=f.runPromise(e)(y);p.value(t)}else console.log(`[FlowServer] Using Effect.forkDaemon for resume job: ${n}`),yield*l.forkDaemon(y);return(yield*a.get(n))||(yield*l.fail(e.fromCode(`FLOW_JOB_NOT_FOUND`,{cause:`Job ${n} not found after update`})))}),pauseFlow:(t,n)=>l.gen(function*(){let r=yield*a.get(t);if(!r)return yield*l.fail(e.fromCode(`FLOW_JOB_NOT_FOUND`,{cause:`Job ${t} not found`}));if(n!==null&&r.clientId!==n)return yield*l.fail(e.fromCode(`FLOW_NOT_AUTHORIZED`,{cause:`Client ${n} is not authorized to pause job ${t}`}));if(r.status!==`running`)return yield*l.fail(e.fromCode(`FLOW_JOB_ERROR`,{cause:`Job ${t} cannot be paused (current status: ${r.status})`}));let o=r.tasks.find(e=>e.status===`running`)?.nodeId;return yield*c(t,{status:`paused`,pausedAt:o,updatedAt:new Date}),yield*i.emit(t,{jobId:t,flowId:r.flowId,eventType:g.FlowPause,pausedAt:o}),(yield*a.get(t))||(yield*l.fail(e.fromCode(`FLOW_JOB_NOT_FOUND`,{cause:`Job ${t} not found after pause`})))}),cancelFlow:(t,n)=>l.gen(function*(){let r=yield*a.get(t);return r?n!==null&&r.clientId!==n?yield*l.fail(e.fromCode(`FLOW_NOT_AUTHORIZED`,{cause:`Client ${n} is not authorized to cancel job ${t}`})):r.status!==`running`&&r.status!==`paused`&&r.status!==`started`?yield*l.fail(e.fromCode(`FLOW_JOB_ERROR`,{cause:`Job ${t} cannot be cancelled (current status: ${r.status})`})):(yield*c(t,{status:`cancelled`,updatedAt:new Date,endedAt:new Date}),yield*i.emit(t,{jobId:t,flowId:r.flowId,eventType:g.FlowCancel}),yield*u(t,n),(yield*a.get(t))||(yield*l.fail(e.fromCode(`FLOW_JOB_NOT_FOUND`,{cause:`Job ${t} not found after cancellation`})))):yield*l.fail(e.fromCode(`FLOW_JOB_NOT_FOUND`,{cause:`Job ${t} not found`}))}),subscribeToFlowEvents:(e,t)=>l.gen(function*(){yield*i.subscribe(e,t)}),unsubscribeFromFlowEvents:e=>l.gen(function*(){yield*i.unsubscribe(e)})}})}const ce=u.effect(L,B()),V=e=>({type:`complete`,data:e}),H=e=>({type:`waiting`,partialData:e});function U(e){if(!e)return{type:``,fileName:``,metadata:void 0,metadataJson:void 0};let t={...e},n=String(t.type||t.mimeType||t[`content-type`]||``);n&&(t.type||=n,t.mimeType||=n);let r=String(t.fileName||t.originalName||t.name||``);return r&&(t.fileName||=r,t.originalName||=r,t.name||=r),{type:n,fileName:r,metadata:t,metadataJson:JSON.stringify(t)}}const le=m.object({operation:m.literal(`init`),storageId:m.string(),metadata:m.record(m.string(),m.any()).optional()}),ue=m.object({operation:m.literal(`finalize`),uploadId:m.string()}),de=m.object({operation:m.literal(`url`),url:m.string(),storageId:m.string().optional(),metadata:m.record(m.string(),m.any()).optional()}),W=m.union([le,ue,de]),fe=m.object({allowedMimeTypes:m.array(m.string()).optional(),minSize:m.number().positive().optional(),maxSize:m.number().positive().optional()});function G(t,n){return l.gen(function*(){if(n){if(n.allowedMimeTypes&&n.allowedMimeTypes.length>0&&!n.allowedMimeTypes.some(e=>{if(e.endsWith(`/*`)){let n=e.slice(0,-2);return t.type.startsWith(n)}return t.type===e}))throw yield*e.fromCode(`VALIDATION_ERROR`,{cause:Error(`File type "${t.type}" is not allowed. Allowed types: ${n.allowedMimeTypes.join(`, `)}`)}).toEffect();if(n.minSize!==void 0&&t.size<n.minSize)throw yield*e.fromCode(`VALIDATION_ERROR`,{cause:Error(`File size (${t.size} bytes) is below minimum (${n.minSize} bytes)`)}).toEffect();if(n.maxSize!==void 0&&t.size>n.maxSize)throw yield*e.fromCode(`VALIDATION_ERROR`,{cause:Error(`File size (${t.size} bytes) exceeds maximum (${n.maxSize} bytes)`)}).toEffect()}})}function pe(n,r){return l.gen(function*(){let i=yield*o;return yield*T({id:n,name:`Input`,description:`Handles file input through multiple methods - streaming upload (init/finalize) or direct URL fetch`,type:w.input,inputSchema:W,outputSchema:t,run:({data:t,flowId:o,jobId:c,clientId:u})=>l.gen(function*(){switch(t.operation){case`init`:{let e={storageId:t.storageId,size:t.metadata?.size||0,type:t.metadata?.mimeType||`application/octet-stream`,fileName:t.metadata?.originalName,lastModified:t.metadata?.size?Date.now():void 0,metadata:t.metadata?JSON.stringify(t.metadata):void 0,flow:{flowId:o,nodeId:n,jobId:c}};return H(yield*i.createUpload(e,u))}case`finalize`:{let e=yield*i.getUpload(t.uploadId),{type:n}=U(e.metadata);return yield*G({type:n,size:e.size||0},r),V(e)}case`url`:{let e=yield*s(t.url),l=yield*a(e),d=t.metadata?.mimeType||e.headers.get(`content-type`)||`application/octet-stream`,f=t.metadata?.size||Number(e.headers.get(`content-length`)||0),p=t.metadata?.originalName||t.url.split(`/`).pop()||`file`;yield*G({type:d,size:f},r);let m=new ReadableStream({start(e){e.enqueue(new Uint8Array(l)),e.close()}}),h={storageId:t.storageId||`buffer`,size:f,type:d,fileName:p,lastModified:Date.now(),metadata:t.metadata?JSON.stringify(t.metadata):void 0};return V({...yield*i.upload(h,u,m),flow:{flowId:o,nodeId:n,jobId:c}})}default:throw yield*e.fromCode(`VALIDATION_ERROR`,{cause:Error(`Invalid operation`)}).toEffect()}})})})}function me({id:e,name:n,description:r,nodeTypeId:i,transform:a}){return l.gen(function*(){let s=yield*o;return yield*T({id:e,name:n,description:r,type:w.process,nodeTypeId:i,inputSchema:t,outputSchema:t,run:({data:t,storageId:n,flowId:r,jobId:i,clientId:o})=>l.gen(function*(){let c={flowId:r,nodeId:e,jobId:i},l=yield*a(yield*s.read(t.id,o),t),u=l instanceof Uint8Array?l:l.bytes,d=l instanceof Uint8Array?void 0:l.type,f=l instanceof Uint8Array?void 0:l.fileName,p=new ReadableStream({start(e){e.enqueue(u),e.close()}}),{type:m,fileName:h,metadata:g,metadataJson:_}=U(t.metadata),v=yield*s.upload({storageId:n,size:u.byteLength,type:d??m,fileName:f??h,lastModified:0,metadata:_,flow:c},o,p),y=g?{...g,...d&&{mimeType:d,type:d,"content-type":d},...f&&{fileName:f,originalName:f,name:f,extension:f.split(`.`).pop()||g.extension}}:v.metadata;return V(y?{...v,metadata:y}:v)})})})}var he=class extends c.Tag(`CredentialProvider`)(){},ge=class extends c.Tag(`DocumentAiPlugin`)(){},_e=class extends c.Tag(`DocumentPlugin`)(){},ve=class extends c.Tag(`ImageAiPlugin`)(){},ye=class extends c.Tag(`ImagePlugin`)(){};const be=m.object({serviceType:m.enum([`replicate`]).optional()}),xe=m.object({duration:m.number().nonnegative(),width:m.number().positive(),height:m.number().positive(),codec:m.string(),format:m.string(),bitrate:m.number().nonnegative(),frameRate:m.number().positive(),aspectRatio:m.string(),hasAudio:m.boolean(),audioCodec:m.string().optional(),audioBitrate:m.number().nonnegative().optional(),size:m.number().nonnegative()}),Se=m.object({timestamp:m.number().nonnegative(),format:m.enum([`png`,`jpeg`]).optional(),quality:m.number().min(1).max(100).optional()}),Ce=m.object({quality:m.number().min(0).max(100),format:m.enum([`jpeg`,`webp`,`png`,`avif`])}),we=m.object({serviceType:m.enum([`replicate`]).optional()}),Te=m.object({width:m.number().positive().optional(),height:m.number().positive().optional(),fit:m.enum([`contain`,`cover`,`fill`])}).refine(e=>e.width||e.height,`Either width or height must be specified for resize`),Ee=m.object({width:m.number().positive().optional(),height:m.number().positive().optional(),aspectRatio:m.enum([`keep`,`ignore`]).optional(),scaling:m.enum([`bicubic`,`bilinear`,`lanczos`]).optional()}).refine(e=>e.width||e.height,`Either width or height must be specified for video resize`),De=m.object({format:m.enum([`mp4`,`webm`,`mov`,`avi`]),codec:m.enum([`h264`,`h265`,`vp9`,`av1`]).optional(),videoBitrate:m.string().optional(),audioBitrate:m.string().optional(),audioCodec:m.enum([`aac`,`mp3`,`opus`,`vorbis`]).optional()}),K=m.object({type:m.literal(`resize`),width:m.number().positive().optional(),height:m.number().positive().optional(),fit:m.enum([`contain`,`cover`,`fill`])}),q=m.object({type:m.literal(`blur`),sigma:m.number().min(.3).max(1e3)}),J=m.object({type:m.literal(`rotate`),angle:m.number(),background:m.string().optional()}),Y=m.object({type:m.literal(`flip`),direction:m.enum([`horizontal`,`vertical`])}),X=m.object({type:m.literal(`grayscale`)}),Z=m.object({type:m.literal(`sepia`)}),Oe=m.object({type:m.literal(`brightness`),value:m.number().min(-100).max(100)}),Q=m.object({type:m.literal(`contrast`),value:m.number().min(-100).max(100)}),ke=m.object({type:m.literal(`sharpen`),sigma:m.number().positive().optional()}),Ae=m.object({type:m.literal(`watermark`),imagePath:m.string().min(1).url(),position:m.enum([`top-left`,`top-right`,`bottom-left`,`bottom-right`,`center`]),opacity:m.number().min(0).max(1),offsetX:m.number().optional(),offsetY:m.number().optional()}),je=m.object({type:m.literal(`logo`),imagePath:m.string().min(1).url(),position:m.enum([`top-left`,`top-right`,`bottom-left`,`bottom-right`,`center`]),scale:m.number().min(.1).max(2),offsetX:m.number().optional(),offsetY:m.number().optional()}),Me=m.object({type:m.literal(`text`),text:m.string().min(1),position:m.enum([`top-left`,`top-right`,`bottom-left`,`bottom-right`,`center`]),fontSize:m.number().positive(),color:m.string().min(1),fontFamily:m.string().optional(),offsetX:m.number().optional(),offsetY:m.number().optional()}),Ne=m.discriminatedUnion(`type`,[K,q,J,Y,X,Z,Oe,Q,ke,Ae,je,Me]),Pe=m.object({transformations:m.array(Ne).min(1)}),Fe=m.object({startTime:m.number().nonnegative(),endTime:m.number().positive().optional(),duration:m.number().positive().optional()}).refine(e=>!e.endTime||!e.duration,`Cannot specify both endTime and duration`).refine(e=>!e.endTime||e.endTime>e.startTime,`endTime must be greater than startTime`);var Ie=class extends c.Tag(`VideoPlugin`)(){},Le=class extends c.Tag(`VirusScanPlugin`)(){},Re=class extends c.Tag(`ZipPlugin`)(){};const ze=(e,t)=>{if(e.length===0)return t;let[n,...r]=e;return r.reduce((e,t)=>m.union([e,t]),n)};function Be(t){return l.gen(function*(){let n=Object.entries(t.nodes),r=e=>l.isEffect(e)?e:l.succeed(e),i=yield*l.forEach(n,([t,n])=>l.flatMap(r(n),n=>n.id===t?l.succeed([t,n]):l.fail(e.fromCode(`FLOW_NODE_ERROR`,{cause:Error(`Node key ${t} does not match node id ${n.id}`)})))),a=Object.fromEntries(i),o=i.map(([,e])=>e),s=i.filter(([,e])=>e.type===w.input).map(([,e])=>e.inputSchema),c=t.edges.map(e=>({source:a[e.source]?.id??e.source,target:a[e.target]?.id??e.target,sourcePort:e.sourcePort,targetPort:e.targetPort})),u=new Set(i.map(([e])=>a[e]?.id).filter(e=>e&&!c.some(t=>t.source===e))),d=i.filter(([,e])=>u.has(e.id)).map(([,e])=>e.outputSchema),f=t.inputSchema??ze(s,m.unknown()),p=t.outputSchema??ze(d,m.unknown());return yield*P({flowId:t.flowId,name:t.name,nodes:o,edges:c,inputSchema:f,outputSchema:p,typeChecker:t.typeChecker,onEvent:t.onEvent,parallelExecution:t.parallelExecution})})}const $=m.object({inputs:m.record(m.string(),m.any())});export{ie as $,ve as A,H as B,Te as C,xe as D,Se as E,pe as F,ce as G,L as H,W as I,O as J,P as K,fe as L,ge as M,he as N,be as O,me as P,te as Q,U as R,Ee as S,Ce as T,F as U,I as V,B as W,ne as X,M as Y,re as Z,Me as _,Ie as a,w as at,Ae as b,Oe as c,x as ct,X as d,C as dt,ee as et,je as f,S as ft,ke as g,h as gt,Z as h,g as ht,Le as i,D as it,_e as j,ye as k,Q as l,b as lt,J as m,v as mt,Be as n,A as nt,Fe as o,T as ot,K as p,_ as pt,N as q,Re as r,k as rt,q as s,E as st,$ as t,j as tt,Y as u,y as ut,Pe as v,we as w,De as x,Ne as y,V as z};
|
|
2
|
+
//# sourceMappingURL=flow-l-iFJavi.mjs.map
|