abler-api 0.1.26 → 0.1.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/pp-util.js +459 -238
- package/dist/es/pp-util.js +455 -236
- package/package.json +1 -1
package/dist/cjs/pp-util.js
CHANGED
|
@@ -1,29 +1,34 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var require$$0
|
|
3
|
+
var require$$0 = require('crypto');
|
|
4
4
|
var require$$1 = require('abler-util');
|
|
5
5
|
var require$$2 = require('abler-db');
|
|
6
6
|
var require$$3 = require('abler-net');
|
|
7
|
-
var require$$
|
|
7
|
+
var require$$4 = require('fs');
|
|
8
8
|
var require$$1$1 = require('path');
|
|
9
|
+
var require$$1$2 = require('abler-messenger');
|
|
10
|
+
var require$$0$1 = require('node-cron');
|
|
9
11
|
|
|
10
12
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
11
13
|
|
|
12
|
-
var require$$0__default
|
|
14
|
+
var require$$0__default = /*#__PURE__*/_interopDefaultLegacy(require$$0);
|
|
13
15
|
var require$$1__default = /*#__PURE__*/_interopDefaultLegacy(require$$1);
|
|
14
16
|
var require$$2__default = /*#__PURE__*/_interopDefaultLegacy(require$$2);
|
|
15
17
|
var require$$3__default = /*#__PURE__*/_interopDefaultLegacy(require$$3);
|
|
16
|
-
var require$$
|
|
18
|
+
var require$$4__default = /*#__PURE__*/_interopDefaultLegacy(require$$4);
|
|
17
19
|
var require$$1__default$1 = /*#__PURE__*/_interopDefaultLegacy(require$$1$1);
|
|
20
|
+
var require$$1__default$2 = /*#__PURE__*/_interopDefaultLegacy(require$$1$2);
|
|
21
|
+
var require$$0__default$1 = /*#__PURE__*/_interopDefaultLegacy(require$$0$1);
|
|
18
22
|
|
|
19
|
-
const crypto = require$$0__default
|
|
23
|
+
const crypto = require$$0__default["default"];
|
|
20
24
|
const ppUtil$4 = require$$1__default["default"].ppUtil;
|
|
21
25
|
const {
|
|
22
26
|
dbUtil,
|
|
23
27
|
kvStorage
|
|
24
28
|
} = require$$2__default["default"];
|
|
25
29
|
const netUtil$1 = require$$3__default["default"];
|
|
26
|
-
|
|
30
|
+
const fs$1 = require$$4__default["default"];
|
|
31
|
+
let conf$3, appSetting$1, err$2, dbSql;
|
|
27
32
|
const pnToken = "access_token",
|
|
28
33
|
hnToken = pnToken,
|
|
29
34
|
pnApiKey = "apiKey",
|
|
@@ -34,7 +39,7 @@ pnApiSecret = "apiSecret",
|
|
|
34
39
|
const MD5 = ppUtil$4.MD5,
|
|
35
40
|
moveProperty = ppUtil$4.moveProperty;
|
|
36
41
|
|
|
37
|
-
class apiUtil$
|
|
42
|
+
class apiUtil$2 {
|
|
38
43
|
static debugFlag = ppUtil$4.newGuid(); //应用必须设置,否则谁也不知道是啥
|
|
39
44
|
|
|
40
45
|
static testFlag = ppUtil$4.newGuid();
|
|
@@ -42,11 +47,11 @@ class apiUtil$1 {
|
|
|
42
47
|
|
|
43
48
|
static config(appConfig, appErrCfg, appDbSql) {
|
|
44
49
|
ppUtil$4.config(appConfig, appErrCfg);
|
|
45
|
-
conf$
|
|
46
|
-
appSetting$1 = conf$
|
|
47
|
-
err$
|
|
48
|
-
apiUtil$
|
|
49
|
-
apiUtil$
|
|
50
|
+
conf$3 = appConfig;
|
|
51
|
+
appSetting$1 = conf$3?.appSetting;
|
|
52
|
+
err$2 = appErrCfg, dbSql = appDbSql;
|
|
53
|
+
apiUtil$2.debugFlag = appSetting$1?.debugFlag || apiUtil$2.debugFlag;
|
|
54
|
+
apiUtil$2.testFlag = appSetting$1?.testFlag || apiUtil$2.testFlag; // apiUtil.apiCallRecSaver = apiCallRecSaver;
|
|
50
55
|
} //#region ===== 需要应用系统重写的方法
|
|
51
56
|
|
|
52
57
|
/**
|
|
@@ -134,7 +139,7 @@ class apiUtil$1 {
|
|
|
134
139
|
req._requestParams = Object.assign(req.params, req._requestParams);
|
|
135
140
|
}
|
|
136
141
|
|
|
137
|
-
apiUtil$
|
|
142
|
+
apiUtil$2.setParamsFunctions(req._requestParams);
|
|
138
143
|
}
|
|
139
144
|
|
|
140
145
|
return req._requestParams;
|
|
@@ -145,11 +150,11 @@ class apiUtil$1 {
|
|
|
145
150
|
return req.tokenData;
|
|
146
151
|
}
|
|
147
152
|
|
|
148
|
-
let params = apiUtil$
|
|
153
|
+
let params = apiUtil$2.extractParams(req);
|
|
149
154
|
let tokenData = {
|
|
150
155
|
apiKey: req.headers[hnApiKey] || params[pnApiKey],
|
|
151
156
|
apiSecret: req.headers[hnApiSecret] || params[pnApiSecret],
|
|
152
|
-
clientIp: apiUtil$
|
|
157
|
+
clientIp: apiUtil$2.getClientIp(req)
|
|
153
158
|
};
|
|
154
159
|
return tokenData;
|
|
155
160
|
}
|
|
@@ -166,7 +171,7 @@ class apiUtil$1 {
|
|
|
166
171
|
let result = +this[name];
|
|
167
172
|
|
|
168
173
|
if (typeof result !== "number" || result < minValue || result > maxValue) {
|
|
169
|
-
throw [err$
|
|
174
|
+
throw [err$2.INVALID_PARAM, `参数 ${name} 必须是 ${minValue} ~ ${maxValue} 之间的数字`];
|
|
170
175
|
}
|
|
171
176
|
|
|
172
177
|
return result;
|
|
@@ -236,7 +241,7 @@ class apiUtil$1 {
|
|
|
236
241
|
|
|
237
242
|
static apiFail(error, req) {
|
|
238
243
|
configNeeded();
|
|
239
|
-
let response = err$
|
|
244
|
+
let response = err$2.ERROR(error, err$2.errorLangParamFlag + ppUtil$4.getMsgLang(req));
|
|
240
245
|
response.datetime = new Date();
|
|
241
246
|
|
|
242
247
|
if (req && req.headers) {
|
|
@@ -258,8 +263,8 @@ class apiUtil$1 {
|
|
|
258
263
|
|
|
259
264
|
|
|
260
265
|
static spoApiSucc(data, req) {
|
|
261
|
-
let params = apiUtil$
|
|
262
|
-
return apiUtil$
|
|
266
|
+
let params = apiUtil$2.extractParams(req);
|
|
267
|
+
return apiUtil$2.apiSuccess(data, req, params.spOrderNum);
|
|
263
268
|
}
|
|
264
269
|
/**
|
|
265
270
|
* 生成面向服务商的API失败返回结果
|
|
@@ -270,8 +275,8 @@ class apiUtil$1 {
|
|
|
270
275
|
|
|
271
276
|
|
|
272
277
|
static spoApiFail(error, req) {
|
|
273
|
-
let params = apiUtil$
|
|
274
|
-
return apiUtil$
|
|
278
|
+
let params = apiUtil$2.extractParams(req);
|
|
279
|
+
return apiUtil$2.apiFail(error, req, params.spOrderNum);
|
|
275
280
|
}
|
|
276
281
|
/**
|
|
277
282
|
* API 服务结束,发送响应
|
|
@@ -308,10 +313,10 @@ class apiUtil$1 {
|
|
|
308
313
|
static async responseOf(response, promise) {
|
|
309
314
|
promise.then(function (data) {
|
|
310
315
|
// console.log('RES:', apiSuccess(data));
|
|
311
|
-
if (!response.finished) response.send(apiUtil$
|
|
316
|
+
if (!response.finished) response.send(apiUtil$2.apiSuccess(data, response.req));
|
|
312
317
|
}, function (error) {
|
|
313
318
|
console.log('ERROR:', error);
|
|
314
|
-
if (!response.finished) response.send(apiUtil$
|
|
319
|
+
if (!response.finished) response.send(apiUtil$2.apiFail(error, response.req));
|
|
315
320
|
});
|
|
316
321
|
}
|
|
317
322
|
/**
|
|
@@ -323,16 +328,16 @@ class apiUtil$1 {
|
|
|
323
328
|
|
|
324
329
|
static async spoApiResponse(response, promise) {
|
|
325
330
|
promise.then(function (result) {
|
|
326
|
-
let responseData = apiUtil$
|
|
331
|
+
let responseData = apiUtil$2.spoApiSucc(result, response.req);
|
|
327
332
|
|
|
328
|
-
apiUtil$
|
|
333
|
+
apiUtil$2._saveApiCallRec(response.req.apiCallRec, responseData);
|
|
329
334
|
|
|
330
335
|
if (!response.finished) response.send(responseData);
|
|
331
336
|
}, function (error) {
|
|
332
337
|
console.log('ERROR:', error);
|
|
333
|
-
let responseData = apiUtil$
|
|
338
|
+
let responseData = apiUtil$2.spoApiFail(error, response.req);
|
|
334
339
|
|
|
335
|
-
apiUtil$
|
|
340
|
+
apiUtil$2._saveApiCallRec(response.req.apiCallRec, responseData);
|
|
336
341
|
|
|
337
342
|
if (!response.finished) response.send(responseData);
|
|
338
343
|
});
|
|
@@ -349,7 +354,7 @@ class apiUtil$1 {
|
|
|
349
354
|
req.headers.timestamp = new Date().valueOf(); // let options = {replacements: {}};
|
|
350
355
|
|
|
351
356
|
let options = {};
|
|
352
|
-
let parameters = apiUtil$
|
|
357
|
+
let parameters = apiUtil$2.extractParams(req);
|
|
353
358
|
|
|
354
359
|
for (let qryParam in parameters) {
|
|
355
360
|
if (qryParam !== 'token') {
|
|
@@ -381,7 +386,7 @@ class apiUtil$1 {
|
|
|
381
386
|
// }
|
|
382
387
|
|
|
383
388
|
options.userInfo = req.userInfo;
|
|
384
|
-
return apiUtil$
|
|
389
|
+
return apiUtil$2.setOptionsPropFuncions(options, res);
|
|
385
390
|
}
|
|
386
391
|
/**
|
|
387
392
|
* 为API请求 options 设置属性
|
|
@@ -446,7 +451,7 @@ class apiUtil$1 {
|
|
|
446
451
|
let token = req.headers[hnToken] || req.headers['x-access-token']; //向后兼容
|
|
447
452
|
|
|
448
453
|
if (!token) {
|
|
449
|
-
let params = apiUtil$
|
|
454
|
+
let params = apiUtil$2.extractParams(req);
|
|
450
455
|
token = params[pnToken];
|
|
451
456
|
|
|
452
457
|
if (token) {
|
|
@@ -457,12 +462,12 @@ class apiUtil$1 {
|
|
|
457
462
|
delete params.token;
|
|
458
463
|
} else {
|
|
459
464
|
// 如果没有token,则返回错误
|
|
460
|
-
console.log(err$
|
|
465
|
+
console.log(err$2.TOKEN_NEEDED);
|
|
461
466
|
|
|
462
467
|
if (res) {
|
|
463
|
-
res.send(err$
|
|
468
|
+
res.send(err$2.ERROR(err$2.TOKEN_NEEDED));
|
|
464
469
|
} else if (!noErr) {
|
|
465
|
-
throw err$
|
|
470
|
+
throw err$2.TOKEN_NEEDED;
|
|
466
471
|
}
|
|
467
472
|
}
|
|
468
473
|
}
|
|
@@ -481,8 +486,8 @@ class apiUtil$1 {
|
|
|
481
486
|
|
|
482
487
|
static async checkInternalToken(req) {
|
|
483
488
|
// return await checkInternalToken(req);
|
|
484
|
-
const params = apiUtil$
|
|
485
|
-
req.accessToken = req.accessToken || apiUtil$
|
|
489
|
+
const params = apiUtil$2.extractParams(req);
|
|
490
|
+
req.accessToken = req.accessToken || apiUtil$2.extractToken(req);
|
|
486
491
|
|
|
487
492
|
if (req.accessToken === MD5(ppUtil$4.idNumDisturbing)) {
|
|
488
493
|
//todo: 检查IP
|
|
@@ -505,7 +510,7 @@ class apiUtil$1 {
|
|
|
505
510
|
return true;
|
|
506
511
|
} else {
|
|
507
512
|
// console.log('token error.', req.accessToken);
|
|
508
|
-
throw err$
|
|
513
|
+
throw err$2.TOKEN_INVALID;
|
|
509
514
|
}
|
|
510
515
|
}
|
|
511
516
|
/**
|
|
@@ -516,16 +521,16 @@ class apiUtil$1 {
|
|
|
516
521
|
|
|
517
522
|
|
|
518
523
|
static async checkRequestToken(req) {
|
|
519
|
-
req.accessToken = req.accessToken || apiUtil$
|
|
520
|
-
const tokenKey = apiUtil$
|
|
521
|
-
const expireTime = apiUtil$
|
|
522
|
-
return await apiUtil$
|
|
523
|
-
req.userInfo = apiUtil$
|
|
524
|
+
req.accessToken = req.accessToken || apiUtil$2.extractToken(req);
|
|
525
|
+
const tokenKey = apiUtil$2.userTokenStoreKey(req.accessToken);
|
|
526
|
+
const expireTime = apiUtil$2.tokenExpireTime(req);
|
|
527
|
+
return await apiUtil$2.restoreTokenData(tokenKey, expireTime).then(async function (data) {
|
|
528
|
+
req.userInfo = apiUtil$2.setUserIdNo(data, data._idNo);
|
|
524
529
|
if (req.tokenValidater) await req.tokenValidater(req.userInfo, req);
|
|
525
530
|
return true;
|
|
526
531
|
}, async function (e) {
|
|
527
532
|
// 如果给定的token不存在,看看是不是平台内部调用
|
|
528
|
-
return await apiUtil$
|
|
533
|
+
return await apiUtil$2.checkInternalToken(req);
|
|
529
534
|
});
|
|
530
535
|
}
|
|
531
536
|
/**
|
|
@@ -537,7 +542,7 @@ class apiUtil$1 {
|
|
|
537
542
|
|
|
538
543
|
static isDebugMode(req) {
|
|
539
544
|
if (req.__debug__ === undefined) {
|
|
540
|
-
let dbgToken = req.headers['__debug__'] || req.headers[apiUtil$
|
|
545
|
+
let dbgToken = req.headers['__debug__'] || req.headers[apiUtil$2.debugFlag];
|
|
541
546
|
|
|
542
547
|
if (dbgToken) {
|
|
543
548
|
let envId = process.env.ECS_DEPLOY_ID;
|
|
@@ -559,11 +564,11 @@ class apiUtil$1 {
|
|
|
559
564
|
|
|
560
565
|
static isTestMode(req) {
|
|
561
566
|
if (req.__postman__ === undefined) {
|
|
562
|
-
let dbgToken = req.headers["__postman__"] || req.headers[apiUtil$
|
|
567
|
+
let dbgToken = req.headers["__postman__"] || req.headers[apiUtil$2.testFlag];
|
|
563
568
|
|
|
564
569
|
if (dbgToken) {
|
|
565
570
|
let envId = process.env.ECS_DEPLOY_ID;
|
|
566
|
-
let testToken = MD5(req.headers.timestamp, apiUtil$
|
|
571
|
+
let testToken = MD5(req.headers.timestamp, apiUtil$2.extractToken(req, null, true) || req.headers.apikey);
|
|
567
572
|
req.__postman__ = dbgToken === testToken && (envId.indexOf("myfacesign.com") < 0 || envId.indexOf(".dev.") > 0);
|
|
568
573
|
} else {
|
|
569
574
|
req.__postman__ = false;
|
|
@@ -580,7 +585,7 @@ class apiUtil$1 {
|
|
|
580
585
|
|
|
581
586
|
|
|
582
587
|
static tokenExpireTime(req) {
|
|
583
|
-
return apiUtil$
|
|
588
|
+
return apiUtil$2.isDebugMode(req) ? 30 * 24 * 60 * 60 : apiUtil$2.isTestMode(req) ? 4 * 60 * 60 : appSetting$1.tokenExpireTime;
|
|
584
589
|
}
|
|
585
590
|
/**
|
|
586
591
|
* 获取用户令牌保存键
|
|
@@ -623,7 +628,7 @@ class apiUtil$1 {
|
|
|
623
628
|
static setUserIdNo(userInfo, idNum) {
|
|
624
629
|
if (userInfo && idNum) {
|
|
625
630
|
userInfo._idNo = idNum;
|
|
626
|
-
userInfo.isHKIC = apiUtil$
|
|
631
|
+
userInfo.isHKIC = apiUtil$2.checkIsHKIC(idNum);
|
|
627
632
|
}
|
|
628
633
|
|
|
629
634
|
return userInfo;
|
|
@@ -640,7 +645,7 @@ class apiUtil$1 {
|
|
|
640
645
|
|
|
641
646
|
static async storeToken(token, tokenData, dataId, req) {
|
|
642
647
|
// let timeout = tokenData.clientIp.substring(0, 8) == "192.168." ? 90 * 24 : 1;
|
|
643
|
-
let timeout = apiUtil$
|
|
648
|
+
let timeout = apiUtil$2.tokenExpireTime(req);
|
|
644
649
|
|
|
645
650
|
if (req.certPublicKey) {
|
|
646
651
|
tokenData.certPublicKey = req.certPublicKey;
|
|
@@ -788,7 +793,7 @@ class apiUtil$1 {
|
|
|
788
793
|
return certInfo;
|
|
789
794
|
}).catch(e => {
|
|
790
795
|
console.log('获取企业证书失败:\n', e);
|
|
791
|
-
throw [err$
|
|
796
|
+
throw [err$2.ACCESS_REFUSED, `获取企业证书失败:${err$2.ERROR(e).message}`];
|
|
792
797
|
});
|
|
793
798
|
}
|
|
794
799
|
/**
|
|
@@ -802,27 +807,27 @@ class apiUtil$1 {
|
|
|
802
807
|
static async verifyApiSignature(tokenData, req) {
|
|
803
808
|
try {
|
|
804
809
|
if (!req.headers.timestamp) {
|
|
805
|
-
throw [err$
|
|
810
|
+
throw [err$2.ACCESS_REFUSED, `必须在请求头中设置时戳`];
|
|
806
811
|
}
|
|
807
812
|
|
|
808
813
|
let timestamp = parseInt(req.headers.timestamp);
|
|
809
814
|
let currentTime = new Date().valueOf();
|
|
810
|
-
let maxTimeDiff = apiUtil$
|
|
815
|
+
let maxTimeDiff = apiUtil$2.isDebugMode(req) ? 7 * 24 * 3600 : apiUtil$2.isTestMode(req) ? 4 * 3600 : 100; // 100
|
|
811
816
|
|
|
812
817
|
if (timestamp.toString() == "NaN" || currentTime < timestamp - 5000 || currentTime - timestamp > maxTimeDiff * 1000) {
|
|
813
|
-
throw [err$
|
|
818
|
+
throw [err$2.ACCESS_REFUSED, `时戳(${timestamp})无效,当前时戳:${currentTime},时差 ${(currentTime - timestamp) / 1000}秒`];
|
|
814
819
|
}
|
|
815
820
|
|
|
816
821
|
let signature = req.headers.signature;
|
|
817
822
|
|
|
818
823
|
if (!signature) {
|
|
819
|
-
throw [err$
|
|
824
|
+
throw [err$2.ACCESS_REFUSED, `必须在请求头中提供签名`];
|
|
820
825
|
}
|
|
821
826
|
|
|
822
|
-
let signData = apiUtil$
|
|
827
|
+
let signData = apiUtil$2.extractToken(req, null, true) || tokenData.apiKey;
|
|
823
828
|
signData += timestamp;
|
|
824
829
|
|
|
825
|
-
if (apiUtil$
|
|
830
|
+
if (apiUtil$2.isDebugMode(req) || apiUtil$2.isTestMode(req)) {
|
|
826
831
|
let publicKey = req.headers.publickey || req.body.publicKey || req.query.publicKey;
|
|
827
832
|
|
|
828
833
|
if (publicKey) {
|
|
@@ -837,16 +842,16 @@ class apiUtil$1 {
|
|
|
837
842
|
return await verifyResult;
|
|
838
843
|
}
|
|
839
844
|
|
|
840
|
-
return apiUtil$
|
|
845
|
+
return apiUtil$2.getCompanyCertificate(tokenData.apiKey).then(info => {
|
|
841
846
|
tokenData.certPublicKey = info.certLiving;
|
|
842
847
|
tokenData.certPublicKeySpare = info.certSpare;
|
|
843
848
|
tokenData.certLivingId = info.certLivingId;
|
|
844
849
|
tokenData.certSpareId = info.certSpareId;
|
|
845
850
|
req.certPublicKey = info.certLiving;
|
|
846
|
-
let token = apiUtil$
|
|
851
|
+
let token = apiUtil$2.extractToken(req, null, true);
|
|
847
852
|
|
|
848
853
|
if (token) {
|
|
849
|
-
apiUtil$
|
|
854
|
+
apiUtil$2.storeToken(apiUtil$2.apiTokenStoreKey(token), tokenData, tokenData.apiKey, req);
|
|
850
855
|
}
|
|
851
856
|
}).then(() => {
|
|
852
857
|
return doVerify(signData, signature, tokenData.certPublicKey);
|
|
@@ -871,7 +876,7 @@ class apiUtil$1 {
|
|
|
871
876
|
|
|
872
877
|
if (!tokenData.certPublicKeySpare) {
|
|
873
878
|
throw {
|
|
874
|
-
eo: err$
|
|
879
|
+
eo: err$2.ACCESS_REFUSED,
|
|
875
880
|
msgArgv: "签名验证异常",
|
|
876
881
|
data: e
|
|
877
882
|
};
|
|
@@ -908,10 +913,10 @@ class apiUtil$1 {
|
|
|
908
913
|
delete tokenData.certLivingId;
|
|
909
914
|
delete tokenData.certSpareId;
|
|
910
915
|
delete tokenData.certPublicKeySpare;
|
|
911
|
-
let token = apiUtil$
|
|
916
|
+
let token = apiUtil$2.extractToken(req);
|
|
912
917
|
|
|
913
918
|
if (token) {
|
|
914
|
-
apiUtil$
|
|
919
|
+
apiUtil$2.storeToken(apiTokenStoreKey(token), tokenData, tokenData.apiKey, req);
|
|
915
920
|
}
|
|
916
921
|
|
|
917
922
|
console.log(`公司(${tokenData.apiKey})备用证书成功转换为正式证书`);
|
|
@@ -920,7 +925,7 @@ class apiUtil$1 {
|
|
|
920
925
|
} catch (e) {
|
|
921
926
|
console.log("SPO服务签名验证异常(备用证书), ", e);
|
|
922
927
|
throw {
|
|
923
|
-
eo: err$
|
|
928
|
+
eo: err$2.ACCESS_REFUSED,
|
|
924
929
|
msgArgv: "签名验证异常(spare)",
|
|
925
930
|
data: e
|
|
926
931
|
};
|
|
@@ -929,7 +934,7 @@ class apiUtil$1 {
|
|
|
929
934
|
|
|
930
935
|
if (!verifyOK) {
|
|
931
936
|
console.log("SPO服务签名验证失败, tokenData: ", tokenData);
|
|
932
|
-
throw [err$
|
|
937
|
+
throw [err$2.ACCESS_REFUSED, "签名验证未通过"];
|
|
933
938
|
}
|
|
934
939
|
|
|
935
940
|
return verifyOK;
|
|
@@ -945,32 +950,32 @@ class apiUtil$1 {
|
|
|
945
950
|
|
|
946
951
|
static async checkApiCallValid(tokenData, req) {
|
|
947
952
|
if (!tokenData.companyInfo) {
|
|
948
|
-
tokenData.companyInfo = await apiUtil$
|
|
953
|
+
tokenData.companyInfo = await apiUtil$2.queryCompanyInfo(tokenData.apiKey, true).catch(e => {
|
|
949
954
|
console.log("执行企业信息查询发生异常", e);
|
|
950
|
-
throw [err$
|
|
955
|
+
throw [err$2.API_KEY_INVALID, "执行企业信息查询发生异常:" + e.message || ""];
|
|
951
956
|
});
|
|
952
957
|
}
|
|
953
958
|
|
|
954
959
|
const companyInfo = tokenData.companyInfo;
|
|
955
960
|
|
|
956
961
|
if (companyInfo != null) {
|
|
957
|
-
let secret = apiUtil$
|
|
962
|
+
let secret = apiUtil$2._getApiSecret(tokenData.apiKey);
|
|
958
963
|
|
|
959
|
-
if (secret !== tokenData.apiSecret) throw err$
|
|
964
|
+
if (secret !== tokenData.apiSecret) throw err$2.API_SCREPT_INVALID; // 不再检查 IP 白名单,改为验证证书签名
|
|
960
965
|
// console.log("fromIp:", tokenData.clientIp, "ipWhiteList:", companyInfo.ipWhiteList);
|
|
961
966
|
// let whiteList = companyInfo.ipWhiteList || "";
|
|
962
967
|
// // 没有设置ip白名单的就不检查了
|
|
963
968
|
// if (whiteList == "" || ipMatched(tokenData.clientIp, whiteList + ",127.0.0.1,1"))
|
|
964
969
|
|
|
965
|
-
if (apiUtil$
|
|
966
|
-
return apiUtil$
|
|
970
|
+
if (apiUtil$2.signatureVerified()) return companyInfo;
|
|
971
|
+
return apiUtil$2.verifyApiSignature(tokenData, req).then(x => {
|
|
967
972
|
return companyInfo;
|
|
968
973
|
}, e => {
|
|
969
974
|
throw e;
|
|
970
975
|
});
|
|
971
976
|
}
|
|
972
977
|
|
|
973
|
-
throw [err$
|
|
978
|
+
throw [err$2.API_KEY_INVALID, tokenData.apiKey];
|
|
974
979
|
}
|
|
975
980
|
/**
|
|
976
981
|
* 检查令牌数据是否存在
|
|
@@ -1021,7 +1026,7 @@ class apiUtil$1 {
|
|
|
1021
1026
|
paramExists = typeof params[paramName] != 'undefined' || typeof params[paramName + paramSufix] != 'undefined';
|
|
1022
1027
|
}
|
|
1023
1028
|
|
|
1024
|
-
if (!paramExists) return ppUtil$4.errorPormise(err$
|
|
1029
|
+
if (!paramExists) return ppUtil$4.errorPormise(err$2.ERROR(err$2.PARAMETER_NEEDED, paramName));
|
|
1025
1030
|
}
|
|
1026
1031
|
|
|
1027
1032
|
return Promise.resolve(paramSufix);
|
|
@@ -1069,7 +1074,7 @@ class apiUtil$1 {
|
|
|
1069
1074
|
|
|
1070
1075
|
|
|
1071
1076
|
static async hostIsMySelf(host, req) {
|
|
1072
|
-
let clientIp = apiUtil$
|
|
1077
|
+
let clientIp = apiUtil$2.getClientIp(req);
|
|
1073
1078
|
return ppUtil$4.getMyIp({
|
|
1074
1079
|
hosts: [host, clientIp]
|
|
1075
1080
|
});
|
|
@@ -1084,13 +1089,13 @@ class apiUtil$1 {
|
|
|
1084
1089
|
static async checkForwardsHost(options) {
|
|
1085
1090
|
configNeeded();
|
|
1086
1091
|
const params = options.replacements;
|
|
1087
|
-
const myEnvHosts = apiUtil$
|
|
1092
|
+
const myEnvHosts = apiUtil$2.getEnvHosts(params);
|
|
1088
1093
|
const myIp = ppUtil$4.getMyIp();
|
|
1089
1094
|
const host = params.host || myIp;
|
|
1090
|
-
if (!myEnvHosts.hosts.contains(host)) throw [err$
|
|
1095
|
+
if (!myEnvHosts.hosts.contains(host)) throw [err$2.ACCESS_REFUSED, `环境${conf$3.envId}貌似无此主机:${params.host}`];
|
|
1091
1096
|
|
|
1092
|
-
if (!apiUtil$
|
|
1093
|
-
let result = await apiUtil$
|
|
1097
|
+
if (!apiUtil$2.hostIsMySelf(host, options._res.req)) {
|
|
1098
|
+
let result = await apiUtil$2.forwardsTo(host, myEnvHosts.port, params, options._res.req, myIp);
|
|
1094
1099
|
|
|
1095
1100
|
options._res.send(result);
|
|
1096
1101
|
|
|
@@ -1126,7 +1131,7 @@ class apiUtil$1 {
|
|
|
1126
1131
|
|
|
1127
1132
|
if (result.status !== 200) {
|
|
1128
1133
|
console.log(`访问 ${reqOptions.url} 出错`, result.status, result.res.statusMessage);
|
|
1129
|
-
throw [err$
|
|
1134
|
+
throw [err$2.EXCEPTION, `[${result.status}] - ${result.res.statusMessage}`];
|
|
1130
1135
|
}
|
|
1131
1136
|
|
|
1132
1137
|
return result.data;
|
|
@@ -1142,7 +1147,7 @@ class apiUtil$1 {
|
|
|
1142
1147
|
let keys = Array.isArray(keyPath) ? keyPath : keyPath.split(".");
|
|
1143
1148
|
let parentKey = "";
|
|
1144
1149
|
let key = "config";
|
|
1145
|
-
let value = conf$
|
|
1150
|
+
let value = conf$3;
|
|
1146
1151
|
let parent = null;
|
|
1147
1152
|
|
|
1148
1153
|
for (let i = 0; i < keys.length; i++) {
|
|
@@ -1152,7 +1157,7 @@ class apiUtil$1 {
|
|
|
1152
1157
|
value = parent[key];
|
|
1153
1158
|
|
|
1154
1159
|
if (value === undefined) {
|
|
1155
|
-
throw [err$
|
|
1160
|
+
throw [err$2.INVALID_PARAM, `无此配置项: ${key}`];
|
|
1156
1161
|
}
|
|
1157
1162
|
}
|
|
1158
1163
|
|
|
@@ -1172,10 +1177,10 @@ class apiUtil$1 {
|
|
|
1172
1177
|
|
|
1173
1178
|
static async $checkToken(req, res, next) {
|
|
1174
1179
|
try {
|
|
1175
|
-
await apiUtil$
|
|
1180
|
+
await apiUtil$2.checkRequestToken(req);
|
|
1176
1181
|
await next();
|
|
1177
1182
|
} catch (e) {
|
|
1178
|
-
res.send(err$
|
|
1183
|
+
res.send(err$2.ERROR(e));
|
|
1179
1184
|
}
|
|
1180
1185
|
|
|
1181
1186
|
return false;
|
|
@@ -1192,7 +1197,7 @@ class apiUtil$1 {
|
|
|
1192
1197
|
let token = req.headers["access_token"] || req.headers['x-access-token']; //向后兼容
|
|
1193
1198
|
|
|
1194
1199
|
if (!token) {
|
|
1195
|
-
let params = apiUtil$
|
|
1200
|
+
let params = apiUtil$2.extractParams(req);
|
|
1196
1201
|
token = params["access_token"];
|
|
1197
1202
|
|
|
1198
1203
|
if (token) {
|
|
@@ -1215,15 +1220,15 @@ class apiUtil$1 {
|
|
|
1215
1220
|
|
|
1216
1221
|
try {
|
|
1217
1222
|
if (extractToken(req, res)) {
|
|
1218
|
-
await apiUtil$
|
|
1219
|
-
req.userInfo = apiUtil$
|
|
1223
|
+
await apiUtil$2.restoreTokenData(apiUtil$2.userTokenStoreKey(req.accessToken), apiUtil$2.tokenExpireTime(req)).then(function (data) {
|
|
1224
|
+
req.userInfo = apiUtil$2.setUserIdNo(data, data._idNo);
|
|
1220
1225
|
}, function (e) {//no token
|
|
1221
1226
|
});
|
|
1222
1227
|
}
|
|
1223
1228
|
|
|
1224
1229
|
return true;
|
|
1225
1230
|
} catch (e) {
|
|
1226
|
-
res.send(err$
|
|
1231
|
+
res.send(err$2.ERROR(e));
|
|
1227
1232
|
return false;
|
|
1228
1233
|
}
|
|
1229
1234
|
}
|
|
@@ -1246,7 +1251,7 @@ class apiUtil$1 {
|
|
|
1246
1251
|
req.isMobile = true;
|
|
1247
1252
|
|
|
1248
1253
|
if (!req.signatureVerified) {
|
|
1249
|
-
let params = apiUtil$
|
|
1254
|
+
let params = apiUtil$2.extractParams(req);
|
|
1250
1255
|
moveProperty(params, req.headers, "access_token");
|
|
1251
1256
|
moveProperty(params, req.headers, "timestamp");
|
|
1252
1257
|
|
|
@@ -1267,25 +1272,25 @@ class apiUtil$1 {
|
|
|
1267
1272
|
|
|
1268
1273
|
static $checkApiKeyOld(req, res, next) {
|
|
1269
1274
|
//检查post的信息或者url查询参数或者头信息
|
|
1270
|
-
let tokenData = apiUtil$
|
|
1271
|
-
let params = apiUtil$
|
|
1272
|
-
apiUtil$
|
|
1275
|
+
let tokenData = apiUtil$2.extractTokenData(req);
|
|
1276
|
+
let params = apiUtil$2.extractParams(req);
|
|
1277
|
+
apiUtil$2.createApiCallRec(tokenData, req);
|
|
1273
1278
|
let errResponse = null;
|
|
1274
1279
|
|
|
1275
1280
|
if (!tokenData.clientIp) {
|
|
1276
|
-
errResponse = apiUtil$
|
|
1281
|
+
errResponse = apiUtil$2.spoApiFail(err$2.GET_CLIENTIP_FAIL, req);
|
|
1277
1282
|
} else if (!tokenData.apiKey) {
|
|
1278
|
-
errResponse = apiUtil$
|
|
1283
|
+
errResponse = apiUtil$2.spoApiFail([err$2.PARAMETER_NEEDED, "apiKey"], req);
|
|
1279
1284
|
} else if (!tokenData.apiSecret) {
|
|
1280
|
-
errResponse = apiUtil$
|
|
1285
|
+
errResponse = apiUtil$2.spoApiFail([err$2.PARAMETER_NEEDED, "apiSecret"], req);
|
|
1281
1286
|
}
|
|
1282
1287
|
|
|
1283
1288
|
if (errResponse != null) {
|
|
1284
|
-
apiUtil$
|
|
1289
|
+
apiUtil$2._saveApiCallRec(req.apiCallRec, errResponse);
|
|
1285
1290
|
|
|
1286
|
-
apiUtil$
|
|
1291
|
+
apiUtil$2.sendOrRedirect(req, res, errResponse);
|
|
1287
1292
|
} else {
|
|
1288
|
-
apiUtil$
|
|
1293
|
+
apiUtil$2.checkApiCallValid(tokenData, req).then(companyInfo => {
|
|
1289
1294
|
params.companyId = params.companyId || companyInfo.companyId;
|
|
1290
1295
|
req.companyInfo = companyInfo;
|
|
1291
1296
|
next();
|
|
@@ -1293,9 +1298,9 @@ class apiUtil$1 {
|
|
|
1293
1298
|
console.log('apiCallInvalid:', e);
|
|
1294
1299
|
let errResponse = spoApiFail(e, req);
|
|
1295
1300
|
|
|
1296
|
-
apiUtil$
|
|
1301
|
+
apiUtil$2._saveApiCallRec(req.apiCallRec, errResponse);
|
|
1297
1302
|
|
|
1298
|
-
apiUtil$
|
|
1303
|
+
apiUtil$2.sendOrRedirect(req, res, errResponse);
|
|
1299
1304
|
});
|
|
1300
1305
|
}
|
|
1301
1306
|
}
|
|
@@ -1310,31 +1315,31 @@ class apiUtil$1 {
|
|
|
1310
1315
|
return;
|
|
1311
1316
|
}
|
|
1312
1317
|
|
|
1313
|
-
let accessToken = apiUtil$
|
|
1318
|
+
let accessToken = apiUtil$2.extractToken(req);
|
|
1314
1319
|
|
|
1315
1320
|
if (!accessToken) {
|
|
1316
|
-
res.send(apiUtil$
|
|
1321
|
+
res.send(apiUtil$2.spoApiFail(err$2.TOKEN_NEEDED, req)); // apiUtil.sendOrRedirect(req, res, spoApiFail(err.TOKEN_NEEDED, req));
|
|
1317
1322
|
|
|
1318
1323
|
return;
|
|
1319
1324
|
}
|
|
1320
1325
|
|
|
1321
|
-
apiUtil$
|
|
1326
|
+
apiUtil$2.restoreTokenData(apiUtil$2.apiTokenStoreKey(accessToken)).then(p => {
|
|
1322
1327
|
// req.headers[hnApiKey] = p.apiKey || '';
|
|
1323
1328
|
// req.headers[hnApiSecret] = p.apiSecret || '';
|
|
1324
1329
|
if (req.isMobile) {
|
|
1325
1330
|
// GET 请求的应该都是H5页面,由手机前端发起,需要把headers中的请求方ip换成服务端的
|
|
1326
1331
|
// todo: 如何在API访问记录中记住请求者(手机端)的真实IP
|
|
1327
|
-
req.headers['x-phone-ip'] = apiUtil$
|
|
1332
|
+
req.headers['x-phone-ip'] = apiUtil$2.getClientIp(req);
|
|
1328
1333
|
req.headers['x-real-ip'] = p.clientIp;
|
|
1329
1334
|
} else {
|
|
1330
|
-
p.clientIp = apiUtil$
|
|
1335
|
+
p.clientIp = apiUtil$2.getClientIp(req);
|
|
1331
1336
|
}
|
|
1332
1337
|
|
|
1333
1338
|
req.isApiCall = true;
|
|
1334
1339
|
req.tokenData = p;
|
|
1335
|
-
return apiUtil$
|
|
1340
|
+
return apiUtil$2.$checkApiKeyOld(req, res, next);
|
|
1336
1341
|
}).catch(e => {
|
|
1337
|
-
apiUtil$
|
|
1342
|
+
apiUtil$2.sendOrRedirect(req, res, apiUtil$2.spoApiFail(err$2.TOKEN_INVALID, req));
|
|
1338
1343
|
});
|
|
1339
1344
|
}
|
|
1340
1345
|
/**
|
|
@@ -1347,24 +1352,24 @@ class apiUtil$1 {
|
|
|
1347
1352
|
|
|
1348
1353
|
|
|
1349
1354
|
static async $checkTokenOrApiKey(req, res, next) {
|
|
1350
|
-
let accessToken = apiUtil$
|
|
1355
|
+
let accessToken = apiUtil$2.extractToken(req, res);
|
|
1351
1356
|
|
|
1352
1357
|
if (accessToken) {
|
|
1353
|
-
let tokenExist = await apiUtil$
|
|
1358
|
+
let tokenExist = await apiUtil$2.tokenDataExist(apiUtil$2.userTokenStoreKey(accessToken));
|
|
1354
1359
|
|
|
1355
1360
|
if (tokenExist) {
|
|
1356
|
-
return await apiUtil$
|
|
1361
|
+
return await apiUtil$2.$checkToken(req, res, next);
|
|
1357
1362
|
}
|
|
1358
1363
|
|
|
1359
|
-
tokenExist = await apiUtil$
|
|
1364
|
+
tokenExist = await apiUtil$2.tokenDataExist(apiUtil$2.apiTokenStoreKey(accessToken));
|
|
1360
1365
|
|
|
1361
1366
|
if (tokenExist) {
|
|
1362
|
-
return apiUtil$
|
|
1367
|
+
return apiUtil$2.$checkApiKey(req, res, next);
|
|
1363
1368
|
} // 如果给定的token不存在,看看是不是平台内部调用
|
|
1364
1369
|
|
|
1365
1370
|
|
|
1366
|
-
return await apiUtil$
|
|
1367
|
-
res.send(apiUtil$
|
|
1371
|
+
return await apiUtil$2.checkInternalToken(req).catch(e => {
|
|
1372
|
+
res.send(apiUtil$2.apiFail(e, req));
|
|
1368
1373
|
return false;
|
|
1369
1374
|
});
|
|
1370
1375
|
}
|
|
@@ -1384,8 +1389,8 @@ class apiUtil$1 {
|
|
|
1384
1389
|
const params = options.replacements;
|
|
1385
1390
|
let item = params.item;
|
|
1386
1391
|
delete params.item;
|
|
1387
|
-
if (await apiUtil$
|
|
1388
|
-
let c = apiUtil$
|
|
1392
|
+
if (await apiUtil$2.checkForwardsHost(options)) return true;
|
|
1393
|
+
let c = apiUtil$2.parseCfgPath(item);
|
|
1389
1394
|
delete c.parent;
|
|
1390
1395
|
c.host = ppUtil$4.getMyIp();
|
|
1391
1396
|
return c;
|
|
@@ -1404,11 +1409,11 @@ class apiUtil$1 {
|
|
|
1404
1409
|
delete params.item; // if (await checkForwardsHost(options))
|
|
1405
1410
|
// return true;
|
|
1406
1411
|
|
|
1407
|
-
await apiUtil$
|
|
1408
|
-
let c = apiUtil$
|
|
1412
|
+
await apiUtil$2.parametersOK(params, "value");
|
|
1413
|
+
let c = apiUtil$2.parseCfgPath(item);
|
|
1409
1414
|
|
|
1410
1415
|
if (typeof c.value === "object") {
|
|
1411
|
-
throw [err$
|
|
1416
|
+
throw [err$2.ACCESS_REFUSED, `暂不支持修改复杂配置`];
|
|
1412
1417
|
} // c.oldValue = c.value;
|
|
1413
1418
|
|
|
1414
1419
|
|
|
@@ -1417,27 +1422,46 @@ class apiUtil$1 {
|
|
|
1417
1422
|
delete c.parent;
|
|
1418
1423
|
c.host = ppUtil$4.getMyIp();
|
|
1419
1424
|
return c; // 应用层自行处理多机同步
|
|
1425
|
+
}
|
|
1426
|
+
/**
|
|
1427
|
+
* 修改重启标志文件
|
|
1428
|
+
* 前提,PM2监视 restart,please.flag 文件,此文件若被修改则重启服务进程
|
|
1429
|
+
* 此服务假设 restart,please.flag 文件最后一行是一个整数,此整数+1后保存
|
|
1430
|
+
* @param options
|
|
1431
|
+
* @returns {Promise<number>}
|
|
1432
|
+
*/
|
|
1433
|
+
|
|
1434
|
+
|
|
1435
|
+
static async updateRestartFlag(options) {
|
|
1436
|
+
const fileName = `restart,please.flag`;
|
|
1437
|
+
let text = await fs$1.async_readFile(fileName, 'utf8');
|
|
1438
|
+
const lines = text.split('\r\n');
|
|
1439
|
+
const n = +lines[lines.length - 1] + 1;
|
|
1440
|
+
lines[lines.length - 1] = ' '.repeat(50) + n.toString();
|
|
1441
|
+
text = lines.join('\r\n');
|
|
1442
|
+
await fs$1.async_writeFile(fileName, text);
|
|
1443
|
+
return n;
|
|
1420
1444
|
} //#endregion
|
|
1421
1445
|
|
|
1422
1446
|
|
|
1423
1447
|
}
|
|
1424
1448
|
|
|
1425
1449
|
function configNeeded() {
|
|
1426
|
-
if (!conf$
|
|
1450
|
+
if (!conf$3 || !err$2) {
|
|
1427
1451
|
ppUtil$4.configNeeded();
|
|
1428
|
-
conf$
|
|
1429
|
-
appSetting$1 = conf$
|
|
1430
|
-
err$
|
|
1452
|
+
conf$3 = ppUtil$4.appConfig;
|
|
1453
|
+
appSetting$1 = conf$3.appSetting;
|
|
1454
|
+
err$2 = ppUtil$4.appErrCfg;
|
|
1431
1455
|
}
|
|
1432
1456
|
}
|
|
1433
1457
|
|
|
1434
|
-
var ppUtilApi = apiUtil$
|
|
1458
|
+
var ppUtilApi = apiUtil$2;
|
|
1435
1459
|
|
|
1436
|
-
const fs = require$$
|
|
1460
|
+
const fs = require$$4__default["default"];
|
|
1437
1461
|
const path = require$$1__default$1["default"];
|
|
1438
1462
|
const ppUtil$3 = require$$1__default["default"].ppUtil;
|
|
1439
1463
|
const redisUtil = require$$2__default["default"].redisUtil;
|
|
1440
|
-
let conf$
|
|
1464
|
+
let conf$2, err$1; // const dbCheck = require('../dbupdate/dd-version');
|
|
1441
1465
|
|
|
1442
1466
|
/**
|
|
1443
1467
|
* API服务启动时前置条件检查
|
|
@@ -1457,9 +1481,9 @@ class preconditions$1 {
|
|
|
1457
1481
|
|
|
1458
1482
|
static setAppName(aName) {
|
|
1459
1483
|
ppUtil$3.configNeeded();
|
|
1460
|
-
conf$
|
|
1461
|
-
err = ppUtil$3.appErrCfg;
|
|
1462
|
-
preconditions$1.appName = aName || conf$
|
|
1484
|
+
conf$2 = ppUtil$3.appConfig;
|
|
1485
|
+
err$1 = ppUtil$3.appErrCfg;
|
|
1486
|
+
preconditions$1.appName = aName || conf$2.thisApp;
|
|
1463
1487
|
return preconditions$1;
|
|
1464
1488
|
}
|
|
1465
1489
|
|
|
@@ -1540,20 +1564,20 @@ async function createEnvSettingFile(fileName) {
|
|
|
1540
1564
|
try {
|
|
1541
1565
|
const cfgText = await ppUtil$3.doCreateEnvSettingFile(fileName);
|
|
1542
1566
|
|
|
1543
|
-
if (cfgText.indexOf(`cfgVersion: "${conf$
|
|
1567
|
+
if (cfgText.indexOf(`cfgVersion: "${conf$2._envSetting.cfgVersion}"`) > 0) {
|
|
1544
1568
|
console.log(`\n*** 已創建新的本機環境配置文件\n${fileName}\n请檢查各項內容是否正确(此项更新服务可正常运行)\n\n`);
|
|
1545
1569
|
return "";
|
|
1546
1570
|
}
|
|
1547
1571
|
|
|
1548
|
-
return `已創建新的本機環境配置文件\n${fileName}\n请檢查並正確設置各項內容,然後將配置版本號修改為${conf$
|
|
1572
|
+
return `已創建新的本機環境配置文件\n${fileName}\n请檢查並正確設置各項內容,然後將配置版本號修改為${conf$2._envSettings.default.cfgVersion}`;
|
|
1549
1573
|
} catch (e) {
|
|
1550
|
-
return `創建本機環境配置文件失敗\n《${fileName}》\n${err.ERROR(e).message}`;
|
|
1574
|
+
return `創建本機環境配置文件失敗\n《${fileName}》\n${err$1.ERROR(e).message}`;
|
|
1551
1575
|
}
|
|
1552
1576
|
}
|
|
1553
1577
|
|
|
1554
1578
|
async function checkExEnvSetting(loadjs) {
|
|
1555
|
-
if (!conf$
|
|
1556
|
-
let fileName = conf$
|
|
1579
|
+
if (!conf$2._envSetting.localSettingImported) {
|
|
1580
|
+
let fileName = conf$2.getEnvSettingFileName();
|
|
1557
1581
|
|
|
1558
1582
|
if (!fs.existsSync(fileName)) {
|
|
1559
1583
|
return await createEnvSettingFile(fileName);
|
|
@@ -1561,7 +1585,7 @@ async function checkExEnvSetting(loadjs) {
|
|
|
1561
1585
|
|
|
1562
1586
|
let envSettingEx = loadjs(fileName);
|
|
1563
1587
|
|
|
1564
|
-
if (envSettingEx.cfgVersion !== conf$
|
|
1588
|
+
if (envSettingEx.cfgVersion !== conf$2._envSettings.default.cfgVersion) {
|
|
1565
1589
|
if (envSettingEx.cfgVersion !== "0.0") {
|
|
1566
1590
|
let fp = path.parse(fileName);
|
|
1567
1591
|
let newFileName = path.join(fp.dir, fp.name + envSettingEx.cfgVersion + fp.ext);
|
|
@@ -1580,7 +1604,7 @@ async function checkExEnvSetting(loadjs) {
|
|
|
1580
1604
|
|
|
1581
1605
|
|
|
1582
1606
|
async function checkRedis() {
|
|
1583
|
-
if (!conf$
|
|
1607
|
+
if (!conf$2.redis.enabled) return "";
|
|
1584
1608
|
const redis = redisUtil.newClient("io"); // console.log(`checkRedis begin:`);
|
|
1585
1609
|
|
|
1586
1610
|
await ppUtil$3.wait(15 * 1000, param => {
|
|
@@ -1601,124 +1625,43 @@ async function checkRedis() {
|
|
|
1601
1625
|
|
|
1602
1626
|
var ppPrecond = preconditions$1;
|
|
1603
1627
|
|
|
1604
|
-
var require$$0 = require$$2__default["default"];
|
|
1605
|
-
|
|
1606
|
-
function _interopDefaultLegacy$1(e) {
|
|
1607
|
-
return e && typeof e === 'object' && 'default' in e ? e : {
|
|
1608
|
-
'default': e
|
|
1609
|
-
};
|
|
1610
|
-
}
|
|
1611
|
-
|
|
1612
|
-
var require$$0__default = /*#__PURE__*/_interopDefaultLegacy$1(require$$0); // const logger = require("log4js").getLogger();
|
|
1613
|
-
|
|
1614
|
-
|
|
1615
|
-
const redis = require$$0__default["default"].redisUtil;
|
|
1616
|
-
|
|
1617
|
-
class Messenger {
|
|
1618
|
-
constructor(appConfig, appErrCfg) {
|
|
1619
|
-
if (appConfig) {
|
|
1620
|
-
redis.config(appConfig, appErrCfg);
|
|
1621
|
-
}
|
|
1622
|
-
|
|
1623
|
-
this.channel = "ecs_messenger"; //default channel
|
|
1624
|
-
|
|
1625
|
-
this.publisher = redis.newClient("publisher");
|
|
1626
|
-
this.subscriber = redis.newClient("subscriber");
|
|
1627
|
-
this.subscriber.on("subscribe", function (channel, count) {
|
|
1628
|
-
console.log("chanel subscribed :", channel, count);
|
|
1629
|
-
});
|
|
1630
|
-
this.subscriber.on("message", this.handleMessage);
|
|
1631
|
-
}
|
|
1632
|
-
|
|
1633
|
-
setMessageHandle(handle, channel) {
|
|
1634
|
-
channel = channel || this.channel;
|
|
1635
|
-
Messenger.onmessage = Messenger.onmessage || {};
|
|
1636
|
-
Messenger.onmessage[channel] = Messenger.onmessage[channel] || [];
|
|
1637
|
-
const appMsgHandles = Messenger.onmessage[channel];
|
|
1638
|
-
|
|
1639
|
-
for (let i = 0; i < appMsgHandles.length; i++) {
|
|
1640
|
-
if (appMsgHandles[i] === handle) return this;
|
|
1641
|
-
}
|
|
1642
|
-
|
|
1643
|
-
appMsgHandles.push(handle);
|
|
1644
|
-
return this;
|
|
1645
|
-
}
|
|
1646
|
-
|
|
1647
|
-
subscribe(channel) {
|
|
1648
|
-
channel = channel || this.channel;
|
|
1649
|
-
this.subscriber.subscribe(channel);
|
|
1650
|
-
return this;
|
|
1651
|
-
}
|
|
1652
|
-
|
|
1653
|
-
async handleMessage(channel, message) {
|
|
1654
|
-
console.log(`通道[${channel}]收到订阅消息:`, message);
|
|
1655
|
-
let appMsgHandles = Messenger.onmessage[channel] || [];
|
|
1656
|
-
|
|
1657
|
-
for (let i = 0; i < appMsgHandles.length; i++) {
|
|
1658
|
-
const appMsgHandle = appMsgHandles[i];
|
|
1659
|
-
|
|
1660
|
-
try {
|
|
1661
|
-
let msgObj = JSON.parse(message); // await appMsgHandle(msgObj);
|
|
1662
|
-
|
|
1663
|
-
appMsgHandle(msgObj);
|
|
1664
|
-
} catch (e) {
|
|
1665
|
-
console.log(e);
|
|
1666
|
-
}
|
|
1667
|
-
}
|
|
1668
|
-
}
|
|
1669
|
-
|
|
1670
|
-
async publish(message, channel) {
|
|
1671
|
-
channel = channel || this.channel;
|
|
1672
|
-
let msgStr = typeof message === "object" ? JSON.stringify(message) : message.toString();
|
|
1673
|
-
console.log(`通道[${channel}]发布消息:`, message);
|
|
1674
|
-
await this.publisher.publish(channel, msgStr);
|
|
1675
|
-
return this;
|
|
1676
|
-
}
|
|
1677
|
-
|
|
1678
|
-
}
|
|
1679
|
-
|
|
1680
|
-
var ppMessenger$1 = Messenger;
|
|
1681
|
-
const ppMessenger = ppMessenger$1;
|
|
1682
|
-
var ppUtil$2 = ppMessenger;
|
|
1683
|
-
var ppUtil_1 = ppUtil$2;
|
|
1684
|
-
|
|
1685
1628
|
// 若 redis 可用,则使用基于 redis 的消息订阅发布系统
|
|
1686
1629
|
// 若 redis 不可用,则将消息转发到其它主机
|
|
1687
1630
|
|
|
1688
1631
|
const {
|
|
1689
|
-
ppUtil: ppUtil$
|
|
1632
|
+
ppUtil: ppUtil$2
|
|
1690
1633
|
} = require$$1__default["default"];
|
|
1691
|
-
const RedisMessenger =
|
|
1634
|
+
const RedisMessenger = require$$1__default$2["default"];
|
|
1692
1635
|
const {
|
|
1693
1636
|
netUtil
|
|
1694
1637
|
} = require$$3__default["default"];
|
|
1695
|
-
let conf;
|
|
1638
|
+
let conf$1;
|
|
1696
1639
|
|
|
1697
|
-
class commonMessenger$
|
|
1640
|
+
class commonMessenger$2 {
|
|
1698
1641
|
static myMsgAddr = "";
|
|
1699
1642
|
static redisMessenger = null;
|
|
1700
1643
|
static onMessage = [];
|
|
1701
1644
|
|
|
1702
1645
|
static initMessenger(appConfig, appErrCfg, msgChannel) {
|
|
1703
|
-
conf = appConfig;
|
|
1704
|
-
this.redisMessenger = conf.redis.enabled ? new RedisMessenger(appConfig, appErrCfg, msgChannel).subscribe(msgChannel) : null;
|
|
1705
|
-
this.myMsgAddr = commonMessenger$
|
|
1646
|
+
conf$1 = appConfig;
|
|
1647
|
+
this.redisMessenger = conf$1.redis.enabled ? new RedisMessenger(appConfig, appErrCfg, msgChannel).subscribe(msgChannel) : null;
|
|
1648
|
+
this.myMsgAddr = commonMessenger$2.getMyMsgAddr();
|
|
1706
1649
|
}
|
|
1707
1650
|
|
|
1708
1651
|
static getMyMsgAddr() {
|
|
1709
|
-
if (!conf.myMsgAddr) {
|
|
1710
|
-
conf.pm_id = process.env.pm_id || "0";
|
|
1711
|
-
let myIp = ppUtil$
|
|
1652
|
+
if (!conf$1.myMsgAddr) {
|
|
1653
|
+
conf$1.pm_id = process.env.pm_id || "0";
|
|
1654
|
+
let myIp = ppUtil$2.getMyIp();
|
|
1712
1655
|
|
|
1713
1656
|
if (this.redisMessenger) {
|
|
1714
|
-
myIp = `${conf.pm_id}@${myIp}`;
|
|
1657
|
+
myIp = `${conf$1.pm_id}@${myIp}`;
|
|
1715
1658
|
}
|
|
1716
1659
|
|
|
1717
|
-
conf.myMsgAddr = myIp;
|
|
1718
|
-
console.log(`myMsgAddr: `, conf.myMsgAddr);
|
|
1660
|
+
conf$1.myMsgAddr = myIp;
|
|
1661
|
+
console.log(`myMsgAddr: `, conf$1.myMsgAddr);
|
|
1719
1662
|
}
|
|
1720
1663
|
|
|
1721
|
-
return conf.myMsgAddr;
|
|
1664
|
+
return conf$1.myMsgAddr;
|
|
1722
1665
|
}
|
|
1723
1666
|
|
|
1724
1667
|
static setMessageHandle(messageHandle) {
|
|
@@ -1726,11 +1669,11 @@ class commonMessenger$1 {
|
|
|
1726
1669
|
return this.redisMessenger.setMessageHandle(messageHandle, msgChannel);
|
|
1727
1670
|
}
|
|
1728
1671
|
|
|
1729
|
-
if (commonMessenger$
|
|
1730
|
-
commonMessenger$
|
|
1672
|
+
if (commonMessenger$2.onMessage.indexOf(messageHandle) < 0) {
|
|
1673
|
+
commonMessenger$2.onMessage.push(messageHandle);
|
|
1731
1674
|
}
|
|
1732
1675
|
|
|
1733
|
-
return commonMessenger$
|
|
1676
|
+
return commonMessenger$2;
|
|
1734
1677
|
}
|
|
1735
1678
|
|
|
1736
1679
|
static async publishMessage(message) {
|
|
@@ -1741,10 +1684,10 @@ class commonMessenger$1 {
|
|
|
1741
1684
|
if (message.destAddr) {
|
|
1742
1685
|
await forwardMessage(message);
|
|
1743
1686
|
} else {
|
|
1744
|
-
for (let i = 0; i < conf.appSetting.serverHosts.length; i++) {
|
|
1745
|
-
message.destAddr = conf.appSetting.serverHosts[i];
|
|
1687
|
+
for (let i = 0; i < conf$1.appSetting.serverHosts.length; i++) {
|
|
1688
|
+
message.destAddr = conf$1.appSetting.serverHosts[i];
|
|
1746
1689
|
|
|
1747
|
-
if (message.destAddr !== conf.myMsgAddr) {
|
|
1690
|
+
if (message.destAddr !== conf$1.myMsgAddr) {
|
|
1748
1691
|
await forwardMessage(message);
|
|
1749
1692
|
}
|
|
1750
1693
|
}
|
|
@@ -1755,8 +1698,8 @@ class commonMessenger$1 {
|
|
|
1755
1698
|
static async handleInternalMessage(options) {
|
|
1756
1699
|
const message = options.replacements;
|
|
1757
1700
|
|
|
1758
|
-
for (let i = 0; i < commonMessenger$
|
|
1759
|
-
const appMsgHandle = commonMessenger$
|
|
1701
|
+
for (let i = 0; i < commonMessenger$2.onMessage.length; i++) {
|
|
1702
|
+
const appMsgHandle = commonMessenger$2.onMessage[i];
|
|
1760
1703
|
|
|
1761
1704
|
try {
|
|
1762
1705
|
await appMsgHandle(message);
|
|
@@ -1781,15 +1724,293 @@ async function forwardMessage(message) {
|
|
|
1781
1724
|
return res.data;
|
|
1782
1725
|
}
|
|
1783
1726
|
|
|
1784
|
-
var ppMessengerEx = commonMessenger$
|
|
1727
|
+
var ppMessengerEx = commonMessenger$2;
|
|
1728
|
+
|
|
1729
|
+
/**
|
|
1730
|
+
* CSCA 自动任务
|
|
1731
|
+
* ==============
|
|
1732
|
+
*/
|
|
1733
|
+
const CRON = require$$0__default$1["default"];
|
|
1734
|
+
const {
|
|
1735
|
+
ppUtil: ppUtil$1
|
|
1736
|
+
} = require$$1__default["default"];
|
|
1737
|
+
const apiUtil$1 = ppUtilApi;
|
|
1738
|
+
const commonMessenger$1 = ppMessengerEx;
|
|
1739
|
+
const MT_SCHEDULE_STATE = 'schedule-state',
|
|
1740
|
+
MT_SCHEDULE_STATE_REPLY = 'schedule-state-reply';
|
|
1741
|
+
let conf, err;
|
|
1742
|
+
|
|
1743
|
+
class schedule$1 {
|
|
1744
|
+
static tasks = {};
|
|
1745
|
+
/**
|
|
1746
|
+
* 注册一个计划任务
|
|
1747
|
+
* @param taskName
|
|
1748
|
+
* @param taskCaption
|
|
1749
|
+
* @param cronExp
|
|
1750
|
+
* @param taskFunc
|
|
1751
|
+
* @param autoStart
|
|
1752
|
+
* @returns {Promise<{}|{}|{cron: *, _message_: string}|any>}
|
|
1753
|
+
*/
|
|
1754
|
+
|
|
1755
|
+
static async registerTask(taskName, taskCaption, cronExp, taskFunc, autoStart) {
|
|
1756
|
+
if (!conf) {
|
|
1757
|
+
ppUtil$1.configNeeded();
|
|
1758
|
+
conf = ppUtil$1.appConfig;
|
|
1759
|
+
err = ppUtil$1.appErrCfg;
|
|
1760
|
+
}
|
|
1761
|
+
|
|
1762
|
+
if (!this.envAllowed()) return {};
|
|
1763
|
+
let task = this.findTask(taskName);
|
|
1764
|
+
|
|
1765
|
+
if (task) {
|
|
1766
|
+
if (task.cronExp !== cronExp || task.taskFunc !== taskFunc) {
|
|
1767
|
+
this.stop(taskName);
|
|
1768
|
+
task = null;
|
|
1769
|
+
}
|
|
1770
|
+
}
|
|
1771
|
+
|
|
1772
|
+
if (!task) {
|
|
1773
|
+
task = {
|
|
1774
|
+
name: taskName,
|
|
1775
|
+
caption: taskCaption,
|
|
1776
|
+
cronExp: cronExp,
|
|
1777
|
+
taskFunc: taskFunc,
|
|
1778
|
+
schedule: null,
|
|
1779
|
+
doScheduleTask: async function () {
|
|
1780
|
+
let self = this;
|
|
1781
|
+
if (this._pp_task) self = this._pp_task;
|
|
1782
|
+
console.log(new Date().format('[yyyy/MM/dd hh:mm:ss:S]'), `开始执行${self.caption}任务 ...`);
|
|
1783
|
+
await self.taskFunc();
|
|
1784
|
+
console.log(new Date().format('[yyyy/MM/dd hh:mm:ss:S]'), `${self.caption}任务执行结束`);
|
|
1785
|
+
}
|
|
1786
|
+
};
|
|
1787
|
+
this.tasks[taskName] = task;
|
|
1788
|
+
|
|
1789
|
+
if (autoStart) {
|
|
1790
|
+
return await this.start(task);
|
|
1791
|
+
}
|
|
1792
|
+
|
|
1793
|
+
return this.getTaskInfo(task, "任务已注册。");
|
|
1794
|
+
}
|
|
1795
|
+
|
|
1796
|
+
return this.getTaskInfo(task, "任务已存在。");
|
|
1797
|
+
}
|
|
1798
|
+
|
|
1799
|
+
static getTaskInfo(task, msg) {
|
|
1800
|
+
// return Object.assign({_message_: msg}, task);
|
|
1801
|
+
return {
|
|
1802
|
+
name: task.name,
|
|
1803
|
+
caption: task.caption,
|
|
1804
|
+
cronExp: task.cronExp,
|
|
1805
|
+
state: task.schedule ? "started" : "stopped",
|
|
1806
|
+
_message_: msg
|
|
1807
|
+
};
|
|
1808
|
+
}
|
|
1809
|
+
/**
|
|
1810
|
+
* 启动任务
|
|
1811
|
+
* @param taskOrName
|
|
1812
|
+
* @param cronExp
|
|
1813
|
+
* @returns {Promise<{}|{cron: *, _message_: string}>}
|
|
1814
|
+
*/
|
|
1815
|
+
|
|
1816
|
+
|
|
1817
|
+
static async start(taskOrName, cronExp) {
|
|
1818
|
+
if (!this.envAllowed()) return {};
|
|
1819
|
+
let task = taskOrName;
|
|
1820
|
+
|
|
1821
|
+
if (typeof task === "string") {
|
|
1822
|
+
task = this.findTask(taskOrName);
|
|
1823
|
+
}
|
|
1824
|
+
|
|
1825
|
+
if (!task) throw [err.INVALID_PARAM, `任务${taskOrName}不存在`];
|
|
1826
|
+
cronExp = cronExp || task.cronExp;
|
|
1827
|
+
|
|
1828
|
+
if (task.cronExp !== cronExp) {
|
|
1829
|
+
this.stop(task);
|
|
1830
|
+
task.cronExp = cronExp;
|
|
1831
|
+
}
|
|
1832
|
+
|
|
1833
|
+
if (task.schedule) {
|
|
1834
|
+
return this.getTaskInfo(task, "任务已启动,无需重复启动。");
|
|
1835
|
+
}
|
|
1836
|
+
|
|
1837
|
+
task.schedule = CRON.schedule(cronExp, task.doScheduleTask);
|
|
1838
|
+
task.schedule._task._pp_task = task;
|
|
1839
|
+
return this.getTaskInfo(task, "任务已启动。");
|
|
1840
|
+
}
|
|
1841
|
+
/**
|
|
1842
|
+
* 停止任务
|
|
1843
|
+
* @param taskOrName
|
|
1844
|
+
* @returns {Promise<{}|{cron: *, _message_: string}|{_message_: string}>}
|
|
1845
|
+
*/
|
|
1846
|
+
|
|
1847
|
+
|
|
1848
|
+
static async stop(taskOrName) {
|
|
1849
|
+
if (!this.envAllowed()) return {};
|
|
1850
|
+
let task = taskOrName;
|
|
1851
|
+
|
|
1852
|
+
if (typeof task === "string") {
|
|
1853
|
+
task = this.findTask(taskOrName);
|
|
1854
|
+
}
|
|
1855
|
+
|
|
1856
|
+
if (!task) throw [err.INVALID_PARAM, `任务${taskOrName}不存在`];
|
|
1857
|
+
|
|
1858
|
+
if (task.schedule) {
|
|
1859
|
+
task.schedule.stop();
|
|
1860
|
+
task.schedule = null;
|
|
1861
|
+
return this.getTaskInfo(task, "任务已停止。");
|
|
1862
|
+
}
|
|
1863
|
+
|
|
1864
|
+
return this.getTaskInfo(task, "任务未启动,无需停止。");
|
|
1865
|
+
}
|
|
1866
|
+
/**
|
|
1867
|
+
* 获取或设置当前状态(来自远程的API调用)
|
|
1868
|
+
* @param options
|
|
1869
|
+
* @returns {Promise<unknown>}
|
|
1870
|
+
*/
|
|
1871
|
+
|
|
1872
|
+
|
|
1873
|
+
static async state(options) {
|
|
1874
|
+
const params = options.replacements; // await commonMessenger.parametersOK(params, "taskName");
|
|
1875
|
+
|
|
1876
|
+
const req = options._res.req;
|
|
1877
|
+
|
|
1878
|
+
if (req) {
|
|
1879
|
+
if (req.method === 'GET') {
|
|
1880
|
+
delete params.state;
|
|
1881
|
+
} else {
|
|
1882
|
+
await apiUtil$1.parametersOK(params, 'taskName', "state");
|
|
1883
|
+
}
|
|
1884
|
+
}
|
|
1885
|
+
|
|
1886
|
+
if (this.envAllowed()) {
|
|
1887
|
+
return this._state(params);
|
|
1888
|
+
} // 环境变量启用计划任务,但当前环境不能执行,
|
|
1889
|
+
// 说明收到此API请求的进程不是第一个进程,或者此前服务器不是第一台服务器,
|
|
1890
|
+
// 这种情况下,将此请求作为消息发布出去,
|
|
1891
|
+
// 第一台服务器的第一个进程收到消息后进行处理,再将结果作为消息发布,
|
|
1892
|
+
// 本进程收到处理结果后果作为响应发送回客户端
|
|
1893
|
+
|
|
1894
|
+
|
|
1895
|
+
if (process.env.SCHEDULE_ENABLED) {
|
|
1896
|
+
let replyId = ppUtil$1.newGuid();
|
|
1897
|
+
return await new Promise((resolve, reject) => {
|
|
1898
|
+
commonMessenger$1.setMessageHandle(message => {
|
|
1899
|
+
if (message._type === MT_SCHEDULE_STATE_REPLY && message.replyId === replyId) {
|
|
1900
|
+
replyId = '';
|
|
1901
|
+
resolve(message.result);
|
|
1902
|
+
return;
|
|
1903
|
+
}
|
|
1904
|
+
|
|
1905
|
+
if (message._type === MT_SCHEDULE_STATE) {
|
|
1906
|
+
if (schedule$1.enabled()) {
|
|
1907
|
+
message.result = schedule$1._state(message.params);
|
|
1908
|
+
message._type = MT_SCHEDULE_STATE_REPLY;
|
|
1909
|
+
message.destAddr = message.replyAddr;
|
|
1910
|
+
commonMessenger$1.publishMessage(message);
|
|
1911
|
+
}
|
|
1912
|
+
}
|
|
1913
|
+
});
|
|
1914
|
+
commonMessenger$1.publishMessage({
|
|
1915
|
+
_type: MT_SCHEDULE_STATE,
|
|
1916
|
+
replyId,
|
|
1917
|
+
replyAddr: conf.myMsgAddr,
|
|
1918
|
+
params
|
|
1919
|
+
}).catch(e => {
|
|
1920
|
+
replyId = '';
|
|
1921
|
+
reject(e);
|
|
1922
|
+
});
|
|
1923
|
+
setTimeout(() => {
|
|
1924
|
+
if (replyId) {
|
|
1925
|
+
reject("schedule.state: 等待处理结果超时");
|
|
1926
|
+
}
|
|
1927
|
+
}, 2 * 60 * 1000);
|
|
1928
|
+
});
|
|
1929
|
+
}
|
|
1930
|
+
|
|
1931
|
+
return {
|
|
1932
|
+
_message_: "此环境无自动任务"
|
|
1933
|
+
};
|
|
1934
|
+
}
|
|
1935
|
+
|
|
1936
|
+
static async _state(params) {
|
|
1937
|
+
let apiResult = {};
|
|
1938
|
+
let task;
|
|
1939
|
+
|
|
1940
|
+
if (params.taskName) {
|
|
1941
|
+
task = this.findTask(params.taskName);
|
|
1942
|
+
if (!task) throw [err.INVALID_PARAM, `任务${params.taskName}不存在`];
|
|
1943
|
+
}
|
|
1944
|
+
|
|
1945
|
+
if (params.state) {
|
|
1946
|
+
if ("started" === params.state) {
|
|
1947
|
+
apiResult = await this.start(task, params.cron);
|
|
1948
|
+
} else if ("stopped" === params.state) {
|
|
1949
|
+
apiResult = await this.stop(task);
|
|
1950
|
+
} else {
|
|
1951
|
+
throw [err.INVALID_PARAM, `(${params.state}), 只能是 started/stopped`];
|
|
1952
|
+
}
|
|
1953
|
+
|
|
1954
|
+
if (params.runOnce) {
|
|
1955
|
+
task = this.findTask(params.taskName);
|
|
1956
|
+
apiResult._message_ += "\n正在手动执行任务"; // await
|
|
1957
|
+
|
|
1958
|
+
task.doScheduleTask();
|
|
1959
|
+
}
|
|
1960
|
+
|
|
1961
|
+
return this.getTaskInfo(task, apiResult._message_);
|
|
1962
|
+
}
|
|
1963
|
+
|
|
1964
|
+
if (task) {
|
|
1965
|
+
return this.getTaskInfo(task);
|
|
1966
|
+
}
|
|
1967
|
+
|
|
1968
|
+
const result = [];
|
|
1969
|
+
|
|
1970
|
+
for (let k in this.tasks) {
|
|
1971
|
+
result.push(this.getTaskInfo(this.tasks[k]));
|
|
1972
|
+
}
|
|
1973
|
+
|
|
1974
|
+
return result;
|
|
1975
|
+
}
|
|
1976
|
+
|
|
1977
|
+
static deleteTask(taskName) {
|
|
1978
|
+
delete this.tasks[taskName];
|
|
1979
|
+
}
|
|
1980
|
+
|
|
1981
|
+
static findTask(taskName) {
|
|
1982
|
+
return this.tasks[taskName];
|
|
1983
|
+
}
|
|
1984
|
+
/**
|
|
1985
|
+
* 确定当前进程环境是否启用自动任务
|
|
1986
|
+
*/
|
|
1987
|
+
|
|
1988
|
+
|
|
1989
|
+
static envAllowed() {
|
|
1990
|
+
let enabled = // PM2配置中指定了环境变量 SCHEDULE_ENABLED
|
|
1991
|
+
!!process.env.SCHEDULE_ENABLED // 如果PM2启动了多个进程,则只在第一个进程执行
|
|
1992
|
+
&& process.env.NODE_APP_INSTANCE === '0'; // 如果有多台服务器,则只在第一台执行
|
|
1993
|
+
|
|
1994
|
+
if (enabled && conf.appSetting.serverHosts && conf.appSetting.serverHosts.length > 1) {
|
|
1995
|
+
enabled = conf.myMsgAddr.indexOf(conf.appSetting.serverHosts[0]) === 0;
|
|
1996
|
+
}
|
|
1997
|
+
|
|
1998
|
+
return enabled;
|
|
1999
|
+
}
|
|
2000
|
+
|
|
2001
|
+
}
|
|
2002
|
+
|
|
2003
|
+
var ppSchedule = schedule$1;
|
|
1785
2004
|
|
|
1786
2005
|
const apiUtil = ppUtilApi;
|
|
1787
2006
|
const preconditions = ppPrecond;
|
|
1788
2007
|
const commonMessenger = ppMessengerEx;
|
|
2008
|
+
const schedule = ppSchedule;
|
|
1789
2009
|
var ppUtil = {
|
|
1790
2010
|
apiUtil,
|
|
1791
2011
|
preconditions,
|
|
1792
|
-
commonMessenger
|
|
2012
|
+
commonMessenger,
|
|
2013
|
+
schedule
|
|
1793
2014
|
};
|
|
1794
2015
|
|
|
1795
2016
|
module.exports = ppUtil;
|