@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.
Files changed (96) hide show
  1. package/README.md +554 -0
  2. package/dist/analytics/components/GoogleAnalytics.svelte +96 -0
  3. package/dist/analytics/config/analytics.config.d.ts +6 -0
  4. package/dist/analytics/config/analytics.config.d.ts.map +1 -0
  5. package/dist/analytics/config/analytics.config.js +27 -0
  6. package/dist/analytics/config/analytics.config.js.map +1 -0
  7. package/dist/analytics/index.d.ts +7 -0
  8. package/dist/analytics/index.d.ts.map +1 -0
  9. package/dist/analytics/index.js +9 -0
  10. package/dist/analytics/index.js.map +1 -0
  11. package/dist/analytics/interfaces/IAnalyticsService.d.ts +40 -0
  12. package/dist/analytics/interfaces/IAnalyticsService.d.ts.map +1 -0
  13. package/dist/analytics/interfaces/IAnalyticsService.js +2 -0
  14. package/dist/analytics/interfaces/IAnalyticsService.js.map +1 -0
  15. package/dist/analytics/services/AnalyticsService.d.ts +37 -0
  16. package/dist/analytics/services/AnalyticsService.d.ts.map +1 -0
  17. package/dist/analytics/services/AnalyticsService.js +261 -0
  18. package/dist/analytics/services/AnalyticsService.js.map +1 -0
  19. package/dist/analytics/utils/consent.d.ts +52 -0
  20. package/dist/analytics/utils/consent.d.ts.map +1 -0
  21. package/dist/analytics/utils/consent.js +138 -0
  22. package/dist/analytics/utils/consent.js.map +1 -0
  23. package/dist/auth/index.d.ts +10 -0
  24. package/dist/auth/index.d.ts.map +1 -0
  25. package/dist/auth/index.js +49 -0
  26. package/dist/auth/index.js.map +1 -0
  27. package/dist/client/ApiClient.d.ts +17 -0
  28. package/dist/client/ApiClient.d.ts.map +1 -0
  29. package/dist/client/ApiClient.js +184 -0
  30. package/dist/client/ApiClient.js.map +1 -0
  31. package/dist/client/NotificationComponent.d.ts +7 -0
  32. package/dist/client/NotificationComponent.d.ts.map +1 -0
  33. package/dist/client/NotificationComponent.js +131 -0
  34. package/dist/client/NotificationComponent.js.map +1 -0
  35. package/dist/client/apiWrapper.d.ts +324 -0
  36. package/dist/client/apiWrapper.d.ts.map +1 -0
  37. package/dist/client/apiWrapper.js +257 -0
  38. package/dist/client/apiWrapper.js.map +1 -0
  39. package/dist/client/authErrorHandler.d.ts +19 -0
  40. package/dist/client/authErrorHandler.d.ts.map +1 -0
  41. package/dist/client/authErrorHandler.js +40 -0
  42. package/dist/client/authErrorHandler.js.map +1 -0
  43. package/dist/client/hooks.d.ts +11 -0
  44. package/dist/client/hooks.d.ts.map +1 -0
  45. package/dist/client/hooks.js +28 -0
  46. package/dist/client/hooks.js.map +1 -0
  47. package/dist/client/index.d.ts +8 -0
  48. package/dist/client/index.d.ts.map +1 -0
  49. package/dist/client/index.js +13 -0
  50. package/dist/client/index.js.map +1 -0
  51. package/dist/client/jwtDecoder.d.ts +56 -0
  52. package/dist/client/jwtDecoder.d.ts.map +1 -0
  53. package/dist/client/jwtDecoder.js +114 -0
  54. package/dist/client/jwtDecoder.js.map +1 -0
  55. package/dist/client/notifications.d.ts +55 -0
  56. package/dist/client/notifications.d.ts.map +1 -0
  57. package/dist/client/notifications.js +160 -0
  58. package/dist/client/notifications.js.map +1 -0
  59. package/dist/client/stores.d.ts +26 -0
  60. package/dist/client/stores.d.ts.map +1 -0
  61. package/dist/client/stores.js +196 -0
  62. package/dist/client/stores.js.map +1 -0
  63. package/dist/consent/components/CookieConsent.svelte +580 -0
  64. package/dist/consent/config/consent.config.d.ts +7 -0
  65. package/dist/consent/config/consent.config.d.ts.map +1 -0
  66. package/dist/consent/config/consent.config.js +194 -0
  67. package/dist/consent/config/consent.config.js.map +1 -0
  68. package/dist/consent/index.d.ts +5 -0
  69. package/dist/consent/index.d.ts.map +1 -0
  70. package/dist/consent/index.js +7 -0
  71. package/dist/consent/index.js.map +1 -0
  72. package/dist/consent/interfaces/IConsentService.d.ts +121 -0
  73. package/dist/consent/interfaces/IConsentService.d.ts.map +1 -0
  74. package/dist/consent/interfaces/IConsentService.js +2 -0
  75. package/dist/consent/interfaces/IConsentService.js.map +1 -0
  76. package/dist/consent/services/ConsentService.d.ts +39 -0
  77. package/dist/consent/services/ConsentService.d.ts.map +1 -0
  78. package/dist/consent/services/ConsentService.js +302 -0
  79. package/dist/consent/services/ConsentService.js.map +1 -0
  80. package/dist/consent/utils/analytics.d.ts +52 -0
  81. package/dist/consent/utils/analytics.d.ts.map +1 -0
  82. package/dist/consent/utils/analytics.js +181 -0
  83. package/dist/consent/utils/analytics.js.map +1 -0
  84. package/dist/hooks/index.d.ts +14 -0
  85. package/dist/hooks/index.d.ts.map +1 -0
  86. package/dist/hooks/index.js +218 -0
  87. package/dist/hooks/index.js.map +1 -0
  88. package/dist/index.d.ts +5 -0
  89. package/dist/index.d.ts.map +1 -0
  90. package/dist/index.js +10 -0
  91. package/dist/index.js.map +1 -0
  92. package/dist/types/index.d.ts +88 -0
  93. package/dist/types/index.d.ts.map +1 -0
  94. package/dist/types/index.js +2 -0
  95. package/dist/types/index.js.map +1 -0
  96. package/package.json +87 -0
@@ -0,0 +1,218 @@
1
+ import { createLogger } from '@groundbrick/logger';
2
+ import { redirect } from '@sveltejs/kit';
3
+ // ============================================================================
4
+ // ERROR HANDLING HOOK
5
+ // ============================================================================
6
+ export function createErrorHandler(config = {}) {
7
+ const logger = config.logger || createLogger().child(config.context || 'error-handler');
8
+ return ({ error, event, status, message }) => {
9
+ const errorContext = {
10
+ url: event.url.pathname,
11
+ method: event.request.method,
12
+ status,
13
+ timestamp: new Date().toISOString(),
14
+ userAgent: event.request.headers.get('user-agent') || undefined
15
+ };
16
+ if (config.logErrors !== false) {
17
+ logger.error('Unhandled error in SvelteKit app', error, {
18
+ ...errorContext,
19
+ message
20
+ });
21
+ }
22
+ // Call custom error handler if provided
23
+ if (config.onError) {
24
+ config.onError(error, errorContext);
25
+ }
26
+ // Return user-friendly error message
27
+ if (status === 404) {
28
+ return {
29
+ message: 'Page not found'
30
+ };
31
+ }
32
+ if (status >= 500) {
33
+ return {
34
+ message: 'Internal server error'
35
+ };
36
+ }
37
+ return {
38
+ message: message || 'An error occurred'
39
+ };
40
+ };
41
+ }
42
+ // ============================================================================
43
+ // LOGGER HOOK
44
+ // ============================================================================
45
+ export function createLoggerHook(config = {}) {
46
+ const logger = createLogger().child(config.context || 'request-logger');
47
+ const excludePaths = config.excludePaths || ['/favicon.ico', '/robots.txt'];
48
+ return async ({ event, resolve }) => {
49
+ const { url, request } = event;
50
+ const startTime = Date.now();
51
+ // Skip logging for excluded paths
52
+ if (excludePaths.some(path => url.pathname === path)) {
53
+ return resolve(event);
54
+ }
55
+ // Log incoming request
56
+ if (config.logRequests !== false) {
57
+ const requestData = {
58
+ method: request.method,
59
+ url: url.pathname + url.search,
60
+ userAgent: request.headers.get('user-agent'),
61
+ ip: event.getClientAddress()
62
+ };
63
+ if (config.includeHeaders) {
64
+ requestData.headers = Object.fromEntries(request.headers.entries());
65
+ }
66
+ logger.info('Incoming request', requestData);
67
+ }
68
+ // Process request
69
+ let response = undefined;
70
+ let error = null;
71
+ try {
72
+ response = await resolve(event);
73
+ }
74
+ catch (err) {
75
+ error = err;
76
+ throw err; // Re-throw to let SvelteKit handle it
77
+ }
78
+ finally {
79
+ const duration = Date.now() - startTime;
80
+ // Log response
81
+ if (config.logResponses !== false) {
82
+ const responseData = {
83
+ method: request.method,
84
+ url: url.pathname + url.search,
85
+ status: response?.status,
86
+ duration,
87
+ error: error?.message
88
+ };
89
+ if (error) {
90
+ logger.error('Request failed', error, responseData);
91
+ }
92
+ else {
93
+ logger.info('Request completed', responseData);
94
+ }
95
+ }
96
+ }
97
+ return response;
98
+ };
99
+ }
100
+ // ============================================================================
101
+ // AUTH HOOK
102
+ // ============================================================================
103
+ export function createAuthHook(config = {}) {
104
+ const logger = createLogger().child('auth-hook');
105
+ const publicPaths = config.publicPaths || ['/login', '/register', '/'];
106
+ const redirectPath = config.redirectPath || '/login';
107
+ const tokenKey = config.tokenKey || 'auth_token';
108
+ const authenticatedRedirect = config.authenticatedRedirect || '/dashboard';
109
+ return async ({ event, resolve }) => {
110
+ const { url, cookies } = event;
111
+ const token = cookies.get(tokenKey);
112
+ // Check if user is authenticated and trying to access login/register
113
+ if (token && ['/login', '/register'].includes(url.pathname)) {
114
+ // Verify token is not expired before redirecting
115
+ try {
116
+ const payload = JSON.parse(atob(token.split('.')[1]));
117
+ const now = Math.floor(Date.now() / 1000);
118
+ if (!payload.exp || payload.exp >= now) {
119
+ logger.debug('Authenticated user accessing login/register, redirecting to dashboard', {
120
+ path: url.pathname,
121
+ redirectTo: authenticatedRedirect
122
+ });
123
+ throw redirect(302, authenticatedRedirect);
124
+ }
125
+ }
126
+ catch (error) {
127
+ // If token is invalid, clear it and continue to login/register
128
+ cookies.delete(tokenKey, { path: '/' });
129
+ }
130
+ }
131
+ // Check if current path is public
132
+ const isPublicPath = publicPaths.some(path => {
133
+ if (path.endsWith('*')) {
134
+ return url.pathname.startsWith(path.slice(0, -1));
135
+ }
136
+ return url.pathname === path;
137
+ });
138
+ // Skip auth check for public paths
139
+ if (isPublicPath) {
140
+ return resolve(event);
141
+ }
142
+ // Check if user has token for protected routes
143
+ if (!token) {
144
+ logger.debug('No auth token found, redirecting to login', {
145
+ path: url.pathname,
146
+ redirectTo: redirectPath
147
+ });
148
+ // Call custom auth required handler if provided
149
+ if (config.onAuthRequired) {
150
+ config.onAuthRequired();
151
+ }
152
+ // Preserve the current URL as redirect parameter
153
+ const currentPath = url.pathname + url.search;
154
+ const loginUrl = currentPath !== redirectPath && currentPath !== '/'
155
+ ? `${redirectPath}?redirect=${encodeURIComponent(currentPath)}`
156
+ : redirectPath;
157
+ throw redirect(302, loginUrl);
158
+ }
159
+ // Optionally check token expiration (client-side decode)
160
+ if (config.validateExpiration !== false) {
161
+ try {
162
+ // Decode JWT without verification (just to check expiration)
163
+ const payload = JSON.parse(atob(token.split('.')[1]));
164
+ const now = Math.floor(Date.now() / 1000);
165
+ if (payload.exp && payload.exp < now) {
166
+ logger.debug('Token expired, clearing and redirecting', {
167
+ path: url.pathname,
168
+ expiredAt: new Date(payload.exp * 1000).toISOString(),
169
+ redirectTo: redirectPath
170
+ });
171
+ // Clear expired token
172
+ cookies.delete(tokenKey, { path: '/' });
173
+ if (config.onAuthRequired) {
174
+ config.onAuthRequired();
175
+ }
176
+ // Preserve the current URL as redirect parameter
177
+ const currentPath = url.pathname + url.search;
178
+ const loginUrl = currentPath !== redirectPath && currentPath !== '/'
179
+ ? `${redirectPath}?redirect=${encodeURIComponent(currentPath)}`
180
+ : redirectPath;
181
+ throw redirect(302, loginUrl);
182
+ }
183
+ }
184
+ catch (error) {
185
+ logger.warn('Failed to decode token, proceeding anyway', {
186
+ path: url.pathname,
187
+ error: error.message
188
+ });
189
+ }
190
+ }
191
+ // Add token to locals for use in pages/API routes
192
+ event.locals.authToken = token;
193
+ logger.debug('Auth token found and valid, proceeding', {
194
+ path: url.pathname,
195
+ hasToken: !!token
196
+ });
197
+ return resolve(event);
198
+ };
199
+ }
200
+ // ============================================================================
201
+ // COMBINED HOOK HELPER
202
+ // ============================================================================
203
+ export function createSvelteKitHooks(config = {}) {
204
+ const hooks = [];
205
+ // Add logger hook if configured
206
+ if (config.logger !== null) {
207
+ hooks.push(createLoggerHook(config.logger));
208
+ }
209
+ // Add auth hook if configured
210
+ if (config.auth) {
211
+ hooks.push(createAuthHook(config.auth));
212
+ }
213
+ return {
214
+ hooks,
215
+ handleError: createErrorHandler(config.errorHandler)
216
+ };
217
+ }
218
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export * from './client/index.js';
2
+ export * from './hooks/index.js';
3
+ export * from './consent/index.js';
4
+ export * from './analytics/index.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,cAAc,mBAAmB,CAAC;AAGlC,cAAc,kBAAkB,CAAC;AAGjC,cAAc,oBAAoB,CAAC;AAGnC,cAAc,sBAAsB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,10 @@
1
+ // packages/sveltekit-adapter/src/index.ts
2
+ // Re-export client functionality
3
+ export * from './client/index.js';
4
+ // Re-export hooks functionality
5
+ export * from './hooks/index.js';
6
+ // Re-export consent system
7
+ export * from './consent/index.js';
8
+ // Re-export analytics system
9
+ export * from './analytics/index.js';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAE1C,iCAAiC;AACjC,cAAc,mBAAmB,CAAC;AAElC,gCAAgC;AAChC,cAAc,kBAAkB,CAAC;AAEjC,2BAA2B;AAC3B,cAAc,oBAAoB,CAAC;AAEnC,6BAA6B;AAC7B,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,88 @@
1
+ import type { Logger } from '@groundbrick/logger';
2
+ export interface ApiClientConfig {
3
+ baseUrl: string;
4
+ timeout?: number;
5
+ retries?: number;
6
+ defaultHeaders?: Record<string, string>;
7
+ }
8
+ export interface ApiResponse<T = unknown> {
9
+ success: boolean;
10
+ data?: T;
11
+ error?: string;
12
+ message?: string;
13
+ }
14
+ export interface AuthResponse {
15
+ user: Record<string, unknown>;
16
+ token: string;
17
+ }
18
+ export interface RequestOptions extends RequestInit {
19
+ skipAuth?: boolean;
20
+ timeout?: number;
21
+ }
22
+ export interface ErrorContext {
23
+ url?: string;
24
+ method?: string;
25
+ status?: number;
26
+ timestamp: string;
27
+ userAgent?: string;
28
+ }
29
+ export interface ErrorHandlerConfig {
30
+ logErrors?: boolean;
31
+ context?: string;
32
+ logger?: Logger;
33
+ onError?: (error: Error, context: ErrorContext) => void;
34
+ }
35
+ export interface LoggerHookConfig {
36
+ logRequests?: boolean;
37
+ logResponses?: boolean;
38
+ includeHeaders?: boolean;
39
+ excludePaths?: string[];
40
+ context?: string;
41
+ }
42
+ export interface AuthHookConfig {
43
+ tokenKey?: string;
44
+ redirectPath?: string;
45
+ authenticatedRedirect?: string;
46
+ publicPaths?: string[];
47
+ onAuthRequired?: () => void;
48
+ validateExpiration?: boolean;
49
+ }
50
+ export interface AuthStore {
51
+ isAuthenticated: boolean;
52
+ user: Record<string, unknown> | null;
53
+ loading: boolean;
54
+ error: string | null;
55
+ }
56
+ export interface ApiStore {
57
+ loading: boolean;
58
+ error: string | null;
59
+ lastRequest: string | null;
60
+ }
61
+ export type NotificationType = 'success' | 'error' | 'warning' | 'info';
62
+ export interface Notification {
63
+ id: string;
64
+ type: NotificationType;
65
+ message: string;
66
+ title?: string;
67
+ duration?: number;
68
+ persistent?: boolean;
69
+ timestamp: number;
70
+ }
71
+ export interface NotificationStore {
72
+ notifications: Notification[];
73
+ }
74
+ export interface NotificationOptions {
75
+ title?: string;
76
+ duration?: number;
77
+ persistent?: boolean;
78
+ }
79
+ export interface User {
80
+ id: string;
81
+ name: string;
82
+ email: string;
83
+ role: string;
84
+ }
85
+ export interface AuthState {
86
+ user: User | null;
87
+ }
88
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,87 @@
1
+ {
2
+ "name": "@groundbrick/sveltekit-adapter",
3
+ "version": "0.1.0",
4
+ "description": "SvelteKit integration adapter with API client, stores, hooks, analytics, and cookie consent system",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.js",
11
+ "require": "./dist/index.js",
12
+ "types": "./dist/index.d.ts"
13
+ },
14
+ "./client": {
15
+ "import": "./dist/client/index.js",
16
+ "require": "./dist/client/index.js",
17
+ "types": "./dist/client/index.d.ts"
18
+ },
19
+ "./hooks": {
20
+ "import": "./dist/hooks/index.js",
21
+ "require": "./dist/hooks/index.js",
22
+ "types": "./dist/hooks/index.d.ts"
23
+ },
24
+ "./consent": {
25
+ "import": "./dist/consent/index.js",
26
+ "require": "./dist/consent/index.js",
27
+ "types": "./dist/consent/index.d.ts"
28
+ },
29
+ "./analytics": {
30
+ "import": "./dist/analytics/index.js",
31
+ "require": "./dist/analytics/index.js",
32
+ "types": "./dist/analytics/index.d.ts"
33
+ }
34
+ },
35
+ "files": [
36
+ "dist/**/*",
37
+ "README.md",
38
+ "LICENSE"
39
+ ],
40
+ "scripts": {
41
+ "build": "tsc && node ./scripts/copy-assets.js",
42
+ "dev": "tsc --watch",
43
+ "clean": "rm -rf dist *.tsbuildinfo",
44
+ "lint": "eslint src/**/*.ts",
45
+ "lint:fix": "eslint src/**/*.ts --fix"
46
+ },
47
+ "keywords": [
48
+ "typescript",
49
+ "sveltekit",
50
+ "microframework",
51
+ "client",
52
+ "api",
53
+ "hooks",
54
+ "stores",
55
+ "authentication",
56
+ "consent",
57
+ "cookies",
58
+ "gdpr",
59
+ "privacy",
60
+ "analytics",
61
+ "google-analytics",
62
+ "tracking"
63
+ ],
64
+ "author": "Cleiton Marques <cleiton.marques@200.systems>",
65
+ "license": "MIT",
66
+ "repository": {
67
+ "type": "git",
68
+ "url": "git+https://github.com/200Systems/bitbrick-microframework.git",
69
+ "directory": "packages/sveltekit-adapter"
70
+ },
71
+ "peerDependencies": {
72
+ "@sveltejs/kit": "^2.16.0",
73
+ "svelte": "^5.25.0"
74
+ },
75
+ "devDependencies": {
76
+ "@types/node": "^20.10.0",
77
+ "@sveltejs/kit": "^2.16.0",
78
+ "svelte": "^5.25.0",
79
+ "typescript": "^5.8.3"
80
+ },
81
+ "engines": {
82
+ "node": ">=18.0.0"
83
+ },
84
+ "publishConfig": {
85
+ "access": "public"
86
+ }
87
+ }