Skip to content

FluxbaseJobs

Jobs client for submitting and monitoring background jobs

For admin operations (create job functions, manage workers, view all jobs), use client.admin.jobs

new FluxbaseJobs(fetch, isServiceRole?): FluxbaseJobs

ParameterTypeDefault value
fetchFluxbaseFetchundefined
isServiceRolebooleanfalse

FluxbaseJobs

cancel(jobId): Promise<{ data: null; error: Error | null; }>

Cancel a pending or running job

ParameterTypeDescription
jobIdstringJob ID to cancel

Promise<{ data: null; error: Error | null; }>

Promise resolving to { data, error } tuple

const { error } = await client.jobs.cancel('550e8400-e29b-41d4-a716-446655440000')
if (!error) {
console.log('Job cancelled successfully')
}

get(jobId): Promise<{ data: Job | null; error: Error | null; }>

Get status and details of a specific job

ParameterTypeDescription
jobIdstringJob ID

Promise<{ data: Job | null; error: Error | null; }>

Promise resolving to { data, error } tuple with job details

const { data: job, error } = await client.jobs.get('550e8400-e29b-41d4-a716-446655440000')
if (job) {
console.log('Status:', job.status)
console.log('Progress:', job.progress_percent + '%')
console.log('Result:', job.result)
console.log('Logs:', job.logs)
}

getLogs(jobId, afterLine?): Promise<{ data: ExecutionLog[] | null; error: Error | null; }>

Get execution logs for a job

Returns logs for the specified job. Only returns logs for jobs owned by the authenticated user (unless using service_role).

ParameterTypeDescription
jobIdstringJob ID
afterLine?numberOptional line number to get logs after (for polling/streaming)

Promise<{ data: ExecutionLog[] | null; error: Error | null; }>

Promise resolving to { data, error } tuple with execution logs

// Get all logs for a job
const { data: logs, error } = await client.jobs.getLogs('550e8400-e29b-41d4-a716-446655440000')
if (logs) {
for (const log of logs) {
console.log(`[${log.level}] ${log.message}`)
}
}
// Backfill + stream pattern
const { data: logs } = await client.jobs.getLogs(jobId)
let lastLine = Math.max(...(logs?.map(l => l.line_number) ?? []), 0)
const channel = client.realtime
.executionLogs(jobId, 'job')
.onLog((log) => {
if (log.line_number > lastLine) {
displayLog(log)
lastLine = log.line_number
}
})
.subscribe()

list(filters?): Promise<{ data: Job[] | null; error: Error | null; }>

List jobs submitted by the current user

ParameterTypeDescription
filters?{ includeResult?: boolean; limit?: number; namespace?: string; offset?: number; status?: string; }Optional filters (status, namespace, limit, offset)
filters.includeResult?boolean-
filters.limit?number-
filters.namespace?string-
filters.offset?number-
filters.status?string-

Promise<{ data: Job[] | null; error: Error | null; }>

Promise resolving to { data, error } tuple with array of jobs

// List all your jobs
const { data: jobs, error } = await client.jobs.list()
// Filter by status
const { data: running } = await client.jobs.list({
status: 'running'
})
// Paginate
const { data: page } = await client.jobs.list({
limit: 20,
offset: 40
})

retry(jobId): Promise<{ data: Job | null; error: Error | null; }>

Retry a failed job

Creates a new job execution with the same parameters

ParameterTypeDescription
jobIdstringJob ID to retry

Promise<{ data: Job | null; error: Error | null; }>

Promise resolving to { data, error } tuple with new job

const { data: newJob, error } = await client.jobs.retry('550e8400-e29b-41d4-a716-446655440000')
if (newJob) {
console.log('Job retried, new ID:', newJob.id)
}

submit(jobName, payload?, options?): Promise<{ data: Job | null; error: Error | null; }>

Submit a new job for execution

ParameterTypeDescription
jobNamestringName of the job function to execute
payload?unknownJob input data
options?{ namespace?: string; onBehalfOf?: OnBehalfOf; priority?: number; scheduled?: string; }Additional options (priority, namespace, scheduled time, onBehalfOf)
options.namespace?string-
options.onBehalfOf?OnBehalfOfSubmit job on behalf of another user (service_role only). The job will be created with the specified user’s identity, allowing them to see the job and its logs via RLS. If not provided, the current user’s identity and role from user_profiles will be automatically included.
options.priority?number-
options.scheduled?string-

Promise<{ data: Job | null; error: Error | null; }>

Promise resolving to { data, error } tuple with submitted job details

// Submit a simple job
const { data, error } = await client.jobs.submit('send-email', {
to: 'user@example.com',
subject: 'Hello',
body: 'Welcome!'
})
if (data) {
console.log('Job submitted:', data.id)
console.log('Status:', data.status)
}
// Submit with priority
const { data } = await client.jobs.submit('high-priority-task', payload, {
priority: 10
})
// Schedule for later
const { data } = await client.jobs.submit('scheduled-task', payload, {
scheduled: '2025-01-01T00:00:00Z'
})
// Submit on behalf of a user (service_role only)
const { data } = await serviceClient.jobs.submit('user-task', payload, {
onBehalfOf: {
user_id: 'user-uuid',
user_email: 'user@example.com'
}
})