@nitra/vite-boot 4.0.8 → 4.1.1
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/package.json +3 -2
- package/src/apollo.js +6 -4
- package/src/login.js +6 -6
- package/src/router.js +8 -7
- package/src/token.js +2 -3
- package/src/user.js +7 -7
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nitra/vite-boot",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.1.1",
|
|
4
4
|
"description": "Vite boot",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -26,8 +26,9 @@
|
|
|
26
26
|
"src"
|
|
27
27
|
],
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@apollo/client": "^4.0.
|
|
29
|
+
"@apollo/client": "^4.0.6",
|
|
30
30
|
"@nitra/jwt-decode": "^1.2.0",
|
|
31
|
+
"@vue/apollo-composable": "^4.2.2",
|
|
31
32
|
"graphql-ws": "^6.0.6",
|
|
32
33
|
"pinia": "^3.0.3",
|
|
33
34
|
"pinia-plugin-persistedstate": "^4.5.0"
|
package/src/apollo.js
CHANGED
|
@@ -2,11 +2,13 @@ import { ApolloClient, InMemoryCache, createHttpLink, from, split } from '@apoll
|
|
|
2
2
|
import { setContext } from '@apollo/client/link/context'
|
|
3
3
|
import { GraphQLWsLink } from '@apollo/client/link/subscriptions'
|
|
4
4
|
import { getMainDefinition } from '@apollo/client/utilities'
|
|
5
|
-
// import { console } from '@nitra/console'
|
|
6
5
|
import { createClient } from 'graphql-ws'
|
|
7
6
|
import { checkToken, getToken } from './token.js'
|
|
8
7
|
import { user } from './user.js'
|
|
9
8
|
|
|
9
|
+
export { gql } from '@apollo/client/core'
|
|
10
|
+
export { provideApolloClient, useMutation, useQuery, useSubscription } from '@vue/apollo-composable'
|
|
11
|
+
|
|
10
12
|
const httpLink = createHttpLink({
|
|
11
13
|
uri: `${import.meta.env.VITE_HASURA_PROTOCOL === 'wss' ? 'https' : 'http'}://${
|
|
12
14
|
import.meta.env.VITE_HASURA_HOST
|
|
@@ -26,9 +28,9 @@ export function logout() {
|
|
|
26
28
|
}
|
|
27
29
|
|
|
28
30
|
/**
|
|
29
|
-
*
|
|
30
|
-
* @param headers
|
|
31
|
-
* @returns {
|
|
31
|
+
* Готує заголовки з JWT та роллю Hasura
|
|
32
|
+
* @param {Record<string, string>} headers - Початкові заголовки запиту
|
|
33
|
+
* @returns {{headers: Record<string, string>}} - Обʼєкт з підготовленими заголовками
|
|
32
34
|
*/
|
|
33
35
|
function prepareHeaders(headers = {}) {
|
|
34
36
|
const token = getToken()
|
package/src/login.js
CHANGED
|
@@ -8,7 +8,7 @@ import { setUser } from './user.js'
|
|
|
8
8
|
* Автоматичний вхід користувача
|
|
9
9
|
* @returns {Promise<void>}
|
|
10
10
|
*/
|
|
11
|
-
export
|
|
11
|
+
export function autoLogin() {
|
|
12
12
|
const token = getToken()
|
|
13
13
|
if (!token) {
|
|
14
14
|
return
|
|
@@ -19,16 +19,16 @@ export async function autoLogin() {
|
|
|
19
19
|
return
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
defaultLogin(check.decoded, token)
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
/**
|
|
26
26
|
* Вхід або на попередню або на кореневу сторінку
|
|
27
|
-
* @param {object} decoded
|
|
28
|
-
* @param {string} raw
|
|
29
|
-
* @
|
|
27
|
+
* @param {object} decoded - Розкодований JWT з Hasura claims
|
|
28
|
+
* @param {string} raw - JWT як рядок (для localStorage)
|
|
29
|
+
* @returns {void}
|
|
30
30
|
*/
|
|
31
|
-
export
|
|
31
|
+
export function defaultLogin(decoded, raw) {
|
|
32
32
|
// Якщо задано що токен з localStorage
|
|
33
33
|
localStorage.setItem('__session', raw)
|
|
34
34
|
|
package/src/router.js
CHANGED
|
@@ -4,17 +4,17 @@ import { setUser, user } from './user.js'
|
|
|
4
4
|
export let router
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
8
|
-
* @param r
|
|
7
|
+
* Зберігає інстанс роутера для подальшого використання
|
|
8
|
+
* @param {import('vue-router').Router} r - Інстанс роутера
|
|
9
9
|
*/
|
|
10
10
|
export function setRouter(r) {
|
|
11
11
|
router = r
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
|
-
*
|
|
16
|
-
* @param to
|
|
17
|
-
* @returns {boolean}
|
|
15
|
+
* Перевіряє доступ користувача до маршруту
|
|
16
|
+
* @param {import('vue-router').RouteLocationNormalized} to - Маршрут призначення
|
|
17
|
+
* @returns {boolean} - Чи дозволено доступ
|
|
18
18
|
*/
|
|
19
19
|
export function canUserAccess(to) {
|
|
20
20
|
// Якщо сторінка без обмеження по ролям то дозволяємо завжди
|
|
@@ -55,8 +55,9 @@ export function canUserAccess(to) {
|
|
|
55
55
|
}
|
|
56
56
|
|
|
57
57
|
/**
|
|
58
|
-
*
|
|
59
|
-
* @param to
|
|
58
|
+
* Перевіряє доступ за наявності ролей у метаданих маршруту
|
|
59
|
+
* @param {import('vue-router').RouteLocationNormalized} to - Маршрут призначення
|
|
60
|
+
* @returns {boolean} - Чи дозволено доступ
|
|
60
61
|
*/
|
|
61
62
|
export function canUserAccessMetaRoles(to) {
|
|
62
63
|
// Якщо сторінка без обмеження по ролям то дозволяємо завжди
|
package/src/token.js
CHANGED
|
@@ -7,10 +7,9 @@ import { setUser, unsetUser } from './user.js'
|
|
|
7
7
|
const allowedRoles = import.meta.env.VITE_HASURA_ROLE.split(',')
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
|
-
*
|
|
11
|
-
* та перенаправляємо на сторінку входу
|
|
10
|
+
* Перевіряє коректність JWT токена
|
|
12
11
|
* @param {string} token - JWT токен
|
|
13
|
-
* @returns {{result:
|
|
12
|
+
* @returns {{result: 'ok'|'expired'|'cleaned'|'broken-role', decoded?: object}} - Результат перевірки
|
|
14
13
|
*/
|
|
15
14
|
export function checkToken(token) {
|
|
16
15
|
const decoded = jwtDecode(token)
|
package/src/user.js
CHANGED
|
@@ -3,15 +3,15 @@ const allowedRoles = import.meta.env.VITE_HASURA_ROLE.split(',')
|
|
|
3
3
|
export let user = {}
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
6
|
+
* Очищає дані поточного користувача
|
|
7
7
|
*/
|
|
8
8
|
export function unsetUser() {
|
|
9
9
|
user = {}
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
|
-
*
|
|
14
|
-
* @param u
|
|
13
|
+
* Встановлює дані користувача з розкодованого JWT
|
|
14
|
+
* @param {object} u - Обʼєкт з Hasura claims розкодованого токена
|
|
15
15
|
*/
|
|
16
16
|
export function setUser(u) {
|
|
17
17
|
user = u
|
|
@@ -23,10 +23,10 @@ export function setUser(u) {
|
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
/**
|
|
26
|
-
*
|
|
27
|
-
* @param a
|
|
28
|
-
* @param b
|
|
29
|
-
* @returns {string[]}
|
|
26
|
+
* Повертає спільні елементи двох масивів рядків
|
|
27
|
+
* @param {string[]} a - Перший масив рядків
|
|
28
|
+
* @param {string[]} b - Другий масив рядків
|
|
29
|
+
* @returns {string[]} - Масив спільних значень
|
|
30
30
|
*/
|
|
31
31
|
function intersection(a, b) {
|
|
32
32
|
const setA = new Set(a)
|