feat(server): basic implementation of server runtime and SDK (#13)
* feat(server): basic implementation of server runtime and SDK * refactor: better typing
This commit is contained in:
@@ -1,17 +1,38 @@
|
||||
// Import h3 as npm dependency
|
||||
import { createApp, createRouter, defineEventHandler } from 'h3'
|
||||
import type { WebSocketEvent } from '@proj-airi/server-shared/types'
|
||||
import { Format, LogLevel, setGlobalFormat, setGlobalLogLevel, useLogg } from '@guiiai/logg'
|
||||
import { createApp, createRouter, defineWebSocketHandler } from 'h3'
|
||||
|
||||
// Create an app instance
|
||||
export const app = createApp()
|
||||
setGlobalFormat(Format.Pretty)
|
||||
setGlobalLogLevel(LogLevel.Log)
|
||||
|
||||
const appLogger = useLogg('App').useGlobalConfig()
|
||||
const websocketLogger = useLogg('WebSocket').useGlobalConfig()
|
||||
|
||||
export const app = createApp({
|
||||
onError: error => appLogger.withError(error).error('an error occurred'),
|
||||
})
|
||||
|
||||
// Create a new router and register it in app
|
||||
const router = createRouter()
|
||||
app.use(router)
|
||||
|
||||
// Add a new route that matches GET requests to / path
|
||||
router.get(
|
||||
'/',
|
||||
defineEventHandler(() => {
|
||||
return { message: '⚡️ Tadaa!' }
|
||||
}),
|
||||
)
|
||||
router.get('/ws', defineWebSocketHandler({
|
||||
open: (peer) => {
|
||||
websocketLogger.withFields({ peer: peer.id }).log('connected')
|
||||
},
|
||||
message: (peer, message) => {
|
||||
const event = message.json() as WebSocketEvent
|
||||
|
||||
websocketLogger.withFields({ peer: peer.id, message: event }).log('received message')
|
||||
switch (event.type) {
|
||||
case 'input:text:voice':
|
||||
websocketLogger.withFields({ message: event }).log('transcribed')
|
||||
break
|
||||
}
|
||||
},
|
||||
error: (peer, error) => {
|
||||
websocketLogger.withFields({ peer: peer.id }).withError(error).error('an error occurred')
|
||||
},
|
||||
close: (peer, details) => {
|
||||
websocketLogger.withFields({ peer: peer.id, details }).log('closed')
|
||||
},
|
||||
}))
|
||||
|
||||
Reference in New Issue
Block a user