jsir 3.0.7 → 3.0.9
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/cmd/oaa.js +1 -1
- package/deps/room.js +36 -13
- package/deps/util.js +3 -9
- package/package.json +1 -1
package/cmd/oaa.js
CHANGED
|
@@ -1360,7 +1360,7 @@ const keywordDef = {
|
|
|
1360
1360
|
throw 'Not Allowed';
|
|
1361
1361
|
}
|
|
1362
1362
|
Server.setRoute("post", "/" + setting.configMainFnKey, async (req, res) => {
|
|
1363
|
-
res.result = await Room.localConfigs();
|
|
1363
|
+
res.result = await Room.localConfigs(Object.values(_cmdMap));
|
|
1364
1364
|
})
|
|
1365
1365
|
console.msg("config service online")
|
|
1366
1366
|
} else if ("-" === args[0]) {
|
package/deps/room.js
CHANGED
|
@@ -3,7 +3,7 @@ const {fileJson, fileLock, vl, getKeyTips, getValTips,
|
|
|
3
3
|
getRoomsDir, e, isRunningInBackground,
|
|
4
4
|
batchAsync, trim, getOr, errorTag, warnStr, getConfig, getConfigDir,
|
|
5
5
|
fileExist, processLock, isPidAlive, cleanFileLocks,
|
|
6
|
-
roomConsole: console, reget
|
|
6
|
+
roomConsole: console, reget, md5
|
|
7
7
|
} = require('./util');
|
|
8
8
|
const {setRoute, createSign} = require('../deps/server')
|
|
9
9
|
const roomDataFile = "jsirRoom.json"
|
|
@@ -18,7 +18,25 @@ const tailscalePath = os.platform() === 'darwin' ?
|
|
|
18
18
|
'/Applications/Tailscale.app/Contents/MacOS/Tailscale':'tailscale';
|
|
19
19
|
const packageJson = require("../package.json");
|
|
20
20
|
|
|
21
|
-
async function localConfigs() {
|
|
21
|
+
async function localConfigs(uniqueNameList) {
|
|
22
|
+
if (uniqueNameList && uniqueNameList.length > 0 ) {
|
|
23
|
+
let configDir = getConfigDir();
|
|
24
|
+
let configs = {}
|
|
25
|
+
let fns = uniqueNameList
|
|
26
|
+
.map(uniqueName => async () => {
|
|
27
|
+
let fileName = `${md5(uniqueName + (global.$TEST ? '.test':''))}.json`
|
|
28
|
+
let path = `${configDir}/${fileName}`;
|
|
29
|
+
if (await fileExist(path)) {
|
|
30
|
+
configs[fileName] = String(await fp.readFile(path))
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
await batchAsync(fns, 33);
|
|
34
|
+
return configs;
|
|
35
|
+
}
|
|
36
|
+
return await _localAllConfigs();
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
async function _localAllConfigs() {
|
|
22
40
|
let configDir = getConfigDir();
|
|
23
41
|
let configFiles = await fp.readdir(configDir)
|
|
24
42
|
let fns = configFiles
|
|
@@ -112,17 +130,14 @@ async function initNodes() {
|
|
|
112
130
|
} catch (e) {
|
|
113
131
|
console.$debug("initNodes", e)
|
|
114
132
|
}
|
|
115
|
-
let isFirst = true
|
|
116
133
|
for (let line of resp.split("\n").map(trim)) {
|
|
117
134
|
let ss = line.split(/\s+/);
|
|
118
135
|
if (/^\d+\.\d+\.\d+\.\d+$/.test(ss[0])) {
|
|
119
|
-
let offline = line.indexOf('offline') !== -1 || line.indexOf('active') === -1
|
|
120
136
|
nodes[ss[0]] = {
|
|
121
137
|
name: ss[1],
|
|
122
|
-
offline:
|
|
138
|
+
offline: line.indexOf('offline') !== -1 ,
|
|
123
139
|
account: ss[2]
|
|
124
140
|
}
|
|
125
|
-
isFirst = false
|
|
126
141
|
}
|
|
127
142
|
}
|
|
128
143
|
}
|
|
@@ -255,9 +270,11 @@ async function _syncSetting(room) {
|
|
|
255
270
|
}
|
|
256
271
|
for (const pid of Object.keys(room.jsirs || {})) {
|
|
257
272
|
let jsir = room.jsirs[pid];
|
|
258
|
-
for (
|
|
273
|
+
for (let service of Object.keys(jsir.services || {})) {
|
|
259
274
|
let serviceFns = jsir.services[service] || [];
|
|
260
|
-
|
|
275
|
+
if (service.endsWith("+")) {
|
|
276
|
+
service = service.substring(0, service.length - 1)
|
|
277
|
+
}
|
|
261
278
|
let existFns = setting.services[service] || [];
|
|
262
279
|
existFns.push(...serviceFns)
|
|
263
280
|
setting.services[service] = [...new Set(existFns)]
|
|
@@ -356,8 +373,9 @@ async function syncConfigs() {
|
|
|
356
373
|
let configs;
|
|
357
374
|
try {
|
|
358
375
|
configs = await reqFn(setting.configMainFnKey);
|
|
376
|
+
console.$msg(`syncConfigs load ${Object.keys(configs)} files`);
|
|
359
377
|
} catch (e) {
|
|
360
|
-
console.$
|
|
378
|
+
console.$warn("syncConfigs load failed", e)
|
|
361
379
|
return;
|
|
362
380
|
}
|
|
363
381
|
let configDir = getConfigDir();
|
|
@@ -370,16 +388,16 @@ async function syncConfigs() {
|
|
|
370
388
|
let currText = String(await fp.readFile(path));
|
|
371
389
|
if (currText !== text) {
|
|
372
390
|
await fp.writeFile(path, text)
|
|
373
|
-
console.$
|
|
391
|
+
console.$msg(`update config ${key} success`);
|
|
374
392
|
}
|
|
375
393
|
} else {
|
|
376
394
|
await fp.writeFile(path, text)
|
|
377
|
-
console.$
|
|
395
|
+
console.$msg(`create config ${key} success`);
|
|
378
396
|
}
|
|
379
397
|
});
|
|
380
398
|
}
|
|
381
399
|
await batchAsync(fns, 33)
|
|
382
|
-
console.$
|
|
400
|
+
console.$msg('syncConfigs done')
|
|
383
401
|
}
|
|
384
402
|
|
|
385
403
|
async function cleanRoom(room) {
|
|
@@ -423,7 +441,12 @@ async function initRoomJsir(room) {
|
|
|
423
441
|
let ss = key.split("/").map(trim).filter(i => i);
|
|
424
442
|
if (ss.length > 3) {
|
|
425
443
|
// 脚本空间service
|
|
426
|
-
|
|
444
|
+
let route = setting.routes[key]
|
|
445
|
+
let serviceKey = ss[1] + '/' + ss[2]
|
|
446
|
+
if (route.isApi) {
|
|
447
|
+
serviceKey = serviceKey + '+'
|
|
448
|
+
}
|
|
449
|
+
getOr(services, serviceKey, []).push(ss[3])
|
|
427
450
|
} else if (ss.length > 2) {
|
|
428
451
|
// jsir service
|
|
429
452
|
getOr(services, ss[1], []).push(ss[2])
|
package/deps/util.js
CHANGED
|
@@ -133,7 +133,6 @@ const $log = createLimitLogger(`${setting.name}.log`, {
|
|
|
133
133
|
});
|
|
134
134
|
const $error = createLimitLogger(`${setting.name}.error`, {
|
|
135
135
|
logInfo: false,
|
|
136
|
-
error: true,
|
|
137
136
|
syncLogs: [$log]
|
|
138
137
|
});
|
|
139
138
|
// const $errorOnly = createLimitLogger(`${setting.name}.error`, {
|
|
@@ -146,7 +145,6 @@ const roomLog = createLimitLogger(`room.log`, {
|
|
|
146
145
|
});
|
|
147
146
|
const roomError = createLimitLogger(`room.error`, {
|
|
148
147
|
logInfo: false,
|
|
149
|
-
error: true,
|
|
150
148
|
syncLogs: [roomLog]
|
|
151
149
|
});
|
|
152
150
|
|
|
@@ -342,7 +340,7 @@ function createConsole(uniqueName, _logToFile, _errorToFile) {
|
|
|
342
340
|
args = ['', ...args]
|
|
343
341
|
}
|
|
344
342
|
let _args = _consoleFns[key].args(args);
|
|
345
|
-
if ("error" === key) {
|
|
343
|
+
if ("error" === key || "warn" === key) {
|
|
346
344
|
errorToFile(..._args)
|
|
347
345
|
} else {
|
|
348
346
|
logToFile(..._args)
|
|
@@ -819,7 +817,6 @@ function createLimitLogger(fileName, {
|
|
|
819
817
|
maxChars = 128 * 1024 * 1024,
|
|
820
818
|
logInfo = true,
|
|
821
819
|
time = true,
|
|
822
|
-
error = false,
|
|
823
820
|
syncLogs = []
|
|
824
821
|
} = {}) {
|
|
825
822
|
fileName = trim(fileName)
|
|
@@ -845,9 +842,6 @@ function createLimitLogger(fileName, {
|
|
|
845
842
|
syncLogs.forEach(i => i(...args));
|
|
846
843
|
|
|
847
844
|
let text = consoleStrs(...args)
|
|
848
|
-
if (error) {
|
|
849
|
-
setting.newError = true;
|
|
850
|
-
}
|
|
851
845
|
if (time) {
|
|
852
846
|
let prefix = debugStr(`${timeStr('YYYY-MM-DD HH:mm:ss.SSS')} ${String(process.pid%100000).padStart(5, '0')}>`)
|
|
853
847
|
text = `${prefix} ${text}`
|
|
@@ -2160,7 +2154,7 @@ function interceptStdStreams() {
|
|
|
2160
2154
|
if(setting.enterOutputs) {
|
|
2161
2155
|
setting.enterOutputs.push(chunk.toString());
|
|
2162
2156
|
} else if (isRunningInBackground()) {
|
|
2163
|
-
|
|
2157
|
+
$log(chunk.toString().trimEnd());
|
|
2164
2158
|
} else {
|
|
2165
2159
|
originalStdoutWrite(chunk, ...args); // 保留原始行为
|
|
2166
2160
|
}
|
|
@@ -2171,7 +2165,7 @@ function interceptStdStreams() {
|
|
|
2171
2165
|
if(setting.enterOutputs) {
|
|
2172
2166
|
setting.enterOutputs.push(chunk.toString());
|
|
2173
2167
|
} else if (isRunningInBackground()) {
|
|
2174
|
-
|
|
2168
|
+
$error(chunk.toString().trimEnd());
|
|
2175
2169
|
} else {
|
|
2176
2170
|
originalStderrWrite(chunk, ...args); // 保留原始行为
|
|
2177
2171
|
}
|