permix
Version:
Permix is a lightweight, framework-agnostic, type-safe permissions management library for JavaScript applications on the client and server sides.
69 lines (66 loc) • 1.83 kB
JavaScript
import { c as createTemplate, a as createPermix$1 } from '../shared/permix.Q-O041RP.mjs';
import { p as pick, c as createCheckContext } from '../shared/permix.q13nxITM.mjs';
const permixSymbol = Symbol('permix');
/**
* Create a middleware function that checks permissions for Node.js HTTP servers.
* Compatible with raw Node.js HTTP servers.
*
* @link https://permix.letstri.dev/docs/integrations/node
*/
function createPermix({
onForbidden = ({
res
}) => {
res.statusCode = 403;
res.setHeader('Content-Type', 'application/json');
res.end(JSON.stringify({
error: 'Forbidden'
}));
}
} = {}) {
function getPermix(req, res) {
try {
const permix = req[permixSymbol];
if (!permix) {
throw new Error('Not found');
}
return pick(permix, ['check', 'dehydrate']);
} catch {
res.statusCode = 500;
res.setHeader('Content-Type', 'application/json');
res.end(JSON.stringify({
error: '[Permix]: Instance not found. Please use the `setupMiddleware` function.'
}));
return null;
}
}
function setupMiddleware(callback) {
return async context => {
context.req[permixSymbol] = createPermix$1(await callback(context));
};
}
function checkMiddleware(...params) {
return async context => {
const permix = getPermix(context.req, context.res);
if (!permix) return;
const hasPermission = permix.check(...params);
if (!hasPermission) {
return onForbidden({
...createCheckContext(...params),
req: context.req,
res: context.res
});
}
};
}
function template(...params) {
return createTemplate(...params);
}
return {
setupMiddleware,
checkMiddleware,
template,
get: getPermix
};
}
export { createPermix };