@userfrosting/sprinkle-core 6.0.0-beta.7 → 6.0.0-beta.8
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/dist/Page401Unauthorized-Dkz0W0kI.js +11 -0
- package/dist/Page403Forbidden-CZrvZLe3.js +11 -0
- package/dist/Page404NotFound-C7Y20KCv.js +11 -0
- package/dist/PageError-wq0-2ksY.js +11 -0
- package/dist/_plugin-vue_export-helper-CHgC5LLL.js +9 -0
- package/dist/composables/index.d.ts +4 -0
- package/dist/composables/useAxiosInterceptor.d.ts +10 -0
- package/dist/composables/useCsrf.d.ts +18 -0
- package/dist/composables/useRuleSchemaAdapter.d.ts +7 -0
- package/dist/composables/useSprunjer.d.ts +2 -0
- package/dist/composables.js +151 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.js +15 -0
- package/{app/assets/interfaces/ApiResponse.ts → dist/interfaces/ApiResponse.d.ts} +5 -6
- package/{app/assets/interfaces/DictionaryApi.ts → dist/interfaces/DictionaryApi.d.ts} +9 -11
- package/dist/interfaces/alerts.d.ts +8 -0
- package/{app/assets/interfaces/common.ts → dist/interfaces/common.d.ts} +1 -1
- package/dist/interfaces/index.d.ts +13 -0
- package/{app/assets/interfaces/severity.ts → dist/interfaces/severity.d.ts} +9 -9
- package/dist/interfaces/sprunjer.d.ts +51 -0
- package/{app/assets/interfaces/sprunjerApi.ts → dist/interfaces/sprunjerApi.d.ts} +12 -15
- package/dist/interfaces.js +5 -0
- package/dist/routes/index.d.ts +16 -0
- package/dist/routes.js +41 -0
- package/dist/severity-DwLpzIij.js +4 -0
- package/{app/assets/stores/Helpers/PluralRules.ts → dist/stores/Helpers/PluralRules.d.ts} +17 -114
- package/dist/stores/index.d.ts +4 -0
- package/dist/stores/useAlertsStore.d.ts +29 -0
- package/dist/stores/useConfigStore.d.ts +11 -0
- package/dist/stores/usePageMeta.d.ts +51 -0
- package/dist/stores/useTranslator.d.ts +66 -0
- package/dist/stores.js +7 -0
- package/dist/useAlertsStore-BnSfoOG2.js +179 -0
- package/dist/useAxiosInterceptor-DTHSvv-f.js +68 -0
- package/dist/views/Page401Unauthorized.vue.d.ts +2 -0
- package/dist/views/Page403Forbidden.vue.d.ts +2 -0
- package/dist/views/Page404NotFound.vue.d.ts +2 -0
- package/dist/views/PageError.vue.d.ts +2 -0
- package/package.json +36 -8
- package/app/assets/composables/index.ts +0 -4
- package/app/assets/composables/useAxiosInterceptor.ts +0 -30
- package/app/assets/composables/useCsrf.ts +0 -129
- package/app/assets/composables/useRuleSchemaAdapter.ts +0 -205
- package/app/assets/composables/useSprunjer.ts +0 -188
- package/app/assets/index.d.ts +0 -8
- package/app/assets/index.ts +0 -40
- package/app/assets/interfaces/alerts.ts +0 -16
- package/app/assets/interfaces/index.ts +0 -30
- package/app/assets/interfaces/sprunjer.ts +0 -60
- package/app/assets/routes/index.ts +0 -44
- package/app/assets/stores/index.ts +0 -4
- package/app/assets/stores/useAlertsStore.ts +0 -30
- package/app/assets/stores/useConfigStore.ts +0 -30
- package/app/assets/stores/usePageMeta.ts +0 -114
- package/app/assets/stores/useTranslator.ts +0 -293
- package/app/assets/tests/composables/useCsrf.test.ts +0 -212
- package/app/assets/tests/composables/useRuleSchemaAdapter.test.ts +0 -657
- package/app/assets/tests/interfaces/alerts.test.ts +0 -43
- package/app/assets/tests/plugin.test.ts +0 -29
- package/app/assets/tests/stores/Helpers/PluralRules.test.ts +0 -440
- package/app/assets/tests/stores/config.test.ts +0 -42
- package/app/assets/tests/stores/useTranslator.test.ts +0 -373
- package/app/assets/views/Page401Unauthorized.vue +0 -3
- package/app/assets/views/Page403Forbidden.vue +0 -3
- package/app/assets/views/Page404NotFound.vue +0 -3
- package/app/assets/views/PageError.vue +0 -3
|
@@ -1,212 +0,0 @@
|
|
|
1
|
-
import { describe, expect, beforeEach, afterEach, test, vi } from 'vitest'
|
|
2
|
-
import axios from 'axios'
|
|
3
|
-
import { useConfigStore } from '../../stores/useConfigStore'
|
|
4
|
-
import { useCsrf } from '../../composables/useCsrf'
|
|
5
|
-
import { nextTick } from 'vue'
|
|
6
|
-
|
|
7
|
-
// Mock the config store
|
|
8
|
-
vi.mock('../../stores/useConfigStore')
|
|
9
|
-
const mockUseConfigStore = {
|
|
10
|
-
get: vi.fn()
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
describe('Csrf Composable', () => {
|
|
14
|
-
afterEach(() => {
|
|
15
|
-
vi.clearAllMocks()
|
|
16
|
-
vi.resetAllMocks()
|
|
17
|
-
})
|
|
18
|
-
|
|
19
|
-
beforeEach(() => {
|
|
20
|
-
// Mock the config store
|
|
21
|
-
mockUseConfigStore.get.mockImplementation((key, defaultValue) => {
|
|
22
|
-
if (key === 'csrf.enabled') return true
|
|
23
|
-
if (key === 'csrf.name') return 'csrf'
|
|
24
|
-
return defaultValue
|
|
25
|
-
})
|
|
26
|
-
vi.mocked(useConfigStore).mockReturnValue(mockUseConfigStore as any)
|
|
27
|
-
|
|
28
|
-
// Reset axios defaults
|
|
29
|
-
axios.defaults.headers.post = {}
|
|
30
|
-
axios.defaults.headers.put = {}
|
|
31
|
-
axios.defaults.headers.delete = {}
|
|
32
|
-
axios.defaults.headers.patch = {}
|
|
33
|
-
|
|
34
|
-
// Reset the document head
|
|
35
|
-
document.head.innerHTML = ''
|
|
36
|
-
})
|
|
37
|
-
|
|
38
|
-
test('initializes CSRF token name and value from meta tags', () => {
|
|
39
|
-
document.head.innerHTML = `
|
|
40
|
-
<meta name="csrf_name" content="123456">
|
|
41
|
-
<meta name="csrf_value" content="7c4a8d09">
|
|
42
|
-
`
|
|
43
|
-
|
|
44
|
-
const { name, token } = useCsrf()
|
|
45
|
-
expect(name.value).toBe('123456')
|
|
46
|
-
expect(token.value).toBe('7c4a8d09')
|
|
47
|
-
})
|
|
48
|
-
|
|
49
|
-
test('sets axios headers correctly when CSRF is enabled', async () => {
|
|
50
|
-
const csrf = useCsrf()
|
|
51
|
-
|
|
52
|
-
// Expect axios default headers
|
|
53
|
-
expect(axios.defaults.headers.post).toEqual({})
|
|
54
|
-
expect(axios.defaults.headers.put).toEqual({})
|
|
55
|
-
expect(axios.defaults.headers.delete).toEqual({})
|
|
56
|
-
expect(axios.defaults.headers.patch).toEqual({})
|
|
57
|
-
|
|
58
|
-
// Set CSRF token values - Will trigger the WatchEffect
|
|
59
|
-
csrf.name.value = '654321'
|
|
60
|
-
csrf.token.value = 'abcdef'
|
|
61
|
-
|
|
62
|
-
// Wait for the next tick to ensure watchEffect is triggered
|
|
63
|
-
await nextTick()
|
|
64
|
-
|
|
65
|
-
// Expect axios headers to be set correctly
|
|
66
|
-
expect(csrf.isEnabled()).toBe(true)
|
|
67
|
-
expect(csrf.name.value).toBe('654321')
|
|
68
|
-
expect(csrf.token.value).toBe('abcdef')
|
|
69
|
-
expect(csrf.key_name.value).toBe('csrf_name')
|
|
70
|
-
expect(csrf.key_value.value).toBe('csrf_value')
|
|
71
|
-
expect(axios.defaults.headers.post['csrf_name']).toBe('654321')
|
|
72
|
-
expect(axios.defaults.headers.post['csrf_value']).toBe('abcdef')
|
|
73
|
-
expect(axios.defaults.headers.put['csrf_name']).toBe('654321')
|
|
74
|
-
expect(axios.defaults.headers.put['csrf_value']).toBe('abcdef')
|
|
75
|
-
expect(axios.defaults.headers.delete['csrf_name']).toBe('654321')
|
|
76
|
-
expect(axios.defaults.headers.delete['csrf_value']).toBe('abcdef')
|
|
77
|
-
expect(axios.defaults.headers.patch['csrf_name']).toBe('654321')
|
|
78
|
-
expect(axios.defaults.headers.patch['csrf_value']).toBe('abcdef')
|
|
79
|
-
})
|
|
80
|
-
|
|
81
|
-
test('does not set axios headers when CSRF is disabled', () => {
|
|
82
|
-
// Change the mock implementation to simulate CSRF being disabled
|
|
83
|
-
mockUseConfigStore.get.mockImplementation((key, defaultValue) => {
|
|
84
|
-
if (key === 'csrf.enabled') return false // CSRF is disabled
|
|
85
|
-
if (key === 'csrf.name') return 'csrf'
|
|
86
|
-
return defaultValue
|
|
87
|
-
})
|
|
88
|
-
vi.mocked(useConfigStore).mockReturnValue(mockUseConfigStore as any)
|
|
89
|
-
|
|
90
|
-
// Get the CSRF composable
|
|
91
|
-
const csrf = useCsrf()
|
|
92
|
-
|
|
93
|
-
// Assert everything is empty
|
|
94
|
-
expect(csrf.isEnabled()).toBe(false)
|
|
95
|
-
expect(csrf.name.value).toBe('')
|
|
96
|
-
expect(csrf.token.value).toBe('')
|
|
97
|
-
expect(axios.defaults.headers.post).toEqual({})
|
|
98
|
-
expect(axios.defaults.headers.put).toEqual({})
|
|
99
|
-
expect(axios.defaults.headers.delete).toEqual({})
|
|
100
|
-
expect(axios.defaults.headers.patch).toEqual({})
|
|
101
|
-
})
|
|
102
|
-
|
|
103
|
-
test('updates CSRF token updates meta tags', async () => {
|
|
104
|
-
document.head.innerHTML = `
|
|
105
|
-
<meta name="csrf_name" content="old_name">
|
|
106
|
-
<meta name="csrf_value" content="old_value">
|
|
107
|
-
`
|
|
108
|
-
|
|
109
|
-
// Assert initial state
|
|
110
|
-
const csrf = useCsrf()
|
|
111
|
-
expect(csrf.name.value).toBe('old_name')
|
|
112
|
-
expect(csrf.token.value).toBe('old_value')
|
|
113
|
-
expect(document.querySelector("meta[name='csrf_name']")?.getAttribute('content')).toBe(
|
|
114
|
-
'old_name'
|
|
115
|
-
)
|
|
116
|
-
expect(document.querySelector("meta[name='csrf_value']")?.getAttribute('content')).toBe(
|
|
117
|
-
'old_value'
|
|
118
|
-
)
|
|
119
|
-
|
|
120
|
-
// Update CSRF tokens manually
|
|
121
|
-
csrf.name.value = 'new_name'
|
|
122
|
-
csrf.token.value = 'new_value'
|
|
123
|
-
|
|
124
|
-
// Wait for the next tick to ensure watchEffect is triggered
|
|
125
|
-
await nextTick()
|
|
126
|
-
|
|
127
|
-
// Assert new state
|
|
128
|
-
expect(csrf.name.value).toBe('new_name')
|
|
129
|
-
expect(csrf.token.value).toBe('new_value')
|
|
130
|
-
expect(document.querySelector("meta[name='csrf_name']")?.getAttribute('content')).toBe(
|
|
131
|
-
'new_name'
|
|
132
|
-
)
|
|
133
|
-
expect(document.querySelector("meta[name='csrf_value']")?.getAttribute('content')).toBe(
|
|
134
|
-
'new_value'
|
|
135
|
-
)
|
|
136
|
-
})
|
|
137
|
-
|
|
138
|
-
test('CSRF token can be updated from headers', async () => {
|
|
139
|
-
const csrf = useCsrf()
|
|
140
|
-
|
|
141
|
-
// Assert initial state
|
|
142
|
-
expect(csrf.name.value).toBe('')
|
|
143
|
-
expect(csrf.token.value).toBe('')
|
|
144
|
-
|
|
145
|
-
const headers = {
|
|
146
|
-
'csrf-name': 'new_name',
|
|
147
|
-
'csrf-value': 'new_value'
|
|
148
|
-
}
|
|
149
|
-
csrf.updateFromHeaders(headers)
|
|
150
|
-
|
|
151
|
-
// Wait for the next tick to ensure watchEffect is triggered
|
|
152
|
-
await nextTick()
|
|
153
|
-
|
|
154
|
-
expect(csrf.name.value).toBe('new_name')
|
|
155
|
-
expect(csrf.token.value).toBe('new_value')
|
|
156
|
-
expect(document.querySelector("meta[name='csrf_name']")?.getAttribute('content')).toBe(
|
|
157
|
-
'new_name'
|
|
158
|
-
)
|
|
159
|
-
expect(document.querySelector("meta[name='csrf_value']")?.getAttribute('content')).toBe(
|
|
160
|
-
'new_value'
|
|
161
|
-
)
|
|
162
|
-
expect(axios.defaults.headers.post['csrf_name']).toBe('new_name')
|
|
163
|
-
expect(axios.defaults.headers.post['csrf_value']).toBe('new_value')
|
|
164
|
-
expect(axios.defaults.headers.put['csrf_name']).toBe('new_name')
|
|
165
|
-
expect(axios.defaults.headers.put['csrf_value']).toBe('new_value')
|
|
166
|
-
expect(axios.defaults.headers.delete['csrf_name']).toBe('new_name')
|
|
167
|
-
expect(axios.defaults.headers.delete['csrf_value']).toBe('new_value')
|
|
168
|
-
expect(axios.defaults.headers.patch['csrf_name']).toBe('new_name')
|
|
169
|
-
expect(axios.defaults.headers.patch['csrf_value']).toBe('new_value')
|
|
170
|
-
})
|
|
171
|
-
|
|
172
|
-
test('CSRF token can handle empty headers', async () => {
|
|
173
|
-
document.head.innerHTML = `
|
|
174
|
-
<meta name="csrf_name" content="123456">
|
|
175
|
-
<meta name="csrf_value" content="abcdef">
|
|
176
|
-
`
|
|
177
|
-
|
|
178
|
-
// Assert initial state
|
|
179
|
-
const csrf = useCsrf()
|
|
180
|
-
expect(csrf.name.value).toBe('123456')
|
|
181
|
-
expect(csrf.token.value).toBe('abcdef')
|
|
182
|
-
expect(document.querySelector("meta[name='csrf_name']")?.getAttribute('content')).toBe(
|
|
183
|
-
'123456'
|
|
184
|
-
)
|
|
185
|
-
expect(document.querySelector("meta[name='csrf_value']")?.getAttribute('content')).toBe(
|
|
186
|
-
'abcdef'
|
|
187
|
-
)
|
|
188
|
-
expect(axios.defaults.headers.post['csrf_name']).toBe('123456')
|
|
189
|
-
expect(axios.defaults.headers.post['csrf_value']).toBe('abcdef')
|
|
190
|
-
|
|
191
|
-
// Call updateFromHeaders with empty headers
|
|
192
|
-
const headers = {
|
|
193
|
-
foo: 'bar'
|
|
194
|
-
}
|
|
195
|
-
csrf.updateFromHeaders(headers)
|
|
196
|
-
|
|
197
|
-
// Wait for the next tick to ensure watchEffect is triggered
|
|
198
|
-
await nextTick()
|
|
199
|
-
|
|
200
|
-
// Assert state remains unchanged
|
|
201
|
-
expect(csrf.name.value).toBe('123456')
|
|
202
|
-
expect(csrf.token.value).toBe('abcdef')
|
|
203
|
-
expect(document.querySelector("meta[name='csrf_name']")?.getAttribute('content')).toBe(
|
|
204
|
-
'123456'
|
|
205
|
-
)
|
|
206
|
-
expect(document.querySelector("meta[name='csrf_value']")?.getAttribute('content')).toBe(
|
|
207
|
-
'abcdef'
|
|
208
|
-
)
|
|
209
|
-
expect(axios.defaults.headers.post['csrf_name']).toBe('123456')
|
|
210
|
-
expect(axios.defaults.headers.post['csrf_value']).toBe('abcdef')
|
|
211
|
-
})
|
|
212
|
-
})
|