UNPKG

@accounts/module-core

Version:

Server side GraphQL transport for accounts

79 lines 2.42 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.context = void 0; const tslib_1 = require("tslib"); const server_1 = tslib_1.__importDefault(require("@accounts/server")); const request_ip_1 = require("request-ip"); function isFetchHeaders(headers) { return headers.get != null; } function getHeader(request, headerName) { const header = isFetchHeaders(request.headers) ? request.headers.get(headerName) : request.headers[headerName]; if (Array.isArray(header)) { throw new Error('Header should be a string, not array'); } return header ?? null; } const context = async ({ req, request, }, { createOperationController, ctx, ...options }) => { const reqOrRequest = request ?? req; if (!reqOrRequest) { return { ip: '', userAgent: '', infos: { ip: '', userAgent: '', }, ...ctx, }; } const headerName = options.headerName || 'Authorization'; let authToken = getHeader(reqOrRequest, headerName) ?? getHeader(reqOrRequest, headerName.toLowerCase()) ?? undefined; authToken = authToken && authToken.replace('Bearer ', ''); let user; if (authToken && !options.excludeAddUserInContext) { const controller = createOperationController({ context: { ...ctx }, autoDestroy: false, }); try { user = await controller.injector .get(server_1.default) .resumeSession(authToken); } catch (error) { // Empty catch console.error(error); } controller.destroy(); } let ip = null; try { ip = (0, request_ip_1.getClientIp)(req); // TODO: we should be able to retrieve the ip from the fetch request object as well } catch (e) { console.error("Couldn't retrieve the IP from the headers"); } const userAgent = /* special case of UC Browser */ getHeader(reqOrRequest, 'x-ucbrowser-ua') ?? getHeader(reqOrRequest, 'user-agent') ?? ''; return { authToken, user, userId: user?.id, userAgent, ip, infos: { userAgent, ip, }, ...ctx, }; }; exports.context = context; //# sourceMappingURL=context-builder.js.map