UNPKG

@rudderstack/integrations-lib

Version:
115 lines 17.8 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); const lodash_1 = require("lodash"); const SqlString = __importStar(require("sqlstring")); const factory_1 = require("../../network/factory"); const config_1 = require("./config"); class GoogleAds { constructor(authObject) { this.authObject = authObject; this.httpClient = factory_1.HttpClientFactory.getHttpClient(factory_1.ClientNames.Axios, { baseURL: `https://googleads.googleapis.com/${config_1.API_VERSION}/customers`, }); } getHeader() { return { headers: { Authorization: `Bearer ${this.authObject.accessToken}`, 'developer-token': this.authObject.developerToken, 'login-customer-id': this.authObject.loginCustomerId ? this.authObject.loginCustomerId : this.authObject.customerId, }, }; } executePostRequest(url, data) { return this.httpClient.post(url, data, this.getHeader()); } async getConversionActionId(conversionName) { const queryString = SqlString.format('SELECT conversion_action.id FROM conversion_action WHERE conversion_action.name = ?', [conversionName]); const data = { query: queryString, }; const searchStreamResponse = await this.executePostRequest(`/${this.authObject.customerId}/googleAds:searchStream`, data); if (searchStreamResponse.type === 'success') { const conversionAction = (0, lodash_1.get)(searchStreamResponse.responseBody[0], 'results.0.conversionAction.resourceName'); return conversionAction ?? null; } return searchStreamResponse; } async getCustomVariable() { const queryString = SqlString.format('SELECT conversion_custom_variable.name FROM conversion_custom_variable'); const data = { query: queryString, }; const searchStreamResponse = await this.executePostRequest(`/${this.authObject.customerId}/googleAds:searchStream`, data); if (searchStreamResponse.type === 'success') { const customVariables = (0, lodash_1.get)(searchStreamResponse.responseBody[0], 'results'); return customVariables; } return searchStreamResponse; } async addConversionAdjustMent(conversionAdjustMentData) { const conversionAdjustMentResponse = await this.executePostRequest(`/${this.authObject.customerId}:uploadConversionAdjustments`, conversionAdjustMentData); return conversionAdjustMentResponse; } async createOfflineUserDataJob(data) { const conversionAdjustMentResponse = await this.executePostRequest(`/${this.authObject.customerId}/offlineUserDataJobs:create`, data); return conversionAdjustMentResponse; } async addUserToOfflineUserDataJob(jobId, offlineUserData) { const addUserToJobResponse = await this.executePostRequest(`/${this.authObject.customerId}/offlineUserDataJobs/${jobId}:addOperations`, offlineUserData); return addUserToJobResponse; } async addConversionsToOfflineUserDataJob(jobId, offlineUserData) { const addUserToJobResponse = await this.executePostRequest(`/${this.authObject.customerId}/offlineUserDataJobs/${jobId}:addOperations`, offlineUserData); return addUserToJobResponse; } async runOfflineUserDataJob(jobId) { const conversionAdjustMentResponse = await this.executePostRequest(`/${this.authObject.customerId}/offlineUserDataJobs/${jobId}:run`, {}); return conversionAdjustMentResponse; } async uploadClickConversion(uploadClickConversionData) { const uploadClickConversionResponse = await this.executePostRequest(`/${this.authObject.customerId}:uploadClickConversions`, uploadClickConversionData); return uploadClickConversionResponse; } async uploadCallConversion(uploadCallConversionData) { const uploadCallConversionResponse = await this.executePostRequest(`/${this.authObject.customerId}:uploadCallConversions`, uploadCallConversionData); return uploadCallConversionResponse; } } exports.default = GoogleAds; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ29vZ2xlQWRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Nka3MvZ29vZ2xlQWRzUmVzdEFQSS9nb29nbGVBZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtQ0FBNkI7QUFDN0IscURBQXVDO0FBRXZDLG1EQUF1RTtBQUN2RSxxQ0FBdUM7QUFtQnZDLE1BQXFCLFNBQVM7SUFLNUIsWUFBWSxVQUFzQjtRQUNoQyxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsVUFBVSxHQUFHLDJCQUFpQixDQUFDLGFBQWEsQ0FBQyxxQkFBVyxDQUFDLEtBQUssRUFBRTtZQUNuRSxPQUFPLEVBQUUsb0NBQW9DLG9CQUFXLFlBQVk7U0FDckUsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLFNBQVM7UUFDZixPQUFPO1lBQ0wsT0FBTyxFQUFFO2dCQUNQLGFBQWEsRUFBRSxVQUFVLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFO2dCQUN0RCxpQkFBaUIsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWM7Z0JBQ2pELG1CQUFtQixFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZTtvQkFDbEQsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZTtvQkFDakMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVTthQUMvQjtTQUNGLENBQUM7SUFDSixDQUFDO0lBRU8sa0JBQWtCLENBQUksR0FBVyxFQUFFLElBQVk7UUFDckQsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBSSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFTSxLQUFLLENBQUMscUJBQXFCLENBQ2hDLGNBQXNCO1FBRXRCLE1BQU0sV0FBVyxHQUFHLFNBQVMs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QixDQUFDO0lBQ3RDLENBQUM7SUFFTSxLQUFLLENBQUMscUJBQXFCLENBQ2hDLHlCQUE4QztRQUU5QyxNQUFNLDZCQUE2QixHQUFHLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUNqRSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSx5QkFBeUIsRUFDdkQseUJBQXlCLENBQzFCLENBQUM7UUFFRixPQUFPLDZCQUE2QixDQUFDO0lBQ3ZDLENBQUM7SUFFTSxLQUFLLENBQUMsb0JBQW9CLENBQy9CLHdCQUE0QztRQUU1QyxNQUFNLDRCQUE0QixHQUFHLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUNoRSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSx3QkFBd0IsRUFDdEQsd0JBQXdCLENBQ3pCLENBQUM7UUFFRixPQUFPLDRCQUE0QixDQUFDO0lBQ3RDLENBQUM7Q0FDRjtBQXBKRCw0QkFvSkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXQgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0ICogYXMgU3FsU3RyaW5nIGZyb20gJ3NxbHN0cmluZyc7XG5pbXBvcnQgeyBBcGlSZXNwb25zZSwgSHR0cENsaWVudCwgUmVxdWVzdENvbmZpZyB9IGZyb20gJy4uLy4uL25ldHdvcmsvY2xpZW50cy90eXBlcyc7XG5pbXBvcnQgeyBDbGllbnROYW1lcywgSHR0cENsaWVudEZhY3RvcnkgfSBmcm9tICcuLi8uLi9uZXR3b3JrL2ZhY3RvcnknO1xuaW1wb3J0IHsgQVBJX1ZFUlNJT04gfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQge1xuICBBdXRoT2JqZWN0LFxuICBDYWxsQ29udmVyc2lvbkRhdGEsXG4gIENhbGxDb252ZXJzaW9uUmVzcG9uc2UsXG4gIENsaWNrQ29udmVyc2lvbkRhdGEsXG4gIENsaWNrQ29udmVyc2lvblJlc3BvbnNlLFxuICBDb252ZXJzaW9uQWN0aW9uUmVzcG9uc2UsXG4gIENvbnZlcnNpb25BZGp1c3RtZW50RGF0YSxcbiAgQ29udmVyc2lvbkFkanVzdG1lbnRSZXNwb25zZSxcbiAgQ3JlYXRlT2ZmbGluZVVzZXJEYXRhSm9iRGF0YSxcbiAgQ3JlYXRlT2ZmbGluZVVzZXJEYXRhSm9iUmVzcG9zZSxcbiAgQ3VzdG9tVmFyaWFibGVSZXN1bHRzLFxuICBPZmZsaW5lVXNlckRhdGFKb2JBZGREYXRhLFxuICBPZmZsaW5lVXNlckRhdGFKb2JBZGREYXRhUmVzcG9uc2UsXG4gIFJ1bk9mZmxpbmVVc2VyRGF0YUpvYlJlc3BvbnNlLFxuICBTZWFyY2hTdHJlYW1SZXNwb25zZSxcbn0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdvb2dsZUFkcyB7XG4gIHByaXZhdGUgYXV0aE9iamVjdDogQXV0aE9iamVjdDtcblxuICBwcml2YXRlIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQ7XG5cbiAgY29uc3RydWN0b3IoYXV0aE9iamVjdDogQXV0aE9iamVjdCkge1xuICAgIHRoaXMuYXV0aE9iamVjdCA9IGF1dGhPYmplY3Q7XG4gICAgdGhpcy5odHRwQ2xpZW50ID0gSHR0cENsaWVudEZhY3RvcnkuZ2V0SHR0cENsaWVudChDbGllbnROYW1lcy5BeGlvcywge1xuICAgICAgYmFzZVVSTDogYGh0dHBzOi8vZ29vZ2xlYWRzLmdvb2dsZWFwaXMuY29tLyR7QVBJX1ZFUlNJT059L2N1c3RvbWVyc2AsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldEhlYWRlcigpOiBSZXF1ZXN0Q29uZmlnIHtcbiAgICByZXR1cm4ge1xuICAgICAgaGVhZGVyczoge1xuICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dGhpcy5hdXRoT2JqZWN0LmFjY2Vzc1Rva2VufWAsXG4gICAgICAgICdkZXZlbG9wZXItdG9rZW4nOiB0aGlzLmF1dGhPYmplY3QuZGV2ZWxvcGVyVG9rZW4sXG4gICAgICAgICdsb2dpbi1jdXN0b21lci1pZCc6IHRoaXMuYXV0aE9iamVjdC5sb2dpbkN1c3RvbWVySWRcbiAgICAgICAgICA/IHRoaXMuYXV0aE9iamVjdC5sb2dpbkN1c3RvbWVySWRcbiAgICAgICAgICA6IHRoaXMuYXV0aE9iamVjdC5jdXN0b21lcklkLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBleGVjdXRlUG9zdFJlcXVlc3Q8VD4odXJsOiBzdHJpbmcsIGRhdGE6IG9iamVjdCk6IFByb21pc2U8QXBpUmVzcG9uc2U8VD4+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8VD4odXJsLCBkYXRhLCB0aGlzLmdldEhlYWRlcigpKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRDb252ZXJzaW9uQWN0aW9uSWQoXG4gICAgY29udmVyc2lvbk5hbWU6IHN0cmluZyxcbiAgKTogUHJvbWlzZTxzdHJpbmcgfCBBcGlSZXNwb25zZTxBcnJheTxTZWFyY2hTdHJlYW1SZXNwb25zZTxDb252ZXJzaW9uQWN0aW9uUmVzcG9uc2U+Pj4+IHtcbiAgICBjb25zdCBxdWVyeVN0cmluZyA9IFNxbFN0cmluZy5mb3JtYXQoXG4gICAgICAnU0VMRUNUIGNvbnZlcnNpb25fYWN0aW9uLmlkIEZST00gY29udmVyc2lvbl9hY3Rpb24gV0hFUkUgY29udmVyc2lvbl9hY3Rpb24ubmFtZSA9ID8nLFxuICAgICAgW2NvbnZlcnNpb25OYW1lXSxcbiAgICApO1xuICAgIGNvbnN0IGRhdGE6IHsgcXVlcnk6IHN0cmluZyB9ID0ge1xuICAgICAgcXVlcnk6IHF1ZXJ5U3RyaW5nLFxuICAgIH07XG5cbiAgICBjb25zdCBzZWFyY2hTdHJlYW1SZXNwb25zZSA9IGF3YWl0IHRoaXMuZXhlY3V0ZVBvc3RSZXF1ZXN0PFxuICAgICAgQXJyYXk8U2VhcmNoU3RyZWFtUmVzcG9uc2U8Q29udmVyc2lvbkFjdGlvblJlc3BvbnNlPj5cbiAgICA+KGAvJHt0aGlzLmF1dGhPYmplY3QuY3VzdG9tZXJJZH0vZ29vZ2xlQWRzOnNlYXJjaFN0cmVhbWAsIGRhdGEpO1xuICAgIGlmIChzZWFyY2hTdHJlYW1SZXNwb25zZS50eXBlID09PSAnc3VjY2VzcycpIHtcbiAgICAgIGNvbnN0IGNvbnZlcnNpb25BY3Rpb24gPSBnZXQoXG4gICAgICAgIHNlYXJjaFN0cmVhbVJlc3BvbnNlLnJlc3BvbnNlQm9keVswXSxcbiAgICAgICAgJ3Jlc3VsdHMuMC5jb252ZXJzaW9uQWN0aW9uLnJlc291cmNlTmFtZScsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGNvbnZlcnNpb25BY3Rpb24gPz8gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHNlYXJjaFN0cmVhbVJlc3BvbnNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEN1c3RvbVZhcmlhYmxlKCk6IFByb21pc2U8XG4gICAgQ3VzdG9tVmFyaWFibGVSZXN1bHRzW10gfCBBcGlSZXNwb25zZTxBcnJheTxTZWFyY2hTdHJlYW1SZXNwb25zZTxDdXN0b21WYXJpYWJsZVJlc3VsdHM+Pj5cbiAgPiB7XG4gICAgY29uc3QgcXVlcnlTdHJpbmcgPSBTcWxTdHJpbmcuZm9ybWF0KFxuICAgICAgJ1NFTEVDVCBjb252ZXJzaW9uX2N1c3RvbV92YXJpYWJsZS5uYW1lIEZST00gY29udmVyc2lvbl9jdXN0b21fdmFyaWFibGUnLFxuICAgICk7XG4gICAgY29uc3QgZGF0YTogeyBxdWVyeTogc3RyaW5nIH0gPSB7XG4gICAgICBxdWVyeTogcXVlcnlTdHJpbmcsXG4gICAgfTtcblxuICAgIGNvbnN0IHNlYXJjaFN0cmVhbVJlc3BvbnNlID0gYXdhaXQgdGhpcy5leGVjdXRlUG9zdFJlcXVlc3Q8XG4gICAgICBBcnJheTxTZWFyY2hTdHJlYW1SZXNwb25zZTxDdXN0b21WYXJpYWJsZVJlc3VsdHM+PlxuICAgID4oYC8ke3RoaXMuYXV0aE9iamVjdC5jdXN0b21lcklkfS9nb29nbGVBZHM6c2VhcmNoU3RyZWFtYCwgZGF0YSk7XG4gICAgaWYgKHNlYXJjaFN0cmVhbVJlc3BvbnNlLnR5cGUgPT09ICdzdWNjZXNzJykge1xuICAgICAgY29uc3QgY3VzdG9tVmFyaWFibGVzID0gZ2V0KHNlYXJjaFN0cmVhbVJlc3BvbnNlLnJlc3BvbnNlQm9keVswXSwgJ3Jlc3VsdHMnKTtcbiAgICAgIHJldHVybiBjdXN0b21WYXJpYWJsZXM7XG4gICAgfVxuICAgIHJldHVybiBzZWFyY2hTdHJlYW1SZXNwb25zZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBhZGRDb252ZXJzaW9uQWRqdXN0TWVudChcbiAgICBjb252ZXJzaW9uQWRqdXN0TWVudERhdGE6IENvbnZlcnNpb25BZGp1c3RtZW50RGF0YSxcbiAgKTogUHJvbWlzZTxBcGlSZXNwb25zZTxDb252ZXJzaW9uQWRqdXN0bWVudFJlc3BvbnNlPj4ge1xuICAgIGNvbnN0IGNvbnZlcnNpb25BZGp1c3RNZW50UmVzcG9uc2UgPVxuICAgICAgYXdhaXQgdGhpcy5leGVjdXRlUG9zdFJlcXVlc3Q8Q29udmVyc2lvbkFkanVzdG1lbnRSZXNwb25zZT4oXG4gICAgICAgIGAvJHt0aGlzLmF1dGhPYmplY3QuY3VzdG9tZXJJZH06dXBsb2FkQ29udmVyc2lvbkFkanVzdG1lbnRzYCxcbiAgICAgICAgY29udmVyc2lvbkFkanVzdE1lbnREYXRhLFxuICAgICAgKTtcbiAgICByZXR1cm4gY29udmVyc2lvbkFkanVzdE1lbnRSZXNwb25zZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjcmVhdGVPZmZsaW5lVXNlckRhdGFKb2IoXG4gICAgZGF0YTogQ3JlYXRlT2ZmbGluZVVzZXJEYXRhSm9iRGF0YSxcbiAgKTogUHJvbWlzZTxBcGlSZXNwb25zZTxDcmVhdGVPZmZsaW5lVXNlckRhdGFKb2JSZXNwb3NlPj4ge1xuICAgIGNvbnN0IGNvbnZlcnNpb25BZGp1c3RNZW50UmVzcG9uc2UgPVxuICAgICAgYXdhaXQgdGhpcy5leGVjdXRlUG9zdFJlcXVlc3Q8Q3JlYXRlT2ZmbGluZVVzZXJEYXRhSm9iUmVzcG9zZT4oXG4gICAgICAgIGAvJHt0aGlzLmF1dGhPYmplY3QuY3VzdG9tZXJJZH0vb2ZmbGluZVVzZXJEYXRhSm9iczpjcmVhdGVgLFxuICAgICAgICBkYXRhLFxuICAgICAgKTtcbiAgICByZXR1cm4gY29udmVyc2lvbkFkanVzdE1lbnRSZXNwb25zZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBhZGRVc2VyVG9PZmZsaW5lVXNlckRhdGFKb2IoXG4gICAgam9iSWQ6IHN0cmluZyxcbiAgICBvZmZsaW5lVXNlckRhdGE6IE9mZmxpbmVVc2VyRGF0YUpvYkFkZERhdGEsXG4gICkge1xuICAgIGNvbnN0IGFkZFVzZXJUb0pvYlJlc3BvbnNlID0gYXdhaXQgdGhpcy5leGVjdXRlUG9zdFJlcXVlc3Q8T2ZmbGluZVVzZXJEYXRhSm9iQWRkRGF0YVJlc3BvbnNlPihcbiAgICAgIGAvJHt0aGlzLmF1dGhPYmplY3QuY3VzdG9tZXJJZH0vb2ZmbGluZVVzZXJEYXRhSm9icy8ke2pvYklkfTphZGRPcGVyYXRpb25zYCxcbiAgICAgIG9mZmxpbmVVc2VyRGF0YSxcbiAgICApO1xuICAgIHJldHVybiBhZGRVc2VyVG9Kb2JSZXNwb25zZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBhZGRDb252ZXJzaW9uc1RvT2ZmbGluZVVzZXJEYXRhSm9iKFxuICAgIGpvYklkOiBzdHJpbmcsXG4gICAgb2ZmbGluZVVzZXJEYXRhOiBPZmZsaW5lVXNlckRhdGFKb2JBZGREYXRhLFxuICApIHtcbiAgICBjb25zdCBhZGRVc2VyVG9Kb2JSZXNwb25zZSA9IGF3YWl0IHRoaXMuZXhlY3V0ZVBvc3RSZXF1ZXN0PE9mZmxpbmVVc2VyRGF0YUpvYkFkZERhdGFSZXNwb25zZT4oXG4gICAgICBgLyR7dGhpcy5hdXRoT2JqZWN0LmN1c3RvbWVySWR9L29mZmxpbmVVc2VyRGF0YUpvYnMvJHtqb2JJZH06YWRkT3BlcmF0aW9uc2AsXG4gICAgICBvZmZsaW5lVXNlckRhdGEsXG4gICAgKTtcbiAgICByZXR1cm4gYWRkVXNlclRvSm9iUmVzcG9uc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcnVuT2ZmbGluZVVzZXJEYXRhSm9iKFxuICAgIGpvYklkOiBzdHJpbmcsXG4gICk6IFByb21pc2U8QXBpUmVzcG9uc2U8UnVuT2ZmbGluZVVzZXJEYXRhSm9iUmVzcG9uc2U+PiB7XG4gICAgY29uc3QgY29udmVyc2lvbkFkanVzdE1lbnRSZXNwb25zZSA9XG4gICAgICBhd2FpdCB0aGlzLmV4ZWN1dGVQb3N0UmVxdWVzdDxSdW5PZmZsaW5lVXNlckRhdGFKb2JSZXNwb25zZT4oXG4gICAgICAgIGAvJHt0aGlzLmF1dGhPYmplY3QuY3VzdG9tZXJJZH0vb2ZmbGluZVVzZXJEYXRhSm9icy8ke2pvYklkfTpydW5gLFxuICAgICAgICB7fSxcbiAgICAgICk7XG4gICAgcmV0dXJuIGNvbnZlcnNpb25BZGp1c3RNZW50UmVzcG9uc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBsb2FkQ2xpY2tDb252ZXJzaW9uKFxuICAgIHVwbG9hZENsaWNrQ29udmVyc2lvbkRhdGE6IENsaWNrQ29udmVyc2lvbkRhdGEsXG4gICk6IFByb21pc2U8QXBpUmVzcG9uc2U8Q2xpY2tDb252ZXJzaW9uUmVzcG9uc2U+PiB7XG4gICAgY29uc3QgdXBsb2FkQ2xpY2tDb252ZXJzaW9uUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmV4ZWN1dGVQb3N0UmVxdWVzdDxDbGlja0NvbnZlcnNpb25SZXNwb25zZT4oXG4gICAgICBgLyR7dGhpcy5hdXRoT2JqZWN0LmN1c3RvbWVySWR9OnVwbG9hZENsaWNrQ29udmVyc2lvbnNgLFxuICAgICAgdXBsb2FkQ2xpY2tDb252ZXJzaW9uRGF0YSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHVwbG9hZENsaWNrQ29udmVyc2lvblJlc3BvbnNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwbG9hZENhbGxDb252ZXJzaW9uKFxuICAgIHVwbG9hZENhbGxDb252ZXJzaW9uRGF0YTogQ2FsbENvbnZlcnNpb25EYXRhLFxuICApOiBQcm9taXNlPEFwaVJlc3BvbnNlPENhbGxDb252ZXJzaW9uUmVzcG9uc2U+PiB7XG4gICAgY29uc3QgdXBsb2FkQ2FsbENvbnZlcnNpb25SZXNwb25zZSA9IGF3YWl0IHRoaXMuZXhlY3V0ZVBvc3RSZXF1ZXN0PENhbGxDb252ZXJzaW9uUmVzcG9uc2U+KFxuICAgICAgYC8ke3RoaXMuYXV0aE9iamVjdC5jdXN0b21lcklkfTp1cGxvYWRDYWxsQ29udmVyc2lvbnNgLFxuICAgICAgdXBsb2FkQ2FsbENvbnZlcnNpb25EYXRhLFxuICAgICk7XG5cbiAgICByZXR1cm4gdXBsb2FkQ2FsbENvbnZlcnNpb25SZXNwb25zZTtcbiAgfVxufVxuIl19