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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ29vZ2xlQWRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Nka3MvZ29vZ2xlQWRzUmVzdEFQSS9nb29nbGVBZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtQ0FBNkI7QUFDN0IscURBQXVDO0FBRXZDLG1EQUF1RTtBQUN2RSxxQ0FBdUM7QUFtQnZDLE1BQXFCLFNBQVM7SUFLNUIsWUFBWSxVQUFzQjtRQUNoQyxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsVUFBVSxHQUFHLDJCQUFpQixDQUFDLGFBQWEsQ0FBQyxxQkFBVyxDQUFDLEtBQUssRUFBRTtZQUNuRSxPQUFPLEVBQUUsb0NBQW9DLG9CQUFXLFlBQVk7U0FDckUsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLFNBQVM7UUFDZixPQUFPO1lBQ0wsT0FBTyxFQUFFO2dCQUNQLGFBQWEsRUFBRSxVQUFVLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFO2dCQUN0RCxpQkFBaUIsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWM7Z0JBQ2pELG1CQUFtQixFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZTtvQkFDbEQsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZTtvQkFDakMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVTthQUMvQjtTQUNGLENBQUM7SUFDSixDQUFDO0lBRU8sa0JBQWtCLENBQUksR0FBVyxFQUFFLElBQVk7UUFDckQsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFTSxLQUFLLENBQUMscUJBQXFCLENBQ2hDLGNBQXNCO1FBRXRCLE1BQU0sV0FBVyxHQUFHLFNBQVMs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QyxDQUFDO0lBRU0sS0FBSyxDQUFDLHFCQUFxQixDQUNoQyx5QkFBOEM7UUFFOUMsTUFBTSw2QkFBNkIsR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FDakUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUseUJBQXlCLEVBQ3ZELHlCQUF5QixDQUMxQixDQUFDO1FBRUYsT0FBTyw2QkFBNkIsQ0FBQztJQUN2QyxDQUFDO0lBRU0sS0FBSyxDQUFDLG9CQUFvQixDQUMvQix3QkFBNEM7UUFFNUMsTUFBTSw0QkFBNEIsR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FDaEUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsd0JBQXdCLEVBQ3RELHdCQUF3QixDQUN6QixDQUFDO1FBRUYsT0FBTyw0QkFBNEIsQ0FBQztJQUN0QyxDQUFDO0NBQ0Y7QUFwSkQsNEJBb0pDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0IH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCAqIGFzIFNxbFN0cmluZyBmcm9tICdzcWxzdHJpbmcnO1xuaW1wb3J0IHsgQXBpUmVzcG9uc2UsIEh0dHBDbGllbnQsIFJlcXVlc3RDb25maWcgfSBmcm9tICcuLi8uLi9uZXR3b3JrL2NsaWVudHMvdHlwZXMnO1xuaW1wb3J0IHsgQ2xpZW50TmFtZXMsIEh0dHBDbGllbnRGYWN0b3J5IH0gZnJvbSAnLi4vLi4vbmV0d29yay9mYWN0b3J5JztcbmltcG9ydCB7IEFQSV9WRVJTSU9OIH0gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHtcbiAgQXV0aE9iamVjdCxcbiAgQ2FsbENvbnZlcnNpb25EYXRhLFxuICBDYWxsQ29udmVyc2lvblJlc3BvbnNlLFxuICBDbGlja0NvbnZlcnNpb25EYXRhLFxuICBDbGlja0NvbnZlcnNpb25SZXNwb25zZSxcbiAgQ29udmVyc2lvbkFjdGlvblJlc3BvbnNlLFxuICBDb252ZXJzaW9uQWRqdXN0bWVudERhdGEsXG4gIENvbnZlcnNpb25BZGp1c3RtZW50UmVzcG9uc2UsXG4gIENyZWF0ZU9mZmxpbmVVc2VyRGF0YUpvYkRhdGEsXG4gIENyZWF0ZU9mZmxpbmVVc2VyRGF0YUpvYlJlc3Bvc2UsXG4gIEN1c3RvbVZhcmlhYmxlUmVzdWx0cyxcbiAgT2ZmbGluZVVzZXJEYXRhSm9iQWRkRGF0YSxcbiAgT2ZmbGluZVVzZXJEYXRhSm9iQWRkRGF0YVJlc3BvbnNlLFxuICBSdW5PZmZsaW5lVXNlckRhdGFKb2JSZXNwb25zZSxcbiAgU2VhcmNoU3RyZWFtUmVzcG9uc2UsXG59IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHb29nbGVBZHMge1xuICBwcml2YXRlIGF1dGhPYmplY3Q6IEF1dGhPYmplY3Q7XG5cbiAgcHJpdmF0ZSBodHRwQ2xpZW50OiBIdHRwQ2xpZW50O1xuXG4gIGNvbnN0cnVjdG9yKGF1dGhPYmplY3Q6IEF1dGhPYmplY3QpIHtcbiAgICB0aGlzLmF1dGhPYmplY3QgPSBhdXRoT2JqZWN0O1xuICAgIHRoaXMuaHR0cENsaWVudCA9IEh0dHBDbGllbnRGYWN0b3J5LmdldEh0dHBDbGllbnQoQ2xpZW50TmFtZXMuQXhpb3MsIHtcbiAgICAgIGJhc2VVUkw6IGBodHRwczovL2dvb2dsZWFkcy5nb29nbGVhcGlzLmNvbS8ke0FQSV9WRVJTSU9OfS9jdXN0b21lcnNgLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRIZWFkZXIoKTogUmVxdWVzdENvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3RoaXMuYXV0aE9iamVjdC5hY2Nlc3NUb2tlbn1gLFxuICAgICAgICAnZGV2ZWxvcGVyLXRva2VuJzogdGhpcy5hdXRoT2JqZWN0LmRldmVsb3BlclRva2VuLFxuICAgICAgICAnbG9naW4tY3VzdG9tZXItaWQnOiB0aGlzLmF1dGhPYmplY3QubG9naW5DdXN0b21lcklkXG4gICAgICAgICAgPyB0aGlzLmF1dGhPYmplY3QubG9naW5DdXN0b21lcklkXG4gICAgICAgICAgOiB0aGlzLmF1dGhPYmplY3QuY3VzdG9tZXJJZCxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZXhlY3V0ZVBvc3RSZXF1ZXN0PFQ+KHVybDogc3RyaW5nLCBkYXRhOiBvYmplY3QpOiBQcm9taXNlPEFwaVJlc3BvbnNlPFQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0KHVybCwgZGF0YSwgdGhpcy5nZXRIZWFkZXIoKSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0Q29udmVyc2lvbkFjdGlvbklkKFxuICAgIGNvbnZlcnNpb25OYW1lOiBzdHJpbmcsXG4gICk6IFByb21pc2U8c3RyaW5nIHwgQXBpUmVzcG9uc2U8U2VhcmNoU3RyZWFtUmVzcG9uc2U8Q29udmVyc2lvbkFjdGlvblJlc3BvbnNlPj4+IHtcbiAgICBjb25zdCBxdWVyeVN0cmluZyA9IFNxbFN0cmluZy5mb3JtYXQoXG4gICAgICAnU0VMRUNUIGNvbnZlcnNpb25fYWN0aW9uLmlkIEZST00gY29udmVyc2lvbl9hY3Rpb24gV0hFUkUgY29udmVyc2lvbl9hY3Rpb24ubmFtZSA9ID8nLFxuICAgICAgY29udmVyc2lvbk5hbWUsXG4gICAgKTtcbiAgICBjb25zdCBkYXRhOiB7IHF1ZXJ5OiBzdHJpbmcgfSA9IHtcbiAgICAgIHF1ZXJ5OiBxdWVyeVN0cmluZyxcbiAgICB9O1xuXG4gICAgY29uc3Qgc2VhcmNoU3RyZWFtUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmV4ZWN1dGVQb3N0UmVxdWVzdDxcbiAgICAgIFNlYXJjaFN0cmVhbVJlc3BvbnNlPENvbnZlcnNpb25BY3Rpb25SZXNwb25zZT5cbiAgICA+KGAvJHt0aGlzLmF1dGhPYmplY3QuY3VzdG9tZXJJZH0vZ29vZ2xlQWRzOnNlYXJjaFN0cmVhbWAsIGRhdGEpO1xuICAgIGlmIChzZWFyY2hTdHJlYW1SZXNwb25zZS50eXBlID09PSAnc3VjY2VzcycpIHtcbiAgICAgIGNvbnN0IGNvbnZlcnNpb25BY3Rpb24gPSBnZXQoXG4gICAgICAgIHNlYXJjaFN0cmVhbVJlc3BvbnNlLnJlc3BvbnNlQm9keVswXSxcbiAgICAgICAgJ3Jlc3VsdHMuMC5jb252ZXJzaW9uQWN0aW9uLnJlc291cmNlTmFtZScsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGNvbnZlcnNpb25BY3Rpb24gPz8gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHNlYXJjaFN0cmVhbVJlc3BvbnNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEN1c3RvbVZhcmlhYmxlKCk6IFByb21pc2U8XG4gICAgQ3VzdG9tVmFyaWFibGVSZXN1bHRzW10gfCBBcGlSZXNwb25zZTxTZWFyY2hTdHJlYW1SZXNwb25zZTxDdXN0b21WYXJpYWJsZVJlc3VsdHM+PlxuICA+IHtcbiAgICBjb25zdCBxdWVyeVN0cmluZyA9IFNxbFN0cmluZy5mb3JtYXQoXG4gICAgICAnU0VMRUNUIGNvbnZlcnNpb25fY3VzdG9tX3ZhcmlhYmxlLm5hbWUgRlJPTSBjb252ZXJzaW9uX2N1c3RvbV92YXJpYWJsZScsXG4gICAgKTtcbiAgICBjb25zdCBkYXRhOiB7IHF1ZXJ5OiBzdHJpbmcgfSA9IHtcbiAgICAgIHF1ZXJ5OiBxdWVyeVN0cmluZyxcbiAgICB9O1xuXG4gICAgY29uc3Qgc2VhcmNoU3RyZWFtUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmV4ZWN1dGVQb3N0UmVxdWVzdDxcbiAgICAgIFNlYXJjaFN0cmVhbVJlc3BvbnNlPEN1c3RvbVZhcmlhYmxlUmVzdWx0cz5cbiAgICA+KGAvJHt0aGlzLmF1dGhPYmplY3QuY3VzdG9tZXJJZH0vZ29vZ2xlQWRzOnNlYXJjaFN0cmVhbWAsIGRhdGEpO1xuICAgIGlmIChzZWFyY2hTdHJlYW1SZXNwb25zZS50eXBlID09PSAnc3VjY2VzcycpIHtcbiAgICAgIGNvbnN0IGN1c3RvbVZhcmlhYmxlcyA9IGdldChzZWFyY2hTdHJlYW1SZXNwb25zZS5yZXNwb25zZUJvZHlbMF0sICdyZXN1bHRzJyk7XG4gICAgICByZXR1cm4gY3VzdG9tVmFyaWFibGVzO1xuICAgIH1cbiAgICByZXR1cm4gc2VhcmNoU3RyZWFtUmVzcG9uc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYWRkQ29udmVyc2lvbkFkanVzdE1lbnQoXG4gICAgY29udmVyc2lvbkFkanVzdE1lbnREYXRhOiBDb252ZXJzaW9uQWRqdXN0bWVudERhdGEsXG4gICk6IFByb21pc2U8QXBpUmVzcG9uc2U8Q29udmVyc2lvbkFkanVzdG1lbnRSZXNwb25zZT4+IHtcbiAgICBjb25zdCBjb252ZXJzaW9uQWRqdXN0TWVudFJlc3BvbnNlID1cbiAgICAgIGF3YWl0IHRoaXMuZXhlY3V0ZVBvc3RSZXF1ZXN0PENvbnZlcnNpb25BZGp1c3RtZW50UmVzcG9uc2U+KFxuICAgICAgICBgLyR7dGhpcy5hdXRoT2JqZWN0LmN1c3RvbWVySWR9OnVwbG9hZENvbnZlcnNpb25BZGp1c3RtZW50c2AsXG4gICAgICAgIGNvbnZlcnNpb25BZGp1c3RNZW50RGF0YSxcbiAgICAgICk7XG4gICAgcmV0dXJuIGNvbnZlcnNpb25BZGp1c3RNZW50UmVzcG9uc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY3JlYXRlT2ZmbGluZVVzZXJEYXRhSm9iKFxuICAgIGRhdGE6IENyZWF0ZU9mZmxpbmVVc2VyRGF0YUpvYkRhdGEsXG4gICk6IFByb21pc2U8QXBpUmVzcG9uc2U8Q3JlYXRlT2ZmbGluZVVzZXJEYXRhSm9iUmVzcG9zZT4+IHtcbiAgICBjb25zdCBjb252ZXJzaW9uQWRqdXN0TWVudFJlc3BvbnNlID1cbiAgICAgIGF3YWl0IHRoaXMuZXhlY3V0ZVBvc3RSZXF1ZXN0PENyZWF0ZU9mZmxpbmVVc2VyRGF0YUpvYlJlc3Bvc2U+KFxuICAgICAgICBgLyR7dGhpcy5hdXRoT2JqZWN0LmN1c3RvbWVySWR9L29mZmxpbmVVc2VyRGF0YUpvYnM6Y3JlYXRlYCxcbiAgICAgICAgZGF0YSxcbiAgICAgICk7XG4gICAgcmV0dXJuIGNvbnZlcnNpb25BZGp1c3RNZW50UmVzcG9uc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYWRkVXNlclRvT2ZmbGluZVVzZXJEYXRhSm9iKFxuICAgIGpvYklkOiBzdHJpbmcsXG4gICAgb2ZmbGluZVVzZXJEYXRhOiBPZmZsaW5lVXNlckRhdGFKb2JBZGREYXRhLFxuICApIHtcbiAgICBjb25zdCBhZGRVc2VyVG9Kb2JSZXNwb25zZSA9IGF3YWl0IHRoaXMuZXhlY3V0ZVBvc3RSZXF1ZXN0PE9mZmxpbmVVc2VyRGF0YUpvYkFkZERhdGFSZXNwb25zZT4oXG4gICAgICBgLyR7dGhpcy5hdXRoT2JqZWN0LmN1c3RvbWVySWR9L29mZmxpbmVVc2VyRGF0YUpvYnMvJHtqb2JJZH06YWRkT3BlcmF0aW9uc2AsXG4gICAgICBvZmZsaW5lVXNlckRhdGEsXG4gICAgKTtcbiAgICByZXR1cm4gYWRkVXNlclRvSm9iUmVzcG9uc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYWRkQ29udmVyc2lvbnNUb09mZmxpbmVVc2VyRGF0YUpvYihcbiAgICBqb2JJZDogc3RyaW5nLFxuICAgIG9mZmxpbmVVc2VyRGF0YTogT2ZmbGluZVVzZXJEYXRhSm9iQWRkRGF0YSxcbiAgKSB7XG4gICAgY29uc3QgYWRkVXNlclRvSm9iUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmV4ZWN1dGVQb3N0UmVxdWVzdDxPZmZsaW5lVXNlckRhdGFKb2JBZGREYXRhUmVzcG9uc2U+KFxuICAgICAgYC8ke3RoaXMuYXV0aE9iamVjdC5jdXN0b21lcklkfS9vZmZsaW5lVXNlckRhdGFKb2JzLyR7am9iSWR9OmFkZE9wZXJhdGlvbnNgLFxuICAgICAgb2ZmbGluZVVzZXJEYXRhLFxuICAgICk7XG4gICAgcmV0dXJuIGFkZFVzZXJUb0pvYlJlc3BvbnNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHJ1bk9mZmxpbmVVc2VyRGF0YUpvYihcbiAgICBqb2JJZDogc3RyaW5nLFxuICApOiBQcm9taXNlPEFwaVJlc3BvbnNlPFJ1bk9mZmxpbmVVc2VyRGF0YUpvYlJlc3BvbnNlPj4ge1xuICAgIGNvbnN0IGNvbnZlcnNpb25BZGp1c3RNZW50UmVzcG9uc2UgPVxuICAgICAgYXdhaXQgdGhpcy5leGVjdXRlUG9zdFJlcXVlc3Q8UnVuT2ZmbGluZVVzZXJEYXRhSm9iUmVzcG9uc2U+KFxuICAgICAgICBgLyR7dGhpcy5hdXRoT2JqZWN0LmN1c3RvbWVySWR9L29mZmxpbmVVc2VyRGF0YUpvYnMvJHtqb2JJZH06cnVuYCxcbiAgICAgICAge30sXG4gICAgICApO1xuICAgIHJldHVybiBjb252ZXJzaW9uQWRqdXN0TWVudFJlc3BvbnNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwbG9hZENsaWNrQ29udmVyc2lvbihcbiAgICB1cGxvYWRDbGlja0NvbnZlcnNpb25EYXRhOiBDbGlja0NvbnZlcnNpb25EYXRhLFxuICApOiBQcm9taXNlPEFwaVJlc3BvbnNlPENsaWNrQ29udmVyc2lvblJlc3BvbnNlPj4ge1xuICAgIGNvbnN0IHVwbG9hZENsaWNrQ29udmVyc2lvblJlc3BvbnNlID0gYXdhaXQgdGhpcy5leGVjdXRlUG9zdFJlcXVlc3Q8Q2xpY2tDb252ZXJzaW9uUmVzcG9uc2U+KFxuICAgICAgYC8ke3RoaXMuYXV0aE9iamVjdC5jdXN0b21lcklkfTp1cGxvYWRDbGlja0NvbnZlcnNpb25zYCxcbiAgICAgIHVwbG9hZENsaWNrQ29udmVyc2lvbkRhdGEsXG4gICAgKTtcblxuICAgIHJldHVybiB1cGxvYWRDbGlja0NvbnZlcnNpb25SZXNwb25zZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGxvYWRDYWxsQ29udmVyc2lvbihcbiAgICB1cGxvYWRDYWxsQ29udmVyc2lvbkRhdGE6IENhbGxDb252ZXJzaW9uRGF0YSxcbiAgKTogUHJvbWlzZTxBcGlSZXNwb25zZTxDYWxsQ29udmVyc2lvblJlc3BvbnNlPj4ge1xuICAgIGNvbnN0IHVwbG9hZENhbGxDb252ZXJzaW9uUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmV4ZWN1dGVQb3N0UmVxdWVzdDxDYWxsQ29udmVyc2lvblJlc3BvbnNlPihcbiAgICAgIGAvJHt0aGlzLmF1dGhPYmplY3QuY3VzdG9tZXJJZH06dXBsb2FkQ2FsbENvbnZlcnNpb25zYCxcbiAgICAgIHVwbG9hZENhbGxDb252ZXJzaW9uRGF0YSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHVwbG9hZENhbGxDb252ZXJzaW9uUmVzcG9uc2U7XG4gIH1cbn1cbiJdfQ==