Skip to content

Instantly share code, notes, and snippets.

@asifulmamun
Created July 3, 2025 09:44
Show Gist options
  • Save asifulmamun/01a04026f723db7a61fec1e330e05ed2 to your computer and use it in GitHub Desktop.
Save asifulmamun/01a04026f723db7a61fec1e330e05ed2 to your computer and use it in GitHub Desktop.
GTM Container
{
"exportFormatVersion": 2,
"exportTime": "2024-10-23 06:16:01",
"containerVersion": {
"path": "accounts/6250428815/containers/195873904/versions/4",
"accountId": "6250428815",
"containerId": "195873904",
"containerVersionId": "4",
"container": {
"path": "accounts/6250428815/containers/195873904",
"accountId": "6250428815",
"containerId": "195873904",
"name": "Asthamoy Server",
"publicId": "GTM-5NR58QXK",
"usageContext": [
"SERVER"
],
"fingerprint": "1727090455024",
"tagManagerUrl": "https://tagmanager.google.com/#/container/accounts/6250428815/containers/195873904/workspaces?apiLink=container",
"features": {
"supportUserPermissions": true,
"supportEnvironments": true,
"supportWorkspaces": true,
"supportGtagConfigs": false,
"supportBuiltInVariables": true,
"supportClients": true,
"supportFolders": true,
"supportTags": true,
"supportTemplates": true,
"supportTriggers": true,
"supportVariables": true,
"supportVersions": true,
"supportZones": true,
"supportTransformations": true
},
"tagIds": [
"GTM-5NR58QXK"
],
"taggingServerUrls": [
"https://nqihosbp.ap.stape.io"
]
},
"tag": [
{
"accountId": "6250428815",
"containerId": "195873904",
"tagId": "10",
"name": "Google Analytics GA4",
"type": "sgtmgaaw",
"parameter": [
{
"type": "BOOLEAN",
"key": "redactVisitorIp",
"value": "false"
},
{
"type": "TEMPLATE",
"key": "epToIncludeDropdown",
"value": "all"
},
{
"type": "TEMPLATE",
"key": "eventName",
"value": "{{Event Name}}"
},
{
"type": "TEMPLATE",
"key": "upToIncludeDropdown",
"value": "all"
},
{
"type": "TEMPLATE",
"key": "measurementId",
"value": "G-Y61C5JEQKJ"
}
],
"fingerprint": "1727090793158",
"firingTriggerId": [
"9"
],
"tagFiringOption": "ONCE_PER_EVENT",
"monitoringMetadata": {
"type": "MAP"
},
"consentSettings": {
"consentStatus": "NOT_SET"
}
},
{
"accountId": "6250428815",
"containerId": "195873904",
"tagId": "13",
"name": "Conversions API Tag",
"type": "cvt_195873904_11",
"parameter": [
{
"type": "TEMPLATE",
"key": "pixelId",
"value": "861688159395002"
},
{
"type": "TEMPLATE",
"key": "apiAccessToken",
"value": "EAAYAQewkRCIBOZCYpTPOl6IAcYqnfsktR719vf1ZApmm5srR3MZCZAv3rtHkJXaTfNu8hDHn4L14iDe0QYZCsim7PPAnA1C5XLQj0AEzble9ogqV6W093mzlcLDyMOgs0Qj3J99b0D5ZBadCWEj6f1XZCg4I0ig8LnfsiPRBFGPZBGzBhGYelXtZCq5pgQujanOWhzAZDZD"
},
{
"type": "TEMPLATE",
"key": "testEventCode",
"value": "TEST44231"
},
{
"type": "BOOLEAN",
"key": "enableEventEnhancement",
"value": "false"
},
{
"type": "BOOLEAN",
"key": "extendCookies",
"value": "true"
},
{
"type": "TEMPLATE",
"key": "actionSource",
"value": "website"
}
],
"fingerprint": "1727090665669",
"firingTriggerId": [
"12"
],
"tagFiringOption": "ONCE_PER_EVENT",
"monitoringMetadata": {
"type": "MAP"
},
"consentSettings": {
"consentStatus": "NOT_SET"
}
}
],
"trigger": [
{
"accountId": "6250428815",
"containerId": "195873904",
"triggerId": "9",
"name": "Client - GA4",
"type": "ALWAYS",
"filter": [
{
"type": "EQUALS",
"parameter": [
{
"type": "TEMPLATE",
"key": "arg0",
"value": "{{Client Name}}"
},
{
"type": "TEMPLATE",
"key": "arg1",
"value": "GA4"
}
]
}
],
"fingerprint": "1727090434103"
},
{
"accountId": "6250428815",
"containerId": "195873904",
"triggerId": "12",
"name": "conversion API",
"type": "ALWAYS",
"filter": [
{
"type": "MATCH_REGEX",
"parameter": [
{
"type": "TEMPLATE",
"key": "arg0",
"value": "{{Event Name}}"
},
{
"type": "TEMPLATE",
"key": "arg1",
"value": "page_view|view_item|add_to_cart|view_cart|begin_checkout|purchase|lead"
}
]
}
],
"fingerprint": "1727090434105"
}
],
"builtInVariable": [
{
"accountId": "6250428815",
"containerId": "195873904",
"type": "CONTAINER_VERSION",
"name": "Container Version"
},
{
"accountId": "6250428815",
"containerId": "195873904",
"type": "DEBUG_MODE",
"name": "Debug Mode"
},
{
"accountId": "6250428815",
"containerId": "195873904",
"type": "RANDOM_NUMBER",
"name": "Random Number"
},
{
"accountId": "6250428815",
"containerId": "195873904",
"type": "CONTAINER_ID",
"name": "Container ID"
},
{
"accountId": "6250428815",
"containerId": "195873904",
"type": "EVENT_NAME",
"name": "Event Name"
},
{
"accountId": "6250428815",
"containerId": "195873904",
"type": "REQUEST_PATH",
"name": "Request Path"
},
{
"accountId": "6250428815",
"containerId": "195873904",
"type": "REQUEST_METHOD",
"name": "Request Method"
},
{
"accountId": "6250428815",
"containerId": "195873904",
"type": "CLIENT_NAME",
"name": "Client Name"
},
{
"accountId": "6250428815",
"containerId": "195873904",
"type": "QUERY_STRING",
"name": "Query String"
},
{
"accountId": "6250428815",
"containerId": "195873904",
"type": "VISITOR_REGION",
"name": "Visitor Region"
}
],
"fingerprint": "1727091209285",
"tagManagerUrl": "https://tagmanager.google.com/#/versions/accounts/6250428815/containers/195873904/versions/4?apiLink=version",
"customTemplate": [
{
"accountId": "6250428815",
"containerId": "195873904",
"templateId": "3",
"name": "Event Data to FB Conversion API",
"fingerprint": "1727090434097",
"templateData": "___INFO___\n\n{\n \"type\": \"TAG\",\n \"id\": \"cvt_temp_public_id\",\n \"version\": 1,\n \"securityGroups\": [],\n \"displayName\": \"Event Data to FB Conversion API\",\n \"categories\": [\n \"ADVERTISING\",\n \"ANALYTICS\",\n \"CONVERSIONS\",\n \"MARKETING\",\n \"REMARKETING\"\n ],\n \"brand\": {\n \"id\": \"brand_dummy\",\n \"displayName\": \"GTM Server\",\n \"thumbnail\": \"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEBLAEsAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQICAQECAQEBAgICAgICAgICAQICAgICAgICAgL/2wBDAQEBAQEBAQEBAQECAQEBAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL/wAARCAEAAQADAREAAhEBAxEB/8QAHwABAAIBBAMBAAAAAAAAAAAAAAIEBQMGCAoBBwkL/8QAUhAAAAUBAwYFEQcDAgUCBwAAAAECAwQFBgcRCBITMUHBIWFygdEJFCIyM0JRUnF0kZKhsbKz4QojU1TS0/AVk5QkKBYXGDdiJ0M0R0hngqLC/8QAHQEBAAICAwEBAAAAAAAAAAAAAAECAwcEBggFCf/EAFMRAAEDAQMFCgkJBQYGAQUAAAEAAgMRBAUSBhMhMVEiMkFSYXGBobHBBxQjM0Jyc5HRFkNTYpKiwtLwFYLT4eIkJURVo/EINEVUY5OyZIOEs8P/2gAMAwEAAhEDEQA/APgE73aR5zJ+e4P0WZvQvyTl847o7AoCyxoCICICICICICICICICICICICICICICICICICICICICICICICICICICICICKbfdG+Wn4iFX7x3MexSNfQexHe7SPOZPz3AZvQry+cd0dgUBZY0BEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBFNvujfLT8RCr947mPYpGvoPYjvdpHnMn57gM3oV5fOO6OwKAssaAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAim33Rvlp+IhV+8dzHsUjX0HsR3u0jzmT89wGb0K8vnHdHYFAWWNARARARARARARARARARARARARARARARARARARARARARARARARARARARARARTb7o3y0/EQq/eO5j2KRr6D2I73aR5zJ+e4DN6FeXzjujsCgLLGgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIpt90b5afiIVfvHcx7FI19B7Ed7tI85k/PcBm9CvL5x3R2BQFljQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEU2+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\"\n },\n \"description\": \"Tag that send the event data from the Universal Analytics/GA4/Data client to Facebook Conversion API.\",\n \"containerContexts\": [\n \"SERVER\"\n ]\n}\n\n\n___TEMPLATE_PARAMETERS___\n\n[\n {\n \"type\": \"SELECT\",\n \"name\": \"inheritEventName\",\n \"displayName\": \"Event Name Setup Method\",\n \"selectItems\": [\n {\n \"value\": \"inherit\",\n \"displayValue\": \"Inherit from client\"\n },\n {\n \"value\": \"override\",\n \"displayValue\": \"Override\"\n }\n ],\n \"simpleValueType\": true,\n \"subParams\": [\n {\n \"type\": \"RADIO\",\n \"name\": \"eventName\",\n \"radioItems\": [\n {\n \"value\": \"standard\",\n \"displayValue\": \"Standard\",\n \"subParams\": [\n {\n \"type\": \"SELECT\",\n \"name\": \"eventNameStandard\",\n \"macrosInSelect\": false,\n \"selectItems\": [\n {\n \"value\": \"PageView\",\n \"displayValue\": \"PageView\"\n },\n {\n \"value\": \"AddPaymentInfo\",\n \"displayValue\": \"AddPaymentInfo\"\n },\n {\n \"value\": \"AddToCart\",\n \"displayValue\": \"AddToCart\"\n },\n {\n \"value\": \"AddToWishlist\",\n \"displayValue\": \"AddToWishlist\"\n },\n {\n \"value\": \"CompleteRegistration\",\n \"displayValue\": \"CompleteRegistration\"\n },\n {\n \"value\": \"Contact\",\n \"displayValue\": \"Contact\"\n },\n {\n \"value\": \"CustomizeProduct\",\n \"displayValue\": \"CustomizeProduct\"\n },\n {\n \"value\": \"Donate\",\n \"displayValue\": \"Donate\"\n },\n {\n \"value\": \"FindLocation\",\n \"displayValue\": \"FindLocation\"\n },\n {\n \"value\": \"InitiateCheckout\",\n \"displayValue\": \"InitiateCheckout\"\n },\n {\n \"value\": \"Lead\",\n \"displayValue\": \"Lead\"\n },\n {\n \"value\": \"Purchase\",\n \"displayValue\": \"Purchase\"\n },\n {\n \"value\": \"Schedule\",\n \"displayValue\": \"Schedule\"\n },\n {\n \"value\": \"Search\",\n \"displayValue\": \"Search\"\n },\n {\n \"value\": \"StartTrial\",\n \"displayValue\": \"StartTrial\"\n },\n {\n \"value\": \"SubmitApplication\",\n \"displayValue\": \"SubmitApplication\"\n },\n {\n \"value\": \"Subscribe\",\n \"displayValue\": \"Subscribe\"\n },\n {\n \"value\": \"ViewContent\",\n \"displayValue\": \"ViewContent\"\n }\n ],\n \"simpleValueType\": true\n }\n ]\n },\n {\n \"value\": \"custom\",\n \"displayValue\": \"Custom\",\n \"subParams\": [\n {\n \"type\": \"TEXT\",\n \"name\": \"eventNameCustom\",\n \"simpleValueType\": true\n }\n ]\n }\n ],\n \"simpleValueType\": true,\n \"enablingConditions\": [\n {\n \"paramName\": \"inheritEventName\",\n \"paramValue\": \"override\",\n \"type\": \"EQUALS\"\n }\n ],\n \"displayName\": \"Event Type\"\n }\n ]\n },\n {\n \"type\": \"TEXT\",\n \"name\": \"accessToken\",\n \"displayName\": \"API Access Token\",\n \"simpleValueType\": true,\n \"help\": \"Set to your Facebook API Access Token. See \\u003ca href\\u003d\\\"https://developers.facebook.com/docs/marketing-api/server-side-api/get-started#access-token\\\" target\\u003d\\\"_blank\\\"\\u003ehere\\u003c/a\\u003e for more information.\",\n \"valueValidators\": [\n {\n \"type\": \"NON_EMPTY\"\n }\n ]\n },\n {\n \"type\": \"TEXT\",\n \"name\": \"pixelId\",\n \"displayName\": \"Facebook Pixel ID\",\n \"simpleValueType\": true,\n \"valueValidators\": [\n {\n \"type\": \"NON_EMPTY\"\n }\n ],\n \"help\": \"Set to a valid Facebook Pixel ID. You can only add a single Pixel ID per tag.\"\n },\n {\n \"type\": \"TEXT\",\n \"name\": \"testId\",\n \"displayName\": \"Test ID\",\n \"simpleValueType\": true,\n \"help\": \"Provide a Test ID if you want to test server-side events in the Test Events feature of Events Manager.\",\n \"valueHint\": \"TEST123\"\n },\n {\n \"displayName\": \"Server Event Data Override\",\n \"name\": \"serverEventDataListGroup\",\n \"groupStyle\": \"ZIPPY_CLOSED\",\n \"type\": \"GROUP\",\n \"subParams\": [\n {\n \"name\": \"serverEventDataList\",\n \"simpleTableColumns\": [\n {\n \"valueValidators\": [\n {\n \"type\": \"NON_EMPTY\"\n }\n ],\n \"defaultValue\": \"event_id\",\n \"displayName\": \"Property Name\",\n \"name\": \"name\",\n \"isUnique\": true,\n \"type\": \"SELECT\",\n \"selectItems\": [\n {\n \"value\": \"action_source\",\n \"displayValue\": \"Action Source\"\n },\n {\n \"value\": \"event_time\",\n \"displayValue\": \"Event Time\"\n },\n {\n \"value\": \"event_source_url\",\n \"displayValue\": \"Source URL\"\n },\n {\n \"value\": \"opt_out\",\n \"displayValue\": \"Opt Out\"\n },\n {\n \"value\": \"event_id\",\n \"displayValue\": \"Event ID\"\n },\n {\n \"value\": \"data_processing_options\",\n \"displayValue\": \"Data Processing Options\"\n },\n {\n \"value\": \"data_processing_options_country\",\n \"displayValue\": \"Data Processing Options Country\"\n },\n {\n \"value\": \"data_processing_options_state\",\n \"displayValue\": \"Data Processing Options State\"\n }\n ]\n },\n {\n \"defaultValue\": \"\",\n \"displayName\": \"Property Value\",\n \"name\": \"value\",\n \"type\": \"TEXT\"\n }\n ],\n \"type\": \"SIMPLE_TABLE\",\n \"newRowButtonText\": \"Add property\"\n }\n ],\n \"help\": \"See \\u003ca href\\u003d\\\"https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/server-event\\\" target\\u003d\\\"_blank\\\"\\u003ethis documentation\\u003c/a\\u003e for more details on what data parameters you can override.\"\n },\n {\n \"displayName\": \"User Data\",\n \"name\": \"userDataListGroup\",\n \"groupStyle\": \"ZIPPY_CLOSED\",\n \"type\": \"GROUP\",\n \"subParams\": [\n {\n \"name\": \"userDataList\",\n \"simpleTableColumns\": [\n {\n \"valueValidators\": [\n {\n \"type\": \"NON_EMPTY\"\n }\n ],\n \"defaultValue\": \"em\",\n \"displayName\": \"Property Name\",\n \"name\": \"name\",\n \"isUnique\": true,\n \"type\": \"SELECT\",\n \"selectItems\": [\n {\n \"value\": \"em\",\n \"displayValue\": \"Email\"\n },\n {\n \"value\": \"ph\",\n \"displayValue\": \"Phone\"\n },\n {\n \"value\": \"ge\",\n \"displayValue\": \"Gender\"\n },\n {\n \"value\": \"db\",\n \"displayValue\": \"Date of Birth\"\n },\n {\n \"value\": \"ln\",\n \"displayValue\": \"Last Name\"\n },\n {\n \"value\": \"fn\",\n \"displayValue\": \"First Name\"\n },\n {\n \"value\": \"ct\",\n \"displayValue\": \"City\"\n },\n {\n \"value\": \"st\",\n \"displayValue\": \"State\"\n },\n {\n \"value\": \"zp\",\n \"displayValue\": \"Zip\"\n },\n {\n \"value\": \"country\",\n \"displayValue\": \"Country\"\n },\n {\n \"value\": \"external_id\",\n \"displayValue\": \"External ID\"\n },\n {\n \"value\": \"client_ip_address\",\n \"displayValue\": \"Client IP address\"\n },\n {\n \"value\": \"client_user_agent\",\n \"displayValue\": \"Client user agent\"\n },\n {\n \"value\": \"fbc\",\n \"displayValue\": \"Click ID\"\n },\n {\n \"value\": \"fbp\",\n \"displayValue\": \"Browser ID\"\n },\n {\n \"value\": \"subscription_id\",\n \"displayValue\": \"Subscription ID\"\n },\n {\n \"value\": \"lead_id\",\n \"displayValue\": \"Lead ID\"\n },\n {\n \"value\": \"fb_login_id\",\n \"displayValue\": \"FB Login ID\"\n }\n ]\n },\n {\n \"defaultValue\": \"\",\n \"displayName\": \"Property Value\",\n \"name\": \"value\",\n \"type\": \"TEXT\"\n }\n ],\n \"type\": \"SIMPLE_TABLE\",\n \"newRowButtonText\": \"Add property\"\n }\n ],\n \"help\": \"See \\u003ca href\\u003d\\\"https://developers.facebook.com/docs/marketing-api/server-side-api/parameters/user-data\\\" target\\u003d\\\"_blank\\\"\\u003ethis documentation\\u003c/a\\u003e for more details on what user data parameters you can add to the call. If the documentation requires the parameter to be hashed, you \\u003cstrong\\u003emust\\u003c/strong\\u003e hash it with SHA256, or the tag will do this automatically before sending the event to Facebook.\"\n },\n {\n \"displayName\": \"Custom Data\",\n \"name\": \"customDataListGroup\",\n \"groupStyle\": \"ZIPPY_CLOSED\",\n \"type\": \"GROUP\",\n \"subParams\": [\n {\n \"name\": \"customDataList\",\n \"simpleTableColumns\": [\n {\n \"valueValidators\": [\n {\n \"type\": \"NON_EMPTY\"\n }\n ],\n \"defaultValue\": \"\",\n \"displayName\": \"Property Name\",\n \"name\": \"name\",\n \"isUnique\": true,\n \"type\": \"TEXT\"\n },\n {\n \"defaultValue\": \"\",\n \"displayName\": \"Property Value\",\n \"name\": \"value\",\n \"type\": \"TEXT\"\n }\n ],\n \"type\": \"SIMPLE_TABLE\",\n \"newRowButtonText\": \"Add property\"\n }\n ],\n \"help\": \"See \\u003ca href\\u003d\\\"https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/custom-data\\\" target\\u003d\\\"_blank\\\"\\u003ethis documentation\\u003c/a\\u003e for more details on what data parameters you can add to the call.\"\n }\n]\n\n\n___SANDBOXED_JS_FOR_SERVER___\n\nconst encodeUriComponent = require('encodeUriComponent');\nconst getAllEventData = require('getAllEventData');\nconst JSON = require('JSON');\nconst Math = require('Math');\nconst sendHttpRequest = require('sendHttpRequest');\nconst getTimestampMillis = require('getTimestampMillis');\nconst setCookie = require('setCookie');\nconst getCookieValues = require('getCookieValues');\nconst getContainerVersion = require('getContainerVersion');\nconst logToConsole = require('logToConsole');\nconst sha256Sync = require('sha256Sync');\n\nconst containerVersion = getContainerVersion();\nconst isDebug = containerVersion.debugMode;\n\nconst eventData = getAllEventData();\n\nlet fbc = getCookieValues('_fbc')[0];\nconst fbp = getCookieValues('_fbp')[0];\n\nif (!fbc) {\n let url = eventData.page_location;\n\n if (url && url.indexOf('fbclid=') !== -1) {\n fbc = 'fb.1.' + getTimestampMillis() + '.' + url.split('fbclid=')[1].split('&')[0];\n }\n}\n\n\nconst apiVersion = '11.0';\nconst postUrl = 'https://graph.facebook.com/v' + apiVersion + '/' + enc(data.pixelId) + '/events?access_token=' + enc(data.accessToken);\nlet postBody = 'data=' + enc(JSON.stringify([mapEvent(eventData, data)]));\n\nif (data.testId) {\n postBody += '&test_event_code=' + enc(data.testId);\n}\n\nsendHttpRequest(postUrl, (statusCode, headers, body) => {\n if (statusCode >= 200 && statusCode < 400) {\n if (fbc) {\n setCookie('_fbc', fbc, {\n domain: 'auto',\n path: '/',\n 'max-age': 15552000, // 6 month\n samesite: 'Lax',\n secure: true\n });\n }\n\n if (fbp) {\n setCookie('_fbp', fbp, {\n domain: 'auto',\n path: '/',\n 'max-age': 15552000, // 6 month\n samesite: 'Lax',\n secure: true\n });\n }\n\n data.gtmOnSuccess();\n } else {\n data.gtmOnFailure();\n }\n}, {headers: {content_type: 'application/x-www-form-urlencoded'}, method: 'POST', timeout: 3500}, postBody);\n\n\nfunction getEventName(data) {\n if (data.inheritEventName === 'inherit') {\n let eventName = eventData.event_name;\n\n let gaToFacebookEventName = {\n 'page_view': 'PageView',\n 'add_payment_info': 'AddPaymentInfo',\n 'add_to_cart': 'AddToCart',\n 'add_to_wishlist': 'AddToWishlist',\n 'sign_up': 'CompleteRegistration',\n 'begin_checkout': 'InitiateCheckout',\n 'generate_lead': 'Lead',\n 'purchase': 'Purchase',\n 'search': 'Search',\n 'view_item': 'ViewContent',\n\n 'contact': 'Contact',\n 'customize_product': 'CustomizeProduct',\n 'donate': 'Donate',\n 'find_location': 'FindLocation',\n 'schedule': 'Schedule',\n 'start_trial': 'StartTrial',\n 'submit_application': 'SubmitApplication',\n 'subscribe': 'Subscribe',\n\n 'gtm4wp.addProductToCartEEC': 'AddToCart',\n 'gtm4wp.productClickEEC': 'ViewContent',\n 'gtm4wp.checkoutOptionEEC': 'InitiateCheckout',\n 'gtm4wp.checkoutStepEEC': 'AddPaymentInfo',\n 'gtm4wp.orderCompletedEEC': 'Purchase'\n };\n\n if (!gaToFacebookEventName[eventName]) {\n return eventName;\n }\n\n return gaToFacebookEventName[eventName];\n }\n\n return data.eventName === 'standard' ? data.eventNameStandard : data.eventNameCustom;\n}\n\nfunction mapEvent(eventData, data) {\n let eventName = getEventName(data);\n\n let mappedData = {\n event_name: eventName,\n action_source: 'website',\n event_source_url: eventData.page_location,\n event_time: Math.floor(getTimestampMillis() / 1000),\n custom_data: {},\n user_data: {\n client_ip_address: eventData.ip_override,\n client_user_agent: eventData.user_agent,\n }\n };\n\n if (fbc) mappedData.user_data.fbc = fbc;\n if (fbp) mappedData.user_data.fbp = fbp;\n\n mappedData = addServerEventData(eventData, data, mappedData);\n mappedData = addUserData(eventData, mappedData);\n mappedData = addEcommerceData(eventData, mappedData);\n mappedData = overrideDataIfNeeded(data, mappedData);\n mappedData = cleanupData(mappedData);\n mappedData = hashDataIfNeeded(mappedData);\n\n if (isDebug) {\n logToConsole('Event raw data: ', eventData);\n logToConsole('Facebook mapped data: ', mappedData);\n }\n\n return mappedData;\n}\n\n\nfunction enc(data) {\n data = data || '';\n return encodeUriComponent(data);\n}\n\nfunction isHashed(value) {\n if (!value) {\n return false;\n }\n\n return value.match('^[A-Fa-f0-9]{64}$') !== null;\n}\n\n\nfunction hashData(value) {\n if (!value) {\n return value;\n }\n\n if (isHashed(value)) {\n return value;\n }\n\n return sha256Sync(value.trim().toLowerCase(), {outputEncoding: 'hex'});\n}\n\n\nfunction hashDataIfNeeded(mappedData) {\n if (mappedData.user_data) {\n for (let key in mappedData.user_data) {\n if (key === 'em' || key === 'ph' || key === 'ge' || key === 'db' || key === 'ln' || key === 'fn' || key === 'ct' || key === 'st' || key === 'zp' || key === 'country') {\n mappedData.user_data[key] = hashData(mappedData.user_data[key]);\n }\n }\n }\n\n return mappedData;\n}\n\nfunction overrideDataIfNeeded(data, mappedData) {\n if (data.userDataList) {\n data.userDataList.forEach(d => {\n mappedData.user_data[d.name] = d.value;\n });\n }\n\n if (data.customDataList) {\n data.customDataList.forEach(d => {\n mappedData.custom_data[d.name] = d.value;\n });\n }\n\n return mappedData;\n}\n\nfunction cleanupData(mappedData) {\n if (mappedData.user_data) {\n let userData = {};\n\n for(let userDataKey in mappedData.user_data) {\n if (mappedData.user_data[userDataKey]) {\n userData[userDataKey] = mappedData.user_data[userDataKey];\n }\n }\n\n mappedData.user_data = userData;\n }\n\n if (mappedData.custom_data) {\n let customData = {};\n\n for(let customDataKey in mappedData.custom_data) {\n if (mappedData.custom_data[customDataKey]) {\n customData[customDataKey] = mappedData.custom_data[customDataKey];\n }\n }\n\n mappedData.custom_data = customData;\n }\n\n return mappedData;\n}\n\nfunction addEcommerceData(eventData, mappedData) {\n if (eventData.items && eventData.items[0]) {\n mappedData.custom_data.contents = {};\n mappedData.custom_data.content_type = 'product';\n\n if (!eventData.items[1]) {\n if (eventData.items[0].item_name) mappedData.custom_data.content_name = eventData.items[0].item_name;\n if (eventData.items[0].item_category) mappedData.custom_data.content_category = eventData.items[0].item_category;\n }\n\n eventData.items.forEach((d,i) => {\n mappedData.custom_data.contents[i] = {\n 'id': d.item_id,\n 'quantity': d.quantity,\n 'item_price': d.price,\n };\n });\n }\n\n if (eventData['x-ga-mp1-ev']) mappedData.custom_data.value = eventData['x-ga-mp1-ev'];\n else if (eventData['x-ga-mp1-tr']) mappedData.custom_data.value = eventData['x-ga-mp1-tr'];\n else if (eventData.value) mappedData.custom_data.value = eventData.value;\n\n if (eventData.currency) mappedData.custom_data.currency = eventData.currency;\n if (eventData.transaction_id) mappedData.custom_data.order_id = eventData.transaction_id;\n\n\n if (mappedData.event_name === 'Purchase') {\n if (!mappedData.custom_data.currency) {\n mappedData.custom_data.currency = 'USD';\n }\n if (!mappedData.custom_data.value) {\n mappedData.custom_data.value = 0;\n }\n }\n\n return mappedData;\n}\n\nfunction addUserData(eventData, mappedData) {\n if (eventData.fb_login_id) mappedData.user_data.fb_login_id = eventData.fb_login_id;\n\n if (eventData.external_id) mappedData.user_data.external_id = eventData.external_id;\n else if (eventData.user_id) mappedData.user_data.external_id = eventData.user_id;\n else if (eventData.userId) mappedData.user_data.external_id = eventData.userId;\n\n if (eventData.subscription_id) mappedData.user_data.subscription_id = eventData.subscription_id;\n else if (eventData.subscriptionId) mappedData.user_data.subscription_id = eventData.subscriptionId;\n\n if (eventData.lead_id) mappedData.user_data.lead_id = eventData.lead_id;\n else if (eventData.leadId) mappedData.user_data.lead_id = eventData.leadId;\n\n if (eventData.lastName) mappedData.user_data.ln = eventData.lastName;\n else if (eventData.LastName) mappedData.user_data.ln = eventData.LastName;\n else if (eventData.nameLast) mappedData.user_data.ln = eventData.nameLast;\n else if (eventData.user_data && eventData.user_data.address && eventData.user_data.address.last_name) mappedData.user_data.ln = eventData.user_data.address.last_name;\n\n if (eventData.firstName) mappedData.user_data.fn = eventData.firstName;\n else if (eventData.FirstName) mappedData.user_data.fn = eventData.FirstName;\n else if (eventData.nameFirst) mappedData.user_data.fn = eventData.nameFirst;\n else if (eventData.user_data && eventData.user_data.address && eventData.user_data.address.first_name) mappedData.user_data.fn = eventData.user_data.address.first_name;\n\n if (eventData.email) mappedData.user_data.em = eventData.email;\n else if (eventData.user_data && eventData.user_data.email_address) mappedData.user_data.em = eventData.user_data.email_address;\n\n if (eventData.phone) mappedData.user_data.ph = eventData.phone;\n else if (eventData.user_data && eventData.user_data.phone_number) mappedData.user_data.ph = eventData.user_data.phone_number;\n\n if (eventData.city) mappedData.user_data.ct = eventData.city;\n else if (eventData.user_data && eventData.user_data.address && eventData.user_data.address.city) mappedData.user_data.ct = eventData.user_data.address.city;\n\n if (eventData.state) mappedData.user_data.st = eventData.state;\n else if (eventData.user_data && eventData.user_data.address && eventData.user_data.address.region) mappedData.user_data.st = eventData.user_data.address.region;\n\n if (eventData.zip) mappedData.user_data.zp = eventData.zip;\n else if (eventData.user_data && eventData.user_data.address && eventData.user_data.address.postal_code) mappedData.user_data.zp = eventData.user_data.address.postal_code;\n\n if (eventData.countryCode) mappedData.user_data.country = eventData.countryCode;\n else if (eventData.user_data && eventData.user_data.address && eventData.user_data.address.country) mappedData.user_data.country = eventData.user_data.address.country;\n\n if (eventData.gender) mappedData.user_data.ge = eventData.gender;\n if (eventData.db) mappedData.user_data.db = eventData.db;\n\n return mappedData;\n}\n\n\nfunction addServerEventData(eventData, data, mappedData) {\n let serverEventDataList = {};\n\n if (eventData.transaction_id) mappedData.event_id = eventData.transaction_id;\n\n if (data.serverEventDataList) {\n data.serverEventDataList.forEach(d => {\n serverEventDataList[d.name] = d.value;\n });\n }\n\n if (serverEventDataList) {\n if (serverEventDataList.action_source) mappedData.action_source = serverEventDataList.action_source;\n if (serverEventDataList.event_time) mappedData.event_time = serverEventDataList.event_time;\n if (serverEventDataList.event_source_url) mappedData.event_source_url = serverEventDataList.event_source_url;\n if (serverEventDataList.opt_out) mappedData.opt_out = serverEventDataList.opt_out;\n if (serverEventDataList.event_id) mappedData.event_id = serverEventDataList.event_id;\n\n if (serverEventDataList.data_processing_options) {\n mappedData.data_processing_options = serverEventDataList.data_processing_options;\n\n if (serverEventDataList.data_processing_options_country) mappedData.data_processing_options_country = serverEventDataList.data_processing_options_country;\n if (serverEventDataList.data_processing_options_state) mappedData.data_processing_options_state = serverEventDataList.data_processing_options_state;\n }\n }\n\n return mappedData;\n}\n\n\n___SERVER_PERMISSIONS___\n\n[\n {\n \"instance\": {\n \"key\": {\n \"publicId\": \"read_event_data\",\n \"versionId\": \"1\"\n },\n \"param\": [\n {\n \"key\": \"eventDataAccess\",\n \"value\": {\n \"type\": 1,\n \"string\": \"any\"\n }\n }\n ]\n },\n \"clientAnnotations\": {\n \"isEditedByUser\": true\n },\n \"isRequired\": true\n },\n {\n \"instance\": {\n \"key\": {\n \"publicId\": \"set_cookies\",\n \"versionId\": \"1\"\n },\n \"param\": [\n {\n \"key\": \"allowedCookies\",\n \"value\": {\n \"type\": 2,\n \"listItem\": [\n {\n \"type\": 3,\n \"mapKey\": [\n {\n \"type\": 1,\n \"string\": \"name\"\n },\n {\n \"type\": 1,\n \"string\": \"domain\"\n },\n {\n \"type\": 1,\n \"string\": \"path\"\n },\n {\n \"type\": 1,\n \"string\": \"secure\"\n },\n {\n \"type\": 1,\n \"string\": \"session\"\n }\n ],\n \"mapValue\": [\n {\n \"type\": 1,\n \"string\": \"_fbc\"\n },\n {\n \"type\": 1,\n \"string\": \"*\"\n },\n {\n \"type\": 1,\n \"string\": \"*\"\n },\n {\n \"type\": 1,\n \"string\": \"any\"\n },\n {\n \"type\": 1,\n \"string\": \"any\"\n }\n ]\n },\n {\n \"type\": 3,\n \"mapKey\": [\n {\n \"type\": 1,\n \"string\": \"name\"\n },\n {\n \"type\": 1,\n \"string\": \"domain\"\n },\n {\n \"type\": 1,\n \"string\": \"path\"\n },\n {\n \"type\": 1,\n \"string\": \"secure\"\n },\n {\n \"type\": 1,\n \"string\": \"session\"\n }\n ],\n \"mapValue\": [\n {\n \"type\": 1,\n \"string\": \"_fbp\"\n },\n {\n \"type\": 1,\n \"string\": \"*\"\n },\n {\n \"type\": 1,\n \"string\": \"*\"\n },\n {\n \"type\": 1,\n \"string\": \"any\"\n },\n {\n \"type\": 1,\n \"string\": \"any\"\n }\n ]\n }\n ]\n }\n }\n ]\n },\n \"clientAnnotations\": {\n \"isEditedByUser\": true\n },\n \"isRequired\": true\n },\n {\n \"instance\": {\n \"key\": {\n \"publicId\": \"send_http\",\n \"versionId\": \"1\"\n },\n \"param\": [\n {\n \"key\": \"allowedUrls\",\n \"value\": {\n \"type\": 1,\n \"string\": \"specific\"\n }\n },\n {\n \"key\": \"urls\",\n \"value\": {\n \"type\": 2,\n \"listItem\": [\n {\n \"type\": 1,\n \"string\": \"https://graph.facebook.com/\"\n }\n ]\n }\n }\n ]\n },\n \"clientAnnotations\": {\n \"isEditedByUser\": true\n },\n \"isRequired\": true\n },\n {\n \"instance\": {\n \"key\": {\n \"publicId\": \"get_cookies\",\n \"versionId\": \"1\"\n },\n \"param\": [\n {\n \"key\": \"cookieAccess\",\n \"value\": {\n \"type\": 1,\n \"string\": \"specific\"\n }\n },\n {\n \"key\": \"cookieNames\",\n \"value\": {\n \"type\": 2,\n \"listItem\": [\n {\n \"type\": 1,\n \"string\": \"_fbc\"\n },\n {\n \"type\": 1,\n \"string\": \"_fbp\"\n }\n ]\n }\n }\n ]\n },\n \"clientAnnotations\": {\n \"isEditedByUser\": true\n },\n \"isRequired\": true\n },\n {\n \"instance\": {\n \"key\": {\n \"publicId\": \"logging\",\n \"versionId\": \"1\"\n },\n \"param\": [\n {\n \"key\": \"environments\",\n \"value\": {\n \"type\": 1,\n \"string\": \"debug\"\n }\n }\n ]\n },\n \"isRequired\": true\n },\n {\n \"instance\": {\n \"key\": {\n \"publicId\": \"read_container_data\",\n \"versionId\": \"1\"\n },\n \"param\": []\n },\n \"isRequired\": true\n }\n]\n\n\n___TESTS___\n\nscenarios: []\nsetup: ''\n\n\n___NOTES___\n\nCreated on 10/11/2020, 18:14:02\n\n\n"
},
{
"accountId": "6250428815",
"containerId": "195873904",
"templateId": "4",
"name": "Facebook Conversion API",
"fingerprint": "1727090434099",
"templateData": "___TERMS_OF_SERVICE___\n\nBy creating or modifying this file you agree to Google Tag Manager's Community\nTemplate Gallery Developer Terms of Service available at\nhttps://developers.google.com/tag-manager/gallery-tos (or such other URL as\nGoogle may provide), as modified from time to time.\n\n\n___INFO___\n\n{\n \"type\": \"TAG\",\n \"id\": \"cvt_temp_public_id\",\n \"version\": 1,\n \"securityGroups\": [],\n \"displayName\": \"Facebook Conversion API\",\n \"categories\": [\n \"ADVERTISING\",\n \"ANALYTICS\",\n \"CONVERSIONS\",\n \"MARKETING\",\n \"REMARKETING\"\n ],\n \"brand\": {\n \"id\": \"github.com_stape-io\",\n \"displayName\": \"stape-io\",\n \"thumbnail\": \"data:image/png;base64,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\\u003d\"\n },\n \"description\": \"Tag that send the event data from the Universal Analytics/GA4/Data client to Facebook Conversion API.\",\n \"containerContexts\": [\n \"SERVER\"\n ]\n}\n\n\n___TEMPLATE_PARAMETERS___\n\n[\n {\n \"type\": \"SELECT\",\n \"name\": \"inheritEventName\",\n \"displayName\": \"Event Name Setup Method\",\n \"selectItems\": [\n {\n \"value\": \"inherit\",\n \"displayValue\": \"Inherit from client\"\n },\n {\n \"value\": \"override\",\n \"displayValue\": \"Override\"\n }\n ],\n \"simpleValueType\": true,\n \"subParams\": [\n {\n \"type\": \"RADIO\",\n \"name\": \"eventName\",\n \"radioItems\": [\n {\n \"value\": \"standard\",\n \"displayValue\": \"Standard\",\n \"subParams\": [\n {\n \"type\": \"SELECT\",\n \"name\": \"eventNameStandard\",\n \"macrosInSelect\": false,\n \"selectItems\": [\n {\n \"value\": \"PageView\",\n \"displayValue\": \"PageView\"\n },\n {\n \"value\": \"AddPaymentInfo\",\n \"displayValue\": \"AddPaymentInfo\"\n },\n {\n \"value\": \"AddToCart\",\n \"displayValue\": \"AddToCart\"\n },\n {\n \"value\": \"AddToWishlist\",\n \"displayValue\": \"AddToWishlist\"\n },\n {\n \"value\": \"CompleteRegistration\",\n \"displayValue\": \"CompleteRegistration\"\n },\n {\n \"value\": \"Contact\",\n \"displayValue\": \"Contact\"\n },\n {\n \"value\": \"CustomizeProduct\",\n \"displayValue\": \"CustomizeProduct\"\n },\n {\n \"value\": \"Donate\",\n \"displayValue\": \"Donate\"\n },\n {\n \"value\": \"FindLocation\",\n \"displayValue\": \"FindLocation\"\n },\n {\n \"value\": \"InitiateCheckout\",\n \"displayValue\": \"InitiateCheckout\"\n },\n {\n \"value\": \"Lead\",\n \"displayValue\": \"Lead\"\n },\n {\n \"value\": \"Purchase\",\n \"displayValue\": \"Purchase\"\n },\n {\n \"value\": \"Schedule\",\n \"displayValue\": \"Schedule\"\n },\n {\n \"value\": \"Search\",\n \"displayValue\": \"Search\"\n },\n {\n \"value\": \"StartTrial\",\n \"displayValue\": \"StartTrial\"\n },\n {\n \"value\": \"SubmitApplication\",\n \"displayValue\": \"SubmitApplication\"\n },\n {\n \"value\": \"Subscribe\",\n \"displayValue\": \"Subscribe\"\n },\n {\n \"value\": \"ViewContent\",\n \"displayValue\": \"ViewContent\"\n }\n ],\n \"simpleValueType\": true\n }\n ]\n },\n {\n \"value\": \"custom\",\n \"displayValue\": \"Custom\",\n \"subParams\": [\n {\n \"type\": \"TEXT\",\n \"name\": \"eventNameCustom\",\n \"simpleValueType\": true\n }\n ]\n }\n ],\n \"simpleValueType\": true,\n \"enablingConditions\": [\n {\n \"paramName\": \"inheritEventName\",\n \"paramValue\": \"override\",\n \"type\": \"EQUALS\"\n }\n ],\n \"displayName\": \"Event Type\"\n }\n ]\n },\n {\n \"type\": \"SELECT\",\n \"name\": \"actionSource\",\n \"displayName\": \"Action Source\",\n \"selectItems\": [\n {\n \"value\": \"website\",\n \"displayValue\": \"Website\"\n },\n {\n \"value\": \"email\",\n \"displayValue\": \"Email\"\n },\n {\n \"value\": \"app\",\n \"displayValue\": \"App\"\n },\n {\n \"value\": \"phone_call\",\n \"displayValue\": \"Phone Call\"\n },\n {\n \"value\": \"chat\",\n \"displayValue\": \"Chat\"\n },\n {\n \"value\": \"physical_store\",\n \"displayValue\": \"Physical Store\"\n },\n {\n \"value\": \"system_generated\",\n \"displayValue\": \"System Generated\"\n },\n {\n \"value\": \"other\",\n \"displayValue\": \"Other\"\n }\n ],\n \"simpleValueType\": true,\n \"valueValidators\": [\n {\n \"type\": \"NON_EMPTY\"\n }\n ],\n \"defaultValue\": \"website\"\n },\n {\n \"type\": \"TEXT\",\n \"name\": \"accessToken\",\n \"displayName\": \"API Access Token\",\n \"simpleValueType\": true,\n \"help\": \"Set to your Facebook API Access Token. See \\u003ca href\\u003d\\\"https://developers.facebook.com/docs/marketing-api/server-side-api/get-started#access-token\\\" target\\u003d\\\"_blank\\\"\\u003ehere\\u003c/a\\u003e for more information.\",\n \"valueValidators\": [\n {\n \"type\": \"NON_EMPTY\"\n }\n ]\n },\n {\n \"type\": \"TEXT\",\n \"name\": \"pixelId\",\n \"displayName\": \"Facebook Pixel ID\",\n \"simpleValueType\": true,\n \"valueValidators\": [\n {\n \"type\": \"NON_EMPTY\"\n }\n ],\n \"help\": \"Set to a valid Facebook Pixel ID. You can only add a single Pixel ID per tag.\"\n },\n {\n \"type\": \"TEXT\",\n \"name\": \"testId\",\n \"displayName\": \"Test ID\",\n \"simpleValueType\": true,\n \"help\": \"Provide a Test ID if you want to test server-side events in the Test Events feature of Events Manager.\",\n \"valueHint\": \"TEST123\"\n },\n {\n \"type\": \"TEXT\",\n \"name\": \"itemIdKey\",\n \"displayName\": \"Custom Item Id Key\",\n \"simpleValueType\": true,\n \"help\": \"You can specify a custom key, which will be used to set the content item id, by default item_id will be used. This may be useful if you are using WooCommerce extensions.\",\n \"canBeEmptyString\": true\n },\n {\n \"type\": \"CHECKBOX\",\n \"name\": \"generateFbp\",\n \"checkboxText\": \"Generate _fbp cookie if it not exist\",\n \"simpleValueType\": true\n },\n {\n \"type\": \"CHECKBOX\",\n \"name\": \"useHttpOnlyCookie\",\n \"checkboxText\": \"Use HttpOnly cookies\",\n \"simpleValueType\": true,\n \"help\": \"Forbids JavaScript from accessing the cookie if enabled.\"\n },\n {\n \"type\": \"CHECKBOX\",\n \"name\": \"enableEventEnhancement\",\n \"checkboxText\": \"Enable Event Enhancement\",\n \"simpleValueType\": true,\n \"help\": \"Enable Use of HTTP Only Secure Cookie (gtmeec) to Enhance Event Data\"\n },\n {\n \"type\": \"CHECKBOX\",\n \"name\": \"useOptimisticScenario\",\n \"checkboxText\": \"Use Optimistic Scenario\",\n \"simpleValueType\": true,\n \"help\": \"The tag will call gtmOnSuccess() without waiting for a response from the API. This will speed up sGTM response time however your tag will always return the status fired successfully even in case it is not.\"\n },\n {\n \"displayName\": \"Server Event Data Override\",\n \"name\": \"serverEventDataListGroup\",\n \"groupStyle\": \"ZIPPY_CLOSED\",\n \"type\": \"GROUP\",\n \"subParams\": [\n {\n \"name\": \"serverEventDataList\",\n \"simpleTableColumns\": [\n {\n \"valueValidators\": [\n {\n \"type\": \"NON_EMPTY\"\n }\n ],\n \"defaultValue\": \"event_id\",\n \"displayName\": \"Property Name\",\n \"name\": \"name\",\n \"isUnique\": true,\n \"type\": \"SELECT\",\n \"selectItems\": [\n {\n \"value\": \"event_time\",\n \"displayValue\": \"Event Time\"\n },\n {\n \"value\": \"event_source_url\",\n \"displayValue\": \"Source URL\"\n },\n {\n \"value\": \"opt_out\",\n \"displayValue\": \"Opt Out\"\n },\n {\n \"value\": \"event_id\",\n \"displayValue\": \"Event ID\"\n },\n {\n \"value\": \"data_processing_options\",\n \"displayValue\": \"Data Processing Options\"\n },\n {\n \"value\": \"data_processing_options_country\",\n \"displayValue\": \"Data Processing Options Country\"\n },\n {\n \"value\": \"data_processing_options_state\",\n \"displayValue\": \"Data Processing Options State\"\n }\n ]\n },\n {\n \"defaultValue\": \"\",\n \"displayName\": \"Property Value\",\n \"name\": \"value\",\n \"type\": \"TEXT\"\n }\n ],\n \"type\": \"SIMPLE_TABLE\",\n \"newRowButtonText\": \"Add property\"\n }\n ],\n \"help\": \"See \\u003ca href\\u003d\\\"https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/server-event\\\" target\\u003d\\\"_blank\\\"\\u003ethis documentation\\u003c/a\\u003e for more details on what data parameters you can override.\"\n },\n {\n \"displayName\": \"User Data\",\n \"name\": \"userDataListGroup\",\n \"groupStyle\": \"ZIPPY_CLOSED\",\n \"type\": \"GROUP\",\n \"subParams\": [\n {\n \"name\": \"userDataList\",\n \"simpleTableColumns\": [\n {\n \"valueValidators\": [\n {\n \"type\": \"NON_EMPTY\"\n }\n ],\n \"defaultValue\": \"em\",\n \"displayName\": \"Property Name\",\n \"name\": \"name\",\n \"isUnique\": true,\n \"type\": \"SELECT\",\n \"selectItems\": [\n {\n \"value\": \"em\",\n \"displayValue\": \"Email\"\n },\n {\n \"value\": \"ph\",\n \"displayValue\": \"Phone\"\n },\n {\n \"value\": \"ge\",\n \"displayValue\": \"Gender\"\n },\n {\n \"value\": \"db\",\n \"displayValue\": \"Date of Birth\"\n },\n {\n \"value\": \"ln\",\n \"displayValue\": \"Last Name\"\n },\n {\n \"value\": \"fn\",\n \"displayValue\": \"First Name\"\n },\n {\n \"value\": \"ct\",\n \"displayValue\": \"City\"\n },\n {\n \"value\": \"st\",\n \"displayValue\": \"State\"\n },\n {\n \"value\": \"zp\",\n \"displayValue\": \"Zip\"\n },\n {\n \"value\": \"country\",\n \"displayValue\": \"Country\"\n },\n {\n \"value\": \"external_id\",\n \"displayValue\": \"External ID\"\n },\n {\n \"value\": \"client_ip_address\",\n \"displayValue\": \"Client IP address\"\n },\n {\n \"value\": \"client_user_agent\",\n \"displayValue\": \"Client user agent\"\n },\n {\n \"value\": \"fbc\",\n \"displayValue\": \"Click ID\"\n },\n {\n \"value\": \"fbp\",\n \"displayValue\": \"Browser ID\"\n },\n {\n \"value\": \"subscription_id\",\n \"displayValue\": \"Subscription ID\"\n },\n {\n \"value\": \"lead_id\",\n \"displayValue\": \"Lead ID\"\n },\n {\n \"value\": \"fb_login_id\",\n \"displayValue\": \"FB Login ID\"\n },\n {\n \"value\": \"anon_id\",\n \"displayValue\": \"Install ID\"\n },\n {\n \"value\": \"madid\",\n \"displayValue\": \"Mobile Advertiser ID\"\n }\n ]\n },\n {\n \"defaultValue\": \"\",\n \"displayName\": \"Property Value\",\n \"name\": \"value\",\n \"type\": \"TEXT\"\n }\n ],\n \"type\": \"SIMPLE_TABLE\",\n \"newRowButtonText\": \"Add property\"\n }\n ],\n \"help\": \"See \\u003ca href\\u003d\\\"https://developers.facebook.com/docs/marketing-api/server-side-api/parameters/user-data\\\" target\\u003d\\\"_blank\\\"\\u003ethis documentation\\u003c/a\\u003e for more details on what user data parameters you can add to the call. If the documentation requires the parameter to be hashed, you \\u003cstrong\\u003emust\\u003c/strong\\u003e hash it with SHA256, or the tag will do this automatically before sending the event to Facebook.\"\n },\n {\n \"displayName\": \"App Data\",\n \"name\": \"appDataListGroup\",\n \"groupStyle\": \"ZIPPY_CLOSED\",\n \"type\": \"GROUP\",\n \"subParams\": [\n {\n \"type\": \"LABEL\",\n \"name\": \"appDataLabel\",\n \"displayName\": \"App Parameters that you can send to Meta you can find \\u003ca target\\u003d\\\"_blank\\\" href\\u003d\\\"https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/app-data\\\"\\u003eby this link\\u003c/a\\u003e.\"\n },\n {\n \"name\": \"appDataList\",\n \"simpleTableColumns\": [\n {\n \"valueValidators\": [\n {\n \"type\": \"NON_EMPTY\"\n }\n ],\n \"defaultValue\": \"\",\n \"displayName\": \"Property Name\",\n \"name\": \"name\",\n \"isUnique\": true,\n \"type\": \"SELECT\",\n \"selectItems\": [\n {\n \"value\": \"advertiser_tracking_enabled\",\n \"displayValue\": \"Advertiser Tracking Enabled\"\n },\n {\n \"value\": \"application_tracking_enabled\",\n \"displayValue\": \"Application Tracking Enabled\"\n },\n {\n \"value\": \"extinfo\",\n \"displayValue\": \"Ext Info\"\n },\n {\n \"value\": \"campaign_ids\",\n \"displayValue\": \"Campaign IDs\"\n },\n {\n \"value\": \"install_referrer\",\n \"displayValue\": \"Install Referrer\"\n },\n {\n \"value\": \"installer_package\",\n \"displayValue\": \"Installer Package\"\n },\n {\n \"value\": \"url_schemes\",\n \"displayValue\": \"URL Schemes\"\n },\n {\n \"value\": \"windows_attribution_id\",\n \"displayValue\": \"Windows Attribution ID\"\n }\n ]\n },\n {\n \"defaultValue\": \"\",\n \"displayName\": \"Property Value\",\n \"name\": \"value\",\n \"type\": \"TEXT\"\n }\n ],\n \"type\": \"SIMPLE_TABLE\",\n \"newRowButtonText\": \"Add property\"\n }\n ],\n \"help\": \"See \\u003ca href\\u003d\\\"https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/app-data\\\" target\\u003d\\\"_blank\\\"\\u003ethis documentation\\u003c/a\\u003e for more details on what data parameters you can add to the call.\",\n \"enablingConditions\": [\n {\n \"paramName\": \"actionSource\",\n \"paramValue\": \"app\",\n \"type\": \"EQUALS\"\n }\n ]\n },\n {\n \"displayName\": \"Custom Data\",\n \"name\": \"customDataListGroup\",\n \"groupStyle\": \"ZIPPY_CLOSED\",\n \"type\": \"GROUP\",\n \"subParams\": [\n {\n \"type\": \"LABEL\",\n \"name\": \"customDataLabel\",\n \"displayName\": \"Standard Parameters that you can send to Meta you can find \\u003ca target\\u003d\\\"_blank\\\" href\\u003d\\\"https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/custom-data\\\"\\u003eby this link\\u003c/a\\u003e.\"\n },\n {\n \"name\": \"customDataList\",\n \"simpleTableColumns\": [\n {\n \"valueValidators\": [\n {\n \"type\": \"NON_EMPTY\"\n }\n ],\n \"defaultValue\": \"\",\n \"displayName\": \"Property Name\",\n \"name\": \"name\",\n \"isUnique\": true,\n \"type\": \"TEXT\"\n },\n {\n \"defaultValue\": \"\",\n \"displayName\": \"Property Value\",\n \"name\": \"value\",\n \"type\": \"TEXT\"\n }\n ],\n \"type\": \"SIMPLE_TABLE\",\n \"newRowButtonText\": \"Add property\"\n }\n ],\n \"help\": \"See \\u003ca href\\u003d\\\"https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/custom-data\\\" target\\u003d\\\"_blank\\\"\\u003ethis documentation\\u003c/a\\u003e for more details on what data parameters you can add to the call.\"\n },\n {\n \"displayName\": \"Logs Settings\",\n \"name\": \"logsGroup\",\n \"groupStyle\": \"ZIPPY_CLOSED\",\n \"type\": \"GROUP\",\n \"subParams\": [\n {\n \"type\": \"RADIO\",\n \"name\": \"logType\",\n \"radioItems\": [\n {\n \"value\": \"no\",\n \"displayValue\": \"Do not log\"\n },\n {\n \"value\": \"debug\",\n \"displayValue\": \"Log to console during debug and preview\"\n },\n {\n \"value\": \"always\",\n \"displayValue\": \"Always log to console\"\n }\n ],\n \"simpleValueType\": true,\n \"defaultValue\": \"debug\"\n }\n ]\n }\n]\n\n\n___SANDBOXED_JS_FOR_SERVER___\n\nconst encodeUriComponent = require('encodeUriComponent');\nconst getAllEventData = require('getAllEventData');\nconst JSON = require('JSON');\nconst Math = require('Math');\nconst sendHttpRequest = require('sendHttpRequest');\nconst getTimestampMillis = require('getTimestampMillis');\nconst setCookie = require('setCookie');\nconst getCookieValues = require('getCookieValues');\nconst getContainerVersion = require('getContainerVersion');\nconst logToConsole = require('logToConsole');\nconst sha256Sync = require('sha256Sync');\nconst decodeUriComponent = require('decodeUriComponent');\nconst parseUrl = require('parseUrl');\nconst computeEffectiveTldPlusOne = require('computeEffectiveTldPlusOne');\nconst generateRandom = require('generateRandom');\nconst getRequestHeader = require('getRequestHeader');\nconst getType = require('getType');\nconst makeString = require('makeString');\nconst makeNumber = require('makeNumber');\nconst toBase64 = require('toBase64');\nconst fromBase64 = require('fromBase64');\n\nconst isLoggingEnabled = determinateIsLoggingEnabled();\nconst traceId = isLoggingEnabled ? getRequestHeader('trace-id') : undefined;\n\nconst eventData = getAllEventData();\nconst url = eventData.page_location || getRequestHeader('referer');\nconst subDomainIndex = url ? computeEffectiveTldPlusOne(url).split('.').length - 1 : 1;\n\nif (url && url.lastIndexOf('https://gtm-msr.appspot.com/', 0) === 0) {\n return data.gtmOnSuccess();\n}\n\nlet fbc = getCookieValues('_fbc')[0];\nlet fbp = getCookieValues('_fbp')[0];\n\nif (!fbc) fbc = eventData._fbc;\nif (!fbp) fbp = eventData._fbp;\n\nif (url) {\n const urlParsed = parseUrl(url);\n\n if (urlParsed && urlParsed.searchParams.fbclid) {\n if (!fbc || (fbc && fbc.split('.')[fbc.split('.').length - 1] !== decodeUriComponent(urlParsed.searchParams.fbclid))) {\n fbc = 'fb.' + subDomainIndex + '.' + getTimestampMillis() + '.' + decodeUriComponent(urlParsed.searchParams.fbclid);\n }\n }\n}\n\nif (!fbp && data.generateFbp) {\n fbp = 'fb.' + subDomainIndex + '.' + getTimestampMillis() + '.' + generateRandom(1000000000, 2147483647);\n}\n\nconst apiVersion = '17.0';\nconst postUrl = 'https://graph.facebook.com/v' + apiVersion + '/' + enc(data.pixelId) + '/events?access_token=' + enc(data.accessToken);\nconst mappedEventData = mapEvent(eventData, data);\n\nif (data.enableEventEnhancement) {\n mappedEventData.user_data = enhanceEventData(mappedEventData.user_data);\n setGtmEecCookie(mappedEventData.user_data);\n}\n\nconst postBody = {\n data: [mappedEventData],\n partner_agent: 'stape-gtmss-2.1.1' + (data.enableEventEnhancement ? '-ee' : '')\n};\n\nif (eventData.test_event_code || data.testId) {\n postBody.test_event_code = eventData.test_event_code\n ? eventData.test_event_code\n : data.testId;\n}\n\nif (isLoggingEnabled) {\n logToConsole(\n JSON.stringify({\n Name: 'Facebook',\n Type: 'Request',\n TraceId: traceId,\n EventName: mappedEventData.event_name,\n RequestMethod: 'POST',\n RequestUrl: postUrl,\n RequestBody: postBody,\n })\n );\n}\n\nconst cookieOptions = {\n domain: 'auto',\n path: '/',\n samesite: 'Lax',\n secure: true,\n 'max-age': 7776000, // 90 days\n HttpOnly: !!data.useHttpOnlyCookie,\n};\n\nif (fbc) {\n setCookie('_fbc', fbc, cookieOptions);\n}\n\nif (fbp) {\n setCookie('_fbp', fbp, cookieOptions);\n}\nsendHttpRequest(\n postUrl,\n (statusCode, headers, body) => {\n if (isLoggingEnabled) {\n logToConsole(\n JSON.stringify({\n Name: 'Facebook',\n Type: 'Response',\n TraceId: traceId,\n EventName: mappedEventData.event_name,\n ResponseStatusCode: statusCode,\n ResponseHeaders: headers,\n ResponseBody: body,\n })\n );\n }\n if (!data.useOptimisticScenario) {\n if (statusCode >= 200 && statusCode < 300) {\n data.gtmOnSuccess();\n } else {\n data.gtmOnFailure();\n }\n }\n },\n { headers: { 'content-type': 'application/json' }, method: 'POST' },\n JSON.stringify(postBody)\n);\n\nif (data.useOptimisticScenario) {\n data.gtmOnSuccess();\n}\nfunction getEventName(data) {\n if (data.inheritEventName === 'inherit') {\n let eventName = eventData.event_name;\n\n let gaToFacebookEventName = {\n page_view: 'PageView',\n 'gtm.dom': 'PageView',\n add_payment_info: 'AddPaymentInfo',\n add_to_cart: 'AddToCart',\n add_to_wishlist: 'AddToWishlist',\n sign_up: 'CompleteRegistration',\n begin_checkout: 'InitiateCheckout',\n generate_lead: 'Lead',\n purchase: 'Purchase',\n search: 'Search',\n view_item: 'ViewContent',\n\n contact: 'Contact',\n customize_product: 'CustomizeProduct',\n donate: 'Donate',\n find_location: 'FindLocation',\n schedule: 'Schedule',\n start_trial: 'StartTrial',\n submit_application: 'SubmitApplication',\n subscribe: 'Subscribe',\n\n 'gtm4wp.addProductToCartEEC': 'AddToCart',\n 'gtm4wp.productClickEEC': 'ViewContent',\n 'gtm4wp.checkoutOptionEEC': 'InitiateCheckout',\n 'gtm4wp.checkoutStepEEC': 'AddPaymentInfo',\n 'gtm4wp.orderCompletedEEC': 'Purchase',\n };\n\n if (!gaToFacebookEventName[eventName]) {\n return eventName;\n }\n\n return gaToFacebookEventName[eventName];\n }\n\n return data.eventName === 'standard'\n ? data.eventNameStandard\n : data.eventNameCustom;\n}\n\nfunction mapEvent(eventData, data) {\n let eventName = getEventName(data);\n\n let mappedData = {\n event_name: eventName,\n action_source: data.actionSource || 'website',\n event_time: Math.round(getTimestampMillis() / 1000),\n custom_data: {},\n user_data: {},\n };\n\n if (mappedData.action_source === 'app') {\n mappedData.app_data = {};\n }\n\n if (eventData.page_location) mappedData.event_source_url = eventData.page_location;\n if (eventData.user_agent) mappedData.user_data.client_user_agent = eventData.user_agent;\n\n if (eventData.ip_override) {\n mappedData.user_data.client_ip_address = eventData.ip_override\n .split(' ')\n .join('')\n .split(',')[0];\n }\n\n if (fbc) mappedData.user_data.fbc = fbc;\n if (fbp) mappedData.user_data.fbp = fbp;\n\n mappedData = addServerEventData(eventData, mappedData);\n mappedData = addUserData(eventData, mappedData);\n mappedData = addAppData(eventData, mappedData);\n mappedData = addEcommerceData(eventData, mappedData);\n mappedData = overrideDataIfNeeded(mappedData);\n mappedData = cleanupData(mappedData);\n mappedData = hashDataIfNeeded(mappedData);\n\n return mappedData;\n}\n\nfunction enc(data) {\n data = data || '';\n return encodeUriComponent(data);\n}\n\nfunction isHashed(value) {\n if (!value) {\n return false;\n }\n\n return makeString(value).match('^[A-Fa-f0-9]{64}$') !== null;\n}\n\nfunction hashData(key, value) {\n if (!value) {\n return value;\n }\n\n const type = getType(value);\n\n if (type === 'undefined' || value === 'undefined') {\n return undefined;\n }\n\n if (type === 'array') {\n return value.map((val) => {\n return hashData(key, val);\n });\n }\n\n if (isHashed(value)) {\n return value;\n }\n\n value = makeString(value).trim().toLowerCase();\n\n if (key === 'ph') {\n value = value\n .split(' ')\n .join('')\n .split('-')\n .join('')\n .split('(')\n .join('')\n .split(')')\n .join('')\n .split('+')\n .join('');\n } else if (key === 'ct') {\n value = value.split(' ').join('');\n }\n\n return sha256Sync(value, { outputEncoding: 'hex' });\n}\n\nfunction hashDataIfNeeded(mappedData) {\n if (mappedData.user_data) {\n for (let key in mappedData.user_data) {\n if (\n key === 'em' ||\n key === 'ph' ||\n key === 'ge' ||\n key === 'db' ||\n key === 'ln' ||\n key === 'fn' ||\n key === 'ct' ||\n key === 'st' ||\n key === 'zp' ||\n key === 'country'\n ) {\n mappedData.user_data[key] = hashData(key, mappedData.user_data[key]);\n }\n }\n }\n\n return mappedData;\n}\n\nfunction overrideDataIfNeeded(mappedData) {\n if (data.userDataList) {\n data.userDataList.forEach((d) => {\n mappedData.user_data[d.name] = d.value;\n });\n }\n\n if (data.customDataList) {\n data.customDataList.forEach((d) => {\n mappedData.custom_data[d.name] = d.value;\n });\n }\n\n if (data.appDataList && mappedData.action_source === 'app') {\n data.appDataList.forEach((d) => {\n mappedData.app_data[d.name] = d.value;\n });\n }\n\n return mappedData;\n}\n\nfunction cleanupData(mappedData) {\n if (mappedData.user_data) {\n let userData = {};\n\n for (let userDataKey in mappedData.user_data) {\n if (isValidValue(mappedData.user_data[userDataKey])) {\n userData[userDataKey] = mappedData.user_data[userDataKey];\n }\n }\n\n mappedData.user_data = userData;\n }\n\n if (mappedData.custom_data) {\n let customData = {};\n\n for (let customDataKey in mappedData.custom_data) {\n if (isValidValue(mappedData.custom_data[customDataKey])) {\n customData[customDataKey] = mappedData.custom_data[customDataKey];\n }\n }\n\n if (customData.value === 0 || customData.value === '0') customData.value = '0.00';\n\n mappedData.custom_data = customData;\n }\n\n if (mappedData.app_data) {\n let appData = {};\n\n for (let appDataKey in mappedData.app_data) {\n if (isValidValue(mappedData.app_data[appDataKey])) {\n appData[appDataKey] = mappedData.app_data[appDataKey];\n }\n }\n\n mappedData.app_data = appData;\n }\n\n return mappedData;\n}\n\nfunction isValidValue(value) {\n const valueType = getType(value);\n return valueType !== 'null' && valueType !== 'undefined' && value !== '';\n}\n\nfunction addEcommerceData(eventData, mappedData) {\n let currencyFromItems = '';\n let valueFromItems = 0;\n\n if (eventData.items && eventData.items[0]) {\n mappedData.custom_data.contents = [];\n mappedData.custom_data.content_type = 'product';\n currencyFromItems = eventData.items[0].currency;\n\n if (!eventData.items[1]) {\n if (eventData.items[0].item_name) mappedData.custom_data.content_name = eventData.items[0].item_name;\n if (eventData.items[0].item_category) mappedData.custom_data.content_category = eventData.items[0].item_category;\n\n if (eventData.items[0].price) {\n mappedData.custom_data.value = eventData.items[0].quantity\n ? eventData.items[0].quantity * eventData.items[0].price\n : eventData.items[0].price;\n }\n }\n\n const itemIdKey = data.itemIdKey ? data.itemIdKey : 'item_id';\n eventData.items.forEach((d, i) => {\n let content = {};\n if (d[itemIdKey]) content.id = d[itemIdKey];\n if (d.item_name) content.title = d.item_name;\n if (d.item_brand) content.brand = d.item_brand;\n if (d.quantity) content.quantity = d.quantity;\n if (d.item_category) content.category = d.item_category;\n\n if (d.price) {\n content.item_price = makeNumber(d.price);\n valueFromItems += d.quantity\n ? d.quantity * content.item_price\n : content.item_price;\n }\n\n mappedData.custom_data.contents.push(content);\n });\n }\n\n if (eventData['x-ga-mp1-ev']) mappedData.custom_data.value = eventData['x-ga-mp1-ev'];\n else if (eventData['x-ga-mp1-tr']) mappedData.custom_data.value = eventData['x-ga-mp1-tr'];\n else if (eventData.value) mappedData.custom_data.value = eventData.value;\n\n if (eventData.currency) mappedData.custom_data.currency = eventData.currency;\n else if (currencyFromItems) mappedData.custom_data.currency = currencyFromItems;\n\n if (eventData.search_term) mappedData.custom_data.search_string = eventData.search_term;\n\n if (eventData.transaction_id) mappedData.custom_data.order_id = eventData.transaction_id;\n\n if (mappedData.event_name === 'Purchase') {\n if (!mappedData.custom_data.currency) mappedData.custom_data.currency = 'USD';\n if (!mappedData.custom_data.value) mappedData.custom_data.value = valueFromItems ? valueFromItems : 0;\n }\n\n return mappedData;\n}\n\nfunction addUserData(eventData, mappedData) {\n let address = {};\n let user_data = {};\n if (getType(eventData.user_data) === 'object') {\n user_data = eventData.user_data;\n const addressType = getType(user_data.address);\n if (addressType === 'object' || addressType === 'array') {\n address = user_data.address[0] || user_data.address;\n }\n }\n if (eventData.fb_login_id) mappedData.user_data.fb_login_id = eventData.fb_login_id;\n\n if (eventData.anon_id) mappedData.user_data.anon_id = eventData.anon_id;\n\n if (eventData.madid) mappedData.user_data.madid = eventData.madid;\n\n if (eventData.external_id) mappedData.user_data.external_id = eventData.external_id;\n else if (eventData.user_id) mappedData.user_data.external_id = eventData.user_id;\n else if (eventData.userId) mappedData.user_data.external_id = eventData.userId;\n\n if (eventData.subscription_id) mappedData.user_data.subscription_id = eventData.subscription_id;\n else if (eventData.subscriptionId) mappedData.user_data.subscription_id = eventData.subscriptionId;\n\n if (eventData.lead_id) mappedData.user_data.lead_id = eventData.lead_id;\n else if (eventData.leadId) mappedData.user_data.lead_id = eventData.leadId;\n\n if (eventData.lastName) mappedData.user_data.ln = eventData.lastName;\n else if (eventData.LastName) mappedData.user_data.ln = eventData.LastName;\n else if (eventData.nameLast) mappedData.user_data.ln = eventData.nameLast;\n else if (eventData.last_name) mappedData.user_data.ln = eventData.last_name;\n else if (user_data.last_name) mappedData.user_data.ln = user_data.last_name;\n else if (address.last_name) mappedData.user_data.ln = address.last_name;\n\n if (eventData.firstName) mappedData.user_data.fn = eventData.firstName;\n else if (eventData.FirstName) mappedData.user_data.fn = eventData.FirstName;\n else if (eventData.nameFirst) mappedData.user_data.fn = eventData.nameFirst;\n else if (eventData.first_name) mappedData.user_data.fn = eventData.first_name;\n else if (user_data.first_name) mappedData.user_data.fn = user_data.first_name;\n else if (address.first_name) mappedData.user_data.fn = address.first_name;\n\n if (eventData.email) mappedData.user_data.em = eventData.email;\n else if (user_data.email_address) mappedData.user_data.em = user_data.email_address;\n else if (user_data.email) mappedData.user_data.em = user_data.email;\n\n if (eventData.phone) mappedData.user_data.ph = eventData.phone;\n else if (user_data.phone_number) mappedData.user_data.ph = user_data.phone_number;\n\n if (eventData.city) mappedData.user_data.ct = eventData.city;\n else if (address.city) mappedData.user_data.ct = address.city;\n\n if (eventData.state) mappedData.user_data.st = eventData.state;\n else if (eventData.region) mappedData.user_data.st = eventData.region;\n else if (user_data.region) mappedData.user_data.st = user_data.region;\n else if (address.region) mappedData.user_data.st = address.region;\n\n if (eventData.zip) mappedData.user_data.zp = eventData.zip;\n else if (eventData.postal_code) mappedData.user_data.zp = eventData.postal_code;\n else if (user_data.postal_code) mappedData.user_data.zp = user_data.postal_code;\n else if (address.postal_code) mappedData.user_data.zp = address.postal_code;\n\n if (eventData.countryCode) mappedData.user_data.country = eventData.countryCode;\n else if (eventData.country) mappedData.user_data.country = eventData.country;\n else if (user_data.country) mappedData.user_data.country = user_data.country;\n else if (address.country) mappedData.user_data.country = address.country;\n\n if (eventData.gender) mappedData.user_data.ge = eventData.gender;\n if (eventData.db) mappedData.user_data.db = eventData.db;\n\n return mappedData;\n}\n\nfunction addServerEventData(eventData, mappedData) {\n let serverEventDataList = {};\n\n if (eventData.event_id) mappedData.event_id = eventData.event_id;\n else if (eventData.transaction_id) mappedData.event_id = eventData.transaction_id;\n\n if (data.serverEventDataList) {\n data.serverEventDataList.forEach((d) => {\n serverEventDataList[d.name] = d.value;\n });\n }\n\n if (serverEventDataList) {\n if (serverEventDataList.event_time) mappedData.event_time = serverEventDataList.event_time;\n if (serverEventDataList.event_source_url) mappedData.event_source_url = serverEventDataList.event_source_url;\n if (serverEventDataList.opt_out) mappedData.opt_out = serverEventDataList.opt_out;\n if (serverEventDataList.event_id) mappedData.event_id = serverEventDataList.event_id;\n\n if (serverEventDataList.data_processing_options) {\n mappedData.data_processing_options = serverEventDataList.data_processing_options;\n\n if (serverEventDataList.data_processing_options_country) mappedData.data_processing_options_country = serverEventDataList.data_processing_options_country;\n if (serverEventDataList.data_processing_options_state) mappedData.data_processing_options_state = serverEventDataList.data_processing_options_state;\n }\n }\n\n return mappedData;\n}\n\nfunction addAppData(eventData, mappedData) {\n if (mappedData.action_source !== 'app') {\n return mappedData;\n }\n\n if (getType(eventData.app_data) === 'object') {\n mappedData.app_data = eventData.app_data;\n\n return mappedData;\n }\n\n if (eventData.advertiser_tracking_enabled) mappedData.app_data.advertiser_tracking_enabled = eventData.advertiser_tracking_enabled;\n if (eventData.application_tracking_enabled) mappedData.app_data.application_tracking_enabled = eventData.application_tracking_enabled;\n if (eventData.extinfo) mappedData.app_data.extinfo = eventData.extinfo;\n if (eventData.campaign_ids) mappedData.app_data.campaign_ids = eventData.campaign_ids;\n if (eventData.install_referrer) mappedData.app_data.install_referrer = eventData.install_referrer;\n if (eventData.installer_package) mappedData.app_data.installer_package = eventData.installer_package;\n if (eventData.url_schemes) mappedData.app_data.url_schemes = eventData.url_schemes;\n if (eventData.windows_attribution_id) mappedData.app_data.windows_attribution_id = eventData.windows_attribution_id;\n\n return mappedData;\n}\n\nfunction setGtmEecCookie(userData) {\n let gtmeecCookie = {};\n\n if (userData.em) gtmeecCookie.em = userData.em;\n if (userData.ph) gtmeecCookie.ph = userData.ph;\n if (userData.ln) gtmeecCookie.ln = userData.ln;\n if (userData.fn) gtmeecCookie.fn = userData.fn;\n if (userData.ct) gtmeecCookie.ct = userData.ct;\n if (userData.st) gtmeecCookie.st = userData.st;\n if (userData.zp) gtmeecCookie.zp = userData.zp;\n if (userData.ge) gtmeecCookie.ge = userData.ge;\n if (userData.db) gtmeecCookie.db = userData.db;\n if (userData.country) gtmeecCookie.country = userData.country;\n if (userData.external_id) gtmeecCookie.external_id = userData.external_id;\n if (userData.fb_login_id) gtmeecCookie.fb_login_id = userData.fb_login_id;\n\n setCookie('_gtmeec', toBase64(JSON.stringify(gtmeecCookie)), {\n domain: 'auto',\n path: '/',\n samesite: 'strict',\n secure: true,\n 'max-age': 7776000, // 90 days\n HttpOnly: true,\n });\n}\n\nfunction enhanceEventData(userData) {\n const cookieValues = getCookieValues('_gtmeec');\n if (!cookieValues || cookieValues.length === 0) {\n return userData;\n }\n\n const encodedValue = cookieValues[0];\n if (!encodedValue) {\n return userData;\n }\n\n const jsonStr = fromBase64(encodedValue);\n if (!jsonStr) {\n return userData;\n }\n\n const gtmeecData = JSON.parse(jsonStr);\n\n if (gtmeecData) {\n if (!userData.em && gtmeecData.em) userData.em = gtmeecData.em;\n if (!userData.ph && gtmeecData.ph) userData.ph = gtmeecData.ph;\n if (!userData.ln && gtmeecData.ph) userData.ln = gtmeecData.ln;\n if (!userData.fn && gtmeecData.fn) userData.fn = gtmeecData.fn;\n if (!userData.ct && gtmeecData.ct) userData.ct = gtmeecData.ct;\n if (!userData.st && gtmeecData.st) userData.st = gtmeecData.st;\n if (!userData.zp && gtmeecData.zp) userData.zp = gtmeecData.zp;\n if (!userData.ge && gtmeecData.ge) userData.ge = gtmeecData.ge;\n if (!userData.db && gtmeecData.db) userData.db = gtmeecData.db;\n if (!userData.country && gtmeecData.country) userData.country = gtmeecData.country;\n if (!userData.external_id && gtmeecData.external_id) userData.external_id = gtmeecData.external_id;\n if (!userData.fb_login_id && gtmeecData.fb_login_id) userData.fb_login_id = gtmeecData.fb_login_id;\n }\n\n return userData;\n}\n\nfunction determinateIsLoggingEnabled() {\n const containerVersion = getContainerVersion();\n const isDebug = !!(\n containerVersion &&\n (containerVersion.debugMode || containerVersion.previewMode)\n );\n\n if (!data.logType) {\n return isDebug;\n }\n\n if (data.logType === 'no') {\n return false;\n }\n\n if (data.logType === 'debug') {\n return isDebug;\n }\n\n return data.logType === 'always';\n}\n\n\n___SERVER_PERMISSIONS___\n\n[\n {\n \"instance\": {\n \"key\": {\n \"publicId\": \"read_event_data\",\n \"versionId\": \"1\"\n },\n \"param\": [\n {\n \"key\": \"eventDataAccess\",\n \"value\": {\n \"type\": 1,\n \"string\": \"any\"\n }\n }\n ]\n },\n \"clientAnnotations\": {\n \"isEditedByUser\": true\n },\n \"isRequired\": true\n },\n {\n \"instance\": {\n \"key\": {\n \"publicId\": \"set_cookies\",\n \"versionId\": \"1\"\n },\n \"param\": [\n {\n \"key\": \"allowedCookies\",\n \"value\": {\n \"type\": 2,\n \"listItem\": [\n {\n \"type\": 3,\n \"mapKey\": [\n {\n \"type\": 1,\n \"string\": \"name\"\n },\n {\n \"type\": 1,\n \"string\": \"domain\"\n },\n {\n \"type\": 1,\n \"string\": \"path\"\n },\n {\n \"type\": 1,\n \"string\": \"secure\"\n },\n {\n \"type\": 1,\n \"string\": \"session\"\n }\n ],\n \"mapValue\": [\n {\n \"type\": 1,\n \"string\": \"_fbc\"\n },\n {\n \"type\": 1,\n \"string\": \"*\"\n },\n {\n \"type\": 1,\n \"string\": \"*\"\n },\n {\n \"type\": 1,\n \"string\": \"any\"\n },\n {\n \"type\": 1,\n \"string\": \"any\"\n }\n ]\n },\n {\n \"type\": 3,\n \"mapKey\": [\n {\n \"type\": 1,\n \"string\": \"name\"\n },\n {\n \"type\": 1,\n \"string\": \"domain\"\n },\n {\n \"type\": 1,\n \"string\": \"path\"\n },\n {\n \"type\": 1,\n \"string\": \"secure\"\n },\n {\n \"type\": 1,\n \"string\": \"session\"\n }\n ],\n \"mapValue\": [\n {\n \"type\": 1,\n \"string\": \"_fbp\"\n },\n {\n \"type\": 1,\n \"string\": \"*\"\n },\n {\n \"type\": 1,\n \"string\": \"*\"\n },\n {\n \"type\": 1,\n \"string\": \"any\"\n },\n {\n \"type\": 1,\n \"string\": \"any\"\n }\n ]\n },\n {\n \"type\": 3,\n \"mapKey\": [\n {\n \"type\": 1,\n \"string\": \"name\"\n },\n {\n \"type\": 1,\n \"string\": \"domain\"\n },\n {\n \"type\": 1,\n \"string\": \"path\"\n },\n {\n \"type\": 1,\n \"string\": \"secure\"\n },\n {\n \"type\": 1,\n \"string\": \"session\"\n }\n ],\n \"mapValue\": [\n {\n \"type\": 1,\n \"string\": \"_gtmeec\"\n },\n {\n \"type\": 1,\n \"string\": \"*\"\n },\n {\n \"type\": 1,\n \"string\": \"*\"\n },\n {\n \"type\": 1,\n \"string\": \"any\"\n },\n {\n \"type\": 1,\n \"string\": \"any\"\n }\n ]\n }\n ]\n }\n }\n ]\n },\n \"clientAnnotations\": {\n \"isEditedByUser\": true\n },\n \"isRequired\": true\n },\n {\n \"instance\": {\n \"key\": {\n \"publicId\": \"send_http\",\n \"versionId\": \"1\"\n },\n \"param\": [\n {\n \"key\": \"allowedUrls\",\n \"value\": {\n \"type\": 1,\n \"string\": \"specific\"\n }\n },\n {\n \"key\": \"urls\",\n \"value\": {\n \"type\": 2,\n \"listItem\": [\n {\n \"type\": 1,\n \"string\": \"https://graph.facebook.com/\"\n }\n ]\n }\n }\n ]\n },\n \"clientAnnotations\": {\n \"isEditedByUser\": true\n },\n \"isRequired\": true\n },\n {\n \"instance\": {\n \"key\": {\n \"publicId\": \"get_cookies\",\n \"versionId\": \"1\"\n },\n \"param\": [\n {\n \"key\": \"cookieAccess\",\n \"value\": {\n \"type\": 1,\n \"string\": \"specific\"\n }\n },\n {\n \"key\": \"cookieNames\",\n \"value\": {\n \"type\": 2,\n \"listItem\": [\n {\n \"type\": 1,\n \"string\": \"_fbc\"\n },\n {\n \"type\": 1,\n \"string\": \"_fbp\"\n },\n {\n \"type\": 1,\n \"string\": \"_gtmeec\"\n }\n ]\n }\n }\n ]\n },\n \"clientAnnotations\": {\n \"isEditedByUser\": true\n },\n \"isRequired\": true\n },\n {\n \"instance\": {\n \"key\": {\n \"publicId\": \"logging\",\n \"versionId\": \"1\"\n },\n \"param\": [\n {\n \"key\": \"environments\",\n \"value\": {\n \"type\": 1,\n \"string\": \"all\"\n }\n }\n ]\n },\n \"clientAnnotations\": {\n \"isEditedByUser\": true\n },\n \"isRequired\": true\n },\n {\n \"instance\": {\n \"key\": {\n \"publicId\": \"read_container_data\",\n \"versionId\": \"1\"\n },\n \"param\": []\n },\n \"isRequired\": true\n },\n {\n \"instance\": {\n \"key\": {\n \"publicId\": \"read_request\",\n \"versionId\": \"1\"\n },\n \"param\": [\n {\n \"key\": \"headerWhitelist\",\n \"value\": {\n \"type\": 2,\n \"listItem\": [\n {\n \"type\": 3,\n \"mapKey\": [\n {\n \"type\": 1,\n \"string\": \"headerName\"\n }\n ],\n \"mapValue\": [\n {\n \"type\": 1,\n \"string\": \"trace-id\"\n }\n ]\n },\n {\n \"type\": 3,\n \"mapKey\": [\n {\n \"type\": 1,\n \"string\": \"headerName\"\n }\n ],\n \"mapValue\": [\n {\n \"type\": 1,\n \"string\": \"referer\"\n }\n ]\n }\n ]\n }\n },\n {\n \"key\": \"headersAllowed\",\n \"value\": {\n \"type\": 8,\n \"boolean\": true\n }\n },\n {\n \"key\": \"requestAccess\",\n \"value\": {\n \"type\": 1,\n \"string\": \"specific\"\n }\n },\n {\n \"key\": \"headerAccess\",\n \"value\": {\n \"type\": 1,\n \"string\": \"specific\"\n }\n },\n {\n \"key\": \"queryParameterAccess\",\n \"value\": {\n \"type\": 1,\n \"string\": \"any\"\n }\n }\n ]\n },\n \"clientAnnotations\": {\n \"isEditedByUser\": true\n },\n \"isRequired\": true\n }\n]\n\n\n___TESTS___\n\nscenarios:\n- name: Check semantical errors\n code: |-\n const mockData = {\n pixelId: 12345,\n accessToken: 'test'\n };\n\n\n runCode(mockData);\nsetup: ''\n\n\n___NOTES___\n\nCreated on 10/11/2020, 18:14:02\n\n\n",
"galleryReference": {
"host": "github.com",
"owner": "stape-io",
"repository": "facebook-tag",
"version": "cddd6fe15a357fc2e8e7bc70d5d5b5f026c83795",
"signature": "3cd2b780860a22b5a87af22600417ec1058529dea393d960e0e99af9e8d1878b"
}
},
{
"accountId": "6250428815",
"containerId": "195873904",
"templateId": "5",
"name": "Request Data to Event Data",
"fingerprint": "1727090434101",
"templateData": "___INFO___\n\n{\n \"type\": \"CLIENT\",\n \"id\": \"cvt_temp_public_id\",\n \"version\": 1,\n \"securityGroups\": [],\n \"displayName\": \"Request Data to Event Data\",\n \"brand\": {\n \"id\": \"brand_dummy\",\n \"displayName\": \"GTM Server\",\n \"thumbnail\": \"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEBLAEsAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQICAQECAQEBAgICAgICAgICAQICAgICAgICAgL/2wBDAQEBAQEBAQEBAQECAQEBAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL/wAARCAEAAQADAREAAhEBAxEB/8QAHwABAAIBBAMBAAAAAAAAAAAAAAIEBQMGCAoBBwkL/8QAUhAAAAUBAwYFEQcDAgUCBwAAAAECAwQFBgcRCBITMUHBIWFygdEJFCIyM0JRUnF0kZKhsbKz4QojU1TS0/AVk5QkKBYXGDdiJ0M0R0hngqLC/8QAHQEBAAICAwEBAAAAAAAAAAAAAAECAwcEBggFCf/EAFMRAAEDAQMFCgkJBQYGAQUAAAEAAgMRBAUSBhMhMVEiMkFSYXGBobHBBxQjM0Jyc5HRFkNTYpKiwtLwFYLT4eIkJURVo/EINEVUY5OyZIOEs8P/2gAMAwEAAhEDEQA/APgE73aR5zJ+e4P0WZvQvyTl847o7AoCyxoCICICICICICICICICICICICICICICICICICICICICICICICICICICICICKbfdG+Wn4iFX7x3MexSNfQexHe7SPOZPz3AZvQry+cd0dgUBZY0BEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBFNvujfLT8RCr947mPYpGvoPYjvdpHnMn57gM3oV5fOO6OwKAssaAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAim33Rvlp+IhV+8dzHsUjX0HsR3u0jzmT89wGb0K8vnHdHYFAWWNARARARARARARARARARARARARARARARARARARARARARARARARARARARARARTb7o3y0/EQq/eO5j2KRr6D2I73aR5zJ+e4DN6FeXzjujsCgLLGgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIpt90b5afiIVfvHcx7FI19B7Ed7tI85k/PcBm9CvL5x3R2BQFljQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEU2+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\"\n },\n \"description\": \"Use this Client as a mapper from Request Data to Event Data.\",\n \"containerContexts\": [\n \"SERVER\"\n ]\n}\n\n\n___TEMPLATE_PARAMETERS___\n\n[\n {\n \"type\": \"GROUP\",\n \"name\": \"Settings\",\n \"displayName\": \"More Settings\",\n \"groupStyle\": \"ZIPPY_CLOSED\",\n \"subParams\": [\n {\n \"type\": \"SIMPLE_TABLE\",\n \"name\": \"path\",\n \"displayName\": \"Type aditional paths that will be claimed by this client\",\n \"simpleTableColumns\": [\n {\n \"defaultValue\": \"\",\n \"displayName\": \"For example: /callback\",\n \"name\": \"path\",\n \"type\": \"TEXT\",\n \"isUnique\": true,\n \"valueValidators\": [\n {\n \"type\": \"NON_EMPTY\"\n }\n ]\n }\n ],\n \"newRowButtonText\": \"Add path\",\n \"help\": \"By default path \\u003cb\\u003e/data\\u003c/b\\u003e will be claimed. But you can add more paths that will be claimed by this client.\"\n }\n ]\n }\n]\n\n\n___SANDBOXED_JS_FOR_SERVER___\n\nconst returnResponse = require('returnResponse');\nconst runContainer = require('runContainer');\nconst setResponseHeader = require('setResponseHeader');\nconst setResponseStatus = require('setResponseStatus');\nconst setResponseBody = require('setResponseBody');\nconst JSON = require('JSON');\nconst generateRandom = require('generateRandom');\nconst getTimestampMillis = require('getTimestampMillis');\nconst computeEffectiveTldPlusOne = require('computeEffectiveTldPlusOne');\nconst getCookieValues = require('getCookieValues');\nconst getRequestBody = require('getRequestBody');\nconst getRequestMethod = require('getRequestMethod');\nconst getRequestHeader = require('getRequestHeader');\nconst getRequestPath = require('getRequestPath');\nconst getRequestQueryParameters = require('getRequestQueryParameters');\nconst getRequestQueryString = require('getRequestQueryString');\nconst makeInteger = require('makeInteger');\nconst getRemoteAddress = require('getRemoteAddress');\nconst setCookie = require('setCookie');\nconst setPixelResponse = require('setPixelResponse');\n\nconst path = getRequestPath();\nlet isClientUsed = false;\n\nif (path === '/data') {\n runClient();\n}\n\nif (data.path && !isClientUsed) {\n for (let key in data.path) {\n if (!isClientUsed && data.path[key].path === path) {\n runClient();\n }\n }\n}\n\nfunction runClient()\n{\n isClientUsed = true;\n require('claimRequest')();\n\n let eventModel = {\n timestamp: makeInteger(getTimestampMillis()/1000),\n request_data: {\n body: getBody(),\n path: getRequestPath(),\n method: getRequestMethod(),\n domain: getDomain(),\n domain_effective_tld_plus_one: getDomainEffectiveTldPlusOne(),\n query_string: getRequestQueryString(),\n query_parameters: getRequestQueryParameters(),\n cookies: getKnownCookies(),\n headers: getKnownHeaders(),\n },\n };\n\n eventModel.client_id = getDtclid(eventModel);\n\n eventModel = addQueryParametersToEventModel(eventModel);\n eventModel = addBodyParametersToEventModel(eventModel);\n eventModel = addDataTagParametersToEventModel(eventModel);\n eventModel = addRequiredParametersToEventModel(eventModel);\n eventModel = addCommonParametersToEventModel(eventModel);\n eventModel = cleanupEventModel(eventModel);\n\n\n if (eventModel.request_data.method === 'OPTIONS') {\n setResponseHeaders(eventModel);\n\n returnResponse();\n } else {\n runContainer(eventModel, () => {\n setResponseHeaders(eventModel);\n\n if (eventModel.request_data.method === 'POST') {\n setResponseHeader('Content-Type', 'application/json');\n setResponseBody(JSON.stringify({\n client_id: eventModel.client_id,\n event_id: eventModel.event_id,\n }));\n returnResponse();\n } else {\n setPixelResponse();\n returnResponse();\n }\n });\n }\n}\n\nfunction addCommonParametersToEventModel(eventModel)\n{\n let userData = {};\n let userAddressData = {};\n\n if (eventModel.user_data) {\n userData = eventModel.user_data;\n }\n\n if (userData.address) {\n userAddressData = userData.address;\n }\n\n if (!eventModel.ip_override) {\n if (eventModel.ip) eventModel.ip_override = eventModel.ip;\n else if (eventModel.ipOverride) eventModel.ip_override = eventModel.ipOverride;\n else eventModel.ip_override = getRemoteAddress();\n }\n\n if (!eventModel.user_agent) {\n if (eventModel.userAgent) eventModel.user_agent = eventModel.userAgent;\n else if (getRequestHeader('User-Agent')) eventModel.user_agent = getRequestHeader('User-Agent');\n }\n\n if (!eventModel.language) {\n const acceptLanguageHeader = getRequestHeader('Accept-Language');\n\n if (acceptLanguageHeader) {\n eventModel.language = acceptLanguageHeader.split(';')[0].substring(0,2).toLowerCase();\n }\n }\n\n if (!eventModel.page_encoding) {\n if (eventModel.pageEncoding) eventModel.page_encoding = eventModel.pageEncoding;\n }\n\n if (!eventModel.page_hostname) {\n if (eventModel.pageHostname) eventModel.page_hostname = eventModel.pageHostname;\n else if (eventModel.hostname) eventModel.page_hostname = eventModel.hostname;\n }\n\n if (!eventModel.page_location) {\n if (eventModel.pageLocation) eventModel.page_location = eventModel.pageLocation;\n else if (eventModel.url) eventModel.page_location = eventModel.url;\n else if (eventModel.href) eventModel.page_location = eventModel.href;\n }\n\n if (!eventModel.page_path) {\n if (eventModel.pagePath) eventModel.page_path = eventModel.pagePath;\n }\n\n if (!eventModel.page_referrer) {\n if (eventModel.pageReferrer) eventModel.page_referrer = eventModel.pageReferrer;\n else if (eventModel.referrer) eventModel.page_referrer = eventModel.referrer;\n }\n\n if (!eventModel.page_title) {\n if (eventModel.pageTitle) eventModel.page_title = eventModel.pageTitle;\n }\n\n if (!eventModel.screen_resolution) {\n if (eventModel.screenResolution) eventModel.screen_resolution = eventModel.screenResolution;\n }\n\n if (!eventModel.viewport_size) {\n if (eventModel.viewportSize) eventModel.viewport_size = eventModel.viewportSize;\n }\n\n if (!eventModel.user_id) {\n if (eventModel.userId) eventModel.user_id = eventModel.userId;\n }\n\n if (!userData.email_address) {\n if (eventModel.userEmail) userData.email_address = eventModel.userEmail;\n else if (eventModel.email_address) userData.email_address = eventModel.email_address;\n else if (eventModel.email) userData.email_address = eventModel.email;\n else if (eventModel.mail) userData.email_address = eventModel.mail;\n }\n\n if (!userData.phone_number) {\n if (eventModel.userPhoneNumber) userData.phone_number = eventModel.userPhoneNumber;\n else if (eventModel.phone_number) userData.phone_number = eventModel.phone_number;\n else if (eventModel.phoneNumber) userData.phone_number = eventModel.phoneNumber;\n else if (eventModel.phone) userData.phone_number = eventModel.phone;\n }\n\n if (!userAddressData.first_name) {\n if (eventModel.userFirstName) userAddressData.first_name = eventModel.userFirstName;\n else if (eventModel.first_name) userAddressData.first_name = eventModel.first_name;\n else if (eventModel.firstName) userAddressData.first_name = eventModel.firstName;\n else if (eventModel.name) userAddressData.first_name = eventModel.name;\n }\n\n if (!userAddressData.last_name) {\n if (eventModel.userLastName) userAddressData.last_name = eventModel.userLastName;\n else if (eventModel.last_name) userAddressData.last_name = eventModel.last_name;\n else if (eventModel.lastName) userAddressData.last_name = eventModel.lastName;\n else if (eventModel.surname) userAddressData.last_name = eventModel.surname;\n else if (eventModel.family_name) userAddressData.last_name = eventModel.family_name;\n else if (eventModel.familyName) userAddressData.last_name = eventModel.familyName;\n }\n\n if (!userAddressData.street) {\n if (eventModel.street) userAddressData.street = eventModel.street;\n }\n\n if (!userAddressData.city) {\n if (eventModel.city) userAddressData.city = eventModel.city;\n }\n\n if (!userAddressData.region) {\n if (eventModel.region) userAddressData.region = eventModel.region;\n }\n\n if (!userAddressData.region) {\n if (eventModel.region) userAddressData.region = eventModel.region;\n else if (eventModel.state) userAddressData.region = eventModel.state;\n }\n\n if (!userAddressData.country) {\n if (eventModel.country) userAddressData.country = eventModel.country;\n }\n\n if (!userAddressData.postal_code) {\n if (eventModel.postal_code) userAddressData.postal_code = eventModel.postal_code;\n else if (eventModel.postalCode) userAddressData.postal_code = eventModel.postalCode;\n else if (eventModel.zip) userAddressData.postal_code = eventModel.zip;\n }\n\n if (getObjectLength(userAddressData) !== 0) {\n userData.address = userAddressData;\n }\n\n if (getObjectLength(userData) !== 0) {\n eventModel.user_data = userData;\n }\n\n return eventModel;\n}\n\nfunction addQueryParametersToEventModel(eventModel)\n{\n if (eventModel.request_data.query_parameters) {\n for (let queryParameterKey in eventModel.request_data.query_parameters) {\n eventModel[queryParameterKey] = eventModel.request_data.query_parameters[queryParameterKey];\n }\n }\n\n return eventModel;\n}\n\nfunction addBodyParametersToEventModel(eventModel)\n{\n if (eventModel.request_data.body) {\n for (let bodyKey in eventModel.request_data.body) {\n eventModel[bodyKey] = eventModel.request_data.body[bodyKey];\n }\n }\n\n return eventModel;\n}\n\nfunction addDataTagParametersToEventModel(eventModel)\n{\n if (eventModel.request_data.body && eventModel.request_data.body.data_tag === true && eventModel.request_data.body.data_tag_custom_data) {\n for (let dataKey in eventModel.request_data.body.data_tag_custom_data) {\n eventModel[eventModel.request_data.body.data_tag_custom_data[dataKey].name] = eventModel.request_data.body.data_tag_custom_data[dataKey].value;\n }\n }\n\n return eventModel;\n}\n\nfunction addRequiredParametersToEventModel(eventModel)\n{\n if (!eventModel.event_name) {\n let eventName = 'Data';\n\n if (eventModel.eventName) eventName = eventModel.eventName;\n else if (eventModel.event) eventName = eventModel.event;\n else if (eventModel.name) eventName = eventModel.name;\n else if (eventModel.request_data.path === '/favicon.ico') eventName = 'Favicon';\n\n eventModel.event_name = eventName;\n }\n\n if (!eventModel.event_id) {\n eventModel.event_id = eventModel.event_name+'_'+getTimestampMillis()+'_'+generateRandom(0, 100000000);\n }\n\n if (!eventModel.protocol_version) {\n let protocolVersion = 1.0;\n\n\n if (eventModel.protocolVersion) protocolVersion = eventModel.protocolVersion;\n else if (eventModel.protocol) protocolVersion = eventModel.protocol;\n else if (eventModel.v) protocolVersion = eventModel.v;\n\n eventModel.protocol_version = protocolVersion;\n }\n\n return eventModel;\n}\n\nfunction cleanupEventModel(eventModel)\n{\n let cleanEventModel = {};\n\n for (let key in eventModel) {\n if (key !== 'data_tag' && key !== 'data_tag_custom_data' && key !== 'dtclid' && key !== 'v') {\n cleanEventModel[key] = eventModel[key];\n }\n }\n\n return cleanEventModel;\n}\n\nfunction getBody()\n{\n const body = getRequestBody();\n\n if (body) {\n const bodyJson = JSON.parse(body);\n\n if (bodyJson) {\n\n return bodyJson;\n }\n\n return body;\n }\n\n return null;\n}\n\nfunction getDomain()\n{\n return getRequestHeader('Host');\n}\n\nfunction getDomainEffectiveTldPlusOne()\n{\n const host = getRequestHeader('Host');\n let result = null;\n\n if (host) {\n result = computeEffectiveTldPlusOne(host);\n }\n\n return result;\n}\n\nfunction getKnownCookies() {\n let existCookies = {};\n let knownCookies = ['FPID', '_fbc', '_fbp', '_ga', '__cfduid'];\n\n for (let cookieNameKey in knownCookies) {\n let cookieName = knownCookies[cookieNameKey];\n let cookie = getCookieValues(cookieName);\n\n if (cookie.length) {\n existCookies[cookieName] = cookie[0];\n }\n }\n\n return existCookies;\n}\n\nfunction getKnownHeaders() {\n let existHeaders = {};\n let knownHeaders = [\n 'Hostname',\n 'Host',\n 'IP',\n 'RemoteAddr',\n 'User-Agent',\n 'Accept',\n 'Accept-Encoding',\n 'Accept-Language',\n 'Cache-Control',\n 'Pragma',\n 'X-Real-Ip',\n 'X-Forwarded-For',\n 'X-Forwarded-Host',\n 'Upgrade-Insecure-Requests',\n 'Sec-Ch-Ua',\n 'Sec-Ch-Ua-Mobile',\n ];\n\n for (let headerNameKey in knownHeaders) {\n let headerName = knownHeaders[headerNameKey];\n let header = getRequestHeader(headerName);\n\n if (header) {\n existHeaders[headerName] = header;\n }\n }\n\n return existHeaders;\n}\n\nfunction getDtclid(eventModel) {\n if (eventModel.request_data.body && eventModel.request_data.body.dtclid) {\n return eventModel.request_data.body.dtclid;\n }\n\n if (eventModel.request_data.query_parameters && eventModel.request_data.query_parameters.dtclid) {\n return eventModel.request_data.query_parameters.dtclid;\n }\n\n if (getCookieValues('_dtclid') && getCookieValues('_dtclid')[0]) {\n return getCookieValues('_dtclid')[0];\n }\n\n return 'dtclid.1.' + getTimestampMillis() + '.' + generateRandom(100000000, 999999999);\n}\n\nfunction getObjectLength(object) {\n let length = 0;\n for(let key in object) {\n if(object.hasOwnProperty(key)) {\n ++length;\n }\n }\n return length;\n}\n\nfunction setResponseHeaders(eventModel) {\n setCookie('_dtclid', eventModel.client_id, {\n domain: 'auto',\n path: '/',\n 'max-age': 63072000, // 2 years\n samesite: 'Lax',\n secure: true\n });\n\n setResponseHeader('Access-Control-Allow-Origin', getRequestHeader('origin'));\n setResponseHeader('Access-Control-Allow-Methods', 'GET,POST,PUT,DELETE,OPTIONS');\n setResponseHeader('Access-Control-Allow-Headers', 'content-type,set-cookie,x-robots-tag,x-gtm-server-preview');\n setResponseHeader('Access-Control-Allow-Credentials', 'true');\n setResponseStatus(200);\n}\n\n\n___SERVER_PERMISSIONS___\n\n[\n {\n \"instance\": {\n \"key\": {\n \"publicId\": \"return_response\",\n \"versionId\": \"1\"\n },\n \"param\": []\n },\n \"isRequired\": true\n },\n {\n \"instance\": {\n \"key\": {\n \"publicId\": \"access_response\",\n \"versionId\": \"1\"\n },\n \"param\": [\n {\n \"key\": \"writeResponseAccess\",\n \"value\": {\n \"type\": 1,\n \"string\": \"any\"\n }\n },\n {\n \"key\": \"writeHeaderAccess\",\n \"value\": {\n \"type\": 1,\n \"string\": \"specific\"\n }\n }\n ]\n },\n \"clientAnnotations\": {\n \"isEditedByUser\": true\n },\n \"isRequired\": true\n },\n {\n \"instance\": {\n \"key\": {\n \"publicId\": \"run_container\",\n \"versionId\": \"1\"\n },\n \"param\": []\n },\n \"isRequired\": true\n },\n {\n \"instance\": {\n \"key\": {\n \"publicId\": \"get_cookies\",\n \"versionId\": \"1\"\n },\n \"param\": [\n {\n \"key\": \"cookieAccess\",\n \"value\": {\n \"type\": 1,\n \"string\": \"any\"\n }\n }\n ]\n },\n \"clientAnnotations\": {\n \"isEditedByUser\": true\n },\n \"isRequired\": true\n },\n {\n \"instance\": {\n \"key\": {\n \"publicId\": \"read_request\",\n \"versionId\": \"1\"\n },\n \"param\": [\n {\n \"key\": \"requestAccess\",\n \"value\": {\n \"type\": 1,\n \"string\": \"any\"\n }\n },\n {\n \"key\": \"headerAccess\",\n \"value\": {\n \"type\": 1,\n \"string\": \"any\"\n }\n },\n {\n \"key\": \"queryParameterAccess\",\n \"value\": {\n \"type\": 1,\n \"string\": \"any\"\n }\n }\n ]\n },\n \"clientAnnotations\": {\n \"isEditedByUser\": true\n },\n \"isRequired\": true\n },\n {\n \"instance\": {\n \"key\": {\n \"publicId\": \"set_cookies\",\n \"versionId\": \"1\"\n },\n \"param\": [\n {\n \"key\": \"allowedCookies\",\n \"value\": {\n \"type\": 2,\n \"listItem\": [\n {\n \"type\": 3,\n \"mapKey\": [\n {\n \"type\": 1,\n \"string\": \"name\"\n },\n {\n \"type\": 1,\n \"string\": \"domain\"\n },\n {\n \"type\": 1,\n \"string\": \"path\"\n },\n {\n \"type\": 1,\n \"string\": \"secure\"\n },\n {\n \"type\": 1,\n \"string\": \"session\"\n }\n ],\n \"mapValue\": [\n {\n \"type\": 1,\n \"string\": \"_dtclid\"\n },\n {\n \"type\": 1,\n \"string\": \"*\"\n },\n {\n \"type\": 1,\n \"string\": \"*\"\n },\n {\n \"type\": 1,\n \"string\": \"any\"\n },\n {\n \"type\": 1,\n \"string\": \"any\"\n }\n ]\n }\n ]\n }\n }\n ]\n },\n \"clientAnnotations\": {\n \"isEditedByUser\": true\n },\n \"isRequired\": true\n }\n]\n\n\n___TESTS___\n\nscenarios: []\n\n\n___NOTES___\n\nCreated on 21/03/2021, 11:24:30\n\n\n"
},
{
"accountId": "6250428815",
"containerId": "195873904",
"templateId": "7",
"name": "FB Client",
"fingerprint": "1727090434102",
"templateData": "___INFO___\n\n{\n \"type\": \"CLIENT\",\n \"id\": \"cvt_temp_public_id\",\n \"version\": 1,\n \"securityGroups\": [],\n \"displayName\": \"FB Client\",\n \"brand\": {\n \"id\": \"brand_dummy\",\n \"displayName\": \"GTM Server\",\n \"thumbnail\": \"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEBLAEsAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQICAQECAQEBAgICAgICAgICAQICAgICAgICAgL/2wBDAQEBAQEBAQEBAQECAQEBAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL/wAARCAEAAQADAREAAhEBAxEB/8QAHwABAAIBBAMBAAAAAAAAAAAAAAIEBQMGCAoBBwkL/8QAUhAAAAUBAwYFEQcDAgUCBwAAAAECAwQFBgcRCBITMUHBIWFygdEJFCIyM0JRUnF0kZKhsbKz4QojU1TS0/AVk5QkKBYXGDdiJ0M0R0hngqLC/8QAHQEBAAICAwEBAAAAAAAAAAAAAAECAwcEBggFCf/EAFMRAAEDAQMFCgkJBQYGAQUAAAEAAgMRBAUSBhMhMVEiMkFSYXGBobHBBxQjM0Jyc5HRFkNTYpKiwtLwFYLT4eIkJURVo/EINEVUY5OyZIOEs8P/2gAMAwEAAhEDEQA/APgE73aR5zJ+e4P0WZvQvyTl847o7AoCyxoCICICICICICICICICICICICICICICICICICICICICICICICICICICICICKbfdG+Wn4iFX7x3MexSNfQexHe7SPOZPz3AZvQry+cd0dgUBZY0BEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBFNvujfLT8RCr947mPYpGvoPYjvdpHnMn57gM3oV5fOO6OwKAssaAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAim33Rvlp+IhV+8dzHsUjX0HsR3u0jzmT89wGb0K8vnHdHYFAWWNARARARARARARARARARARARARARARARARARARARARARARARARARARARARARTb7o3y0/EQq/eO5j2KRr6D2I73aR5zJ+e4DN6FeXzjujsCgLLGgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIpt90b5afiIVfvHcx7FI19B7Ed7tI85k/PcBm9CvL5x3R2BQFljQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEU2+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\"\n },\n \"description\": \"Use this Client as a mapper from Request Data to Event Data.\",\n \"containerContexts\": [\n \"SERVER\"\n ]\n}\n\n\n___TEMPLATE_PARAMETERS___\n\n[\n {\n \"type\": \"GROUP\",\n \"name\": \"Settings\",\n \"displayName\": \"More Settings\",\n \"groupStyle\": \"ZIPPY_CLOSED\",\n \"subParams\": [\n {\n \"type\": \"SIMPLE_TABLE\",\n \"name\": \"path\",\n \"displayName\": \"Type aditional paths that will be claimed by this client\",\n \"simpleTableColumns\": [\n {\n \"defaultValue\": \"\",\n \"displayName\": \"For example: /callback\",\n \"name\": \"path\",\n \"type\": \"TEXT\",\n \"isUnique\": true,\n \"valueValidators\": [\n {\n \"type\": \"NON_EMPTY\"\n }\n ]\n }\n ],\n \"newRowButtonText\": \"Add path\",\n \"help\": \"By default path \\u003cb\\u003e/data\\u003c/b\\u003e will be claimed. But you can add more paths that will be claimed by this client.\"\n }\n ]\n }\n]\n\n\n___SANDBOXED_JS_FOR_SERVER___\n\nconst returnResponse = require('returnResponse');\nconst runContainer = require('runContainer');\nconst setResponseHeader = require('setResponseHeader');\nconst setResponseStatus = require('setResponseStatus');\nconst setResponseBody = require('setResponseBody');\nconst JSON = require('JSON');\nconst generateRandom = require('generateRandom');\nconst getTimestampMillis = require('getTimestampMillis');\nconst computeEffectiveTldPlusOne = require('computeEffectiveTldPlusOne');\nconst getCookieValues = require('getCookieValues');\nconst getRequestBody = require('getRequestBody');\nconst getRequestMethod = require('getRequestMethod');\nconst getRequestHeader = require('getRequestHeader');\nconst getRequestPath = require('getRequestPath');\nconst getRequestQueryParameters = require('getRequestQueryParameters');\nconst getRequestQueryString = require('getRequestQueryString');\nconst makeInteger = require('makeInteger');\nconst getRemoteAddress = require('getRemoteAddress');\nconst setCookie = require('setCookie');\nconst setPixelResponse = require('setPixelResponse');\n\nconst path = getRequestPath();\nlet isClientUsed = false;\n\nif (path === '/tr') {\n runClient();\n}\n\nif (data.path && !isClientUsed) {\n for (let key in data.path) {\n if (!isClientUsed && data.path[key].path === path) {\n runClient();\n }\n }\n}\n\nfunction runClient()\n{\n isClientUsed = true;\n require('claimRequest')();\n\n let eventModel = {\n timestamp: makeInteger(getTimestampMillis()/1000),\n request_data: {\n body: getBody(),\n path: getRequestPath(),\n method: getRequestMethod(),\n domain: getDomain(),\n domain_effective_tld_plus_one: getDomainEffectiveTldPlusOne(),\n query_string: getRequestQueryString(),\n query_parameters: getRequestQueryParameters(),\n cookies: getKnownCookies(),\n headers: getKnownHeaders(),\n },\n };\n\n eventModel.client_id = getDtclid(eventModel);\n\n eventModel = addQueryParametersToEventModel(eventModel);\n eventModel = addBodyParametersToEventModel(eventModel);\n eventModel = addDataTagParametersToEventModel(eventModel);\n eventModel = addRequiredParametersToEventModel(eventModel);\n eventModel = addCommonParametersToEventModel(eventModel);\n eventModel = cleanupEventModel(eventModel);\n\n\n if (eventModel.request_data.method === 'OPTIONS') {\n setResponseHeaders(eventModel);\n\n returnResponse();\n } else {\n runContainer(eventModel, () => {\n setResponseHeaders(eventModel);\n\n if (eventModel.request_data.method === 'POST') {\n setResponseHeader('Content-Type', 'application/json');\n setResponseBody(JSON.stringify({\n client_id: eventModel.client_id,\n event_id: eventModel.event_id,\n }));\n returnResponse();\n } else {\n setPixelResponse();\n setResponseStatus(307);\n setResponseHeader('version', '3');\n setResponseHeader('location', 'https://www.facebook.com/tr?'+getRequestQueryString());\n \n returnResponse();\n }\n });\n }\n}\n\nfunction addCommonParametersToEventModel(eventModel)\n{\n let userData = {};\n let userAddressData = {};\n\n if (eventModel.user_data) {\n userData = eventModel.user_data;\n }\n\n if (userData.address) {\n userAddressData = userData.address;\n }\n\n if (!eventModel.ip_override) {\n if (eventModel.ip) eventModel.ip_override = eventModel.ip;\n else if (eventModel.ipOverride) eventModel.ip_override = eventModel.ipOverride;\n else eventModel.ip_override = getRemoteAddress();\n }\n\n if (!eventModel.user_agent) {\n if (eventModel.userAgent) eventModel.user_agent = eventModel.userAgent;\n else if (getRequestHeader('User-Agent')) eventModel.user_agent = getRequestHeader('User-Agent');\n }\n\n if (!eventModel.language) {\n const acceptLanguageHeader = getRequestHeader('Accept-Language');\n\n if (acceptLanguageHeader) {\n eventModel.language = acceptLanguageHeader.split(';')[0].substring(0,2).toLowerCase();\n }\n }\n\n if (!eventModel.page_encoding) {\n if (eventModel.pageEncoding) eventModel.page_encoding = eventModel.pageEncoding;\n }\n\n if (!eventModel.page_hostname) {\n if (eventModel.pageHostname) eventModel.page_hostname = eventModel.pageHostname;\n else if (eventModel.hostname) eventModel.page_hostname = eventModel.hostname;\n }\n\n if (!eventModel.page_location) {\n if (eventModel.pageLocation) eventModel.page_location = eventModel.pageLocation;\n else if (eventModel.url) eventModel.page_location = eventModel.url;\n else if (eventModel.href) eventModel.page_location = eventModel.href;\n }\n\n if (!eventModel.page_path) {\n if (eventModel.pagePath) eventModel.page_path = eventModel.pagePath;\n }\n\n if (!eventModel.page_referrer) {\n if (eventModel.pageReferrer) eventModel.page_referrer = eventModel.pageReferrer;\n else if (eventModel.referrer) eventModel.page_referrer = eventModel.referrer;\n }\n\n if (!eventModel.page_title) {\n if (eventModel.pageTitle) eventModel.page_title = eventModel.pageTitle;\n }\n\n if (!eventModel.screen_resolution) {\n if (eventModel.screenResolution) eventModel.screen_resolution = eventModel.screenResolution;\n }\n\n if (!eventModel.viewport_size) {\n if (eventModel.viewportSize) eventModel.viewport_size = eventModel.viewportSize;\n }\n\n if (!eventModel.user_id) {\n if (eventModel.userId) eventModel.user_id = eventModel.userId;\n }\n\n if (!userData.email_address) {\n if (eventModel.userEmail) userData.email_address = eventModel.userEmail;\n else if (eventModel.email_address) userData.email_address = eventModel.email_address;\n else if (eventModel.email) userData.email_address = eventModel.email;\n else if (eventModel.mail) userData.email_address = eventModel.mail;\n }\n\n if (!userData.phone_number) {\n if (eventModel.userPhoneNumber) userData.phone_number = eventModel.userPhoneNumber;\n else if (eventModel.phone_number) userData.phone_number = eventModel.phone_number;\n else if (eventModel.phoneNumber) userData.phone_number = eventModel.phoneNumber;\n else if (eventModel.phone) userData.phone_number = eventModel.phone;\n }\n\n if (!userAddressData.first_name) {\n if (eventModel.userFirstName) userAddressData.first_name = eventModel.userFirstName;\n else if (eventModel.first_name) userAddressData.first_name = eventModel.first_name;\n else if (eventModel.firstName) userAddressData.first_name = eventModel.firstName;\n else if (eventModel.name) userAddressData.first_name = eventModel.name;\n }\n\n if (!userAddressData.last_name) {\n if (eventModel.userLastName) userAddressData.last_name = eventModel.userLastName;\n else if (eventModel.last_name) userAddressData.last_name = eventModel.last_name;\n else if (eventModel.lastName) userAddressData.last_name = eventModel.lastName;\n else if (eventModel.surname) userAddressData.last_name = eventModel.surname;\n else if (eventModel.family_name) userAddressData.last_name = eventModel.family_name;\n else if (eventModel.familyName) userAddressData.last_name = eventModel.familyName;\n }\n\n if (!userAddressData.street) {\n if (eventModel.street) userAddressData.street = eventModel.street;\n }\n\n if (!userAddressData.city) {\n if (eventModel.city) userAddressData.city = eventModel.city;\n }\n\n if (!userAddressData.region) {\n if (eventModel.region) userAddressData.region = eventModel.region;\n }\n\n if (!userAddressData.region) {\n if (eventModel.region) userAddressData.region = eventModel.region;\n else if (eventModel.state) userAddressData.region = eventModel.state;\n }\n\n if (!userAddressData.country) {\n if (eventModel.country) userAddressData.country = eventModel.country;\n }\n\n if (!userAddressData.postal_code) {\n if (eventModel.postal_code) userAddressData.postal_code = eventModel.postal_code;\n else if (eventModel.postalCode) userAddressData.postal_code = eventModel.postalCode;\n else if (eventModel.zip) userAddressData.postal_code = eventModel.zip;\n }\n\n if (getObjectLength(userAddressData) !== 0) {\n userData.address = userAddressData;\n }\n\n if (getObjectLength(userData) !== 0) {\n eventModel.user_data = userData;\n }\n\n return eventModel;\n}\n\nfunction addQueryParametersToEventModel(eventModel)\n{\n if (eventModel.request_data.query_parameters) {\n for (let queryParameterKey in eventModel.request_data.query_parameters) {\n eventModel[queryParameterKey] = eventModel.request_data.query_parameters[queryParameterKey];\n }\n }\n\n return eventModel;\n}\n\nfunction addBodyParametersToEventModel(eventModel)\n{\n if (eventModel.request_data.body) {\n for (let bodyKey in eventModel.request_data.body) {\n eventModel[bodyKey] = eventModel.request_data.body[bodyKey];\n }\n }\n\n return eventModel;\n}\n\nfunction addDataTagParametersToEventModel(eventModel)\n{\n if (eventModel.request_data.body && eventModel.request_data.body.data_tag === true && eventModel.request_data.body.data_tag_custom_data) {\n for (let dataKey in eventModel.request_data.body.data_tag_custom_data) {\n eventModel[eventModel.request_data.body.data_tag_custom_data[dataKey].name] = eventModel.request_data.body.data_tag_custom_data[dataKey].value;\n }\n }\n\n return eventModel;\n}\n\nfunction addRequiredParametersToEventModel(eventModel)\n{\n if (!eventModel.event_name) {\n let eventName = 'Data';\n\n if (eventModel.eventName) eventName = eventModel.eventName;\n else if (eventModel.event) eventName = eventModel.event;\n else if (eventModel.name) eventName = eventModel.name;\n else if (eventModel.request_data.path === '/favicon.ico') eventName = 'Favicon';\n\n eventModel.event_name = eventName;\n }\n\n if (!eventModel.event_id) {\n eventModel.event_id = eventModel.event_name+'_'+getTimestampMillis()+'_'+generateRandom(0, 100000000);\n }\n\n if (!eventModel.protocol_version) {\n let protocolVersion = 1.0;\n\n\n if (eventModel.protocolVersion) protocolVersion = eventModel.protocolVersion;\n else if (eventModel.protocol) protocolVersion = eventModel.protocol;\n else if (eventModel.v) protocolVersion = eventModel.v;\n\n eventModel.protocol_version = protocolVersion;\n }\n\n return eventModel;\n}\n\nfunction cleanupEventModel(eventModel)\n{\n let cleanEventModel = {};\n\n for (let key in eventModel) {\n if (key !== 'data_tag' && key !== 'data_tag_custom_data' && key !== 'dtclid' && key !== 'v') {\n cleanEventModel[key] = eventModel[key];\n }\n }\n\n return cleanEventModel;\n}\n\nfunction getBody()\n{\n const body = getRequestBody();\n\n if (body) {\n const bodyJson = JSON.parse(body);\n\n if (bodyJson) {\n\n return bodyJson;\n }\n\n return body;\n }\n\n return null;\n}\n\nfunction getDomain()\n{\n return getRequestHeader('Host');\n}\n\nfunction getDomainEffectiveTldPlusOne()\n{\n const host = getRequestHeader('Host');\n let result = null;\n\n if (host) {\n result = computeEffectiveTldPlusOne(host);\n }\n\n return result;\n}\n\nfunction getKnownCookies() {\n let existCookies = {};\n let knownCookies = ['FPID', '_fbc', '_fbp', '_ga', '__cfduid'];\n\n for (let cookieNameKey in knownCookies) {\n let cookieName = knownCookies[cookieNameKey];\n let cookie = getCookieValues(cookieName);\n\n if (cookie.length) {\n existCookies[cookieName] = cookie[0];\n }\n }\n\n return existCookies;\n}\n\nfunction getKnownHeaders() {\n let existHeaders = {};\n let knownHeaders = [\n 'Hostname',\n 'Host',\n 'IP',\n 'RemoteAddr',\n 'User-Agent',\n 'Accept',\n 'Accept-Encoding',\n 'Accept-Language',\n 'Cache-Control',\n 'Pragma',\n 'X-Real-Ip',\n 'X-Forwarded-For',\n 'X-Forwarded-Host',\n 'Upgrade-Insecure-Requests',\n 'Sec-Ch-Ua',\n 'Sec-Ch-Ua-Mobile',\n ];\n\n for (let headerNameKey in knownHeaders) {\n let headerName = knownHeaders[headerNameKey];\n let header = getRequestHeader(headerName);\n\n if (header) {\n existHeaders[headerName] = header;\n }\n }\n\n return existHeaders;\n}\n\nfunction getDtclid(eventModel) {\n if (eventModel.request_data.body && eventModel.request_data.body.dtclid) {\n return eventModel.request_data.body.dtclid;\n }\n\n if (eventModel.request_data.query_parameters && eventModel.request_data.query_parameters.dtclid) {\n return eventModel.request_data.query_parameters.dtclid;\n }\n\n if (getCookieValues('_dtclid') && getCookieValues('_dtclid')[0]) {\n return getCookieValues('_dtclid')[0];\n }\n\n return 'dtclid.1.' + getTimestampMillis() + '.' + generateRandom(100000000, 999999999);\n}\n\nfunction getObjectLength(object) {\n let length = 0;\n for(let key in object) {\n if(object.hasOwnProperty(key)) {\n ++length;\n }\n }\n return length;\n}\n\nfunction setResponseHeaders(eventModel) {\n setCookie('_dtclid', eventModel.client_id, {\n domain: 'auto',\n path: '/',\n 'max-age': 63072000, // 2 years\n samesite: 'Lax',\n secure: true\n });\n\n setResponseHeader('Access-Control-Allow-Origin', getRequestHeader('origin'));\n setResponseHeader('Access-Control-Allow-Methods', 'GET,POST,PUT,DELETE,OPTIONS');\n setResponseHeader('Access-Control-Allow-Headers', 'content-type,set-cookie,x-robots-tag,x-gtm-server-preview');\n setResponseHeader('Access-Control-Allow-Credentials', 'true');\n setResponseStatus(200);\n}\n\n\n___SERVER_PERMISSIONS___\n\n[\n {\n \"instance\": {\n \"key\": {\n \"publicId\": \"return_response\",\n \"versionId\": \"1\"\n },\n \"param\": []\n },\n \"isRequired\": true\n },\n {\n \"instance\": {\n \"key\": {\n \"publicId\": \"access_response\",\n \"versionId\": \"1\"\n },\n \"param\": [\n {\n \"key\": \"writeResponseAccess\",\n \"value\": {\n \"type\": 1,\n \"string\": \"any\"\n }\n },\n {\n \"key\": \"writeHeaderAccess\",\n \"value\": {\n \"type\": 1,\n \"string\": \"specific\"\n }\n }\n ]\n },\n \"clientAnnotations\": {\n \"isEditedByUser\": true\n },\n \"isRequired\": true\n },\n {\n \"instance\": {\n \"key\": {\n \"publicId\": \"run_container\",\n \"versionId\": \"1\"\n },\n \"param\": []\n },\n \"isRequired\": true\n },\n {\n \"instance\": {\n \"key\": {\n \"publicId\": \"get_cookies\",\n \"versionId\": \"1\"\n },\n \"param\": [\n {\n \"key\": \"cookieAccess\",\n \"value\": {\n \"type\": 1,\n \"string\": \"any\"\n }\n }\n ]\n },\n \"clientAnnotations\": {\n \"isEditedByUser\": true\n },\n \"isRequired\": true\n },\n {\n \"instance\": {\n \"key\": {\n \"publicId\": \"read_request\",\n \"versionId\": \"1\"\n },\n \"param\": [\n {\n \"key\": \"requestAccess\",\n \"value\": {\n \"type\": 1,\n \"string\": \"any\"\n }\n },\n {\n \"key\": \"headerAccess\",\n \"value\": {\n \"type\": 1,\n \"string\": \"any\"\n }\n },\n {\n \"key\": \"queryParameterAccess\",\n \"value\": {\n \"type\": 1,\n \"string\": \"any\"\n }\n }\n ]\n },\n \"clientAnnotations\": {\n \"isEditedByUser\": true\n },\n \"isRequired\": true\n },\n {\n \"instance\": {\n \"key\": {\n \"publicId\": \"set_cookies\",\n \"versionId\": \"1\"\n },\n \"param\": [\n {\n \"key\": \"allowedCookies\",\n \"value\": {\n \"type\": 2,\n \"listItem\": [\n {\n \"type\": 3,\n \"mapKey\": [\n {\n \"type\": 1,\n \"string\": \"name\"\n },\n {\n \"type\": 1,\n \"string\": \"domain\"\n },\n {\n \"type\": 1,\n \"string\": \"path\"\n },\n {\n \"type\": 1,\n \"string\": \"secure\"\n },\n {\n \"type\": 1,\n \"string\": \"session\"\n }\n ],\n \"mapValue\": [\n {\n \"type\": 1,\n \"string\": \"_dtclid\"\n },\n {\n \"type\": 1,\n \"string\": \"*\"\n },\n {\n \"type\": 1,\n \"string\": \"*\"\n },\n {\n \"type\": 1,\n \"string\": \"any\"\n },\n {\n \"type\": 1,\n \"string\": \"any\"\n }\n ]\n }\n ]\n }\n }\n ]\n },\n \"clientAnnotations\": {\n \"isEditedByUser\": true\n },\n \"isRequired\": true\n }\n]\n\n\n___TESTS___\n\nscenarios: []\n\n\n___NOTES___\n\nCreated on 21/03/2021, 11:24:30\n\n\n"
},
{
"accountId": "6250428815",
"containerId": "195873904",
"templateId": "11",
"name": "Conversions API Tag",
"fingerprint": "1727090434104",
"templateData": "___TERMS_OF_SERVICE___\n\nBy creating or modifying this file you agree to Google Tag Manager's Community\nTemplate Gallery Developer Terms of Service available at\nhttps://developers.google.com/tag-manager/gallery-tos (or such other URL as\nGoogle may provide), as modified from time to time.\n\n\n___INFO___\n\n{\n \"type\": \"TAG\",\n \"id\": \"cvt_temp_public_id\",\n \"version\": 1,\n \"securityGroups\": [],\n \"displayName\": \"Conversions API Tag\",\n \"brand\": {\n \"id\": \"github.com_facebookincubator\",\n \"displayName\": \"facebookincubator\",\n \"thumbnail\": \"data:image/jpeg;base64,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\\u003d\"\n },\n \"description\": \"A server-side tag template that prepares information from your tagging server to be sent through Conversions API.\",\n \"containerContexts\": [\n \"SERVER\"\n ]\n}\n\n\n___TEMPLATE_PARAMETERS___\n\n[\n {\n \"type\": \"TEXT\",\n \"name\": \"pixelId\",\n \"displayName\": \"Pixel ID\",\n \"simpleValueType\": true,\n \"valueValidators\": [\n {\n \"type\": \"NON_EMPTY\"\n }\n ]\n },\n {\n \"type\": \"TEXT\",\n \"name\": \"apiAccessToken\",\n \"displayName\": \"API Access Token\",\n \"simpleValueType\": true,\n \"valueValidators\": [\n {\n \"type\": \"NON_EMPTY\"\n }\n ],\n \"help\": \"To use the Conversions API, you need an access token. See \\u003ca href\\u003d\\\"https://developers.facebook.com/docs/marketing-api/conversions-api/get-started#access-token\\\"\\u003ehere\\u003c/a\\u003e for generating an access token.\"\n },\n {\n \"type\": \"TEXT\",\n \"name\": \"testEventCode\",\n \"displayName\": \"Test Event Code\",\n \"simpleValueType\": true,\n \"help\": \"Code used to verify that your server events are received correctly by Conversions API. Use this code to test your server events in the Test Events feature in Events Manager. See \\u003ca href\\u003d\\\"https://developers.facebook.com/docs/marketing-api/conversions-api/using-the-api#testEvents\\\"\\u003e Test Events Tool\\u003c/a\\u003e for an example.\"\n },\n {\n \"type\": \"SELECT\",\n \"name\": \"actionSource\",\n \"displayName\": \"Action Source\",\n \"macrosInSelect\": false,\n \"selectItems\": [\n {\n \"value\": \"website\",\n \"displayValue\": \"Website\"\n },\n {\n \"value\": \"email\",\n \"displayValue\": \"Email\"\n },\n {\n \"value\": \"app\",\n \"displayValue\": \"App\"\n },\n {\n \"value\": \"phone_call\",\n \"displayValue\": \"Phone Call\"\n },\n {\n \"value\": \"chat\",\n \"displayValue\": \"Chat\"\n },\n {\n \"value\": \"physical_store\",\n \"displayValue\": \"Physical Store\"\n },\n {\n \"value\": \"system_generated\",\n \"displayValue\": \"System Generated\"\n },\n {\n \"value\": \"other\",\n \"displayValue\": \"Other\"\n }\n ],\n \"simpleValueType\": true,\n \"help\": \"This field allows you to specify where your conversions occurred. Knowing where your events took place helps ensure your ads go to the right people. See \\u003ca href\\u003d\\\"https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/server-event#action-source\\\"\\u003ehere\\u003c/a\\u003e for more information.\"\n },\n {\n \"type\": \"CHECKBOX\",\n \"name\": \"extendCookies\",\n \"checkboxText\": \"Extend Meta Pixel cookies (fbp/fbc)\",\n \"simpleValueType\": true\n },\n {\n \"type\": \"CHECKBOX\",\n \"name\": \"enableEventEnhancement\",\n \"checkboxText\": \"Enable Event Enhancement\",\n \"simpleValueType\": true,\n \"help\": \"Enable Use of HTTP Only Secure Cookie (gtmeec) to Enhance Event Data\"\n }\n]\n\n\n___SANDBOXED_JS_FOR_SERVER___\n\n// Sandbox Javascript imports\nconst getAllEventData = require('getAllEventData');\nconst getType = require('getType');\nconst sendHttpRequest = require('sendHttpRequest');\nconst JSON = require('JSON');\nconst Math = require('Math');\nconst getTimestampMillis = require('getTimestampMillis');\nconst sha256Sync = require('sha256Sync');\nconst toBase64 = require('toBase64');\nconst fromBase64 = require('fromBase64');\nconst getCookieValues = require('getCookieValues');\nconst setCookie = require('setCookie');\nconst decodeUriComponent = require('decodeUriComponent');\nconst parseUrl = require('parseUrl');\nconst computeEffectiveTldPlusOne = require('computeEffectiveTldPlusOne');\n\n// Constants\nconst API_ENDPOINT = 'https://graph.facebook.com';\nconst API_VERSION = 'v16.0';\nconst PARTNER_AGENT = 'gtmss-1.0.0-0.0.9';\nconst GTM_EVENT_MAPPINGS = {\n \"add_payment_info\": \"AddPaymentInfo\",\n \"add_to_cart\": \"AddToCart\",\n \"add_to_wishlist\": \"AddToWishlist\",\n \"gtm.dom\": \"PageView\",\n \"page_view\": \"PageView\",\n \"purchase\": \"Purchase\",\n \"search\": \"Search\",\n \"begin_checkout\": \"InitiateCheckout\",\n \"generate_lead\": \"Lead\",\n \"view_item\": \"ViewContent\",\n \"sign_up\": \"CompleteRegistration\"\n};\n\nfunction isAlreadyHashed(input){\n return input && (input.match('^[A-Fa-f0-9]{64}$') != null);\n}\n\nfunction setFbCookie(name, value, expire) {\n setCookie(name, value, {\n domain: 'auto',\n path: '/',\n samesite: 'Lax',\n secure: true,\n 'max-age': expire || 7776000, // default to 90 days\n httpOnly: false\n });\n}\n\nfunction setHttpOnlyCookie(name, value, expire) {\n setCookie(name, value, {\n domain: 'auto',\n path: '/',\n samesite: 'strict',\n secure: true,\n 'max-age': expire || 7776000, // default to 90 days\n httpOnly: true\n });\n}\n\nfunction getFbcValue() {\n let fbc = eventModel['x-fb-ck-fbc'] || getCookieValues('_fbc', true)[0];\n const url = eventModel.page_location;\n const subDomainIndex = url ? computeEffectiveTldPlusOne(url).split('.').length - 1 : 1;\n const parsedUrl = parseUrl(url);\n if (parsedUrl && parsedUrl.searchParams.fbclid) {\n fbc = 'fb.' + subDomainIndex + '.' + getTimestampMillis() + '.' + decodeUriComponent(parsedUrl.searchParams.fbclid);\n }\n\n return fbc;\n}\n\nfunction hashFunction(input){\n const type = getType(input);\n if(type == 'undefined' || input == 'undefined') {\n return undefined;\n }\n\n if(input == null || isAlreadyHashed(input)){\n return input;\n }\n\n return sha256Sync(input.trim().toLowerCase(), {outputEncoding: 'hex'});\n}\n\nfunction getContentFromItems(items) {\n return items.map(item => {\n return {\n \"id\": (item.item_id || item.item_name) || undefined,\n \"item_price\": item.price || undefined,\n \"quantity\": item.quantity || undefined,\n };\n });\n}\n\nfunction getFacebookEventName(gtmEventName) {\n return GTM_EVENT_MAPPINGS[gtmEventName] || gtmEventName;\n}\n\nconst eventModel = getAllEventData();\nconst event = {};\nevent.event_name = getFacebookEventName(eventModel.event_name);\nevent.event_time = eventModel.event_time || (Math.round(getTimestampMillis() / 1000));\nevent.event_id = eventModel.event_id;\nevent.event_source_url = eventModel.page_location;\nif(eventModel.action_source || data.actionSource) {\n event.action_source = eventModel.action_source ? eventModel.action_source : data.actionSource;\n}\n\nevent.user_data = {};\n// Default Tag Parameters\nevent.user_data.client_ip_address = eventModel.ip_override;\nevent.user_data.client_user_agent = eventModel.user_agent;\n\n\n// Commmon Event Schema Parameters\nevent.user_data.em = eventModel['x-fb-ud-em'] ||\n (eventModel.user_data != null ? hashFunction(eventModel.user_data.email_address) : undefined);\n\nlet normalizedPhoneNumber = null;\nif (eventModel.user_data && eventModel.user_data.phone_number) {\n normalizedPhoneNumber = eventModel.user_data.phone_number.replace(\"+\", \"\").replace(\"-\", \"\").replace(\" \", \"\").replace(\"(\", \"\").replace(\")\", \"\");\n normalizedPhoneNumber = hashFunction(normalizedPhoneNumber);\n}\nevent.user_data.ph = eventModel['x-fb-ud-ph'] || (normalizedPhoneNumber != null ? normalizedPhoneNumber : undefined);\n\nconst addressData = (eventModel.user_data != null && eventModel.user_data.address != null) ? eventModel.user_data.address : {};\nevent.user_data.fn = eventModel['x-fb-ud-fn'] || hashFunction(addressData.first_name);\nevent.user_data.ln = eventModel['x-fb-ud-ln'] || hashFunction(addressData.last_name);\nevent.user_data.ct = eventModel['x-fb-ud-ct'] || hashFunction(addressData.city);\nevent.user_data.st = eventModel['x-fb-ud-st'] || hashFunction(addressData.region);\nevent.user_data.zp = eventModel['x-fb-ud-zp'] || hashFunction(addressData.postal_code);\nevent.user_data.country = eventModel['x-fb-ud-country'] || hashFunction(addressData.country);\n\n// Conversions API Specific Parameters\nevent.user_data.ge = eventModel['x-fb-ud-ge'];\nevent.user_data.db = eventModel['x-fb-ud-db'];\nevent.user_data.external_id = eventModel['x-fb-ud-external_id'];\nevent.user_data.subscription_id = eventModel['x-fb-ud-subscription_id'];\nevent.user_data.fbp = eventModel['x-fb-ck-fbp'] || getCookieValues('_fbp', true)[0];\nevent.user_data.fbc = getFbcValue();\nevent.user_data.fb_login_id = eventModel['x-fb-ud-fb-login-id'] || (eventModel.user_data != null && eventModel.user_data.fb_login_id != null ? eventModel.user_data.fb_login_id : undefined);\n\nevent.custom_data = {};\nevent.custom_data.currency = eventModel.currency;\nevent.custom_data.value = eventModel.value;\nevent.custom_data.search_string = eventModel.search_term;\nevent.custom_data.order_id = eventModel.transaction_id;\nevent.custom_data.content_category = eventModel['x-fb-cd-content_category'];\nevent.custom_data.content_ids = eventModel['x-fb-cd-content_ids'];\nevent.custom_data.content_name = eventModel['x-fb-cd-content_name'];\nevent.custom_data.content_type = eventModel['x-fb-cd-content_type'];\nconst invalidString = \"[object Object]\";\nevent.custom_data.contents = (eventModel['x-fb-cd-contents'] != null && eventModel['x-fb-cd-contents'].indexOf(invalidString) == 0 ? null : (typeof(eventModel['x-fb-cd-contents']) == \"string\" ? JSON.parse(eventModel['x-fb-cd-contents']) : eventModel['x-fb-cd-contents'])) || (eventModel.items != null ? getContentFromItems(eventModel.items) : undefined);\n\nconst customProperties = (eventModel.custom_properties != null) ? (eventModel.custom_properties.indexOf(invalidString) == 0 ? null : (typeof(eventModel.custom_properties) == \"string\" ?JSON.parse(eventModel.custom_properties) : eventModel.custom_properties)) : {};\nfor (const property in customProperties) {\n event.custom_data[property] = customProperties[property];\n}\nevent.custom_data.num_items = eventModel['x-fb-cd-num_items'];\nevent.custom_data.predicted_ltv = eventModel['x-fb-cd-predicted_ltv'];\nevent.custom_data.status = eventModel['x-fb-cd-status'];\nevent.custom_data.delivery_category = eventModel['x-fb-cd-delivery_category'];\n\nevent.data_processing_options = eventModel.data_processing_options;\nevent.data_processing_options_country = eventModel.data_processing_options_country;\nevent.data_processing_options_state = eventModel.data_processing_options_state;\n\nfunction setGtmEecCookie(value) {\n const cookieJsonStr = JSON.stringify(value);\n\n const gtmeecCookieValueBase64 = toBase64(cookieJsonStr);\n\n setHttpOnlyCookie('_gtmeec', gtmeecCookieValueBase64);\n}\n\n//sets first party cookie with latest merged user data.\nfunction setResponseHeaderCookies(user_data) {\n let gtmeecCookie = JSON.parse('{}');\n\n // if user_data has new information, gtmeec data is overriden\n if (user_data.em) {\n gtmeecCookie.em = user_data.em;\n }\n\n if (user_data.ph) {\n gtmeecCookie.ph = user_data.ph;\n }\n\n if (user_data.ln) {\n gtmeecCookie.ln = user_data.ln;\n }\n\n if (user_data.fn) {\n gtmeecCookie.fn = user_data.fn;\n }\n\n if (user_data.ct) {\n gtmeecCookie.ct = user_data.ct;\n }\n\n if (user_data.st) {\n gtmeecCookie.st = user_data.st;\n }\n\n if (user_data.zp) {\n gtmeecCookie.zp = user_data.zp;\n }\n\n if (user_data.ge) {\n gtmeecCookie.ge = user_data.ge;\n }\n\n if (user_data.db) {\n gtmeecCookie.db = user_data.db;\n }\n\n if (user_data.country) {\n gtmeecCookie.country = user_data.country;\n }\n\n if (user_data.external_id){\n gtmeecCookie.external_id = user_data.external_id;\n }\n\n if (user_data.fb_login_id) {\n gtmeecCookie.fb_login_id = user_data.fb_login_id;\n }\n\n setGtmEecCookie(gtmeecCookie);\n}\n\n//enhance event data with first party `_gtmeec` cookie\nfunction enhanceEventData(user_data) {\n\n const cookieValues = getCookieValues('_gtmeec', true);\n\n if (!cookieValues) {\n return user_data;\n }\n\n if (cookieValues.length == 0) {\n return user_data;\n }\n\n const encodedValue = cookieValues[0];\n\n if (!encodedValue) {\n return user_data;\n }\n\n const jsonStr = fromBase64(encodedValue);\n if (!jsonStr) {\n return user_data;\n }\n\n const gtmeecData = JSON.parse(jsonStr);\n\n // if incoming event has already have the customer information then don't change\n if (gtmeecData) {\n if (!user_data.em && gtmeecData.em) {\n user_data.em = gtmeecData.em;\n }\n\n if (!user_data.ph && gtmeecData.ph) {\n user_data.ph = gtmeecData.ph;\n }\n\n if (!user_data.ln && gtmeecData.ln) {\n user_data.ln = gtmeecData.ln;\n }\n\n if (!user_data.fn && gtmeecData.fn) {\n user_data.fn = gtmeecData.fn;\n }\n\n if (!user_data.ct && gtmeecData.ct) {\n user_data.ct = gtmeecData.ct;\n }\n\n if (!user_data.st && gtmeecData.st) {\n user_data.st = gtmeecData.st;\n }\n\n if (!user_data.zp && gtmeecData.zp) {\n user_data.zp = gtmeecData.zp;\n }\n\n if (!user_data.ge && gtmeecData.ge) {\n user_data.ge = gtmeecData.ge;\n }\n\n if (!user_data.db && gtmeecData.db) {\n user_data.db = gtmeecData.db;\n }\n\n if (!user_data.country && gtmeecData.country) {\n user_data.country = gtmeecData.country;\n }\n\n if (!user_data.external_id && gtmeecData.external_id) {\n user_data.external_id = gtmeecData.external_id;\n }\n\n if (!user_data.fb_login_id && gtmeecData.fb_login_id) {\n user_data.fb_login_id = gtmeecData.fb_login_id;\n }\n }\n\n return user_data;\n}\n\n//send events to CAPI Server\nfunction sendEventToCapiServers(pixel_event) {\n\n // if event enhancement is enabled then event data is enhanced\n let partnerAgent = PARTNER_AGENT;\n if (data.enableEventEnhancement) {\n pixel_event.user_data = enhanceEventData(pixel_event.user_data);\n partnerAgent = PARTNER_AGENT + '-ee';\n }\n\n const eventRequest = {data: [pixel_event], partner_agent: partnerAgent};\n\n if(eventModel.test_event_code || data.testEventCode) {\n eventRequest.test_event_code = eventModel.test_event_code ? eventModel.test_event_code : data.testEventCode;\n }\n\n const routeParams = 'events?access_token=' + data.apiAccessToken;\n const graphEndpoint = [API_ENDPOINT,\n API_VERSION,\n data.pixelId,\n routeParams].join('/');\n\n const requestHeaders = {headers: {'content-type': 'application/json'}, method: 'POST'};\n return sendHttpRequest(\n graphEndpoint,\n (statusCode, headers, response) => {\n if (statusCode >= 200 && statusCode < 300) {\n\n if (data.extendCookies && pixel_event.user_data.fbc) {\n setFbCookie('_fbc', pixel_event.user_data.fbc);\n }\n\n if (data.extendCookies && pixel_event.user_data.fbp) {\n setFbCookie('_fbp', pixel_event.user_data.fbp);\n }\n\n if (data.enableEventEnhancement) {\n setResponseHeaderCookies(pixel_event.user_data);\n }\n\n data.gtmOnSuccess();\n } else {\n data.gtmOnFailure();\n }\n },\n requestHeaders,\n JSON.stringify(eventRequest)\n );\n}\n\nsendEventToCapiServers(event);\n\n\n___SERVER_PERMISSIONS___\n\n[\n {\n \"instance\": {\n \"key\": {\n \"publicId\": \"read_event_data\",\n \"versionId\": \"1\"\n },\n \"param\": [\n {\n \"key\": \"eventDataAccess\",\n \"value\": {\n \"type\": 1,\n \"string\": \"any\"\n }\n }\n ]\n },\n \"clientAnnotations\": {\n \"isEditedByUser\": true\n },\n \"isRequired\": true\n },\n {\n \"instance\": {\n \"key\": {\n \"publicId\": \"send_http\",\n \"versionId\": \"1\"\n },\n \"param\": [\n {\n \"key\": \"allowedUrls\",\n \"value\": {\n \"type\": 1,\n \"string\": \"specific\"\n }\n },\n {\n \"key\": \"urls\",\n \"value\": {\n \"type\": 2,\n \"listItem\": [\n {\n \"type\": 1,\n \"string\": \"https://graph.facebook.com/\"\n }\n ]\n }\n }\n ]\n },\n \"clientAnnotations\": {\n \"isEditedByUser\": true\n },\n \"isRequired\": true\n },\n {\n \"instance\": {\n \"key\": {\n \"publicId\": \"get_cookies\",\n \"versionId\": \"1\"\n },\n \"param\": [\n {\n \"key\": \"cookieAccess\",\n \"value\": {\n \"type\": 1,\n \"string\": \"specific\"\n }\n },\n {\n \"key\": \"cookieNames\",\n \"value\": {\n \"type\": 2,\n \"listItem\": [\n {\n \"type\": 1,\n \"string\": \"_fbp\"\n },\n {\n \"type\": 1,\n \"string\": \"_fbc\"\n },\n {\n \"type\": 1,\n \"string\": \"_gtmeec\"\n }\n ]\n }\n }\n ]\n },\n \"clientAnnotations\": {\n \"isEditedByUser\": true\n },\n \"isRequired\": true\n },\n {\n \"instance\": {\n \"key\": {\n \"publicId\": \"set_cookies\",\n \"versionId\": \"1\"\n },\n \"param\": [\n {\n \"key\": \"allowedCookies\",\n \"value\": {\n \"type\": 2,\n \"listItem\": [\n {\n \"type\": 3,\n \"mapKey\": [\n {\n \"type\": 1,\n \"string\": \"name\"\n },\n {\n \"type\": 1,\n \"string\": \"domain\"\n },\n {\n \"type\": 1,\n \"string\": \"path\"\n },\n {\n \"type\": 1,\n \"string\": \"secure\"\n },\n {\n \"type\": 1,\n \"string\": \"session\"\n }\n ],\n \"mapValue\": [\n {\n \"type\": 1,\n \"string\": \"_fbc\"\n },\n {\n \"type\": 1,\n \"string\": \"*\"\n },\n {\n \"type\": 1,\n \"string\": \"*\"\n },\n {\n \"type\": 1,\n \"string\": \"any\"\n },\n {\n \"type\": 1,\n \"string\": \"any\"\n }\n ]\n },\n {\n \"type\": 3,\n \"mapKey\": [\n {\n \"type\": 1,\n \"string\": \"name\"\n },\n {\n \"type\": 1,\n \"string\": \"domain\"\n },\n {\n \"type\": 1,\n \"string\": \"path\"\n },\n {\n \"type\": 1,\n \"string\": \"secure\"\n },\n {\n \"type\": 1,\n \"string\": \"session\"\n }\n ],\n \"mapValue\": [\n {\n \"type\": 1,\n \"string\": \"_fbp\"\n },\n {\n \"type\": 1,\n \"string\": \"*\"\n },\n {\n \"type\": 1,\n \"string\": \"*\"\n },\n {\n \"type\": 1,\n \"string\": \"any\"\n },\n {\n \"type\": 1,\n \"string\": \"any\"\n }\n ]\n },\n {\n \"type\": 3,\n \"mapKey\": [\n {\n \"type\": 1,\n \"string\": \"name\"\n },\n {\n \"type\": 1,\n \"string\": \"domain\"\n },\n {\n \"type\": 1,\n \"string\": \"path\"\n },\n {\n \"type\": 1,\n \"string\": \"secure\"\n },\n {\n \"type\": 1,\n \"string\": \"session\"\n }\n ],\n \"mapValue\": [\n {\n \"type\": 1,\n \"string\": \"_gtmeec\"\n },\n {\n \"type\": 1,\n \"string\": \"*\"\n },\n {\n \"type\": 1,\n \"string\": \"*\"\n },\n {\n \"type\": 1,\n \"string\": \"secure\"\n },\n {\n \"type\": 1,\n \"string\": \"any\"\n }\n ]\n }\n ]\n }\n }\n ]\n },\n \"clientAnnotations\": {\n \"isEditedByUser\": true\n },\n \"isRequired\": true\n }\n]\n\n\n___TESTS___\n\nscenarios:\n- name: on EventModel model data tag triggers to send to Conversions API\n code: |-\n // Act\n runCode(testConfigurationData);\n\n //Assert\n assertApi('sendHttpRequest').wasCalledWith(requestEndpoint, actualSuccessCallback, requestHeaderOptions, JSON.stringify(requestData));\n assertApi('gtmOnSuccess').wasCalled();\n- name: on Event with common event schema triggers tag to send to Conversions API\n code: |-\n const preTagFireEventTime = Math.round(getTimestampMillis() / 1000);\n const common_event_schema = {\n event_name: testData.event_name,\n client_id: 'client123',\n ip_override: testData.ip_address,\n user_agent: testData.user_agent,\n };\n mock('getAllEventData', () => {\n return common_event_schema;\n });\n\n // Act\n runCode(testConfigurationData);\n\n //Assert\n const actualTagFireEventTime = JSON.parse(httpBody).data[0].event_time;\n assertThat(actualTagFireEventTime-preTagFireEventTime).isLessThan(1);\n assertApi('gtmOnSuccess').wasCalled();\n- name: on sending action source from Client, Tag overrides the preset configuration\n code: |-\n // Act\n mock('getAllEventData', () => {\n inputEventModel.action_source = testData.action_source;\n return inputEventModel;\n });\n runCode(testConfigurationData);\n\n //Assert\n assertThat(JSON.parse(httpBody).data[0].action_source).isEqualTo(inputEventModel.action_source);\n- name: on receiving event, if GTM Standard Event then Tag converts to corresponding\n Conversions API Event, passes through as-is if otherwise\n code: |-\n // Act\n mock('getAllEventData', () => {\n inputEventModel.event_name = 'add_to_wishlist';\n return inputEventModel;\n });\n runCode(testConfigurationData);\n\n //Assert\n assertThat(JSON.parse(httpBody).data[0].event_name).isEqualTo('AddToWishlist');\n\n\n // Act\n mock('getAllEventData', () => {\n inputEventModel.event_name = 'custom_event';\n return inputEventModel;\n });\n runCode(testConfigurationData);\n\n //Assert\n assertThat(JSON.parse(httpBody).data[0].event_name).isEqualTo('custom_event');\n\n // Act\n mock('getAllEventData', () => {\n inputEventModel.event_name = 'generate_lead';\n return inputEventModel;\n });\n runCode(testConfigurationData);\n\n //Assert\n assertThat(JSON.parse(httpBody).data[0].event_name).isEqualTo('Lead');\n- name: On receiving event, hashes the the user_data fields if they are not already\n hashed\n code: |-\n // Un-hashed raw email_address from Common Event Schema is hashed before posted to Conversions API.\n\n // Act\n mock('getAllEventData', () => {\n inputEventModel = {};\n inputEventModel['x-fb-ud-em'] = null;\n inputEventModel['x-fb-ud-ph'] = null;\n inputEventModel['x-fb-ud-fn'] = null;\n inputEventModel['x-fb-ud-ln'] = null;\n inputEventModel['x-fb-ud-ct'] = null;\n inputEventModel['x-fb-ud-st'] = null;\n inputEventModel['x-fb-ud-zp'] = null;\n inputEventModel['x-fb-ud-country'] = null;\n inputEventModel.user_data = {};\n inputEventModel.user_data.email_address = '[email protected]';\n inputEventModel.user_data.phone_number = '1234567890';\n inputEventModel.user_data.address = {};\n inputEventModel.user_data.address.first_name = 'Foo';\n inputEventModel.user_data.address.last_name = 'Bar';\n inputEventModel.user_data.address.city = 'Menlo Park';\n inputEventModel.user_data.address.region = 'ca';\n inputEventModel.user_data.address.postal_code = '12345';\n inputEventModel.user_data.address.country = 'usa';\n return inputEventModel;\n });\n runCode(testConfigurationData);\n\n //Assert\n assertThat(JSON.parse(httpBody).data[0].user_data.em).isEqualTo(hashFunction('[email protected]'));\n assertThat(JSON.parse(httpBody).data[0].user_data.ph).isEqualTo(hashFunction('1234567890'));\n assertThat(JSON.parse(httpBody).data[0].user_data.fn).isEqualTo(hashFunction('Foo'));\n assertThat(JSON.parse(httpBody).data[0].user_data.ln).isEqualTo(hashFunction('Bar'));\n assertThat(JSON.parse(httpBody).data[0].user_data.ct).isEqualTo(hashFunction('Menlo Park'));\n assertThat(JSON.parse(httpBody).data[0].user_data.st).isEqualTo(hashFunction('ca'));\n assertThat(JSON.parse(httpBody).data[0].user_data.zp).isEqualTo(hashFunction('12345'));\n assertThat(JSON.parse(httpBody).data[0].user_data.country).isEqualTo(hashFunction('usa'));\n\n // Un-hashed raw email_address in mixed-case is converted to lowercase, hashed and posted to Conversions API.\n\n // Act\n mock('getAllEventData', () => {\n inputEventModel.user_data.email_address = '[email protected]';\n return inputEventModel;\n });\n runCode(testConfigurationData);\n\n //Assert\n assertThat(JSON.parse(httpBody).data[0].user_data.em).isEqualTo(hashFunction('[email protected]'));\n\n\n // Already sha256(email_address) field from GA4 schema, is unchanged, is posted as-is to Conversions API.\n\n // Act\n mock('getAllEventData', () => {\n inputEventModel.user_data.email_address = hashFunction('[email protected]');\n return inputEventModel;\n });\n runCode(testConfigurationData);\n\n //Assert\n assertThat(JSON.parse(httpBody).data[0].user_data.em).isEqualTo(hashFunction('[email protected]'));\n\n // Already null email field from GA4 schema, is sent as null to Conversions API.\n\n // Act\n mock('getAllEventData', () => {\n inputEventModel = {};\n inputEventModel.user_data = {};\n inputEventModel.user_data.email_address = null;\n return inputEventModel;\n });\n runCode(testConfigurationData);\n\n //Assert\n assertThat(JSON.parse(httpBody).data[0].user_data.em).isNull();\n- name: On receiving event with fbp/fbc cookies, it is sent to Conversions API\n code: |-\n // Act\n mock('getAllEventData', () => {\n inputEventModel['x-fb-ck-fbp'] = null;\n inputEventModel['x-fb-ck-fbc'] = null;\n return inputEventModel;\n });\n\n mock('getCookieValues', (cookieName) => {\n if(cookieName === '_fbp') return ['fbp_cookie'];\n if(cookieName === '_fbc') return ['fbc_cookie'];\n });\n\n runCode(testConfigurationData);\n\n //Assert\n assertThat(JSON.parse(httpBody).data[0].user_data.fbp).isEqualTo('fbp_cookie');\n assertThat(JSON.parse(httpBody).data[0].user_data.fbc).isEqualTo('fbc_cookie');\n- name: On receiving GA4 event, with the items info, tag parses them into Conversions\n API schema\n code: |-\n // Act\n let items = [\n {\n item_id: '1',\n quantity: 5,\n price: 123.45,\n },\n {\n item_id: '2',\n quantity: 10,\n price: 123.45,\n }\n ];\n\n mock('getAllEventData', () => {\n inputEventModel = {};\n inputEventModel['x-fb-cd-contents'] = null;\n inputEventModel.items = items;\n return inputEventModel;\n });\n runCode(testConfigurationData);\n\n //Assert\n let actual_contents = JSON.parse(httpBody).data[0].custom_data.contents;\n assertThat(JSON.parse(httpBody).data[0].custom_data.contents.length).isEqualTo(items.length);\n for( var i = 0; i < items.length; i++) {\n assertThat(actual_contents[i].id).isEqualTo(items[i].item_id);\n assertThat(actual_contents[i].item_price).isEqualTo(items[i].price);\n assertThat(actual_contents[i].quantity).isEqualTo(items[i].quantity);\n }\n\n // Act\n mock('getAllEventData', () => {\n inputEventModel = {};\n inputEventModel.items = null;\n return inputEventModel;\n });\n runCode(testConfigurationData);\n\n //Assert\n assertThat(JSON.parse(httpBody).data[0].custom_data.contents).isUndefined();\n- name: When address is missing it skips parsing the nested fields\n code: |\n mock('getAllEventData', () => {\n inputEventModel['x-fb-ud-em'] = null;\n inputEventModel['x-fb-ud-ph'] = null;\n inputEventModel['x-fb-ud-fn'] = null;\n inputEventModel['x-fb-ud-ln'] = null;\n inputEventModel['x-fb-ud-ct'] = null;\n inputEventModel['x-fb-ud-st'] = null;\n inputEventModel['x-fb-ud-zp'] = null;\n inputEventModel['x-fb-ud-country'] = null;\n inputEventModel.user_data = {};\n inputEventModel.user_data.email_address = '[email protected]';\n inputEventModel.user_data.phone_number = '1234567890';\n return inputEventModel;\n });\n\n runCode(testConfigurationData);\n\n assertThat(JSON.parse(httpBody).data[0].user_data.em).isEqualTo(hashFunction('[email protected]'));\n assertThat(JSON.parse(httpBody).data[0].user_data.ph).isEqualTo(hashFunction('1234567890'));\n assertThat(JSON.parse(httpBody).data[0].user_data.fn).isUndefined();\n assertThat(JSON.parse(httpBody).data[0].user_data.ln).isUndefined();\n assertThat(JSON.parse(httpBody).data[0].user_data.ct).isUndefined();\n assertThat(JSON.parse(httpBody).data[0].user_data.st).isUndefined();\n assertThat(JSON.parse(httpBody).data[0].user_data.zp).isUndefined();\n assertThat(JSON.parse(httpBody).data[0].user_data.country).isUndefined();\n- name: When parameters are undefined skip parsing\n code: |\n mock('getAllEventData', () => {\n inputEventModel = {};\n inputEventModel['x-fb-ud-em'] = null;\n inputEventModel['x-fb-ud-ph'] = null;\n inputEventModel['x-fb-ud-fn'] = null;\n inputEventModel['x-fb-ud-ln'] = null;\n inputEventModel['x-fb-ud-ct'] = null;\n inputEventModel['x-fb-ud-st'] = null;\n inputEventModel['x-fb-ud-zp'] = null;\n inputEventModel['x-fb-ud-country'] = null;\n inputEventModel['x-fb-ud-fb-login-id'] = null;\n inputEventModel.user_data = {};\n inputEventModel.user_data.email_address = undefined;\n inputEventModel.user_data.phone_number = '1234567890';\n inputEventModel.user_data.address = {};\n inputEventModel.user_data.address.first_name = 'John';\n inputEventModel.user_data.address.last_name = undefined;\n inputEventModel.user_data.address.city = 'menlopark';\n inputEventModel.user_data.address.region = 'ca';\n inputEventModel.user_data.address.postal_code = '94025';\n inputEventModel.user_data.address.country = 'usa';\n inputEventModel.user_data.fb_login_id = 123456789;\n return inputEventModel;\n });\n\n runCode(testConfigurationData);\n\n assertThat(JSON.parse(httpBody).data[0].user_data.em).isUndefined();\n assertThat(JSON.parse(httpBody).data[0].user_data.ph).isEqualTo(hashFunction('1234567890'));\n assertThat(JSON.parse(httpBody).data[0].user_data.fn).isEqualTo(hashFunction('John'));\n assertThat(JSON.parse(httpBody).data[0].user_data.ln).isUndefined();\n assertThat(JSON.parse(httpBody).data[0].user_data.ct).isEqualTo(hashFunction('menlopark'));\n assertThat(JSON.parse(httpBody).data[0].user_data.st).isEqualTo(hashFunction('ca'));\n assertThat(JSON.parse(httpBody).data[0].user_data.zp).isEqualTo(hashFunction('94025'));\n assertThat(JSON.parse(httpBody).data[0].user_data.country).isEqualTo(hashFunction('usa'));\n assertThat(JSON.parse(httpBody).data[0].user_data.fb_login_id).isEqualTo(123456789);\n- name: Set Meta cookies (fbp / fbc) if 'extendCookies' checkbox is ticked\n code: |\n runCode({\n pixelId: '123',\n apiAccessToken: 'abc',\n testEventCode: 'test123',\n actionSource: 'source123',\n extendCookies: true\n });\n\n //Assert\n assertApi('setCookie').wasCalled();\n assertApi('gtmOnSuccess').wasCalled();\n- name: Do not set Meta cookies (fbp / fbc) if 'extendCookies' checkbox is ticked\n code: |\n runCode({\n pixelId: '123',\n apiAccessToken: 'abc',\n testEventCode: 'test123',\n actionSource: 'source123',\n extendCookies: false\n });\n\n //Assert\n assertApi('setCookie').wasNotCalled();\n assertApi('gtmOnSuccess').wasCalled();\n- name: On receiving event, sets the data_processing_options field if present\n code: |\n mock('getAllEventData', () => {\n inputEventModel.data_processing_options = testData.data_processing_options;\n inputEventModel.data_processing_options_country = testData.data_processing_options_country;\n inputEventModel.data_processing_options_state = testData.data_processing_options_state;\n return inputEventModel;\n });\n runCode(testConfigurationData);\n\n //Assert\n assertThat(JSON.parse(httpBody).data[0].data_processing_options).isEqualTo(inputEventModel.data_processing_options);\n assertThat(JSON.parse(httpBody).data[0].data_processing_options_country).isEqualTo(inputEventModel.data_processing_options_country);\n assertThat(JSON.parse(httpBody).data[0].data_processing_options_state).isEqualTo(inputEventModel.data_processing_options_state);\n- name: Set Event Enhancement Cookie (gtmeec) if `enableEventEnhancement` is ticked\n code: |-\n mock('getAllEventData', () => {\n inputEventModel = {};\n inputEventModel.event_name = 'purchase';\n inputEventModel.user_data = {};\n inputEventModel.user_data.email_address = '[email protected]';\n inputEventModel.user_data.phone_number = '1234567890';\n return inputEventModel;\n });\n\n runCode(testConfigurationData);\n\n runCode({\n pixelId: '123',\n apiAccessToken: 'abc',\n testEventCode: 'test123',\n actionSource: 'source123',\n enableEventEnhancement: true,\n extendCookies: false\n });\n\n let cookieOptions = {\n domain: 'auto',\n path: '/',\n samesite: 'strict',\n secure: true,\n 'max-age': 7776000, // default to 90 days\n httpOnly: true\n };\n\n //Assert\n assertApi('getCookieValues').wasCalledWith('_gtmeec', true);\n assertApi('setCookie').wasCalledWith('_gtmeec', 'eyJlbSI6IjBjN2U2YTQwNTg2MmU0MDJlYjc2YTcwZjhhMjZmYzczMmQwN2MzMjkzMWU5ZmFlOWFiMTU4MjkxMWQyZThhM2IiLCJwaCI6ImM3NzVlN2I3NTdlZGU2MzBjZDBhYTExMTNiZDEwMjY2MWFiMzg4MjljYTUyYTY0MjJhYjc4Mjg2MmYyNjg2NDYifQ==', cookieOptions);\n assertApi('gtmOnSuccess').wasCalled();\n- name: Do not set Event Enhancement Cookie (gtmeec) if `enableEventEnhancement` is\n not ticked\n code: |-\n runCode({\n pixelId: '123',\n apiAccessToken: 'abc',\n testEventCode: 'test123',\n actionSource: 'source123',\n extendCookies: false,\n enableEventEnhancement: false\n });\n\n //Assert\n assertApi('getCookieValues').wasNotCalledWith('_gtmeec', true);\n assertApi('setCookie').wasNotCalled();\n assertApi('gtmOnSuccess').wasCalled();\n- name: Parse gtmeec Cookie and Enrich Event When `enableEventEnhancement` is ticked\n code: |\n mock('getAllEventData', () => {\n inputEventModel = {};\n inputEventModel.event_name = 'purchase';\n inputEventModel.user_data = {};\n return inputEventModel;\n });\n\n runCode(testConfigurationData);\n\n const cookieName = '_gtmeec';\n const val = true;\n\n mock('getCookieValues', (cookieName, val) => {\n return ['eyJlbSI6ImVlMjc4OTQzZGU4NGU1ZDYyNDM1NzhlZTFhMTA1N2JjY2UwZTUwZGFhZDk3NTVmNDVkZmE2NGI2MGIxM2JjNWQiLCJwaCI6ImM3NzVlN2I3NTdlZGU2MzBjZDBhYTExMTNiZDEwMjY2MWFiMzg4MjljYTUyYTY0MjJhYjc4Mjg2MmYyNjg2NDYifQ=='];\n });\n\n runCode({\n pixelId: '123',\n apiAccessToken: 'abc',\n testEventCode: 'test123',\n actionSource: 'source123',\n enableEventEnhancement: true,\n extendCookies: false\n });\n\n let cookieOptions = {\n domain: 'auto',\n path: '/',\n samesite: 'strict',\n secure: true,\n 'max-age': 7776000, // default to 90 days\n httpOnly: true\n };\n\n // Assert\n assertApi('getCookieValues').wasCalledWith('_gtmeec', true);\n assertApi('setCookie').wasCalledWith('_gtmeec', 'eyJlbSI6ImVlMjc4OTQzZGU4NGU1ZDYyNDM1NzhlZTFhMTA1N2JjY2UwZTUwZGFhZDk3NTVmNDVkZmE2NGI2MGIxM2JjNWQiLCJwaCI6ImM3NzVlN2I3NTdlZGU2MzBjZDBhYTExMTNiZDEwMjY2MWFiMzg4MjljYTUyYTY0MjJhYjc4Mjg2MmYyNjg2NDYifQ==', cookieOptions);\n assertApi('gtmOnSuccess').wasCalled();\n\n assertThat(JSON.parse(httpBody).data[0].user_data.em).isEqualTo('ee278943de84e5d6243578ee1a1057bcce0e50daad9755f45dfa64b60b13bc5d');\n assertThat(JSON.parse(httpBody).data[0].user_data.ph).isEqualTo('c775e7b757ede630cd0aa1113bd102661ab38829ca52a6422ab782862f268646');\nsetup: |-\n // Arrange\n const JSON = require('JSON');\n const Math = require('Math');\n const getTimestampMillis = require('getTimestampMillis');\n const sha256Sync = require('sha256Sync');\n\n // helper methods\n function hashFunction(input) {\n return sha256Sync(input.trim().toLowerCase(), {outputEncoding: 'hex'});\n }\n\n const testConfigurationData = {\n pixelId: '123',\n apiAccessToken: 'abc',\n testEventCode: 'test123',\n actionSource: 'source123'\n };\n\n const testData = {\n event_name: \"Test1\",\n event_time: \"123456789\",\n test_event_code: \"test123\",\n action_source: 'website',\n user_data: {\n ip_address: '1.2.3.4',\n user_agent: 'Test_UA',\n email: '[email protected]',\n phone_number: '123456789',\n first_name: 'foo',\n last_name: 'bar',\n gender: 'm',\n date_of_brith: '19910526',\n city: 'menlopark',\n state: 'ca',\n country: 'us',\n zip: '12345',\n external_id: 'user123',\n subscription_id: 'abc123',\n fbp: 'test_browser_id',\n fbc: 'test_click_id',\n fb_login_id: 123456789,\n },\n custom_data: {\n currency: 'USD',\n value: '123',\n search_string: 'query123',\n transaction_id: 'order_123',\n content_category: 'testCategory',\n content_ids: ['123', '456'],\n content_name: 'Foo',\n content_type: 'product',\n contents: [{'id': '123', 'quantity': 2}, {'id': '456', 'quantity': 2}],\n num_items: '4',\n predicted_ltv: '10000',\n delivery_category: 'home_delivery',\n status: 'subscribed',\n },\n \"data_processing_options\": [\"LDU\"],\n \"data_processing_options_country\": 1,\n \"data_processing_options_state\": 1000,\n };\n\n let inputEventModel = {\n 'event_name': testData.event_name,\n 'event_time': testData.event_time,\n 'ip_override': testData.user_data.ip_address,\n 'user_agent': testData.user_data.user_agent,\n 'test_event_code': testData.test_event_code,\n 'x-fb-ud-em': testData.user_data.email,\n 'x-fb-ud-ph': testData.user_data.phone_number,\n 'x-fb-ud-fn': testData.user_data.first_name,\n 'x-fb-ud-ln': testData.user_data.last_name,\n 'x-fb-ud-ge': testData.user_data.gender,\n 'x-fb-ud-db': testData.user_data.date_of_brith,\n 'x-fb-ud-ct': testData.user_data.city,\n 'x-fb-ud-st': testData.user_data.state,\n 'x-fb-ud-zp': testData.user_data.zip,\n 'x-fb-ud-country': testData.user_data.country,\n 'x-fb-ud-external_id': testData.user_data.external_id,\n 'x-fb-ud-subscription_id': testData.user_data.subscription_id,\n 'x-fb-ud-fb-login-id': testData.user_data.fb_login_id,\n 'x-fb-ck-fbp': testData.user_data.fbp,\n 'x-fb-ck-fbc': testData.user_data.fbc,\n 'currency': testData.custom_data.currency,\n 'value': testData.custom_data.value,\n 'search_term': testData.custom_data.search_string,\n 'transaction_id': testData.custom_data.transaction_id,\n 'x-fb-cd-status': testData.custom_data.status,\n 'x-fb-cd-content_category': testData.custom_data.content_category,\n 'x-fb-cd-content_name': testData.custom_data.content_name,\n 'x-fb-cd-content_type': testData.custom_data.content_type,\n 'x-fb-cd-contents': testData.custom_data.contents,\n 'x-fb-cd-num_items': testData.custom_data.num_items,\n 'x-fb-cd-predicted_ltv': testData.custom_data.predicted_ltv,\n 'x-fb-cd-delivery_category': testData.custom_data.delivery_category,\n 'data_processing_options': testData.data_processing_options,\n 'data_processing_options_country': testData.data_processing_options_country,\n 'data_processing_options_state': testData.data_processing_options_state,\n };\n\n const expectedEventData = {\n 'event_name': testData.event_name,\n 'event_time': testData.event_time,\n 'action_source': testConfigurationData.actionSource,\n 'user_data': {\n 'client_ip_address': testData.user_data.ip_address,\n 'client_user_agent': testData.user_data.user_agent,\n 'em': testData.user_data.email,\n 'ph': testData.user_data.phone_number,\n 'fn': testData.user_data.first_name,\n 'ln': testData.user_data.last_name,\n 'ct': testData.user_data.city,\n 'st': testData.user_data.state,\n 'zp': testData.user_data.zip,\n 'country': testData.user_data.country,\n 'ge': testData.user_data.gender,\n 'db': testData.user_data.date_of_brith,\n 'external_id': testData.user_data.external_id,\n 'subscription_id': testData.user_data.subscription_id,\n 'fbp': testData.user_data.fbp,\n 'fbc': testData.user_data.fbc,\n 'fb_login_id': testData.user_data.fb_login_id,\n },\n 'custom_data': {\n 'currency': testData.custom_data.currency,\n 'value': testData.custom_data.value,\n 'search_string': testData.custom_data.search_string,\n 'order_id': testData.custom_data.transaction_id,\n 'content_category': testData.custom_data.content_category,\n 'content_name': testData.custom_data.content_name,\n 'content_type': testData.custom_data.content_type,\n 'contents': testData.custom_data.contents,\n 'num_items': testData.custom_data.num_items,\n 'predicted_ltv': testData.custom_data.predicted_ltv,\n 'status': testData.custom_data.status,\n 'delivery_category': testData.custom_data.delivery_category,\n },\n 'data_processing_options': testData.data_processing_options,\n 'data_processing_options_country': testData.data_processing_options_country,\n 'data_processing_options_state': testData.data_processing_options_state,\n };\n\n mock('getAllEventData', () => {\n return inputEventModel;\n });\n\n const apiEndpoint = 'https://graph.facebook.com';\n const apiVersion = 'v16.0';\n const partnerAgent = 'gtmss-1.0.0-0.0.9';\n\n const routeParams = 'events?access_token=' + testConfigurationData.apiAccessToken;\n const requestEndpoint = [apiEndpoint,\n apiVersion,\n testConfigurationData.pixelId,\n routeParams].join('/');\n\n let requestData = {\n data: [expectedEventData],\n partner_agent: partnerAgent,\n test_event_code: testData.test_event_code\n };\n\n const requestHeaderOptions = {headers: {'content-type': 'application/json'}, method: 'POST'};\n\n let actualSuccessCallback, httpBody;\n mock('sendHttpRequest', (postUrl, response, options, body) => {\n actualSuccessCallback = response;\n httpBody = body;\n actualSuccessCallback(200, {}, '');\n });\n\n\n___NOTES___\n\nCreated on 8/5/2020, 10:20:28 AM\n\n\n",
"galleryReference": {
"host": "github.com",
"owner": "facebookincubator",
"repository": "ConversionsAPI-Tag-for-GoogleTagManager",
"version": "a495e1bb54b3b1fe6e7a9f10fc64aa12e8731428",
"signature": "9c18df0546739f92bcf6f8b7b95b52ce242696c9c4dfe51cc7936e3cc787877c"
}
}
],
"client": [
{
"accountId": "6250428815",
"containerId": "195873904",
"clientId": "1",
"name": "GA4",
"type": "gaaw_client",
"parameter": [
{
"type": "BOOLEAN",
"key": "activateDefaultPaths",
"value": "true"
},
{
"type": "TEMPLATE",
"key": "cookieManagement",
"value": "server"
},
{
"type": "TEMPLATE",
"key": "cookieName",
"value": "FPID"
},
{
"type": "TEMPLATE",
"key": "cookieDomain",
"value": "auto"
},
{
"type": "TEMPLATE",
"key": "cookiePath",
"value": "/"
},
{
"type": "TEMPLATE",
"key": "cookieMaxAgeInSec",
"value": "63072000"
}
],
"fingerprint": "1727090240269"
},
{
"accountId": "6250428815",
"containerId": "195873904",
"clientId": "6",
"name": "Data Client",
"type": "cvt_195873904_5",
"fingerprint": "1727090434102"
},
{
"accountId": "6250428815",
"containerId": "195873904",
"clientId": "8",
"name": "FB Client",
"type": "cvt_195873904_7",
"fingerprint": "1727090434103"
},
{
"accountId": "6250428815",
"containerId": "195873904",
"clientId": "14",
"name": "Universal Analytics",
"type": "ua_client",
"parameter": [
{
"type": "TEMPLATE",
"key": "cookieDomain",
"value": "auto"
},
{
"type": "TEMPLATE",
"key": "cookieMaxAgeInSec",
"value": "63072000"
},
{
"type": "BOOLEAN",
"key": "activateDefaultPaths",
"value": "true"
},
{
"type": "TEMPLATE",
"key": "cookiePath",
"value": "/"
},
{
"type": "TEMPLATE",
"key": "cookieManagement",
"value": "server"
},
{
"type": "TEMPLATE",
"key": "cookieName",
"value": "FPID"
}
],
"fingerprint": "1727090434106"
}
]
}
}
{
"exportFormatVersion": 2,
"exportTime": "2024-10-23 06:15:14",
"containerVersion": {
"path": "accounts/6250428815/containers/195876113/versions/0",
"accountId": "6250428815",
"containerId": "195876113",
"containerVersionId": "0",
"container": {
"path": "accounts/6250428815/containers/195876113",
"accountId": "6250428815",
"containerId": "195876113",
"name": "Asthamoy web",
"publicId": "GTM-WMF3QSNK",
"usageContext": [
"WEB"
],
"fingerprint": "1727090130491",
"tagManagerUrl": "https://tagmanager.google.com/#/container/accounts/6250428815/containers/195876113/workspaces?apiLink=container",
"features": {
"supportUserPermissions": true,
"supportEnvironments": true,
"supportWorkspaces": true,
"supportGtagConfigs": false,
"supportBuiltInVariables": true,
"supportClients": false,
"supportFolders": true,
"supportTags": true,
"supportTemplates": true,
"supportTriggers": true,
"supportVariables": true,
"supportVersions": true,
"supportZones": true,
"supportTransformations": false
},
"tagIds": [
"GTM-WMF3QSNK"
]
},
"tag": [
{
"accountId": "6250428815",
"containerId": "195876113",
"tagId": "14",
"name": "FB - ViewItem",
"type": "cvt_195876113_13",
"parameter": [
{
"type": "BOOLEAN",
"key": "disablePushState",
"value": "false"
},
{
"type": "TEMPLATE",
"key": "pixelId",
"value": "{{fb pixel}}"
},
{
"type": "TEMPLATE",
"key": "eventId",
"value": "{{event_id}}"
},
{
"type": "LIST",
"key": "objectPropertyList",
"list": [
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "name",
"value": "content_type"
},
{
"type": "TEMPLATE",
"key": "value",
"value": "product"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "name",
"value": "content_name"
},
{
"type": "TEMPLATE",
"key": "value",
"value": "{{dl - item - name}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "name",
"value": "content_ids"
},
{
"type": "TEMPLATE",
"key": "value",
"value": "{{dl - item - id}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "name",
"value": "value"
},
{
"type": "TEMPLATE",
"key": "value",
"value": "{{dl - value}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "name",
"value": "currency"
},
{
"type": "TEMPLATE",
"key": "value",
"value": "{{dl - currency}}"
}
]
}
]
},
{
"type": "TEMPLATE",
"key": "standardEventName",
"value": "ViewContent"
},
{
"type": "BOOLEAN",
"key": "disableAutoConfig",
"value": "false"
},
{
"type": "BOOLEAN",
"key": "enhancedEcommerce",
"value": "false"
},
{
"type": "BOOLEAN",
"key": "dpoLDU",
"value": "false"
},
{
"type": "TEMPLATE",
"key": "eventName",
"value": "standard"
},
{
"type": "BOOLEAN",
"key": "objectPropertiesFromVariable",
"value": "false"
},
{
"type": "BOOLEAN",
"key": "consent",
"value": "true"
},
{
"type": "BOOLEAN",
"key": "advancedMatching",
"value": "false"
}
],
"fingerprint": "1727091189198",
"firingTriggerId": [
"11"
],
"tagFiringOption": "ONCE_PER_EVENT",
"monitoringMetadata": {
"type": "MAP"
},
"consentSettings": {
"consentStatus": "NOT_SET"
}
},
{
"accountId": "6250428815",
"containerId": "195876113",
"tagId": "20",
"name": "GA4 - ViewCart",
"type": "gaawe",
"parameter": [
{
"type": "BOOLEAN",
"key": "sendEcommerceData",
"value": "false"
},
{
"type": "LIST",
"key": "eventSettingsTable",
"list": [
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "parameter",
"value": "items"
},
{
"type": "TEMPLATE",
"key": "parameterValue",
"value": "{{dl - items}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "parameter",
"value": "currency"
},
{
"type": "TEMPLATE",
"key": "parameterValue",
"value": "{{dl - currency}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "parameter",
"value": "value"
},
{
"type": "TEMPLATE",
"key": "parameterValue",
"value": "{{dl - value}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "parameter",
"value": "x-fb-cd-content_type"
},
{
"type": "TEMPLATE",
"key": "parameterValue",
"value": "product"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "parameter",
"value": "x-fb-cd-content_name"
},
{
"type": "TEMPLATE",
"key": "parameterValue",
"value": "{{cJS - item -name}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "parameter",
"value": "x-fb-cd-content_ids"
},
{
"type": "TEMPLATE",
"key": "parameterValue",
"value": "{{cJS - item - id}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "parameter",
"value": "event_id"
},
{
"type": "TEMPLATE",
"key": "parameterValue",
"value": "{{event_id}}"
}
]
}
]
},
{
"type": "TEMPLATE",
"key": "eventName",
"value": "view_cart"
},
{
"type": "TEMPLATE",
"key": "measurementIdOverride",
"value": "{{g tag}}"
}
],
"fingerprint": "1727091189203",
"firingTriggerId": [
"18"
],
"tagFiringOption": "ONCE_PER_EVENT",
"monitoringMetadata": {
"type": "MAP"
},
"consentSettings": {
"consentStatus": "NOT_SET"
}
},
{
"accountId": "6250428815",
"containerId": "195876113",
"tagId": "25",
"name": "FB - Form_submit",
"type": "cvt_195876113_13",
"parameter": [
{
"type": "BOOLEAN",
"key": "disablePushState",
"value": "false"
},
{
"type": "TEMPLATE",
"key": "pixelId",
"value": "{{fb pixel}}"
},
{
"type": "LIST",
"key": "objectPropertyList",
"list": [
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "name",
"value": "Name"
},
{
"type": "TEMPLATE",
"key": "value",
"value": "{{user - name}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "name",
"value": "Phone"
},
{
"type": "TEMPLATE",
"key": "value",
"value": "{{user - phone}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "name",
"value": "Email"
},
{
"type": "TEMPLATE",
"key": "value",
"value": "{{user - email}}"
}
]
}
]
},
{
"type": "TEMPLATE",
"key": "standardEventName",
"value": "Lead"
},
{
"type": "BOOLEAN",
"key": "disableAutoConfig",
"value": "false"
},
{
"type": "BOOLEAN",
"key": "enhancedEcommerce",
"value": "false"
},
{
"type": "BOOLEAN",
"key": "dpoLDU",
"value": "false"
},
{
"type": "LIST",
"key": "advancedMatchingList",
"list": [
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "name",
"value": "fn"
},
{
"type": "TEMPLATE",
"key": "value",
"value": "{{user - name}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "name",
"value": "em"
},
{
"type": "TEMPLATE",
"key": "value",
"value": "{{user - email}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "name",
"value": "ph"
},
{
"type": "TEMPLATE",
"key": "value",
"value": "{{user - phone}}"
}
]
}
]
},
{
"type": "TEMPLATE",
"key": "eventName",
"value": "standard"
},
{
"type": "BOOLEAN",
"key": "objectPropertiesFromVariable",
"value": "false"
},
{
"type": "BOOLEAN",
"key": "consent",
"value": "true"
},
{
"type": "BOOLEAN",
"key": "advancedMatching",
"value": "true"
}
],
"fingerprint": "1727091189127",
"firingTriggerId": [
"22"
],
"tagFiringOption": "ONCE_PER_EVENT",
"monitoringMetadata": {
"type": "MAP"
},
"consentSettings": {
"consentStatus": "NOT_SET"
}
},
{
"accountId": "6250428815",
"containerId": "195876113",
"tagId": "28",
"name": "GA4 - ViewItem",
"type": "gaawe",
"parameter": [
{
"type": "BOOLEAN",
"key": "sendEcommerceData",
"value": "false"
},
{
"type": "LIST",
"key": "eventSettingsTable",
"list": [
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "parameter",
"value": "items"
},
{
"type": "TEMPLATE",
"key": "parameterValue",
"value": "{{dl - items}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "parameter",
"value": "currency"
},
{
"type": "TEMPLATE",
"key": "parameterValue",
"value": "{{dl - currency}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "parameter",
"value": "value"
},
{
"type": "TEMPLATE",
"key": "parameterValue",
"value": "{{dl - value}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "parameter",
"value": "x-fb-cd-content_type"
},
{
"type": "TEMPLATE",
"key": "parameterValue",
"value": "product"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "parameter",
"value": "x-fb-cd-content_name"
},
{
"type": "TEMPLATE",
"key": "parameterValue",
"value": "{{dl - item - name}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "parameter",
"value": "x-fb-cd-content_ids"
},
{
"type": "TEMPLATE",
"key": "parameterValue",
"value": "{{dl - item - id}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "parameter",
"value": "event_id"
},
{
"type": "TEMPLATE",
"key": "parameterValue",
"value": "{{event_id}}"
}
]
}
]
},
{
"type": "TEMPLATE",
"key": "eventName",
"value": "view_item"
},
{
"type": "TEMPLATE",
"key": "measurementIdOverride",
"value": "{{g tag}}"
}
],
"fingerprint": "1727091189204",
"firingTriggerId": [
"11"
],
"tagFiringOption": "ONCE_PER_EVENT",
"monitoringMetadata": {
"type": "MAP"
},
"consentSettings": {
"consentStatus": "NOT_SET"
}
},
{
"accountId": "6250428815",
"containerId": "195876113",
"tagId": "39",
"name": "FB - Purchase",
"type": "cvt_195876113_13",
"parameter": [
{
"type": "BOOLEAN",
"key": "disablePushState",
"value": "false"
},
{
"type": "TEMPLATE",
"key": "eventId",
"value": "{{event_id}}"
},
{
"type": "TEMPLATE",
"key": "standardEventName",
"value": "Purchase"
},
{
"type": "LIST",
"key": "advancedMatchingList",
"list": [
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "name",
"value": "fn"
},
{
"type": "TEMPLATE",
"key": "value",
"value": "{{user - name}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "name",
"value": "ln"
},
{
"type": "TEMPLATE",
"key": "value",
"value": "{{user - lastname}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "name",
"value": "cn"
},
{
"type": "TEMPLATE",
"key": "value",
"value": "{{user - country}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "name",
"value": "ct"
},
{
"type": "TEMPLATE",
"key": "value",
"value": "{{user - city}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "name",
"value": "em"
},
{
"type": "TEMPLATE",
"key": "value",
"value": "{{user - email}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "name",
"value": "ph"
},
{
"type": "TEMPLATE",
"key": "value",
"value": "{{user - phone}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "name",
"value": "st"
},
{
"type": "TEMPLATE",
"key": "value",
"value": "{{user - region}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "name",
"value": "zp"
},
{
"type": "TEMPLATE",
"key": "value",
"value": "{{user - zip}}"
}
]
}
]
},
{
"type": "BOOLEAN",
"key": "objectPropertiesFromVariable",
"value": "false"
},
{
"type": "BOOLEAN",
"key": "consent",
"value": "true"
},
{
"type": "TEMPLATE",
"key": "pixelId",
"value": "{{fb pixel}}"
},
{
"type": "LIST",
"key": "objectPropertyList",
"list": [
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "name",
"value": "content_type"
},
{
"type": "TEMPLATE",
"key": "value",
"value": "product"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "name",
"value": "content_ids"
},
{
"type": "TEMPLATE",
"key": "value",
"value": "{{cJS - item - id}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "name",
"value": "content_name"
},
{
"type": "TEMPLATE",
"key": "value",
"value": "{{cJS - item -name}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "name",
"value": "value"
},
{
"type": "TEMPLATE",
"key": "value",
"value": "{{dl - value}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "name",
"value": "currency"
},
{
"type": "TEMPLATE",
"key": "value",
"value": "{{dl - currency}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "name",
"value": "order_id"
},
{
"type": "TEMPLATE",
"key": "value",
"value": "{{transaction_id}}"
}
]
}
]
},
{
"type": "BOOLEAN",
"key": "disableAutoConfig",
"value": "false"
},
{
"type": "BOOLEAN",
"key": "enhancedEcommerce",
"value": "false"
},
{
"type": "BOOLEAN",
"key": "dpoLDU",
"value": "false"
},
{
"type": "TEMPLATE",
"key": "eventName",
"value": "standard"
},
{
"type": "BOOLEAN",
"key": "advancedMatching",
"value": "true"
}
],
"fingerprint": "1727091189195",
"firingTriggerId": [
"32"
],
"tagFiringOption": "ONCE_PER_EVENT",
"monitoringMetadata": {
"type": "MAP"
},
"consentSettings": {
"consentStatus": "NOT_SET"
}
},
{
"accountId": "6250428815",
"containerId": "195876113",
"tagId": "43",
"name": "FB - AddToCart",
"type": "cvt_195876113_13",
"parameter": [
{
"type": "BOOLEAN",
"key": "disablePushState",
"value": "false"
},
{
"type": "TEMPLATE",
"key": "pixelId",
"value": "{{fb pixel}}"
},
{
"type": "TEMPLATE",
"key": "eventId",
"value": "{{event_id}}"
},
{
"type": "LIST",
"key": "objectPropertyList",
"list": [
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "name",
"value": "content_type"
},
{
"type": "TEMPLATE",
"key": "value",
"value": "product"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "name",
"value": "content_ids"
},
{
"type": "TEMPLATE",
"key": "value",
"value": "{{dl - item - id}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "name",
"value": "content_name"
},
{
"type": "TEMPLATE",
"key": "value",
"value": "{{dl - item - name}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "name",
"value": "value"
},
{
"type": "TEMPLATE",
"key": "value",
"value": "{{dl - value}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "name",
"value": "currency"
},
{
"type": "TEMPLATE",
"key": "value",
"value": "{{dl - currency}}"
}
]
}
]
},
{
"type": "TEMPLATE",
"key": "standardEventName",
"value": "AddToCart"
},
{
"type": "BOOLEAN",
"key": "disableAutoConfig",
"value": "false"
},
{
"type": "BOOLEAN",
"key": "enhancedEcommerce",
"value": "false"
},
{
"type": "BOOLEAN",
"key": "dpoLDU",
"value": "false"
},
{
"type": "TEMPLATE",
"key": "eventName",
"value": "standard"
},
{
"type": "BOOLEAN",
"key": "objectPropertiesFromVariable",
"value": "false"
},
{
"type": "BOOLEAN",
"key": "consent",
"value": "true"
},
{
"type": "BOOLEAN",
"key": "advancedMatching",
"value": "false"
}
],
"fingerprint": "1727091189189",
"firingTriggerId": [
"42"
],
"tagFiringOption": "ONCE_PER_EVENT",
"monitoringMetadata": {
"type": "MAP"
},
"consentSettings": {
"consentStatus": "NOT_SET"
}
},
{
"accountId": "6250428815",
"containerId": "195876113",
"tagId": "44",
"name": "GA4 - BeginCheckout",
"type": "gaawe",
"parameter": [
{
"type": "BOOLEAN",
"key": "sendEcommerceData",
"value": "false"
},
{
"type": "LIST",
"key": "eventSettingsTable",
"list": [
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "parameter",
"value": "items"
},
{
"type": "TEMPLATE",
"key": "parameterValue",
"value": "{{dl - items}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "parameter",
"value": "currency"
},
{
"type": "TEMPLATE",
"key": "parameterValue",
"value": "{{dl - currency}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "parameter",
"value": "value"
},
{
"type": "TEMPLATE",
"key": "parameterValue",
"value": "{{dl - value}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "parameter",
"value": "x-fb-cd-content_type"
},
{
"type": "TEMPLATE",
"key": "parameterValue",
"value": "product"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "parameter",
"value": "x-fb-cd-content_name"
},
{
"type": "TEMPLATE",
"key": "parameterValue",
"value": "{{cJS - item -name}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "parameter",
"value": "x-fb-cd-content_ids"
},
{
"type": "TEMPLATE",
"key": "parameterValue",
"value": "{{cJS - item - id}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "parameter",
"value": "event_id"
},
{
"type": "TEMPLATE",
"key": "parameterValue",
"value": "{{event_id}}"
}
]
}
]
},
{
"type": "TEMPLATE",
"key": "eventName",
"value": "begin_checkout"
},
{
"type": "TEMPLATE",
"key": "measurementIdOverride",
"value": "{{g tag}}"
}
],
"fingerprint": "1727091189201",
"firingTriggerId": [
"40"
],
"tagFiringOption": "ONCE_PER_EVENT",
"monitoringMetadata": {
"type": "MAP"
},
"consentSettings": {
"consentStatus": "NOT_SET"
}
},
{
"accountId": "6250428815",
"containerId": "195876113",
"tagId": "45",
"name": "Form Data layer",
"type": "html",
"parameter": [
{
"type": "TEMPLATE",
"key": "html",
"value": "<script>\n \n (function() {\n var origXMLHttpRequest = XMLHttpRequest;\n XMLHttpRequest = function() {\n var requestURL;\n var requestMethod;\n var requestBody;\n\n var xhr = new origXMLHttpRequest();\n var origOpen = xhr.open;\n var origSend = xhr.send;\n\n // Override the `open` function.\n xhr.open = function(method, url) {\n requestURL = url;\n requestMethod = method;\n return origOpen.apply(this, arguments);\n };\n\n xhr.send = function(data) {\n // Only proceed if the request URL matches what we're looking for.\n if (/.+\\/admin-ajax\\.php/.test(requestURL)) {\n xhr.addEventListener('load', function() {\n if (xhr.readyState === 4) {\n if (xhr.status === 200) {\n var response = JSON.parse(xhr.responseText);\n\n if (response.success && (data instanceof FormData)) {\n requestBody = {};\n data.forEach(function(value, key) {\n requestBody[key] = value;\n });\n\n if(requestBody.action === \"elementor_pro_forms_send_form\") {\n window.dataLayer = window.dataLayer || [];\n dataLayer.push({\n event: 'elementor_form_submit', \n inputs: requestBody\n });\n }\n }\n }\n }\n });\n }\n\n return origSend.apply(this, arguments);\n };\n\n return xhr;\n };\n})();\n </script>"
},
{
"type": "BOOLEAN",
"key": "supportDocumentWrite",
"value": "false"
}
],
"fingerprint": "1727091189142",
"firingTriggerId": [
"2147479553"
],
"tagFiringOption": "ONCE_PER_EVENT",
"monitoringMetadata": {
"type": "MAP"
},
"consentSettings": {
"consentStatus": "NOT_SET"
}
},
{
"accountId": "6250428815",
"containerId": "195876113",
"tagId": "46",
"name": "FB - PageView",
"type": "cvt_195876113_13",
"parameter": [
{
"type": "BOOLEAN",
"key": "disablePushState",
"value": "false"
},
{
"type": "TEMPLATE",
"key": "pixelId",
"value": "{{fb pixel}}"
},
{
"type": "TEMPLATE",
"key": "eventId",
"value": "{{event_id}}"
},
{
"type": "TEMPLATE",
"key": "standardEventName",
"value": "PageView"
},
{
"type": "BOOLEAN",
"key": "disableAutoConfig",
"value": "false"
},
{
"type": "BOOLEAN",
"key": "enhancedEcommerce",
"value": "false"
},
{
"type": "BOOLEAN",
"key": "dpoLDU",
"value": "false"
},
{
"type": "TEMPLATE",
"key": "eventName",
"value": "standard"
},
{
"type": "BOOLEAN",
"key": "objectPropertiesFromVariable",
"value": "false"
},
{
"type": "BOOLEAN",
"key": "consent",
"value": "true"
},
{
"type": "BOOLEAN",
"key": "advancedMatching",
"value": "false"
}
],
"fingerprint": "1727091189131",
"firingTriggerId": [
"2147479553"
],
"tagFiringOption": "ONCE_PER_EVENT",
"monitoringMetadata": {
"type": "MAP"
},
"consentSettings": {
"consentStatus": "NOT_SET"
}
},
{
"accountId": "6250428815",
"containerId": "195876113",
"tagId": "48",
"name": "FB - ViewCart",
"type": "cvt_195876113_13",
"parameter": [
{
"type": "BOOLEAN",
"key": "disablePushState",
"value": "false"
},
{
"type": "TEMPLATE",
"key": "pixelId",
"value": "{{fb pixel}}"
},
{
"type": "TEMPLATE",
"key": "eventId",
"value": "{{event_id}}"
},
{
"type": "LIST",
"key": "objectPropertyList",
"list": [
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "name",
"value": "content_type"
},
{
"type": "TEMPLATE",
"key": "value",
"value": "product"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "name",
"value": "content_ids"
},
{
"type": "TEMPLATE",
"key": "value",
"value": "{{cJS - item - id}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "name",
"value": "content_name"
},
{
"type": "TEMPLATE",
"key": "value",
"value": "{{cJS - item -name}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "name",
"value": "value"
},
{
"type": "TEMPLATE",
"key": "value",
"value": "{{dl - value}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "name",
"value": "currency"
},
{
"type": "TEMPLATE",
"key": "value",
"value": "{{dl - currency}}"
}
]
}
]
},
{
"type": "BOOLEAN",
"key": "disableAutoConfig",
"value": "false"
},
{
"type": "BOOLEAN",
"key": "enhancedEcommerce",
"value": "false"
},
{
"type": "BOOLEAN",
"key": "dpoLDU",
"value": "false"
},
{
"type": "TEMPLATE",
"key": "eventName",
"value": "custom"
},
{
"type": "BOOLEAN",
"key": "objectPropertiesFromVariable",
"value": "false"
},
{
"type": "TEMPLATE",
"key": "customEventName",
"value": "View Cart"
},
{
"type": "BOOLEAN",
"key": "consent",
"value": "true"
},
{
"type": "BOOLEAN",
"key": "advancedMatching",
"value": "false"
}
],
"fingerprint": "1727091189197",
"firingTriggerId": [
"18"
],
"tagFiringOption": "ONCE_PER_EVENT",
"monitoringMetadata": {
"type": "MAP"
},
"consentSettings": {
"consentStatus": "NOT_SET"
}
},
{
"accountId": "6250428815",
"containerId": "195876113",
"tagId": "49",
"name": "GA4 - Form_submit",
"type": "gaawe",
"parameter": [
{
"type": "BOOLEAN",
"key": "sendEcommerceData",
"value": "false"
},
{
"type": "LIST",
"key": "userProperties",
"list": [
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "name",
"value": "Name"
},
{
"type": "TEMPLATE",
"key": "value",
"value": "{{user - name}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "name",
"value": "Phone"
},
{
"type": "TEMPLATE",
"key": "value",
"value": "{{user - phone}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "name",
"value": "Email"
},
{
"type": "TEMPLATE",
"key": "value",
"value": "{{user - email}}"
}
]
}
]
},
{
"type": "TEMPLATE",
"key": "eventName",
"value": "Lead"
},
{
"type": "TEMPLATE",
"key": "measurementIdOverride",
"value": "{{g tag}}"
}
],
"fingerprint": "1727091189137",
"firingTriggerId": [
"22"
],
"tagFiringOption": "ONCE_PER_EVENT",
"monitoringMetadata": {
"type": "MAP"
},
"consentSettings": {
"consentStatus": "NOT_SET"
}
},
{
"accountId": "6250428815",
"containerId": "195876113",
"tagId": "51",
"name": "GA4 - Purchase",
"type": "gaawe",
"parameter": [
{
"type": "BOOLEAN",
"key": "sendEcommerceData",
"value": "false"
},
{
"type": "LIST",
"key": "eventSettingsTable",
"list": [
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "parameter",
"value": "items"
},
{
"type": "TEMPLATE",
"key": "parameterValue",
"value": "{{dl - items}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "parameter",
"value": "value"
},
{
"type": "TEMPLATE",
"key": "parameterValue",
"value": "{{dl - value}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "parameter",
"value": "currency"
},
{
"type": "TEMPLATE",
"key": "parameterValue",
"value": "{{dl - currency}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "parameter",
"value": "transaction_id"
},
{
"type": "TEMPLATE",
"key": "parameterValue",
"value": "{{transaction_id}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "parameter",
"value": "tax"
},
{
"type": "TEMPLATE",
"key": "parameterValue",
"value": "{{tax}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "parameter",
"value": "shipping"
},
{
"type": "TEMPLATE",
"key": "parameterValue",
"value": "{{shipping}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "parameter",
"value": "discount"
},
{
"type": "TEMPLATE",
"key": "parameterValue",
"value": "{{discount}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "parameter",
"value": "coupon"
},
{
"type": "TEMPLATE",
"key": "parameterValue",
"value": "{{coupon}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "parameter",
"value": "x-fb-cd-content_type"
},
{
"type": "TEMPLATE",
"key": "parameterValue",
"value": "product"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "parameter",
"value": "x-fb-cd-content_name"
},
{
"type": "TEMPLATE",
"key": "parameterValue",
"value": "{{cJS - item -name}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "parameter",
"value": "x-fb-cd-content_ids"
},
{
"type": "TEMPLATE",
"key": "parameterValue",
"value": "{{cJS - item - id}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "parameter",
"value": "event_id"
},
{
"type": "TEMPLATE",
"key": "parameterValue",
"value": "{{event_id}}"
}
]
}
]
},
{
"type": "LIST",
"key": "userProperties",
"list": [
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "name",
"value": "first_name"
},
{
"type": "TEMPLATE",
"key": "value",
"value": "{{user - name}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "name",
"value": "last_name"
},
{
"type": "TEMPLATE",
"key": "value",
"value": "{{user - lastname}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "name",
"value": "email"
},
{
"type": "TEMPLATE",
"key": "value",
"value": "{{user - email}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "name",
"value": "phone"
},
{
"type": "TEMPLATE",
"key": "value",
"value": "{{user - phone}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "name",
"value": "address"
},
{
"type": "TEMPLATE",
"key": "value",
"value": "{{user - address}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "name",
"value": "city"
},
{
"type": "TEMPLATE",
"key": "value",
"value": "{{user - city}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "name",
"value": "street"
},
{
"type": "TEMPLATE",
"key": "value",
"value": "{{user - street}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "name",
"value": "zip"
},
{
"type": "TEMPLATE",
"key": "value",
"value": "{{user - zip}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "name",
"value": "country"
},
{
"type": "TEMPLATE",
"key": "value",
"value": "{{user - country}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "name",
"value": "region"
},
{
"type": "TEMPLATE",
"key": "value",
"value": "{{user - region}}"
}
]
}
]
},
{
"type": "TEMPLATE",
"key": "eventName",
"value": "purchase"
},
{
"type": "TEMPLATE",
"key": "measurementIdOverride",
"value": "{{g tag}}"
}
],
"fingerprint": "1727091189202",
"firingTriggerId": [
"32"
],
"tagFiringOption": "ONCE_PER_EVENT",
"monitoringMetadata": {
"type": "MAP"
},
"consentSettings": {
"consentStatus": "NOT_SET"
}
},
{
"accountId": "6250428815",
"containerId": "195876113",
"tagId": "52",
"name": "Google Tag",
"type": "googtag",
"parameter": [
{
"type": "TEMPLATE",
"key": "tagId",
"value": "G-5ZN0DC6PCW"
},
{
"type": "LIST",
"key": "configSettingsTable",
"list": [
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "parameter",
"value": "server_container_url"
},
{
"type": "TEMPLATE",
"key": "parameterValue",
"value": "https://nqihosbp.ap.stape.io"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "parameter",
"value": "event_id"
},
{
"type": "TEMPLATE",
"key": "parameterValue",
"value": "{{event_id}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "parameter",
"value": "event_time"
},
{
"type": "TEMPLATE",
"key": "parameterValue",
"value": "{{event time}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "parameter",
"value": "first_party_collection"
},
{
"type": "TEMPLATE",
"key": "parameterValue",
"value": "true"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "parameter",
"value": "x-fb-ck-fbc"
},
{
"type": "TEMPLATE",
"key": "parameterValue",
"value": "{{cookie_fbc}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "parameter",
"value": "x-fb-ck-fbp"
},
{
"type": "TEMPLATE",
"key": "parameterValue",
"value": "{{cookie_fbp}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "parameter",
"value": "send_page_view"
},
{
"type": "TEMPLATE",
"key": "parameterValue",
"value": "true"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "parameter",
"value": "transport_url"
},
{
"type": "TEMPLATE",
"key": "parameterValue",
"value": "https://nqihosbp.ap.stape.io"
}
]
}
]
}
],
"fingerprint": "1727091189139",
"firingTriggerId": [
"2147479573"
],
"tagFiringOption": "ONCE_PER_EVENT",
"monitoringMetadata": {
"type": "MAP"
},
"consentSettings": {
"consentStatus": "NOT_SET"
}
},
{
"accountId": "6250428815",
"containerId": "195876113",
"tagId": "53",
"name": "GA4 - AddToCart",
"type": "gaawe",
"parameter": [
{
"type": "BOOLEAN",
"key": "sendEcommerceData",
"value": "false"
},
{
"type": "LIST",
"key": "eventSettingsTable",
"list": [
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "parameter",
"value": "items"
},
{
"type": "TEMPLATE",
"key": "parameterValue",
"value": "{{dl - items}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "parameter",
"value": "value"
},
{
"type": "TEMPLATE",
"key": "parameterValue",
"value": "{{dl - value}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "parameter",
"value": "currency"
},
{
"type": "TEMPLATE",
"key": "parameterValue",
"value": "{{dl - currency}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "parameter",
"value": "x-fb-cd-content_type"
},
{
"type": "TEMPLATE",
"key": "parameterValue",
"value": "product"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "parameter",
"value": "x-fb-cd-content_name"
},
{
"type": "TEMPLATE",
"key": "parameterValue",
"value": "{{dl - item - name}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "parameter",
"value": "x-fb-cd-content_ids"
},
{
"type": "TEMPLATE",
"key": "parameterValue",
"value": "{{dl - item - id}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "parameter",
"value": "event_id"
},
{
"type": "TEMPLATE",
"key": "parameterValue",
"value": "{{event_id}}"
}
]
}
]
},
{
"type": "TEMPLATE",
"key": "eventName",
"value": "add_to_cart"
},
{
"type": "TEMPLATE",
"key": "measurementIdOverride",
"value": "{{g tag}}"
}
],
"fingerprint": "1727091189200",
"firingTriggerId": [
"42"
],
"tagFiringOption": "ONCE_PER_EVENT",
"monitoringMetadata": {
"type": "MAP"
},
"consentSettings": {
"consentStatus": "NOT_SET"
}
},
{
"accountId": "6250428815",
"containerId": "195876113",
"tagId": "54",
"name": "FB - Checkout",
"type": "cvt_195876113_13",
"parameter": [
{
"type": "BOOLEAN",
"key": "disablePushState",
"value": "false"
},
{
"type": "TEMPLATE",
"key": "pixelId",
"value": "{{fb pixel}}"
},
{
"type": "TEMPLATE",
"key": "eventId",
"value": "{{event_id}}"
},
{
"type": "LIST",
"key": "objectPropertyList",
"list": [
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "name",
"value": "content_type"
},
{
"type": "TEMPLATE",
"key": "value",
"value": "product"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "name",
"value": "content_ids"
},
{
"type": "TEMPLATE",
"key": "value",
"value": "{{cJS - item - id}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "name",
"value": "content_name"
},
{
"type": "TEMPLATE",
"key": "value",
"value": "{{cJS - item -name}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "name",
"value": "value"
},
{
"type": "TEMPLATE",
"key": "value",
"value": "{{dl - value}}"
}
]
},
{
"type": "MAP",
"map": [
{
"type": "TEMPLATE",
"key": "name",
"value": "currency"
},
{
"type": "TEMPLATE",
"key": "value",
"value": "{{dl - currency}}"
}
]
}
]
},
{
"type": "TEMPLATE",
"key": "standardEventName",
"value": "InitiateCheckout"
},
{
"type": "BOOLEAN",
"key": "disableAutoConfig",
"value": "false"
},
{
"type": "BOOLEAN",
"key": "enhancedEcommerce",
"value": "false"
},
{
"type": "BOOLEAN",
"key": "dpoLDU",
"value": "false"
},
{
"type": "TEMPLATE",
"key": "eventName",
"value": "standard"
},
{
"type": "BOOLEAN",
"key": "objectPropertiesFromVariable",
"value": "false"
},
{
"type": "BOOLEAN",
"key": "consent",
"value": "true"
},
{
"type": "BOOLEAN",
"key": "advancedMatching",
"value": "false"
}
],
"fingerprint": "1727091189191",
"firingTriggerId": [
"40"
],
"tagFiringOption": "ONCE_PER_EVENT",
"monitoringMetadata": {
"type": "MAP"
},
"consentSettings": {
"consentStatus": "NOT_SET"
}
}
],
"trigger": [
{
"accountId": "6250428815",
"containerId": "195876113",
"triggerId": "11",
"name": "view_item",
"type": "CUSTOM_EVENT",
"customEventFilter": [
{
"type": "EQUALS",
"parameter": [
{
"type": "TEMPLATE",
"key": "arg0",
"value": "{{_event}}"
},
{
"type": "TEMPLATE",
"key": "arg1",
"value": "view_item"
}
]
}
],
"fingerprint": "1727090895679"
},
{
"accountId": "6250428815",
"containerId": "195876113",
"triggerId": "18",
"name": "view_cart",
"type": "CUSTOM_EVENT",
"customEventFilter": [
{
"type": "EQUALS",
"parameter": [
{
"type": "TEMPLATE",
"key": "arg0",
"value": "{{_event}}"
},
{
"type": "TEMPLATE",
"key": "arg1",
"value": "view_cart"
}
]
}
],
"fingerprint": "1727090895684"
},
{
"accountId": "6250428815",
"containerId": "195876113",
"triggerId": "22",
"name": "Form_submit",
"type": "CUSTOM_EVENT",
"customEventFilter": [
{
"type": "EQUALS",
"parameter": [
{
"type": "TEMPLATE",
"key": "arg0",
"value": "{{_event}}"
},
{
"type": "TEMPLATE",
"key": "arg1",
"value": "elementor_form_submit"
}
]
}
],
"fingerprint": "1727090895686"
},
{
"accountId": "6250428815",
"containerId": "195876113",
"triggerId": "32",
"name": "purchase",
"type": "CUSTOM_EVENT",
"customEventFilter": [
{
"type": "EQUALS",
"parameter": [
{
"type": "TEMPLATE",
"key": "arg0",
"value": "{{_event}}"
},
{
"type": "TEMPLATE",
"key": "arg1",
"value": "purchase"
}
]
}
],
"fingerprint": "1727090895692"
},
{
"accountId": "6250428815",
"containerId": "195876113",
"triggerId": "40",
"name": "begin_checkout",
"type": "CUSTOM_EVENT",
"customEventFilter": [
{
"type": "EQUALS",
"parameter": [
{
"type": "TEMPLATE",
"key": "arg0",
"value": "{{_event}}"
},
{
"type": "TEMPLATE",
"key": "arg1",
"value": "begin_checkout"
}
]
}
],
"fingerprint": "1727090895696"
},
{
"accountId": "6250428815",
"containerId": "195876113",
"triggerId": "42",
"name": "add_to_cart",
"type": "CUSTOM_EVENT",
"customEventFilter": [
{
"type": "EQUALS",
"parameter": [
{
"type": "TEMPLATE",
"key": "arg0",
"value": "{{_event}}"
},
{
"type": "TEMPLATE",
"key": "arg1",
"value": "add_to_cart"
}
]
}
],
"fingerprint": "1727090895697"
}
],
"variable": [
{
"accountId": "6250428815",
"containerId": "195876113",
"variableId": "3",
"name": "cookie_fbp",
"type": "k",
"parameter": [
{
"type": "BOOLEAN",
"key": "decodeCookie",
"value": "false"
},
{
"type": "TEMPLATE",
"key": "name",
"value": "_fbp"
}
],
"fingerprint": "1727090895675",
"formatValue": {}
},
{
"accountId": "6250428815",
"containerId": "195876113",
"variableId": "4",
"name": "discount",
"type": "v",
"parameter": [
{
"type": "INTEGER",
"key": "dataLayerVersion",
"value": "2"
},
{
"type": "BOOLEAN",
"key": "setDefaultValue",
"value": "false"
},
{
"type": "TEMPLATE",
"key": "name",
"value": "discount"
}
],
"fingerprint": "1727090895676",
"formatValue": {}
},
{
"accountId": "6250428815",
"containerId": "195876113",
"variableId": "5",
"name": "dl - value",
"type": "v",
"parameter": [
{
"type": "INTEGER",
"key": "dataLayerVersion",
"value": "2"
},
{
"type": "BOOLEAN",
"key": "setDefaultValue",
"value": "false"
},
{
"type": "TEMPLATE",
"key": "name",
"value": "value"
}
],
"fingerprint": "1727090895677",
"formatValue": {}
},
{
"accountId": "6250428815",
"containerId": "195876113",
"variableId": "7",
"name": "event_id",
"type": "cvt_195876113_6",
"parameter": [
{
"type": "BOOLEAN",
"key": "useCustomEventCounter",
"value": "false"
}
],
"fingerprint": "1727090895678",
"formatValue": {}
},
{
"accountId": "6250428815",
"containerId": "195876113",
"variableId": "8",
"name": "dl - currency",
"type": "v",
"parameter": [
{
"type": "INTEGER",
"key": "dataLayerVersion",
"value": "2"
},
{
"type": "BOOLEAN",
"key": "setDefaultValue",
"value": "false"
},
{
"type": "TEMPLATE",
"key": "name",
"value": "currency"
}
],
"fingerprint": "1727090895678",
"formatValue": {}
},
{
"accountId": "6250428815",
"containerId": "195876113",
"variableId": "9",
"name": "dl - item - id",
"type": "v",
"parameter": [
{
"type": "INTEGER",
"key": "dataLayerVersion",
"value": "2"
},
{
"type": "BOOLEAN",
"key": "setDefaultValue",
"value": "false"
},
{
"type": "TEMPLATE",
"key": "name",
"value": "items.0.item_id"
}
],
"fingerprint": "1727090895679",
"formatValue": {}
},
{
"accountId": "6250428815",
"containerId": "195876113",
"variableId": "10",
"name": "dl - item - name",
"type": "v",
"parameter": [
{
"type": "INTEGER",
"key": "dataLayerVersion",
"value": "2"
},
{
"type": "BOOLEAN",
"key": "setDefaultValue",
"value": "false"
},
{
"type": "TEMPLATE",
"key": "name",
"value": "items.0.item_name"
}
],
"fingerprint": "1727090895679",
"formatValue": {}
},
{
"accountId": "6250428815",
"containerId": "195876113",
"variableId": "12",
"name": "fb pixel",
"type": "c",
"parameter": [
{
"type": "TEMPLATE",
"key": "value",
"value": "861688159395002"
}
],
"fingerprint": "1727090933906",
"formatValue": {}
},
{
"accountId": "6250428815",
"containerId": "195876113",
"variableId": "15",
"name": "dl - items",
"type": "v",
"parameter": [
{
"type": "INTEGER",
"key": "dataLayerVersion",
"value": "2"
},
{
"type": "BOOLEAN",
"key": "setDefaultValue",
"value": "false"
},
{
"type": "TEMPLATE",
"key": "name",
"value": "items"
}
],
"fingerprint": "1727090895683",
"formatValue": {}
},
{
"accountId": "6250428815",
"containerId": "195876113",
"variableId": "16",
"name": "cJS - item -name",
"type": "jsm",
"parameter": [
{
"type": "TEMPLATE",
"key": "javascript",
"value": "function(){\n\tfunction getData(input){\n\t\tvar x = [];\n\t\tfor (var i = input.length - 1; i >= 0; i--) {\n\t\t\tx.push(input[i].item_name);\n\t\t}\n\t\treturn x;\n\t}\n \t\n \tvar data = getData({{dl - items}});\n \t\n \tif( data == \"undefined\" ){\n data = \"\"; }\n \n\treturn data;\n}"
}
],
"fingerprint": "1727090895683",
"formatValue": {}
},
{
"accountId": "6250428815",
"containerId": "195876113",
"variableId": "17",
"name": "cJS - item - id",
"type": "jsm",
"parameter": [
{
"type": "TEMPLATE",
"key": "javascript",
"value": "function(){\n\tfunction getData(input){\n\t\tvar x = [];\n\t\tfor (var i = input.length - 1; i >= 0; i--) {\n\t\t\tx.push(input[i].item_id);\n\t\t}\n\t\treturn x;\n\t}\n \t\n \tvar data = getData({{dl - items}});\n \t\n \tif( data == \"undefined\" ){\n data = \"\"; }\n \n\treturn data;\n}"
}
],
"fingerprint": "1727090895684",
"formatValue": {}
},
{
"accountId": "6250428815",
"containerId": "195876113",
"variableId": "19",
"name": "g tag",
"type": "c",
"parameter": [
{
"type": "TEMPLATE",
"key": "value",
"value": "G-Y61C5JEQKJ"
}
],
"fingerprint": "1727090949767",
"formatValue": {}
},
{
"accountId": "6250428815",
"containerId": "195876113",
"variableId": "21",
"name": "user - name",
"type": "v",
"parameter": [
{
"type": "INTEGER",
"key": "dataLayerVersion",
"value": "2"
},
{
"type": "BOOLEAN",
"key": "setDefaultValue",
"value": "false"
},
{
"type": "TEMPLATE",
"key": "name",
"value": "inputs.form_fields[name]"
}
],
"fingerprint": "1727090895686",
"formatValue": {}
},
{
"accountId": "6250428815",
"containerId": "195876113",
"variableId": "23",
"name": "user - phone",
"type": "v",
"parameter": [
{
"type": "INTEGER",
"key": "dataLayerVersion",
"value": "2"
},
{
"type": "BOOLEAN",
"key": "setDefaultValue",
"value": "false"
},
{
"type": "TEMPLATE",
"key": "name",
"value": "inputs.form_fields[phone]"
}
],
"fingerprint": "1727090895687",
"formatValue": {}
},
{
"accountId": "6250428815",
"containerId": "195876113",
"variableId": "24",
"name": "user - email",
"type": "v",
"parameter": [
{
"type": "INTEGER",
"key": "dataLayerVersion",
"value": "2"
},
{
"type": "BOOLEAN",
"key": "setDefaultValue",
"value": "false"
},
{
"type": "TEMPLATE",
"key": "name",
"value": "inputs.form_fields[email]"
}
],
"fingerprint": "1727090895687",
"formatValue": {}
},
{
"accountId": "6250428815",
"containerId": "195876113",
"variableId": "26",
"name": "shipping",
"type": "v",
"parameter": [
{
"type": "INTEGER",
"key": "dataLayerVersion",
"value": "2"
},
{
"type": "BOOLEAN",
"key": "setDefaultValue",
"value": "false"
},
{
"type": "TEMPLATE",
"key": "name",
"value": "shipping"
}
],
"fingerprint": "1727090895688",
"formatValue": {}
},
{
"accountId": "6250428815",
"containerId": "195876113",
"variableId": "27",
"name": "tax",
"type": "v",
"parameter": [
{
"type": "INTEGER",
"key": "dataLayerVersion",
"value": "2"
},
{
"type": "BOOLEAN",
"key": "setDefaultValue",
"value": "false"
},
{
"type": "TEMPLATE",
"key": "name",
"value": "tax"
}
],
"fingerprint": "1727090895689",
"formatValue": {}
},
{
"accountId": "6250428815",
"containerId": "195876113",
"variableId": "30",
"name": "event time",
"type": "jsm",
"parameter": [
{
"type": "TEMPLATE",
"key": "javascript",
"value": " function() {\n return Math.round(new Date().getTime() / 1000);\n}"
}
],
"fingerprint": "1727090895691",
"formatValue": {}
},
{
"accountId": "6250428815",
"containerId": "195876113",
"variableId": "31",
"name": "user - lastname",
"type": "v",
"parameter": [
{
"type": "INTEGER",
"key": "dataLayerVersion",
"value": "2"
},
{
"type": "BOOLEAN",
"key": "setDefaultValue",
"value": "false"
},
{
"type": "TEMPLATE",
"key": "name",
"value": "customer.last_name"
}
],
"fingerprint": "1727090895692",
"formatValue": {}
},
{
"accountId": "6250428815",
"containerId": "195876113",
"variableId": "33",
"name": "coupon",
"type": "v",
"parameter": [
{
"type": "INTEGER",
"key": "dataLayerVersion",
"value": "2"
},
{
"type": "BOOLEAN",
"key": "setDefaultValue",
"value": "false"
},
{
"type": "TEMPLATE",
"key": "name",
"value": "coupon"
}
],
"fingerprint": "1727090895693",
"formatValue": {}
},
{
"accountId": "6250428815",
"containerId": "195876113",
"variableId": "34",
"name": "user - city",
"type": "v",
"parameter": [
{
"type": "INTEGER",
"key": "dataLayerVersion",
"value": "2"
},
{
"type": "BOOLEAN",
"key": "setDefaultValue",
"value": "false"
},
{
"type": "TEMPLATE",
"key": "name",
"value": "customer.city"
}
],
"fingerprint": "1727090895693",
"formatValue": {}
},
{
"accountId": "6250428815",
"containerId": "195876113",
"variableId": "35",
"name": "user - zip",
"type": "v",
"parameter": [
{
"type": "INTEGER",
"key": "dataLayerVersion",
"value": "2"
},
{
"type": "BOOLEAN",
"key": "setDefaultValue",
"value": "false"
},
{
"type": "TEMPLATE",
"key": "name",
"value": "customer.zip_code"
}
],
"fingerprint": "1727090895694",
"formatValue": {}
},
{
"accountId": "6250428815",
"containerId": "195876113",
"variableId": "36",
"name": "transaction_id",
"type": "v",
"parameter": [
{
"type": "INTEGER",
"key": "dataLayerVersion",
"value": "2"
},
{
"type": "BOOLEAN",
"key": "setDefaultValue",
"value": "false"
},
{
"type": "TEMPLATE",
"key": "name",
"value": "transaction_id"
}
],
"fingerprint": "1727090895694",
"formatValue": {}
},
{
"accountId": "6250428815",
"containerId": "195876113",
"variableId": "37",
"name": "user - country",
"type": "v",
"parameter": [
{
"type": "INTEGER",
"key": "dataLayerVersion",
"value": "2"
},
{
"type": "BOOLEAN",
"key": "setDefaultValue",
"value": "false"
},
{
"type": "TEMPLATE",
"key": "name",
"value": "customer.country"
}
],
"fingerprint": "1727090895695",
"formatValue": {}
},
{
"accountId": "6250428815",
"containerId": "195876113",
"variableId": "38",
"name": "user - region",
"type": "v",
"parameter": [
{
"type": "INTEGER",
"key": "dataLayerVersion",
"value": "2"
},
{
"type": "BOOLEAN",
"key": "setDefaultValue",
"value": "false"
},
{
"type": "TEMPLATE",
"key": "name",
"value": "customer.province"
}
],
"fingerprint": "1727090895695",
"formatValue": {}
},
{
"accountId": "6250428815",
"containerId": "195876113",
"variableId": "41",
"name": "user - street",
"type": "v",
"parameter": [
{
"type": "INTEGER",
"key": "dataLayerVersion",
"value": "2"
},
{
"type": "BOOLEAN",
"key": "setDefaultValue",
"value": "false"
},
{
"type": "TEMPLATE",
"key": "name",
"value": "customer.street"
}
],
"fingerprint": "1727090895696",
"formatValue": {}
},
{
"accountId": "6250428815",
"containerId": "195876113",
"variableId": "47",
"name": "cookie_fbc",
"type": "k",
"parameter": [
{
"type": "BOOLEAN",
"key": "decodeCookie",
"value": "false"
},
{
"type": "TEMPLATE",
"key": "name",
"value": "_fbc"
}
],
"fingerprint": "1727090895699",
"formatValue": {}
},
{
"accountId": "6250428815",
"containerId": "195876113",
"variableId": "50",
"name": "user - address",
"type": "v",
"parameter": [
{
"type": "INTEGER",
"key": "dataLayerVersion",
"value": "2"
},
{
"type": "BOOLEAN",
"key": "setDefaultValue",
"value": "false"
},
{
"type": "TEMPLATE",
"key": "name",
"value": "inputs.form_fields[address]"
}
],
"fingerprint": "1727090895701",
"formatValue": {}
}
],
"builtInVariable": [
{
"accountId": "6250428815",
"containerId": "195876113",
"type": "PAGE_URL",
"name": "Page URL"
},
{
"accountId": "6250428815",
"containerId": "195876113",
"type": "PAGE_HOSTNAME",
"name": "Page Hostname"
},
{
"accountId": "6250428815",
"containerId": "195876113",
"type": "PAGE_PATH",
"name": "Page Path"
},
{
"accountId": "6250428815",
"containerId": "195876113",
"type": "REFERRER",
"name": "Referrer"
},
{
"accountId": "6250428815",
"containerId": "195876113",
"type": "EVENT",
"name": "Event"
},
{
"accountId": "6250428815",
"containerId": "195876113",
"type": "CLICK_ELEMENT",
"name": "Click Element"
},
{
"accountId": "6250428815",
"containerId": "195876113",
"type": "CLICK_CLASSES",
"name": "Click Classes"
},
{
"accountId": "6250428815",
"containerId": "195876113",
"type": "CLICK_ID",
"name": "Click ID"
},
{
"accountId": "6250428815",
"containerId": "195876113",
"type": "CLICK_TARGET",
"name": "Click Target"
},
{
"accountId": "6250428815",
"containerId": "195876113",
"type": "CLICK_URL",
"name": "Click URL"
},
{
"accountId": "6250428815",
"containerId": "195876113",
"type": "CLICK_TEXT",
"name": "Click Text"
},
{
"accountId": "6250428815",
"containerId": "195876113",
"type": "FORM_ELEMENT",
"name": "Form Element"
},
{
"accountId": "6250428815",
"containerId": "195876113",
"type": "FORM_CLASSES",
"name": "Form Classes"
},
{
"accountId": "6250428815",
"containerId": "195876113",
"type": "FORM_ID",
"name": "Form ID"
},
{
"accountId": "6250428815",
"containerId": "195876113",
"type": "FORM_TARGET",
"name": "Form Target"
},
{
"accountId": "6250428815",
"containerId": "195876113",
"type": "FORM_URL",
"name": "Form URL"
},
{
"accountId": "6250428815",
"containerId": "195876113",
"type": "FORM_TEXT",
"name": "Form Text"
},
{
"accountId": "6250428815",
"containerId": "195876113",
"type": "DEBUG_MODE",
"name": "Debug Mode"
}
],
"fingerprint": "1729664114905",
"tagManagerUrl": "https://tagmanager.google.com/#/versions/accounts/6250428815/containers/195876113/versions/0?apiLink=version",
"customTemplate": [
{
"accountId": "6250428815",
"containerId": "195876113",
"templateId": "6",
"name": "Event Id",
"fingerprint": "1727090895677",
"templateData": "___TERMS_OF_SERVICE___\n\nBy creating or modifying this file you agree to Google Tag Manager's Community\nTemplate Gallery Developer Terms of Service available at\nhttps://developers.google.com/tag-manager/gallery-tos (or such other URL as\nGoogle may provide), as modified from time to time.\n\n\n___INFO___\n\n{\n \"type\": \"MACRO\",\n \"id\": \"cvt_temp_public_id\",\n \"version\": 1,\n \"securityGroups\": [],\n \"displayName\": \"Event Id\",\n \"description\": \"generates a unique event id for all gtm / dataLayer events - based on a random id for every page.\",\n \"containerContexts\": [\n \"WEB\"\n ],\n \"brand\": {\n \"displayName\": \"mbaersch\",\n \"id\": \"github.com_mbaersch\"\n }\n}\n\n\n___TEMPLATE_PARAMETERS___\n\n[\n {\n \"type\": \"CHECKBOX\",\n \"name\": \"useCustomEventCounter\",\n \"checkboxText\": \"Custom Event Counter\",\n \"simpleValueType\": true,\n \"help\": \"The result will use gtm.uniqueEventId from the dataLayer to differentiate separate events on the same page. If that does not fit your triggering plan, you can use different event id variables for every event type and add your own counter. \\n\\nExample: separate event id for a purchase using the transaction id as unique counter.\"\n },\n {\n \"type\": \"TEXT\",\n \"name\": \"customEventCounter\",\n \"displayName\": \"\",\n \"simpleValueType\": true,\n \"valueValidators\": [\n {\n \"type\": \"NON_EMPTY\"\n }\n ],\n \"enablingConditions\": [\n {\n \"paramName\": \"useCustomEventCounter\",\n \"paramValue\": true,\n \"type\": \"EQUALS\"\n }\n ]\n }\n]\n\n\n___SANDBOXED_JS_FOR_WEB_TEMPLATE___\n\nconst copyFromDataLayer = require('copyFromDataLayer');\nconst setInWindow = require('setInWindow');\nconst copyFromWindow = require('copyFromWindow');\nconst getTimestampMillis = require('getTimestampMillis');\nconst generateRandom = require('generateRandom');\nvar eventId = copyFromWindow('_randomPageId');\nif (!eventId) {\n eventId = getTimestampMillis() + '.' + generateRandom(100000, 999999);\n setInWindow('_randomPageId', eventId, false);\n}\n\nvar uniqueEventCounter = (data.useCustomEventCounter === true) ? data.customEventCounter : copyFromDataLayer('gtm.uniqueEventId') || '0';\n\nreturn eventId + \".\" + uniqueEventCounter;\n\n\n___WEB_PERMISSIONS___\n\n[\n {\n \"instance\": {\n \"key\": {\n \"publicId\": \"access_globals\",\n \"versionId\": \"1\"\n },\n \"param\": [\n {\n \"key\": \"keys\",\n \"value\": {\n \"type\": 2,\n \"listItem\": [\n {\n \"type\": 3,\n \"mapKey\": [\n {\n \"type\": 1,\n \"string\": \"key\"\n },\n {\n \"type\": 1,\n \"string\": \"read\"\n },\n {\n \"type\": 1,\n \"string\": \"write\"\n },\n {\n \"type\": 1,\n \"string\": \"execute\"\n }\n ],\n \"mapValue\": [\n {\n \"type\": 1,\n \"string\": \"_randomPageId\"\n },\n {\n \"type\": 8,\n \"boolean\": true\n },\n {\n \"type\": 8,\n \"boolean\": true\n },\n {\n \"type\": 8,\n \"boolean\": false\n }\n ]\n }\n ]\n }\n }\n ]\n },\n \"clientAnnotations\": {\n \"isEditedByUser\": true\n },\n \"isRequired\": true\n },\n {\n \"instance\": {\n \"key\": {\n \"publicId\": \"read_data_layer\",\n \"versionId\": \"1\"\n },\n \"param\": [\n {\n \"key\": \"keyPatterns\",\n \"value\": {\n \"type\": 2,\n \"listItem\": [\n {\n \"type\": 1,\n \"string\": \"gtm.uniqueEventId\"\n }\n ]\n }\n }\n ]\n },\n \"clientAnnotations\": {\n \"isEditedByUser\": true\n },\n \"isRequired\": true\n }\n]\n\n\n___TESTS___\n\nscenarios: []\n\n\n___NOTES___\n\nCreated on 22.4.2022, 10:03:29\n\n\n",
"galleryReference": {
"host": "github.com",
"owner": "mbaersch",
"repository": "event-id",
"version": "1b513f75db715689cc7da724c495c311d29b3354",
"signature": "e6728721e7ae069acbbd6924487fab591ffa3a39727fcc76ec7840329e46928e"
}
},
{
"accountId": "6250428815",
"containerId": "195876113",
"templateId": "13",
"name": "Facebook Pixel",
"fingerprint": "1727090895680",
"templateData": "___TERMS_OF_SERVICE___\n\nBy creating or modifying this file you agree to Google Tag Manager's Community\nTemplate Gallery Developer Terms of Service available at\nhttps://developers.google.com/tag-manager/gallery-tos (or such other URL as\nGoogle may provide), as modified from time to time.\n\n\n___INFO___\n\n{\n \"displayName\": \"Facebook Pixel\",\n \"__wm\": \"VGVtcGxhdGUtQXV0aG9yX0ZhY2Vib29rLVNpbW8tQWhhdmE\\u003d\",\n \"description\": \"This is an unofficial Google Tag Manager template for the Facebook Pixel.\",\n \"securityGroups\": [],\n \"categories\": [\n \"ADVERTISING\",\n \"ANALYTICS\"\n ],\n \"id\": \"cvt_temp_public_id\",\n \"type\": \"TAG\",\n \"version\": 1,\n \"brand\": {\n \"displayName\": \"facebookarchive\",\n \"id\": \"github.com_facebookarchive\",\n \"thumbnail\": \"data:image/png;base64,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\"\n },\n \"containerContexts\": [\n \"WEB\"\n ]\n}\n\n\n___TEMPLATE_PARAMETERS___\n\n[\n {\n \"alwaysInSummary\": true,\n \"valueValidators\": [\n {\n \"errorMessage\": \"You must provide a Pixel ID\",\n \"type\": \"NON_EMPTY\"\n },\n {\n \"args\": [\n \"^[0-9,]+$\"\n ],\n \"errorMessage\": \"Invalid Pixel ID format\",\n \"type\": \"REGEX\"\n }\n ],\n \"displayName\": \"Facebook Pixel ID(s)\",\n \"simpleValueType\": true,\n \"name\": \"pixelId\",\n \"type\": \"TEXT\",\n \"valueHint\": \"e.g. 12345678910\"\n },\n {\n \"type\": \"CHECKBOX\",\n \"name\": \"enhancedEcommerce\",\n \"checkboxText\": \"Enhanced Ecommerce dataLayer Integration\",\n \"simpleValueType\": true,\n \"help\": \"If you check this, then the Facebook pixel will populate \\u003cstrong\\u003eEvent Name\\u003c/strong\\u003e and \\u003cstrong\\u003eObject Properties\\u003c/strong\\u003e automatically from the last \\u003ca href\\u003d\\\"https://developers.google.com/tag-manager/enhanced-ecommerce\\\"\\u003eecommerce\\u003c/a\\u003e object pushed into the dataLayer array.\"\n },\n {\n \"type\": \"RADIO\",\n \"name\": \"eventName\",\n \"displayName\": \"Event Name\",\n \"radioItems\": [\n {\n \"value\": \"standard\",\n \"displayValue\": \"Standard\",\n \"subParams\": [\n {\n \"type\": \"SELECT\",\n \"name\": \"standardEventName\",\n \"macrosInSelect\": false,\n \"selectItems\": [\n {\n \"displayValue\": \"PageView\",\n \"value\": \"PageView\"\n },\n {\n \"displayValue\": \"AddPaymentInfo\",\n \"value\": \"AddPaymentInfo\"\n },\n {\n \"displayValue\": \"AddToCart\",\n \"value\": \"AddToCart\"\n },\n {\n \"displayValue\": \"AddToWishlist\",\n \"value\": \"AddToWishlist\"\n },\n {\n \"displayValue\": \"CompleteRegistration\",\n \"value\": \"CompleteRegistration\"\n },\n {\n \"displayValue\": \"Contact\",\n \"value\": \"Contact\"\n },\n {\n \"displayValue\": \"CustomizeProduct\",\n \"value\": \"CustomizeProduct\"\n },\n {\n \"displayValue\": \"Donate\",\n \"value\": \"Donate\"\n },\n {\n \"displayValue\": \"FindLocation\",\n \"value\": \"FindLocation\"\n },\n {\n \"displayValue\": \"InitiateCheckout\",\n \"value\": \"InitiateCheckout\"\n },\n {\n \"displayValue\": \"Lead\",\n \"value\": \"Lead\"\n },\n {\n \"displayValue\": \"Purchase\",\n \"value\": \"Purchase\"\n },\n {\n \"displayValue\": \"Schedule\",\n \"value\": \"Schedule\"\n },\n {\n \"displayValue\": \"Search\",\n \"value\": \"Search\"\n },\n {\n \"displayValue\": \"StartTrial\",\n \"value\": \"StartTrial\"\n },\n {\n \"displayValue\": \"SubmitApplication\",\n \"value\": \"SubmitApplication\"\n },\n {\n \"displayValue\": \"Subscribe\",\n \"value\": \"Subscribe\"\n },\n {\n \"displayValue\": \"ViewContent\",\n \"value\": \"ViewContent\"\n }\n ],\n \"simpleValueType\": true,\n \"defaultValue\": \"PageView\"\n }\n ]\n },\n {\n \"value\": \"custom\",\n \"displayValue\": \"Custom\",\n \"subParams\": [\n {\n \"type\": \"TEXT\",\n \"name\": \"customEventName\",\n \"displayName\": \"\",\n \"simpleValueType\": true\n }\n ]\n },\n {\n \"value\": \"variable\",\n \"displayValue\": \"Variable\",\n \"subParams\": [\n {\n \"type\": \"SELECT\",\n \"name\": \"variableEventName\",\n \"macrosInSelect\": true,\n \"selectItems\": [],\n \"simpleValueType\": true\n }\n ]\n }\n ],\n \"simpleValueType\": true,\n \"enablingConditions\": [\n {\n \"paramName\": \"enhancedEcommerce\",\n \"paramValue\": true,\n \"type\": \"NOT_EQUALS\"\n }\n ]\n },\n {\n \"type\": \"RADIO\",\n \"name\": \"eecEventName\",\n \"displayName\": \"Event Name\",\n \"radioItems\": [\n {\n \"value\": \"eec\",\n \"displayValue\": \"Set automatically from dataLayer\"\n }\n ],\n \"simpleValueType\": true,\n \"help\": \"The Enhanced Ecommerce integration populates the Event Name automatically depending on what type of \\u003cstrong\\u003eecommerce\\u003c/strong\\u003e object was last pushed into dataLayer (\\\"detail\\\" -\\u003e \\\"ViewContent\\\", \\\"add\\\" -\\u003e \\\"AddToCart\\\", \\\"checkout\\\" -\\u003e \\\"InitiateCheckout\\\", \\\"purchase\\\" -\\u003e \\\"Purchase\\\").\",\n \"enablingConditions\": [\n {\n \"paramName\": \"enhancedEcommerce\",\n \"paramValue\": true,\n \"type\": \"EQUALS\"\n }\n ]\n },\n {\n \"type\": \"SELECT\",\n \"name\": \"consent\",\n \"displayName\": \"Consent Granted (GDPR)\",\n \"macrosInSelect\": true,\n \"selectItems\": [\n {\n \"value\": true,\n \"displayValue\": \"True\"\n },\n {\n \"value\": false,\n \"displayValue\": \"False\"\n }\n ],\n \"simpleValueType\": true,\n \"help\": \"If you set Consent Granted to \\u003cstrong\\u003efalse\\u003c/strong\\u003e, the pixel will not send any hits until a tag is fired where Consent Granted is set to \\u003cstrong\\u003etrue\\u003c/strong\\u003e. See \\u003ca href\\u003d\\\"https://developers.facebook.com/docs/facebook-pixel/implementation/gdpr/\\\"\\u003ethis article\\u003c/a\\u003e for more information.\"\n },\n {\n \"simpleValueType\": true,\n \"name\": \"advancedMatching\",\n \"checkboxText\": \"Enable Advanced Matching\",\n \"type\": \"CHECKBOX\"\n },\n {\n \"type\": \"GROUP\",\n \"name\": \"dataProcessingOptionsGroup\",\n \"displayName\": \"Data Processing Options\",\n \"groupStyle\": \"ZIPPY_CLOSED\",\n \"subParams\": [\n {\n \"type\": \"LABEL\",\n \"name\": \"dpoInfo\",\n \"displayName\": \"Data Processing Options force this Facebook event to comply to regional regulations with regard to the processing and selling of user data. Read \\u003ca href\\u003d\\\"https://developers.facebook.com/docs/marketing-apis/data-processing-options\\\"\\u003ethis\\u003c/a\\u003e for more information about how to configure this section.\"\n },\n {\n \"type\": \"CHECKBOX\",\n \"name\": \"dpoLDU\",\n \"checkboxText\": \"Limited Data Use (LDU)\",\n \"simpleValueType\": true\n },\n {\n \"type\": \"TEXT\",\n \"name\": \"dpoCountry\",\n \"displayName\": \"Country\",\n \"simpleValueType\": true,\n \"defaultValue\": 0,\n \"enablingConditions\": [\n {\n \"paramName\": \"dpoLDU\",\n \"paramValue\": true,\n \"type\": \"EQUALS\"\n }\n ],\n \"valueValidators\": [\n {\n \"type\": \"NUMBER\"\n }\n ]\n },\n {\n \"type\": \"TEXT\",\n \"name\": \"dpoState\",\n \"displayName\": \"State\",\n \"simpleValueType\": true,\n \"defaultValue\": 0,\n \"enablingConditions\": [\n {\n \"paramName\": \"dpoLDU\",\n \"paramValue\": true,\n \"type\": \"EQUALS\"\n }\n ],\n \"valueValidators\": [\n {\n \"type\": \"NUMBER\"\n }\n ]\n }\n ]\n },\n {\n \"enablingConditions\": [\n {\n \"paramName\": \"advancedMatching\",\n \"type\": \"EQUALS\",\n \"paramValue\": true\n }\n ],\n \"displayName\": \"Customer Information Data Parameters\",\n \"name\": \"advancedMatchingGroup\",\n \"groupStyle\": \"ZIPPY_CLOSED\",\n \"type\": \"GROUP\",\n \"subParams\": [\n {\n \"displayName\": \"\",\n \"name\": \"advancedMatchingList\",\n \"simpleTableColumns\": [\n {\n \"selectItems\": [\n {\n \"displayValue\": \"City\",\n \"value\": \"ct\"\n },\n {\n \"displayValue\": \"Country\",\n \"value\": \"cn\"\n },\n {\n \"displayValue\": \"Date of Birth\",\n \"value\": \"db\"\n },\n {\n \"displayValue\": \"Email\",\n \"value\": \"em\"\n },\n {\n \"displayValue\": \"External ID\",\n \"value\": \"external_id\"\n },\n {\n \"displayValue\": \"First Name\",\n \"value\": \"fn\"\n },\n {\n \"displayValue\": \"Gender\",\n \"value\": \"ge\"\n },\n {\n \"displayValue\": \"Last Name\",\n \"value\": \"ln\"\n },\n {\n \"displayValue\": \"Phone\",\n \"value\": \"ph\"\n },\n {\n \"displayValue\": \"State\",\n \"value\": \"st\"\n },\n {\n \"displayValue\": \"Zip Code\",\n \"value\": \"zp\"\n }\n ],\n \"defaultValue\": \"\",\n \"displayName\": \"Parameter name\",\n \"name\": \"name\",\n \"isUnique\": true,\n \"type\": \"SELECT\"\n },\n {\n \"defaultValue\": \"\",\n \"displayName\": \"Parameter value\",\n \"name\": \"value\",\n \"type\": \"TEXT\"\n }\n ],\n \"type\": \"SIMPLE_TABLE\",\n \"newRowButtonText\": \"Add parameter\",\n \"valueValidators\": [\n {\n \"type\": \"NON_EMPTY\"\n }\n ]\n }\n ]\n },\n {\n \"displayName\": \"Object Properties\",\n \"name\": \"objectPropertiesGroup\",\n \"groupStyle\": \"ZIPPY_CLOSED\",\n \"type\": \"GROUP\",\n \"subParams\": [\n {\n \"type\": \"LABEL\",\n \"name\": \"enhancedEcommerceObject\",\n \"displayName\": \"\\u003cstrong\\u003eWarning!\\u003c/strong\\u003e Object properties are populated automatically based on the most recent \\u003cstrong\\u003eecommerce\\u003c/strong\\u003e object pushed into dataLayer. If you add properties here that are already set by the integration (content_type, contents, num_items, value, currency), then the properties you add here will override those set automatically by the integration!\",\n \"enablingConditions\": [\n {\n \"paramName\": \"enhancedEcommerce\",\n \"paramValue\": true,\n \"type\": \"EQUALS\"\n }\n ]\n },\n {\n \"type\": \"SELECT\",\n \"name\": \"objectPropertiesFromVariable\",\n \"displayName\": \"Load Properties From Variable\",\n \"macrosInSelect\": true,\n \"selectItems\": [\n {\n \"value\": false,\n \"displayValue\": \"False\"\n }\n ],\n \"simpleValueType\": true,\n \"help\": \"You can use a variable that returns a JavaScript object with the properties you want to use. This object will be merged with any additional properties you add via the table below. Any conflicts will be resolved in favor of the properties you add to the table.\"\n },\n {\n \"name\": \"objectPropertyList\",\n \"simpleTableColumns\": [\n {\n \"valueValidators\": [],\n \"defaultValue\": \"\",\n \"displayName\": \"Property Name\",\n \"name\": \"name\",\n \"isUnique\": true,\n \"type\": \"TEXT\"\n },\n {\n \"defaultValue\": \"\",\n \"displayName\": \"Property Value\",\n \"name\": \"value\",\n \"type\": \"TEXT\"\n }\n ],\n \"type\": \"SIMPLE_TABLE\",\n \"newRowButtonText\": \"Add property\"\n }\n ]\n },\n {\n \"displayName\": \"More Settings\",\n \"name\": \"moreSettingsGroup\",\n \"groupStyle\": \"ZIPPY_CLOSED\",\n \"type\": \"GROUP\",\n \"subParams\": [\n {\n \"help\": \"Facebook collects some metadata (e.g. structured data) and user interactions (e.g. clicks) automatically. Check this box to disable this automatic configuration of the pixel.\",\n \"simpleValueType\": true,\n \"name\": \"disableAutoConfig\",\n \"checkboxText\": \"Disable Automatic Configuration\",\n \"type\": \"CHECKBOX\"\n },\n {\n \"type\": \"CHECKBOX\",\n \"name\": \"disablePushState\",\n \"checkboxText\": \"Disable History Event Tracking\",\n \"simpleValueType\": true,\n \"help\": \"The Facebook Pixel tracks history events (pushState and replaceState) automatically as PageViews. Check this box to prevent the pixel from tracking such events automatically.\"\n },\n {\n \"type\": \"TEXT\",\n \"name\": \"eventId\",\n \"displayName\": \"Event ID\",\n \"simpleValueType\": true,\n \"help\": \"Set the Event ID parameter in case you are tracking the same event server-side as well. The Event ID can be used to deduplicate the same event if sent from multiple sources. See more \\u003ca href\\u003d\\\"https://developers.facebook.com/docs/marketing-api/conversions-api/deduplicate-pixel-and-server-events/\\\"\\u003ehere\\u003c/a\\u003e.\"\n }\n ]\n }\n]\n\n\n___SANDBOXED_JS_FOR_WEB_TEMPLATE___\n\nconst createQueue = require('createQueue');\nconst callInWindow = require('callInWindow');\nconst aliasInWindow = require('aliasInWindow');\nconst copyFromWindow = require('copyFromWindow');\nconst setInWindow = require('setInWindow');\nconst injectScript = require('injectScript');\nconst makeTableMap = require('makeTableMap');\nconst makeNumber = require('makeNumber');\nconst getType = require('getType');\nconst copyFromDataLayer = require('copyFromDataLayer');\nconst math = require('Math');\nconst log = require('logToConsole');\n\nconst initIds = copyFromWindow('_fbq_gtm_ids') || [];\nconst pixelIds = data.pixelId;\nconst standardEventNames = ['AddPaymentInfo', 'AddToCart', 'AddToWishlist', 'CompleteRegistration', 'Contact', 'CustomizeProduct', 'Donate', 'FindLocation', 'InitiateCheckout', 'Lead', 'PageView', 'Purchase', 'Schedule', 'Search', 'StartTrial', 'SubmitApplication', 'Subscribe', 'ViewContent'];\nconst ecommerce = copyFromDataLayer('ecommerce', 1);\n\n// Helper methods\nconst fail = msg => {\n log(msg);\n data.gtmOnFailure();\n};\n\nconst mergeObj = (obj, obj2) => {\n for (let key in obj2) {\n if (obj2.hasOwnProperty(key)) {\n obj[key] = obj2[key];\n }\n }\n return obj;\n};\n\nconst parseEecObj = prod => {\n return {\n id: prod.id,\n quantity: prod.quantity\n };\n};\n\n// Initialize EEC integration\nlet eventName, action, eecObjectProps;\nif (data.enhancedEcommerce) {\n if (!ecommerce) return fail('Facebook Pixel: No valid \"ecommerce\" object found in dataLayer');\n if (ecommerce.detail) { eventName = 'ViewContent'; action = 'detail'; }\n else if (ecommerce.add) { eventName = 'AddToCart'; action = 'add'; }\n else if (ecommerce.checkout) { eventName = 'InitiateCheckout'; action = 'checkout'; }\n else if (ecommerce.purchase) { eventName = 'Purchase'; action = 'purchase'; }\n else return fail('Facebook Pixel: Most recently pushed \"ecommerce\" object must be one of types \"detail\", \"add\", \"checkout\" or \"purchase\".');\n \n if (!ecommerce[action].products || getType(ecommerce[action].products) !== 'array') return fail('Facebook pixel: Most recently pushed \"ecommerce\" object did not have a valid \"products\" array.');\n eecObjectProps = {\n content_type: 'product',\n contents: ecommerce[action].products.map(parseEecObj),\n value: ecommerce[action].products.reduce((acc, cur) => {\n const curVal = math.round(makeNumber(cur.price || 0) * (cur.quantity || 1) * 100) / 100;\n return acc + curVal;\n }, 0.0),\n currency: ecommerce.currencyCode || 'USD'\n };\n if (['InitiateCheckout', 'Purchase'].indexOf(eventName) > -1) eecObjectProps.num_items = ecommerce[action].products.reduce((acc,cur) => {\n return acc + makeNumber(cur.quantity || 1);\n }, 0);\n}\n\n// Build the fbq() command arguments\nconst cidParams = data.advancedMatchingList && data.advancedMatchingList.length ? makeTableMap(data.advancedMatchingList, 'name', 'value') : {};\nconst objectProps = data.objectPropertyList && data.objectPropertyList.length ? makeTableMap(data.objectPropertyList, 'name', 'value') : {};\nconst objectPropsFromVar = getType(data.objectPropertiesFromVariable) === 'object' ? data.objectPropertiesFromVariable : {};\nconst mergedObjectProps = mergeObj(objectPropsFromVar, objectProps);\nconst finalObjectProps = mergeObj(eecObjectProps || {}, mergedObjectProps);\neventName = eventName || (data.eventName === 'custom' ? data.customEventName : (data.eventName === 'variable' ? data.variableEventName : data.standardEventName));\n\nconst command = standardEventNames.indexOf(eventName) === -1 ? 'trackSingleCustom' : 'trackSingle';\nconst consent = data.consent === false ? 'revoke' : 'grant';\n\n// Utility function to use either fbq.queue[]\n// (if the FB SDK hasn't loaded yet), or fbq.callMethod()\n// if the SDK has loaded.\nconst getFbq = () => {\n // Return the existing 'fbq' global method if available\n let fbq = copyFromWindow('fbq');\n if (fbq) {\n return fbq;\n }\n \n // Initialize the 'fbq' global method to either use\n // fbq.callMethod or fbq.queue)\n setInWindow('fbq', function() { \n const callMethod = copyFromWindow('fbq.callMethod.apply');\n if (callMethod) { \n callInWindow('fbq.callMethod.apply', null, arguments); \n } else { \n callInWindow('fbq.queue.push', arguments);\n }\n });\n aliasInWindow('_fbq', 'fbq');\n \n // Create the fbq.queue\n createQueue('fbq.queue');\n \n // Return the global 'fbq' method, created above\n return copyFromWindow('fbq');\n};\n\n// Get reference to the global method\nconst fbq = getFbq();\n\nfbq('consent', consent);\n\n // Set Data Processing Options\nif (data.dpoLDU) {\n fbq('dataProcessingOptions', ['LDU'], makeNumber(data.dpoCountry), makeNumber(data.dpoState));\n}\n\n// Handle multiple, comma-separated pixel IDs,\n// and initialize each ID if not done already.\npixelIds.split(',').forEach(pixelId => {\n if (initIds.indexOf(pixelId) === -1) {\n \n // If the user has chosen to disable automatic configuration\n if (data.disableAutoConfig) {\n fbq('set', 'autoConfig', false, pixelId);\n }\n \n // If the user has chosen to disable pushState and replaceState tracking\n if (data.disablePushState) {\n setInWindow('fbq.disablePushState', true);\n }\n \t\n \n // Initialize pixel and store in global array\n fbq('init', pixelId, cidParams);\n\n // Monitoring agent string for Tag Setup\n fbq('set','agent','tmSimo-GTM-WebTemplate', pixelId);\n\n initIds.push(pixelId);\n setInWindow('_fbq_gtm_ids', initIds, true);\n \n }\n\n // Call the fbq() method with the parameters defined earlier\n if (data.eventId) {\n fbq(command, pixelId, eventName, finalObjectProps, {eventID: data.eventId});\n } else {\n fbq(command, pixelId, eventName, finalObjectProps);\n }\n});\n\ninjectScript('https://connect.facebook.net/en_US/fbevents.js', data.gtmOnSuccess, data.gtmOnFailure, 'fbPixel');\n\n\n___WEB_PERMISSIONS___\n\n[\n {\n \"instance\": {\n \"key\": {\n \"publicId\": \"access_globals\",\n \"versionId\": \"1\"\n },\n \"param\": [\n {\n \"key\": \"keys\",\n \"value\": {\n \"type\": 2,\n \"listItem\": [\n {\n \"type\": 3,\n \"mapKey\": [\n {\n \"type\": 1,\n \"string\": \"key\"\n },\n {\n \"type\": 1,\n \"string\": \"read\"\n },\n {\n \"type\": 1,\n \"string\": \"write\"\n },\n {\n \"type\": 1,\n \"string\": \"execute\"\n }\n ],\n \"mapValue\": [\n {\n \"type\": 1,\n \"string\": \"fbq\"\n },\n {\n \"type\": 8,\n \"boolean\": true\n },\n {\n \"type\": 8,\n \"boolean\": true\n },\n {\n \"type\": 8,\n \"boolean\": false\n }\n ]\n },\n {\n \"type\": 3,\n \"mapKey\": [\n {\n \"type\": 1,\n \"string\": \"key\"\n },\n {\n \"type\": 1,\n \"string\": \"read\"\n },\n {\n \"type\": 1,\n \"string\": \"write\"\n },\n {\n \"type\": 1,\n \"string\": \"execute\"\n }\n ],\n \"mapValue\": [\n {\n \"type\": 1,\n \"string\": \"_fbq_gtm\"\n },\n {\n \"type\": 8,\n \"boolean\": true\n },\n {\n \"type\": 8,\n \"boolean\": true\n },\n {\n \"type\": 8,\n \"boolean\": false\n }\n ]\n },\n {\n \"type\": 3,\n \"mapKey\": [\n {\n \"type\": 1,\n \"string\": \"key\"\n },\n {\n \"type\": 1,\n \"string\": \"read\"\n },\n {\n \"type\": 1,\n \"string\": \"write\"\n },\n {\n \"type\": 1,\n \"string\": \"execute\"\n }\n ],\n \"mapValue\": [\n {\n \"type\": 1,\n \"string\": \"_fbq\"\n },\n {\n \"type\": 8,\n \"boolean\": false\n },\n {\n \"type\": 8,\n \"boolean\": true\n },\n {\n \"type\": 8,\n \"boolean\": false\n }\n ]\n },\n {\n \"type\": 3,\n \"mapKey\": [\n {\n \"type\": 1,\n \"string\": \"key\"\n },\n {\n \"type\": 1,\n \"string\": \"read\"\n },\n {\n \"type\": 1,\n \"string\": \"write\"\n },\n {\n \"type\": 1,\n \"string\": \"execute\"\n }\n ],\n \"mapValue\": [\n {\n \"type\": 1,\n \"string\": \"_fbq_gtm_ids\"\n },\n {\n \"type\": 8,\n \"boolean\": true\n },\n {\n \"type\": 8,\n \"boolean\": true\n },\n {\n \"type\": 8,\n \"boolean\": false\n }\n ]\n },\n {\n \"type\": 3,\n \"mapKey\": [\n {\n \"type\": 1,\n \"string\": \"key\"\n },\n {\n \"type\": 1,\n \"string\": \"read\"\n },\n {\n \"type\": 1,\n \"string\": \"write\"\n },\n {\n \"type\": 1,\n \"string\": \"execute\"\n }\n ],\n \"mapValue\": [\n {\n \"type\": 1,\n \"string\": \"fbq.callMethod.apply\"\n },\n {\n \"type\": 8,\n \"boolean\": true\n },\n {\n \"type\": 8,\n \"boolean\": false\n },\n {\n \"type\": 8,\n \"boolean\": true\n }\n ]\n },\n {\n \"type\": 3,\n \"mapKey\": [\n {\n \"type\": 1,\n \"string\": \"key\"\n },\n {\n \"type\": 1,\n \"string\": \"read\"\n },\n {\n \"type\": 1,\n \"string\": \"write\"\n },\n {\n \"type\": 1,\n \"string\": \"execute\"\n }\n ],\n \"mapValue\": [\n {\n \"type\": 1,\n \"string\": \"fbq.queue.push\"\n },\n {\n \"type\": 8,\n \"boolean\": false\n },\n {\n \"type\": 8,\n \"boolean\": false\n },\n {\n \"type\": 8,\n \"boolean\": true\n }\n ]\n },\n {\n \"type\": 3,\n \"mapKey\": [\n {\n \"type\": 1,\n \"string\": \"key\"\n },\n {\n \"type\": 1,\n \"string\": \"read\"\n },\n {\n \"type\": 1,\n \"string\": \"write\"\n },\n {\n \"type\": 1,\n \"string\": \"execute\"\n }\n ],\n \"mapValue\": [\n {\n \"type\": 1,\n \"string\": \"fbq.queue\"\n },\n {\n \"type\": 8,\n \"boolean\": true\n },\n {\n \"type\": 8,\n \"boolean\": true\n },\n {\n \"type\": 8,\n \"boolean\": false\n }\n ]\n },\n {\n \"type\": 3,\n \"mapKey\": [\n {\n \"type\": 1,\n \"string\": \"key\"\n },\n {\n \"type\": 1,\n \"string\": \"read\"\n },\n {\n \"type\": 1,\n \"string\": \"write\"\n },\n {\n \"type\": 1,\n \"string\": \"execute\"\n }\n ],\n \"mapValue\": [\n {\n \"type\": 1,\n \"string\": \"fbq.disablePushState\"\n },\n {\n \"type\": 8,\n \"boolean\": true\n },\n {\n \"type\": 8,\n \"boolean\": true\n },\n {\n \"type\": 8,\n \"boolean\": false\n }\n ]\n }\n ]\n }\n }\n ]\n },\n \"clientAnnotations\": {\n \"isEditedByUser\": true\n },\n \"isRequired\": true\n },\n {\n \"instance\": {\n \"key\": {\n \"publicId\": \"inject_script\",\n \"versionId\": \"1\"\n },\n \"param\": [\n {\n \"key\": \"urls\",\n \"value\": {\n \"type\": 2,\n \"listItem\": [\n {\n \"type\": 1,\n \"string\": \"https://connect.facebook.net/en_US/fbevents.js\"\n }\n ]\n }\n }\n ]\n },\n \"clientAnnotations\": {\n \"isEditedByUser\": true\n },\n \"isRequired\": true\n },\n {\n \"instance\": {\n \"key\": {\n \"publicId\": \"logging\",\n \"versionId\": \"1\"\n },\n \"param\": [\n {\n \"key\": \"environments\",\n \"value\": {\n \"type\": 1,\n \"string\": \"debug\"\n }\n }\n ]\n },\n \"isRequired\": true\n },\n {\n \"instance\": {\n \"key\": {\n \"publicId\": \"read_data_layer\",\n \"versionId\": \"1\"\n },\n \"param\": [\n {\n \"key\": \"keyPatterns\",\n \"value\": {\n \"type\": 2,\n \"listItem\": [\n {\n \"type\": 1,\n \"string\": \"ecommerce\"\n }\n ]\n }\n }\n ]\n },\n \"clientAnnotations\": {\n \"isEditedByUser\": true\n },\n \"isRequired\": true\n }\n]\n\n\n___TESTS___\n\nscenarios:\n- name: Library is injected\n code: |-\n // Call runCode to run the template's code.\n runCode(mockData);\n\n // Verify that the tag finished successfully.\n assertApi('injectScript').wasCalledWith(scriptUrl, success, failure, 'fbPixel');\n assertApi('gtmOnSuccess').wasCalled();\n- name: fbq does not exist - method created\n code: |-\n let fbq;\n\n mock('copyFromWindow', key => {\n if (key === 'fbq') return fbq;\n });\n\n mock('createQueue', key => {});\n\n mock('setInWindow', (key, val) => {\n if (key === 'fbq') fbq = val;\n });\n\n // Call runCode to run the template's code.\n runCode(mockData);\n\n // Verify that the tag finished successfully.\n assertApi('aliasInWindow').wasCalledWith('_fbq', 'fbq');\n assertApi('setInWindow').wasCalled();\n assertApi('gtmOnSuccess').wasCalled();\n- name: fbq exists - method copied\n code: |-\n mock('setInWindow', key => {\n if (key === 'fbq') fail('setInWindow called with fbq even though variable exists');\n });\n\n mock('createQueue', key => {});\n\n // Call runCode to run the template's code.\n runCode(mockData);\n\n // Verify that the tag finished successfully.\n assertApi('gtmOnSuccess').wasCalled();\n- name: makeTableMap called\n code: |-\n mockData.advancedMatching = true;\n\n // Call runCode to run the template's code.\n runCode(mockData);\n\n // Verify that the tag finished successfully.\n assertApi('makeTableMap').wasCalledWith(mockData.advancedMatchingList, 'name', 'value');\n assertApi('makeTableMap').wasCalledWith(mockData.objectPropertyList, 'name', 'value');\n assertApi('gtmOnSuccess').wasCalled();\n- name: Consent set\n code: |-\n mock('copyFromWindow', key => {\n if (key === 'fbq') return function() {\n if (arguments[0] === 'consent') {\n assertThat(arguments[1], 'Consent set incorrectly').isEqualTo('grant');\n }\n };\n });\n\n // Call runCode to run the template's code.\n runCode(mockData);\n\n // Verify that the tag finished successfully.\n assertApi('gtmOnSuccess').wasCalled();\n- name: DPO LDU set\n code: |-\n mockData.dpoLDU = true;\n mockData.dpoCountry = '0';\n mockData.dpoState = '0';\n\n mock('copyFromWindow', key => {\n if (key === 'fbq') return function() {\n if (arguments[0] === 'consent') {\n assertThat(arguments[1], 'Consent set incorrectly').isEqualTo('grant');\n }\n if (arguments[0] === 'dataProcessingOptions') {\n assertThat(arguments[1], 'LDU array value not set').isEqualTo(['LDU']);\n assertThat(arguments[2], 'LDU country not set').isEqualTo(0);\n assertThat(arguments[3], 'LDU state not set').isEqualTo(0);\n }\n };\n });\n\n // Call runCode to run the template's code.\n runCode(mockData);\n\n // Verify that the tag finished successfully.\n assertApi('gtmOnSuccess').wasCalled();\n- name: DPO LDU not set\n code: |-\n mock('copyFromWindow', key => {\n if (key === 'fbq') return function() {\n if (arguments[0] === 'consent') {\n assertThat(arguments[1], 'Consent set incorrectly').isEqualTo('grant');\n }\n if (arguments[0] === 'dataProcessingOptions') {\n fail('dataProcessingOptions called even though DPO was not set');\n }\n };\n });\n\n // Call runCode to run the template's code.\n runCode(mockData);\n\n // Verify that the tag finished successfully.\n assertApi('gtmOnSuccess').wasCalled();\n- name: Pixel IDs set - do not initialize\n code: |-\n mock('copyFromWindow', key => {\n if (key === '_fbq_gtm_ids') return ['12345', '23456'];\n if (key === 'fbq') return function() {\n if (arguments[0] === 'init') fail('init called even though pixel IDs already initialized');\n };\n });\n\n // Call runCode to run the template's code.\n runCode(mockData);\n\n // Verify that the tag finished successfully.\n assertApi('gtmOnSuccess').wasCalled();\n- name: Pixel IDs not set - run init process\n code: \"let index = 0;\\nlet count = 0;\\nlet _fbq_gtm_ids;\\n\\nmockData.advancedMatching\\\n \\ = true;\\nmockData.disableAutoConfig = true;\\nmockData.disablePushState = true;\\n\\\n \\nmock('setInWindow', (key, val) => {\\n if (key === 'fbq.disablePushState') count\\\n \\ += 1;\\n if (key === '_fbq_gtm_ids') _fbq_gtm_ids = val;\\n});\\n\\nconst initObj\\\n \\ = {\\n ct: 'Helsinki',\\n cn: 'Finland',\\n external_id: 'UserId'\\n};\\n\\nmock('copyFromWindow',\\\n \\ key => {\\n if (key === 'fbq') return function() {\\n if (arguments[0] ===\\\n \\ 'set' && arguments[1] === 'autoConfig' && arguments[2] === false) {\\n assertThat(arguments[3],\\\n \\ 'autoConfig called with incorrect pixelId').isEqualTo(mockData.pixelId.split(',')[index]);\\n\\\n \\ }\\n if (arguments[0] === 'set' && arguments[1] === 'agent') {\\n assertThat(arguments[2],\\\n \\ 'agent set with invalid value').isEqualTo('tmSimo-GTM-WebTemplate');\\n \\\n \\ assertThat(arguments[3], 'agent set with invalid pixel ID').isEqualTo(mockData.pixelId.split(',')[index]);\\n\\\n \\ index += 1;\\n }\\n if (arguments[0] === 'init') {\\n assertThat(arguments[1],\\\n \\ 'init called with incorrect pixelId').isEqualTo(mockData.pixelId.split(',')[index]);\\n\\\n \\ assertThat(arguments[2], 'init called with incorrect initObj').isEqualTo(initObj);\\n\\\n \\ } \\n };\\n});\\n\\n// Call runCode to run the template's code.\\nrunCode(mockData);\\n\\\n \\nassertThat(_fbq_gtm_ids, '_fbq_gtm_ids has incorrect contents').isEqualTo(mockData.pixelId.split(','));\\n\\\n assertThat(index, 'init called incorrect number of times: ' + index).isEqualTo(2);\\n\\\n assertThat(count, 'fbq.disablePushState called incorrect number of times: ' +\\\n \\ count).isEqualTo(2);\\n\\n// Verify that the tag finished successfully.\\nassertApi('gtmOnSuccess').wasCalled();\"\n- name: Send standard event\n code: \"const eventParams = {\\n prop1: 'val1',\\n prop2: 'val2'\\n};\\n\\nlet index\\\n \\ = 0;\\nmock('copyFromWindow', key => {\\n if (key === 'fbq') return function()\\\n \\ {\\n if (arguments[0] === 'trackSingle') {\\n assertThat(arguments[1],\\\n \\ 'trackSingle called with incorrect pixel ID').isEqualTo(mockData.pixelId.split(',')[index]);\\n\\\n \\ assertThat(arguments[2], 'trackSingle called with incorrect event name').isEqualTo(mockData.standardEventName);\\n\\\n \\ assertThat(arguments[3], 'trackSingle called with incorrect event parameters').isEqualTo(eventParams);\\n\\\n \\ index += 1;\\n }\\n };\\n});\\n \\n// Call runCode to run the template's\\\n \\ code.\\nrunCode(mockData);\\n\\n// Verify that the tag finished successfully.\\n\\\n assertThat(index, 'trackSingle called incorrect number of times').isEqualTo(2);\\n\\\n assertApi('gtmOnSuccess').wasCalled();\"\n- name: Send custom event\n code: \"mockData.eventName = 'custom';\\n\\nconst eventParams = {\\n prop1: 'val1',\\n\\\n \\ prop2: 'val2'\\n};\\n\\nlet index = 0;\\nmock('copyFromWindow', key => {\\n if\\\n \\ (key === 'fbq') return function() {\\n if (arguments[0] === 'trackSingleCustom')\\\n \\ {\\n assertThat(arguments[1], 'trackSingleCustom called with incorrect pixel\\\n \\ ID').isEqualTo(mockData.pixelId.split(',')[index]);\\n assertThat(arguments[2],\\\n \\ 'trackSingleCustom called with incorrect event name').isEqualTo(mockData.customEventName);\\n\\\n \\ assertThat(arguments[3], 'trackSingleCustom called with incorrect event\\\n \\ parameters').isEqualTo(eventParams);\\n index += 1;\\n }\\n };\\n});\\n\\\n \\ \\n// Call runCode to run the template's code.\\nrunCode(mockData);\\n\\n//\\\n \\ Verify that the tag finished successfully.\\nassertThat(index, 'trackSingleCustom\\\n \\ called incorrect number of times').isEqualTo(2);\\nassertApi('gtmOnSuccess').wasCalled();\"\n- name: Send variable event with standard name\n code: \"mockData.eventName = 'variable';\\nmockData.variableEventName = 'PageView';\\n\\\n \\nconst eventParams = {\\n prop1: 'val1',\\n prop2: 'val2'\\n};\\n\\nlet index =\\\n \\ 0;\\nmock('copyFromWindow', key => {\\n if (key === 'fbq') return function()\\\n \\ {\\n if (arguments[0] === 'trackSingle') {\\n assertThat(arguments[1],\\\n \\ 'trackSingle called with incorrect pixel ID').isEqualTo(mockData.pixelId.split(',')[index]);\\n\\\n \\ assertThat(arguments[2], 'trackSingle called with incorrect event name').isEqualTo(mockData.variableEventName);\\n\\\n \\ assertThat(arguments[3], 'trackSingle called with incorrect event parameters').isEqualTo(eventParams);\\n\\\n \\ index += 1;\\n }\\n };\\n});\\n \\n// Call runCode to run the template's\\\n \\ code.\\nrunCode(mockData);\\n\\n// Verify that the tag finished successfully.\\n\\\n assertThat(index, 'trackSingle called incorrect number of times').isEqualTo(2);\\n\\\n assertApi('gtmOnSuccess').wasCalled();\"\n- name: Send variable event with custom name\n code: \"mockData.eventName = 'variable';\\nmockData.variableEventName = 'custom';\\n\\\n \\nconst eventParams = {\\n prop1: 'val1',\\n prop2: 'val2'\\n};\\n\\nlet index =\\\n \\ 0;\\nmock('copyFromWindow', key => {\\n if (key === 'fbq') return function()\\\n \\ {\\n if (arguments[0] === 'trackSingleCustom') {\\n assertThat(arguments[1],\\\n \\ 'trackSingleCustom called with incorrect pixel ID').isEqualTo(mockData.pixelId.split(',')[index]);\\n\\\n \\ assertThat(arguments[2], 'trackSingleCustom called with incorrect event\\\n \\ name').isEqualTo(mockData.variableEventName);\\n assertThat(arguments[3],\\\n \\ 'trackSingleCustom called with incorrect event parameters').isEqualTo(eventParams);\\n\\\n \\ index += 1;\\n }\\n };\\n});\\n \\n// Call runCode to run the template's\\\n \\ code.\\nrunCode(mockData);\\n\\n// Verify that the tag finished successfully.\\n\\\n assertThat(index, 'trackSingleCustom called incorrect number of times').isEqualTo(2);\\n\\\n assertApi('gtmOnSuccess').wasCalled();\"\n- name: Send event parameters from a variable\n code: \"mockData.objectPropertiesFromVariable = {\\n prop1: 'val1',\\n prop2: 'val2'\\n\\\n };\\n\\nlet index = 0;\\nmock('copyFromWindow', key => {\\n if (key === 'fbq') return\\\n \\ function() {\\n if (arguments[0] === 'trackSingle') {\\n assertThat(arguments[1],\\\n \\ 'trackSingle called with incorrect pixel ID').isEqualTo(mockData.pixelId.split(',')[index]);\\n\\\n \\ assertThat(arguments[2], 'trackSingle called with incorrect event name').isEqualTo(mockData.standardEventName);\\n\\\n \\ assertThat(arguments[3], 'trackSingle called with incorrect event parameters').isEqualTo(mockData.objectPropertiesFromVariable);\\n\\\n \\ index += 1;\\n }\\n };\\n});\\n \\n// Call runCode to run the template's\\\n \\ code.\\nrunCode(mockData);\\n\\n// Verify that the tag finished successfully.\\n\\\n assertThat(index, 'trackSingle called incorrect number of times').isEqualTo(2);\\n\\\n assertApi('gtmOnSuccess').wasCalled();\"\n- name: Enhanced Ecommerce integration fails with invalid object\n code: |-\n mockData.enhancedEcommerce = true;\n\n // Call runCode to run the template's code.\n runCode(mockData);\n\n // Verify that the tag finished successfully.\n assertApi('logToConsole').wasCalledWith('Facebook Pixel: No valid \"ecommerce\" object found in dataLayer');\n assertApi('gtmOnFailure').wasCalled();\n assertApi('gtmOnSuccess').wasNotCalled();\n- name: Enhanced Ecommerce integration fails with invalid action\n code: |-\n mockData.enhancedEcommerce = true;\n\n mock('copyFromDataLayer', key => {\n if (key === 'ecommerce') return {\n invalid: true\n };\n });\n\n // Call runCode to run the template's code.\n runCode(mockData);\n\n // Verify that the tag finished successfully.\n assertApi('logToConsole').wasCalledWith('Facebook Pixel: Most recently pushed \"ecommerce\" object must be one of types \"detail\", \"add\", \"checkout\" or \"purchase\".');\n assertApi('gtmOnFailure').wasCalled();\n assertApi('gtmOnSuccess').wasNotCalled();\n- name: Enhanced Ecommerce ViewContent works\n code: \"mockData.enhancedEcommerce = true;\\nmockData.objectPropertyList = {};\\n\\n\\\n mock('copyFromDataLayer', key => {\\n if (key === 'ecommerce') return {\\n currencyCode:\\\n \\ 'EUR',\\n detail: {\\n products: mockEec.gtm.products\\n }\\n };\\n});\\n\\\n \\nlet index = 0;\\nmock('copyFromWindow', key => {\\n if (key === 'fbq') return\\\n \\ function() {\\n if (arguments[0] === 'trackSingle') {\\n assertThat(arguments[1],\\\n \\ 'trackSingle called with incorrect pixel ID').isEqualTo(mockData.pixelId.split(',')[index]);\\n\\\n \\ assertThat(arguments[2], 'trackSingle called with incorrect event name').isEqualTo('ViewContent');\\n\\\n \\ assertThat(arguments[3], 'trackSingle called with incorrect event parameters').isEqualTo(mockEec.fb);\\n\\\n \\ index += 1;\\n }\\n };\\n});\\n \\n// Call runCode to run the template's\\\n \\ code.\\nrunCode(mockData);\\n\\n// Verify that the tag finished successfully.\\n\\\n assertThat(index, 'trackSingle called incorrect number of times').isEqualTo(2);\\n\\\n assertApi('gtmOnSuccess').wasCalled();\"\n- name: Enhanced Ecommerce AddToCart works\n code: \"mockData.enhancedEcommerce = true;\\nmockData.objectPropertyList = {};\\n\\n\\\n mock('copyFromDataLayer', key => {\\n if (key === 'ecommerce') return {\\n currencyCode:\\\n \\ 'EUR',\\n add: {\\n products: mockEec.gtm.products\\n }\\n };\\n});\\n\\\n \\nlet index = 0;\\nmock('copyFromWindow', key => {\\n if (key === 'fbq') return\\\n \\ function() {\\n if (arguments[0] === 'trackSingle') {\\n assertThat(arguments[1],\\\n \\ 'trackSingle called with incorrect pixel ID').isEqualTo(mockData.pixelId.split(',')[index]);\\n\\\n \\ assertThat(arguments[2], 'trackSingle called with incorrect event name').isEqualTo('AddToCart');\\n\\\n \\ assertThat(arguments[3], 'trackSingle called with incorrect event parameters').isEqualTo(mockEec.fb);\\n\\\n \\ index += 1;\\n }\\n };\\n});\\n \\n// Call runCode to run the template's\\\n \\ code.\\nrunCode(mockData);\\n\\n// Verify that the tag finished successfully.\\n\\\n assertThat(index, 'trackSingle called incorrect number of times').isEqualTo(2);\\n\\\n assertApi('gtmOnSuccess').wasCalled();\"\n- name: Enhanced Ecommerce InitiateCheckout works\n code: \"mockData.enhancedEcommerce = true;\\nmockEec.fb.num_items = 3;\\nmockData.objectPropertyList\\\n \\ = {};\\n\\nmock('copyFromDataLayer', key => {\\n if (key === 'ecommerce') return\\\n \\ {\\n currencyCode: 'EUR',\\n checkout: {\\n products: mockEec.gtm.products\\n\\\n \\ }\\n };\\n});\\n\\nlet index = 0;\\nmock('copyFromWindow', key => {\\n if (key\\\n \\ === 'fbq') return function() {\\n if (arguments[0] === 'trackSingle') {\\n\\\n \\ assertThat(arguments[1], 'trackSingle called with incorrect pixel ID').isEqualTo(mockData.pixelId.split(',')[index]);\\n\\\n \\ assertThat(arguments[2], 'trackSingle called with incorrect event name').isEqualTo('InitiateCheckout');\\n\\\n \\ assertThat(arguments[3], 'trackSingle called with incorrect event parameters').isEqualTo(mockEec.fb);\\n\\\n \\ index += 1;\\n }\\n };\\n});\\n \\n// Call runCode to run the template's\\\n \\ code.\\nrunCode(mockData);\\n\\n// Verify that the tag finished successfully.\\n\\\n assertThat(index, 'trackSingle called incorrect number of times').isEqualTo(2);\\n\\\n assertApi('gtmOnSuccess').wasCalled();\"\n- name: Enhanced Ecommerce Purchase works\n code: \"mockData.enhancedEcommerce = true;\\nmockEec.fb.num_items = 3;\\nmockData.objectPropertyList\\\n \\ = {};\\n\\nmock('copyFromDataLayer', key => {\\n if (key === 'ecommerce') return\\\n \\ {\\n currencyCode: 'EUR',\\n purchase: {\\n products: mockEec.gtm.products\\n\\\n \\ }\\n };\\n});\\n\\nlet index = 0;\\nmock('copyFromWindow', key => {\\n if (key\\\n \\ === 'fbq') return function() {\\n if (arguments[0] === 'trackSingle') {\\n\\\n \\ assertThat(arguments[1], 'trackSingle called with incorrect pixel ID').isEqualTo(mockData.pixelId.split(',')[index]);\\n\\\n \\ assertThat(arguments[2], 'trackSingle called with incorrect event name').isEqualTo('Purchase');\\n\\\n \\ assertThat(arguments[3], 'trackSingle called with incorrect event parameters').isEqualTo(mockEec.fb);\\n\\\n \\ index += 1;\\n }\\n };\\n});\\n \\n// Call runCode to run the template's\\\n \\ code.\\nrunCode(mockData);\\n\\n// Verify that the tag finished successfully.\\n\\\n assertThat(index, 'trackSingle called incorrect number of times').isEqualTo(2);\\n\\\n assertApi('gtmOnSuccess').wasCalled();\"\n- name: Object merge with variable and list works\n code: \"mockData.objectPropertiesFromVariable = {\\n prop1: 'var1',\\n prop2: 'var2',\\n\\\n \\ prop3: 'var3'\\n};\\n\\nconst expected = {\\n prop1: 'val1',\\n prop2: 'val2',\\n\\\n \\ prop3: 'var3'\\n};\\n\\nlet index = 0;\\nmock('copyFromWindow', key => {\\n if\\\n \\ (key === 'fbq') return function() {\\n if (arguments[0] === 'trackSingle')\\\n \\ {\\n assertThat(arguments[1], 'trackSingle called with incorrect pixel ID').isEqualTo(mockData.pixelId.split(',')[index]);\\n\\\n \\ assertThat(arguments[2], 'trackSingle called with incorrect event name').isEqualTo('PageView');\\n\\\n \\ assertThat(arguments[3], 'trackSingle called with incorrect event parameters').isEqualTo(expected);\\n\\\n \\ index += 1;\\n }\\n };\\n});\\n \\n// Call runCode to run the template's\\\n \\ code.\\nrunCode(mockData);\\n\\n// Verify that the tag finished successfully.\\n\\\n assertThat(index, 'trackSingle called incorrect number of times').isEqualTo(2);\\n\\\n assertApi('gtmOnSuccess').wasCalled();\"\n- name: Object merge with variable, list and eec works\n code: \"mockData.enhancedEcommerce = true;\\nmockData.objectPropertiesFromVariable\\\n \\ = {\\n content_type: 'product_group'\\n};\\nmockData.objectPropertyList = [{\\n\\\n \\ name: 'currency',\\n value: 'USD'\\n}];\\nmockEec.fb.num_items = 3;\\nmockEec.fb.content_type\\\n \\ = 'product_group';\\nmockEec.fb.currency = 'USD';\\n\\nmock('copyFromDataLayer',\\\n \\ key => {\\n if (key === 'ecommerce') return {\\n currencyCode: 'EUR',\\n \\\n \\ purchase: {\\n products: mockEec.gtm.products\\n }\\n };\\n});\\n\\nlet\\\n \\ index = 0;\\nmock('copyFromWindow', key => {\\n if (key === 'fbq') return function()\\\n \\ {\\n if (arguments[0] === 'trackSingle') {\\n assertThat(arguments[1],\\\n \\ 'trackSingle called with incorrect pixel ID').isEqualTo(mockData.pixelId.split(',')[index]);\\n\\\n \\ assertThat(arguments[2], 'trackSingle called with incorrect event name').isEqualTo('Purchase');\\n\\\n \\ assertThat(arguments[3], 'trackSingle called with incorrect event parameters').isEqualTo(mockEec.fb);\\n\\\n \\ index += 1;\\n }\\n };\\n});\\n \\n// Call runCode to run the template's\\\n \\ code.\\nrunCode(mockData);\\n\\n// Verify that the tag finished successfully.\\n\\\n assertThat(index, 'trackSingle called incorrect number of times').isEqualTo(2);\\n\\\n assertApi('gtmOnSuccess').wasCalled();\"\n- name: Send event ID\n code: \"mockData.eventId = 'eventId';\\n\\nmock('copyFromWindow', key => {\\n if (key\\\n \\ === 'fbq') return function() {\\n if (arguments[0] === 'trackSingle') {\\n\\\n \\ assertThat(arguments[4], 'eventID not included in hit').isEqualTo({eventID:\\\n \\ mockData.eventId});\\n }\\n };\\n});\\n \\n// Call runCode to run the template's\\\n \\ code.\\nrunCode(mockData);\\n\\n// Verify that the tag finished successfully.\\n\\\n assertApi('gtmOnSuccess').wasCalled();\"\nsetup: \"const mockData = {\\n pixelId: '12345,23456',\\n eventName: 'standard',\\n\\\n \\ standardEventName: 'PageView',\\n customEventName: 'custom',\\n variableEventName:\\\n \\ 'standard',\\n consent: true,\\n advancedMatching: false,\\n advancedMatchingList:\\\n \\ [{name: 'ct', value: 'Helsinki'},{name: 'cn', value: 'Finland'},{name: 'external_id',\\\n \\ value: 'UserId'}],\\n objectPropertiesFromVariable: false,\\n objectPropertyList:\\\n \\ [{name: 'prop1', value: 'val1'},{name: 'prop2', value: 'val2'}],\\n disableAutoConfig:\\\n \\ false,\\n disablePushState: false,\\n enhancedEcommerce: false,\\n eventId: ''\\n\\\n };\\n\\nconst mockEec = {\\n gtm: { \\n products: [{\\n id: 'i1',\\n name:\\\n \\ 'n1',\\n category: 'c1',\\n price: '1.00',\\n quantity: 1\\n },{\\n\\\n \\ id: 'i2',\\n name: 'n2',\\n category: 'c2',\\n price: '2.00',\\n\\\n \\ quantity: 2\\n }]\\n },\\n fb: {\\n content_type: 'product',\\n contents:\\\n \\ [{\\n id: 'i1',\\n quantity: 1\\n },{\\n id: 'i2',\\n quantity:\\\n \\ 2\\n }],\\n currency: 'EUR',\\n value: 5.00\\n }\\n};\\n\\nconst scriptUrl\\\n \\ = 'https://connect.facebook.net/en_US/fbevents.js';\\n\\n// Create injectScript\\\n \\ mock\\nlet success, failure;\\nmock('injectScript', (url, onsuccess, onfailure)\\\n \\ => {\\n success = onsuccess;\\n failure = onfailure;\\n onsuccess();\\n});\\n\\n\\\n mock('copyFromWindow', key => {\\n if (key === 'fbq') return () => {};\\n});\"\n\n\n___NOTES___\n\nCreated on 18/05/2019, 21:57:16\n\n\n",
"galleryReference": {
"host": "github.com",
"owner": "facebookarchive",
"repository": "GoogleTagManager-WebTemplate-For-FacebookPixel",
"version": "11c004614f6b8f7cc999caabef521086116ce302",
"signature": "de30f66e675f24ef8640cea7175b615c94807fa8f027929f94c3d0b45a520d86"
}
},
{
"accountId": "6250428815",
"containerId": "195876113",
"templateId": "29",
"name": "Data to GTM Server Side",
"fingerprint": "1727090895690",
"templateData": "___INFO___\n\n{\n \"type\": \"TAG\",\n \"id\": \"cvt_temp_public_id\",\n \"version\": 1,\n \"securityGroups\": [],\n \"displayName\": \"Data to GTM Server Side\",\n \"categories\": [\n \"ANALYTICS\",\n \"CONVERSIONS\"\n ],\n \"brand\": {\n \"id\": \"brand_dummy\",\n \"displayName\": \"GTM Server\",\n \"thumbnail\": \"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEBLAEsAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQICAQECAQEBAgICAgICAgICAQICAgICAgICAgL/2wBDAQEBAQEBAQEBAQECAQEBAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL/wAARCAEAAQADAREAAhEBAxEB/8QAHwABAAIBBAMBAAAAAAAAAAAAAAIEBQMGCAoBBwkL/8QAUhAAAAUBAwYFEQcDAgUCBwAAAAECAwQFBgcRCBITMUHBIWFygdEJFCIyM0JRUnF0kZKhsbKz4QojU1TS0/AVk5QkKBYXGDdiJ0M0R0hngqLC/8QAHQEBAAICAwEBAAAAAAAAAAAAAAECAwcEBggFCf/EAFMRAAEDAQMFCgkJBQYGAQUAAAEAAgMRBAUSBhMhMVEiMkFSYXGBobHBBxQjM0Jyc5HRFkNTYpKiwtLwFYLT4eIkJURVo/EINEVUY5OyZIOEs8P/2gAMAwEAAhEDEQA/APgE73aR5zJ+e4P0WZvQvyTl847o7AoCyxoCICICICICICICICICICICICICICICICICICICICICICICICICICICICICKbfdG+Wn4iFX7x3MexSNfQexHe7SPOZPz3AZvQry+cd0dgUBZY0BEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBFNvujfLT8RCr947mPYpGvoPYjvdpHnMn57gM3oV5fOO6OwKAssaAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAim33Rvlp+IhV+8dzHsUjX0HsR3u0jzmT89wGb0K8vnHdHYFAWWNARARARARARARARARARARARARARARARARARARARARARARARARARARARARARTb7o3y0/EQq/eO5j2KRr6D2I73aR5zJ+e4DN6FeXzjujsCgLLGgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIpt90b5afiIVfvHcx7FI19B7Ed7tI85k/PcBm9CvL5x3R2BQFljQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEU2+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\"\n },\n \"description\": \"Use this tag for sending data to the Server Container.\",\n \"containerContexts\": [\n \"WEB\"\n ]\n}\n\n\n___TEMPLATE_PARAMETERS___\n\n[\n {\n \"type\": \"RADIO\",\n \"name\": \"event_type\",\n \"displayName\": \"Event Name\",\n \"radioItems\": [\n {\n \"value\": \"standard\",\n \"displayValue\": \"Standard\",\n \"subParams\": [\n {\n \"type\": \"SELECT\",\n \"name\": \"event_name_standard\",\n \"selectItems\": [\n {\n \"value\": \"page_view\",\n \"displayValue\": \"Page View\"\n },\n {\n \"value\": \"add_payment_info\",\n \"displayValue\": \"Add Payment Info\"\n },\n {\n \"value\": \"add_to_cart\",\n \"displayValue\": \"Add To Cart\"\n },\n {\n \"value\": \"add_to_wishlist\",\n \"displayValue\": \"Add To Wishlist\"\n },\n {\n \"value\": \"begin_checkout\",\n \"displayValue\": \"Begin Checkout\"\n },\n {\n \"value\": \"contact\",\n \"displayValue\": \"Contact\"\n },\n {\n \"value\": \"customize_product\",\n \"displayValue\": \"Customize Product\"\n },\n {\n \"value\": \"donate\",\n \"displayValue\": \"Donate\"\n },\n {\n \"value\": \"exception\",\n \"displayValue\": \"Exception\"\n },\n {\n \"value\": \"find_location\",\n \"displayValue\": \"Find Location\"\n },\n {\n \"value\": \"generate_lead\",\n \"displayValue\": \"Generate Lead\"\n },\n {\n \"value\": \"join_group\",\n \"displayValue\": \"Join Group\"\n },\n {\n \"value\": \"login\",\n \"displayValue\": \"Login\"\n },\n {\n \"value\": \"purchase\",\n \"displayValue\": \"Purchase\"\n },\n {\n \"value\": \"refund\",\n \"displayValue\": \"Refund\"\n },\n {\n \"value\": \"schedule\",\n \"displayValue\": \"Schedule\"\n },\n {\n \"value\": \"search\",\n \"displayValue\": \"Search\"\n },\n {\n \"value\": \"select_content\",\n \"displayValue\": \"Select Content\"\n },\n {\n \"value\": \"share\",\n \"displayValue\": \"Share\"\n },\n {\n \"value\": \"sign_up\",\n \"displayValue\": \"Sign Up\"\n },\n {\n \"value\": \"start_trial\",\n \"displayValue\": \"Start Trial\"\n },\n {\n \"value\": \"submit_application\",\n \"displayValue\": \"Submit Application\"\n },\n {\n \"value\": \"subscribe\",\n \"displayValue\": \"Subscribe\"\n },\n {\n \"value\": \"view_item\",\n \"displayValue\": \"View Item\"\n },\n {\n \"value\": \"view_item_list\",\n \"displayValue\": \"View Item List\"\n },\n {\n \"value\": \"view_search_results\",\n \"displayValue\": \"View Search Results\"\n }\n ],\n \"simpleValueType\": true,\n \"defaultValue\": \"page_view\"\n }\n ]\n },\n {\n \"value\": \"custom\",\n \"displayValue\": \"Custom\",\n \"subParams\": [\n {\n \"type\": \"TEXT\",\n \"name\": \"event_name_custom\",\n \"simpleValueType\": true\n }\n ]\n }\n ],\n \"simpleValueType\": true\n },\n {\n \"type\": \"TEXT\",\n \"name\": \"gtm_server_domain\",\n \"displayName\": \"GTM Server Side URL\",\n \"simpleValueType\": true,\n \"help\": \"Domain to where the tag will send requests. For example https://gtm.example.com\",\n \"valueValidators\": [\n {\n \"type\": \"NON_EMPTY\"\n },\n {\n \"type\": \"REGEX\",\n \"args\": [\n \"^(https://).*\"\n ],\n \"errorMessage\": \"URL must start with https://\"\n }\n ],\n \"alwaysInSummary\": true\n },\n {\n \"type\": \"TEXT\",\n \"name\": \"gtm_server_preview_header\",\n \"displayName\": \"GTM Server Preview HTTP header\",\n \"simpleValueType\": true,\n \"help\": \"Provide a \\u003cb\\u003eX-Gtm-Server-Preview HTTP header\\u003c/b\\u003e if you want to test incoming events in the GTM Sever side debuger. You can find it by clicking the three dots in the top right corner of Google Tag Manager Server container preview mode and choose the \\\"Send requests manually\\\".\"\n },\n {\n \"type\": \"CHECKBOX\",\n \"name\": \"add_data_layer\",\n \"checkboxText\": \"Send all from DataLayer\",\n \"simpleValueType\": true,\n \"help\": \"Adds all Data Layer values to the request\"\n },\n {\n \"type\": \"CHECKBOX\",\n \"name\": \"add_common\",\n \"checkboxText\": \"Send common data\",\n \"simpleValueType\": true,\n \"help\": \"Adds to request page_location, page_path, page_hostname, page_referrer, page_title, page_encoding, screen_resolution, viewport_size\"\n },\n {\n \"type\": \"GROUP\",\n \"name\": \"custom\",\n \"displayName\": \"Event Data\",\n \"groupStyle\": \"ZIPPY_CLOSED\",\n \"subParams\": [\n {\n \"type\": \"SIMPLE_TABLE\",\n \"name\": \"custom_data\",\n \"displayName\": \"\",\n \"simpleTableColumns\": [\n {\n \"defaultValue\": \"\",\n \"displayName\": \"Name\",\n \"name\": \"name\",\n \"type\": \"TEXT\",\n \"valueValidators\": [\n {\n \"type\": \"NON_EMPTY\"\n }\n ]\n },\n {\n \"defaultValue\": \"\",\n \"displayName\": \"Value\",\n \"name\": \"value\",\n \"type\": \"TEXT\"\n },\n {\n \"defaultValue\": \"none\",\n \"displayName\": \"Transformation\",\n \"name\": \"transformation\",\n \"type\": \"SELECT\",\n \"selectItems\": [\n {\n \"value\": \"none\",\n \"displayValue\": \"None\"\n },\n {\n \"value\": \"trim\",\n \"displayValue\": \"Trim\"\n },\n {\n \"value\": \"to_lower_case\",\n \"displayValue\": \"To lower case\"\n },\n {\n \"value\": \"md5\",\n \"displayValue\": \"To MD5 hash\"\n }\n ],\n \"valueValidators\": [\n {\n \"type\": \"NON_EMPTY\"\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"type\": \"GROUP\",\n \"name\": \"user\",\n \"displayName\": \"User Data\",\n \"groupStyle\": \"ZIPPY_CLOSED\",\n \"subParams\": [\n {\n \"type\": \"SIMPLE_TABLE\",\n \"name\": \"user_data\",\n \"displayName\": \"\",\n \"simpleTableColumns\": [\n {\n \"defaultValue\": \"email_address\",\n \"displayName\": \"Name\",\n \"name\": \"name\",\n \"type\": \"SELECT\",\n \"valueValidators\": [\n {\n \"type\": \"NON_EMPTY\"\n }\n ],\n \"isUnique\": true,\n \"selectItems\": [\n {\n \"value\": \"email_address\",\n \"displayValue\": \"Email Address\"\n },\n {\n \"value\": \"phone_number\",\n \"displayValue\": \"Phone Number\"\n },\n {\n \"value\": \"first_name\",\n \"displayValue\": \"First Name\"\n },\n {\n \"value\": \"last_name\",\n \"displayValue\": \"Last Name\"\n },\n {\n \"value\": \"gender\",\n \"displayValue\": \"Gender\"\n },\n {\n \"value\": \"db\",\n \"displayValue\": \"Date of Birth\"\n },\n {\n \"value\": \"street\",\n \"displayValue\": \"Street\"\n },\n {\n \"value\": \"city\",\n \"displayValue\": \"City\"\n },\n {\n \"value\": \"region\",\n \"displayValue\": \"Region\"\n },\n {\n \"value\": \"postal_code\",\n \"displayValue\": \"Postal Code\"\n },\n {\n \"value\": \"country\",\n \"displayValue\": \"Country\"\n },\n {\n \"value\": \"user_id\",\n \"displayValue\": \"User ID\"\n }\n ]\n },\n {\n \"defaultValue\": \"\",\n \"displayName\": \"Value\",\n \"name\": \"value\",\n \"type\": \"TEXT\"\n },\n {\n \"defaultValue\": \"none\",\n \"displayName\": \"Transformation\",\n \"name\": \"transformation\",\n \"type\": \"SELECT\",\n \"selectItems\": [\n {\n \"value\": \"none\",\n \"displayValue\": \"None\"\n },\n {\n \"value\": \"trim\",\n \"displayValue\": \"Trim\"\n },\n {\n \"value\": \"to_lower_case\",\n \"displayValue\": \"To lower case\"\n },\n {\n \"value\": \"md5\",\n \"displayValue\": \"To MD5 hash\"\n }\n ],\n \"valueValidators\": [\n {\n \"type\": \"NON_EMPTY\"\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"type\": \"GROUP\",\n \"name\": \"settings\",\n \"displayName\": \"Settings\",\n \"groupStyle\": \"ZIPPY_CLOSED\",\n \"subParams\": [\n {\n \"type\": \"SELECT\",\n \"name\": \"request_type\",\n \"displayName\": \"Request type\",\n \"macrosInSelect\": false,\n \"selectItems\": [\n {\n \"value\": \"post\",\n \"displayValue\": \"POST\"\n },\n {\n \"value\": \"get\",\n \"displayValue\": \"GET\"\n }\n ],\n \"simpleValueType\": true,\n \"defaultValue\": \"post\",\n \"valueValidators\": [\n {\n \"type\": \"NON_EMPTY\"\n }\n ],\n \"help\": \"We highly recommend using \\u003cb\\u003ePOST\\u003c/b\\u003e for sending data. Change this only if you know what you do.\"\n },\n {\n \"type\": \"TEXT\",\n \"name\": \"request_path\",\n \"displayName\": \"Path\",\n \"simpleValueType\": true,\n \"defaultValue\": \"/data\",\n \"help\": \"The path used for sending requests to the GTM Server Side container. If you use Data client on GTM Server Side Path should be \\u003cb\\u003e/data\\u003c/b\\u003e\",\n \"valueValidators\": [\n {\n \"type\": \"NON_EMPTY\"\n }\n ]\n },\n {\n \"type\": \"TEXT\",\n \"name\": \"protocol_version\",\n \"displayName\": \"Protocol version\",\n \"simpleValueType\": true,\n \"defaultValue\": 1,\n \"help\": \"Protocol version that used for sending a request to Data client on GTM Server Side.\",\n \"valueValidators\": [\n {\n \"type\": \"NON_EMPTY\"\n }\n ]\n }\n ]\n }\n]\n\n\n___SANDBOXED_JS_FOR_WEB_TEMPLATE___\n\nconst copyFromDataLayer = require('copyFromDataLayer');\nconst copyFromWindow = require('copyFromWindow');\nconst JSON = require('JSON');\nconst getUrl = require('getUrl');\nconst getReferrerUrl = require('getReferrerUrl');\nconst readTitle = require('readTitle');\nconst injectScript = require('injectScript');\nconst callInWindow = require('callInWindow');\nconst queryPermission = require('queryPermission');\nconst makeNumber = require('makeNumber');\nconst readCharacterSet = require('readCharacterSet');\nconst localStorage = require('localStorage');\nconst sendPixel = require('sendPixel');\nconst encodeUriComponent = require('encodeUriComponent');\n\nif (data.request_type === 'post') {\n const dataTagScriptUrl = 'https://cdn.gtm-server.com/dtag.js';\n\n if (queryPermission('inject_script', dataTagScriptUrl)) {\n injectScript(dataTagScriptUrl, sendPostRequest, data.gtmOnFailure, dataTagScriptUrl);\n } else {\n data.gtmOnFailure();\n }\n} else {\n sendGetRequest();\n}\n\nfunction sendPostRequest() {\n let eventData = {};\n\n eventData = addDataLayerDataForPostRequest(data, eventData);\n eventData = addCommonDataForPostRequest(data, eventData);\n eventData = addRequiredDataForPostRequest(data, eventData);\n\n callInWindow('dataTagSendData', eventData, buildEndpoint(), data.gtm_server_preview_header);\n data.gtmOnSuccess();\n}\n\nfunction sendGetRequest() {\n let url = buildEndpoint();\n\n url = addRequiredDataForGetRequest(data, url);\n url = addCommonDataForGetRequest(data, url);\n\n sendPixel(url, data.gtmOnSuccess, data.gtmOnFailure);\n}\n\nfunction getDtclid() {\n if (localStorage) {\n const dtclid = localStorage.getItem('dtclid');\n\n return dtclid ? dtclid : '';\n }\n\n return '';\n}\n\nfunction buildEndpoint() {\n return data.gtm_server_domain + data.request_path;\n}\n\nfunction addRequiredDataForPostRequest(data, eventData) {\n eventData.event_name = getEventName(data);\n eventData.protocol_version = makeNumber(data.protocol_version);\n eventData.data_tag = true;\n eventData.data_tag_custom_data = getCustomData(data, true);\n eventData.dtclid = getDtclid();\n\n return eventData;\n}\n\nfunction addRequiredDataForGetRequest(data, url) {\n url = url + '?event_name=' + encodeUriComponent(getEventName(data)) + '&dtclid=' + encodeUriComponent(getDtclid()) + '&v=' + makeNumber(data.protocol_version);\n\n let customData = getCustomData(data, false);\n\n if (customData.length) {\n for (let customDataKey in customData) {\n url = url + '&' + customData[customDataKey].name + '=' + encodeUriComponent(customData[customDataKey].value);\n }\n }\n\n return url;\n}\n\nfunction addDataLayerDataForPostRequest(data, eventData) {\n if (data.add_data_layer) {\n const gtmId = copyFromDataLayer('gtm.uniqueEventId');\n const dataLayer = copyFromWindow('dataLayer');\n\n if (dataLayer && gtmId) {\n let obj = dataLayer.map(o => {\n if (o['gtm.uniqueEventId']) return o;\n\n o = JSON.parse(JSON.stringify(o));\n\n for (let prop in o) {\n return o[prop];\n }\n }).filter(o => {\n if (o['gtm.uniqueEventId'] === gtmId) return true;\n });\n\n if (obj.length) {\n obj = obj[0];\n\n for (let objKey in obj) {\n eventData[objKey] = obj[objKey];\n }\n }\n }\n\n }\n\n return eventData;\n}\n\nfunction addCommonDataForPostRequest(data, eventData) {\n if (data.add_common) {\n const dataTagData = callInWindow('dataTagGetData');\n\n eventData = addCommonData(data, eventData);\n eventData.screen_resolution = dataTagData.screen.width + 'x' + dataTagData.screen.height;\n eventData.viewport_size = dataTagData.innerWidth + 'x' + dataTagData.innerHeight;\n }\n\n return eventData;\n}\n\nfunction addCommonDataForGetRequest(data, url) {\n if (data.add_common) {\n let eventData = {};\n eventData = addCommonData(data, eventData);\n\n for (let eventDataKey in eventData) {\n url = url + '&' + eventDataKey + '=' + encodeUriComponent(eventData[eventDataKey]);\n }\n }\n\n return url;\n}\n\nfunction addCommonData(data, eventData) {\n eventData.page_location = getUrl();\n eventData.page_path = getUrl('path');\n eventData.page_hostname = getUrl('host');\n eventData.page_referrer = getReferrerUrl();\n eventData.page_title = readTitle();\n eventData.page_encoding = readCharacterSet();\n\n return eventData;\n}\n\nfunction getEventName(data) {\n let eventName = 'page_view';\n\n if (data.event_type === 'standard') {\n return data.event_name_standard ? data.event_name_standard : eventName;\n }\n\n if (data.event_type === 'custom') {\n return data.event_name_custom ? data.event_name_custom : eventName;\n }\n\n return eventName;\n}\n\nfunction getCustomData(data, dtagLoaded) {\n let customData = [];\n\n if (data.custom_data && data.custom_data.length) {\n customData = data.custom_data;\n }\n\n if (data.user_data && data.user_data.length) {\n for (let userDataKey in data.user_data) {\n customData.push(data.user_data[userDataKey]);\n }\n }\n\n for (let dataKey in customData) {\n let dataValue = customData[dataKey].value;\n let dataTransformation = customData[dataKey].transformation;\n\n if (dataTransformation === 'trim') {\n dataValue = dataValue.trim();\n }\n\n if (dataTransformation === 'to_lower_case') {\n dataValue = dataValue.trim().toLocaleLowerCase();\n }\n\n if (dtagLoaded && dataTransformation === 'md5') {\n dataValue = callInWindow('dataTagMD5', dataValue.trim().toLocaleLowerCase());\n }\n\n customData[dataKey].value = dataValue;\n }\n\n return customData;\n}\n\n\n___WEB_PERMISSIONS___\n\n[\n {\n \"instance\": {\n \"key\": {\n \"publicId\": \"access_globals\",\n \"versionId\": \"1\"\n },\n \"param\": [\n {\n \"key\": \"keys\",\n \"value\": {\n \"type\": 2,\n \"listItem\": [\n {\n \"type\": 3,\n \"mapKey\": [\n {\n \"type\": 1,\n \"string\": \"key\"\n },\n {\n \"type\": 1,\n \"string\": \"read\"\n },\n {\n \"type\": 1,\n \"string\": \"write\"\n },\n {\n \"type\": 1,\n \"string\": \"execute\"\n }\n ],\n \"mapValue\": [\n {\n \"type\": 1,\n \"string\": \"dataLayer\"\n },\n {\n \"type\": 8,\n \"boolean\": true\n },\n {\n \"type\": 8,\n \"boolean\": false\n },\n {\n \"type\": 8,\n \"boolean\": false\n }\n ]\n },\n {\n \"type\": 3,\n \"mapKey\": [\n {\n \"type\": 1,\n \"string\": \"key\"\n },\n {\n \"type\": 1,\n \"string\": \"read\"\n },\n {\n \"type\": 1,\n \"string\": \"write\"\n },\n {\n \"type\": 1,\n \"string\": \"execute\"\n }\n ],\n \"mapValue\": [\n {\n \"type\": 1,\n \"string\": \"dataTagSendData\"\n },\n {\n \"type\": 8,\n \"boolean\": true\n },\n {\n \"type\": 8,\n \"boolean\": true\n },\n {\n \"type\": 8,\n \"boolean\": true\n }\n ]\n },\n {\n \"type\": 3,\n \"mapKey\": [\n {\n \"type\": 1,\n \"string\": \"key\"\n },\n {\n \"type\": 1,\n \"string\": \"read\"\n },\n {\n \"type\": 1,\n \"string\": \"write\"\n },\n {\n \"type\": 1,\n \"string\": \"execute\"\n }\n ],\n \"mapValue\": [\n {\n \"type\": 1,\n \"string\": \"dataTagGetData\"\n },\n {\n \"type\": 8,\n \"boolean\": true\n },\n {\n \"type\": 8,\n \"boolean\": true\n },\n {\n \"type\": 8,\n \"boolean\": true\n }\n ]\n },\n {\n \"type\": 3,\n \"mapKey\": [\n {\n \"type\": 1,\n \"string\": \"key\"\n },\n {\n \"type\": 1,\n \"string\": \"read\"\n },\n {\n \"type\": 1,\n \"string\": \"write\"\n },\n {\n \"type\": 1,\n \"string\": \"execute\"\n }\n ],\n \"mapValue\": [\n {\n \"type\": 1,\n \"string\": \"dataTagData\"\n },\n {\n \"type\": 8,\n \"boolean\": true\n },\n {\n \"type\": 8,\n \"boolean\": true\n },\n {\n \"type\": 8,\n \"boolean\": false\n }\n ]\n },\n {\n \"type\": 3,\n \"mapKey\": [\n {\n \"type\": 1,\n \"string\": \"key\"\n },\n {\n \"type\": 1,\n \"string\": \"read\"\n },\n {\n \"type\": 1,\n \"string\": \"write\"\n },\n {\n \"type\": 1,\n \"string\": \"execute\"\n }\n ],\n \"mapValue\": [\n {\n \"type\": 1,\n \"string\": \"dataTagMD5\"\n },\n {\n \"type\": 8,\n \"boolean\": true\n },\n {\n \"type\": 8,\n \"boolean\": true\n },\n {\n \"type\": 8,\n \"boolean\": true\n }\n ]\n }\n ]\n }\n }\n ]\n },\n \"clientAnnotations\": {\n \"isEditedByUser\": true\n },\n \"isRequired\": true\n },\n {\n \"instance\": {\n \"key\": {\n \"publicId\": \"get_referrer\",\n \"versionId\": \"1\"\n },\n \"param\": [\n {\n \"key\": \"urlParts\",\n \"value\": {\n \"type\": 1,\n \"string\": \"any\"\n }\n },\n {\n \"key\": \"queriesAllowed\",\n \"value\": {\n \"type\": 1,\n \"string\": \"any\"\n }\n }\n ]\n },\n \"isRequired\": true\n },\n {\n \"instance\": {\n \"key\": {\n \"publicId\": \"read_data_layer\",\n \"versionId\": \"1\"\n },\n \"param\": [\n {\n \"key\": \"keyPatterns\",\n \"value\": {\n \"type\": 2,\n \"listItem\": [\n {\n \"type\": 1,\n \"string\": \"gtm.uniqueEventId\"\n }\n ]\n }\n }\n ]\n },\n \"clientAnnotations\": {\n \"isEditedByUser\": true\n },\n \"isRequired\": true\n },\n {\n \"instance\": {\n \"key\": {\n \"publicId\": \"read_title\",\n \"versionId\": \"1\"\n },\n \"param\": []\n },\n \"isRequired\": true\n },\n {\n \"instance\": {\n \"key\": {\n \"publicId\": \"get_url\",\n \"versionId\": \"1\"\n },\n \"param\": [\n {\n \"key\": \"urlParts\",\n \"value\": {\n \"type\": 1,\n \"string\": \"any\"\n }\n },\n {\n \"key\": \"queriesAllowed\",\n \"value\": {\n \"type\": 1,\n \"string\": \"any\"\n }\n }\n ]\n },\n \"isRequired\": true\n },\n {\n \"instance\": {\n \"key\": {\n \"publicId\": \"inject_script\",\n \"versionId\": \"1\"\n },\n \"param\": [\n {\n \"key\": \"urls\",\n \"value\": {\n \"type\": 2,\n \"listItem\": [\n {\n \"type\": 1,\n \"string\": \"https://cdn.gtm-server.com/dtag.js\"\n }\n ]\n }\n }\n ]\n },\n \"clientAnnotations\": {\n \"isEditedByUser\": true\n },\n \"isRequired\": true\n },\n {\n \"instance\": {\n \"key\": {\n \"publicId\": \"access_local_storage\",\n \"versionId\": \"1\"\n },\n \"param\": [\n {\n \"key\": \"keys\",\n \"value\": {\n \"type\": 2,\n \"listItem\": [\n {\n \"type\": 3,\n \"mapKey\": [\n {\n \"type\": 1,\n \"string\": \"key\"\n },\n {\n \"type\": 1,\n \"string\": \"read\"\n },\n {\n \"type\": 1,\n \"string\": \"write\"\n }\n ],\n \"mapValue\": [\n {\n \"type\": 1,\n \"string\": \"dtclid\"\n },\n {\n \"type\": 8,\n \"boolean\": true\n },\n {\n \"type\": 8,\n \"boolean\": true\n }\n ]\n }\n ]\n }\n }\n ]\n },\n \"clientAnnotations\": {\n \"isEditedByUser\": true\n },\n \"isRequired\": true\n },\n {\n \"instance\": {\n \"key\": {\n \"publicId\": \"read_character_set\",\n \"versionId\": \"1\"\n },\n \"param\": []\n },\n \"isRequired\": true\n },\n {\n \"instance\": {\n \"key\": {\n \"publicId\": \"send_pixel\",\n \"versionId\": \"1\"\n },\n \"param\": [\n {\n \"key\": \"allowedUrls\",\n \"value\": {\n \"type\": 1,\n \"string\": \"any\"\n }\n }\n ]\n },\n \"clientAnnotations\": {\n \"isEditedByUser\": true\n },\n \"isRequired\": true\n }\n]\n\n\n___TESTS___\n\nscenarios: []\n\n\n___NOTES___\n\nCreated on 21/03/2021, 11:26:46\n\n\n"
}
]
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment