This guide shows how to create custom MonoCloudBackendNodeClient instances and use them with protectApi() middleware instances.
By default, each protectApi() call creates its own client. Use custom clients when:
This guide assumes you've completed the installation guide.
You should already have:
@monocloud/backend-node SDK installed.envCreate MonoCloudBackendNodeClient instances and pass them to protectApi(). Each client manages its own configuration, JWKS cache, and metadata cache.
import "dotenv/config";
import express from "express";
import {
MonoCloudBackendNodeClient,
protectApi,
type AuthenticatedExpressRequest,
} from "@monocloud/backend-node/express";
const app = express();
app.use(express.json());
// Create a public API client - reads from environment variables
const publicClient = new MonoCloudBackendNodeClient();
// Create an admin API client
const adminClient = new MonoCloudBackendNodeClient({
tenantDomain: process.env.ADMIN_API_TENANT_DOMAIN,
audience: process.env.ADMIN_API_AUDIENCE
});
const protectPublicApi = protectApi(publicClient);
const protectAdminApi = protectApi(adminClient);
// Public API
app.get("/api/data", protectPublicApi(), (req, res) => {
const { claims } = req as AuthenticatedExpressRequest;
res.json({ claims });
});
// Admin API
app.get("/api/admin", protectAdminApi(), (req, res) => {
const { claims } = req as AuthenticatedExpressRequest;
res.json({ claims });
});
app.listen(3000);
How it works:
MonoCloudBackendNodeClient manages JWKS and metadata caching internallypublicClient uses configuration from environment variablesadminClient uses an explicit tenant domain and audienceprotectPublicApi and protectAdminApi use separate client instances with independent caches and configuration