w-web-api 1.0.53 → 1.0.55

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 (94) hide show
  1. package/README.md +1 -1
  2. package/dist/css/{app.fe69497a.css → app.cad4a1ca.css} +1 -1
  3. package/dist/index.tmp +1 -1
  4. package/dist/js/app-legacy.7687b23b.js +1 -0
  5. package/dist/js/app.7687b23b.js +1 -0
  6. package/dist/js/chunk-vendors-legacy.4c27cf51.js +15 -0
  7. package/dist/js/chunk-vendors.4c27cf51.js +15 -0
  8. package/dist/w-web-api.umd.js +2 -2
  9. package/dist/w-web-api.umd.js.map +1 -1
  10. package/docs/WWebApi.html +1 -1
  11. package/docs/index.html +1 -1
  12. package/docs/server_WWebApi.mjs.html +24 -34
  13. package/docs/src_components_Common_CheckYesNo.vue.html +1 -1
  14. package/logs/2026-06-19T16.log +6 -0
  15. package/logs/2026-06-20T11.log +4 -0
  16. package/logs/2026-06-20T14.log +2 -0
  17. package/logs/2026-06-21T20.log +1 -0
  18. package/logs/2026-06-21T21.log +4 -0
  19. package/logs/2026-06-22T07.log +12 -0
  20. package/logs/2026-06-22T08.log +808 -0
  21. package/logs/2026-06-22T09.log +104 -0
  22. package/logs/2026-06-22T10.log +26 -0
  23. package/logs/2026-06-22T11.log +860 -0
  24. package/logs/2026-06-22T12.log +430 -0
  25. package/logs/2026-06-22T23.log +1547 -0
  26. package/logs/2026-06-23T00.log +473 -0
  27. package/logs/2026-06-23T08.log +231 -0
  28. package/logs/2026-06-23T09.log +179 -0
  29. package/logs/2026-07-01T11.log +488 -0
  30. package/logs/2026-07-09T22.log +370 -0
  31. package/logs/2026-07-09T23.log +370 -0
  32. package/logs/2026-07-10T12.log +284 -0
  33. package/logs/2026-07-10T13.log +777 -0
  34. package/logs/2026-07-11T17.log +2 -0
  35. package/package.json +15 -14
  36. package/server/WWebApi.mjs +23 -33
  37. package/server/procLang.mjs +8 -88
  38. package/server/procProxy.mjs +89 -89
  39. package/server/srLog.mjs +2 -2
  40. package/server/staLogs/filterVpfsByWindow.mjs +27 -0
  41. package/server/staLogs/staEvent.mjs +4 -2
  42. package/server/staLogs/test_staEvent.mjs +67 -1
  43. package/settings.json +4 -0
  44. package/src/components/Layout.vue +1 -20
  45. package/src/components/LayoutContent.vue +0 -26
  46. package/src/components/LayoutContentEdit.vue +2 -2
  47. package/src/components/LayoutContentTest.vue +1 -19
  48. package/src/main.js +3 -8
  49. package/src/plugins/mUI.mjs +0 -35
  50. package/src/store/mutations.mjs +0 -14
  51. package/src/store/types.mjs +0 -3
  52. package/srv.mjs +6 -4
  53. package/tableTags.json +1 -1
  54. package/z/344/277/256/346/255/243/350/246/217/345/212/203/346/233/270.md +246 -0
  55. package/_gh-pages-deploy/.nojekyll +0 -0
  56. package/_gh-pages-deploy/WWebApi.html +0 -898
  57. package/_gh-pages-deploy/fonts/Montserrat/Montserrat-Bold.eot +0 -0
  58. package/_gh-pages-deploy/fonts/Montserrat/Montserrat-Bold.ttf +0 -0
  59. package/_gh-pages-deploy/fonts/Montserrat/Montserrat-Bold.woff +0 -0
  60. package/_gh-pages-deploy/fonts/Montserrat/Montserrat-Bold.woff2 +0 -0
  61. package/_gh-pages-deploy/fonts/Montserrat/Montserrat-Regular.eot +0 -0
  62. package/_gh-pages-deploy/fonts/Montserrat/Montserrat-Regular.ttf +0 -0
  63. package/_gh-pages-deploy/fonts/Montserrat/Montserrat-Regular.woff +0 -0
  64. package/_gh-pages-deploy/fonts/Montserrat/Montserrat-Regular.woff2 +0 -0
  65. package/_gh-pages-deploy/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.eot +0 -0
  66. package/_gh-pages-deploy/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.svg +0 -978
  67. package/_gh-pages-deploy/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.ttf +0 -0
  68. package/_gh-pages-deploy/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff +0 -0
  69. package/_gh-pages-deploy/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff2 +0 -0
  70. package/_gh-pages-deploy/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.eot +0 -0
  71. package/_gh-pages-deploy/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.svg +0 -1049
  72. package/_gh-pages-deploy/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.ttf +0 -0
  73. package/_gh-pages-deploy/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff +0 -0
  74. package/_gh-pages-deploy/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff2 +0 -0
  75. package/_gh-pages-deploy/index.html +0 -84
  76. package/_gh-pages-deploy/scripts/collapse.js +0 -39
  77. package/_gh-pages-deploy/scripts/commonNav.js +0 -28
  78. package/_gh-pages-deploy/scripts/linenumber.js +0 -25
  79. package/_gh-pages-deploy/scripts/nav.js +0 -12
  80. package/_gh-pages-deploy/scripts/polyfill.js +0 -4
  81. package/_gh-pages-deploy/scripts/prettify/Apache-License-2.0.txt +0 -202
  82. package/_gh-pages-deploy/scripts/prettify/lang-css.js +0 -2
  83. package/_gh-pages-deploy/scripts/prettify/prettify.js +0 -28
  84. package/_gh-pages-deploy/scripts/search.js +0 -99
  85. package/_gh-pages-deploy/server_WWebApi.mjs.html +0 -1012
  86. package/_gh-pages-deploy/src_components_Common_CheckYesNo.vue.html +0 -187
  87. package/_gh-pages-deploy/styles/jsdoc.css +0 -776
  88. package/_gh-pages-deploy/styles/prettify.css +0 -80
  89. package/dist/js/app-legacy.15819aa7.js +0 -1
  90. package/dist/js/app.15819aa7.js +0 -1
  91. package/dist/js/chunk-vendors-legacy.c1a32dd1.js +0 -15
  92. package/dist/js/chunk-vendors.c1a32dd1.js +0 -15
  93. package/src/plugins/mDataSelectorSchema.mjs +0 -30
  94. package/src/plugins/mShare.mjs +0 -44
package/docs/WWebApi.html CHANGED
@@ -885,7 +885,7 @@
885
885
  <br class="clear">
886
886
 
887
887
  <footer>
888
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Mon Jun 22 2026 15:42:09 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
888
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Thu Jul 23 2026 11:15:32 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
889
889
  </footer>
890
890
 
891
891
  <script>prettyPrint();</script>
package/docs/index.html CHANGED
@@ -71,7 +71,7 @@
71
71
  <br class="clear">
72
72
 
73
73
  <footer>
74
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Mon Jun 22 2026 15:42:09 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
74
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Thu Jul 23 2026 11:15:32 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
75
75
  </footer>
76
76
 
77
77
  <script>prettyPrint();</script>
@@ -277,7 +277,7 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
277
277
  //params
278
278
  let showLanguage = get(opt, 'showLanguage', 'y')
279
279
  let language = get(opt, 'language', 'eng')
280
- let logFd = get(opt, 'logFd', './_logs') //srLog 寫入 + staEvent 統計共用之 log 資料夾
280
+ let logFd = get(opt, 'logFd', './logs') //srLog 寫入 + staEvent 統計共用之 log 資料夾
281
281
 
282
282
 
283
283
  //kpLangExt
@@ -299,7 +299,9 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
299
299
  wp = WServOrm(ds, WOrm, url, db, optWServOrm)
300
300
  }
301
301
  catch (err) {
302
- console.log(err)
302
+ //ORM 為必要依賴:初始化失敗即 fail-fast,不以 wp={} 帶 undefined woItems/procOrm 殘缺啟動(與建構子其餘必要依賴一致)
303
+ console.log('WServOrm init failed', err)
304
+ throw err
303
305
  }
304
306
  let { woItems, procOrm } = wp
305
307
 
@@ -307,6 +309,9 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
307
309
  //srLog(後端 log;錯誤一律 log err-key 供識別,對齊 w-web-sso)
308
310
  let srLog = srLogInit(opt)
309
311
 
312
+ //maskTok:debug console.log 不印完整 token/authorization(憑證),僅前 4 碼 + ***,避免憑證落入 stdout
313
+ let maskTok = (t) => isestr(t) ? (strleft(t, 4) + '***') : t
314
+
310
315
  //kpFunExt 邊界統一處理:成功記 info(供 staEvent 統計呼叫頻率);catch 後端錯誤 → srLog 該 err-key →
311
316
  //原樣 re-reject(前端依 key 查自己 lang 顯示)。event 統一加 'kpfun-' 前綴 → 專用事件、與 api/verifyConn 區分。
312
317
  let wrapErrLog = (event, fn) => {
@@ -390,14 +395,7 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
390
395
  }
391
396
 
392
397
  //check
393
- if (true) {
394
- // if (!iseobj(userSelf)) {
395
- // console.log(`token`, token)
396
- // console.log(`can not find the user from token`)
397
- // return Promise.reject('errUserNotFound')
398
- // }
399
- await checkUser(userSelf)
400
- }
398
+ await checkUser(userSelf)
401
399
 
402
400
  return userSelf
403
401
  }
@@ -673,9 +671,8 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
673
671
  //check
674
672
  if (!isestr(token)) {
675
673
  console.log('req.query', get(req, 'query'))
676
- console.log('token', token)
674
+ console.log('token', maskTok(token))
677
675
  console.log('[API]getUserByToken/check token: invalid token')
678
- console.log(`token does not have permission`)
679
676
  return Promise.reject('errTokenNoPermission')
680
677
  }
681
678
 
@@ -684,9 +681,8 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
684
681
 
685
682
  //check
686
683
  if (!iseobj(user)) {
687
- console.log('token', token)
684
+ console.log('token', maskTok(token))
688
685
  console.log('[API]getUserByToken/check user: invalid user')
689
- console.log(`token does not have permission`)
690
686
  return Promise.reject('errTokenNoPermission')
691
687
  }
692
688
 
@@ -721,7 +717,6 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
721
717
  // console.log('req.query', get(req, 'query'))
722
718
  // console.log('token', token)
723
719
  // console.log('[API]getAPIsList/check token: invalid token')
724
- // console.log(`token does not have permission`)
725
720
  // return Promise.reject('errTokenNoPermission')
726
721
  // }
727
722
 
@@ -732,7 +727,6 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
732
727
  // if (!iseobj(user)) {
733
728
  // console.log('token', token)
734
729
  // console.log('[API]getAPIsList/check user: invalid user')
735
- // console.log(`token does not have permission`)
736
730
  // return Promise.reject('errTokenNoPermission')
737
731
  // }
738
732
 
@@ -770,7 +764,6 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
770
764
  // console.log('req.query', get(req, 'query'))
771
765
  // console.log('token', token)
772
766
  // console.log('[API]updateAPIs/check token: invalid token')
773
- // console.log(`token does not have permission`)
774
767
  // return Promise.reject('errTokenNoPermission')
775
768
  // }
776
769
 
@@ -781,7 +774,6 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
781
774
  // if (!iseobj(user)) {
782
775
  // console.log('token', token)
783
776
  // console.log('[API]updateAPIs/check user: invalid user')
784
- // console.log(`token does not have permission`)
785
777
  // return Promise.reject('errTokenNoPermission')
786
778
  // }
787
779
 
@@ -820,9 +812,8 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
820
812
  //check
821
813
  if (!isestr(token)) {
822
814
  console.log('req.query', get(req, 'query'))
823
- console.log('token', token)
815
+ console.log('token', maskTok(token))
824
816
  console.log('[API]syncAndReplaceTabs/check token: invalid token')
825
- console.log(`token does not have permission`)
826
817
  return Promise.reject('errTokenNoPermission')
827
818
  }
828
819
 
@@ -834,8 +825,7 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
834
825
  console.log('req.query', get(req, 'query'))
835
826
  console.log('keyTable', keyTable)
836
827
  console.log('[API]syncAndReplaceTabs/check keyTable: invalid keyTable')
837
- console.log(`token does not have permission`)
838
- return Promise.reject('errTokenNoPermission')
828
+ return Promise.reject('errKeyTableInvalid')
839
829
  }
840
830
 
841
831
  //check keyTable
@@ -850,9 +840,8 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
850
840
 
851
841
  //check
852
842
  if (!iseobj(user)) {
853
- console.log('token', token)
843
+ console.log('token', maskTok(token))
854
844
  console.log('[API]syncAndReplaceTabs/check user: invalid user')
855
- console.log(`token does not have permission`)
856
845
  return Promise.reject('errTokenNoPermission')
857
846
  }
858
847
 
@@ -861,10 +850,9 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
861
850
 
862
851
  //check userId
863
852
  if (!isestr(userId)) {
864
- console.log('token', token)
853
+ console.log('token', maskTok(token))
865
854
  console.log('user', user)
866
855
  console.log('[API]syncAndReplaceTabs/check userId: invalid userId')
867
- console.log(`token does not have permission`)
868
856
  return Promise.reject('errTokenNoPermission')
869
857
  }
870
858
 
@@ -902,7 +890,7 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
902
890
 
903
891
  //WServHapiServer
904
892
  instWServHapiServer = new WServHapiServer({
905
- port: opt.serverPort,
893
+ port: serverPort,
906
894
  pathStaticFiles,
907
895
  apiName: 'api',
908
896
  apis,
@@ -917,16 +905,18 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
917
905
  //check
918
906
  if (!isestr(token)) {
919
907
  console.log('apiType', apiType)
920
- console.log('authorization', authorization)
908
+ console.log('authorization', maskTok(authorization))
921
909
  console.log('invalid token')
922
910
  return false
923
911
  }
924
912
 
925
- //checkToken
913
+ //checkToken:套件層連線閘僅做「token 認證」(解析 user + 驗欄位齊備)。**授權**(如限管理員)屬
914
+ //套件使用者之責——由其提供之 getUserByToken(可對非授權者回 {})/ verifyClientUser / verifyAppUser,
915
+ //或 WServOrm 之 useCheckUser/useExcludeWhenNotAdmin 等鉤子決定;套件不對連線層強加特定授權政策(避免越界、
916
+ //保留使用者彈性)。詳見 spec/設計要點與取捨.md「套件授權責任」。
926
917
  let b = await p.checkToken(token)
927
- // console.log('b', b)
928
918
 
929
- srLog.info({ event: 'verifyConn', apiType }) //連線驗證通過(checkToken 失敗時會 throw 不到此)
919
+ srLog.info({ event: 'verifyConn', apiType }) //連線之 token 認證通過(checkToken 失敗會 throw 不到此)
930
920
  return b
931
921
  },
932
922
  getUserIdByToken: async (token) => { //可使用async或sync函數
@@ -962,8 +952,8 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
962
952
  return deleteApi(userId, id)
963
953
  }),
964
954
 
965
- //統計資訊頁:回傳各 event 之時段發生頻率(讀 logFd 之 log)。連線已由 verifyClientUser 限管理員,
966
- //故此處不另檢查(同 getApisList)。timeLength 天數 / timeInterval 'hr'|'day'。
955
+ //統計資訊頁:回傳各 event 之時段發生頻率(讀 logFd 之 log)。連線之 token 認證由 verifyConn 把關;
956
+ //授權(限管理員)屬套件使用者責任(見 verifyConn 註解與設計要點與取捨「套件授權責任」)。timeLength 天數 / timeInterval 'hr'|'day'。
967
957
  getStaEvent: wrapErrLog('getStaEvent', (userId, timeLength = 7, timeInterval = 'hr') => {
968
958
  return staEvent(timeLength, timeInterval, { fdLog: logFd })
969
959
  }),
@@ -999,7 +989,7 @@ export default WWebApi
999
989
  <br class="clear">
1000
990
 
1001
991
  <footer>
1002
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Mon Jun 22 2026 15:42:09 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
992
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Thu Jul 23 2026 11:15:32 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
1003
993
  </footer>
1004
994
 
1005
995
  <script>prettyPrint();</script>
@@ -174,7 +174,7 @@ export default {
174
174
  <br class="clear">
175
175
 
176
176
  <footer>
177
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Mon Jun 22 2026 15:42:09 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
177
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Thu Jul 23 2026 11:15:32 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
178
178
  </footer>
179
179
 
180
180
  <script>prettyPrint();</script>
@@ -0,0 +1,6 @@
1
+ {"level":50,"time":1781856410899,"pid":16564,"hostname":"semi-win-dev3","event":"proxyRequest","err":"errReqUrlInvalid"}
2
+ {"level":50,"time":1781856420503,"pid":16564,"hostname":"semi-win-dev3","event":"proxyRequest","err":"errReqUrlInvalid"}
3
+ {"level":50,"time":1781856490388,"pid":16564,"hostname":"semi-win-dev3","event":"proxyRequest","err":"errReqUrlInvalid"}
4
+ {"level":50,"time":1781856524374,"pid":16564,"hostname":"semi-win-dev3","event":"proxyRequest","err":"errReqUrlInvalid"}
5
+ {"level":50,"time":1781856931047,"pid":16564,"hostname":"semi-win-dev3","event":"proxyRequest","err":"errReqUrlInvalid"}
6
+ {"level":50,"time":1781856965662,"pid":16564,"hostname":"semi-win-dev3","event":"proxyRequest","err":"errReqUrlInvalid"}
@@ -0,0 +1,4 @@
1
+ {"level":50,"time":1781925021318,"pid":1168,"hostname":"semi-win-dev3","event":"proxyRequest","err":"errReqUrlInvalid"}
2
+ {"level":50,"time":1781925045743,"pid":1168,"hostname":"semi-win-dev3","event":"proxyRequest","err":"errReqUrlInvalid"}
3
+ {"level":50,"time":1781925121224,"pid":1168,"hostname":"semi-win-dev3","event":"proxyRequest","err":"errReqUrlInvalid"}
4
+ {"level":50,"time":1781925160739,"pid":1168,"hostname":"semi-win-dev3","event":"proxyRequest","err":"errReqUrlInvalid"}
@@ -0,0 +1,2 @@
1
+ {"level":50,"time":1781937105131,"pid":10624,"hostname":"semi-win-dev3","event":"proxyRequest","err":"errReqUrlInvalid"}
2
+ {"level":50,"time":1781937144581,"pid":10624,"hostname":"semi-win-dev3","event":"proxyRequest","err":"errReqUrlInvalid"}
@@ -0,0 +1 @@
1
+ {"level":50,"time":1782044666261,"pid":18148,"hostname":"semi-win-dev3","event":"proxyRequest","err":"errReqUrlInvalid"}
@@ -0,0 +1,4 @@
1
+ {"level":50,"time":1782047515013,"pid":18320,"hostname":"semi-win-dev3","event":"proxyRequest","err":"errReqUrlInvalid"}
2
+ {"level":50,"time":1782047552686,"pid":18320,"hostname":"semi-win-dev3","event":"proxyRequest","err":"errReqUrlInvalid"}
3
+ {"level":50,"time":1782048081069,"pid":12768,"hostname":"semi-win-dev3","event":"proxyRequest","err":"errReqUrlInvalid"}
4
+ {"level":50,"time":1782048118569,"pid":12768,"hostname":"semi-win-dev3","event":"proxyRequest","err":"errReqUrlInvalid"}
@@ -0,0 +1,12 @@
1
+ {"level":30,"time":1782085260282,"pid":15936,"hostname":"semi-win-dev3","event":"verifyClientUser","from":"getUserByToken","userId":"id-for-admin"}
2
+ {"level":30,"time":1782085260282,"pid":15936,"hostname":"semi-win-dev3","event":"api/getUserByToken","userId":"id-for-admin"}
3
+ {"level":30,"time":1782085262399,"pid":15936,"hostname":"semi-win-dev3","event":"verifyConn","apiType":"main"}
4
+ {"level":30,"time":1782085262418,"pid":15936,"hostname":"semi-win-dev3","event":"verifyConn","apiType":"main"}
5
+ {"level":30,"time":1782085262426,"pid":15936,"hostname":"semi-win-dev3","event":"verifyConn","apiType":"main"}
6
+ {"level":30,"time":1782085262428,"pid":15936,"hostname":"semi-win-dev3","event":"verifyConn","apiType":"main"}
7
+ {"level":30,"time":1782085262429,"pid":15936,"hostname":"semi-win-dev3","event":"kpfun-getWebInfor"}
8
+ {"level":30,"time":1782085262493,"pid":15936,"hostname":"semi-win-dev3","event":"verifyConn","apiType":"main"}
9
+ {"level":30,"time":1782085263657,"pid":15936,"hostname":"semi-win-dev3","event":"verifyConn","apiType":"main"}
10
+ {"level":30,"time":1782085263695,"pid":15936,"hostname":"semi-win-dev3","event":"kpfun-getStaEvent"}
11
+ {"level":30,"time":1782085264394,"pid":15936,"hostname":"semi-win-dev3","event":"verifyConn","apiType":"main"}
12
+ {"level":30,"time":1782085266394,"pid":15936,"hostname":"semi-win-dev3","event":"verifyConn","apiType":"main"}