Skip to content

feat: add Yandex Metrica message processor and corresponding test#192

Open
Dobrunia wants to merge 6 commits into
masterfrom
feat/yandex-metrica-addon-init
Open

feat: add Yandex Metrica message processor and corresponding test#192
Dobrunia wants to merge 6 commits into
masterfrom
feat/yandex-metrica-addon-init

Conversation

@Dobrunia

Copy link
Copy Markdown
Member

Add new addon - Yandex Metrica.
Send 2 new fields:

  • counterId
  • clientId

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a new Browser SDK addon that enriches outgoing error payloads with Yandex Metrica identifiers (counterId + clientId) when Metrica is present, and adds test coverage for this behavior.

Changes:

  • Introduces YandexMetricaAddonMessageProcessor that reads up to 10 counters from the Metrica init queue and caches { counterId, clientId } for later payload enrichment.
  • Wires the new processor into the browser Catcher message processing pipeline.
  • Adds unit + integration tests validating identifier attachment behavior and edge cases.

Reviewed changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
packages/browser/tests/catcher.addons.test.ts Adds an integration test asserting Yandex Metrica identifiers appear in outgoing payload addons.
packages/browser/tests/addons/yandex-metrica-message-processor.test.ts Adds unit tests for the Yandex Metrica addon message processor behavior and edge cases.
packages/browser/src/catcher.ts Registers the Yandex Metrica message processor in the browser Catcher pipeline.
packages/browser/src/addons/yandex-metrica-addon-message-processor.ts Implements Yandex Metrica identifier discovery + caching and payload enrichment.
packages/browser/package.json Bumps browser package version to 3.4.0.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +2 to +5
import {
YANDEX_METRICA_ADDON_KEY,
YandexMetricaAddonMessageProcessor
} from '../../src/addons/yandex-metrica-addon-message-processor';
Comment on lines +71 to +92
vi.stubGlobal('ym', ym);

const { sendSpy, transport } = createTransport();

createCatcher(transport).send(new Error('e'));
await wait();

expect(getLastPayload(sendSpy).addons.yandexMetrica).toEqual({
['1']: {
counterId: 123,
clientId: 'client-123',
},
['2']: {
counterId: 456,
clientId: 'client-456',
},
});
expect(ym).toHaveBeenCalledWith(123, 'getClientID', expect.any(Function));
expect(ym).toHaveBeenCalledWith(456, 'getClientID', expect.any(Function));

vi.unstubAllGlobals();
});
/**
* Addon key used to attach Yandex Metrica identifiers.
*/
export const YANDEX_METRICA_ADDON_KEY = 'yandexMetrica';

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

could you rename it to yandexMetrika?


const MAX_YANDEX_METRICA_COUNTERS = 10;

interface YandexMetricaFunction {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

jsdocs missed

*/
export class YandexMetricaAddonMessageProcessor implements MessageProcessor<'errors/javascript'> {
/**
* Cached Yandex Metrica identifiers keyed by their one-based queue position.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

explain what is "identifier"? is it counter id? of so, why do you use another naming

/**
* Reads up to ten initialized counters and requests their ClientIDs.
*/
constructor() {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

please organize business logic by separate methods, and add try-catch where it is needed

@neSpecc neSpecc left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • update README as well
  • also please fix this broken link in readme
Image

@Dobrunia Dobrunia requested a review from neSpecc June 24, 2026 14:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants