@riddance/host
Version:
58 lines • 10.5 kB
JavaScript
import { isIPv4 } from 'node:net';
import { performance } from 'node:perf_hooks';
import { highPrecisionISODate } from './host/logging.js';
export function httpRequestHeaders({ meta, operationId, client, }) {
const headers = {
'user-agent': `${meta?.packageName ?? '?'}/${meta?.revision ?? '?'}`,
};
if (operationId) {
headers['x-request-id'] = operationId;
}
if (client) {
if (client.id) {
headers['x-client-id'] = client.id;
}
const { ip, port } = client;
if (!!ip || !!port) {
const xff = forwardedFor(ip, port);
if (xff) {
headers['x-forwarded-for'] = xff;
}
}
if (client.userAgent) {
headers['x-forwarded-for-user-agent'] = client.userAgent;
}
}
return headers;
}
function forwardedFor(ip, port) {
if (!port) {
if (ip) {
return ip;
}
return undefined;
}
if (!ip) {
return `:${port}`;
}
if (isIPv4(ip)) {
return `${ip}:${port}`;
}
return `[${ip}]:${port}`;
}
export async function measure(logger, name, fn, fields) {
const start = performance.now();
try {
return await fn();
}
finally {
const end = performance.now();
logger.trace(`Measurement of ${name} time`, undefined, {
start: highPrecisionISODate(start),
end: highPrecisionISODate(end),
duration: (Math.round(end * 10_000) - Math.round(start * 10_000)) / 10_000,
...fields,
});
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUNqQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDN0MsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUE2RnhELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxFQUMvQixJQUFJLEVBQ0osV0FBVyxFQUNYLE1BQU0sR0FDeUM7SUFDL0MsTUFBTSxPQUFPLEdBQThCO1FBQ3ZDLFlBQVksRUFBRSxHQUFHLElBQUksRUFBRSxXQUFXLElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxRQUFRLElBQUksR0FBRyxFQUFFO0tBQ3ZFLENBQUE7SUFDRCxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ2QsT0FBTyxDQUFDLGNBQWMsQ0FBQyxHQUFHLFdBQVcsQ0FBQTtJQUN6QyxDQUFDO0lBQ0QsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUNULElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ1osT0FBTyxDQUFDLGFBQWEsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUE7UUFDdEMsQ0FBQztRQUNELE1BQU0sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFBO1FBQzNCLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDakIsTUFBTSxHQUFHLEdBQUcsWUFBWSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQTtZQUNsQyxJQUFJLEdBQUcsRUFBRSxDQUFDO2dCQUNOLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEdBQUcsQ0FBQTtZQUNwQyxDQUFDO1FBQ0wsQ0FBQztRQUNELElBQUksTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUE7UUFDNUQsQ0FBQztJQUNMLENBQUM7SUFDRCxPQUFPLE9BQU8sQ0FBQTtBQUNsQixDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsRUFBc0IsRUFBRSxJQUF3QjtJQUNsRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDUixJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ0wsT0FBTyxFQUFFLENBQUE7UUFDYixDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUE7SUFDcEIsQ0FBQztJQUNELElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNOLE9BQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQTtJQUNyQixDQUFDO0lBQ0QsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNiLE9BQU8sR0FBRyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUE7SUFDMUIsQ0FBQztJQUNELE9BQU8sSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUE7QUFDNUIsQ0FBQztBQUVELE1BQU0sQ0FBQyxLQUFLLFVBQVUsT0FBTyxDQUN6QixNQUE2RSxFQUM3RSxJQUFZLEVBQ1osRUFBd0IsRUFDeEIsTUFBdUI7SUFFdkIsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFBO0lBQy9CLElBQUksQ0FBQztRQUNELE9BQU8sTUFBTSxFQUFFLEVBQUUsQ0FBQTtJQUNyQixDQUFDO1lBQVMsQ0FBQztRQUNQLE1BQU0sR0FBRyxHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtRQUM3QixNQUFNLENBQUMsS0FBSyxDQUFDLGtCQUFrQixJQUFJLE9BQU8sRUFBRSxTQUFTLEVBQUU7WUFDbkQsS0FBSyxFQUFFLG9CQUFvQixDQUFDLEtBQUssQ0FBQztZQUNsQyxHQUFHLEVBQUUsb0JBQW9CLENBQUMsR0FBRyxDQUFDO1lBQzlCLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTTtZQUMxRSxHQUFHLE1BQU07U0FDWixDQUFDLENBQUE7SUFDTixDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzSVB2NCB9IGZyb20gJ25vZGU6bmV0J1xuaW1wb3J0IHsgcGVyZm9ybWFuY2UgfSBmcm9tICdub2RlOnBlcmZfaG9va3MnXG5pbXBvcnQgeyBoaWdoUHJlY2lzaW9uSVNPRGF0ZSB9IGZyb20gJy4vaG9zdC9sb2dnaW5nLmpzJ1xuXG5leHBvcnQgdHlwZSBFbnZpcm9ubWVudCA9IHtcbiAgICByZWFkb25seSBba2V5OiBzdHJpbmddOiBzdHJpbmdcbn1cblxuZXhwb3J0IHR5cGUgTG9nZ2VyID0ge1xuICAgIGVucmljaChmaWVsZHM6IEpzb25TYWZlT2JqZWN0KTogdm9pZFxuICAgIHRyYWNlKG1lc3NhZ2U6IHN0cmluZywgZXJyb3I/OiB1bmtub3duLCBmaWVsZHM/OiBKc29uU2FmZU9iamVjdCk6IHZvaWRcbiAgICBkZWJ1ZyhtZXNzYWdlOiBzdHJpbmcsIGVycm9yPzogdW5rbm93biwgZmllbGRzPzogSnNvblNhZmVPYmplY3QpOiB2b2lkXG4gICAgaW5mbyhtZXNzYWdlOiBzdHJpbmcsIGVycm9yPzogdW5rbm93biwgZmllbGRzPzogSnNvblNhZmVPYmplY3QpOiB2b2lkXG4gICAgd2FybihtZXNzYWdlOiBzdHJpbmcsIGVycm9yPzogdW5rbm93biwgZmllbGRzPzogSnNvblNhZmVPYmplY3QpOiB2b2lkXG4gICAgZXJyb3IobWVzc2FnZTogc3RyaW5nLCBlcnJvcj86IHVua25vd24sIGZpZWxkcz86IEpzb25TYWZlT2JqZWN0KTogdm9pZFxuICAgIGZhdGFsKG1lc3NhZ2U6IHN0cmluZywgZXJyb3I/OiB1bmtub3duLCBmaWVsZHM/OiBKc29uU2FmZU9iamVjdCk6IHZvaWRcbn1cblxuZXhwb3J0IHR5cGUgTXV0YWJsZUpzb24gPVxuICAgIHwgbnVsbFxuICAgIHwgYm9vbGVhblxuICAgIHwgbnVtYmVyXG4gICAgfCBzdHJpbmdcbiAgICB8IE11dGFibGVKc29uW11cbiAgICB8IHsgW2tleTogc3RyaW5nXTogTXV0YWJsZUpzb24gfVxuZXhwb3J0IHR5cGUgSnNvbiA9IG51bGwgfCBib29sZWFuIHwgbnVtYmVyIHwgc3RyaW5nIHwgcmVhZG9ubHkgSnNvbltdIHwgSnNvbk9iamVjdFxuZXhwb3J0IHR5cGUgSnNvbk9iamVjdCA9IHsgcmVhZG9ubHkgW2tleTogc3RyaW5nXTogSnNvbiB9XG5cbmV4cG9ydCB0eXBlIEpzb25TYWZlID1cbiAgICB8IHVuZGVmaW5lZFxuICAgIHwgbnVsbFxuICAgIHwgYm9vbGVhblxuICAgIHwgbnVtYmVyXG4gICAgfCBzdHJpbmdcbiAgICB8IHsgdG9KU09OOiAoKSA9PiBzdHJpbmcgfVxuICAgIHwgcmVhZG9ubHkgSnNvblNhZmVbXVxuICAgIHwgSnNvblNhZmVPYmplY3RcblxuZXhwb3J0IHR5cGUgSnNvblNhZmVPYmplY3QgPSB7IHJlYWRvbmx5IFtrZXk6IHN0cmluZ106IEpzb25TYWZlIH1cblxuZXhwb3J0IHR5cGUgSGFuZGxlckNvbmZpZ3VyYXRpb24gPSB7XG4gICAgLyoqXG4gICAgICogQW4gaW5kaWNhdGlvbiBvZiBDUFUgdXNhZ2Ugb2YgdGhlIGhhbmRsZXIuIElmIHVuZGVmaW5lZCwgYSBnZW5lcmljIGNvbnNlcnZhdGl2ZSB2YWx1ZSB3aWxsIGJlIHVzZWQuXG4gICAgICovXG4gICAgcmVhZG9ubHkgY29tcHV0ZT86ICdoaWdoJyB8ICdsb3cnXG4gICAgLyoqXG4gICAgICogQW4gaW5kaWNhdGlvbiBvZiBtZW1vcnkgdXNhZ2Ugb2YgdGhlIGhhbmRsZXIuIElmIHVuZGVmaW5lZCwgYSBnZW5lcmljIGNvbnNlcnZhdGl2ZSB2YWx1ZSB3aWxsIGJlIHVzZWQuXG4gICAgICovXG4gICAgcmVhZG9ubHkgbWVtb3J5PzogJ2hpZ2gnIHwgJ2xvdydcbiAgICAvKipcbiAgICAgKiBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRvIGVucmljaCB0aGUgbG9nIHdpdGggdGhlIGJvZHkgb2YgZXZlbnRzLCByZXF1ZXN0cyBvciByZXNwb25zZXMuIFNldCB0byBmYWxzZSBpZiB0aGUgYm9keSBpcyBsYXJnZSBvciBjb250YWluIHZlcnkgc2Vuc2l0aXZlIGRhdGEuXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICByZWFkb25seSBleGNsdWRlQm9keUZyb21Mb2dzPzogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFRoZSBsZXZlbCBiZWxvdyB3aGljaCBsb2cgZW50cmllcyB3aWxsIGJlIGRpc2NhcmRlZC5cbiAgICAgKiBAZGVmYXVsdCAndHJhY2UnXG4gICAgICovXG4gICAgcmVhZG9ubHkgbWluaW11bUxvZ0xldmVsPzogJ3RyYWNlJyB8ICdkZWJ1ZycgfCAnaW5mbycgfCAnd2FybmluZycgfCAnZXJyb3InIHwgJ2ZhdGFsJ1xuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyB0aGUgZnVuY3Rpb24gaXMgZXhwZWN0ZWQgdG8gZmluaXNoIGV4ZWN1dGluZyBpbi5cbiAgICAgKi9cbiAgICByZWFkb25seSB0aW1lb3V0PzogbnVtYmVyXG59XG5cbmV4cG9ydCB0eXBlIENvbnRleHQgPSB7XG4gICAgcmVhZG9ubHkgZW52OiBFbnZpcm9ubWVudFxuICAgIHJlYWRvbmx5IGxvZzogTG9nZ2VyXG4gICAgcmVhZG9ubHkgc2lnbmFsOiBBYm9ydFNpZ25hbFxuICAgIG5vdygpOiBEYXRlXG5cbiAgICByZWFkb25seSBvcGVyYXRpb25JZD86IHN0cmluZ1xuICAgIHJlYWRvbmx5IGNsaWVudD86IHtcbiAgICAgICAgcmVhZG9ubHkgaWQ/OiBzdHJpbmdcbiAgICAgICAgcmVhZG9ubHkgaXA/OiBzdHJpbmdcbiAgICAgICAgcmVhZG9ubHkgcG9ydD86IG51bWJlclxuICAgICAgICByZWFkb25seSB1c2VyQWdlbnQ/OiBzdHJpbmdcbiAgICB9XG4gICAgcmVhZG9ubHkgbWV0YT86IHtcbiAgICAgICAgcmVhZG9ubHkgcGFja2FnZU5hbWU6IHN0cmluZ1xuICAgICAgICByZWFkb25seSBmaWxlTmFtZTogc3RyaW5nXG4gICAgICAgIHJlYWRvbmx5IHJldmlzaW9uPzogc3RyaW5nXG4gICAgfVxuXG4gICAgZW1pdChcbiAgICAgICAgdG9waWM6IHN0cmluZyxcbiAgICAgICAgdHlwZTogc3RyaW5nLFxuICAgICAgICBzdWJqZWN0OiBzdHJpbmcsXG4gICAgICAgIGRhdGE/OiBKc29uLFxuICAgICAgICBtZXNzYWdlSWQ/OiBzdHJpbmcsXG4gICAgKTogUHJvbWlzZTx2b2lkPlxuXG4gICAgb25TdWNjZXNzKGZuOiAoKSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZCk6IHZvaWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh0dHBSZXF1ZXN0SGVhZGVycyh7XG4gICAgbWV0YSxcbiAgICBvcGVyYXRpb25JZCxcbiAgICBjbGllbnQsXG59OiBQaWNrPENvbnRleHQsICdtZXRhJyB8ICdvcGVyYXRpb25JZCcgfCAnY2xpZW50Jz4pIHtcbiAgICBjb25zdCBoZWFkZXJzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgICAgICAndXNlci1hZ2VudCc6IGAke21ldGE/LnBhY2thZ2VOYW1lID8/ICc/J30vJHttZXRhPy5yZXZpc2lvbiA/PyAnPyd9YCxcbiAgICB9XG4gICAgaWYgKG9wZXJhdGlvbklkKSB7XG4gICAgICAgIGhlYWRlcnNbJ3gtcmVxdWVzdC1pZCddID0gb3BlcmF0aW9uSWRcbiAgICB9XG4gICAgaWYgKGNsaWVudCkge1xuICAgICAgICBpZiAoY2xpZW50LmlkKSB7XG4gICAgICAgICAgICBoZWFkZXJzWyd4LWNsaWVudC1pZCddID0gY2xpZW50LmlkXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBpcCwgcG9ydCB9ID0gY2xpZW50XG4gICAgICAgIGlmICghIWlwIHx8ICEhcG9ydCkge1xuICAgICAgICAgICAgY29uc3QgeGZmID0gZm9yd2FyZGVkRm9yKGlwLCBwb3J0KVxuICAgICAgICAgICAgaWYgKHhmZikge1xuICAgICAgICAgICAgICAgIGhlYWRlcnNbJ3gtZm9yd2FyZGVkLWZvciddID0geGZmXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNsaWVudC51c2VyQWdlbnQpIHtcbiAgICAgICAgICAgIGhlYWRlcnNbJ3gtZm9yd2FyZGVkLWZvci11c2VyLWFnZW50J10gPSBjbGllbnQudXNlckFnZW50XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGhlYWRlcnNcbn1cblxuZnVuY3Rpb24gZm9yd2FyZGVkRm9yKGlwOiBzdHJpbmcgfCB1bmRlZmluZWQsIHBvcnQ6IG51bWJlciB8IHVuZGVmaW5lZCkge1xuICAgIGlmICghcG9ydCkge1xuICAgICAgICBpZiAoaXApIHtcbiAgICAgICAgICAgIHJldHVybiBpcFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG4gICAgaWYgKCFpcCkge1xuICAgICAgICByZXR1cm4gYDoke3BvcnR9YFxuICAgIH1cbiAgICBpZiAoaXNJUHY0KGlwKSkge1xuICAgICAgICByZXR1cm4gYCR7aXB9OiR7cG9ydH1gXG4gICAgfVxuICAgIHJldHVybiBgWyR7aXB9XToke3BvcnR9YFxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWVhc3VyZTxUPihcbiAgICBsb2dnZXI6IHsgdHJhY2U6IChtZXNzYWdlOiBzdHJpbmcsIF86IHVuZGVmaW5lZCwgZjogSnNvblNhZmVPYmplY3QpID0+IHZvaWQgfSxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgZm46ICgpID0+IFByb21pc2U8VD4gfCBULFxuICAgIGZpZWxkcz86IEpzb25TYWZlT2JqZWN0LFxuKSB7XG4gICAgY29uc3Qgc3RhcnQgPSBwZXJmb3JtYW5jZS5ub3coKVxuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBmbigpXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgY29uc3QgZW5kID0gcGVyZm9ybWFuY2Uubm93KClcbiAgICAgICAgbG9nZ2VyLnRyYWNlKGBNZWFzdXJlbWVudCBvZiAke25hbWV9IHRpbWVgLCB1bmRlZmluZWQsIHtcbiAgICAgICAgICAgIHN0YXJ0OiBoaWdoUHJlY2lzaW9uSVNPRGF0ZShzdGFydCksXG4gICAgICAgICAgICBlbmQ6IGhpZ2hQcmVjaXNpb25JU09EYXRlKGVuZCksXG4gICAgICAgICAgICBkdXJhdGlvbjogKE1hdGgucm91bmQoZW5kICogMTBfMDAwKSAtIE1hdGgucm91bmQoc3RhcnQgKiAxMF8wMDApKSAvIDEwXzAwMCxcbiAgICAgICAgICAgIC4uLmZpZWxkcyxcbiAgICAgICAgfSlcbiAgICB9XG59XG4iXX0=