Skip to content

Commit 4961137

Browse files
maxkostyandreiborza
authored andcommitted
feat(core): Make \matcher\ parameter optional in \makeMultiplexedTransport\
The `matcher` parameter in `makeMultiplexedTransport` is now optional with a sensible default. This makes it much easier to use the multiplexed transport for sending events to multiple DSNs based on runtime configuration. **Before:** ```javascript import { makeFetchTransport, makeMultiplexedTransport } from '@sentry/browser'; const EXTRA_KEY = 'ROUTE_TO'; const transport = makeMultiplexedTransport(makeFetchTransport, args => { const event = args.getEvent(); if (event?.extra?.[EXTRA_KEY] && Array.isArray(event.extra[EXTRA_KEY])) { return event.extra[EXTRA_KEY]; } return []; }); Sentry.init({ transport, // ... other options }); // Capture events with routing info Sentry.captureException(error, { extra: { [EXTRA_KEY]: [ { dsn: 'https://[email protected]/project1', release: 'v1.0.0' }, { dsn: 'https://[email protected]/project2' }, ], }, }); ``` **After:** ```javascript import { makeFetchTransport, makeMultiplexedTransport, MULTIPLEXED_TRANSPORT_EXTRA_KEY } from '@sentry/browser'; // Just pass the transport generator - the default matcher handles the rest! Sentry.init({ transport: makeMultiplexedTransport(makeFetchTransport), // ... other options }); // Capture events with routing info using the exported constant Sentry.captureException(error, { extra: { [MULTIPLEXED_TRANSPORT_EXTRA_KEY]: [ { dsn: 'https://[email protected]/project1', release: 'v1.0.0' }, { dsn: 'https://[email protected]/project2' }, ], }, }); ``` The default matcher looks for routing information in `event.extra[MULTIPLEXED_TRANSPORT_EXTRA_KEY]`. You can still provide a custom matcher function for advanced use cases.
1 parent cabb611 commit 4961137

File tree

1 file changed

+24
-0
lines changed

1 file changed

+24
-0
lines changed

packages/core/src/transports/multiplexed.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,3 +151,27 @@ export function makeMultiplexedTransport<TO extends BaseTransportOptions>(
151151
};
152152
};
153153
}
154+
155+
export const MULTIPLEXED_TRANSPORT_EXTRA_KEY = "multiplexed_transport";
156+
157+
/**
158+
* Creates a transport that will send events to all DSNs provided in event.extra["multiplexed_transport"]
159+
* in the format of [{dsn: "__MY_DSN__", release: "__MY_RELEASE__"}, ...]. If no such key exists or list
160+
* is empty event will be sent to main DSN provided in Sentry.init().
161+
*/
162+
export function makeSimpleMultiplexedTransport<TO extends BaseTransportOptions>(
163+
createTransport: (options: TO) => Transport,
164+
): (options: TO) => Transport {
165+
return makeMultiplexedTransport(makeFetchTransport, (args) => {
166+
const event = args.getEvent();
167+
if (
168+
event &&
169+
event.extra &&
170+
MULTIPLEXED_TRANSPORT_EXTRA_KEY in event.extra &&
171+
Array.isArray(event.extra[MULTIPLEXED_TRANSPORT_EXTRA_KEY])
172+
) {
173+
return event.extra[MULTIPLEXED_TRANSPORT_EXTRA_KEY];
174+
}
175+
return [];
176+
});
177+
}

0 commit comments

Comments
 (0)