Skip to content

Commit 3534080

Browse files
committed
wip
1 parent edc3a62 commit 3534080

File tree

6 files changed

+56
-47
lines changed

6 files changed

+56
-47
lines changed

packages/browser/src/browser/settings.ts

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import { CookieOptions, StorageSettings } from '../core/storage'
1111
import { UserOptions } from '../core/user'
1212
import { HighEntropyHint } from '../lib/client-hints/interfaces'
1313
import { IntegrationsOptions } from '@segment/analytics-core'
14-
import { DeliveryStrategy } from '../plugins/segmentio/shared-dispatcher'
14+
import { SegmentioSettings } from '../plugins/segmentio'
1515

1616
interface VersionSettings {
1717
version?: string
@@ -146,16 +146,6 @@ export interface CDNSettings {
146146
[key: string]: unknown
147147
}
148148

149-
export interface BrowserIntegrationsOptions extends IntegrationsOptions {
150-
'Segment.io'?: // subset of the SegmentSettings, since we don't want to expose all of them to the user
151-
| {
152-
apiHost?: string
153-
protocol?: 'http' | 'https'
154-
deliveryStrategy?: DeliveryStrategy
155-
}
156-
| boolean
157-
}
158-
159149
/**
160150
* These are the settings that are the first argument to the npm installed plugin.
161151
*/
@@ -191,6 +181,26 @@ export interface AnalyticsSettings {
191181
cdnURL?: string
192182
}
193183

184+
/**
185+
* Public Segment.io integration options.
186+
* We don't expose all the settings for Segment.io, only the ones that are overridable
187+
* (For example, we don't want `maybeBundledConfigIds to be exposed to the public API.)
188+
*/
189+
export type SegmentioIntegrationInitOptions = Pick<
190+
SegmentioSettings,
191+
'apiHost' | 'protocol' | 'deliveryStrategy'
192+
>
193+
194+
/**
195+
* Configurable Integrations Options -- these are the settings that are passed to the `analytics` instance.
196+
*/
197+
export interface IntegrationsInitOptions extends IntegrationsOptions {
198+
/**
199+
* Segment.io integration options -- note: Segment.io is not overridable OR disableable
200+
*/
201+
'Segment.io'?: SegmentioIntegrationInitOptions | boolean
202+
}
203+
194204
export interface InitOptions {
195205
/**
196206
* Disables storing any data on the client-side via cookies or localstorage.
@@ -210,7 +220,7 @@ export interface InitOptions {
210220
storage?: StorageSettings
211221
user?: UserOptions
212222
group?: UserOptions
213-
integrations?: BrowserIntegrationsOptions
223+
integrations?: IntegrationsInitOptions
214224
plan?: Plan
215225
retryQueue?: boolean
216226
obfuscate?: boolean

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ import {
5353
} from '../../plugins/segmentio'
5454
import {
5555
AnalyticsSettings,
56-
BrowserIntegrationsOptions,
56+
IntegrationsInitOptions,
5757
InitOptions,
5858
} from '../../browser/settings'
5959

@@ -134,7 +134,7 @@ export class Analytics
134134
private _universalStorage: UniversalStorage
135135

136136
initialized = false
137-
integrations: BrowserIntegrationsOptions
137+
integrations: IntegrationsInitOptions
138138
options: InitOptions
139139
queue: EventQueue
140140

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

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@ import { v4 as uuid } from '@lukeed/uuid'
22
import { ID, User } from '../user'
33
import { Options, EventProperties, Traits, SegmentEvent } from './interfaces'
44
import { addPageContext, PageContext } from '../page'
5-
import { CoreEventFactory } from '@segment/analytics-core'
6-
import type { BrowserIntegrationsOptions } from '../../browser/settings'
5+
import { CoreEventFactory, IntegrationsOptions } from '@segment/analytics-core'
76

87
export * from './interfaces'
98

@@ -48,10 +47,10 @@ export class EventFactory extends CoreEventFactory {
4847
event: string,
4948
properties?: EventProperties,
5049
options?: Options,
51-
globalIntegrations?: BrowserIntegrationsOptions,
50+
integrationsOptions?: IntegrationsOptions,
5251
pageCtx?: PageContext
5352
): SegmentEvent {
54-
const ev = super.track(event, properties, options, globalIntegrations)
53+
const ev = super.track(event, properties, options, integrationsOptions)
5554
addPageContext(ev, pageCtx)
5655
return ev
5756
}
@@ -61,15 +60,15 @@ export class EventFactory extends CoreEventFactory {
6160
page: string | null,
6261
properties?: EventProperties,
6362
options?: Options,
64-
globalIntegrations?: BrowserIntegrationsOptions,
63+
integrationsOptions?: IntegrationsOptions,
6564
pageCtx?: PageContext
6665
): SegmentEvent {
6766
const ev = super.page(
6867
category,
6968
page,
7069
properties,
7170
options,
72-
globalIntegrations
71+
integrationsOptions
7372
)
7473
addPageContext(ev, pageCtx)
7574
return ev
@@ -80,15 +79,15 @@ export class EventFactory extends CoreEventFactory {
8079
screen: string | null,
8180
properties?: EventProperties,
8281
options?: Options,
83-
globalIntegrations?: BrowserIntegrationsOptions,
82+
integrationsOptions?: IntegrationsOptions,
8483
pageCtx?: PageContext
8584
): SegmentEvent {
8685
const ev = super.screen(
8786
category,
8887
screen,
8988
properties,
9089
options,
91-
globalIntegrations
90+
integrationsOptions
9291
)
9392
addPageContext(ev, pageCtx)
9493
return ev
@@ -98,10 +97,10 @@ export class EventFactory extends CoreEventFactory {
9897
userId: ID,
9998
traits?: Traits,
10099
options?: Options,
101-
globalIntegrations?: BrowserIntegrationsOptions,
100+
integrationsOptions?: IntegrationsOptions,
102101
pageCtx?: PageContext
103102
): SegmentEvent {
104-
const ev = super.identify(userId, traits, options, globalIntegrations)
103+
const ev = super.identify(userId, traits, options, integrationsOptions)
105104
addPageContext(ev, pageCtx)
106105
return ev
107106
}
@@ -110,10 +109,10 @@ export class EventFactory extends CoreEventFactory {
110109
groupId: ID,
111110
traits?: Traits,
112111
options?: Options,
113-
globalIntegrations?: BrowserIntegrationsOptions,
112+
integrationsOptions?: IntegrationsOptions,
114113
pageCtx?: PageContext
115114
): SegmentEvent {
116-
const ev = super.group(groupId, traits, options, globalIntegrations)
115+
const ev = super.group(groupId, traits, options, integrationsOptions)
117116
addPageContext(ev, pageCtx)
118117
return ev
119118
}
@@ -122,10 +121,10 @@ export class EventFactory extends CoreEventFactory {
122121
to: string,
123122
from: string | null,
124123
options?: Options,
125-
globalIntegrations?: BrowserIntegrationsOptions,
124+
integrationsOptions?: IntegrationsOptions,
126125
pageCtx?: PageContext
127126
): SegmentEvent {
128-
const ev = super.alias(to, from, options, globalIntegrations)
127+
const ev = super.alias(to, from, options, integrationsOptions)
129128
addPageContext(ev, pageCtx)
130129
return ev
131130
}

packages/browser/src/plugins/ajs-destination/index.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ import {
3131
} from './utils'
3232
import { recordIntegrationMetric } from '../../core/stats/metric-helpers'
3333
import { createDeferred } from '@segment/analytics-generic-utils'
34-
import { BrowserIntegrationsOptions } from '../../browser/settings'
34+
import { IntegrationsInitOptions } from '../../browser/settings'
3535

3636
export type ClassType<T> = new (...args: unknown[]) => T
3737

@@ -333,7 +333,7 @@ export class LegacyDestination implements InternalPluginWithAddMiddleware {
333333
export function ajsDestinations(
334334
writeKey: string,
335335
settings: CDNSettings,
336-
globalIntegrations: BrowserIntegrationsOptions = {},
336+
integrations: IntegrationsInitOptions = {},
337337
options: InitOptions = {},
338338
routingMiddleware?: DestinationMiddlewareFunction,
339339
legacyIntegrationSources?: ClassicIntegrationSource[]
@@ -379,7 +379,7 @@ export function ajsDestinations(
379379
])
380380

381381
return Array.from(installableIntegrations)
382-
.filter((name) => !shouldSkipIntegration(name, globalIntegrations))
382+
.filter((name) => !shouldSkipIntegration(name, integrations))
383383
.map((name) => {
384384
const integrationSettings = remoteIntegrationsConfig[name]
385385
const version = resolveVersion(integrationSettings)

packages/browser/src/plugins/remote-loader/index.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import { Context, ContextCancelation } from '../../core/context'
1111
import { recordIntegrationMetric } from '../../core/stats/metric-helpers'
1212
import { Analytics, InitOptions } from '../../core/analytics'
1313
import { createDeferred } from '@segment/analytics-generic-utils'
14-
import { BrowserIntegrationsOptions } from '../../browser/settings'
14+
import { IntegrationsInitOptions } from '../../browser/settings'
1515

1616
export interface RemotePlugin {
1717
/** The name of the remote plugin */
@@ -198,7 +198,7 @@ function validate(pluginLike: unknown): pluginLike is Plugin[] {
198198
}
199199

200200
function isPluginDisabled(
201-
userIntegrations: BrowserIntegrationsOptions,
201+
userIntegrations: IntegrationsInitOptions,
202202
remotePlugin: RemotePlugin
203203
) {
204204
const creationNameEnabled = userIntegrations[remotePlugin.creationName]
@@ -260,7 +260,7 @@ async function loadPluginFactory(
260260

261261
export async function remoteLoader(
262262
settings: CDNSettings,
263-
userIntegrations: BrowserIntegrationsOptions,
263+
integrations: IntegrationsInitOptions,
264264
mergedIntegrations: Record<string, JSONObject>,
265265
options?: InitOptions,
266266
routingMiddleware?: DestinationMiddlewareFunction,
@@ -272,7 +272,7 @@ export async function remoteLoader(
272272

273273
const pluginPromises = (settings.remotePlugins ?? []).map(
274274
async (remotePlugin) => {
275-
if (isPluginDisabled(userIntegrations, remotePlugin)) return
275+
if (isPluginDisabled(integrations, remotePlugin)) return
276276

277277
try {
278278
const pluginFactory =

packages/core/src/events/index.ts

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ export abstract class CoreEventFactory {
6767
event: string,
6868
properties?: EventProperties,
6969
options?: CoreOptions,
70-
globalIntegrations?: IntegrationsOptions
70+
integrationOptions?: IntegrationsOptions
7171
) {
7272
this.settings.onEventMethodCall({ type: 'track', options })
7373
return this.normalize({
@@ -76,7 +76,7 @@ export abstract class CoreEventFactory {
7676
type: 'track',
7777
properties: properties ?? {}, // TODO: why is this not a shallow copy like everywhere else?
7878
options: { ...options },
79-
integrations: { ...globalIntegrations },
79+
integrations: { ...integrationOptions },
8080
})
8181
}
8282

@@ -85,14 +85,14 @@ export abstract class CoreEventFactory {
8585
page: string | null,
8686
properties?: EventProperties,
8787
options?: CoreOptions,
88-
globalIntegrations?: IntegrationsOptions
88+
integrationOptions?: IntegrationsOptions
8989
): CoreSegmentEvent {
9090
this.settings.onEventMethodCall({ type: 'page', options })
9191
const event: CoreSegmentEvent = {
9292
type: 'page',
9393
properties: { ...properties },
9494
options: { ...options },
95-
integrations: { ...globalIntegrations },
95+
integrations: { ...integrationOptions },
9696
}
9797

9898
if (category !== null) {
@@ -116,14 +116,14 @@ export abstract class CoreEventFactory {
116116
screen: string | null,
117117
properties?: EventProperties,
118118
options?: CoreOptions,
119-
globalIntegrations?: IntegrationsOptions
119+
integrationOptions?: IntegrationsOptions
120120
): CoreSegmentEvent {
121121
this.settings.onEventMethodCall({ type: 'screen', options })
122122
const event: CoreSegmentEvent = {
123123
type: 'screen',
124124
properties: { ...properties },
125125
options: { ...options },
126-
integrations: { ...globalIntegrations },
126+
integrations: { ...integrationOptions },
127127
}
128128

129129
if (category !== null) {
@@ -144,7 +144,7 @@ export abstract class CoreEventFactory {
144144
userId: ID,
145145
traits?: UserTraits,
146146
options?: CoreOptions,
147-
globalIntegrations?: IntegrationsOptions
147+
integrationsOptions?: IntegrationsOptions
148148
): CoreSegmentEvent {
149149
this.settings.onEventMethodCall({ type: 'identify', options })
150150
return this.normalize({
@@ -153,23 +153,23 @@ export abstract class CoreEventFactory {
153153
userId,
154154
traits: traits ?? {},
155155
options: { ...options },
156-
integrations: globalIntegrations,
156+
integrations: integrationsOptions,
157157
})
158158
}
159159

160160
group(
161161
groupId: ID,
162162
traits?: GroupTraits,
163163
options?: CoreOptions,
164-
globalIntegrations?: IntegrationsOptions
164+
integrationOptions?: IntegrationsOptions
165165
): CoreSegmentEvent {
166166
this.settings.onEventMethodCall({ type: 'group', options })
167167
return this.normalize({
168168
...this.baseEvent(),
169169
type: 'group',
170170
traits: traits ?? {},
171171
options: { ...options }, // this spreading is intentional
172-
integrations: { ...globalIntegrations }, //
172+
integrations: { ...integrationOptions }, //
173173
groupId,
174174
})
175175
}
@@ -178,14 +178,14 @@ export abstract class CoreEventFactory {
178178
to: string,
179179
from: string | null, // TODO: can we make this undefined?
180180
options?: CoreOptions,
181-
globalIntegrations?: IntegrationsOptions
181+
integrationOptions?: IntegrationsOptions
182182
): CoreSegmentEvent {
183183
this.settings.onEventMethodCall({ type: 'alias', options })
184184
const base: CoreSegmentEvent = {
185185
userId: to,
186186
type: 'alias',
187187
options: { ...options },
188-
integrations: { ...globalIntegrations },
188+
integrations: { ...integrationOptions },
189189
}
190190

191191
if (from !== null) {

0 commit comments

Comments
 (0)