@uploadista/core 1.0.0-beta.4 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/flow/index.cjs +1 -1
- package/dist/flow/index.d.cts +1 -1
- package/dist/flow/index.d.mts +1 -1
- package/dist/flow/index.mjs +1 -1
- package/dist/flow-BAYnF4vh.cjs +1 -0
- package/dist/{flow-Ag6JbNS6.mjs → flow-BLK5x1LF.mjs} +2 -2
- package/dist/{flow-Ag6JbNS6.mjs.map → flow-BLK5x1LF.mjs.map} +1 -1
- package/dist/index-Ce8IxXxR.d.mts.map +1 -1
- package/dist/{index-Cwin1ALJ.d.cts → index-Dl4AtGUF.d.cts} +84 -84
- package/dist/index-Dl4AtGUF.d.cts.map +1 -0
- package/dist/{index-CTpuhufX.d.mts → index-_IkOrjon.d.mts} +84 -84
- package/dist/index-_IkOrjon.d.mts.map +1 -0
- package/dist/index-_Q4OxX9Y.d.cts.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.mts +1 -1
- package/dist/index.mjs +1 -1
- package/dist/testing/index.cjs +1 -1
- package/dist/testing/index.d.cts +1 -1
- package/dist/testing/index.d.mts +1 -1
- package/dist/testing/index.mjs +1 -1
- package/package.json +3 -3
- package/src/flow/flow-engine.ts +12 -8
- package/src/flow/flow-queue-store.ts +12 -6
- package/src/flow/flow-queue.ts +86 -90
- package/src/flow/flow.ts +7 -8
- package/src/flow/index.ts +3 -2
- package/src/flow/types/flow-queue-item.ts +5 -1
- package/src/flow/types/flow-types.ts +1 -1
- package/src/flow/types/type-utils.ts +2 -5
- package/dist/flow-DA_u2lYT.cjs +0 -1
- package/dist/index-CTpuhufX.d.mts.map +0 -1
- package/dist/index-Cwin1ALJ.d.cts.map +0 -1
package/dist/flow/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../flow-
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../flow-BAYnF4vh.cjs"),t=require("../types/index.cjs");exports.AVAILABLE_TEMPLATE_VARIABLES=e.F,exports.CredentialProvider=e.N,exports.DEFAULT_CIRCUIT_BREAKER_CONFIG=e.en,exports.DEFAULT_QUEUE_CONFIG=e.X,exports.DEFAULT_RETRY_POLICY=e.vt,exports.DEFAULT_STREAMING_CONFIG=t.DEFAULT_STREAMING_CONFIG,exports.DeadLetterQueueService=e.ht,exports.DistributedCircuitBreaker=e.Jt,exports.DistributedCircuitBreakerRegistry=e.Yt,exports.DocumentAiPlugin=e.M,exports.DocumentPlugin=e.j,exports.EventType=e.Kt,exports.FlowEngine=e.H,exports.FlowLifecycleHook=e.U,exports.FlowProvider=e.W,exports.FlowQueueDispatchMarker=e.J,exports.FlowQueueService=e.Y,exports.FlowWaitUntil=e.G,exports.IMAGE_DESCRIPTION_OUTPUT_TYPE_ID=e.St,exports.ImageAiPlugin=e.A,exports.ImagePlugin=e.k,exports.InputTypeRegistry=e.Ut,exports.MemoryFlowQueueStore=e.Z,exports.NodeType=e.Lt,exports.OCR_OUTPUT_TYPE_ID=e.Ct,exports.OutputTypeRegistry=e.Bt,exports.ParallelScheduler=e.mt,exports.STORAGE_OUTPUT_TYPE_ID=e.wt,exports.STREAMING_INPUT_TYPE_ID=e.Tt,exports.VideoPlugin=e.a,exports.VirusScanPlugin=e.i,exports.ZipPlugin=e.r,exports.applyFileNaming=e.I,exports.blurTransformSchema=e.s,exports.brightnessTransformSchema=e.c,exports.buildNamingContext=e.L,exports.calculateBackoffDelay=e.yt,exports.calculateExpirationDate=e.bt,exports.completeNodeExecution=e.Mt,exports.contrastTransformSchema=e.l,exports.createDeadLetterQueueService=e.gt,exports.createFlow=e.n,exports.createFlowEdge=e.qt,exports.createFlowEngine=e.K,exports.createFlowNode=e.Rt,exports.createFlowWithSchema=e.Q,exports.createInputNode=e.Ot,exports.createOutputGuard=e.Nt,exports.createTransformNode=e.P,exports.createTypeGuard=e.et,exports.deadLetterQueueService=e._t,exports.describeImageParamsSchema=e.O,exports.describeVideoMetadataSchema=e.D,exports.extractFrameVideoParamsSchema=e.E,exports.filterOutputsByType=e.tt,exports.flipTransformSchema=e.u,exports.flowEngine=e.q,exports.getBaseName=e.R,exports.getExtension=e.z,exports.getFirstOutputByType=e.nt,exports.getFlowData=e.$,exports.getNodeData=e.zt,exports.getOutputByNodeId=e.rt,exports.getSingleOutputByType=e.it,exports.grayscaleTransformSchema=e.d,exports.hasOutputOfType=e.at,exports.imageDescriptionOutputSchema=e.Et,exports.inputDataSchema=e.kt,exports.inputNodeParamsSchema=e.At,exports.inputTypeRegistry=e.Wt,exports.interpolateFileName=e.B,exports.isErrorRetryable=e.xt,exports.isFinalizeOperation=e.ot,exports.isImageDescriptionOutput=e.st,exports.isInitOperation=e.ct,exports.isOcrOutput=e.lt,exports.isStorageOutput=e.ut,exports.isStorageOutputV1=e.Pt,exports.isStreamingInputV1=e.Ft,exports.isUploadFile=e.dt,exports.isUploadOperation=e.ft,exports.isUrlOperation=e.pt,exports.kvCircuitBreakerStoreLayer=e.Xt,exports.logoTransformSchema=e.f,exports.makeKvCircuitBreakerStore=e.Zt,exports.makeMemoryCircuitBreakerStore=e.Qt,exports.memoryCircuitBreakerStoreLayer=e.$t,exports.ocrOutputSchema=e.Dt,exports.optimizeParamsSchema=e.T,exports.outputTypeRegistry=e.Vt,exports.removeBackgroundParamsSchema=e.w,exports.resizeParamsSchema=e.C,exports.resizeTransformSchema=e.p,exports.resizeVideoParamsSchema=e.S,exports.resolveUploadMetadata=e.jt,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.validateFlowInput=e.Gt,exports.validateFlowOutput=e.Ht,exports.validatePattern=e.V,exports.waitingNodeExecution=e.It,exports.watermarkTransformSchema=e.b;
|
package/dist/flow/index.d.cts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { $ as VideoPlugin, $n as
|
|
1
|
+
import { $ as VideoPlugin, $n as flowEngine, $t as ImageAiPluginLayer, A as isImageDescriptionOutput, An as ExtractLayerServices, Ar as DistributedCircuitBreaker, At as Transformation, B as describeImageParamsSchema, Bn as FlowQueueServiceShape, Br as CircuitBreakerState, Bt as rotateTransformSchema, C as createTypeGuard, Cn as StreamingTransformResult, Cr as FlowData, Ct as OverlayPosition, D as getSingleOutputByType, Dn as ExtractEffectError, Dr as FlowEdge, Dt as SharpenTransform, E as getOutputByNodeId, En as createTransformNode, Er as getFlowData, Et as SepiaTransform, F as isUploadOperation, Fn as createInputNode, Fr as memoryCircuitBreakerStoreLayer, Ft as contrastTransformSchema, G as ZipPlugin, Gn as FlowEngineOptions, Gt as transformationSchema, H as PluginLayer, Hn as MemoryFlowQueueStore, Ht as sharpenTransformSchema, I as isUrlOperation, In as inputDataSchema, Ir as CircuitBreakerConfig, It as flipTransformSchema, J as ScanMetadata, Jn as FlowProvider, Jt as resizeParamsSchema, K as ZipPluginLayer, Kn as FlowEngineShape, Kt as watermarkTransformSchema, L as RemoveBackgroundParams, Ln as inputNodeParamsSchema, Lr as CircuitBreakerEvent, Lt as grayscaleTransformSchema, M as isOcrOutput, Mn as FlowCondition, Mr as kvCircuitBreakerStoreLayer, Mt as WatermarkTransform, N as isStorageOutput, Nn as InputData, Nr as makeKvCircuitBreakerStore, Nt as blurTransformSchema, O as hasOutputOfType, On as ExtractEffectRequirements, Or as createFlowEdge, Ot as TextTransform, P as isUploadFile, Pn as InputNodeParams, Pr as makeMemoryCircuitBreakerStore, Pt as brightnessTransformSchema, Q as VirusScanPluginShape, Qn as createFlowEngine, Qt as ImageAiPlugin, R as removeBackgroundParamsSchema, Rn as FlowQueueDispatchMarker, Rr as CircuitBreakerEventHandler, Rt as logoTransformSchema, S as NarrowedTypedOutput, Sn as StreamingTransformFn, Sr as Flow, St as LogoTransform, T as getFirstOutputByType, Tn as TransformNodeConfig, Tr as createFlowWithSchema, Tt as RotateTransform, U as ZipInput, Un as FlowEngine, Ut as textTransformSchema, V as Plugin, Vn as FlowQueueStore, Vr as DEFAULT_CIRCUIT_BREAKER_CONFIG, Vt as sepiaTransformSchema, W as ZipParams, Wn as FlowEngineLayer, Wt as transformImageParamsSchema, X as VirusScanPlugin, Xn as FlowWaitUntil, Xt as optimizeParamsSchema, Y as ScanResult, Yn as FlowProviderShape, Yt as OptimizeParams, Z as VirusScanPluginLayer, Zn as WaitUntilCallback, Zt as ImageAiContext, _ as NodeDefinitionsRecord, _n as CredentialProviderLayer, _r as InputTypeDefinition, _t as BlurTransform, a as buildNamingContext, an as MergePdfParams, ar as ImageDescriptionOutput, at as trimVideoParamsSchema, b as TypedFlowEdge, bn as ParallelScheduler, br as inputTypeRegistry, bt as FlipTransform, c as interpolateFileName, cn as DocumentAiContext, cr as STORAGE_OUTPUT_TYPE_ID, ct as ResizeVideoParams, d as runArgsSchema, dn as DocumentAiPluginShape, dr as ocrOutputSchema, dt as extractFrameVideoParamsSchema, en as ImageAiPluginShape, er as DeadLetterQueueService, et as VideoPluginLayer, f as FlowInputMap, fn as OcrParams, fr as OutputTypeDefinition, ft as DescribeVideoMetadata, g as NodeDefinition, gn as CredentialProvider, gr as validateFlowOutput, gt as ImagePluginShape, h as FlowRequirements, hn as OcrTaskType, hr as outputTypeRegistry, ht as ImagePluginLayer, i as applyFileNaming, in as DocumentPluginShape, ir as IMAGE_DESCRIPTION_OUTPUT_TYPE_ID, it as TrimVideoParams, j as isInitOperation, jn as ResolveEffect, jr as DistributedCircuitBreakerRegistry, jt as TransformationType, k as isFinalizeOperation, kn as ExtractLayerService, kr as AllowRequestResult, kt as TransformImageParams, l as validatePattern, ln as DocumentAiPlugin, lr as STREAMING_INPUT_TYPE_ID, lt as resizeVideoParamsSchema, m as FlowPluginRequirements, mn as OcrResult, mr as OutputValidationResult, mt as ImagePlugin, n as resolveUploadMetadata, nn as DocumentPlugin, nr as createDeadLetterQueueService, nt as VideoStreamInput, o as getBaseName, on as SplitPdfParams, or as OCR_OUTPUT_TYPE_ID, ot as TranscodeVideoParams, p as FlowOutputMap, pn as OcrResolution, pr as OutputTypeRegistry, pt as describeVideoMetadataSchema, q as ZipPluginShape, qn as FlowLifecycleHook, qt as ResizeParams, r as AVAILABLE_TEMPLATE_VARIABLES, rn as DocumentPluginLayer, rr as deadLetterQueueService, rt as VideoStreamOptions, s as getExtension, sn as SplitPdfResult, sr as OcrOutput, st as transcodeVideoParamsSchema, t as ResolvedUploadMetadata, tn as DocumentMetadata, tr as DeadLetterQueueServiceShape, tt as VideoPluginShape, u as RunArgs, un as DocumentAiPluginLayer, ur as imageDescriptionOutputSchema, ut as ExtractFrameVideoParams, v as TypedFlow, vn as CredentialProviderShape, vr as InputTypeRegistry, vt as BrightnessTransform, w as filterOutputsByType, wn as TransformMode, wr as FlowExecutionResult, wt as ResizeTransform, x as createFlow, xn as ParallelSchedulerConfig, xr as validateFlowInput, xt as GrayscaleTransform, y as TypedFlowConfig, yn as ExecutionLevel, yr as InputValidationResult, yt as ContrastTransform, z as DescribeImageParams, zn as FlowQueueService, zr as CircuitBreakerFallback, zt as resizeTransformSchema } from "../index-Dl4AtGUF.cjs";
|
|
2
2
|
import { $t as calculateBackoffDelay, At as FlowDeadLetterQueueConfig, Bn as DeadLetterItemStatus, Bt as TypedOutput, Cn as FlowEventNodeStart, Ct as BuiltInTypedOutput, Dn as NodeType, Dt as FlowCircuitBreakerConfig, En as ConditionValue, Et as FileNamingFunction, Ft as NarrowTypedOutput, G as StreamingConfig, Gn as DeadLetterRetryAttempt, Gt as isStreamingInputV1, Hn as DeadLetterProcessResult, Ht as completeNodeExecution, In as DeadLetterCleanupOptions, It as NodeConnectionValidator, Jt as DEFAULT_RETRY_POLICY, Kt as waitingNodeExecution, Ln as DeadLetterCleanupResult, Lt as NodeExecutionResult, Mt as FlowNode, Nt as FlowNodeData, On as createFlowNode, Ot as FlowCircuitBreakerFallback, Pt as NamingContext, Qt as RetryPolicy, R as DEFAULT_STREAMING_CONFIG, Rn as DeadLetterError, Rt as NodeTypeMap, Sn as FlowEventNodeResume, St as BuiltInNodeType, Tn as ConditionOperator, Tt as FileNamingConfig, Un as DeadLetterQueueStats, Ut as createOutputGuard, Vn as DeadLetterListOptions, Vt as TypedOutputGuard, Wn as DeadLetterRetryAllResult, Wt as isStorageOutputV1, Xt as FixedBackoff, Yt as ExponentialBackoff, Zt as ImmediateBackoff, _n as FlowEventJobStart, _t as FlowJobStatus, an as FlowEventDlqItemAdded, bn as FlowEventNodePause, bt as FlowJobTraceContext, cn as FlowEventDlqRetryFailed, dn as FlowEventFlowCancel, dt as DEFAULT_QUEUE_CONFIG, en as calculateExpirationDate, fn as FlowEventFlowEnd, ft as FlowQueueConfig, gn as FlowEventJobEnd, gt as FlowJob, hn as FlowEventFlowStart, ht as FlowQueueStats, in as FlowEvent, kn as getNodeData, kt as FlowConfig, ln as FlowEventDlqRetryStart, mn as FlowEventFlowPause, mt as FlowQueueItemStatus, nn as DlqEvent, on as FlowEventDlqItemExhausted, pn as FlowEventFlowError, pt as FlowQueueItem, qt as BackoffStrategy, rn as EventType, sn as FlowEventDlqItemResolved, tn as isErrorRetryable, un as FlowEventDlqRetrySuccess, vn as FlowEventNodeEnd, vt as FlowJobTask, wn as ConditionField, wt as CustomTypedOutput, xn as FlowEventNodeResponse, xt as AutoNamingSuffixGenerator, yn as FlowEventNodeError, yt as FlowJobTaskStatus, zn as DeadLetterItem, zt as TypeCompatibilityChecker } from "../index-_Q4OxX9Y.cjs";
|
|
3
3
|
export { AVAILABLE_TEMPLATE_VARIABLES, AllowRequestResult, AutoNamingSuffixGenerator, BackoffStrategy, BlurTransform, BrightnessTransform, BuiltInNodeType, BuiltInTypedOutput, CircuitBreakerConfig, CircuitBreakerEvent, CircuitBreakerEventHandler, CircuitBreakerFallback, CircuitBreakerState, ConditionField, ConditionOperator, ConditionValue, ContrastTransform, CredentialProvider, CredentialProviderLayer, CredentialProviderShape, CustomTypedOutput, DEFAULT_CIRCUIT_BREAKER_CONFIG, DEFAULT_QUEUE_CONFIG, DEFAULT_RETRY_POLICY, DEFAULT_STREAMING_CONFIG, DeadLetterCleanupOptions, DeadLetterCleanupResult, DeadLetterError, DeadLetterItem, DeadLetterItemStatus, DeadLetterListOptions, DeadLetterProcessResult, DeadLetterQueueService, DeadLetterQueueServiceShape, DeadLetterQueueStats, DeadLetterRetryAllResult, DeadLetterRetryAttempt, DescribeImageParams, DescribeVideoMetadata, DistributedCircuitBreaker, DistributedCircuitBreakerRegistry, DlqEvent, DocumentAiContext, DocumentAiPlugin, DocumentAiPluginLayer, DocumentAiPluginShape, DocumentMetadata, DocumentPlugin, DocumentPluginLayer, DocumentPluginShape, EventType, ExecutionLevel, ExponentialBackoff, ExtractEffectError, ExtractEffectRequirements, ExtractFrameVideoParams, ExtractLayerService, ExtractLayerServices, FileNamingConfig, FileNamingFunction, FixedBackoff, FlipTransform, Flow, FlowCircuitBreakerConfig, FlowCircuitBreakerFallback, FlowCondition, FlowConfig, FlowData, FlowDeadLetterQueueConfig, FlowEdge, FlowEngine, FlowEngineLayer, FlowEngineOptions, FlowEngineShape, FlowEvent, FlowEventDlqItemAdded, FlowEventDlqItemExhausted, FlowEventDlqItemResolved, FlowEventDlqRetryFailed, FlowEventDlqRetryStart, FlowEventDlqRetrySuccess, FlowEventFlowCancel, FlowEventFlowEnd, FlowEventFlowError, FlowEventFlowPause, FlowEventFlowStart, FlowEventJobEnd, FlowEventJobStart, FlowEventNodeEnd, FlowEventNodeError, FlowEventNodePause, FlowEventNodeResponse, FlowEventNodeResume, FlowEventNodeStart, FlowExecutionResult, FlowInputMap, FlowJob, FlowJobStatus, FlowJobTask, FlowJobTaskStatus, FlowJobTraceContext, FlowLifecycleHook, FlowNode, FlowNodeData, FlowOutputMap, FlowPluginRequirements, FlowProvider, FlowProviderShape, FlowQueueConfig, FlowQueueDispatchMarker, FlowQueueItem, FlowQueueItemStatus, FlowQueueService, FlowQueueServiceShape, FlowQueueStats, FlowQueueStore, FlowRequirements, FlowWaitUntil, GrayscaleTransform, IMAGE_DESCRIPTION_OUTPUT_TYPE_ID, ImageAiContext, ImageAiPlugin, ImageAiPluginLayer, ImageAiPluginShape, ImageDescriptionOutput, ImagePlugin, ImagePluginLayer, ImagePluginShape, ImmediateBackoff, InputData, InputNodeParams, InputTypeDefinition, InputTypeRegistry, InputValidationResult, LogoTransform, MemoryFlowQueueStore, MergePdfParams, NamingContext, NarrowTypedOutput, NarrowedTypedOutput, NodeConnectionValidator, NodeDefinition, NodeDefinitionsRecord, NodeExecutionResult, NodeType, NodeTypeMap, OCR_OUTPUT_TYPE_ID, OcrOutput, OcrParams, OcrResolution, OcrResult, OcrTaskType, OptimizeParams, OutputTypeDefinition, OutputTypeRegistry, OutputValidationResult, OverlayPosition, ParallelScheduler, ParallelSchedulerConfig, Plugin, PluginLayer, RemoveBackgroundParams, ResizeParams, ResizeTransform, ResizeVideoParams, ResolveEffect, ResolvedUploadMetadata, RetryPolicy, RotateTransform, RunArgs, STORAGE_OUTPUT_TYPE_ID, STREAMING_INPUT_TYPE_ID, ScanMetadata, ScanResult, SepiaTransform, SharpenTransform, SplitPdfParams, SplitPdfResult, type StreamingConfig, StreamingTransformFn, StreamingTransformResult, TextTransform, TranscodeVideoParams, TransformImageParams, TransformMode, TransformNodeConfig, Transformation, TransformationType, TrimVideoParams, TypeCompatibilityChecker, TypedFlow, TypedFlowConfig, TypedFlowEdge, TypedOutput, TypedOutputGuard, VideoPlugin, VideoPluginLayer, VideoPluginShape, VideoStreamInput, VideoStreamOptions, VirusScanPlugin, VirusScanPluginLayer, VirusScanPluginShape, WaitUntilCallback, WatermarkTransform, ZipInput, ZipParams, ZipPlugin, ZipPluginLayer, ZipPluginShape, applyFileNaming, blurTransformSchema, brightnessTransformSchema, buildNamingContext, calculateBackoffDelay, calculateExpirationDate, completeNodeExecution, contrastTransformSchema, createDeadLetterQueueService, createFlow, createFlowEdge, createFlowEngine, createFlowNode, createFlowWithSchema, createInputNode, createOutputGuard, createTransformNode, createTypeGuard, deadLetterQueueService, describeImageParamsSchema, describeVideoMetadataSchema, extractFrameVideoParamsSchema, filterOutputsByType, flipTransformSchema, flowEngine, getBaseName, getExtension, getFirstOutputByType, getFlowData, getNodeData, getOutputByNodeId, getSingleOutputByType, grayscaleTransformSchema, hasOutputOfType, imageDescriptionOutputSchema, inputDataSchema, inputNodeParamsSchema, inputTypeRegistry, interpolateFileName, isErrorRetryable, isFinalizeOperation, isImageDescriptionOutput, isInitOperation, isOcrOutput, isStorageOutput, isStorageOutputV1, isStreamingInputV1, isUploadFile, isUploadOperation, isUrlOperation, kvCircuitBreakerStoreLayer, logoTransformSchema, makeKvCircuitBreakerStore, makeMemoryCircuitBreakerStore, memoryCircuitBreakerStoreLayer, ocrOutputSchema, optimizeParamsSchema, outputTypeRegistry, removeBackgroundParamsSchema, resizeParamsSchema, resizeTransformSchema, resizeVideoParamsSchema, resolveUploadMetadata, rotateTransformSchema, runArgsSchema, sepiaTransformSchema, sharpenTransformSchema, textTransformSchema, transcodeVideoParamsSchema, transformImageParamsSchema, transformationSchema, trimVideoParamsSchema, validateFlowInput, validateFlowOutput, validatePattern, waitingNodeExecution, watermarkTransformSchema };
|
package/dist/flow/index.d.mts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { $ as VideoPlugin, $n as
|
|
1
|
+
import { $ as VideoPlugin, $n as flowEngine, $t as ImageAiPluginLayer, A as isImageDescriptionOutput, An as ExtractLayerServices, Ar as DistributedCircuitBreaker, At as Transformation, B as describeImageParamsSchema, Bn as FlowQueueServiceShape, Br as CircuitBreakerState, Bt as rotateTransformSchema, C as createTypeGuard, Cn as StreamingTransformResult, Cr as FlowData, Ct as OverlayPosition, D as getSingleOutputByType, Dn as ExtractEffectError, Dr as FlowEdge, Dt as SharpenTransform, E as getOutputByNodeId, En as createTransformNode, Er as getFlowData, Et as SepiaTransform, F as isUploadOperation, Fn as createInputNode, Fr as memoryCircuitBreakerStoreLayer, Ft as contrastTransformSchema, G as ZipPlugin, Gn as FlowEngineOptions, Gt as transformationSchema, H as PluginLayer, Hn as MemoryFlowQueueStore, Ht as sharpenTransformSchema, I as isUrlOperation, In as inputDataSchema, Ir as CircuitBreakerConfig, It as flipTransformSchema, J as ScanMetadata, Jn as FlowProvider, Jt as resizeParamsSchema, K as ZipPluginLayer, Kn as FlowEngineShape, Kt as watermarkTransformSchema, L as RemoveBackgroundParams, Ln as inputNodeParamsSchema, Lr as CircuitBreakerEvent, Lt as grayscaleTransformSchema, M as isOcrOutput, Mn as FlowCondition, Mr as kvCircuitBreakerStoreLayer, Mt as WatermarkTransform, N as isStorageOutput, Nn as InputData, Nr as makeKvCircuitBreakerStore, Nt as blurTransformSchema, O as hasOutputOfType, On as ExtractEffectRequirements, Or as createFlowEdge, Ot as TextTransform, P as isUploadFile, Pn as InputNodeParams, Pr as makeMemoryCircuitBreakerStore, Pt as brightnessTransformSchema, Q as VirusScanPluginShape, Qn as createFlowEngine, Qt as ImageAiPlugin, R as removeBackgroundParamsSchema, Rn as FlowQueueDispatchMarker, Rr as CircuitBreakerEventHandler, Rt as logoTransformSchema, S as NarrowedTypedOutput, Sn as StreamingTransformFn, Sr as Flow, St as LogoTransform, T as getFirstOutputByType, Tn as TransformNodeConfig, Tr as createFlowWithSchema, Tt as RotateTransform, U as ZipInput, Un as FlowEngine, Ut as textTransformSchema, V as Plugin, Vn as FlowQueueStore, Vr as DEFAULT_CIRCUIT_BREAKER_CONFIG, Vt as sepiaTransformSchema, W as ZipParams, Wn as FlowEngineLayer, Wt as transformImageParamsSchema, X as VirusScanPlugin, Xn as FlowWaitUntil, Xt as optimizeParamsSchema, Y as ScanResult, Yn as FlowProviderShape, Yt as OptimizeParams, Z as VirusScanPluginLayer, Zn as WaitUntilCallback, Zt as ImageAiContext, _ as NodeDefinitionsRecord, _n as CredentialProviderLayer, _r as InputTypeDefinition, _t as BlurTransform, a as buildNamingContext, an as MergePdfParams, ar as ImageDescriptionOutput, at as trimVideoParamsSchema, b as TypedFlowEdge, bn as ParallelScheduler, br as inputTypeRegistry, bt as FlipTransform, c as interpolateFileName, cn as DocumentAiContext, cr as STORAGE_OUTPUT_TYPE_ID, ct as ResizeVideoParams, d as runArgsSchema, dn as DocumentAiPluginShape, dr as ocrOutputSchema, dt as extractFrameVideoParamsSchema, en as ImageAiPluginShape, er as DeadLetterQueueService, et as VideoPluginLayer, f as FlowInputMap, fn as OcrParams, fr as OutputTypeDefinition, ft as DescribeVideoMetadata, g as NodeDefinition, gn as CredentialProvider, gr as validateFlowOutput, gt as ImagePluginShape, h as FlowRequirements, hn as OcrTaskType, hr as outputTypeRegistry, ht as ImagePluginLayer, i as applyFileNaming, in as DocumentPluginShape, ir as IMAGE_DESCRIPTION_OUTPUT_TYPE_ID, it as TrimVideoParams, j as isInitOperation, jn as ResolveEffect, jr as DistributedCircuitBreakerRegistry, jt as TransformationType, k as isFinalizeOperation, kn as ExtractLayerService, kr as AllowRequestResult, kt as TransformImageParams, l as validatePattern, ln as DocumentAiPlugin, lr as STREAMING_INPUT_TYPE_ID, lt as resizeVideoParamsSchema, m as FlowPluginRequirements, mn as OcrResult, mr as OutputValidationResult, mt as ImagePlugin, n as resolveUploadMetadata, nn as DocumentPlugin, nr as createDeadLetterQueueService, nt as VideoStreamInput, o as getBaseName, on as SplitPdfParams, or as OCR_OUTPUT_TYPE_ID, ot as TranscodeVideoParams, p as FlowOutputMap, pn as OcrResolution, pr as OutputTypeRegistry, pt as describeVideoMetadataSchema, q as ZipPluginShape, qn as FlowLifecycleHook, qt as ResizeParams, r as AVAILABLE_TEMPLATE_VARIABLES, rn as DocumentPluginLayer, rr as deadLetterQueueService, rt as VideoStreamOptions, s as getExtension, sn as SplitPdfResult, sr as OcrOutput, st as transcodeVideoParamsSchema, t as ResolvedUploadMetadata, tn as DocumentMetadata, tr as DeadLetterQueueServiceShape, tt as VideoPluginShape, u as RunArgs, un as DocumentAiPluginLayer, ur as imageDescriptionOutputSchema, ut as ExtractFrameVideoParams, v as TypedFlow, vn as CredentialProviderShape, vr as InputTypeRegistry, vt as BrightnessTransform, w as filterOutputsByType, wn as TransformMode, wr as FlowExecutionResult, wt as ResizeTransform, x as createFlow, xn as ParallelSchedulerConfig, xr as validateFlowInput, xt as GrayscaleTransform, y as TypedFlowConfig, yn as ExecutionLevel, yr as InputValidationResult, yt as ContrastTransform, z as DescribeImageParams, zn as FlowQueueService, zr as CircuitBreakerFallback, zt as resizeTransformSchema } from "../index-_IkOrjon.mjs";
|
|
2
2
|
import { $t as calculateBackoffDelay, At as FlowDeadLetterQueueConfig, Bn as DeadLetterItemStatus, Bt as TypedOutput, Cn as FlowEventNodeStart, Ct as BuiltInTypedOutput, Dn as NodeType, Dt as FlowCircuitBreakerConfig, En as ConditionValue, Et as FileNamingFunction, Ft as NarrowTypedOutput, G as StreamingConfig, Gn as DeadLetterRetryAttempt, Gt as isStreamingInputV1, Hn as DeadLetterProcessResult, Ht as completeNodeExecution, In as DeadLetterCleanupOptions, It as NodeConnectionValidator, Jt as DEFAULT_RETRY_POLICY, Kt as waitingNodeExecution, Ln as DeadLetterCleanupResult, Lt as NodeExecutionResult, Mt as FlowNode, Nt as FlowNodeData, On as createFlowNode, Ot as FlowCircuitBreakerFallback, Pt as NamingContext, Qt as RetryPolicy, R as DEFAULT_STREAMING_CONFIG, Rn as DeadLetterError, Rt as NodeTypeMap, Sn as FlowEventNodeResume, St as BuiltInNodeType, Tn as ConditionOperator, Tt as FileNamingConfig, Un as DeadLetterQueueStats, Ut as createOutputGuard, Vn as DeadLetterListOptions, Vt as TypedOutputGuard, Wn as DeadLetterRetryAllResult, Wt as isStorageOutputV1, Xt as FixedBackoff, Yt as ExponentialBackoff, Zt as ImmediateBackoff, _n as FlowEventJobStart, _t as FlowJobStatus, an as FlowEventDlqItemAdded, bn as FlowEventNodePause, bt as FlowJobTraceContext, cn as FlowEventDlqRetryFailed, dn as FlowEventFlowCancel, dt as DEFAULT_QUEUE_CONFIG, en as calculateExpirationDate, fn as FlowEventFlowEnd, ft as FlowQueueConfig, gn as FlowEventJobEnd, gt as FlowJob, hn as FlowEventFlowStart, ht as FlowQueueStats, in as FlowEvent, kn as getNodeData, kt as FlowConfig, ln as FlowEventDlqRetryStart, mn as FlowEventFlowPause, mt as FlowQueueItemStatus, nn as DlqEvent, on as FlowEventDlqItemExhausted, pn as FlowEventFlowError, pt as FlowQueueItem, qt as BackoffStrategy, rn as EventType, sn as FlowEventDlqItemResolved, tn as isErrorRetryable, un as FlowEventDlqRetrySuccess, vn as FlowEventNodeEnd, vt as FlowJobTask, wn as ConditionField, wt as CustomTypedOutput, xn as FlowEventNodeResponse, xt as AutoNamingSuffixGenerator, yn as FlowEventNodeError, yt as FlowJobTaskStatus, zn as DeadLetterItem, zt as TypeCompatibilityChecker } from "../index-Ce8IxXxR.mjs";
|
|
3
3
|
export { AVAILABLE_TEMPLATE_VARIABLES, AllowRequestResult, AutoNamingSuffixGenerator, BackoffStrategy, BlurTransform, BrightnessTransform, BuiltInNodeType, BuiltInTypedOutput, CircuitBreakerConfig, CircuitBreakerEvent, CircuitBreakerEventHandler, CircuitBreakerFallback, CircuitBreakerState, ConditionField, ConditionOperator, ConditionValue, ContrastTransform, CredentialProvider, CredentialProviderLayer, CredentialProviderShape, CustomTypedOutput, DEFAULT_CIRCUIT_BREAKER_CONFIG, DEFAULT_QUEUE_CONFIG, DEFAULT_RETRY_POLICY, DEFAULT_STREAMING_CONFIG, DeadLetterCleanupOptions, DeadLetterCleanupResult, DeadLetterError, DeadLetterItem, DeadLetterItemStatus, DeadLetterListOptions, DeadLetterProcessResult, DeadLetterQueueService, DeadLetterQueueServiceShape, DeadLetterQueueStats, DeadLetterRetryAllResult, DeadLetterRetryAttempt, DescribeImageParams, DescribeVideoMetadata, DistributedCircuitBreaker, DistributedCircuitBreakerRegistry, DlqEvent, DocumentAiContext, DocumentAiPlugin, DocumentAiPluginLayer, DocumentAiPluginShape, DocumentMetadata, DocumentPlugin, DocumentPluginLayer, DocumentPluginShape, EventType, ExecutionLevel, ExponentialBackoff, ExtractEffectError, ExtractEffectRequirements, ExtractFrameVideoParams, ExtractLayerService, ExtractLayerServices, FileNamingConfig, FileNamingFunction, FixedBackoff, FlipTransform, Flow, FlowCircuitBreakerConfig, FlowCircuitBreakerFallback, FlowCondition, FlowConfig, FlowData, FlowDeadLetterQueueConfig, FlowEdge, FlowEngine, FlowEngineLayer, FlowEngineOptions, FlowEngineShape, FlowEvent, FlowEventDlqItemAdded, FlowEventDlqItemExhausted, FlowEventDlqItemResolved, FlowEventDlqRetryFailed, FlowEventDlqRetryStart, FlowEventDlqRetrySuccess, FlowEventFlowCancel, FlowEventFlowEnd, FlowEventFlowError, FlowEventFlowPause, FlowEventFlowStart, FlowEventJobEnd, FlowEventJobStart, FlowEventNodeEnd, FlowEventNodeError, FlowEventNodePause, FlowEventNodeResponse, FlowEventNodeResume, FlowEventNodeStart, FlowExecutionResult, FlowInputMap, FlowJob, FlowJobStatus, FlowJobTask, FlowJobTaskStatus, FlowJobTraceContext, FlowLifecycleHook, FlowNode, FlowNodeData, FlowOutputMap, FlowPluginRequirements, FlowProvider, FlowProviderShape, FlowQueueConfig, FlowQueueDispatchMarker, FlowQueueItem, FlowQueueItemStatus, FlowQueueService, FlowQueueServiceShape, FlowQueueStats, FlowQueueStore, FlowRequirements, FlowWaitUntil, GrayscaleTransform, IMAGE_DESCRIPTION_OUTPUT_TYPE_ID, ImageAiContext, ImageAiPlugin, ImageAiPluginLayer, ImageAiPluginShape, ImageDescriptionOutput, ImagePlugin, ImagePluginLayer, ImagePluginShape, ImmediateBackoff, InputData, InputNodeParams, InputTypeDefinition, InputTypeRegistry, InputValidationResult, LogoTransform, MemoryFlowQueueStore, MergePdfParams, NamingContext, NarrowTypedOutput, NarrowedTypedOutput, NodeConnectionValidator, NodeDefinition, NodeDefinitionsRecord, NodeExecutionResult, NodeType, NodeTypeMap, OCR_OUTPUT_TYPE_ID, OcrOutput, OcrParams, OcrResolution, OcrResult, OcrTaskType, OptimizeParams, OutputTypeDefinition, OutputTypeRegistry, OutputValidationResult, OverlayPosition, ParallelScheduler, ParallelSchedulerConfig, Plugin, PluginLayer, RemoveBackgroundParams, ResizeParams, ResizeTransform, ResizeVideoParams, ResolveEffect, ResolvedUploadMetadata, RetryPolicy, RotateTransform, RunArgs, STORAGE_OUTPUT_TYPE_ID, STREAMING_INPUT_TYPE_ID, ScanMetadata, ScanResult, SepiaTransform, SharpenTransform, SplitPdfParams, SplitPdfResult, type StreamingConfig, StreamingTransformFn, StreamingTransformResult, TextTransform, TranscodeVideoParams, TransformImageParams, TransformMode, TransformNodeConfig, Transformation, TransformationType, TrimVideoParams, TypeCompatibilityChecker, TypedFlow, TypedFlowConfig, TypedFlowEdge, TypedOutput, TypedOutputGuard, VideoPlugin, VideoPluginLayer, VideoPluginShape, VideoStreamInput, VideoStreamOptions, VirusScanPlugin, VirusScanPluginLayer, VirusScanPluginShape, WaitUntilCallback, WatermarkTransform, ZipInput, ZipParams, ZipPlugin, ZipPluginLayer, ZipPluginShape, applyFileNaming, blurTransformSchema, brightnessTransformSchema, buildNamingContext, calculateBackoffDelay, calculateExpirationDate, completeNodeExecution, contrastTransformSchema, createDeadLetterQueueService, createFlow, createFlowEdge, createFlowEngine, createFlowNode, createFlowWithSchema, createInputNode, createOutputGuard, createTransformNode, createTypeGuard, deadLetterQueueService, describeImageParamsSchema, describeVideoMetadataSchema, extractFrameVideoParamsSchema, filterOutputsByType, flipTransformSchema, flowEngine, getBaseName, getExtension, getFirstOutputByType, getFlowData, getNodeData, getOutputByNodeId, getSingleOutputByType, grayscaleTransformSchema, hasOutputOfType, imageDescriptionOutputSchema, inputDataSchema, inputNodeParamsSchema, inputTypeRegistry, interpolateFileName, isErrorRetryable, isFinalizeOperation, isImageDescriptionOutput, isInitOperation, isOcrOutput, isStorageOutput, isStorageOutputV1, isStreamingInputV1, isUploadFile, isUploadOperation, isUrlOperation, kvCircuitBreakerStoreLayer, logoTransformSchema, makeKvCircuitBreakerStore, makeMemoryCircuitBreakerStore, memoryCircuitBreakerStoreLayer, ocrOutputSchema, optimizeParamsSchema, outputTypeRegistry, removeBackgroundParamsSchema, resizeParamsSchema, resizeTransformSchema, resizeVideoParamsSchema, resolveUploadMetadata, rotateTransformSchema, runArgsSchema, sepiaTransformSchema, sharpenTransformSchema, textTransformSchema, transcodeVideoParamsSchema, transformImageParamsSchema, transformationSchema, trimVideoParamsSchema, validateFlowInput, validateFlowOutput, validatePattern, waitingNodeExecution, watermarkTransformSchema };
|
package/dist/flow/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{$ as e,$t as t,A as n,At as r,B as i,Bt as a,C as o,Ct as s,D as c,Dt as l,E as u,Et as d,F as f,Ft as p,G as m,Gt as h,H as g,Ht as _,I as v,It as y,J as b,Jt as x,K as S,Kt as C,L as w,Lt as T,M as E,Mt as D,N as O,Nt as k,O as A,Ot as j,P as M,Pt as N,Q as P,Qt as F,R as I,Rt as L,S as R,St as z,T as B,Tt as V,U as H,Ut as U,V as W,Vt as G,W as K,Wt as q,X as J,Xt as Y,Y as X,Yt as Z,Z as Q,Zt as $,_ as ee,_t as te,a as ne,at as re,b as ie,bt as ae,c as oe,ct as se,d as ce,dt as le,en as ue,et as de,f as fe,ft as pe,g as me,gt as he,h as ge,ht as _e,i as ve,it as ye,j as be,jt as xe,k as Se,kt as Ce,l as we,lt as Te,m as Ee,mt as De,n as Oe,nt as ke,o as Ae,ot as je,p as Me,pt as Ne,q as Pe,qt as Fe,r as Ie,rt as Le,s as Re,st as ze,t as Be,tt as Ve,u as He,ut as Ue,v as We,vt as Ge,w as Ke,wt as qe,x as Je,xt as Ye,y as Xe,yt as Ze,z as Qe,zt as $e}from"../flow-
|
|
1
|
+
import{$ as e,$t as t,A as n,At as r,B as i,Bt as a,C as o,Ct as s,D as c,Dt as l,E as u,Et as d,F as f,Ft as p,G as m,Gt as h,H as g,Ht as _,I as v,It as y,J as b,Jt as x,K as S,Kt as C,L as w,Lt as T,M as E,Mt as D,N as O,Nt as k,O as A,Ot as j,P as M,Pt as N,Q as P,Qt as F,R as I,Rt as L,S as R,St as z,T as B,Tt as V,U as H,Ut as U,V as W,Vt as G,W as K,Wt as q,X as J,Xt as Y,Y as X,Yt as Z,Z as Q,Zt as $,_ as ee,_t as te,a as ne,at as re,b as ie,bt as ae,c as oe,ct as se,d as ce,dt as le,en as ue,et as de,f as fe,ft as pe,g as me,gt as he,h as ge,ht as _e,i as ve,it as ye,j as be,jt as xe,k as Se,kt as Ce,l as we,lt as Te,m as Ee,mt as De,n as Oe,nt as ke,o as Ae,ot as je,p as Me,pt as Ne,q as Pe,qt as Fe,r as Ie,rt as Le,s as Re,st as ze,t as Be,tt as Ve,u as He,ut as Ue,v as We,vt as Ge,w as Ke,wt as qe,x as Je,xt as Ye,y as Xe,yt as Ze,z as Qe,zt as $e}from"../flow-BLK5x1LF.mjs";import{DEFAULT_STREAMING_CONFIG as et}from"../types/index.mjs";export{f as AVAILABLE_TEMPLATE_VARIABLES,O as CredentialProvider,ue as DEFAULT_CIRCUIT_BREAKER_CONFIG,J as DEFAULT_QUEUE_CONFIG,Ge as DEFAULT_RETRY_POLICY,et as DEFAULT_STREAMING_CONFIG,_e as DeadLetterQueueService,x as DistributedCircuitBreaker,Z as DistributedCircuitBreakerRegistry,E as DocumentAiPlugin,be as DocumentPlugin,C as EventType,g as FlowEngine,H as FlowLifecycleHook,K as FlowProvider,b as FlowQueueDispatchMarker,X as FlowQueueService,m as FlowWaitUntil,z as IMAGE_DESCRIPTION_OUTPUT_TYPE_ID,n as ImageAiPlugin,Se as ImagePlugin,U as InputTypeRegistry,Q as MemoryFlowQueueStore,T as NodeType,s as OCR_OUTPUT_TYPE_ID,a as OutputTypeRegistry,De as ParallelScheduler,qe as STORAGE_OUTPUT_TYPE_ID,V as STREAMING_INPUT_TYPE_ID,ne as VideoPlugin,ve as VirusScanPlugin,Ie as ZipPlugin,v as applyFileNaming,Re as blurTransformSchema,oe as brightnessTransformSchema,w as buildNamingContext,Ze as calculateBackoffDelay,ae as calculateExpirationDate,D as completeNodeExecution,we as contrastTransformSchema,he as createDeadLetterQueueService,Oe as createFlow,Fe as createFlowEdge,S as createFlowEngine,L as createFlowNode,P as createFlowWithSchema,j as createInputNode,k as createOutputGuard,M as createTransformNode,de as createTypeGuard,te as deadLetterQueueService,A as describeImageParamsSchema,c as describeVideoMetadataSchema,u as extractFrameVideoParamsSchema,Ve as filterOutputsByType,He as flipTransformSchema,Pe as flowEngine,I as getBaseName,Qe as getExtension,ke as getFirstOutputByType,e as getFlowData,$e as getNodeData,Le as getOutputByNodeId,ye as getSingleOutputByType,ce as grayscaleTransformSchema,re as hasOutputOfType,d as imageDescriptionOutputSchema,Ce as inputDataSchema,r as inputNodeParamsSchema,q as inputTypeRegistry,i as interpolateFileName,Ye as isErrorRetryable,je as isFinalizeOperation,ze as isImageDescriptionOutput,se as isInitOperation,Te as isOcrOutput,Ue as isStorageOutput,N as isStorageOutputV1,p as isStreamingInputV1,le as isUploadFile,pe as isUploadOperation,Ne as isUrlOperation,Y as kvCircuitBreakerStoreLayer,fe as logoTransformSchema,$ as makeKvCircuitBreakerStore,F as makeMemoryCircuitBreakerStore,t as memoryCircuitBreakerStoreLayer,l as ocrOutputSchema,B as optimizeParamsSchema,G as outputTypeRegistry,Ke as removeBackgroundParamsSchema,o as resizeParamsSchema,Me as resizeTransformSchema,R as resizeVideoParamsSchema,xe as resolveUploadMetadata,Ee as rotateTransformSchema,Be as runArgsSchema,ge as sepiaTransformSchema,me as sharpenTransformSchema,ee as textTransformSchema,Je as transcodeVideoParamsSchema,We as transformImageParamsSchema,Xe as transformationSchema,Ae as trimVideoParamsSchema,h as validateFlowInput,_ as validateFlowOutput,W as validatePattern,y as waitingNodeExecution,ie as watermarkTransformSchema};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e=require("./uploadista-error-C6mqvnK_.cjs");require("./errors/index.cjs");const t=require("./types/index.cjs"),n=require("./upload-DiHATxK7.cjs");let r=require("effect"),i=require("zod"),a=require("micromustache");const o={enabled:!1,failureThreshold:5,resetTimeout:3e4,halfOpenRequests:3,windowDuration:6e4,fallback:{type:`fail`}},s=`uploadista:circuit-breaker:`;function c(e){let n=e=>`${s}${e}`,i=i=>r.Effect.gen(function*(){let r=n(i),a=yield*e.get(r);if(a===null)return null;try{return t.jsonSerializer.deserialize(a)}catch{return yield*e.delete(r),null}}),a=(r,i)=>{let a=n(r),o=t.jsonSerializer.serialize(i);return e.set(a,o)};return{getState:i,setState:a,incrementFailures:(e,n)=>r.Effect.gen(function*(){let r=Date.now(),o=yield*i(e);return o===null&&(o=t.createInitialCircuitBreakerState({failureThreshold:5,resetTimeout:3e4,halfOpenRequests:3,windowDuration:n})),o=r-o.windowStart>n?{...o,failureCount:1,windowStart:r}:{...o,failureCount:o.failureCount+1},yield*a(e,o),o.failureCount}),resetFailures:e=>r.Effect.gen(function*(){let t=yield*i(e);t!==null&&(yield*a(e,{...t,failureCount:0,windowStart:Date.now()}))}),incrementHalfOpenSuccesses:e=>r.Effect.gen(function*(){let t=yield*i(e);if(t===null)return 1;let n={...t,halfOpenSuccesses:t.halfOpenSuccesses+1};return yield*a(e,n),n.halfOpenSuccesses}),getAllStats:()=>r.Effect.gen(function*(){let t=new Map;if(!e.list)return t;let n=yield*e.list(s),r=Date.now();for(let e of n){let n=e,a=yield*i(n);if(a!==null){let e=r-a.lastStateChange;t.set(n,{nodeType:n,state:a.state,failureCount:a.failureCount,halfOpenSuccesses:a.halfOpenSuccesses,timeSinceLastStateChange:e,timeUntilHalfOpen:a.state===`open`?Math.max(0,a.config.resetTimeout-e):void 0})}}return t}),delete:t=>e.delete(n(t))}}function l(){let e=new Map;return{getState:t=>r.Effect.succeed(e.get(t)??null),setState:(t,n)=>r.Effect.sync(()=>{e.set(t,n)}),incrementFailures:(n,i)=>r.Effect.sync(()=>{let r=Date.now(),a=e.get(n);return a===void 0&&(a=t.createInitialCircuitBreakerState({failureThreshold:5,resetTimeout:3e4,halfOpenRequests:3,windowDuration:i})),a=r-a.windowStart>i?{...a,failureCount:1,windowStart:r}:{...a,failureCount:a.failureCount+1},e.set(n,a),a.failureCount}),resetFailures:t=>r.Effect.sync(()=>{let n=e.get(t);n!==void 0&&e.set(t,{...n,failureCount:0,windowStart:Date.now()})}),incrementHalfOpenSuccesses:t=>r.Effect.sync(()=>{let n=e.get(t);if(n===void 0)return 1;let r={...n,halfOpenSuccesses:n.halfOpenSuccesses+1};return e.set(t,r),r.halfOpenSuccesses}),getAllStats:()=>r.Effect.sync(()=>{let t=new Map,n=Date.now();for(let[r,i]of e){let e=n-i.lastStateChange;t.set(r,{nodeType:r,state:i.state,failureCount:i.failureCount,halfOpenSuccesses:i.halfOpenSuccesses,timeSinceLastStateChange:e,timeUntilHalfOpen:i.state===`open`?Math.max(0,i.config.resetTimeout-e):void 0})}return t}),delete:t=>r.Effect.sync(()=>{e.delete(t)})}}const u=r.Layer.effect(t.CircuitBreakerStoreService,r.Effect.gen(function*(){return c(yield*t.BaseKvStoreService)})),d=r.Layer.succeed(t.CircuitBreakerStoreService,l());var f=class{eventHandler;nodeType;config;store;constructor(e,t,n){this.nodeType=e,this.config={enabled:t.enabled??o.enabled,failureThreshold:t.failureThreshold??o.failureThreshold,resetTimeout:t.resetTimeout??o.resetTimeout,halfOpenRequests:t.halfOpenRequests??o.halfOpenRequests,windowDuration:t.windowDuration??o.windowDuration,fallback:t.fallback??o.fallback},this.store=n}setEventHandler(e){this.eventHandler=e}allowRequest(){let e=this;return r.Effect.gen(function*(){if(!e.config.enabled)return{allowed:!0,state:`closed`,failureCount:0};let n=yield*e.store.getState(e.nodeType),r=Date.now();if(n===null&&(n=t.createInitialCircuitBreakerState({failureThreshold:e.config.failureThreshold,resetTimeout:e.config.resetTimeout,halfOpenRequests:e.config.halfOpenRequests,windowDuration:e.config.windowDuration}),yield*e.store.setState(e.nodeType,n)),n.state===`open`&&r-n.lastStateChange>=e.config.resetTimeout){let t=n.state;n={...n,state:`half-open`,halfOpenSuccesses:0,lastStateChange:r},yield*e.store.setState(e.nodeType,n),yield*e.emitEvent(t,`half-open`,n.failureCount)}return{allowed:n.state!==`open`,state:n.state,failureCount:n.failureCount}})}getState(){let e=this;return r.Effect.gen(function*(){return(yield*e.store.getState(e.nodeType))?.state??`closed`})}getFailureCount(){let e=this;return r.Effect.gen(function*(){return(yield*e.store.getState(e.nodeType))?.failureCount??0})}recordSuccess(){let e=this;return r.Effect.gen(function*(){if(!e.config.enabled)return;let t=yield*e.store.getState(e.nodeType);t!==null&&(t.state===`half-open`?(yield*e.store.incrementHalfOpenSuccesses(e.nodeType))>=e.config.halfOpenRequests&&(yield*e.transitionTo(`closed`,t.failureCount)):t.state===`closed`&&(yield*e.store.resetFailures(e.nodeType)))})}recordFailure(e){let t=this;return r.Effect.gen(function*(){if(!t.config.enabled)return;let e=yield*t.store.getState(t.nodeType);if(e===null||e.state===`closed`){let e=yield*t.store.incrementFailures(t.nodeType,t.config.windowDuration);e>=t.config.failureThreshold&&(yield*t.transitionTo(`open`,e))}else e.state===`half-open`&&(yield*t.transitionTo(`open`,e.failureCount))})}getFallback(){return this.config.fallback}reset(){let e=this;return r.Effect.gen(function*(){let n=(yield*e.store.getState(e.nodeType))?.state??`closed`;yield*e.store.setState(e.nodeType,t.createInitialCircuitBreakerState({failureThreshold:e.config.failureThreshold,resetTimeout:e.config.resetTimeout,halfOpenRequests:e.config.halfOpenRequests,windowDuration:e.config.windowDuration})),n!==`closed`&&(yield*e.emitEvent(n,`closed`,0))})}transitionTo(e,t){let n=this;return r.Effect.gen(function*(){let r=yield*n.store.getState(n.nodeType),i=r?.state??`closed`;if(i===e)return;let a=Date.now(),o={state:e,failureCount:e===`closed`?0:t,lastStateChange:a,halfOpenSuccesses:0,windowStart:e===`closed`?a:r?.windowStart??a,config:{failureThreshold:n.config.failureThreshold,resetTimeout:n.config.resetTimeout,halfOpenRequests:n.config.halfOpenRequests,windowDuration:n.config.windowDuration}};yield*n.store.setState(n.nodeType,o),yield*n.emitEvent(i,e,t)})}emitEvent(e,t,n){let i=this;return r.Effect.gen(function*(){i.eventHandler&&(yield*i.eventHandler({nodeType:i.nodeType,previousState:e,newState:t,timestamp:Date.now(),failureCount:n}))})}},p=class{store;breakers=new Map;eventHandler;constructor(e){this.store=e}setEventHandler(e){this.eventHandler=e;for(let t of this.breakers.values())t.setEventHandler(e)}getOrCreate(e,t){let n=this.breakers.get(e);return n||(n=new f(e,t,this.store),this.eventHandler&&n.setEventHandler(this.eventHandler),this.breakers.set(e,n)),n}get(e){return this.breakers.get(e)}getAllStats(){return this.store.getAllStats()}resetAll(){let e=this;return r.Effect.gen(function*(){for(let t of e.breakers.values())yield*t.reset()})}clear(){this.breakers.clear()}};function m({source:e,target:t,sourcePort:n,targetPort:r}){return{source:e,target:t,sourcePort:n,targetPort:r}}let h=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.DlqItemAdded=`dlq-item-added`,e.DlqRetryStart=`dlq-retry-start`,e.DlqRetrySuccess=`dlq-retry-success`,e.DlqRetryFailed=`dlq-retry-failed`,e.DlqItemExhausted=`dlq-item-exhausted`,e.DlqItemResolved=`dlq-item-resolved`,e}({});var g=class{types;constructor(){this.types=new Map}register(t){if(this.types.has(t.id))throw e.n.fromCode(`VALIDATION_ERROR`,{body:`Input 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)}list(){return Array.from(this.types.values())}validate(t,n){let r=this.types.get(t);if(!r)return{success:!1,error:e.n.fromCode(`VALIDATION_ERROR`,{body:`Input type "${t}" is not registered`,details:{typeId:t}})};try{return{success:!0,data:r.schema.parse(n)}}catch(n){return{success:!1,error:e.n.fromCode(`VALIDATION_ERROR`,{body:`Data validation failed for input type "${t}"`,cause:n,details:{typeId:t,validationErrors:n}})}}}has(e){return this.types.has(e)}size(){return this.types.size}};const _=new g;function v(e,t){return _.validate(e,t)}var y=class{types;constructor(){this.types=new Map}register(t){if(this.types.has(t.id))throw e.n.fromCode(`VALIDATION_ERROR`,{body:`Output 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)}list(){return Array.from(this.types.values())}validate(t,n){let r=this.types.get(t);if(!r)return{success:!1,error:e.n.fromCode(`VALIDATION_ERROR`,{body:`Output type "${t}" is not registered`,details:{typeId:t}})};try{return{success:!0,data:r.schema.parse(n)}}catch(n){return{success:!1,error:e.n.fromCode(`VALIDATION_ERROR`,{body:`Data validation failed for output type "${t}"`,cause:n,details:{typeId:t,validationErrors:n}})}}}has(e){return this.types.has(e)}size(){return this.types.size}};const b=new y;function x(e,t){return b.validate(e,t)}let S=function(e){return e.input=`input`,e.process=`process`,e.conditional=`conditional`,e.multiplex=`multiplex`,e.merge=`merge`,e}({});function C({id:t,name:n,description:i,type:a,inputSchema:o,outputSchema:s,run:c,condition:l,multiInput:u=!1,multiOutput:d=!1,pausable:f=!1,retry:p,inputTypeId:m,outputTypeId:h,keepOutput:g=!1,circuitBreaker:v,nodeTypeId:y}){return r.Effect.gen(function*(){return m&&!_.get(m)?yield*e.n.fromCode(`INVALID_INPUT_TYPE`,{body:`Input type "${m}" is not registered in inputTypeRegistry`,details:{inputTypeId:m,nodeId:t}}).toEffect():h&&!b.get(h)?yield*e.n.fromCode(`INVALID_OUTPUT_TYPE`,{body:`Output type "${h}" is not registered in outputTypeRegistry`,details:{outputTypeId:h,nodeId:t}}).toEffect():{id:t,name:n,description:i,type:a,inputTypeId:m,outputTypeId:h,keepOutput:g,inputSchema:o,outputSchema:s,pausable:f,run:({data:i,jobId:a,flowId:l,storageId:u,clientId:d})=>r.Effect.gen(function*(){let f=yield*c({data:yield*r.Effect.try({try:()=>o.parse(i),catch:r=>{let i=r instanceof Error?r.message:String(r);return e.n.fromCode(`FLOW_INPUT_VALIDATION_ERROR`,{body:`Node '${n}' (${t}) input validation failed: ${i}`,cause:r})}}),jobId:a,storageId:u,flowId:l,clientId:d});return f.type===`waiting`?{type:`waiting`,partialData:f.partialData,nodeType:h,nodeId:t}:{type:`complete`,data:yield*r.Effect.try({try:()=>s.parse(f.data),catch:r=>{let i=r instanceof Error?r.message:String(r);return e.n.fromCode(`FLOW_OUTPUT_VALIDATION_ERROR`,{body:`Node '${n}' (${t}) output validation failed: ${i}`,cause:r})}}),nodeType:h,nodeId:t}}),condition:l,multiInput:u,multiOutput:d,retry:p,circuitBreaker:v,nodeTypeId:y}})}const w=e=>({id:e.id,name:e.name,description:e.description,type:e.type,inputTypeId:e.inputTypeId,outputTypeId:e.outputTypeId,nodeTypeId:e.nodeTypeId}),T=e=>t=>t.nodeType===e,E=T(`storage-output-v1`),D=T(`streaming-input-v1`),O=e=>({type:`complete`,data:e}),k=e=>({type:`waiting`,partialData:e}),ee=(e,t)=>{if(e===t)return!0;try{return!!(e&&t&&typeof e==`object`&&typeof t==`object`)}catch{return!0}};var te=class{typeChecker;constructor(e=ee){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`]}}}};function A(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 j=i.z.object({operation:i.z.literal(`init`),storageId:i.z.string(),metadata:i.z.record(i.z.string(),i.z.any()).optional()}),M=i.z.object({operation:i.z.literal(`finalize`),uploadId:i.z.string()}),N=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()}),P=i.z.union([j,M,N]),ne=i.z.object({allowedMimeTypes:i.z.array(i.z.string()).optional(),minSize:i.z.number().positive().optional(),maxSize:i.z.number().positive().optional()});function re(t,n){return r.Effect.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.n.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.n.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.n.fromCode(`VALIDATION_ERROR`,{cause:Error(`File size (${t.size} bytes) exceeds maximum (${n.maxSize} bytes)`)}).toEffect()}})}function ie(i,a,o){let s=o?.keepOutput??!1;return r.Effect.gen(function*(){let o=yield*n.n;return yield*C({id:i,name:`Input`,description:`Handles file input through multiple methods - streaming upload (init/finalize) or direct URL fetch`,type:`input`,nodeTypeId:`input`,inputSchema:P,outputSchema:t.uploadFileSchema,keepOutput:s,inputTypeId:R,outputTypeId:F,run:({data:t,flowId:s,jobId:c,clientId:l})=>r.Effect.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:s,nodeId:i,jobId:c}};return k(yield*o.createUpload(e,l))}case`finalize`:{let e=yield*o.getUpload(t.uploadId),{type:n}=A(e.metadata);return yield*re({type:n,size:e.size||0},a),O(e)}case`url`:{let e=yield*n.o(t.url),r=yield*n.a(e),u=t.metadata?.mimeType||e.headers.get(`content-type`)||`application/octet-stream`,d=t.metadata?.size||Number(e.headers.get(`content-length`)||0),f=t.metadata?.originalName||t.url.split(`/`).pop()||`file`;yield*re({type:u,size:d},a);let p=new ReadableStream({start(e){e.enqueue(new Uint8Array(r)),e.close()}}),m={storageId:t.storageId||`buffer`,size:d,type:u,fileName:f,lastModified:Date.now(),metadata:t.metadata?JSON.stringify(t.metadata):void 0};return O({...yield*o.upload(m,l,p),flow:{flowId:s,nodeId:i,jobId:c}})}default:throw yield*e.n.fromCode(`VALIDATION_ERROR`,{cause:Error(`Invalid operation`)}).toEffect()}})})})}const F=`storage-output-v1`,I=`ocr-output-v1`,L=`image-description-output-v1`,R=`streaming-input-v1`,ae=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()}),oe=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()});_.register({id:R,schema:P,version:`1.0.0`,description:`Streaming file input with init/finalize/url operations for flexible file ingestion`}),b.register({id:F,schema:t.uploadFileSchema,version:`1.0.0`,description:`Storage output node that saves files to configured storage backend`}),b.register({id:I,schema:ae,version:`1.0.0`,description:`OCR output node that extracts structured text from documents using AI`}),b.register({id:L,schema:oe,version:`1.0.0`,description:`Image description output node that generates AI-powered descriptions of images`});const z={enabled:!0,maxRetries:3,backoff:{type:`exponential`,initialDelayMs:1e3,maxDelayMs:3e5,multiplier:2,jitter:!0},ttlMs:6048e5};function B(e,t){switch(e.type){case`immediate`:return 0;case`fixed`:return e.delayMs;case`exponential`:{let n=e.initialDelayMs*e.multiplier**t,r=Math.min(n,e.maxDelayMs);if(e.jitter){let e=.5+Math.random();return Math.floor(r*e)}return r}default:return 0}}function se(e,t){return!t.enabled||t.nonRetryableErrors?.includes(e)?!1:t.retryableErrors&&t.retryableErrors.length>0?t.retryableErrors.includes(e):!0}function ce(e,t){if(!(t===void 0||t<=0))return new Date(e.getTime()+t)}var V=class e extends r.Context.Tag(`DeadLetterQueueService`)(){static optional=r.Effect.serviceOption(e)};function le(){return r.Effect.gen(function*(){let e=yield*t.DeadLetterQueueKVStore,n=()=>`dlq_${crypto.randomUUID()}`,i=e=>({...e,createdAt:new Date(e.createdAt),updatedAt:new Date(e.updatedAt),expiresAt:e.expiresAt?new Date(e.expiresAt):void 0,nextRetryAt:e.nextRetryAt?new Date(e.nextRetryAt):void 0,retryHistory:e.retryHistory.map(e=>({...e,attemptedAt:new Date(e.attemptedAt)}))}),a=()=>r.Effect.gen(function*(){if(!e.list)return[];let t=yield*e.list(),n=[];for(let a of t){let t=yield*r.Effect.catchAll(e.get(a),()=>r.Effect.succeed(null));t&&n.push(i(t))}return n});return{add:(t,i,a=z)=>r.Effect.gen(function*(){let r=n(),o=new Date,s={code:i.code||`UNKNOWN_ERROR`,message:i.body||i.message||`Unknown error`,nodeId:void 0,stack:i.stack},c=t.tasks.find(e=>e.status===`failed`);c&&(s.nodeId=c.nodeId);let l={};for(let e of t.tasks)e.result!==void 0&&(l[e.nodeId]=e.result);let u=se(s.code,a),d;if(a.enabled&&u&&a.maxRetries>0){let e=B(a.backoff,0);d=new Date(o.getTime()+e)}let f={id:r,jobId:t.id,flowId:t.flowId,storageId:t.storageId,clientId:t.clientId,error:s,inputs:t.executionState?.inputs||{},nodeResults:l,failedAtNodeId:s.nodeId,retryCount:0,maxRetries:a.maxRetries,nextRetryAt:d,retryHistory:[],createdAt:o,updatedAt:o,expiresAt:ce(o,a.ttlMs),status:u&&a.enabled?`pending`:`exhausted`};return yield*e.set(r,f),f}),get:t=>r.Effect.gen(function*(){return i(yield*e.get(t))}),getOption:t=>r.Effect.gen(function*(){let n=yield*r.Effect.either(e.get(t));return n._tag===`Left`?n.left.code===`FILE_NOT_FOUND`?r.Option.none():yield*r.Effect.fail(n.left):r.Option.some(i(n.right))}),delete:t=>e.delete(t),list:(e={})=>r.Effect.gen(function*(){let t=yield*a(),{status:n,flowId:r,clientId:i,limit:o=50,offset:s=0}=e,c=t;n&&(c=c.filter(e=>e.status===n)),r&&(c=c.filter(e=>e.flowId===r)),i&&(c=c.filter(e=>e.clientId===i)),c.sort((e,t)=>t.createdAt.getTime()-e.createdAt.getTime());let l=c.length;return{items:c.slice(s,s+o),total:l}}),update:(t,n)=>r.Effect.gen(function*(){let r={...i(yield*e.get(t)),...n,updatedAt:new Date};return yield*e.set(t,r),r}),markRetrying:t=>r.Effect.gen(function*(){let n={...i(yield*e.get(t)),status:`retrying`,updatedAt:new Date};return yield*e.set(t,n),n}),recordRetryFailure:(t,n,a)=>r.Effect.gen(function*(){let r=i(yield*e.get(t)),o=new Date,s=r.retryCount+1,c=[...r.retryHistory,{attemptedAt:o,error:n,durationMs:a}],l=`pending`,u;if(s>=r.maxRetries)l=`exhausted`,u=void 0;else{let e=B(z.backoff,s);u=new Date(o.getTime()+e)}let d={...r,retryCount:s,retryHistory:c,status:l,nextRetryAt:u,updatedAt:o};return yield*e.set(t,d),d}),markResolved:t=>r.Effect.gen(function*(){let n={...i(yield*e.get(t)),status:`resolved`,nextRetryAt:void 0,updatedAt:new Date};return yield*e.set(t,n),n}),getScheduledRetries:(e=100)=>r.Effect.gen(function*(){let t=yield*a(),n=new Date;return t.filter(e=>e.status===`pending`&&e.nextRetryAt&&e.nextRetryAt<=n).sort((e,t)=>(e.nextRetryAt?.getTime()||0)-(t.nextRetryAt?.getTime()||0)).slice(0,e)}),cleanup:(t={})=>r.Effect.gen(function*(){let n=yield*a(),{olderThan:i,status:o}=t,s=new Date,c=0;for(let t of n){let n=!1;t.expiresAt&&t.expiresAt<=s&&(n=!0),i&&t.createdAt<=i&&(o?n=t.status===o:(t.status===`exhausted`||t.status===`resolved`)&&(n=!0)),n&&(yield*r.Effect.catchAll(e.delete(t.id),()=>r.Effect.succeed(void 0)),c++)}return{deleted:c}}),getStats:()=>r.Effect.gen(function*(){let e=yield*a(),t={pending:0,retrying:0,exhausted:0,resolved:0},n={},r,i=0;for(let a of e)t[a.status]++,n[a.flowId]=(n[a.flowId]||0)+1,(!r||a.createdAt<r)&&(r=a.createdAt),i+=a.retryCount;let o=e.length>0?i/e.length:0;return{totalItems:e.length,byStatus:t,byFlow:n,oldestItem:r,averageRetryCount:o}})}})}const ue=r.Layer.effect(V,le());var de=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 H(e){return t=>{if(t.nodeType!==e)return!1;let n=b.get(e);return n?n.schema.safeParse(t.data).success:!1}}function U(e){return!e||typeof e!=`object`?!1:t.uploadFileSchema.safeParse(e).success}const fe=H(`storage-output-v1`),pe=H(I),me=H(L);function W(e,t){return e.filter(t)}function he(t,n){return r.Effect.gen(function*(){let r=W(t,n);return r.length===0?yield*e.n.fromCode(`OUTPUT_NOT_FOUND`,{body:`No output of the specified type was found in the flow results`}).toEffect():r.length>1?yield*e.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 ge(e,t){return W(e,t)[0]}function _e(e,t){return e.find(e=>e.nodeId===t)}function ve(e,t){return e.some(t)}function ye(e){return e.operation===`init`}function be(e){return e.operation===`finalize`}function xe(e){return e.operation===`url`}function Se(e){return e.operation===`init`||e.operation===`url`}const Ce=e=>({id:e.id,name:e.name,nodes:e.nodes.map(w),edges:e.edges});function G(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:o,name:s,onEvent:c,checkJobStatus:l,edges:u,inputSchema:d,outputSchema:f,typeChecker:m,circuitBreaker:h}=n,g=a,_=new te(m),v=e=>{let t=e.circuitBreaker,n=e.nodeTypeId?h?.nodeTypeOverrides?.[e.nodeTypeId]:void 0,r=h?.defaults;if(!(!t&&!n&&!r))return{...r,...n,...t}},y=()=>{let e={},t={},n={};return g.forEach(r=>{e[r.id]=[],n[r.id]=[],t[r.id]=0}),u.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=new Map;u.forEach(e=>{let t=b.get(e.target)||[];t.push({source:e.source,sourcePort:e.sourcePort,targetPort:e.targetPort}),b.set(e.target,t)});let x=new Map,S=()=>{let{graph:e,inDegree:t}=y(),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},C=(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)},w=(e,t)=>{let n=b.get(e)||[],r={};return n.forEach(e=>{let n=e.source,i=t.get(n);if(i!==void 0){if(g.find(e=>e.id===n)?.type===`conditional`&&e.sourcePort){let t=x.get(n)?`true`:`false`;if(e.sourcePort!==t)return}r[n]=i}}),r},T=(e,t,n)=>{let r=b.get(e)||[];if(g.find(t=>t.id===e)?.type===`input`||r.length===0)return`execute`;let i=!1,a=!1,o=!1,s=!1;for(let e of r){let r=e.source;if(n.has(r)){a=!0;continue}if(t.get(r)===void 0){s=!0;continue}if(g.find(e=>e.id===r)?.type===`conditional`&&e.sourcePort){let t=x.get(r);if(t===void 0){s=!0;continue}let n=t?`true`:`false`;e.sourcePort===n?o=!0:i=!0}else o=!0}return o?`execute`:(i||a)&&!s?`skip`:s?`wait`:`execute`},E=e=>{let t=g.filter(e=>e.type===`input`),n={};return t.forEach(t=>{e&&typeof e==`object`&&t.id in e&&(n[t.id]=d.parse(e[t.id]))}),n},D=e=>!u.some(t=>t.source===e),O=e=>{let t=g.find(t=>t.id===e);return D(e)||t?.keepOutput===!0},k=e=>{let t=g.filter(e=>O(e.id)),n={};return t.forEach(t=>{let r=e.get(t.id);r!==void 0&&(n[t.id]=r)}),n},ee=(e,t)=>{let n=g.filter(e=>O(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},A=(e,n,i)=>r.Effect.gen(function*(){if(e.storage.id===n)return e;let a=yield*t.UploadFileDataStores,o=yield*a.getDataStore(e.storage.id,i),s=yield*a.getDataStore(n,i),c=yield*o.read(e.id),l=r.Stream.make(c),u={...e,storage:{id:n,type:e.storage.type}},d=yield*s.create(u);return yield*s.write({file_id:d.id,stream:l,offset:0},{}),d}),j=(t,i,a,s,u,d,f,p)=>r.Effect.gen(function*(){let m=u.get(t);if(!m)return yield*e.n.fromCode(`FLOW_NODE_NOT_FOUND`).toEffect();if(l){let t=yield*l(d);if(t===`paused`)return yield*e.n.fromCode(`FLOW_PAUSED`,{cause:`Flow ${o} was paused by user at job ${d}`}).toEffect();if(t===`cancelled`)return yield*e.n.fromCode(`FLOW_CANCELLED`,{cause:`Flow ${o} was cancelled by user at job ${d}`}).toEffect()}c&&(yield*c({jobId:d,flowId:o,nodeId:t,eventType:`node-start`,nodeName:m.name,nodeType:m.type}));let h=m.retry?.maxRetries??0,g=m.retry?.retryDelay??1e3,_=m.retry?.exponentialBackoff??!0,y=v(m),b=y?.enabled&&m.nodeTypeId&&p?p.getOrCreate(m.nodeTypeId,y):null;if(b){let{allowed:n,state:i,failureCount:s}=yield*b.allowRequest();if(!n){let n=b.getFallback();return yield*r.Effect.logWarning(`Circuit breaker OPEN for node type "${m.nodeTypeId}" - applying fallback`),n.type===`skip`?(c&&(yield*c({jobId:d,flowId:o,nodeId:t,eventType:`node-end`,nodeName:m.name})),{nodeId:t,result:a[t],success:!0,waiting:!1}):n.type==="default"?(c&&(yield*c({jobId:d,flowId:o,nodeId:t,eventType:`node-end`,nodeName:m.name,result:n.value})),{nodeId:t,result:n.value,success:!0,waiting:!1}):yield*e.n.fromCode(`CIRCUIT_BREAKER_OPEN`,{body:`Circuit breaker is open for node type "${m.name}"`,details:{nodeType:m.name,nodeId:t,state:i,failureCount:s}}).toEffect()}}let S=0,T=null;for(;S<=h;)try{let l,u={};if(m.type===`input`){if(l=a[t],l===void 0)return yield*r.Effect.logError(`Input node ${t} has no input data`),yield*e.n.fromCode(`FLOW_NODE_ERROR`,{cause:Error(`Input node ${t} has no input data`)}).toEffect()}else{if(u=w(t,s),Object.keys(u).length===0)return yield*r.Effect.logError(`Node ${t} has no input data`),yield*e.n.fromCode(`FLOW_NODE_ERROR`,{cause:Error(`Node ${t} has no input data`)}).toEffect();if(m.multiInput)l=u;else{let n=Object.keys(u)[0];if(!n)return yield*e.n.fromCode(`FLOW_NODE_ERROR`,{cause:Error(`Node ${t} has no input data`)}).toEffect();l=u[n]}}if(m.type===`conditional`){let e=yield*C(m,l);x.set(t,e)}let p=yield*m.run({data:l,inputs:u,jobId:d,flowId:o,storageId:i,clientId:f});if(p.type===`waiting`){let e=p.partialData;return c&&(yield*c({jobId:d,flowId:o,nodeId:t,eventType:`node-pause`,nodeName:m.name,partialData:e})),{nodeId:t,result:e,success:!0,waiting:!0,nodeType:p.nodeType}}let h=p.data;if(O(t)&&(U(h)&&h.storage.id!==i&&(yield*r.Effect.logDebug(`Auto-persisting output node ${t} output from ${h.storage.id} to ${i}`),h=yield*A(h,i,f)),n.hooks?.onNodeOutput)){yield*r.Effect.logDebug(`Calling onNodeOutput hook for sink node ${t}`);let e=n.hooks.onNodeOutput({output:h,nodeId:t,flowId:o,jobId:d,storageId:i,clientId:f});h=yield*r.Effect.isEffect(e)?e:r.Effect.promise(()=>e)}return b&&(yield*b.recordSuccess()),c&&(yield*c({jobId:d,flowId:o,nodeId:t,eventType:`node-end`,nodeName:m.name,result:h})),{nodeId:t,result:h,success:!0,waiting:!1,nodeType:p.nodeType}}catch(n){if(T=n instanceof e.n?n:e.n.fromCode(`FLOW_NODE_ERROR`,{cause:n}),b&&(yield*b.recordFailure(T.body)),S<h){S++;let e=_?g*2**(S-1):g;yield*r.Effect.logWarning(`Node ${t} (${m.name}) failed, retrying (${S}/${h}) after ${e}ms`),yield*r.Effect.sleep(e);continue}return c&&(yield*c({jobId:d,flowId:o,nodeId:t,eventType:`node-error`,nodeName:m.name,error:T.body,retryCount:S})),yield*T.toEffect()}return T?yield*T.toEffect():yield*e.n.fromCode(`FLOW_NODE_ERROR`,{cause:Error(`Unexpected error in retry loop`)}).toEffect()}).pipe((()=>{let e=u.get(t),n=e?.nodeTypeId??e?.type??`unknown`;return r.Effect.withSpan(`node-${n}`,{attributes:{"node.id":t,"node.type":e?.type??`unknown`,"node.type_id":e?.nodeTypeId??`unknown`,"node.name":e?.name??`unknown`,"flow.id":o,"flow.job_id":d}})})()),M=({inputs:a,storageId:s,jobId:l,resumeFrom:d,clientId:m})=>r.Effect.gen(function*(){let h=yield*r.Effect.serviceOption(t.CircuitBreakerStoreService),_=h._tag===`Some`?new p(h.value):null;!d&&c&&(yield*c({jobId:l,eventType:`flow-start`,flowId:o}));let v=E(a||{}),y,b,x;d?(y=d.executionOrder,b=d.nodeResults,x=d.currentIndex):(y=S(),b=new Map,x=0);let C=new Map;if(y.length!==g.length)return yield*e.n.fromCode(`FLOW_CYCLE_ERROR`).toEffect();let w=new Map(g.map(e=>[e.id,e])),D=new Set;if(n.parallelExecution?.enabled??!1){yield*r.Effect.logDebug(`Flow ${o}: Executing in parallel mode (maxConcurrency: ${n.parallelExecution?.maxConcurrency??4})`);let e=new de({maxConcurrency:n.parallelExecution?.maxConcurrency??4}),t=e.groupNodesByExecutionLevel(g,u);yield*r.Effect.logDebug(`Flow ${o}: Grouped nodes into ${t.length} execution levels`);let i={};g.forEach(e=>{i[e.id]=[]}),u.forEach(e=>{i[e.target]?.push(e.source)});for(let n of t){yield*r.Effect.logDebug(`Flow ${o}: Executing level ${n.level} with nodes: ${n.nodes.join(`, `)}`);let t=[],i=[];for(let e of n.nodes)T(e,b,D)===`skip`?(i.push(e),D.add(e)):t.push(e);if(i.length>0&&(yield*r.Effect.logDebug(`Flow ${o}: Skipping nodes due to conditional routing: ${i.join(`, `)}`)),t.length===0){yield*r.Effect.logDebug(`Flow ${o}: All nodes in level ${n.level} skipped due to conditional routing`);continue}let a=t.map(e=>()=>r.Effect.gen(function*(){if(d&&e===d.executionOrder[x]&&c){let t=w.get(e);t&&(yield*c({jobId:l,flowId:o,nodeId:e,eventType:`node-resume`,nodeName:t.name,nodeType:t.type}))}return{nodeId:e,nodeResult:yield*j(e,s,v,b,w,l,m,_)}})),u=yield*e.executeNodesInParallel(a);for(let{nodeId:e,nodeResult:t}of u){if(t.waiting)return t.result!==void 0&&(b.set(e,t.result),t.nodeType&&C.set(e,t.nodeType)),{type:`paused`,nodeId:e,executionState:{executionOrder:y,currentIndex:y.indexOf(e),inputs:v}};t.success&&(b.set(e,t.result),t.nodeType&&C.set(e,t.nodeType))}}}else{yield*r.Effect.logDebug(`Flow ${o}: Executing in sequential mode`);for(let t=x;t<y.length;t++){let n=y[t];if(!n)return yield*e.n.fromCode(`FLOW_NODE_NOT_FOUND`).toEffect();if(T(n,b,D)===`skip`){yield*r.Effect.logDebug(`Flow ${o}: Skipping node ${n} due to conditional routing`),D.add(n);continue}if(d&&t===x&&c){let e=w.get(n);e&&(yield*c({jobId:l,flowId:o,nodeId:n,eventType:`node-resume`,nodeName:e.name,nodeType:e.type}))}let i=yield*j(n,s,v,b,w,l,m,_);if(i.waiting)return i.result!==void 0&&(b.set(i.nodeId,i.result),i.nodeType&&C.set(i.nodeId,i.nodeType)),{type:`paused`,nodeId:i.nodeId,executionState:{executionOrder:y,currentIndex:t,inputs:v}};i.success&&(b.set(i.nodeId,i.result),i.nodeType&&C.set(i.nodeId,i.nodeType))}}let te=k(b),A=ee(b,C),M=i.z.record(i.z.string(),f).safeParse(te);if(!M.success){let t=`Flow output validation failed: ${M.error.message}. Expected outputs: ${JSON.stringify(Object.keys(k(b)))}. Output nodes (sinks + keepOutput): ${g.filter(e=>O(e.id)).map(e=>e.id).join(`, `)}`;return c&&(yield*c({jobId:l,eventType:`flow-error`,flowId:o,error:t})),yield*e.n.fromCode(`FLOW_OUTPUT_VALIDATION_ERROR`,{body:t,cause:M.error}).toEffect()}let N=M.data;return c&&(yield*c({jobId:l,eventType:`flow-end`,flowId:o,outputs:A,result:N})),{type:`completed`,result:N,outputs:A}});return{id:o,name:s,nodes:g,edges:u,inputSchema:d,outputSchema:f,onEvent:c,checkJobStatus:l,hooks:n.hooks,run:({inputs:e,storageId:t,jobId:n,clientId:r})=>M({inputs:e,storageId:t,jobId:n,clientId:r}),resume:({jobId:e,storageId:t,nodeResults:n,executionState:r,clientId:i})=>M({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=g;return _.validateFlow(e,u)},validateInputs:e=>_.validateData(e,d),validateOutputs:e=>_.validateData(e,f)}})}var we=class{items=new Map;createItem(e){return r.Effect.sync(()=>(this.items.set(e.id,{...e}),e))}getItem(e){return r.Effect.sync(()=>this.items.get(e)??null)}updateItem(t,n){return r.Effect.suspend(()=>{let i=this.items.get(t);if(!i)return r.Effect.fail(e.n.fromCode(`FLOW_JOB_NOT_FOUND`,{body:`Queue item ${t} not found`}));let a={...i,...n};return this.items.set(t,a),r.Effect.succeed(a)})}listByStatus(e){return r.Effect.sync(()=>{let t=[];for(let n of this.items.values())n.status===e&&t.push({...n});return e===`pending`&&t.sort((e,t)=>e.enqueuedAt.getTime()-t.enqueuedAt.getTime()),t})}deleteItem(e){return r.Effect.sync(()=>{this.items.delete(e)})}};const Te={maxConcurrency:4,dlqRetryIntervalMs:3e4,dlqRetryBatchSize:10};var K=class extends r.Context.Tag(`FlowQueueDispatchMarker`)(){};function Ee(t){let n=e=>({...e,enqueuedAt:new Date(e.enqueuedAt),startedAt:e.startedAt?new Date(e.startedAt):void 0,completedAt:e.completedAt?new Date(e.completedAt):void 0});return{createItem:e=>t.set(e.id,e).pipe(r.Effect.map(()=>e)),getItem:e=>t.get(e).pipe(r.Effect.map(e=>n(e)),r.Effect.catchAll(()=>r.Effect.succeed(null))),updateItem:(i,a)=>r.Effect.gen(function*(){let o={...yield*t.get(i).pipe(r.Effect.map(n),r.Effect.mapError(()=>e.n.fromCode(`FLOW_JOB_NOT_FOUND`,{body:`Queue item ${i} not found`}))),...a};return yield*t.set(i,o),o}),listByStatus:e=>r.Effect.gen(function*(){if(!t.list)return[];let i=yield*t.list(),a=[];for(let o of i){let i=yield*t.get(o).pipe(r.Effect.map(e=>n(e)),r.Effect.catchAll(()=>r.Effect.succeed(null)));i&&i.status===e&&a.push(i)}return e===`pending`&&a.sort((e,t)=>e.enqueuedAt.getTime()-t.enqueuedAt.getTime()),a}),deleteItem:e=>t.delete(e)}}var De=class e extends r.Context.Tag(`FlowQueueService`)(){static optional=r.Effect.serviceOption(e);static Default(t){return e.make(t??{},new we)}static make(t,n){return r.Layer.effect(e,Oe(t,n))}static fromKvStore(n={}){return r.Layer.effect(e,r.Effect.gen(function*(){return yield*Oe(n,Ee(yield*t.FlowQueueKVStore))}))}static fromBaseKvStore(n={}){return e.fromKvStore(n).pipe(r.Layer.provide(t.flowQueueKvStore))}};function Oe(t,n){return r.Effect.gen(function*(){let{maxConcurrency:i,dlqRetryIntervalMs:a,dlqRetryBatchSize:o}={...Te,...t},s=yield*r.Ref.make(0),c=yield*Y,l=yield*V.optional,u=()=>`q_${crypto.randomUUID()}`,d=t=>{let i=Date.now(),a=r.Effect.gen(function*(){yield*r.Effect.catchAll(n.updateItem(t.id,{status:`running`,startedAt:new Date}),e=>r.Effect.logError(`FlowQueue: failed to mark item running`,e)),yield*r.Ref.update(s,e=>e+1)}),o=c.runFlow({flowId:t.flowId,storageId:t.storageId,clientId:t.clientId,inputs:t.input,jobId:t.id}).pipe(r.Effect.provideService(K,!0)).pipe(r.Effect.andThen(()=>r.Effect.gen(function*(){yield*r.Effect.catchAll(n.updateItem(t.id,{status:`completed`,completedAt:new Date}),e=>r.Effect.logError(`FlowQueue: failed to mark item completed`,e)),t.dlqItemId&&r.Option.isSome(l)&&(yield*r.Effect.catchAll(l.value.markResolved(t.dlqItemId),e=>r.Effect.logError(`FlowQueue: failed to mark DLQ item resolved`,e)))})),r.Effect.catchAll(a=>r.Effect.gen(function*(){let o=a instanceof e.n?a.body:String(a);if(yield*r.Effect.catchAll(n.updateItem(t.id,{status:`failed`,completedAt:new Date,error:o}),e=>r.Effect.logError(`FlowQueue: failed to mark item failed`,e)),t.dlqItemId&&r.Option.isSome(l)){let e=Date.now()-i;yield*r.Effect.catchAll(l.value.recordRetryFailure(t.dlqItemId,o,e),e=>r.Effect.logError(`FlowQueue: failed to record DLQ retry failure`,e))}}))),u=r.Ref.update(s,e=>Math.max(0,e-1));return a.pipe(r.Effect.andThen(()=>o.pipe(r.Effect.ensuring(u))),r.Effect.catchAllCause(e=>r.Effect.logError(`FlowQueue: unexpected error in dispatchItem`,e)))},f=r.Effect.gen(function*(){let e=i-(yield*r.Ref.get(s));if(e<=0)return;let t=(yield*r.Effect.catchAll(n.listByStatus(`pending`),()=>r.Effect.succeed([]))).slice(0,e);for(let e of t)yield*r.Effect.forkDaemon(d(e))});if(yield*r.Effect.forkDaemon(f.pipe(r.Effect.repeat(r.Schedule.spaced(r.Duration.millis(500))),r.Effect.catchAllCause(e=>r.Effect.logError(`FlowQueue: worker loop crashed`,e)))),r.Option.isSome(l)){let e=l.value,t=r.Effect.gen(function*(){let t=yield*r.Effect.catchAll(e.getScheduledRetries(o),e=>r.Effect.logError(`FlowQueue: failed to fetch DLQ scheduled retries`,e).pipe(r.Effect.as([])));for(let i of t){yield*r.Effect.catchAll(e.markRetrying(i.id),e=>r.Effect.logError(`FlowQueue: failed to mark DLQ item retrying`,e));let t={id:u(),flowId:i.flowId,storageId:i.storageId,input:i.inputs,clientId:i.clientId,status:`pending`,dlqItemId:i.id,enqueuedAt:new Date};yield*r.Effect.catchAll(n.createItem(t),e=>r.Effect.logError(`FlowQueue: failed to enqueue DLQ retry item`,e))}});yield*r.Effect.forkDaemon(r.Effect.sleep(r.Duration.millis(a)).pipe(r.Effect.andThen(t.pipe(r.Effect.repeat(r.Schedule.spaced(r.Duration.millis(a))))),r.Effect.catchAllCause(e=>r.Effect.logError(`FlowQueue: DLQ retry loop crashed`,e))))}return{enqueue:({flowId:e,storageId:t,input:i,clientId:a,dlqItemId:o})=>r.Effect.gen(function*(){let r={id:u(),flowId:e,storageId:t,input:i,clientId:a,status:`pending`,dlqItemId:o,enqueuedAt:new Date};return yield*n.createItem(r)}),getStatus:t=>r.Effect.gen(function*(){return(yield*n.getItem(t))||(yield*r.Effect.fail(e.n.fromCode(`QUEUE_ITEM_NOT_FOUND`)))}),cancel:t=>r.Effect.gen(function*(){let i=yield*n.getItem(t);if(!i)return yield*r.Effect.fail(e.n.fromCode(`QUEUE_ITEM_NOT_FOUND`));if(i.status===`running`)return yield*r.Effect.fail(e.n.fromCode(`QUEUE_ITEM_ALREADY_RUNNING`));i.status===`pending`&&(yield*n.deleteItem(t))}),list:e=>r.Effect.gen(function*(){if(e?.status)return yield*n.listByStatus(e.status);let[t,i,a,o]=yield*r.Effect.all([n.listByStatus(`pending`),n.listByStatus(`running`),n.listByStatus(`completed`),n.listByStatus(`failed`)]);return[...t,...i,...a,...o]}),getStats:()=>r.Effect.gen(function*(){let[e,t,a,o]=yield*r.Effect.all([n.listByStatus(`pending`),n.listByStatus(`running`),n.listByStatus(`completed`),n.listByStatus(`failed`)]),c=yield*r.Ref.get(s);return{pending:e.length,running:t.length,completed:a.length,failed:o.length,maxConcurrency:i,currentConcurrency:c}})}})}var q=class e extends r.Context.Tag(`FlowWaitUntil`)(){static optional=r.Effect.serviceOption(e)},ke=class e extends r.Context.Tag(`FlowLifecycleHook`)(){static optional=r.Effect.serviceOption(e)},J=class extends r.Context.Tag(`FlowProvider`)(){},Y=class extends r.Context.Tag(`FlowEngine`)(){};const X=e=>typeof e==`object`&&!!e&&`id`in e,Ae=e=>typeof e==`object`&&e&&`nodeId`in e&&`data`in e&&`timestamp`in e?e.data:e;function je(t,n,i){let a=e=>{let a=t=>r.Effect.gen(function*(){let n=yield*i.get(e);n&&(yield*i.set(e,{...n,...t,updatedAt:new Date}))});return o=>r.Effect.gen(function*(){switch(t.onEvent&&(yield*r.Effect.catchAll(t.onEvent(o),e=>(r.Effect.logError(`Original onEvent failed`,e),r.Effect.succeed({eventId:null})))),yield*n.emit(e,o),r.Effect.logInfo(`Updating job ${e} with event ${o.eventType}`),o.eventType){case`flow-start`:yield*a({status:`running`});break;case`flow-end`:yield*r.Effect.gen(function*(){let t=yield*i.get(e);t&&o.outputs&&(yield*i.set(e,{...t,result:o.outputs,updatedAt:new Date}))});break;case`flow-error`:yield*a({status:`failed`,error:o.error});break;case`node-start`:yield*r.Effect.gen(function*(){let t=yield*i.get(e);if(t){let n=t.tasks.find(e=>e.nodeId===o.nodeId)?t.tasks.map(e=>e.nodeId===o.nodeId?{...e,status:`running`,updatedAt:new Date}:e):[...t.tasks,{nodeId:o.nodeId,status:`running`,createdAt:new Date,updatedAt:new Date}];yield*i.set(e,{...t,tasks:n,updatedAt:new Date})}});break;case`node-pause`:yield*r.Effect.gen(function*(){let t=yield*i.get(e);if(t){let n=t.tasks.find(e=>e.nodeId===o.nodeId)?t.tasks.map(e=>e.nodeId===o.nodeId?{...e,status:`paused`,result:o.partialData,updatedAt:new Date}:e):[...t.tasks,{nodeId:o.nodeId,status:`paused`,result:o.partialData,createdAt:new Date,updatedAt:new Date}],r=o.partialData?.id,a=r?[...t.activeUploads||[],r]:t.activeUploads;yield*i.set(e,{...t,tasks:n,activeUploads:a,updatedAt:new Date})}});break;case`node-resume`:yield*r.Effect.gen(function*(){let t=yield*i.get(e);if(t){let n=t.tasks.map(e=>e.nodeId===o.nodeId?{...e,status:`running`,updatedAt:new Date}:e);yield*i.set(e,{...t,tasks:n,updatedAt:new Date})}});break;case`node-end`:yield*r.Effect.gen(function*(){let n=yield*i.get(e);if(n){let a=n.tasks.map(e=>e.nodeId===o.nodeId?{...e,status:`completed`,result:o.result,updatedAt:new Date}:e),s=!t.edges.some(e=>e.source===o.nodeId),c=t.nodes.find(e=>e.id===o.nodeId)?.keepOutput===!0,l=o.result,u=Ae(l),d=n.intermediateFiles||[],f=s||c;f&&X(u)&&u.id?(d=d.filter(e=>e!==u.id),c&&!s&&r.Effect.logInfo(`Preserving output from node ${o.nodeId} due to keepOutput flag`)):!f&&X(u)&&u.id&&(d.includes(u.id)||d.push(u.id));let p=n.activeUploads||[];X(u)&&u.id&&(p=p.filter(e=>e!==u.id)),yield*i.set(e,{...n,tasks:a,intermediateFiles:d,activeUploads:p,updatedAt:new Date})}});break;case`node-error`:yield*r.Effect.gen(function*(){let t=yield*i.get(e);if(t){let n=t.tasks.map(e=>e.nodeId===o.nodeId?{...e,status:`failed`,error:o.error,retryCount:o.retryCount,updatedAt:new Date}:e);yield*i.set(e,{...t,tasks:n,error:o.error,updatedAt:new Date})}});break}return{eventId:e}})},o=t=>t=>r.Effect.gen(function*(){let n=yield*i.get(t);return n?n.status===`paused`?`paused`:n.status===`cancelled`?`cancelled`:`running`:yield*r.Effect.fail(e.n.fromCode(`FLOW_JOB_NOT_FOUND`,{cause:`Job ${t} not found`}))});return{...t,run:e=>r.Effect.gen(function*(){let n=e.jobId||crypto.randomUUID(),r=a(n),i=o(n);return yield*(yield*G({flowId:t.id,name:t.name,nodes:t.nodes,edges:t.edges,inputSchema:t.inputSchema,outputSchema:t.outputSchema,onEvent:r,checkJobStatus:i})).run({...e,jobId:n,clientId:e.clientId})}),resume:e=>r.Effect.gen(function*(){let n=e.jobId,r=a(n),i=o(n);return yield*(yield*G({flowId:t.id,name:t.name,nodes:t.nodes,edges:t.edges,inputSchema:t.inputSchema,outputSchema:t.outputSchema,onEvent:r,checkJobStatus:i})).resume(e)})}}function Me(){return r.Effect.gen(function*(){let i=yield*J,a=yield*t.FlowEventEmitter,o=yield*t.FlowJobKVStore,s=yield*n.n,c=yield*V.optional,l=yield*ke.optional,u=(t,n)=>r.Effect.gen(function*(){let i=yield*o.get(t);return i?yield*o.set(t,{...i,...n}):yield*r.Effect.fail(e.n.fromCode(`FLOW_JOB_NOT_FOUND`,{cause:`Job ${t} not found`}))}),d=(e,t)=>r.Effect.gen(function*(){let n=yield*o.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*s.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*u(e,{intermediateFiles:[]}))}),f=(e,t)=>r.Effect.gen(function*(){if(r.Option.isNone(c)){yield*r.Effect.logDebug(`[FlowServer] DLQ not configured, skipping for job: ${e}`);return}let n=c.value,i=yield*r.Effect.catchAll(o.get(e),()=>r.Effect.succeed(null));if(!i){yield*r.Effect.logWarning(`[FlowServer] Job ${e} not found when adding to DLQ`);return}yield*r.Effect.catchAll(n.add(i,t),t=>r.Effect.gen(function*(){return yield*r.Effect.logError(`[FlowServer] Failed to add job ${e} to DLQ`,t),r.Effect.succeed(void 0)})),yield*r.Effect.logInfo(`[FlowServer] Added job ${e} to Dead Letter Queue`)}),p=e=>r.Option.isSome(l)?l.value.onComplete(e).pipe(r.Effect.catchAll(e=>r.Effect.logWarning(`FlowLifecycleHook.onComplete failed: ${e}`))):r.Effect.void,m=r.Effect.gen(function*(){let e=yield*r.Effect.currentSpan.pipe(r.Effect.option);return r.Option.match(e,{onNone:()=>void 0,onSome:e=>({traceId:e.traceId,spanId:e.spanId,traceFlags:+!!e.sampled})})}),h=({jobId:t,flow:n,storageId:i,clientId:c,inputs:l})=>r.Effect.gen(function*(){return console.log(`[FlowServer] executeFlowInBackground started for job: ${t}`),yield*u(t,{status:`running`,traceContext:yield*m}),yield*r.Effect.gen(function*(){console.log(`[FlowServer] Creating flowWithEvents for job: ${t}`);let e=je(n,a,o);console.log(`[FlowServer] Running flow for job: ${t}`);let r=yield*e.run({inputs:l,storageId:i,jobId:t,clientId:c});return console.log(`[FlowServer] Flow completed for job: ${t}, result type: ${r.type}`),r.type===`paused`?yield*u(t,{status:`paused`,pausedAt:r.nodeId,executionState:r.executionState,updatedAt:new Date}):(yield*u(t,{status:`completed`,updatedAt:new Date,endedAt:new Date}),yield*d(t,c),yield*p({jobId:t,flowId:n.id,clientId:c,status:`completed`})),r}).pipe(r.Effect.withSpan(`flow-execution`,{attributes:{"flow.id":n.id,"flow.name":n.name,"flow.job_id":t,"flow.storage_id":i,"flow.node_count":n.nodes.length}}))}).pipe(r.Effect.withSpan(`flow`,{attributes:{"flow.id":n.id,"flow.name":n.name,"flow.job_id":t,"flow.storage_id":i,"flow.node_count":n.nodes.length}}),r.Effect.catchAll(i=>r.Effect.gen(function*(){yield*r.Effect.logError(`Flow execution failed`,i);let l=i instanceof e.n?i.body:String(i);yield*r.Effect.logInfo(`Updating job ${t} to failed status with error: ${l}`),yield*u(t,{status:`failed`,error:l,updatedAt:new Date}).pipe(r.Effect.catchAll(e=>r.Effect.gen(function*(){return yield*r.Effect.logError(`Failed to update job ${t}`,e),r.Effect.succeed(void 0)})));let m=yield*o.get(t);throw m&&(yield*a.emit(t,{jobId:t,eventType:`flow-error`,flowId:m.flowId,error:l}).pipe(r.Effect.catchAll(e=>r.Effect.gen(function*(){return yield*r.Effect.logError(`Failed to emit FlowError event for job ${t}`,e),r.Effect.succeed(void 0)})))),n.onEvent&&(yield*n.onEvent({jobId:t,eventType:`flow-error`,flowId:n.id,error:l}).pipe(r.Effect.catchAll(e=>r.Effect.gen(function*(){return yield*r.Effect.logError(`Failed to call flow.onEvent for FlowError event for job ${t}`,e),r.Effect.succeed({eventId:null})})))),yield*d(t,c).pipe(r.Effect.catchAll(e=>r.Effect.gen(function*(){return yield*r.Effect.logWarning(`Failed to cleanup intermediate files for job ${t}`,e),r.Effect.succeed(void 0)}))),yield*r.Effect.gen(function*(){let e=yield*o.get(t);e&&e.activeUploads&&e.activeUploads.length>0&&(yield*r.Effect.logInfo(`Cleaning up ${e.activeUploads.length} active uploads for failed job ${t}`),yield*r.Effect.all(e.activeUploads.map(e=>r.Effect.gen(function*(){yield*s.delete(e,c),yield*r.Effect.logDebug(`Aborted active upload ${e} for failed job ${t}`)}).pipe(r.Effect.catchAll(t=>r.Effect.gen(function*(){return yield*r.Effect.logWarning(`Failed to abort active upload ${e}: ${t}`),r.Effect.succeed(void 0)})))),{concurrency:5}),yield*u(t,{activeUploads:[]}))}).pipe(r.Effect.catchAll(e=>r.Effect.gen(function*(){return yield*r.Effect.logWarning(`Failed to cleanup active uploads for job ${t}`,e),r.Effect.succeed(void 0)}))),yield*f(t,i instanceof e.n?i:new e.n({code:`UNKNOWN_ERROR`,status:500,body:String(i),cause:i})),yield*p({jobId:t,flowId:n.id,clientId:c,status:`failed`}),i})));return{getFlow:(e,t)=>r.Effect.gen(function*(){return yield*i.getFlow(e,t)}),getFlowData:(e,t)=>r.Effect.gen(function*(){return Ce(yield*i.getFlow(e,t))}),runFlow:({flowId:t,storageId:n,clientId:a,inputs:s,jobId:c})=>r.Effect.gen(function*(){let l=yield*r.Effect.serviceOption(K),u=yield*De.optional;if(r.Option.isSome(u)&&r.Option.isNone(l)){let e=yield*u.value.enqueue({flowId:t,storageId:n,input:s,clientId:a}),r=e.enqueuedAt,i={id:e.id,flowId:t,storageId:n,clientId:a,status:`pending`,tasks:[],createdAt:r,updatedAt:r};return yield*o.set(e.id,i),i}let d=yield*q.optional,f=yield*r.Effect.try({try:()=>yt.parse({inputs:s}),catch:t=>e.n.fromCode(`FLOW_INPUT_VALIDATION_ERROR`,{cause:t})}),p=c??crypto.randomUUID(),m=new Date,g={id:p,flowId:t,storageId:n,clientId:a,status:`started`,createdAt:m,updatedAt:m,tasks:[]};yield*o.set(p,g);let _=yield*i.getFlow(t,a);console.log(`[FlowServer] About to fork flow execution for job: ${p}`);let v=h({jobId:p,flow:_,storageId:n,clientId:a,inputs:f.inputs}).pipe(r.Effect.tapErrorCause(e=>r.Effect.logError(`Flow execution failed`,e)));if(r.Option.isSome(d)){console.log(`[FlowServer] Using waitUntil for job: ${p}`);let e=yield*r.Effect.runtime(),t=r.Runtime.runPromise(e)(v);d.value(t)}else console.log(`[FlowServer] Using Effect.forkDaemon for job: ${p}`),yield*r.Effect.forkDaemon(v);return console.log(`[FlowServer] Flow execution started for job: ${p}`),g}),getJobStatus:t=>r.Effect.gen(function*(){return(yield*o.get(t))||(yield*r.Effect.fail(e.n.fromCode(`FLOW_JOB_NOT_FOUND`,{cause:`Job ${t} not found`})))}),resumeFlow:({jobId:t,nodeId:n,newData:c,clientId:l})=>r.Effect.gen(function*(){let m=yield*q.optional,h=yield*o.get(t);if(!h)return console.error(`Job not found`),yield*r.Effect.fail(e.n.fromCode(`FLOW_JOB_NOT_FOUND`,{cause:`Job ${t} not found`}));if(h.status!==`paused`)return console.error(`Job is not paused`),yield*r.Effect.fail(e.n.fromCode(`FLOW_JOB_ERROR`,{cause:`Job ${t} is not paused (status: ${h.status})`}));if(h.pausedAt!==n)return console.error(`Job is not paused at the expected node`),yield*r.Effect.fail(e.n.fromCode(`FLOW_JOB_ERROR`,{cause:`Job ${t} is paused at node ${h.pausedAt}, not ${n}`}));if(!h.executionState)return console.error(`Job has no execution state`),yield*r.Effect.fail(e.n.fromCode(`FLOW_JOB_ERROR`,{cause:`Job ${t} has no execution state`}));let g={...h.tasks.reduce((e,t)=>(t.result!==void 0&&(e[t.nodeId]=t.result),e),{}),[n]:c},_={...h.executionState.inputs,[n]:c};yield*u(t,{status:`running`});let v=yield*i.getFlow(h.flowId,h.clientId),y=h.traceContext?r.Tracer.externalSpan({traceId:h.traceContext.traceId,spanId:h.traceContext.spanId,sampled:h.traceContext.traceFlags===1}):void 0,b=r.Effect.gen(function*(){let n=je(v,a,o);if(!h.executionState)return yield*r.Effect.fail(e.n.fromCode(`FLOW_JOB_ERROR`,{cause:`Job ${t} has no execution state`}));let i=yield*n.resume({jobId:t,storageId:h.storageId,nodeResults:g,executionState:{...h.executionState,inputs:_},clientId:h.clientId});return i.type===`paused`?yield*u(t,{status:`paused`,pausedAt:i.nodeId,executionState:i.executionState,updatedAt:new Date}):(yield*u(t,{status:`completed`,pausedAt:void 0,executionState:void 0,updatedAt:new Date,endedAt:new Date}),yield*d(t,l),yield*p({jobId:t,flowId:v.id,clientId:h.clientId,status:`completed`})),i}).pipe(r.Effect.withSpan(`flow-execution-resume`,{attributes:{"flow.id":v.id,"flow.name":v.name,"flow.job_id":t,"flow.storage_id":h.storageId,"flow.resumed_from_node":n},parent:y})).pipe(r.Effect.catchAll(n=>r.Effect.gen(function*(){yield*r.Effect.logError(`Flow resume failed`,n);let i=n instanceof e.n?n.body:String(n);yield*r.Effect.logInfo(`Updating job ${t} to failed status with error: ${i}`),yield*u(t,{status:`failed`,error:i,updatedAt:new Date}).pipe(r.Effect.catchAll(e=>r.Effect.gen(function*(){return yield*r.Effect.logError(`Failed to update job ${t}`,e),r.Effect.succeed(void 0)})));let c=yield*o.get(t);throw c&&(yield*a.emit(t,{jobId:t,eventType:`flow-error`,flowId:c.flowId,error:i}).pipe(r.Effect.catchAll(e=>r.Effect.gen(function*(){return yield*r.Effect.logError(`Failed to emit FlowError event for job ${t}`,e),r.Effect.succeed(void 0)})))),yield*d(t,l).pipe(r.Effect.catchAll(e=>r.Effect.gen(function*(){return yield*r.Effect.logWarning(`Failed to cleanup intermediate files for job ${t}`,e),r.Effect.succeed(void 0)}))),yield*r.Effect.gen(function*(){let e=yield*o.get(t);e&&e.activeUploads&&e.activeUploads.length>0&&(yield*r.Effect.logInfo(`Cleaning up ${e.activeUploads.length} active uploads for failed job ${t}`),yield*r.Effect.all(e.activeUploads.map(e=>r.Effect.gen(function*(){yield*s.delete(e,l),yield*r.Effect.logDebug(`Aborted active upload ${e} for failed job ${t}`)}).pipe(r.Effect.catchAll(t=>r.Effect.gen(function*(){return yield*r.Effect.logWarning(`Failed to abort active upload ${e}: ${t}`),r.Effect.succeed(void 0)})))),{concurrency:5}),yield*u(t,{activeUploads:[]}))}).pipe(r.Effect.catchAll(e=>r.Effect.gen(function*(){return yield*r.Effect.logWarning(`Failed to cleanup active uploads for job ${t}`,e),r.Effect.succeed(void 0)}))),yield*f(t,n instanceof e.n?n:new e.n({code:`UNKNOWN_ERROR`,status:500,body:String(n),cause:n})),yield*p({jobId:t,flowId:v.id,clientId:h.clientId,status:`failed`}),n}))).pipe(r.Effect.tapErrorCause(e=>r.Effect.logError(`Flow resume failed`,e)));if(r.Option.isSome(m)){console.log(`[FlowServer] Using waitUntil for resume job: ${t}`);let e=yield*r.Effect.runtime(),n=r.Runtime.runPromise(e)(b);m.value(n)}else console.log(`[FlowServer] Using Effect.forkDaemon for resume job: ${t}`),yield*r.Effect.forkDaemon(b);return(yield*o.get(t))||(yield*r.Effect.fail(e.n.fromCode(`FLOW_JOB_NOT_FOUND`,{cause:`Job ${t} not found after update`})))}),pauseFlow:(t,n)=>r.Effect.gen(function*(){let i=yield*o.get(t);if(!i)return yield*r.Effect.fail(e.n.fromCode(`FLOW_JOB_NOT_FOUND`,{cause:`Job ${t} not found`}));if(n!==null&&i.clientId!==n)return yield*r.Effect.fail(e.n.fromCode(`FLOW_NOT_AUTHORIZED`,{cause:`Client ${n} is not authorized to pause job ${t}`}));if(i.status!==`running`)return yield*r.Effect.fail(e.n.fromCode(`FLOW_JOB_ERROR`,{cause:`Job ${t} cannot be paused (current status: ${i.status})`}));let s=i.tasks.find(e=>e.status===`running`)?.nodeId;return yield*u(t,{status:`paused`,pausedAt:s,updatedAt:new Date}),yield*a.emit(t,{jobId:t,flowId:i.flowId,eventType:`flow-pause`,pausedAt:s}),(yield*o.get(t))||(yield*r.Effect.fail(e.n.fromCode(`FLOW_JOB_NOT_FOUND`,{cause:`Job ${t} not found after pause`})))}),cancelFlow:(t,n)=>r.Effect.gen(function*(){let i=yield*o.get(t);return i?n!==null&&i.clientId!==n?yield*r.Effect.fail(e.n.fromCode(`FLOW_NOT_AUTHORIZED`,{cause:`Client ${n} is not authorized to cancel job ${t}`})):i.status!==`running`&&i.status!==`paused`&&i.status!==`started`?yield*r.Effect.fail(e.n.fromCode(`FLOW_JOB_ERROR`,{cause:`Job ${t} cannot be cancelled (current status: ${i.status})`})):(yield*u(t,{status:`cancelled`,updatedAt:new Date,endedAt:new Date}),yield*a.emit(t,{jobId:t,flowId:i.flowId,eventType:`flow-cancel`}),i.activeUploads&&i.activeUploads.length>0&&(yield*r.Effect.logInfo(`Cleaning up ${i.activeUploads.length} active uploads for job ${t}`),yield*r.Effect.all(i.activeUploads.map(e=>r.Effect.gen(function*(){yield*s.delete(e,n),yield*r.Effect.logDebug(`Aborted active upload ${e} for job ${t}`)}).pipe(r.Effect.catchAll(t=>r.Effect.gen(function*(){return yield*r.Effect.logWarning(`Failed to abort active upload ${e}: ${t}`),r.Effect.succeed(void 0)})))),{concurrency:5}),yield*u(t,{activeUploads:[]})),yield*d(t,n),(yield*o.get(t))||(yield*r.Effect.fail(e.n.fromCode(`FLOW_JOB_NOT_FOUND`,{cause:`Job ${t} not found after cancellation`})))):yield*r.Effect.fail(e.n.fromCode(`FLOW_JOB_NOT_FOUND`,{cause:`Job ${t} 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(Y,Me());function Pe(e){let t=e.lastIndexOf(`.`);return t===-1||t===0?e:e.substring(0,t)}function Fe(e){let t=e.lastIndexOf(`.`);return t===-1||t===0?``:e.substring(t+1)}function Z(e,t,n){let r=e.metadata??{},i=r.fileName??r.originalName??r.name??`unnamed`;return{baseName:Pe(i),extension:Fe(i),fileName:i,nodeType:t.nodeType,nodeId:t.nodeId,flowId:t.flowId,jobId:t.jobId,timestamp:new Date().toISOString(),...n}}function Ie(e,t){try{let n={};for(let[e,r]of Object.entries(t))r!==void 0&&(n[e]=String(r));return(0,a.render)(e,n)}catch{return e}}function Q(e,t,n){let r=t.fileName;if(!n)return r;try{if(n.mode===`auto`){if(n.autoSuffix){let e=n.autoSuffix(t);if(e){let{baseName:n,extension:r}=t;return r?`${n}-${e}.${r}`:`${n}-${e}`}}return r}if(n.mode===`custom`){if(n.rename)return n.rename(e,t)||r;if(n.pattern)return Ie(n.pattern,t)||r}return r}catch{return r}}function Le(e){if(!e||e.trim()===``)return{isValid:!1,error:`Pattern cannot be empty`};let t=(e.match(/\{\{/g)||[]).length,n=(e.match(/\}\}/g)||[]).length;if(t!==n)return{isValid:!1,error:`Unbalanced braces: ${t} opening, ${n} closing`};let r=e.match(/\{\{[^}]*[^a-zA-Z0-9_}][^}]*\}\}/g);return r?{isValid:!1,error:`Invalid variable syntax: ${r[0]}`}:{isValid:!0}}const Re=[{name:`baseName`,description:`Filename without extension`,example:`photo`},{name:`extension`,description:`File extension without dot`,example:`jpg`},{name:`fileName`,description:`Full original filename`,example:`photo.jpg`},{name:`nodeType`,description:`Type of processing node`,example:`resize`},{name:`nodeId`,description:`Specific node instance ID`,example:`resize-1`},{name:`flowId`,description:`Flow identifier`,example:`flow-abc`},{name:`jobId`,description:`Execution job ID`,example:`job-123`},{name:`timestamp`,description:`ISO 8601 processing time`,example:`2024-01-15T10:30:00Z`},{name:`width`,description:`Output width (image/video)`,example:`800`},{name:`height`,description:`Output height (image/video)`,example:`600`},{name:`format`,description:`Output format`,example:`webp`},{name:`quality`,description:`Quality setting`,example:`80`},{name:`pageNumber`,description:`Page number (documents)`,example:`1`}];function $(e){return!(`stream`in e)}function ze({id:e,name:i,description:a,outputTypeId:o,keepOutput:s,naming:c,nodeType:l=`transform`,nodeTypeId:u,namingVars:d,circuitBreaker:f,mode:p=`auto`,streamingConfig:m,transform:h,streamingTransform:g}){if(p===`streaming`&&!g)throw Error(`Transform node "${e}": mode is "streaming" but no streamingTransform function provided`);if(p===`buffered`&&!h)throw Error(`Transform node "${e}": mode is "buffered" but no transform function provided`);if(p===`auto`&&!h&&!g)throw Error(`Transform node "${e}": mode is "auto" but neither transform nor streamingTransform provided`);let _={...t.DEFAULT_STREAMING_CONFIG,...m};return r.Effect.gen(function*(){let m=yield*n.n;return yield*C({id:e,name:i,description:a,type:`process`,outputTypeId:o,keepOutput:s,nodeTypeId:u,circuitBreaker:f,inputSchema:t.uploadFileSchema,outputSchema:t.uploadFileSchema,run:({data:t,storageId:n,flowId:i,jobId:a,clientId:o})=>r.Effect.gen(function*(){let s={flowId:i,nodeId:e,jobId:a},u=yield*r.Effect.gen(function*(){if(p===`buffered`)return!1;if(p===`streaming`)return!0;let e=t.size??0,i=_.fileSizeThreshold;return e>0&&e<i?(yield*r.Effect.logDebug(`File ${t.id} (${e} bytes) below threshold (${i}), using buffered mode`),!1):g?(yield*m.getCapabilities(n,o)).supportsStreamingRead?(yield*r.Effect.logDebug(`File ${t.id} qualifies for streaming mode`),!0):(yield*r.Effect.logDebug(`DataStore doesn't support streaming read, using buffered mode`),!1):(yield*r.Effect.logDebug(`No streamingTransform function, using buffered mode`),!1)}),{type:f,fileName:v,metadata:y,metadataJson:b}=A(t.metadata);if(u&&g){yield*r.Effect.logDebug(`Using streaming transform for ${t.id}`);let u=yield*g(yield*m.readStream(t.id,o,_),t),p=$(u)?u:u.stream,h=$(u)?void 0:u.type,x=$(u)?void 0:u.estimatedSize,S=$(u)?void 0:u.fileName;!S&&c&&(S=Q(t,Z(t,{flowId:i,jobId:a,nodeId:e,nodeType:l},d),c));let C=yield*m.getCapabilities(n,o),w;if(C.supportsStreamingWrite)yield*r.Effect.logDebug(`Using streaming write for ${t.id} - no intermediate buffering`),w=yield*m.uploadStream({storageId:n,uploadLengthDeferred:!0,sizeHint:x,type:h??f,fileName:S??v,lastModified:0,metadata:b,flow:s},o,p);else{yield*r.Effect.logDebug(`Falling back to buffered upload for ${t.id} (streaming write not supported)`);let e=[];yield*r.Stream.runForEach(p,t=>r.Effect.sync(()=>{e.push(t)}));let i=e.reduce((e,t)=>e+t.byteLength,0),a=new Uint8Array(i),c=0;for(let t of e)a.set(t,c),c+=t.byteLength;let l=new ReadableStream({start(e){e.enqueue(a),e.close()}});w=yield*m.upload({storageId:n,size:a.byteLength,type:h??f,fileName:S??v,lastModified:0,metadata:b,flow:s},o,l)}let T=y?{...y,...h&&{mimeType:h,type:h,"content-type":h},...S&&{fileName:S,originalName:S,name:S,extension:S.split(`.`).pop()||y.extension}}:w.metadata;return O(T?{...w,metadata:T}:w)}if(!h)throw Error(`Transform node "${e}": buffered mode selected but no transform function provided`);let x=yield*h(yield*m.read(t.id,o),t),S=x instanceof Uint8Array?x:x.bytes,C=x instanceof Uint8Array?void 0:x.type,w=x instanceof Uint8Array?void 0:x.fileName,T=x instanceof Uint8Array?void 0:x.metadata;!w&&c&&(w=Q(t,Z(t,{flowId:i,jobId:a,nodeId:e,nodeType:l},d),c));let E=new ReadableStream({start(e){e.enqueue(S),e.close()}}),D=yield*m.upload({storageId:n,size:S.byteLength,type:C??f,fileName:w??v,lastModified:0,metadata:b,flow:s},o,E),k=y?{...y,...T,...C&&{mimeType:C,type:C,"content-type":C},...w&&{fileName:w,originalName:w,name:w,extension:w.split(`.`).pop()||y.extension}}:D.metadata;return O(k?{...D,metadata:k}:D)})})})}var Be=class extends r.Context.Tag(`CredentialProvider`)(){},Ve=class extends r.Context.Tag(`DocumentAiPlugin`)(){},He=class extends r.Context.Tag(`DocumentPlugin`)(){},Ue=class extends r.Context.Tag(`ImageAiPlugin`)(){},We=class extends r.Context.Tag(`ImagePlugin`)(){};const Ge=i.z.object({serviceType:i.z.enum([`replicate`]).optional()}),Ke=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()}),qe=i.z.object({timestamp:i.z.number().nonnegative(),format:i.z.enum([`png`,`jpeg`]).optional(),quality:i.z.number().min(1).max(100).optional()}),Je=i.z.object({quality:i.z.number().min(0).max(100),format:i.z.enum([`jpeg`,`webp`,`png`,`avif`])}),Ye=i.z.object({serviceType:i.z.enum([`replicate`]).optional()}),Xe=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`),Ze=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`),Qe=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()}),$e=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`])}),et=i.z.object({type:i.z.literal(`blur`),sigma:i.z.number().min(.3).max(1e3)}),tt=i.z.object({type:i.z.literal(`rotate`),angle:i.z.number(),background:i.z.string().optional()}),nt=i.z.object({type:i.z.literal(`flip`),direction:i.z.enum([`horizontal`,`vertical`])}),rt=i.z.object({type:i.z.literal(`grayscale`)}),it=i.z.object({type:i.z.literal(`sepia`)}),at=i.z.object({type:i.z.literal(`brightness`),value:i.z.number().min(-100).max(100)}),ot=i.z.object({type:i.z.literal(`contrast`),value:i.z.number().min(-100).max(100)}),st=i.z.object({type:i.z.literal(`sharpen`),sigma:i.z.number().positive().optional()}),ct=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()}),lt=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()}),ut=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()}),dt=i.z.discriminatedUnion(`type`,[$e,et,tt,nt,rt,it,at,ot,st,ct,lt,ut]),ft=i.z.object({transformations:i.z.array(dt).min(1)}),pt=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 mt=class extends r.Context.Tag(`VideoPlugin`)(){},ht=class extends r.Context.Tag(`VirusScanPlugin`)(){},gt=class extends r.Context.Tag(`ZipPlugin`)(){};const _t=(e,t)=>{if(e.length===0)return t;let[n,...r]=e;return r.reduce((e,t)=>i.z.union([e,t]),n)};function vt(t){return r.Effect.gen(function*(){let n=Object.entries(t.nodes),a=e=>r.Effect.isEffect(e)?e:r.Effect.succeed(e),o=yield*r.Effect.forEach(n,([t,n])=>r.Effect.flatMap(a(n),n=>n.id===t?r.Effect.succeed([t,n]):r.Effect.fail(e.n.fromCode(`FLOW_NODE_ERROR`,{cause:Error(`Node key ${t} does not match node id ${n.id}`)})))),s=Object.fromEntries(o),c=o.map(([,e])=>e),l=o.filter(([,e])=>e.type===`input`).map(([,e])=>e.inputSchema),u=t.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)||e.keepOutput===!0).map(([,e])=>e.outputSchema),p=t.inputSchema??_t(l,i.z.unknown()),m=t.outputSchema??_t(f,i.z.unknown());return yield*G({flowId:t.flowId,name:t.name,nodes:c,edges:u,inputSchema:p,outputSchema:m,typeChecker:t.typeChecker,onEvent:t.onEvent,parallelExecution:t.parallelExecution,hooks:t.hooks,circuitBreaker:t.circuitBreaker})})}const yt=i.z.object({inputs:i.z.record(i.z.string(),i.z.any())});Object.defineProperty(exports,"$",{enumerable:!0,get:function(){return Ce}}),Object.defineProperty(exports,"$t",{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,"A",{enumerable:!0,get:function(){return Ue}}),Object.defineProperty(exports,"At",{enumerable:!0,get:function(){return ne}}),Object.defineProperty(exports,"B",{enumerable:!0,get:function(){return Ie}}),Object.defineProperty(exports,"Bt",{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,"C",{enumerable:!0,get:function(){return Xe}}),Object.defineProperty(exports,"Ct",{enumerable:!0,get:function(){return I}}),Object.defineProperty(exports,"D",{enumerable:!0,get:function(){return Ke}}),Object.defineProperty(exports,"Dt",{enumerable:!0,get:function(){return ae}}),Object.defineProperty(exports,"E",{enumerable:!0,get:function(){return qe}}),Object.defineProperty(exports,"Et",{enumerable:!0,get:function(){return oe}}),Object.defineProperty(exports,"F",{enumerable:!0,get:function(){return Re}}),Object.defineProperty(exports,"Ft",{enumerable:!0,get:function(){return D}}),Object.defineProperty(exports,"G",{enumerable:!0,get:function(){return q}}),Object.defineProperty(exports,"Gt",{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,"H",{enumerable:!0,get:function(){return Y}}),Object.defineProperty(exports,"Ht",{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,"I",{enumerable:!0,get:function(){return Q}}),Object.defineProperty(exports,"It",{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,"J",{enumerable:!0,get:function(){return K}}),Object.defineProperty(exports,"Jt",{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,"K",{enumerable:!0,get:function(){return Me}}),Object.defineProperty(exports,"Kt",{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,"L",{enumerable:!0,get:function(){return Z}}),Object.defineProperty(exports,"Lt",{enumerable:!0,get:function(){return S}}),Object.defineProperty(exports,"M",{enumerable:!0,get:function(){return Ve}}),Object.defineProperty(exports,"Mt",{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,"N",{enumerable:!0,get:function(){return Be}}),Object.defineProperty(exports,"Nt",{enumerable:!0,get:function(){return T}}),Object.defineProperty(exports,"O",{enumerable:!0,get:function(){return Ge}}),Object.defineProperty(exports,"Ot",{enumerable:!0,get:function(){return ie}}),Object.defineProperty(exports,"P",{enumerable:!0,get:function(){return ze}}),Object.defineProperty(exports,"Pt",{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,"Q",{enumerable:!0,get:function(){return G}}),Object.defineProperty(exports,"Qt",{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,"R",{enumerable:!0,get:function(){return Pe}}),Object.defineProperty(exports,"Rt",{enumerable:!0,get:function(){return C}}),Object.defineProperty(exports,"S",{enumerable:!0,get:function(){return Ze}}),Object.defineProperty(exports,"St",{enumerable:!0,get:function(){return L}}),Object.defineProperty(exports,"T",{enumerable:!0,get:function(){return Je}}),Object.defineProperty(exports,"Tt",{enumerable:!0,get:function(){return R}}),Object.defineProperty(exports,"U",{enumerable:!0,get:function(){return ke}}),Object.defineProperty(exports,"Ut",{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,"V",{enumerable:!0,get:function(){return Le}}),Object.defineProperty(exports,"Vt",{enumerable:!0,get:function(){return b}}),Object.defineProperty(exports,"W",{enumerable:!0,get:function(){return J}}),Object.defineProperty(exports,"Wt",{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,"X",{enumerable:!0,get:function(){return Te}}),Object.defineProperty(exports,"Xt",{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,"Y",{enumerable:!0,get:function(){return De}}),Object.defineProperty(exports,"Yt",{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,"Z",{enumerable:!0,get:function(){return we}}),Object.defineProperty(exports,"Zt",{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,"_",{enumerable:!0,get:function(){return ut}}),Object.defineProperty(exports,"_t",{enumerable:!0,get:function(){return ue}}),Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return mt}}),Object.defineProperty(exports,"at",{enumerable:!0,get:function(){return ve}}),Object.defineProperty(exports,"b",{enumerable:!0,get:function(){return ct}}),Object.defineProperty(exports,"bt",{enumerable:!0,get:function(){return ce}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return at}}),Object.defineProperty(exports,"ct",{enumerable:!0,get:function(){return ye}}),Object.defineProperty(exports,"d",{enumerable:!0,get:function(){return rt}}),Object.defineProperty(exports,"dt",{enumerable:!0,get:function(){return U}}),Object.defineProperty(exports,"en",{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,"et",{enumerable:!0,get:function(){return H}}),Object.defineProperty(exports,"f",{enumerable:!0,get:function(){return lt}}),Object.defineProperty(exports,"ft",{enumerable:!0,get:function(){return Se}}),Object.defineProperty(exports,"g",{enumerable:!0,get:function(){return st}}),Object.defineProperty(exports,"gt",{enumerable:!0,get:function(){return le}}),Object.defineProperty(exports,"h",{enumerable:!0,get:function(){return it}}),Object.defineProperty(exports,"ht",{enumerable:!0,get:function(){return V}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return ht}}),Object.defineProperty(exports,"it",{enumerable:!0,get:function(){return he}}),Object.defineProperty(exports,"j",{enumerable:!0,get:function(){return He}}),Object.defineProperty(exports,"jt",{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,"k",{enumerable:!0,get:function(){return We}}),Object.defineProperty(exports,"kt",{enumerable:!0,get:function(){return P}}),Object.defineProperty(exports,"l",{enumerable:!0,get:function(){return ot}}),Object.defineProperty(exports,"lt",{enumerable:!0,get:function(){return pe}}),Object.defineProperty(exports,"m",{enumerable:!0,get:function(){return tt}}),Object.defineProperty(exports,"mt",{enumerable:!0,get:function(){return de}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return vt}}),Object.defineProperty(exports,"nt",{enumerable:!0,get:function(){return ge}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return pt}}),Object.defineProperty(exports,"ot",{enumerable:!0,get:function(){return be}}),Object.defineProperty(exports,"p",{enumerable:!0,get:function(){return $e}}),Object.defineProperty(exports,"pt",{enumerable:!0,get:function(){return xe}}),Object.defineProperty(exports,"q",{enumerable:!0,get:function(){return Ne}}),Object.defineProperty(exports,"qt",{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return gt}}),Object.defineProperty(exports,"rt",{enumerable:!0,get:function(){return _e}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return et}}),Object.defineProperty(exports,"st",{enumerable:!0,get:function(){return me}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return yt}}),Object.defineProperty(exports,"tt",{enumerable:!0,get:function(){return W}}),Object.defineProperty(exports,"u",{enumerable:!0,get:function(){return nt}}),Object.defineProperty(exports,"ut",{enumerable:!0,get:function(){return fe}}),Object.defineProperty(exports,"v",{enumerable:!0,get:function(){return ft}}),Object.defineProperty(exports,"vt",{enumerable:!0,get:function(){return z}}),Object.defineProperty(exports,"w",{enumerable:!0,get:function(){return Ye}}),Object.defineProperty(exports,"wt",{enumerable:!0,get:function(){return F}}),Object.defineProperty(exports,"x",{enumerable:!0,get:function(){return Qe}}),Object.defineProperty(exports,"xt",{enumerable:!0,get:function(){return se}}),Object.defineProperty(exports,"y",{enumerable:!0,get:function(){return dt}}),Object.defineProperty(exports,"yt",{enumerable:!0,get:function(){return B}}),Object.defineProperty(exports,"z",{enumerable:!0,get:function(){return Fe}}),Object.defineProperty(exports,"zt",{enumerable:!0,get:function(){return w}});
|