@queuebase/cli 1.0.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/db/client.d.ts +6 -0
- package/dist/db/client.d.ts.map +1 -0
- package/dist/db/client.js +10 -0
- package/dist/db/client.js.map +1 -0
- package/dist/db/migrations.d.ts +3 -0
- package/dist/db/migrations.d.ts.map +1 -0
- package/dist/db/migrations.js +45 -0
- package/dist/db/migrations.js.map +1 -0
- package/dist/db/queries.d.ts +35 -0
- package/dist/db/queries.d.ts.map +1 -0
- package/dist/db/queries.js +32 -0
- package/dist/db/queries.js.map +1 -0
- package/dist/db/worker-db.d.ts +4 -0
- package/dist/db/worker-db.d.ts.map +1 -0
- package/dist/db/worker-db.js +51 -0
- package/dist/db/worker-db.js.map +1 -0
- package/dist/server.d.ts +0 -2
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +29 -19
- package/dist/server.js.map +1 -1
- package/package.json +3 -6
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/db/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG;IACpD,EAAE,EAAE,YAAY,CAAC;IACjB,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB,CAQA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { DatabaseSync } from "node:sqlite";
|
|
2
|
+
export function createSqliteClient(filename) {
|
|
3
|
+
const db = new DatabaseSync(filename);
|
|
4
|
+
db.exec("PRAGMA journal_mode = WAL");
|
|
5
|
+
return {
|
|
6
|
+
db,
|
|
7
|
+
close: () => db.close(),
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/db/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,UAAU,kBAAkB,CAAC,QAAgB;IAIjD,MAAM,EAAE,GAAG,IAAI,YAAY,CAAC,QAAQ,CAAC,CAAC;IACtC,EAAE,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IAErC,OAAO;QACL,EAAE;QACF,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE;KACxB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../src/db/migrations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,wBAAgB,aAAa,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CA+CpD"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export function runMigrations(db) {
|
|
2
|
+
db.exec(`
|
|
3
|
+
CREATE TABLE IF NOT EXISTS jobs (
|
|
4
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
5
|
+
public_id TEXT NOT NULL UNIQUE,
|
|
6
|
+
name TEXT NOT NULL,
|
|
7
|
+
payload TEXT NOT NULL,
|
|
8
|
+
status TEXT NOT NULL DEFAULT 'pending',
|
|
9
|
+
attempt INTEGER NOT NULL DEFAULT 1,
|
|
10
|
+
max_attempts INTEGER NOT NULL DEFAULT 1,
|
|
11
|
+
run_at INTEGER NOT NULL,
|
|
12
|
+
created_at INTEGER NOT NULL DEFAULT (unixepoch() * 1000),
|
|
13
|
+
started_at INTEGER,
|
|
14
|
+
completed_at INTEGER,
|
|
15
|
+
result TEXT,
|
|
16
|
+
error TEXT,
|
|
17
|
+
backoff_strategy TEXT NOT NULL DEFAULT 'exponential',
|
|
18
|
+
backoff_delay INTEGER NOT NULL DEFAULT 1000,
|
|
19
|
+
callback_url TEXT NOT NULL
|
|
20
|
+
)
|
|
21
|
+
`);
|
|
22
|
+
db.exec(`
|
|
23
|
+
CREATE INDEX IF NOT EXISTS idx_jobs_status_run_at
|
|
24
|
+
ON jobs(status, run_at)
|
|
25
|
+
`);
|
|
26
|
+
db.exec(`
|
|
27
|
+
CREATE INDEX IF NOT EXISTS idx_jobs_name
|
|
28
|
+
ON jobs(name)
|
|
29
|
+
`);
|
|
30
|
+
db.exec(`
|
|
31
|
+
CREATE TABLE IF NOT EXISTS job_logs (
|
|
32
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
33
|
+
job_id INTEGER NOT NULL REFERENCES jobs(id) ON DELETE CASCADE,
|
|
34
|
+
event TEXT NOT NULL,
|
|
35
|
+
source TEXT NOT NULL DEFAULT 'system',
|
|
36
|
+
metadata TEXT,
|
|
37
|
+
created_at INTEGER NOT NULL DEFAULT (unixepoch() * 1000)
|
|
38
|
+
)
|
|
39
|
+
`);
|
|
40
|
+
db.exec(`
|
|
41
|
+
CREATE INDEX IF NOT EXISTS idx_job_logs_job_id
|
|
42
|
+
ON job_logs(job_id)
|
|
43
|
+
`);
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=migrations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../src/db/migrations.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,aAAa,CAAC,EAAgB;IAC5C,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;GAmBP,CAAC,CAAC;IAEH,EAAE,CAAC,IAAI,CAAC;;;GAGP,CAAC,CAAC;IAEH,EAAE,CAAC,IAAI,CAAC;;;GAGP,CAAC,CAAC;IAEH,EAAE,CAAC,IAAI,CAAC;;;;;;;;;GASP,CAAC,CAAC;IAEH,EAAE,CAAC,IAAI,CAAC;;;GAGP,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { DatabaseSync } from "node:sqlite";
|
|
2
|
+
import { type EnqueueOptions } from "@queuebase/core";
|
|
3
|
+
export interface EnqueueParams {
|
|
4
|
+
name: string;
|
|
5
|
+
payload: unknown;
|
|
6
|
+
callbackUrl: string;
|
|
7
|
+
options?: EnqueueOptions;
|
|
8
|
+
}
|
|
9
|
+
export declare function enqueueJob(db: DatabaseSync, params: EnqueueParams): {
|
|
10
|
+
jobId: string;
|
|
11
|
+
};
|
|
12
|
+
export declare function getJobIdByPublicId(db: DatabaseSync, publicId: string): number | null;
|
|
13
|
+
export declare function insertJobLog(db: DatabaseSync, jobId: number, event: string): void;
|
|
14
|
+
interface JobRow {
|
|
15
|
+
id: number;
|
|
16
|
+
public_id: string;
|
|
17
|
+
name: string;
|
|
18
|
+
payload: string;
|
|
19
|
+
status: string;
|
|
20
|
+
attempt: number;
|
|
21
|
+
max_attempts: number;
|
|
22
|
+
run_at: number;
|
|
23
|
+
created_at: number;
|
|
24
|
+
started_at: number | null;
|
|
25
|
+
completed_at: number | null;
|
|
26
|
+
result: string | null;
|
|
27
|
+
error: string | null;
|
|
28
|
+
backoff_strategy: string;
|
|
29
|
+
backoff_delay: number;
|
|
30
|
+
callback_url: string;
|
|
31
|
+
}
|
|
32
|
+
export declare function getJobByPublicId(db: DatabaseSync, publicId: string): JobRow | null;
|
|
33
|
+
export declare function listRecentJobs(db: DatabaseSync, limit?: number): JobRow[];
|
|
34
|
+
export {};
|
|
35
|
+
//# sourceMappingURL=queries.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../src/db/queries.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,KAAK,cAAc,EAAgC,MAAM,iBAAiB,CAAC;AAEpF,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,cAAc,CAAC;CAC1B;AAED,wBAAgB,UAAU,CACxB,EAAE,EAAE,YAAY,EAChB,MAAM,EAAE,aAAa,GACpB;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAyBnB;AAED,wBAAgB,kBAAkB,CAChC,EAAE,EAAE,YAAY,EAChB,QAAQ,EAAE,MAAM,GACf,MAAM,GAAG,IAAI,CAIf;AAED,wBAAgB,YAAY,CAC1B,EAAE,EAAE,YAAY,EAChB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GACZ,IAAI,CAKN;AAED,UAAU,MAAM;IACd,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,YAAY,EAChB,QAAQ,EAAE,MAAM,GACf,MAAM,GAAG,IAAI,CAIf;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,YAAY,EAAE,KAAK,SAAM,GAAG,MAAM,EAAE,CAKtE"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { generatePublicId, parseDelay } from "@queuebase/core";
|
|
2
|
+
export function enqueueJob(db, params) {
|
|
3
|
+
const { name, payload, callbackUrl, options = {} } = params;
|
|
4
|
+
const publicId = generatePublicId();
|
|
5
|
+
const now = Date.now();
|
|
6
|
+
const delay = options.delay ? parseDelay(options.delay) : 0;
|
|
7
|
+
const stmt = db.prepare(`
|
|
8
|
+
INSERT INTO jobs (public_id, name, payload, status, attempt, max_attempts, run_at, created_at, backoff_strategy, backoff_delay, callback_url)
|
|
9
|
+
VALUES (?, ?, ?, 'pending', 1, ?, ?, ?, ?, ?, ?)
|
|
10
|
+
`);
|
|
11
|
+
stmt.run(publicId, name, JSON.stringify(payload), (options.retries ?? 0) + 1, now + delay, now, options.backoff ?? "exponential", options.backoffDelay ?? 1000, callbackUrl);
|
|
12
|
+
return { jobId: publicId };
|
|
13
|
+
}
|
|
14
|
+
export function getJobIdByPublicId(db, publicId) {
|
|
15
|
+
const stmt = db.prepare("SELECT id FROM jobs WHERE public_id = ?");
|
|
16
|
+
const row = stmt.get(publicId);
|
|
17
|
+
return row?.id ?? null;
|
|
18
|
+
}
|
|
19
|
+
export function insertJobLog(db, jobId, event) {
|
|
20
|
+
const stmt = db.prepare("INSERT INTO job_logs (job_id, event) VALUES (?, ?)");
|
|
21
|
+
stmt.run(jobId, event);
|
|
22
|
+
}
|
|
23
|
+
export function getJobByPublicId(db, publicId) {
|
|
24
|
+
const stmt = db.prepare("SELECT * FROM jobs WHERE public_id = ?");
|
|
25
|
+
const row = stmt.get(publicId);
|
|
26
|
+
return row ?? null;
|
|
27
|
+
}
|
|
28
|
+
export function listRecentJobs(db, limit = 100) {
|
|
29
|
+
const stmt = db.prepare("SELECT * FROM jobs ORDER BY created_at ASC LIMIT ?");
|
|
30
|
+
return stmt.all(limit);
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=queries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/db/queries.ts"],"names":[],"mappings":"AACA,OAAO,EAAuB,gBAAgB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AASpF,MAAM,UAAU,UAAU,CACxB,EAAgB,EAChB,MAAqB;IAErB,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,GAAG,EAAE,EAAE,GAAG,MAAM,CAAC;IAE5D,MAAM,QAAQ,GAAG,gBAAgB,EAAE,CAAC;IACpC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE5D,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;GAGvB,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,CACN,QAAQ,EACR,IAAI,EACJ,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EACvB,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,EAC1B,GAAG,GAAG,KAAK,EACX,GAAG,EACH,OAAO,CAAC,OAAO,IAAI,aAAa,EAChC,OAAO,CAAC,YAAY,IAAI,IAAI,EAC5B,WAAW,CACZ,CAAC;IAEF,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,EAAgB,EAChB,QAAgB;IAEhB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,yCAAyC,CAAC,CAAC;IACnE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAA+B,CAAC;IAC7D,OAAO,GAAG,EAAE,EAAE,IAAI,IAAI,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,EAAgB,EAChB,KAAa,EACb,KAAa;IAEb,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CACrB,oDAAoD,CACrD,CAAC;IACF,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACzB,CAAC;AAqBD,MAAM,UAAU,gBAAgB,CAC9B,EAAgB,EAChB,QAAgB;IAEhB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,wCAAwC,CAAC,CAAC;IAClE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAuB,CAAC;IACrD,OAAO,GAAG,IAAI,IAAI,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAAgB,EAAE,KAAK,GAAG,GAAG;IAC1D,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CACrB,oDAAoD,CACrD,CAAC;IACF,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAwB,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker-db.d.ts","sourceRoot":"","sources":["../../src/db/worker-db.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAe,QAAQ,EAAa,MAAM,mBAAmB,CAAC;AA2C1E,wBAAgB,cAAc,CAAC,EAAE,EAAE,YAAY,GAAG,QAAQ,CA2DzD"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
function toWorkerJob(row) {
|
|
2
|
+
return {
|
|
3
|
+
id: row.id,
|
|
4
|
+
publicId: row.public_id,
|
|
5
|
+
name: row.name,
|
|
6
|
+
payload: row.payload,
|
|
7
|
+
status: row.status,
|
|
8
|
+
attempt: row.attempt,
|
|
9
|
+
maxAttempts: row.max_attempts,
|
|
10
|
+
runAt: new Date(row.run_at),
|
|
11
|
+
createdAt: new Date(row.created_at),
|
|
12
|
+
startedAt: row.started_at != null ? new Date(row.started_at) : null,
|
|
13
|
+
completedAt: row.completed_at != null ? new Date(row.completed_at) : null,
|
|
14
|
+
result: row.result,
|
|
15
|
+
error: row.error,
|
|
16
|
+
backoffStrategy: row.backoff_strategy,
|
|
17
|
+
backoffDelay: row.backoff_delay,
|
|
18
|
+
callbackUrl: row.callback_url,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export function createWorkerDb(db) {
|
|
22
|
+
return {
|
|
23
|
+
async claimJobs(limit) {
|
|
24
|
+
const now = Date.now();
|
|
25
|
+
const stmt = db.prepare("SELECT * FROM jobs WHERE status = ? AND run_at <= ? LIMIT ?");
|
|
26
|
+
const rows = stmt.all("pending", now, limit);
|
|
27
|
+
return rows.map(toWorkerJob);
|
|
28
|
+
},
|
|
29
|
+
async markRunning(jobId) {
|
|
30
|
+
const stmt = db.prepare("UPDATE jobs SET status = ?, started_at = ? WHERE id = ?");
|
|
31
|
+
stmt.run("running", Date.now(), jobId);
|
|
32
|
+
},
|
|
33
|
+
async markCompleted(jobId, result) {
|
|
34
|
+
const stmt = db.prepare("UPDATE jobs SET status = ?, completed_at = ?, result = ? WHERE id = ?");
|
|
35
|
+
stmt.run("completed", Date.now(), result, jobId);
|
|
36
|
+
},
|
|
37
|
+
async markFailed(jobId, error) {
|
|
38
|
+
const stmt = db.prepare("UPDATE jobs SET status = ?, completed_at = ?, error = ? WHERE id = ?");
|
|
39
|
+
stmt.run("failed", Date.now(), error, jobId);
|
|
40
|
+
},
|
|
41
|
+
async markRetrying(jobId, nextAttempt, runAt, error) {
|
|
42
|
+
const stmt = db.prepare("UPDATE jobs SET status = ?, attempt = ?, run_at = ?, error = ? WHERE id = ?");
|
|
43
|
+
stmt.run("pending", nextAttempt, runAt.getTime(), error, jobId);
|
|
44
|
+
},
|
|
45
|
+
async insertJobLog(entry) {
|
|
46
|
+
const stmt = db.prepare("INSERT INTO job_logs (job_id, event, source, metadata) VALUES (?, ?, ?, ?)");
|
|
47
|
+
stmt.run(entry.jobId, entry.event, entry.source ?? "system", entry.metadata ?? null);
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=worker-db.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker-db.js","sourceRoot":"","sources":["../../src/db/worker-db.ts"],"names":[],"mappings":"AAsBA,SAAS,WAAW,CAAC,GAAW;IAC9B,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,QAAQ,EAAE,GAAG,CAAC,SAAS;QACvB,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,WAAW,EAAE,GAAG,CAAC,YAAY;QAC7B,KAAK,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;QAC3B,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;QACnC,SAAS,EAAE,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI;QACnE,WAAW,EACT,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI;QAC9D,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,eAAe,EAAE,GAAG,CAAC,gBAAgB;QACrC,YAAY,EAAE,GAAG,CAAC,aAAa;QAC/B,WAAW,EAAE,GAAG,CAAC,YAAY;KAC9B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAAgB;IAC7C,OAAO;QACL,KAAK,CAAC,SAAS,CAAC,KAAa;YAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CACrB,6DAA6D,CAC9D,CAAC;YACF,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,EAAE,KAAK,CAAwB,CAAC;YACpE,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC/B,CAAC;QAED,KAAK,CAAC,WAAW,CAAC,KAAa;YAC7B,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CACrB,yDAAyD,CAC1D,CAAC;YACF,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;QACzC,CAAC;QAED,KAAK,CAAC,aAAa,CACjB,KAAa,EACb,MAAqB;YAErB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CACrB,uEAAuE,CACxE,CAAC;YACF,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QACnD,CAAC;QAED,KAAK,CAAC,UAAU,CAAC,KAAa,EAAE,KAAa;YAC3C,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CACrB,sEAAsE,CACvE,CAAC;YACF,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAC/C,CAAC;QAED,KAAK,CAAC,YAAY,CAChB,KAAa,EACb,WAAmB,EACnB,KAAW,EACX,KAAa;YAEb,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CACrB,6EAA6E,CAC9E,CAAC;YACF,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAClE,CAAC;QAED,KAAK,CAAC,YAAY,CAAC,KAAkB;YACnC,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CACrB,4EAA4E,CAC7E,CAAC;YACF,IAAI,CAAC,GAAG,CACN,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,MAAM,IAAI,QAAQ,EACxB,KAAK,CAAC,QAAQ,IAAI,IAAI,CACvB,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/dist/server.d.ts
CHANGED
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
import { type SqliteDb } from "@queuebase/db/sqlite";
|
|
2
1
|
export interface DevServerOptions {
|
|
3
2
|
port: number;
|
|
4
3
|
dbPath: string;
|
|
5
4
|
callbackUrl: string;
|
|
6
5
|
}
|
|
7
6
|
export interface DevServer {
|
|
8
|
-
db: SqliteDb;
|
|
9
7
|
close: () => void;
|
|
10
8
|
}
|
|
11
9
|
export declare function createDevServer(options: DevServerOptions): DevServer;
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,SAAS,CAkHpE"}
|
package/dist/server.js
CHANGED
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
import { serve } from "@hono/node-server";
|
|
2
|
-
import { createSqliteClient, eq, jobs, jobLogs, runMigrations, } from "@queuebase/db/sqlite";
|
|
3
2
|
import { createJobExecutor } from "@queuebase/worker";
|
|
4
|
-
import { createSqliteWorkerDb, enqueueJob } from "@queuebase/worker/sqlite";
|
|
5
3
|
import { Hono } from "hono";
|
|
6
4
|
import { cors } from "hono/cors";
|
|
7
5
|
import { logger } from "hono/logger";
|
|
6
|
+
import { createSqliteClient } from "./db/client.js";
|
|
7
|
+
import { runMigrations } from "./db/migrations.js";
|
|
8
|
+
import { enqueueJob, getJobByPublicId, getJobIdByPublicId, insertJobLog, listRecentJobs, } from "./db/queries.js";
|
|
9
|
+
import { createWorkerDb } from "./db/worker-db.js";
|
|
8
10
|
export function createDevServer(options) {
|
|
9
11
|
const { port, dbPath, callbackUrl } = options;
|
|
10
12
|
// Initialize SQLite database
|
|
11
13
|
const { db, close } = createSqliteClient(dbPath);
|
|
12
14
|
runMigrations(db);
|
|
13
|
-
const workerDb =
|
|
15
|
+
const workerDb = createWorkerDb(db);
|
|
14
16
|
// Create Hono app
|
|
15
17
|
const app = new Hono();
|
|
16
18
|
// Middleware
|
|
@@ -31,26 +33,34 @@ export function createDevServer(options) {
|
|
|
31
33
|
callbackUrl: jobCallbackUrl ?? callbackUrl,
|
|
32
34
|
options: jobOptions,
|
|
33
35
|
});
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
.where(eq(jobs.publicId, result.jobId))
|
|
38
|
-
.get();
|
|
39
|
-
if (jobRow) {
|
|
40
|
-
db.insert(jobLogs)
|
|
41
|
-
.values({ jobId: jobRow.id, event: "enqueued" })
|
|
42
|
-
.run();
|
|
36
|
+
const jobId = getJobIdByPublicId(db, result.jobId);
|
|
37
|
+
if (jobId != null) {
|
|
38
|
+
insertJobLog(db, jobId, "enqueued");
|
|
43
39
|
}
|
|
44
40
|
return c.json(result);
|
|
45
41
|
});
|
|
42
|
+
// Get single job by public ID
|
|
43
|
+
app.get("/jobs/:jobId", (c) => {
|
|
44
|
+
const job = getJobByPublicId(db, c.req.param("jobId"));
|
|
45
|
+
if (!job) {
|
|
46
|
+
return c.json({ error: "Job not found" }, 404);
|
|
47
|
+
}
|
|
48
|
+
return c.json({
|
|
49
|
+
publicId: job.public_id,
|
|
50
|
+
name: job.name,
|
|
51
|
+
status: job.status,
|
|
52
|
+
attempt: job.attempt,
|
|
53
|
+
maxAttempts: job.max_attempts,
|
|
54
|
+
createdAt: new Date(job.created_at).toISOString(),
|
|
55
|
+
startedAt: job.started_at ? new Date(job.started_at).toISOString() : null,
|
|
56
|
+
completedAt: job.completed_at ? new Date(job.completed_at).toISOString() : null,
|
|
57
|
+
result: job.result ? JSON.parse(job.result) : null,
|
|
58
|
+
error: job.error,
|
|
59
|
+
});
|
|
60
|
+
});
|
|
46
61
|
// List jobs endpoint (for debugging)
|
|
47
62
|
app.get("/jobs", (c) => {
|
|
48
|
-
const allJobs = db
|
|
49
|
-
.select()
|
|
50
|
-
.from(jobs)
|
|
51
|
-
.orderBy(jobs.createdAt)
|
|
52
|
-
.limit(100)
|
|
53
|
-
.all();
|
|
63
|
+
const allJobs = listRecentJobs(db);
|
|
54
64
|
return c.json(allJobs);
|
|
55
65
|
});
|
|
56
66
|
// Create job executor
|
|
@@ -86,6 +96,6 @@ export function createDevServer(options) {
|
|
|
86
96
|
};
|
|
87
97
|
process.on("SIGINT", cleanup);
|
|
88
98
|
process.on("SIGTERM", cleanup);
|
|
89
|
-
return {
|
|
99
|
+
return { close };
|
|
90
100
|
}
|
|
91
101
|
//# sourceMappingURL=server.js.map
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@queuebase/cli",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"bin": {
|
|
6
6
|
"queuebase": "./dist/bin.js"
|
|
@@ -13,14 +13,11 @@
|
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
15
|
"@hono/node-server": "^1.13.7",
|
|
16
|
-
"better-sqlite3": "^11.7.0",
|
|
17
16
|
"hono": "^4.6.16",
|
|
18
|
-
"@queuebase/core": "1.
|
|
19
|
-
"@queuebase/
|
|
20
|
-
"@queuebase/worker": "1.0.0"
|
|
17
|
+
"@queuebase/core": "1.2.0",
|
|
18
|
+
"@queuebase/worker": "1.2.0"
|
|
21
19
|
},
|
|
22
20
|
"devDependencies": {
|
|
23
|
-
"@types/better-sqlite3": "^7.6.12",
|
|
24
21
|
"@types/node": "^22.10.5",
|
|
25
22
|
"typescript": "^5.7.2",
|
|
26
23
|
"vitest": "^2.1.8",
|