diff --git a/.gitignore b/.gitignore index 83815eb..a40bb0f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ node_modules .DS_Store manual-test/manual-test.js +.idea diff --git a/dist/index.common.js b/dist/index.common.js index 752857c..28d4872 100644 --- a/dist/index.common.js +++ b/dist/index.common.js @@ -90,9 +90,23 @@ var MAX_URL_LEN = 1024; function prepareUrl(url) { return truncate(url, MAX_URL_LEN); } +function normalizeOrigin(origin) { + if (origin.endsWith('/')) { + return origin.slice(0, origin.length - 1); + } + return origin; +} +var metrikaOrigin = 'https://mc.yandex.ru'; +/** + * Конфигурирует транспорт отправки событий + * @param params + */ +function configureTransport(params) { + metrikaOrigin = normalizeOrigin(params.metrikaOrigin); +} function sendData(counterId, queryParams) { - var url = 'https://mc.yandex.ru/watch/' + counterId + '?' + queryStringify(queryParams); + var url = metrikaOrigin + '/watch/' + counterId + '?' + queryStringify(queryParams); var hasBeacon = typeof navigator !== 'undefined' && navigator.sendBeacon; if (!hasBeacon || !navigator.sendBeacon(url, ' ')) { if (typeof fetch !== 'undefined') { @@ -294,6 +308,7 @@ function notBounce(counterId) { }); } +exports.configureTransport = configureTransport; exports.extLink = extLink; exports.file = file; exports.hit = hit; diff --git a/dist/index.d.ts b/dist/index.d.ts index 55aa2ef..9dba032 100644 --- a/dist/index.d.ts +++ b/dist/index.d.ts @@ -1,3 +1,4 @@ +export { configureTransport } from './transport'; export interface LyamHitParams { referrer?: string; title?: string; diff --git a/dist/index.esm.js b/dist/index.esm.js index 0a78363..b78926b 100644 --- a/dist/index.esm.js +++ b/dist/index.esm.js @@ -88,9 +88,23 @@ var MAX_URL_LEN = 1024; function prepareUrl(url) { return truncate(url, MAX_URL_LEN); } +function normalizeOrigin(origin) { + if (origin.endsWith('/')) { + return origin.slice(0, origin.length - 1); + } + return origin; +} +var metrikaOrigin = 'https://mc.yandex.ru'; +/** + * Конфигурирует транспорт отправки событий + * @param params + */ +function configureTransport(params) { + metrikaOrigin = normalizeOrigin(params.metrikaOrigin); +} function sendData(counterId, queryParams) { - var url = 'https://mc.yandex.ru/watch/' + counterId + '?' + queryStringify(queryParams); + var url = metrikaOrigin + '/watch/' + counterId + '?' + queryStringify(queryParams); var hasBeacon = typeof navigator !== 'undefined' && navigator.sendBeacon; if (!hasBeacon || !navigator.sendBeacon(url, ' ')) { if (typeof fetch !== 'undefined') { @@ -292,4 +306,4 @@ function notBounce(counterId) { }); } -export { extLink, file, hit, hitExt, notBounce, params, reachGoal, userParams }; +export { configureTransport, extLink, file, hit, hitExt, notBounce, params, reachGoal, userParams }; diff --git a/dist/transport.d.ts b/dist/transport.d.ts index 643601c..92e30c5 100644 --- a/dist/transport.d.ts +++ b/dist/transport.d.ts @@ -1,2 +1,11 @@ import type { LyamQueryParams } from './index'; +interface LyamTrasportConfigParams { + metrikaOrigin: string; +} +/** + * Конфигурирует транспорт отправки событий + * @param params + */ +export declare function configureTransport(params: LyamTrasportConfigParams): void; export declare function sendData(counterId: string, queryParams: LyamQueryParams): void; +export {}; diff --git a/dist/url.d.ts b/dist/url.d.ts index 190b020..b992ec9 100644 --- a/dist/url.d.ts +++ b/dist/url.d.ts @@ -1,3 +1,4 @@ import type { LyamQueryParams } from './index'; export declare function queryStringify(params: LyamQueryParams): string; export declare function prepareUrl(url: string): string; +export declare function normalizeOrigin(origin: string): string; diff --git a/src/index.ts b/src/index.ts index dd836c3..41c697e 100644 --- a/src/index.ts +++ b/src/index.ts @@ -4,6 +4,8 @@ import { getRandom } from './number'; import { sendData } from './transport'; import { prepareUrl } from './url'; +export { configureTransport } from './transport'; + export interface LyamHitParams { referrer?: string; title?: string; diff --git a/src/transport.ts b/src/transport.ts index 7eff620..57ed2fa 100644 --- a/src/transport.ts +++ b/src/transport.ts @@ -1,8 +1,22 @@ -import { queryStringify } from './url'; +import {normalizeOrigin, queryStringify} from './url'; import type { LyamQueryParams } from './index'; +interface LyamTrasportConfigParams { + metrikaOrigin: string; +} + +let metrikaOrigin = 'https://mc.yandex.ru'; + +/** + * Конфигурирует транспорт отправки событий + * @param params + */ +export function configureTransport(params: LyamTrasportConfigParams) { + metrikaOrigin = normalizeOrigin(params.metrikaOrigin); +} + export function sendData(counterId: string, queryParams: LyamQueryParams): void { - const url = 'https://mc.yandex.ru/watch/' + counterId + '?' + queryStringify(queryParams); + const url = metrikaOrigin + '/watch/' + counterId + '?' + queryStringify(queryParams); const hasBeacon = typeof navigator !== 'undefined' && navigator.sendBeacon; if (!hasBeacon || !navigator.sendBeacon(url, ' ')) { diff --git a/src/url.ts b/src/url.ts index e204ef7..559881a 100644 --- a/src/url.ts +++ b/src/url.ts @@ -13,3 +13,11 @@ const MAX_URL_LEN = 1024; export function prepareUrl(url: string): string { return truncate(url, MAX_URL_LEN); } + +export function normalizeOrigin(origin: string): string { + if (origin.endsWith('/')) { + return origin.slice(0, origin.length - 1) + } + + return origin; +}