@groundbrick/sveltekit-adapter 0.1.0
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/README.md +554 -0
- package/dist/analytics/components/GoogleAnalytics.svelte +96 -0
- package/dist/analytics/config/analytics.config.d.ts +6 -0
- package/dist/analytics/config/analytics.config.d.ts.map +1 -0
- package/dist/analytics/config/analytics.config.js +27 -0
- package/dist/analytics/config/analytics.config.js.map +1 -0
- package/dist/analytics/index.d.ts +7 -0
- package/dist/analytics/index.d.ts.map +1 -0
- package/dist/analytics/index.js +9 -0
- package/dist/analytics/index.js.map +1 -0
- package/dist/analytics/interfaces/IAnalyticsService.d.ts +40 -0
- package/dist/analytics/interfaces/IAnalyticsService.d.ts.map +1 -0
- package/dist/analytics/interfaces/IAnalyticsService.js +2 -0
- package/dist/analytics/interfaces/IAnalyticsService.js.map +1 -0
- package/dist/analytics/services/AnalyticsService.d.ts +37 -0
- package/dist/analytics/services/AnalyticsService.d.ts.map +1 -0
- package/dist/analytics/services/AnalyticsService.js +261 -0
- package/dist/analytics/services/AnalyticsService.js.map +1 -0
- package/dist/analytics/utils/consent.d.ts +52 -0
- package/dist/analytics/utils/consent.d.ts.map +1 -0
- package/dist/analytics/utils/consent.js +138 -0
- package/dist/analytics/utils/consent.js.map +1 -0
- package/dist/auth/index.d.ts +10 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +49 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/client/ApiClient.d.ts +17 -0
- package/dist/client/ApiClient.d.ts.map +1 -0
- package/dist/client/ApiClient.js +184 -0
- package/dist/client/ApiClient.js.map +1 -0
- package/dist/client/NotificationComponent.d.ts +7 -0
- package/dist/client/NotificationComponent.d.ts.map +1 -0
- package/dist/client/NotificationComponent.js +131 -0
- package/dist/client/NotificationComponent.js.map +1 -0
- package/dist/client/apiWrapper.d.ts +324 -0
- package/dist/client/apiWrapper.d.ts.map +1 -0
- package/dist/client/apiWrapper.js +257 -0
- package/dist/client/apiWrapper.js.map +1 -0
- package/dist/client/authErrorHandler.d.ts +19 -0
- package/dist/client/authErrorHandler.d.ts.map +1 -0
- package/dist/client/authErrorHandler.js +40 -0
- package/dist/client/authErrorHandler.js.map +1 -0
- package/dist/client/hooks.d.ts +11 -0
- package/dist/client/hooks.d.ts.map +1 -0
- package/dist/client/hooks.js +28 -0
- package/dist/client/hooks.js.map +1 -0
- package/dist/client/index.d.ts +8 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +13 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/jwtDecoder.d.ts +56 -0
- package/dist/client/jwtDecoder.d.ts.map +1 -0
- package/dist/client/jwtDecoder.js +114 -0
- package/dist/client/jwtDecoder.js.map +1 -0
- package/dist/client/notifications.d.ts +55 -0
- package/dist/client/notifications.d.ts.map +1 -0
- package/dist/client/notifications.js +160 -0
- package/dist/client/notifications.js.map +1 -0
- package/dist/client/stores.d.ts +26 -0
- package/dist/client/stores.d.ts.map +1 -0
- package/dist/client/stores.js +196 -0
- package/dist/client/stores.js.map +1 -0
- package/dist/consent/components/CookieConsent.svelte +580 -0
- package/dist/consent/config/consent.config.d.ts +7 -0
- package/dist/consent/config/consent.config.d.ts.map +1 -0
- package/dist/consent/config/consent.config.js +194 -0
- package/dist/consent/config/consent.config.js.map +1 -0
- package/dist/consent/index.d.ts +5 -0
- package/dist/consent/index.d.ts.map +1 -0
- package/dist/consent/index.js +7 -0
- package/dist/consent/index.js.map +1 -0
- package/dist/consent/interfaces/IConsentService.d.ts +121 -0
- package/dist/consent/interfaces/IConsentService.d.ts.map +1 -0
- package/dist/consent/interfaces/IConsentService.js +2 -0
- package/dist/consent/interfaces/IConsentService.js.map +1 -0
- package/dist/consent/services/ConsentService.d.ts +39 -0
- package/dist/consent/services/ConsentService.d.ts.map +1 -0
- package/dist/consent/services/ConsentService.js +302 -0
- package/dist/consent/services/ConsentService.js.map +1 -0
- package/dist/consent/utils/analytics.d.ts +52 -0
- package/dist/consent/utils/analytics.d.ts.map +1 -0
- package/dist/consent/utils/analytics.js +181 -0
- package/dist/consent/utils/analytics.js.map +1 -0
- package/dist/hooks/index.d.ts +14 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +218 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/types/index.d.ts +88 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +87 -0
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import { writable, derived, get } from 'svelte/store';
|
|
2
|
+
import { browser } from '$app/environment';
|
|
3
|
+
import { safeDecodeJwt } from './jwtDecoder.js';
|
|
4
|
+
// ============================================================================
|
|
5
|
+
// AUTH STORE
|
|
6
|
+
// ============================================================================
|
|
7
|
+
function createAuthStore() {
|
|
8
|
+
const { subscribe, set, update } = writable({
|
|
9
|
+
isAuthenticated: false,
|
|
10
|
+
user: null,
|
|
11
|
+
loading: false,
|
|
12
|
+
error: null
|
|
13
|
+
});
|
|
14
|
+
return {
|
|
15
|
+
subscribe,
|
|
16
|
+
set,
|
|
17
|
+
update,
|
|
18
|
+
login: (user) => {
|
|
19
|
+
// HttpOnly cookies are handled by server - no client-side storage needed
|
|
20
|
+
set({
|
|
21
|
+
isAuthenticated: true,
|
|
22
|
+
user,
|
|
23
|
+
loading: false,
|
|
24
|
+
error: null
|
|
25
|
+
});
|
|
26
|
+
},
|
|
27
|
+
logout: () => {
|
|
28
|
+
// HttpOnly cookies are cleared by server via /auth/logout endpoint
|
|
29
|
+
set({
|
|
30
|
+
isAuthenticated: false,
|
|
31
|
+
user: null,
|
|
32
|
+
loading: false,
|
|
33
|
+
error: null
|
|
34
|
+
});
|
|
35
|
+
},
|
|
36
|
+
setLoading: (loading) => {
|
|
37
|
+
update(state => ({ ...state, loading }));
|
|
38
|
+
},
|
|
39
|
+
setError: (error) => {
|
|
40
|
+
update(state => ({ ...state, error, loading: false }));
|
|
41
|
+
},
|
|
42
|
+
initialize: () => {
|
|
43
|
+
// Auth state is managed by server-side via HttpOnly cookies
|
|
44
|
+
// The app layout will call initializeFromJwt() with decoded JWT data
|
|
45
|
+
// to avoid circular dependencies and API calls
|
|
46
|
+
},
|
|
47
|
+
initializeFromJwt: (jwtPayload) => {
|
|
48
|
+
// Convert JWT payload to user object (generic fields only)
|
|
49
|
+
const user = {
|
|
50
|
+
id: jwtPayload.userId,
|
|
51
|
+
email: jwtPayload.email,
|
|
52
|
+
role: jwtPayload.role,
|
|
53
|
+
name: jwtPayload.name,
|
|
54
|
+
permissions: jwtPayload.permissions,
|
|
55
|
+
// Include all other payload fields dynamically
|
|
56
|
+
...Object.fromEntries(Object.entries(jwtPayload).filter(([key]) => !['userId', 'email', 'role', 'name', 'permissions', 'iat', 'exp'].includes(key)))
|
|
57
|
+
};
|
|
58
|
+
set({
|
|
59
|
+
isAuthenticated: true,
|
|
60
|
+
user,
|
|
61
|
+
loading: false,
|
|
62
|
+
error: null
|
|
63
|
+
});
|
|
64
|
+
console.debug('Auth initialized from JWT payload', {
|
|
65
|
+
userId: jwtPayload.userId,
|
|
66
|
+
role: jwtPayload.role,
|
|
67
|
+
permissionsCount: jwtPayload.permissions?.length || 0
|
|
68
|
+
});
|
|
69
|
+
},
|
|
70
|
+
initializeFromToken: (token) => {
|
|
71
|
+
try {
|
|
72
|
+
const decoded = safeDecodeJwt(token);
|
|
73
|
+
if (!decoded || !decoded.isValid) {
|
|
74
|
+
console.debug('Invalid JWT token provided for auth initialization');
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
if (decoded.isExpired) {
|
|
78
|
+
console.debug('Expired JWT token provided for auth initialization');
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
// Convert JWT payload to user object (generic fields only)
|
|
82
|
+
const user = {
|
|
83
|
+
id: decoded.payload.userId,
|
|
84
|
+
email: decoded.payload.email,
|
|
85
|
+
role: decoded.payload.role,
|
|
86
|
+
name: decoded.payload.name,
|
|
87
|
+
permissions: decoded.payload.permissions,
|
|
88
|
+
// Include all other payload fields dynamically
|
|
89
|
+
...Object.fromEntries(Object.entries(decoded.payload).filter(([key]) => !['userId', 'email', 'role', 'name', 'permissions', 'iat', 'exp'].includes(key)))
|
|
90
|
+
};
|
|
91
|
+
set({
|
|
92
|
+
isAuthenticated: true,
|
|
93
|
+
user,
|
|
94
|
+
loading: false,
|
|
95
|
+
error: null
|
|
96
|
+
});
|
|
97
|
+
console.debug('Auth initialized from token', {
|
|
98
|
+
userId: decoded.payload.userId,
|
|
99
|
+
role: decoded.payload.role,
|
|
100
|
+
permissionsCount: decoded.payload.permissions?.length || 0
|
|
101
|
+
});
|
|
102
|
+
return true;
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
console.warn('Failed to initialize auth from token:', error);
|
|
106
|
+
return false;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
export const authStore = createAuthStore();
|
|
112
|
+
// ============================================================================
|
|
113
|
+
// API STORE
|
|
114
|
+
// ============================================================================
|
|
115
|
+
function createApiStore() {
|
|
116
|
+
const { subscribe, set, update } = writable({
|
|
117
|
+
loading: false,
|
|
118
|
+
error: null,
|
|
119
|
+
lastRequest: null
|
|
120
|
+
});
|
|
121
|
+
return {
|
|
122
|
+
subscribe,
|
|
123
|
+
set,
|
|
124
|
+
update,
|
|
125
|
+
setLoading: (loading) => {
|
|
126
|
+
update(state => ({ ...state, loading }));
|
|
127
|
+
},
|
|
128
|
+
setError: (error) => {
|
|
129
|
+
update(state => ({ ...state, error }));
|
|
130
|
+
},
|
|
131
|
+
setLastRequest: (request) => {
|
|
132
|
+
update(state => ({ ...state, lastRequest: request }));
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
export const apiStore = createApiStore();
|
|
137
|
+
// ============================================================================
|
|
138
|
+
// DERIVED STORES
|
|
139
|
+
// ============================================================================
|
|
140
|
+
// Get current user
|
|
141
|
+
export const currentUser = derived(authStore, $auth => $auth.user);
|
|
142
|
+
// Check if any operation is loading
|
|
143
|
+
export const isLoading = derived([authStore, apiStore], ([$auth, $api]) => $auth.loading || $api.loading);
|
|
144
|
+
// Get any error from auth or API
|
|
145
|
+
export const currentError = derived([authStore, apiStore], ([$auth, $api]) => $auth.error || $api.error);
|
|
146
|
+
// ============================================================================
|
|
147
|
+
// STORE ACTIONS
|
|
148
|
+
// ============================================================================
|
|
149
|
+
// Initialize stores on app start
|
|
150
|
+
export function initializeStores() {
|
|
151
|
+
if (browser) {
|
|
152
|
+
authStore.initialize();
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
// Clear all errors
|
|
156
|
+
export function clearErrors() {
|
|
157
|
+
authStore.setError(null);
|
|
158
|
+
apiStore.setError(null);
|
|
159
|
+
}
|
|
160
|
+
// Initialize auth with API client (deprecated - use initializeFromJwt instead)
|
|
161
|
+
export async function initializeAuth(apiClient) {
|
|
162
|
+
if (!browser)
|
|
163
|
+
return;
|
|
164
|
+
// Get current auth state to avoid overriding existing user data
|
|
165
|
+
const currentState = get(authStore);
|
|
166
|
+
// If user is already authenticated, skip the API call to avoid race conditions
|
|
167
|
+
if (currentState.isAuthenticated && currentState.user) {
|
|
168
|
+
console.debug('Auth already initialized, skipping API call');
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
authStore.setLoading(true);
|
|
172
|
+
try {
|
|
173
|
+
// This will work if user has valid HttpOnly cookie
|
|
174
|
+
const result = await apiClient.get('/auth/me');
|
|
175
|
+
if (result) {
|
|
176
|
+
authStore.login(result);
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
authStore.setLoading(false);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
catch (error) {
|
|
183
|
+
// User not authenticated or network error - that's fine
|
|
184
|
+
console.debug('Auth initialization: user not authenticated');
|
|
185
|
+
authStore.setLoading(false);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
// Initialize auth from JWT payload (recommended approach)
|
|
189
|
+
export function initializeFromJwt(jwtPayload) {
|
|
190
|
+
authStore.initializeFromJwt(jwtPayload);
|
|
191
|
+
}
|
|
192
|
+
// Initialize auth from JWT token string
|
|
193
|
+
export function initializeFromToken(token) {
|
|
194
|
+
return authStore.initializeFromToken(token);
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=stores.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stores.js","sourceRoot":"","sources":["../../src/client/stores.ts"],"names":[],"mappings":"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"}
|