@posthog/core 1.37.1 → 1.37.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"logs-utils.d.ts","sourceRoot":"","sources":["../../src/logs/logs-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,eAAe,EAEf,gBAAgB,EACjB,MAAM,gBAAgB,CAAA;AACvB,OAAO,KAAK,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAA;AAkBvE,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,gBAAgB,GAAG,gBAAgB,CAE7E;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CAErE;AAMD,wBAAgB,cAAc,CAAC,KAAK,EAAE,iBAAiB,GAAG,YAAY,CAiCrE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,GAAG,YAAY,EAAE,CAU3F;AAiBD;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,aAAa,GAAG,aAAa,CAmDvG;AAMD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,yBAAyB,EACjC,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACjB,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CASnC;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,aAAa,EAAE,EAC3B,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,EACrD,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,GACnB,eAAe,CAcjB"}
1
+ {"version":3,"file":"logs-utils.d.ts","sourceRoot":"","sources":["../../src/logs/logs-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,eAAe,EAEf,gBAAgB,EACjB,MAAM,gBAAgB,CAAA;AACvB,OAAO,KAAK,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAA;AAkBvE,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,gBAAgB,GAAG,gBAAgB,CAE7E;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CAErE;AAMD,wBAAgB,cAAc,CAAC,KAAK,EAAE,iBAAiB,GAAG,YAAY,CAiCrE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,GAAG,YAAY,EAAE,CAU3F;AAiBD;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,aAAa,GAAG,aAAa,CA4DvG;AAMD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,yBAAyB,EACjC,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACjB,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CASnC;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,aAAa,EAAE,EAC3B,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,EACrD,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,GACnB,eAAe,CAcjB"}
@@ -120,6 +120,9 @@ function buildOtlpLogRecord(options, sdkContext) {
120
120
  const autoAttributes = {};
121
121
  if (sdkContext.distinctId) autoAttributes.posthogDistinctId = sdkContext.distinctId;
122
122
  if (sdkContext.sessionId) autoAttributes.sessionId = sdkContext.sessionId;
123
+ if (sdkContext.windowId) autoAttributes['window.id'] = sdkContext.windowId;
124
+ if (!(0, index_js_namespaceObject.isNullish)(sdkContext.sessionStartTimestamp)) autoAttributes.sessionStartTimestamp = String(sdkContext.sessionStartTimestamp);
125
+ if (!(0, index_js_namespaceObject.isNullish)(sdkContext.lastActivityTimestamp)) autoAttributes.lastActivityTimestamp = String(sdkContext.lastActivityTimestamp);
123
126
  if (sdkContext.currentUrl) autoAttributes['url.full'] = sdkContext.currentUrl;
124
127
  if (sdkContext.screenName) autoAttributes['screen.name'] = sdkContext.screenName;
125
128
  if (sdkContext.appState) autoAttributes['app.state'] = sdkContext.appState;
@@ -1,4 +1,4 @@
1
- import { isArray, isBoolean, isNull, isUndefined } from "../utils/index.mjs";
1
+ import { isArray, isBoolean, isNull, isNullish, isUndefined } from "../utils/index.mjs";
2
2
  const OTLP_SEVERITY_MAP = {
3
3
  trace: {
4
4
  text: 'TRACE',
@@ -86,6 +86,9 @@ function buildOtlpLogRecord(options, sdkContext) {
86
86
  const autoAttributes = {};
87
87
  if (sdkContext.distinctId) autoAttributes.posthogDistinctId = sdkContext.distinctId;
88
88
  if (sdkContext.sessionId) autoAttributes.sessionId = sdkContext.sessionId;
89
+ if (sdkContext.windowId) autoAttributes['window.id'] = sdkContext.windowId;
90
+ if (!isNullish(sdkContext.sessionStartTimestamp)) autoAttributes.sessionStartTimestamp = String(sdkContext.sessionStartTimestamp);
91
+ if (!isNullish(sdkContext.lastActivityTimestamp)) autoAttributes.lastActivityTimestamp = String(sdkContext.lastActivityTimestamp);
89
92
  if (sdkContext.currentUrl) autoAttributes['url.full'] = sdkContext.currentUrl;
90
93
  if (sdkContext.screenName) autoAttributes['screen.name'] = sdkContext.screenName;
91
94
  if (sdkContext.appState) autoAttributes['app.state'] = sdkContext.appState;
@@ -10,6 +10,12 @@ export type { LogSeverityLevel, OtlpSeverityText, OtlpSeverityEntry, LogAttribut
10
10
  export interface LogSdkContext {
11
11
  distinctId?: string;
12
12
  sessionId?: string;
13
+ /** Web-only — current window id */
14
+ windowId?: string;
15
+ /** Web-only — ms epoch when the current session started */
16
+ sessionStartTimestamp?: number;
17
+ /** Web-only — ms epoch of the most recent session activity */
18
+ lastActivityTimestamp?: number;
13
19
  /** Web-only — current page URL */
14
20
  currentUrl?: string;
15
21
  /** Mobile-only — current screen / view name */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/logs/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/logs/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@posthog/core",
3
- "version": "1.37.1",
3
+ "version": "1.37.2",
4
4
  "bugs": {
5
5
  "url": "https://github.com/PostHog/posthog-js/issues"
6
6
  },
@@ -70,7 +70,7 @@
70
70
  }
71
71
  },
72
72
  "dependencies": {
73
- "@posthog/types": "^1.391.0"
73
+ "@posthog/types": "^1.391.1"
74
74
  },
75
75
  "devDependencies": {
76
76
  "@rslib/core": "0.10.6",
@@ -12,6 +12,9 @@ import {
12
12
  const browserSdkContext: LogSdkContext = {
13
13
  distinctId: 'user-123',
14
14
  sessionId: 'session-456',
15
+ windowId: 'window-789',
16
+ sessionStartTimestamp: 1672567200000,
17
+ lastActivityTimestamp: 1672569000000,
15
18
  currentUrl: 'https://example.com/page',
16
19
  activeFeatureFlags: ['flag-a', 'flag-b'],
17
20
  }
@@ -176,6 +179,9 @@ describe('logs-utils', () => {
176
179
  const attrs = Object.fromEntries(record.attributes.map((a) => [a.key, a.value]))
177
180
  expect(attrs['posthogDistinctId']).toEqual({ stringValue: 'user-123' })
178
181
  expect(attrs['sessionId']).toEqual({ stringValue: 'session-456' })
182
+ expect(attrs['window.id']).toEqual({ stringValue: 'window-789' })
183
+ expect(attrs['sessionStartTimestamp']).toEqual({ stringValue: '1672567200000' })
184
+ expect(attrs['lastActivityTimestamp']).toEqual({ stringValue: '1672569000000' })
179
185
  expect(attrs['url.full']).toEqual({ stringValue: 'https://example.com/page' })
180
186
  expect(attrs['feature_flags']).toEqual({
181
187
  arrayValue: { values: [{ stringValue: 'flag-a' }, { stringValue: 'flag-b' }] },
@@ -185,6 +191,20 @@ describe('logs-utils', () => {
185
191
  expect(attrs['app.state']).toBeUndefined()
186
192
  })
187
193
 
194
+ it.each(['window.id', 'sessionStartTimestamp', 'lastActivityTimestamp'])(
195
+ 'omits %s when absent from the SDK context',
196
+ (attribute) => {
197
+ const record = buildOtlpLogRecord({ body: 'test' }, minimalSdkContext)
198
+ expect(record.attributes.map((a) => a.key)).not.toContain(attribute)
199
+ }
200
+ )
201
+
202
+ it('preserves a sessionStartTimestamp of 0 (epoch)', () => {
203
+ const record = buildOtlpLogRecord({ body: 'test' }, { ...minimalSdkContext, sessionStartTimestamp: 0 })
204
+ const attrs = Object.fromEntries(record.attributes.map((a) => [a.key, a.value]))
205
+ expect(attrs['sessionStartTimestamp']).toEqual({ stringValue: '0' })
206
+ })
207
+
188
208
  it('auto-populates mobile SDK context (screenName + appState)', () => {
189
209
  const record = buildOtlpLogRecord({ body: 'test' }, mobileSdkContext)
190
210
  const attrs = Object.fromEntries(record.attributes.map((a) => [a.key, a.value]))
@@ -10,7 +10,7 @@ import type {
10
10
  OtlpSeverityText,
11
11
  } from '@posthog/types'
12
12
  import type { LogSdkContext, ResolvedPostHogLogsConfig } from './types'
13
- import { isArray, isBoolean, isNull, isUndefined } from '../utils'
13
+ import { isArray, isBoolean, isNull, isNullish, isUndefined } from '../utils'
14
14
 
15
15
  // ============================================================================
16
16
  // Severity mapping
@@ -124,6 +124,15 @@ export function buildOtlpLogRecord(options: CaptureLogOptions, sdkContext: LogSd
124
124
  if (sdkContext.sessionId) {
125
125
  autoAttributes.sessionId = sdkContext.sessionId
126
126
  }
127
+ if (sdkContext.windowId) {
128
+ autoAttributes['window.id'] = sdkContext.windowId
129
+ }
130
+ if (!isNullish(sdkContext.sessionStartTimestamp)) {
131
+ autoAttributes.sessionStartTimestamp = String(sdkContext.sessionStartTimestamp)
132
+ }
133
+ if (!isNullish(sdkContext.lastActivityTimestamp)) {
134
+ autoAttributes.lastActivityTimestamp = String(sdkContext.lastActivityTimestamp)
135
+ }
127
136
  if (sdkContext.currentUrl) {
128
137
  autoAttributes['url.full'] = sdkContext.currentUrl
129
138
  }
package/src/logs/types.ts CHANGED
@@ -25,6 +25,12 @@ export type {
25
25
  export interface LogSdkContext {
26
26
  distinctId?: string
27
27
  sessionId?: string
28
+ /** Web-only — current window id */
29
+ windowId?: string
30
+ /** Web-only — ms epoch when the current session started */
31
+ sessionStartTimestamp?: number
32
+ /** Web-only — ms epoch of the most recent session activity */
33
+ lastActivityTimestamp?: number
28
34
  /** Web-only — current page URL */
29
35
  currentUrl?: string
30
36
  /** Mobile-only — current screen / view name */