From 5a61fc8d350d1f5593385aeb067c61290632292f Mon Sep 17 00:00:00 2001
From: arash-jj
Date: Fri, 29 May 2026 17:43:09 +0330
Subject: [PATCH 01/16] add doc files
---
docs/architecture.md | 16 +++++++++++++
docs/client.md | 26 +++++++++++++++++++++
docs/core.md | 49 ++++++++++++++++++++++++++++++++++++++++
docs/getting-started.md | 50 +++++++++++++++++++++++++++++++++++++++++
docs/server.md | 26 +++++++++++++++++++++
5 files changed, 167 insertions(+)
create mode 100644 docs/architecture.md
create mode 100644 docs/client.md
create mode 100644 docs/core.md
create mode 100644 docs/getting-started.md
create mode 100644 docs/server.md
diff --git a/docs/architecture.md b/docs/architecture.md
new file mode 100644
index 0000000..1d34ebc
--- /dev/null
+++ b/docs/architecture.md
@@ -0,0 +1,16 @@
+# JetQueue Architecture
+
+## Packages
+
+- `@jet-queue/core` – engine (events, retries, storage)
+- `@jet-queue/server` – Bun server (REST + WebSocket)
+- `@jet-queue/client` – SDK for any environment
+- `@jet-queue/cli` – terminal dashboard
+- `@jet-queue/dashboard` – web dashboard (Next.js)
+
+## Data Flow
+
+```text
+App → client.addJob() → HTTP POST /api/jobs → server → queue.add() → process
+App ← client.onJobCompleted() ← WebSocket ← server ← queue.emit('job:completed')
+```
diff --git a/docs/client.md b/docs/client.md
new file mode 100644
index 0000000..c9e7ac2
--- /dev/null
+++ b/docs/client.md
@@ -0,0 +1,26 @@
+# @jet-queue/client SDK
+
+## Installation
+```bash
+npm install @jet-queue/client
+```
+
+## Usage
+
+```ts
+import { JetQueueClient } from '@jet-queue/client';
+const client = new JetQueueClient({ baseUrl: 'http://localhost:3001' });
+
+// Add a job
+const job = await client.addJob('send-email', { data: { to: 'user@test.com' } });
+
+// Check status
+const status = await client.getJob(job.id);
+
+// Real‑time events
+client.connect();
+client.onJobCompleted(job.id, (job) => console.log('Done!', job.result));
+```
+
+## Methods
+`addJob(handler, options?)`, `getJob(id)`, `getJobProgress(id)`, `cancelJob(id)`, `retryJob(id)`,` getStats()`, `health()`, `connect()`, `disconnect()`,` onJobCompleted(id, cb)`, `onJobFailed(id, cb)`, `onJobProgress(id, cb)`, `onEvent(type, cb)`.
\ No newline at end of file
diff --git a/docs/core.md b/docs/core.md
new file mode 100644
index 0000000..9bc18b1
--- /dev/null
+++ b/docs/core.md
@@ -0,0 +1,49 @@
+# @jet-queue/core API
+
+## `new JetQueue(options?)`
+
+| Option | Type | Default | Description |
+| ----------------- | ------- | -------- | ---------------------------- |
+| concurrency | number | 5 | Max simultaneous jobs |
+| autoStart | boolean | true | Start processing immediately |
+| maxQueuedJobs | number | Infinity | Max pending jobs |
+| defaultJobOptions | object | {} | Default options for all jobs |
+
+## `queue.add(taskFn, options?)`
+
+Returns job ID.
+
+```ts
+queue.add(
+ async (job) => {
+ /* work */
+ },
+ {
+ name: "send-email",
+ priority: "high", // low | normal | high | critical
+ timeout: 30000,
+ maxAttempts: 3,
+ retryOptions: { strategy: "exponential", delay: 1000 },
+ delay: 5000, // delay before first run
+ tags: ["email"],
+ },
+);
+```
+
+## Events
+
+```ts
+queue.on("job:added", ({ job }) => {});
+queue.on("job:completed", ({ job, result, duration }) => {});
+queue.on("job:failed", ({ job, error, duration }) => {});
+queue.on("job:progress", ({ job, progress }) => {});
+queue.on("queue:drain", ({ stats }) => {});
+```
+## Storage
+
+```ts
+import { MemoryStorage, SQLiteStorage } from '@jet-queue/core';
+new JetQueue({}, new MemoryStorage()); // volatile
+new JetQueue({}, new SQLiteStorage('./queue.db')); // persistent
+```
+
diff --git a/docs/getting-started.md b/docs/getting-started.md
new file mode 100644
index 0000000..03aa5ef
--- /dev/null
+++ b/docs/getting-started.md
@@ -0,0 +1,50 @@
+# Getting Started with JetQueue
+
+## Installation
+
+```bash
+npm install @jet-queue/core
+```
+
+## Your First Queue
+
+```ts
+import { JetQueue } from "@jet-queue/core";
+
+const queue = new JetQueue({ concurrency: 3 });
+
+queue.add(
+ async () => {
+ console.log("Job done!");
+ },
+ { name: "my-first-job" },
+);
+
+queue.on("queue:drain", () => {
+ console.log("All jobs finished");
+});
+```
+
+## Using the Server (Bun)
+
+```bash
+npx @jet-queue/server --port 3001
+```
+
+Then connect with the client:
+
+```bash
+npm install @jet-queue/client
+```
+
+```ts
+import { JetQueueClient } from "@jet-queue/client";
+const client = new JetQueueClient({ baseUrl: "http://localhost:3001" });
+await client.addJob("send-email", { data: { to: "user@test.com" } });
+```
+
+## Next Steps
+- [Core API](./core.md)
+- [Server API](./server.md)
+- [Client SDK](./client.md)
+- [Architecture](./architecture.md)
\ No newline at end of file
diff --git a/docs/server.md b/docs/server.md
new file mode 100644
index 0000000..8fceaef
--- /dev/null
+++ b/docs/server.md
@@ -0,0 +1,26 @@
+# @jet-queue/server API
+
+The server package provides a ready‑to‑run Bun server and building blocks for custom servers.
+
+## Quick Start (standalone)
+```bash
+bun run @jet-queue/server
+# or programmatically:
+import { initQueue, createApp } from '@jet-queue/server';
+const queue = await initQueue({ concurrency: 3 });
+queue.registerHandler('email', async (job) => { … });
+const app = createApp();
+Bun.serve({ fetch: app.fetch, port: 3001, websocket: { … } });
+```
+
+## REST Endpoints
+
+| Method | Path | Description |
+|---|---|---|
+| **POST** | `/api/jobs` | Add a job |
+| **GET** | `/api/jobs/:id` | Job details |
+| **DELETE** | `/api/jobs/:id` | Cancel job |
+| **POST** | `/api/jobs/:id/retry` | Retry failed job |
+| **GET** | `/api/queues/stats` | Queue statistics |
+| **GET** | `/api/health` | Health check |
+| **WS** | `/ws` | Real-time events |
\ No newline at end of file
From 470ae84a1a22c7a8897433b066f1278172255fc6 Mon Sep 17 00:00:00 2001
From: arash-jj
Date: Fri, 29 May 2026 17:43:33 +0330
Subject: [PATCH 02/16] update root readme file
---
README.md | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/README.md b/README.md
index 3f48960..a73b6e3 100644
--- a/README.md
+++ b/README.md
@@ -180,10 +180,11 @@ const queue = new JetQueue({
- **SQLite** - Zero-config persistence
## 📚 Documentation
-
-- [Core API Reference](./docs/)
-- [Server API Reference](./docs/)
-- [Client SDK Reference](./docs/)
+- [Getting Started](./docs/getting-started.md)
+- [Core API Reference](./docs/core.md)
+- [Server API Reference](./docs/server.md)
+- [Client SDK Reference](./docs/client.md)
+- [Architecture](./docs/architecture.md)
- [Examples](./examples/)
## 🤝 Contributing
From 62e74cd5554b20b2adb9d2f1a45116cacf46aed8 Mon Sep 17 00:00:00 2001
From: arash-jj
Date: Fri, 29 May 2026 17:44:03 +0330
Subject: [PATCH 03/16] add contributing guide
---
CONTRIBUTING.md | 119 ++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 119 insertions(+)
create mode 100644 CONTRIBUTING.md
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..41e5cb9
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,119 @@
+# Contributing to JetQueue
+
+Thank you for your interest in contributing!
+JetQueue is an open‑source project and we welcome all contributions.
+
+## Code of Conduct
+
+This project follows the [Contributor Covenant Code of Conduct](https://www.contributor-covenant.org/version/2/1/code_of_conduct/). Please read it before participating.
+
+## How Can I Contribute?
+
+### Reporting Bugs
+
+- Check the [existing issues](https://github.com/arxja/jet-queue/issues) first.
+- Use the bug report template (if available) or include:
+ - JetQueue version
+ - Runtime (Node.js / Bun) and version
+ - Clear description of the problem
+ - Steps to reproduce
+ - Expected vs actual behavior
+ - Any relevant error logs
+
+### Suggesting Features
+
+- Open an issue with the label `enhancement`.
+- Describe the use‑case and why it would be valuable.
+- If you’re willing to implement it, mention that!
+
+### Pull Requests
+
+1. Fork the repository and create your branch from `main`.
+2. If you added code, please add tests.
+3. Ensure the test suite passes (`bun test`).
+4. Make sure your code passes type checking (`bun run --bun tsc --noEmit`).
+5. Follow the existing code style.
+6. Write a clear commit message (see below).
+7. Open a pull request against the `main` branch.
+
+## Development Setup
+
+### Prerequisites
+
+- [Bun](https://bun.sh) (latest)
+- [Node.js](https://nodejs.org) 20+ (for testing Node compatibility)
+- [pnpm](https://pnpm.io) 8+
+
+### Setup
+
+```bash
+git clone https://github.com/arxja/jet-queue.git
+cd jet-queue
+pnpm install
+```
+
+### Running Tests
+
+```
+bun test
+```
+
+### Building
+
+```bash
+pnpm build
+```
+
+### Running the Demo
+
+```bash
+# Terminal 1 (Bun)
+cd examples/split-screen-demo
+bun run server.ts
+
+# Terminal 2 (Next.js)
+cd examples/split-screen-demo
+npm run dev
+```
+
+## Project Structure
+
+```text
+jet-queue/
+├── packages/
+│ ├── core/ # @jet-queue/core (engine)
+│ ├── server/ # @jet-queue/server (Bun server)
+│ ├── client/ # @jet-queue/client (SDK)
+│ ├── cli/ # @jet-queue/cli (terminal dashboard)
+│ └── dashboard/ # @jet-queue/dashboard (web UI)
+├── examples/
+├── docs/
+└── scripts/
+```
+
+## Commit Message Guidelines
+
+We use [Conventional Commits](https://conventionalcommits.org):
+
+- `feat: add retry backoff strategy`
+- `fix: handle job timeout correctly`
+- `docs: update server API reference`
+- `test: add coverage for priority queue`
+- `chore: update dependencies`
+
+## Style Guide
+
+- TypeScript strict mode
+- Use `async/await` over raw promises
+- Explicit function return types for public API
+- Single responsibility per file
+- Keep core package zero‑dependencies
+
+## License
+
+By contributing, you agree that your contributions will be licensed under the MIT License.
+
+---
+
+
+Thank you for helping make JetQueue better!
From 659274817f6ecbf4c124dbdc8dc22e9eacd2d812 Mon Sep 17 00:00:00 2001
From: arash-jj
Date: Fri, 29 May 2026 17:44:58 +0330
Subject: [PATCH 04/16] chore: remove unused readmes
---
examples/split-screen-demo/README.md | 36 ----------------------------
packages/dashboard/README.md | 36 ----------------------------
2 files changed, 72 deletions(-)
delete mode 100644 examples/split-screen-demo/README.md
delete mode 100644 packages/dashboard/README.md
diff --git a/examples/split-screen-demo/README.md b/examples/split-screen-demo/README.md
deleted file mode 100644
index e215bc4..0000000
--- a/examples/split-screen-demo/README.md
+++ /dev/null
@@ -1,36 +0,0 @@
-This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app).
-
-## Getting Started
-
-First, run the development server:
-
-```bash
-npm run dev
-# or
-yarn dev
-# or
-pnpm dev
-# or
-bun dev
-```
-
-Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
-
-You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file.
-
-This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel.
-
-## Learn More
-
-To learn more about Next.js, take a look at the following resources:
-
-- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
-- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
-
-You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome!
-
-## Deploy on Vercel
-
-The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
-
-Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details.
diff --git a/packages/dashboard/README.md b/packages/dashboard/README.md
deleted file mode 100644
index e215bc4..0000000
--- a/packages/dashboard/README.md
+++ /dev/null
@@ -1,36 +0,0 @@
-This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app).
-
-## Getting Started
-
-First, run the development server:
-
-```bash
-npm run dev
-# or
-yarn dev
-# or
-pnpm dev
-# or
-bun dev
-```
-
-Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
-
-You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file.
-
-This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel.
-
-## Learn More
-
-To learn more about Next.js, take a look at the following resources:
-
-- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
-- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
-
-You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome!
-
-## Deploy on Vercel
-
-The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
-
-Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details.
From 476ec9356ece5f7b072741bb23f4ebc687e40711 Mon Sep 17 00:00:00 2001
From: arash-jj
Date: Fri, 29 May 2026 17:52:32 +0330
Subject: [PATCH 05/16] chore: update root package json and pnpm version in ci
---
.github/workflows/ci.yml | 2 +-
package.json | 8 +++++++-
2 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 1e315b7..b93fa0a 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -17,7 +17,7 @@ jobs:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v2
with:
- version: 8
+ version: 11
- uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
diff --git a/package.json b/package.json
index dba415d..76e0129 100644
--- a/package.json
+++ b/package.json
@@ -2,7 +2,10 @@
"name": "jet-queue",
"version": "1.0.0",
"description": "A background job processing system that lets you move heavy work out of your API's request/response cycle.",
- "workspaces": ["packages/*", "examples/*"],
+ "workspaces": [
+ "packages/*",
+ "examples/*"
+ ],
"scripts": {
"dev": "turbo dev"
},
@@ -15,5 +18,8 @@
"tsup": "^8.5.1",
"turbo": "^2.9.12",
"typescript": "^6.0.3"
+ },
+ "engines": {
+ "node": ">=20"
}
}
From 2f41324ad9ee4a3d32827438943ed1a5c8dad88e Mon Sep 17 00:00:00 2001
From: Arash <126488211+arxja@users.noreply.github.com>
Date: Fri, 29 May 2026 17:54:04 +0330
Subject: [PATCH 06/16] Update docs/client.md
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
---
docs/client.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/client.md b/docs/client.md
index c9e7ac2..ebb0574 100644
--- a/docs/client.md
+++ b/docs/client.md
@@ -23,4 +23,4 @@ client.onJobCompleted(job.id, (job) => console.log('Done!', job.result));
```
## Methods
-`addJob(handler, options?)`, `getJob(id)`, `getJobProgress(id)`, `cancelJob(id)`, `retryJob(id)`,` getStats()`, `health()`, `connect()`, `disconnect()`,` onJobCompleted(id, cb)`, `onJobFailed(id, cb)`, `onJobProgress(id, cb)`, `onEvent(type, cb)`.
\ No newline at end of file
+`addJob(handler, options?)`, `getJob(id)`, `getJobProgress(id)`, `cancelJob(id)`, `retryJob(id)`, `getStats()`, `health()`, `connect()`, `disconnect()`, `onJobCompleted(id, cb)`, `onJobFailed(id, cb)`, `onJobProgress(id, cb)`, `onEvent(type, cb)`.
\ No newline at end of file
From 04640d7686dacc8f0ce97ff729bc233cb9cd4133 Mon Sep 17 00:00:00 2001
From: arash-jj
Date: Fri, 29 May 2026 17:54:26 +0330
Subject: [PATCH 07/16] fix: typo in contributing file
---
CONTRIBUTING.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 41e5cb9..3efc97c 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -54,7 +54,7 @@ pnpm install
### Running Tests
-```
+```bash
bun test
```
From 3d36a95da6fc48a2f49e029bd4d70a80fe3580dc Mon Sep 17 00:00:00 2001
From: arash-jj
Date: Fri, 29 May 2026 17:56:11 +0330
Subject: [PATCH 08/16] chore: update pnpm and node versions in docs
---
.github/workflows/ci.yml | 2 +-
CONTRIBUTING.md | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index b93fa0a..e823ffb 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -11,7 +11,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
- node-version: [20]
+ node-version: [22]
steps:
- uses: actions/checkout@v4
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 3efc97c..fcb5072 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -41,8 +41,8 @@ This project follows the [Contributor Covenant Code of Conduct](https://www.cont
### Prerequisites
- [Bun](https://bun.sh) (latest)
-- [Node.js](https://nodejs.org) 20+ (for testing Node compatibility)
-- [pnpm](https://pnpm.io) 8+
+- [Node.js](https://nodejs.org) 22+ (for testing Node compatibility)
+- [pnpm](https://pnpm.io) 11+
### Setup
From 1507d2018f506cacf91abe5f93920ad183776ab5 Mon Sep 17 00:00:00 2001
From: arash-jj
Date: Fri, 29 May 2026 17:59:59 +0330
Subject: [PATCH 09/16] chore: update lock file
---
pnpm-lock.yaml | 201 ++++++++++++++++++++++++++++++++++----------
pnpm-workspace.yaml | 1 +
2 files changed, 158 insertions(+), 44 deletions(-)
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 71d90d2..a105123 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -36,24 +36,9 @@ importers:
examples/split-screen-demo:
dependencies:
- '@gsap/react':
- specifier: ^2.1.2
- version: 2.1.2(gsap@3.15.0)(react@19.2.4)
- '@hono/node-server':
- specifier: ^2.0.4
- version: 2.0.4(hono@4.12.18)
'@jet-queue/client':
specifier: workspace:*
version: link:../../packages/client
- '@jet-queue/core':
- specifier: workspace:*
- version: link:../../packages/core
- '@jet-queue/server':
- specifier: workspace:*
- version: link:../../packages/server
- gsap:
- specifier: ^3.15.0
- version: 3.15.0
next:
specifier: 16.2.6
version: 16.2.6(@babel/core@7.29.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
@@ -63,9 +48,6 @@ importers:
react-dom:
specifier: 19.2.4
version: 19.2.4(react@19.2.4)
- ws:
- specifier: ^8.20.1
- version: 8.20.1
devDependencies:
'@tailwindcss/postcss':
specifier: ^4
@@ -136,6 +118,10 @@ importers:
version: 5.9.3
packages/core:
+ dependencies:
+ bun:
+ specifier: '>=1.0.0'
+ version: 1.3.14
devDependencies:
'@types/bun':
specifier: ^1.3.13
@@ -495,18 +481,6 @@ packages:
resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@gsap/react@2.1.2':
- resolution: {integrity: sha512-JqliybO1837UcgH2hVOM4VO+38APk3ECNrsuSM4MuXp+rbf+/2IG2K1YJiqfTcXQHH7XlA0m3ykniFYstfq0Iw==}
- peerDependencies:
- gsap: ^3.12.5
- react: '>=17'
-
- '@hono/node-server@2.0.4':
- resolution: {integrity: sha512-Ut3y0dMMPWy6bZ2kVfx25EOVbZlm15dhF4mOsezMlhpNHy+4MkU1qN9Y6lnruYi4wPmFzimGX2X7LF/FwHli4A==}
- engines: {node: '>=20'}
- peerDependencies:
- hono: ^4
-
'@humanfs/core@0.19.2':
resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==}
engines: {node: '>=18.18.0'}
@@ -773,6 +747,86 @@ packages:
resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==}
engines: {node: '>=12.4.0'}
+ '@oven/bun-darwin-aarch64@1.3.14':
+ resolution: {integrity: sha512-Omj20SuiHBOUjUBIyqtkNjSUIjOtEOJwmbix/ZyFH4BaQ6OZTaaRWIR4TjHVz0yadHgli6lLTiAh1uarnvD49A==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@oven/bun-darwin-x64-baseline@1.3.14':
+ resolution: {integrity: sha512-OSfsTZstc898HHElhU4NccaBGOSSDn5VfahiVTnidZ9B/+wb7WTyfZJaBeJcfjwJ9H2W9uTh2TGtl3UfcXgV9g==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@oven/bun-darwin-x64@1.3.14':
+ resolution: {integrity: sha512-FFj3QdU/OhlDyZOJ8CWfN5eWLpRlT4qjZg7lMQi7jA6GuoY5ajlO1zWLP/MuHYRSbXQUvV52RejNi8DVnAp13w==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@oven/bun-freebsd-aarch64@1.3.14':
+ resolution: {integrity: sha512-LIKrXaFxAHybVO5Pf+9XP2FHUj/5APvXTUKk9dqHm5iFz4oH+W24cmhjkJirNujh9hKeTyrpWSe3no9JZKowIw==}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@oven/bun-freebsd-x64@1.3.14':
+ resolution: {integrity: sha512-uwD+fGUH1ADpIF3B1U2jWzzb20QwRLZfj5QZ28GUCGrAJ/nTmWrD6YYGsblCY1wuhldRez3lU40AyuvSCyLYmw==}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@oven/bun-linux-aarch64-android@1.3.14':
+ resolution: {integrity: sha512-y4kq5b85lsrmFb9Xvi4w9mA5IEFJkLMrSmYn06q24KjL9rUWDWO3VFZEtteZxUN5+ec3Zm5S8OnJw1umaCbVjA==}
+ cpu: [arm64]
+ os: [android]
+
+ '@oven/bun-linux-aarch64-musl@1.3.14':
+ resolution: {integrity: sha512-jmqOA92Cd1NL/1XBd4bFkJLxQ86K0RW7ohxS2qzzAvuitO4JiIxjjTeCspoU44zCozH72HpfZfUE2On31OjnWA==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@oven/bun-linux-aarch64@1.3.14':
+ resolution: {integrity: sha512-X5SsPZHs+iYO8R/efIcRtc7gT2Q2DgPfliCxEkx4cXBumwkw0c/EsHMNwH3EgGpCDaZ7IYVPhpCG/xBOQHEwZw==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@oven/bun-linux-x64-android@1.3.14':
+ resolution: {integrity: sha512-qe9e1d+3VAEU7nAA2ol9Jvmy/o99PVMSgZhHn7Q/9O3YcDrfEqyQ8zm4zoe5qTEo8HZH0dN03Le0Ys2eQPs7eg==}
+ cpu: [x64]
+ os: [android]
+
+ '@oven/bun-linux-x64-baseline@1.3.14':
+ resolution: {integrity: sha512-q/8EdOC0yUE8FPeoOVq8/Pw5I9/tJaYmUfO/uDUAREx8IUnOJH1RJ5A3BjFqre8pvJoiZA9AovPJq5FnNNjSxA==}
+ cpu: [x64]
+ os: [linux]
+
+ '@oven/bun-linux-x64-musl-baseline@1.3.14':
+ resolution: {integrity: sha512-n6iE71G4lQE4XkrZhQQcL5YUlxDbnq6nqV7zeQi33PMsLT/0kYE+RvHOtBWZ3w0wMdXZfINmp63hIb9ijUBGtw==}
+ cpu: [x64]
+ os: [linux]
+
+ '@oven/bun-linux-x64-musl@1.3.14':
+ resolution: {integrity: sha512-GBCB/k/sIqcr06eTNgg7g46qiUv35Jasx4XiccJ/n7RGqrE4RWUD/XJBbWFprVPjvqd59+QtSnS99XGqvftHfg==}
+ cpu: [x64]
+ os: [linux]
+
+ '@oven/bun-linux-x64@1.3.14':
+ resolution: {integrity: sha512-7OVTAKvwfPmSbIV1HpdOoVVx5VRc427GuPPne93N6vk4eQBPId9nXmZDh9/zGaKPdbVjVtQSZafWQoUjx38Utw==}
+ cpu: [x64]
+ os: [linux]
+
+ '@oven/bun-windows-aarch64@1.3.14':
+ resolution: {integrity: sha512-T7s3x/BsVKQObGU6QDkZeI6wKynzqGbBH1yI77jrrj5siElclxr3DQrDIk8CV4G5/SJq2HHq4kpLyYY2DKCSmA==}
+ cpu: [arm64]
+ os: [win32]
+
+ '@oven/bun-windows-x64-baseline@1.3.14':
+ resolution: {integrity: sha512-uIjLUC1S9DWgICzuoMba7vurBJnBruE4S5CxnvmZkdqWVXRzx1Rgu636HoH+k0qeaQCFh3jeG3JQ1y6fRHv0sw==}
+ cpu: [x64]
+ os: [win32]
+
+ '@oven/bun-windows-x64@1.3.14':
+ resolution: {integrity: sha512-mUFWL3BoYkNpjd8e9PqROiFF/1Xeotq20mABJsiQH62jM1g5zqWh4khw1RZ6bX8Q8fWvlPaxG1PjofkmjUi3vg==}
+ cpu: [x64]
+ os: [win32]
+
'@reduxjs/toolkit@2.11.2':
resolution: {integrity: sha512-Kd6kAHTA6/nUpp8mySPqj3en3dm0tdMIgbttnQ1xFMVpufoj+ADi8pXLBsd4xzTRHQa7t/Jv8W5UnCuW4kuWMQ==}
peerDependencies:
@@ -1416,6 +1470,12 @@ packages:
bun-types@1.3.14:
resolution: {integrity: sha512-4N0ig0fEomHt5R0KCFWjovxow98rIoRwKolrYdCcknNwMekCXRnWEUvgu5soYV8QXtVsrUD8B95MBOZGPvr6KQ==}
+ bun@1.3.14:
+ resolution: {integrity: sha512-aB6GVd42x1Y5ie1K16SF+oLGtgSkwX9hgoDdIW88pjvfTccU8F1vfpoOt34QLv0dZ1v3XimtaxPlZUG81Gx9Zg==}
+ cpu: [arm64, x64]
+ os: [darwin, linux, android, freebsd, win32]
+ hasBin: true
+
bundle-require@5.1.0:
resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
@@ -1926,9 +1986,6 @@ packages:
graceful-fs@4.2.11:
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
- gsap@3.15.0:
- resolution: {integrity: sha512-dMW4CWBTUK1AEEDeZc1g4xpPGIrSf9fJF960qbTZmN/QwZIWY5wgliS6JWl9/25fpTGJrMRtSjGtOmPnfjZB+A==}
-
has-bigints@1.1.0:
resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==}
engines: {node: '>= 0.4'}
@@ -3227,15 +3284,6 @@ snapshots:
'@eslint/core': 0.17.0
levn: 0.4.1
- '@gsap/react@2.1.2(gsap@3.15.0)(react@19.2.4)':
- dependencies:
- gsap: 3.15.0
- react: 19.2.4
-
- '@hono/node-server@2.0.4(hono@4.12.18)':
- dependencies:
- hono: 4.12.18
-
'@humanfs/core@0.19.2':
dependencies:
'@humanfs/types': 0.15.0
@@ -3419,6 +3467,54 @@ snapshots:
'@nolyfill/is-core-module@1.0.39': {}
+ '@oven/bun-darwin-aarch64@1.3.14':
+ optional: true
+
+ '@oven/bun-darwin-x64-baseline@1.3.14':
+ optional: true
+
+ '@oven/bun-darwin-x64@1.3.14':
+ optional: true
+
+ '@oven/bun-freebsd-aarch64@1.3.14':
+ optional: true
+
+ '@oven/bun-freebsd-x64@1.3.14':
+ optional: true
+
+ '@oven/bun-linux-aarch64-android@1.3.14':
+ optional: true
+
+ '@oven/bun-linux-aarch64-musl@1.3.14':
+ optional: true
+
+ '@oven/bun-linux-aarch64@1.3.14':
+ optional: true
+
+ '@oven/bun-linux-x64-android@1.3.14':
+ optional: true
+
+ '@oven/bun-linux-x64-baseline@1.3.14':
+ optional: true
+
+ '@oven/bun-linux-x64-musl-baseline@1.3.14':
+ optional: true
+
+ '@oven/bun-linux-x64-musl@1.3.14':
+ optional: true
+
+ '@oven/bun-linux-x64@1.3.14':
+ optional: true
+
+ '@oven/bun-windows-aarch64@1.3.14':
+ optional: true
+
+ '@oven/bun-windows-x64-baseline@1.3.14':
+ optional: true
+
+ '@oven/bun-windows-x64@1.3.14':
+ optional: true
+
'@reduxjs/toolkit@2.11.2(react-redux@9.2.0(@types/react@19.2.14)(react@19.2.4)(redux@5.0.1))(react@19.2.4)':
dependencies:
'@standard-schema/spec': 1.1.0
@@ -3967,6 +4063,25 @@ snapshots:
dependencies:
'@types/node': 25.6.2
+ bun@1.3.14:
+ optionalDependencies:
+ '@oven/bun-darwin-aarch64': 1.3.14
+ '@oven/bun-darwin-x64': 1.3.14
+ '@oven/bun-darwin-x64-baseline': 1.3.14
+ '@oven/bun-freebsd-aarch64': 1.3.14
+ '@oven/bun-freebsd-x64': 1.3.14
+ '@oven/bun-linux-aarch64': 1.3.14
+ '@oven/bun-linux-aarch64-android': 1.3.14
+ '@oven/bun-linux-aarch64-musl': 1.3.14
+ '@oven/bun-linux-x64': 1.3.14
+ '@oven/bun-linux-x64-android': 1.3.14
+ '@oven/bun-linux-x64-baseline': 1.3.14
+ '@oven/bun-linux-x64-musl': 1.3.14
+ '@oven/bun-linux-x64-musl-baseline': 1.3.14
+ '@oven/bun-windows-aarch64': 1.3.14
+ '@oven/bun-windows-x64': 1.3.14
+ '@oven/bun-windows-x64-baseline': 1.3.14
+
bundle-require@5.1.0(esbuild@0.27.7):
dependencies:
esbuild: 0.27.7
@@ -4696,8 +4811,6 @@ snapshots:
graceful-fs@4.2.11: {}
- gsap@3.15.0: {}
-
has-bigints@1.1.0: {}
has-flag@4.0.0: {}
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
index acdd8ac..cf383a0 100644
--- a/pnpm-workspace.yaml
+++ b/pnpm-workspace.yaml
@@ -2,6 +2,7 @@ packages:
- 'packages/*'
- 'examples/*'
allowBuilds:
+ bun: set this to true or false
esbuild: true
sharp: false
unrs-resolver: false
From 52d198024ec4b839b4b618fb432c021b65f21147 Mon Sep 17 00:00:00 2001
From: arash-jj
Date: Fri, 29 May 2026 18:02:14 +0330
Subject: [PATCH 10/16] chore: allow bun build script
---
pnpm-workspace.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
index cf383a0..d474f82 100644
--- a/pnpm-workspace.yaml
+++ b/pnpm-workspace.yaml
@@ -2,7 +2,7 @@ packages:
- 'packages/*'
- 'examples/*'
allowBuilds:
- bun: set this to true or false
+ bun: false
esbuild: true
sharp: false
unrs-resolver: false
From bbd39fbbebc38f9247d719df41b51c737ec107db Mon Sep 17 00:00:00 2001
From: arash-jj
Date: Fri, 29 May 2026 18:05:51 +0330
Subject: [PATCH 11/16] update root package.json scripts
---
package.json | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/package.json b/package.json
index 76e0129..f44f169 100644
--- a/package.json
+++ b/package.json
@@ -7,7 +7,10 @@
"examples/*"
],
"scripts": {
- "dev": "turbo dev"
+ "dev": "turbo dev",
+ "build": "turbo build",
+ "test": "bun test",
+ "lint": "tsc --noEmit"
},
"keywords": [],
"author": "",
@@ -22,4 +25,4 @@
"engines": {
"node": ">=20"
}
-}
+}
\ No newline at end of file
From 6fa7779db8f2527d65b3d80320dfd117861633b7 Mon Sep 17 00:00:00 2001
From: arash-jj
Date: Fri, 29 May 2026 18:13:24 +0330
Subject: [PATCH 12/16] fix: build time errors
---
packages/core/tsconfig.json | 1 +
packages/dashboard/lib/api.ts | 2 +-
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/packages/core/tsconfig.json b/packages/core/tsconfig.json
index 83880ca..a9b50ad 100644
--- a/packages/core/tsconfig.json
+++ b/packages/core/tsconfig.json
@@ -4,6 +4,7 @@
"outDir": "./dist",
"types": ["bun"],
"baseUrl": ".",
+ "rootDir": ".",
"paths": {
"@/*": ["./src/*"]
}
diff --git a/packages/dashboard/lib/api.ts b/packages/dashboard/lib/api.ts
index 551cd19..a599e02 100644
--- a/packages/dashboard/lib/api.ts
+++ b/packages/dashboard/lib/api.ts
@@ -1,4 +1,4 @@
-import { JetQueueClient } from "jet-queue/client";
+import { JetQueueClient } from "@jet-queue/client";
const SERVER_URL =
process.env.NEXT_PUBLIC_JETQUEUE_URL || "http://localhost:3001";
From 8ff489eac516330195ca092b67dcd83c165169f4 Mon Sep 17 00:00:00 2001
From: arash-jj
Date: Fri, 29 May 2026 18:21:16 +0330
Subject: [PATCH 13/16] fix: build time errors
---
packages/core/tests/queue.test.ts | 5 +++--
packages/dashboard/components/JobRow.tsx | 2 +-
packages/dashboard/tsconfig.json | 4 +++-
packages/dashboard/types/{type.d.ts => type.ts} | 0
4 files changed, 7 insertions(+), 4 deletions(-)
rename packages/dashboard/types/{type.d.ts => type.ts} (100%)
diff --git a/packages/core/tests/queue.test.ts b/packages/core/tests/queue.test.ts
index d29d593..fd63b02 100644
--- a/packages/core/tests/queue.test.ts
+++ b/packages/core/tests/queue.test.ts
@@ -74,8 +74,9 @@ describe("JetQueue", () => {
describe("Job States", () => {
test("should track pending → running → completed", async () => {
let stateDuringExecution = "";
- let resolveBlock1, resolveBlock2;
- let resolveTrackedJob;
+ let resolveBlock1: (value?: unknown) => void = () => {};
+ let resolveBlock2: (value?: unknown) => void = () => {};
+ let resolveTrackedJob: (value?: unknown) => void = () => {};
const blockPromise1 = new Promise((resolve) => {
resolveBlock1 = resolve;
diff --git a/packages/dashboard/components/JobRow.tsx b/packages/dashboard/components/JobRow.tsx
index 2e865d9..17dfbe8 100644
--- a/packages/dashboard/components/JobRow.tsx
+++ b/packages/dashboard/components/JobRow.tsx
@@ -1,6 +1,6 @@
"use client";
-import type { JobWithDuration } from "@/types/type";
+import { JobWithDuration } from "@/types/type";
const statusIcons: Record = {
pending: "⏳",
diff --git a/packages/dashboard/tsconfig.json b/packages/dashboard/tsconfig.json
index 3a13f90..b95d943 100644
--- a/packages/dashboard/tsconfig.json
+++ b/packages/dashboard/tsconfig.json
@@ -19,7 +19,9 @@
}
],
"paths": {
- "@/*": ["./*"]
+ "@/*": ["./*"],
+ "@/components/*": ["./components/*"],
+ "@/hooks/*": ["./hooks/*"]
}
},
"include": [
diff --git a/packages/dashboard/types/type.d.ts b/packages/dashboard/types/type.ts
similarity index 100%
rename from packages/dashboard/types/type.d.ts
rename to packages/dashboard/types/type.ts
From bc22698aad146eb9ed79aa6660e7690beb806320 Mon Sep 17 00:00:00 2001
From: arash-jj
Date: Fri, 29 May 2026 18:27:43 +0330
Subject: [PATCH 14/16] fix: build time errors
---
packages/dashboard/app/page.tsx | 3 ++-
packages/dashboard/components/JobRow.tsx | 6 ++++--
packages/dashboard/hooks/useDashboard.ts | 4 ++--
packages/dashboard/types/type.ts | 6 +++---
4 files changed, 11 insertions(+), 8 deletions(-)
diff --git a/packages/dashboard/app/page.tsx b/packages/dashboard/app/page.tsx
index 1e4b0db..7127d71 100644
--- a/packages/dashboard/app/page.tsx
+++ b/packages/dashboard/app/page.tsx
@@ -4,6 +4,7 @@ import ConnectionBadge from "@/components/ConnectionBadge";
import JobRow from "@/components/JobRow";
import StatsCard from "@/components/StatsCard";
import { useDashboard } from "@/hooks/useDashboard";
+import { JobWithDuration } from "@/types/type";
export default function Home() {
const { stats, recentJobs, connected, error, refresh } = useDashboard();
@@ -126,7 +127,7 @@ export default function Home() {
No jobs processed yet. Add jobs via the SDK or API.
) : (
- recentJobs.map((job, i) => (
+ recentJobs.map((job: any, i: number) => (
))
)}
diff --git a/packages/dashboard/components/JobRow.tsx b/packages/dashboard/components/JobRow.tsx
index 17dfbe8..c93b185 100644
--- a/packages/dashboard/components/JobRow.tsx
+++ b/packages/dashboard/components/JobRow.tsx
@@ -35,8 +35,10 @@ const JobRow = ({ job }: { job: JobWithDuration }) => {
{job.id.slice(0, 10)}
- {job.name}
- {job.status === "running" && job.progress > 0 && (
+
+ {job.name || job.id.slice(0, 8)}
+
+ {job.status === "running" && job.progress && job.progress > 0 && (
Date: Fri, 29 May 2026 18:32:04 +0330
Subject: [PATCH 15/16] update the ci
---
.github/workflows/ci.yml | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index e823ffb..b2e8996 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -28,5 +28,7 @@ jobs:
- run: pnpm install --frozen-lockfile
- run: bun test
- - run: pnpm build
- - run: bun run --bun tsc --noEmit # type check
+
+ - run: pnpm --filter=!dashboard build
+
+ - run: pnpm --filter=!dashboard exec tsc --noEmit
\ No newline at end of file
From fe64cbdb26f8128cda617a69a88ecd56b797c00c Mon Sep 17 00:00:00 2001
From: arash-jj
Date: Fri, 29 May 2026 18:34:47 +0330
Subject: [PATCH 16/16] fix: demo error
---
examples/bun-server-demo/index.ts | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/examples/bun-server-demo/index.ts b/examples/bun-server-demo/index.ts
index 59139f4..a9ca4d6 100644
--- a/examples/bun-server-demo/index.ts
+++ b/examples/bun-server-demo/index.ts
@@ -57,9 +57,7 @@ const server = Bun.serve({
setupWebSocket(ws);
},
message() {}, // not used in demo
- close(ws) {
- cleanupWebSocket(ws);
- },
+ close() {},
},
});