@datadome/fraud-sdk-node
Version:
Fraud Protection - Node.js SDK
159 lines • 12.3 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.DataDomeRequest = void 0;
const constants_1 = require("../../constants");
const utils_1 = require("../../utils");
class DataDomeModule {
constructor() {
this.requestTimeMicros = Date.now() * 1000;
this.name = constants_1.SDK_NAME;
this.version = constants_1.SDK_VERSION;
}
}
function tryDecode(input) {
try {
return decodeURIComponent(input);
}
catch (e) {
return input;
}
}
function parseCookieString(input) {
const cookies = new Map();
input.split(/; */).forEach((pair) => {
let eqIndex = pair.indexOf('=');
if (eqIndex > 0) {
const key = pair.substring(0, eqIndex).trim();
let value = pair.substring(++eqIndex, eqIndex + pair.length).trim();
if (value[0] === '"') {
value = value.slice(1, -1);
}
if (!cookies.has(key)) {
cookies.set(key, tryDecode(value));
}
}
});
return cookies;
}
class DataDomeHeaders {
constructor(request, requestMetadata) {
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y;
this.addr = (_b = (_a = requestMetadata === null || requestMetadata === void 0 ? void 0 : requestMetadata.addr) !== null && _a !== void 0 ? _a : request.socket.remoteAddress) !== null && _b !== void 0 ? _b : '127.0.0.1';
this.method = (_d = (_c = requestMetadata === null || requestMetadata === void 0 ? void 0 : requestMetadata.method) !== null && _c !== void 0 ? _c : request.method) !== null && _d !== void 0 ? _d : '';
this.port = (_e = requestMetadata === null || requestMetadata === void 0 ? void 0 : requestMetadata.port) !== null && _e !== void 0 ? _e : this.getPort(request);
this.protocol = (_f = requestMetadata === null || requestMetadata === void 0 ? void 0 : requestMetadata.protocol) !== null && _f !== void 0 ? _f : this.getProtocol(request);
this.contentType = (0, utils_1.truncateValue)((_g = requestMetadata === null || requestMetadata === void 0 ? void 0 : requestMetadata.contentType) !== null && _g !== void 0 ? _g : request.headers['content-type'], (0, utils_1.truncationSize)('ContentType'));
this.accept = (0, utils_1.truncateValue)((_h = requestMetadata === null || requestMetadata === void 0 ? void 0 : requestMetadata.accept) !== null && _h !== void 0 ? _h : request.headers['accept'], (0, utils_1.truncationSize)('Accept'));
this.acceptLanguage = (0, utils_1.truncateValue)((_j = requestMetadata === null || requestMetadata === void 0 ? void 0 : requestMetadata.acceptLanguage) !== null && _j !== void 0 ? _j : request.headers['accept-language'], (0, utils_1.truncationSize)('AcceptLanguage'));
this.host = (0, utils_1.truncateValue)((_k = requestMetadata === null || requestMetadata === void 0 ? void 0 : requestMetadata.host) !== null && _k !== void 0 ? _k : request.headers['host'], (0, utils_1.truncationSize)('Host'));
this.userAgent = (0, utils_1.truncateValue)((_l = requestMetadata === null || requestMetadata === void 0 ? void 0 : requestMetadata.userAgent) !== null && _l !== void 0 ? _l : request.headers['user-agent'], (0, utils_1.truncationSize)('UserAgent'));
this.referer = (0, utils_1.truncateValue)((_m = requestMetadata === null || requestMetadata === void 0 ? void 0 : requestMetadata.referer) !== null && _m !== void 0 ? _m : request.headers['referer'], (0, utils_1.truncationSize)('Referer'));
this.xRealIp = (0, utils_1.truncateValue)((_o = requestMetadata === null || requestMetadata === void 0 ? void 0 : requestMetadata.xRealIp) !== null && _o !== void 0 ? _o : request.headers['x-real-ip'], (0, utils_1.truncationSize)('XRealIp'));
this.xForwardedForIp = (0, utils_1.truncateValue)((_p = requestMetadata === null || requestMetadata === void 0 ? void 0 : requestMetadata.xForwardedForIp) !== null && _p !== void 0 ? _p : request.headers['x-forwarded-for'], (0, utils_1.truncationSize)('XForwardedForIp'));
this.acceptEncoding = (0, utils_1.truncateValue)((_q = requestMetadata === null || requestMetadata === void 0 ? void 0 : requestMetadata.acceptEncoding) !== null && _q !== void 0 ? _q : request.headers['accept-encoding'], (0, utils_1.truncationSize)('AcceptEncoding'));
this.serverHostname = (0, utils_1.truncateValue)((_r = requestMetadata === null || requestMetadata === void 0 ? void 0 : requestMetadata.serverHostname) !== null && _r !== void 0 ? _r : request.headers['host'], (0, utils_1.truncationSize)('ServerHostname'));
this.from = (0, utils_1.truncateValue)((_s = requestMetadata === null || requestMetadata === void 0 ? void 0 : requestMetadata.from) !== null && _s !== void 0 ? _s : request.headers['from'], (0, utils_1.truncationSize)('From'));
this.origin = (0, utils_1.truncateValue)((_t = requestMetadata === null || requestMetadata === void 0 ? void 0 : requestMetadata.origin) !== null && _t !== void 0 ? _t : request.headers['origin'], (0, utils_1.truncationSize)('Origin'));
this.connection = (0, utils_1.truncateValue)((_u = requestMetadata === null || requestMetadata === void 0 ? void 0 : requestMetadata.connection) !== null && _u !== void 0 ? _u : request.headers['connection'], (0, utils_1.truncationSize)('Connection'));
this.acceptCharset = (0, utils_1.truncateValue)((_v = requestMetadata === null || requestMetadata === void 0 ? void 0 : requestMetadata.acceptCharset) !== null && _v !== void 0 ? _v : request.headers['accept-charset'], (0, utils_1.truncationSize)('AcceptCharset'));
if (requestMetadata === null || requestMetadata === void 0 ? void 0 : requestMetadata.secCHUA) {
this.secCHUA = (0, utils_1.truncateValue)(requestMetadata === null || requestMetadata === void 0 ? void 0 : requestMetadata.secCHUA, (0, utils_1.truncationSize)('SecCHUA'));
}
else if (request.headers['sec-ch-ua']) {
this.secCHUA = (0, utils_1.truncateValue)(request.headers['sec-ch-ua'], (0, utils_1.truncationSize)('SecCHUA'));
}
if (requestMetadata === null || requestMetadata === void 0 ? void 0 : requestMetadata.secCHUAMobile) {
this.secCHUAMobile = (0, utils_1.truncateValue)(requestMetadata === null || requestMetadata === void 0 ? void 0 : requestMetadata.secCHUAMobile, (0, utils_1.truncationSize)('SecCHUAMobile'));
}
else if (request.headers['sec-ch-ua-mobile']) {
this.secCHUAMobile = (0, utils_1.truncateValue)(request.headers['sec-ch-ua-mobile'], (0, utils_1.truncationSize)('SecCHUAMobile'));
}
if (requestMetadata === null || requestMetadata === void 0 ? void 0 : requestMetadata.secCHUAPlatform) {
this.secCHUAPlatform = (0, utils_1.truncateValue)(requestMetadata === null || requestMetadata === void 0 ? void 0 : requestMetadata.secCHUAPlatform, (0, utils_1.truncationSize)('SecCHUAPlatform'));
}
else if (request.headers['sec-ch-ua-platform']) {
this.secCHUAPlatform = (0, utils_1.truncateValue)(request.headers['sec-ch-ua-platform'], (0, utils_1.truncationSize)('SecCHUAPlatform'));
}
if (requestMetadata === null || requestMetadata === void 0 ? void 0 : requestMetadata.secCHUAArch) {
this.secCHUAArch = (0, utils_1.truncateValue)(requestMetadata === null || requestMetadata === void 0 ? void 0 : requestMetadata.secCHUAArch, (0, utils_1.truncationSize)('SecCHUAArch'));
}
else if (request.headers['sec-ch-ua-arch']) {
this.secCHUAArch = (0, utils_1.truncateValue)(request.headers['sec-ch-ua-arch'], (0, utils_1.truncationSize)('SecCHUAArch'));
}
if (requestMetadata === null || requestMetadata === void 0 ? void 0 : requestMetadata.secCHUAFullVersionList) {
this.secCHUAFullVersionList = (0, utils_1.truncateValue)(requestMetadata === null || requestMetadata === void 0 ? void 0 : requestMetadata.secCHUAFullVersionList, (0, utils_1.truncationSize)('SecCHUAFullVersionList'));
}
else if (request.headers['sec-ch-ua-full-version-list']) {
this.secCHUAFullVersionList = (0, utils_1.truncateValue)(request.headers['sec-ch-ua-full-version-list'], (0, utils_1.truncationSize)('SecCHUAFullVersionList'));
}
if (requestMetadata === null || requestMetadata === void 0 ? void 0 : requestMetadata.secCHUAModel) {
this.secCHUAModel = (0, utils_1.truncateValue)(requestMetadata === null || requestMetadata === void 0 ? void 0 : requestMetadata.secCHUAModel, (0, utils_1.truncationSize)('SecCHUAModel'));
}
else if (request.headers['sec-ch-ua-model']) {
this.secCHUAModel = (0, utils_1.truncateValue)(request.headers['sec-ch-ua-model'], (0, utils_1.truncationSize)('SecCHUAModel'));
}
if (requestMetadata === null || requestMetadata === void 0 ? void 0 : requestMetadata.secCHDeviceMemory) {
this.secCHDeviceMemory = (0, utils_1.truncateValue)(requestMetadata === null || requestMetadata === void 0 ? void 0 : requestMetadata.secCHDeviceMemory, (0, utils_1.truncationSize)('SecCHDeviceMemory'));
}
else if (request.headers['sec-ch-device-memory']) {
this.secCHDeviceMemory = (0, utils_1.truncateValue)(request.headers['sec-ch-device-memory'], (0, utils_1.truncationSize)('SecCHDeviceMemory'));
}
this.request =
(_y = (_w = requestMetadata === null || requestMetadata === void 0 ? void 0 : requestMetadata.request) !== null && _w !== void 0 ? _w : (_x = request.url) === null || _x === void 0 ? void 0 : _x.slice(0, (0, utils_1.truncationSize)('Request'))) !== null && _y !== void 0 ? _y : '/';
const sessionByHeaderClientId = request.headers['x-datadome-clientid'];
if (requestMetadata === null || requestMetadata === void 0 ? void 0 : requestMetadata.clientID) {
this.clientID = (0, utils_1.truncateValue)(requestMetadata === null || requestMetadata === void 0 ? void 0 : requestMetadata.clientID, (0, utils_1.truncationSize)('ClientID'));
}
else if (sessionByHeaderClientId !== undefined && sessionByHeaderClientId != '') {
this.clientID = (0, utils_1.truncateValue)(sessionByHeaderClientId, (0, utils_1.truncationSize)('ClientID'));
}
else {
this.clientID = (0, utils_1.truncateValue)(this.getClientId(request), (0, utils_1.truncationSize)('ClientID'));
}
}
getProtocol(request) {
let protocol = request.socket.encrypted ? 'https' : 'http';
const forwardedProto = request.headers['x-forwarded-proto'];
if (forwardedProto !== '' &&
((forwardedProto === null || forwardedProto === void 0 ? void 0 : forwardedProto.toLowerCase()) === 'http' || (forwardedProto === null || forwardedProto === void 0 ? void 0 : forwardedProto.toLowerCase()) === 'https')) {
protocol = forwardedProto;
}
return protocol;
}
getPort(request) {
var _a;
const hostHeader = request.headers['host'];
const forwardedPort = request.headers['x-forwarded-port'];
if (forwardedPort) {
return parseInt(forwardedPort, 10);
}
else if (hostHeader && hostHeader.includes(':')) {
return parseInt(hostHeader.split(':')[1], 10);
}
else if (request.socket.localPort) {
return request.socket.localPort;
}
return (_a = request.socket.remotePort) !== null && _a !== void 0 ? _a : 0;
}
getClientId(request) {
const cookies = request.headers['cookie'];
let clientId = '';
if (cookies !== undefined) {
const parsedCookies = parseCookieString(cookies);
for (const [key, value] of parsedCookies.entries()) {
if (value !== undefined && key === 'datadome') {
clientId = value;
}
}
}
return clientId;
}
}
class DataDomeRequest {
constructor(request, requestMetadata) {
this.module = new DataDomeModule();
this.header = new DataDomeHeaders(request, requestMetadata);
}
}
exports.DataDomeRequest = DataDomeRequest;
//# sourceMappingURL=request.js.map