UNPKG

@restorecommerce/chassis-srv

Version:
79 lines 2.99 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.loggingMiddleware = void 0; exports.tracingMiddleware = tracingMiddleware; exports.metaMiddleware = metaMiddleware; const nice_grpc_1 = require("nice-grpc"); const abort_controller_x_1 = require("abort-controller-x"); const uuid_1 = require("uuid"); const middleware_1 = require("@restorecommerce/grpc-client/dist/middleware"); const tracingHeader = 'x-request-id'; async function* tracingMiddleware(call, context) { const nextID = context.metadata.get(tracingHeader) || (0, uuid_1.v1)(); context.metadata?.set(tracingHeader, nextID); return yield* call.next(call.request, { ...context, rid: nextID }); } const loggingMiddleware = (logger) => { return async function* (call, context) { const { path } = call.method; logger.verbose(`[rid: ${context.rid}] received request to method ${path}`, call.request); try { const response = yield* call.next(call.request, context); logger.verbose(`[rid: ${context.rid}] request to method ${path} response sent`, { request: call.request }); return response; } catch (error) { if (error instanceof nice_grpc_1.ServerError) { logger.error(`${context.rid} request to method ${path} server error`, { message: error.details, code: error.code }); } else if ((0, abort_controller_x_1.isAbortError)(error)) { logger.error(`${context.rid} request to method ${path} cancel`, { message: error.message, stack: error.stack }); } else { logger.error(`${context.rid} request to method ${path} error`, { message: error.message, stack: error.stack }); } return { status: { code: 500, message: error.message } }; } }; }; exports.loggingMiddleware = loggingMiddleware; function bindAsyncGenerator(store, generator) { const ctx = store.getStore(); return { next: () => store.run(ctx, generator.next.bind(generator)), return: (args) => store.run(ctx, generator.return.bind(generator), args), throw: (args) => store.run(ctx, generator.throw.bind(generator), args), [Symbol.asyncIterator]() { return this; }, }; } async function* metaMiddleware(call, context) { const mapped = {}; for (const [a, b] of context.metadata) { mapped[a] = b; } const val = JSON.stringify(mapped); middleware_1.metadataPassThrough.enterWith(val); return yield* bindAsyncGenerator(middleware_1.metadataPassThrough, call.next(call.request, { ...context, })); } //# sourceMappingURL=middlewares.js.map