diff --git a/src/core/minions/queue.ts b/src/core/minions/queue.ts index 359756530..1b35dc118 100644 --- a/src/core/minions/queue.ts +++ b/src/core/minions/queue.ts @@ -113,13 +113,13 @@ export class MinionQueue { ? `INSERT INTO minion_jobs (name, queue, status, priority, data, max_attempts, backoff_type, backoff_delay, backoff_jitter, delay_until, parent_job_id, on_child_fail, depth, max_children, timeout_ms, remove_on_complete, remove_on_fail, idempotency_key) - VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18) + VALUES ($1, $2, $3, $4, $5::jsonb, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18) ON CONFLICT (idempotency_key) WHERE idempotency_key IS NOT NULL DO NOTHING RETURNING *` : `INSERT INTO minion_jobs (name, queue, status, priority, data, max_attempts, backoff_type, backoff_delay, backoff_jitter, delay_until, parent_job_id, on_child_fail, depth, max_children, timeout_ms, remove_on_complete, remove_on_fail, idempotency_key) - VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18) + VALUES ($1, $2, $3, $4, $5::jsonb, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18) RETURNING *`; const params = [ @@ -127,7 +127,7 @@ export class MinionQueue { opts?.queue ?? 'default', childStatus, opts?.priority ?? 0, - JSON.stringify(data ?? {}), + data ?? {}, opts?.max_attempts ?? 3, opts?.backoff_type ?? 'exponential', opts?.backoff_delay ?? 1000, @@ -450,11 +450,11 @@ export class MinionQueue { } const rows = await tx.executeRaw>( - `UPDATE minion_jobs SET status = 'completed', result = $1, + `UPDATE minion_jobs SET status = 'completed', result = $1::jsonb, finished_at = now(), lock_token = NULL, lock_until = NULL, updated_at = now() WHERE id = $2 AND status = 'active' AND lock_token = $3 RETURNING *`, - [result ? JSON.stringify(result) : null, id, lockToken] + [result ?? null, id, lockToken] ); if (rows.length === 0) return null; @@ -841,7 +841,7 @@ export class MinionQueue { const params: unknown[] = [parentId]; let sinceClause = ''; if (opts?.since) { - sinceClause = ` AND sent_at > $2`; + sinceClause = ` AND sent_at > $2::timestamptz`; params.push(opts.since.toISOString()); } diff --git a/src/core/minions/types.ts b/src/core/minions/types.ts index 2238ab328..12b28e81c 100644 --- a/src/core/minions/types.ts +++ b/src/core/minions/types.ts @@ -284,7 +284,7 @@ export function rowToMinionJob(row: Record): MinionJob { lock_token: (row.lock_token as string) || null, lock_until: row.lock_until ? new Date(row.lock_until as string) : null, delay_until: row.delay_until ? new Date(row.delay_until as string) : null, - parent_job_id: (row.parent_job_id as number) || null, + parent_job_id: (row.parent_job_id as number | null) ?? null, on_child_fail: row.on_child_fail as ChildFailPolicy, tokens_input: (row.tokens_input as number) ?? 0, tokens_output: (row.tokens_output as number) ?? 0,