@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.
- package/README.md +6 -0
- package/dist/agent-config-fields.d.ts +5 -0
- package/dist/agent-config-fields.d.ts.map +1 -1
- 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 +64 -19
- package/dist/api-client.js +12 -21
- package/dist/colors.js +5 -21
- package/dist/config.d.ts +10 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +267 -51
- 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.d.ts +1 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +7 -23
- package/dist/exchange-client.d.ts +0 -19
- package/dist/exchange-client.d.ts.map +1 -1
- package/dist/exchange-client.js +1 -83
- package/dist/exchanges/base-exchange-client.d.ts.map +1 -1
- package/dist/exchanges/base-exchange-client.js +4 -19
- package/dist/exchanges/index.js +4 -19
- package/dist/format-time.js +2 -18
- package/dist/formatters.js +12 -28
- package/dist/health.js +3 -19
- package/dist/index.d.ts +7 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3568 -3766
- 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.d.ts +9 -0
- package/dist/middleware/auth.d.ts.map +1 -1
- package/dist/middleware/auth.js +9 -25
- package/dist/middleware/cors.js +4 -20
- package/dist/middleware/index.js +144 -165
- package/dist/middleware/logger.d.ts +2 -0
- package/dist/middleware/logger.d.ts.map +1 -1
- package/dist/middleware/logger.js +9 -25
- package/dist/middleware/rate-limit.d.ts +7 -0
- package/dist/middleware/rate-limit.d.ts.map +1 -1
- package/dist/middleware/rate-limit.js +5 -20
- package/dist/middleware/security-headers.js +2 -18
- package/dist/middleware/validate.d.ts +2 -0
- package/dist/middleware/validate.d.ts.map +1 -1
- 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.d.ts.map +1 -1
- package/dist/path-utils.js +28 -34
- package/dist/queue-handler.d.ts.map +1 -1
- package/dist/queue-handler.js +19 -24
- package/dist/router.d.ts +5 -0
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +0 -16
- package/dist/schemas/index.js +75 -50
- package/dist/schemas/registry.d.ts.map +1 -1
- package/dist/schemas/registry.js +33 -21
- package/dist/schemas/validators.d.ts.map +1 -1
- package/dist/schemas/validators.js +41 -43
- package/dist/service-bindings.d.ts +4 -0
- package/dist/service-bindings.d.ts.map +1 -1
- package/dist/service-bindings.js +13 -29
- package/dist/session.d.ts +10 -3
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +111 -51
- package/dist/sse.d.ts.map +1 -1
- package/dist/sse.js +34 -24
- package/dist/stores/config-store.d.ts +2 -50
- package/dist/stores/config-store.d.ts.map +1 -1
- package/dist/stores/config-store.js +153 -156
- package/dist/stores/service-store.d.ts +2 -192
- package/dist/stores/service-store.d.ts.map +1 -1
- package/dist/stores/service-store.js +40 -35
- package/dist/stores/ui-store.d.ts +2 -48
- package/dist/stores/ui-store.d.ts.map +1 -1
- package/dist/stores/ui-store.js +0 -16
- package/dist/tenant.d.ts +62 -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 +10 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +29 -24
- package/dist/wizard/engine.d.ts.map +1 -1
- package/dist/wizard/engine.js +33 -27
- package/dist/wizard/index.d.ts +1 -0
- package/dist/wizard/index.d.ts.map +1 -1
- package/dist/wizard/index.js +48 -39
- 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 +13 -25
- 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/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
|
-
|
|
25
|
-
|
|
17
|
+
readFileSync,
|
|
18
|
+
writeFileSync,
|
|
19
|
+
chmodSync
|
|
26
20
|
} from "fs";
|
|
27
|
-
import { join } from "path";
|
|
28
21
|
import { homedir } from "os";
|
|
29
|
-
|
|
30
|
-
|
|
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 (
|
|
57
|
-
fileConfig = JSON.parse(
|
|
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 =
|
|
70
|
-
if (!
|
|
71
|
-
|
|
289
|
+
function ensureHooxDirSecure(dir = hooxDir()) {
|
|
290
|
+
if (!existsSync2(dir)) {
|
|
291
|
+
mkdirSync2(dir, { recursive: true, mode: HOOX_DIR_MODE });
|
|
72
292
|
}
|
|
73
293
|
try {
|
|
74
|
-
|
|
294
|
+
chmodSync2(dir, HOOX_DIR_MODE);
|
|
75
295
|
} catch {}
|
|
76
296
|
}
|
|
77
297
|
function writeSecureFileSync(filePath, contents, mode = HOOX_CONFIG_FILE_MODE) {
|
|
78
|
-
|
|
298
|
+
writeFileSync2(filePath, contents, { encoding: "utf-8", mode });
|
|
79
299
|
try {
|
|
80
|
-
|
|
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 =
|
|
306
|
+
function isConfigWorldOrGroupReadable(filePath = configPath()) {
|
|
87
307
|
try {
|
|
88
|
-
if (!
|
|
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 =
|
|
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
|
-
|
|
102
|
-
|
|
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
|
-
|
|
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
|
-
|
|
352
|
+
ensureHooxDirSecure,
|
|
353
|
+
formatConfigPermissionWarning,
|
|
354
|
+
isConfigWorldOrGroupReadable,
|
|
355
|
+
isUnixModeGroupOrWorldAccessible,
|
|
356
|
+
readConfig,
|
|
357
|
+
readConfigSync,
|
|
358
|
+
validateConfig,
|
|
359
|
+
writeConfig,
|
|
360
|
+
writeConfigSync,
|
|
361
|
+
writeSecureFileSync
|
|
146
362
|
};
|
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":"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,CA4C3D,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,4BAA4B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAa/D,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,8BAA8B,EAAE,WAAW,CAAC,MAAM,CAM7D,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,0BAA0B,EAAE,WAAW,CAAC,MAAM,CAIzD,CAAC;AAEH,iFAAiF;AACjF,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAEnE;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAErE;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAmB5E;AAED,kEAAkE;AAClE,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAiDhD;AAuCD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAClC,uBAAuB,CA0FzB;AAED,2DAA2D;AAC3D,eAAO,MAAM,oBAAoB,6KAWvB,CAAC;AAEX,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEtE;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAG3D;AAED,sEAAsE;AACtE,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,iDAAiD;IACjD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,sBAAsB,EAAE,CAAC;CAChC;AAqBD;;;;;;;GAOG;AACH,wBAAgB,gCAAgC,CAC9C,SAAS,EAAE,uBAAuB,EAAE,GACnC,mBAAmB,CAsCrB;AAED;;;GAGG;AACH,wBAAgB,+BAA+B,CAC7C,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAClC,mBAAmB,CAIrB;AAWD;;;GAGG;AACH,wBAAgB,8BAA8B,CAC5C,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAClC,uBAAuB,EAAE,CAsE3B"}
|
|
@@ -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
|
};
|