@nextera.one/tes-queue
v1.0.0
Published
TES Queue — temporal-intent job orchestration powered by TES with pluggable storage adapters
Maintainers
Readme
@nextera.one/tes-queue
TES Queue — temporal-intent jobs powered by TES
TES Queue treats time as part of the job contract.
Instead of only storing a raw delay or timestamp, a job can carry TES timing, retry timing, expiry rules, TPS evidence, and relational metadata.
Install
npm install @nextera.one/tes-queueQuick Start
import {
InMemoryTesQueueStorageAdapter,
TesQueue,
} from "@nextera.one/tes-queue";
const queue = new TesQueue({
storage: new InMemoryTesQueueStorageAdapter(),
location: { lat: 31.9539, lng: 35.9106 },
});
await queue.add({
queue: "reports",
name: "send-report",
payload: { reportId: "rpt-001" },
tes: "tes://2026/April[6^10]@10:00!weekend",
retryTes: "tes://2026/April[20]@12:00",
maxAttempts: 3,
uniqueKey: "reports:rpt-001",
});
await queue.dispatch(async (job) => {
console.log(`Running ${job.name} from ${job.queue}`);
});Core Concepts
tes: When a job becomes eligible.retryTes: When a failed job becomes eligible again.expiresTesorexpiresAt: When the job should be marked expired.uniqueKey: Prevent duplicate in-flight work.location: Optional GPS location used for TPS evidence.
Included Adapter
The package ships with InMemoryTesQueueStorageAdapter for local use and tests.
The storage contract is exposed as TesQueueStorageAdapter so you can build adapters for Dobase, SQL, or any other persistence engine without changing queue semantics.
Dobase Direction
TES Queue is structured so a Dobase adapter can own:
- durable job storage
- indexed queue/status queries
- realtime lifecycle broadcasting
- relational links to workflows, projects, and tenants
TES still owns temporal parsing and resolution. The queue still owns execution state and retry semantics.
Lifecycle
Jobs move through these states:
waiting -> eligible -> claimed -> active -> completed
Failure paths:
active -> waiting when a retry is scheduled
active -> failed when there is no retry path
active -> dead when attempts are exhausted
waiting|eligible -> expired when the validity window closes
License
MIT — Nextera.one
