import pkg from '../../../package.json' with { type: 'json' } import { serve } from '@hono/node-server' import { Hono } from 'hono' import { createNodeWebSocket } from '@hono/node-ws' import { getConnInfo } from '@hono/node-server/conninfo' import { cors } from 'hono/cors' import { logger } from 'hono/logger' import { showRoutes } from 'hono/dev' const app = new Hono() const { injectWebSocket, upgradeWebSocket } = createNodeWebSocket({ app }) app.use(logger()) app.use('/ocpp', cors({ origin: '*', allowMethods: ['GET', 'POST', 'OPTIONS'], allowHeaders: ['Content-Type', 'Authorization'], exposeHeaders: ['Content-Length'], credentials: true, })) app.get('/', (c) => { return c.json({ platform: 'Helios CSMS', version: pkg.version, message: 'ok', }) }) app.get( '/ocpp', upgradeWebSocket((c) => { return { onOpen(evt, ws) { const connInfo = getConnInfo(c) console.log(`New connection from ${connInfo.remote.address}:${connInfo.remote.port}`) }, onMessage(evt, ws) { console.log(`Received message: ${evt.data}`) ws.send(`Echo: ${evt.data}`) }, onClose(evt, ws) { console.log('Connection closed: ', evt.code, evt.reason) }, } }), ) showRoutes(app, { verbose: true, }) const server = serve( { fetch: app.fetch, port: 3001, }, (info) => { console.log(`Server is running on http://localhost:${info.port}`) }, ) injectWebSocket(server)