@hoox-sh/hoox-shared 1.4.0 → 1.6.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.
Files changed (110) hide show
  1. package/README.md +6 -0
  2. package/dist/agent-config-fields.d.ts +5 -0
  3. package/dist/agent-config-fields.d.ts.map +1 -1
  4. package/dist/agent-config-fields.js +21 -29
  5. package/dist/analytics.d.ts +3 -4
  6. package/dist/analytics.d.ts.map +1 -1
  7. package/dist/analytics.js +64 -19
  8. package/dist/api-client.js +12 -21
  9. package/dist/colors.js +5 -21
  10. package/dist/config.d.ts +10 -2
  11. package/dist/config.d.ts.map +1 -1
  12. package/dist/config.js +267 -51
  13. package/dist/cron-handler.js +0 -16
  14. package/dist/d1/index.js +8 -25
  15. package/dist/d1/repository.js +3 -19
  16. package/dist/d1/schemas.js +4 -20
  17. package/dist/dashboard-manifest.d.ts +2 -1
  18. package/dist/dashboard-manifest.d.ts.map +1 -1
  19. package/dist/dashboard-manifest.js +37 -33
  20. package/dist/entitlements.d.ts +46 -0
  21. package/dist/entitlements.d.ts.map +1 -0
  22. package/dist/entitlements.js +15 -0
  23. package/dist/errors.d.ts +1 -0
  24. package/dist/errors.d.ts.map +1 -1
  25. package/dist/errors.js +7 -23
  26. package/dist/exchange-client.d.ts +0 -19
  27. package/dist/exchange-client.d.ts.map +1 -1
  28. package/dist/exchange-client.js +1 -83
  29. package/dist/exchanges/base-exchange-client.d.ts.map +1 -1
  30. package/dist/exchanges/base-exchange-client.js +4 -19
  31. package/dist/exchanges/index.js +4 -19
  32. package/dist/format-time.js +2 -18
  33. package/dist/formatters.js +12 -28
  34. package/dist/health.js +3 -19
  35. package/dist/index.d.ts +7 -4
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +3568 -3766
  38. package/dist/kill-switch.js +12 -20
  39. package/dist/kvKeys.d.ts +8 -0
  40. package/dist/kvKeys.d.ts.map +1 -1
  41. package/dist/kvKeys.js +42 -46
  42. package/dist/kvUtils.js +8 -24
  43. package/dist/legal.js +5 -21
  44. package/dist/middleware/auth.d.ts +9 -0
  45. package/dist/middleware/auth.d.ts.map +1 -1
  46. package/dist/middleware/auth.js +9 -25
  47. package/dist/middleware/cors.js +4 -20
  48. package/dist/middleware/index.js +144 -165
  49. package/dist/middleware/logger.d.ts +2 -0
  50. package/dist/middleware/logger.d.ts.map +1 -1
  51. package/dist/middleware/logger.js +9 -25
  52. package/dist/middleware/rate-limit.d.ts +7 -0
  53. package/dist/middleware/rate-limit.d.ts.map +1 -1
  54. package/dist/middleware/rate-limit.js +5 -20
  55. package/dist/middleware/security-headers.js +2 -18
  56. package/dist/middleware/validate.d.ts +2 -0
  57. package/dist/middleware/validate.d.ts.map +1 -1
  58. package/dist/middleware/validate.js +5 -21
  59. package/dist/middleware/wait-until.js +2 -18
  60. package/dist/operator-transport.js +13 -17
  61. package/dist/path-utils.d.ts.map +1 -1
  62. package/dist/path-utils.js +28 -34
  63. package/dist/queue-handler.d.ts.map +1 -1
  64. package/dist/queue-handler.js +19 -24
  65. package/dist/router.d.ts +5 -0
  66. package/dist/router.d.ts.map +1 -1
  67. package/dist/router.js +0 -16
  68. package/dist/schemas/index.js +75 -50
  69. package/dist/schemas/registry.d.ts.map +1 -1
  70. package/dist/schemas/registry.js +33 -21
  71. package/dist/schemas/validators.d.ts.map +1 -1
  72. package/dist/schemas/validators.js +41 -43
  73. package/dist/service-bindings.d.ts +4 -0
  74. package/dist/service-bindings.d.ts.map +1 -1
  75. package/dist/service-bindings.js +13 -29
  76. package/dist/session.d.ts +10 -3
  77. package/dist/session.d.ts.map +1 -1
  78. package/dist/session.js +111 -51
  79. package/dist/sse.d.ts.map +1 -1
  80. package/dist/sse.js +34 -24
  81. package/dist/stores/config-store.d.ts +2 -50
  82. package/dist/stores/config-store.d.ts.map +1 -1
  83. package/dist/stores/config-store.js +153 -156
  84. package/dist/stores/service-store.d.ts +2 -192
  85. package/dist/stores/service-store.d.ts.map +1 -1
  86. package/dist/stores/service-store.js +40 -35
  87. package/dist/stores/ui-store.d.ts +2 -48
  88. package/dist/stores/ui-store.d.ts.map +1 -1
  89. package/dist/stores/ui-store.js +0 -16
  90. package/dist/tenant.d.ts +62 -0
  91. package/dist/tenant.d.ts.map +1 -0
  92. package/dist/tenant.js +56 -0
  93. package/dist/test-utils.js +11 -27
  94. package/dist/types.d.ts +10 -3
  95. package/dist/types.d.ts.map +1 -1
  96. package/dist/types.js +29 -24
  97. package/dist/wizard/engine.d.ts.map +1 -1
  98. package/dist/wizard/engine.js +33 -27
  99. package/dist/wizard/index.d.ts +1 -0
  100. package/dist/wizard/index.d.ts.map +1 -1
  101. package/dist/wizard/index.js +48 -39
  102. package/dist/wizard/persistence.d.ts +4 -0
  103. package/dist/wizard/persistence.d.ts.map +1 -1
  104. package/dist/wizard/persistence.js +7 -19
  105. package/dist/wizard/presets.d.ts.map +1 -1
  106. package/dist/wizard/presets.js +13 -25
  107. package/dist/wizard/types.d.ts +6 -0
  108. package/dist/wizard/types.d.ts.map +1 -1
  109. package/dist/wizard/types.js +5 -0
  110. package/package.json +7 -2
package/dist/config.js CHANGED
@@ -1,33 +1,253 @@
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
- readFileSync,
21
- writeFileSync,
4
+ readFileSync as readFileSync2,
5
+ writeFileSync as writeFileSync2,
6
+ existsSync as existsSync2,
7
+ mkdirSync as mkdirSync2,
8
+ chmodSync as chmodSync2,
9
+ statSync
10
+ } from "fs";
11
+ import { join as join2 } from "path";
12
+
13
+ // src/path-utils.ts
14
+ import {
22
15
  existsSync,
23
16
  mkdirSync,
24
- chmodSync,
25
- statSync
17
+ readFileSync,
18
+ writeFileSync,
19
+ chmodSync
26
20
  } from "fs";
27
- import { join } from "path";
28
21
  import { homedir } from "os";
29
- var HOX_DIR = join(homedir(), ".hoox");
30
- var CONFIG_PATH = join(HOX_DIR, "config.json");
22
+ import { dirname, join, resolve, sep } from "path";
23
+ function createHooxPath(path) {
24
+ return path;
25
+ }
26
+ function isInsideDir(child, parent) {
27
+ const resolvedChild = resolve(child);
28
+ const resolvedParent = resolve(parent);
29
+ const cmpChild = process.platform === "win32" ? resolvedChild.toLowerCase() : resolvedChild;
30
+ const cmpParent = process.platform === "win32" ? resolvedParent.toLowerCase() : resolvedParent;
31
+ if (cmpChild === cmpParent)
32
+ return true;
33
+ const prefix = cmpParent.endsWith(sep) ? cmpParent : cmpParent + sep;
34
+ return cmpChild.startsWith(prefix);
35
+ }
36
+ function getHooxHome() {
37
+ try {
38
+ const override = process.env.HOOX_HOME?.trim();
39
+ if (override) {
40
+ return createHooxPath(resolve(override));
41
+ }
42
+ const home = homedir();
43
+ if (!home || home.length === 0) {
44
+ return createHooxPath(resolve(process.cwd(), ".hoox"));
45
+ }
46
+ return createHooxPath(join(home, ".hoox"));
47
+ } catch {
48
+ return createHooxPath(resolve(process.cwd(), ".hoox"));
49
+ }
50
+ }
51
+ function isHooxSetupRoot(dir) {
52
+ if (!dir)
53
+ return false;
54
+ try {
55
+ const root = resolve(dir);
56
+ if (!existsSync(join(root, "packages", "cli", "package.json"))) {
57
+ return false;
58
+ }
59
+ return existsSync(join(root, "wrangler.jsonc")) || existsSync(join(root, "wrangler.jsonc.example")) || existsSync(join(root, "workers")) || existsSync(join(root, ".gitmodules"));
60
+ } catch {
61
+ return false;
62
+ }
63
+ }
64
+ function getRememberedMonorepoPath() {
65
+ return resolveHooxPath("config/monorepo.json");
66
+ }
67
+ function getRememberedMonorepoRoot() {
68
+ try {
69
+ const path = getRememberedMonorepoPath();
70
+ if (!existsSync(path))
71
+ return null;
72
+ const raw = readFileSync(path, "utf-8");
73
+ const data = JSON.parse(raw);
74
+ if (!data.root || typeof data.root !== "string")
75
+ return null;
76
+ const resolved = resolve(data.root);
77
+ return isHooxSetupRoot(resolved) ? resolved : null;
78
+ } catch {
79
+ return null;
80
+ }
81
+ }
82
+ function rememberMonorepoRoot(root) {
83
+ try {
84
+ const resolved = resolve(root);
85
+ if (!isHooxSetupRoot(resolved))
86
+ return false;
87
+ const configDir = getHooxConfigDir();
88
+ mkdirSync(configDir, { recursive: true, mode: 448 });
89
+ try {
90
+ chmodSync(configDir, 448);
91
+ } catch {}
92
+ const payload = {
93
+ root: resolved,
94
+ updatedAt: new Date().toISOString()
95
+ };
96
+ const path = getRememberedMonorepoPath();
97
+ writeFileSync(path, JSON.stringify(payload, null, 2) + `
98
+ `, {
99
+ mode: 384
100
+ });
101
+ try {
102
+ chmodSync(path, 384);
103
+ } catch {}
104
+ return true;
105
+ } catch {
106
+ return false;
107
+ }
108
+ }
109
+ function findHooxSetupRoot(startDir = process.cwd()) {
110
+ let dir = resolve(startDir);
111
+ for (;; ) {
112
+ if (isHooxSetupRoot(dir))
113
+ return dir;
114
+ const parent = dirname(dir);
115
+ if (parent === dir)
116
+ return null;
117
+ dir = parent;
118
+ }
119
+ }
120
+ function resolveHooxRuntimeRoot(options) {
121
+ const env = options?.env ?? process.env;
122
+ const cwd = resolve(options?.cwd ?? process.cwd());
123
+ const globalRepo = getHooxRepoPath();
124
+ const remembered = options?.skipRemembered ? null : getRememberedMonorepoRoot();
125
+ const envRepo = env.HOOX_REPO?.trim();
126
+ if (envRepo) {
127
+ const resolved = resolve(envRepo);
128
+ if (isHooxSetupRoot(resolved)) {
129
+ return {
130
+ root: resolved,
131
+ source: "env",
132
+ checked: {
133
+ env: resolved,
134
+ cwd: findHooxSetupRoot(cwd),
135
+ remembered,
136
+ global: globalRepo
137
+ }
138
+ };
139
+ }
140
+ return {
141
+ root: null,
142
+ source: "env",
143
+ checked: {
144
+ env: resolved,
145
+ cwd: findHooxSetupRoot(cwd),
146
+ remembered,
147
+ global: globalRepo
148
+ }
149
+ };
150
+ }
151
+ const local = findHooxSetupRoot(cwd);
152
+ if (local) {
153
+ return {
154
+ root: local,
155
+ source: "cwd",
156
+ checked: { cwd: local, remembered, global: globalRepo }
157
+ };
158
+ }
159
+ if (remembered) {
160
+ return {
161
+ root: remembered,
162
+ source: "remembered",
163
+ checked: { cwd: null, remembered, global: globalRepo }
164
+ };
165
+ }
166
+ if (isHooxSetupRoot(globalRepo)) {
167
+ return {
168
+ root: globalRepo,
169
+ source: "global",
170
+ checked: { cwd: null, remembered: null, global: globalRepo }
171
+ };
172
+ }
173
+ return {
174
+ root: null,
175
+ source: "none",
176
+ checked: { cwd: null, remembered: null, global: globalRepo }
177
+ };
178
+ }
179
+ function getTuiEntryCandidates(runtimeRoot) {
180
+ const root = resolve(runtimeRoot);
181
+ return [
182
+ join(root, "packages", "tui", "src", "main.tsx"),
183
+ join(root, "packages", "tui", "dist", "main.js"),
184
+ join(root, "packages", "tui", "src", "main.ts")
185
+ ];
186
+ }
187
+ function resolveHooxPath(relativePath) {
188
+ if (!relativePath || typeof relativePath !== "string") {
189
+ throw new Error("relativePath must be a non-empty string");
190
+ }
191
+ if (relativePath.includes("..")) {
192
+ throw new Error(`Path traversal detected in relativePath: "${relativePath}"`);
193
+ }
194
+ const normalizedPath = relativePath.replace(/\\/g, "/");
195
+ const hooxHome = getHooxHome();
196
+ const fullPath = join(hooxHome, normalizedPath);
197
+ const resolvedPath = resolve(fullPath);
198
+ const resolvedHome = resolve(hooxHome);
199
+ if (!isInsideDir(resolvedPath, resolvedHome)) {
200
+ throw new Error(`Resolved path "${resolvedPath}" is outside Hoox home directory`);
201
+ }
202
+ return createHooxPath(resolvedPath);
203
+ }
204
+ function isWithinHooxHome(path) {
205
+ try {
206
+ const hooxHome = getHooxHome();
207
+ const resolvedPath = resolve(path);
208
+ const resolvedHome = resolve(hooxHome);
209
+ return isInsideDir(resolvedPath, resolvedHome);
210
+ } catch {
211
+ return false;
212
+ }
213
+ }
214
+ function getRelativeHooxPath(absolutePath) {
215
+ try {
216
+ if (!isWithinHooxHome(absolutePath)) {
217
+ return null;
218
+ }
219
+ const hooxHome = getHooxHome();
220
+ const resolvedPath = resolve(absolutePath);
221
+ const resolvedHome = resolve(hooxHome);
222
+ const relativePath = resolvedPath.slice(resolvedHome.length);
223
+ return relativePath.startsWith("/") || relativePath.startsWith("\\") ? relativePath.slice(1) : relativePath;
224
+ } catch {
225
+ return null;
226
+ }
227
+ }
228
+ function getHooxRepoPath() {
229
+ return resolveHooxPath("repo");
230
+ }
231
+ function getHooxConfigDir() {
232
+ return resolveHooxPath("config");
233
+ }
234
+ function getHooxDataDir() {
235
+ return resolveHooxPath("data");
236
+ }
237
+ function getHooxWranglerPath() {
238
+ return resolveHooxPath("config/wrangler.jsonc");
239
+ }
240
+ function getHooxStatePath() {
241
+ return resolveHooxPath("data/state.json");
242
+ }
243
+
244
+ // src/config.ts
245
+ function hooxDir() {
246
+ return getHooxHome();
247
+ }
248
+ function configPath() {
249
+ return join2(hooxDir(), "config.json");
250
+ }
31
251
  var HOOX_DIR_MODE = 448;
32
252
  var HOOX_CONFIG_FILE_MODE = 384;
33
253
  var DEFAULT_CONFIG = {
@@ -53,8 +273,8 @@ function readConfigSync() {
53
273
  };
54
274
  let fileConfig = {};
55
275
  try {
56
- if (existsSync(CONFIG_PATH)) {
57
- fileConfig = JSON.parse(readFileSync(CONFIG_PATH, "utf-8"));
276
+ if (existsSync2(configPath())) {
277
+ fileConfig = JSON.parse(readFileSync2(configPath(), "utf-8"));
58
278
  }
59
279
  } catch {}
60
280
  return {
@@ -66,44 +286,40 @@ function readConfigSync() {
66
286
  async function readConfig() {
67
287
  return readConfigSync();
68
288
  }
69
- function ensureHooxDirSecure(dir = HOX_DIR) {
70
- if (!existsSync(dir)) {
71
- mkdirSync(dir, { recursive: true, mode: HOOX_DIR_MODE });
289
+ function ensureHooxDirSecure(dir = hooxDir()) {
290
+ if (!existsSync2(dir)) {
291
+ mkdirSync2(dir, { recursive: true, mode: HOOX_DIR_MODE });
72
292
  }
73
293
  try {
74
- chmodSync(dir, HOOX_DIR_MODE);
294
+ chmodSync2(dir, HOOX_DIR_MODE);
75
295
  } catch {}
76
296
  }
77
297
  function writeSecureFileSync(filePath, contents, mode = HOOX_CONFIG_FILE_MODE) {
78
- writeFileSync(filePath, contents, { encoding: "utf-8", mode });
298
+ writeFileSync2(filePath, contents, { encoding: "utf-8", mode });
79
299
  try {
80
- chmodSync(filePath, mode);
300
+ chmodSync2(filePath, mode);
81
301
  } catch {}
82
302
  }
83
303
  function isUnixModeGroupOrWorldAccessible(mode) {
84
304
  return (mode & 63) !== 0;
85
305
  }
86
- function isConfigWorldOrGroupReadable(filePath = CONFIG_PATH) {
306
+ function isConfigWorldOrGroupReadable(filePath = configPath()) {
87
307
  try {
88
- if (!existsSync(filePath))
308
+ if (!existsSync2(filePath))
89
309
  return false;
90
310
  return isUnixModeGroupOrWorldAccessible(statSync(filePath).mode & 511);
91
311
  } catch {
92
312
  return false;
93
313
  }
94
314
  }
95
- function formatConfigPermissionWarning(filePath = CONFIG_PATH) {
315
+ function formatConfigPermissionWarning(filePath = configPath()) {
96
316
  if (!isConfigWorldOrGroupReadable(filePath))
97
317
  return null;
98
318
  return `Warning: ${filePath} is group/world-accessible. ` + `Run: chmod 600 ${filePath} (and chmod 700 on the parent dir). ` + `This file may contain apiToken / operator secrets.`;
99
319
  }
100
320
  function writeConfigSync(config) {
101
- try {
102
- ensureHooxDirSecure(HOX_DIR);
103
- writeSecureFileSync(CONFIG_PATH, JSON.stringify(config, null, 2), HOOX_CONFIG_FILE_MODE);
104
- } catch (err) {
105
- console.error("Failed to write config:", err);
106
- }
321
+ ensureHooxDirSecure(hooxDir());
322
+ writeSecureFileSync(configPath(), JSON.stringify(config, null, 2), HOOX_CONFIG_FILE_MODE);
107
323
  }
108
324
  async function writeConfig(config) {
109
325
  writeConfigSync(config);
@@ -131,16 +347,16 @@ function validateConfig(config) {
131
347
  return errors;
132
348
  }
133
349
  export {
134
- writeSecureFileSync,
135
- writeConfigSync,
136
- writeConfig,
137
- validateConfig,
138
- readConfigSync,
139
- readConfig,
140
- isUnixModeGroupOrWorldAccessible,
141
- isConfigWorldOrGroupReadable,
142
- formatConfigPermissionWarning,
143
- ensureHooxDirSecure,
350
+ HOOX_CONFIG_FILE_MODE,
144
351
  HOOX_DIR_MODE,
145
- HOOX_CONFIG_FILE_MODE
352
+ ensureHooxDirSecure,
353
+ formatConfigPermissionWarning,
354
+ isConfigWorldOrGroupReadable,
355
+ isUnixModeGroupOrWorldAccessible,
356
+ readConfig,
357
+ readConfigSync,
358
+ validateConfig,
359
+ writeConfig,
360
+ writeConfigSync,
361
+ writeSecureFileSync
146
362
  };
@@ -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 sanitized2 = {};
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
- sanitized2[k] = v instanceof Error ? { name: v.name, message: v.message } : sanitizeOutput(v);
64
+ sanitized[k] = v instanceof Error ? { name: v.name, message: v.message } : sanitizeOutput(v);
81
65
  }
82
- return sanitized2;
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
- TradeSignalRecordSchema,
357
- TradeRecordSchema,
358
- SystemLogRecordSchema,
359
- PositionRecordSchema,
339
+ BalanceRecordSchema,
360
340
  D1Repository,
361
- BalanceRecordSchema
341
+ PositionRecordSchema,
342
+ SystemLogRecordSchema,
343
+ TradeRecordSchema,
344
+ TradeSignalRecordSchema
362
345
  };
@@ -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 sanitized2 = {};
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
- sanitized2[k] = v instanceof Error ? { name: v.name, message: v.message } : sanitizeOutput(v);
64
+ sanitized[k] = v instanceof Error ? { name: v.name, message: v.message } : sanitizeOutput(v);
81
65
  }
82
- return sanitized2;
66
+ return sanitized;
83
67
  }
84
68
  if (!hasSensitiveFields(obj) && !hasErrorValues(obj)) {
85
69
  return obj;
@@ -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
- TradeSignalRecordSchema,
77
- TradeRecordSchema,
78
- SystemLogRecordSchema,
60
+ BalanceRecordSchema,
79
61
  PositionRecordSchema,
80
- BalanceRecordSchema
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":"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"}
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
- stripJsonc,
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
- DASHBOARD_FIELD_KV_OVERRIDES
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
  };