From 8bddb7c3dc84ef9a7a83976bfb0690f444690ec4 Mon Sep 17 00:00:00 2001 From: dwjanus Date: Wed, 7 Jan 2026 11:14:36 -0500 Subject: [PATCH 1/6] add frontend property to bugsnag --- scripts/inject-bugsnag.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/scripts/inject-bugsnag.js b/scripts/inject-bugsnag.js index 7dff7cef5..dba66930b 100644 --- a/scripts/inject-bugsnag.js +++ b/scripts/inject-bugsnag.js @@ -27,6 +27,7 @@ async function inject(fileName) { (function() { var BUGSNAG_API_KEY = '${BUGSNAG_API_KEY}'; var walletType; + var frontend = 'bonk'; if (BUGSNAG_API_KEY) { Bugsnag.start(BUGSNAG_API_KEY); @@ -40,6 +41,9 @@ async function inject(fileName) { case 'walletType': walletType = value; break; + case 'frontend': + frontend = value; + break; default: break; } @@ -59,6 +63,9 @@ async function inject(fileName) { if (walletType) { event.addMetadata('walletType', walletType); } + if (frontend) { + event.addMetadata('frontend', frontend); + } }); } else { console.warn(location, error, metadata); From 422961c07f783cfaa53e9bc373c4165858d27e5e Mon Sep 17 00:00:00 2001 From: dwjanus Date: Tue, 20 Jan 2026 13:29:39 -0500 Subject: [PATCH 2/6] added frontend property to dd global context --- src/lib/analytics/analytics.ts | 5 ++++- src/lib/analytics/datadog.ts | 7 ++++++- src/lib/telemetry.ts | 16 ++++++++++------ 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/lib/analytics/analytics.ts b/src/lib/analytics/analytics.ts index f7eec3ae4..acf033639 100644 --- a/src/lib/analytics/analytics.ts +++ b/src/lib/analytics/analytics.ts @@ -23,7 +23,10 @@ export const identify = (property: AnalyticsUserProperty) => { }); const ddPropertyName = `user-property-${propertyTypeToLog}`; dd.setContextProperty(ddPropertyName, property.payload); - dd.info(`set context item: ${ddPropertyName} to value ${property.payload}`, dd.getContext()); + dd.info(`set context item: ${ddPropertyName} to value ${property.payload}`, { + ...dd.getContext(), + frontend: 'bonk', + }); globalThis.dispatchEvent(customEvent); }; diff --git a/src/lib/analytics/datadog.ts b/src/lib/analytics/datadog.ts index 1200e4a16..1280f7f51 100644 --- a/src/lib/analytics/datadog.ts +++ b/src/lib/analytics/datadog.ts @@ -8,6 +8,7 @@ const SERVICE_NAME = 'v4-web'; const LOGGER_NAME = 'v4-web'; const SITE_NAME = 'datadoghq.com'; const instanceId = crypto.randomUUID(); +const FRONTEND = 'bonk'; const LOG_ENDPOINT_PATH = (PROXY_URL ?? '').endsWith('/') ? 'api/v2/logs' : '/api/v2/logs'; @@ -22,6 +23,10 @@ if (CLIENT_TOKEN) { proxy: PROXY_URL ? `${PROXY_URL}${LOG_ENDPOINT_PATH}` : undefined, sendLogsAfterSessionExpiration: true, }); + + datadogLogs.setGlobalContextProperty('frontend', FRONTEND); + datadogLogs.setGlobalContextProperty('dd-client-token', CLIENT_TOKEN); + datadogLogs.setGlobalContextProperty('instance-id', instanceId); } datadogLogs.createLogger(LOGGER_NAME); @@ -29,7 +34,7 @@ datadogLogs.createLogger(LOGGER_NAME); const datadogLogger = datadogLogs.getLogger(LOGGER_NAME)!; datadogLogger.setContextProperty('dd-client-token', CLIENT_TOKEN); datadogLogger.setContextProperty('instance-id', instanceId); -datadogLogger.setContextProperty('frontend', 'bonk'); +datadogLogger.setContextProperty('frontend', FRONTEND); /** * TODO: make a logger wrapper that enables us also log to the console diff --git a/src/lib/telemetry.ts b/src/lib/telemetry.ts index e0106afb8..2840b7a82 100644 --- a/src/lib/telemetry.ts +++ b/src/lib/telemetry.ts @@ -4,6 +4,8 @@ import { isDev } from '@/constants/networks'; import { track } from './analytics/analytics'; import { dd } from './analytics/datadog'; +const FRONTEND = 'bonk'; + let lastLogTime = Date.now(); export function getDurationSinceLastLogMs() { @@ -11,17 +13,18 @@ export function getDurationSinceLastLogMs() { } export const log = (location: string, error?: Error, metadata?: object) => { + const modifiedMetadata = { ...metadata, frontend: FRONTEND }; lastLogTime = Date.now(); if (isDev) { // eslint-disable-next-line no-console - console.warn('telemetry/log:', { location, error, metadata }); + console.warn('telemetry/log:', { location, error, metadata: modifiedMetadata }); } const customEvent = new CustomEvent('dydx:log', { detail: { location, error, - metadata, + metadata: modifiedMetadata, }, }); @@ -29,24 +32,25 @@ export const log = (location: string, error?: Error, metadata?: object) => { AnalyticsEvents.Error({ location, error, - metadata, + metadata: modifiedMetadata, }) ); - dd.error(`[Error] ${location}`, metadata, error); + dd.error(`[Error] ${location}`, { ...metadata, frontend: FRONTEND }, error); globalThis.dispatchEvent(customEvent); }; export const logInfo = (location: string, metadata?: object) => { lastLogTime = Date.now(); + const modifiedMetadata = { ...metadata, frontend: FRONTEND }; if (isDev) { // eslint-disable-next-line no-console - console.log('telemetry/logInfo:', { location, metadata }); + console.log('telemetry/logInfo:', { location, metadata: modifiedMetadata }); } - dd.info(`[Info] ${location}`, metadata); + dd.info(`[Info] ${location}`, { ...metadata, frontend: FRONTEND }); }; // Log rejected Promises without a .catch() handler From a9bf4ceac2a96e478aa31a7eb2dd2039d98a999a Mon Sep 17 00:00:00 2001 From: dwjanus Date: Tue, 20 Jan 2026 13:44:46 -0500 Subject: [PATCH 3/6] add amplitude enrichment plugin --- scripts/inject-amplitude.js | 71 ++++++++++++++++++++++------------ src/lib/analytics/analytics.ts | 5 +-- 2 files changed, 47 insertions(+), 29 deletions(-) diff --git a/scripts/inject-amplitude.js b/scripts/inject-amplitude.js index d552e6e50..12f89139d 100644 --- a/scripts/inject-amplitude.js +++ b/scripts/inject-amplitude.js @@ -32,31 +32,52 @@ async function inject(fileName) { const amplitudeListenerScript = ``; diff --git a/src/lib/analytics/analytics.ts b/src/lib/analytics/analytics.ts index acf033639..f7eec3ae4 100644 --- a/src/lib/analytics/analytics.ts +++ b/src/lib/analytics/analytics.ts @@ -23,10 +23,7 @@ export const identify = (property: AnalyticsUserProperty) => { }); const ddPropertyName = `user-property-${propertyTypeToLog}`; dd.setContextProperty(ddPropertyName, property.payload); - dd.info(`set context item: ${ddPropertyName} to value ${property.payload}`, { - ...dd.getContext(), - frontend: 'bonk', - }); + dd.info(`set context item: ${ddPropertyName} to value ${property.payload}`, dd.getContext()); globalThis.dispatchEvent(customEvent); }; From 1e6100daf75eba5770b861ca224f78c9428f502e Mon Sep 17 00:00:00 2001 From: dwjanus Date: Tue, 20 Jan 2026 13:45:35 -0500 Subject: [PATCH 4/6] format --- scripts/inject-amplitude.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/inject-amplitude.js b/scripts/inject-amplitude.js index 12f89139d..8d2a8ec9c 100644 --- a/scripts/inject-amplitude.js +++ b/scripts/inject-amplitude.js @@ -4,7 +4,7 @@ import { fileURLToPath } from 'url'; const AMPLITUDE_API_KEY = process.env.AMPLITUDE_API_KEY; const AMPLITUDE_SERVER_URL = process.env.AMPLITUDE_SERVER_URL; -const AMPLITUDE_SERVER_ZONE = process.env.AMPLITUDE_SERVER_ZONE || 'US'; +const AMPLITUDE_SERVER_ZONE = process.env.AMPLITUDE_SERVER_ZONE ?? 'US'; const currentPath = fileURLToPath(import.meta.url); const projectRoot = path.dirname(currentPath); From b667f4929250c10c343acc0fafec9fe4b201359d Mon Sep 17 00:00:00 2001 From: dwjanus Date: Wed, 21 Jan 2026 11:28:09 -0500 Subject: [PATCH 5/6] enrichment plugin --- scripts/inject-amplitude.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/inject-amplitude.js b/scripts/inject-amplitude.js index 8d2a8ec9c..2994b137c 100644 --- a/scripts/inject-amplitude.js +++ b/scripts/inject-amplitude.js @@ -54,7 +54,7 @@ async function inject(fileName) { AMPLITUDE_SERVER_URL ? `, undefined, { serverUrl: "${AMPLITUDE_SERVER_URL}", - serverZone: "${AMPLITUDE_SERVER_ZONE}" + serverZone: "${AMPLITUDE_SERVER_ZONE}", }` : '' }); From 6da987632cba0926657bec127146caafcbafa39a Mon Sep 17 00:00:00 2001 From: dwjanus Date: Thu, 22 Jan 2026 11:23:54 -0500 Subject: [PATCH 6/6] feedback --- scripts/inject-amplitude.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/scripts/inject-amplitude.js b/scripts/inject-amplitude.js index 2994b137c..084ddbc16 100644 --- a/scripts/inject-amplitude.js +++ b/scripts/inject-amplitude.js @@ -35,19 +35,19 @@ async function inject(fileName) { if (!e) return; // Enrichment plugin to add 'frontend' to ALL events (including automatic ones) - var enrichFrontendPlugin = { - name: 'enrich-frontend-plugin', - type: 'enrichment', - setup: function() { return undefined; }, - execute: function(event) { - event.event_properties = event.event_properties || {}; - event.event_properties.frontend = 'bonk'; + var appendBonkPlugin = { + name: 'append-bonk-plugin', + execute: async function(event) { + event.event_properties = { + ...event.event_properties, + frontend: 'bonk', + }; return event; } }; // add plugin BEFORE init - globalThis.amplitude.add(enrichFrontendPlugin); + globalThis.amplitude.add(appendBonkPlugin()); // now initialize amplitude globalThis.amplitude.init(e${