Skip to content

Commit

Permalink
feat: gaec configData updates
Browse files Browse the repository at this point in the history
  • Loading branch information
AASHISH MALIK committed Sep 18, 2024
1 parent 0ebeac1 commit 4fe3215
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 108 deletions.
Original file line number Diff line number Diff line change
@@ -1,120 +1,16 @@
const { get, set } = require('lodash');

Check failure on line 1 in src/v0/destinations/google_adwords_enhanced_conversions/networkHandler.js

View workflow job for this annotation

GitHub Actions / Code Coverage

'set' is assigned a value but never used

Check failure on line 1 in src/v0/destinations/google_adwords_enhanced_conversions/networkHandler.js

View workflow job for this annotation

GitHub Actions / Code Coverage

'set' is assigned a value but never used
const sha256 = require('sha256');
const { NetworkError, NetworkInstrumentationError } = require('@rudderstack/integrations-lib');
const SqlString = require('sqlstring');
const { prepareProxyRequest, handleHttpRequest } = require('../../../adapters/network');
const { NetworkError } = require('@rudderstack/integrations-lib');
const { prepareProxyRequest, proxyRequest } = require('../../../adapters/network');
const { isHttpStatusSuccess } = require('../../util/index');
const { CONVERSION_ACTION_ID_CACHE_TTL } = require('./config');
const Cache = require('../../util/cache');

const conversionActionIdCache = new Cache(CONVERSION_ACTION_ID_CACHE_TTL);

const {
processAxiosResponse,
getDynamicErrorType,
} = require('../../../adapters/utils/networkUtils');
const { BASE_ENDPOINT } = require('./config');

const tags = require('../../util/tags');
const { getAuthErrCategory } = require('../../util/googleUtils');

const ERROR_MSG_PATH = 'response[0].error.message';

/**
* This function is used for collecting the conversionActionId using the conversion name
* @param {*} method
* @param {*} headers
* @param {*} params
* @returns
*/

const getConversionActionId = async ({ method, headers, params, metadata }) => {
const conversionActionIdKey = sha256(params.event + params.customerId).toString();
return conversionActionIdCache.get(conversionActionIdKey, async () => {
const queryString = SqlString.format(
'SELECT conversion_action.id FROM conversion_action WHERE conversion_action.name = ?',
[params.event],
);
const data = {
query: queryString,
};
const searchStreamEndpoint = `${BASE_ENDPOINT}/${params.customerId}/googleAds:searchStream`;
const requestBody = {
url: searchStreamEndpoint,
data,
headers,
method,
};
const { processedResponse: gaecConversionActionIdResponse } = await handleHttpRequest(
'constructor',
requestBody,
{
destType: 'google_adwords_enhanced_conversions',
feature: 'proxy',
endpointPath: `/googleAds:searchStream`,
requestMethod: 'POST',
module: 'dataDelivery',
metadata,
},
);
const { status, response } = gaecConversionActionIdResponse;
if (!isHttpStatusSuccess(status)) {
throw new NetworkError(
`"${JSON.stringify(
get(gaecConversionActionIdResponse, ERROR_MSG_PATH, '')
? get(gaecConversionActionIdResponse, ERROR_MSG_PATH, '')
: response,
)} during Google_adwords_enhanced_conversions response transformation"`,
status,
{
[tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(status),
},
response,
getAuthErrCategory(gaecConversionActionIdResponse),
);
}
const conversionActionId = get(
gaecConversionActionIdResponse,
'response[0].results[0].conversionAction.id',
);
if (!conversionActionId) {
throw new NetworkInstrumentationError(
`Unable to find conversionActionId for conversion:${params.event}`,
);
}
return conversionActionId;
});
};

/**
* This function is responsible for collecting the conversionActionId
* and calling the enhanced conversion.
* data to customer list.
* @param {*} request
* @returns
*/
const ProxyRequest = async (request) => {
const { body, method, endpoint, params, metadata } = request;
const { headers } = request;

const conversionActionId = await getConversionActionId({ method, headers, params, metadata });

set(
body.JSON,
'conversionAdjustments[0].conversionAction',
`customers/${params.customerId}/conversionActions/${conversionActionId}`,
);
const requestBody = { url: endpoint, data: body.JSON, headers, method };
const { httpResponse: response } = await handleHttpRequest('constructor', requestBody, {
destType: 'google_adwords_enhanced_conversions',
feature: 'proxy',
endpointPath: `/googleAds:uploadOfflineUserData`,
requestMethod: 'POST',
module: 'dataDelivery',
metadata,
});
return response;
};

const responseHandler = (responseParams) => {
const { destinationResponse } = responseParams;
Expand Down Expand Up @@ -159,7 +55,7 @@ const responseHandler = (responseParams) => {
// eslint-disable-next-line func-names, @typescript-eslint/naming-convention
class networkHandler {
constructor() {
this.proxy = ProxyRequest;
this.proxy = proxyRequest;
this.responseHandler = responseHandler;
this.processAxiosResponse = processAxiosResponse;
this.prepareProxy = prepareProxyRequest;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

const get = require('get-value');
const { cloneDeep } = require('lodash');
const { InstrumentationError, ConfigurationError } = require('@rudderstack/integrations-lib');
const { InstrumentationError, ConfigurationError, isDefinedAndNotNull } = require('@rudderstack/integrations-lib');
const {
constructPayload,
defaultRequestConfig,
Expand Down Expand Up @@ -57,6 +57,15 @@ const responseBuilder = async (metadata, message, { Config }, payload) => {
const processTrackEvent = async (metadata, message, destination) => {
let flag = 0;
const { Config } = destination;

if (Config.fetchCustomerIdUsingOAuth && isDefinedAndNotNull(Config.configData)) {
const configDetails = JSON.parse(Config.configData);
Config.customerId = configDetails.customerId;
if (configDetails.loginCustomerId) {
Config.loginCustomerId = configDetails.loginCustomerId;
}
}

const { event } = message;
const { listOfConversions } = Config;
if (listOfConversions.some((i) => i.conversions === event)) {
Expand Down

0 comments on commit 4fe3215

Please sign in to comment.