Warp/node_modules/search-insights/lib/_tokenUtils.ts

133 lines
3.4 KiB
TypeScript
Raw Normal View History

2024-01-05 12:14:38 +00:00
import type AlgoliaAnalytics from "./insights";
import { isFunction, supportsCookies } from "./utils";
import { createUUID } from "./utils/uuid";
const COOKIE_KEY = "_ALGOLIA";
export const MONTH = 30 * 24 * 60 * 60 * 1000;
const setCookie = (
name: string,
value: number | string,
duration: number
): void => {
const d = new Date();
d.setTime(d.getTime() + duration);
const expires = `expires=${d.toUTCString()}`;
document.cookie = `${name}=${value};${expires};path=/`;
};
export const getCookie = (name: string): string => {
const prefix = `${name}=`;
const ca = document.cookie.split(";");
for (let i = 0; i < ca.length; i++) {
let c = ca[i];
while (c.charAt(0) === " ") {
c = c.substring(1);
}
if (c.indexOf(prefix) === 0) {
return c.substring(prefix.length, c.length);
}
}
return "";
};
export function setAnonymousUserToken(
this: AlgoliaAnalytics,
inMemory = false
): void {
if (inMemory) {
this.setUserToken(`anonymous-${createUUID()}`);
return;
}
if (!supportsCookies()) {
return;
}
const foundToken = getCookie(COOKIE_KEY);
if (
!foundToken ||
foundToken === "" ||
foundToken.indexOf("anonymous-") !== 0
) {
const savedUserToken = this.setUserToken(`anonymous-${createUUID()}`);
setCookie(COOKIE_KEY, savedUserToken, this._cookieDuration);
} else {
this.setUserToken(foundToken);
}
}
export function setUserToken(
this: AlgoliaAnalytics,
userToken: number | string
): number | string {
this._userToken = userToken;
if (isFunction(this._onUserTokenChangeCallback)) {
this._onUserTokenChangeCallback(this._userToken);
}
return this._userToken;
}
export function getUserToken(
this: AlgoliaAnalytics,
options?: any,
callback?: (err: any, userToken?: number | string) => void
): number | string | undefined {
if (isFunction(callback)) {
callback(null, this._userToken);
}
return this._userToken;
}
export function onUserTokenChange(
this: AlgoliaAnalytics,
callback?: (userToken?: number | string) => void,
options?: { immediate: boolean }
): void {
this._onUserTokenChangeCallback = callback;
if (
options &&
options.immediate &&
isFunction(this._onUserTokenChangeCallback)
) {
this._onUserTokenChangeCallback(this._userToken);
}
}
export function setAuthenticatedUserToken(
this: AlgoliaAnalytics,
authenticatedUserToken: number | string | undefined
): number | string | undefined {
this._authenticatedUserToken = authenticatedUserToken;
if (isFunction(this._onAuthenticatedUserTokenChangeCallback)) {
this._onAuthenticatedUserTokenChangeCallback(this._authenticatedUserToken);
}
return this._authenticatedUserToken;
}
export function getAuthenticatedUserToken(
this: AlgoliaAnalytics,
options?: any,
callback?: (err: any, authenticatedUserToken?: number | string) => void
): number | string | undefined {
if (isFunction(callback)) {
callback(null, this._authenticatedUserToken);
}
return this._authenticatedUserToken;
}
export function onAuthenticatedUserTokenChange(
this: AlgoliaAnalytics,
callback?: (authenticatedUserToken?: number | string) => void,
options?: { immediate: boolean }
): void {
this._onAuthenticatedUserTokenChangeCallback = callback;
if (
options &&
options.immediate &&
isFunction(this._onAuthenticatedUserTokenChangeCallback)
) {
this._onAuthenticatedUserTokenChangeCallback(this._authenticatedUserToken);
}
}