This file is indexed.

/usr/lib/nodejs/request-capture-har/request-capture-har.js is in node-request-capture-har 1.1.4-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
var fs = require('fs');
var pkg = require('./package.json');

function buildHarHeaders (headers) {
  return headers ? Object.keys(headers).map(function (key) {
    return {
      name: key,
      value: headers[key]
    };
  }) : [];
}

function buildPostData (body) {
  return body ? {
    mimeType: 'application/json',
    text: body
  } : null;
}

function HarWrapper (requestModule) {
  this.requestModule = requestModule;
  this.clear();
}

HarWrapper.prototype.request = function (options) {
  Object.assign(options, { time: true });
  var self = this;
  return this.requestModule(options, function (err, incomingMessage, response) {
    if (err) return;
    self.entries.push(self.buildHarEntry(incomingMessage));
  });
};

HarWrapper.prototype.clear = function () {
  this.entries = [];
  this.earliestTime = new Date(2099, 1, 1);
};

HarWrapper.prototype.saveHar = function (fileName) {
  var httpArchive = {
    log: {
      version: '1.2',
      creator: {name: 'request-capture-har', version: pkg.version},
      pages: [{
        startedDateTime: new Date(this.earliestTime).toISOString(),
        id: 'request-capture-har',
        title: 'request-capture-har',
        pageTimings: { }
      }],
      entries: this.entries
    }
  };
  fs.writeFileSync(fileName, JSON.stringify(httpArchive, null, 2));
};

HarWrapper.prototype.buildHarEntry = function (response) {
  var startTimestamp = response.request.startTime;
  var responseStartTimestamp = response.request.response.responseStartTime;
  var endTimestamp = startTimestamp + response.elapsedTime;

  var waitingTime = responseStartTimestamp - startTimestamp;
  var totalTime = endTimestamp - startTimestamp;
  var receiveTime = endTimestamp - responseStartTimestamp;

  this.earliestTime = Math.min(new Date(startTimestamp), this.earliestTime);

  var entry = {
    startedDateTime: new Date(startTimestamp).toISOString(),
    time: totalTime,
    request: {
      method: response.request.method,
      url: response.request.uri.href,
      httpVersion: 'HTTP/' + response.httpVersion,
      cookies: [],
      headers: buildHarHeaders(response.request.headers),
      queryString: [],
      postData: buildPostData(response.request.body),
      headersSize: -1,
      bodySize: -1
    },
    response: {
      status: response.statusCode,
      statusText: response.statusMessage,
      httpVersion: 'HTTP/' + response.httpVersion,
      cookies: [],
      headers: buildHarHeaders(response.headers),
      _transferSize: response.body.length,
      content: {
        size: response.body.length,
        mimeType: response.headers['content-type']
      },
      redirectURL: '',
      headersSize: -1,
      bodySize: -1
    },
    cache: {},
    timings: {
      send: -1,
      wait: waitingTime,
      receive: receiveTime
    }
  };
  return entry;
};

module.exports = HarWrapper;