import { type FarmIntegrationLogger } from "@farm.js/core"; import type { FarmIntegrationAPIOperation } from "@farm.js/core/client"; export type JobsRuntimeKind = "trigger" | "inngest"; export type JobsRunStatus = "queued" | "delayed" | "running" | "waiting" | "completed" | "failed" | "canceled" | "expired" | "unknown"; export interface JobsRuntimeCapabilities { readonly delay: boolean; readonly schedule: boolean; readonly debounce: boolean; readonly tags: boolean; readonly cancel: boolean; readonly batchTrigger: boolean; readonly queue: boolean; readonly retry: boolean; readonly ttl: boolean; readonly concurrencyKey: boolean; readonly idempotencyKey: boolean; } export interface JobsTaskQueueDefinition { name: string; concurrencyLimit?: number; } export interface JobsTaskRetryDefinition { attempts?: number; } export interface JobsTaskScheduleDefinition { cron: string; timezone?: string; } export type JobsTaskSchedule = string | JobsTaskScheduleDefinition; export interface JobsTaskContext { runtime: JobsRuntimeKind; task: { key: string; id: string; }; logger: Pick; } export interface JobsTaskDefaults { queue?: string | JobsTaskQueueDefinition; retry?: false | JobsTaskRetryDefinition; ttl?: string | number; concurrencyKey?: string | ((input: TInput) => string); idempotencyKey?: string | ((input: TInput) => string); tags?: readonly string[]; } export interface JobsTaskInput { id?: string; description?: string; schedule?: JobsTaskSchedule; defaults?: JobsTaskDefaults; run(input: TInput, context: JobsTaskContext): Promise | TOutput; } export interface JobsTaskDefinition extends JobsTaskInput { readonly kind: "farm-jobs-task"; } export type JobsTaskMap = Record>; export type InferJobsTaskInput = TTask extends JobsTaskDefinition ? TInput : never; export type InferJobsTaskOutput = TTask extends JobsTaskDefinition ? TOutput : never; export type JobsTriggerBody = [TInput] extends [void] ? { $options?: JobsTriggerOptions; } : (TInput extends object ? TInput & { $options?: JobsTriggerOptions; } : { value: TInput; $options?: JobsTriggerOptions; }) | JobsLegacyTriggerBody; export type JobsBatchTriggerItem = [TInput] extends [void] ? { $options?: JobsTriggerOptions; } : JobsTriggerBody; export interface JobsBatchTriggerBody { items: JobsBatchTriggerItem[]; } export interface JobsScheduleOptions { debounce?: JobsDebounceOptions; idempotencyKey?: string; tags?: readonly string[]; } export interface JobsScheduleConfig extends JobsScheduleOptions { at?: string | Date; after?: string | number; } export type JobsScheduleBody = [TInput] extends [void] ? { $schedule: JobsScheduleConfig; } : (TInput extends object ? TInput & { $schedule: JobsScheduleConfig; } : { value: TInput; $schedule: JobsScheduleConfig; }) | JobsLegacyScheduleBody; export type JobsLegacyTriggerBody = [TInput] extends [void] ? { input?: undefined; options?: JobsTriggerOptions; } : { input: TInput; options?: JobsTriggerOptions; }; export type JobsLegacyScheduleBody = [TInput] extends [void] ? { input?: undefined; at?: string | Date; after?: string | number; options?: JobsScheduleOptions; } : { input: TInput; at?: string | Date; after?: string | number; options?: JobsScheduleOptions; }; export interface JobsDebounceOptions { key: string; delay: string | number | Date; } export interface JobsTriggerOptions { delay?: string | number | Date; debounce?: JobsDebounceOptions; idempotencyKey?: string; tags?: readonly string[]; } export interface JobsTriggerResult { handleId: string; task: string; runtime: JobsRuntimeKind; queuedAt: string; providerTaskId: string; } export interface JobsScheduleResult extends JobsTriggerResult { scheduledFor: string | number; } export interface JobsBatchTriggerRunResult { index: number; handleId: string; queuedAt: string; } export interface JobsBatchTriggerResult { batchId: string | null; task: string; runtime: JobsRuntimeKind; providerTaskId: string; runs: JobsBatchTriggerRunResult[]; } export interface JobsStatusQuery { handleId: string; } export interface JobsCancelBody { handleId: string; } export interface JobsRunStatusResult { handleId: string; providerRunId: string | null; task: string; runtime: JobsRuntimeKind; status: JobsRunStatus; providerStatus: string | null; queuedAt: string | null; startedAt: string | null; finishedAt: string | null; output: TOutput | null; error: unknown; tags: string[]; raw: unknown; } export interface JobsCancelResult { handleId: string; task: string; runtime: JobsRuntimeKind; canceled: true; } export interface JobsTaskMetadata { key: string; id: string; remoteId: string; description: string | null; schedule: JobsTaskSchedule | null; runtime: JobsRuntimeKind; configured: boolean; capabilities: JobsRuntimeCapabilities; paths: { trigger: string; schedule: string; batchTrigger: string; status: string; cancel: string; }; defaults: { queue: JobsTaskQueueDefinition | null; retryAttempts: number | null; ttl: string | number | null; tags: string[]; hasConcurrencyKey: boolean; hasIdempotencyKey: boolean; }; } export interface TriggerJobsRuntimeConfig { projectRef?: string; apiKey?: string; webhookSecret?: string; apiBaseUrl?: string; } export interface InngestJobsRuntimeConfig { appId?: string; eventKey?: string; signingKey?: string; eventBaseUrl?: string; apiBaseUrl?: string; eventNamePrefix?: string; } export interface TriggerJobsRuntimeDefinition { kind: "trigger"; config: TriggerJobsRuntimeConfig; } export interface InngestJobsRuntimeDefinition { kind: "inngest"; config: InngestJobsRuntimeConfig; } export type JobsRuntimeDefinition = TriggerJobsRuntimeDefinition | InngestJobsRuntimeDefinition; interface ResolvedTriggerJobsConfig { kind: "trigger"; projectRef: string; apiKey: string; webhookSecret: string; apiBaseUrl: string; } interface ResolvedInngestJobsConfig { kind: "inngest"; appId: string; eventKey: string; signingKey: string; eventBaseUrl: string; apiBaseUrl: string; eventNamePrefix: string; } export interface JobsIntegrationInputBase { basePath?: string; tasks: TTasks; log?: FarmIntegrationLogger; } type JobsIntegrationRuntimeInput = JobsIntegrationInputBase & { runtime: JobsRuntimeDefinition; trigger?: never; inngest?: never; }; type JobsIntegrationLegacyInput = (JobsIntegrationInputBase & { trigger: TriggerJobsRuntimeConfig; inngest?: never; runtime?: never; }) | (JobsIntegrationInputBase & { inngest: InngestJobsRuntimeConfig; trigger?: never; runtime?: never; }); export type JobsIntegrationInput = JobsIntegrationRuntimeInput | JobsIntegrationLegacyInput; type JobsAPI = { [TKey in keyof TTasks & string]: { trigger: FarmIntegrationAPIOperation>, never, JobsTriggerResult, false, "POST">; schedule: FarmIntegrationAPIOperation>, never, JobsScheduleResult, false, "POST">; batchTrigger: FarmIntegrationAPIOperation>, never, JobsBatchTriggerResult, false, "POST">; status: FarmIntegrationAPIOperation>, false, "GET">; cancel: FarmIntegrationAPIOperation; }; } & { tasks: { list: FarmIntegrationAPIOperation; }; }; export declare function task(input: JobsTaskInput): JobsTaskDefinition; export declare function defineTasks(tasks: TTasks): TTasks; export declare function trigger(config: TriggerJobsRuntimeConfig): TriggerJobsRuntimeDefinition; export declare function inngest(config: InngestJobsRuntimeConfig): InngestJobsRuntimeDefinition; export declare function jobs(input: JobsIntegrationInput): import("@farm.js/core").DefinedIntegration<{ category: "automation"; type: string; instance: { runtime: JobsRuntimeKind; configured: boolean; tasks: JobsTaskMetadata[]; }; config: import("@farm.js/core").FarmIntegrationConfigDefinition | import("@farm.js/core").FarmIntegrationConfigDefinition; api: JobsAPI; log: FarmIntegrationLogger | undefined; routes: (import("@farm.js/core").FarmTypedIntegrationRoute | import("@farm.js/core").FarmTypedIntegrationRoute>, never, JobsTriggerResult, false, "POST", import("@farm.js/core").FarmIntegrationSchema | undefined> | import("@farm.js/core").FarmTypedIntegrationRoute>, never, JobsBatchTriggerResult, false, "POST", import("@farm.js/core").FarmIntegrationSchema | undefined> | import("@farm.js/core").FarmTypedIntegrationRoute>, never, JobsScheduleResult, false, "POST", import("@farm.js/core").FarmIntegrationSchema | undefined> | import("@farm.js/core").FarmTypedIntegrationRoute>, false, "GET", import("@farm.js/core").FarmIntegrationSchema | undefined> | import("@farm.js/core").FarmTypedIntegrationRoute)[]; }>; export {}; //# sourceMappingURL=index.d.ts.map