@hoox-sh/hoox-shared 1.2.1 → 1.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/dist/agent-config-fields.js +2 -0
- package/dist/d1/index.js +4 -2
- package/dist/d1/repository.js +4 -2
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +4 -2
- package/dist/health.js +4 -2
- package/dist/index.d.ts +5 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +432 -139
- package/dist/kill-switch.js +2 -0
- package/dist/kvKeys.d.ts +3 -0
- package/dist/kvKeys.d.ts.map +1 -1
- package/dist/kvKeys.js +3 -0
- package/dist/kvUtils.d.ts +34 -1
- package/dist/kvUtils.d.ts.map +1 -1
- package/dist/kvUtils.js +56 -3
- package/dist/middleware/auth.d.ts +6 -3
- package/dist/middleware/auth.d.ts.map +1 -1
- package/dist/middleware/auth.js +19 -5
- package/dist/middleware/index.d.ts +3 -2
- package/dist/middleware/index.d.ts.map +1 -1
- package/dist/middleware/index.js +88 -8
- package/dist/middleware/logger.js +4 -2
- package/dist/middleware/validate.d.ts +16 -0
- package/dist/middleware/validate.d.ts.map +1 -1
- package/dist/middleware/validate.js +37 -1
- 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 +46 -0
- package/dist/path-utils.d.ts +35 -4
- package/dist/path-utils.d.ts.map +1 -1
- package/dist/path-utils.js +72 -5
- package/dist/queue-handler.d.ts +6 -0
- package/dist/queue-handler.d.ts.map +1 -1
- package/dist/queue-handler.js +51 -20
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +12 -2
- package/dist/schemas/index.d.ts +2 -1
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +58 -13
- package/dist/schemas/registry.d.ts +13 -0
- package/dist/schemas/registry.d.ts.map +1 -1
- package/dist/schemas/registry.js +55 -12
- 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 +3 -1
- package/dist/service-bindings.js +18 -5
- package/dist/session.js +69 -5
- package/dist/stores/config-store.d.ts +2 -0
- package/dist/stores/config-store.d.ts.map +1 -1
- package/dist/stores/config-store.js +267 -16
- package/dist/stores/service-store.d.ts +12 -0
- package/dist/stores/service-store.d.ts.map +1 -1
- package/dist/stores/service-store.js +101 -40
- package/dist/stores/ui-store.d.ts +14 -0
- package/dist/stores/ui-store.d.ts.map +1 -1
- package/dist/stores/ui-store.js +8 -1
- package/dist/types.d.ts +22 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +8 -4
- package/dist/wizard/engine.d.ts.map +1 -1
- package/dist/wizard/engine.js +18 -35
- package/dist/wizard/index.js +18 -35
- package/dist/wizard/presets.d.ts.map +1 -1
- package/dist/wizard/presets.js +6 -32
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/schemas/registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/schemas/registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AA4cjD,qEAAqE;AACrE,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAA6B,CAAC;AAE7E,sDAAsD;AACtD,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAa,CAAC;AAE1E,gDAAgD;AAChD,eAAO,MAAM,YAAY,EAAE,MAAM,EAAkC,CAAC;AAEpE;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,gFAAgF;AAChF,eAAO,MAAM,cAAc,EAAE,kBAAkB,EAO7C,CAAC;AAEH,6EAA6E;AAC7E,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAEzE"}
|
package/dist/schemas/registry.js
CHANGED
|
@@ -22,9 +22,12 @@ function deriveCalledBy(manifests) {
|
|
|
22
22
|
if (!calledBy[workerName])
|
|
23
23
|
calledBy[workerName] = new Set;
|
|
24
24
|
for (const svc of manifest.services) {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
let callers = calledBy[svc.service];
|
|
26
|
+
if (!callers) {
|
|
27
|
+
callers = new Set;
|
|
28
|
+
calledBy[svc.service] = callers;
|
|
29
|
+
}
|
|
30
|
+
callers.add(workerName);
|
|
28
31
|
}
|
|
29
32
|
}
|
|
30
33
|
const result = {};
|
|
@@ -37,6 +40,7 @@ var manifests = {
|
|
|
37
40
|
hoox: {
|
|
38
41
|
name: "hoox",
|
|
39
42
|
path: "workers/hoox-worker",
|
|
43
|
+
defaultEnabled: true,
|
|
40
44
|
vars: {
|
|
41
45
|
WEBHOOK_API_KEY_BINDING: {
|
|
42
46
|
type: "secret",
|
|
@@ -46,7 +50,11 @@ var manifests = {
|
|
|
46
50
|
type: "secret",
|
|
47
51
|
description: "Inter-worker auth key"
|
|
48
52
|
},
|
|
49
|
-
HA_TOKEN_BINDING: { type: "secret", description: "Home Assistant token" }
|
|
53
|
+
HA_TOKEN_BINDING: { type: "secret", description: "Home Assistant token" },
|
|
54
|
+
TELEGRAM_ALLOWED_CHAT_IDS: {
|
|
55
|
+
type: "secret",
|
|
56
|
+
description: "Comma-separated chat IDs for webhook notify (fail-closed when unset); alias AUTHORIZED_CHAT_IDS"
|
|
57
|
+
}
|
|
50
58
|
},
|
|
51
59
|
services: [
|
|
52
60
|
{
|
|
@@ -72,7 +80,8 @@ var manifests = {
|
|
|
72
80
|
ai: true,
|
|
73
81
|
queues: { producer: ["trade-execution"] },
|
|
74
82
|
durableObjects: [
|
|
75
|
-
{ name: "IDEMPOTENCY_STORE", className: "IdempotencyStore" }
|
|
83
|
+
{ name: "IDEMPOTENCY_STORE", className: "IdempotencyStore" },
|
|
84
|
+
{ name: "RATE_LIMITER", className: "RateLimiterStore" }
|
|
76
85
|
]
|
|
77
86
|
},
|
|
78
87
|
middleware: [
|
|
@@ -87,6 +96,7 @@ var manifests = {
|
|
|
87
96
|
"trade-worker": {
|
|
88
97
|
name: "trade-worker",
|
|
89
98
|
path: "workers/trade-worker",
|
|
99
|
+
defaultEnabled: true,
|
|
90
100
|
vars: {
|
|
91
101
|
INTERNAL_KEY_BINDING: {
|
|
92
102
|
type: "secret",
|
|
@@ -96,15 +106,22 @@ var manifests = {
|
|
|
96
106
|
type: "secret",
|
|
97
107
|
description: "Telegram outbound auth"
|
|
98
108
|
},
|
|
99
|
-
|
|
100
|
-
|
|
109
|
+
EXCHANGE_KEY_BINDING: {
|
|
110
|
+
type: "secret",
|
|
111
|
+
description: "Unified exchange API key (Binance / Bybit / MEXC)"
|
|
112
|
+
},
|
|
113
|
+
EXCHANGE_SECRET_BINDING: {
|
|
114
|
+
type: "secret",
|
|
115
|
+
description: "Unified exchange API secret"
|
|
116
|
+
},
|
|
117
|
+
EXCHANGE_TESTNET_KEY_BINDING: {
|
|
101
118
|
type: "secret",
|
|
102
|
-
description: "
|
|
119
|
+
description: "Optional unified testnet API key"
|
|
103
120
|
},
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
121
|
+
EXCHANGE_TESTNET_SECRET_BINDING: {
|
|
122
|
+
type: "secret",
|
|
123
|
+
description: "Optional unified testnet API secret"
|
|
124
|
+
}
|
|
108
125
|
},
|
|
109
126
|
services: [
|
|
110
127
|
{
|
|
@@ -146,6 +163,7 @@ var manifests = {
|
|
|
146
163
|
"telegram-worker": {
|
|
147
164
|
name: "telegram-worker",
|
|
148
165
|
path: "workers/telegram-worker",
|
|
166
|
+
defaultEnabled: true,
|
|
149
167
|
vars: {
|
|
150
168
|
INTERNAL_KEY_BINDING: {
|
|
151
169
|
type: "secret",
|
|
@@ -159,6 +177,10 @@ var manifests = {
|
|
|
159
177
|
TELEGRAM_SECRET_TOKEN: {
|
|
160
178
|
type: "secret",
|
|
161
179
|
description: "Webhook verification token"
|
|
180
|
+
},
|
|
181
|
+
AUTHORIZED_CHAT_IDS: {
|
|
182
|
+
type: "secret",
|
|
183
|
+
description: "Comma-separated chat IDs; inbound webhook fail-closed when unset; outbound /alert allowlist"
|
|
162
184
|
}
|
|
163
185
|
},
|
|
164
186
|
services: [],
|
|
@@ -179,6 +201,7 @@ var manifests = {
|
|
|
179
201
|
"d1-worker": {
|
|
180
202
|
name: "d1-worker",
|
|
181
203
|
path: "workers/d1-worker",
|
|
204
|
+
defaultEnabled: true,
|
|
182
205
|
vars: {
|
|
183
206
|
INTERNAL_KEY_BINDING: {
|
|
184
207
|
type: "secret",
|
|
@@ -201,6 +224,7 @@ var manifests = {
|
|
|
201
224
|
"web3-wallet-worker": {
|
|
202
225
|
name: "web3-wallet-worker",
|
|
203
226
|
path: "workers/web3-wallet-worker",
|
|
227
|
+
defaultEnabled: false,
|
|
204
228
|
vars: {
|
|
205
229
|
WALLET_PK_SECRET: { type: "secret", description: "Wallet private key" },
|
|
206
230
|
WALLET_MNEMONIC_SECRET: {
|
|
@@ -221,6 +245,7 @@ var manifests = {
|
|
|
221
245
|
"agent-worker": {
|
|
222
246
|
name: "agent-worker",
|
|
223
247
|
path: "workers/agent-worker",
|
|
248
|
+
defaultEnabled: true,
|
|
224
249
|
vars: {
|
|
225
250
|
AGENT_INTERNAL_KEY: { type: "secret", description: "Agent worker auth" },
|
|
226
251
|
INTERNAL_KEY_BINDING: {
|
|
@@ -257,6 +282,7 @@ var manifests = {
|
|
|
257
282
|
"email-worker": {
|
|
258
283
|
name: "email-worker",
|
|
259
284
|
path: "workers/email-worker",
|
|
285
|
+
defaultEnabled: false,
|
|
260
286
|
vars: {
|
|
261
287
|
INTERNAL_KEY_BINDING: {
|
|
262
288
|
type: "secret",
|
|
@@ -294,6 +320,7 @@ var manifests = {
|
|
|
294
320
|
"analytics-worker": {
|
|
295
321
|
name: "analytics-worker",
|
|
296
322
|
path: "workers/analytics-worker",
|
|
323
|
+
defaultEnabled: true,
|
|
297
324
|
vars: {
|
|
298
325
|
CLOUDFLARE_API_TOKEN: {
|
|
299
326
|
type: "secret",
|
|
@@ -313,6 +340,7 @@ var manifests = {
|
|
|
313
340
|
"report-worker": {
|
|
314
341
|
name: "report-worker",
|
|
315
342
|
path: "workers/report-worker",
|
|
343
|
+
defaultEnabled: false,
|
|
316
344
|
vars: {
|
|
317
345
|
CF_API_TOKEN_BINDING: {
|
|
318
346
|
type: "secret",
|
|
@@ -347,6 +375,7 @@ var manifests = {
|
|
|
347
375
|
"pyne-worker": {
|
|
348
376
|
name: "pyne-worker",
|
|
349
377
|
path: "workers/pyne-worker",
|
|
378
|
+
defaultEnabled: true,
|
|
350
379
|
vars: {
|
|
351
380
|
API_KEY: {
|
|
352
381
|
type: "secret",
|
|
@@ -384,6 +413,7 @@ var manifests = {
|
|
|
384
413
|
dashboard: {
|
|
385
414
|
name: "dashboard",
|
|
386
415
|
path: "workers/dashboard",
|
|
416
|
+
defaultEnabled: true,
|
|
387
417
|
vars: {
|
|
388
418
|
DASHBOARD_USER: {
|
|
389
419
|
type: "secret",
|
|
@@ -426,8 +456,21 @@ var manifests = {
|
|
|
426
456
|
var CALLED_BY = deriveCalledBy(manifests);
|
|
427
457
|
var WORKER_MANIFESTS = manifests;
|
|
428
458
|
var WORKER_NAMES = Object.keys(manifests).sort();
|
|
459
|
+
var WORKER_CATALOG = WORKER_NAMES.map((name) => {
|
|
460
|
+
const m = manifests[name];
|
|
461
|
+
return {
|
|
462
|
+
name: m.name,
|
|
463
|
+
path: m.path,
|
|
464
|
+
defaultEnabled: m.defaultEnabled
|
|
465
|
+
};
|
|
466
|
+
});
|
|
467
|
+
function getWorkerDefaultEnabled(name) {
|
|
468
|
+
return manifests[name]?.defaultEnabled;
|
|
469
|
+
}
|
|
429
470
|
export {
|
|
471
|
+
getWorkerDefaultEnabled,
|
|
430
472
|
WORKER_NAMES,
|
|
431
473
|
WORKER_MANIFESTS,
|
|
474
|
+
WORKER_CATALOG,
|
|
432
475
|
CALLED_BY
|
|
433
476
|
};
|
package/dist/schemas/types.d.ts
CHANGED
|
@@ -10,6 +10,11 @@ export interface WorkerManifest {
|
|
|
10
10
|
name: string;
|
|
11
11
|
/** Path relative to project root (e.g. "workers/trade-worker") */
|
|
12
12
|
path: string;
|
|
13
|
+
/**
|
|
14
|
+
* Default for `workers.<name>.enabled` in the root wrangler.jsonc catalog.
|
|
15
|
+
* Used by `hoox workers enable|disable` and when seeding missing workers.
|
|
16
|
+
*/
|
|
17
|
+
defaultEnabled: boolean;
|
|
13
18
|
/** Vars the worker declares in its wrangler.jsonc `vars` section */
|
|
14
19
|
vars: Record<string, VarDef>;
|
|
15
20
|
/** Service bindings this worker calls */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/schemas/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AAEH,MAAM,WAAW,cAAc;IAC7B,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,kEAAkE;IAClE,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,yCAAyC;IACzC,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,gDAAgD;IAChD,cAAc,EAAE,aAAa,CAAC;IAC9B,+DAA+D;IAC/D,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,yCAAyC;IACzC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,QAAQ,GAAG,WAAW,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC;IACpB,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC;IACpB,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,SAAS,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAClC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,YAAY,EAAE,CAAC;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/schemas/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AAEH,MAAM,WAAW,cAAc;IAC7B,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,kEAAkE;IAClE,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,cAAc,EAAE,OAAO,CAAC;IACxB,oEAAoE;IACpE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,yCAAyC;IACzC,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,gDAAgD;IAChD,cAAc,EAAE,aAAa,CAAC;IAC9B,+DAA+D;IAC/D,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,yCAAyC;IACzC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,QAAQ,GAAG,WAAW,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC;IACpB,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC;IACpB,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,SAAS,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAClC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,YAAY,EAAE,CAAC;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../src/schemas/validators.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAalE;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,cAAc,EACxB,YAAY,EAAE,MAAM,GACnB,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../src/schemas/validators.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAalE;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,cAAc,EACxB,YAAY,EAAE,MAAM,GACnB,eAAe,EAAE,CA8GnB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,cAAc,EACxB,gBAAgB,EAAE,MAAM,GACvB,eAAe,EAAE,CA2CnB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,cAAc,EACxB,cAAc,EAAE,MAAM,GACrB,eAAe,EAAE,CA6BnB;AAID;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAoItE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAYhE;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE;IACL,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB,GACA;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,eAAe,EAAE,CAAA;CAAE,CAWhE"}
|
|
@@ -53,7 +53,7 @@ function validateWranglerJsonc(workerName, manifest, jsoncContent) {
|
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
55
|
for (const [name, def] of Object.entries(manifest.vars)) {
|
|
56
|
-
if (def.type === "secret" && !name.endsWith("_BINDING") && !name.endsWith("_SECRET") && !name.startsWith("CLOUDFLARE_") && name !== "TELEGRAM_SECRET_TOKEN" && name !== "MAILGUN_API_KEY" && name !== "EMAIL_SCAN_SUBJECT" && name !== "DASHBOARD_USER" && name !== "DASHBOARD_PASS" && name !== "SESSION_SECRET" && name !== "AGENT_INTERNAL_KEY") {
|
|
56
|
+
if (def.type === "secret" && !name.endsWith("_BINDING") && !name.endsWith("_SECRET") && !name.startsWith("CLOUDFLARE_") && name !== "TELEGRAM_SECRET_TOKEN" && name !== "TELEGRAM_ALLOWED_CHAT_IDS" && name !== "AUTHORIZED_CHAT_IDS" && name !== "MAILGUN_API_KEY" && name !== "EMAIL_SCAN_SUBJECT" && name !== "DASHBOARD_USER" && name !== "DASHBOARD_PASS" && name !== "SESSION_SECRET" && name !== "AGENT_INTERNAL_KEY") {
|
|
57
57
|
errors.push({
|
|
58
58
|
worker: workerName,
|
|
59
59
|
severity: "warning",
|
|
@@ -170,6 +170,8 @@ function generateWranglerJsonc(manifest) {
|
|
|
170
170
|
parts.push(` "vars": {`);
|
|
171
171
|
for (const [i, name] of varKeys.entries()) {
|
|
172
172
|
const def = manifest.vars[name];
|
|
173
|
+
if (!def)
|
|
174
|
+
continue;
|
|
173
175
|
const comma = i < varKeys.length - 1 ? "," : "";
|
|
174
176
|
const val = def.type === "secret" ? "__SECRET__" : JSON.stringify(def.default ?? "");
|
|
175
177
|
parts.push(` "${name}": ${val}${comma}`);
|
package/dist/service-bindings.js
CHANGED
|
@@ -23,12 +23,24 @@ function timingSafeEqual(a, b) {
|
|
|
23
23
|
const len = Math.max(aBuf.length, bBuf.length);
|
|
24
24
|
let result = aBuf.length === bBuf.length ? 0 : 1;
|
|
25
25
|
for (let i = 0;i < len; i++) {
|
|
26
|
-
const av =
|
|
27
|
-
const bv =
|
|
26
|
+
const av = aBuf[i] ?? 0;
|
|
27
|
+
const bv = bBuf[i] ?? 0;
|
|
28
28
|
result |= av ^ bv;
|
|
29
29
|
}
|
|
30
30
|
return result === 0;
|
|
31
31
|
}
|
|
32
|
+
async function timingSafeEqualAsync(a, b) {
|
|
33
|
+
const subtle = globalThis.crypto?.subtle;
|
|
34
|
+
if (!subtle || typeof subtle.digest !== "function" || typeof subtle.timingSafeEqual !== "function") {
|
|
35
|
+
return timingSafeEqual(a, b);
|
|
36
|
+
}
|
|
37
|
+
const encoder = new TextEncoder;
|
|
38
|
+
const [providedHash, expectedHash] = await Promise.all([
|
|
39
|
+
subtle.digest("SHA-256", encoder.encode(a)),
|
|
40
|
+
subtle.digest("SHA-256", encoder.encode(b))
|
|
41
|
+
]);
|
|
42
|
+
return subtle.timingSafeEqual(providedHash, expectedHash);
|
|
43
|
+
}
|
|
32
44
|
function resolveOperatorApiKey(env) {
|
|
33
45
|
const preferred = env.OPERATOR_API_KEY;
|
|
34
46
|
if (typeof preferred === "string" && preferred.length > 0) {
|
|
@@ -53,7 +65,7 @@ async function requireOperatorAuth(request, env) {
|
|
|
53
65
|
}
|
|
54
66
|
const authHeader = request.headers.get("Authorization");
|
|
55
67
|
const expectedHeader = `Bearer ${apiKey}`;
|
|
56
|
-
if (!authHeader || !
|
|
68
|
+
if (!authHeader || !await timingSafeEqualAsync(authHeader, expectedHeader)) {
|
|
57
69
|
return new Response(JSON.stringify({ error: "Unauthorized" }), {
|
|
58
70
|
status: 401,
|
|
59
71
|
headers: { "Content-Type": "application/json" }
|
|
@@ -86,12 +98,13 @@ function collectInternalAuthKeys(env, keyNames) {
|
|
|
86
98
|
return keys;
|
|
87
99
|
}
|
|
88
100
|
function matchesAnyInternalAuthKey(providedKey, expectedKeys) {
|
|
101
|
+
let matched = false;
|
|
89
102
|
for (const expected of expectedKeys) {
|
|
90
103
|
if (timingSafeEqual(providedKey, expected)) {
|
|
91
|
-
|
|
104
|
+
matched = true;
|
|
92
105
|
}
|
|
93
106
|
}
|
|
94
|
-
return
|
|
107
|
+
return matched;
|
|
95
108
|
}
|
|
96
109
|
function internalAuthNotConfiguredResponse(keyNames) {
|
|
97
110
|
const label = normalizeKeyNames(keyNames).join(" | ");
|
package/dist/session.js
CHANGED
|
@@ -16,7 +16,13 @@ var __export = (target, all) => {
|
|
|
16
16
|
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
17
17
|
|
|
18
18
|
// src/path-utils.ts
|
|
19
|
-
import {
|
|
19
|
+
import {
|
|
20
|
+
existsSync,
|
|
21
|
+
mkdirSync,
|
|
22
|
+
readFileSync,
|
|
23
|
+
writeFileSync,
|
|
24
|
+
chmodSync
|
|
25
|
+
} from "fs";
|
|
20
26
|
import { homedir } from "os";
|
|
21
27
|
import { dirname, join, resolve } from "path";
|
|
22
28
|
function createHooxPath(path) {
|
|
@@ -42,7 +48,55 @@ function isHooxSetupRoot(dir) {
|
|
|
42
48
|
return false;
|
|
43
49
|
try {
|
|
44
50
|
const root = resolve(dir);
|
|
45
|
-
|
|
51
|
+
if (!existsSync(join(root, "packages", "cli", "package.json"))) {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
return existsSync(join(root, "wrangler.jsonc")) || existsSync(join(root, "wrangler.jsonc.example")) || existsSync(join(root, "workers")) || existsSync(join(root, ".gitmodules"));
|
|
55
|
+
} catch {
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
function getRememberedMonorepoPath() {
|
|
60
|
+
return resolveHooxPath("config/monorepo.json");
|
|
61
|
+
}
|
|
62
|
+
function getRememberedMonorepoRoot() {
|
|
63
|
+
try {
|
|
64
|
+
const path = getRememberedMonorepoPath();
|
|
65
|
+
if (!existsSync(path))
|
|
66
|
+
return null;
|
|
67
|
+
const raw = readFileSync(path, "utf-8");
|
|
68
|
+
const data = JSON.parse(raw);
|
|
69
|
+
if (!data.root || typeof data.root !== "string")
|
|
70
|
+
return null;
|
|
71
|
+
const resolved = resolve(data.root);
|
|
72
|
+
return isHooxSetupRoot(resolved) ? resolved : null;
|
|
73
|
+
} catch {
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
function rememberMonorepoRoot(root) {
|
|
78
|
+
try {
|
|
79
|
+
const resolved = resolve(root);
|
|
80
|
+
if (!isHooxSetupRoot(resolved))
|
|
81
|
+
return false;
|
|
82
|
+
const configDir = getHooxConfigDir();
|
|
83
|
+
mkdirSync(configDir, { recursive: true, mode: 448 });
|
|
84
|
+
try {
|
|
85
|
+
chmodSync(configDir, 448);
|
|
86
|
+
} catch {}
|
|
87
|
+
const payload = {
|
|
88
|
+
root: resolved,
|
|
89
|
+
updatedAt: new Date().toISOString()
|
|
90
|
+
};
|
|
91
|
+
const path = getRememberedMonorepoPath();
|
|
92
|
+
writeFileSync(path, JSON.stringify(payload, null, 2) + `
|
|
93
|
+
`, {
|
|
94
|
+
mode: 384
|
|
95
|
+
});
|
|
96
|
+
try {
|
|
97
|
+
chmodSync(path, 384);
|
|
98
|
+
} catch {}
|
|
99
|
+
return true;
|
|
46
100
|
} catch {
|
|
47
101
|
return false;
|
|
48
102
|
}
|
|
@@ -62,6 +116,7 @@ function resolveHooxRuntimeRoot(options) {
|
|
|
62
116
|
const env = options?.env ?? process.env;
|
|
63
117
|
const cwd = resolve(options?.cwd ?? process.cwd());
|
|
64
118
|
const globalRepo = getHooxRepoPath();
|
|
119
|
+
const remembered = options?.skipRemembered ? null : getRememberedMonorepoRoot();
|
|
65
120
|
const envRepo = env.HOOX_REPO?.trim();
|
|
66
121
|
if (envRepo) {
|
|
67
122
|
const resolved = resolve(envRepo);
|
|
@@ -72,6 +127,7 @@ function resolveHooxRuntimeRoot(options) {
|
|
|
72
127
|
checked: {
|
|
73
128
|
env: resolved,
|
|
74
129
|
cwd: findHooxSetupRoot(cwd),
|
|
130
|
+
remembered,
|
|
75
131
|
global: globalRepo
|
|
76
132
|
}
|
|
77
133
|
};
|
|
@@ -82,6 +138,7 @@ function resolveHooxRuntimeRoot(options) {
|
|
|
82
138
|
checked: {
|
|
83
139
|
env: resolved,
|
|
84
140
|
cwd: findHooxSetupRoot(cwd),
|
|
141
|
+
remembered,
|
|
85
142
|
global: globalRepo
|
|
86
143
|
}
|
|
87
144
|
};
|
|
@@ -91,20 +148,27 @@ function resolveHooxRuntimeRoot(options) {
|
|
|
91
148
|
return {
|
|
92
149
|
root: local,
|
|
93
150
|
source: "cwd",
|
|
94
|
-
checked: { cwd: local, global: globalRepo }
|
|
151
|
+
checked: { cwd: local, remembered, global: globalRepo }
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
if (remembered) {
|
|
155
|
+
return {
|
|
156
|
+
root: remembered,
|
|
157
|
+
source: "remembered",
|
|
158
|
+
checked: { cwd: null, remembered, global: globalRepo }
|
|
95
159
|
};
|
|
96
160
|
}
|
|
97
161
|
if (isHooxSetupRoot(globalRepo)) {
|
|
98
162
|
return {
|
|
99
163
|
root: globalRepo,
|
|
100
164
|
source: "global",
|
|
101
|
-
checked: { cwd: null, global: globalRepo }
|
|
165
|
+
checked: { cwd: null, remembered: null, global: globalRepo }
|
|
102
166
|
};
|
|
103
167
|
}
|
|
104
168
|
return {
|
|
105
169
|
root: null,
|
|
106
170
|
source: "none",
|
|
107
|
-
checked: { cwd: null, global: globalRepo }
|
|
171
|
+
checked: { cwd: null, remembered: null, global: globalRepo }
|
|
108
172
|
};
|
|
109
173
|
}
|
|
110
174
|
function getTuiEntryCandidates(runtimeRoot) {
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
* SPDX-License-Identifier: Apache-2.0
|
|
4
4
|
*/
|
|
5
5
|
import type { ViewId, LogFilter, NotificationPreferences } from "../types";
|
|
6
|
+
/** TUI prefs file — isolated from operator config.json (which may hold apiToken). */
|
|
7
|
+
export declare function getTuiPreferencesPath(): string;
|
|
6
8
|
export interface ConfigState {
|
|
7
9
|
theme: "dark" | "light";
|
|
8
10
|
refreshIntervalMs: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-store.d.ts","sourceRoot":"","sources":["../../src/stores/config-store.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"config-store.d.ts","sourceRoot":"","sources":["../../src/stores/config-store.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAmBH,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAM3E,qFAAqF;AACrF,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AA0ID,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,UAAU,EAAE,SAAS,CAAC;IACtB,aAAa,EAAE,uBAAuB,CAAC;IACvC,YAAY,EAAE,OAAO,CAAC;CACvB;AAID,UAAU,aAAa;IACrB,+DAA+D;IAC/D,YAAY,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IACtD,8CAA8C;IAC9C,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,yCAAyC;IACzC,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACnD,8CAA8C;IAC9C,kBAAkB,EAAE,CAAC,OAAO,EAAE,MAAM,uBAAuB,KAAK,IAAI,CAAC;CACtE;AAiBD,eAAO,MAAM,cAAc;;;;;;;;;;;;;;eAtClB,MAAM,GAAG,OAAO;2BACJ,MAAM;qBACZ,MAAM;;;;;;;;;;;;;;;;sBAKL,OAAO;sBAOP,CAAC,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,KAAK,IAAI;uBAEtC,MAAM,IAAI;qBAEZ,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI;4BAE9B,CAAC,OAAO,EAAE,MAAM,uBAAuB,KAAK,IAAI;;;eApB7D,MAAM,GAAG,OAAO;2BACJ,MAAM;qBACZ,MAAM;;;;;;;;;;;;;;;;sBAKL,OAAO;sBAOP,CAAC,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,KAAK,IAAI;uBAEtC,MAAM,IAAI;qBAEZ,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI;4BAE9B,CAAC,OAAO,EAAE,MAAM,uBAAuB,KAAK,IAAI;;EA+ErE,CAAC"}
|