import { ZodRawShape, ZodTypeAny, z } from 'zod' import * as types from './types' export abstract class BaseTaskCallBuilder< TInput extends ZodRawShape | ZodTypeAny = ZodTypeAny, TOutput extends ZodRawShape | ZodTypeAny = z.ZodTypeAny > { protected _inputSchema: TInput protected _outputSchema: TOutput protected _timeoutMs: number protected _retryConfig: types.RetryConfig constructor(options: types.BaseTaskOptions) { this._inputSchema = options.inputSchema this._outputSchema = options.outputSchema this._timeoutMs = options.timeoutMs this._retryConfig = options.retryConfig } input( inputSchema: U ): BaseTaskCallBuilder { ;(this as unknown as BaseTaskCallBuilder)._inputSchema = inputSchema return this as unknown as BaseTaskCallBuilder } output( outputSchema: U ): BaseTaskCallBuilder { ;(this as unknown as BaseTaskCallBuilder)._outputSchema = outputSchema return this as unknown as BaseTaskCallBuilder } retry(retryConfig: types.RetryConfig) { this._retryConfig = retryConfig return this } abstract call( input?: types.ParsedData ): Promise> // TODO // abstract stream({ // input: TInput, // onProgress: types.ProgressFunction // }): Promise }