w-web-api 1.0.42 → 1.0.44

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.
@@ -2,6 +2,7 @@ import path from 'path'
2
2
  import fs from 'fs'
3
3
  import get from 'lodash-es/get.js'
4
4
  import each from 'lodash-es/each.js'
5
+ import map from 'lodash-es/map.js'
5
6
  import keys from 'lodash-es/keys.js'
6
7
  import j2o from 'wsemi/src/j2o.mjs'
7
8
  import iseobj from 'wsemi/src/iseobj.mjs'
@@ -18,6 +19,7 @@ import strright from 'wsemi/src/strright.mjs'
18
19
  import strdelright from 'wsemi/src/strdelright.mjs'
19
20
  import pm2resolve from 'wsemi/src/pm2resolve.mjs'
20
21
  import b642str from 'wsemi/src/b642str.mjs'
22
+ import ltdtmapping from 'wsemi/src/ltdtmapping.mjs'
21
23
  import fsIsFolder from 'wsemi/src/fsIsFolder.mjs'
22
24
  import fsIsFile from 'wsemi/src/fsIsFile.mjs'
23
25
  import replace from 'wsemi/src/replace.mjs'
@@ -378,129 +380,139 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
378
380
  }
379
381
 
380
382
 
381
- //getAPIsList
382
- let getAPIsList = async (query = {}) => {
383
- let rs = await woItems.apis.select(query)
384
- return rs
385
- }
383
+ // //getAPIsList
384
+ // let getAPIsList = async (query = {}) => {
385
+ // let rs = await woItems.apis.select(query)
386
+ // return rs
387
+ // }
386
388
 
387
389
 
388
390
  //parsePayload
389
391
  let parsePayload = async (req) => {
390
392
 
391
- //inp
392
- let inp = get(req, 'payload')
393
+ //payload
394
+ let payload = get(req, 'payload')
393
395
 
394
396
  //to obj
395
- if (isestr(inp)) {
396
- inp = j2o(inp)
397
+ if (isestr(payload)) {
398
+ payload = j2o(payload)
397
399
  }
398
400
 
399
401
  //check
400
- if (!iseobj(inp)) {
401
- console.log('inp', inp)
402
- console.log(`invalid inp from req`)
403
- return Promise.reject(`invalid inp from req`)
402
+ if (!iseobj(payload)) {
403
+ console.log('payload', payload)
404
+ console.log(`invalid payload in req`)
405
+ return Promise.reject(`invalid payload in req`)
404
406
  }
405
407
 
406
408
  //group
407
- let group = get(inp, 'group', '')
409
+ let group = get(payload, 'group', '')
408
410
 
409
411
  //check
410
412
  if (!isestr(group)) {
411
- console.log('inp', inp)
412
- console.log('group', group)
413
- console.log(`invalid group from inp`)
414
- return Promise.reject(`invalid group from inp`)
413
+ console.log('payload', payload)
414
+ console.log(`invalid group in payload`)
415
+ return Promise.reject(`invalid group in payload`)
415
416
  }
416
417
 
417
- //apis
418
- let apis = get(inp, 'apis', [])
418
+ //rows
419
+ let rows = get(payload, 'rows', [])
419
420
 
420
421
  //check
421
- if (!isearr(apis)) {
422
- console.log('inp', inp)
423
- console.log('apis', apis)
424
- console.log(`invalid apis from inp`)
425
- return Promise.reject(`invalid apis from inp`)
422
+ if (!isearr(rows)) {
423
+ console.log('payload', payload)
424
+ console.log(`invalid rows in payload`)
425
+ return Promise.reject(`invalid rows in payload`)
426
426
  }
427
427
 
428
- //偵測b64自動恢復
429
- each(apis, (api, kapi) => {
430
- // console.log(kapi, api.name)
431
- each(api, (v, k) => {
432
- // console.log(k, v)
433
- if (isestr(v)) {
434
- if (strleft(v, 7) === 'base64:') {
435
- // console.log(k, 'get base64')
436
- v = strdelleft(v, 7)
437
- v = b642str(v)
438
- // console.log(v)
439
- apis[kapi][k] = v
440
- }
441
- }
442
- })
443
- })
444
-
445
- //save group
446
- each(apis, (api, kapi) => {
447
- apis[kapi].group = group
448
- })
449
-
450
- //resave
451
- inp = { group, apis }
428
+ //r
429
+ let r = {
430
+ group,
431
+ rows,
432
+ }
452
433
 
453
- return inp
434
+ return r
454
435
  }
455
436
 
456
437
 
457
- //updateAPIs
458
- let updateAPIs = async (params = {}) => {
438
+ // //updateAPIs
439
+ // let updateAPIs = async (inp = {}) => {
459
440
 
460
- //spread params
461
- let { apis: rsApis } = params
462
- // console.log('group', group)
463
- // console.log('rsApis', rsApis)
441
+ // //spread inp
442
+ // let { apis: rsApis } = inp
443
+ // // console.log('group', group)
444
+ // // console.log('rsApis', rsApis)
464
445
 
465
- //save
466
- let r = await woItems.apis.save(rsApis)
446
+ // //save
447
+ // let r = await woItems.apis.save(rsApis)
467
448
 
468
- return r
469
- }
449
+ // return r
450
+ // }
470
451
 
471
452
 
472
- //syncAndReplaceApis
473
- let syncAndReplaceApis = async (params) => {
453
+ //syncAndReplaceTabs
454
+ let syncAndReplaceTabs = async (userId, inp, keyTable) => {
474
455
 
475
456
  //group
476
- let group = get(params, 'group', '')
457
+ let group = get(inp, 'group', '')
477
458
  // console.log('group', group)
478
459
 
479
460
  //check
480
461
  if (!isestr(group)) {
481
- console.log('params', params)
462
+ console.log('inp', inp)
482
463
  console.log('group', group)
483
464
  console.log(`invalid group`)
484
465
  return Promise.reject(`invalid group`)
485
466
  }
486
467
 
487
- //apis
488
- let apis = get(params, 'apis', [])
489
- // console.log('apis', apis)
468
+ //rows
469
+ let rows = get(inp, 'rows', [])
470
+ // console.log('rows', rows)
490
471
 
491
472
  //check
492
- if (!isearr(apis)) {
493
- console.log('params', params)
494
- console.log('apis', apis)
495
- console.log(`invalid apis`)
496
- return Promise.reject(`invalid apis`)
473
+ if (!isearr(rows)) {
474
+ console.log('inp', inp)
475
+ console.log('keyTable', keyTable)
476
+ return Promise.reject(`invalid rows`)
497
477
  }
498
478
 
479
+ //save from
480
+ rows = map(rows, (v, k) => {
481
+ // v.order = k + 1 //order大部分由外部給予, 不能複寫
482
+ v.group = group
483
+ return v
484
+ })
485
+
486
+ //偵測b64自動恢復
487
+ if (keyTable === 'apis') {
488
+ each(rows, (row, krow) => {
489
+ // console.log(kapi, row.name)
490
+ each(row, (v, k) => {
491
+ // console.log(k, v)
492
+ if (isestr(v)) {
493
+ if (strleft(v, 7) === 'base64:') {
494
+ // console.log(k, 'get base64')
495
+ v = strdelleft(v, 7)
496
+ v = b642str(v)
497
+ // console.log(v)
498
+ rows[krow][k] = v
499
+ }
500
+ }
501
+ })
502
+ })
503
+ }
504
+
505
+ //ltdtmapping
506
+ rows = ltdtmapping(rows, ds[keyTable].keys)
507
+ // console.log('ltdtmapping rows', rows)
508
+
499
509
  //delAll group
500
- await woItems.apis.delAll({ group })
510
+ await woItems[keyTable].delAll({ group })
501
511
 
502
512
  //insert
503
- let r = await woItems.apis.insert(apis)
513
+ // let r = await woItems[keyTable].insert(rows)
514
+ let r = await procOrm(userId, keyTable, 'insert', rows) //須使用procOrm才有辦法自動給予相關欄位
515
+ // console.log('r', r)
504
516
 
505
517
  return r
506
518
  }
@@ -542,21 +554,10 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
542
554
 
543
555
  //apis
544
556
  let apis = [
545
- // {
546
- // method: 'GET',
547
- // path: '/api/someAPI',
548
- // handler: async function (req, res) {
549
-
550
- // // //token
551
- // // let token = get(req, 'query.token', '')
552
-
553
- // return 'someAPI'
554
- // },
555
- // },
556
557
 
557
558
  {
558
559
  method: 'GET',
559
- path: '/api/getUserByToken', //未登入界面需先檢測token是否為系統管理員, 確認後回傳為系統管理員資訊物件, getUserByToken為w-ui-loginout預設值, 若要更改兩邊須同時修改
560
+ path: '/api/getUserByToken', //未登入主頁時需先檢測token, getUserByToken為w-ui-loginout預設值, 若要更改兩邊須同時修改
560
561
  handler: async function (req, res) {
561
562
  // console.log('getUserByToken', req)
562
563
 
@@ -565,6 +566,15 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
565
566
  //token
566
567
  let token = get(req, 'query.token', '')
567
568
 
569
+ //check
570
+ if (!isestr(token)) {
571
+ console.log('req.query', get(req, 'query'))
572
+ console.log('token', token)
573
+ console.log('[API]getUserByToken/check token: invalid token')
574
+ console.log(`token does not have permission`)
575
+ return Promise.reject(`token does not have permission`)
576
+ }
577
+
568
578
  //getAndVerifyClientUser
569
579
  let user = await getAndVerifyClientUser(token, 'getUserByToken')
570
580
 
@@ -589,49 +599,112 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
589
599
  return r
590
600
  },
591
601
  },
592
- {
593
- method: 'GET',
594
- path: '/getAPIsList',
595
- handler: async function (req, res) {
596
- // console.log('getAPIsList', req)
597
-
598
- async function core() {
599
-
600
- //token
601
- let token = get(req, 'query.token', '')
602
-
603
- //getAndVerifyClientUser
604
- let user = await getAndVerifyClientUser(token, 'getAPIsList')
605
-
606
- //check
607
- if (!iseobj(user)) {
608
- console.log('token', token)
609
- console.log('[API]getAPIsList/check user: invalid user')
610
- console.log(`token does not have permission`)
611
- return Promise.reject(`token does not have permission`)
612
- }
613
-
614
- //getAPIsList
615
- let r = await getAPIsList({ isActive: 'y' })
616
602
 
617
- return r
618
- }
603
+ // {
604
+ // method: 'GET',
605
+ // path: '/getAPIsList',
606
+ // handler: async function (req, res) {
607
+ // // console.log('getAPIsList', req)
608
+
609
+ // async function core() {
610
+
611
+ // //token
612
+ // let token = get(req, 'query.token', '')
613
+
614
+ // //check
615
+ // if (!isestr(token)) {
616
+ // console.log('req.query', get(req, 'query'))
617
+ // console.log('token', token)
618
+ // console.log('[API]getAPIsList/check token: invalid token')
619
+ // console.log(`token does not have permission`)
620
+ // return Promise.reject(`token does not have permission`)
621
+ // }
622
+
623
+ // //getAndVerifyClientUser
624
+ // let user = await getAndVerifyClientUser(token, 'getAPIsList')
625
+
626
+ // //check
627
+ // if (!iseobj(user)) {
628
+ // console.log('token', token)
629
+ // console.log('[API]getAPIsList/check user: invalid user')
630
+ // console.log(`token does not have permission`)
631
+ // return Promise.reject(`token does not have permission`)
632
+ // }
633
+
634
+ // //getAPIsList
635
+ // let r = await getAPIsList({ isActive: 'y' })
636
+
637
+ // return r
638
+ // }
639
+
640
+ // //pm2resolve core
641
+ // let r = await pm2resolve(core)()
642
+ // if (isErr(r.msg)) {
643
+ // r.msg = r.msg.message
644
+ // }
645
+ // // console.log('getAPIsList', r)
646
+
647
+ // return r
648
+ // },
649
+ // },
619
650
 
620
- //pm2resolve core
621
- let r = await pm2resolve(core)()
622
- if (isErr(r.msg)) {
623
- r.msg = r.msg.message
624
- }
625
- // console.log('getAPIsList', r)
651
+ // {
652
+ // method: 'POST',
653
+ // path: '/updateAPIs',
654
+ // handler: async function (req, res) {
655
+ // // console.log('updateAPIs', req)
656
+ // // console.log('payload', req.payload)
657
+
658
+ // async function core() {
659
+
660
+ // //token
661
+ // let token = get(req, 'query.token', '')
662
+
663
+ // //check
664
+ // if (!isestr(token)) {
665
+ // console.log('req.query', get(req, 'query'))
666
+ // console.log('token', token)
667
+ // console.log('[API]updateAPIs/check token: invalid token')
668
+ // console.log(`token does not have permission`)
669
+ // return Promise.reject(`token does not have permission`)
670
+ // }
671
+
672
+ // //getAndVerifyClientUser
673
+ // let user = await getAndVerifyClientUser(token, 'updateAPIs')
674
+
675
+ // //check
676
+ // if (!iseobj(user)) {
677
+ // console.log('token', token)
678
+ // console.log('[API]updateAPIs/check user: invalid user')
679
+ // console.log(`token does not have permission`)
680
+ // return Promise.reject(`token does not have permission`)
681
+ // }
682
+
683
+ // //parsePayload
684
+ // let inp = await parsePayload(req)
685
+
686
+ // //updateAPIs
687
+ // let r = await updateAPIs(inp)
688
+
689
+ // return r
690
+ // }
691
+
692
+ // //pm2resolve core
693
+ // let r = await pm2resolve(core)()
694
+ // if (isErr(r.msg)) {
695
+ // r.msg = r.msg.message
696
+ // }
697
+ // // console.log('updateAPIs', r)
698
+
699
+ // return r
700
+ // },
701
+ // },
626
702
 
627
- return r
628
- },
629
- },
630
703
  {
631
704
  method: 'POST',
632
- path: '/updateAPIs',
705
+ path: '/syncAndReplaceTabs',
633
706
  handler: async function (req, res) {
634
- // console.log('updateAPIs', req)
707
+ // console.log('syncAndReplaceTabs', req)
635
708
  // console.log('payload', req.payload)
636
709
 
637
710
  async function core() {
@@ -639,55 +712,53 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
639
712
  //token
640
713
  let token = get(req, 'query.token', '')
641
714
 
642
- //getAndVerifyClientUser
643
- let user = await getAndVerifyClientUser(token, 'updateAPIs')
644
-
645
715
  //check
646
- if (!iseobj(user)) {
716
+ if (!isestr(token)) {
717
+ console.log('req.query', get(req, 'query'))
647
718
  console.log('token', token)
648
- console.log('[API]updateAPIs/check user: invalid user')
719
+ console.log('[API]syncAndReplaceTabs/check token: invalid token')
649
720
  console.log(`token does not have permission`)
650
721
  return Promise.reject(`token does not have permission`)
651
722
  }
652
723
 
653
- //parsePayload
654
- let inp = await parsePayload(req)
655
-
656
- //updateAPIs
657
- let r = await updateAPIs(inp)
658
-
659
- return r
660
- }
661
-
662
- //pm2resolve core
663
- let r = await pm2resolve(core)()
664
- if (isErr(r.msg)) {
665
- r.msg = r.msg.message
666
- }
667
- // console.log('updateAPIs', r)
668
-
669
- return r
670
- },
671
- },
672
- {
673
- method: 'POST',
674
- path: '/syncAndReplaceApis',
675
- handler: async function (req, res) {
676
- // console.log('syncAndReplaceApis', req)
677
- // console.log('payload', req.payload)
724
+ //keyTable
725
+ let keyTable = get(req, 'query.keyTable', '')
678
726
 
679
- async function core() {
727
+ //check
728
+ if (!isestr(keyTable)) {
729
+ console.log('req.query', get(req, 'query'))
730
+ console.log('keyTable', keyTable)
731
+ console.log('[API]syncAndReplaceTabs/check keyTable: invalid keyTable')
732
+ console.log(`token does not have permission`)
733
+ return Promise.reject(`token does not have permission`)
734
+ }
680
735
 
681
- //token
682
- let token = get(req, 'query.token', '')
736
+ //check keyTable
737
+ let allowedTables = ['apis']
738
+ if (!allowedTables.includes(keyTable)) {
739
+ console.log('[API]syncAndReplaceTabs/check keyTable: unexpected keyTable', keyTable)
740
+ return Promise.reject(`invalid keyTable: ${keyTable}`)
741
+ }
683
742
 
684
743
  //getAndVerifyAppUser
685
- let user = await getAndVerifyAppUser(token, 'syncAndReplaceApis')
744
+ let user = await getAndVerifyAppUser(token, 'syncAndReplaceTabs')
686
745
 
687
746
  //check
688
747
  if (!iseobj(user)) {
689
748
  console.log('token', token)
690
- console.log('[API]syncAndReplaceApis/check user: invalid user')
749
+ console.log('[API]syncAndReplaceTabs/check user: invalid user')
750
+ console.log(`token does not have permission`)
751
+ return Promise.reject(`token does not have permission`)
752
+ }
753
+
754
+ //userId
755
+ let userId = get(user, 'id', '')
756
+
757
+ //check userId
758
+ if (!isestr(userId)) {
759
+ console.log('token', token)
760
+ console.log('user', user)
761
+ console.log('[API]syncAndReplaceTabs/check userId: invalid userId')
691
762
  console.log(`token does not have permission`)
692
763
  return Promise.reject(`token does not have permission`)
693
764
  }
@@ -695,8 +766,8 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
695
766
  //parsePayload
696
767
  let inp = await parsePayload(req)
697
768
 
698
- //syncAndReplaceApis
699
- let r = await syncAndReplaceApis(inp)
769
+ //syncAndReplaceTabs
770
+ let r = await syncAndReplaceTabs(userId, inp, keyTable)
700
771
 
701
772
  return r
702
773
  }
@@ -706,11 +777,12 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
706
777
  if (isErr(r.msg)) {
707
778
  r.msg = r.msg.message
708
779
  }
709
- // console.log('syncAndReplaceApis', r)
780
+ // console.log('syncAndReplaceTabs', r)
710
781
 
711
782
  return r
712
783
  },
713
784
  },
785
+
714
786
  ]
715
787
 
716
788
 
@@ -772,11 +844,10 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
772
844
 
773
845
  getWebInfor,
774
846
 
775
- getAPIsList: (userId, query = {}) => {
776
- return getAPIsList(query)
777
- },
778
-
779
- // updateApis: (userId, rows) => {
847
+ // getAPIsList: (userId, query = {}) => { //待提供api管理系統界面使用
848
+ // return getAPIsList(query)
849
+ // },
850
+ // updateApis: (userId, rows) => { //待提供api管理系統界面使用
780
851
  // return updateApis(rows)
781
852
  // },
782
853
 
@@ -0,0 +1,89 @@
1
+ import axios from 'axios'
2
+ import get from 'lodash-es/get.js'
3
+ import genPm from 'wsemi/src/genPm.mjs'
4
+ import haskey from 'wsemi/src/haskey.mjs'
5
+ import ltdtpick from 'wsemi/src/ltdtpick.mjs'
6
+
7
+
8
+ //kpKs
9
+ let ks_apis = [
10
+ 'id', //'id-for-apis-pets-guineapigs-1'
11
+ 'order', //0
12
+ 'name', //'取得天竺鼠清單資訊'
13
+ 'description', //'取得天竺鼠清單資訊'
14
+ 'url', //指api網址, 例如 http://localhost:11005/getDogsList
15
+ 'method', //'get'
16
+ 'version', //'v1'
17
+ 'group', //'寵物'
18
+ 'levels', //'寵物.天竺鼠'
19
+ 'keywords', //'pets;guineapigs'
20
+ 'state', //'ok'
21
+ 'creator', //'pets-system'
22
+ 'dataSource', //'pets-data'
23
+ 'mdInputParams', //輸入方式說明, markdown格式
24
+ 'inputExample', //輸入範例數據
25
+ 'mdOutputParams', //輸出方式說明, markdown格式
26
+ 'outputExample', //輸出範例數據, json格式
27
+ ]
28
+ let kpKs = {
29
+ ks_apis,
30
+ }
31
+
32
+
33
+ async function provideTabs(url, keyTable, group, rows) {
34
+ //url: 伺服器提供的接入網址, 例如 http://localhost:11005/syncAndReplaceTabs?token={token}&keyTable={keyTable}
35
+ //keyTable: 資料表名
36
+ //group: 指陣列數據所屬群組
37
+ //rows: 陣列數據
38
+
39
+ //pm
40
+ let pm = genPm()
41
+
42
+ //ks
43
+ if (!haskey(kpKs, `ks_${keyTable}`)) {
44
+ return Promise.reject(`invalid keyTable[${keyTable}]`)
45
+ }
46
+ let ks = kpKs[`ks_${keyTable}`]
47
+ // console.log('ks', ks)
48
+
49
+ //ltdtpick
50
+ rows = ltdtpick(rows, ks)
51
+ // console.log('rows', rows)
52
+
53
+ //rin
54
+ let rin = {
55
+ group,
56
+ rows,
57
+ }
58
+ // console.log('rin', rin)
59
+
60
+ //axios
61
+ await axios({
62
+ method: 'post',
63
+ url,
64
+ headers: { 'Content-Type': 'application/json; charset=utf-8' },
65
+ data: rin,
66
+ })
67
+ .then((res) => {
68
+ // console.log('then', res)
69
+ let data = get(res, 'data')
70
+ let state = get(data, 'state')
71
+ let msg = get(data, 'msg', '')
72
+ if (state === 'success') {
73
+ pm.resolve(msg)
74
+ }
75
+ else {
76
+ pm.reject(msg)
77
+ }
78
+
79
+ })
80
+ .catch((err) => {
81
+ // console.log('catch', err)
82
+ pm.reject(err)
83
+ })
84
+
85
+ return pm
86
+ }
87
+
88
+
89
+ export default provideTabs
package/srv.mjs CHANGED
@@ -55,15 +55,15 @@ let getUserByToken = async (token) => {
55
55
 
56
56
  let verifyClientUser = (user, from) => {
57
57
  console.log('verifyClientUser/user', user)
58
- // return false //測試無法登入
59
58
  console.log('於生產環境時得加入限制瀏覽器使用者身份機制')
59
+ // return false //測試無法登入
60
60
  return user.isAdmin === 'y' //測試僅系統管理者使用
61
61
  }
62
62
 
63
63
  let verifyAppUser = (user, from) => {
64
64
  console.log('verifyAppUser/user', user)
65
- // return false //測試無法登入
66
65
  console.log('於生產環境時得加入限制應用程式使用者身份機制')
66
+ // return false //測試無法登入
67
67
  return user.isAdmin === 'y' //測試僅系統管理者使用
68
68
  }
69
69
 
package/tableTags.json CHANGED
@@ -1 +1 @@
1
- {"apis":"2025-07-14T17:58:41+08:00|C6dsva"}
1
+ {"apis":"2025-07-20T22:07:21+08:00|DSiCoa"}