@lognroll/lib 1.0.5 → 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,379 +1,2 @@
1
- // src/core/index.ts
2
- var Core = class {
3
- constructor() {
4
- this.companyId = "";
5
- this.userId = "";
6
- this.config = {};
7
- this.traits = {};
8
- }
9
- initSession(companyId, data) {
10
- (window || {})["lnr"] = this;
11
- this.config = data || {};
12
- this.companyId = companyId;
13
- const script = document.createElement("script");
14
- let date = (/* @__PURE__ */ new Date()).getTime();
15
- script.src = ((data == null ? void 0 : data.logFile) || "https://logger.lognroll.com/logger.lnr.1.0.1.js") + `?cc=` + date;
16
- script.async = false;
17
- document.head.appendChild(script);
18
- }
19
- initSessionWithoutScript(companyId, data) {
20
- console.log("initSessionWithoutScript", companyId, data);
21
- (window || {})["lnr"] = this;
22
- this.config = data || {};
23
- this.companyId = companyId;
24
- this.init();
25
- }
26
- identifyUser(userId, traits) {
27
- this.userId = userId;
28
- this.traits = traits;
29
- }
30
- init() {
31
- console.log("init", this.companyId, this.config);
32
- }
33
- };
34
- var core_default = Core;
35
-
36
- // src/network/index.ts
37
- var Network = class extends core_default {
38
- constructor() {
39
- super();
40
- this.responseLogs = [];
41
- this.processedResources = /* @__PURE__ */ new Set();
42
- this.resourceMonitorInterval = null;
43
- this.wrap();
44
- }
45
- getResponseLogs() {
46
- return [...this.responseLogs];
47
- }
48
- clearResponseLogs() {
49
- this.responseLogs = [];
50
- this.processedResources.clear();
51
- }
52
- monitorResourceTiming() {
53
- if (typeof window === "undefined" || !window.performance || !window.performance.getEntriesByType) {
54
- return;
55
- }
56
- const resources = performance.getEntriesByType("resource");
57
- resources.forEach((resource) => {
58
- if (this.processedResources.has(resource.name) || resource.name.includes("lognroll")) {
59
- return;
60
- }
61
- this.processedResources.add(resource.name);
62
- const timing = {
63
- startTime: resource.startTime,
64
- duration: resource.duration,
65
- fetchStart: resource.fetchStart,
66
- responseEnd: resource.responseEnd,
67
- // DNS lookup time
68
- dnsTime: resource.domainLookupEnd - resource.domainLookupStart,
69
- // Connection time
70
- connectTime: resource.connectEnd - resource.connectStart,
71
- // Time to First Byte (TTFB)
72
- ttfb: resource.responseStart - resource.requestStart,
73
- // Content download time
74
- downloadTime: resource.responseEnd - resource.responseStart
75
- };
76
- const responseLog = {
77
- type: "network",
78
- stage: "response",
79
- payload: {
80
- request: {
81
- id: `resource-${resource.startTime}`,
82
- url: resource.name,
83
- timestamp: Date.now() - resource.duration,
84
- method: "GET",
85
- initiatorType: "STATIC",
86
- body: null
87
- },
88
- response: {
89
- url: resource.name,
90
- status: 200,
91
- // Resources that fail to load won't appear in the performance entries
92
- statusText: "OK",
93
- headers: {},
94
- timing,
95
- contentType: resource.initiatorType,
96
- decodedBodySize: resource.decodedBodySize,
97
- encodedBodySize: resource.encodedBodySize,
98
- transferSize: resource.transferSize,
99
- timestamp: Date.now(),
100
- responseTime: resource.duration
101
- }
102
- }
103
- };
104
- this.responseLogs.push(responseLog);
105
- });
106
- performance.clearResourceTimings();
107
- }
108
- startResourceMonitoring(interval = 1e3) {
109
- if (this.resourceMonitorInterval !== null) {
110
- return;
111
- }
112
- this.monitorResourceTiming();
113
- this.resourceMonitorInterval = window.setInterval(() => {
114
- this.monitorResourceTiming();
115
- }, interval);
116
- }
117
- stopResourceMonitoring() {
118
- if (this.resourceMonitorInterval !== null) {
119
- clearInterval(this.resourceMonitorInterval);
120
- this.resourceMonitorInterval = null;
121
- }
122
- }
123
- wrap() {
124
- this.startResourceMonitoring();
125
- const requestStore = /* @__PURE__ */ new Map();
126
- const originalFetch = window.fetch;
127
- const _this = this;
128
- window.fetch = async function(input, init) {
129
- const requestId = Date.now().toString();
130
- const url = typeof input === "string" ? input : input.url;
131
- if (url.includes("lognroll")) {
132
- return originalFetch(input, init);
133
- }
134
- const method = (init == null ? void 0 : init.method) || "GET";
135
- const body = (init == null ? void 0 : init.body) || null;
136
- requestStore.set(requestId, { url, timestamp: Date.now(), body: null });
137
- const startTime = Date.now();
138
- const requestDetails = requestStore.get(requestId);
139
- try {
140
- const response = await originalFetch(input, init);
141
- const clonedResponse = response.clone();
142
- const responseData = await clonedResponse.text().catch(() => null);
143
- const responseTime = Date.now() - startTime;
144
- const responseLog = {
145
- type: "network",
146
- stage: "response",
147
- payload: {
148
- request: {
149
- id: requestId,
150
- url: response.url,
151
- initiatorType: "fetch",
152
- timestamp: (requestDetails == null ? void 0 : requestDetails.timestamp) || Date.now() - 100,
153
- method,
154
- body
155
- },
156
- response: {
157
- url: response.url,
158
- status: response.status,
159
- statusText: response.statusText,
160
- headers: (() => {
161
- const headersObj = {};
162
- response.headers.forEach((value, key) => {
163
- headersObj[key] = value;
164
- });
165
- return headersObj;
166
- })(),
167
- data: responseData,
168
- timestamp: Date.now(),
169
- responseTime
170
- }
171
- }
172
- };
173
- _this.responseLogs.push(responseLog);
174
- requestStore.delete(requestId);
175
- return response;
176
- } catch (error) {
177
- const errorLog = {
178
- type: "network",
179
- stage: "error",
180
- payload: {
181
- request: {
182
- id: requestId,
183
- url,
184
- timestamp: (requestDetails == null ? void 0 : requestDetails.timestamp) || Date.now() - 100,
185
- method,
186
- body
187
- },
188
- error: {
189
- message: error instanceof Error ? error.message : "Unknown error",
190
- timestamp: Date.now()
191
- }
192
- }
193
- };
194
- _this.responseLogs.push(errorLog);
195
- requestStore.delete(requestId);
196
- throw error;
197
- }
198
- };
199
- const originalXHR = window.XMLHttpRequest;
200
- window.XMLHttpRequest = function() {
201
- const xhr = new originalXHR();
202
- const requestId = Date.now().toString();
203
- const originalOpen = xhr.open;
204
- xhr._requestHeaders = {};
205
- const originalSetRequestHeader = xhr.setRequestHeader;
206
- xhr.setRequestHeader = function(header, value) {
207
- xhr._requestHeaders[header] = value;
208
- originalSetRequestHeader.apply(this, arguments);
209
- };
210
- xhr.open = function(method, url) {
211
- if (url.toString().includes("lognroll")) {
212
- return originalOpen.apply(xhr, arguments);
213
- }
214
- requestStore.set(requestId, { url: url.toString(), timestamp: Date.now(), body: null });
215
- const self = this;
216
- const originalOnReadyStateChange = this.onreadystatechange;
217
- this.onreadystatechange = function() {
218
- var _a;
219
- if (self.readyState === 4) {
220
- const data = requestStore.get(requestId);
221
- const responseTime = Date.now() - ((data == null ? void 0 : data.timestamp) || Date.now());
222
- const responseLog = {
223
- type: "network",
224
- stage: "response",
225
- payload: {
226
- request: {
227
- id: requestId,
228
- url,
229
- initiatorType: "xmlhttprequest",
230
- timestamp: ((_a = requestStore.get(requestId)) == null ? void 0 : _a.timestamp) || Date.now() - 100,
231
- method: method || "GET",
232
- body: (data == null ? void 0 : data.body) || null,
233
- headers: xhr._requestHeaders || {}
234
- },
235
- response: {
236
- status: self.status,
237
- statusText: self.statusText,
238
- headers: self.getAllResponseHeaders().split("\r\n").reduce((acc, line) => {
239
- const [key, value] = line.split(": ");
240
- if (key && value) acc[key] = value;
241
- return acc;
242
- }, {}),
243
- data: self.responseText,
244
- timestamp: Date.now(),
245
- responseTime
246
- }
247
- }
248
- };
249
- _this.responseLogs.push(responseLog);
250
- requestStore.delete(requestId);
251
- if (originalOnReadyStateChange) {
252
- originalOnReadyStateChange.apply(self, arguments);
253
- }
254
- } else {
255
- if (originalOnReadyStateChange) {
256
- originalOnReadyStateChange.apply(self, arguments);
257
- }
258
- }
259
- };
260
- return originalOpen.apply(xhr, arguments);
261
- };
262
- const originalSend = xhr.send;
263
- xhr.send = function(body) {
264
- if (body instanceof FormData) {
265
- const reqData = {};
266
- for (const [key, value] of body.entries()) {
267
- reqData[key] = value;
268
- }
269
- body = reqData;
270
- const data = requestStore.get(requestId);
271
- if (data != null) {
272
- data["body"] = reqData;
273
- }
274
- } else {
275
- const data = requestStore.get(requestId);
276
- if (data != null) {
277
- data["body"] = body;
278
- }
279
- }
280
- xhr.addEventListener("load", function(progressEvent) {
281
- var _a;
282
- const url = ((_a = requestStore.get(requestId)) == null ? void 0 : _a.url) || "";
283
- if (url.includes("lognroll")) {
284
- return;
285
- }
286
- if (url.includes("/api/v1/requests/")) {
287
- }
288
- });
289
- xhr.addEventListener("error", function() {
290
- var _a;
291
- if (xhr.responseURL.includes("lognroll")) {
292
- return;
293
- }
294
- const errorLog = {
295
- type: "network",
296
- stage: "error",
297
- payload: {
298
- request: {
299
- id: requestId,
300
- url: xhr.responseURL,
301
- timestamp: ((_a = requestStore.get(requestId)) == null ? void 0 : _a.timestamp) || Date.now() - 100,
302
- method: xhr._method || "GET",
303
- body
304
- },
305
- error: {
306
- message: "XHR request failed",
307
- timestamp: Date.now()
308
- }
309
- }
310
- };
311
- _this.responseLogs.push(errorLog);
312
- requestStore.delete(requestId);
313
- });
314
- return originalSend.apply(xhr, arguments);
315
- };
316
- return xhr;
317
- };
318
- }
319
- };
320
- var network_default = Network;
321
-
322
- // src/console/index.ts
323
- var Console = class extends network_default {
324
- constructor() {
325
- super();
326
- this.consoleLogs = [];
327
- this.originalConsole = window.console;
328
- this.initializeConsoleOverrides();
329
- }
330
- initializeConsoleOverrides() {
331
- const methods = ["log", "info", "warn", "error", "debug", "trace"];
332
- methods.forEach((method) => {
333
- const originalMethod = this.originalConsole[method];
334
- window.console[method] = (...args) => {
335
- const timestamp = Date.now();
336
- originalMethod.apply(this.originalConsole, args);
337
- try {
338
- const getCircularReplacer = () => {
339
- const seen = /* @__PURE__ */ new WeakSet();
340
- return (key, value) => {
341
- if (typeof value === "object" && value !== null) {
342
- if (seen.has(value)) {
343
- return "[Circular]";
344
- }
345
- seen.add(value);
346
- }
347
- return value;
348
- };
349
- };
350
- const data = method + "<|||>" + args.map((arg) => {
351
- try {
352
- return typeof arg === "object" && arg !== null ? JSON.stringify(arg, getCircularReplacer()) : String(arg);
353
- } catch (e) {
354
- return "[Error stringifying argument]";
355
- }
356
- }).join("<SPLIT>");
357
- this.consoleLogs.push({
358
- data,
359
- timestamp
360
- });
361
- } catch (e) {
362
- originalMethod.apply(this.originalConsole, [e, "error sending log"]);
363
- }
364
- };
365
- });
366
- }
367
- };
368
-
369
- // src/index.ts
370
- var LognRoll = class extends Console {
371
- constructor() {
372
- super();
373
- }
374
- };
375
- var index_default = new LognRoll();
376
- export {
377
- index_default as default
378
- };
379
- //# sourceMappingURL=index.js.map
1
+ /*! For license information please see index.js.LICENSE.txt */
2
+ !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.LognRoll=e():t.LognRoll=e()}(this,(()=>(()=>{"use strict";var t={d:(e,r)=>{for(var n in r)t.o(r,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:r[n]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e)},e={};function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}function n(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,i(n.key),n)}}function o(t,e,r){return(e=i(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function i(t){var e=function(t){if("object"!=r(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,"string");if("object"!=r(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==r(e)?e:e+""}function a(t){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},a(t)}function u(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,o,i,a,u=[],s=!0,c=!1;try{if(i=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;s=!1}else for(;!(s=(n=i.call(r)).done)&&(u.push(n.value),u.length!==e);s=!0);}catch(t){c=!0,o=t}finally{try{if(!s&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(c)throw o}}return u}}(t,e)||l(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function s(){s=function(){return e};var t,e={},r=Object.prototype,n=r.hasOwnProperty,o="function"==typeof Symbol?Symbol:{},i=o.iterator||"@@iterator",u=o.asyncIterator||"@@asyncIterator",c=o.toStringTag||"@@toStringTag";function l(t,e,r,n){return Object.defineProperty(t,e,{value:r,enumerable:!n,configurable:!n,writable:!n})}try{l({},"")}catch(t){l=function(t,e,r){return t[e]=r}}function f(e,r,n,o){var i=r&&r.prototype instanceof d?r:d,a=Object.create(i.prototype);return l(a,"_invoke",function(e,r,n){var o=1;return function(i,a){if(3===o)throw Error("Generator is already running");if(4===o){if("throw"===i)throw a;return{value:t,done:!0}}for(n.method=i,n.arg=a;;){var u=n.delegate;if(u){var s=j(u,n);if(s){if(s===y)continue;return s}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(1===o)throw o=4,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);o=3;var c=p(e,r,n);if("normal"===c.type){if(o=n.done?4:2,c.arg===y)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(o=4,n.method="throw",n.arg=c.arg)}}}(e,n,new P(o||[])),!0),a}function p(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}e.wrap=f;var y={};function d(){}function h(){}function v(){}var m={};l(m,i,(function(){return this}));var b=Object.getPrototypeOf,w=b&&b(b(x([])));w&&w!==r&&n.call(w,i)&&(m=w);var g=v.prototype=d.prototype=Object.create(m);function S(t){["next","throw","return"].forEach((function(e){l(t,e,(function(t){return this._invoke(e,t)}))}))}function O(t,e){function r(o,i,u,s){var c=p(t[o],t,i);if("throw"!==c.type){var l=c.arg,f=l.value;return f&&"object"==a(f)&&n.call(f,"__await")?e.resolve(f.__await).then((function(t){r("next",t,u,s)}),(function(t){r("throw",t,u,s)})):e.resolve(f).then((function(t){l.value=t,u(l)}),(function(t){return r("throw",t,u,s)}))}s(c.arg)}var o;l(this,"_invoke",(function(t,n){function i(){return new e((function(e,o){r(t,n,e,o)}))}return o=o?o.then(i,i):i()}),!0)}function j(e,r){var n=r.method,o=e.i[n];if(o===t)return r.delegate=null,"throw"===n&&e.i.return&&(r.method="return",r.arg=t,j(e,r),"throw"===r.method)||"return"!==n&&(r.method="throw",r.arg=new TypeError("The iterator does not provide a '"+n+"' method")),y;var i=p(o,e.i,r.arg);if("throw"===i.type)return r.method="throw",r.arg=i.arg,r.delegate=null,y;var a=i.arg;return a?a.done?(r[e.r]=a.value,r.next=e.n,"return"!==r.method&&(r.method="next",r.arg=t),r.delegate=null,y):a:(r.method="throw",r.arg=new TypeError("iterator result is not an object"),r.delegate=null,y)}function E(t){this.tryEntries.push(t)}function T(e){var r=e[4]||{};r.type="normal",r.arg=t,e[4]=r}function P(t){this.tryEntries=[[-1]],t.forEach(E,this),this.reset(!0)}function x(e){if(null!=e){var r=e[i];if(r)return r.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var o=-1,u=function r(){for(;++o<e.length;)if(n.call(e,o))return r.value=e[o],r.done=!1,r;return r.value=t,r.done=!0,r};return u.next=u}}throw new TypeError(a(e)+" is not iterable")}return h.prototype=v,l(g,"constructor",v),l(v,"constructor",h),h.displayName=l(v,c,"GeneratorFunction"),e.isGeneratorFunction=function(t){var e="function"==typeof t&&t.constructor;return!!e&&(e===h||"GeneratorFunction"===(e.displayName||e.name))},e.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,v):(t.__proto__=v,l(t,c,"GeneratorFunction")),t.prototype=Object.create(g),t},e.awrap=function(t){return{__await:t}},S(O.prototype),l(O.prototype,u,(function(){return this})),e.AsyncIterator=O,e.async=function(t,r,n,o,i){void 0===i&&(i=Promise);var a=new O(f(t,r,n,o),i);return e.isGeneratorFunction(r)?a:a.next().then((function(t){return t.done?t.value:a.next()}))},S(g),l(g,c,"Generator"),l(g,i,(function(){return this})),l(g,"toString",(function(){return"[object Generator]"})),e.keys=function(t){var e=Object(t),r=[];for(var n in e)r.unshift(n);return function t(){for(;r.length;)if((n=r.pop())in e)return t.value=n,t.done=!1,t;return t.done=!0,t}},e.values=x,P.prototype={constructor:P,reset:function(e){if(this.prev=this.next=0,this.sent=this._sent=t,this.done=!1,this.delegate=null,this.method="next",this.arg=t,this.tryEntries.forEach(T),!e)for(var r in this)"t"===r.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=t)},stop:function(){this.done=!0;var t=this.tryEntries[0][4];if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var r=this;function n(t){a.type="throw",a.arg=e,r.next=t}for(var o=r.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i[4],u=this.prev,s=i[1],c=i[2];if(-1===i[0])return n("end"),!1;if(!s&&!c)throw Error("try statement without catch or finally");if(null!=i[0]&&i[0]<=u){if(u<s)return this.method="next",this.arg=t,n(s),!0;if(u<c)return n(c),!1}}},abrupt:function(t,e){for(var r=this.tryEntries.length-1;r>=0;--r){var n=this.tryEntries[r];if(n[0]>-1&&n[0]<=this.prev&&this.prev<n[2]){var o=n;break}}o&&("break"===t||"continue"===t)&&o[0]<=e&&e<=o[2]&&(o=null);var i=o?o[4]:{};return i.type=t,i.arg=e,o?(this.method="next",this.next=o[2],y):this.complete(i)},complete:function(t,e){if("throw"===t.type)throw t.arg;return"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=this.arg=t.arg,this.method="return",this.next="end"):"normal"===t.type&&e&&(this.next=e),y},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r[2]===t)return this.complete(r[4],r[3]),T(r),y}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r[0]===t){var n=r[4];if("throw"===n.type){var o=n.arg;T(r)}return o}}throw Error("illegal catch attempt")},delegateYield:function(e,r,n){return this.delegate={i:x(e),r,n},"next"===this.method&&(this.arg=t),y}},e}function c(t,e,r,n,o,i,a){try{var u=t[i](a),s=u.value}catch(t){return void r(t)}u.done?e(s):Promise.resolve(s).then(n,o)}function l(t,e){if(t){if("string"==typeof t)return f(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?f(t,e):void 0}}function f(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}function p(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,m(n.key),n)}}function y(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(y=function(){return!!t})()}function d(t){return d=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},d(t)}function h(t,e){return h=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},h(t,e)}function v(t,e,r){return(e=m(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function m(t){var e=function(t){if("object"!=a(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var r=e.call(t,"string");if("object"!=a(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==a(e)?e:e+""}function b(t){return b="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},b(t)}function w(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,j(n.key),n)}}function g(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(g=function(){return!!t})()}function S(t){return S=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},S(t)}function O(t,e){return O=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},O(t,e)}function j(t){var e=function(t){if("object"!=b(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var r=e.call(t,"string");if("object"!=b(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==b(e)?e:e+""}function E(t){return E="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},E(t)}function T(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(T=function(){return!!t})()}function P(t){return P=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},P(t)}function x(t,e){return x=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},x(t,e)}t.d(e,{default:()=>_});const _=new(function(t){function e(){return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),function(t,e,r){return e=P(e),function(t,e){if(e&&("object"==E(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,T()?Reflect.construct(e,r||[],P(t).constructor):e.apply(t,r))}(this,e)}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&x(t,e)}(e,t),r=e,Object.defineProperty(r,"prototype",{writable:!1}),r;var r}(function(t){function e(){var t,r,n,o;return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),t=function(t,e,r){return e=S(e),function(t,e){if(e&&("object"==b(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,g()?Reflect.construct(e,r||[],S(t).constructor):e.apply(t,r))}(this,e),r=t,o=[],(n=j(n="consoleLogs"))in r?Object.defineProperty(r,n,{value:o,enumerable:!0,configurable:!0,writable:!0}):r[n]=o,"undefined"!=typeof window&&(t.originalConsole=window.console,t.initializeConsoleOverrides()),t}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&O(t,e)}(e,t),r=e,n=[{key:"initializeConsoleOverrides",value:function(){var t=this;["log","info","warn","error","debug","trace"].forEach((function(e){var r=t.originalConsole[e];window.console[e]=function(){for(var n=Date.now(),o=arguments.length,i=new Array(o),a=0;a<o;a++)i[a]=arguments[a];r.apply(t.originalConsole,i);try{var u=e+"<|||>"+i.map((function(t){try{return"object"===b(t)&&null!==t?JSON.stringify(t,(e=new WeakSet,function(t,r){if("object"===b(r)&&null!==r){if(e.has(r))return"[Circular]";e.add(r)}return r})):String(t)}catch(t){return"[Error stringifying argument]"}var e})).join("<SPLIT>");t.consoleLogs.push({data:u,timestamp:n})}catch(e){r.apply(t.originalConsole,[e,"error sending log"])}}}))}}],n&&w(r.prototype,n),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n}(function(t){function e(){var t;return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),v(t=function(t,e,r){return e=d(e),function(t,e){if(e&&("object"==a(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,y()?Reflect.construct(e,r||[],d(t).constructor):e.apply(t,r))}(this,e),"responseLogs",[]),v(t,"processedResources",new Set),v(t,"resourceMonitorInterval",null),"undefined"!=typeof window&&t.wrap(),t}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&h(t,e)}(e,t),r=e,n=[{key:"getResponseLogs",value:function(){return function(t){return function(t){if(Array.isArray(t))return f(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||l(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}(this.responseLogs)}},{key:"clearResponseLogs",value:function(){this.responseLogs=[],this.processedResources.clear()}},{key:"monitorResourceTiming",value:function(){var t=this;"undefined"!=typeof window&&window.performance&&window.performance.getEntriesByType&&(performance.getEntriesByType("resource").forEach((function(e){if(!t.processedResources.has(e.name)&&!e.name.includes("lognroll")){t.processedResources.add(e.name);var r={startTime:e.startTime,duration:e.duration,fetchStart:e.fetchStart,responseEnd:e.responseEnd,dnsTime:e.domainLookupEnd-e.domainLookupStart,connectTime:e.connectEnd-e.connectStart,ttfb:e.responseStart-e.requestStart,downloadTime:e.responseEnd-e.responseStart},n={type:"network",stage:"response",payload:{request:{id:"resource-".concat(e.startTime),url:e.name,timestamp:Date.now()-e.duration,method:"GET",initiatorType:"STATIC",body:null},response:{url:e.name,status:200,statusText:"OK",headers:{},timing:r,contentType:e.initiatorType,decodedBodySize:e.decodedBodySize,encodedBodySize:e.encodedBodySize,transferSize:e.transferSize,timestamp:Date.now(),responseTime:e.duration}}};t.responseLogs.push(n)}})),performance.clearResourceTimings())}},{key:"startResourceMonitoring",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1e3;null===this.resourceMonitorInterval&&(this.monitorResourceTiming(),"undefined"!=typeof window&&(this.resourceMonitorInterval=window.setInterval((function(){t.monitorResourceTiming()}),e)))}},{key:"stopResourceMonitoring",value:function(){null!==this.resourceMonitorInterval&&(clearInterval(this.resourceMonitorInterval),this.resourceMonitorInterval=null)}},{key:"wrap",value:function(){this.startResourceMonitoring();var t=new Map,e=window.fetch,r=this;window.fetch=function(){var n,o=(n=s().mark((function n(o,i){var a,u,c,l,f,p,y,d,h,v,m,b;return s().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(a=Date.now().toString(),!(u="string"==typeof o?o:o.url).includes("lognroll")){n.next=4;break}return n.abrupt("return",e(o,i));case 4:return c=(null==i?void 0:i.method)||"GET",l=(null==i?void 0:i.body)||null,t.set(a,{url:u,timestamp:Date.now(),body:null}),f=Date.now(),p=t.get(a),n.prev=9,n.next=12,e(o,i);case 12:return y=n.sent,d=y.clone(),n.next=16,d.text().catch((function(){return null}));case 16:return h=n.sent,v=Date.now()-f,m={type:"network",stage:"response",payload:{request:{id:a,url:y.url,initiatorType:"fetch",timestamp:(null==p?void 0:p.timestamp)||Date.now()-100,method:c,body:l},response:{url:y.url,status:y.status,statusText:y.statusText,headers:function(){var t={};return y.headers.forEach((function(e,r){t[r]=e})),t}(),data:h,timestamp:Date.now(),responseTime:v}}},r.responseLogs.push(m),t.delete(a),n.abrupt("return",y);case 24:throw n.prev=24,n.t0=n.catch(9),b={type:"network",stage:"error",payload:{request:{id:a,url:u,timestamp:(null==p?void 0:p.timestamp)||Date.now()-100,method:c,body:l},error:{message:n.t0 instanceof Error?n.t0.message:"Unknown error",timestamp:Date.now()}}},r.responseLogs.push(b),t.delete(a),n.t0;case 30:case"end":return n.stop()}}),n,null,[[9,24]])})),function(){var t=this,e=arguments;return new Promise((function(r,o){var i=n.apply(t,e);function a(t){c(i,r,o,a,u,"next",t)}function u(t){c(i,r,o,a,u,"throw",t)}a(void 0)}))});return function(t,e){return o.apply(this,arguments)}}();var n=window.XMLHttpRequest;window.XMLHttpRequest=function(){var e=new n,o=Date.now().toString(),i=e.open;e._requestHeaders={};var a=e.setRequestHeader;e.setRequestHeader=function(t,r){e._requestHeaders[t]=r,a.apply(this,arguments)},e.open=function(n,a){if(a.toString().includes("lognroll"))return i.apply(e,arguments);t.set(o,{url:a.toString(),timestamp:Date.now(),body:null});var s=this,c=this.onreadystatechange;return this.onreadystatechange=function(){if(4===s.readyState){var i,l=t.get(o),f=Date.now()-((null==l?void 0:l.timestamp)||Date.now()),p={type:"network",stage:"response",payload:{request:{id:o,url:a,initiatorType:"xmlhttprequest",timestamp:(null===(i=t.get(o))||void 0===i?void 0:i.timestamp)||Date.now()-100,method:n||"GET",body:(null==l?void 0:l.body)||null,headers:e._requestHeaders||{}},response:{status:s.status,statusText:s.statusText,headers:s.getAllResponseHeaders().split("\r\n").reduce((function(t,e){var r=u(e.split(": "),2),n=r[0],o=r[1];return n&&o&&(t[n]=o),t}),{}),data:s.responseText,timestamp:Date.now(),responseTime:f}}};r.responseLogs.push(p),t.delete(o),c&&c.apply(s,arguments)}else c&&c.apply(s,arguments)},i.apply(e,arguments)};var s=e.send;return e.send=function(n){if(n instanceof FormData){var i,a={},c=function(t){var e="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!e){if(Array.isArray(t)||(e=l(t))){e&&(t=e);var r=0,n=function(){};return{s:n,n:function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:n}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,i=!0,a=!1;return{s:function(){e=e.call(t)},n:function(){var t=e.next();return i=t.done,t},e:function(t){a=!0,o=t},f:function(){try{i||null==e.return||e.return()}finally{if(a)throw o}}}}(n.entries());try{for(c.s();!(i=c.n()).done;){var f=u(i.value,2),p=f[0],y=f[1];a[p]=y}}catch(t){c.e(t)}finally{c.f()}n=a;var d=t.get(o);null!=d&&(d.body=a)}else{var h=t.get(o);null!=h&&(h.body=n)}return e.addEventListener("load",(function(e){var r,n=(null===(r=t.get(o))||void 0===r?void 0:r.url)||"";n.includes("lognroll")||n.includes("/api/v1/requests/")})),e.addEventListener("error",(function(){var i;if(!e.responseURL.includes("lognroll")){var a={type:"network",stage:"error",payload:{request:{id:o,url:e.responseURL,timestamp:(null===(i=t.get(o))||void 0===i?void 0:i.timestamp)||Date.now()-100,method:e._method||"GET",body:n},error:{message:"XHR request failed",timestamp:Date.now()}}};r.responseLogs.push(a),t.delete(o)}})),s.apply(e,arguments)},e}}}],n&&p(r.prototype,n),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n}(function(){return t=function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),o(this,"companyId",""),o(this,"userId",""),o(this,"config",{}),o(this,"traits",{})},(e=[{key:"initSession",value:function(t,e){(window||{}).lnr=this,this.config=e||{},this.companyId=t;var r=document.createElement("script"),n=(new Date).getTime();r.src=((null==e?void 0:e.logFile)||"https://logger.lognroll.com/logger.lnr.1.0.1.js")+"?cc="+n,r.async=!1,document.head.appendChild(r)}},{key:"initSessionWithoutScript",value:function(t,e){console.log("initSessionWithoutScript",t,e),(window||{}).lnr=this,this.config=e||{},this.companyId=t,this.init()}},{key:"identifyUser",value:function(t,e){this.userId=t,this.traits=e}},{key:"init",value:function(){console.log("init",this.companyId,this.config)}}])&&n(t.prototype,e),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e}()))));return e.default})()));
@@ -0,0 +1 @@
1
+ /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */
package/package.json CHANGED
@@ -1,29 +1,26 @@
1
1
  {
2
2
  "name": "@lognroll/lib",
3
- "version": "1.0.5",
4
- "description": "The official JavaScript SDK for ${PACKAGE_NAME}",
3
+ "version": "1.0.6",
4
+ "description": "The official JavaScript SDK for LogNroll",
5
5
  "main": "dist/index.js",
6
6
  "types": "./dist/index.d.ts",
7
7
  "files": [
8
8
  "dist"
9
9
  ],
10
10
  "scripts": {
11
- "build": "node build.js",
12
- "watch": "node build.js --watch",
13
- "module_watch_local": "LOG_FILE=\"http://localhost:3002/logger.lnr.1.0.1.js\" npm run watch",
14
- "module_build_local": "LOG_FILE=\"http://localhost:3002/logger.lnr.1.0.1.js\" npm run build",
15
- "module_build_test": "LOG_FILE=\"https://logger-dev.lognroll.com/logger.lnr.1.0.1.js\" npm run build",
16
- "module_build_prod": "LOG_FILE=\"https://logger.lognroll.com/logger.lnr.1.0.1.js\" npm run build",
11
+ "i": "npm install",
12
+ "build": "webpack --config webpack.config.js",
13
+ "build:dev": "webpack --config webpack.dev.js",
14
+ "watch": "webpack --config webpack.dev.js --watch",
17
15
  "link": "npm link",
18
- "test": "echo \"Error: no test specified\" && exit 1",
19
- "deploy-test": "export PACKAGE_NAME=testlow && npm publish --access public",
20
- "deploy-prod": "export PACKAGE_NAME=LogNroll && npm publish --access public"
16
+ "deploy-prod": "npm publish --access public"
21
17
  },
22
18
  "author": "Dmytro",
23
19
  "license": "ISC",
24
20
  "devDependencies": {
25
21
  "@babel/core": "^7.27.1",
26
22
  "@babel/preset-env": "^7.27.2",
23
+ "@babel/preset-typescript": "^7.27.0",
27
24
  "@rollup/plugin-commonjs": "^28.0.3",
28
25
  "@rollup/plugin-node-resolve": "^16.0.1",
29
26
  "babel-loader": "^10.0.0",
package/dist/index.d.ts DELETED
@@ -1,14 +0,0 @@
1
- declare module '@lognroll/lib' {
2
- interface LognRollOptions {
3
- [key: string]: any;
4
- }
5
-
6
- interface LognRoll {
7
- initSession(apiKey: string, options?: LognRollOptions): void;
8
- identifyUser(userId: string, traits: {name?:string, email?: string}): void;
9
-
10
- }
11
-
12
- const LognRoll: LognRoll;
13
- export default LognRoll;
14
- }
package/dist/index.js.map DELETED
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/core/index.ts", "../src/network/index.ts", "../src/console/index.ts", "../src/index.ts"],
4
- "sourcesContent": ["declare const LOG_FILE: string;\n\nexport class Core {\n constructor() {\n }\n public companyId: string = '';\n public userId: string = '';\n public config: any = {};\n public traits: {name?:string, email?: string} = {};\n\n initSession(companyId: string, data: any) {\n ((window || {}) as any)['lnr'] = this;\n this.config = data || {};\n this.companyId = companyId;\n const script = document.createElement('script');\n let date = new Date().getTime();\n script.src = (data?.logFile || LOG_FILE) + `?cc=`+ date;\n script.async = false;\n document.head.appendChild(script);\n }\n\n initSessionWithoutScript(companyId: string, data: any) {\n console.log('initSessionWithoutScript', companyId, data);\n ((window || {}) as any)['lnr'] = this;\n this.config = data || {};\n this.companyId = companyId;\n\n this.init();\n }\n\n identifyUser(userId: string, traits: {name?:string, email?: string}) {\n this.userId = userId;\n this.traits = traits;\n }\n\n\n public init() {\n console.log('init', this.companyId, this.config);\n }\n}\n\nexport default Core;\n", "import Core from \"../core\";\n\nexport class Network extends Core {\n constructor() {\n super();\n this.wrap();\n }\n private responseLogs: any[] = [];\n private processedResources = new Set<string>();\n private resourceMonitorInterval: number | null = null;\n\n getResponseLogs() {\n return [...this.responseLogs];\n }\n\n clearResponseLogs() {\n this.responseLogs = [];\n this.processedResources.clear();\n }\n\n private monitorResourceTiming() {\n if (typeof window === 'undefined' || !window.performance || !window.performance.getEntriesByType) {\n return;\n }\n\n const resources = performance.getEntriesByType('resource') as PerformanceResourceTiming[];\n \n resources.forEach(resource => {\n // Skip if already processed or if it's a lognroll request\n if (this.processedResources.has(resource.name) || resource.name.includes('lognroll')) {\n return;\n }\n\n // Add to processed set\n this.processedResources.add(resource.name);\n\n // Calculate timing details\n const timing = {\n startTime: resource.startTime,\n duration: resource.duration,\n fetchStart: resource.fetchStart,\n responseEnd: resource.responseEnd,\n // DNS lookup time\n dnsTime: resource.domainLookupEnd - resource.domainLookupStart,\n // Connection time\n connectTime: resource.connectEnd - resource.connectStart,\n // Time to First Byte (TTFB)\n ttfb: resource.responseStart - resource.requestStart,\n // Content download time\n downloadTime: resource.responseEnd - resource.responseStart\n };\n\n // Create response log entry\n const responseLog = {\n type: 'network',\n stage: 'response',\n payload: {\n request: {\n id: `resource-${resource.startTime}`,\n url: resource.name,\n timestamp: Date.now() - resource.duration,\n method: 'GET',\n initiatorType: 'STATIC',\n body: null\n },\n response: {\n url: resource.name,\n status: 200, // Resources that fail to load won't appear in the performance entries\n statusText: 'OK',\n headers: {},\n timing,\n contentType: resource.initiatorType,\n decodedBodySize: resource.decodedBodySize,\n encodedBodySize: resource.encodedBodySize,\n transferSize: resource.transferSize,\n timestamp: Date.now(),\n responseTime: resource.duration\n }\n }\n };\n\n this.responseLogs.push(responseLog);\n });\n\n // Clear the performance buffer to avoid processing the same resources again\n performance.clearResourceTimings();\n }\n\n startResourceMonitoring(interval: number = 1000) {\n if (this.resourceMonitorInterval !== null) {\n return;\n }\n\n // Initial check\n this.monitorResourceTiming();\n\n // Set up periodic monitoring\n this.resourceMonitorInterval = window.setInterval(() => {\n this.monitorResourceTiming();\n }, interval);\n }\n\n stopResourceMonitoring() {\n if (this.resourceMonitorInterval !== null) {\n clearInterval(this.resourceMonitorInterval);\n this.resourceMonitorInterval = null;\n }\n }\n\n wrap() {\n // Start resource monitoring\n this.startResourceMonitoring();\n\n // Store for tracking requests\n const requestStore = new Map<string, { url: string; timestamp: number, body: any }>();\n\n // Wrap fetch\n const originalFetch = window.fetch;\n const _this = this;\n window.fetch = async function (input: RequestInfo | URL, init?: RequestInit) {\n const requestId = Date.now().toString();\n const url = typeof input === 'string' ? input : (input as Request).url;\n \n // Skip requests containing 'lognroll' in the URL\n if (url.includes('lognroll')) {\n return originalFetch(input, init);\n }\n \n const method = init?.method || 'GET';\n const body = init?.body || null;\n\n requestStore.set(requestId, {url, timestamp: Date.now(), body: null});\n\n // Execute original fetch\n const startTime = Date.now();\n const requestDetails = requestStore.get(requestId);\n try {\n const response = await originalFetch(input, init);\n\n // Clone response to read body\n const clonedResponse = response.clone();\n const responseData = await clonedResponse.text().catch(() => null);\n // Log response\n const responseTime = Date.now() - startTime;\n const responseLog = {\n type: 'network',\n stage: 'response',\n payload: {\n request: {\n id: requestId,\n url: response.url,\n initiatorType: 'fetch',\n timestamp: requestDetails?.timestamp || Date.now() - 100,\n method,\n body\n },\n response: {\n url: response.url,\n status: response.status,\n statusText: response.statusText,\n headers: (() => {\n const headersObj: Record<string, string> = {};\n response.headers.forEach((value, key) => {\n headersObj[key] = value;\n });\n return headersObj;\n })(),\n data: responseData,\n timestamp: Date.now(),\n responseTime\n }\n }\n };\n\n _this.responseLogs.push(responseLog);\n requestStore.delete(requestId);\n\n return response;\n } catch (error: unknown) {\n // Log error\n const errorLog = {\n type: 'network',\n stage: 'error',\n payload: {\n request: {\n id: requestId,\n url,\n timestamp: requestDetails?.timestamp || Date.now() - 100,\n method,\n body\n },\n error: {\n message: error instanceof Error ? error.message : 'Unknown error',\n timestamp: Date.now()\n }\n }\n };\n\n // console.error(JSON.stringify(errorLog));\n _this.responseLogs.push(errorLog);\n requestStore.delete(requestId);\n throw error;\n }\n };\n\n // Wrap XMLHttpRequest\n const originalXHR = window.XMLHttpRequest;\n // @ts-ignore - We're intentionally replacing the constructor\n window.XMLHttpRequest = function () {\n const xhr = new originalXHR();\n const requestId = Date.now().toString();\n\n const originalOpen = xhr.open;\n\n // Store custom headers for this specific XHR instance\n (xhr as any)._requestHeaders = {};\n\n // Preserve the original setRequestHeader for this instance\n const originalSetRequestHeader = xhr.setRequestHeader;\n xhr.setRequestHeader = function(header, value) {\n (xhr as any)._requestHeaders[header] = value;\n originalSetRequestHeader.apply(this, arguments as any);\n };\n\n xhr.open = function (method: string, url: string | URL) {\n if (url.toString().includes('lognroll')) {\n return originalOpen.apply(xhr, arguments as any);\n }\n\n requestStore.set(requestId, {url: url.toString(), timestamp: Date.now(), body: null});\n\n\n // Store a reference to 'this' (the XHR object) to use in the modified onreadystatechange\n const self = this;\n\n // Preserve the original onreadystatechange handler if it exists\n const originalOnReadyStateChange = this.onreadystatechange;\n\n // Override onreadystatechange to intercept the response\n this.onreadystatechange = function() {\n if (self.readyState === 4) { // DONE state\n\n const data = requestStore.get(requestId);\n // Log response\n const responseTime = Date.now() - (data?.timestamp || Date.now());\n const responseLog = {\n type: 'network',\n stage: 'response',\n payload: {\n request: {\n id: requestId,\n url: url,\n initiatorType: 'xmlhttprequest',\n timestamp: requestStore.get(requestId)?.timestamp || Date.now() - 100,\n method: method || 'GET',\n body: data?.body || null,\n headers: (xhr as any)._requestHeaders || {}\n },\n response: {\n status: self.status,\n statusText: self.statusText,\n headers: self.getAllResponseHeaders().split('\\r\\n').reduce((acc: Record<string, string>, line: string) => {\n const [key, value] = line.split(': ');\n if (key && value) acc[key] = value;\n return acc;\n }, {}),\n data: self.responseText,\n timestamp: Date.now(),\n responseTime\n }\n }\n };\n\n\n _this.responseLogs.push(responseLog);\n requestStore.delete(requestId);\n\n // Call the original onreadystatechange if it was defined\n if (originalOnReadyStateChange) {\n originalOnReadyStateChange.apply(self, arguments as any);\n }\n } else {\n // If there was an original onreadystatechange, call it for other states\n if (originalOnReadyStateChange) {\n originalOnReadyStateChange.apply(self, arguments as any);\n }\n }\n };\n\n\n return originalOpen.apply(xhr, arguments as any);\n };\n\n const originalSend = xhr.send;\n xhr.send = function (body: any) {\n if (body instanceof FormData) {\n const reqData: any = {};\n for (const [key, value] of (body as any).entries()) {\n reqData[key] = value;\n }\n body = reqData;\n const data = requestStore.get(requestId);\n if (data != null) {\n data['body'] = reqData;\n }\n\n } else {\n const data = requestStore.get(requestId);\n if (data != null) {\n data['body'] = body;\n }\n }\n\n xhr.addEventListener('load', function (progressEvent) {\n\n const url = requestStore.get(requestId)?.url || '';\n // Skip if URL contains 'lognroll'\n if (url.includes('lognroll')) {\n return;\n }\n\n if(url.includes('/api/v1/requests/')) {\n // debugger;\n }\n\n });\n\n xhr.addEventListener('error', function () {\n // Skip if URL contains 'lognroll'\n if (xhr.responseURL.includes('lognroll')) {\n return;\n }\n \n // Log error\n const errorLog = {\n type: 'network',\n stage: 'error',\n payload: {\n request: {\n id: requestId,\n url: xhr.responseURL,\n timestamp: requestStore.get(requestId)?.timestamp || Date.now() - 100,\n method: (xhr as any)._method || 'GET',\n body\n },\n error: {\n message: 'XHR request failed',\n timestamp: Date.now()\n }\n }\n };\n\n _this.responseLogs.push(errorLog);\n requestStore.delete(requestId);\n });\n\n return originalSend.apply(xhr, arguments as any);\n };\n\n return xhr;\n };\n }\n}\n\nexport default Network;\n", "import Network from \"../network\";\n\nexport class Console extends Network {\n\n private originalConsole: any;\n public consoleLogs: any[] = [];\n\n constructor() {\n super();\n this.originalConsole = window.console;\n this.initializeConsoleOverrides();\n }\n\n initializeConsoleOverrides() {\n const methods = ['log', 'info', 'warn', 'error', 'debug', 'trace'];\n\n methods.forEach(method => {\n const originalMethod = this.originalConsole[method];\n\n (window as any).console[method] = (...args: any[]) => {\n const timestamp = Date.now();\n originalMethod.apply(this.originalConsole, args);\n\n try {\n const getCircularReplacer = () => {\n const seen = new WeakSet();\n return (key: any, value: any) => {\n if (typeof value === 'object' && value !== null) {\n if (seen.has(value)) {\n return '[Circular]';\n }\n seen.add(value);\n }\n return value;\n };\n };\n\n const data = method + \"<|||>\" + args.map(arg => {\n try {\n return typeof arg === 'object' && arg !== null\n ? JSON.stringify(arg, getCircularReplacer())\n : String(arg);\n } catch (e) {\n return '[Error stringifying argument]';\n }\n }).join('<SPLIT>');\n\n this.consoleLogs.push({\n data,\n timestamp,\n })\n } catch (e) {\n originalMethod.apply(this.originalConsole, [e, 'error sending log']);\n }\n };\n });\n }\n}\n\nexport default Console;\n", "import { Console } from './console';\n\nclass LognRoll extends Console {\n\n constructor() {\n super();\n }\n}\n\nexport default new LognRoll();"],
5
- "mappings": "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",
6
- "names": []
7
- }