6989a98d75
- Arkitektur: docs/auth/passwordless-architecture.md - Backend: iom/quixzoom-auth-service/ (FastAPI + Redis) - Webb: quixzoom-market-pages/se/login/ (QR-kod + polling) - App: iom/quixzoom-app/src/features/auth/ (push + deep links) Flöde: QR-kod → app-godkännande → webb-inloggad
46 lines
1.4 KiB
JavaScript
46 lines
1.4 KiB
JavaScript
import { createProxyMiddleware } from './index.js';
|
|
import { getLogger } from './logger.js';
|
|
/**
|
|
* Creates a Hono middleware that proxies requests using http-proxy-middleware.
|
|
*
|
|
* @remarks
|
|
* This middleware requires Hono to be running on Node.js via `@hono/node-server`.
|
|
* It uses `c.env.incoming` and `c.env.outgoing` which are only available with `HttpBindings`.
|
|
*
|
|
* @experimental This API is experimental and may change without a major version bump.
|
|
*
|
|
* @example
|
|
* ```ts
|
|
* import { serve } from '@hono/node-server';
|
|
* import { Hono } from 'hono';
|
|
* import { createHonoProxyMiddleware } from 'http-proxy-middleware/hono';
|
|
*
|
|
* const app = new Hono();
|
|
* app.use('/api', createHonoProxyMiddleware({ target: 'http://example.com', changeOrigin: true }));
|
|
* serve(app);
|
|
* ```
|
|
*
|
|
* @since 4.0.0
|
|
*/
|
|
export function createHonoProxyMiddleware(options) {
|
|
const proxy = createProxyMiddleware(options);
|
|
const logger = getLogger(options);
|
|
return (c, next) => {
|
|
return new Promise((resolve, reject) => {
|
|
proxy(c.env.incoming, c.env.outgoing, (err) => {
|
|
if (err) {
|
|
reject(err);
|
|
}
|
|
else {
|
|
resolve();
|
|
}
|
|
});
|
|
})
|
|
.then(() => next())
|
|
.catch((err) => {
|
|
logger.error('Proxy error:', err);
|
|
return c.text('Proxy Error', 500);
|
|
});
|
|
};
|
|
}
|