@rudderstack/integrations-lib 0.2.13 → 0.2.15
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/sdks/customerio_audience/index.d.ts +28 -0
- package/build/sdks/customerio_audience/index.d.ts.map +1 -0
- package/build/sdks/customerio_audience/index.js +64 -0
- package/build/sdks/customerio_audience/index.test.d.ts +2 -0
- package/build/sdks/customerio_audience/index.test.d.ts.map +1 -0
- package/build/sdks/customerio_audience/index.test.js +182 -0
- package/build/sdks/customerio_audience/type.d.ts +36 -0
- package/build/sdks/customerio_audience/type.d.ts.map +1 -0
- package/build/sdks/customerio_audience/type.js +3 -0
- package/build/sdks/customerio_audience/utils.d.ts +5 -0
- package/build/sdks/customerio_audience/utils.d.ts.map +1 -0
- package/build/sdks/customerio_audience/utils.js +11 -0
- package/build/sdks/index.d.ts +4 -0
- package/build/sdks/index.d.ts.map +1 -0
- package/build/sdks/index.js +11 -0
- package/build/sdks/sfmc/index.d.ts +47 -0
- package/build/sdks/sfmc/index.d.ts.map +1 -0
- package/build/sdks/sfmc/index.js +262 -0
- package/build/sdks/sfmc/index.test.d.ts +2 -0
- package/build/sdks/sfmc/index.test.d.ts.map +1 -0
- package/build/sdks/sfmc/index.test.js +741 -0
- package/build/sdks/sfmc/type.d.ts +111 -0
- package/build/sdks/sfmc/type.d.ts.map +1 -0
- package/build/sdks/sfmc/type.js +3 -0
- package/build/sdks/sfmc/utils.d.ts +25 -0
- package/build/sdks/sfmc/utils.d.ts.map +1 -0
- package/build/sdks/sfmc/utils.js +93 -0
- package/build/sdks/sfmc/utils.test.d.ts +2 -0
- package/build/sdks/sfmc/utils.test.d.ts.map +1 -0
- package/build/sdks/sfmc/utils.test.js +32 -0
- package/package.json +3 -2
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const axios_1 = __importDefault(require("axios"));
|
|
7
|
+
const utils_1 = require("./utils");
|
|
8
|
+
class SFMC {
|
|
9
|
+
constructor(authObject) {
|
|
10
|
+
SFMC.validateAuthObject(authObject);
|
|
11
|
+
this.authObject = authObject;
|
|
12
|
+
}
|
|
13
|
+
static validateAuthObject(authObject) {
|
|
14
|
+
if (!authObject) {
|
|
15
|
+
throw new Error('authObject is required. See the readme.');
|
|
16
|
+
}
|
|
17
|
+
const validations = [
|
|
18
|
+
{ key: 'clientId', type: 'string', required: true },
|
|
19
|
+
{ key: 'clientSecret', type: 'string', required: true },
|
|
20
|
+
{
|
|
21
|
+
key: 'subDomain',
|
|
22
|
+
type: 'string',
|
|
23
|
+
required: true,
|
|
24
|
+
regex: /^\w{28}$/gm,
|
|
25
|
+
regexMessage: 'subDomain must be a string of length 28',
|
|
26
|
+
},
|
|
27
|
+
];
|
|
28
|
+
validations.forEach(({ key, type, required, regex, regexMessage }) => {
|
|
29
|
+
const value = authObject[key];
|
|
30
|
+
if (required && !value) {
|
|
31
|
+
throw new Error(`${key} is missing or invalid`);
|
|
32
|
+
}
|
|
33
|
+
if (typeof value !== type) {
|
|
34
|
+
throw new TypeError(`${key} must be a ${type}`);
|
|
35
|
+
}
|
|
36
|
+
if (regex && !regex.test(value)) {
|
|
37
|
+
throw new Error(regexMessage || `${key} does not match the required format`);
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
return authObject;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* This function returns the access token. If the token is expired, it will generate a new token.
|
|
44
|
+
* @returns {Promise<AuthObject>} It returns the access token or error
|
|
45
|
+
*/
|
|
46
|
+
async getAccessToken() {
|
|
47
|
+
if ((0, utils_1.isExpired)(this.authObject)) {
|
|
48
|
+
try {
|
|
49
|
+
await (0, utils_1.getToken)(this.authObject);
|
|
50
|
+
}
|
|
51
|
+
catch (e) {
|
|
52
|
+
throw new Error(`Unable to generate token, with error:${e}`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return this.authObject;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* This method fetches the fields of a data extension. It requires the data extension id. The method returns the fields of the data extension. If the data extension is not found, it returns a RestError.
|
|
59
|
+
* @param dataExtensionId Id of the data extension whose fields are to be fetched
|
|
60
|
+
* @returns
|
|
61
|
+
*/
|
|
62
|
+
async getDestinationFields(dataExtensionId) {
|
|
63
|
+
try {
|
|
64
|
+
const restHeaders = {
|
|
65
|
+
Authorization: `Bearer ${(await this.getAccessToken()).access_token}`,
|
|
66
|
+
};
|
|
67
|
+
const requestOptions = {
|
|
68
|
+
method: 'GET',
|
|
69
|
+
baseURL: (0, utils_1.getUrl)(this.authObject.subDomain),
|
|
70
|
+
url: `/data/v1/customobjects/${dataExtensionId}/fields`,
|
|
71
|
+
headers: restHeaders,
|
|
72
|
+
};
|
|
73
|
+
const resp = await (0, axios_1.default)(requestOptions);
|
|
74
|
+
return resp.data;
|
|
75
|
+
}
|
|
76
|
+
catch (err) {
|
|
77
|
+
throw new utils_1.RestError(err);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* This method fetches the contact attributes. The method returns the contact attributes. If the contact attributes are not found, it returns a RestError.
|
|
82
|
+
* @returns
|
|
83
|
+
*/
|
|
84
|
+
async getContactAttributes() {
|
|
85
|
+
try {
|
|
86
|
+
const restHeaders = {
|
|
87
|
+
Authorization: `Bearer ${(await this.getAccessToken()).access_token}`,
|
|
88
|
+
};
|
|
89
|
+
const requestOptions = {
|
|
90
|
+
method: 'GET',
|
|
91
|
+
baseURL: (0, utils_1.getUrl)(this.authObject.subDomain),
|
|
92
|
+
url: '/contacts/v1/attributeSetDefinitions',
|
|
93
|
+
headers: restHeaders,
|
|
94
|
+
};
|
|
95
|
+
const resp = await (0, axios_1.default)(requestOptions);
|
|
96
|
+
return resp.data;
|
|
97
|
+
}
|
|
98
|
+
catch (err) {
|
|
99
|
+
throw new utils_1.RestError(err);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* This method creates a data extension. It requires the data extension fields. The method returns the data extension created. If the data extension is not created, it returns a RestError.
|
|
104
|
+
* @param body DataExtension fields
|
|
105
|
+
* @returns
|
|
106
|
+
*/
|
|
107
|
+
async createDataExtension(body) {
|
|
108
|
+
try {
|
|
109
|
+
const restHeaders = {
|
|
110
|
+
Authorization: `Bearer ${(await this.getAccessToken()).access_token}`,
|
|
111
|
+
};
|
|
112
|
+
const requestOptions = {
|
|
113
|
+
method: 'POST',
|
|
114
|
+
baseURL: (0, utils_1.getUrl)(this.authObject.subDomain),
|
|
115
|
+
url: '/data/v1/customobjects',
|
|
116
|
+
headers: restHeaders,
|
|
117
|
+
data: body,
|
|
118
|
+
};
|
|
119
|
+
const resp = await (0, axios_1.default)(requestOptions);
|
|
120
|
+
return resp.data;
|
|
121
|
+
}
|
|
122
|
+
catch (err) {
|
|
123
|
+
throw new utils_1.RestError(err);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* This method fetches the business units. The method returns the business units. If the business units are not found, it returns a SoapError.
|
|
128
|
+
* @returns
|
|
129
|
+
*/
|
|
130
|
+
async getBusinessUnits() {
|
|
131
|
+
try {
|
|
132
|
+
const accessToken = (await this.getAccessToken()).access_token;
|
|
133
|
+
const requestOptions = {
|
|
134
|
+
method: 'POST',
|
|
135
|
+
baseURL: `https://${this.authObject.subDomain}.soap.marketingcloudapis.com`,
|
|
136
|
+
url: '/Service.asmx',
|
|
137
|
+
headers: {
|
|
138
|
+
SOAPAction: 'Retrieve',
|
|
139
|
+
'Content-Type': 'text/xml',
|
|
140
|
+
},
|
|
141
|
+
data: await (0, utils_1.xmlBuilder)('BusinessUnit', ['name', 'id'], accessToken),
|
|
142
|
+
};
|
|
143
|
+
const resp = await (0, axios_1.default)(requestOptions);
|
|
144
|
+
const parsedData = (0, utils_1.parseXML)(resp.data);
|
|
145
|
+
const res = parsedData.RetrieveResponseMsg?.Results;
|
|
146
|
+
const businessUnits = [];
|
|
147
|
+
if (res) {
|
|
148
|
+
if (Array.isArray(res)) {
|
|
149
|
+
res.forEach((eachRes) => {
|
|
150
|
+
businessUnits.push({
|
|
151
|
+
Name: eachRes.PartnerProperties[0].Value,
|
|
152
|
+
ID: eachRes.PartnerProperties[1].Value,
|
|
153
|
+
});
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
businessUnits.push({
|
|
158
|
+
Name: res.PartnerProperties[0].Value,
|
|
159
|
+
ID: res.PartnerProperties[1].Value,
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
return businessUnits;
|
|
163
|
+
}
|
|
164
|
+
throw new utils_1.SoapError('No Business Units found');
|
|
165
|
+
}
|
|
166
|
+
catch (err) {
|
|
167
|
+
throw new utils_1.SoapError(err);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* This method fetches the data folders. It business unit id is provided all data folder under that business id would be retrieved otherwise all the data folder will be retrieved. The method returns the data folders. If the data folders are not found, it returns a SoapError.
|
|
172
|
+
* @param businessUnitId this is the id of the business unit
|
|
173
|
+
* @returns
|
|
174
|
+
*/
|
|
175
|
+
async getDataFolders(businessUnitId) {
|
|
176
|
+
try {
|
|
177
|
+
const accessToken = (await this.getAccessToken()).access_token;
|
|
178
|
+
const requestOptions = {
|
|
179
|
+
method: 'POST',
|
|
180
|
+
baseURL: `https://${this.authObject.subDomain}.soap.marketingcloudapis.com`,
|
|
181
|
+
url: '/Service.asmx',
|
|
182
|
+
headers: {
|
|
183
|
+
SOAPAction: 'Retrieve',
|
|
184
|
+
'Content-Type': 'text/xml',
|
|
185
|
+
},
|
|
186
|
+
data: businessUnitId
|
|
187
|
+
? await (0, utils_1.xmlBuilder)('DataFolder', ['Name', 'ID', 'ParentFolder.ID'], accessToken, (0, utils_1.parseFilter)({ leftOperand: 'Client.ID', rightOperand: businessUnitId }))
|
|
188
|
+
: await (0, utils_1.xmlBuilder)('DataFolder', ['Name', 'ID', 'ParentFolder.ID'], accessToken),
|
|
189
|
+
};
|
|
190
|
+
const resp = await (0, axios_1.default)(requestOptions);
|
|
191
|
+
const parsedData = (0, utils_1.parseXML)(resp.data);
|
|
192
|
+
const res = parsedData.RetrieveResponseMsg?.Results;
|
|
193
|
+
const dataFolders = [];
|
|
194
|
+
if (res) {
|
|
195
|
+
if (Array.isArray(res)) {
|
|
196
|
+
res.forEach((eachRes) => {
|
|
197
|
+
dataFolders.push(eachRes);
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
dataFolders.push(res);
|
|
202
|
+
}
|
|
203
|
+
return dataFolders;
|
|
204
|
+
}
|
|
205
|
+
throw new utils_1.SoapError('No Data Folder found');
|
|
206
|
+
}
|
|
207
|
+
catch (err) {
|
|
208
|
+
throw new utils_1.SoapError(err);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* This function fetches the data extensions. It the data folder id is provided all the data extension under that data folder will be retrieved otherwise all the data extensions under the access token will be fetched. The method returns the data extensions. If the data extensions are not found, it returns a SoapError.
|
|
213
|
+
* @param dataFolderId Id of the data folder
|
|
214
|
+
* @returns
|
|
215
|
+
*/
|
|
216
|
+
async getDataExtensions(dataFolderId) {
|
|
217
|
+
try {
|
|
218
|
+
const accessToken = (await this.getAccessToken()).access_token;
|
|
219
|
+
const requestOptions = {
|
|
220
|
+
method: 'POST',
|
|
221
|
+
baseURL: `https://${this.authObject.subDomain}.soap.marketingcloudapis.com`,
|
|
222
|
+
url: '/Service.asmx',
|
|
223
|
+
headers: {
|
|
224
|
+
SOAPAction: 'Retrieve',
|
|
225
|
+
'Content-Type': 'text/xml',
|
|
226
|
+
},
|
|
227
|
+
data: dataFolderId
|
|
228
|
+
? await (0, utils_1.xmlBuilder)('DataExtension', ['NAME', 'ObjectId', 'CategoryId'], accessToken, (0, utils_1.parseFilter)({ leftOperand: 'CategoryId', rightOperand: dataFolderId }))
|
|
229
|
+
: await (0, utils_1.xmlBuilder)('DataExtension', ['NAME', 'ObjectId', 'CategoryId'], accessToken),
|
|
230
|
+
};
|
|
231
|
+
const resp = await (0, axios_1.default)(requestOptions);
|
|
232
|
+
const parsedData = (0, utils_1.parseXML)(resp.data);
|
|
233
|
+
const res = parsedData.RetrieveResponseMsg?.Results;
|
|
234
|
+
const dataExtensions = [];
|
|
235
|
+
if (res) {
|
|
236
|
+
if (Array.isArray(res)) {
|
|
237
|
+
res.forEach((eachRes) => {
|
|
238
|
+
dataExtensions.push({
|
|
239
|
+
ObjectId: eachRes.PartnerProperties[0].Value,
|
|
240
|
+
Name: eachRes.PartnerProperties[1].Value,
|
|
241
|
+
CategoryId: eachRes.PartnerProperties[2].Value,
|
|
242
|
+
});
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
else {
|
|
246
|
+
dataExtensions.push({
|
|
247
|
+
ObjectId: res.PartnerProperties[0].Value,
|
|
248
|
+
Name: res.PartnerProperties[1].Value,
|
|
249
|
+
CategoryId: res.PartnerProperties[2].Value,
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
return dataExtensions;
|
|
253
|
+
}
|
|
254
|
+
throw new utils_1.SoapError('No Data Extension found');
|
|
255
|
+
}
|
|
256
|
+
catch (err) {
|
|
257
|
+
throw new utils_1.SoapError(err);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
exports.default = SFMC;
|
|
262
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2Rrcy9zZm1jL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsa0RBQTBCO0FBWTFCLG1DQVNpQjtBQUVqQixNQUFxQixJQUFJO0lBR3ZCLFlBQVksVUFBVTtRQUNwQixJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7SUFDL0IsQ0FBQztJQUVPLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxVQUFlO1FBQy9DLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDZixNQUFNLElBQUksS0FBSyxDQUFDLHlDQUF5QyxDQUFDLENBQUM7U0FDNUQ7UUFFRCxNQUFNLFdBQVcsR0FBRztZQUNsQixFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO1lBQ25ELEVBQUUsR0FBRyxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7WUFDdkQ7Z0JBQ0UsR0FBRyxFQUFFLFdBQVc7Z0JBQ2hCLElBQUksRUFBRSxRQUFRO2dCQUNkLFFBQVEsRUFBRSxJQUFJO2dCQUNkLEtBQUssRUFBRSxZQUFZO2dCQUNuQixZQUFZLEVBQUUseUNBQXlDO2FBQ3hEO1NBQ0YsQ0FBQztRQUVGLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFO1lBQ25FLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM5QixJQUFJLFFBQVEsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDdEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLEdBQUcsd0JBQXdCLENBQUMsQ0FBQzth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QyxDQUFDLE9BQU8sRUFBRSxFQUFFO3dCQUN0QixjQUFjLENBQUMsSUFBSSxDQUFDOzRCQUNsQixRQUFRLEVBQUUsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUs7NEJBQzVDLElBQUksRUFBRSxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSzs0QkFDeEMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLO3lCQUMvQyxDQUFDLENBQUM7b0JBQ0wsQ0FBQyxDQUFDLENBQUM7aUJBQ0o7cUJBQU07b0JBQ0wsY0FBYyxDQUFDLElBQUksQ0FBQzt3QkFDbEIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLO3dCQUN4QyxJQUFJLEVBQUUsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUs7d0JBQ3BDLFVBQVUsRUFBRSxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSztxQkFDM0MsQ0FBQyxDQUFDO2lCQUNKO2dCQUNELE9BQU8sY0FBYyxDQUFDO2FBQ3ZCO1lBQ0QsTUFBTSxJQUFJLGlCQUFTLENBQUMseUJBQXlCLENBQUMsQ0FBQztTQUNoRDtRQUFDLE9BQU8sR0FBRyxFQUFFO1lBQ1osTUFBTSxJQUFJLGlCQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDMUI7SUFDSCxDQUFDO0NBQ0Y7QUEvUUQsdUJBK1FDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7XG4gIEF1dGhPYmplY3QsXG4gIEJ1c2luZXNzVW5pdCxcbiAgQnVzaW5lc3NVbml0UmVzcG9uc2UsXG4gIENvbnRhY3RBdHRyaWJ1dGVzUmVzcG9uc2UsXG4gIENyZWF0ZURhdGFFeHRlbnNpb25SZXNwb25zZSxcbiAgRGF0YUV4dGVuc2lvbixcbiAgRGF0YUV4dGVuc2lvbkJvZHksXG4gIERhdGFFeHRlbnNpb25SZXNwb25zZSxcbiAgRGF0YUZvbGRlcixcbn0gZnJvbSAnLi90eXBlJztcbmltcG9ydCB7XG4gIGdldFVybCxcbiAgaXNFeHBpcmVkLFxuICBwYXJzZUZpbHRlcixcbiAgcGFyc2VYTUwsXG4gIGdldFRva2VuLFxuICBSZXN0RXJyb3IsXG4gIFNvYXBFcnJvcixcbiAgeG1sQnVpbGRlcixcbn0gZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNGTUMge1xuICBhdXRoT2JqZWN0OiBBdXRoT2JqZWN0O1xuXG4gIGNvbnN0cnVjdG9yKGF1dGhPYmplY3QpIHtcbiAgICBTRk1DLnZhbGlkYXRlQXV0aE9iamVjdChhdXRoT2JqZWN0KTtcbiAgICB0aGlzLmF1dGhPYmplY3QgPSBhdXRoT2JqZWN0O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgdmFsaWRhdGVBdXRoT2JqZWN0KGF1dGhPYmplY3Q6IGFueSk6IGFueSB7XG4gICAgaWYgKCFhdXRoT2JqZWN0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2F1dGhPYmplY3QgaXMgcmVxdWlyZWQuIFNlZSB0aGUgcmVhZG1lLicpO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbGlkYXRpb25zID0gW1xuICAgICAgeyBrZXk6ICdjbGllbnRJZCcsIHR5cGU6ICdzdHJpbmcnLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgeyBrZXk6ICdjbGllbnRTZWNyZXQnLCB0eXBlOiAnc3RyaW5nJywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnc3ViRG9tYWluJyxcbiAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICByZWdleDogL15cXHd7Mjh9JC9nbSxcbiAgICAgICAgcmVnZXhNZXNzYWdlOiAnc3ViRG9tYWluIG11c3QgYmUgYSBzdHJpbmcgb2YgbGVuZ3RoIDI4JyxcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIHZhbGlkYXRpb25zLmZvckVhY2goKHsga2V5LCB0eXBlLCByZXF1aXJlZCwgcmVnZXgsIHJlZ2V4TWVzc2FnZSB9KSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGF1dGhPYmplY3Rba2V5XTtcbiAgICAgIGlmIChyZXF1aXJlZCAmJiAhdmFsdWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2tleX0gaXMgbWlzc2luZyBvciBpbnZhbGlkYCk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSB0eXBlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7a2V5fSBtdXN0IGJlIGEgJHt0eXBlfWApO1xuICAgICAgfVxuICAgICAgaWYgKHJlZ2V4ICYmICFyZWdleC50ZXN0KHZhbHVlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IocmVnZXhNZXNzYWdlIHx8IGAke2tleX0gZG9lcyBub3QgbWF0Y2ggdGhlIHJlcXVpcmVkIGZvcm1hdGApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGF1dGhPYmplY3Q7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBhY2Nlc3MgdG9rZW4uIElmIHRoZSB0b2tlbiBpcyBleHBpcmVkLCBpdCB3aWxsIGdlbmVyYXRlIGEgbmV3IHRva2VuLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxBdXRoT2JqZWN0Pn0gIEl0IHJldHVybnMgdGhlIGFjY2VzcyB0b2tlbiBvciBlcnJvclxuICAgKi9cbiAgYXN5bmMgZ2V0QWNjZXNzVG9rZW4oKSB7XG4gICAgaWYgKGlzRXhwaXJlZCh0aGlzLmF1dGhPYmplY3QpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBnZXRUb2tlbih0aGlzLmF1dGhPYmplY3QpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBnZW5lcmF0ZSB0b2tlbiwgd2l0aCBlcnJvcjoke2V9YCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmF1dGhPYmplY3Q7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2QgZmV0Y2hlcyB0aGUgZmllbGRzIG9mIGEgZGF0YSBleHRlbnNpb24uIEl0IHJlcXVpcmVzIHRoZSBkYXRhIGV4dGVuc2lvbiBpZC4gVGhlIG1ldGhvZCByZXR1cm5zIHRoZSBmaWVsZHMgb2YgdGhlIGRhdGEgZXh0ZW5zaW9uLiBJZiB0aGUgZGF0YSBleHRlbnNpb24gaXMgbm90IGZvdW5kLCBpdCByZXR1cm5zIGEgUmVzdEVycm9yLlxuICAgKiBAcGFyYW0gZGF0YUV4dGVuc2lvbklkIElkIG9mIHRoZSBkYXRhIGV4dGVuc2lvbiB3aG9zZSBmaWVsZHMgYXJlIHRvIGJlIGZldGNoZWRcbiAgICogQHJldHVybnNcbiAgICovXG4gIGFzeW5jIGdldERlc3RpbmF0aW9uRmllbGRzKGRhdGFFeHRlbnNpb25JZDogc3RyaW5nKTogUHJvbWlzZTxEYXRhRXh0ZW5zaW9uQm9keSB8IFJlc3RFcnJvcj4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN0SGVhZGVycyA9IHtcbiAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAkeyhhd2FpdCB0aGlzLmdldEFjY2Vzc1Rva2VuKCkpLmFjY2Vzc190b2tlbn1gLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zID0ge1xuICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICBiYXNlVVJMOiBnZXRVcmwodGhpcy5hdXRoT2JqZWN0LnN1YkRvbWFpbiksXG4gICAgICAgIHVybDogYC9kYXRhL3YxL2N1c3RvbW9iamVjdHMvJHtkYXRhRXh0ZW5zaW9uSWR9L2ZpZWxkc2AsXG4gICAgICAgIGhlYWRlcnM6IHJlc3RIZWFkZXJzLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCBheGlvcyhyZXF1ZXN0T3B0aW9ucyk7XG4gICAgICByZXR1cm4gcmVzcC5kYXRhO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhyb3cgbmV3IFJlc3RFcnJvcihlcnIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBmZXRjaGVzIHRoZSBjb250YWN0IGF0dHJpYnV0ZXMuIFRoZSBtZXRob2QgcmV0dXJucyB0aGUgY29udGFjdCBhdHRyaWJ1dGVzLiBJZiB0aGUgY29udGFjdCBhdHRyaWJ1dGVzIGFyZSBub3QgZm91bmQsIGl0IHJldHVybnMgYSBSZXN0RXJyb3IuXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBhc3luYyBnZXRDb250YWN0QXR0cmlidXRlcygpOiBQcm9taXNlPENvbnRhY3RBdHRyaWJ1dGVzUmVzcG9uc2UgfCBSZXN0RXJyb3I+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdEhlYWRlcnMgPSB7XG4gICAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHsoYXdhaXQgdGhpcy5nZXRBY2Nlc3NUb2tlbigpKS5hY2Nlc3NfdG9rZW59YCxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXF1ZXN0T3B0aW9ucyA9IHtcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgYmFzZVVSTDogZ2V0VXJsKHRoaXMuYXV0aE9iamVjdC5zdWJEb21haW4pLFxuICAgICAgICB1cmw6ICcvY29udGFjdHMvdjEvYXR0cmlidXRlU2V0RGVmaW5pdGlvbnMnLFxuICAgICAgICBoZWFkZXJzOiByZXN0SGVhZGVycyxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXNwID0gYXdhaXQgYXhpb3MocmVxdWVzdE9wdGlvbnMpO1xuICAgICAgcmV0dXJuIHJlc3AuZGF0YTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRocm93IG5ldyBSZXN0RXJyb3IoZXJyKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2QgY3JlYXRlcyBhIGRhdGEgZXh0ZW5zaW9uLiBJdCByZXF1aXJlcyB0aGUgZGF0YSBleHRlbnNpb24gZmllbGRzLiBUaGUgbWV0aG9kIHJldHVybnMgdGhlIGRhdGEgZXh0ZW5zaW9uIGNyZWF0ZWQuIElmIHRoZSBkYXRhIGV4dGVuc2lvbiBpcyBub3QgY3JlYXRlZCwgaXQgcmV0dXJucyBhIFJlc3RFcnJvci5cbiAgICogQHBhcmFtIGJvZHkgRGF0YUV4dGVuc2lvbiBmaWVsZHNcbiAgICogQHJldHVybnNcbiAgICovXG4gIGFzeW5jIGNyZWF0ZURhdGFFeHRlbnNpb24oXG4gICAgYm9keTogRGF0YUV4dGVuc2lvbkJvZHksXG4gICk6IFByb21pc2U8Q3JlYXRlRGF0YUV4dGVuc2lvblJlc3BvbnNlIHwgUmVzdEVycm9yPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3RIZWFkZXJzID0ge1xuICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7KGF3YWl0IHRoaXMuZ2V0QWNjZXNzVG9rZW4oKSkuYWNjZXNzX3Rva2VufWAsXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBiYXNlVVJMOiBnZXRVcmwodGhpcy5hdXRoT2JqZWN0LnN1YkRvbWFpbiksXG4gICAgICAgIHVybDogJy9kYXRhL3YxL2N1c3RvbW9iamVjdHMnLFxuICAgICAgICBoZWFkZXJzOiByZXN0SGVhZGVycyxcbiAgICAgICAgZGF0YTogYm9keSxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXNwID0gYXdhaXQgYXhpb3MocmVxdWVzdE9wdGlvbnMpO1xuICAgICAgcmV0dXJuIHJlc3AuZGF0YTtcbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgdGhyb3cgbmV3IFJlc3RFcnJvcihlcnIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBmZXRjaGVzIHRoZSBidXNpbmVzcyB1bml0cy4gVGhlIG1ldGhvZCByZXR1cm5zIHRoZSBidXNpbmVzcyB1bml0cy4gSWYgdGhlIGJ1c2luZXNzIHVuaXRzIGFyZSBub3QgZm91bmQsIGl0IHJldHVybnMgYSBTb2FwRXJyb3IuXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBhc3luYyBnZXRCdXNpbmVzc1VuaXRzKCk6IFByb21pc2U8QnVzaW5lc3NVbml0W10gfCBTb2FwRXJyb3I+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYWNjZXNzVG9rZW4gPSAoYXdhaXQgdGhpcy5nZXRBY2Nlc3NUb2tlbigpKS5hY2Nlc3NfdG9rZW47XG4gICAgICBjb25zdCByZXF1ZXN0T3B0aW9ucyA9IHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGJhc2VVUkw6IGBodHRwczovLyR7dGhpcy5hdXRoT2JqZWN0LnN1YkRvbWFpbn0uc29hcC5tYXJrZXRpbmdjbG91ZGFwaXMuY29tYCxcbiAgICAgICAgdXJsOiAnL1NlcnZpY2UuYXNteCcsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBTT0FQQWN0aW9uOiAnUmV0cmlldmUnLFxuICAgICAgICAgICdDb250ZW50LVR5cGUnOiAndGV4dC94bWwnLFxuICAgICAgICB9LFxuICAgICAgICBkYXRhOiBhd2FpdCB4bWxCdWlsZGVyKCdCdXNpbmVzc1VuaXQnLCBbJ25hbWUnLCAnaWQnXSwgYWNjZXNzVG9rZW4pLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCBheGlvcyhyZXF1ZXN0T3B0aW9ucyk7XG4gICAgICBjb25zdCBwYXJzZWREYXRhID0gcGFyc2VYTUwocmVzcC5kYXRhKTtcbiAgICAgIGNvbnN0IHJlcyA9IHBhcnNlZERhdGEuUmV0cmlldmVSZXNwb25zZU1zZz8uUmVzdWx0cyBhc1xuICAgICAgICB8IEJ1c2luZXNzVW5pdFJlc3BvbnNlXG4gICAgICAgIHwgQnVzaW5lc3NVbml0UmVzcG9uc2VbXTtcbiAgICAgIGNvbnN0IGJ1c2luZXNzVW5pdHM6IEJ1c2luZXNzVW5pdFtdID0gW107XG4gICAgICBpZiAocmVzKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlcykpIHtcbiAgICAgICAgICByZXMuZm9yRWFjaCgoZWFjaFJlcykgPT4ge1xuICAgICAgICAgICAgYnVzaW5lc3NVbml0cy5wdXNoKHtcbiAgICAgICAgICAgICAgTmFtZTogZWFjaFJlcy5QYXJ0bmVyUHJvcGVydGllc1swXS5WYWx1ZSxcbiAgICAgICAgICAgICAgSUQ6IGVhY2hSZXMuUGFydG5lclByb3BlcnRpZXNbMV0uVmFsdWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBidXNpbmVzc1VuaXRzLnB1c2goe1xuICAgICAgICAgICAgTmFtZTogcmVzLlBhcnRuZXJQcm9wZXJ0aWVzWzBdLlZhbHVlLFxuICAgICAgICAgICAgSUQ6IHJlcy5QYXJ0bmVyUHJvcGVydGllc1sxXS5WYWx1ZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYnVzaW5lc3NVbml0cztcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBTb2FwRXJyb3IoJ05vIEJ1c2luZXNzIFVuaXRzIGZvdW5kJyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aHJvdyBuZXcgU29hcEVycm9yKGVycik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIGZldGNoZXMgdGhlIGRhdGEgZm9sZGVycy4gSXQgYnVzaW5lc3MgdW5pdCBpZCBpcyBwcm92aWRlZCBhbGwgZGF0YSBmb2xkZXIgdW5kZXIgdGhhdCBidXNpbmVzcyBpZCB3b3VsZCBiZSByZXRyaWV2ZWQgb3RoZXJ3aXNlIGFsbCB0aGUgZGF0YSBmb2xkZXIgd2lsbCBiZSByZXRyaWV2ZWQuIFRoZSBtZXRob2QgcmV0dXJucyB0aGUgZGF0YSBmb2xkZXJzLiBJZiB0aGUgZGF0YSBmb2xkZXJzIGFyZSBub3QgZm91bmQsIGl0IHJldHVybnMgYSBTb2FwRXJyb3IuXG4gICAqIEBwYXJhbSBidXNpbmVzc1VuaXRJZCB0aGlzIGlzIHRoZSBpZCBvZiB0aGUgYnVzaW5lc3MgdW5pdFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgYXN5bmMgZ2V0RGF0YUZvbGRlcnMoYnVzaW5lc3NVbml0SWQ/OiBzdHJpbmcpOiBQcm9taXNlPERhdGFGb2xkZXJbXSB8IFNvYXBFcnJvcj4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IChhd2FpdCB0aGlzLmdldEFjY2Vzc1Rva2VuKCkpLmFjY2Vzc190b2tlbjtcbiAgICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zID0ge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgYmFzZVVSTDogYGh0dHBzOi8vJHt0aGlzLmF1dGhPYmplY3Quc3ViRG9tYWlufS5zb2FwLm1hcmtldGluZ2Nsb3VkYXBpcy5jb21gLFxuICAgICAgICB1cmw6ICcvU2VydmljZS5hc214JyxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIFNPQVBBY3Rpb246ICdSZXRyaWV2ZScsXG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICd0ZXh0L3htbCcsXG4gICAgICAgIH0sXG4gICAgICAgIGRhdGE6IGJ1c2luZXNzVW5pdElkXG4gICAgICAgICAgPyBhd2FpdCB4bWxCdWlsZGVyKFxuICAgICAgICAgICAgICAnRGF0YUZvbGRlcicsXG4gICAgICAgICAgICAgIFsnTmFtZScsICdJRCcsICdQYXJlbnRGb2xkZXIuSUQnXSxcbiAgICAgICAgICAgICAgYWNjZXNzVG9rZW4sXG4gICAgICAgICAgICAgIHBhcnNlRmlsdGVyKHsgbGVmdE9wZXJhbmQ6ICdDbGllbnQuSUQnLCByaWdodE9wZXJhbmQ6IGJ1c2luZXNzVW5pdElkIH0pLFxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogYXdhaXQgeG1sQnVpbGRlcignRGF0YUZvbGRlcicsIFsnTmFtZScsICdJRCcsICdQYXJlbnRGb2xkZXIuSUQnXSwgYWNjZXNzVG9rZW4pLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCBheGlvcyhyZXF1ZXN0T3B0aW9ucyk7XG4gICAgICBjb25zdCBwYXJzZWREYXRhID0gcGFyc2VYTUwocmVzcC5kYXRhKTtcbiAgICAgIGNvbnN0IHJlcyA9IHBhcnNlZERhdGEuUmV0cmlldmVSZXNwb25zZU1zZz8uUmVzdWx0cyBhcyBEYXRhRm9sZGVyIHwgRGF0YUZvbGRlcltdO1xuICAgICAgY29uc3QgZGF0YUZvbGRlcnM6IERhdGFGb2xkZXJbXSA9IFtdO1xuICAgICAgaWYgKHJlcykge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXMpKSB7XG4gICAgICAgICAgcmVzLmZvckVhY2goKGVhY2hSZXMpID0+IHtcbiAgICAgICAgICAgIGRhdGFGb2xkZXJzLnB1c2goZWFjaFJlcyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGF0YUZvbGRlcnMucHVzaChyZXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhRm9sZGVycztcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBTb2FwRXJyb3IoJ05vIERhdGEgRm9sZGVyIGZvdW5kJyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aHJvdyBuZXcgU29hcEVycm9yKGVycik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gZmV0Y2hlcyB0aGUgZGF0YSBleHRlbnNpb25zLiBJdCB0aGUgZGF0YSBmb2xkZXIgaWQgaXMgcHJvdmlkZWQgYWxsIHRoZSBkYXRhIGV4dGVuc2lvbiB1bmRlciB0aGF0IGRhdGEgZm9sZGVyIHdpbGwgYmUgcmV0cmlldmVkIG90aGVyd2lzZSBhbGwgdGhlIGRhdGEgZXh0ZW5zaW9ucyB1bmRlciB0aGUgYWNjZXNzIHRva2VuIHdpbGwgYmUgZmV0Y2hlZC4gVGhlIG1ldGhvZCByZXR1cm5zIHRoZSBkYXRhIGV4dGVuc2lvbnMuIElmIHRoZSBkYXRhIGV4dGVuc2lvbnMgYXJlIG5vdCBmb3VuZCwgaXQgcmV0dXJucyBhIFNvYXBFcnJvci5cbiAgICogQHBhcmFtIGRhdGFGb2xkZXJJZCBJZCBvZiB0aGUgZGF0YSBmb2xkZXJcbiAgICogQHJldHVybnNcbiAgICovXG4gIGFzeW5jIGdldERhdGFFeHRlbnNpb25zKGRhdGFGb2xkZXJJZD86IHN0cmluZyk6IFByb21pc2U8RGF0YUV4dGVuc2lvbltdIHwgU29hcEVycm9yPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gKGF3YWl0IHRoaXMuZ2V0QWNjZXNzVG9rZW4oKSkuYWNjZXNzX3Rva2VuO1xuICAgICAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBiYXNlVVJMOiBgaHR0cHM6Ly8ke3RoaXMuYXV0aE9iamVjdC5zdWJEb21haW59LnNvYXAubWFya2V0aW5nY2xvdWRhcGlzLmNvbWAsXG4gICAgICAgIHVybDogJy9TZXJ2aWNlLmFzbXgnLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgU09BUEFjdGlvbjogJ1JldHJpZXZlJyxcbiAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ3RleHQveG1sJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF0YTogZGF0YUZvbGRlcklkXG4gICAgICAgICAgPyBhd2FpdCB4bWxCdWlsZGVyKFxuICAgICAgICAgICAgICAnRGF0YUV4dGVuc2lvbicsXG4gICAgICAgICAgICAgIFsnTkFNRScsICdPYmplY3RJZCcsICdDYXRlZ29yeUlkJ10sXG4gICAgICAgICAgICAgIGFjY2Vzc1Rva2VuLFxuICAgICAgICAgICAgICBwYXJzZUZpbHRlcih7IGxlZnRPcGVyYW5kOiAnQ2F0ZWdvcnlJZCcsIHJpZ2h0T3BlcmFuZDogZGF0YUZvbGRlcklkIH0pLFxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogYXdhaXQgeG1sQnVpbGRlcignRGF0YUV4dGVuc2lvbicsIFsnTkFNRScsICdPYmplY3RJZCcsICdDYXRlZ29yeUlkJ10sIGFjY2Vzc1Rva2VuKSxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXNwID0gYXdhaXQgYXhpb3MocmVxdWVzdE9wdGlvbnMpO1xuICAgICAgY29uc3QgcGFyc2VkRGF0YSA9IHBhcnNlWE1MKHJlc3AuZGF0YSk7XG4gICAgICBjb25zdCByZXMgPSBwYXJzZWREYXRhLlJldHJpZXZlUmVzcG9uc2VNc2c/LlJlc3VsdHMgYXNcbiAgICAgICAgfCBEYXRhRXh0ZW5zaW9uUmVzcG9uc2VcbiAgICAgICAgfCBEYXRhRXh0ZW5zaW9uUmVzcG9uc2VbXTtcbiAgICAgIGNvbnN0IGRhdGFFeHRlbnNpb25zOiBEYXRhRXh0ZW5zaW9uW10gPSBbXTtcbiAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzKSkge1xuICAgICAgICAgIHJlcy5mb3JFYWNoKChlYWNoUmVzKSA9PiB7XG4gICAgICAgICAgICBkYXRhRXh0ZW5zaW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgT2JqZWN0SWQ6IGVhY2hSZXMuUGFydG5lclByb3BlcnRpZXNbMF0uVmFsdWUsXG4gICAgICAgICAgICAgIE5hbWU6IGVhY2hSZXMuUGFydG5lclByb3BlcnRpZXNbMV0uVmFsdWUsXG4gICAgICAgICAgICAgIENhdGVnb3J5SWQ6IGVhY2hSZXMuUGFydG5lclByb3BlcnRpZXNbMl0uVmFsdWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkYXRhRXh0ZW5zaW9ucy5wdXNoKHtcbiAgICAgICAgICAgIE9iamVjdElkOiByZXMuUGFydG5lclByb3BlcnRpZXNbMF0uVmFsdWUsXG4gICAgICAgICAgICBOYW1lOiByZXMuUGFydG5lclByb3BlcnRpZXNbMV0uVmFsdWUsXG4gICAgICAgICAgICBDYXRlZ29yeUlkOiByZXMuUGFydG5lclByb3BlcnRpZXNbMl0uVmFsdWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGFFeHRlbnNpb25zO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IFNvYXBFcnJvcignTm8gRGF0YSBFeHRlbnNpb24gZm91bmQnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRocm93IG5ldyBTb2FwRXJyb3IoZXJyKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../../../src/sdks/sfmc/index.test.ts"],"names":[],"mappings":""}
|