adminforth 1.1.69 → 1.1.70

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 (47) hide show
  1. package/auth.ts +1 -3
  2. package/dist/auth.js +1 -2
  3. package/dist/spa/index.html +4 -4
  4. package/dist/spa/package-lock.json +5 -206
  5. package/dist/spa/package.json +2 -8
  6. package/dist/spa/public/favicon.ico +0 -0
  7. package/dist/spa/spa/public/favicon.ico +0 -0
  8. package/dist/spa/spa/src/views/HomeView.vue +8 -0
  9. package/dist/spa/spa/src/views/LoginView.vue +0 -2
  10. package/dist/spa/src/App.vue +72 -171
  11. package/dist/spa/src/assets/logo.svg +1 -19
  12. package/dist/spa/src/components/AcceptModal.vue +10 -3
  13. package/dist/spa/src/components/BreadcrumbsWithButtons.vue +1 -1
  14. package/dist/spa/src/components/CustomDatePicker.vue +6 -19
  15. package/dist/spa/src/components/CustomDateRangePicker.vue +5 -14
  16. package/dist/spa/src/components/Dropdown.vue +5 -19
  17. package/dist/spa/src/components/Filters.vue +37 -91
  18. package/dist/spa/src/components/MenuLink.vue +2 -2
  19. package/dist/spa/src/components/ResourceForm.vue +103 -163
  20. package/dist/spa/src/components/ValueRenderer.vue +6 -22
  21. package/dist/spa/src/main.ts +1 -1
  22. package/dist/spa/src/router/index.ts +19 -30
  23. package/dist/spa/src/stores/core.ts +59 -65
  24. package/dist/spa/src/stores/modal.ts +3 -13
  25. package/dist/spa/src/utils.ts +8 -65
  26. package/dist/spa/src/views/CreateView.vue +16 -76
  27. package/dist/spa/src/views/EditView.vue +14 -76
  28. package/dist/spa/src/views/HomeView.vue +8 -0
  29. package/dist/spa/src/views/ListView.vue +360 -88
  30. package/dist/spa/src/views/LoginView.vue +5 -17
  31. package/dist/spa/src/views/ResourceParent.vue +1 -1
  32. package/dist/spa/src/views/ShowView.vue +19 -114
  33. package/dist/spa/tailwind.config.js +2 -5
  34. package/dist/spa/vite.config.ts +0 -6
  35. package/dist/types.js +30 -0
  36. package/package.json +1 -1
  37. package/spa/src/views/LoginView.vue +0 -2
  38. package/dist/spa/public/assets/favicon.png +0 -0
  39. package/dist/spa/src/components/CustomRangePicker.vue +0 -148
  40. package/dist/spa/src/components/ResourceListTable.vue +0 -419
  41. package/dist/spa/src/components/Toast.vue +0 -66
  42. package/dist/spa/src/composables/useFrontendApi.ts +0 -26
  43. package/dist/spa/src/composables/useStores.ts +0 -113
  44. package/dist/spa/src/spa_types/core.ts +0 -51
  45. package/dist/spa/src/stores/filters.ts +0 -22
  46. package/dist/spa/src/stores/toast.ts +0 -15
  47. package/dist/spa/src/stores/user.ts +0 -54
package/auth.ts CHANGED
@@ -3,7 +3,6 @@ import jwt from 'jsonwebtoken';
3
3
 
4
4
  import crypto from 'crypto';
5
5
  import AdminForth from './index.js';
6
- import { th } from '@faker-js/faker';
7
6
 
8
7
  // Function to generate a password hash using PBKDF2
9
8
  function calcPasswordHash(password, salt, iterations = 100000, keyLength = 64, digest = 'sha512') {
@@ -72,8 +71,7 @@ class AdminForthAuth {
72
71
  }
73
72
  const { pk, t } = decoded;
74
73
  if (t !== mustHaveType) {
75
- console.error(`Invalid token type during verification: ${t}, must be ${mustHaveType}`);
76
- return null;
74
+ throw new Error(`Invalid token type during verification: ${t}, must be ${mustHaveType}`);
77
75
  }
78
76
  if (pk === null) {
79
77
  decoded.isRoot = true;
package/dist/auth.js CHANGED
@@ -70,8 +70,7 @@ class AdminForthAuth {
70
70
  }
71
71
  const { pk, t } = decoded;
72
72
  if (t !== mustHaveType) {
73
- console.error(`Invalid token type during verification: ${t}, must be ${mustHaveType}`);
74
- return null;
73
+ throw new Error(`Invalid token type during verification: ${t}, must be ${mustHaveType}`);
75
74
  }
76
75
  if (pk === null) {
77
76
  decoded.isRoot = true;
@@ -2,9 +2,9 @@
2
2
  <html lang="en">
3
3
  <head>
4
4
  <meta charset="UTF-8">
5
- <link rel="icon" href="/* IMPORTANT:ADMINFORTH FAVICON */">
5
+ <link rel="icon" href="/favicon.ico">
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
- <title>/* IMPORTANT:ADMINFORTH TITLE */</title>
7
+ <title>Vite App</title>
8
8
  <!--
9
9
  <script>
10
10
  // On page load or when changing themes, best to add inline in `head` to avoid FOUC
@@ -16,8 +16,8 @@
16
16
  </script> -->
17
17
 
18
18
  </head>
19
- <body class=" ">
20
- <div id="app" class="min-h-screen bg-html-bg dark:bg-gray-800"></div>
19
+ <body>
20
+ <div id="app" class="min-h-screen dark:bg-gray-800"></div>
21
21
  <script type="module" src="/src/main.ts"></script>
22
22
  </body>
23
23
  </html>
@@ -9,18 +9,12 @@
9
9
  "version": "0.0.0",
10
10
  "dependencies": {
11
11
  "@iconify-prerendered/vue-flowbite": "^0.23.1714023977",
12
- "@unhead/vue": "^1.9.12",
13
- "@vueuse/core": "^10.10.0",
14
12
  "dayjs": "^1.11.11",
15
- "debounce": "^2.1.0",
16
13
  "flowbite": "^2.3.0",
17
14
  "flowbite-datepicker": "^1.2.6",
18
15
  "pinia": "^2.1.7",
19
- "unhead": "^1.9.12",
20
- "uuid": "^10.0.0",
21
16
  "vue": "^3.4.21",
22
- "vue-router": "^4.3.0",
23
- "vue-slider-component": "^4.1.0-beta.7"
17
+ "vue-router": "^4.3.0"
24
18
  },
25
19
  "devDependencies": {
26
20
  "@rushstack/eslint-patch": "^1.8.0",
@@ -37,7 +31,7 @@
37
31
  "sass": "^1.77.2",
38
32
  "tailwindcss": "^3.4.3",
39
33
  "typescript": "~5.4.0",
40
- "vite": "^5.2.13",
34
+ "vite": "^5.2.12",
41
35
  "vue-tsc": "^2.0.11"
42
36
  }
43
37
  },
@@ -956,11 +950,6 @@
956
950
  "undici-types": "~5.26.4"
957
951
  }
958
952
  },
959
- "node_modules/@types/web-bluetooth": {
960
- "version": "0.0.20",
961
- "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz",
962
- "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow=="
963
- },
964
953
  "node_modules/@typescript-eslint/eslint-plugin": {
965
954
  "version": "7.9.0",
966
955
  "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.9.0.tgz",
@@ -1152,58 +1141,6 @@
1152
1141
  "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
1153
1142
  "dev": true
1154
1143
  },
1155
- "node_modules/@unhead/dom": {
1156
- "version": "1.9.12",
1157
- "resolved": "https://registry.npmjs.org/@unhead/dom/-/dom-1.9.12.tgz",
1158
- "integrity": "sha512-3MY1TbZmEjGNZapi3wvJW0vWNS2CLKHt7/m57sScDHCNvNBe1mTwrIOhtZFDgAndhml2EVQ68RMa0Vhum/M+cw==",
1159
- "dependencies": {
1160
- "@unhead/schema": "1.9.12",
1161
- "@unhead/shared": "1.9.12"
1162
- },
1163
- "funding": {
1164
- "url": "https://github.com/sponsors/harlan-zw"
1165
- }
1166
- },
1167
- "node_modules/@unhead/schema": {
1168
- "version": "1.9.12",
1169
- "resolved": "https://registry.npmjs.org/@unhead/schema/-/schema-1.9.12.tgz",
1170
- "integrity": "sha512-ue2FKyIZKsuZDpWJBMlBGwMm4s+vFeU3NUWsNt8Z+2JkOUIqO/VG43LxNgY1M595bOS71Gdxk+G9VtzfKJ5uEA==",
1171
- "dependencies": {
1172
- "hookable": "^5.5.3",
1173
- "zhead": "^2.2.4"
1174
- },
1175
- "funding": {
1176
- "url": "https://github.com/sponsors/harlan-zw"
1177
- }
1178
- },
1179
- "node_modules/@unhead/shared": {
1180
- "version": "1.9.12",
1181
- "resolved": "https://registry.npmjs.org/@unhead/shared/-/shared-1.9.12.tgz",
1182
- "integrity": "sha512-72wlLXG3FP3sXUrwd42Uv8jYpHSg4R6IFJcsl+QisRjKM89JnjOFSw1DqWO4IOftW5xOxS4J5v7SQyJ4NJo7Bw==",
1183
- "dependencies": {
1184
- "@unhead/schema": "1.9.12"
1185
- },
1186
- "funding": {
1187
- "url": "https://github.com/sponsors/harlan-zw"
1188
- }
1189
- },
1190
- "node_modules/@unhead/vue": {
1191
- "version": "1.9.12",
1192
- "resolved": "https://registry.npmjs.org/@unhead/vue/-/vue-1.9.12.tgz",
1193
- "integrity": "sha512-keE4EuswgzCqVU7zmZprU+ToMvNWc3s8NoLreH5AtJd2u0FgBygD8sxRVyEnZw1KwFYOJ2C7yD2TChSKZioPGQ==",
1194
- "dependencies": {
1195
- "@unhead/schema": "1.9.12",
1196
- "@unhead/shared": "1.9.12",
1197
- "hookable": "^5.5.3",
1198
- "unhead": "1.9.12"
1199
- },
1200
- "funding": {
1201
- "url": "https://github.com/sponsors/harlan-zw"
1202
- },
1203
- "peerDependencies": {
1204
- "vue": ">=2.7 || >=3"
1205
- }
1206
- },
1207
1144
  "node_modules/@vitejs/plugin-vue": {
1208
1145
  "version": "5.0.4",
1209
1146
  "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.0.4.tgz",
@@ -1393,89 +1330,6 @@
1393
1330
  "integrity": "sha512-VcZK7MvpjuTPx2w6blwnwZAu5/LgBUtejFOi3pPGQFXQN5Ela03FUtd2Qtg4yWGGissVL0dr6Ro1LfOFh+PCuQ==",
1394
1331
  "dev": true
1395
1332
  },
1396
- "node_modules/@vueuse/core": {
1397
- "version": "10.10.0",
1398
- "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.10.0.tgz",
1399
- "integrity": "sha512-vexJ/YXYs2S42B783rI95lMt3GzEwkxzC8Hb0Ndpd8rD+p+Lk/Za4bd797Ym7yq4jXqdSyj3JLChunF/vyYjUw==",
1400
- "dependencies": {
1401
- "@types/web-bluetooth": "^0.0.20",
1402
- "@vueuse/metadata": "10.10.0",
1403
- "@vueuse/shared": "10.10.0",
1404
- "vue-demi": ">=0.14.7"
1405
- },
1406
- "funding": {
1407
- "url": "https://github.com/sponsors/antfu"
1408
- }
1409
- },
1410
- "node_modules/@vueuse/core/node_modules/vue-demi": {
1411
- "version": "0.14.8",
1412
- "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.8.tgz",
1413
- "integrity": "sha512-Uuqnk9YE9SsWeReYqK2alDI5YzciATE0r2SkA6iMAtuXvNTMNACJLJEXNXaEy94ECuBe4Sk6RzRU80kjdbIo1Q==",
1414
- "hasInstallScript": true,
1415
- "bin": {
1416
- "vue-demi-fix": "bin/vue-demi-fix.js",
1417
- "vue-demi-switch": "bin/vue-demi-switch.js"
1418
- },
1419
- "engines": {
1420
- "node": ">=12"
1421
- },
1422
- "funding": {
1423
- "url": "https://github.com/sponsors/antfu"
1424
- },
1425
- "peerDependencies": {
1426
- "@vue/composition-api": "^1.0.0-rc.1",
1427
- "vue": "^3.0.0-0 || ^2.6.0"
1428
- },
1429
- "peerDependenciesMeta": {
1430
- "@vue/composition-api": {
1431
- "optional": true
1432
- }
1433
- }
1434
- },
1435
- "node_modules/@vueuse/metadata": {
1436
- "version": "10.10.0",
1437
- "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.10.0.tgz",
1438
- "integrity": "sha512-UNAo2sTCAW5ge6OErPEHb5z7NEAg3XcO9Cj7OK45aZXfLLH1QkexDcZD77HBi5zvEiLOm1An+p/4b5K3Worpug==",
1439
- "funding": {
1440
- "url": "https://github.com/sponsors/antfu"
1441
- }
1442
- },
1443
- "node_modules/@vueuse/shared": {
1444
- "version": "10.10.0",
1445
- "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.10.0.tgz",
1446
- "integrity": "sha512-2aW33Ac0Uk0U+9yo3Ypg9s5KcR42cuehRWl7vnUHadQyFvCktseyxxEPBi1Eiq4D2yBGACOnqLZpx1eMc7g5Og==",
1447
- "dependencies": {
1448
- "vue-demi": ">=0.14.7"
1449
- },
1450
- "funding": {
1451
- "url": "https://github.com/sponsors/antfu"
1452
- }
1453
- },
1454
- "node_modules/@vueuse/shared/node_modules/vue-demi": {
1455
- "version": "0.14.8",
1456
- "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.8.tgz",
1457
- "integrity": "sha512-Uuqnk9YE9SsWeReYqK2alDI5YzciATE0r2SkA6iMAtuXvNTMNACJLJEXNXaEy94ECuBe4Sk6RzRU80kjdbIo1Q==",
1458
- "hasInstallScript": true,
1459
- "bin": {
1460
- "vue-demi-fix": "bin/vue-demi-fix.js",
1461
- "vue-demi-switch": "bin/vue-demi-switch.js"
1462
- },
1463
- "engines": {
1464
- "node": ">=12"
1465
- },
1466
- "funding": {
1467
- "url": "https://github.com/sponsors/antfu"
1468
- },
1469
- "peerDependencies": {
1470
- "@vue/composition-api": "^1.0.0-rc.1",
1471
- "vue": "^3.0.0-0 || ^2.6.0"
1472
- },
1473
- "peerDependenciesMeta": {
1474
- "@vue/composition-api": {
1475
- "optional": true
1476
- }
1477
- }
1478
- },
1479
1333
  "node_modules/acorn": {
1480
1334
  "version": "8.11.3",
1481
1335
  "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
@@ -1862,17 +1716,6 @@
1862
1716
  "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==",
1863
1717
  "dev": true
1864
1718
  },
1865
- "node_modules/debounce": {
1866
- "version": "2.1.0",
1867
- "resolved": "https://registry.npmjs.org/debounce/-/debounce-2.1.0.tgz",
1868
- "integrity": "sha512-OkL3+0pPWCqoBc/nhO9u6TIQNTK44fnBnzuVtJAbp13Naxw9R6u21x+8tVTka87AhDZ3htqZ2pSSsZl9fqL2Wg==",
1869
- "engines": {
1870
- "node": ">=18"
1871
- },
1872
- "funding": {
1873
- "url": "https://github.com/sponsors/sindresorhus"
1874
- }
1875
- },
1876
1719
  "node_modules/debug": {
1877
1720
  "version": "4.3.4",
1878
1721
  "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
@@ -2526,11 +2369,6 @@
2526
2369
  "he": "bin/he"
2527
2370
  }
2528
2371
  },
2529
- "node_modules/hookable": {
2530
- "version": "5.5.3",
2531
- "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz",
2532
- "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ=="
2533
- },
2534
2372
  "node_modules/ignore": {
2535
2373
  "version": "5.3.1",
2536
2374
  "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz",
@@ -3974,20 +3812,6 @@
3974
3812
  "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
3975
3813
  "dev": true
3976
3814
  },
3977
- "node_modules/unhead": {
3978
- "version": "1.9.12",
3979
- "resolved": "https://registry.npmjs.org/unhead/-/unhead-1.9.12.tgz",
3980
- "integrity": "sha512-s6VxcTV45hy8c/IioKQOonFnAO+kBOSpgDfqEHhnU0YVSQYaRPEp9pzW1qSPf0lx+bg9RKeOQyNNbSGGUP26aQ==",
3981
- "dependencies": {
3982
- "@unhead/dom": "1.9.12",
3983
- "@unhead/schema": "1.9.12",
3984
- "@unhead/shared": "1.9.12",
3985
- "hookable": "^5.5.3"
3986
- },
3987
- "funding": {
3988
- "url": "https://github.com/sponsors/harlan-zw"
3989
- }
3990
- },
3991
3815
  "node_modules/update-browserslist-db": {
3992
3816
  "version": "1.0.16",
3993
3817
  "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz",
@@ -4033,22 +3857,10 @@
4033
3857
  "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
4034
3858
  "dev": true
4035
3859
  },
4036
- "node_modules/uuid": {
4037
- "version": "10.0.0",
4038
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz",
4039
- "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==",
4040
- "funding": [
4041
- "https://github.com/sponsors/broofa",
4042
- "https://github.com/sponsors/ctavan"
4043
- ],
4044
- "bin": {
4045
- "uuid": "dist/bin/uuid"
4046
- }
4047
- },
4048
3860
  "node_modules/vite": {
4049
- "version": "5.2.13",
4050
- "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.13.tgz",
4051
- "integrity": "sha512-SSq1noJfY9pR3I1TUENL3rQYDQCFqgD+lM6fTRAM8Nv6Lsg5hDLaXkjETVeBt+7vZBCMoibD+6IWnT2mJ+Zb/A==",
3861
+ "version": "5.2.12",
3862
+ "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.12.tgz",
3863
+ "integrity": "sha512-/gC8GxzxMK5ntBwb48pR32GGhENnjtY30G4A0jemunsBkiEZFw60s8InGpN8gkhHEkjnRK1aSAxeQgwvFhUHAA==",
4052
3864
  "dev": true,
4053
3865
  "dependencies": {
4054
3866
  "esbuild": "^0.20.1",
@@ -4158,11 +3970,6 @@
4158
3970
  "vue": "^3.2.0"
4159
3971
  }
4160
3972
  },
4161
- "node_modules/vue-slider-component": {
4162
- "version": "4.1.0-beta.7",
4163
- "resolved": "https://registry.npmjs.org/vue-slider-component/-/vue-slider-component-4.1.0-beta.7.tgz",
4164
- "integrity": "sha512-Qb7K920ZG7PoQswoF6Ias+i3W2rd3k4fpk04JUl82kEUcN86Yg6et7bVSKWt/7VpQe8a5IT3BqCKSCOZ7AJgCA=="
4165
- },
4166
3973
  "node_modules/vue-template-compiler": {
4167
3974
  "version": "2.7.16",
4168
3975
  "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz",
@@ -4346,14 +4153,6 @@
4346
4153
  "funding": {
4347
4154
  "url": "https://github.com/sponsors/sindresorhus"
4348
4155
  }
4349
- },
4350
- "node_modules/zhead": {
4351
- "version": "2.2.4",
4352
- "resolved": "https://registry.npmjs.org/zhead/-/zhead-2.2.4.tgz",
4353
- "integrity": "sha512-8F0OI5dpWIA5IGG5NHUg9staDwz/ZPxZtvGVf01j7vHqSyZ0raHY+78atOVxRqb73AotX22uV1pXt3gYSstGag==",
4354
- "funding": {
4355
- "url": "https://github.com/sponsors/harlan-zw"
4356
- }
4357
4156
  }
4358
4157
  }
4359
4158
  }
@@ -13,18 +13,12 @@
13
13
  },
14
14
  "dependencies": {
15
15
  "@iconify-prerendered/vue-flowbite": "^0.23.1714023977",
16
- "@unhead/vue": "^1.9.12",
17
- "@vueuse/core": "^10.10.0",
18
16
  "dayjs": "^1.11.11",
19
- "debounce": "^2.1.0",
20
17
  "flowbite": "^2.3.0",
21
18
  "flowbite-datepicker": "^1.2.6",
22
19
  "pinia": "^2.1.7",
23
- "unhead": "^1.9.12",
24
- "uuid": "^10.0.0",
25
20
  "vue": "^3.4.21",
26
- "vue-router": "^4.3.0",
27
- "vue-slider-component": "^4.1.0-beta.7"
21
+ "vue-router": "^4.3.0"
28
22
  },
29
23
  "devDependencies": {
30
24
  "@rushstack/eslint-patch": "^1.8.0",
@@ -41,7 +35,7 @@
41
35
  "sass": "^1.77.2",
42
36
  "tailwindcss": "^3.4.3",
43
37
  "typescript": "~5.4.0",
44
- "vite": "^5.2.13",
38
+ "vite": "^5.2.12",
45
39
  "vue-tsc": "^2.0.11"
46
40
  }
47
41
  }
Binary file
Binary file
@@ -0,0 +1,8 @@
1
+ <script setup lang="ts">
2
+ </script>
3
+
4
+ <template>
5
+ <main>
6
+ 123
7
+ </main>
8
+ </template>
@@ -103,8 +103,6 @@ onMounted(() => {
103
103
  coreStore.getPublicConfig()
104
104
  });
105
105
 
106
-
107
-
108
106
  async function login() {
109
107
  inProgress.value = true;
110
108
  const resp = await callAdminForthApi({