-
Notifications
You must be signed in to change notification settings - Fork 178
Expand file tree
/
Copy pathtransportConfiguration.ts
More file actions
82 lines (71 loc) · 2.84 KB
/
transportConfiguration.ts
File metadata and controls
82 lines (71 loc) · 2.84 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
import type { Site } from '../intakeSites'
import { INTAKE_SITE_US1, INTAKE_URL_PARAMETERS } from '../intakeSites'
import type { InitConfiguration } from './configuration'
import type { EndpointBuilder } from './endpointBuilder'
import { createEndpointBuilder } from './endpointBuilder'
export interface TransportConfiguration {
logsEndpointBuilder: EndpointBuilder
rumEndpointBuilder: EndpointBuilder
sessionReplayEndpointBuilder: EndpointBuilder
profilingEndpointBuilder: EndpointBuilder
exposuresEndpointBuilder: EndpointBuilder
flagEvaluationEndpointBuilder: EndpointBuilder
datacenter?: string | undefined
replica?: ReplicaConfiguration
clientToken: string
site: Site
source: 'browser' | 'flutter' | 'unity'
}
export interface ReplicaConfiguration {
logsEndpointBuilder: EndpointBuilder
rumEndpointBuilder: EndpointBuilder
}
export function computeTransportConfiguration(initConfiguration: InitConfiguration): TransportConfiguration {
const site = initConfiguration.site || INTAKE_SITE_US1
const source = validateSource(initConfiguration.source)
const endpointBuilders = computeEndpointBuilders({ ...initConfiguration, site, source })
const replicaConfiguration = computeReplicaConfiguration({ ...initConfiguration, site, source })
return {
clientToken: initConfiguration.clientToken,
replica: replicaConfiguration,
site,
source,
...endpointBuilders,
}
}
function validateSource(source: string | undefined) {
if (source === 'flutter' || source === 'unity') {
return source
}
return 'browser'
}
function computeEndpointBuilders(initConfiguration: InitConfiguration) {
return {
logsEndpointBuilder: createEndpointBuilder(initConfiguration, 'logs'),
rumEndpointBuilder: createEndpointBuilder(initConfiguration, 'rum'),
profilingEndpointBuilder: createEndpointBuilder(initConfiguration, 'profile'),
sessionReplayEndpointBuilder: createEndpointBuilder(initConfiguration, 'replay'),
exposuresEndpointBuilder: createEndpointBuilder(initConfiguration, 'exposures'),
flagEvaluationEndpointBuilder: createEndpointBuilder(initConfiguration, 'flagevaluation'),
}
}
function computeReplicaConfiguration(initConfiguration: InitConfiguration): ReplicaConfiguration | undefined {
if (!initConfiguration.replica) {
return
}
const replicaConfiguration: InitConfiguration = {
...initConfiguration,
site: INTAKE_SITE_US1,
clientToken: initConfiguration.replica.clientToken,
}
return {
logsEndpointBuilder: createEndpointBuilder(replicaConfiguration, 'logs'),
rumEndpointBuilder: createEndpointBuilder(replicaConfiguration, 'rum', [
`application.id=${initConfiguration.replica.applicationId}`,
]),
}
}
export function isIntakeUrl(url: string): boolean {
// check if tags is present in the query string
return INTAKE_URL_PARAMETERS.every((param) => url.includes(param))
}