-
Notifications
You must be signed in to change notification settings - Fork 2
/
ApiManager.ts
59 lines (55 loc) · 1.67 KB
/
ApiManager.ts
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
import {
BASE_API_URL,
EXPOSE_ALL_KEYS,
HEADER_APPLICATION_JSON,
HEADER_CONTENT_TYPE,
HEADER_X_API_KEY,
HEADER_X_SDK_CLIENT,
HEADER_X_SDK_VERSION,
PROCESS_GET_CAMPAIGNS,
SDK_LANGUAGE,
SDK_VERSION,
SEND_CONTEXT_EVENT,
URL_CAMPAIGNS
} from '../enum/index.ts'
import { DecisionManager } from './DecisionManager.ts'
import { CampaignDTO } from './api/models.ts'
import { logError } from '../utils/utils.ts'
import { VisitorAbstract } from '../visitor/VisitorAbstract.ts'
export class ApiManager extends DecisionManager {
public async getCampaignsAsync (visitor: VisitorAbstract): Promise<CampaignDTO[]|null> {
const headers = {
[HEADER_X_API_KEY]: `${this.config.apiKey}`,
[HEADER_X_SDK_CLIENT]: SDK_LANGUAGE.name,
[HEADER_X_SDK_VERSION]: SDK_VERSION,
[HEADER_CONTENT_TYPE]: HEADER_APPLICATION_JSON
}
const postData = {
visitorId: visitor.visitorId,
anonymousId: visitor.anonymousId,
trigger_hit: false,
context: visitor.context
}
let url = `${this.config.decisionApiUrl || BASE_API_URL}${this.config.envId}${URL_CAMPAIGNS}?${EXPOSE_ALL_KEYS}=true`
if (!visitor.hasConsented) {
url += `&${SEND_CONTEXT_EVENT}=false`
}
return this._httpClient.postAsync(url, {
headers,
timeout: this.config.timeout,
body: postData
})
.then(data => {
this.panic = !!data.body.panic
let response: CampaignDTO[]|null = null
if (data.body.campaigns) {
response = data.body.campaigns
}
return response
})
.catch(error => {
logError(this.config, error.message || error, PROCESS_GET_CAMPAIGNS)
return null
})
}
}