mirror of
https://code.equilibrium.co.ao/ITO/doneit-web.git
synced 2026-04-18 20:47:54 +00:00
fix publication details
This commit is contained in:
+217
-35
@@ -103,49 +103,231 @@ import { registerLocaleData } from '@angular/common';
|
||||
import localePt from '@angular/common/locales/pt';
|
||||
import { LogsDatabase } from './infra/database/dexie/instance/logs/service';
|
||||
import { UserModule } from './module/user/user.module';
|
||||
import { Logger } from './services/logger/main/service';
|
||||
|
||||
// Register the locale data
|
||||
registerLocaleData(localePt, 'pt');
|
||||
|
||||
Sentry.init(
|
||||
{
|
||||
dsn: 'https://5b345a3ae70b4e4da463da65881b4aaa@o4504340905525248.ingest.sentry.io/4504345615794176',
|
||||
// To set your release and dist versions
|
||||
release: 'gabinetedigital@1.0.0',
|
||||
dist: '1',
|
||||
// Set tracesSampleRate to 1.0 to capture 100% of transactions for performance monitoring.
|
||||
// We recommend adjusting this value in production.
|
||||
tracesSampleRate: 1.0,
|
||||
integrations: [
|
||||
new BrowserTracing({
|
||||
tracingOrigins: ['localhost', 'https://gd-api.oapr.gov.ao/api/'],
|
||||
}) as Integration,
|
||||
],
|
||||
beforeSend(event) {
|
||||
console.log('event.exception.values[0].value', event.exception.values[0].value);
|
||||
// Sentry.init(
|
||||
// {
|
||||
// dsn: 'https://5b345a3ae70b4e4da463da65881b4aaa@o4504340905525248.ingest.sentry.io/4504345615794176',
|
||||
// // To set your release and dist versions
|
||||
// release: 'gabinetedigital@1.0.0',
|
||||
// dist: '1',
|
||||
// // Set tracesSampleRate to 1.0 to capture 100% of transactions for performance monitoring.
|
||||
// // We recommend adjusting this value in production.
|
||||
// tracesSampleRate: 1.0,
|
||||
// integrations: [
|
||||
// new BrowserTracing({
|
||||
// tracingOrigins: ['localhost', 'https://gd-api.oapr.gov.ao/api/'],
|
||||
// }) as Integration,
|
||||
// ],
|
||||
// beforeSend(event) {
|
||||
// console.log('event.exception.values[0].value', event.exception.values[0].value);
|
||||
|
||||
if (event.level === 'error') {
|
||||
// if (event.level === 'error') {
|
||||
|
||||
LogsDatabase.sentryError.add(event as any).then(() => {
|
||||
console.log('event', event)
|
||||
})
|
||||
// LogsDatabase.sentryError.add(event as any).then(() => {
|
||||
// console.log('event', event)
|
||||
// })
|
||||
|
||||
openTelemetryLogging.send({
|
||||
level: 'info',
|
||||
message: event.exception.values[0].value,
|
||||
payload: {
|
||||
object: {
|
||||
sentry: true,
|
||||
error: event
|
||||
}
|
||||
},
|
||||
})
|
||||
// openTelemetryLogging.send({
|
||||
// level: 'info',
|
||||
// message: event.exception.values[0].value,
|
||||
// payload: {
|
||||
// object: {
|
||||
// sentry: true,
|
||||
// error: event
|
||||
// }
|
||||
// },
|
||||
// })
|
||||
// }
|
||||
|
||||
// console.log('Sentry Event', event);
|
||||
// // Return event to send it to Sentry
|
||||
// return event;
|
||||
// },
|
||||
// }
|
||||
// );
|
||||
|
||||
|
||||
import Tracker from '@openreplay/tracker';
|
||||
import trackerAssist from '@openreplay/tracker-assist'; // 👈 for errors, logs & stack traces
|
||||
const tracker = new Tracker({
|
||||
projectKey: "g8HOZiBi5iUWEsK3Ajw5",
|
||||
__DISABLE_SECURE_MODE: true, // ✅ allow HTTP + localhost
|
||||
});
|
||||
tracker.start()
|
||||
tracker.use(trackerAssist());
|
||||
tracker.setUserID('john@doe.com');
|
||||
|
||||
|
||||
|
||||
(function () {
|
||||
const httpLogs = [];
|
||||
|
||||
// --- Patch fetch ---
|
||||
const originalFetch = window.fetch;
|
||||
window.fetch = async (input, config = {}) => {
|
||||
const url = typeof input === "string" ? input : (input as any).url;
|
||||
const method = config?.method || "GET";
|
||||
|
||||
// Capture tracer header
|
||||
let tracerHeader = null;
|
||||
if (config?.headers) {
|
||||
if (config.headers instanceof Headers) {
|
||||
tracerHeader = config.headers.get("x-tracer");
|
||||
} else if (typeof config.headers === "object") {
|
||||
tracerHeader = config.headers["x-tracer"] || config.headers["X-Tracer"];
|
||||
}
|
||||
}
|
||||
// Return event to send it to Sentry
|
||||
return event;
|
||||
},
|
||||
}
|
||||
);
|
||||
|
||||
// Capture request body (payload)
|
||||
let requestPayload = null;
|
||||
if (config?.body) {
|
||||
try {
|
||||
requestPayload = typeof config.body === "string"
|
||||
? config.body
|
||||
: JSON.stringify(config.body);
|
||||
} catch {
|
||||
requestPayload = "[Unserializable body]";
|
||||
}
|
||||
}
|
||||
|
||||
const start = Date.now();
|
||||
try {
|
||||
const response = await originalFetch(input, config);
|
||||
|
||||
// Clone response so we don’t consume it
|
||||
const clone = response.clone();
|
||||
let responsePayload = null;
|
||||
try {
|
||||
const contentType = clone.headers.get("content-type") || "";
|
||||
if (contentType.includes("application/json")) {
|
||||
responsePayload = await clone.json();
|
||||
} else if (contentType.includes("text")) {
|
||||
responsePayload = await clone.text();
|
||||
} else {
|
||||
responsePayload = "[Non-textual body]";
|
||||
}
|
||||
} catch {
|
||||
responsePayload = "[Unserializable response]";
|
||||
}
|
||||
|
||||
const log = {
|
||||
type: "fetch",
|
||||
url,
|
||||
method,
|
||||
status: response.status,
|
||||
xTracer: tracerHeader,
|
||||
requestPayload,
|
||||
responsePayload,
|
||||
duration: Date.now() - start,
|
||||
timestamp: new Date().toISOString(),
|
||||
};
|
||||
if(response.status >= 400 || response.status === 0) {
|
||||
Logger.error('XHR', log)
|
||||
}
|
||||
httpLogs.push(log);
|
||||
|
||||
return response;
|
||||
} catch (error) {
|
||||
const log = {
|
||||
type: "fetch",
|
||||
url,
|
||||
method,
|
||||
status: "NETWORK_ERROR",
|
||||
xTracer: tracerHeader,
|
||||
requestPayload,
|
||||
responsePayload: null,
|
||||
duration: Date.now() - start,
|
||||
timestamp: new Date().toISOString(),
|
||||
};
|
||||
|
||||
if(!url.includes('petermaquiran.xyz') && url != "") {
|
||||
Logger.error('XHR', log);
|
||||
}
|
||||
|
||||
httpLogs.push(log);
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
|
||||
// --- Patch XMLHttpRequest ---
|
||||
const OriginalXHR = window.XMLHttpRequest;
|
||||
function CustomXHR() {
|
||||
const xhr: any = new OriginalXHR();
|
||||
const start = Date.now();
|
||||
xhr._xTracer = null;
|
||||
xhr._requestPayload = null;
|
||||
|
||||
const originalSetRequestHeader = xhr.setRequestHeader;
|
||||
xhr.setRequestHeader = function (key, value) {
|
||||
if (key.toLowerCase() === "x-tracer") {
|
||||
xhr._xTracer = value;
|
||||
}
|
||||
return originalSetRequestHeader.call(xhr, key, value);
|
||||
};
|
||||
|
||||
const originalSend = xhr.send;
|
||||
xhr.send = function (body) {
|
||||
if (body) {
|
||||
try {
|
||||
xhr._requestPayload = typeof body === "string" ? body : JSON.stringify(body);
|
||||
} catch {
|
||||
xhr._requestPayload = "[Unserializable body]";
|
||||
}
|
||||
}
|
||||
return originalSend.call(xhr, body);
|
||||
};
|
||||
|
||||
xhr.addEventListener("loadend", function () {
|
||||
let responsePayload = null;
|
||||
try {
|
||||
const contentType = xhr.getResponseHeader("content-type") || "";
|
||||
if (contentType.includes("application/json")) {
|
||||
responsePayload = JSON.parse(xhr.responseText);
|
||||
} else if (contentType.includes("text")) {
|
||||
responsePayload = xhr.responseText;
|
||||
} else {
|
||||
responsePayload = "[Non-textual body]";
|
||||
}
|
||||
} catch {
|
||||
responsePayload = "[Unserializable response]";
|
||||
}
|
||||
const log = {
|
||||
type: "xhr",
|
||||
url: xhr.responseURL,
|
||||
method: xhr._method || "GET",
|
||||
status: xhr.status,
|
||||
xTracer: xhr._xTracer,
|
||||
requestPayload: xhr._requestPayload,
|
||||
responsePayload,
|
||||
duration: Date.now() - start,
|
||||
timestamp: new Date().toISOString(),
|
||||
};
|
||||
|
||||
if(xhr.status >= 400 || xhr.status === 0) {
|
||||
Logger.error('XHR', log)
|
||||
}
|
||||
|
||||
httpLogs.push(log);
|
||||
});
|
||||
|
||||
const originalOpen = xhr.open;
|
||||
xhr.open = function (method, url, ...rest) {
|
||||
xhr._method = method;
|
||||
return originalOpen.call(xhr, method, url, ...rest);
|
||||
};
|
||||
|
||||
return xhr;
|
||||
}
|
||||
(window as any).XMLHttpRequest = CustomXHR;
|
||||
|
||||
// Expose logs
|
||||
(window as any).getHttpLogs = () => httpLogs;
|
||||
})();
|
||||
|
||||
|
||||
@NgModule({
|
||||
declarations: [AppComponent, PopupQuestionPipe, InputFilterDirective],
|
||||
|
||||
Reference in New Issue
Block a user