___TERMS_OF_SERVICE___ By creating or modifying this file you agree to Google Tag Manager's Community Template Gallery Developer Terms of Service available at https://developers.google.com/tag-manager/gallery-tos (or such other URL as Google may provide), as modified from time to time. ___INFO___ { "type": "TAG", "id": "cvt_temp_public_id", "version": 1, "securityGroups": [], "displayName": "Firestore Web Tag", "categories": ["UTILITY"], "brand": { "id": "brand_dummy", "displayName": "", "thumbnail": "data:image/png;base64,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\u003d\u003d" }, "description": "The Firestore Web Tag template allows you to create a list of the rules on how to change the user property.", "containerContexts": [ "WEB" ] } ___TEMPLATE_PARAMETERS___ [ { "type": "TEXT", "name": "serverUrl", "displayName": "Server SIde GTM URL", "simpleValueType": true, "valueHint": "https://", "valueValidators": [ { "type": "NON_EMPTY" }, { "type": "REGEX", "args": [ "^https:\\/\\/.*" ] } ] }, { "type": "TEXT", "name": "userKey", "displayName": "User key", "simpleValueType": true, "valueValidators": [ { "type": "NON_EMPTY" }, { "type": "REGEX", "args": [ "^[^\\/]*$" ] }, { "type": "REGEX", "args": [ "^(?!\\.$).*$" ] }, { "type": "REGEX", "args": [ "^(?!\\.\\.$).*$" ] } ], "help": "\u003ca href\u003d\"https://firebase.google.com/docs/firestore/quotas#limits\"\u003eDocumentation page\u003c/a\u003e about key constrains" }, { "type": "PARAM_TABLE", "name": "rules", "displayName": "User properties you want to change", "paramTableColumns": [ { "param": { "type": "TEXT", "name": "name", "displayName": "Property Name", "simpleValueType": true }, "isUnique": true }, { "param": { "type": "SELECT", "name": "ruleType", "displayName": "Action", "macrosInSelect": false, "selectItems": [ { "value": 1, "displayValue": "Add" }, { "value": 2, "displayValue": "Set" } ], "simpleValueType": true }, "isUnique": false }, { "param": { "type": "TEXT", "name": "value", "displayName": "Value", "simpleValueType": true, "enablingConditions": [], "help": "If Action is «‎Set» the property will be changed. If Action is «‎Add» the user property will be increased on value. The value can be constant or GTM Variable.", "valueValidators": [ { "type": "NON_EMPTY" } ] }, "isUnique": false }, { "param": { "type": "SELECT", "name": "returnValue", "displayName": "Return value", "macrosInSelect": false, "selectItems": [ { "value": "new", "displayValue": "Updated value" }, { "value": "old", "displayValue": "Previous value" } ], "simpleValueType": true, "valueValidators": [], "defaultValue": "new", "help": "Should server return updated value or previous value" }, "isUnique": false } ], "notSetText": "User properties not set. Server tag will change nothing but return current user state." }, { "type": "GROUP", "name": "additionalSettings", "displayName": "Additional settings", "groupStyle": "ZIPPY_CLOSED", "subParams": [ { "type": "LABEL", "name": "Cookie settings", "displayName": "Cookie settings" }, { "type": "CHECKBOX", "name": "setCookie", "checkboxText": "Set cookie after user properties will be updated", "simpleValueType": true, "defaultValue": true }, { "type": "TEXT", "name": "cookiePrefix", "displayName": "Cookie Prefix", "simpleValueType": true, "defaultValue": "user", "help": "Server tag will set cookie for each user property. If cookie prefix is not empty it will be added for each property name.", "notSetText": "If not set «user» prefix will be used" }, { "type": "LABEL", "name": "DataLayer settings", "displayName": "DataLayer settings" }, { "type": "TEXT", "name": "dataLayerEventName", "displayName": "DataLayer Event Name", "simpleValueType": true, "help": "The name of event will be pushed after user properties are changed", "defaultValue": "firestore_updated", "valueValidators": [ { "type": "NON_EMPTY" } ] }, { "type": "TEXT", "name": "eventName", "displayName": "Event Type", "simpleValueType": true, "help": "This field can be used if you have a few Firestore tags and what to differentiate dataLayer pushes after user properties are changed. It\u0027s a optional filed." } ] } ] ___SANDBOXED_JS_FOR_WEB_TEMPLATE___ // Enter your template code here. const log = require("logToConsole"); const sendPixel = require("sendPixel"); const createQueue = require("createQueue"); const makeString = require("makeString"); const encodeUriComponent = require("encodeUriComponent"); const isConsentGranted = require("isConsentGranted"); const addConsentListener = require("addConsentListener"); const parseUrl = require("parseUrl"); const dataLayerPush = createQueue("dataLayer"); const version = 1; const onSuccess = () => { // Prepare dataLayer push let dataLayerPushObject = { event: data.dataLayerEventName, }; if (data.eventName) dataLayerPushObject.firestore_event_type = data.eventName; dataLayerPush(dataLayerPushObject); data.gtmOnSuccess(); }; const onFailure = () => { data.gtmOnFailure(); }; const getFinalUrl = (serverUrl) => { let rulesArray = []; if (data.hasOwnProperty("rules")) { data.rules.forEach((rule) => { const returnValue = rule.returnValue === "new" ? "" : ",1"; rulesArray.push( "r=" + encodeUriComponent(rule.name) + "," + rule.ruleType + "," + encodeUriComponent(makeString(rule.value)) + returnValue ); }); } let finalUrl = serverUrl + "/firestore?v=" + version; // Add user key finalUrl += "&u=" + data.userKey; // Add rules if (rulesArray.length > 0) finalUrl += "&" + rulesArray.join("&"); // Add cookies if (!data.setCookie) finalUrl += "&s=0"; if (data.cookiePrefix && data.cookiePrefix !== "user") finalUrl += "&sp=" + encodeUriComponent(data.cookiePrefix); if (data.eventName) finalUrl += "&e=" + encodeUriComponent(data.eventName); return finalUrl; }; const clearServerUrl = () => { const lastIndex = data.serverUrl.lastIndexOf("/"); if (lastIndex == data.serverUrl.length - 1) return data.serverUrl.substring(0, lastIndex); return data.serverUrl; }; const checkServerUrl = (serverUrl) => { const urlObject = parseUrl(serverUrl); if (urlObject && urlObject.hasOwnProperty("origin")) return urlObject.origin === serverUrl; return false; }; const checkUserKey = () => { if (data.userKey.indexOf("/") > -1) return false; if (data.userKey == "." || data.userKey == "..") return false; return true; }; const serverUrl = clearServerUrl(); if (!checkServerUrl(serverUrl) || !checkUserKey()) { data.gtmOnFailure(); } else { const finalUrl = getFinalUrl(serverUrl); if (!isConsentGranted("ad_storage")) { let wasCalled = false; addConsentListener("ad_storage", (consentType, granted) => { if (wasCalled || !granted) return; wasCalled = true; sendPixel(finalUrl, onSuccess, onFailure); }); data.gtmOnSuccess(); } else { sendPixel(finalUrl, onSuccess, onFailure); } } ___WEB_PERMISSIONS___ [ { "instance": { "key": { "publicId": "logging", "versionId": "1" }, "param": [ { "key": "environments", "value": { "type": 1, "string": "debug" } } ] }, "clientAnnotations": { "isEditedByUser": true }, "isRequired": true }, { "instance": { "key": { "publicId": "send_pixel", "versionId": "1" }, "param": [ { "key": "allowedUrls", "value": { "type": 1, "string": "any" } } ] }, "clientAnnotations": { "isEditedByUser": true }, "isRequired": true }, { "instance": { "key": { "publicId": "access_globals", "versionId": "1" }, "param": [ { "key": "keys", "value": { "type": 2, "listItem": [ { "type": 3, "mapKey": [ { "type": 1, "string": "key" }, { "type": 1, "string": "read" }, { "type": 1, "string": "write" }, { "type": 1, "string": "execute" } ], "mapValue": [ { "type": 1, "string": "dataLayer" }, { "type": 8, "boolean": true }, { "type": 8, "boolean": true }, { "type": 8, "boolean": true } ] } ] } } ] }, "clientAnnotations": { "isEditedByUser": true }, "isRequired": true }, { "instance": { "key": { "publicId": "access_consent", "versionId": "1" }, "param": [ { "key": "consentTypes", "value": { "type": 2, "listItem": [ { "type": 3, "mapKey": [ { "type": 1, "string": "consentType" }, { "type": 1, "string": "read" }, { "type": 1, "string": "write" } ], "mapValue": [ { "type": 1, "string": "ad_storage" }, { "type": 8, "boolean": true }, { "type": 8, "boolean": false } ] } ] } } ] }, "clientAnnotations": { "isEditedByUser": true }, "isRequired": true } ] ___TESTS___ scenarios: - name: Server URL incorrect code: "mockData.serverUrl = 'https://127.0.0.1eqwscadfwer2@#4'; \nrunCode(mockData);\n\ assertApi('gtmOnSuccess').wasNotCalled();\nassertApi('gtmOnFailure').wasCalled();\n" - name: User Key incorrect code: |- mockData.userKey = '..' ; runCode(mockData); // Verify that the tag finished successfully. assertApi('gtmOnSuccess').wasNotCalled(); assertApi('gtmOnFailure').wasCalled(); - name: One rule add code: |- const expectedServerUrl = 'https://127.0.0.1/firestore?v=1&u=123&r=var1,1,val1'; mock('sendPixel', function(url, onSuccess, onFailure) { assertThat(url).isEqualTo(expectedServerUrl); onSuccess(); }); // Call runCode to run the template's code. runCode(mockData); // Verify that the tag finished successfully. assertApi('gtmOnSuccess').wasCalled(); - name: One rule add, old value code: |- const expectedServerUrl = 'https://127.0.0.1/firestore?v=1&u=123&r=var1%25%26%D1%8E,1,%25%26%2C%D1%86,1'; mockData.rules = [{"name":"var1%&ю","ruleType":1,"value":"%&,ц","returnValue":"old"}] ; mock('sendPixel', function(url, onSuccess, onFailure) { assertThat(url).isEqualTo(expectedServerUrl); onSuccess(); }); // Call runCode to run the template's code. runCode(mockData); // Verify that the tag finished successfully. assertApi('gtmOnSuccess').wasCalled(); - name: One rule set code: |- const expectedServerUrl = 'https://127.0.0.1/firestore?v=1&u=123&r=var1,2,val1'; mockData.rules = [{"name":"var1","ruleType":2,"value":"val1","returnValue":"new"}] ; mock('sendPixel', function(url, onSuccess, onFailure) { assertThat(url).isEqualTo(expectedServerUrl); onSuccess(); }); // Call runCode to run the template's code. runCode(mockData); // Verify that the tag finished successfully. assertApi('gtmOnSuccess').wasCalled(); - name: One rule set old value code: |- const expectedServerUrl = 'https://127.0.0.1/firestore?v=1&u=123&r=var1%25%26%D1%8E,2,%25%26%2C%D1%86,1'; mockData.rules = [{"name":"var1%&ю","ruleType":2,"value":"%&,ц","returnValue":"old"}] ; mock('sendPixel', function(url, onSuccess, onFailure) { assertThat(url).isEqualTo(expectedServerUrl); onSuccess(); }); // Call runCode to run the template's code. runCode(mockData); // Verify that the tag finished successfully. assertApi('gtmOnSuccess').wasCalled(); - name: Few rules code: |- const expectedServerUrl = 'https://127.0.0.1/firestore?v=1&u=123&r=var1,1,val1&r=var2,2,val2&r=var3,2,val3'; mockData.rules = [{"name":"var1","ruleType":1,"value":"val1","returnValue":"new"},{"name":"var2","ruleType":2,"value":"val2","returnValue":"new"}, {"name":"var3","ruleType":2,"value":"val3","returnValue":"new"} ] ; mock('sendPixel', function(url, onSuccess, onFailure) { assertThat(url).isEqualTo(expectedServerUrl); onSuccess(); }); // Call runCode to run the template's code. runCode(mockData); // Verify that the tag finished successfully. assertApi('gtmOnSuccess').wasCalled(); - name: Few rules old and new values code: |- const expectedServerUrl = 'https://127.0.0.1/firestore?v=1&u=123&r=var1,1,val1,1&r=var2,2,val2&r=var3,2,val3,1'; mockData.rules = [{"name":"var1","ruleType":1,"value":"val1","returnValue":"old"},{"name":"var2","ruleType":2,"value":"val2","returnValue":"new"}, {"name":"var3","ruleType":2,"value":"val3","returnValue":"old"} ] ; mock('sendPixel', function(url, onSuccess, onFailure) { assertThat(url).isEqualTo(expectedServerUrl); onSuccess(); }); // Call runCode to run the template's code. runCode(mockData); // Verify that the tag finished successfully. assertApi('gtmOnSuccess').wasCalled(); - name: Change dataLayer name code: "const expectedServerUrl = 'https://127.0.0.1/firestore?v=1&u=123&r=var1,1,val1';\n\ mockData.dataLayerEventName = \"firestore_updated_new\";\n\nmock('sendPixel',\ \ function(url, onSuccess, onFailure) {\n assertThat(url).isEqualTo(expectedServerUrl);\n\ \ onSuccess();\n});\n\nconst expectedDataLayerEvent = {\"event\":\"firestore_updated_new\"\ };\nmock(\"createQueue\", function (name) {\n return function (event) {\n \ \ assertThat(event).isEqualTo(expectedDataLayerEvent);\n };\n});\n \n\n\ // Call runCode to run the template's code.\nrunCode(mockData);\n\n// Verify that\ \ the tag finished successfully.\nassertApi('gtmOnSuccess').wasCalled();" - name: Change dataLayer event type code: "const expectedServerUrl = 'https://127.0.0.1/firestore?v=1&u=123&r=var1,1,val1&e=purchase';\n\ mockData.eventName = \"purchase\";\n\nmock('sendPixel', function(url, onSuccess,\ \ onFailure) {\n assertThat(url).isEqualTo(expectedServerUrl);\n onSuccess();\n\ });\n\nconst expectedDataLayerEvent = {\"event\":\"firestore_updated\",\"firestore_event_type\"\ :\"purchase\"};\nmock(\"createQueue\", function (name) {\n return function (event)\ \ {\n assertThat(event).isEqualTo(expectedDataLayerEvent);\n };\n});\n \ \ \n\n// Call runCode to run the template's code.\nrunCode(mockData);\n\n//\ \ Verify that the tag finished successfully.\nassertApi('gtmOnSuccess').wasCalled();" - name: Don't set cookies code: |- const expectedServerUrl = 'https://127.0.0.1/firestore?v=1&u=123&r=var1,1,val1&s=0'; mockData.setCookie = false; mock('sendPixel', function(url, onSuccess, onFailure) { assertThat(url).isEqualTo(expectedServerUrl); onSuccess(); }); // Call runCode to run the template's code. runCode(mockData); // Verify that the tag finished successfully. assertApi('gtmOnSuccess').wasCalled(); - name: Change cookie prefix code: |- const expectedServerUrl = 'https://127.0.0.1/firestore?v=1&u=123&r=var1,1,val1&sp=_gtm'; mockData.cookiePrefix = "_gtm"; mock('sendPixel', function(url, onSuccess, onFailure) { assertThat(url).isEqualTo(expectedServerUrl); onSuccess(); }); // Call runCode to run the template's code. runCode(mockData); // Verify that the tag finished successfully. assertApi('gtmOnSuccess').wasCalled(); - name: Consent is not granted code: | mock('isConsentGranted', function(consent){ if(consent==="ad_storage") return false; }); mock('addConsentListener', function(consent, callback){ log("consent",consent); assertThat(consent).isEqualTo("ad_storage"); //callback(); }); runCode(mockData); assertApi('sendPixel').wasNotCalled(); assertApi('gtmOnSuccess').wasCalled(); - name: Consent is not granted, and granted later code: | mock('isConsentGranted', function(consent){ if(consent==="ad_storage") return false; }); mock('addConsentListener', function(consent, callback){ log("addConsentListener consent",consent); assertThat(consent).isEqualTo("ad_storage"); callback("ad_storage", "granted"); }); const expectedServerUrl = 'https://127.0.0.1/firestore?v=1&u=123&r=var1,1,val1'; mock('sendPixel', function(url, onSuccess, onFailure) { assertThat(url).isEqualTo(expectedServerUrl); onSuccess(); }); runCode(mockData); assertApi('sendPixel').wasCalled(); assertApi('gtmOnSuccess').wasCalled(); - name: No rules code: |- const expectedServerUrl = 'https://127.0.0.1/firestore?v=1&u=123'; let mockNoRulesData = {"serverUrl":"https://127.0.0.1","dataLayerEventName":"firestore_updated","setCookie":true,"userKey":"123","cookiePrefix":"user","gtmTagId":2147483646,"gtmEventId":3}; mock('sendPixel', function(url, onSuccess, onFailure) { assertThat(url).isEqualTo(expectedServerUrl); onSuccess(); }); // Call runCode to run the template's code. runCode(mockNoRulesData); // Verify that the tag finished successfully. assertApi('gtmOnSuccess').wasCalled(); setup: |- const log = require("logToConsole"); let mockData = {"serverUrl":"https://127.0.0.1","dataLayerEventName":"firestore_updated","rules":[{"name":"var1","ruleType":1,"value":"val1","returnValue":"new"}],"setCookie":true,"userKey":"123","cookiePrefix":"user","gtmTagId":2147483646,"gtmEventId":3}; mock('isConsentGranted', true); ___NOTES___ Created on 08/05/2022, 21:10:59