@repobit/dex-utils 2.1.11 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,21 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [2.2.0](https://github.com/bitdefender/dex-core/compare/@repobit/dex-utils@2.1.12...@repobit/dex-utils@2.2.0) (2026-04-08)
7
+
8
+ ### Features
9
+
10
+ * **DEX-26966:** added getUserVisitorId function in utils
11
+
12
+
13
+ ## [2.1.12](https://github.com/bitdefender/dex-core/compare/@repobit/dex-utils@2.1.11...@repobit/dex-utils@2.1.12) (2026-04-06)
14
+
15
+ **Note:** Version bump only for package @repobit/dex-utils
16
+
17
+
18
+
19
+
20
+
6
21
  ## [2.1.11](https://github.com/bitdefender/dex-core/compare/@repobit/dex-utils@2.1.10...@repobit/dex-utils@2.1.11) (2026-03-19)
7
22
 
8
23
  **Note:** Version bump only for package @repobit/dex-utils
@@ -2,5 +2,5 @@ import Cookies from "./cookies.js";
2
2
  import Page from "./page.js";
3
3
  import User from "./user.js";
4
4
  import UserAgent from "./user-agent/index.js";
5
- export { debounce, loadScript, throttle } from "./utils.js";
5
+ export { debounce, getUserVisitorId, loadScript, throttle } from "./utils.js";
6
6
  export { Cookies, Page, User, UserAgent };
package/dist/src/index.js CHANGED
@@ -2,7 +2,7 @@ import Cookies from "./cookies.js";
2
2
  import Page from "./page.js";
3
3
  import User from "./user.js";
4
4
  import UserAgent from "./user-agent/index.js";
5
- export { debounce, loadScript, throttle } from "./utils.js";
5
+ export { debounce, getUserVisitorId, loadScript, throttle } from "./utils.js";
6
6
  export { Cookies, Page, User, UserAgent };
7
7
  const w = window;
8
8
  w.BD = w.BD || {};
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,WAAW,CAAC;AAChC,OAAO,IAAI,MAAM,QAAQ,CAAC;AAC1B,OAAO,IAAI,MAAM,QAAQ,CAAC;AAC1B,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AAE1C,MAAM,CAAC,GAAG,MAIP,CAAA;AAEH,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;AAClB,CAAC,CAAC,EAAE,CAAC,OAAO,GAAG,OAAO,CAAC;AACvB,CAAC,CAAC,EAAE,CAAC,SAAS,GAAG,SAAS,CAAC","sourcesContent":["import Cookies from \"./cookies\";\nimport Page from \"./page\";\nimport User from \"./user\";\nimport UserAgent from \"./user-agent\";\nexport { debounce, loadScript, throttle } from \"./utils\";\nexport { Cookies, Page, User, UserAgent };\n\nconst w = window as unknown as { BD: {\n Cookies : typeof Cookies,\n User : User,\n UserAgent: UserAgent\n} }\n\nw.BD = w.BD || {};\nw.BD.Cookies = Cookies;\nw.BD.UserAgent = UserAgent;"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,WAAW,CAAC;AAChC,OAAO,IAAI,MAAM,QAAQ,CAAC;AAC1B,OAAO,IAAI,MAAM,QAAQ,CAAC;AAC1B,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC3E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AAE1C,MAAM,CAAC,GAAG,MAIP,CAAA;AAEH,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;AAClB,CAAC,CAAC,EAAE,CAAC,OAAO,GAAG,OAAO,CAAC;AACvB,CAAC,CAAC,EAAE,CAAC,SAAS,GAAG,SAAS,CAAC","sourcesContent":["import Cookies from \"./cookies\";\nimport Page from \"./page\";\nimport User from \"./user\";\nimport UserAgent from \"./user-agent\";\nexport { debounce, getUserVisitorId, loadScript, throttle } from \"./utils\";\nexport { Cookies, Page, User, UserAgent };\n\nconst w = window as unknown as { BD: {\n Cookies : typeof Cookies,\n User : User,\n UserAgent: UserAgent\n} }\n\nw.BD = w.BD || {};\nw.BD.Cookies = Cookies;\nw.BD.UserAgent = UserAgent;"]}
@@ -18,3 +18,6 @@ export type CssuaUserAgent = {
18
18
  ie: boolean;
19
19
  opera: boolean;
20
20
  };
21
+ export type BDUUIDData = {
22
+ bd_visitor_id: string;
23
+ };
@@ -1 +1 @@
1
- {"version":3,"file":"typeDefinitions.js","sourceRoot":"","sources":["../../src/typeDefinitions.ts"],"names":[],"mappings":"","sourcesContent":["export type ScriptParameters = {\n [key: string]: string\n};\n\nexport type UserInfoResult = {\n lastname : string,\n firstname : string,\n email : string,\n fingerprint: string\n}\n\nexport type CssuaUserAgent = {\n desktop: string,\n mobile : string,\n edge : boolean,\n chrome : boolean,\n firefox: boolean,\n safari : boolean,\n vivaldi: boolean,\n ie : boolean,\n opera : boolean\n};"]}
1
+ {"version":3,"file":"typeDefinitions.js","sourceRoot":"","sources":["../../src/typeDefinitions.ts"],"names":[],"mappings":"","sourcesContent":["export type ScriptParameters = {\n [key: string]: string\n};\n\nexport type UserInfoResult = {\n lastname : string,\n firstname : string,\n email : string,\n fingerprint: string\n}\n\nexport type CssuaUserAgent = {\n desktop: string,\n mobile : string,\n edge : boolean,\n chrome : boolean,\n firefox: boolean,\n safari : boolean,\n vivaldi: boolean,\n ie : boolean,\n opera : boolean\n};\n\nexport type BDUUIDData = {\n bd_visitor_id: string\n}"]}
package/dist/src/user.js CHANGED
@@ -102,9 +102,9 @@ export default class User {
102
102
  sessionStorage.setItem(Constants.LOGIN_ATTEMPT_SESSION_STORAGE_KEY, 'true');
103
103
  const loginEndpointUrl = new URL(`${Constants.LOGIN_URL_ORIGIN}${Constants.LOGIN_ENDPOINT}`);
104
104
  loginEndpointUrl.searchParams.set('origin', `${window.location.pathname}${window.location.search}`);
105
+ loginEndpointUrl.searchParams.set('adobe_mc_ref', document.referrer);
105
106
  // variable which ensures no Page Loaded Event sent to analytics on window.location.href change
106
107
  w.BD.loginAttempted = true;
107
- sessionStorage.setItem(Constants.REFERRER_BEFORE_LOGIN, document.referrer);
108
108
  window.location.replace(loginEndpointUrl.href);
109
109
  }
110
110
  }
@@ -1 +1 @@
1
- {"version":3,"file":"user.js","sourceRoot":"","sources":["../../src/user.ts"],"names":[],"mappings":"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","sourcesContent":["import { Constants } from '@repobit/dex-constants';\nimport Cookies from './cookies';\nimport { UserInfoResult } from './typeDefinitions';\nimport UserAgent from './user-agent';\n\nconst w = window as unknown as { BD: {\n loginAttempted: boolean\n} }\n\nexport default class User {\n\n private _info : Promise<UserInfoResult | null> = this.Initialise();\n private _fingerprint: Promise<string | null> = this.getFingerprint();\n private _country : Promise<string> = this.getGeolocation();\n private _locale : Promise<`${string}-${string}`> = this.getUserLocale();\n\n private async Initialise(): Promise<UserInfoResult | null> {\n if (!Cookies.has(Constants.LOGIN_LOGGED_USER_EXPIRY_COOKIE_NAME)) {\n return null;\n }\n\n try {\n const userDataResponse = await fetch(`${Constants.LOGIN_URL_ORIGIN}/bin/login/userInfo.json`);\n return userDataResponse.ok ? (await userDataResponse.json()).result as UserInfoResult : null;\n } catch {\n return null;\n }\n }\n\n private async getFingerprint(): Promise<string | null> {\n // Try to grab the fingeprint from localstoraage\n const storageFingerprint = localStorage.getItem(Constants.FINGERPRINT_LOCAL_STORAGE_NAME);\n if (storageFingerprint) {\n return storageFingerprint;\n }\n\n // Try to grab fingerprint from login data\n const userInfo = await this._info;\n if (userInfo) {\n localStorage.setItem(Constants.FINGERPRINT_LOCAL_STORAGE_NAME, userInfo.fingerprint);\n return userInfo.fingerprint;\n }\n\n // Try to grab fingerprint from dummyPost (from user local antivirus instance)\n const fingerprintNotExist = Cookies.has(Constants.NO_FINGERPRINT_COOKIE_NAME)\n if (!fingerprintNotExist && UserAgent.isWindows) {\n try {\n const fingerprintReq = await fetch(`${Constants.WWW_ONLY_ORIGIN}/site/Main/dummyPost?${Math.random()}`, {\n method : 'POST',\n headers: {\n 'Content-type' : 'application/x-www-form-urlencoded',\n 'Pragma' : 'no-cache',\n 'Cache-Control' : 'no-store, no-cache, must-revalidate, max-age=0',\n 'Expires' : 'Tue, 01 Jan 1971 02:00:00 GMT',\n 'BDUS_A312C09A2666456D9F2B2AA5D6B463D6': 'check.bitdefender'\n }\n });\n\n if (fingerprintReq.ok && fingerprintReq.headers.has(Constants.FINGERPRINT_HEADER)) {\n const fingerprint = fingerprintReq.headers.get(Constants.FINGERPRINT_HEADER) as string;\n localStorage.setItem(Constants.FINGERPRINT_LOCAL_STORAGE_NAME, fingerprint);\n return fingerprint;\n } else {\n Cookies.set(Constants.NO_FINGERPRINT_COOKIE_NAME, 'true', { expires: 1 });\n }\n } catch { /* empty */ }\n }\n\n return null;\n }\n\n /**\n * Handling User Geolocation\n * This wil fetch the user's country\n */\n private async getGeolocation(): Promise<string> {\n try {\n const response = await fetch(`${Constants.PUBLIC_URL_ORIGIN}/geoip`);\n\n if (!response.ok) {\n return 'us';\n }\n\n const country = await response.json();\n if (country.error_code) {\n return 'us';\n }\n\n return country['country'].toLowerCase();\n\n } catch {\n return 'us';\n }\n }\n\n /** Getting the User's Locale */\n private async getUserLocale(): Promise<`${string}-${string}`> {\n const userCountry = await this._country;\n try {\n const userGeoIpCall = await fetch(`${Constants.WWW_ONLY_ORIGIN}/p-api/v1/countries/${userCountry.toUpperCase()}/locales`);\n const userGeoIpData = await userGeoIpCall.json();\n return userGeoIpData[0].locale.toLowerCase();\n } catch {\n return 'en-us'\n }\n }\n\n /** attempt to log the user in.\n * You can access it from the mega menu if it is imported.\n * If the login fails, this operation will not be permited in the same tab session. */\n public async login(): Promise<void> {\n const loginAttempt = sessionStorage.getItem(Constants.LOGIN_ATTEMPT_SESSION_STORAGE_KEY);\n const userData = await this._info;\n const userLoggedInExpirationDate = Number(Cookies.get(Constants.LOGIN_LOGGED_USER_EXPIRY_COOKIE_NAME)) || 0;\n\n if (!loginAttempt && !userData\n && userLoggedInExpirationDate > Date.now()) {\n sessionStorage.setItem(Constants.LOGIN_ATTEMPT_SESSION_STORAGE_KEY, 'true');\n const loginEndpointUrl = new URL(`${Constants.LOGIN_URL_ORIGIN}${Constants.LOGIN_ENDPOINT}`);\n loginEndpointUrl.searchParams.set('origin', `${window.location.pathname}${window.location.search}`);\n\n // variable which ensures no Page Loaded Event sent to analytics on window.location.href change\n w.BD.loginAttempted = true;\n sessionStorage.setItem(Constants.REFERRER_BEFORE_LOGIN, document.referrer);\n window.location.replace(loginEndpointUrl.href);\n }\n }\n\n public get info() {\n return this._info;\n }\n\n public get fingerprint() {\n return this._fingerprint;\n }\n\n public get country() {\n return this._country;\n }\n\n public get locale() {\n return this._locale;\n }\n}\n\nw.BD = w.BD || {};"]}
1
+ {"version":3,"file":"user.js","sourceRoot":"","sources":["../../src/user.ts"],"names":[],"mappings":"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","sourcesContent":["import { Constants } from '@repobit/dex-constants';\nimport Cookies from './cookies';\nimport { UserInfoResult } from './typeDefinitions';\nimport UserAgent from './user-agent';\n\nconst w = window as unknown as { BD: {\n loginAttempted: boolean\n} }\n\nexport default class User {\n\n private _info : Promise<UserInfoResult | null> = this.Initialise();\n private _fingerprint: Promise<string | null> = this.getFingerprint();\n private _country : Promise<string> = this.getGeolocation();\n private _locale : Promise<`${string}-${string}`> = this.getUserLocale();\n\n private async Initialise(): Promise<UserInfoResult | null> {\n if (!Cookies.has(Constants.LOGIN_LOGGED_USER_EXPIRY_COOKIE_NAME)) {\n return null;\n }\n\n try {\n const userDataResponse = await fetch(`${Constants.LOGIN_URL_ORIGIN}/bin/login/userInfo.json`);\n return userDataResponse.ok ? (await userDataResponse.json()).result as UserInfoResult : null;\n } catch {\n return null;\n }\n }\n\n private async getFingerprint(): Promise<string | null> {\n // Try to grab the fingeprint from localstoraage\n const storageFingerprint = localStorage.getItem(Constants.FINGERPRINT_LOCAL_STORAGE_NAME);\n if (storageFingerprint) {\n return storageFingerprint;\n }\n\n // Try to grab fingerprint from login data\n const userInfo = await this._info;\n if (userInfo) {\n localStorage.setItem(Constants.FINGERPRINT_LOCAL_STORAGE_NAME, userInfo.fingerprint);\n return userInfo.fingerprint;\n }\n\n // Try to grab fingerprint from dummyPost (from user local antivirus instance)\n const fingerprintNotExist = Cookies.has(Constants.NO_FINGERPRINT_COOKIE_NAME)\n if (!fingerprintNotExist && UserAgent.isWindows) {\n try {\n const fingerprintReq = await fetch(`${Constants.WWW_ONLY_ORIGIN}/site/Main/dummyPost?${Math.random()}`, {\n method : 'POST',\n headers: {\n 'Content-type' : 'application/x-www-form-urlencoded',\n 'Pragma' : 'no-cache',\n 'Cache-Control' : 'no-store, no-cache, must-revalidate, max-age=0',\n 'Expires' : 'Tue, 01 Jan 1971 02:00:00 GMT',\n 'BDUS_A312C09A2666456D9F2B2AA5D6B463D6': 'check.bitdefender'\n }\n });\n\n if (fingerprintReq.ok && fingerprintReq.headers.has(Constants.FINGERPRINT_HEADER)) {\n const fingerprint = fingerprintReq.headers.get(Constants.FINGERPRINT_HEADER) as string;\n localStorage.setItem(Constants.FINGERPRINT_LOCAL_STORAGE_NAME, fingerprint);\n return fingerprint;\n } else {\n Cookies.set(Constants.NO_FINGERPRINT_COOKIE_NAME, 'true', { expires: 1 });\n }\n } catch { /* empty */ }\n }\n\n return null;\n }\n\n /**\n * Handling User Geolocation\n * This wil fetch the user's country\n */\n private async getGeolocation(): Promise<string> {\n try {\n const response = await fetch(`${Constants.PUBLIC_URL_ORIGIN}/geoip`);\n\n if (!response.ok) {\n return 'us';\n }\n\n const country = await response.json();\n if (country.error_code) {\n return 'us';\n }\n\n return country['country'].toLowerCase();\n\n } catch {\n return 'us';\n }\n }\n\n /** Getting the User's Locale */\n private async getUserLocale(): Promise<`${string}-${string}`> {\n const userCountry = await this._country;\n try {\n const userGeoIpCall = await fetch(`${Constants.WWW_ONLY_ORIGIN}/p-api/v1/countries/${userCountry.toUpperCase()}/locales`);\n const userGeoIpData = await userGeoIpCall.json();\n return userGeoIpData[0].locale.toLowerCase();\n } catch {\n return 'en-us'\n }\n }\n\n /** attempt to log the user in.\n * You can access it from the mega menu if it is imported.\n * If the login fails, this operation will not be permited in the same tab session. */\n public async login(): Promise<void> {\n const loginAttempt = sessionStorage.getItem(Constants.LOGIN_ATTEMPT_SESSION_STORAGE_KEY);\n const userData = await this._info;\n const userLoggedInExpirationDate = Number(Cookies.get(Constants.LOGIN_LOGGED_USER_EXPIRY_COOKIE_NAME)) || 0;\n\n if (!loginAttempt && !userData\n && userLoggedInExpirationDate > Date.now()) {\n sessionStorage.setItem(Constants.LOGIN_ATTEMPT_SESSION_STORAGE_KEY, 'true');\n const loginEndpointUrl = new URL(`${Constants.LOGIN_URL_ORIGIN}${Constants.LOGIN_ENDPOINT}`);\n loginEndpointUrl.searchParams.set('origin', `${window.location.pathname}${window.location.search}`);\n loginEndpointUrl.searchParams.set('adobe_mc_ref', document.referrer);\n\n // variable which ensures no Page Loaded Event sent to analytics on window.location.href change\n w.BD.loginAttempted = true;\n window.location.replace(loginEndpointUrl.href);\n }\n }\n\n public get info() {\n return this._info;\n }\n\n public get fingerprint() {\n return this._fingerprint;\n }\n\n public get country() {\n return this._country;\n }\n\n public get locale() {\n return this._locale;\n }\n}\n\nw.BD = w.BD || {};"]}
@@ -2,3 +2,4 @@ import { ScriptParameters } from "./typeDefinitions.js";
2
2
  export declare function loadScript(src: string, attrs?: ScriptParameters): Promise<void>;
3
3
  export declare function throttle(callback: Function, delay?: number): Function;
4
4
  export declare function debounce(callback: Function, delay?: number, immediate?: boolean): (...args: unknown[]) => void;
5
+ export declare function getUserVisitorId(): Promise<string>;
package/dist/src/utils.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { Constants } from "@repobit/dex-constants";
1
2
  export function loadScript(src, attrs = {}) {
2
3
  return new Promise((resolve, reject) => {
3
4
  if (!document.querySelector(`head > script[src="${src}"]`)) {
@@ -47,4 +48,9 @@ export function debounce(callback, delay = 250, immediate = false) {
47
48
  }
48
49
  };
49
50
  }
51
+ export async function getUserVisitorId() {
52
+ const uuidFetchCall = await fetch(`${Constants.PUBLIC_URL_ORIGIN}/bduuid`);
53
+ const uuidFetchData = await uuidFetchCall.json();
54
+ return uuidFetchData.bd_visitor_id;
55
+ }
50
56
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,UAAU,CAAC,GAAW,EAAE,QAA0B,EAAE;IAClE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,sBAAsB,GAAG,IAAI,CAAC,EAAE,CAAC;YAC3D,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAChD,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC;YACjB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YACzC,CAAC;YAED,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;YAChC,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC;YACxB,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,QAAQ,CAAC,QAAkB,EAAE,QAAgB,GAAG;IAC9D,IAAI,UAAU,GAAG,KAAK,CAAC;IAEvB,OAAO,CAAC,GAAG,IAAe,EAAE,EAAE;QAC5B,IAAI,UAAU,EAAE,CAAC;YACf,OAAO;QACT,CAAC;QAED,UAAU,GAAG,IAAI,CAAC;QAClB,UAAU,CAAC,GAAG,EAAE;YACd,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;YAClB,UAAU,GAAG,KAAK,CAAC;QACrB,CAAC,EAAE,KAAK,CAAC,CAAC;IACZ,CAAC,CAAC;AACJ,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,QAAQ,CAAC,QAAkB,EAAE,QAAgB,GAAG,EAAE,YAAqB,KAAK;IAC1F,IAAI,OAAO,GAA0B,IAAI,CAAC;IAE1C,OAAO,CAAC,GAAG,IAAe,EAAE,EAAE;QAC5B,MAAM,KAAK,GAAG,GAAG,EAAE;YACjB,OAAO,GAAG,IAAI,CAAC;YACf,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;YACpB,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,SAAS,IAAI,CAAC,OAAO,CAAC;QACtC,YAAY,CAAC,OAAyB,CAAC,CAAC;QACxC,OAAO,GAAG,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACnC,IAAI,OAAO,EAAE,CAAC;YACZ,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import { ScriptParameters } from \"./typeDefinitions\";\n\nexport function loadScript(src: string, attrs: ScriptParameters = {}): Promise<void> {\n return new Promise((resolve, reject) => {\n if (!document.querySelector(`head > script[src=\"${src}\"]`)) {\n const script = document.createElement('script');\n script.src = src;\n for (const attr in attrs) {\n script.setAttribute(attr, attrs[attr]);\n }\n\n script.onload = () => resolve();\n script.onerror = reject;\n document.head.append(script);\n } else {\n resolve();\n }\n });\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\nexport function throttle(callback: Function, delay: number = 250): Function {\n let shouldWait = false;\n\n return (...args: unknown[]) => {\n if (shouldWait) {\n return;\n }\n\n shouldWait = true;\n setTimeout(() => {\n callback(...args);\n shouldWait = false;\n }, delay);\n };\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\nexport function debounce(callback: Function, delay: number = 250, immediate: boolean = false) {\n let timeout: NodeJS.Timeout | null = null;\n\n return (...args: unknown[]) => {\n const later = () => {\n timeout = null;\n if (!immediate) {\n callback(...args);\n }\n };\n\n const callNow = immediate && !timeout;\n clearTimeout(timeout as NodeJS.Timeout);\n timeout = setTimeout(later, delay);\n if (callNow) {\n callback(...args);\n }\n };\n}"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAGnD,MAAM,UAAU,UAAU,CAAC,GAAW,EAAE,QAA0B,EAAE;IAClE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,sBAAsB,GAAG,IAAI,CAAC,EAAE,CAAC;YAC3D,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAChD,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC;YACjB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YACzC,CAAC;YAED,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;YAChC,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC;YACxB,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,QAAQ,CAAC,QAAkB,EAAE,QAAgB,GAAG;IAC9D,IAAI,UAAU,GAAG,KAAK,CAAC;IAEvB,OAAO,CAAC,GAAG,IAAe,EAAE,EAAE;QAC5B,IAAI,UAAU,EAAE,CAAC;YACf,OAAO;QACT,CAAC;QAED,UAAU,GAAG,IAAI,CAAC;QAClB,UAAU,CAAC,GAAG,EAAE;YACd,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;YAClB,UAAU,GAAG,KAAK,CAAC;QACrB,CAAC,EAAE,KAAK,CAAC,CAAC;IACZ,CAAC,CAAC;AACJ,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,QAAQ,CAAC,QAAkB,EAAE,QAAgB,GAAG,EAAE,YAAqB,KAAK;IAC1F,IAAI,OAAO,GAA0B,IAAI,CAAC;IAE1C,OAAO,CAAC,GAAG,IAAe,EAAE,EAAE;QAC5B,MAAM,KAAK,GAAG,GAAG,EAAE;YACjB,OAAO,GAAG,IAAI,CAAC;YACf,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;YACpB,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,SAAS,IAAI,CAAC,OAAO,CAAC;QACtC,YAAY,CAAC,OAAyB,CAAC,CAAC;QACxC,OAAO,GAAG,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACnC,IAAI,OAAO,EAAE,CAAC;YACZ,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,MAAM,aAAa,GAAG,MAAM,KAAK,CAAC,GAAG,SAAS,CAAC,iBAAiB,SAAS,CAAC,CAAC;IAC3E,MAAM,aAAa,GAAe,MAAM,aAAa,CAAC,IAAI,EAAE,CAAC;IAE7D,OAAO,aAAa,CAAC,aAAa,CAAC;AACrC,CAAC","sourcesContent":["import { Constants } from \"@repobit/dex-constants\";\nimport { BDUUIDData, ScriptParameters } from \"./typeDefinitions\";\n\nexport function loadScript(src: string, attrs: ScriptParameters = {}): Promise<void> {\n return new Promise((resolve, reject) => {\n if (!document.querySelector(`head > script[src=\"${src}\"]`)) {\n const script = document.createElement('script');\n script.src = src;\n for (const attr in attrs) {\n script.setAttribute(attr, attrs[attr]);\n }\n\n script.onload = () => resolve();\n script.onerror = reject;\n document.head.append(script);\n } else {\n resolve();\n }\n });\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\nexport function throttle(callback: Function, delay: number = 250): Function {\n let shouldWait = false;\n\n return (...args: unknown[]) => {\n if (shouldWait) {\n return;\n }\n\n shouldWait = true;\n setTimeout(() => {\n callback(...args);\n shouldWait = false;\n }, delay);\n };\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\nexport function debounce(callback: Function, delay: number = 250, immediate: boolean = false) {\n let timeout: NodeJS.Timeout | null = null;\n\n return (...args: unknown[]) => {\n const later = () => {\n timeout = null;\n if (!immediate) {\n callback(...args);\n }\n };\n\n const callNow = immediate && !timeout;\n clearTimeout(timeout as NodeJS.Timeout);\n timeout = setTimeout(later, delay);\n if (callNow) {\n callback(...args);\n }\n };\n}\n\nexport async function getUserVisitorId(): Promise<string> {\n const uuidFetchCall = await fetch(`${Constants.PUBLIC_URL_ORIGIN}/bduuid`);\n const uuidFetchData: BDUUIDData = await uuidFetchCall.json();\n\n return uuidFetchData.bd_visitor_id;\n}"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@repobit/dex-utils",
3
- "version": "2.1.11",
3
+ "version": "2.2.0",
4
4
  "description": "Client for Utils",
5
5
  "author": "Constantin Ioan Mihai <iconstantin@bitdefender.com>",
6
6
  "homepage": "https://github.com/bitdefender/dex-core#readme",
@@ -30,7 +30,7 @@
30
30
  "type": "module",
31
31
  "types": "dist/src/index.d.ts",
32
32
  "dependencies": {
33
- "@repobit/dex-constants": "^2.0.1",
33
+ "@repobit/dex-constants": "^2.1.0",
34
34
  "js-cookie": "^3.0.5"
35
35
  },
36
36
  "volta": {
@@ -39,5 +39,5 @@
39
39
  "devDependencies": {
40
40
  "@types/js-cookie": "^3.0.6"
41
41
  },
42
- "gitHead": "9792ae8c968ed6411c532e76e18dd4c1e0029371"
42
+ "gitHead": "99aa500ad3eeca630bd6f205bd9ce23660d1c7f9"
43
43
  }