fix: cloudflare workers compatible initialization
- commit
- 28802cad3407b3e561325d6f0fc7700e9630e6f0
- author
- bnema · · 2026-01-18 21:18 UTC
- parent
- 84b7c36
- signature
- GPG Verified
CD88F9E564E0102646FB6077A1A07C7C7C3E349D· arch-gpg Verified for the committer email
1 file · +14 -7
M src/hooks.server.ts +14 -7
| @@ -33,20 +33,27 @@ async function setAllUsersOffline() { | |||
| 33 | 33 | } | |
| 34 | 34 | } | |
| 35 | 35 | ||
| 36 | - | // Initialize server | |
| 37 | - | Promise.resolve() | |
| 38 | - | .then(async () => { | |
| 36 | + | // Initialize server (deferred, non-blocking for Cloudflare Workers compatibility) | |
| 37 | + | let initialized = false; | |
| 38 | + | async function initializeServer() { | |
| 39 | + | if (initialized) return; | |
| 40 | + | initialized = true; | |
| 41 | + | try { | |
| 39 | 42 | log.info('Initializing server...'); | |
| 40 | 43 | await ensureDefaultChatRoom(); | |
| 41 | 44 | await setAllUsersOffline(); | |
| 42 | 45 | log.info('Server initialized successfully'); | |
| 43 | - | }) | |
| 44 | - | .catch((error: unknown) => { | |
| 46 | + | } catch (error: unknown) { | |
| 45 | 47 | log.error('Failed to initialize server:', { error }); | |
| 46 | - | process.exit(1); | |
| 47 | - | }); | |
| 48 | + | // Don't exit - let the server continue and retry on next request | |
| 49 | + | initialized = false; | |
| 50 | + | } | |
| 51 | + | } | |
| 48 | 52 | ||
| 49 | 53 | export const handle: Handle = async ({ event, resolve }) => { | |
| 54 | + | // Lazy initialization on first request (Cloudflare Workers compatible) | |
| 55 | + | await initializeServer(); | |
| 56 | + | ||
| 50 | 57 | log.debug('Handling request', { path: event.url.pathname }); | |
| 51 | 58 | ||
| 52 | 59 | // CSRF protection: validate Origin header for state-changing requests | |
| @@ -33,20 +33,27 @@ async function setAllUsersOffline() { | |||||
| 33 | } | 33 | } | ||
| 34 | } | 34 | } | ||
| 35 | 35 | ||||
| 36 | - | // Initialize server | 36 | + | // Initialize server (deferred, non-blocking for Cloudflare Workers compatibility) |
| 37 | - | Promise.resolve() | 37 | + | let initialized = false; |
| 38 | - | .then(async () => { | 38 | + | async function initializeServer() { |
| 39 | + | if (initialized) return; | |||
| 40 | + | initialized = true; | |||
| 41 | + | try { | |||
| 39 | log.info('Initializing server...'); | 42 | log.info('Initializing server...'); | ||
| 40 | await ensureDefaultChatRoom(); | 43 | await ensureDefaultChatRoom(); | ||
| 41 | await setAllUsersOffline(); | 44 | await setAllUsersOffline(); | ||
| 42 | log.info('Server initialized successfully'); | 45 | log.info('Server initialized successfully'); | ||
| 43 | - | }) | 46 | + | } catch (error: unknown) { |
| 44 | - | .catch((error: unknown) => { | |||
| 45 | log.error('Failed to initialize server:', { error }); | 47 | log.error('Failed to initialize server:', { error }); | ||
| 46 | - | process.exit(1); | 48 | + | // Don't exit - let the server continue and retry on next request |
| 47 | - | }); | 49 | + | initialized = false; |
| 50 | + | } | |||
| 51 | + | } | |||
| 48 | 52 | ||||
| 49 | export const handle: Handle = async ({ event, resolve }) => { | 53 | export const handle: Handle = async ({ event, resolve }) => { | ||
| 54 | + | // Lazy initialization on first request (Cloudflare Workers compatible) | |||
| 55 | + | await initializeServer(); | |||
| 56 | + | ||||
| 50 | log.debug('Handling request', { path: event.url.pathname }); | 57 | log.debug('Handling request', { path: event.url.pathname }); | ||
| 51 | 58 | ||||
| 52 | // CSRF protection: validate Origin header for state-changing requests | 59 | // CSRF protection: validate Origin header for state-changing requests | ||