// har.js // HAR(HTTP Archive) manipulate and replay tools // https://github.com/gnh1201/welsonjs var PipeIPC = require("lib/pipe-ipc"); var FILE = require("lib/file"); var HTTP = require("lib/http"); var HARObject = function() { this.filename = null; this.data = {}; this.entryIndex = 0; this.onEntry = null; this.filters = []; this.isSimulated = true; this.setEntryIndex = function(index) { this.entryIndex = index; }; this.setIsSimulated = function(isSimulated) { this.isSimulated = isSimulated; }; this.load = function(filename) { this.filename = filename; this.data = JSON.parse(FILE.readFile(this.filename, PipeIPC.CdoUTF_8)); return this; }; this.test = function(entry, test) { if (typeof test !== "function") return true; try { return test(this, entry, entry.request, entry.response, this.entryIndex); } catch (e) { console.warn(e.message); } return true; }; this.send = function(entry, done) { if (typeof entry === "undefined" || entry == null) return; var callback = null; if (!this.isSimulated) { callback = function() { console.log("callback"); }; } try { done(this, entry, entry.request, entry.response, callback); } catch (e) { console.error(e.message); } }; this.play = function(done, edit, test) { var entries = this.data.log.entries; if (!this.isSimulated) { console.warn("Take care! This is not a simulated mode."); } while (this.entryIndex < entries.length) { var entry = entries[this.entryIndex]; if (this.test(entry, test)) { if (typeof edit !== "function") { console.log( '[' + entry.startedDateTime + ']', '"' + [entry.request.method, entry.request.url, entry.request.httpVersion].join(' ') + '"', entry.request.url, entry.request.httpVersion, entry.response.status, entry.response.content.size ); } else { try { entry = edit(this, entry, entry.request, entry.response, this.entryIndex); } catch (e) { console.error(e.message); } } } this.send(entry, done); this.entryIndex++; } return this; }; this.rewind = function() { this.setEntryIndex(0); return this; }; }; exports.HARObject = HARObject; exports.VERSIONINFO = "HAR(HTTP Archive) manipulate and replay tools version 0.1.8"; exports.AUTHOR = "abuse@catswords.net"; exports.global = global; exports.require = require;