@hoox-sh/hoox-shared 1.4.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 +21 -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 +8 -25
- package/dist/d1/repository.js +3 -19
- 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.js +7 -23
- 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 +3 -19
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2211 -2098
- package/dist/kill-switch.js +12 -20
- package/dist/kvKeys.d.ts +8 -0
- package/dist/kvKeys.d.ts.map +1 -1
- package/dist/kvKeys.js +42 -46
- package/dist/kvUtils.js +8 -24
- package/dist/legal.js +5 -21
- package/dist/middleware/auth.js +9 -25
- package/dist/middleware/cors.js +4 -20
- package/dist/middleware/index.js +141 -163
- package/dist/middleware/logger.js +9 -25
- package/dist/middleware/rate-limit.js +2 -18
- package/dist/middleware/security-headers.js +2 -18
- package/dist/middleware/validate.js +5 -21
- package/dist/middleware/wait-until.js +2 -18
- package/dist/operator-transport.js +13 -17
- package/dist/path-utils.js +15 -31
- package/dist/queue-handler.js +0 -16
- package/dist/router.js +0 -16
- package/dist/schemas/index.js +35 -27
- package/dist/schemas/registry.d.ts.map +1 -1
- package/dist/schemas/registry.js +29 -20
- package/dist/schemas/validators.js +5 -21
- package/dist/service-bindings.js +13 -29
- 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 +16 -29
- 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 +4 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +10 -24
- package/dist/wizard/engine.d.ts.map +1 -1
- package/dist/wizard/engine.js +21 -21
- package/dist/wizard/index.d.ts +1 -0
- package/dist/wizard/index.d.ts.map +1 -1
- package/dist/wizard/index.js +36 -33
- 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 +10 -22
- 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
package/README.md
CHANGED
|
@@ -41,4 +41,10 @@ The named subdirectories with deep-import support are: `middleware`, `d1`, `sche
|
|
|
41
41
|
|
|
42
42
|
```bash
|
|
43
43
|
bun test packages/shared
|
|
44
|
+
bun run build:shared # emits dist/ (gitignored)
|
|
45
|
+
bun run typecheck # builds shared first, then tsc every workspace
|
|
44
46
|
```
|
|
47
|
+
|
|
48
|
+
Worker `tsc` resolves `@hoox-sh/hoox-shared/<subpath>` through this package's
|
|
49
|
+
`exports` map to `dist/*.d.ts`. `bun run typecheck` (and the pre-push hook)
|
|
50
|
+
builds `dist/` first so a clean tree does not fail with missing-module errors.
|
|
@@ -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/kvKeys.ts
|
|
19
3
|
var KV_TRADE_DEFAULT_LEVERAGE = "trade:default_leverage";
|
|
20
4
|
var KV_TRADE_MAX_POSITION_SIZE = "trade:max_position_size";
|
|
@@ -26,6 +10,10 @@ var KV_BOT_ENABLED = "bot:enabled";
|
|
|
26
10
|
var KV_BOT_DEFAULT_CHAT_ID = "bot:default_chat_id";
|
|
27
11
|
var KV_BOT_NOTIFY_ON_EXECUTION = "bot:notify_on_execution";
|
|
28
12
|
var KV_BOT_NOTIFY_ON_ERROR = "bot:notify_on_error";
|
|
13
|
+
var KV_BOT_NOTIFY_ON_STARTUP = "bot:notify_on_startup";
|
|
14
|
+
var KV_BOT_AI_SUMMARIES_ENABLED = "bot:ai_summaries_enabled";
|
|
15
|
+
var KV_BOT_SUMMARY_STYLE = "bot:summary_style";
|
|
16
|
+
var KV_BOT_INCLUDE_PNL = "bot:include_pnl";
|
|
29
17
|
var KV_TELEGRAM_ALLOWED_CHAT_IDS = "telegram:allowed_chat_ids";
|
|
30
18
|
var KV_WEBHOOK_IP_CHECK_ENABLED = "webhook:tradingview:ip_check_enabled";
|
|
31
19
|
var KV_WEBHOOK_ALLOWED_IPS = "webhook:tradingview:allowed_ips";
|
|
@@ -57,6 +45,10 @@ var KVKeys = {
|
|
|
57
45
|
KV_BOT_DEFAULT_CHAT_ID,
|
|
58
46
|
KV_BOT_NOTIFY_ON_EXECUTION,
|
|
59
47
|
KV_BOT_NOTIFY_ON_ERROR,
|
|
48
|
+
KV_BOT_NOTIFY_ON_STARTUP,
|
|
49
|
+
KV_BOT_AI_SUMMARIES_ENABLED,
|
|
50
|
+
KV_BOT_SUMMARY_STYLE,
|
|
51
|
+
KV_BOT_INCLUDE_PNL,
|
|
60
52
|
KV_TELEGRAM_ALLOWED_CHAT_IDS,
|
|
61
53
|
KV_WEBHOOK_IP_CHECK_ENABLED,
|
|
62
54
|
KV_WEBHOOK_ALLOWED_IPS,
|
|
@@ -143,9 +135,9 @@ function getAgentConfigEmbeddedValue(config, fieldKey) {
|
|
|
143
135
|
const map = config.modelMap;
|
|
144
136
|
if (!map || typeof map !== "object" || Array.isArray(map))
|
|
145
137
|
return;
|
|
146
|
-
const
|
|
147
|
-
if (typeof
|
|
148
|
-
return
|
|
138
|
+
const v = map[spec.provider];
|
|
139
|
+
if (typeof v === "string" || typeof v === "number" || typeof v === "boolean")
|
|
140
|
+
return v;
|
|
149
141
|
return;
|
|
150
142
|
}
|
|
151
143
|
const v = config[spec.key];
|
|
@@ -210,15 +202,15 @@ function applyAgentConfigFieldUpdates(config, updates) {
|
|
|
210
202
|
return next;
|
|
211
203
|
}
|
|
212
204
|
export {
|
|
213
|
-
|
|
214
|
-
serializeAgentConfigForKv,
|
|
215
|
-
parseAgentConfigJson,
|
|
216
|
-
isAgentConfigSection,
|
|
217
|
-
isAgentConfigEmbeddedField,
|
|
218
|
-
getAgentConfigEmbeddedValue,
|
|
219
|
-
expandAgentConfigToFieldMap,
|
|
220
|
-
applyAgentConfigFieldUpdates,
|
|
221
|
-
DASHBOARD_SECTIONS_AGENT_CONFIG,
|
|
205
|
+
AGENT_CONFIG_EMBEDDED_FIELDS,
|
|
222
206
|
AGENT_CONFIG_KV_KEY,
|
|
223
|
-
|
|
207
|
+
DASHBOARD_SECTIONS_AGENT_CONFIG,
|
|
208
|
+
applyAgentConfigFieldUpdates,
|
|
209
|
+
expandAgentConfigToFieldMap,
|
|
210
|
+
getAgentConfigEmbeddedValue,
|
|
211
|
+
isAgentConfigEmbeddedField,
|
|
212
|
+
isAgentConfigSection,
|
|
213
|
+
parseAgentConfigJson,
|
|
214
|
+
serializeAgentConfigForKv,
|
|
215
|
+
setAgentConfigEmbeddedValue
|
|
224
216
|
};
|
package/dist/analytics.d.ts
CHANGED
|
@@ -2,10 +2,6 @@
|
|
|
2
2
|
* Copyright (c) 2026 HOOX · HOOX · jango-blockchained (hoox-sh)
|
|
3
3
|
* SPDX-License-Identifier: Apache-2.0
|
|
4
4
|
*/
|
|
5
|
-
/**
|
|
6
|
-
* Analytics tracking utilities for Cloudflare Workers
|
|
7
|
-
* Centralizes the trackAnalytics helper used across all workers
|
|
8
|
-
*/
|
|
9
5
|
/**
|
|
10
6
|
* Environment with optional analytics service binding.
|
|
11
7
|
* Workers that support analytics tracking should extend this type.
|
|
@@ -22,6 +18,9 @@
|
|
|
22
18
|
*/
|
|
23
19
|
export interface AnalyticsEnv {
|
|
24
20
|
ANALYTICS_SERVICE?: Fetcher;
|
|
21
|
+
/** Opt-in tenant isolation (see tenant.ts). Absent = self-host default. */
|
|
22
|
+
TENANT_ID?: string;
|
|
23
|
+
TENANT_MODE?: string;
|
|
25
24
|
}
|
|
26
25
|
/**
|
|
27
26
|
* Optional configuration for trackAnalytics.
|
package/dist/analytics.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../src/analytics.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../src/analytics.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,YAAY;IAC3B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,2EAA2E;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;;OAIG;IACH,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7B;AAED;;;;;;;;GAQG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,YAAY,EACjB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,IAAI,CAAC,CA8Cf"}
|
package/dist/analytics.js
CHANGED
|
@@ -1,27 +1,67 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
|
|
3
|
-
var
|
|
4
|
-
function
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
};
|
|
16
|
-
|
|
2
|
+
// src/tenant.ts
|
|
3
|
+
var TENANT_ID_RE = /^[A-Za-z0-9_-]{1,64}$/;
|
|
4
|
+
function isTenantFlagOn(env) {
|
|
5
|
+
const v = env?.TENANT_MODE;
|
|
6
|
+
return v === "true" || v === "1";
|
|
7
|
+
}
|
|
8
|
+
function tenantScope(env) {
|
|
9
|
+
if (!isTenantFlagOn(env))
|
|
10
|
+
return { enabled: false, tenantId: null };
|
|
11
|
+
const id = (env?.TENANT_ID ?? "").trim();
|
|
12
|
+
if (!id || !TENANT_ID_RE.test(id)) {
|
|
13
|
+
throw new Error("TENANT_MODE is enabled but TENANT_ID is missing or invalid (expected [A-Za-z0-9_-], 1-64 chars)");
|
|
14
|
+
}
|
|
15
|
+
return { enabled: true, tenantId: id };
|
|
16
|
+
}
|
|
17
|
+
function isTenantMode(env) {
|
|
18
|
+
try {
|
|
19
|
+
return tenantScope(env).enabled;
|
|
20
|
+
} catch {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function effectiveTenantId(env, msg) {
|
|
25
|
+
if (isTenantFlagOn(env)) {
|
|
26
|
+
return tenantScope(env).tenantId;
|
|
27
|
+
}
|
|
28
|
+
const m = typeof msg?.tenantId === "string" ? msg.tenantId.trim() : "";
|
|
29
|
+
return m && TENANT_ID_RE.test(m) ? m : null;
|
|
30
|
+
}
|
|
31
|
+
function scopeKey(env, key, msg) {
|
|
32
|
+
const id = effectiveTenantId(env, msg);
|
|
33
|
+
return id ? `t/${id}/${key}` : key;
|
|
34
|
+
}
|
|
35
|
+
function scopeR2Key(env, key, msg) {
|
|
36
|
+
const id = effectiveTenantId(env, msg);
|
|
37
|
+
return id ? `t-${id}/${key}` : key;
|
|
38
|
+
}
|
|
39
|
+
function withTenantId(env, obj) {
|
|
40
|
+
const ts = tenantScope(env);
|
|
41
|
+
return ts.enabled && ts.tenantId ? { ...obj, tenantId: ts.tenantId } : obj;
|
|
42
|
+
}
|
|
43
|
+
function tenantContextOf(env) {
|
|
44
|
+
const ts = tenantScope(env);
|
|
45
|
+
return ts.enabled && ts.tenantId ? { tenantId: ts.tenantId } : null;
|
|
46
|
+
}
|
|
17
47
|
|
|
18
48
|
// src/analytics.ts
|
|
19
49
|
async function trackAnalytics(env, endpoint, body, options) {
|
|
20
50
|
if (!env.ANALYTICS_SERVICE)
|
|
21
51
|
return;
|
|
22
52
|
try {
|
|
53
|
+
let tenantId = null;
|
|
54
|
+
try {
|
|
55
|
+
tenantId = effectiveTenantId(env);
|
|
56
|
+
} catch {
|
|
57
|
+
tenantId = null;
|
|
58
|
+
}
|
|
59
|
+
const rest = { ...body };
|
|
60
|
+
delete rest.tenant_id;
|
|
61
|
+
delete rest.tenantId;
|
|
23
62
|
const payload = {
|
|
24
|
-
...
|
|
63
|
+
...rest,
|
|
64
|
+
...tenantId ? { tenant_id: tenantId } : {},
|
|
25
65
|
...options?.indexes ? { indexes: [...options.indexes] } : {}
|
|
26
66
|
};
|
|
27
67
|
const headers = {
|
package/dist/api-client.js
CHANGED
|
@@ -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) {
|
|
@@ -83,11 +79,6 @@ var init_operator_transport = __esm(() => {
|
|
|
83
79
|
});
|
|
84
80
|
|
|
85
81
|
// src/api-client.ts
|
|
86
|
-
var exports_api_client = {};
|
|
87
|
-
__export(exports_api_client, {
|
|
88
|
-
hooxFetch: () => hooxFetch,
|
|
89
|
-
WorkerAPIError: () => WorkerAPIError
|
|
90
|
-
});
|
|
91
82
|
function isRetryableStatus(status) {
|
|
92
83
|
if (status === 401 || status === 403 || status === 429)
|
|
93
84
|
return false;
|
|
@@ -190,6 +181,6 @@ var init_api_client = __esm(() => {
|
|
|
190
181
|
init_api_client();
|
|
191
182
|
|
|
192
183
|
export {
|
|
193
|
-
|
|
194
|
-
|
|
184
|
+
WorkerAPIError,
|
|
185
|
+
hooxFetch
|
|
195
186
|
};
|
package/dist/colors.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/colors.ts
|
|
19
3
|
var Colors = {
|
|
20
4
|
background: "#050508",
|
|
@@ -73,10 +57,10 @@ var AlertSeverityColor = {
|
|
|
73
57
|
critical: Colors.error
|
|
74
58
|
};
|
|
75
59
|
export {
|
|
76
|
-
|
|
77
|
-
LogLevelColor,
|
|
78
|
-
CoolBracketPalette,
|
|
79
|
-
ConnectionStatusColor,
|
|
60
|
+
AlertSeverityColor,
|
|
80
61
|
Colors,
|
|
81
|
-
|
|
62
|
+
ConnectionStatusColor,
|
|
63
|
+
CoolBracketPalette,
|
|
64
|
+
LogLevelColor,
|
|
65
|
+
WorkerStatusColor
|
|
82
66
|
};
|
package/dist/config.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/config.ts
|
|
19
3
|
import {
|
|
20
4
|
readFileSync,
|
|
@@ -131,16 +115,16 @@ function validateConfig(config) {
|
|
|
131
115
|
return errors;
|
|
132
116
|
}
|
|
133
117
|
export {
|
|
134
|
-
|
|
135
|
-
writeConfigSync,
|
|
136
|
-
writeConfig,
|
|
137
|
-
validateConfig,
|
|
138
|
-
readConfigSync,
|
|
139
|
-
readConfig,
|
|
140
|
-
isUnixModeGroupOrWorldAccessible,
|
|
141
|
-
isConfigWorldOrGroupReadable,
|
|
142
|
-
formatConfigPermissionWarning,
|
|
143
|
-
ensureHooxDirSecure,
|
|
118
|
+
HOOX_CONFIG_FILE_MODE,
|
|
144
119
|
HOOX_DIR_MODE,
|
|
145
|
-
|
|
120
|
+
ensureHooxDirSecure,
|
|
121
|
+
formatConfigPermissionWarning,
|
|
122
|
+
isConfigWorldOrGroupReadable,
|
|
123
|
+
isUnixModeGroupOrWorldAccessible,
|
|
124
|
+
readConfig,
|
|
125
|
+
readConfigSync,
|
|
126
|
+
validateConfig,
|
|
127
|
+
writeConfig,
|
|
128
|
+
writeConfigSync,
|
|
129
|
+
writeSecureFileSync
|
|
146
130
|
};
|
package/dist/cron-handler.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/cron-handler.ts
|
|
19
3
|
function createCronHandler(options) {
|
|
20
4
|
const { name, handler, logger } = options;
|
package/dist/d1/index.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/errors.ts
|
|
19
3
|
function toError(err, fallback = "Unknown error") {
|
|
20
4
|
if (err instanceof Error)
|
|
@@ -72,14 +56,14 @@ function sanitizeOutput(data) {
|
|
|
72
56
|
const obj = data;
|
|
73
57
|
const keys = Object.keys(obj);
|
|
74
58
|
if (keys.length < 10) {
|
|
75
|
-
const
|
|
59
|
+
const sanitized = {};
|
|
76
60
|
for (const k of keys) {
|
|
77
61
|
if (k === "stack" || k === "cause")
|
|
78
62
|
continue;
|
|
79
63
|
const v = obj[k];
|
|
80
|
-
|
|
64
|
+
sanitized[k] = v instanceof Error ? { name: v.name, message: v.message } : sanitizeOutput(v);
|
|
81
65
|
}
|
|
82
|
-
return
|
|
66
|
+
return sanitized;
|
|
83
67
|
}
|
|
84
68
|
if (!hasSensitiveFields(obj) && !hasErrorValues(obj)) {
|
|
85
69
|
return obj;
|
|
@@ -294,7 +278,6 @@ class D1Repository {
|
|
|
294
278
|
}
|
|
295
279
|
}
|
|
296
280
|
}
|
|
297
|
-
|
|
298
281
|
// src/d1/schemas.ts
|
|
299
282
|
import { z } from "zod";
|
|
300
283
|
var TradeRecordSchema = z.object({
|
|
@@ -353,10 +336,10 @@ var TradeSignalRecordSchema = z.object({
|
|
|
353
336
|
processed_at: z.number().int().optional()
|
|
354
337
|
}).strict();
|
|
355
338
|
export {
|
|
356
|
-
|
|
357
|
-
TradeRecordSchema,
|
|
358
|
-
SystemLogRecordSchema,
|
|
359
|
-
PositionRecordSchema,
|
|
339
|
+
BalanceRecordSchema,
|
|
360
340
|
D1Repository,
|
|
361
|
-
|
|
341
|
+
PositionRecordSchema,
|
|
342
|
+
SystemLogRecordSchema,
|
|
343
|
+
TradeRecordSchema,
|
|
344
|
+
TradeSignalRecordSchema
|
|
362
345
|
};
|
package/dist/d1/repository.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/errors.ts
|
|
19
3
|
function toError(err, fallback = "Unknown error") {
|
|
20
4
|
if (err instanceof Error)
|
|
@@ -72,14 +56,14 @@ function sanitizeOutput(data) {
|
|
|
72
56
|
const obj = data;
|
|
73
57
|
const keys = Object.keys(obj);
|
|
74
58
|
if (keys.length < 10) {
|
|
75
|
-
const
|
|
59
|
+
const sanitized = {};
|
|
76
60
|
for (const k of keys) {
|
|
77
61
|
if (k === "stack" || k === "cause")
|
|
78
62
|
continue;
|
|
79
63
|
const v = obj[k];
|
|
80
|
-
|
|
64
|
+
sanitized[k] = v instanceof Error ? { name: v.name, message: v.message } : sanitizeOutput(v);
|
|
81
65
|
}
|
|
82
|
-
return
|
|
66
|
+
return sanitized;
|
|
83
67
|
}
|
|
84
68
|
if (!hasSensitiveFields(obj) && !hasErrorValues(obj)) {
|
|
85
69
|
return obj;
|
package/dist/d1/schemas.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/d1/schemas.ts
|
|
19
3
|
import { z } from "zod";
|
|
20
4
|
var TradeRecordSchema = z.object({
|
|
@@ -73,9 +57,9 @@ var TradeSignalRecordSchema = z.object({
|
|
|
73
57
|
processed_at: z.number().int().optional()
|
|
74
58
|
}).strict();
|
|
75
59
|
export {
|
|
76
|
-
|
|
77
|
-
TradeRecordSchema,
|
|
78
|
-
SystemLogRecordSchema,
|
|
60
|
+
BalanceRecordSchema,
|
|
79
61
|
PositionRecordSchema,
|
|
80
|
-
|
|
62
|
+
SystemLogRecordSchema,
|
|
63
|
+
TradeRecordSchema,
|
|
64
|
+
TradeSignalRecordSchema
|
|
81
65
|
};
|
|
@@ -58,11 +58,12 @@ export declare const DASHBOARD_FIELD_KV_OVERRIDES: Record<string, string>;
|
|
|
58
58
|
* - providers/models: edited via `agent:config` (see agent-config-fields.ts)
|
|
59
59
|
* - cron: wrangler trigger schedule, not KV
|
|
60
60
|
* - behavior: not read as flat behavior:* keys by the agent worker
|
|
61
|
+
* - endpoints: documentation-only in report-worker dashboard.jsonc
|
|
61
62
|
*/
|
|
62
63
|
export declare const DASHBOARD_SECTIONS_NOT_FLAT_KV: ReadonlySet<string>;
|
|
63
64
|
/**
|
|
64
65
|
* Sections that are not editable as flat or agent:config fields
|
|
65
|
-
* (no worker consumer yet).
|
|
66
|
+
* (no worker consumer yet / docs only).
|
|
66
67
|
*/
|
|
67
68
|
export declare const DASHBOARD_SECTIONS_UI_SKIP: ReadonlySet<string>;
|
|
68
69
|
/** True when a section should map to flat CONFIG_KV get/set / apply-manifest. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard-manifest.d.ts","sourceRoot":"","sources":["../src/dashboard-manifest.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAYH,MAAM,MAAM,kBAAkB,GAC1B,SAAS,GACT,QAAQ,GACR,MAAM,GACN,QAAQ,GACR,MAAM,GACN,UAAU,CAAC;AAEf,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,CAAC;AAEnE,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,qBAAqB;IACpC,mEAAmE;IACnE,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,kBAAkB,CAAC;IACzB,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IACnC,OAAO,CAAC,EAAE,oBAAoB,EAAE,CAAC;IACjC,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2EAA2E;IAC3E,UAAU,CAAC,EAAE;QACX,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,CAAC;CACH;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,qBAAqB,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;CAC9B;AAED,0EAA0E;AAC1E,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAW1D,CAAC;AAEF,qFAAqF;AACrF,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"dashboard-manifest.d.ts","sourceRoot":"","sources":["../src/dashboard-manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -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/dashboard-manifest.ts
|
|
19
3
|
import { existsSync, readdirSync, readFileSync } from "fs";
|
|
20
4
|
import { join } from "path";
|
|
@@ -34,10 +18,12 @@ var DASHBOARD_SECTION_PREFIX = {
|
|
|
34
18
|
global: "global:",
|
|
35
19
|
webhook: "webhook:",
|
|
36
20
|
routing: "routing:",
|
|
21
|
+
notify: "telegram:",
|
|
37
22
|
security: "webhook:",
|
|
38
23
|
trade: "trade:",
|
|
39
24
|
agent: "agent:",
|
|
40
25
|
bot: "bot:",
|
|
26
|
+
bot_ai: "bot:",
|
|
41
27
|
email: "email:",
|
|
42
28
|
signal: "email:",
|
|
43
29
|
database: "database:",
|
|
@@ -50,26 +36,44 @@ var DASHBOARD_SECTION_PREFIX = {
|
|
|
50
36
|
providers: "agent:",
|
|
51
37
|
models: "agent:",
|
|
52
38
|
ai: "ai:",
|
|
39
|
+
tracking: "ai:",
|
|
40
|
+
query: "ai:",
|
|
53
41
|
report: "report:",
|
|
42
|
+
schedule: "report:",
|
|
43
|
+
rendering: "report:",
|
|
44
|
+
storage: "report:",
|
|
45
|
+
delivery: "report:",
|
|
46
|
+
endpoints: "report:",
|
|
47
|
+
wallet: "wallet:",
|
|
48
|
+
dex: "wallet:",
|
|
49
|
+
wallet_security: "wallet:",
|
|
54
50
|
pyne: "pyne:",
|
|
55
51
|
pyne_alerts: "pyne:"
|
|
56
52
|
};
|
|
57
53
|
var DASHBOARD_FIELD_KV_OVERRIDES = {
|
|
58
54
|
"webhook:tradingview_ip_check_enabled": "webhook:tradingview:ip_check_enabled",
|
|
59
55
|
"webhook:tradingview_allowed_ips": "webhook:tradingview:allowed_ips",
|
|
56
|
+
"webhook:queue_mode": "webhook:queue_mode",
|
|
57
|
+
"notify:allowed_chat_ids": "telegram:allowed_chat_ids",
|
|
60
58
|
"exchanges:binance_enabled": "exchange:binance:enabled",
|
|
61
59
|
"exchanges:mexc_enabled": "exchange:mexc:enabled",
|
|
62
|
-
"exchanges:bybit_enabled": "exchange:bybit:enabled"
|
|
60
|
+
"exchanges:bybit_enabled": "exchange:bybit:enabled",
|
|
61
|
+
"exchanges:uniswap_ethereum_enabled": "exchange:uniswap-ethereum:enabled",
|
|
62
|
+
"exchanges:uniswap_arbitrum_enabled": "exchange:uniswap-arbitrum:enabled",
|
|
63
|
+
"exchanges:jupiter_solana_enabled": "exchange:jupiter-solana:enabled",
|
|
64
|
+
"wallet:config": "wallet:config"
|
|
63
65
|
};
|
|
64
66
|
var DASHBOARD_SECTIONS_NOT_FLAT_KV = new Set([
|
|
65
67
|
"providers",
|
|
66
68
|
"models",
|
|
67
69
|
"cron",
|
|
68
|
-
"behavior"
|
|
70
|
+
"behavior",
|
|
71
|
+
"endpoints"
|
|
69
72
|
]);
|
|
70
73
|
var DASHBOARD_SECTIONS_UI_SKIP = new Set([
|
|
71
74
|
"cron",
|
|
72
|
-
"behavior"
|
|
75
|
+
"behavior",
|
|
76
|
+
"endpoints"
|
|
73
77
|
]);
|
|
74
78
|
function isDashboardSectionFlatKv(sectionId) {
|
|
75
79
|
return !DASHBOARD_SECTIONS_NOT_FLAT_KV.has(sectionId);
|
|
@@ -383,19 +387,19 @@ function loadDashboardManifestsFromRoot(root, onError) {
|
|
|
383
387
|
return manifests;
|
|
384
388
|
}
|
|
385
389
|
export {
|
|
386
|
-
|
|
387
|
-
parseDashboardManifest,
|
|
388
|
-
loadDashboardManifestsFromRoot,
|
|
389
|
-
loadDashboardKvManifestFromRoot,
|
|
390
|
-
kvManifestFromDashboardManifests,
|
|
391
|
-
isDashboardSectionFlatKv,
|
|
392
|
-
isDashboardSectionEditable,
|
|
393
|
-
dashboardWorkerDir,
|
|
394
|
-
buildDashboardKvKey,
|
|
395
|
-
DASHBOARD_WORKER_PREFIX,
|
|
396
|
-
DASHBOARD_WORKER_IDS,
|
|
397
|
-
DASHBOARD_SECTION_PREFIX,
|
|
398
|
-
DASHBOARD_SECTIONS_UI_SKIP,
|
|
390
|
+
DASHBOARD_FIELD_KV_OVERRIDES,
|
|
399
391
|
DASHBOARD_SECTIONS_NOT_FLAT_KV,
|
|
400
|
-
|
|
392
|
+
DASHBOARD_SECTIONS_UI_SKIP,
|
|
393
|
+
DASHBOARD_SECTION_PREFIX,
|
|
394
|
+
DASHBOARD_WORKER_IDS,
|
|
395
|
+
DASHBOARD_WORKER_PREFIX,
|
|
396
|
+
buildDashboardKvKey,
|
|
397
|
+
dashboardWorkerDir,
|
|
398
|
+
isDashboardSectionEditable,
|
|
399
|
+
isDashboardSectionFlatKv,
|
|
400
|
+
kvManifestFromDashboardManifests,
|
|
401
|
+
loadDashboardKvManifestFromRoot,
|
|
402
|
+
loadDashboardManifestsFromRoot,
|
|
403
|
+
parseDashboardManifest,
|
|
404
|
+
stripJsonc
|
|
401
405
|
};
|