@accounts/module-core
Version:
Server side GraphQL transport for accounts
79 lines • 2.42 kB
JavaScript
;
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