Skip to content

Commit fe9aaf2

Browse files
committed
1 parent 812c5a5 commit fe9aaf2

File tree

7 files changed

+43
-71
lines changed

7 files changed

+43
-71
lines changed

.changeset/purple-bobcats-wave.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@segment/analytics-next': patch
3+
---
4+
5+
Simplify interfacing with Inspector

packages/browser/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
"size-limit": [
4242
{
4343
"path": "dist/umd/index.js",
44-
"limit": "25.8 KB"
44+
"limit": "25.7 KB"
4545
}
4646
],
4747
"dependencies": {
@@ -58,7 +58,7 @@
5858
"unfetch": "^4.1.0"
5959
},
6060
"devDependencies": {
61-
"@segment/inspector-core": "^1.0.0",
61+
"@segment/inspector-webext": "^1.1.0",
6262
"@size-limit/preset-big-lib": "^7.0.8",
6363
"@types/flat": "^5.0.1",
6464
"@types/fs-extra": "^9.0.2",

packages/browser/src/core/analytics/index.ts

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -115,13 +115,6 @@ export class Analytics extends Emitter {
115115
this.integrations = options?.integrations ?? {}
116116
this.options = options ?? {}
117117

118-
inspectorHost.start({
119-
user: {
120-
id: this.user().id() || null,
121-
traits: this.user().traits(),
122-
},
123-
})
124-
125118
autoBind(this)
126119
}
127120

@@ -329,12 +322,7 @@ export class Analytics extends Emitter {
329322
): Promise<DispatchedEvent> {
330323
const ctx = new Context(event)
331324

332-
inspectorHost.trace({
333-
stage: 'triggered',
334-
id: ctx.id,
335-
event: event as any,
336-
timestamp: new Date().toISOString(),
337-
})
325+
inspectorHost.triggered?.(ctx as any)
338326

339327
if (isOffline() && !this.options.retryQueue) {
340328
return ctx

packages/browser/src/core/inspector/__tests__/index.test.ts

Lines changed: 10 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -4,35 +4,26 @@ let analytics: Analytics
44

55
describe('Inspector interface', () => {
66
beforeEach(() => {
7-
window.__SEGMENT_INSPECTOR__ = {
8-
start: jest.fn(),
9-
trace: jest.fn(),
10-
}
7+
Object.assign((window.__SEGMENT_INSPECTOR__ ??= {}), {
8+
triggered: jest.fn(),
9+
enriched: jest.fn(),
10+
delivered: jest.fn(),
11+
})
1112

1213
analytics = new Analytics({
1314
writeKey: 'abc',
1415
})
1516
})
1617

17-
it('accepts and starts up an inspector client trying to connect', () => {
18-
expect(window.__SEGMENT_INSPECTOR__?.start).toHaveBeenCalledTimes(1)
19-
})
20-
2118
it('notifies the connected inspector client about each event API call and delivery', async () => {
22-
expect(window.__SEGMENT_INSPECTOR__?.trace).not.toHaveBeenCalled()
23-
24-
const timestampMatcher = expect.stringMatching(
25-
/\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/
26-
)
2719
const deliveryPromise = analytics.track('Test event').catch(() => {})
2820

29-
// expect 2 calls, triggered report, followed enriched report
30-
expect(window.__SEGMENT_INSPECTOR__?.trace).toHaveBeenCalledTimes(2)
21+
expect(window.__SEGMENT_INSPECTOR__?.triggered).toHaveBeenCalledTimes(1)
22+
expect(window.__SEGMENT_INSPECTOR__?.enriched).toHaveBeenCalledTimes(1)
3123

32-
expect(window.__SEGMENT_INSPECTOR__?.trace).toHaveBeenCalledWith(
24+
expect(window.__SEGMENT_INSPECTOR__?.triggered).toHaveBeenCalledWith(
3325
expect.objectContaining({
34-
stage: 'triggered',
35-
timestamp: timestampMatcher,
26+
id: expect.any(String),
3627
event: expect.objectContaining({
3728
event: 'Test event',
3829
type: 'track',
@@ -42,18 +33,6 @@ describe('Inspector interface', () => {
4233

4334
await deliveryPromise
4435

45-
// triggered -> enriched -> delivered
46-
expect(window.__SEGMENT_INSPECTOR__?.trace).toHaveBeenCalledTimes(3)
47-
48-
expect(window.__SEGMENT_INSPECTOR__?.trace).toHaveBeenCalledWith(
49-
expect.objectContaining({
50-
stage: 'delivered',
51-
timestamp: timestampMatcher,
52-
event: expect.objectContaining({
53-
event: 'Test event',
54-
type: 'track',
55-
}),
56-
})
57-
)
36+
expect(window.__SEGMENT_INSPECTOR__?.delivered).toHaveBeenCalledTimes(1)
5837
})
5938
})
Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
1-
import type { Inspector } from '@segment/inspector-core'
1+
import type { InspectBroker } from '@segment/inspector-webext'
22
import { getGlobal } from '../../lib/get-global'
33

44
declare global {
55
interface Window {
6-
__SEGMENT_INSPECTOR__?: Inspector
6+
__SEGMENT_INSPECTOR__: Partial<InspectBroker>
77
}
88
}
99

1010
const env = getGlobal()
1111

12-
export const inspectorHost: Inspector = {
13-
start: (...args) => (env as any)?.['__SEGMENT_INSPECTOR__']?.start(...args),
14-
trace: (...args) => (env as any)?.['__SEGMENT_INSPECTOR__']?.trace(...args),
15-
}
12+
// The code below assumes the inspector extension will use Object.assign
13+
// to add the inspect interface on to this object reference (unless the
14+
// extension code ran first and has already set up the variable)
15+
export const inspectorHost: Partial<InspectBroker> = ((env as any)[
16+
'__SEGMENT_INSPECTOR__'
17+
] ??= {})

packages/browser/src/core/queue/event-queue.ts

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -266,12 +266,7 @@ export class EventQueue extends Emitter {
266266
}
267267
}
268268

269-
inspectorHost.trace({
270-
stage: 'enriched',
271-
id: ctx.id,
272-
event: ctx.event as any,
273-
timestamp: new Date().toISOString(),
274-
})
269+
inspectorHost.enriched?.(ctx as any)
275270

276271
// Enrichment and before plugins can re-arrange the deny list dynamically
277272
// so we need to pluck them at the end
@@ -290,14 +285,8 @@ export class EventQueue extends Emitter {
290285

291286
ctx.stats.increment('message_delivered')
292287

293-
inspectorHost.trace({
294-
stage: 'delivered',
295-
id: ctx.id,
296-
event: ctx.event as any,
297-
timestamp: new Date().toISOString(),
298-
// FIXME: Resolve browsers destinations that the event was sent to
299-
destinations: ['segment.io'],
300-
})
288+
// FIXME: Resolve browsers destinations that the event was sent to
289+
inspectorHost.delivered?.(ctx as any, ['segment.io'])
301290

302291
const afterCalls = after.map((after) => attempt(ctx, after))
303292
await Promise.all(afterCalls)

yarn.lock

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1500,7 +1500,7 @@ __metadata:
15001500
"@segment/analytics-core": 1.0.0
15011501
"@segment/analytics.js-video-plugins": ^0.2.1
15021502
"@segment/facade": ^3.4.9
1503-
"@segment/inspector-core": ^1.0.0
1503+
"@segment/inspector-webext": ^1.1.0
15041504
"@segment/tsub": ^0.1.12
15051505
"@size-limit/preset-big-lib": ^7.0.8
15061506
"@types/flat": ^5.0.1
@@ -1580,10 +1580,19 @@ __metadata:
15801580
languageName: node
15811581
linkType: hard
15821582

1583-
"@segment/inspector-core@npm:^1.0.0":
1584-
version: 1.0.0
1585-
resolution: "@segment/inspector-core@npm:1.0.0"
1586-
checksum: 4c04303301f54cab9fe8d0502fe0a755ad21206b8917ebbfb5edb8be5888cd7ed4dc948cf34e52b957863de44f9152551d78571ba12c00106f573fdb2136f4ef
1583+
"@segment/inspector-core@npm:^1.1.0":
1584+
version: 1.1.0
1585+
resolution: "@segment/inspector-core@npm:1.1.0"
1586+
checksum: 447733b76b9ab645c6ec1d765d907d92def3e8c1e20ded6c06df3406d98d7f63baac1fecd552ebd4afdf8f8bd53c51fb9266c48fe3f18a2f560af46633729a7c
1587+
languageName: node
1588+
linkType: hard
1589+
1590+
"@segment/inspector-webext@npm:^1.1.0":
1591+
version: 1.1.0
1592+
resolution: "@segment/inspector-webext@npm:1.1.0"
1593+
dependencies:
1594+
"@segment/inspector-core": ^1.1.0
1595+
checksum: 65aacfdb535c10d0954150bb74e54c1cd139ccae8f21d110399bd5e1b6ccee562cdd3d3966228de8d2e3433d169f727d1b31f6a6d59b010e3b8dbb3f1f27d8d3
15871596
languageName: node
15881597
linkType: hard
15891598

0 commit comments

Comments
 (0)