@absurd-sqlite/sdk 0.2.1-alpha.1 → 0.3.0-alpha.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/absurd.d.ts +304 -0
- package/dist/absurd.d.ts.map +1 -0
- package/dist/absurd.js +710 -0
- package/dist/absurd.js.map +1 -0
- package/dist/cjs/absurd.js +750 -0
- package/dist/cjs/index.js +19 -13
- package/dist/cjs/{sqlite.js → sqlite-connection.js} +55 -20
- package/dist/index.d.ts +99 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -12
- package/dist/index.js.map +1 -1
- package/dist/sqlite-connection.d.ts +46 -0
- package/dist/sqlite-connection.d.ts.map +1 -0
- package/dist/{sqlite.js → sqlite-connection.js} +54 -19
- package/dist/sqlite-connection.js.map +1 -0
- package/dist/sqlite-types.d.ts +1 -1
- package/dist/sqlite-types.d.ts.map +1 -1
- package/package.json +3 -5
- package/src/absurd.ts +1031 -0
- package/src/index.ts +161 -31
- package/src/{sqlite.ts → sqlite-connection.ts} +103 -34
- package/src/sqlite-types.ts +1 -1
- package/test/events.test.ts +1 -1
- package/test/index.test.ts +7 -5
- package/test/setup.ts +28 -35
- package/test/sqlite.test.ts +45 -15
- package/dist/absurd-types.d.ts +0 -109
- package/dist/absurd-types.d.ts.map +0 -1
- package/dist/absurd-types.js +0 -2
- package/dist/absurd-types.js.map +0 -1
- package/dist/cjs/absurd-types.js +0 -2
- package/dist/sqlite.d.ts +0 -14
- package/dist/sqlite.d.ts.map +0 -1
- package/dist/sqlite.js.map +0 -1
- package/src/absurd-types.ts +0 -149
package/test/sqlite.test.ts
CHANGED
|
@@ -4,13 +4,13 @@ import { mkdtempSync, rmSync } from "node:fs";
|
|
|
4
4
|
import { join } from "node:path";
|
|
5
5
|
import { tmpdir } from "node:os";
|
|
6
6
|
|
|
7
|
-
import {
|
|
7
|
+
import { SQLiteConnection } from "../src/sqlite-connection";
|
|
8
8
|
import type { SQLiteDatabase } from "../src/sqlite-types";
|
|
9
9
|
|
|
10
|
-
describe("
|
|
10
|
+
describe("SQLiteConnection", () => {
|
|
11
11
|
it("rewrites postgres-style params and absurd schema names", async () => {
|
|
12
|
-
const db = new sqlite(":memory:") as
|
|
13
|
-
const conn = new
|
|
12
|
+
const db = new sqlite(":memory:") as SQLiteDatabase;
|
|
13
|
+
const conn = new SQLiteConnection(db);
|
|
14
14
|
|
|
15
15
|
await conn.exec("CREATE TABLE absurd_tasks (id, name)");
|
|
16
16
|
await conn.exec("INSERT INTO absurd.tasks (id, name) VALUES ($1, $2)", [
|
|
@@ -28,8 +28,8 @@ describe("SqliteConnection", () => {
|
|
|
28
28
|
});
|
|
29
29
|
|
|
30
30
|
it("throws when query is used for non-reader statements", async () => {
|
|
31
|
-
const db = new sqlite(":memory:") as
|
|
32
|
-
const conn = new
|
|
31
|
+
const db = new sqlite(":memory:") as SQLiteDatabase;
|
|
32
|
+
const conn = new SQLiteConnection(db);
|
|
33
33
|
|
|
34
34
|
await expect(conn.query("CREATE TABLE t (id)")).rejects.toThrow(
|
|
35
35
|
"only statements that return data"
|
|
@@ -38,8 +38,8 @@ describe("SqliteConnection", () => {
|
|
|
38
38
|
});
|
|
39
39
|
|
|
40
40
|
it("decodes JSON from typeless columns", async () => {
|
|
41
|
-
const db = new sqlite(":memory:") as
|
|
42
|
-
const conn = new
|
|
41
|
+
const db = new sqlite(":memory:") as SQLiteDatabase;
|
|
42
|
+
const conn = new SQLiteConnection(db);
|
|
43
43
|
|
|
44
44
|
await conn.exec("CREATE TABLE t (payload)");
|
|
45
45
|
await conn.exec("INSERT INTO t (payload) VALUES ($1)", ['{"a":1}']);
|
|
@@ -53,8 +53,8 @@ describe("SqliteConnection", () => {
|
|
|
53
53
|
});
|
|
54
54
|
|
|
55
55
|
it("decodes JSON from blob columns", async () => {
|
|
56
|
-
const db = new sqlite(":memory:") as
|
|
57
|
-
const conn = new
|
|
56
|
+
const db = new sqlite(":memory:") as SQLiteDatabase;
|
|
57
|
+
const conn = new SQLiteConnection(db);
|
|
58
58
|
|
|
59
59
|
await conn.exec("CREATE TABLE t_blob (payload BLOB)");
|
|
60
60
|
await conn.exec("INSERT INTO t_blob (payload) VALUES ($1)", [
|
|
@@ -70,8 +70,8 @@ describe("SqliteConnection", () => {
|
|
|
70
70
|
});
|
|
71
71
|
|
|
72
72
|
it("decodes datetime columns into Date objects", async () => {
|
|
73
|
-
const db = new sqlite(":memory:") as
|
|
74
|
-
const conn = new
|
|
73
|
+
const db = new sqlite(":memory:") as SQLiteDatabase;
|
|
74
|
+
const conn = new SQLiteConnection(db);
|
|
75
75
|
const now = Date.now();
|
|
76
76
|
|
|
77
77
|
await conn.exec("CREATE TABLE t_date (created_at DATETIME)");
|
|
@@ -86,12 +86,42 @@ describe("SqliteConnection", () => {
|
|
|
86
86
|
db.close();
|
|
87
87
|
});
|
|
88
88
|
|
|
89
|
+
it("allows custom value codec overrides", async () => {
|
|
90
|
+
const db = new sqlite(":memory:") as SQLiteDatabase;
|
|
91
|
+
const encodedValues: unknown[] = [];
|
|
92
|
+
const conn = new SQLiteConnection(db, {
|
|
93
|
+
valueCodec: {
|
|
94
|
+
encodeParam: (value) => {
|
|
95
|
+
encodedValues.push(value);
|
|
96
|
+
return value;
|
|
97
|
+
},
|
|
98
|
+
decodeColumn: ({ value }) => {
|
|
99
|
+
if (typeof value === "string") {
|
|
100
|
+
return value.toUpperCase();
|
|
101
|
+
}
|
|
102
|
+
return value;
|
|
103
|
+
},
|
|
104
|
+
},
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
await conn.exec("CREATE TABLE t (name TEXT)");
|
|
108
|
+
await conn.exec("INSERT INTO t (name) VALUES ($1)", ["alpha"]);
|
|
109
|
+
|
|
110
|
+
const { rows } = await conn.query<{ name: string }>(
|
|
111
|
+
"SELECT name FROM t"
|
|
112
|
+
);
|
|
113
|
+
|
|
114
|
+
expect(encodedValues).toEqual(["alpha"]);
|
|
115
|
+
expect(rows[0]?.name).toBe("ALPHA");
|
|
116
|
+
db.close();
|
|
117
|
+
});
|
|
118
|
+
|
|
89
119
|
it("retries when SQLite reports the database is busy", async () => {
|
|
90
120
|
const tempDir = mkdtempSync(join(tmpdir(), "absurd-sqlite-busy-"));
|
|
91
121
|
const dbPath = join(tempDir, "busy.db");
|
|
92
|
-
const primary = new sqlite(dbPath) as
|
|
122
|
+
const primary = new sqlite(dbPath) as SQLiteDatabase;
|
|
93
123
|
(primary as any).pragma("busy_timeout = 1");
|
|
94
|
-
const conn = new
|
|
124
|
+
const conn = new SQLiteConnection(primary);
|
|
95
125
|
await conn.exec("CREATE TABLE t_busy (id INTEGER PRIMARY KEY, value TEXT)");
|
|
96
126
|
|
|
97
127
|
const blocker = new sqlite(dbPath);
|
|
@@ -150,7 +180,7 @@ describe("SqliteConnection", () => {
|
|
|
150
180
|
close: vi.fn(),
|
|
151
181
|
loadExtension: vi.fn(),
|
|
152
182
|
};
|
|
153
|
-
const conn = new
|
|
183
|
+
const conn = new SQLiteConnection(db);
|
|
154
184
|
|
|
155
185
|
await expect(
|
|
156
186
|
conn.exec("UPDATE locked_table SET value = $1 WHERE id = $2", [1, 1])
|
package/dist/absurd-types.d.ts
DELETED
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
import type { ClaimedTask, JsonValue, SpawnOptions, SpawnResult, TaskHandler, TaskRegistrationOptions, WorkerOptions } from "absurd-sdk";
|
|
2
|
-
import type { SQLiteRestBindParams } from "./sqlite-types";
|
|
3
|
-
/**
|
|
4
|
-
* Minimal query interface compatible with Absurd's database operations.
|
|
5
|
-
*/
|
|
6
|
-
export interface Queryable {
|
|
7
|
-
/**
|
|
8
|
-
* Execute a parameterized SQL query and return rows.
|
|
9
|
-
* @param sql SQL text with parameter placeholders.
|
|
10
|
-
* @param params Optional positional parameters.
|
|
11
|
-
*/
|
|
12
|
-
query<R extends object = Record<string, any>>(sql: string, params?: SQLiteRestBindParams): Promise<{
|
|
13
|
-
rows: R[];
|
|
14
|
-
}>;
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Background worker handle returned by startWorker().
|
|
18
|
-
*/
|
|
19
|
-
export interface Worker {
|
|
20
|
-
/**
|
|
21
|
-
* Stop the worker loop and wait for in-flight tasks to settle.
|
|
22
|
-
*/
|
|
23
|
-
close(): Promise<void>;
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Absurd client interface.
|
|
27
|
-
*/
|
|
28
|
-
export interface AbsurdClient {
|
|
29
|
-
/**
|
|
30
|
-
* Create a new client bound to the provided connection.
|
|
31
|
-
* @param con Connection to use for queries.
|
|
32
|
-
* @param owned If true, close the connection when close() is called.
|
|
33
|
-
*/
|
|
34
|
-
/**
|
|
35
|
-
* Register a task handler.
|
|
36
|
-
* @param options Task registration options.
|
|
37
|
-
* @param handler Async task handler.
|
|
38
|
-
*/
|
|
39
|
-
registerTask<P = any, R = any>(options: TaskRegistrationOptions, handler: TaskHandler<P, R>): void;
|
|
40
|
-
/**
|
|
41
|
-
* Create a queue.
|
|
42
|
-
* @param queueName Optional queue name (defaults to client queue).
|
|
43
|
-
*/
|
|
44
|
-
createQueue(queueName?: string): Promise<void>;
|
|
45
|
-
/**
|
|
46
|
-
* Drop a queue.
|
|
47
|
-
* @param queueName Optional queue name (defaults to client queue).
|
|
48
|
-
*/
|
|
49
|
-
dropQueue(queueName?: string): Promise<void>;
|
|
50
|
-
/**
|
|
51
|
-
* List available queues.
|
|
52
|
-
*/
|
|
53
|
-
listQueues(): Promise<Array<string>>;
|
|
54
|
-
/**
|
|
55
|
-
* Spawn a task execution.
|
|
56
|
-
* @param taskName Task name.
|
|
57
|
-
* @param params Task parameters.
|
|
58
|
-
* @param options Spawn options including queue and retry behavior.
|
|
59
|
-
*/
|
|
60
|
-
spawn<P = any>(taskName: string, params: P, options?: SpawnOptions): Promise<SpawnResult>;
|
|
61
|
-
/**
|
|
62
|
-
* Emit an event on a queue.
|
|
63
|
-
* @param eventName Non-empty event name.
|
|
64
|
-
* @param payload Optional JSON payload.
|
|
65
|
-
* @param queueName Optional queue name (defaults to client queue).
|
|
66
|
-
*/
|
|
67
|
-
emitEvent(eventName: string, payload?: JsonValue, queueName?: string): Promise<void>;
|
|
68
|
-
/**
|
|
69
|
-
* Cancel a task by ID.
|
|
70
|
-
* @param taskID Task identifier.
|
|
71
|
-
* @param queueName Optional queue name (defaults to client queue).
|
|
72
|
-
*/
|
|
73
|
-
cancelTask(taskID: string, queueName?: string): Promise<void>;
|
|
74
|
-
/**
|
|
75
|
-
* Claim tasks for processing.
|
|
76
|
-
* @param options Claiming options.
|
|
77
|
-
*/
|
|
78
|
-
claimTasks(options?: {
|
|
79
|
-
batchSize?: number;
|
|
80
|
-
claimTimeout?: number;
|
|
81
|
-
workerId?: string;
|
|
82
|
-
}): Promise<ClaimedTask[]>;
|
|
83
|
-
/**
|
|
84
|
-
* Claim and process a batch of tasks sequentially.
|
|
85
|
-
* @param workerId Worker identifier.
|
|
86
|
-
* @param claimTimeout Lease duration in seconds.
|
|
87
|
-
* @param batchSize Max tasks to process.
|
|
88
|
-
*/
|
|
89
|
-
workBatch(workerId?: string, claimTimeout?: number, batchSize?: number): Promise<void>;
|
|
90
|
-
/**
|
|
91
|
-
* Start a background worker that polls and executes tasks.
|
|
92
|
-
* @param options Worker behavior options.
|
|
93
|
-
*/
|
|
94
|
-
startWorker(options?: WorkerOptions): Promise<Worker>;
|
|
95
|
-
/**
|
|
96
|
-
* Close the client and any owned resources.
|
|
97
|
-
*/
|
|
98
|
-
close(): Promise<void>;
|
|
99
|
-
/**
|
|
100
|
-
* Execute a claimed task (used by workers).
|
|
101
|
-
* @param task Claimed task record.
|
|
102
|
-
* @param claimTimeout Lease duration in seconds.
|
|
103
|
-
* @param options Execution options.
|
|
104
|
-
*/
|
|
105
|
-
executeTask(task: ClaimedTask, claimTimeout: number, options?: {
|
|
106
|
-
fatalOnLeaseTimeout?: boolean;
|
|
107
|
-
}): Promise<void>;
|
|
108
|
-
}
|
|
109
|
-
//# sourceMappingURL=absurd-types.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"absurd-types.d.ts","sourceRoot":"","sources":["../src/absurd-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EACT,YAAY,EACZ,WAAW,EACX,WAAW,EACX,uBAAuB,EACvB,aAAa,EACd,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB;;;;OAIG;IACH,KAAK,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC1C,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,oBAAoB,GAC5B,OAAO,CAAC;QAAE,IAAI,EAAE,CAAC,EAAE,CAAA;KAAE,CAAC,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IAGH;;;;OAIG;IACH,YAAY,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAC3B,OAAO,EAAE,uBAAuB,EAChC,OAAO,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,GACzB,IAAI,CAAC;IAER;;;OAGG;IACH,WAAW,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C;;;OAGG;IACH,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C;;OAEG;IACH,UAAU,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAErC;;;;;OAKG;IACH,KAAK,CAAC,CAAC,GAAG,GAAG,EACX,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,CAAC,EACT,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,WAAW,CAAC,CAAC;IAExB;;;;;OAKG;IACH,SAAS,CACP,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,SAAS,EACnB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB;;;;OAIG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9D;;;OAGG;IACH,UAAU,CAAC,OAAO,CAAC,EAAE;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAE3B;;;;;OAKG;IACH,SAAS,CACP,QAAQ,CAAC,EAAE,MAAM,EACjB,YAAY,CAAC,EAAE,MAAM,EACrB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB;;;OAGG;IACH,WAAW,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAEtD;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB;;;;;OAKG;IACH,WAAW,CACT,IAAI,EAAE,WAAW,EACjB,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE;QAAE,mBAAmB,CAAC,EAAE,OAAO,CAAA;KAAE,GAC1C,OAAO,CAAC,IAAI,CAAC,CAAC;CAClB"}
|
package/dist/absurd-types.js
DELETED
package/dist/absurd-types.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"absurd-types.js","sourceRoot":"","sources":["../src/absurd-types.ts"],"names":[],"mappings":""}
|
package/dist/cjs/absurd-types.js
DELETED
package/dist/sqlite.d.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import type { Queryable } from "./absurd-types";
|
|
2
|
-
import type { SQLiteRestBindParams, SQLiteDatabase } from "./sqlite-types";
|
|
3
|
-
export declare class SqliteConnection implements Queryable {
|
|
4
|
-
private readonly db;
|
|
5
|
-
private readonly maxRetries;
|
|
6
|
-
private readonly baseRetryDelayMs;
|
|
7
|
-
constructor(db: SQLiteDatabase);
|
|
8
|
-
query<R extends object = Record<string, any>>(sql: string, params?: SQLiteRestBindParams): Promise<{
|
|
9
|
-
rows: R[];
|
|
10
|
-
}>;
|
|
11
|
-
exec(sql: string, params?: SQLiteRestBindParams): Promise<void>;
|
|
12
|
-
private runWithRetry;
|
|
13
|
-
}
|
|
14
|
-
//# sourceMappingURL=sqlite.d.ts.map
|
package/dist/sqlite.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../src/sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EACV,oBAAoB,EACpB,cAAc,EAGf,MAAM,gBAAgB,CAAC;AAExB,qBAAa,gBAAiB,YAAW,SAAS;IAChD,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAiB;IACpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAK;IAChC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAM;gBAE3B,EAAE,EAAE,cAAc;IAKxB,KAAK,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAChD,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,oBAAoB,GAC5B,OAAO,CAAC;QAAE,IAAI,EAAE,CAAC,EAAE,CAAA;KAAE,CAAC;IAoBnB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;YAQvD,YAAY;CAc3B"}
|
package/dist/sqlite.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../src/sqlite.ts"],"names":[],"mappings":"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"}
|
package/src/absurd-types.ts
DELETED
|
@@ -1,149 +0,0 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
ClaimedTask,
|
|
3
|
-
JsonValue,
|
|
4
|
-
SpawnOptions,
|
|
5
|
-
SpawnResult,
|
|
6
|
-
TaskHandler,
|
|
7
|
-
TaskRegistrationOptions,
|
|
8
|
-
WorkerOptions,
|
|
9
|
-
} from "absurd-sdk";
|
|
10
|
-
|
|
11
|
-
import type { SQLiteRestBindParams } from "./sqlite-types";
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Minimal query interface compatible with Absurd's database operations.
|
|
15
|
-
*/
|
|
16
|
-
export interface Queryable {
|
|
17
|
-
/**
|
|
18
|
-
* Execute a parameterized SQL query and return rows.
|
|
19
|
-
* @param sql SQL text with parameter placeholders.
|
|
20
|
-
* @param params Optional positional parameters.
|
|
21
|
-
*/
|
|
22
|
-
query<R extends object = Record<string, any>>(
|
|
23
|
-
sql: string,
|
|
24
|
-
params?: SQLiteRestBindParams
|
|
25
|
-
): Promise<{ rows: R[] }>;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Background worker handle returned by startWorker().
|
|
30
|
-
*/
|
|
31
|
-
export interface Worker {
|
|
32
|
-
/**
|
|
33
|
-
* Stop the worker loop and wait for in-flight tasks to settle.
|
|
34
|
-
*/
|
|
35
|
-
close(): Promise<void>;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* Absurd client interface.
|
|
40
|
-
*/
|
|
41
|
-
export interface AbsurdClient {
|
|
42
|
-
/**
|
|
43
|
-
* Create a new client bound to the provided connection.
|
|
44
|
-
* @param con Connection to use for queries.
|
|
45
|
-
* @param owned If true, close the connection when close() is called.
|
|
46
|
-
*/
|
|
47
|
-
// bindToConnection(con: Queryable, owned?: boolean): this;
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* Register a task handler.
|
|
51
|
-
* @param options Task registration options.
|
|
52
|
-
* @param handler Async task handler.
|
|
53
|
-
*/
|
|
54
|
-
registerTask<P = any, R = any>(
|
|
55
|
-
options: TaskRegistrationOptions,
|
|
56
|
-
handler: TaskHandler<P, R>
|
|
57
|
-
): void;
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* Create a queue.
|
|
61
|
-
* @param queueName Optional queue name (defaults to client queue).
|
|
62
|
-
*/
|
|
63
|
-
createQueue(queueName?: string): Promise<void>;
|
|
64
|
-
/**
|
|
65
|
-
* Drop a queue.
|
|
66
|
-
* @param queueName Optional queue name (defaults to client queue).
|
|
67
|
-
*/
|
|
68
|
-
dropQueue(queueName?: string): Promise<void>;
|
|
69
|
-
/**
|
|
70
|
-
* List available queues.
|
|
71
|
-
*/
|
|
72
|
-
listQueues(): Promise<Array<string>>;
|
|
73
|
-
|
|
74
|
-
/**
|
|
75
|
-
* Spawn a task execution.
|
|
76
|
-
* @param taskName Task name.
|
|
77
|
-
* @param params Task parameters.
|
|
78
|
-
* @param options Spawn options including queue and retry behavior.
|
|
79
|
-
*/
|
|
80
|
-
spawn<P = any>(
|
|
81
|
-
taskName: string,
|
|
82
|
-
params: P,
|
|
83
|
-
options?: SpawnOptions
|
|
84
|
-
): Promise<SpawnResult>;
|
|
85
|
-
|
|
86
|
-
/**
|
|
87
|
-
* Emit an event on a queue.
|
|
88
|
-
* @param eventName Non-empty event name.
|
|
89
|
-
* @param payload Optional JSON payload.
|
|
90
|
-
* @param queueName Optional queue name (defaults to client queue).
|
|
91
|
-
*/
|
|
92
|
-
emitEvent(
|
|
93
|
-
eventName: string,
|
|
94
|
-
payload?: JsonValue,
|
|
95
|
-
queueName?: string
|
|
96
|
-
): Promise<void>;
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* Cancel a task by ID.
|
|
100
|
-
* @param taskID Task identifier.
|
|
101
|
-
* @param queueName Optional queue name (defaults to client queue).
|
|
102
|
-
*/
|
|
103
|
-
cancelTask(taskID: string, queueName?: string): Promise<void>;
|
|
104
|
-
|
|
105
|
-
/**
|
|
106
|
-
* Claim tasks for processing.
|
|
107
|
-
* @param options Claiming options.
|
|
108
|
-
*/
|
|
109
|
-
claimTasks(options?: {
|
|
110
|
-
batchSize?: number;
|
|
111
|
-
claimTimeout?: number;
|
|
112
|
-
workerId?: string;
|
|
113
|
-
}): Promise<ClaimedTask[]>;
|
|
114
|
-
|
|
115
|
-
/**
|
|
116
|
-
* Claim and process a batch of tasks sequentially.
|
|
117
|
-
* @param workerId Worker identifier.
|
|
118
|
-
* @param claimTimeout Lease duration in seconds.
|
|
119
|
-
* @param batchSize Max tasks to process.
|
|
120
|
-
*/
|
|
121
|
-
workBatch(
|
|
122
|
-
workerId?: string,
|
|
123
|
-
claimTimeout?: number,
|
|
124
|
-
batchSize?: number
|
|
125
|
-
): Promise<void>;
|
|
126
|
-
|
|
127
|
-
/**
|
|
128
|
-
* Start a background worker that polls and executes tasks.
|
|
129
|
-
* @param options Worker behavior options.
|
|
130
|
-
*/
|
|
131
|
-
startWorker(options?: WorkerOptions): Promise<Worker>;
|
|
132
|
-
|
|
133
|
-
/**
|
|
134
|
-
* Close the client and any owned resources.
|
|
135
|
-
*/
|
|
136
|
-
close(): Promise<void>;
|
|
137
|
-
|
|
138
|
-
/**
|
|
139
|
-
* Execute a claimed task (used by workers).
|
|
140
|
-
* @param task Claimed task record.
|
|
141
|
-
* @param claimTimeout Lease duration in seconds.
|
|
142
|
-
* @param options Execution options.
|
|
143
|
-
*/
|
|
144
|
-
executeTask(
|
|
145
|
-
task: ClaimedTask,
|
|
146
|
-
claimTimeout: number,
|
|
147
|
-
options?: { fatalOnLeaseTimeout?: boolean }
|
|
148
|
-
): Promise<void>;
|
|
149
|
-
}
|