___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": "CLIENT", "id": "cvt_temp_public_id", "version": 1, "securityGroups": [], "displayName": "GTM Loader", "__wm": "VGVtcGxhdGUtQXV0aG9yX0dUTUxvYWRlci1TaW1vLUFoYXZh", "categories": ["UTILITY"], "brand": { "id": "brand_dummy", "displayName": "", "thumbnail": "data:image/png;base64,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" }, "description": "Load the gtm.js library with the request path of your choosing. Automatically caches the container for a short period of time to reduce network egress costs.", "containerContexts": [ "SERVER" ] } ___TEMPLATE_PARAMETERS___ [ { "type": "TEXT", "name": "requestPath", "displayName": "Request Path", "simpleValueType": true, "defaultValue": "/gtm.js", "valueValidators": [ { "type": "REGEX", "args": [ "^/.*$" ] } ], "alwaysInSummary": true, "help": "Set to the path you\u0027ll use to fetch the GTM library. The default is \u003cstrong\u003e/gtm.js\u003c/strong\u003e, which means that a request to \u003cstrong\u003ehttps://your-gtm-server.com/gtm.js?id\u003dGTM-XYZ\u003c/strong\u003e will activate the Client." }, { "type": "CHECKBOX", "name": "overrideCid", "checkboxText": "Override Container ID", "simpleValueType": true, "help": "If you check this, you can provide a container ID which will always be loaded regardless of what (if anything) was included in the \u003cstrong\u003eid\u003c/strong\u003e parameter of the request." }, { "type": "TEXT", "name": "containerId", "displayName": "Container ID", "simpleValueType": true, "valueValidators": [ { "type": "REGEX", "args": [ "^GTM-.+$" ] } ], "enablingConditions": [ { "paramName": "overrideCid", "paramValue": true, "type": "EQUALS" } ] }, { "type": "CHECKBOX", "name": "encodingHeader", "checkboxText": "Set Encoding Header (Recommended for Cloud Run)", "simpleValueType": true, "help": "If you check this, a \"Content-Encoding\" header with the value \"gzip\" will be set in the response back to the browser." }, { "type": "TEXT", "name": "allowedOrigins", "displayName": "Allowed Origins", "simpleValueType": true, "defaultValue": "*", "valueValidators": [ { "type": "NON_EMPTY" } ], "help": "Enter a comma-separated list of origins (e.g. \u003cstrong\u003ehttps://www.teamsimmer.com,https://www.simoahava.com\u003c/strong\u003e or use the asterisk (\u003cstrong\u003e*\u003c/strong\u003e) as a wildcard. If the request comes from some other origin, the request will not be claimed. To pass an origin manually, add the \u003cstrong\u003e\u0026origin\u003d\u003cyour-origin\u003e\u003c/strong\u003e parameter to the request URL." } ] ___SANDBOXED_JS_FOR_SERVER___ const claimRequest = require('claimRequest'); const getRequestHeader = require('getRequestHeader'); const getRequestPath = require('getRequestPath'); const getRequestQueryParameters = require('getRequestQueryParameters'); const getTimestampMillis = require('getTimestampMillis'); const logToConsole = require('logToConsole'); const parseUrl = require('parseUrl'); const returnResponse = require('returnResponse'); const sendHttpGet = require('sendHttpGet'); const setResponseBody = require('setResponseBody'); const setResponseHeader = require('setResponseHeader'); const setResponseStatus = require('setResponseStatus'); const templateDataStorage = require('templateDataStorage'); const requestPath = getRequestPath(); const requestParams = getRequestQueryParameters(); const origin = getRequestHeader('origin') || (!!getRequestHeader('referer') && parseUrl(getRequestHeader('referer')).origin) || requestParams.origin; // Set max template storage cache to half of GTM container cache const cacheMaxTimeInMs = 450000; const containerId = data.containerId || requestParams.id || ''; // Preview parameters const gtm_auth = requestParams.gtm_auth; const gtm_debug = requestParams.gtm_debug; const gtm_preview = requestParams.gtm_preview; const previewRequest = !!(gtm_auth && gtm_debug && gtm_preview); const dataLayerVariableNameParameter = requestParams.l ? '&l=' + requestParams.l : ''; // Set names for storage const storedJs = 'gtm_js_' + containerId + (requestParams.l ? '_' + requestParams.l : ''); const storedHeaders = storedJs + '_headers'; const storedTimeout = storedJs + '_timeout'; const httpEndpoint = 'https://www.googletagmanager.com/gtm.js?fps=s'; const validateOrigin = () => { return data.allowedOrigins === '*' || data.allowedOrigins.split(',').indexOf(origin) > -1; }; const log = msg => { logToConsole('[GTM Loader] ' + msg); }; const sendResponse = (response, headers, statusCode) => { setResponseStatus(statusCode); setResponseBody(response); for (const key in headers) { // Do not set the "expires" and "date" headers if (['expires', 'date'].indexOf(key) === -1) setResponseHeader(key, headers[key]); } if (data.encodingHeader) { setResponseHeader('Content-Encoding', 'gzip'); } returnResponse(); }; const fetchPreviewContainer = () => { log('Fetching preview container for ' + containerId); sendHttpGet(httpEndpoint + '&id=' + containerId + '>m_auth=' + gtm_auth + '>m_debug=' + gtm_debug + '>m_preview=' + gtm_preview + dataLayerVariableNameParameter, (statusCode, headers, body) => { sendResponse(body, headers, statusCode); }, {timeout: 1500}); }; const fetchLiveContainer = () => { const now = getTimestampMillis(); const storageTimeout = now - cacheMaxTimeInMs; if (!templateDataStorage.getItemCopy(storedJs) || templateDataStorage.getItemCopy(storedTimeout) < storageTimeout) { log('Fetching live container from GTM servers for ' + containerId); sendHttpGet(httpEndpoint + '&id=' + containerId + dataLayerVariableNameParameter, (statusCode, headers, body) => { if (statusCode === 200) { templateDataStorage.setItemCopy(storedJs, body); templateDataStorage.setItemCopy(storedHeaders, headers); templateDataStorage.setItemCopy(storedTimeout, now); } sendResponse(body, headers, statusCode); }, {timeout: 1500}); } else { log('Fetching live container from template cache for ' + containerId); sendResponse( templateDataStorage.getItemCopy(storedJs), templateDataStorage.getItemCopy(storedHeaders), 200 ); } }; if (requestPath === data.requestPath) { if (!containerId.match('^GTM-.+$')) { log('Invalid or missing container ID'); return; } if (!validateOrigin()) { log('Request originated from invalid origin'); return; } log('Processing request for ' + containerId); claimRequest(); if (previewRequest) { fetchPreviewContainer(); } else { fetchLiveContainer(); } log('Processed request for ' + containerId); } ___SERVER_PERMISSIONS___ [ { "instance": { "key": { "publicId": "read_request", "versionId": "1" }, "param": [ { "key": "requestAccess", "value": { "type": 1, "string": "any" } }, { "key": "headerAccess", "value": { "type": 1, "string": "any" } }, { "key": "queryParameterAccess", "value": { "type": 1, "string": "any" } } ] }, "clientAnnotations": { "isEditedByUser": true }, "isRequired": true }, { "instance": { "key": { "publicId": "return_response", "versionId": "1" }, "param": [] }, "isRequired": true }, { "instance": { "key": { "publicId": "logging", "versionId": "1" }, "param": [ { "key": "environments", "value": { "type": 1, "string": "debug" } } ] }, "clientAnnotations": { "isEditedByUser": true }, "isRequired": true }, { "instance": { "key": { "publicId": "access_template_storage", "versionId": "1" }, "param": [] }, "isRequired": true }, { "instance": { "key": { "publicId": "access_response", "versionId": "1" }, "param": [ { "key": "writeResponseAccess", "value": { "type": 1, "string": "any" } }, { "key": "writeHeaderAccess", "value": { "type": 1, "string": "specific" } } ] }, "clientAnnotations": { "isEditedByUser": true }, "isRequired": true }, { "instance": { "key": { "publicId": "send_http", "versionId": "1" }, "param": [ { "key": "allowedUrls", "value": { "type": 1, "string": "specific" } }, { "key": "allowGoogleDomains", "value": { "type": 8, "boolean": true } } ] }, "clientAnnotations": { "isEditedByUser": true }, "isRequired": true } ] ___TESTS___ scenarios: [] ___NOTES___ Created on 05/05/2021, 15:48:06