w-web-api 1.0.41 → 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:28:27 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'
@@ -363,175 +365,200 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
363
365
  }
364
366
 
365
367
 
366
- //getAndVerifyBrowserTokenUser
367
- let getAndVerifyBrowserTokenUser = async (token, from = '') => {
368
+ //getAndVerifyClientUser
369
+ let getAndVerifyClientUser = async (token, from = '') => {
370
+ //基於token查找client使用者, 會基於外部getUserByToken以及perm內部users進行查找並比對
368
371
 
369
372
  //getTokenUser
370
- let userSelf = await getTokenUser(token)
373
+ let user = await getTokenUser(token)
371
374
 
372
375
  //verifyClientUser
373
- let b = verifyClientUser(userSelf, from)
376
+ let b = verifyClientUser(user, from)
374
377
  if (ispm(b)) {
375
378
  b = await b
376
379
  }
377
380
 
378
381
  //check
379
382
  if (!b) {
380
- console.log('userSelf', userSelf)
383
+ console.log('user', user)
381
384
  console.log(`user does not have permission`)
382
385
  return Promise.reject(`user does not have permission`)
383
386
  }
384
387
 
385
- return userSelf
388
+ return user
386
389
  }
387
390
 
388
391
 
389
- //getAndVerifyAppTokenUser
390
- let getAndVerifyAppTokenUser = async (token, from = '') => {
392
+ //getAndVerifyAppUser
393
+ let getAndVerifyAppUser = async (token, from = '') => {
394
+ //基於token查找app使用者, 會基於外部getUserByToken進行查找, 故只要getUserByToken提供使用者即可, 可支援getUserByToken給予針對應用程式所產生之虛擬使用者
391
395
 
392
- //getTokenUser
393
- let userSelf = await getTokenUser(token)
396
+ //user
397
+ let user = null
398
+ if (isestr(token)) {
399
+ user = getUserByToken(token)
400
+ if (ispm(user)) {
401
+ user = await user
402
+ }
403
+ }
404
+ // console.log('user', user)
405
+
406
+ //check
407
+ if (!iseobj(user)) {
408
+ console.log(`token`, token)
409
+ console.log(`can not find the user from token`)
410
+ return Promise.reject(`can not find the user from token`)
411
+ }
394
412
 
395
413
  //verifyAppUser
396
- let b = verifyAppUser(userSelf, from)
414
+ let b = verifyAppUser(user, from)
397
415
  if (ispm(b)) {
398
416
  b = await b
399
417
  }
400
418
 
401
419
  //check
402
420
  if (!b) {
403
- console.log('userSelf', userSelf)
421
+ console.log('user', user)
404
422
  console.log(`user does not have permission`)
405
423
  return Promise.reject(`user does not have permission`)
406
424
  }
407
425
 
408
- return userSelf
426
+ return user
409
427
  }
410
428
 
411
429
 
412
- //getAPIsList
413
- let getAPIsList = async (query = {}) => {
414
- let rs = await woItems.apis.select(query)
415
- return rs
416
- }
430
+ // //getAPIsList
431
+ // let getAPIsList = async (query = {}) => {
432
+ // let rs = await woItems.apis.select(query)
433
+ // return rs
434
+ // }
417
435
 
418
436
 
419
437
  //parsePayload
420
438
  let parsePayload = async (req) => {
421
439
 
422
- //inp
423
- let inp = get(req, 'payload')
440
+ //payload
441
+ let payload = get(req, 'payload')
424
442
 
425
443
  //to obj
426
- if (isestr(inp)) {
427
- inp = j2o(inp)
444
+ if (isestr(payload)) {
445
+ payload = j2o(payload)
428
446
  }
429
447
 
430
448
  //check
431
- if (!iseobj(inp)) {
432
- console.log('inp', inp)
433
- console.log(`invalid inp from req`)
434
- 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`)
435
453
  }
436
454
 
437
455
  //group
438
- let group = get(inp, 'group', '')
456
+ let group = get(payload, 'group', '')
439
457
 
440
458
  //check
441
459
  if (!isestr(group)) {
442
- console.log('inp', inp)
443
- console.log('group', group)
444
- console.log(`invalid group from inp`)
445
- 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`)
446
463
  }
447
464
 
448
- //apis
449
- let apis = get(inp, 'apis', [])
465
+ //rows
466
+ let rows = get(payload, 'rows', [])
450
467
 
451
468
  //check
452
- if (!isearr(apis)) {
453
- console.log('inp', inp)
454
- console.log('apis', apis)
455
- console.log(`invalid apis from inp`)
456
- 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`)
457
473
  }
458
474
 
459
- //偵測b64自動恢復
460
- each(apis, (api, kapi) => {
461
- // console.log(kapi, api.name)
462
- each(api, (v, k) => {
463
- // console.log(k, v)
464
- if (isestr(v)) {
465
- if (strleft(v, 7) === 'base64:') {
466
- // console.log(k, 'get base64')
467
- v = strdelleft(v, 7)
468
- v = b642str(v)
469
- // console.log(v)
470
- apis[kapi][k] = v
471
- }
472
- }
473
- })
474
- })
475
-
476
- //save group
477
- each(apis, (api, kapi) => {
478
- apis[kapi].group = group
479
- })
480
-
481
- //resave
482
- inp = { group, apis }
475
+ //r
476
+ let r = {
477
+ group,
478
+ rows,
479
+ }
483
480
 
484
- return inp
481
+ return r
485
482
  }
486
483
 
487
484
 
488
- //updateAPIs
489
- let updateAPIs = async (params = {}) => {
485
+ // //updateAPIs
486
+ // let updateAPIs = async (inp = {}) => {
490
487
 
491
- //spread params
492
- let { apis: rsApis } = params
493
- // console.log('group', group)
494
- // console.log('rsApis', rsApis)
488
+ // //spread inp
489
+ // let { apis: rsApis } = inp
490
+ // // console.log('group', group)
491
+ // // console.log('rsApis', rsApis)
495
492
 
496
- //save
497
- let r = await woItems.apis.save(rsApis)
493
+ // //save
494
+ // let r = await woItems.apis.save(rsApis)
498
495
 
499
- return r
500
- }
496
+ // return r
497
+ // }
501
498
 
502
499
 
503
- //syncAndReplaceApis
504
- let syncAndReplaceApis = async (params) => {
500
+ //syncAndReplaceTabs
501
+ let syncAndReplaceTabs = async (userId, inp, keyTable) => {
505
502
 
506
503
  //group
507
- let group = get(params, 'group', '')
504
+ let group = get(inp, 'group', '')
508
505
  // console.log('group', group)
509
506
 
510
507
  //check
511
508
  if (!isestr(group)) {
512
- console.log('params', params)
509
+ console.log('inp', inp)
513
510
  console.log('group', group)
514
511
  console.log(`invalid group`)
515
512
  return Promise.reject(`invalid group`)
516
513
  }
517
514
 
518
- //apis
519
- let apis = get(params, 'apis', [])
520
- // console.log('apis', apis)
515
+ //rows
516
+ let rows = get(inp, 'rows', [])
517
+ // console.log('rows', rows)
521
518
 
522
519
  //check
523
- if (!isearr(apis)) {
524
- console.log('params', params)
525
- console.log('apis', apis)
526
- console.log(`invalid apis`)
527
- 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`)
528
524
  }
529
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
+ })
550
+ }
551
+
552
+ //ltdtmapping
553
+ rows = ltdtmapping(rows, ds[keyTable].keys)
554
+ // console.log('ltdtmapping rows', rows)
555
+
530
556
  //delAll group
531
- await woItems.apis.delAll({ group })
557
+ await woItems[keyTable].delAll({ group })
532
558
 
533
559
  //insert
534
- 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才有辦法自動給予相關欄位
535
562
 
536
563
  return r
537
564
  }
@@ -587,7 +614,7 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
587
614
 
588
615
  {
589
616
  method: 'GET',
590
- path: '/api/getUserByToken', //未登入界面需先檢測token是否為系統管理員, 確認後回傳為系統管理員資訊物件, getUserByToken為w-ui-loginout預設值, 若要更改兩邊須同時修改
617
+ path: '/api/getUserByToken', //未登入主頁時需先檢測token, getUserByToken為w-ui-loginout預設值, 若要更改兩邊須同時修改
591
618
  handler: async function (req, res) {
592
619
  // console.log('getUserByToken', req)
593
620
 
@@ -596,8 +623,17 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
596
623
  //token
597
624
  let token = get(req, 'query.token', '')
598
625
 
599
- //getAndVerifyBrowserTokenUser
600
- let user = await getAndVerifyBrowserTokenUser(token, 'getUserByToken')
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
+
635
+ //getAndVerifyClientUser
636
+ let user = await getAndVerifyClientUser(token, 'getUserByToken')
601
637
 
602
638
  //check
603
639
  if (!iseobj(user)) {
@@ -620,105 +656,166 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
620
656
  return r
621
657
  },
622
658
  },
659
+
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
+ // },
707
+
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
+ // },
759
+
623
760
  {
624
- method: 'GET',
625
- path: '/getAPIsList',
761
+ method: 'POST',
762
+ path: '/syncAndReplaceTabs',
626
763
  handler: async function (req, res) {
627
- // console.log('getAPIsList', req)
764
+ // console.log('syncAndReplaceTabs', req)
765
+ // console.log('payload', req.payload)
628
766
 
629
767
  async function core() {
630
768
 
631
769
  //token
632
770
  let token = get(req, 'query.token', '')
633
771
 
634
- //getAndVerifyBrowserTokenUser
635
- let user = await getAndVerifyBrowserTokenUser(token, 'getAPIsList')
636
-
637
772
  //check
638
- if (!iseobj(user)) {
773
+ if (!isestr(token)) {
774
+ console.log('req.query', get(req, 'query'))
639
775
  console.log('token', token)
640
- console.log('[API]getAPIsList/check user: invalid user')
776
+ console.log('[API]syncAndReplaceTabs/check token: invalid token')
641
777
  console.log(`token does not have permission`)
642
778
  return Promise.reject(`token does not have permission`)
643
779
  }
644
780
 
645
- //getAPIsList
646
- let r = await getAPIsList({ isActive: 'y' })
647
-
648
- return r
649
- }
650
-
651
- //pm2resolve core
652
- let r = await pm2resolve(core)()
653
- if (isErr(r.msg)) {
654
- r.msg = r.msg.message
655
- }
656
- // console.log('getAPIsList', r)
657
-
658
- return r
659
- },
660
- },
661
- {
662
- method: 'POST',
663
- path: '/updateAPIs',
664
- handler: async function (req, res) {
665
- // console.log('updateAPIs', req)
666
- // console.log('payload', req.payload)
781
+ //keyTable
782
+ let keyTable = get(req, 'query.keyTable', '')
667
783
 
668
- 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
+ }
669
792
 
670
- //token
671
- 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
+ }
672
799
 
673
- //getAndVerifyBrowserTokenUser
674
- let user = await getAndVerifyBrowserTokenUser(token, 'updateAPIs')
800
+ //getAndVerifyAppUser
801
+ let user = await getAndVerifyAppUser(token, 'syncAndReplaceTabs')
675
802
 
676
803
  //check
677
804
  if (!iseobj(user)) {
678
805
  console.log('token', token)
679
- console.log('[API]updateAPIs/check user: invalid user')
806
+ console.log('[API]syncAndReplaceTabs/check user: invalid user')
680
807
  console.log(`token does not have permission`)
681
808
  return Promise.reject(`token does not have permission`)
682
809
  }
683
810
 
684
- //parsePayload
685
- let inp = await parsePayload(req)
686
-
687
- //updateAPIs
688
- let r = await updateAPIs(inp)
689
-
690
- return r
691
- }
692
-
693
- //pm2resolve core
694
- let r = await pm2resolve(core)()
695
- if (isErr(r.msg)) {
696
- r.msg = r.msg.message
697
- }
698
- // console.log('updateAPIs', r)
699
-
700
- return r
701
- },
702
- },
703
- {
704
- method: 'POST',
705
- path: '/syncAndReplaceApis',
706
- handler: async function (req, res) {
707
- // console.log('syncAndReplaceApis', req)
708
- // console.log('payload', req.payload)
709
-
710
- async function core() {
711
-
712
- //token
713
- let token = get(req, 'query.token', '')
811
+ //userId
812
+ let userId = get(user, 'id', '')
714
813
 
715
- //getAndVerifyAppTokenUser
716
- let user = await getAndVerifyAppTokenUser(token, 'syncAndReplaceApis')
717
-
718
- //check
719
- if (!iseobj(user)) {
814
+ //check userId
815
+ if (!isestr(userId)) {
720
816
  console.log('token', token)
721
- console.log('[API]syncAndReplaceApis/check user: invalid user')
817
+ console.log('user', user)
818
+ console.log('[API]syncAndReplaceTabs/check userId: invalid userId')
722
819
  console.log(`token does not have permission`)
723
820
  return Promise.reject(`token does not have permission`)
724
821
  }
@@ -726,8 +823,8 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
726
823
  //parsePayload
727
824
  let inp = await parsePayload(req)
728
825
 
729
- //syncAndReplaceApis
730
- let r = await syncAndReplaceApis(inp)
826
+ //syncAndReplaceTabs
827
+ let r = await syncAndReplaceTabs(userId, inp, keyTable)
731
828
 
732
829
  return r
733
830
  }
@@ -737,11 +834,12 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
737
834
  if (isErr(r.msg)) {
738
835
  r.msg = r.msg.message
739
836
  }
740
- // console.log('syncAndReplaceApis', r)
837
+ // console.log('syncAndReplaceTabs', r)
741
838
 
742
839
  return r
743
840
  },
744
841
  },
842
+
745
843
  ]
746
844
 
747
845
 
@@ -803,11 +901,10 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
803
901
 
804
902
  getWebInfor,
805
903
 
806
- getAPIsList: (userId, query = {}) => {
807
- return getAPIsList(query)
808
- },
809
-
810
- // updateApis: (userId, rows) => {
904
+ // getAPIsList: (userId, query = {}) => { //待提供api管理系統界面使用
905
+ // return getAPIsList(query)
906
+ // },
907
+ // updateApis: (userId, rows) => { //待提供api管理系統界面使用
811
908
  // return updateApis(rows)
812
909
  // },
813
910
 
@@ -835,7 +932,7 @@ export default WWebApi
835
932
  <br class="clear">
836
933
 
837
934
  <footer>
838
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.2</a> on Mon Jul 14 2025 20:28:27 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.
839
936
  </footer>
840
937
 
841
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:28:27 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>