@nuetzliches/croniq-runner 0.2.0 → 0.4.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/CHANGELOG.md +67 -0
- package/README.md +25 -2
- package/dist/client.d.ts +61 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +87 -0
- package/dist/client.js.map +1 -1
- package/dist/context.d.ts +9 -0
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +2 -0
- package/dist/context.js.map +1 -1
- package/dist/dispatcher.d.ts +1 -1
- package/dist/dispatcher.d.ts.map +1 -1
- package/dist/dispatcher.js +39 -8
- package/dist/dispatcher.js.map +1 -1
- package/dist/duration.d.ts +6 -0
- package/dist/duration.d.ts.map +1 -1
- package/dist/duration.js +11 -0
- package/dist/duration.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/log-writer.d.ts +1 -1
- package/dist/log-writer.d.ts.map +1 -1
- package/dist/log-writer.js +17 -3
- package/dist/log-writer.js.map +1 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +10 -2
- package/dist/logger.js.map +1 -1
- package/dist/options.d.ts +42 -1
- package/dist/options.d.ts.map +1 -1
- package/dist/options.js +21 -1
- package/dist/options.js.map +1 -1
- package/dist/protocol.d.ts +5 -0
- package/dist/protocol.d.ts.map +1 -1
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +145 -6
- package/dist/runner.js.map +1 -1
- package/dist/sanitize.d.ts +82 -0
- package/dist/sanitize.d.ts.map +1 -0
- package/dist/sanitize.js +157 -0
- package/dist/sanitize.js.map +1 -0
- package/dist/security.d.ts +19 -0
- package/dist/security.d.ts.map +1 -0
- package/dist/security.js +83 -0
- package/dist/security.js.map +1 -0
- package/dist/trigger.d.ts +21 -1
- package/dist/trigger.d.ts.map +1 -1
- package/dist/trigger.js +4 -0
- package/dist/trigger.js.map +1 -1
- package/package.json +1 -1
package/dist/log-writer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log-writer.d.ts","sourceRoot":"","sources":["../src/log-writer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"log-writer.d.ts","sourceRoot":"","sources":["../src/log-writer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAqB,MAAM,aAAa,CAAC;AAEnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/D,MAAM,WAAW,SAAS;IACxB,oEAAoE;IACpE,KAAK,CAAC,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9F,gCAAgC;IAChC,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,sDAAsD;IACtD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB;;;OAGG;IACH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAED;;;;;;;;;;GAUG;AACH,qBAAa,kBAAmB,YAAW,SAAS;;gBAkBhD,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,aAAa,EACzB,IAAI,EAAE,wBAAwB,EAC9B,MAAM,EAAE,MAAM;IAUV,KAAK,CAAC,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAK7F,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAUjD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAQhB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAyH/B"}
|
package/dist/log-writer.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { isOwnershipDenied } from './client.js';
|
|
1
2
|
import { deferred, sleep } from './deferred.js';
|
|
2
3
|
/**
|
|
3
4
|
* Streaming log writer. Backed by a bounded in-memory buffer and a single
|
|
@@ -69,7 +70,7 @@ export class StreamingLogWriter {
|
|
|
69
70
|
await Promise.race([this.#flusherTask, timeout]);
|
|
70
71
|
timeoutController.abort();
|
|
71
72
|
if (timedOut) {
|
|
72
|
-
this.#logger.warn(
|
|
73
|
+
this.#logger.warn('log_writer drain timed out', { execution_id: this.#executionId, timeout_ms: this.#opts.shutdownTimeoutMs });
|
|
73
74
|
}
|
|
74
75
|
}
|
|
75
76
|
#wake() {
|
|
@@ -124,7 +125,10 @@ export class StreamingLogWriter {
|
|
|
124
125
|
}
|
|
125
126
|
}
|
|
126
127
|
catch (err) {
|
|
127
|
-
this.#logger.error(
|
|
128
|
+
this.#logger.error('log_writer flusher crashed', {
|
|
129
|
+
error: String(err),
|
|
130
|
+
execution_id: this.#executionId,
|
|
131
|
+
});
|
|
128
132
|
}
|
|
129
133
|
finally {
|
|
130
134
|
// Reject any remaining flushers so callers don't hang.
|
|
@@ -145,7 +149,17 @@ export class StreamingLogWriter {
|
|
|
145
149
|
await this.#client.pushEvents(this.#executionId, chunk, ac.signal);
|
|
146
150
|
}
|
|
147
151
|
catch (err) {
|
|
148
|
-
|
|
152
|
+
if (isOwnershipDenied(err)) {
|
|
153
|
+
// Permanent (#436/#437) — every later batch is lost too, so the
|
|
154
|
+
// operator must see this rather than wonder why the execution
|
|
155
|
+
// produced no output.
|
|
156
|
+
this.#logger.error('log_writer: batch POST refused with 403 Forbidden — this runner\'s credential ' +
|
|
157
|
+
'does not own its runner_id, so no log event will reach the server. Give the ' +
|
|
158
|
+
'runner its own runner_id, or release the existing binding with ' +
|
|
159
|
+
'DELETE /v1/runners/{id}', { error: String(err), execution_id: this.#executionId, dropped: chunk.length });
|
|
160
|
+
continue;
|
|
161
|
+
}
|
|
162
|
+
this.#logger.warn('log_writer: batch POST failed — events dropped', { error: String(err), execution_id: this.#executionId, dropped: chunk.length });
|
|
149
163
|
}
|
|
150
164
|
}
|
|
151
165
|
}
|
package/dist/log-writer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log-writer.js","sourceRoot":"","sources":["../src/log-writer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"log-writer.js","sourceRoot":"","sources":["../src/log-writer.ts"],"names":[],"mappings":"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"}
|
package/dist/logger.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAGpD,MAAM,MAAM,QAAQ,GAAG,cAAc,CAAC;AAEtC,MAAM,WAAW,MAAM;IACrB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC/D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC/D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC9D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC9D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAChE;AAUD;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,QAAQ,GAAE,QAAiB,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CA+BlF;AAED,0DAA0D;AAC1D,eAAO,MAAM,UAAU,EAAE,MAMxB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CASjF"}
|
package/dist/logger.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { escapeControlChars } from './sanitize.js';
|
|
1
2
|
const ORDER = {
|
|
2
3
|
trace: 0,
|
|
3
4
|
debug: 1,
|
|
@@ -19,9 +20,16 @@ export function consoleLogger(minLevel = 'warn', prefix) {
|
|
|
19
20
|
const emit = (level, message, fields) => {
|
|
20
21
|
if (ORDER[level] < threshold)
|
|
21
22
|
return;
|
|
23
|
+
// The message is escaped before it reaches the console: it is the one part
|
|
24
|
+
// of a record that is plain text, and a handler's exception message — or,
|
|
25
|
+
// before #441, a server-supplied identifier — can carry CRLF or ANSI
|
|
26
|
+
// escapes. `fields` needs no such treatment because JSON.stringify already
|
|
27
|
+
// escapes the C0 range, ESC included. This mirrors Go, whose slog handlers
|
|
28
|
+
// escape control characters in every rendered value.
|
|
29
|
+
const safe = escapeControlChars(message);
|
|
22
30
|
const line = fields && Object.keys(fields).length > 0
|
|
23
|
-
? `${tag}${level}: ${
|
|
24
|
-
: `${tag}${level}: ${
|
|
31
|
+
? `${tag}${level}: ${safe} ${JSON.stringify(fields)}`
|
|
32
|
+
: `${tag}${level}: ${safe}`;
|
|
25
33
|
// Map to console method, but funnel everything to stderr for warn/error
|
|
26
34
|
// so application stdout stays clean for actual job output.
|
|
27
35
|
// eslint-disable-next-line no-console
|
package/dist/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}
|
package/dist/options.d.ts
CHANGED
|
@@ -19,8 +19,22 @@ export interface ResolvedLogWriterOptions {
|
|
|
19
19
|
shutdownTimeoutMs: number;
|
|
20
20
|
}
|
|
21
21
|
export interface CroniqRunnerOptions {
|
|
22
|
-
/**
|
|
22
|
+
/**
|
|
23
|
+
* Base URL of the Croniq server, e.g. `http://localhost:4000`.
|
|
24
|
+
*
|
|
25
|
+
* `https://` is required unless the host is loopback (`localhost`,
|
|
26
|
+
* `127.0.0.0/8`, `::1`) — the API key rides along on every request and would
|
|
27
|
+
* otherwise travel in cleartext. See {@link allowInsecureHttp}.
|
|
28
|
+
*/
|
|
23
29
|
serverUrl: string;
|
|
30
|
+
/**
|
|
31
|
+
* Opt in to a cleartext `http://` {@link serverUrl} on a non-loopback host.
|
|
32
|
+
*
|
|
33
|
+
* Off by default: without it such a URL is rejected by `resolveOptions`.
|
|
34
|
+
* With it, the SDK still emits one loud startup warning — the API key then
|
|
35
|
+
* travels in cleartext on every poll. Default `false`.
|
|
36
|
+
*/
|
|
37
|
+
allowInsecureHttp?: boolean;
|
|
24
38
|
/**
|
|
25
39
|
* Stable runner identifier. If omitted, the SDK resolves it via
|
|
26
40
|
* `RUNNER_ID` env var → state file under {@link runnerDataDir} →
|
|
@@ -62,6 +76,30 @@ export interface CroniqRunnerOptions {
|
|
|
62
76
|
pollRetryDelayMs?: number;
|
|
63
77
|
/** Idle delay when the runner is at `maxInflight` capacity. Default 500 ms. */
|
|
64
78
|
capacityBackoffMs?: number;
|
|
79
|
+
/**
|
|
80
|
+
* How many consecutive `409 Conflict` responses from `POST /v1/work/poll`
|
|
81
|
+
* the runner tolerates before `run()` rejects with a
|
|
82
|
+
* `PollInstanceConflictError`. Default 3, range [1, 100].
|
|
83
|
+
*
|
|
84
|
+
* A sustained 409 means a second process is registered under the same
|
|
85
|
+
* `runnerId` and no amount of retrying fixes that. The counter resets on a
|
|
86
|
+
* successful poll or on any non-409 failure (5xx, network, timeout), which
|
|
87
|
+
* say nothing about instance ownership.
|
|
88
|
+
*/
|
|
89
|
+
maxConsecutivePollConflicts?: number;
|
|
90
|
+
/**
|
|
91
|
+
* How many consecutive `401 Unauthorized` responses from
|
|
92
|
+
* `POST /v1/work/poll` the runner tolerates before `run()` rejects with an
|
|
93
|
+
* `AuthFailedError`. Default 3, range [1, 100].
|
|
94
|
+
*
|
|
95
|
+
* The API key is read once and never re-read, so a rejected credential
|
|
96
|
+
* cannot fix itself; retrying only produces an idle-looking process that
|
|
97
|
+
* never exits. Not fatal on the first 401 — rotation hands over through an
|
|
98
|
+
* expiry window (server issue #471) and a race around it should not kill a
|
|
99
|
+
* healthy runner. The counter resets on a successful poll and on any other
|
|
100
|
+
* failure: a 5xx says nothing about whether the key is valid.
|
|
101
|
+
*/
|
|
102
|
+
maxConsecutiveAuthFailures?: number;
|
|
65
103
|
/** Streaming log-writer tunables. */
|
|
66
104
|
logWriter?: LogWriterOptions;
|
|
67
105
|
/** Optional logger for SDK-level diagnostics. Defaults to a console logger that emits warn/error only. */
|
|
@@ -69,6 +107,7 @@ export interface CroniqRunnerOptions {
|
|
|
69
107
|
}
|
|
70
108
|
export interface ResolvedRunnerOptions {
|
|
71
109
|
serverUrl: string;
|
|
110
|
+
allowInsecureHttp: boolean;
|
|
72
111
|
runnerId: string | undefined;
|
|
73
112
|
runnerIdPrefix: string;
|
|
74
113
|
runnerDataDir: string | undefined;
|
|
@@ -82,6 +121,8 @@ export interface ResolvedRunnerOptions {
|
|
|
82
121
|
drainTimeoutMs: number;
|
|
83
122
|
pollRetryDelayMs: number;
|
|
84
123
|
capacityBackoffMs: number;
|
|
124
|
+
maxConsecutivePollConflicts: number;
|
|
125
|
+
maxConsecutiveAuthFailures: number;
|
|
85
126
|
logWriter: ResolvedLogWriterOptions;
|
|
86
127
|
logger: Logger;
|
|
87
128
|
}
|
package/dist/options.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"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"}
|
package/dist/options.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { assertSecureServerUrl } from './security.js';
|
|
1
2
|
import { trimTrailingSlashes } from './url.js';
|
|
2
3
|
const DEFAULT_LOG_WRITER = {
|
|
3
4
|
channelCapacity: 256,
|
|
@@ -17,10 +18,26 @@ export function resolveOptions(input, defaultLogger) {
|
|
|
17
18
|
catch {
|
|
18
19
|
throw new TypeError(`CroniqRunnerOptions.serverUrl is not a valid URL: ${input.serverUrl}`);
|
|
19
20
|
}
|
|
21
|
+
const logger = input.logger ?? defaultLogger;
|
|
22
|
+
// Fail fast on a cleartext base URL that would leak the API key (#440).
|
|
23
|
+
const allowInsecureHttp = input.allowInsecureHttp ?? false;
|
|
24
|
+
assertSecureServerUrl(input.serverUrl, allowInsecureHttp, 'CroniqRunnerOptions.serverUrl', logger);
|
|
20
25
|
const maxInflight = input.maxInflight ?? 5;
|
|
21
26
|
if (!Number.isInteger(maxInflight) || maxInflight < 1 || maxInflight > 1024) {
|
|
22
27
|
throw new RangeError(`CroniqRunnerOptions.maxInflight must be an integer in [1, 1024], got ${maxInflight}`);
|
|
23
28
|
}
|
|
29
|
+
const maxConsecutivePollConflicts = input.maxConsecutivePollConflicts ?? 3;
|
|
30
|
+
if (!Number.isInteger(maxConsecutivePollConflicts) ||
|
|
31
|
+
maxConsecutivePollConflicts < 1 ||
|
|
32
|
+
maxConsecutivePollConflicts > 100) {
|
|
33
|
+
throw new RangeError(`CroniqRunnerOptions.maxConsecutivePollConflicts must be an integer in [1, 100], got ${maxConsecutivePollConflicts}`);
|
|
34
|
+
}
|
|
35
|
+
const maxConsecutiveAuthFailures = input.maxConsecutiveAuthFailures ?? 3;
|
|
36
|
+
if (!Number.isInteger(maxConsecutiveAuthFailures) ||
|
|
37
|
+
maxConsecutiveAuthFailures < 1 ||
|
|
38
|
+
maxConsecutiveAuthFailures > 100) {
|
|
39
|
+
throw new RangeError(`CroniqRunnerOptions.maxConsecutiveAuthFailures must be an integer in [1, 100], got ${maxConsecutiveAuthFailures}`);
|
|
40
|
+
}
|
|
24
41
|
const logWriter = {
|
|
25
42
|
channelCapacity: input.logWriter?.channelCapacity ?? DEFAULT_LOG_WRITER.channelCapacity,
|
|
26
43
|
batchSizeThreshold: input.logWriter?.batchSizeThreshold ?? DEFAULT_LOG_WRITER.batchSizeThreshold,
|
|
@@ -30,6 +47,7 @@ export function resolveOptions(input, defaultLogger) {
|
|
|
30
47
|
};
|
|
31
48
|
return {
|
|
32
49
|
serverUrl: trimTrailingSlashes(input.serverUrl),
|
|
50
|
+
allowInsecureHttp,
|
|
33
51
|
runnerId: input.runnerId,
|
|
34
52
|
runnerIdPrefix: input.runnerIdPrefix ?? 'runner',
|
|
35
53
|
runnerDataDir: input.runnerDataDir,
|
|
@@ -43,8 +61,10 @@ export function resolveOptions(input, defaultLogger) {
|
|
|
43
61
|
drainTimeoutMs: input.drainTimeoutMs ?? 30_000,
|
|
44
62
|
pollRetryDelayMs: input.pollRetryDelayMs ?? 5_000,
|
|
45
63
|
capacityBackoffMs: input.capacityBackoffMs ?? 500,
|
|
64
|
+
maxConsecutivePollConflicts,
|
|
65
|
+
maxConsecutiveAuthFailures,
|
|
46
66
|
logWriter,
|
|
47
|
-
logger
|
|
67
|
+
logger,
|
|
48
68
|
};
|
|
49
69
|
}
|
|
50
70
|
//# sourceMappingURL=options.js.map
|
package/dist/options.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"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"}
|
package/dist/protocol.d.ts
CHANGED
|
@@ -10,6 +10,11 @@ export interface WorkAssignment {
|
|
|
10
10
|
execution_id: string;
|
|
11
11
|
job_key: string;
|
|
12
12
|
fire_at: string;
|
|
13
|
+
/**
|
|
14
|
+
* Original logical fire time (RFC 3339). Absent when the server predates
|
|
15
|
+
* the field — consumers must not fall back to `fire_at`.
|
|
16
|
+
*/
|
|
17
|
+
scheduled_for?: string;
|
|
13
18
|
attempt: number;
|
|
14
19
|
metadata: unknown;
|
|
15
20
|
timeout?: string;
|
package/dist/protocol.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,cAAc,EAAE,CAAC;IACvB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AAE9C,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,YAAY,GAAG,wBAAwB,CAAC;CAClD;AAED,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3E,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB"}
|
|
1
|
+
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,cAAc,EAAE,CAAC;IACvB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AAE9C,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,YAAY,GAAG,wBAAwB,CAAC;CAClD;AAED,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3E,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB"}
|
package/dist/runner.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAgBA,OAAO,EAEL,KAAK,UAAU,EACf,KAAK,sBAAsB,EAC5B,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAkB,KAAK,mBAAmB,EAA8B,MAAM,cAAc,CAAC;AAepG;;;;;;;GAOG;AACH,qBAAa,YAAY;;gBAaX,OAAO,EAAE,mBAAmB;IAYxC;;;;OAIG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,sBAAsB,GAAG,IAAI;IAKhF,gFAAgF;IAChF,iBAAiB,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI;IAK5C,qEAAqE;IACrE,IAAI,QAAQ,IAAI,MAAM,CAGrB;IAED,sEAAsE;IACtE,IAAI,QAAQ,IAAI,SAAS,MAAM,EAAE,CAEhC;IAED;;;;OAIG;IACG,GAAG,CAAC,MAAM,GAAE,WAA0C,GAAG,OAAO,CAAC,IAAI,CAAC;IA4C5E;;;OAGG;IACH,YAAY,IAAI,IAAI;CA0RrB;AAED,sEAAsE;AACtE,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,YAAY,CAEvE"}
|
package/dist/runner.js
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { randomBytes } from 'node:crypto';
|
|
2
2
|
import { setMaxListeners } from 'node:events';
|
|
3
3
|
import { anySignal } from './abort.js';
|
|
4
|
-
import { CroniqClient, HttpError } from './client.js';
|
|
4
|
+
import { CroniqClient, HttpError, AuthFailedError, PollInstanceConflictError, RunnerOwnershipDeniedError, isInstanceConflict, isOwnershipDenied, isUnauthorized, } from './client.js';
|
|
5
5
|
import { sleep } from './deferred.js';
|
|
6
6
|
import { ExecutionDispatcher } from './dispatcher.js';
|
|
7
7
|
import { HandlerRegistry, } from './handler.js';
|
|
8
8
|
import { resolveRunnerId } from './identity.js';
|
|
9
9
|
import { consoleLogger } from './logger.js';
|
|
10
10
|
import { resolveOptions } from './options.js';
|
|
11
|
+
import { isSafeExecutionId, previewForLog, rejectAssignmentReason, rejectionAckError, } from './sanitize.js';
|
|
11
12
|
/**
|
|
12
13
|
* The Croniq runner: polls the server for work, dispatches handlers
|
|
13
14
|
* concurrently up to {@link CroniqRunnerOptions.maxInflight}, renews leases
|
|
@@ -134,6 +135,13 @@ export class CroniqRunner {
|
|
|
134
135
|
}
|
|
135
136
|
}
|
|
136
137
|
async #pollLoop(signal) {
|
|
138
|
+
// Consecutive 409 Conflict responses on poll. Reset by a successful poll
|
|
139
|
+
// or by any non-409 failure — see `maxConsecutivePollConflicts`.
|
|
140
|
+
let consecutiveConflicts = 0;
|
|
141
|
+
// Consecutive 401s, tracked separately: a run of conflicts must not
|
|
142
|
+
// spend the auth budget, or a duplicate deployment would be reported
|
|
143
|
+
// as an authentication failure.
|
|
144
|
+
let consecutiveAuthFailures = 0;
|
|
137
145
|
while (!signal.aborted) {
|
|
138
146
|
// Control-slot polling (issue #176): even at capacity we still poll
|
|
139
147
|
// so the server can deliver cancels via PollResponse.cancel. The
|
|
@@ -155,10 +163,74 @@ export class CroniqRunner {
|
|
|
155
163
|
catch (err) {
|
|
156
164
|
if (signal.aborted)
|
|
157
165
|
return;
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
166
|
+
// A 403 is permanent (issue #437): the credential is bound to
|
|
167
|
+
// another runner_id, so the next poll fails identically. Stop with
|
|
168
|
+
// an actionable error instead of retrying on the poll interval,
|
|
169
|
+
// which makes a fenced-out runner look merely idle.
|
|
170
|
+
if (isOwnershipDenied(err)) {
|
|
171
|
+
this.#logger.error('fatal: poll refused with 403 Forbidden — this runner\'s credential does not own ' +
|
|
172
|
+
'runner_id. Give the runner its own runner_id, or release the existing binding ' +
|
|
173
|
+
'with DELETE /v1/runners/{id}', { runner_id: this.#runnerId });
|
|
174
|
+
throw new RunnerOwnershipDeniedError(this.#runnerId);
|
|
175
|
+
}
|
|
176
|
+
// A 401 says the key was rejected, and the client never re-reads
|
|
177
|
+
// it, so every later poll presents the same dead credential.
|
|
178
|
+
// Budgeted rather than fatal at once: rotation hands over through an
|
|
179
|
+
// expiry window (server issue #471) and a race around it should not
|
|
180
|
+
// kill a healthy runner (issue #473).
|
|
181
|
+
if (isUnauthorized(err)) {
|
|
182
|
+
consecutiveAuthFailures += 1;
|
|
183
|
+
if (consecutiveAuthFailures >= this.#options.maxConsecutiveAuthFailures) {
|
|
184
|
+
this.#logger.error(`fatal: poll refused with 401 Unauthorized ${consecutiveAuthFailures} times in ` +
|
|
185
|
+
'a row — the API key was rejected. It may have been revoked, or its rotation ' +
|
|
186
|
+
'grace window may have elapsed. Restart the runner with the current key', { runner_id: this.#runnerId });
|
|
187
|
+
throw new AuthFailedError(consecutiveAuthFailures);
|
|
188
|
+
}
|
|
189
|
+
this.#logger.warn(`poll returned 401 Unauthorized (${consecutiveAuthFailures}/` +
|
|
190
|
+
`${this.#options.maxConsecutiveAuthFailures}) — the API key was rejected; ` +
|
|
191
|
+
`retrying after ${this.#options.pollRetryDelayMs}ms`, { runner_id: this.#runnerId });
|
|
192
|
+
// A 401 is not a 409, so it clears the conflict budget just like
|
|
193
|
+
// any other non-409 failure. This branch returns before reaching
|
|
194
|
+
// the reset below, so it has to do it here (issue #508).
|
|
195
|
+
consecutiveConflicts = 0;
|
|
196
|
+
try {
|
|
197
|
+
await sleep(this.#options.pollRetryDelayMs, signal);
|
|
198
|
+
}
|
|
199
|
+
catch {
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
continue;
|
|
203
|
+
}
|
|
204
|
+
// Anything that is not a 401 clears the auth budget: a 5xx or a
|
|
205
|
+
// timeout says nothing about whether the credential is valid.
|
|
206
|
+
consecutiveAuthFailures = 0;
|
|
207
|
+
// A 409 means a newer instance has taken this runner_id over
|
|
208
|
+
// (fencing, issue #374). One is transient — the deposed instance may
|
|
209
|
+
// win it back — so we back off and retry. A streak of them is a
|
|
210
|
+
// duplicate deployment, and retrying forever hides it behind a
|
|
211
|
+
// warning that scrolls past (issue #134 sub-item 1).
|
|
212
|
+
if (isInstanceConflict(err)) {
|
|
213
|
+
consecutiveConflicts += 1;
|
|
214
|
+
if (consecutiveConflicts >= this.#options.maxConsecutivePollConflicts) {
|
|
215
|
+
this.#logger.error(`fatal: poll refused with 409 Conflict ${consecutiveConflicts} times in a row — ` +
|
|
216
|
+
'another runner is registered with this runner_id. Stop the duplicate process ' +
|
|
217
|
+
'or rotate the runner_id', { runner_id: this.#runnerId });
|
|
218
|
+
throw new PollInstanceConflictError(this.#runnerId, consecutiveConflicts);
|
|
219
|
+
}
|
|
220
|
+
this.#logger.warn(`poll returned 409 Conflict (${consecutiveConflicts}/` +
|
|
221
|
+
`${this.#options.maxConsecutivePollConflicts}) — another runner instance may be ` +
|
|
222
|
+
`active; retrying after ${this.#options.pollRetryDelayMs}ms`, { runner_id: this.#runnerId });
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
// Non-409 transient (5xx, network, timeout) — unrelated to instance
|
|
226
|
+
// ownership, so a recovered outage must not accumulate with later
|
|
227
|
+
// conflicts.
|
|
228
|
+
consecutiveConflicts = 0;
|
|
229
|
+
const detail = err instanceof HttpError
|
|
230
|
+
? { status: err.status, status_text: err.statusText }
|
|
231
|
+
: { error: String(err) };
|
|
232
|
+
this.#logger.warn(`poll failed — backing off ${this.#options.pollRetryDelayMs}ms`, detail);
|
|
233
|
+
}
|
|
162
234
|
try {
|
|
163
235
|
await sleep(this.#options.pollRetryDelayMs, signal);
|
|
164
236
|
}
|
|
@@ -167,6 +239,13 @@ export class CroniqRunner {
|
|
|
167
239
|
}
|
|
168
240
|
continue;
|
|
169
241
|
}
|
|
242
|
+
// Poll succeeded — the other instance must have died or released the
|
|
243
|
+
// identity, so the conflict streak starts over. The auth budget starts
|
|
244
|
+
// over with it: the credential just worked, so an earlier 401 must not
|
|
245
|
+
// still count against a runner that has been healthy since (issue
|
|
246
|
+
// #507).
|
|
247
|
+
consecutiveConflicts = 0;
|
|
248
|
+
consecutiveAuthFailures = 0;
|
|
170
249
|
this.#handleCancellations(response.cancel);
|
|
171
250
|
if (atCapacity) {
|
|
172
251
|
// Work is always empty in this branch (server-side capacity
|
|
@@ -180,6 +259,14 @@ export class CroniqRunner {
|
|
|
180
259
|
continue;
|
|
181
260
|
}
|
|
182
261
|
for (const assignment of response.work) {
|
|
262
|
+
// Ingest guard: an assignment carrying a control character in either
|
|
263
|
+
// identifier never reaches a handler, a log record or a telemetry
|
|
264
|
+
// attribute. See sanitize.ts for the rule and why it is a denylist.
|
|
265
|
+
const rejected = rejectAssignmentReason(assignment.execution_id, assignment.job_key);
|
|
266
|
+
if (rejected !== undefined) {
|
|
267
|
+
await this.#rejectAssignment(assignment, rejected, signal);
|
|
268
|
+
continue;
|
|
269
|
+
}
|
|
183
270
|
if (this.#inflight.has(assignment.execution_id))
|
|
184
271
|
continue;
|
|
185
272
|
const ac = new AbortController();
|
|
@@ -193,13 +280,65 @@ export class CroniqRunner {
|
|
|
193
280
|
}
|
|
194
281
|
}
|
|
195
282
|
}
|
|
283
|
+
/**
|
|
284
|
+
* Handle a work assignment refused by the ingest guard.
|
|
285
|
+
*
|
|
286
|
+
* The two cases differ in what the runner can still tell the server:
|
|
287
|
+
*
|
|
288
|
+
* - **Unsafe `execution_id`** — nothing. That value is what addresses an ack
|
|
289
|
+
* or renew, so there is no way to report anything about this execution.
|
|
290
|
+
* The assignment is dropped and the server's lease expires.
|
|
291
|
+
* - **Unsafe `job_key`, valid `execution_id`** — a failure ack. The handler
|
|
292
|
+
* never runs, but the execution completes with an error naming the
|
|
293
|
+
* offending field, so the operator sees a dead-lettered execution instead
|
|
294
|
+
* of an execution that is silently requeued by the stale-claim reaper and
|
|
295
|
+
* refused again on every later poll.
|
|
296
|
+
*
|
|
297
|
+
* Awaited rather than fire-and-forget: this path only triggers on malformed
|
|
298
|
+
* input, so pausing the loop for one small POST costs nothing and keeps the
|
|
299
|
+
* ordering observable.
|
|
300
|
+
*/
|
|
301
|
+
async #rejectAssignment(assignment, field, signal) {
|
|
302
|
+
// Escaped and truncated explicitly: this is the one place a refused value
|
|
303
|
+
// is rendered, and it is hostile by definition.
|
|
304
|
+
const preview = previewForLog(assignment[field]);
|
|
305
|
+
const ackable = field === 'job_key';
|
|
306
|
+
this.#logger.warn('rejected work assignment with unsafe identifier', {
|
|
307
|
+
field,
|
|
308
|
+
value: preview,
|
|
309
|
+
acked: ackable,
|
|
310
|
+
});
|
|
311
|
+
if (!ackable)
|
|
312
|
+
return;
|
|
313
|
+
try {
|
|
314
|
+
await this.#client.ack({
|
|
315
|
+
runner_id: this.#runnerId,
|
|
316
|
+
execution_id: assignment.execution_id,
|
|
317
|
+
status: 'failure',
|
|
318
|
+
attempt: assignment.attempt,
|
|
319
|
+
duration_ms: 0,
|
|
320
|
+
error: rejectionAckError(field, assignment[field]),
|
|
321
|
+
}, signal);
|
|
322
|
+
}
|
|
323
|
+
catch (err) {
|
|
324
|
+
this.#logger.warn('failed to ack a rejected work assignment', {
|
|
325
|
+
execution_id: assignment.execution_id,
|
|
326
|
+
error: String(err),
|
|
327
|
+
});
|
|
328
|
+
}
|
|
329
|
+
}
|
|
196
330
|
#handleCancellations(cancelIds) {
|
|
197
331
|
if (cancelIds.length === 0)
|
|
198
332
|
return;
|
|
199
333
|
for (const id of cancelIds) {
|
|
334
|
+
// Cancel ids are server-supplied too. An unsafe one can never match an
|
|
335
|
+
// in-flight key (those were validated on ingest), but checking here
|
|
336
|
+
// keeps the value out of the log line below on any code path.
|
|
337
|
+
if (!isSafeExecutionId(id))
|
|
338
|
+
continue;
|
|
200
339
|
const ac = this.#inflight.get(id);
|
|
201
340
|
if (ac && !ac.signal.aborted) {
|
|
202
|
-
this.#logger.info(
|
|
341
|
+
this.#logger.info('server requested cancellation', { execution_id: id });
|
|
203
342
|
ac.abort();
|
|
204
343
|
}
|
|
205
344
|
}
|
package/dist/runner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}
|