Skip to content

Return an early response

The following middleware is in charge of returning an early Response in case of unauthenticated user access.

ts
// package: @universal-middleware-examples/tool
// file: src/middlewares/guard.middleware.ts

import type { 
Get
,
UniversalMiddleware
} from "@universal-middleware/core";
interface User {
id
: string;
email
: string;
} // This middleware will return an early Response for unauthenticated users const
guardMiddleware
= (() => (
request
,
ctx
,
runtime
) => {
if (!
ctx
?.
user
) {
return new
Response
("Unauthorized", {
status
: 401,
}); } // Using `satisfies` to not lose return type }) satisfies
Get
<[],
UniversalMiddleware
<{
user
?: User }>>;
// export default is mandatory export default
guardMiddleware
;

After bundling this middleware, one can then use this middleware as follows:

ts
import 
guardMiddleware
from "@universal-middleware-examples/tool/middlewares/guard-middleware-express";
import
express
from "express";
const
app
=
express
();
app
.
use
(
guardMiddleware
());
export default
app
;
ts
import { 
Hono
} from "hono";
import
guardMiddleware
from "@universal-middleware-examples/tool/middlewares/guard-middleware-hono";
const
app
= new
Hono
();
app
.
use
(
guardMiddleware
());
export default
app
;
ts
import 
guardMiddleware
from "@universal-middleware-examples/tool/middlewares/guard-middleware-fastify";
import
fastify
from "fastify";
const
app
=
fastify
();
app
.
register
(
guardMiddleware
());
export default
app
;
ts
import 
guardMiddleware
from "@universal-middleware-examples/tool/middlewares/guard-middleware";
import {
createHandler
} from "@universal-middleware/cloudflare";
import {
pipe
} from "@universal-middleware/core";
// Cloudflare Workers have no internal way of representing a middleware // Instead, we use the universal `pipe` operator const
wrapped
=
pipe
(
guardMiddleware
(),
() => { return new
Response
("OK");
} ); export default
createHandler
(() =>
wrapped
)();
ts
// functions/_middlewares.ts
// See https://developers.cloudflare.com/pages/functions/middleware/

import 
guardMiddleware
from "@universal-middleware-examples/tool/middlewares/guard-middleware-cloudflare-pages";
export const
onRequest
=
guardMiddleware
();
ts
import 
guardMiddleware
from "@universal-middleware-examples/tool/middlewares/guard-middleware";
import {
createEdgeHandler
} from "@universal-middleware/vercel";
import {
pipe
} from "@universal-middleware/core";
// Vercel has no internal way of representing a middleware // Instead, we use the universal `pipe` operator const
wrapped
=
pipe
(
guardMiddleware
(),
() => { return new
Response
("OK");
} ); export const
GET
=
createEdgeHandler
(() =>
wrapped
)();
ts
import 
guardMiddleware
from "@universal-middleware-examples/tool/middlewares/guard-middleware";
import {
createNodeHandler
} from "@universal-middleware/vercel";
import {
pipe
} from "@universal-middleware/core";
// Vercel has no internal way of representing a middleware // Instead, we use the universal `pipe` operator const
wrapped
=
pipe
(
guardMiddleware
(),
() => { return new
Response
("OK");
} ); export default
createNodeHandler
(() =>
wrapped
)();
ts
import { 
createApp
} from "h3";
import
guardMiddleware
from "@universal-middleware-examples/tool/middlewares/guard-middleware-h3";
import {
universalOnBeforeResponse
} from "@universal-middleware/h3";
const
app
=
createApp
({
// /!\ This is required for universal-middleware to operate properly
onBeforeResponse
:
universalOnBeforeResponse
,
});
app
.
use
(
guardMiddleware
());
export default
app
;
ts
import 
guardMiddleware
from "@universal-middleware-examples/tool/middlewares/guard-middleware-elysia";
import
Elysia
from "elysia";
const
app
= new
Elysia
().
use
(
guardMiddleware
());
export default
app
;
ts
import { 
createRouter
} from "@hattip/router";
import
guardMiddleware
from "@universal-middleware-examples/tool/middlewares/guard-middleware-hattip";
const
app
=
createRouter
();
app
.
use
(
guardMiddleware
());
const
hattipHandler
=
app
.
buildHandler
();
export default
hattipHandler
;