godprotocol
Version:
A distributed computing environment for Web 4.0 — integrating AI, decentralisation, and virtual computation.
94 lines (73 loc) • 2.17 kB
JavaScript
const respond = async (result, res) => {
let response = {
ok: result?.ok,
message: result.message,
data: result.data,
};
if (result.pagination) response.pagination = result.pagination;
if (result.token) response.token = result.token;
if (!res) return response;
res.status(result?.status || (result?.ok ? 200 : 403)).json(response);
};
const version_middleware = async (req, res, routers) => {
try {
const version = req.headers["x-api-version"] || "v1";
let router = routers.get_version(version);
if (router.config?.is_old) return router.routes(req, res);
if (!router) {
return res.status(400).json({
error: "Invalid API version",
version,
});
}
router = routers;
let name = req.path.slice(1),
result;
try {
result = await router.handle_security(name, req);
// console.log("Security check result:", result);
if (result !== true) {
return await respond(result, res);
}
} catch (err) {
console.error(err);
throw new Error("Security check failed");
}
let db = await router.resolve_db(req);
let is_webhook = req.headers["is-webhook"];
// console.log(req.headers);
if (!is_webhook) {
let web_prior = await router.handle_webhook_prior(req);
if (web_prior === false) {
} else if (!web_prior?.ok) {
return await respond(web_prior, res);
} else {
req.headers.webhook_prior = web_prior;
}
}
try {
result = await router.execute(name, {
body: req.body,
headers: req.headers,
db: db.db,
gp: router.gp,
services: router.get_service,
});
!is_webhook && (await router.handle_webhook_after(req, result));
return await respond(result, res);
} catch (err) {
console.error(err);
throw new Error("Route execution failed");
}
} catch (err) {
console.error("Version Middleware Error:", err);
return (
res &&
res.status(500).json({
ok: false,
message: "Internal server error",
})
);
}
};
export default version_middleware;