@rudderstack/integrations-lib 0.2.57 → 0.2.58
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.
- package/build/index.d.ts +1 -0
- package/build/index.d.ts.map +1 -1
- package/build/index.js +2 -1
- package/build/mock_utils/index.d.ts +2 -0
- package/build/mock_utils/index.d.ts.map +1 -0
- package/build/mock_utils/index.js +9 -0
- package/build/network/clients/axios_client.d.ts +6 -5
- package/build/network/clients/axios_client.d.ts.map +1 -1
- package/build/network/clients/axios_client.js +75 -40
- package/build/network/clients/types.d.ts +93 -5
- package/build/network/clients/types.d.ts.map +1 -1
- package/build/network/clients/types.js +1 -1
- package/build/network/factory.d.ts +12 -2
- package/build/network/factory.d.ts.map +1 -1
- package/build/network/factory.js +24 -1
- package/build/sdks/common/base-sdk.d.ts +64 -0
- package/build/sdks/common/base-sdk.d.ts.map +1 -0
- package/build/sdks/common/base-sdk.js +182 -0
- package/build/sdks/common/index.d.ts +3 -0
- package/build/sdks/common/index.d.ts.map +1 -0
- package/build/sdks/common/index.js +7 -0
- package/build/sdks/common/types.d.ts +13 -0
- package/build/sdks/common/types.d.ts.map +1 -0
- package/build/sdks/common/types.js +3 -0
- package/build/sdks/criteoAudience/criteoAudience.d.ts +11 -39
- package/build/sdks/criteoAudience/criteoAudience.d.ts.map +1 -1
- package/build/sdks/criteoAudience/criteoAudience.js +33 -69
- package/build/sdks/criteoAudience/types.d.ts +3 -0
- package/build/sdks/criteoAudience/types.d.ts.map +1 -1
- package/build/sdks/criteoAudience/types.js +1 -1
- package/build/sdks/customerio_audience/index.d.ts +11 -15
- package/build/sdks/customerio_audience/index.d.ts.map +1 -1
- package/build/sdks/customerio_audience/index.js +23 -34
- package/build/sdks/customerio_audience/type.d.ts +3 -0
- package/build/sdks/customerio_audience/type.d.ts.map +1 -1
- package/build/sdks/customerio_audience/type.js +1 -1
- package/build/sdks/googleAdsRestAPI/googleAds.d.ts +16 -17
- package/build/sdks/googleAdsRestAPI/googleAds.d.ts.map +1 -1
- package/build/sdks/googleAdsRestAPI/googleAds.js +44 -37
- package/build/sdks/googleAdsRestAPI/types.d.ts +3 -0
- package/build/sdks/googleAdsRestAPI/types.d.ts.map +1 -1
- package/build/sdks/googleAdsRestAPI/types.js +1 -1
- package/build/sdks/index.d.ts +1 -0
- package/build/sdks/index.d.ts.map +1 -1
- package/build/sdks/index.js +5 -1
- package/build/sdks/sfmc/index.d.ts +1 -1
- package/build/sdks/sfmc/index.d.ts.map +1 -1
- package/build/sdks/sfmc/index.js +4 -3
- package/build/sdks/zoho/types.d.ts +3 -0
- package/build/sdks/zoho/types.d.ts.map +1 -1
- package/build/sdks/zoho/types.js +1 -1
- package/build/sdks/zoho/zoho.d.ts +13 -17
- package/build/sdks/zoho/zoho.d.ts.map +1 -1
- package/build/sdks/zoho/zoho.js +44 -51
- package/mock/index.d.ts +1 -1
- package/mock/index.d.ts.map +1 -1
- package/mock/index.js +6 -15
- package/package.json +1 -1
- package/mock/axios_client_mock_util.d.ts +0 -3
- package/mock/axios_client_mock_util.d.ts.map +0 -1
- package/mock/axios_client_mock_util.js +0 -10
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-sdk.d.ts","sourceRoot":"","sources":["../../../src/sdks/common/base-sdk.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,UAAU,EAGV,QAAQ,EACT,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAGxC,YAAY,EAAE,aAAa,EAAE,CAAC;AAG9B;;;;GAIG;AACH,8BAAsB,OAAO,CAAC,WAAW,EAAE,OAAO,SAAS,aAAa,GAAG,aAAa;IACtF,SAAS,CAAC,UAAU,EAAE,WAAW,CAAC;IAElC,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC;IAEjC,SAAS,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;gBAEf,UAAU,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,OAAO;IAQrD,kBAAkB,CAAC,WAAW,EAAE,OAAO,GAAG,IAAI;IAM9C,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAG5D,SAAS,CAAC,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAM9C,kBAAkB,CAAC,SAAS,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,OAAO;IAK5D,SAAS,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC;IAExC;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;IAoB5B;;OAEG;cACa,cAAc,CAAC,CAAC,EAC9B,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,EACnD,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,OAAO,EACd,QAAQ,CAAC,EAAE,QAAQ,GAClB,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAmB1B;;;OAGG;IACH,SAAS,CAAC,sCAAsC,CAAC,CAAC,EAChD,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,EACnD,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,OAAO,EACd,QAAQ,CAAC,EAAE,QAAQ,EACnB,UAAU,SAAI,GACb,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAI1B;;OAEG;YACW,8BAA8B;IA+E5C;;;OAGG;IACH,OAAO,CAAC,eAAe;IA6BvB;;OAEG;IACH,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAIhF;;OAEG;IACH,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAIhG;;OAEG;IACH,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAI/F;;OAEG;IACH,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAInF;;OAEG;IACH,SAAS,CAAC,KAAK,CAAC,CAAC,EACf,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,OAAO,EACb,QAAQ,CAAC,EAAE,QAAQ,GAClB,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;CAG3B"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BaseSDK = void 0;
|
|
4
|
+
const factory_1 = require("../../network/factory");
|
|
5
|
+
// Note: StatTags is exported from src/network/index.ts to avoid duplicate exports
|
|
6
|
+
/**
|
|
7
|
+
* Abstract base class for all SDKs
|
|
8
|
+
* Provides common functionality including HTTP client management, request execution,
|
|
9
|
+
* retry logic, and enhanced features when configured
|
|
10
|
+
*/
|
|
11
|
+
class BaseSDK {
|
|
12
|
+
constructor(authObject, config) {
|
|
13
|
+
this.validateAuthObject(authObject);
|
|
14
|
+
this.authObject = authObject;
|
|
15
|
+
this.config = config;
|
|
16
|
+
this.httpClient = this.initializeHttpClient();
|
|
17
|
+
}
|
|
18
|
+
// eslint-disable-next-line class-methods-use-this
|
|
19
|
+
validateAuthObject(_authObject) {
|
|
20
|
+
// Default implementation does nothing - override if validation is needed
|
|
21
|
+
// Most SDKs will want to override this to validate required fields
|
|
22
|
+
}
|
|
23
|
+
// eslint-disable-next-line class-methods-use-this
|
|
24
|
+
getHeaders() {
|
|
25
|
+
// Default implementation returns empty headers - override to add headers
|
|
26
|
+
return {};
|
|
27
|
+
}
|
|
28
|
+
// eslint-disable-next-line class-methods-use-this
|
|
29
|
+
shouldRetryOnError(_response) {
|
|
30
|
+
// Default implementation does not retry - override if retry logic is needed
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Initialize HTTP client based on configuration
|
|
35
|
+
* Uses enhanced client with metrics/logging if config provided, otherwise basic client
|
|
36
|
+
* No baseURL is set - SDKs will use buildRequestUrl() to construct full URLs
|
|
37
|
+
*/
|
|
38
|
+
initializeHttpClient() {
|
|
39
|
+
// If enhanced config provided, use HTTP client with metrics/logging
|
|
40
|
+
if (this.config?.httpClient) {
|
|
41
|
+
const { logger, statsClient, defaultStatTags } = this.config.httpClient;
|
|
42
|
+
if (logger !== undefined || statsClient !== undefined) {
|
|
43
|
+
// Use enhanced HTTP client with metrics and logging
|
|
44
|
+
return factory_1.HttpClientFactory.getHttpClientWithMetrics(factory_1.ClientNames.Axios, logger, statsClient, defaultStatTags);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
// Fallback to basic HTTP client (backward compatibility)
|
|
48
|
+
return factory_1.HttpClientFactory.getHttpClient(factory_1.ClientNames.Axios);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Execute HTTP request - single attempt, no retry logic
|
|
52
|
+
*/
|
|
53
|
+
async executeRequest(method, endpoint, data, statTags) {
|
|
54
|
+
try {
|
|
55
|
+
const headers = this.getHeaders();
|
|
56
|
+
const requestConfig = {
|
|
57
|
+
headers,
|
|
58
|
+
};
|
|
59
|
+
const fullUrl = this.buildRequestUrl(endpoint);
|
|
60
|
+
return await this.makeHttpRequest(method, fullUrl, data, requestConfig, statTags);
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
return {
|
|
64
|
+
type: 'client-error',
|
|
65
|
+
statusCode: 0,
|
|
66
|
+
message: error instanceof Error ? error.message : 'Unknown error',
|
|
67
|
+
responseBody: error,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Execute HTTP request with configurable token refresh attempts
|
|
73
|
+
* For SDKs that need more control over retry behavior
|
|
74
|
+
*/
|
|
75
|
+
executeRequestWithTokenRefreshAttempts(method, endpoint, data, statTags, maxRetries = 1) {
|
|
76
|
+
return this.executeRequestWithRetryAttempt(method, endpoint, maxRetries, 0, data, statTags);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Internal recursive method for retry attempts
|
|
80
|
+
*/
|
|
81
|
+
async executeRequestWithRetryAttempt(method, endpoint, maxRetries, currentAttempt, data, statTags) {
|
|
82
|
+
try {
|
|
83
|
+
const headers = this.getHeaders();
|
|
84
|
+
const requestConfig = {
|
|
85
|
+
headers,
|
|
86
|
+
};
|
|
87
|
+
const fullUrl = this.buildRequestUrl(endpoint);
|
|
88
|
+
const response = await this.makeHttpRequest(method, fullUrl, data, requestConfig, statTags);
|
|
89
|
+
// If successful or not retryable, return response
|
|
90
|
+
if (response.type === 'success' || !this.shouldRetryOnError(response)) {
|
|
91
|
+
return response;
|
|
92
|
+
}
|
|
93
|
+
// If refreshToken is not implemented, return the response
|
|
94
|
+
if (!this.refreshToken) {
|
|
95
|
+
return response;
|
|
96
|
+
}
|
|
97
|
+
// If this is the last attempt, return the response
|
|
98
|
+
if (currentAttempt >= maxRetries) {
|
|
99
|
+
return response;
|
|
100
|
+
}
|
|
101
|
+
// Refresh token and retry
|
|
102
|
+
await this.refreshToken();
|
|
103
|
+
return await this.executeRequestWithRetryAttempt(method, endpoint, maxRetries, currentAttempt + 1, data, statTags);
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
const errorResponse = {
|
|
107
|
+
type: 'client-error',
|
|
108
|
+
statusCode: 0,
|
|
109
|
+
message: error instanceof Error ? error.message : 'Unknown error',
|
|
110
|
+
responseBody: error,
|
|
111
|
+
};
|
|
112
|
+
// If refreshToken is not implemented, return the response
|
|
113
|
+
if (!this.refreshToken) {
|
|
114
|
+
return errorResponse;
|
|
115
|
+
}
|
|
116
|
+
// If this is the last attempt, return error
|
|
117
|
+
if (currentAttempt >= maxRetries) {
|
|
118
|
+
return errorResponse;
|
|
119
|
+
}
|
|
120
|
+
// Refresh token and retry
|
|
121
|
+
await this.refreshToken();
|
|
122
|
+
return await this.executeRequestWithRetryAttempt(method, endpoint, maxRetries, currentAttempt + 1, data, statTags);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Make HTTP request based on method - eliminates code duplication
|
|
127
|
+
* Passes statTags to HTTP client for metrics and logging
|
|
128
|
+
*/
|
|
129
|
+
makeHttpRequest(method, url, data, requestConfig, statTags) {
|
|
130
|
+
// Add statTags to request config for HTTP client
|
|
131
|
+
const configWithStatTags = {
|
|
132
|
+
...requestConfig,
|
|
133
|
+
statTags,
|
|
134
|
+
};
|
|
135
|
+
switch (method) {
|
|
136
|
+
case 'get':
|
|
137
|
+
return this.httpClient.get(url, configWithStatTags);
|
|
138
|
+
case 'post':
|
|
139
|
+
return this.httpClient.post(url, data, configWithStatTags);
|
|
140
|
+
case 'put':
|
|
141
|
+
return this.httpClient.put(url, data, configWithStatTags);
|
|
142
|
+
case 'delete':
|
|
143
|
+
return this.httpClient.delete(url, configWithStatTags);
|
|
144
|
+
case 'patch':
|
|
145
|
+
return this.httpClient.patch(url, data, configWithStatTags);
|
|
146
|
+
default:
|
|
147
|
+
throw new Error(`Unsupported HTTP method: ${method}`);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Convenience method for GET requests
|
|
152
|
+
*/
|
|
153
|
+
get(endpoint, statTags) {
|
|
154
|
+
return this.executeRequest('get', endpoint, undefined, statTags);
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Convenience method for POST requests
|
|
158
|
+
*/
|
|
159
|
+
post(endpoint, data, statTags) {
|
|
160
|
+
return this.executeRequest('post', endpoint, data, statTags);
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Convenience method for PUT requests
|
|
164
|
+
*/
|
|
165
|
+
put(endpoint, data, statTags) {
|
|
166
|
+
return this.executeRequest('put', endpoint, data, statTags);
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Convenience method for DELETE requests
|
|
170
|
+
*/
|
|
171
|
+
delete(endpoint, statTags) {
|
|
172
|
+
return this.executeRequest('delete', endpoint, undefined, statTags);
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Convenience method for PATCH requests
|
|
176
|
+
*/
|
|
177
|
+
patch(endpoint, data, statTags) {
|
|
178
|
+
return this.executeRequest('patch', endpoint, data, statTags);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
exports.BaseSDK = BaseSDK;
|
|
182
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1zZGsuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2Rrcy9jb21tb24vYmFzZS1zZGsudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBT0EsbURBQXVFO0FBS3ZFLGtGQUFrRjtBQUVsRjs7OztHQUlHO0FBQ0gsTUFBc0IsT0FBTztJQU8zQixZQUFZLFVBQXVCLEVBQUUsTUFBZ0I7UUFDbkQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDaEQsQ0FBQztJQUVELGtEQUFrRDtJQUNsRCxrQkFBa0IsQ0FBQyxXQUFvQjtRQUNyQyx5RUFBeUU7UUFDekUsbUVBQW1FO0lBQ3JFLENBQUM7SUFLRCxrREFBa0Q7SUFDeEMsVUFBVTtRQUNsQix5RUFBeUU7UUFDekUsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsa0RBQWtEO0lBQ2xELGtCQUFrQixDQUFDLFNBQStCO1FBQ2hELDRFQUE0RTtRQUM1RSxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFJRDs7OztPQUlHO0lBQ0ssb0JBQW9CO1FBQzFCLG9FQUFvRTtRQUNwRSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLENBQUM7WUFDNUIsTUFBTSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7WUFFeEUsSUFBSSxNQUFNLEtBQUssU0FBUyxJQUFJLFdBQVcsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDdEQsb0RBQW9EO2dCQUNwRCxPQUFPLDJCQUFpQixDQUFDLHdCQUF3QixDQUMvQyxxQkFBVyxDQUFDLEtBQUssRUFD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Q0FBQyxjQUFjLENBQUksT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDbkUsQ0FBQztDQUNGO0FBaFFELDBCQWdRQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFwaVJlc3BvbnNlLFxuICBIdHRwQ2xpZW50LFxuICBJSHR0cExvZ2dlcixcbiAgSUh0dHBTdGF0c0NsaWVudCxcbiAgU3RhdFRhZ3MsXG59IGZyb20gJy4uLy4uL25ldHdvcmsvY2xpZW50cy90eXBlcyc7XG5pbXBvcnQgeyBDbGllbnROYW1lcywgSHR0cENsaWVudEZhY3RvcnkgfSBmcm9tICcuLi8uLi9uZXR3b3JrL2ZhY3RvcnknO1xuaW1wb3J0IHsgQmFzZVNES0NvbmZpZyB9IGZyb20gJy4vdHlwZXMnO1xuXG4vLyBSZS1leHBvcnQgdHlwZXMgZm9yIGNvbnZlbmllbmNlXG5leHBvcnQgdHlwZSB7IEJhc2VTREtDb25maWcgfTtcbi8vIE5vdGU6IFN0YXRUYWdzIGlzIGV4cG9ydGVkIGZyb20gc3JjL25ldHdvcmsvaW5kZXgudHMgdG8gYXZvaWQgZHVwbGljYXRlIGV4cG9ydHNcblxuLyoqXG4gKiBBYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBhbGwgU0RLc1xuICogUHJvdmlkZXMgY29tbW9uIGZ1bmN0aW9uYWxpdHkgaW5jbHVkaW5nIEhUVFAgY2xpZW50IG1hbmFnZW1lbnQsIHJlcXVlc3QgZXhlY3V0aW9uLFxuICogcmV0cnkgbG9naWMsIGFuZCBlbmhhbmNlZCBmZWF0dXJlcyB3aGVuIGNvbmZpZ3VyZWRcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VTREs8VEF1dGhPYmplY3QsIFRDb25maWcgZXh0ZW5kcyBCYXNlU0RLQ29uZmlnID0gQmFzZVNES0NvbmZpZz4ge1xuICBwcm90ZWN0ZWQgYXV0aE9iamVjdDogVEF1dGhPYmplY3Q7XG5cbiAgcHJvdGVjdGVkIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQ7XG5cbiAgcHJvdGVjdGVkIGNvbmZpZz86IFRDb25maWc7XG5cbiAgY29uc3RydWN0b3IoYXV0aE9iamVjdDogVEF1dGhPYmplY3QsIGNvbmZpZz86IFRDb25maWcpIHtcbiAgICB0aGlzLnZhbGlkYXRlQXV0aE9iamVjdChhdXRoT2JqZWN0KTtcbiAgICB0aGlzLmF1dGhPYmplY3QgPSBhdXRoT2JqZWN0O1xuICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICAgIHRoaXMuaHR0cENsaWVudCA9IHRoaXMuaW5pdGlhbGl6ZUh0dHBDbGllbnQoKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjbGFzcy1tZXRob2RzLXVzZS10aGlzXG4gIHZhbGlkYXRlQXV0aE9iamVjdChfYXV0aE9iamVjdDogdW5rbm93bik6IHZvaWQge1xuICAgIC8vIERlZmF1bHQgaW1wbGVtZW50YXRpb24gZG9lcyBub3RoaW5nIC0gb3ZlcnJpZGUgaWYgdmFsaWRhdGlvbiBpcyBuZWVkZWRcbiAgICAvLyBNb3N0IFNES3Mgd2lsbCB3YW50IHRvIG92ZXJyaWRlIHRoaXMgdG8gdmFsaWRhdGUgcmVxdWlyZWQgZmllbGRzXG4gIH1cblxuICAvLyBBYnN0cmFjdCBtZXRob2QgZm9yIGJ1aWxkaW5nIHJlcXVlc3QgVVJMcyAtIGVhY2ggU0RLIGltcGxlbWVudHMgaXRzIG93biBVUkwgY29uc3RydWN0aW9uIGxvZ2ljXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBidWlsZFJlcXVlc3RVcmwoZW5kcG9pbnQ6IHN0cmluZyk6IHN0cmluZztcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2xhc3MtbWV0aG9kcy11c2UtdGhpc1xuICBwcm90ZWN0ZWQgZ2V0SGVhZGVycygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICAvLyBEZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgZW1wdHkgaGVhZGVycyAtIG92ZXJyaWRlIHRvIGFkZCBoZWFkZXJzXG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXNcbiAgc2hvdWxkUmV0cnlPbkVycm9yKF9yZXNwb25zZTogQXBpUmVzcG9uc2U8dW5rbm93bj4pOiBib29sZWFuIHtcbiAgICAvLyBEZWZhdWx0IGltcGxlbWVudGF0aW9uIGRvZXMgbm90IHJldHJ5IC0gb3ZlcnJpZGUgaWYgcmV0cnkgbG9naWMgaXMgbmVlZGVkXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlZnJlc2hUb2tlbj8oKTogUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBIVFRQIGNsaWVudCBiYXNlZCBvbiBjb25maWd1cmF0aW9uXG4gICAqIFVzZXMgZW5oYW5jZWQgY2xpZW50IHdpdGggbWV0cmljcy9sb2dnaW5nIGlmIGNvbmZpZyBwcm92aWRlZCwgb3RoZXJ3aXNlIGJhc2ljIGNsaWVudFxuICAgKiBObyBiYXNlVVJMIGlzIHNldCAtIFNES3Mgd2lsbCB1c2UgYnVpbGRSZXF1ZXN0VXJsKCkgdG8gY29uc3RydWN0IGZ1bGwgVVJMc1xuICAgKi9cbiAgcHJpdmF0ZSBpbml0aWFsaXplSHR0cENsaWVudCgpOiBIdHRwQ2xpZW50IHtcbiAgICAvLyBJZiBlbmhhbmNlZCBjb25maWcgcHJvdmlkZWQsIHVzZSBIVFRQIGNsaWVudCB3aXRoIG1ldHJpY3MvbG9nZ2luZ1xuICAgIGlmICh0aGlzLmNvbmZpZz8uaHR0cENsaWVudCkge1xuICAgICAgY29uc3QgeyBsb2dnZXIsIHN0YXRzQ2xpZW50LCBkZWZhdWx0U3RhdFRhZ3MgfSA9IHRoaXMuY29uZmlnLmh0dHBDbGllbnQ7XG5cbiAgICAgIGlmIChsb2dnZXIgIT09IHVuZGVmaW5lZCB8fCBzdGF0c0NsaWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIFVzZSBlbmhhbmNlZCBIVFRQIGNsaWVudCB3aXRoIG1ldHJpY3MgYW5kIGxvZ2dpbmdcbiAgICAgICAgcmV0dXJuIEh0dHBDbGllbnRGYWN0b3J5LmdldEh0dHBDbGllbnRXaXRoTWV0cmljcyhcbiAgICAgICAgICBDbGllbnROYW1lcy5BeGlvcyxcbiAgICAgICAgICBsb2dnZXIgYXMgSUh0dHBMb2dnZXIsXG4gICAgICAgICAgc3RhdHNDbGllbnQgYXMgSUh0dHBTdGF0c0NsaWVudCxcbiAgICAgICAgICBkZWZhdWx0U3RhdFRhZ3MsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2sgdG8gYmFzaWMgSFRUUCBjbGllbnQgKGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpXG4gICAgcmV0dXJuIEh0dHBDbGllbnRGYWN0b3J5LmdldEh0dHBDbGllbnQoQ2xpZW50TmFtZXMuQXhpb3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgSFRUUCByZXF1ZXN0IC0gc2luZ2xlIGF0dGVtcHQsIG5vIHJldHJ5IGxvZ2ljXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgZXhlY3V0ZVJlcXVlc3Q8VD4oXG4gICAgbWV0aG9kOiAnZ2V0JyB8ICdwb3N0JyB8ICdwdXQnIHwgJ2RlbGV0ZScgfCAncGF0Y2gnLFxuICAgIGVuZHBvaW50OiBzdHJpbmcsXG4gICAgZGF0YT86IHVua25vd24sXG4gICAgc3RhdFRhZ3M/OiBTdGF0VGFncyxcbiAgKTogUHJvbWlzZTxBcGlSZXNwb25zZTxUPj4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5nZXRIZWFkZXJzKCk7XG4gICAgICBjb25zdCByZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgICBoZWFkZXJzLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGZ1bGxVcmwgPSB0aGlzLmJ1aWxkUmVxdWVzdFVybChlbmRwb2ludCk7XG5cbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLm1ha2VIdHRwUmVxdWVzdDxUPihtZXRob2QsIGZ1bGxVcmwsIGRhdGEsIHJlcXVlc3RDb25maWcsIHN0YXRUYWdzKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogJ2NsaWVudC1lcnJvcicsXG4gICAgICAgIHN0YXR1c0NvZGU6IDAsXG4gICAgICAgIG1lc3NhZ2U6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InLFxuICAgICAgICByZXNwb25zZUJvZHk6IGVycm9yLFxuICAgICAgfSBhcyBBcGlSZXNwb25zZTxUPjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZSBIVFRQIHJlcXVlc3Qgd2l0aCBjb25maWd1cmFibGUgdG9rZW4gcmVmcmVzaCBhdHRlbXB0c1xuICAgKiBGb3IgU0RLcyB0aGF0IG5lZWQgbW9yZSBjb250cm9sIG92ZXIgcmV0cnkgYmVoYXZpb3JcbiAgICovXG4gIHByb3RlY3RlZCBleGVjdXRlUmVxdWVzdFdpdGhUb2tlblJlZnJlc2hBdHRlbXB0czxUPihcbiAgICBtZXRob2Q6ICdnZXQnIHwgJ3Bvc3QnIHwgJ3B1dCcgfCAnZGVsZXRlJyB8ICdwYXRjaCcsXG4gICAgZW5kcG9pbnQ6IHN0cmluZyxcbiAgICBkYXRhPzogdW5rbm93bixcbiAgICBzdGF0VGFncz86IFN0YXRUYWdzLFxuICAgIG1heFJldHJpZXMgPSAxLFxuICApOiBQcm9taXNlPEFwaVJlc3BvbnNlPFQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZVJlcXVlc3RXaXRoUmV0cnlBdHRlbXB0PFQ+KG1ldGhvZCwgZW5kcG9pbnQsIG1heFJldHJpZXMsIDAsIGRhdGEsIHN0YXRUYWdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnRlcm5hbCByZWN1cnNpdmUgbWV0aG9kIGZvciByZXRyeSBhdHRlbXB0c1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBleGVjdXRlUmVxdWVzdFdpdGhSZXRyeUF0dGVtcHQ8VD4oXG4gICAgbWV0aG9kOiAnZ2V0JyB8ICdwb3N0JyB8ICdwdXQnIHwgJ2RlbGV0ZScgfCAncGF0Y2gnLFxuICAgIGVuZHBvaW50OiBzdHJpbmcsXG4gICAgbWF4UmV0cmllczogbnVtYmVyLFxuICAgIGN1cnJlbnRBdHRlbXB0OiBudW1iZXIsXG4gICAgZGF0YT86IHVua25vd24sXG4gICAgc3RhdFRhZ3M/OiBTdGF0VGFncyxcbiAgKTogUHJvbWlzZTxBcGlSZXNwb25zZTxUPj4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5nZXRIZWFkZXJzKCk7XG4gICAgICBjb25zdCByZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgICBoZWFkZXJzLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGZ1bGxVcmwgPSB0aGlzLmJ1aWxkUmVxdWVzdFVybChlbmRwb2ludCk7XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5tYWtlSHR0cFJlcXVlc3Q8VD4oXG4gICAgICAgIG1ldGhvZCxcbiAgICAgICAgZnVsbFVybCxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgcmVxdWVzdENvbmZpZyxcbiAgICAgICAgc3RhdFRhZ3MsXG4gICAgICApO1xuXG4gICAgICAvLyBJZiBzdWNjZXNzZnVsIG9yIG5vdCByZXRyeWFibGUsIHJldHVybiByZXNwb25zZVxuICAgICAgaWYgKHJlc3BvbnNlLnR5cGUgPT09ICdzdWNjZXNzJyB8fCAhdGhpcy5zaG91bGRSZXRyeU9uRXJyb3IocmVzcG9uc2UpKSB7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgcmVmcmVzaFRva2VuIGlzIG5vdCBpbXBsZW1lbnRlZCwgcmV0dXJuIHRoZSByZXNwb25zZVxuICAgICAgaWYgKCF0aGlzLnJlZnJlc2hUb2tlbikge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRoaXMgaXMgdGhlIGxhc3QgYXR0ZW1wdCwgcmV0dXJuIHRoZSByZXNwb25zZVxuICAgICAgaWYgKGN1cnJlbnRBdHRlbXB0ID49IG1heFJldHJpZXMpIHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgfVxuXG4gICAgICAvLyBSZWZyZXNoIHRva2VuIGFuZCByZXRyeVxuICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoVG9rZW4oKTtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmV4ZWN1dGVSZXF1ZXN0V2l0aFJldHJ5QXR0ZW1wdDxUPihcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICBlbmRwb2ludCxcbiAgICAgICAgbWF4UmV0cmllcyxcbiAgICAgICAgY3VycmVudEF0dGVtcHQgKyAxLFxuICAgICAgICBkYXRhLFxuICAgICAgICBzdGF0VGFncyxcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IGVycm9yUmVzcG9uc2U6IEFwaVJlc3BvbnNlPFQ+ID0ge1xuICAgICAgICB0eXBlOiAnY2xpZW50LWVycm9yJyxcbiAgICAgICAgc3RhdHVzQ29kZTogMCxcbiAgICAgICAgbWVzc2FnZTogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcicsXG4gICAgICAgIHJlc3BvbnNlQm9keTogZXJyb3IsXG4gICAgICB9IGFzIEFwaVJlc3BvbnNlPFQ+O1xuXG4gICAgICAvLyBJZiByZWZyZXNoVG9rZW4gaXMgbm90IGltcGxlbWVudGVkLCByZXR1cm4gdGhlIHJlc3BvbnNlXG4gICAgICBpZiAoIXRoaXMucmVmcmVzaFRva2VuKSB7XG4gICAgICAgIHJldHVybiBlcnJvclJlc3BvbnNlO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiB0aGlzIGlzIHRoZSBsYXN0IGF0dGVtcHQsIHJldHVybiBlcnJvclxuICAgICAgaWYgKGN1cnJlbnRBdHRlbXB0ID49IG1heFJldHJpZXMpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yUmVzcG9uc2U7XG4gICAgICB9XG5cbiAgICAgIC8vIFJlZnJlc2ggdG9rZW4gYW5kIHJldHJ5XG4gICAgICBhd2FpdCB0aGlzLnJlZnJlc2hUb2tlbigpO1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZXhlY3V0ZVJlcXVlc3RXaXRoUmV0cnlBdHRlbXB0PFQ+KFxuICAgICAgICBtZXRob2QsXG4gICAgICAgIGVuZHBvaW50LFxuICAgICAgICBtYXhSZXRyaWVzLFxuICAgICAgICBjdXJyZW50QXR0ZW1wdCArIDEsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIHN0YXRUYWdzLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTWFrZSBIVFRQIHJlcXVlc3QgYmFzZWQgb24gbWV0aG9kIC0gZWxpbWluYXRlcyBjb2RlIGR1cGxpY2F0aW9uXG4gICAqIFBhc3NlcyBzdGF0VGFncyB0byBIVFRQIGNsaWVudCBmb3IgbWV0cmljcyBhbmQgbG9nZ2luZ1xuICAgKi9cbiAgcHJpdmF0ZSBtYWtlSHR0cFJlcXVlc3Q8VD4oXG4gICAgbWV0aG9kOiAnZ2V0JyB8ICdwb3N0JyB8ICdwdXQnIHwgJ2RlbGV0ZScgfCAncGF0Y2gnLFxuICAgIHVybDogc3RyaW5nLFxuICAgIGRhdGE6IHVua25vd24sXG4gICAgcmVxdWVzdENvbmZpZzogeyBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IH0sXG4gICAgc3RhdFRhZ3M/OiBTdGF0VGFncyxcbiAgKTogUHJvbWlzZTxBcGlSZXNwb25zZTxUPj4ge1xuICAgIC8vIEFkZCBzdGF0VGFncyB0byByZXF1ZXN0IGNvbmZpZyBmb3IgSFRUUCBjbGllbnRcbiAgICBjb25zdCBjb25maWdXaXRoU3RhdFRhZ3MgPSB7XG4gICAgICAuLi5yZXF1ZXN0Q29uZmlnLFxuICAgICAgc3RhdFRhZ3MsXG4gICAgfTtcblxuICAgIHN3aXRjaCAobWV0aG9kKSB7XG4gICAgICBjYXNlICdnZXQnOlxuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldDxUPih1cmwsIGNvbmZpZ1dpdGhTdGF0VGFncyk7XG4gICAgICBjYXNlICdwb3N0JzpcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PFQ+KHVybCwgZGF0YSwgY29uZmlnV2l0aFN0YXRUYWdzKTtcbiAgICAgIGNhc2UgJ3B1dCc6XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucHV0PFQ+KHVybCwgZGF0YSwgY29uZmlnV2l0aFN0YXRUYWdzKTtcbiAgICAgIGNhc2UgJ2RlbGV0ZSc6XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZGVsZXRlPFQ+KHVybCwgY29uZmlnV2l0aFN0YXRUYWdzKTtcbiAgICAgIGNhc2UgJ3BhdGNoJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wYXRjaDxUPih1cmwsIGRhdGEsIGNvbmZpZ1dpdGhTdGF0VGFncyk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIEhUVFAgbWV0aG9kOiAke21ldGhvZH1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29udmVuaWVuY2UgbWV0aG9kIGZvciBHRVQgcmVxdWVzdHNcbiAgICovXG4gIHByb3RlY3RlZCBnZXQ8VD4oZW5kcG9pbnQ6IHN0cmluZywgc3RhdFRhZ3M/OiBTdGF0VGFncyk6IFByb21pc2U8QXBpUmVzcG9uc2U8VD4+IHtcbiAgICByZXR1cm4gdGhpcy5leGVjdXRlUmVxdWVzdDxUPignZ2V0JywgZW5kcG9pbnQsIHVuZGVmaW5lZCwgc3RhdFRhZ3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlbmllbmNlIG1ldGhvZCBmb3IgUE9TVCByZXF1ZXN0c1xuICAgKi9cbiAgcHJvdGVjdGVkIHBvc3Q8VD4oZW5kcG9pbnQ6IHN0cmluZywgZGF0YTogdW5rbm93biwgc3RhdFRhZ3M/OiBTdGF0VGFncyk6IFByb21pc2U8QXBpUmVzcG9uc2U8VD4+IHtcbiAgICByZXR1cm4gdGhpcy5leGVjdXRlUmVxdWVzdDxUPigncG9zdCcsIGVuZHBvaW50LCBkYXRhLCBzdGF0VGFncyk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVuaWVuY2UgbWV0aG9kIGZvciBQVVQgcmVxdWVzdHNcbiAgICovXG4gIHByb3RlY3RlZCBwdXQ8VD4oZW5kcG9pbnQ6IHN0cmluZywgZGF0YTogdW5rbm93biwgc3RhdFRhZ3M/OiBTdGF0VGFncyk6IFByb21pc2U8QXBpUmVzcG9uc2U8VD4+IHtcbiAgICByZXR1cm4gdGhpcy5leGVjdXRlUmVxdWVzdDxUPigncHV0JywgZW5kcG9pbnQsIGRhdGEsIHN0YXRUYWdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZW5pZW5jZSBtZXRob2QgZm9yIERFTEVURSByZXF1ZXN0c1xuICAgKi9cbiAgcHJvdGVjdGVkIGRlbGV0ZTxUPihlbmRwb2ludDogc3RyaW5nLCBzdGF0VGFncz86IFN0YXRUYWdzKTogUHJvbWlzZTxBcGlSZXNwb25zZTxUPj4ge1xuICAgIHJldHVybiB0aGlzLmV4ZWN1dGVSZXF1ZXN0PFQ+KCdkZWxldGUnLCBlbmRwb2ludCwgdW5kZWZpbmVkLCBzdGF0VGFncyk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVuaWVuY2UgbWV0aG9kIGZvciBQQVRDSCByZXF1ZXN0c1xuICAgKi9cbiAgcHJvdGVjdGVkIHBhdGNoPFQ+KFxuICAgIGVuZHBvaW50OiBzdHJpbmcsXG4gICAgZGF0YTogdW5rbm93bixcbiAgICBzdGF0VGFncz86IFN0YXRUYWdzLFxuICApOiBQcm9taXNlPEFwaVJlc3BvbnNlPFQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZVJlcXVlc3Q8VD4oJ3BhdGNoJywgZW5kcG9pbnQsIGRhdGEsIHN0YXRUYWdzKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/sdks/common/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BaseSDK = void 0;
|
|
4
|
+
var base_sdk_1 = require("./base-sdk");
|
|
5
|
+
Object.defineProperty(exports, "BaseSDK", { enumerable: true, get: function () { return base_sdk_1.BaseSDK; } });
|
|
6
|
+
// Note: StatTags is exported from src/network/index.ts to avoid duplicate exports
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2Rrcy9jb21tb24vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsdUNBQXFDO0FBQTVCLG1HQUFBLE9BQU8sT0FBQTtBQUVoQixrRkFBa0YiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBCYXNlU0RLIH0gZnJvbSAnLi9iYXNlLXNkayc7XG5leHBvcnQgdHlwZSB7IEJhc2VTREtDb25maWcgfSBmcm9tICcuL3R5cGVzJztcbi8vIE5vdGU6IFN0YXRUYWdzIGlzIGV4cG9ydGVkIGZyb20gc3JjL25ldHdvcmsvaW5kZXgudHMgdG8gYXZvaWQgZHVwbGljYXRlIGV4cG9ydHNcbiJdfQ==
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { HttpClientConfig } from '../../network/clients/types';
|
|
2
|
+
/**
|
|
3
|
+
* Base SDK Configuration interface
|
|
4
|
+
* Extends HTTP client config to provide enhanced features for SDKs
|
|
5
|
+
*/
|
|
6
|
+
export interface BaseSDKConfig {
|
|
7
|
+
/**
|
|
8
|
+
* HTTP client configuration for enhanced features
|
|
9
|
+
* When provided, enables logging, metrics, and other enhanced capabilities
|
|
10
|
+
*/
|
|
11
|
+
httpClient?: HttpClientConfig;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/sdks/common/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAE/D;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC/B"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2Rrcy9jb21tb24vdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnRDb25maWcgfSBmcm9tICcuLi8uLi9uZXR3b3JrL2NsaWVudHMvdHlwZXMnO1xuXG4vKipcbiAqIEJhc2UgU0RLIENvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXG4gKiBFeHRlbmRzIEhUVFAgY2xpZW50IGNvbmZpZyB0byBwcm92aWRlIGVuaGFuY2VkIGZlYXR1cmVzIGZvciBTREtzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZVNES0NvbmZpZyB7XG4gIC8qKlxuICAgKiBIVFRQIGNsaWVudCBjb25maWd1cmF0aW9uIGZvciBlbmhhbmNlZCBmZWF0dXJlc1xuICAgKiBXaGVuIHByb3ZpZGVkLCBlbmFibGVzIGxvZ2dpbmcsIG1ldHJpY3MsIGFuZCBvdGhlciBlbmhhbmNlZCBjYXBhYmlsaXRpZXNcbiAgICovXG4gIGh0dHBDbGllbnQ/OiBIdHRwQ2xpZW50Q29uZmlnO1xufVxuIl19
|
|
@@ -1,51 +1,23 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ApiResponse, StatTags } from '../../network/clients/types';
|
|
2
|
+
import { BaseSDK } from '../common/base-sdk';
|
|
3
|
+
import { AuthObject, AudienceSegmentBody, AudienceSegmentData, CriteoConfig } from './types';
|
|
2
4
|
/**
|
|
3
5
|
* CriteoAudience SDK for managing audience segments in Criteo
|
|
4
6
|
* @class
|
|
5
7
|
*/
|
|
6
|
-
export default class CriteoAudience {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
* @throws {Error} If authObject is invalid or missing required properties
|
|
13
|
-
*/
|
|
14
|
-
constructor(authObject: AuthObject);
|
|
15
|
-
/**
|
|
16
|
-
* Validates the authentication object
|
|
17
|
-
* @param {AuthObject} authObject - Authentication object to validate
|
|
18
|
-
* @throws {Error} If authObject is invalid or missing required properties
|
|
19
|
-
* @private
|
|
20
|
-
*/
|
|
21
|
-
private static validateAuthObject;
|
|
22
|
-
/**
|
|
23
|
-
* Refreshes the access token using the provided refresh function
|
|
24
|
-
* @throws {Error} If token refresh fails
|
|
25
|
-
* @private
|
|
26
|
-
*/
|
|
27
|
-
private refreshToken;
|
|
28
|
-
/**
|
|
29
|
-
* Gets the request headers with authentication
|
|
30
|
-
* @returns {RequestConfig} Request configuration with headers
|
|
31
|
-
* @private
|
|
32
|
-
*/
|
|
33
|
-
private getHeader;
|
|
34
|
-
/**
|
|
35
|
-
* Executes a POST request with token refresh handling
|
|
36
|
-
* @template T - Response type
|
|
37
|
-
* @param {string} url - API endpoint URL
|
|
38
|
-
* @param {object} data - Request payload
|
|
39
|
-
* @returns {Promise<ApiResponse<T>>} API response
|
|
40
|
-
* @private
|
|
41
|
-
*/
|
|
42
|
-
private executePostRequest;
|
|
8
|
+
export default class CriteoAudience extends BaseSDK<AuthObject, CriteoConfig> {
|
|
9
|
+
validateAuthObject(authObject: AuthObject): void;
|
|
10
|
+
protected buildRequestUrl(endpoint: string): string;
|
|
11
|
+
protected getHeaders(): Record<string, string>;
|
|
12
|
+
shouldRetryOnError(response: ApiResponse<unknown>): boolean;
|
|
13
|
+
protected refreshToken(): Promise<void>;
|
|
43
14
|
/**
|
|
44
15
|
* Creates a new audience segment in Criteo
|
|
45
16
|
* @param {AudienceSegmentBody} audienceSegmentBody - Audience segment data
|
|
17
|
+
* @param {StatTags} statTags - Optional stat tags for metrics and logging
|
|
46
18
|
* @returns {Promise<AudienceSegmentData>} Created audience segment data
|
|
47
19
|
* @throws {Error} If audience segment creation fails
|
|
48
20
|
*/
|
|
49
|
-
createAudienceSegment(audienceSegmentBody: AudienceSegmentBody): Promise<AudienceSegmentData>;
|
|
21
|
+
createAudienceSegment(audienceSegmentBody: AudienceSegmentBody, statTags?: StatTags): Promise<AudienceSegmentData>;
|
|
50
22
|
}
|
|
51
23
|
//# sourceMappingURL=criteoAudience.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"criteoAudience.d.ts","sourceRoot":"","sources":["../../../src/sdks/criteoAudience/criteoAudience.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"criteoAudience.d.ts","sourceRoot":"","sources":["../../../src/sdks/criteoAudience/criteoAudience.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,OAAO,EACL,UAAU,EACV,mBAAmB,EAEnB,mBAAmB,EACnB,YAAY,EACb,MAAM,SAAS,CAAC;AAEjB;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,OAAO,CAAC,UAAU,EAAE,YAAY,CAAC;IAE3E,kBAAkB,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAahD,SAAS,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAMnD,SAAS,CAAC,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAS9C,kBAAkB,CAAC,QAAQ,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,OAAO;cAY3C,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAS7C;;;;;;OAMG;IACU,qBAAqB,CAChC,mBAAmB,EAAE,mBAAmB,EACxC,QAAQ,CAAC,EAAE,QAAQ,GAClB,OAAO,CAAC,mBAAmB,CAAC;CAsBhC"}
|
|
@@ -1,47 +1,47 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const
|
|
3
|
+
const base_sdk_1 = require("../common/base-sdk");
|
|
4
4
|
const config_1 = require("./config");
|
|
5
5
|
/**
|
|
6
6
|
* CriteoAudience SDK for managing audience segments in Criteo
|
|
7
7
|
* @class
|
|
8
8
|
*/
|
|
9
|
-
class CriteoAudience {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
* @param {AuthObject} authObject - Authentication object containing access token and refresh function
|
|
13
|
-
* @throws {Error} If authObject is invalid or missing required properties
|
|
14
|
-
*/
|
|
15
|
-
constructor(authObject) {
|
|
16
|
-
CriteoAudience.validateAuthObject(authObject);
|
|
17
|
-
this.authObject = authObject;
|
|
18
|
-
this.httpClient = factory_1.HttpClientFactory.getHttpClient(factory_1.ClientNames.Axios, {
|
|
19
|
-
baseURL: config_1.BASE_URL,
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Validates the authentication object
|
|
24
|
-
* @param {AuthObject} authObject - Authentication object to validate
|
|
25
|
-
* @throws {Error} If authObject is invalid or missing required properties
|
|
26
|
-
* @private
|
|
27
|
-
*/
|
|
28
|
-
static validateAuthObject(authObject) {
|
|
9
|
+
class CriteoAudience extends base_sdk_1.BaseSDK {
|
|
10
|
+
// eslint-disable-next-line class-methods-use-this
|
|
11
|
+
validateAuthObject(authObject) {
|
|
29
12
|
if (!authObject) {
|
|
30
13
|
throw new Error('authObject is required.');
|
|
31
14
|
}
|
|
32
|
-
|
|
33
|
-
if (!accessToken) {
|
|
15
|
+
if (!authObject.accessToken) {
|
|
34
16
|
throw new Error('Criteo Audience accessToken is required.');
|
|
35
17
|
}
|
|
36
|
-
if (!refreshAccessTokenFunc) {
|
|
18
|
+
if (!authObject.refreshAccessTokenFunc) {
|
|
37
19
|
throw new Error('Criteo Audience a refresh access token function is required.');
|
|
38
20
|
}
|
|
39
21
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
22
|
+
// eslint-disable-next-line class-methods-use-this
|
|
23
|
+
buildRequestUrl(endpoint) {
|
|
24
|
+
// Ensure endpoint starts with /
|
|
25
|
+
const cleanEndpoint = endpoint.startsWith('/') ? endpoint : `/${endpoint}`;
|
|
26
|
+
return `${config_1.BASE_URL}${cleanEndpoint}`;
|
|
27
|
+
}
|
|
28
|
+
getHeaders() {
|
|
29
|
+
return {
|
|
30
|
+
authorization: `Bearer ${this.authObject.accessToken}`,
|
|
31
|
+
accept: 'application/json',
|
|
32
|
+
'content-type': 'application/json',
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
// eslint-disable-next-line class-methods-use-this
|
|
36
|
+
shouldRetryOnError(response) {
|
|
37
|
+
// Retry on 401 (unauthorized) errors for token refresh
|
|
38
|
+
if (response.type === 'application-error') {
|
|
39
|
+
return (response.statusCode === 401 &&
|
|
40
|
+
(response.responseBody.errors[0].code === 'authorization-token-invalid' ||
|
|
41
|
+
response.responseBody.errors[0].code === 'authorization-token-expired'));
|
|
42
|
+
}
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
45
|
async refreshToken() {
|
|
46
46
|
try {
|
|
47
47
|
const accessToken = await this.authObject.refreshAccessTokenFunc();
|
|
@@ -51,51 +51,15 @@ class CriteoAudience {
|
|
|
51
51
|
throw new Error(`Unable to refresh token, with error: ${error}`);
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
|
-
/**
|
|
55
|
-
* Gets the request headers with authentication
|
|
56
|
-
* @returns {RequestConfig} Request configuration with headers
|
|
57
|
-
* @private
|
|
58
|
-
*/
|
|
59
|
-
getHeader() {
|
|
60
|
-
return {
|
|
61
|
-
headers: {
|
|
62
|
-
authorization: `Bearer ${this.authObject.accessToken}`,
|
|
63
|
-
accept: 'application/json',
|
|
64
|
-
'content-type': 'application/json',
|
|
65
|
-
},
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* Executes a POST request with token refresh handling
|
|
70
|
-
* @template T - Response type
|
|
71
|
-
* @param {string} url - API endpoint URL
|
|
72
|
-
* @param {object} data - Request payload
|
|
73
|
-
* @returns {Promise<ApiResponse<T>>} API response
|
|
74
|
-
* @private
|
|
75
|
-
*/
|
|
76
|
-
async executePostRequest(url, data) {
|
|
77
|
-
const response = await this.httpClient.post(url, data, this.getHeader());
|
|
78
|
-
switch (response.type) {
|
|
79
|
-
case 'application-error':
|
|
80
|
-
if (response.statusCode === 401 &&
|
|
81
|
-
(response.responseBody.errors[0].code === 'authorization-token-invalid' ||
|
|
82
|
-
response.responseBody.errors[0].code === 'authorization-token-expired')) {
|
|
83
|
-
await this.refreshToken();
|
|
84
|
-
return this.httpClient.post(url, data, this.getHeader());
|
|
85
|
-
}
|
|
86
|
-
return response;
|
|
87
|
-
default:
|
|
88
|
-
return response;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
54
|
/**
|
|
92
55
|
* Creates a new audience segment in Criteo
|
|
93
56
|
* @param {AudienceSegmentBody} audienceSegmentBody - Audience segment data
|
|
57
|
+
* @param {StatTags} statTags - Optional stat tags for metrics and logging
|
|
94
58
|
* @returns {Promise<AudienceSegmentData>} Created audience segment data
|
|
95
59
|
* @throws {Error} If audience segment creation fails
|
|
96
60
|
*/
|
|
97
|
-
async createAudienceSegment(audienceSegmentBody) {
|
|
98
|
-
const createAudienceSegmentResponse = await this.
|
|
61
|
+
async createAudienceSegment(audienceSegmentBody, statTags) {
|
|
62
|
+
const createAudienceSegmentResponse = await this.executeRequestWithTokenRefreshAttempts('post', `/marketing-solutions/audience-segments/create`, audienceSegmentBody, statTags);
|
|
99
63
|
if (createAudienceSegmentResponse.type === 'success') {
|
|
100
64
|
const { data } = createAudienceSegmentResponse.responseBody;
|
|
101
65
|
if (data && data.length > 0) {
|
|
@@ -109,4 +73,4 @@ class CriteoAudience {
|
|
|
109
73
|
}
|
|
110
74
|
}
|
|
111
75
|
exports.default = CriteoAudience;
|
|
112
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JpdGVvQXVkaWVuY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2Rrcy9jcml0ZW9BdWRpZW5jZS9jcml0ZW9BdWRpZW5jZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLGlEQUE2QztBQUM3QyxxQ0FBb0M7QUFTcEM7OztHQUdHO0FBQ0gsTUFBcUIsY0FBZSxTQUFRLGtCQUFpQztJQUMzRSxrREFBa0Q7SUFDbEQsa0JBQWtCLENBQUMsVUFBc0I7UUFDdkMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUM3QyxDQUFDO1FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLDBDQUEwQyxDQUFDLENBQUM7UUFDOUQsQ0FBQztRQUNELElBQUksQ0FBQyxVQUFVLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUN2QyxNQUFNLElBQUksS0FBSyxDQUFDLDhEQUE4RCxDQUFDLENBQUM7UUFDbEYsQ0FBQztJQUNILENBQUM7SUFFRCxrREFBa0Q7SUFDeEMsZUFBZSxDQUFDLFFBQWdCO1FBQ3hDLGdDQUFnQztRQUNoQyxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxFQUFFLENBQUM7UUFDM0UsT0FBTyxHQUFHLGlCQUFRLEdBQUcsYUFBYSxFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUVTLFVBQVU7UUFDbEIsT0FBTztZQUNMLGFBQWEsRUFBRSxVQUFVLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFO1lBQ3RELE1BQU0sRUFBRSxrQkFBa0I7WUFDMUIsY0FBYyxFQUFFLGtCQUFrQjtTQUNuQyxDQUFDO0lBQ0osQ0FBQztJQUVELGtEQUFrRDtJQUNsRCxrQkFBa0IsQ0FBQyxRQUE4QjtRQUMvQyx1REFBdUQ7UUFDdkQsSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLG1CQUFtQixFQUFFLENBQUM7WUFDMUMsT0FBTyxDQUNMLFFBQVEsQ0FBQyxVQUFVLEtBQUssR0FBRztnQkFDM0IsQ0FBRSxRQUFRLENBQUMsWUFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLDZCQUE2QjtvQkFDN0UsUUFBUSxDQUFDLFlBQW9CLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyw2QkFBNkIsQ0FBQyxDQUNuRixDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVTLEtBQUssQ0FBQyxZQUFZO1FBQzFCLElBQUksQ0FBQztZQUNILE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQ25FLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUM1QyxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMsd0NBQXdDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDbkUsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxLQUFLLENBQUMscUJBQXFCLENBQ2hDLG1CQUF3QyxFQUN4QyxRQUFtQjtRQUVuQixNQUFNLDZCQUE2QixHQUNqQyxNQUFNLElBQUksQ0FBQyxzQ0FBc0MsQ0FDL0MsTUFBTSxFQUNOLCtDQUErQyxFQUMvQyxtQkFBbUIsRUFDbkIsUUFBUSxDQUNULENBQUM7UUFDSixJQUFJLDZCQUE2QixDQUFDLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNyRCxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsNkJBQTZCLENBQUMsWUFBWSxDQUFDO1lBQzVELElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzVCLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pCLENBQUM7UUFDSCxDQUFDO1FBRUQsTUFBTSxZQUFZLEdBQ2hCLDZCQUE2QixDQUFDLElBQUksS0FBSyxjQUFjO1lBQ25ELENBQUMsQ0FBQyw2QkFBNkIsQ0FBQyxPQUFPO1lBQ3ZDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLDZCQUE2QixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRWpFLE1BQU0sSUFBSSxLQUFLLENBQUMsa0RBQWtELFlBQVksRUFBRSxDQUFDLENBQUM7SUFDcEYsQ0FBQztDQUNGO0FBbkZELGlDQW1GQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwaVJlc3BvbnNlLCBTdGF0VGFncyB9IGZyb20gJy4uLy4uL25ldHdvcmsvY2xpZW50cy90eXBlcyc7XG5pbXBvcnQgeyBCYXNlU0RLIH0gZnJvbSAnLi4vY29tbW9uL2Jhc2Utc2RrJztcbmltcG9ydCB7IEJBU0VfVVJMIH0gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHtcbiAgQXV0aE9iamVjdCxcbiAgQXVkaWVuY2VTZWdtZW50Qm9keSxcbiAgQXVkaWVuY2VTZWdtZW50UmVzcG9uc2UsXG4gIEF1ZGllbmNlU2VnbWVudERhdGEsXG4gIENyaXRlb0NvbmZpZyxcbn0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogQ3JpdGVvQXVkaWVuY2UgU0RLIGZvciBtYW5hZ2luZyBhdWRpZW5jZSBzZWdtZW50cyBpbiBDcml0ZW9cbiAqIEBjbGFzc1xuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDcml0ZW9BdWRpZW5jZSBleHRlbmRzIEJhc2VTREs8QXV0aE9iamVjdCwgQ3JpdGVvQ29uZmlnPiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjbGFzcy1tZXRob2RzLXVzZS10aGlzXG4gIHZhbGlkYXRlQXV0aE9iamVjdChhdXRoT2JqZWN0OiBBdXRoT2JqZWN0KTogdm9pZCB7XG4gICAgaWYgKCFhdXRoT2JqZWN0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2F1dGhPYmplY3QgaXMgcmVxdWlyZWQuJyk7XG4gICAgfVxuICAgIGlmICghYXV0aE9iamVjdC5hY2Nlc3NUb2tlbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDcml0ZW8gQXVkaWVuY2UgYWNjZXNzVG9rZW4gaXMgcmVxdWlyZWQuJyk7XG4gICAgfVxuICAgIGlmICghYXV0aE9iamVjdC5yZWZyZXNoQWNjZXNzVG9rZW5GdW5jKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NyaXRlbyBBdWRpZW5jZSBhIHJlZnJlc2ggYWNjZXNzIHRva2VuIGZ1bmN0aW9uIGlzIHJlcXVpcmVkLicpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjbGFzcy1tZXRob2RzLXVzZS10aGlzXG4gIHByb3RlY3RlZCBidWlsZFJlcXVlc3RVcmwoZW5kcG9pbnQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgLy8gRW5zdXJlIGVuZHBvaW50IHN0YXJ0cyB3aXRoIC9cbiAgICBjb25zdCBjbGVhbkVuZHBvaW50ID0gZW5kcG9pbnQuc3RhcnRzV2l0aCgnLycpID8gZW5kcG9pbnQgOiBgLyR7ZW5kcG9pbnR9YDtcbiAgICByZXR1cm4gYCR7QkFTRV9VUkx9JHtjbGVhbkVuZHBvaW50fWA7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0SGVhZGVycygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICByZXR1cm4ge1xuICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3RoaXMuYXV0aE9iamVjdC5hY2Nlc3NUb2tlbn1gLFxuICAgICAgYWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgIH07XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2xhc3MtbWV0aG9kcy11c2UtdGhpc1xuICBzaG91bGRSZXRyeU9uRXJyb3IocmVzcG9uc2U6IEFwaVJlc3BvbnNlPHVua25vd24+KTogYm9vbGVhbiB7XG4gICAgLy8gUmV0cnkgb24gNDAxICh1bmF1dGhvcml6ZWQpIGVycm9ycyBmb3IgdG9rZW4gcmVmcmVzaFxuICAgIGlmIChyZXNwb25zZS50eXBlID09PSAnYXBwbGljYXRpb24tZXJyb3InKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICByZXNwb25zZS5zdGF0dXNDb2RlID09PSA0MDEgJiZcbiAgICAgICAgKChyZXNwb25zZS5yZXNwb25zZUJvZHkgYXMgYW55KS5lcnJvcnNbMF0uY29kZSA9PT0gJ2F1dGhvcml6YXRpb24tdG9rZW4taW52YWxpZCcgfHxcbiAgICAgICAgICAocmVzcG9uc2UucmVzcG9uc2VCb2R5IGFzIGFueSkuZXJyb3JzWzBdLmNvZGUgPT09ICdhdXRob3JpemF0aW9uLXRva2VuLWV4cGlyZWQnKVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHJlZnJlc2hUb2tlbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCB0aGlzLmF1dGhPYmplY3QucmVmcmVzaEFjY2Vzc1Rva2VuRnVuYygpO1xuICAgICAgdGhpcy5hdXRoT2JqZWN0LmFjY2Vzc1Rva2VuID0gYWNjZXNzVG9rZW47XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIHJlZnJlc2ggdG9rZW4sIHdpdGggZXJyb3I6ICR7ZXJyb3J9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgYXVkaWVuY2Ugc2VnbWVudCBpbiBDcml0ZW9cbiAgICogQHBhcmFtIHtBdWRpZW5jZVNlZ21lbnRCb2R5fSBhdWRpZW5jZVNlZ21lbnRCb2R5IC0gQXVkaWVuY2Ugc2VnbWVudCBkYXRhXG4gICAqIEBwYXJhbSB7U3RhdFRhZ3N9IHN0YXRUYWdzIC0gT3B0aW9uYWwgc3RhdCB0YWdzIGZvciBtZXRyaWNzIGFuZCBsb2dnaW5nXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEF1ZGllbmNlU2VnbWVudERhdGE+fSBDcmVhdGVkIGF1ZGllbmNlIHNlZ21lbnQgZGF0YVxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgYXVkaWVuY2Ugc2VnbWVudCBjcmVhdGlvbiBmYWlsc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIGNyZWF0ZUF1ZGllbmNlU2VnbWVudChcbiAgICBhdWRpZW5jZVNlZ21lbnRCb2R5OiBBdWRpZW5jZVNlZ21lbnRCb2R5LFxuICAgIHN0YXRUYWdzPzogU3RhdFRhZ3MsXG4gICk6IFByb21pc2U8QXVkaWVuY2VTZWdtZW50RGF0YT4ge1xuICAgIGNvbnN0IGNyZWF0ZUF1ZGllbmNlU2VnbWVudFJlc3BvbnNlID1cbiAgICAgIGF3YWl0IHRoaXMuZXhlY3V0ZVJlcXVlc3RXaXRoVG9rZW5SZWZyZXNoQXR0ZW1wdHM8QXVkaWVuY2VTZWdtZW50UmVzcG9uc2U+KFxuICAgICAgICAncG9zdCcsXG4gICAgICAgIGAvbWFya2V0aW5nLXNvbHV0aW9ucy9hdWRpZW5jZS1zZWdtZW50cy9jcmVhdGVgLFxuICAgICAgICBhdWRpZW5jZVNlZ21lbnRCb2R5LFxuICAgICAgICBzdGF0VGFncyxcbiAgICAgICk7XG4gICAgaWYgKGNyZWF0ZUF1ZGllbmNlU2VnbWVudFJlc3BvbnNlLnR5cGUgPT09ICdzdWNjZXNzJykge1xuICAgICAgY29uc3QgeyBkYXRhIH0gPSBjcmVhdGVBdWRpZW5jZVNlZ21lbnRSZXNwb25zZS5yZXNwb25zZUJvZHk7XG4gICAgICBpZiAoZGF0YSAmJiBkYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIGRhdGFbMF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID1cbiAgICAgIGNyZWF0ZUF1ZGllbmNlU2VnbWVudFJlc3BvbnNlLnR5cGUgPT09ICdjbGllbnQtZXJyb3InXG4gICAgICAgID8gY3JlYXRlQXVkaWVuY2VTZWdtZW50UmVzcG9uc2UubWVzc2FnZVxuICAgICAgICA6IEpTT04uc3RyaW5naWZ5KGNyZWF0ZUF1ZGllbmNlU2VnbWVudFJlc3BvbnNlLnJlc3BvbnNlQm9keSk7XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBjcmVhdGUgYXVkaWVuY2Ugc2VnbWVudCwgd2l0aCBlcnJvcjogJHtlcnJvck1lc3NhZ2V9YCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
import { BaseSDKConfig } from '../common/types';
|
|
1
2
|
export interface AuthObject {
|
|
2
3
|
accessToken: string;
|
|
3
4
|
refreshAccessTokenFunc: () => Promise<string>;
|
|
4
5
|
}
|
|
6
|
+
export interface CriteoConfig extends BaseSDKConfig {
|
|
7
|
+
}
|
|
5
8
|
export interface AudienceSegmentBody {
|
|
6
9
|
data: {
|
|
7
10
|
attributes: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/sdks/criteoAudience/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,sBAAsB,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;CAC/C;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE;QACJ,UAAU,EAAE;YACV,YAAY,EAAE,MAAM,CAAC;YACrB,IAAI,EAAE,MAAM,CAAC;YACb,WAAW,CAAC,EAAE,MAAM,CAAC;YACrB,WAAW,EAAE,MAAM,CAAC;SACrB,CAAC;QACF,IAAI,EAAE,iBAAiB,CAAC;KACzB,EAAE,CAAC;CACL;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,iBAAiB,CAAC;IACxB,UAAU,EAAE;QACV,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,IAAI,EAAE,aAAa,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,WAAW,CAAC,EAAE;YACZ,UAAU,CAAC,EAAE,OAAO,CAAC;SACtB,CAAC;KACH,CAAC;CACH;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AACD,MAAM,WAAW,uBAAuB;IACtC,IAAI,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,oBAAoB,EAAE,CAAC;CACjC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/sdks/criteoAudience/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,sBAAsB,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;CAC/C;AAED,MAAM,WAAW,YAAa,SAAQ,aAAa;CAElD;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE;QACJ,UAAU,EAAE;YACV,YAAY,EAAE,MAAM,CAAC;YACrB,IAAI,EAAE,MAAM,CAAC;YACb,WAAW,CAAC,EAAE,MAAM,CAAC;YACrB,WAAW,EAAE,MAAM,CAAC;SACrB,CAAC;QACF,IAAI,EAAE,iBAAiB,CAAC;KACzB,EAAE,CAAC;CACL;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,iBAAiB,CAAC;IACxB,UAAU,EAAE;QACV,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,IAAI,EAAE,aAAa,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,WAAW,CAAC,EAAE;YACZ,UAAU,CAAC,EAAE,OAAO,CAAC;SACtB,CAAC;KACH,CAAC;CACH;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AACD,MAAM,WAAW,uBAAuB;IACtC,IAAI,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,oBAAoB,EAAE,CAAC;CACjC"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2Rrcy9jcml0ZW9BdWRpZW5jZS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZVNES0NvbmZpZyB9IGZyb20gJy4uL2NvbW1vbi90eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aE9iamVjdCB7XG4gIGFjY2Vzc1Rva2VuOiBzdHJpbmc7XG4gIHJlZnJlc2hBY2Nlc3NUb2tlbkZ1bmM6ICgpID0+IFByb21pc2U8c3RyaW5nPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDcml0ZW9Db25maWcgZXh0ZW5kcyBCYXNlU0RLQ29uZmlnIHtcbiAgLy8gQWRkIENyaXRlby1zcGVjaWZpYyBjb25maWcgaWYgbmVlZGVkIGluIHRoZSBmdXR1cmVcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdWRpZW5jZVNlZ21lbnRCb2R5IHtcbiAgZGF0YToge1xuICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgIGFkdmVydGlzZXJJZDogc3RyaW5nO1xuICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgICBjb250YWN0TGlzdDogb2JqZWN0O1xuICAgIH07XG4gICAgdHlwZTogJ0F1ZGllbmNlU2VnbWVudCc7XG4gIH1bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdWRpZW5jZVNlZ21lbnREYXRhIHtcbiAgaWQ6IHN0cmluZztcbiAgdHlwZTogJ0F1ZGllbmNlU2VnbWVudCc7XG4gIGF0dHJpYnV0ZXM6IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgdHlwZTogJ0NvbnRhY3RMaXN0JztcbiAgICBjcmVhdGVkQXQ/OiBzdHJpbmc7XG4gICAgdXBkYXRlZEF0Pzogc3RyaW5nO1xuICAgIGFkdmVydGlzZXJJZD86IHN0cmluZztcbiAgICBjb250YWN0TGlzdD86IHtcbiAgICAgIGlzUmVhZE9ubHk/OiBib29sZWFuO1xuICAgIH07XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaWVuY2VTZWdtZW50RXJyb3Ige1xuICB0cmFjZUlkPzogc3RyaW5nO1xuICB0cmFjZUlkZW50aWZpZXI/OiBzdHJpbmc7XG4gIHR5cGU/OiBzdHJpbmc7XG4gIGNvZGU/OiBzdHJpbmc7XG4gIGluc3RhbmNlPzogc3RyaW5nO1xuICB0aXRsZT86IHN0cmluZztcbiAgZGV0YWlsPzogc3RyaW5nO1xufVxuZXhwb3J0IGludGVyZmFjZSBBdWRpZW5jZVNlZ21lbnRSZXNwb25zZSB7XG4gIGRhdGE/OiBBdWRpZW5jZVNlZ21lbnREYXRhW107XG4gIHdhcm5pbmdzPzogdW5rbm93bjtcbiAgZXJyb3JzPzogQXVkaWVuY2VTZWdtZW50RXJyb3JbXTtcbn1cbiJdfQ==
|
|
@@ -1,29 +1,25 @@
|
|
|
1
|
-
import { AuthObject, CreateSegmentBody, CreateSegmentResponse, GetSegmentsResponse } from './type';
|
|
2
|
-
import {
|
|
3
|
-
|
|
1
|
+
import { AuthObject, CreateSegmentBody, CreateSegmentResponse, GetSegmentsResponse, CustomerIOConfig } from './type';
|
|
2
|
+
import { BaseSDK } from '../common/base-sdk';
|
|
3
|
+
import { StatTags } from '../../network/clients/types';
|
|
4
|
+
export default class CustomerIOSegment extends BaseSDK<AuthObject, CustomerIOConfig> {
|
|
4
5
|
static readonly url: string;
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
constructor(authObject: AuthObject, axiosClient?: AxiosClient);
|
|
9
|
-
private static validateAuthObject;
|
|
10
|
-
/**
|
|
11
|
-
* This function returns the app api key.
|
|
12
|
-
* @returns
|
|
13
|
-
*/
|
|
14
|
-
getAppApiKey(): string;
|
|
6
|
+
validateAuthObject(authObject: AuthObject): void;
|
|
7
|
+
protected buildRequestUrl(endpoint: string): string;
|
|
8
|
+
protected getHeaders(): Record<string, string>;
|
|
15
9
|
/**
|
|
16
10
|
* This method fetches the segments. If unable to fetch the segments, it returns a RestError.
|
|
17
11
|
* ref: https://docs.customer.io/api/app/#operation/listSegments
|
|
12
|
+
* @param statTags - Optional stat tags for metrics and logging
|
|
18
13
|
* @returns
|
|
19
14
|
*/
|
|
20
|
-
getSegments(): Promise<GetSegmentsResponse>;
|
|
15
|
+
getSegments(statTags?: StatTags): Promise<GetSegmentsResponse>;
|
|
21
16
|
/**
|
|
22
17
|
* This method creates a manual segment. It requires the segment body. The method returns the created segment. If the manual segment is not created, it returns a RestError.
|
|
23
18
|
* ref: https://docs.customer.io/api/app/#operation/createManSegment
|
|
24
19
|
* @param body CreateSegment fields
|
|
20
|
+
* @param statTags - Optional stat tags for metrics and logging
|
|
25
21
|
* @returns
|
|
26
22
|
*/
|
|
27
|
-
createSegment(body: CreateSegmentBody): Promise<CreateSegmentResponse>;
|
|
23
|
+
createSegment(body: CreateSegmentBody, statTags?: StatTags): Promise<CreateSegmentResponse>;
|
|
28
24
|
}
|
|
29
25
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/sdks/customerio_audience/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/sdks/customerio_audience/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,EACjB,MAAM,QAAQ,CAAC;AAGhB,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAEvD,MAAM,CAAC,OAAO,OAAO,iBAAkB,SAAQ,OAAO,CAAC,UAAU,EAAE,gBAAgB,CAAC;IAClF,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAgC;IAG3D,kBAAkB,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAOhD,SAAS,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAMnD,SAAS,CAAC,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAO9C;;;;;OAKG;IACG,WAAW,CAAC,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAWpE;;;;;;OAMG;IACG,aAAa,CACjB,IAAI,EAAE,iBAAiB,EACvB,QAAQ,CAAC,EAAE,QAAQ,GAClB,OAAO,CAAC,qBAAqB,CAAC;CAWlC"}
|