@posthog/browser-common 0.0.0 → 0.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.
Files changed (97) hide show
  1. package/README.md +114 -28
  2. package/dist/client.d.ts +136 -0
  3. package/dist/client.js +18 -0
  4. package/dist/client.mjs +0 -0
  5. package/dist/config.d.ts +9 -0
  6. package/dist/config.js +43 -0
  7. package/dist/config.mjs +9 -0
  8. package/dist/constants.d.ts +3 -0
  9. package/dist/constants.js +44 -0
  10. package/dist/constants.mjs +4 -0
  11. package/dist/disposable.d.ts +13 -0
  12. package/dist/disposable.js +18 -0
  13. package/dist/disposable.mjs +0 -0
  14. package/dist/extension.d.ts +45 -0
  15. package/dist/extension.js +18 -0
  16. package/dist/extension.mjs +0 -0
  17. package/dist/index.d.ts +11 -0
  18. package/dist/index.js +36 -0
  19. package/dist/index.mjs +2 -0
  20. package/dist/persistence.d.ts +24 -0
  21. package/dist/persistence.js +18 -0
  22. package/dist/persistence.mjs +0 -0
  23. package/dist/pubsub.d.ts +28 -0
  24. package/dist/pubsub.js +67 -0
  25. package/dist/pubsub.mjs +33 -0
  26. package/dist/token.d.ts +21 -0
  27. package/dist/token.js +18 -0
  28. package/dist/token.mjs +0 -0
  29. package/dist/utils/array-at-polyfill.d.ts +1 -0
  30. package/dist/utils/array-at-polyfill.js +16 -0
  31. package/dist/utils/array-at-polyfill.mjs +11 -0
  32. package/dist/utils/autocapture-utils.d.ts +23 -0
  33. package/dist/utils/autocapture-utils.js +479 -0
  34. package/dist/utils/autocapture-utils.mjs +385 -0
  35. package/dist/utils/blocked-uas.d.ts +17 -0
  36. package/dist/utils/blocked-uas.js +54 -0
  37. package/dist/utils/blocked-uas.mjs +14 -0
  38. package/dist/utils/cookie-utils.d.ts +1 -0
  39. package/dist/utils/cookie-utils.js +49 -0
  40. package/dist/utils/cookie-utils.mjs +15 -0
  41. package/dist/utils/device-model-utils.d.ts +8 -0
  42. package/dist/utils/device-model-utils.js +52 -0
  43. package/dist/utils/device-model-utils.mjs +18 -0
  44. package/dist/utils/element-utils.d.ts +5 -0
  45. package/dist/utils/element-utils.js +67 -0
  46. package/dist/utils/element-utils.mjs +21 -0
  47. package/dist/utils/elements-chain-utils.d.ts +4 -0
  48. package/dist/utils/elements-chain-utils.js +79 -0
  49. package/dist/utils/elements-chain-utils.mjs +36 -0
  50. package/dist/utils/encode-utils.d.ts +8 -0
  51. package/dist/utils/encode-utils.js +39 -0
  52. package/dist/utils/encode-utils.mjs +5 -0
  53. package/dist/utils/event-utils.d.ts +24 -0
  54. package/dist/utils/event-utils.js +344 -0
  55. package/dist/utils/event-utils.mjs +246 -0
  56. package/dist/utils/general-utils.d.ts +30 -0
  57. package/dist/utils/general-utils.js +191 -0
  58. package/dist/utils/general-utils.mjs +118 -0
  59. package/dist/utils/globals.d.ts +25 -0
  60. package/dist/utils/globals.js +75 -0
  61. package/dist/utils/globals.mjs +14 -0
  62. package/dist/utils/logger.d.ts +16 -0
  63. package/dist/utils/logger.js +83 -0
  64. package/dist/utils/logger.mjs +36 -0
  65. package/dist/utils/matcher-utils.d.ts +3 -0
  66. package/dist/utils/matcher-utils.js +63 -0
  67. package/dist/utils/matcher-utils.mjs +26 -0
  68. package/dist/utils/property-utils.d.ts +23 -0
  69. package/dist/utils/property-utils.js +108 -0
  70. package/dist/utils/property-utils.mjs +65 -0
  71. package/dist/utils/prototype-utils.d.ts +7 -0
  72. package/dist/utils/prototype-utils.js +64 -0
  73. package/dist/utils/prototype-utils.mjs +27 -0
  74. package/dist/utils/regex-utils.d.ts +2 -0
  75. package/dist/utils/regex-utils.js +54 -0
  76. package/dist/utils/regex-utils.mjs +17 -0
  77. package/dist/utils/request-utils.d.ts +15 -0
  78. package/dist/utils/request-utils.js +153 -0
  79. package/dist/utils/request-utils.mjs +95 -0
  80. package/dist/utils/simple-event-emitter.d.ts +5 -0
  81. package/dist/utils/simple-event-emitter.js +51 -0
  82. package/dist/utils/simple-event-emitter.mjs +17 -0
  83. package/dist/utils/stylesheet-loader.d.ts +7 -0
  84. package/dist/utils/stylesheet-loader.js +53 -0
  85. package/dist/utils/stylesheet-loader.mjs +19 -0
  86. package/dist/utils/type-utils.d.ts +2 -0
  87. package/dist/utils/type-utils.js +41 -0
  88. package/dist/utils/type-utils.mjs +4 -0
  89. package/dist/utils/url-targeting-utils.d.ts +28 -0
  90. package/dist/utils/url-targeting-utils.js +56 -0
  91. package/dist/utils/url-targeting-utils.mjs +19 -0
  92. package/dist/utils/uuidv7.d.ts +43 -0
  93. package/dist/utils/uuidv7.js +172 -0
  94. package/dist/utils/uuidv7.js.LICENSE.txt +9 -0
  95. package/dist/utils/uuidv7.mjs +132 -0
  96. package/dist/utils/uuidv7.mjs.LICENSE.txt +9 -0
  97. package/package.json +79 -8
@@ -0,0 +1,246 @@
1
+ import { convertToURL, getQueryParam, maskQueryParams } from "./request-utils.mjs";
2
+ import { detectBrowser, detectBrowserVersion, detectDevice, detectDeviceType, detectOS, isNull, isUndefined, stripLeadingDollar, stripUrlHash } from "@posthog/core";
3
+ import config from "../config.mjs";
4
+ import { SDK_DIST_CHANNEL } from "../constants.mjs";
5
+ import { each, extend, stripEmptyProperties } from "./general-utils.mjs";
6
+ import { document as external_globals_mjs_document, location as external_globals_mjs_location, userAgent, window as external_globals_mjs_window } from "./globals.mjs";
7
+ import { getCookieValue } from "./cookie-utils.mjs";
8
+ const URL_REGEX_PREFIX = 'https?://(.*)';
9
+ const PERSONAL_DATA_CAMPAIGN_PARAMS = [
10
+ 'gclid',
11
+ 'gclsrc',
12
+ 'dclid',
13
+ 'gbraid',
14
+ 'wbraid',
15
+ 'fbclid',
16
+ 'msclkid',
17
+ 'twclid',
18
+ 'li_fat_id',
19
+ 'igshid',
20
+ 'ttclid',
21
+ 'rdt_cid',
22
+ 'epik',
23
+ 'qclid',
24
+ 'sccid',
25
+ 'irclid',
26
+ '_kx'
27
+ ];
28
+ const CAMPAIGN_PARAMS = [
29
+ 'utm_source',
30
+ 'utm_medium',
31
+ 'utm_campaign',
32
+ 'utm_content',
33
+ 'utm_term',
34
+ 'gad_source',
35
+ 'mc_cid',
36
+ ...PERSONAL_DATA_CAMPAIGN_PARAMS
37
+ ];
38
+ const EVENT_TO_PERSON_PROPERTIES = [
39
+ '$app_build',
40
+ '$app_name',
41
+ '$app_namespace',
42
+ '$app_version',
43
+ '$browser',
44
+ '$browser_version',
45
+ '$device_type',
46
+ '$current_url',
47
+ '$pathname',
48
+ '$os',
49
+ '$os_name',
50
+ '$os_version',
51
+ '$referring_domain',
52
+ '$referrer',
53
+ '$screen_height',
54
+ '$screen_width',
55
+ '$viewport_height',
56
+ '$viewport_width',
57
+ '$raw_user_agent'
58
+ ];
59
+ const MASKED = '<masked>';
60
+ const COOKIE_CAMPAIGN_PARAMS = [
61
+ 'li_fat_id'
62
+ ];
63
+ function getCampaignParams(customTrackedParams, maskPersonalDataProperties, customPersonalDataProperties) {
64
+ if (!external_globals_mjs_document) return {};
65
+ const paramsToMask = maskPersonalDataProperties ? [
66
+ ...PERSONAL_DATA_CAMPAIGN_PARAMS,
67
+ ...customPersonalDataProperties || []
68
+ ] : [];
69
+ const urlCampaignParams = _getCampaignParamsFromUrl(maskQueryParams(external_globals_mjs_document.URL, paramsToMask, MASKED), customTrackedParams);
70
+ const cookieCampaignParams = _getCampaignParamsFromCookie();
71
+ return extend(cookieCampaignParams, urlCampaignParams);
72
+ }
73
+ function _getCampaignParamsFromUrl(url, customParams) {
74
+ const campaign_keywords = CAMPAIGN_PARAMS.concat(customParams || []);
75
+ const params = {};
76
+ each(campaign_keywords, function(kwkey) {
77
+ const kw = getQueryParam(url, kwkey);
78
+ params[kwkey] = kw ? kw : null;
79
+ });
80
+ return params;
81
+ }
82
+ function _getCampaignParamsFromCookie() {
83
+ const params = {};
84
+ each(COOKIE_CAMPAIGN_PARAMS, function(kwkey) {
85
+ const kw = getCookieValue(kwkey);
86
+ params[kwkey] = kw ? kw : null;
87
+ });
88
+ return params;
89
+ }
90
+ function _getSearchEngine(referrer) {
91
+ if (!referrer) return null;
92
+ if (0 === referrer.search(URL_REGEX_PREFIX + 'google.([^/?]*)')) return 'google';
93
+ if (0 === referrer.search(URL_REGEX_PREFIX + 'bing.com')) return 'bing';
94
+ if (0 === referrer.search(URL_REGEX_PREFIX + 'yahoo.com')) return 'yahoo';
95
+ if (0 === referrer.search(URL_REGEX_PREFIX + 'duckduckgo.com')) return 'duckduckgo';
96
+ else return null;
97
+ }
98
+ function _getSearchInfoFromReferrer(referrer) {
99
+ const search = _getSearchEngine(referrer);
100
+ const param = 'yahoo' != search ? 'q' : 'p';
101
+ const ret = {};
102
+ if (!isNull(search)) {
103
+ ret['$search_engine'] = search;
104
+ const keyword = external_globals_mjs_document ? getQueryParam(external_globals_mjs_document.referrer, param) : '';
105
+ if (keyword.length) ret['ph_keyword'] = keyword;
106
+ }
107
+ return ret;
108
+ }
109
+ function getSearchInfo() {
110
+ const referrer = external_globals_mjs_document?.referrer;
111
+ if (!referrer) return {};
112
+ return _getSearchInfoFromReferrer(referrer);
113
+ }
114
+ function getBrowserLanguage() {
115
+ return navigator.language || navigator.userLanguage;
116
+ }
117
+ function getBrowserLanguagePrefix() {
118
+ const lang = getBrowserLanguage();
119
+ return 'string' == typeof lang ? lang.split('-')[0] : void 0;
120
+ }
121
+ const DIRECT = '$direct';
122
+ function getReferrer() {
123
+ return external_globals_mjs_document?.referrer || DIRECT;
124
+ }
125
+ function getReferringDomain() {
126
+ if (!external_globals_mjs_document?.referrer) return DIRECT;
127
+ return convertToURL(external_globals_mjs_document.referrer)?.host || DIRECT;
128
+ }
129
+ function getReferrerInfo() {
130
+ return {
131
+ $referrer: getReferrer(),
132
+ $referring_domain: getReferringDomain()
133
+ };
134
+ }
135
+ function getPersonInfo(maskPersonalDataProperties, customPersonalDataProperties, disableCaptureUrlHashes = false) {
136
+ const paramsToMask = maskPersonalDataProperties ? [
137
+ ...PERSONAL_DATA_CAMPAIGN_PARAMS,
138
+ ...customPersonalDataProperties || []
139
+ ] : [];
140
+ const href = disableCaptureUrlHashes ? stripUrlHash(external_globals_mjs_location?.href) : external_globals_mjs_location?.href;
141
+ const url = href?.substring(0, 1000);
142
+ return {
143
+ r: getReferrer().substring(0, 1000),
144
+ u: url ? maskQueryParams(url, paramsToMask, MASKED) : void 0
145
+ };
146
+ }
147
+ function getPersonPropsFromInfo(info, disableCaptureUrlHashes = false) {
148
+ const { r: referrer, u } = info;
149
+ const url = disableCaptureUrlHashes ? stripUrlHash(u) : u;
150
+ const referring_domain = null == referrer ? void 0 : referrer == DIRECT ? DIRECT : convertToURL(referrer)?.host;
151
+ const props = {
152
+ $referrer: referrer,
153
+ $referring_domain: referring_domain
154
+ };
155
+ if (url) {
156
+ props['$current_url'] = url;
157
+ const location = convertToURL(url);
158
+ props['$host'] = location?.host;
159
+ props['$pathname'] = location?.pathname;
160
+ const campaignParams = _getCampaignParamsFromUrl(url);
161
+ extend(props, campaignParams);
162
+ }
163
+ if (referrer) {
164
+ const searchInfo = _getSearchInfoFromReferrer(referrer);
165
+ extend(props, searchInfo);
166
+ }
167
+ return props;
168
+ }
169
+ function getInitialPersonPropsFromInfo(info, disableCaptureUrlHashes = false) {
170
+ const personProps = getPersonPropsFromInfo(info, disableCaptureUrlHashes);
171
+ const props = {};
172
+ each(personProps, function(val, key) {
173
+ props[`$initial_${stripLeadingDollar(key)}`] = val;
174
+ });
175
+ return props;
176
+ }
177
+ function getTimezone() {
178
+ try {
179
+ return Intl.DateTimeFormat().resolvedOptions().timeZone;
180
+ } catch {
181
+ return;
182
+ }
183
+ }
184
+ function getTimezoneOffset() {
185
+ try {
186
+ return new Date().getTimezoneOffset();
187
+ } catch {
188
+ return;
189
+ }
190
+ }
191
+ function getBrowserDetectionHints() {
192
+ const nav = 'undefined' != typeof navigator ? navigator : void 0;
193
+ return nav?.brave ? {
194
+ brave: true
195
+ } : {};
196
+ }
197
+ function getEventProperties(maskPersonalDataProperties, customPersonalDataProperties, detectGoogleSearchApp, disableCaptureUrlHashes = false) {
198
+ if (!userAgent) return {};
199
+ const paramsToMask = maskPersonalDataProperties ? [
200
+ ...PERSONAL_DATA_CAMPAIGN_PARAMS,
201
+ ...customPersonalDataProperties || []
202
+ ] : [];
203
+ const [os_name, os_version] = detectOS(userAgent);
204
+ const browserHints = getBrowserDetectionHints();
205
+ const browserOptions = {};
206
+ if (!isUndefined(detectGoogleSearchApp)) browserOptions.detectGoogleSearchApp = detectGoogleSearchApp;
207
+ const deviceOptions = {};
208
+ const userAgentDataPlatform = navigator?.userAgentData?.platform;
209
+ const maxTouchPoints = navigator?.maxTouchPoints;
210
+ const screenWidth = external_globals_mjs_window?.screen?.width;
211
+ const screenHeight = external_globals_mjs_window?.screen?.height;
212
+ const devicePixelRatio = external_globals_mjs_window?.devicePixelRatio;
213
+ if (!isUndefined(userAgentDataPlatform)) deviceOptions.userAgentDataPlatform = userAgentDataPlatform;
214
+ if (!isUndefined(maxTouchPoints)) deviceOptions.maxTouchPoints = maxTouchPoints;
215
+ if (!isUndefined(screenWidth)) deviceOptions.screenWidth = screenWidth;
216
+ if (!isUndefined(screenHeight)) deviceOptions.screenHeight = screenHeight;
217
+ if (!isUndefined(devicePixelRatio)) deviceOptions.devicePixelRatio = devicePixelRatio;
218
+ const properties = extend(stripEmptyProperties({
219
+ $os: os_name,
220
+ $os_version: os_version,
221
+ $browser: detectBrowser(userAgent, navigator.vendor, browserHints, browserOptions),
222
+ $device: detectDevice(userAgent),
223
+ $device_type: detectDeviceType(userAgent, deviceOptions),
224
+ $timezone: getTimezone(),
225
+ $timezone_offset: getTimezoneOffset()
226
+ }), {
227
+ $current_url: maskQueryParams(disableCaptureUrlHashes ? stripUrlHash(external_globals_mjs_location?.href) : external_globals_mjs_location?.href, paramsToMask, MASKED),
228
+ $host: external_globals_mjs_location?.host,
229
+ $pathname: external_globals_mjs_location?.pathname,
230
+ $raw_user_agent: userAgent.length > 1000 ? userAgent.substring(0, 997) + '...' : userAgent,
231
+ $browser_version: detectBrowserVersion(userAgent, navigator.vendor, browserHints, browserOptions),
232
+ $browser_language: getBrowserLanguage(),
233
+ $browser_language_prefix: getBrowserLanguagePrefix(),
234
+ $screen_height: external_globals_mjs_window?.screen.height,
235
+ $screen_width: external_globals_mjs_window?.screen.width,
236
+ $viewport_height: external_globals_mjs_window?.innerHeight,
237
+ $viewport_width: external_globals_mjs_window?.innerWidth,
238
+ $lib: config.LIB_NAME,
239
+ $lib_version: config.LIB_VERSION,
240
+ $insert_id: Math.random().toString(36).substring(2, 10) + Math.random().toString(36).substring(2, 10),
241
+ $time: Date.now() / 1000
242
+ });
243
+ if (config.SDK_DIST_CHANNEL) properties[SDK_DIST_CHANNEL] = config.SDK_DIST_CHANNEL;
244
+ return properties;
245
+ }
246
+ export { CAMPAIGN_PARAMS, COOKIE_CAMPAIGN_PARAMS, EVENT_TO_PERSON_PROPERTIES, MASKED, PERSONAL_DATA_CAMPAIGN_PARAMS, getBrowserDetectionHints, getBrowserLanguage, getBrowserLanguagePrefix, getCampaignParams, getEventProperties, getInitialPersonPropsFromInfo, getPersonInfo, getPersonPropsFromInfo, getReferrer, getReferrerInfo, getReferringDomain, getSearchInfo, getTimezone, getTimezoneOffset };
@@ -0,0 +1,30 @@
1
+ import type { PostHogConfig, Properties } from '@posthog/types';
2
+ export declare function find<T>(value: T[], predicate: (value: T) => boolean): T | undefined;
3
+ export declare function eachArray<E = any>(obj: E[] | null | undefined, iterator: (value: E, key: number) => void): void;
4
+ export declare function each(obj: any, iterator: (value: any, key: any) => void): void;
5
+ export declare const extend: (obj: Record<string, any>, ...args: Record<string, any>[]) => Record<string, any>;
6
+ /**
7
+ * Object.entries() polyfill
8
+ * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries
9
+ */
10
+ export declare function entries<T = any>(obj: Record<string, T>): [string, T][];
11
+ export declare const trySafe: <T>(fn: () => T) => T | undefined;
12
+ export declare const safewrap: <F extends (...args: any[]) => any = (...args: any[]) => any>(f: F) => F;
13
+ export declare const safewrapClass: (klass: Function, functions: string[]) => void;
14
+ export declare const stripEmptyProperties: (p: Properties) => Properties;
15
+ export declare function _copyAndTruncateStrings<T extends Record<string, any> = Record<string, any>>(object: T, maxStringLength: number): T;
16
+ export declare function isCrossDomainCookie(documentLocation: Location | undefined): boolean;
17
+ export declare function addEventListener(element: Window | Document | Element | undefined, event: string, callback: EventListener, options?: AddEventListenerOptions): void;
18
+ /**
19
+ * Helper to migrate deprecated config fields to new field names with appropriate warnings
20
+ * @param config - The config object to check
21
+ * @param newField - The new field name to use
22
+ * @param oldField - The deprecated field name to check for
23
+ * @param defaultValue - The default value if neither field is set
24
+ * @param loggerInstance - Optional logger instance for deprecation warnings
25
+ * @returns The value to use (new field takes precedence over old field)
26
+ */
27
+ export declare function migrateConfigField<T>(config: Record<string, any>, newField: string, oldField: string, defaultValue: T, loggerInstance?: {
28
+ warn: (message: string) => void;
29
+ }): T;
30
+ export declare function isToolbarInstance(config: Pick<PostHogConfig, 'name'>): boolean;
@@ -0,0 +1,191 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.d = (exports1, definition)=>{
5
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
+ enumerable: true,
7
+ get: definition[key]
8
+ });
9
+ };
10
+ })();
11
+ (()=>{
12
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
13
+ })();
14
+ (()=>{
15
+ __webpack_require__.r = (exports1)=>{
16
+ if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
17
+ value: 'Module'
18
+ });
19
+ Object.defineProperty(exports1, '__esModule', {
20
+ value: true
21
+ });
22
+ };
23
+ })();
24
+ var __webpack_exports__ = {};
25
+ __webpack_require__.r(__webpack_exports__);
26
+ __webpack_require__.d(__webpack_exports__, {
27
+ find: ()=>find,
28
+ migrateConfigField: ()=>migrateConfigField,
29
+ each: ()=>each,
30
+ entries: ()=>entries,
31
+ safewrap: ()=>safewrap,
32
+ eachArray: ()=>eachArray,
33
+ safewrapClass: ()=>safewrapClass,
34
+ isCrossDomainCookie: ()=>isCrossDomainCookie,
35
+ _copyAndTruncateStrings: ()=>_copyAndTruncateStrings,
36
+ addEventListener: ()=>addEventListener,
37
+ extend: ()=>extend,
38
+ stripEmptyProperties: ()=>stripEmptyProperties,
39
+ isToolbarInstance: ()=>isToolbarInstance,
40
+ trySafe: ()=>trySafe
41
+ });
42
+ const core_namespaceObject = require("@posthog/core");
43
+ const external_logger_js_namespaceObject = require("./logger.js");
44
+ function find(value, predicate) {
45
+ for(let i = 0; i < value.length; i++)if (predicate(value[i])) return value[i];
46
+ }
47
+ function eachArray(obj, iterator) {
48
+ if ((0, core_namespaceObject.isArray)(obj)) obj.forEach(iterator);
49
+ }
50
+ function each(obj, iterator) {
51
+ if ((0, core_namespaceObject.isNullish)(obj)) return;
52
+ if ((0, core_namespaceObject.isArray)(obj)) return void obj.forEach(iterator);
53
+ if ((0, core_namespaceObject.isFormData)(obj)) return void obj.forEach((val, key)=>iterator(val, key));
54
+ for(const key in obj)if (core_namespaceObject.hasOwnProperty.call(obj, key)) iterator(obj[key], key);
55
+ }
56
+ const extend = function(obj, ...args) {
57
+ for (const source of args)for(const prop in source)if (void 0 !== source[prop]) obj[prop] = source[prop];
58
+ return obj;
59
+ };
60
+ function entries(obj) {
61
+ const ownProps = Object.keys(obj);
62
+ let i = ownProps.length;
63
+ const resArray = new Array(i);
64
+ while(i--)resArray[i] = [
65
+ ownProps[i],
66
+ obj[ownProps[i]]
67
+ ];
68
+ return resArray;
69
+ }
70
+ const trySafe = function(fn) {
71
+ try {
72
+ return fn();
73
+ } catch {
74
+ return;
75
+ }
76
+ };
77
+ const safewrap = function(f) {
78
+ return function(...args) {
79
+ try {
80
+ return f.apply(this, args);
81
+ } catch (e) {
82
+ external_logger_js_namespaceObject.logger.critical('Implementation error. Please turn on debug mode and open a ticket on https://app.posthog.com/home#panel=support%3Asupport%3A.');
83
+ external_logger_js_namespaceObject.logger.critical(e);
84
+ }
85
+ };
86
+ };
87
+ const safewrapClass = function(klass, functions) {
88
+ for(let i = 0; i < functions.length; i++)klass.prototype[functions[i]] = safewrap(klass.prototype[functions[i]]);
89
+ };
90
+ const stripEmptyProperties = function(p) {
91
+ const ret = {};
92
+ each(p, function(v, k) {
93
+ if ((0, core_namespaceObject.isString)(v) && v.length > 0 || (0, core_namespaceObject.isNumber)(v)) ret[k] = v;
94
+ });
95
+ return ret;
96
+ };
97
+ function deepCircularCopy(value, customizer) {
98
+ const COPY_IN_PROGRESS_SET = new Set();
99
+ function internalDeepCircularCopy(value, key) {
100
+ if (value !== Object(value)) return customizer ? customizer(value, key) : value;
101
+ if (COPY_IN_PROGRESS_SET.has(value)) return;
102
+ COPY_IN_PROGRESS_SET.add(value);
103
+ let result;
104
+ if ((0, core_namespaceObject.isArray)(value)) {
105
+ result = [];
106
+ eachArray(value, (it)=>{
107
+ result.push(internalDeepCircularCopy(it));
108
+ });
109
+ } else {
110
+ const copy = {};
111
+ each(value, (val, key)=>{
112
+ if (!COPY_IN_PROGRESS_SET.has(val)) copy[key] = internalDeepCircularCopy(val, key);
113
+ });
114
+ result = copy;
115
+ }
116
+ return result;
117
+ }
118
+ return internalDeepCircularCopy(value);
119
+ }
120
+ function _copyAndTruncateStrings(object, maxStringLength) {
121
+ return deepCircularCopy(object, (value)=>{
122
+ if ((0, core_namespaceObject.isString)(value)) return value.slice(0, maxStringLength);
123
+ return value;
124
+ });
125
+ }
126
+ const EXCLUDED_FROM_CROSS_SUBDOMAIN_COOKIE = [
127
+ 'herokuapp.com',
128
+ 'vercel.app',
129
+ 'netlify.app'
130
+ ];
131
+ function isCrossDomainCookie(documentLocation) {
132
+ const hostname = documentLocation?.hostname;
133
+ if (!(0, core_namespaceObject.isString)(hostname)) return false;
134
+ const lastTwoParts = hostname.split('.').slice(-2).join('.');
135
+ for (const excluded of EXCLUDED_FROM_CROSS_SUBDOMAIN_COOKIE)if (lastTwoParts === excluded) return false;
136
+ return true;
137
+ }
138
+ function addEventListener(element, event, callback, options) {
139
+ const { capture = false, passive = true } = options ?? {};
140
+ element?.addEventListener(event, callback, {
141
+ capture,
142
+ passive
143
+ });
144
+ }
145
+ function migrateConfigField(config, newField, oldField, defaultValue, loggerInstance) {
146
+ const hasNewField = newField in config && !(0, core_namespaceObject.isNullish)(config[newField]);
147
+ const hasOldField = oldField in config && !(0, core_namespaceObject.isNullish)(config[oldField]);
148
+ if (hasNewField) return config[newField];
149
+ if (hasOldField) {
150
+ if (loggerInstance) loggerInstance.warn(`Config field '${oldField}' is deprecated. Please use '${newField}' instead. The old field will be removed in a future major version.`);
151
+ return config[oldField];
152
+ }
153
+ return defaultValue;
154
+ }
155
+ const TOOLBAR_INTERNAL_INSTANCE_NAME = 'ph_toolbar_internal';
156
+ function isToolbarInstance(config) {
157
+ return config.name === TOOLBAR_INTERNAL_INSTANCE_NAME;
158
+ }
159
+ exports._copyAndTruncateStrings = __webpack_exports__._copyAndTruncateStrings;
160
+ exports.addEventListener = __webpack_exports__.addEventListener;
161
+ exports.each = __webpack_exports__.each;
162
+ exports.eachArray = __webpack_exports__.eachArray;
163
+ exports.entries = __webpack_exports__.entries;
164
+ exports.extend = __webpack_exports__.extend;
165
+ exports.find = __webpack_exports__.find;
166
+ exports.isCrossDomainCookie = __webpack_exports__.isCrossDomainCookie;
167
+ exports.isToolbarInstance = __webpack_exports__.isToolbarInstance;
168
+ exports.migrateConfigField = __webpack_exports__.migrateConfigField;
169
+ exports.safewrap = __webpack_exports__.safewrap;
170
+ exports.safewrapClass = __webpack_exports__.safewrapClass;
171
+ exports.stripEmptyProperties = __webpack_exports__.stripEmptyProperties;
172
+ exports.trySafe = __webpack_exports__.trySafe;
173
+ for(var __webpack_i__ in __webpack_exports__)if (-1 === [
174
+ "_copyAndTruncateStrings",
175
+ "addEventListener",
176
+ "each",
177
+ "eachArray",
178
+ "entries",
179
+ "extend",
180
+ "find",
181
+ "isCrossDomainCookie",
182
+ "isToolbarInstance",
183
+ "migrateConfigField",
184
+ "safewrap",
185
+ "safewrapClass",
186
+ "stripEmptyProperties",
187
+ "trySafe"
188
+ ].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
189
+ Object.defineProperty(exports, '__esModule', {
190
+ value: true
191
+ });
@@ -0,0 +1,118 @@
1
+ import { hasOwnProperty as core_hasOwnProperty, isArray, isFormData, isNullish, isNumber, isString } from "@posthog/core";
2
+ import { logger } from "./logger.mjs";
3
+ function find(value, predicate) {
4
+ for(let i = 0; i < value.length; i++)if (predicate(value[i])) return value[i];
5
+ }
6
+ function eachArray(obj, iterator) {
7
+ if (isArray(obj)) obj.forEach(iterator);
8
+ }
9
+ function each(obj, iterator) {
10
+ if (isNullish(obj)) return;
11
+ if (isArray(obj)) return void obj.forEach(iterator);
12
+ if (isFormData(obj)) return void obj.forEach((val, key)=>iterator(val, key));
13
+ for(const key in obj)if (core_hasOwnProperty.call(obj, key)) iterator(obj[key], key);
14
+ }
15
+ const extend = function(obj, ...args) {
16
+ for (const source of args)for(const prop in source)if (void 0 !== source[prop]) obj[prop] = source[prop];
17
+ return obj;
18
+ };
19
+ function entries(obj) {
20
+ const ownProps = Object.keys(obj);
21
+ let i = ownProps.length;
22
+ const resArray = new Array(i);
23
+ while(i--)resArray[i] = [
24
+ ownProps[i],
25
+ obj[ownProps[i]]
26
+ ];
27
+ return resArray;
28
+ }
29
+ const trySafe = function(fn) {
30
+ try {
31
+ return fn();
32
+ } catch {
33
+ return;
34
+ }
35
+ };
36
+ const safewrap = function(f) {
37
+ return function(...args) {
38
+ try {
39
+ return f.apply(this, args);
40
+ } catch (e) {
41
+ logger.critical('Implementation error. Please turn on debug mode and open a ticket on https://app.posthog.com/home#panel=support%3Asupport%3A.');
42
+ logger.critical(e);
43
+ }
44
+ };
45
+ };
46
+ const safewrapClass = function(klass, functions) {
47
+ for(let i = 0; i < functions.length; i++)klass.prototype[functions[i]] = safewrap(klass.prototype[functions[i]]);
48
+ };
49
+ const stripEmptyProperties = function(p) {
50
+ const ret = {};
51
+ each(p, function(v, k) {
52
+ if (isString(v) && v.length > 0 || isNumber(v)) ret[k] = v;
53
+ });
54
+ return ret;
55
+ };
56
+ function deepCircularCopy(value, customizer) {
57
+ const COPY_IN_PROGRESS_SET = new Set();
58
+ function internalDeepCircularCopy(value, key) {
59
+ if (value !== Object(value)) return customizer ? customizer(value, key) : value;
60
+ if (COPY_IN_PROGRESS_SET.has(value)) return;
61
+ COPY_IN_PROGRESS_SET.add(value);
62
+ let result;
63
+ if (isArray(value)) {
64
+ result = [];
65
+ eachArray(value, (it)=>{
66
+ result.push(internalDeepCircularCopy(it));
67
+ });
68
+ } else {
69
+ const copy = {};
70
+ each(value, (val, key)=>{
71
+ if (!COPY_IN_PROGRESS_SET.has(val)) copy[key] = internalDeepCircularCopy(val, key);
72
+ });
73
+ result = copy;
74
+ }
75
+ return result;
76
+ }
77
+ return internalDeepCircularCopy(value);
78
+ }
79
+ function _copyAndTruncateStrings(object, maxStringLength) {
80
+ return deepCircularCopy(object, (value)=>{
81
+ if (isString(value)) return value.slice(0, maxStringLength);
82
+ return value;
83
+ });
84
+ }
85
+ const EXCLUDED_FROM_CROSS_SUBDOMAIN_COOKIE = [
86
+ 'herokuapp.com',
87
+ 'vercel.app',
88
+ 'netlify.app'
89
+ ];
90
+ function isCrossDomainCookie(documentLocation) {
91
+ const hostname = documentLocation?.hostname;
92
+ if (!isString(hostname)) return false;
93
+ const lastTwoParts = hostname.split('.').slice(-2).join('.');
94
+ for (const excluded of EXCLUDED_FROM_CROSS_SUBDOMAIN_COOKIE)if (lastTwoParts === excluded) return false;
95
+ return true;
96
+ }
97
+ function addEventListener(element, event, callback, options) {
98
+ const { capture = false, passive = true } = options ?? {};
99
+ element?.addEventListener(event, callback, {
100
+ capture,
101
+ passive
102
+ });
103
+ }
104
+ function migrateConfigField(config, newField, oldField, defaultValue, loggerInstance) {
105
+ const hasNewField = newField in config && !isNullish(config[newField]);
106
+ const hasOldField = oldField in config && !isNullish(config[oldField]);
107
+ if (hasNewField) return config[newField];
108
+ if (hasOldField) {
109
+ if (loggerInstance) loggerInstance.warn(`Config field '${oldField}' is deprecated. Please use '${newField}' instead. The old field will be removed in a future major version.`);
110
+ return config[oldField];
111
+ }
112
+ return defaultValue;
113
+ }
114
+ const TOOLBAR_INTERNAL_INSTANCE_NAME = 'ph_toolbar_internal';
115
+ function isToolbarInstance(config) {
116
+ return config.name === TOOLBAR_INTERNAL_INSTANCE_NAME;
117
+ }
118
+ export { _copyAndTruncateStrings, addEventListener, each, eachArray, entries, extend, find, isCrossDomainCookie, isToolbarInstance, migrateConfigField, safewrap, safewrapClass, stripEmptyProperties, trySafe };
@@ -0,0 +1,25 @@
1
+ declare const win: (Window & typeof globalThis) | undefined;
2
+ export declare const navigator: Navigator | undefined;
3
+ export declare const document: Document | undefined;
4
+ export declare const location: Location | undefined;
5
+ export declare const fetch: typeof globalThis.fetch | undefined;
6
+ export declare const XMLHttpRequest: {
7
+ new (): XMLHttpRequest;
8
+ prototype: XMLHttpRequest;
9
+ readonly UNSENT: 0;
10
+ readonly OPENED: 1;
11
+ readonly HEADERS_RECEIVED: 2;
12
+ readonly LOADING: 3;
13
+ readonly DONE: 4;
14
+ } | undefined;
15
+ export declare const AbortController: {
16
+ new (): AbortController;
17
+ prototype: AbortController;
18
+ } | undefined;
19
+ export declare const CompressionStream: {
20
+ new (format: CompressionFormat): CompressionStream;
21
+ prototype: CompressionStream;
22
+ } | undefined;
23
+ export declare const userAgent: string | undefined;
24
+ export declare function isBrowserOnline(): boolean;
25
+ export { win as window };
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.d = (exports1, definition)=>{
5
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
+ enumerable: true,
7
+ get: definition[key]
8
+ });
9
+ };
10
+ })();
11
+ (()=>{
12
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
13
+ })();
14
+ (()=>{
15
+ __webpack_require__.r = (exports1)=>{
16
+ if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
17
+ value: 'Module'
18
+ });
19
+ Object.defineProperty(exports1, '__esModule', {
20
+ value: true
21
+ });
22
+ };
23
+ })();
24
+ var __webpack_exports__ = {};
25
+ __webpack_require__.r(__webpack_exports__);
26
+ __webpack_require__.d(__webpack_exports__, {
27
+ AbortController: ()=>AbortController,
28
+ CompressionStream: ()=>CompressionStream,
29
+ XMLHttpRequest: ()=>XMLHttpRequest,
30
+ document: ()=>document,
31
+ fetch: ()=>fetch,
32
+ isBrowserOnline: ()=>isBrowserOnline,
33
+ location: ()=>location,
34
+ navigator: ()=>navigator,
35
+ userAgent: ()=>userAgent,
36
+ window: ()=>win
37
+ });
38
+ const win = 'undefined' != typeof window ? window : void 0;
39
+ const global = 'undefined' != typeof globalThis ? globalThis : win;
40
+ const navigator = global?.navigator;
41
+ const document = global?.document;
42
+ const location = global?.location;
43
+ const fetch = global?.fetch;
44
+ const XMLHttpRequest = global?.XMLHttpRequest && 'withCredentials' in new global.XMLHttpRequest() ? global.XMLHttpRequest : void 0;
45
+ const AbortController = global?.AbortController;
46
+ const CompressionStream = global?.CompressionStream;
47
+ const userAgent = navigator?.userAgent;
48
+ function isBrowserOnline() {
49
+ return !!(win && false !== win.navigator.onLine);
50
+ }
51
+ exports.AbortController = __webpack_exports__.AbortController;
52
+ exports.CompressionStream = __webpack_exports__.CompressionStream;
53
+ exports.XMLHttpRequest = __webpack_exports__.XMLHttpRequest;
54
+ exports.document = __webpack_exports__.document;
55
+ exports.fetch = __webpack_exports__.fetch;
56
+ exports.isBrowserOnline = __webpack_exports__.isBrowserOnline;
57
+ exports.location = __webpack_exports__.location;
58
+ exports.navigator = __webpack_exports__.navigator;
59
+ exports.userAgent = __webpack_exports__.userAgent;
60
+ exports.window = __webpack_exports__.window;
61
+ for(var __webpack_i__ in __webpack_exports__)if (-1 === [
62
+ "AbortController",
63
+ "CompressionStream",
64
+ "XMLHttpRequest",
65
+ "document",
66
+ "fetch",
67
+ "isBrowserOnline",
68
+ "location",
69
+ "navigator",
70
+ "userAgent",
71
+ "window"
72
+ ].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
73
+ Object.defineProperty(exports, '__esModule', {
74
+ value: true
75
+ });