@petbee/session-core
Version:
Petbee Session core tracking logic
64 lines (61 loc) • 2.11 kB
JavaScript
;
const getApiEndpoint = (env) => {
switch (env) {
case 'development':
return 'https://api.dev.petbee.com.br/sessions/v1';
case 'staging':
return 'https://api.dev.petbee.com.br/sessions/v1';
case 'production':
return 'https://api.petbee.com.br/sessions/v1';
default:
return 'https://api.dev.petbee.com.br/sessions/v1';
}
};
let isInitialized = false;
function resetInitialization() {
isInitialized = false;
}
function init(options) {
if (isInitialized) {
console.warn('PetbeeSession: Already initialized.');
return;
}
isInitialized = true;
const debounce = (func, delay) => {
let timer;
return (...args) => {
clearTimeout(timer);
timer = window.setTimeout(() => func(...args), delay);
};
};
// eslint-disable-next-line max-params
const retryFetch = (url, reqOptions, retries = 3, delay = 1000) => {
return fetch(url, reqOptions).catch((error) => {
if (retries > 0) {
return new Promise((resolve) => setTimeout(resolve, delay)).then(() => retryFetch(url, reqOptions, retries - 1, delay * 2));
}
throw error;
});
};
const sendSession = debounce(() => {
const sessionData = {
referrer: window.location.href,
originalReferrer: document.referrer || '',
};
retryFetch(getApiEndpoint(options.env ?? 'development'), {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(sessionData),
credentials: 'include', // Include cookies if needed
}).catch((error) => {
console.error('PetbeeSession: Failed to send session data after retries.', error);
});
}, options.debounceDelay ?? 500);
// Initial session send
sendSession();
}
exports.init = init;
exports.resetInitialization = resetInitialization;
//# sourceMappingURL=petbee-session-core.cjs.js.map