UNPKG

@chord-ts/rpc

Version:

💎 Cutting edge transport framework vanishing borders between frontend and backend

45 lines (44 loc) • 1.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.callToKey = callToKey; exports.cacheMiddleware = cacheMiddleware; const specs_1 = require("../specs"); const specs_2 = require("../specs"); function callToKey({ method, params }) { return `${method}(${JSON.stringify(params)})`; } function cacheMiddleware(cache, ttl) { return async function cacheIntercept(event, ctx, next) { const { target, descriptor } = ctx.methodDesc; const call = ctx.body; const cacheKey = callToKey(call); const stored = await cache .get(cacheKey) .catch((e) => console.error(`Failed at read cache "${cacheKey}"\n`, e)); if (stored) { return (0, specs_2.buildResponse)({ request: ctx.body, result: stored }); } let resp; let result; try { await next(); result = await descriptor.value.apply(target, call.params); resp = (0, specs_2.buildResponse)({ request: ctx.body, result }); } catch (e) { console.error(e); resp = (0, specs_2.buildError)({ code: specs_1.ErrorCode.InternalError, message: e?.message || '', data: [e] }); } finally { cache.set(cacheKey, result, ttl).catch((e) => console.error('Failed at cache storing\n', e)); } return resp; }; }