clawdlets 0.2.4 → 0.3.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/main.mjs +556 -1004
- package/node_modules/@clawdlets/core/dist/lib/context.d.ts +21 -0
- package/node_modules/@clawdlets/core/dist/lib/context.d.ts.map +1 -0
- package/node_modules/@clawdlets/core/dist/lib/context.js +19 -0
- package/node_modules/@clawdlets/core/dist/lib/context.js.map +1 -0
- package/node_modules/@clawdlets/core/dist/lib/host-resolve.d.ts +6 -0
- package/node_modules/@clawdlets/core/dist/lib/host-resolve.d.ts.map +1 -0
- package/node_modules/@clawdlets/core/dist/lib/host-resolve.js +20 -0
- package/node_modules/@clawdlets/core/dist/lib/host-resolve.js.map +1 -0
- package/node_modules/@clawdlets/core/dist/repo-layout.d.ts +1 -0
- package/node_modules/@clawdlets/core/dist/repo-layout.d.ts.map +1 -1
- package/node_modules/@clawdlets/core/dist/repo-layout.js +2 -0
- package/node_modules/@clawdlets/core/dist/repo-layout.js.map +1 -1
- package/node_modules/@clawdlets/core/package.json +1 -3
- package/package.json +3 -6
- package/node_modules/@clawdlets/clf-queue/dist/client.d.ts +0 -21
- package/node_modules/@clawdlets/clf-queue/dist/client.d.ts.map +0 -1
- package/node_modules/@clawdlets/clf-queue/dist/client.js +0 -132
- package/node_modules/@clawdlets/clf-queue/dist/client.js.map +0 -1
- package/node_modules/@clawdlets/clf-queue/dist/index.d.ts +0 -9
- package/node_modules/@clawdlets/clf-queue/dist/index.d.ts.map +0 -1
- package/node_modules/@clawdlets/clf-queue/dist/index.js +0 -5
- package/node_modules/@clawdlets/clf-queue/dist/index.js.map +0 -1
- package/node_modules/@clawdlets/clf-queue/dist/jobs.d.ts +0 -32
- package/node_modules/@clawdlets/clf-queue/dist/jobs.d.ts.map +0 -1
- package/node_modules/@clawdlets/clf-queue/dist/jobs.js +0 -24
- package/node_modules/@clawdlets/clf-queue/dist/jobs.js.map +0 -1
- package/node_modules/@clawdlets/clf-queue/dist/protocol.d.ts +0 -118
- package/node_modules/@clawdlets/clf-queue/dist/protocol.d.ts.map +0 -1
- package/node_modules/@clawdlets/clf-queue/dist/protocol.js +0 -46
- package/node_modules/@clawdlets/clf-queue/dist/protocol.js.map +0 -1
- package/node_modules/@clawdlets/clf-queue/dist/queue/bootstrap-tokens.d.ts +0 -3
- package/node_modules/@clawdlets/clf-queue/dist/queue/bootstrap-tokens.d.ts.map +0 -1
- package/node_modules/@clawdlets/clf-queue/dist/queue/bootstrap-tokens.js +0 -112
- package/node_modules/@clawdlets/clf-queue/dist/queue/bootstrap-tokens.js.map +0 -1
- package/node_modules/@clawdlets/clf-queue/dist/queue/jobs.d.ts +0 -3
- package/node_modules/@clawdlets/clf-queue/dist/queue/jobs.d.ts.map +0 -1
- package/node_modules/@clawdlets/clf-queue/dist/queue/jobs.js +0 -313
- package/node_modules/@clawdlets/clf-queue/dist/queue/jobs.js.map +0 -1
- package/node_modules/@clawdlets/clf-queue/dist/queue/migrate.d.ts +0 -2
- package/node_modules/@clawdlets/clf-queue/dist/queue/migrate.d.ts.map +0 -1
- package/node_modules/@clawdlets/clf-queue/dist/queue/migrate.js +0 -74
- package/node_modules/@clawdlets/clf-queue/dist/queue/migrate.js.map +0 -1
- package/node_modules/@clawdlets/clf-queue/dist/queue/open.d.ts +0 -3
- package/node_modules/@clawdlets/clf-queue/dist/queue/open.d.ts.map +0 -1
- package/node_modules/@clawdlets/clf-queue/dist/queue/open.js +0 -27
- package/node_modules/@clawdlets/clf-queue/dist/queue/open.js.map +0 -1
- package/node_modules/@clawdlets/clf-queue/dist/queue/types.d.ts +0 -113
- package/node_modules/@clawdlets/clf-queue/dist/queue/types.d.ts.map +0 -1
- package/node_modules/@clawdlets/clf-queue/dist/queue/types.js +0 -2
- package/node_modules/@clawdlets/clf-queue/dist/queue/types.js.map +0 -1
- package/node_modules/@clawdlets/clf-queue/dist/queue/util.d.ts +0 -10
- package/node_modules/@clawdlets/clf-queue/dist/queue/util.d.ts.map +0 -1
- package/node_modules/@clawdlets/clf-queue/dist/queue/util.js +0 -30
- package/node_modules/@clawdlets/clf-queue/dist/queue/util.js.map +0 -1
- package/node_modules/@clawdlets/clf-queue/dist/queue.d.ts +0 -3
- package/node_modules/@clawdlets/clf-queue/dist/queue.d.ts.map +0 -1
- package/node_modules/@clawdlets/clf-queue/dist/queue.js +0 -2
- package/node_modules/@clawdlets/clf-queue/dist/queue.js.map +0 -1
- package/node_modules/@clawdlets/clf-queue/package.json +0 -36
- package/node_modules/@clawdlets/core/dist/lib/cattle-state.d.ts +0 -25
- package/node_modules/@clawdlets/core/dist/lib/cattle-state.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/cattle-state.js +0 -136
- package/node_modules/@clawdlets/core/dist/lib/cattle-state.js.map +0 -1
- package/node_modules/better-sqlite3/LICENSE +0 -21
- package/node_modules/better-sqlite3/README.md +0 -99
- package/node_modules/better-sqlite3/binding.gyp +0 -38
- package/node_modules/better-sqlite3/deps/common.gypi +0 -68
- package/node_modules/better-sqlite3/deps/copy.js +0 -31
- package/node_modules/better-sqlite3/deps/defines.gypi +0 -41
- package/node_modules/better-sqlite3/deps/download.sh +0 -122
- package/node_modules/better-sqlite3/deps/patches/1208.patch +0 -15
- package/node_modules/better-sqlite3/deps/sqlite3/sqlite3.c +0 -265969
- package/node_modules/better-sqlite3/deps/sqlite3/sqlite3.h +0 -13968
- package/node_modules/better-sqlite3/deps/sqlite3/sqlite3ext.h +0 -730
- package/node_modules/better-sqlite3/deps/sqlite3.gyp +0 -80
- package/node_modules/better-sqlite3/deps/test_extension.c +0 -21
- package/node_modules/better-sqlite3/lib/database.js +0 -90
- package/node_modules/better-sqlite3/lib/index.js +0 -3
- package/node_modules/better-sqlite3/lib/methods/aggregate.js +0 -43
- package/node_modules/better-sqlite3/lib/methods/backup.js +0 -67
- package/node_modules/better-sqlite3/lib/methods/function.js +0 -31
- package/node_modules/better-sqlite3/lib/methods/inspect.js +0 -7
- package/node_modules/better-sqlite3/lib/methods/pragma.js +0 -12
- package/node_modules/better-sqlite3/lib/methods/serialize.js +0 -16
- package/node_modules/better-sqlite3/lib/methods/table.js +0 -189
- package/node_modules/better-sqlite3/lib/methods/transaction.js +0 -78
- package/node_modules/better-sqlite3/lib/methods/wrappers.js +0 -54
- package/node_modules/better-sqlite3/lib/sqlite-error.js +0 -20
- package/node_modules/better-sqlite3/lib/util.js +0 -12
- package/node_modules/better-sqlite3/package.json +0 -59
- package/node_modules/better-sqlite3/src/addon.cpp +0 -47
- package/node_modules/better-sqlite3/src/better_sqlite3.cpp +0 -74
- package/node_modules/better-sqlite3/src/objects/backup.cpp +0 -120
- package/node_modules/better-sqlite3/src/objects/backup.hpp +0 -36
- package/node_modules/better-sqlite3/src/objects/database.cpp +0 -417
- package/node_modules/better-sqlite3/src/objects/database.hpp +0 -103
- package/node_modules/better-sqlite3/src/objects/statement-iterator.cpp +0 -113
- package/node_modules/better-sqlite3/src/objects/statement-iterator.hpp +0 -50
- package/node_modules/better-sqlite3/src/objects/statement.cpp +0 -383
- package/node_modules/better-sqlite3/src/objects/statement.hpp +0 -58
- package/node_modules/better-sqlite3/src/util/bind-map.cpp +0 -73
- package/node_modules/better-sqlite3/src/util/binder.cpp +0 -193
- package/node_modules/better-sqlite3/src/util/constants.cpp +0 -172
- package/node_modules/better-sqlite3/src/util/custom-aggregate.cpp +0 -121
- package/node_modules/better-sqlite3/src/util/custom-function.cpp +0 -59
- package/node_modules/better-sqlite3/src/util/custom-table.cpp +0 -409
- package/node_modules/better-sqlite3/src/util/data-converter.cpp +0 -17
- package/node_modules/better-sqlite3/src/util/data.cpp +0 -194
- package/node_modules/better-sqlite3/src/util/helpers.cpp +0 -109
- package/node_modules/better-sqlite3/src/util/macros.cpp +0 -70
- package/node_modules/better-sqlite3/src/util/query-macros.cpp +0 -71
- package/node_modules/better-sqlite3/src/util/row-builder.cpp +0 -49
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import type { ClfQueue } from "./types.js";
|
|
2
|
-
export declare function createBootstrapTokenOps(db: import("better-sqlite3").Database): Pick<ClfQueue, "createCattleBootstrapToken" | "consumeCattleBootstrapToken" | "pruneCattleBootstrapTokens">;
|
|
3
|
-
//# sourceMappingURL=bootstrap-tokens.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap-tokens.d.ts","sourceRoot":"","sources":["../../src/queue/bootstrap-tokens.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAA2B,QAAQ,EAAE,MAAM,YAAY,CAAC;AAepE,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,OAAO,gBAAgB,EAAE,QAAQ,GAAG,IAAI,CAClF,QAAQ,EACR,4BAA4B,GAAG,6BAA6B,GAAG,4BAA4B,CAC5F,CAyIA"}
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
import { randomBytes } from "node:crypto";
|
|
2
|
-
import { isSafeEnvVarName, safeParseJson, sha256Hex } from "./util.js";
|
|
3
|
-
export function createBootstrapTokenOps(db) {
|
|
4
|
-
const insertBootstrapToken = db.prepare(`
|
|
5
|
-
insert into cattle_bootstrap_tokens (
|
|
6
|
-
token_hash, created_at, expires_at, used_at,
|
|
7
|
-
job_id, requester, cattle_name,
|
|
8
|
-
env_keys_json, public_env_json
|
|
9
|
-
)
|
|
10
|
-
values (
|
|
11
|
-
@token_hash, @created_at, @expires_at, null,
|
|
12
|
-
@job_id, @requester, @cattle_name,
|
|
13
|
-
@env_keys_json, @public_env_json
|
|
14
|
-
)
|
|
15
|
-
`);
|
|
16
|
-
const getBootstrapToken = db.prepare(`select * from cattle_bootstrap_tokens where token_hash = @token_hash limit 1`);
|
|
17
|
-
const markBootstrapTokenUsed = db.prepare(`
|
|
18
|
-
update cattle_bootstrap_tokens
|
|
19
|
-
set used_at = @now
|
|
20
|
-
where token_hash = @token_hash
|
|
21
|
-
and used_at is null
|
|
22
|
-
and expires_at > @now
|
|
23
|
-
`);
|
|
24
|
-
const pruneBootstrapTokens = db.prepare(`delete from cattle_bootstrap_tokens where expires_at <= @now or used_at is not null`);
|
|
25
|
-
const createBootstrapTokenTx = db.transaction((params) => {
|
|
26
|
-
const token = randomBytes(32).toString("hex");
|
|
27
|
-
const tokenHash = sha256Hex(token);
|
|
28
|
-
const expiresAt = params.now + params.ttlMs;
|
|
29
|
-
insertBootstrapToken.run({
|
|
30
|
-
token_hash: tokenHash,
|
|
31
|
-
created_at: params.now,
|
|
32
|
-
expires_at: expiresAt,
|
|
33
|
-
job_id: params.jobId,
|
|
34
|
-
requester: params.requester,
|
|
35
|
-
cattle_name: params.cattleName,
|
|
36
|
-
env_keys_json: JSON.stringify(params.envKeys),
|
|
37
|
-
public_env_json: JSON.stringify(params.publicEnv),
|
|
38
|
-
});
|
|
39
|
-
return { token, expiresAt };
|
|
40
|
-
});
|
|
41
|
-
const consumeBootstrapTokenTx = db.transaction((params) => {
|
|
42
|
-
const row = getBootstrapToken.get({ token_hash: params.tokenHash });
|
|
43
|
-
if (!row)
|
|
44
|
-
return null;
|
|
45
|
-
if (row.used_at != null)
|
|
46
|
-
return null;
|
|
47
|
-
if (row.expires_at <= params.now)
|
|
48
|
-
return null;
|
|
49
|
-
const res = markBootstrapTokenUsed.run({ token_hash: params.tokenHash, now: params.now });
|
|
50
|
-
if (res.changes !== 1)
|
|
51
|
-
return null;
|
|
52
|
-
const envKeys = safeParseJson(row.env_keys_json);
|
|
53
|
-
const publicEnv = safeParseJson(row.public_env_json);
|
|
54
|
-
return {
|
|
55
|
-
jobId: row.job_id,
|
|
56
|
-
requester: row.requester,
|
|
57
|
-
cattleName: row.cattle_name,
|
|
58
|
-
envKeys: Array.isArray(envKeys) ? envKeys.map((v) => String(v || "").trim()).filter(Boolean) : [],
|
|
59
|
-
publicEnv: publicEnv && typeof publicEnv === "object" && !Array.isArray(publicEnv) ? publicEnv : {},
|
|
60
|
-
createdAt: row.created_at,
|
|
61
|
-
expiresAt: row.expires_at,
|
|
62
|
-
usedAt: params.now,
|
|
63
|
-
};
|
|
64
|
-
});
|
|
65
|
-
return {
|
|
66
|
-
createCattleBootstrapToken: (params) => {
|
|
67
|
-
const jobId = String(params.jobId || "").trim();
|
|
68
|
-
if (!jobId)
|
|
69
|
-
throw new Error("createCattleBootstrapToken.jobId missing");
|
|
70
|
-
const requester = String(params.requester || "").trim();
|
|
71
|
-
if (!requester)
|
|
72
|
-
throw new Error("createCattleBootstrapToken.requester missing");
|
|
73
|
-
const cattleName = String(params.cattleName || "").trim();
|
|
74
|
-
if (!cattleName)
|
|
75
|
-
throw new Error("createCattleBootstrapToken.cattleName missing");
|
|
76
|
-
const envKeys = Array.from(new Set((params.envKeys || []).map((k) => String(k || "").trim()).filter(Boolean)));
|
|
77
|
-
for (const k of envKeys) {
|
|
78
|
-
if (!isSafeEnvVarName(k))
|
|
79
|
-
throw new Error(`createCattleBootstrapToken.envKeys contains invalid env var name: ${k}`);
|
|
80
|
-
}
|
|
81
|
-
const publicEnv = {};
|
|
82
|
-
for (const [k, v] of Object.entries(params.publicEnv || {})) {
|
|
83
|
-
const key = String(k || "").trim();
|
|
84
|
-
if (!key)
|
|
85
|
-
continue;
|
|
86
|
-
if (!isSafeEnvVarName(key))
|
|
87
|
-
throw new Error(`createCattleBootstrapToken.publicEnv contains invalid env var name: ${key}`);
|
|
88
|
-
if (!key.startsWith("CLAWDLETS_")) {
|
|
89
|
-
throw new Error(`createCattleBootstrapToken.publicEnv not allowed: ${key} (public env must use CLAWDLETS_*)`);
|
|
90
|
-
}
|
|
91
|
-
publicEnv[key] = String(v ?? "");
|
|
92
|
-
}
|
|
93
|
-
const now = params.now ?? Date.now();
|
|
94
|
-
const ttlMs = Math.max(30_000, Math.min(60 * 60_000, Math.floor(params.ttlMs ?? 10 * 60_000)));
|
|
95
|
-
return createBootstrapTokenTx({ jobId, requester, cattleName, envKeys, publicEnv, now, ttlMs });
|
|
96
|
-
},
|
|
97
|
-
consumeCattleBootstrapToken: (params) => {
|
|
98
|
-
const token = String(params.token || "").trim();
|
|
99
|
-
if (!token)
|
|
100
|
-
return null;
|
|
101
|
-
const now = params.now ?? Date.now();
|
|
102
|
-
const tokenHash = sha256Hex(token);
|
|
103
|
-
return consumeBootstrapTokenTx({ tokenHash, now });
|
|
104
|
-
},
|
|
105
|
-
pruneCattleBootstrapTokens: (params) => {
|
|
106
|
-
const now = params.now ?? Date.now();
|
|
107
|
-
const res = pruneBootstrapTokens.run({ now });
|
|
108
|
-
return res.changes;
|
|
109
|
-
},
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
//# sourceMappingURL=bootstrap-tokens.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap-tokens.js","sourceRoot":"","sources":["../../src/queue/bootstrap-tokens.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import type { ClfQueue } from "./types.js";
|
|
2
|
-
export declare function createQueueJobOps(db: import("better-sqlite3").Database): Pick<ClfQueue, "enqueue" | "get" | "list" | "claimNext" | "extendLease" | "ack" | "fail" | "cancel" | "prune">;
|
|
3
|
-
//# sourceMappingURL=jobs.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"jobs.d.ts","sourceRoot":"","sources":["../../src/queue/jobs.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAmD,MAAM,YAAY,CAAC;AA2C5F,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,OAAO,gBAAgB,EAAE,QAAQ,GAAG,IAAI,CAC5E,QAAQ,EACR,SAAS,GAAG,KAAK,GAAG,MAAM,GAAG,WAAW,GAAG,aAAa,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAC/F,CAyUA"}
|
|
@@ -1,313 +0,0 @@
|
|
|
1
|
-
import { randomUUID } from "node:crypto";
|
|
2
|
-
import { computeBackoffMs, isSqliteUniqueConstraintError, safeParseJson } from "./util.js";
|
|
3
|
-
function rowToJob(row) {
|
|
4
|
-
return {
|
|
5
|
-
jobId: row.job_id,
|
|
6
|
-
kind: row.kind,
|
|
7
|
-
payload: safeParseJson(row.payload_json),
|
|
8
|
-
requester: row.requester,
|
|
9
|
-
idempotencyKey: row.idempotency_key,
|
|
10
|
-
status: row.status,
|
|
11
|
-
priority: row.priority,
|
|
12
|
-
runAt: row.run_at,
|
|
13
|
-
createdAt: row.created_at,
|
|
14
|
-
updatedAt: row.updated_at,
|
|
15
|
-
attempt: row.attempt,
|
|
16
|
-
maxAttempts: row.max_attempts,
|
|
17
|
-
lockedBy: row.locked_by,
|
|
18
|
-
leaseUntil: row.lease_until,
|
|
19
|
-
lastError: String(row.last_error || ""),
|
|
20
|
-
result: safeParseJson(row.result_json),
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
export function createQueueJobOps(db) {
|
|
24
|
-
const insertJob = db.prepare(`
|
|
25
|
-
insert into jobs (
|
|
26
|
-
job_id, kind, payload_json,
|
|
27
|
-
requester, idempotency_key,
|
|
28
|
-
status, priority, run_at,
|
|
29
|
-
created_at, updated_at,
|
|
30
|
-
attempt, max_attempts,
|
|
31
|
-
locked_by, lease_until,
|
|
32
|
-
last_error, result_json
|
|
33
|
-
)
|
|
34
|
-
values (
|
|
35
|
-
@job_id, @kind, @payload_json,
|
|
36
|
-
@requester, @idempotency_key,
|
|
37
|
-
@status, @priority, @run_at,
|
|
38
|
-
@created_at, @updated_at,
|
|
39
|
-
@attempt, @max_attempts,
|
|
40
|
-
null, null,
|
|
41
|
-
'', null
|
|
42
|
-
)
|
|
43
|
-
`);
|
|
44
|
-
const findByIdempotency = db.prepare(`select job_id from jobs where requester = @requester and idempotency_key = @idempotency_key limit 1`);
|
|
45
|
-
const getJob = db.prepare(`select * from jobs where job_id = @job_id limit 1`);
|
|
46
|
-
const listJobsBase = (filters) => {
|
|
47
|
-
const where = [];
|
|
48
|
-
const params = {};
|
|
49
|
-
if (filters?.requester) {
|
|
50
|
-
where.push("requester = @requester");
|
|
51
|
-
params.requester = filters.requester;
|
|
52
|
-
}
|
|
53
|
-
if (filters?.statuses && filters.statuses.length > 0) {
|
|
54
|
-
where.push(`status in (${filters.statuses.map((_, i) => `@s${i}`).join(",")})`);
|
|
55
|
-
filters.statuses.forEach((s, i) => (params[`s${i}`] = s));
|
|
56
|
-
}
|
|
57
|
-
if (filters?.kinds && filters.kinds.length > 0) {
|
|
58
|
-
where.push(`kind in (${filters.kinds.map((_, i) => `@k${i}`).join(",")})`);
|
|
59
|
-
filters.kinds.forEach((k, i) => (params[`k${i}`] = k));
|
|
60
|
-
}
|
|
61
|
-
const whereSql = where.length > 0 ? `where ${where.join(" and ")}` : "";
|
|
62
|
-
const limit = Math.max(1, Math.min(500, Math.floor(filters?.limit ?? 50)));
|
|
63
|
-
params.limit = limit;
|
|
64
|
-
return {
|
|
65
|
-
sql: `select * from jobs ${whereSql} order by created_at desc, job_id asc limit @limit`,
|
|
66
|
-
params,
|
|
67
|
-
};
|
|
68
|
-
};
|
|
69
|
-
const selectNext = db.prepare(`
|
|
70
|
-
select job_id
|
|
71
|
-
from (
|
|
72
|
-
select job_id, priority, run_at, created_at
|
|
73
|
-
from jobs
|
|
74
|
-
where status = 'queued' and run_at <= @now
|
|
75
|
-
union all
|
|
76
|
-
select job_id, priority, run_at, created_at
|
|
77
|
-
from jobs
|
|
78
|
-
where status = 'running' and lease_until is not null and lease_until <= @now
|
|
79
|
-
) ready
|
|
80
|
-
order by priority desc, run_at asc, created_at asc, job_id asc
|
|
81
|
-
limit 1
|
|
82
|
-
`);
|
|
83
|
-
const claimJob = db.prepare(`
|
|
84
|
-
update jobs
|
|
85
|
-
set
|
|
86
|
-
status = 'running',
|
|
87
|
-
locked_by = @worker_id,
|
|
88
|
-
lease_until = @lease_until,
|
|
89
|
-
updated_at = @now,
|
|
90
|
-
attempt = attempt + 1
|
|
91
|
-
where
|
|
92
|
-
job_id = @job_id
|
|
93
|
-
and (
|
|
94
|
-
(status = 'queued' and run_at <= @now)
|
|
95
|
-
or (status = 'running' and lease_until is not null and lease_until <= @now)
|
|
96
|
-
)
|
|
97
|
-
`);
|
|
98
|
-
const updateLease = db.prepare(`
|
|
99
|
-
update jobs
|
|
100
|
-
set lease_until = @lease_until,
|
|
101
|
-
updated_at = @now
|
|
102
|
-
where job_id = @job_id
|
|
103
|
-
and status = 'running'
|
|
104
|
-
and locked_by = @worker_id
|
|
105
|
-
`);
|
|
106
|
-
const ackJob = db.prepare(`
|
|
107
|
-
update jobs
|
|
108
|
-
set
|
|
109
|
-
status = 'done',
|
|
110
|
-
updated_at = @now,
|
|
111
|
-
locked_by = null,
|
|
112
|
-
lease_until = null,
|
|
113
|
-
result_json = @result_json
|
|
114
|
-
where job_id = @job_id
|
|
115
|
-
and status = 'running'
|
|
116
|
-
and locked_by = @worker_id
|
|
117
|
-
`);
|
|
118
|
-
const failToRetry = db.prepare(`
|
|
119
|
-
update jobs
|
|
120
|
-
set
|
|
121
|
-
status = 'queued',
|
|
122
|
-
updated_at = @now,
|
|
123
|
-
locked_by = null,
|
|
124
|
-
lease_until = null,
|
|
125
|
-
run_at = @run_at,
|
|
126
|
-
last_error = @last_error
|
|
127
|
-
where job_id = @job_id
|
|
128
|
-
and status = 'running'
|
|
129
|
-
and locked_by = @worker_id
|
|
130
|
-
`);
|
|
131
|
-
const failTerminal = db.prepare(`
|
|
132
|
-
update jobs
|
|
133
|
-
set
|
|
134
|
-
status = 'failed',
|
|
135
|
-
updated_at = @now,
|
|
136
|
-
locked_by = null,
|
|
137
|
-
lease_until = null,
|
|
138
|
-
last_error = @last_error
|
|
139
|
-
where job_id = @job_id
|
|
140
|
-
and status = 'running'
|
|
141
|
-
and locked_by = @worker_id
|
|
142
|
-
`);
|
|
143
|
-
const cancelJob = db.prepare(`
|
|
144
|
-
update jobs
|
|
145
|
-
set
|
|
146
|
-
status = 'canceled',
|
|
147
|
-
updated_at = @now,
|
|
148
|
-
locked_by = null,
|
|
149
|
-
lease_until = null
|
|
150
|
-
where job_id = @job_id
|
|
151
|
-
and status in ('queued','running')
|
|
152
|
-
`);
|
|
153
|
-
const insertEvent = db.prepare(`insert into job_events (job_id, at, type, message, attempt) values (@job_id, @at, @type, @message, @attempt)`);
|
|
154
|
-
const pruneJobs = db.prepare(`delete from jobs where created_at < @cutoff and status in ('done','failed','canceled')`);
|
|
155
|
-
const enqueueTx = db.transaction((params) => {
|
|
156
|
-
if (params.idempotencyKey) {
|
|
157
|
-
const existing = findByIdempotency.get({ requester: params.requester, idempotency_key: params.idempotencyKey });
|
|
158
|
-
if (existing?.job_id)
|
|
159
|
-
return { jobId: existing.job_id, deduped: true };
|
|
160
|
-
}
|
|
161
|
-
const jobId = randomUUID();
|
|
162
|
-
try {
|
|
163
|
-
insertJob.run({
|
|
164
|
-
job_id: jobId,
|
|
165
|
-
kind: params.kind,
|
|
166
|
-
payload_json: JSON.stringify(params.payload ?? null),
|
|
167
|
-
requester: params.requester,
|
|
168
|
-
idempotency_key: params.idempotencyKey,
|
|
169
|
-
status: "queued",
|
|
170
|
-
priority: params.priority,
|
|
171
|
-
run_at: params.runAt,
|
|
172
|
-
created_at: params.now,
|
|
173
|
-
updated_at: params.now,
|
|
174
|
-
attempt: 0,
|
|
175
|
-
max_attempts: params.maxAttempts,
|
|
176
|
-
});
|
|
177
|
-
}
|
|
178
|
-
catch (e) {
|
|
179
|
-
if (params.idempotencyKey && isSqliteUniqueConstraintError(e)) {
|
|
180
|
-
const existing = findByIdempotency.get({ requester: params.requester, idempotency_key: params.idempotencyKey });
|
|
181
|
-
if (existing?.job_id)
|
|
182
|
-
return { jobId: existing.job_id, deduped: true };
|
|
183
|
-
}
|
|
184
|
-
throw e;
|
|
185
|
-
}
|
|
186
|
-
insertEvent.run({ job_id: jobId, at: params.now, type: "enqueue", message: "", attempt: 0 });
|
|
187
|
-
return { jobId, deduped: false };
|
|
188
|
-
});
|
|
189
|
-
const claimTx = db.transaction((params) => {
|
|
190
|
-
const picked = selectNext.get({ now: params.now });
|
|
191
|
-
if (!picked?.job_id)
|
|
192
|
-
return null;
|
|
193
|
-
const leaseUntil = params.now + params.leaseMs;
|
|
194
|
-
const res = claimJob.run({ job_id: picked.job_id, now: params.now, worker_id: params.workerId, lease_until: leaseUntil });
|
|
195
|
-
if (res.changes !== 1)
|
|
196
|
-
return null;
|
|
197
|
-
const row = getJob.get({ job_id: picked.job_id });
|
|
198
|
-
if (!row)
|
|
199
|
-
return null;
|
|
200
|
-
insertEvent.run({ job_id: picked.job_id, at: params.now, type: "claim", message: params.workerId, attempt: row.attempt });
|
|
201
|
-
return rowToJob(row);
|
|
202
|
-
});
|
|
203
|
-
return {
|
|
204
|
-
enqueue: (params) => {
|
|
205
|
-
const kind = String(params.kind || "").trim();
|
|
206
|
-
if (!kind)
|
|
207
|
-
throw new Error("enqueue.kind missing");
|
|
208
|
-
const requester = String(params.requester || "").trim();
|
|
209
|
-
if (!requester)
|
|
210
|
-
throw new Error("enqueue.requester missing");
|
|
211
|
-
const idempotencyKey = String(params.idempotencyKey || "").trim();
|
|
212
|
-
const now = Date.now();
|
|
213
|
-
const runAt = Number.isFinite(params.runAt) && params.runAt > 0 ? Math.floor(params.runAt) : now;
|
|
214
|
-
const priority = Number.isFinite(params.priority) ? Math.floor(params.priority) : 0;
|
|
215
|
-
const maxAttempts = Number.isFinite(params.maxAttempts) && params.maxAttempts > 0 ? Math.floor(params.maxAttempts) : 1;
|
|
216
|
-
return enqueueTx({ kind, payload: params.payload ?? null, requester, idempotencyKey, runAt, priority, maxAttempts, now });
|
|
217
|
-
},
|
|
218
|
-
get: (jobId) => {
|
|
219
|
-
const v = String(jobId || "").trim();
|
|
220
|
-
if (!v)
|
|
221
|
-
return null;
|
|
222
|
-
const row = getJob.get({ job_id: v });
|
|
223
|
-
return row ? rowToJob(row) : null;
|
|
224
|
-
},
|
|
225
|
-
list: (filters) => {
|
|
226
|
-
const { sql, params } = listJobsBase(filters);
|
|
227
|
-
const stmt = db.prepare(sql);
|
|
228
|
-
return stmt.all(params).map(rowToJob);
|
|
229
|
-
},
|
|
230
|
-
claimNext: (params) => {
|
|
231
|
-
const workerId = String(params.workerId || "").trim();
|
|
232
|
-
if (!workerId)
|
|
233
|
-
throw new Error("claimNext.workerId missing");
|
|
234
|
-
const now = params.now ?? Date.now();
|
|
235
|
-
const leaseMs = Math.max(5_000, Math.min(60 * 60_000, Math.floor(params.leaseMs ?? 120_000)));
|
|
236
|
-
return claimTx({ workerId, now, leaseMs });
|
|
237
|
-
},
|
|
238
|
-
extendLease: (params) => {
|
|
239
|
-
const jobId = String(params.jobId || "").trim();
|
|
240
|
-
const workerId = String(params.workerId || "").trim();
|
|
241
|
-
if (!jobId || !workerId)
|
|
242
|
-
return false;
|
|
243
|
-
const now = Date.now();
|
|
244
|
-
const res = updateLease.run({ job_id: jobId, worker_id: workerId, lease_until: params.leaseUntil, now });
|
|
245
|
-
return res.changes === 1;
|
|
246
|
-
},
|
|
247
|
-
ack: (params) => {
|
|
248
|
-
const jobId = String(params.jobId || "").trim();
|
|
249
|
-
const workerId = String(params.workerId || "").trim();
|
|
250
|
-
if (!jobId || !workerId)
|
|
251
|
-
return false;
|
|
252
|
-
const now = params.now ?? Date.now();
|
|
253
|
-
const row = getJob.get({ job_id: jobId });
|
|
254
|
-
if (!row)
|
|
255
|
-
return false;
|
|
256
|
-
const res = ackJob.run({ job_id: jobId, worker_id: workerId, now, result_json: JSON.stringify(params.result ?? null) });
|
|
257
|
-
if (res.changes === 1)
|
|
258
|
-
insertEvent.run({ job_id: jobId, at: now, type: "ack", message: "", attempt: row.attempt });
|
|
259
|
-
return res.changes === 1;
|
|
260
|
-
},
|
|
261
|
-
fail: (params) => {
|
|
262
|
-
const jobId = String(params.jobId || "").trim();
|
|
263
|
-
const workerId = String(params.workerId || "").trim();
|
|
264
|
-
if (!jobId || !workerId)
|
|
265
|
-
return null;
|
|
266
|
-
const now = params.now ?? Date.now();
|
|
267
|
-
const row = getJob.get({ job_id: jobId });
|
|
268
|
-
if (!row)
|
|
269
|
-
return null;
|
|
270
|
-
const err = String(params.error || "").trim() || "unknown error";
|
|
271
|
-
const attempt = Math.max(1, row.attempt);
|
|
272
|
-
const maxAttempts = Math.max(1, row.max_attempts);
|
|
273
|
-
if (attempt < maxAttempts) {
|
|
274
|
-
const baseMs = params.retry?.baseMs ?? 5_000;
|
|
275
|
-
const maxMs = params.retry?.maxMs ?? 5 * 60_000;
|
|
276
|
-
const delay = computeBackoffMs({ attempt, baseMs, maxMs });
|
|
277
|
-
const res = failToRetry.run({ job_id: jobId, worker_id: workerId, now, run_at: now + delay, last_error: err });
|
|
278
|
-
if (res.changes === 1) {
|
|
279
|
-
insertEvent.run({ job_id: jobId, at: now, type: "retry", message: err, attempt });
|
|
280
|
-
return { status: "queued" };
|
|
281
|
-
}
|
|
282
|
-
return null;
|
|
283
|
-
}
|
|
284
|
-
const res = failTerminal.run({ job_id: jobId, worker_id: workerId, now, last_error: err });
|
|
285
|
-
if (res.changes === 1) {
|
|
286
|
-
insertEvent.run({ job_id: jobId, at: now, type: "fail", message: err, attempt });
|
|
287
|
-
return { status: "failed" };
|
|
288
|
-
}
|
|
289
|
-
return null;
|
|
290
|
-
},
|
|
291
|
-
cancel: (params) => {
|
|
292
|
-
const jobId = String(params.jobId || "").trim();
|
|
293
|
-
if (!jobId)
|
|
294
|
-
return false;
|
|
295
|
-
const now = params.now ?? Date.now();
|
|
296
|
-
const row = getJob.get({ job_id: jobId });
|
|
297
|
-
if (!row)
|
|
298
|
-
return false;
|
|
299
|
-
const res = cancelJob.run({ job_id: jobId, now });
|
|
300
|
-
if (res.changes === 1)
|
|
301
|
-
insertEvent.run({ job_id: jobId, at: now, type: "cancel", message: "", attempt: row.attempt });
|
|
302
|
-
return res.changes === 1;
|
|
303
|
-
},
|
|
304
|
-
prune: (params) => {
|
|
305
|
-
const now = params.now ?? Date.now();
|
|
306
|
-
const keepDays = Math.max(1, Math.floor(params.keepDays));
|
|
307
|
-
const cutoff = now - keepDays * 86400_000;
|
|
308
|
-
const res = pruneJobs.run({ cutoff });
|
|
309
|
-
return res.changes;
|
|
310
|
-
},
|
|
311
|
-
};
|
|
312
|
-
}
|
|
313
|
-
//# sourceMappingURL=jobs.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"jobs.js","sourceRoot":"","sources":["../../src/queue/jobs.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/queue/migrate.ts"],"names":[],"mappings":"AAAA,wBAAgB,eAAe,CAAC,EAAE,EAAE,OAAO,gBAAgB,EAAE,QAAQ,GAAG,IAAI,CA0E3E"}
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
export function migrateClfQueue(db) {
|
|
2
|
-
let version = db.pragma("user_version", { simple: true });
|
|
3
|
-
if (version === 0) {
|
|
4
|
-
db.exec(`
|
|
5
|
-
pragma foreign_keys = on;
|
|
6
|
-
|
|
7
|
-
create table jobs (
|
|
8
|
-
job_id text primary key,
|
|
9
|
-
kind text not null,
|
|
10
|
-
payload_json text not null,
|
|
11
|
-
requester text not null,
|
|
12
|
-
idempotency_key text not null,
|
|
13
|
-
status text not null,
|
|
14
|
-
priority integer not null,
|
|
15
|
-
run_at integer not null,
|
|
16
|
-
created_at integer not null,
|
|
17
|
-
updated_at integer not null,
|
|
18
|
-
attempt integer not null,
|
|
19
|
-
max_attempts integer not null,
|
|
20
|
-
locked_by text,
|
|
21
|
-
lease_until integer,
|
|
22
|
-
last_error text,
|
|
23
|
-
result_json text
|
|
24
|
-
);
|
|
25
|
-
|
|
26
|
-
create unique index jobs_by_idempotency on jobs(requester, idempotency_key) where idempotency_key != '';
|
|
27
|
-
create index jobs_by_status_run_at on jobs(status, run_at);
|
|
28
|
-
create index jobs_by_requester on jobs(requester, created_at desc);
|
|
29
|
-
create index jobs_by_kind on jobs(kind, created_at desc);
|
|
30
|
-
|
|
31
|
-
create table job_events (
|
|
32
|
-
id integer primary key autoincrement,
|
|
33
|
-
job_id text not null,
|
|
34
|
-
at integer not null,
|
|
35
|
-
type text not null,
|
|
36
|
-
message text not null,
|
|
37
|
-
attempt integer not null,
|
|
38
|
-
foreign key(job_id) references jobs(job_id) on delete cascade
|
|
39
|
-
);
|
|
40
|
-
create index job_events_by_job_id on job_events(job_id, at);
|
|
41
|
-
`);
|
|
42
|
-
db.pragma("user_version = 1");
|
|
43
|
-
version = 1;
|
|
44
|
-
}
|
|
45
|
-
if (version === 1) {
|
|
46
|
-
db.exec(`
|
|
47
|
-
create table cattle_bootstrap_tokens (
|
|
48
|
-
token_hash text primary key,
|
|
49
|
-
created_at integer not null,
|
|
50
|
-
expires_at integer not null,
|
|
51
|
-
used_at integer,
|
|
52
|
-
job_id text not null,
|
|
53
|
-
requester text not null,
|
|
54
|
-
cattle_name text not null,
|
|
55
|
-
env_keys_json text not null,
|
|
56
|
-
public_env_json text not null
|
|
57
|
-
);
|
|
58
|
-
create index cattle_bootstrap_tokens_by_expires_at on cattle_bootstrap_tokens(expires_at);
|
|
59
|
-
create index cattle_bootstrap_tokens_by_job_id on cattle_bootstrap_tokens(job_id);
|
|
60
|
-
`);
|
|
61
|
-
db.pragma("user_version = 2");
|
|
62
|
-
version = 2;
|
|
63
|
-
}
|
|
64
|
-
if (version === 2) {
|
|
65
|
-
db.exec(`
|
|
66
|
-
create index jobs_by_status_lease_until on jobs(status, lease_until);
|
|
67
|
-
`);
|
|
68
|
-
db.pragma("user_version = 3");
|
|
69
|
-
version = 3;
|
|
70
|
-
}
|
|
71
|
-
if (version !== 3)
|
|
72
|
-
throw new Error(`unsupported clf queue schema version: ${version}`);
|
|
73
|
-
}
|
|
74
|
-
//# sourceMappingURL=migrate.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/queue/migrate.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,eAAe,CAAC,EAAqC;IACnE,IAAI,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAW,CAAC;IACpE,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;QAClB,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAqCP,CAAC,CAAC;QACH,EAAE,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;QAC9B,OAAO,GAAG,CAAC,CAAC;IACd,CAAC;IAED,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;QAClB,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;KAcP,CAAC,CAAC;QACH,EAAE,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;QAC9B,OAAO,GAAG,CAAC,CAAC;IACd,CAAC;IAED,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;QAClB,EAAE,CAAC,IAAI,CAAC;;KAEP,CAAC,CAAC;QACH,EAAE,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;QAC9B,OAAO,GAAG,CAAC,CAAC;IACd,CAAC;IAED,IAAI,OAAO,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,OAAO,EAAE,CAAC,CAAC;AACzF,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"open.d.ts","sourceRoot":"","sources":["../../src/queue/open.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAS3C,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAoBrD"}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import path from "node:path";
|
|
2
|
-
import process from "node:process";
|
|
3
|
-
import { createRequire } from "node:module";
|
|
4
|
-
import { ensurePrivateDir, ensurePrivateFile } from "@clawdlets/core/lib/fs-private";
|
|
5
|
-
import { migrateClfQueue } from "./migrate.js";
|
|
6
|
-
import { createQueueJobOps } from "./jobs.js";
|
|
7
|
-
import { createBootstrapTokenOps } from "./bootstrap-tokens.js";
|
|
8
|
-
const require = createRequire(import.meta.url);
|
|
9
|
-
const BetterSqlite3 = require("better-sqlite3");
|
|
10
|
-
export function openClfQueue(dbPath) {
|
|
11
|
-
const abs = path.isAbsolute(dbPath) ? dbPath : path.resolve(process.cwd(), dbPath);
|
|
12
|
-
ensurePrivateDir(path.dirname(abs));
|
|
13
|
-
const db = new BetterSqlite3(abs);
|
|
14
|
-
ensurePrivateFile(abs);
|
|
15
|
-
db.pragma("journal_mode = WAL");
|
|
16
|
-
db.pragma("synchronous = NORMAL");
|
|
17
|
-
db.pragma("foreign_keys = ON");
|
|
18
|
-
migrateClfQueue(db);
|
|
19
|
-
const jobs = createQueueJobOps(db);
|
|
20
|
-
const tokens = createBootstrapTokenOps(db);
|
|
21
|
-
return {
|
|
22
|
-
close: () => db.close(),
|
|
23
|
-
...jobs,
|
|
24
|
-
...tokens,
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
//# sourceMappingURL=open.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"open.js","sourceRoot":"","sources":["../../src/queue/open.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACrF,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAoC,CAAC;AAEnF,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;IACnF,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IAEpC,MAAM,EAAE,GAAG,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC;IAClC,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACvB,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAChC,EAAE,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;IAClC,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAE/B,eAAe,CAAC,EAAE,CAAC,CAAC;IAEpB,MAAM,IAAI,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,uBAAuB,CAAC,EAAE,CAAC,CAAC;IAE3C,OAAO;QACL,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE;QACvB,GAAG,IAAI;QACP,GAAG,MAAM;KACV,CAAC;AACJ,CAAC"}
|