@hoox-sh/hoox-shared 1.3.0 → 1.5.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/README.md +6 -0
- package/dist/agent-config-fields.js +23 -29
- package/dist/analytics.d.ts +3 -4
- package/dist/analytics.d.ts.map +1 -1
- package/dist/analytics.js +56 -16
- package/dist/api-client.js +12 -21
- package/dist/colors.js +5 -21
- package/dist/config.js +11 -27
- package/dist/cron-handler.js +0 -16
- package/dist/d1/index.js +12 -27
- package/dist/d1/repository.js +7 -21
- package/dist/d1/schemas.js +4 -20
- package/dist/dashboard-manifest.d.ts +2 -1
- package/dist/dashboard-manifest.d.ts.map +1 -1
- package/dist/dashboard-manifest.js +37 -33
- package/dist/entitlements.d.ts +46 -0
- package/dist/entitlements.d.ts.map +1 -0
- package/dist/entitlements.js +15 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +11 -25
- package/dist/exchange-client.js +2 -18
- package/dist/exchanges/base-exchange-client.js +0 -16
- package/dist/exchanges/index.js +0 -16
- package/dist/format-time.js +2 -18
- package/dist/formatters.js +12 -28
- package/dist/health.js +7 -21
- package/dist/index.d.ts +8 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3895 -3653
- package/dist/kill-switch.js +14 -20
- package/dist/kvKeys.d.ts +11 -0
- package/dist/kvKeys.d.ts.map +1 -1
- package/dist/kvKeys.js +44 -45
- package/dist/kvUtils.d.ts +34 -1
- package/dist/kvUtils.d.ts.map +1 -1
- package/dist/kvUtils.js +60 -23
- package/dist/legal.js +5 -21
- package/dist/middleware/auth.d.ts +6 -3
- package/dist/middleware/auth.d.ts.map +1 -1
- package/dist/middleware/auth.js +27 -29
- package/dist/middleware/cors.js +4 -20
- package/dist/middleware/index.d.ts +3 -2
- package/dist/middleware/index.d.ts.map +1 -1
- package/dist/middleware/index.js +222 -164
- package/dist/middleware/logger.js +13 -27
- package/dist/middleware/rate-limit.js +2 -18
- package/dist/middleware/security-headers.js +2 -18
- package/dist/middleware/validate.d.ts +16 -0
- package/dist/middleware/validate.d.ts.map +1 -1
- package/dist/middleware/validate.js +39 -19
- package/dist/middleware/wait-until.d.ts +32 -0
- package/dist/middleware/wait-until.d.ts.map +1 -0
- package/dist/middleware/wait-until.js +30 -0
- package/dist/operator-transport.js +13 -17
- package/dist/path-utils.js +15 -31
- package/dist/queue-handler.d.ts +6 -0
- package/dist/queue-handler.d.ts.map +1 -1
- package/dist/queue-handler.js +51 -36
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +12 -18
- package/dist/schemas/index.d.ts +2 -1
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +91 -38
- package/dist/schemas/registry.d.ts +13 -0
- package/dist/schemas/registry.d.ts.map +1 -1
- package/dist/schemas/registry.js +82 -30
- package/dist/schemas/types.d.ts +5 -0
- package/dist/schemas/types.d.ts.map +1 -1
- package/dist/schemas/validators.d.ts.map +1 -1
- package/dist/schemas/validators.js +8 -22
- package/dist/service-bindings.js +31 -34
- package/dist/session.js +2 -18
- package/dist/sse.js +10 -18
- package/dist/stores/config-store.js +8 -22
- package/dist/stores/service-store.js +17 -30
- package/dist/stores/ui-store.js +0 -16
- package/dist/tenant.d.ts +61 -0
- package/dist/tenant.d.ts.map +1 -0
- package/dist/tenant.js +56 -0
- package/dist/test-utils.js +11 -27
- package/dist/types.d.ts +26 -6
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +16 -26
- package/dist/wizard/engine.d.ts.map +1 -1
- package/dist/wizard/engine.js +39 -56
- package/dist/wizard/index.d.ts +1 -0
- package/dist/wizard/index.d.ts.map +1 -1
- package/dist/wizard/index.js +54 -68
- package/dist/wizard/persistence.d.ts +4 -0
- package/dist/wizard/persistence.d.ts.map +1 -1
- package/dist/wizard/persistence.js +7 -19
- package/dist/wizard/presets.d.ts.map +1 -1
- package/dist/wizard/presets.js +16 -54
- package/dist/wizard/types.d.ts +6 -0
- package/dist/wizard/types.d.ts.map +1 -1
- package/dist/wizard/types.js +5 -0
- package/package.json +7 -2
|
@@ -1,21 +1,6 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __returnValue = (v) => v;
|
|
4
|
-
function __exportSetter(name, newValue) {
|
|
5
|
-
this[name] = __returnValue.bind(null, newValue);
|
|
6
|
-
}
|
|
7
|
-
var __export = (target, all) => {
|
|
8
|
-
for (var name in all)
|
|
9
|
-
__defProp(target, name, {
|
|
10
|
-
get: all[name],
|
|
11
|
-
enumerable: true,
|
|
12
|
-
configurable: true,
|
|
13
|
-
set: __exportSetter.bind(all, name)
|
|
14
|
-
});
|
|
15
|
-
};
|
|
16
|
-
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
17
|
-
|
|
18
2
|
// src/middleware/validate.ts
|
|
3
|
+
var DEFAULT_MAX_JSON_BODY_BYTES = 1048576;
|
|
19
4
|
function validateJson(schema, data) {
|
|
20
5
|
const result = schema.safeParse(data);
|
|
21
6
|
if (!result.success) {
|
|
@@ -26,6 +11,39 @@ function validateJson(schema, data) {
|
|
|
26
11
|
}
|
|
27
12
|
return { ok: true, value: result.data };
|
|
28
13
|
}
|
|
14
|
+
async function parseJsonBody(request, schema, options = {}) {
|
|
15
|
+
const maxBytes = options.maxBytes ?? DEFAULT_MAX_JSON_BODY_BYTES;
|
|
16
|
+
const contentLength = request.headers.get("content-length");
|
|
17
|
+
if (contentLength !== null) {
|
|
18
|
+
const declared = Number(contentLength);
|
|
19
|
+
if (Number.isFinite(declared) && declared > maxBytes) {
|
|
20
|
+
return {
|
|
21
|
+
ok: false,
|
|
22
|
+
error: `Request body too large (max ${maxBytes} bytes)`
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
let text;
|
|
27
|
+
try {
|
|
28
|
+
text = await request.text();
|
|
29
|
+
} catch {
|
|
30
|
+
return { ok: false, error: "Failed to read request body" };
|
|
31
|
+
}
|
|
32
|
+
const byteLength = new TextEncoder().encode(text).byteLength;
|
|
33
|
+
if (byteLength > maxBytes) {
|
|
34
|
+
return {
|
|
35
|
+
ok: false,
|
|
36
|
+
error: `Request body too large (max ${maxBytes} bytes)`
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
let data;
|
|
40
|
+
try {
|
|
41
|
+
data = text.length === 0 ? null : JSON.parse(text);
|
|
42
|
+
} catch {
|
|
43
|
+
return { ok: false, error: "Invalid JSON in request body" };
|
|
44
|
+
}
|
|
45
|
+
return validateJson(schema, data);
|
|
46
|
+
}
|
|
29
47
|
async function validateJsonLegacy(request) {
|
|
30
48
|
try {
|
|
31
49
|
const body = await request.json();
|
|
@@ -49,8 +67,10 @@ function optionalField(body, field, defaultValue) {
|
|
|
49
67
|
return body[field];
|
|
50
68
|
}
|
|
51
69
|
export {
|
|
52
|
-
|
|
53
|
-
|
|
70
|
+
DEFAULT_MAX_JSON_BODY_BYTES,
|
|
71
|
+
optionalField,
|
|
72
|
+
parseJsonBody,
|
|
54
73
|
requireField,
|
|
55
|
-
|
|
74
|
+
validateJson,
|
|
75
|
+
validateJsonLegacy
|
|
56
76
|
};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026 HOOX · HOOX · jango-blockchained (hoox-sh)
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Production helpers around ExecutionContext / DurableObjectState.waitUntil.
|
|
7
|
+
*
|
|
8
|
+
* Floating / rejected background promises are a common Workers footgun:
|
|
9
|
+
* the isolate may exit before work finishes, and rejections can go unhandled.
|
|
10
|
+
* Always pass promises through these helpers (or await them).
|
|
11
|
+
*
|
|
12
|
+
* Never destructure `waitUntil` off `ctx` — it loses `this` and throws
|
|
13
|
+
* "Illegal invocation" at runtime.
|
|
14
|
+
*
|
|
15
|
+
* Accepts any object with waitUntil so the same helper works for both
|
|
16
|
+
* fetch ExecutionContext and DurableObjectState (DO lifecycle).
|
|
17
|
+
*/
|
|
18
|
+
/** Minimal surface shared by ExecutionContext and DurableObjectState. */
|
|
19
|
+
export type WaitUntilHost = {
|
|
20
|
+
waitUntil(promise: Promise<unknown>): void;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Schedule background work that must not affect the HTTP response.
|
|
24
|
+
* Captures rejections so they never become unhandled promise rejections.
|
|
25
|
+
*/
|
|
26
|
+
export declare function safeWaitUntil(ctx: WaitUntilHost, promise: Promise<unknown>, onError?: (err: unknown) => void): void;
|
|
27
|
+
/**
|
|
28
|
+
* Fan-out multiple independent background tasks via a single waitUntil.
|
|
29
|
+
* Uses allSettled so one failure does not cancel siblings.
|
|
30
|
+
*/
|
|
31
|
+
export declare function waitUntilAll(ctx: WaitUntilHost, promises: ReadonlyArray<Promise<unknown>>, onError?: (err: unknown) => void): void;
|
|
32
|
+
//# sourceMappingURL=wait-until.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wait-until.d.ts","sourceRoot":"","sources":["../../src/middleware/wait-until.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;;;GAYG;AAEH,yEAAyE;AACzE,MAAM,MAAM,aAAa,GAAG;IAC1B,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;CAC5C,CAAC;AAEF;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,aAAa,EAClB,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,EACzB,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,GAC/B,IAAI,CAYN;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,GAAG,EAAE,aAAa,EAClB,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EACzC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,GAC/B,IAAI,CAsBN"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
// src/middleware/wait-until.ts
|
|
3
|
+
function safeWaitUntil(ctx, promise, onError) {
|
|
4
|
+
ctx.waitUntil(promise.catch((err) => {
|
|
5
|
+
onError?.(err);
|
|
6
|
+
console.error(JSON.stringify({
|
|
7
|
+
message: "waitUntil background task failed",
|
|
8
|
+
error: err instanceof Error ? err.message : String(err)
|
|
9
|
+
}));
|
|
10
|
+
}));
|
|
11
|
+
}
|
|
12
|
+
function waitUntilAll(ctx, promises, onError) {
|
|
13
|
+
if (promises.length === 0)
|
|
14
|
+
return;
|
|
15
|
+
safeWaitUntil(ctx, Promise.allSettled(promises).then((results) => {
|
|
16
|
+
for (const result of results) {
|
|
17
|
+
if (result.status === "rejected") {
|
|
18
|
+
onError?.(result.reason);
|
|
19
|
+
console.error(JSON.stringify({
|
|
20
|
+
message: "waitUntilAll background task failed",
|
|
21
|
+
error: result.reason instanceof Error ? result.reason.message : String(result.reason)
|
|
22
|
+
}));
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}), onError);
|
|
26
|
+
}
|
|
27
|
+
export {
|
|
28
|
+
safeWaitUntil,
|
|
29
|
+
waitUntilAll
|
|
30
|
+
};
|
|
@@ -1,19 +1,15 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
var
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
configurable: true,
|
|
13
|
-
set: __exportSetter.bind(all, name)
|
|
14
|
-
});
|
|
2
|
+
var __esm = (fn, res, err) => () => {
|
|
3
|
+
if (fn)
|
|
4
|
+
try {
|
|
5
|
+
res = fn(fn = 0);
|
|
6
|
+
} catch (e) {
|
|
7
|
+
err = [e];
|
|
8
|
+
}
|
|
9
|
+
if (err)
|
|
10
|
+
throw err[0];
|
|
11
|
+
return res;
|
|
15
12
|
};
|
|
16
|
-
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
17
13
|
|
|
18
14
|
// src/operator-transport.ts
|
|
19
15
|
function stripTrailingSlashes(url) {
|
|
@@ -84,8 +80,8 @@ var init_operator_transport = __esm(() => {
|
|
|
84
80
|
init_operator_transport();
|
|
85
81
|
|
|
86
82
|
export {
|
|
87
|
-
|
|
88
|
-
operatorUrl,
|
|
83
|
+
buildOperatorAuthHeaders,
|
|
89
84
|
hasOperatorClientCredentials,
|
|
90
|
-
|
|
85
|
+
operatorUrl,
|
|
86
|
+
resolveOperatorTransportProfile
|
|
91
87
|
};
|
package/dist/path-utils.js
CHANGED
|
@@ -1,20 +1,4 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __returnValue = (v) => v;
|
|
4
|
-
function __exportSetter(name, newValue) {
|
|
5
|
-
this[name] = __returnValue.bind(null, newValue);
|
|
6
|
-
}
|
|
7
|
-
var __export = (target, all) => {
|
|
8
|
-
for (var name in all)
|
|
9
|
-
__defProp(target, name, {
|
|
10
|
-
get: all[name],
|
|
11
|
-
enumerable: true,
|
|
12
|
-
configurable: true,
|
|
13
|
-
set: __exportSetter.bind(all, name)
|
|
14
|
-
});
|
|
15
|
-
};
|
|
16
|
-
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
17
|
-
|
|
18
2
|
// src/path-utils.ts
|
|
19
3
|
import {
|
|
20
4
|
existsSync,
|
|
@@ -236,20 +220,20 @@ function getHooxStatePath() {
|
|
|
236
220
|
return resolveHooxPath("data/state.json");
|
|
237
221
|
}
|
|
238
222
|
export {
|
|
239
|
-
|
|
240
|
-
resolveHooxPath,
|
|
241
|
-
rememberMonorepoRoot,
|
|
242
|
-
isWithinHooxHome,
|
|
243
|
-
isHooxSetupRoot,
|
|
244
|
-
getTuiEntryCandidates,
|
|
245
|
-
getRememberedMonorepoRoot,
|
|
246
|
-
getRememberedMonorepoPath,
|
|
247
|
-
getRelativeHooxPath,
|
|
248
|
-
getHooxWranglerPath,
|
|
249
|
-
getHooxStatePath,
|
|
250
|
-
getHooxRepoPath,
|
|
251
|
-
getHooxHome,
|
|
252
|
-
getHooxDataDir,
|
|
223
|
+
findHooxSetupRoot,
|
|
253
224
|
getHooxConfigDir,
|
|
254
|
-
|
|
225
|
+
getHooxDataDir,
|
|
226
|
+
getHooxHome,
|
|
227
|
+
getHooxRepoPath,
|
|
228
|
+
getHooxStatePath,
|
|
229
|
+
getHooxWranglerPath,
|
|
230
|
+
getRelativeHooxPath,
|
|
231
|
+
getRememberedMonorepoPath,
|
|
232
|
+
getRememberedMonorepoRoot,
|
|
233
|
+
getTuiEntryCandidates,
|
|
234
|
+
isHooxSetupRoot,
|
|
235
|
+
isWithinHooxHome,
|
|
236
|
+
rememberMonorepoRoot,
|
|
237
|
+
resolveHooxPath,
|
|
238
|
+
resolveHooxRuntimeRoot
|
|
255
239
|
};
|
package/dist/queue-handler.d.ts
CHANGED
|
@@ -19,6 +19,11 @@ export interface QueueHandlerOptions<T> {
|
|
|
19
19
|
info(msg: string, data?: unknown): void;
|
|
20
20
|
error(msg: string, data?: unknown): void;
|
|
21
21
|
};
|
|
22
|
+
/**
|
|
23
|
+
* Max number of messages to process concurrently within a batch.
|
|
24
|
+
* Defaults to 1 (serial) for back-compat. Values < 1 are treated as 1.
|
|
25
|
+
*/
|
|
26
|
+
concurrency?: number;
|
|
22
27
|
}
|
|
23
28
|
/**
|
|
24
29
|
* Creates a reusable queue handler with retry + exponential backoff logic.
|
|
@@ -28,6 +33,7 @@ export interface QueueHandlerOptions<T> {
|
|
|
28
33
|
* const handler = createQueueHandler({
|
|
29
34
|
* maxRetries: 5,
|
|
30
35
|
* backoffDelays: [0, 30, 60, 300, 900],
|
|
36
|
+
* concurrency: 4, // optional; default 1 (serial)
|
|
31
37
|
* onMessage: async (msg) => {
|
|
32
38
|
* await executeTask(msg);
|
|
33
39
|
* },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue-handler.d.ts","sourceRoot":"","sources":["../src/queue-handler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"queue-handler.d.ts","sourceRoot":"","sources":["../src/queue-handler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAW,MAAM,2BAA2B,CAAC;AAEvE,MAAM,WAAW,mBAAmB,CAAC,CAAC;IACpC,uCAAuC;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,8DAA8D;IAC9D,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,+CAA+C;IAC/C,SAAS,EAAE,CAAC,OAAO,EAAE,CAAC,EAAE,aAAa,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IAC7E,sDAAsD;IACtD,OAAO,CAAC,EAAE,CACR,OAAO,EAAE,CAAC,EACV,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,KACjB,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,iEAAiE;IACjE,KAAK,CAAC,EAAE,CACN,OAAO,EAAE,CAAC,EACV,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,MAAM,KACV,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,oCAAoC;IACpC,MAAM,CAAC,EAAE;QACP,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;QACxC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;KAC1C,CAAC;IACF;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAkCD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC,IAqDrD,OAAO,YAAY,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,IAAI,CAAC,CAGrD"}
|
package/dist/queue-handler.js
CHANGED
|
@@ -1,44 +1,59 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __returnValue = (v) => v;
|
|
4
|
-
function __exportSetter(name, newValue) {
|
|
5
|
-
this[name] = __returnValue.bind(null, newValue);
|
|
6
|
-
}
|
|
7
|
-
var __export = (target, all) => {
|
|
8
|
-
for (var name in all)
|
|
9
|
-
__defProp(target, name, {
|
|
10
|
-
get: all[name],
|
|
11
|
-
enumerable: true,
|
|
12
|
-
configurable: true,
|
|
13
|
-
set: __exportSetter.bind(all, name)
|
|
14
|
-
});
|
|
15
|
-
};
|
|
16
|
-
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
17
|
-
|
|
18
2
|
// src/queue-handler.ts
|
|
3
|
+
async function mapPool(items, concurrency, fn) {
|
|
4
|
+
if (items.length === 0)
|
|
5
|
+
return;
|
|
6
|
+
const limit = Math.min(Math.max(1, concurrency), items.length);
|
|
7
|
+
if (limit === 1) {
|
|
8
|
+
for (const item of items) {
|
|
9
|
+
await fn(item);
|
|
10
|
+
}
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
let nextIndex = 0;
|
|
14
|
+
async function worker() {
|
|
15
|
+
while (true) {
|
|
16
|
+
const i = nextIndex++;
|
|
17
|
+
if (i >= items.length)
|
|
18
|
+
return;
|
|
19
|
+
await fn(items[i]);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
await Promise.all(Array.from({ length: limit }, () => worker()));
|
|
23
|
+
}
|
|
19
24
|
function createQueueHandler(options) {
|
|
20
|
-
const {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
25
|
+
const {
|
|
26
|
+
maxRetries,
|
|
27
|
+
backoffDelays,
|
|
28
|
+
onMessage,
|
|
29
|
+
onRetry,
|
|
30
|
+
onDLQ,
|
|
31
|
+
logger,
|
|
32
|
+
concurrency: concurrencyOpt
|
|
33
|
+
} = options;
|
|
34
|
+
const concurrency = typeof concurrencyOpt === "number" && Number.isFinite(concurrencyOpt) && concurrencyOpt >= 1 ? Math.floor(concurrencyOpt) : 1;
|
|
35
|
+
async function processMessage(msg) {
|
|
36
|
+
const attemptNumber = msg.attempts || 0;
|
|
37
|
+
const logId = `[${msg.id}]`;
|
|
38
|
+
try {
|
|
39
|
+
logger?.info(`${logId} Processing message (attempt ${attemptNumber + 1})`);
|
|
40
|
+
await onMessage(msg.body, attemptNumber);
|
|
41
|
+
logger?.info(`${logId} Message processed successfully`);
|
|
42
|
+
} catch (error) {
|
|
43
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
44
|
+
if (attemptNumber < maxRetries) {
|
|
45
|
+
const delaySeconds = backoffDelays[attemptNumber] ?? backoffDelays[backoffDelays.length - 1] ?? 0;
|
|
46
|
+
logger?.info(`${logId} Retrying in ${delaySeconds}s (attempt ${attemptNumber + 2}/${maxRetries + 1})`);
|
|
47
|
+
await onRetry?.(msg.body, attemptNumber, errorMsg, delaySeconds);
|
|
48
|
+
msg.retry({ delaySeconds });
|
|
49
|
+
} else {
|
|
50
|
+
logger?.error(`${logId} Max retries exceeded (${maxRetries + 1} attempts), moving to DLQ`);
|
|
51
|
+
await onDLQ?.(msg.body, attemptNumber, errorMsg);
|
|
40
52
|
}
|
|
41
53
|
}
|
|
54
|
+
}
|
|
55
|
+
return async (batch) => {
|
|
56
|
+
await mapPool(batch.messages, concurrency, processMessage);
|
|
42
57
|
};
|
|
43
58
|
}
|
|
44
59
|
export {
|
package/dist/router.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;GAMG;AAEH,OAAO,KAAK,EAKV,MAAM,EACP,MAAM,gBAAgB,CAAC;AAGxB,YAAY,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE9E,wBAAgB,YAAY,CAAC,IAAI,GAAG,OAAO,KAAK,MAAM,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;GAMG;AAEH,OAAO,KAAK,EAKV,MAAM,EACP,MAAM,gBAAgB,CAAC;AAGxB,YAAY,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE9E,wBAAgB,YAAY,CAAC,IAAI,GAAG,OAAO,KAAK,MAAM,CAAC,IAAI,CAAC,CA6M3D"}
|
package/dist/router.js
CHANGED
|
@@ -1,20 +1,4 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __returnValue = (v) => v;
|
|
4
|
-
function __exportSetter(name, newValue) {
|
|
5
|
-
this[name] = __returnValue.bind(null, newValue);
|
|
6
|
-
}
|
|
7
|
-
var __export = (target, all) => {
|
|
8
|
-
for (var name in all)
|
|
9
|
-
__defProp(target, name, {
|
|
10
|
-
get: all[name],
|
|
11
|
-
enumerable: true,
|
|
12
|
-
configurable: true,
|
|
13
|
-
set: __exportSetter.bind(all, name)
|
|
14
|
-
});
|
|
15
|
-
};
|
|
16
|
-
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
17
|
-
|
|
18
2
|
// src/router.ts
|
|
19
3
|
function createRouter() {
|
|
20
4
|
const routes = [];
|
|
@@ -23,7 +7,9 @@ function createRouter() {
|
|
|
23
7
|
const regex = /:([a-zA-Z_][a-zA-Z0-9_]*)/g;
|
|
24
8
|
let match;
|
|
25
9
|
while ((match = regex.exec(pattern)) !== null) {
|
|
26
|
-
|
|
10
|
+
const name = match[1];
|
|
11
|
+
if (name !== undefined)
|
|
12
|
+
params.push(name);
|
|
27
13
|
}
|
|
28
14
|
return params;
|
|
29
15
|
}
|
|
@@ -38,7 +24,11 @@ function createRouter() {
|
|
|
38
24
|
return null;
|
|
39
25
|
const params = {};
|
|
40
26
|
for (let i = 0;i < paramNames.length; i++) {
|
|
41
|
-
|
|
27
|
+
const key = paramNames[i];
|
|
28
|
+
const value = m[i + 1];
|
|
29
|
+
if (key !== undefined && value !== undefined) {
|
|
30
|
+
params[key] = value;
|
|
31
|
+
}
|
|
42
32
|
}
|
|
43
33
|
return params;
|
|
44
34
|
}
|
|
@@ -57,6 +47,8 @@ function createRouter() {
|
|
|
57
47
|
return { route: exact };
|
|
58
48
|
for (let i = routes.length - 1;i >= 0; i--) {
|
|
59
49
|
const route = routes[i];
|
|
50
|
+
if (!route)
|
|
51
|
+
continue;
|
|
60
52
|
if (route.params && route.params.length > 0 && route.regex) {
|
|
61
53
|
const matched = matchPattern(path, route.regex, route.params);
|
|
62
54
|
if (matched && route.method === method) {
|
|
@@ -88,6 +80,8 @@ function createRouter() {
|
|
|
88
80
|
let pathExists = false;
|
|
89
81
|
for (let i = routes.length - 1;i >= 0; i--) {
|
|
90
82
|
const r = routes[i];
|
|
83
|
+
if (!r)
|
|
84
|
+
continue;
|
|
91
85
|
if (r.path === path) {
|
|
92
86
|
pathExists = true;
|
|
93
87
|
break;
|
package/dist/schemas/index.d.ts
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* SPDX-License-Identifier: Apache-2.0
|
|
4
4
|
*/
|
|
5
5
|
export type { WorkerManifest, VarDef, ServiceBindingDef, InfraBindings, KVBindingDef, D1BindingDef, R2BindingDef, QueueBindingDef, VectorizeBindingDef, DOBindingDef, ValidationError, ValidationReport, } from "./types.js";
|
|
6
|
-
export { WORKER_MANIFESTS, WORKER_NAMES, CALLED_BY } from "./registry.js";
|
|
6
|
+
export { WORKER_MANIFESTS, WORKER_NAMES, WORKER_CATALOG, CALLED_BY, getWorkerDefaultEnabled, } from "./registry.js";
|
|
7
|
+
export type { WorkerCatalogEntry } from "./registry.js";
|
|
7
8
|
export { validateWranglerJsonc, validateRootSecrets, validateDevVars, validateAll, generateWranglerJsonc, generateDevVars, } from "./validators.js";
|
|
8
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,YAAY,EACV,cAAc,EACd,MAAM,EACN,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,mBAAmB,EACnB,YAAY,EACZ,eAAe,EACf,gBAAgB,GACjB,MAAM,YAAY,CAAC;AAEpB,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,YAAY,EACV,cAAc,EACd,MAAM,EACN,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,mBAAmB,EACnB,YAAY,EACZ,eAAe,EACf,gBAAgB,GACjB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,cAAc,EACd,SAAS,EACT,uBAAuB,GACxB,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExD,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,eAAe,EACf,WAAW,EACX,qBAAqB,EACrB,eAAe,GAChB,MAAM,iBAAiB,CAAC"}
|