w-web-api 1.0.42 → 1.0.43

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/docs/WWebApi.html CHANGED
@@ -80,7 +80,7 @@
80
80
 
81
81
  <dt class="tag-source">Source:</dt>
82
82
  <dd class="tag-source"><ul class="dummy"><li>
83
- <a href="WWebApi.mjs.html">WWebApi.mjs</a>, <a href="WWebApi.mjs.html#line129">line 129</a>
83
+ <a href="WWebApi.mjs.html">WWebApi.mjs</a>, <a href="WWebApi.mjs.html#line131">line 131</a>
84
84
  </li></ul></dd>
85
85
 
86
86
 
@@ -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.2</a> on Mon Jul 14 2025 20:34:11 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.2</a> on Sun Jul 20 2025 22:09:28 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
889
889
  </footer>
890
890
 
891
891
  <script>prettyPrint();</script>
@@ -49,6 +49,7 @@
49
49
  import fs from 'fs'
50
50
  import get from 'lodash-es/get.js'
51
51
  import each from 'lodash-es/each.js'
52
+ import map from 'lodash-es/map.js'
52
53
  import keys from 'lodash-es/keys.js'
53
54
  import j2o from 'wsemi/src/j2o.mjs'
54
55
  import iseobj from 'wsemi/src/iseobj.mjs'
@@ -65,6 +66,7 @@ import strright from 'wsemi/src/strright.mjs'
65
66
  import strdelright from 'wsemi/src/strdelright.mjs'
66
67
  import pm2resolve from 'wsemi/src/pm2resolve.mjs'
67
68
  import b642str from 'wsemi/src/b642str.mjs'
69
+ import ltdtmapping from 'wsemi/src/ltdtmapping.mjs'
68
70
  import fsIsFolder from 'wsemi/src/fsIsFolder.mjs'
69
71
  import fsIsFile from 'wsemi/src/fsIsFile.mjs'
70
72
  import replace from 'wsemi/src/replace.mjs'
@@ -425,129 +427,138 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
425
427
  }
426
428
 
427
429
 
428
- //getAPIsList
429
- let getAPIsList = async (query = {}) => {
430
- let rs = await woItems.apis.select(query)
431
- return rs
432
- }
430
+ // //getAPIsList
431
+ // let getAPIsList = async (query = {}) => {
432
+ // let rs = await woItems.apis.select(query)
433
+ // return rs
434
+ // }
433
435
 
434
436
 
435
437
  //parsePayload
436
438
  let parsePayload = async (req) => {
437
439
 
438
- //inp
439
- let inp = get(req, 'payload')
440
+ //payload
441
+ let payload = get(req, 'payload')
440
442
 
441
443
  //to obj
442
- if (isestr(inp)) {
443
- inp = j2o(inp)
444
+ if (isestr(payload)) {
445
+ payload = j2o(payload)
444
446
  }
445
447
 
446
448
  //check
447
- if (!iseobj(inp)) {
448
- console.log('inp', inp)
449
- console.log(`invalid inp from req`)
450
- return Promise.reject(`invalid inp from req`)
449
+ if (!iseobj(payload)) {
450
+ console.log('payload', payload)
451
+ console.log(`invalid payload in req`)
452
+ return Promise.reject(`invalid payload in req`)
451
453
  }
452
454
 
453
455
  //group
454
- let group = get(inp, 'group', '')
456
+ let group = get(payload, 'group', '')
455
457
 
456
458
  //check
457
459
  if (!isestr(group)) {
458
- console.log('inp', inp)
459
- console.log('group', group)
460
- console.log(`invalid group from inp`)
461
- return Promise.reject(`invalid group from inp`)
460
+ console.log('payload', payload)
461
+ console.log(`invalid group in payload`)
462
+ return Promise.reject(`invalid group in payload`)
462
463
  }
463
464
 
464
- //apis
465
- let apis = get(inp, 'apis', [])
465
+ //rows
466
+ let rows = get(payload, 'rows', [])
466
467
 
467
468
  //check
468
- if (!isearr(apis)) {
469
- console.log('inp', inp)
470
- console.log('apis', apis)
471
- console.log(`invalid apis from inp`)
472
- return Promise.reject(`invalid apis from inp`)
469
+ if (!isearr(rows)) {
470
+ console.log('payload', payload)
471
+ console.log(`invalid rows in payload`)
472
+ return Promise.reject(`invalid rows in payload`)
473
473
  }
474
474
 
475
- //偵測b64自動恢復
476
- each(apis, (api, kapi) => {
477
- // console.log(kapi, api.name)
478
- each(api, (v, k) => {
479
- // console.log(k, v)
480
- if (isestr(v)) {
481
- if (strleft(v, 7) === 'base64:') {
482
- // console.log(k, 'get base64')
483
- v = strdelleft(v, 7)
484
- v = b642str(v)
485
- // console.log(v)
486
- apis[kapi][k] = v
487
- }
488
- }
489
- })
490
- })
491
-
492
- //save group
493
- each(apis, (api, kapi) => {
494
- apis[kapi].group = group
495
- })
496
-
497
- //resave
498
- inp = { group, apis }
475
+ //r
476
+ let r = {
477
+ group,
478
+ rows,
479
+ }
499
480
 
500
- return inp
481
+ return r
501
482
  }
502
483
 
503
484
 
504
- //updateAPIs
505
- let updateAPIs = async (params = {}) => {
485
+ // //updateAPIs
486
+ // let updateAPIs = async (inp = {}) => {
506
487
 
507
- //spread params
508
- let { apis: rsApis } = params
509
- // console.log('group', group)
510
- // console.log('rsApis', rsApis)
488
+ // //spread inp
489
+ // let { apis: rsApis } = inp
490
+ // // console.log('group', group)
491
+ // // console.log('rsApis', rsApis)
511
492
 
512
- //save
513
- let r = await woItems.apis.save(rsApis)
493
+ // //save
494
+ // let r = await woItems.apis.save(rsApis)
514
495
 
515
- return r
516
- }
496
+ // return r
497
+ // }
517
498
 
518
499
 
519
- //syncAndReplaceApis
520
- let syncAndReplaceApis = async (params) => {
500
+ //syncAndReplaceTabs
501
+ let syncAndReplaceTabs = async (userId, inp, keyTable) => {
521
502
 
522
503
  //group
523
- let group = get(params, 'group', '')
504
+ let group = get(inp, 'group', '')
524
505
  // console.log('group', group)
525
506
 
526
507
  //check
527
508
  if (!isestr(group)) {
528
- console.log('params', params)
509
+ console.log('inp', inp)
529
510
  console.log('group', group)
530
511
  console.log(`invalid group`)
531
512
  return Promise.reject(`invalid group`)
532
513
  }
533
514
 
534
- //apis
535
- let apis = get(params, 'apis', [])
536
- // console.log('apis', apis)
515
+ //rows
516
+ let rows = get(inp, 'rows', [])
517
+ // console.log('rows', rows)
537
518
 
538
519
  //check
539
- if (!isearr(apis)) {
540
- console.log('params', params)
541
- console.log('apis', apis)
542
- console.log(`invalid apis`)
543
- return Promise.reject(`invalid apis`)
520
+ if (!isearr(rows)) {
521
+ console.log('inp', inp)
522
+ console.log('keyTable', keyTable)
523
+ return Promise.reject(`invalid rows`)
524
+ }
525
+
526
+ //save from
527
+ rows = map(rows, (v, k) => {
528
+ // v.order = k + 1 //order大部分由外部給予, 不能複寫
529
+ v.group = group
530
+ return v
531
+ })
532
+
533
+ //偵測b64自動恢復
534
+ if (keyTable === 'apis') {
535
+ each(rows, (row, krow) => {
536
+ // console.log(kapi, row.name)
537
+ each(row, (v, k) => {
538
+ // console.log(k, v)
539
+ if (isestr(v)) {
540
+ if (strleft(v, 7) === 'base64:') {
541
+ // console.log(k, 'get base64')
542
+ v = strdelleft(v, 7)
543
+ v = b642str(v)
544
+ // console.log(v)
545
+ rows[krow][k] = v
546
+ }
547
+ }
548
+ })
549
+ })
544
550
  }
545
551
 
552
+ //ltdtmapping
553
+ rows = ltdtmapping(rows, ds[keyTable].keys)
554
+ // console.log('ltdtmapping rows', rows)
555
+
546
556
  //delAll group
547
- await woItems.apis.delAll({ group })
557
+ await woItems[keyTable].delAll({ group })
548
558
 
549
559
  //insert
550
- let r = await woItems.apis.insert(apis)
560
+ // let r = await woItems[keyTable].insert(rows)
561
+ let r = await procOrm(userId, keyTable, 'insert', rows) //須使用procOrm才有辦法自動給予相關欄位
551
562
 
552
563
  return r
553
564
  }
@@ -603,7 +614,7 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
603
614
 
604
615
  {
605
616
  method: 'GET',
606
- path: '/api/getUserByToken', //未登入界面需先檢測token是否為系統管理員, 確認後回傳為系統管理員資訊物件, getUserByToken為w-ui-loginout預設值, 若要更改兩邊須同時修改
617
+ path: '/api/getUserByToken', //未登入主頁時需先檢測token, getUserByToken為w-ui-loginout預設值, 若要更改兩邊須同時修改
607
618
  handler: async function (req, res) {
608
619
  // console.log('getUserByToken', req)
609
620
 
@@ -612,6 +623,15 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
612
623
  //token
613
624
  let token = get(req, 'query.token', '')
614
625
 
626
+ //check
627
+ if (!isestr(token)) {
628
+ console.log('req.query', get(req, 'query'))
629
+ console.log('token', token)
630
+ console.log('[API]getUserByToken/check token: invalid token')
631
+ console.log(`token does not have permission`)
632
+ return Promise.reject(`token does not have permission`)
633
+ }
634
+
615
635
  //getAndVerifyClientUser
616
636
  let user = await getAndVerifyClientUser(token, 'getUserByToken')
617
637
 
@@ -636,49 +656,112 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
636
656
  return r
637
657
  },
638
658
  },
639
- {
640
- method: 'GET',
641
- path: '/getAPIsList',
642
- handler: async function (req, res) {
643
- // console.log('getAPIsList', req)
644
-
645
- async function core() {
646
-
647
- //token
648
- let token = get(req, 'query.token', '')
649
-
650
- //getAndVerifyClientUser
651
- let user = await getAndVerifyClientUser(token, 'getAPIsList')
652
-
653
- //check
654
- if (!iseobj(user)) {
655
- console.log('token', token)
656
- console.log('[API]getAPIsList/check user: invalid user')
657
- console.log(`token does not have permission`)
658
- return Promise.reject(`token does not have permission`)
659
- }
660
-
661
- //getAPIsList
662
- let r = await getAPIsList({ isActive: 'y' })
663
659
 
664
- return r
665
- }
660
+ // {
661
+ // method: 'GET',
662
+ // path: '/getAPIsList',
663
+ // handler: async function (req, res) {
664
+ // // console.log('getAPIsList', req)
665
+
666
+ // async function core() {
667
+
668
+ // //token
669
+ // let token = get(req, 'query.token', '')
670
+
671
+ // //check
672
+ // if (!isestr(token)) {
673
+ // console.log('req.query', get(req, 'query'))
674
+ // console.log('token', token)
675
+ // console.log('[API]getAPIsList/check token: invalid token')
676
+ // console.log(`token does not have permission`)
677
+ // return Promise.reject(`token does not have permission`)
678
+ // }
679
+
680
+ // //getAndVerifyClientUser
681
+ // let user = await getAndVerifyClientUser(token, 'getAPIsList')
682
+
683
+ // //check
684
+ // if (!iseobj(user)) {
685
+ // console.log('token', token)
686
+ // console.log('[API]getAPIsList/check user: invalid user')
687
+ // console.log(`token does not have permission`)
688
+ // return Promise.reject(`token does not have permission`)
689
+ // }
690
+
691
+ // //getAPIsList
692
+ // let r = await getAPIsList({ isActive: 'y' })
693
+
694
+ // return r
695
+ // }
696
+
697
+ // //pm2resolve core
698
+ // let r = await pm2resolve(core)()
699
+ // if (isErr(r.msg)) {
700
+ // r.msg = r.msg.message
701
+ // }
702
+ // // console.log('getAPIsList', r)
703
+
704
+ // return r
705
+ // },
706
+ // },
666
707
 
667
- //pm2resolve core
668
- let r = await pm2resolve(core)()
669
- if (isErr(r.msg)) {
670
- r.msg = r.msg.message
671
- }
672
- // console.log('getAPIsList', r)
708
+ // {
709
+ // method: 'POST',
710
+ // path: '/updateAPIs',
711
+ // handler: async function (req, res) {
712
+ // // console.log('updateAPIs', req)
713
+ // // console.log('payload', req.payload)
714
+
715
+ // async function core() {
716
+
717
+ // //token
718
+ // let token = get(req, 'query.token', '')
719
+
720
+ // //check
721
+ // if (!isestr(token)) {
722
+ // console.log('req.query', get(req, 'query'))
723
+ // console.log('token', token)
724
+ // console.log('[API]updateAPIs/check token: invalid token')
725
+ // console.log(`token does not have permission`)
726
+ // return Promise.reject(`token does not have permission`)
727
+ // }
728
+
729
+ // //getAndVerifyClientUser
730
+ // let user = await getAndVerifyClientUser(token, 'updateAPIs')
731
+
732
+ // //check
733
+ // if (!iseobj(user)) {
734
+ // console.log('token', token)
735
+ // console.log('[API]updateAPIs/check user: invalid user')
736
+ // console.log(`token does not have permission`)
737
+ // return Promise.reject(`token does not have permission`)
738
+ // }
739
+
740
+ // //parsePayload
741
+ // let inp = await parsePayload(req)
742
+
743
+ // //updateAPIs
744
+ // let r = await updateAPIs(inp)
745
+
746
+ // return r
747
+ // }
748
+
749
+ // //pm2resolve core
750
+ // let r = await pm2resolve(core)()
751
+ // if (isErr(r.msg)) {
752
+ // r.msg = r.msg.message
753
+ // }
754
+ // // console.log('updateAPIs', r)
755
+
756
+ // return r
757
+ // },
758
+ // },
673
759
 
674
- return r
675
- },
676
- },
677
760
  {
678
761
  method: 'POST',
679
- path: '/updateAPIs',
762
+ path: '/syncAndReplaceTabs',
680
763
  handler: async function (req, res) {
681
- // console.log('updateAPIs', req)
764
+ // console.log('syncAndReplaceTabs', req)
682
765
  // console.log('payload', req.payload)
683
766
 
684
767
  async function core() {
@@ -686,55 +769,53 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
686
769
  //token
687
770
  let token = get(req, 'query.token', '')
688
771
 
689
- //getAndVerifyClientUser
690
- let user = await getAndVerifyClientUser(token, 'updateAPIs')
691
-
692
772
  //check
693
- if (!iseobj(user)) {
773
+ if (!isestr(token)) {
774
+ console.log('req.query', get(req, 'query'))
694
775
  console.log('token', token)
695
- console.log('[API]updateAPIs/check user: invalid user')
776
+ console.log('[API]syncAndReplaceTabs/check token: invalid token')
696
777
  console.log(`token does not have permission`)
697
778
  return Promise.reject(`token does not have permission`)
698
779
  }
699
780
 
700
- //parsePayload
701
- let inp = await parsePayload(req)
702
-
703
- //updateAPIs
704
- let r = await updateAPIs(inp)
781
+ //keyTable
782
+ let keyTable = get(req, 'query.keyTable', '')
705
783
 
706
- return r
707
- }
708
-
709
- //pm2resolve core
710
- let r = await pm2resolve(core)()
711
- if (isErr(r.msg)) {
712
- r.msg = r.msg.message
713
- }
714
- // console.log('updateAPIs', r)
715
-
716
- return r
717
- },
718
- },
719
- {
720
- method: 'POST',
721
- path: '/syncAndReplaceApis',
722
- handler: async function (req, res) {
723
- // console.log('syncAndReplaceApis', req)
724
- // console.log('payload', req.payload)
725
-
726
- async function core() {
784
+ //check
785
+ if (!isestr(keyTable)) {
786
+ console.log('req.query', get(req, 'query'))
787
+ console.log('keyTable', keyTable)
788
+ console.log('[API]syncAndReplaceTabs/check keyTable: invalid keyTable')
789
+ console.log(`token does not have permission`)
790
+ return Promise.reject(`token does not have permission`)
791
+ }
727
792
 
728
- //token
729
- let token = get(req, 'query.token', '')
793
+ //check keyTable
794
+ let allowedTables = ['apis']
795
+ if (!allowedTables.includes(keyTable)) {
796
+ console.log('[API]syncAndReplaceTabs/check keyTable: unexpected keyTable', keyTable)
797
+ return Promise.reject(`invalid keyTable: ${keyTable}`)
798
+ }
730
799
 
731
800
  //getAndVerifyAppUser
732
- let user = await getAndVerifyAppUser(token, 'syncAndReplaceApis')
801
+ let user = await getAndVerifyAppUser(token, 'syncAndReplaceTabs')
733
802
 
734
803
  //check
735
804
  if (!iseobj(user)) {
736
805
  console.log('token', token)
737
- console.log('[API]syncAndReplaceApis/check user: invalid user')
806
+ console.log('[API]syncAndReplaceTabs/check user: invalid user')
807
+ console.log(`token does not have permission`)
808
+ return Promise.reject(`token does not have permission`)
809
+ }
810
+
811
+ //userId
812
+ let userId = get(user, 'id', '')
813
+
814
+ //check userId
815
+ if (!isestr(userId)) {
816
+ console.log('token', token)
817
+ console.log('user', user)
818
+ console.log('[API]syncAndReplaceTabs/check userId: invalid userId')
738
819
  console.log(`token does not have permission`)
739
820
  return Promise.reject(`token does not have permission`)
740
821
  }
@@ -742,8 +823,8 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
742
823
  //parsePayload
743
824
  let inp = await parsePayload(req)
744
825
 
745
- //syncAndReplaceApis
746
- let r = await syncAndReplaceApis(inp)
826
+ //syncAndReplaceTabs
827
+ let r = await syncAndReplaceTabs(userId, inp, keyTable)
747
828
 
748
829
  return r
749
830
  }
@@ -753,11 +834,12 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
753
834
  if (isErr(r.msg)) {
754
835
  r.msg = r.msg.message
755
836
  }
756
- // console.log('syncAndReplaceApis', r)
837
+ // console.log('syncAndReplaceTabs', r)
757
838
 
758
839
  return r
759
840
  },
760
841
  },
842
+
761
843
  ]
762
844
 
763
845
 
@@ -819,11 +901,10 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
819
901
 
820
902
  getWebInfor,
821
903
 
822
- getAPIsList: (userId, query = {}) => {
823
- return getAPIsList(query)
824
- },
825
-
826
- // updateApis: (userId, rows) => {
904
+ // getAPIsList: (userId, query = {}) => { //待提供api管理系統界面使用
905
+ // return getAPIsList(query)
906
+ // },
907
+ // updateApis: (userId, rows) => { //待提供api管理系統界面使用
827
908
  // return updateApis(rows)
828
909
  // },
829
910
 
@@ -851,7 +932,7 @@ export default WWebApi
851
932
  <br class="clear">
852
933
 
853
934
  <footer>
854
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.2</a> on Mon Jul 14 2025 20:34:11 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
935
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.2</a> on Sun Jul 20 2025 22:09:28 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
855
936
  </footer>
856
937
 
857
938
  <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.2</a> on Mon Jul 14 2025 20:34:11 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.2</a> on Sun Jul 20 2025 22:09:28 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
75
75
  </footer>
76
76
 
77
77
  <script>prettyPrint();</script>
@@ -0,0 +1,51 @@
1
+ import map from 'lodash-es/map.js'
2
+ import ds from './src/schema/index.mjs'
3
+ import provideTabs from './server/provideTabs.mjs'
4
+
5
+
6
+ async function provide() {
7
+
8
+ let url = `http://localhost:11005/syncAndReplaceTabs?token=sys&keyTable=apis`
9
+
10
+ let rs = [
11
+ {
12
+ id: 'id-for-test',
13
+ // order: 0,
14
+ name: '取得天竺鼠清單資訊',
15
+ description: '取得天竺鼠清單資訊',
16
+ url: '指api網址, 例如 http://localhost:11005/getDogsList',
17
+ method: 'get',
18
+ version: 'v1',
19
+ // group: '寵物',
20
+ levels: '寵物.天竺鼠',
21
+ keywords: 'pets;guineapigs',
22
+ state: 'ok',
23
+ creator: 'pets-system',
24
+ dataSource: 'pets-data',
25
+ mdInputParams: '輸入方式說明, markdown格式',
26
+ inputExample: '輸入範例數據',
27
+ mdOutputParams: '輸出方式說明, markdown格式',
28
+ outputExample: '輸出範例數據, json格式',
29
+ },
30
+ ]
31
+ rs = map(rs, (v, k) => {
32
+ let vv = ds.apis.funNew(v)
33
+ vv.id = v.id
34
+ return vv
35
+ })
36
+ console.log('rs', rs)
37
+
38
+ let keyTable = 'apis'
39
+ let group = '寵物'
40
+ let r = await provideTabs(url, keyTable, group, rs)
41
+ console.log('r', r)
42
+
43
+ }
44
+
45
+ provide()
46
+ .catch((err) => {
47
+ console.log('provide catch', err)
48
+ })
49
+
50
+
51
+ //node g.provideApis.mjs
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "w-web-api",
3
- "version": "1.0.42",
3
+ "version": "1.0.43",
4
4
  "main": "dist/w-web-api.umd.js",
5
5
  "dependencies": {
6
6
  "@mdi/js": "^7.4.47",