posthog-js 1.376.2 → 1.376.3

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.
@@ -54,73 +54,213 @@ var setupOpenTelemetry = function (posthog) {
54
54
  };
55
55
  var LOG_BODY_SIZE_LIMIT = 10000;
56
56
  var LOG_ATTRIBUTES_LIMIT = 50;
57
- // This protects console logging from throwing when JSON.stringify hits unreadable properties.
58
- // The fallback safely copies readable properties and omits unreadable ones.
59
- // E.g., cross origin windows, exceptions raised in property getter
60
- var sanitizeForStringify = function (value, seen) {
61
- var e_1, _a;
62
- if (seen === void 0) { seen = new WeakSet(); }
57
+ var appendWithLimit = function (parts, text, budget) {
58
+ if (budget.remaining <= 0) {
59
+ budget.truncated = true;
60
+ return false;
61
+ }
62
+ if (text.length <= budget.remaining) {
63
+ parts.push(text);
64
+ budget.remaining -= text.length;
65
+ return true;
66
+ }
67
+ parts.push(text.slice(0, budget.remaining));
68
+ budget.remaining = 0;
69
+ budget.truncated = true;
70
+ return false;
71
+ };
72
+ var stringifyStringWithLimit = function (value, parts, budget) {
73
+ var serialized = JSON.stringify(value);
74
+ if (serialized.length <= budget.remaining) {
75
+ return appendWithLimit(parts, serialized, budget);
76
+ }
77
+ budget.truncated = true;
78
+ if (budget.remaining < 2) {
79
+ return false;
80
+ }
81
+ var low = 0;
82
+ var high = Math.min(value.length, budget.remaining - 2);
83
+ while (low < high) {
84
+ var mid = Math.ceil((low + high) / 2);
85
+ if (JSON.stringify(value.slice(0, mid)).length <= budget.remaining) {
86
+ low = mid;
87
+ }
88
+ else {
89
+ high = mid - 1;
90
+ }
91
+ }
92
+ return appendWithLimit(parts, JSON.stringify(value.slice(0, low)), budget);
93
+ };
94
+ var isJSONSerializablePrimitive = function (value) {
95
+ return typeof value !== 'undefined' &&
96
+ typeof value !== 'function' &&
97
+ typeof value !== 'symbol' &&
98
+ typeof value !== 'bigint';
99
+ };
100
+ var isNumberOrBoolean = function (value) {
101
+ try {
102
+ return (0, core_1.isNumber)(value) || (0, core_1.isBoolean)(value);
103
+ }
104
+ catch (_a) {
105
+ return false;
106
+ }
107
+ };
108
+ var stringifyValueWithLimit = function (value, parts, budget, seen, inArray) {
109
+ if (inArray === void 0) { inArray = false; }
110
+ if (!isJSONSerializablePrimitive(value)) {
111
+ return inArray ? appendWithLimit(parts, 'null', budget) : true;
112
+ }
113
+ if ((0, core_1.isNull)(value) || isNumberOrBoolean(value)) {
114
+ return appendWithLimit(parts, JSON.stringify(value), budget);
115
+ }
116
+ if (typeof value === 'string') {
117
+ return stringifyStringWithLimit(value, parts, budget);
118
+ }
63
119
  if (!(0, core_1.isObject)(value) && !(0, core_1.isArray)(value)) {
64
- return value;
120
+ return appendWithLimit(parts, JSON.stringify(value), budget);
65
121
  }
66
122
  if (seen.has(value)) {
67
- return '[Circular]';
123
+ return stringifyStringWithLimit('[Circular]', parts, budget);
68
124
  }
69
125
  seen.add(value);
70
- var result = (0, core_1.isArray)(value) ? [] : {};
71
- var keys;
72
126
  try {
73
- keys = Object.keys(value);
127
+ var toJSON = value.toJSON;
128
+ if ((0, core_1.isFunction)(toJSON)) {
129
+ return stringifyValueWithLimit(toJSON.call(value), parts, budget, seen, inArray);
130
+ }
74
131
  }
75
- catch (_b) {
76
- return undefined;
132
+ catch (_a) {
133
+ // If toJSON can't be read or throws, fall through to safe property enumeration.
77
134
  }
78
135
  try {
79
- for (var keys_1 = __values(keys), keys_1_1 = keys_1.next(); !keys_1_1.done; keys_1_1 = keys_1.next()) {
80
- var key = keys_1_1.value;
81
- try {
82
- result[key] = sanitizeForStringify(value[key], seen);
83
- }
84
- catch (_c) {
85
- // omit properties that cannot be read
86
- }
136
+ var objectTag = Object.prototype.toString.call(value);
137
+ if (objectTag === '[object String]') {
138
+ return stringifyStringWithLimit(String(value.valueOf()), parts, budget);
87
139
  }
88
- }
89
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
90
- finally {
91
- try {
92
- if (keys_1_1 && !keys_1_1.done && (_a = keys_1.return)) _a.call(keys_1);
140
+ if (objectTag === '[object Number]' || objectTag === '[object Boolean]') {
141
+ return appendWithLimit(parts, JSON.stringify(value.valueOf()), budget);
93
142
  }
94
- finally { if (e_1) throw e_1.error; }
143
+ }
144
+ catch (_b) {
145
+ // If Object.prototype.toString or valueOf throws, fall through to safe property enumeration.
95
146
  }
96
147
  if (value instanceof Error) {
148
+ var errorObject = {};
149
+ try {
150
+ for (var key in value) {
151
+ if (Object.prototype.hasOwnProperty.call(value, key)) {
152
+ errorObject[key] = value[key];
153
+ }
154
+ }
155
+ }
156
+ catch (_c) { }
97
157
  try {
98
- result.name = value.name;
158
+ errorObject.name = value.name;
99
159
  }
100
160
  catch (_d) { }
101
161
  try {
102
- result.message = value.message;
162
+ errorObject.message = value.message;
103
163
  }
104
164
  catch (_e) { }
105
165
  try {
106
- result.stack = value.stack;
166
+ errorObject.stack = value.stack;
107
167
  }
108
168
  catch (_f) { }
169
+ return stringifyValueWithLimit(errorObject, parts, budget, seen, inArray);
109
170
  }
110
- return result;
111
- };
112
- var stringifySafely = function (value, replacer) {
171
+ if ((0, core_1.isArray)(value)) {
172
+ if (!appendWithLimit(parts, '[', budget)) {
173
+ return false;
174
+ }
175
+ for (var i = 0; i < value.length; i++) {
176
+ if (i > 0 && !appendWithLimit(parts, ',', budget)) {
177
+ return false;
178
+ }
179
+ var item = void 0;
180
+ try {
181
+ item = value[i];
182
+ }
183
+ catch (_g) {
184
+ item = undefined;
185
+ }
186
+ if (!stringifyValueWithLimit(item, parts, budget, seen, true)) {
187
+ return false;
188
+ }
189
+ }
190
+ return appendWithLimit(parts, ']', budget);
191
+ }
192
+ if (!appendWithLimit(parts, '{', budget)) {
193
+ return false;
194
+ }
195
+ var isFirst = true;
113
196
  try {
114
- return JSON.stringify(value, replacer);
197
+ for (var key in value) {
198
+ if (!Object.prototype.hasOwnProperty.call(value, key)) {
199
+ continue;
200
+ }
201
+ if (budget.remaining <= 0) {
202
+ budget.truncated = true;
203
+ return false;
204
+ }
205
+ var propertyValue = void 0;
206
+ try {
207
+ propertyValue = value[key];
208
+ }
209
+ catch (_h) {
210
+ continue;
211
+ }
212
+ if (!isJSONSerializablePrimitive(propertyValue)) {
213
+ continue;
214
+ }
215
+ var propertyPrefix = "".concat(isFirst ? '' : ',').concat(JSON.stringify(key), ":");
216
+ if (propertyPrefix.length >= budget.remaining) {
217
+ budget.truncated = true;
218
+ return false;
219
+ }
220
+ var partsBeforeProperty = parts.length;
221
+ var remainingBeforeProperty = budget.remaining;
222
+ var truncatedBeforeProperty = budget.truncated;
223
+ if (!appendWithLimit(parts, propertyPrefix, budget)) {
224
+ return false;
225
+ }
226
+ var partsBeforeValue = parts.length;
227
+ var serialized = stringifyValueWithLimit(propertyValue, parts, budget, seen, false);
228
+ var truncatedAfterValue = budget.truncated;
229
+ if (parts.length === partsBeforeValue) {
230
+ parts.length = partsBeforeProperty;
231
+ budget.remaining = remainingBeforeProperty;
232
+ budget.truncated = serialized ? truncatedBeforeProperty : truncatedAfterValue;
233
+ if (!serialized) {
234
+ return false;
235
+ }
236
+ continue;
237
+ }
238
+ isFirst = false;
239
+ if (!serialized) {
240
+ return false;
241
+ }
242
+ }
115
243
  }
116
- catch (_a) {
117
- try {
118
- return JSON.stringify(sanitizeForStringify(value));
244
+ catch (_j) {
245
+ // we'll omit this object's properties considering we can't enumerate them
246
+ }
247
+ return appendWithLimit(parts, '}', budget);
248
+ };
249
+ var stringifyArgsSafely = function (args, sizeLimit) {
250
+ var parts = [];
251
+ var budget = { remaining: sizeLimit, truncated: false };
252
+ for (var i = 0; i < args.length; i++) {
253
+ if (i > 0 && !appendWithLimit(parts, ' ', budget)) {
254
+ break;
119
255
  }
120
- catch (_b) {
121
- return undefined;
256
+ if (!stringifyValueWithLimit(args[i], parts, budget, new WeakSet())) {
257
+ break;
122
258
  }
123
259
  }
260
+ return {
261
+ body: parts.join('') + (budget.truncated ? '...' : ''),
262
+ truncated: budget.truncated,
263
+ };
124
264
  };
125
265
  /**
126
266
  * Flattens a nested object into a single level dot-notation object.
@@ -179,7 +319,7 @@ var SEVERITY_MAP = {
179
319
  info: 'INFO',
180
320
  };
181
321
  var initializeLogs = function (posthog) {
182
- var e_2, _a;
322
+ var e_1, _a;
183
323
  setupOpenTelemetry(posthog);
184
324
  var logger = api_logs_1.logs.getLogger('console');
185
325
  var attributes = {};
@@ -191,21 +331,6 @@ var initializeLogs = function (posthog) {
191
331
  };
192
332
  }
193
333
  var _loop_1 = function (level) {
194
- var createReplacer = function () {
195
- var seen = new WeakSet();
196
- return function (_, value) {
197
- if (value instanceof Error) {
198
- return __assign(__assign({}, value), { name: value.name, message: value.message, stack: value.stack });
199
- }
200
- if (typeof value === 'object' && !(0, core_1.isNull)(value)) {
201
- if (seen.has(value)) {
202
- return '[Circular]';
203
- }
204
- seen.add(value);
205
- }
206
- return value;
207
- };
208
- };
209
334
  var logWrapper = function (originalConsoleLog) {
210
335
  return function () {
211
336
  var args = [];
@@ -213,15 +338,12 @@ var initializeLogs = function (posthog) {
213
338
  args[_i] = arguments[_i];
214
339
  }
215
340
  if (args.length > 0) {
216
- var body = args.map(function (a) { return stringifySafely(a, createReplacer()); }).join(' ');
217
- if (body.length > LOG_BODY_SIZE_LIMIT) {
218
- body = body.slice(0, LOG_BODY_SIZE_LIMIT) + '...';
219
- attributes.body_truncated = 'true';
220
- }
341
+ var _a = stringifyArgsSafely(args, LOG_BODY_SIZE_LIMIT), body = _a.body, truncated = _a.truncated;
342
+ var logAttributes = __assign(__assign({}, attributes), (truncated ? { body_truncated: 'true' } : {}));
221
343
  logger.emit({
222
344
  severityText: SEVERITY_MAP[level],
223
345
  body: body,
224
- attributes: __assign(__assign({ 'log.source': "console.".concat(level), distinct_id: posthog.get_distinct_id(), 'location.href': globals_1.assignableWindow.location.href }, attributes), ((0, core_1.isObject)(args[0]) ? flattenObject(args[0]) : {})),
346
+ attributes: __assign(__assign({ 'log.source': "console.".concat(level), distinct_id: posthog.get_distinct_id(), 'location.href': globals_1.assignableWindow.location.href }, logAttributes), ((0, core_1.isObject)(args[0]) ? flattenObject(args[0]) : {})),
225
347
  });
226
348
  originalConsoleLog.apply(globals_1.assignableWindow.console, args);
227
349
  }
@@ -236,12 +358,12 @@ var initializeLogs = function (posthog) {
236
358
  _loop_1(level);
237
359
  }
238
360
  }
239
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
361
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
240
362
  finally {
241
363
  try {
242
364
  if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
243
365
  }
244
- finally { if (e_2) throw e_2.error; }
366
+ finally { if (e_1) throw e_1.error; }
245
367
  }
246
368
  };
247
369
  globals_1.assignableWindow.__PosthogExtensions__ = globals_1.assignableWindow.__PosthogExtensions__ || {};
@@ -1 +1 @@
1
- {"version":3,"file":"logs.js","sourceRoot":"","sources":["../../../src/entrypoints/logs.ts"],"names":[],"mappings":"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","sourcesContent":["import { logs } from '@opentelemetry/api-logs'\nimport { OTLPLogExporter } from '@opentelemetry/exporter-logs-otlp-http'\nimport { LoggerProvider, BatchLogRecordProcessor } from '@opentelemetry/sdk-logs'\nimport { resourceFromAttributes } from '@opentelemetry/resources'\n\nimport { assignableWindow } from '../utils/globals'\nimport { PostHog } from '../posthog-core'\nimport { isArray, isNull, isObject } from '@posthog/core'\n\nconst setupOpenTelemetry = (posthog: PostHog) => {\n const serviceName = posthog.config.logs?.serviceName || 'posthog-browser-logs'\n let attributes: Record<string, string> = {\n 'service.name': serviceName,\n host: assignableWindow.location.host,\n }\n\n if (posthog.sessionManager) {\n const { sessionId, windowId } = posthog.sessionManager.checkAndGetSessionAndWindowId(true)\n attributes = {\n ...attributes,\n 'session.id': sessionId,\n 'window.id': windowId,\n }\n }\n\n logs.setGlobalLoggerProvider(\n new LoggerProvider({\n resource: resourceFromAttributes(attributes),\n processors: [\n new BatchLogRecordProcessor(\n new OTLPLogExporter({\n url: `${posthog.config.api_host}/i/v1/logs?token=${posthog.config.token}`,\n // 1. Force the content type to text/plain to avoid OPTIONS preflight\n headers: {\n 'Content-Type': 'text/plain',\n },\n })\n ),\n ],\n })\n )\n}\n\nconst LOG_BODY_SIZE_LIMIT = 10000\nconst LOG_ATTRIBUTES_LIMIT = 50\n\n// This protects console logging from throwing when JSON.stringify hits unreadable properties.\n// The fallback safely copies readable properties and omits unreadable ones.\n// E.g., cross origin windows, exceptions raised in property getter\nconst sanitizeForStringify = (value: any, seen = new WeakSet()): any => {\n if (!isObject(value) && !isArray(value)) {\n return value\n }\n\n if (seen.has(value)) {\n return '[Circular]'\n }\n seen.add(value)\n\n const result: any = isArray(value) ? [] : {}\n let keys: string[]\n try {\n keys = Object.keys(value)\n } catch {\n return undefined\n }\n for (const key of keys) {\n try {\n result[key] = sanitizeForStringify((value as any)[key], seen)\n } catch {\n // omit properties that cannot be read\n }\n }\n\n if (value instanceof Error) {\n try {\n result.name = value.name\n } catch {}\n try {\n result.message = value.message\n } catch {}\n try {\n result.stack = value.stack\n } catch {}\n }\n\n return result\n}\n\nconst stringifySafely = (value: any, replacer: (_: any, value: any) => any): string | undefined => {\n try {\n return JSON.stringify(value, replacer)\n } catch {\n try {\n return JSON.stringify(sanitizeForStringify(value))\n } catch {\n return undefined\n }\n }\n}\n\n/**\n * Flattens a nested object into a single level dot-notation object.\n * By default limit to 200kB or 50 keys.\n */\nconst flattenObject = (\n obj: any,\n prefix = '',\n result = {} as Record<string, any>,\n keys_limit = LOG_ATTRIBUTES_LIMIT,\n size_limit = LOG_BODY_SIZE_LIMIT,\n seen = new WeakSet()\n) => {\n if (seen.has(obj)) {\n result[prefix || 'circular'] = '[Circular]'\n return result\n }\n seen.add(obj)\n\n try {\n for (const key in obj) {\n try {\n if (!Object.prototype.hasOwnProperty.call(obj, key)) {\n continue\n }\n const value = obj[key]\n const newKey = prefix ? `${prefix}.${key}` : key\n\n if (isObject(value)) {\n flattenObject(value, newKey, result, keys_limit, size_limit, seen)\n } else {\n keys_limit -= 1\n size_limit -= String(value).length\n size_limit -= newKey.length\n if (keys_limit <= 0 || size_limit <= 0) {\n result['attributes_truncated'] = true\n return\n } else {\n result[newKey] = value\n }\n }\n } catch {\n continue\n }\n }\n } catch {\n // we'll omit this object's properties considering we can't enumerate them\n }\n return result\n}\n\nconst SEVERITY_MAP = {\n log: 'INFO',\n warn: 'WARNING',\n error: 'ERROR',\n debug: 'DEBUG',\n info: 'INFO',\n}\n\nconst initializeLogs = (posthog: PostHog) => {\n setupOpenTelemetry(posthog)\n\n const logger = logs.getLogger('console')\n let attributes: Record<string, string> = {}\n if (posthog.sessionManager) {\n const { sessionStartTimestamp, lastActivityTimestamp } =\n posthog.sessionManager.checkAndGetSessionAndWindowId(true)\n attributes = {\n sessionStartTimestamp: sessionStartTimestamp.toString(),\n lastActivityTimestamp: lastActivityTimestamp.toString(),\n }\n }\n\n for (const level of ['debug', 'log', 'warn', 'error', 'info'] as ('debug' | 'log' | 'warn' | 'error' | 'info')[]) {\n const createReplacer = () => {\n const seen = new WeakSet()\n return (_: any, value: any) => {\n if (value instanceof Error) {\n return {\n ...value,\n name: value.name,\n message: value.message,\n stack: value.stack,\n }\n }\n if (typeof value === 'object' && !isNull(value)) {\n if (seen.has(value)) {\n return '[Circular]'\n }\n seen.add(value)\n }\n return value\n }\n }\n const logWrapper =\n (originalConsoleLog: any) =>\n (...args: any[]) => {\n if (args.length > 0) {\n let body = args.map((a) => stringifySafely(a, createReplacer())).join(' ')\n if (body.length > LOG_BODY_SIZE_LIMIT) {\n body = body.slice(0, LOG_BODY_SIZE_LIMIT) + '...'\n attributes.body_truncated = 'true'\n }\n logger.emit({\n severityText: SEVERITY_MAP[level],\n body: body,\n attributes: {\n 'log.source': `console.${level}`,\n distinct_id: posthog.get_distinct_id(),\n 'location.href': assignableWindow.location.href,\n ...attributes,\n ...(isObject(args[0]) ? flattenObject(args[0]) : {}),\n },\n })\n originalConsoleLog.apply(assignableWindow.console, args)\n }\n }\n\n const originalConsoleLog = assignableWindow.console[level]\n assignableWindow.console[level] = logWrapper(originalConsoleLog)\n }\n}\n\nassignableWindow.__PosthogExtensions__ = assignableWindow.__PosthogExtensions__ || {}\nassignableWindow.__PosthogExtensions__.logs = { initializeLogs }\n"]}
1
+ {"version":3,"file":"logs.js","sourceRoot":"","sources":["../../../src/entrypoints/logs.ts"],"names":[],"mappings":"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","sourcesContent":["import { logs } from '@opentelemetry/api-logs'\nimport { OTLPLogExporter } from '@opentelemetry/exporter-logs-otlp-http'\nimport { LoggerProvider, BatchLogRecordProcessor } from '@opentelemetry/sdk-logs'\nimport { resourceFromAttributes } from '@opentelemetry/resources'\n\nimport { assignableWindow } from '../utils/globals'\nimport { PostHog } from '../posthog-core'\nimport { isArray, isBoolean, isFunction, isNull, isNumber, isObject } from '@posthog/core'\n\nconst setupOpenTelemetry = (posthog: PostHog) => {\n const serviceName = posthog.config.logs?.serviceName || 'posthog-browser-logs'\n let attributes: Record<string, string> = {\n 'service.name': serviceName,\n host: assignableWindow.location.host,\n }\n\n if (posthog.sessionManager) {\n const { sessionId, windowId } = posthog.sessionManager.checkAndGetSessionAndWindowId(true)\n attributes = {\n ...attributes,\n 'session.id': sessionId,\n 'window.id': windowId,\n }\n }\n\n logs.setGlobalLoggerProvider(\n new LoggerProvider({\n resource: resourceFromAttributes(attributes),\n processors: [\n new BatchLogRecordProcessor(\n new OTLPLogExporter({\n url: `${posthog.config.api_host}/i/v1/logs?token=${posthog.config.token}`,\n // 1. Force the content type to text/plain to avoid OPTIONS preflight\n headers: {\n 'Content-Type': 'text/plain',\n },\n })\n ),\n ],\n })\n )\n}\n\nconst LOG_BODY_SIZE_LIMIT = 10000\nconst LOG_ATTRIBUTES_LIMIT = 50\n\ntype StringifyBudget = {\n remaining: number\n truncated: boolean\n}\n\nconst appendWithLimit = (parts: string[], text: string, budget: StringifyBudget): boolean => {\n if (budget.remaining <= 0) {\n budget.truncated = true\n return false\n }\n\n if (text.length <= budget.remaining) {\n parts.push(text)\n budget.remaining -= text.length\n return true\n }\n\n parts.push(text.slice(0, budget.remaining))\n budget.remaining = 0\n budget.truncated = true\n return false\n}\n\nconst stringifyStringWithLimit = (value: string, parts: string[], budget: StringifyBudget): boolean => {\n const serialized = JSON.stringify(value)\n if (serialized.length <= budget.remaining) {\n return appendWithLimit(parts, serialized, budget)\n }\n\n budget.truncated = true\n if (budget.remaining < 2) {\n return false\n }\n\n let low = 0\n let high = Math.min(value.length, budget.remaining - 2)\n while (low < high) {\n const mid = Math.ceil((low + high) / 2)\n if (JSON.stringify(value.slice(0, mid)).length <= budget.remaining) {\n low = mid\n } else {\n high = mid - 1\n }\n }\n\n return appendWithLimit(parts, JSON.stringify(value.slice(0, low)), budget)\n}\n\nconst isJSONSerializablePrimitive = (value: any): boolean =>\n typeof value !== 'undefined' &&\n typeof value !== 'function' &&\n typeof value !== 'symbol' &&\n typeof value !== 'bigint'\n\nconst isNumberOrBoolean = (value: any): boolean => {\n try {\n return isNumber(value) || isBoolean(value)\n } catch {\n return false\n }\n}\n\nconst stringifyValueWithLimit = (\n value: any,\n parts: string[],\n budget: StringifyBudget,\n seen: WeakSet<object>,\n inArray = false\n): boolean => {\n if (!isJSONSerializablePrimitive(value)) {\n return inArray ? appendWithLimit(parts, 'null', budget) : true\n }\n\n if (isNull(value) || isNumberOrBoolean(value)) {\n return appendWithLimit(parts, JSON.stringify(value), budget)\n }\n\n if (typeof value === 'string') {\n return stringifyStringWithLimit(value, parts, budget)\n }\n\n if (!isObject(value) && !isArray(value)) {\n return appendWithLimit(parts, JSON.stringify(value), budget)\n }\n\n if (seen.has(value)) {\n return stringifyStringWithLimit('[Circular]', parts, budget)\n }\n seen.add(value)\n\n try {\n const toJSON = (value as any).toJSON\n if (isFunction(toJSON)) {\n return stringifyValueWithLimit(toJSON.call(value), parts, budget, seen, inArray)\n }\n } catch {\n // If toJSON can't be read or throws, fall through to safe property enumeration.\n }\n\n try {\n const objectTag = Object.prototype.toString.call(value)\n if (objectTag === '[object String]') {\n return stringifyStringWithLimit(String(value.valueOf()), parts, budget)\n }\n\n if (objectTag === '[object Number]' || objectTag === '[object Boolean]') {\n return appendWithLimit(parts, JSON.stringify(value.valueOf()), budget)\n }\n } catch {\n // If Object.prototype.toString or valueOf throws, fall through to safe property enumeration.\n }\n\n if (value instanceof Error) {\n const errorObject: Record<string, any> = {}\n try {\n for (const key in value) {\n if (Object.prototype.hasOwnProperty.call(value, key)) {\n errorObject[key] = value[key as keyof Error]\n }\n }\n } catch {}\n try {\n errorObject.name = value.name\n } catch {}\n try {\n errorObject.message = value.message\n } catch {}\n try {\n errorObject.stack = value.stack\n } catch {}\n return stringifyValueWithLimit(errorObject, parts, budget, seen, inArray)\n }\n\n if (isArray(value)) {\n if (!appendWithLimit(parts, '[', budget)) {\n return false\n }\n for (let i = 0; i < value.length; i++) {\n if (i > 0 && !appendWithLimit(parts, ',', budget)) {\n return false\n }\n let item\n try {\n item = value[i]\n } catch {\n item = undefined\n }\n if (!stringifyValueWithLimit(item, parts, budget, seen, true)) {\n return false\n }\n }\n return appendWithLimit(parts, ']', budget)\n }\n\n if (!appendWithLimit(parts, '{', budget)) {\n return false\n }\n let isFirst = true\n try {\n for (const key in value) {\n if (!Object.prototype.hasOwnProperty.call(value, key)) {\n continue\n }\n if (budget.remaining <= 0) {\n budget.truncated = true\n return false\n }\n\n let propertyValue\n try {\n propertyValue = value[key]\n } catch {\n continue\n }\n if (!isJSONSerializablePrimitive(propertyValue)) {\n continue\n }\n\n const propertyPrefix = `${isFirst ? '' : ','}${JSON.stringify(key)}:`\n if (propertyPrefix.length >= budget.remaining) {\n budget.truncated = true\n return false\n }\n\n const partsBeforeProperty = parts.length\n const remainingBeforeProperty = budget.remaining\n const truncatedBeforeProperty = budget.truncated\n if (!appendWithLimit(parts, propertyPrefix, budget)) {\n return false\n }\n\n const partsBeforeValue = parts.length\n const serialized = stringifyValueWithLimit(propertyValue, parts, budget, seen, false)\n const truncatedAfterValue = budget.truncated\n if (parts.length === partsBeforeValue) {\n parts.length = partsBeforeProperty\n budget.remaining = remainingBeforeProperty\n budget.truncated = serialized ? truncatedBeforeProperty : truncatedAfterValue\n if (!serialized) {\n return false\n }\n continue\n }\n\n isFirst = false\n if (!serialized) {\n return false\n }\n }\n } catch {\n // we'll omit this object's properties considering we can't enumerate them\n }\n return appendWithLimit(parts, '}', budget)\n}\n\nconst stringifyArgsSafely = (args: any[], sizeLimit: number): { body: string; truncated: boolean } => {\n const parts: string[] = []\n const budget = { remaining: sizeLimit, truncated: false }\n for (let i = 0; i < args.length; i++) {\n if (i > 0 && !appendWithLimit(parts, ' ', budget)) {\n break\n }\n if (!stringifyValueWithLimit(args[i], parts, budget, new WeakSet<object>())) {\n break\n }\n }\n\n return {\n body: parts.join('') + (budget.truncated ? '...' : ''),\n truncated: budget.truncated,\n }\n}\n\n/**\n * Flattens a nested object into a single level dot-notation object.\n * By default limit to 200kB or 50 keys.\n */\nconst flattenObject = (\n obj: any,\n prefix = '',\n result = {} as Record<string, any>,\n keys_limit = LOG_ATTRIBUTES_LIMIT,\n size_limit = LOG_BODY_SIZE_LIMIT,\n seen = new WeakSet()\n) => {\n if (seen.has(obj)) {\n result[prefix || 'circular'] = '[Circular]'\n return result\n }\n seen.add(obj)\n\n try {\n for (const key in obj) {\n try {\n if (!Object.prototype.hasOwnProperty.call(obj, key)) {\n continue\n }\n const value = obj[key]\n const newKey = prefix ? `${prefix}.${key}` : key\n\n if (isObject(value)) {\n flattenObject(value, newKey, result, keys_limit, size_limit, seen)\n } else {\n keys_limit -= 1\n size_limit -= String(value).length\n size_limit -= newKey.length\n if (keys_limit <= 0 || size_limit <= 0) {\n result['attributes_truncated'] = true\n return\n } else {\n result[newKey] = value\n }\n }\n } catch {\n continue\n }\n }\n } catch {\n // we'll omit this object's properties considering we can't enumerate them\n }\n return result\n}\n\nconst SEVERITY_MAP = {\n log: 'INFO',\n warn: 'WARNING',\n error: 'ERROR',\n debug: 'DEBUG',\n info: 'INFO',\n}\n\nconst initializeLogs = (posthog: PostHog) => {\n setupOpenTelemetry(posthog)\n\n const logger = logs.getLogger('console')\n let attributes: Record<string, string> = {}\n if (posthog.sessionManager) {\n const { sessionStartTimestamp, lastActivityTimestamp } =\n posthog.sessionManager.checkAndGetSessionAndWindowId(true)\n attributes = {\n sessionStartTimestamp: sessionStartTimestamp.toString(),\n lastActivityTimestamp: lastActivityTimestamp.toString(),\n }\n }\n\n for (const level of ['debug', 'log', 'warn', 'error', 'info'] as ('debug' | 'log' | 'warn' | 'error' | 'info')[]) {\n const logWrapper =\n (originalConsoleLog: any) =>\n (...args: any[]) => {\n if (args.length > 0) {\n const { body, truncated } = stringifyArgsSafely(args, LOG_BODY_SIZE_LIMIT)\n const logAttributes = {\n ...attributes,\n ...(truncated ? { body_truncated: 'true' } : {}),\n }\n logger.emit({\n severityText: SEVERITY_MAP[level],\n body: body,\n attributes: {\n 'log.source': `console.${level}`,\n distinct_id: posthog.get_distinct_id(),\n 'location.href': assignableWindow.location.href,\n ...logAttributes,\n ...(isObject(args[0]) ? flattenObject(args[0]) : {}),\n },\n })\n originalConsoleLog.apply(assignableWindow.console, args)\n }\n }\n\n const originalConsoleLog = assignableWindow.console[level]\n assignableWindow.console[level] = logWrapper(originalConsoleLog)\n }\n}\n\nassignableWindow.__PosthogExtensions__ = assignableWindow.__PosthogExtensions__ || {}\nassignableWindow.__PosthogExtensions__.logs = { initializeLogs }\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "posthog-js",
3
- "version": "1.376.2",
3
+ "version": "1.376.3",
4
4
  "description": "Posthog-js allows you to automatically capture usage and send events to PostHog.",
5
5
  "repository": "https://github.com/PostHog/posthog-js",
6
6
  "author": "engineering@posthog.com",
@@ -32,8 +32,8 @@
32
32
  "preact": "^10.28.2",
33
33
  "query-selector-shadow-dom": "^1.0.1",
34
34
  "web-vitals": "^5.1.0",
35
- "@posthog/types": "1.376.2",
36
- "@posthog/core": "1.29.11"
35
+ "@posthog/types": "1.376.3",
36
+ "@posthog/core": "1.29.12"
37
37
  },
38
38
  "devDependencies": {
39
39
  "@babel/core": "^7.27.1",
@@ -97,11 +97,11 @@
97
97
  "tslib": "^2.5.0",
98
98
  "typescript": "5.8.2",
99
99
  "yargs": "^17.7.2",
100
- "@posthog-tooling/rollup-utils": "1.1.1",
101
- "@posthog/rrweb-plugin-console-record": "0.0.66",
102
100
  "@posthog/rrweb": "0.0.66",
101
+ "@posthog/rrweb-types": "0.0.61",
103
102
  "@posthog/rrweb-record": "0.0.66",
104
- "@posthog/rrweb-types": "0.0.61"
103
+ "@posthog/rrweb-plugin-console-record": "0.0.66",
104
+ "@posthog-tooling/rollup-utils": "1.1.1"
105
105
  },
106
106
  "browserslist": [
107
107
  "> 0.5%, last 2 versions, Firefox ESR, not dead"