___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": "getuserfeedback.com", "categories": [ "CONVERSIONS", "ANALYTICS", "SURVEY" ], "brand": { "displayName": "getuserfeedback.com", "thumbnail": "data:image/png;base64,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" }, "description": "In-app user onboarding, surveys, and embedded forms for feedback-fueled product growth", "containerContexts": [ "WEB" ] } ___TEMPLATE_PARAMETERS___ [ { "type": "TEXT", "name": "apiKey", "displayName": "API Key", "simpleValueType": true, "help": "Paste your getuserfeedback API key from Settings → Widget.", "valueValidators": [ { "type": "NON_EMPTY" } ] }, { "type": "GROUP", "name": "themeGroup", "displayName": "Color Scheme", "groupStyle": "ZIPPY_CLOSED", "subParams": [ { "type": "SELECT", "name": "themeMode", "displayName": "Color Scheme", "macrosInSelect": false, "selectItems": [ { "value": "light", "displayValue": "Always Light" }, { "value": "dark", "displayValue": "Always Dark" }, { "value": "system", "displayValue": "Follow System Preference" }, { "value": "host", "displayValue": "Sync With Host Attributes" }, { "value": "variable", "displayValue": "Resolve From GTM Variable" } ], "simpleValueType": true, "defaultValue": "host", "help": "Choose how the widget color scheme should work." }, { "type": "SELECT", "name": "themeModeVariable", "displayName": "Color Scheme Variable", "macrosInSelect": true, "selectItems": [], "simpleValueType": true, "help": "Choose a GTM variable that returns `light`, `dark`, `system`, `auto`, or a comma-separated list of attribute names.", "enablingConditions": [ { "paramName": "themeMode", "paramValue": "variable", "type": "EQUALS" } ], "valueValidators": [ { "type": "NON_EMPTY" } ] }, { "type": "TEXT", "name": "themeAttr", "displayName": "Site Color Scheme Attributes", "simpleValueType": true, "defaultValue": "class,data-theme", "help": "Add the HTML or body attributes that show your site's color scheme, separated by commas.", "enablingConditions": [ { "paramName": "themeMode", "paramValue": "host", "type": "EQUALS" } ] } ] }, { "type": "GROUP", "name": "identifyGroup", "displayName": "User Identity", "groupStyle": "ZIPPY_CLOSED", "subParams": [ { "type": "RADIO", "name": "identifyMode", "displayName": "Identification mode", "simpleValueType": true, "defaultValue": "intelligent", "radioItems": [ { "value": "intelligent", "displayValue": "Intelligent", "help": "Automatically read common data layer keys for user ID, email, phone, first name, and last name." }, { "value": "disabled", "displayValue": "Disabled", "help": "Don't send identity data from this tag." }, { "value": "advanced", "displayValue": "Custom", "help": "Choose the main identity value and add any extra fields you want to send." } ] }, { "type": "SELECT", "name": "identifyPrimaryIdentityType", "displayName": "Main identity", "simpleValueType": true, "macrosInSelect": false, "defaultValue": "userId", "selectItems": [ { "displayValue": "User ID", "value": "userId" }, { "displayValue": "Phone", "value": "phone" }, { "displayValue": "Email", "value": "email" } ], "help": "Choose whether the main identity should be sent as a user ID, email, or phone number.", "enablingConditions": [ { "paramName": "identifyMode", "paramValue": "advanced", "type": "EQUALS" } ] }, { "type": "TEXT", "name": "identifyPrimaryIdentityValue", "displayName": "Main identity value", "simpleValueType": true, "help": "Choose a GTM variable for the main identity value.", "enablingConditions": [ { "paramName": "identifyMode", "paramValue": "advanced", "type": "EQUALS" } ] }, { "type": "SIMPLE_TABLE", "name": "identifyTraits", "displayName": "Traits", "help": "Add any extra fields you want to send from GTM variables. Common examples are `email`, `phone`, `firstName`, `lastName`, and `plan`. Empty rows are ignored.", "newRowButtonText": "Add Trait", "simpleTableColumns": [ { "displayName": "Trait Name", "name": "name", "type": "TEXT" }, { "displayName": "Trait Value", "name": "value", "type": "TEXT" } ], "enablingConditions": [ { "paramName": "identifyMode", "paramValue": "advanced", "type": "EQUALS" } ] } ] } ] ___SANDBOXED_JS_FOR_WEB_TEMPLATE___ const log = require("logToConsole"); const injectScript = require("injectScript"); const queryPermission = require("queryPermission"); const createQueue = require("createQueue"); const isConsentGranted = require("isConsentGranted"); const encodeUriComponent = require("encodeUriComponent"); const copyFromDataLayer = require("copyFromDataLayer"); const loaderScriptBaseUrl = "https://cdn.getuserfeedback.com/widget/loader/v1"; const gtmConsentTypes = ["functionality_storage","security_storage","analytics_storage","personalization_storage","ad_storage","ad_user_data","ad_personalization"]; const defaultAutoDetectColorSchemeAttrs = ["class","data-theme"]; const queueKey = "__getuserfeedback_queue"; const intelligentIdentifyUserIdKeys = ["userId","user.userId","user.id","traits.userId","traits.id","context.userId","context.user.id"]; const intelligentIdentifyEmailKeys = ["email","user.email","traits.email","context.email","context.user.email"]; const intelligentIdentifyFirstNameKeys = ["firstName","first_name","user.firstName","user.first_name","user.givenName","user.given_name","traits.firstName","traits.first_name","traits.givenName","traits.given_name","context.firstName","context.first_name","context.user.firstName","context.user.first_name","context.user.givenName","context.user.given_name"]; const intelligentIdentifyLastNameKeys = ["lastName","last_name","user.lastName","user.last_name","user.familyName","user.family_name","traits.lastName","traits.last_name","traits.familyName","traits.family_name","context.lastName","context.last_name","context.user.lastName","context.user.last_name","context.user.familyName","context.user.family_name"]; const intelligentIdentifyPhoneKeys = ["phone","user.phone","traits.phone","context.phone","context.user.phone"]; const generatedRuntimeEndpoints = null; const queueClientMeta = {"loader":"gtm","transport":"tag-manager"}; function resolveGtmThemeInputFromTemplateData(templateData) { if (templateData.themeMode === "variable") { return templateData.themeModeVariable; } if (templateData.themeMode === "host") { return templateData.themeAttr; } return templateData.themeMode === "light" || templateData.themeMode === "dark" || templateData.themeMode === "system" ? templateData.themeMode : undefined; } function buildGtmIdentifyCommand(input) { function normalizeTraitValue(value) { if (value === undefined || value === null) { return undefined; } if (typeof value !== "string") { return value; } const trimmedValue = value.trim(); return trimmedValue.length > 0 ? trimmedValue : undefined; } function normalizeUserIdValue(value) { if (typeof value !== "string") { return undefined; } const trimmedValue = value.trim(); return trimmedValue.length > 0 ? trimmedValue : undefined; } function addTrait(traits, name, value) { const traitName = name.trim(); const traitValue = normalizeTraitValue(value); if (traitName.length === 0 || traitValue === undefined) { return; } traits[traitName] = traitValue; } function hasOwnKeys(value) { for (const key in value) { return key.length > 0; } return false; } function buildFromUserIdAndTraits(userId, traits) { const hasTraits = hasOwnKeys(traits); if (userId && hasTraits) { return { kind: "identify", userId: userId, traits: traits, }; } if (userId) { return { kind: "identify", userId: userId, }; } if (hasTraits) { return { kind: "identify", traits: traits, }; } return undefined; } if (input.mode === "disabled") { return undefined; } if (input.mode === "intelligent") { const traits = {}; addTrait(traits, "email", input.email); addTrait(traits, "firstName", input.firstName); addTrait(traits, "lastName", input.lastName); addTrait(traits, "phone", input.phone); return buildFromUserIdAndTraits(normalizeUserIdValue(input.userId), traits); } const traits = {}; if (input.traits && typeof input.traits === "object") { for (const key in input.traits) { traits[key] = input.traits[key]; } } if (input.primaryIdentityType === "userId") { return buildFromUserIdAndTraits( normalizeUserIdValue(input.primaryIdentityValue), traits, ); } if ( input.primaryIdentityType === "email" || input.primaryIdentityType === "phone" ) { addTrait(traits, input.primaryIdentityType, input.primaryIdentityValue); } return hasOwnKeys(traits) ? { kind: "identify", traits: traits, } : undefined; } const trimString = function(value) { return typeof value === "string" ? value.trim() : ""; }; const normalizeAttrList = function(value) { return value .split(",") .map(function(entry) { return entry.trim(); }) .filter(function(entry) { return entry.length > 0; }); }; const normalizeThemeInput = function(inputValue) { if (inputValue === undefined || inputValue === null) { return undefined; } if (typeof inputValue === "string") { const normalized = inputValue.trim().toLowerCase(); if (!normalized) { return undefined; } if ( normalized === "light" || normalized === "dark" || normalized === "system" ) { return normalized; } if (normalized === "auto") { return { autoDetectColorScheme: defaultAutoDetectColorSchemeAttrs.slice(), }; } const attrs = normalizeAttrList(inputValue); return attrs.length > 0 ? { autoDetectColorScheme: attrs } : undefined; } return undefined; }; const getSimpleTableRows = function(value) { const maxSimpleTableRowCount = 1000; const length = value && typeof value === "object" ? value.length : undefined; if ( !value || typeof value !== "object" || typeof length !== "number" || length <= 0 || length > maxSimpleTableRowCount || length % 1 !== 0 ) { return []; } const rows = []; for (let index = 0; index < length; index += 1) { const row = value[index]; if (!row || typeof row !== "object") { continue; } rows.push(row); } return rows; }; const getIntelligentIdentifyValue = function(keys) { for (let index = 0; index < keys.length; index += 1) { const key = keys[index]; if (!queryPermission("read_data_layer", key)) { continue; } const value = copyFromDataLayer(key); if (value === undefined || value === null) { continue; } const normalizedValue = typeof value === "string" ? trimString(value) || undefined : value; if (normalizedValue !== undefined) { return normalizedValue; } } return undefined; }; const getAdvancedIdentifyTraits = function(templateData) { const traits = {}; const rows = getSimpleTableRows(templateData.identifyTraits); for (let index = 0; index < rows.length; index += 1) { const row = rows[index]; if (!row || typeof row !== "object") { continue; } const traitName = trimString(row.name); if (!traitName) { continue; } const value = row.value; if (value === undefined || value === null) { continue; } const normalizedValue = typeof value === "string" ? trimString(value) || undefined : value; if (normalizedValue === undefined) { continue; } traits[traitName] = normalizedValue; } return traits; }; const getIdentifyCommand = function(templateData) { if (templateData.identifyMode === "intelligent") { return buildGtmIdentifyCommand({ email: getIntelligentIdentifyValue(intelligentIdentifyEmailKeys), firstName: getIntelligentIdentifyValue(intelligentIdentifyFirstNameKeys), lastName: getIntelligentIdentifyValue(intelligentIdentifyLastNameKeys), mode: "intelligent", phone: getIntelligentIdentifyValue(intelligentIdentifyPhoneKeys), userId: getIntelligentIdentifyValue(intelligentIdentifyUserIdKeys), }); } if (templateData.identifyMode === "advanced") { return buildGtmIdentifyCommand({ mode: "advanced", primaryIdentityType: trimString(templateData.identifyPrimaryIdentityType), primaryIdentityValue: typeof templateData.identifyPrimaryIdentityValue === "string" ? trimString(templateData.identifyPrimaryIdentityValue) || undefined : templateData.identifyPrimaryIdentityValue === undefined || templateData.identifyPrimaryIdentityValue === null ? undefined : templateData.identifyPrimaryIdentityValue, traits: getAdvancedIdentifyTraits(templateData), }); } return undefined; }; const getConsentState = function() { const result = {}; for (let index = 0; index < gtmConsentTypes.length; index += 1) { const consentType = gtmConsentTypes[index]; result[consentType] = isConsentGranted(consentType) ? "granted" : "denied"; } return result; }; const deriveDefaultConsentFromGtmConsentState = function() { const consentState = getConsentState(); const grantedScopeLookup = {}; const grantedScopes = []; const grantScope = function(scope) { if (!scope || grantedScopeLookup[scope]) { return; } grantedScopeLookup[scope] = true; grantedScopes.push(scope); }; if (consentState.analytics_storage === "granted") { grantScope("analytics.storage"); grantScope("analytics.measurement"); } if (consentState.personalization_storage === "granted") { grantScope("personalization.storage"); } if (consentState.ad_storage === "granted") { grantScope("ads.storage"); } if (consentState.ad_user_data === "granted") { grantScope("ads.user_data"); } if (consentState.ad_personalization === "granted") { grantScope("ads.personalization"); } return grantedScopes.length > 0 ? grantedScopes : undefined; }; let requestSequence = 0; const enqueuePublicCommand = function(queuePush, instanceId, command) { requestSequence += 1; const requestId = "gtm_" + command.kind + "_" + requestSequence; queuePush({ version: "1", instanceId: instanceId, requestId: requestId, idempotencyKey: requestId, clientMeta: queueClientMeta, command: command, }); }; const apiKey = trimString(data.apiKey); if (!apiKey) { if (typeof data.gtmOnFailure === "function") { data.gtmOnFailure(); } return; } const encodedApiKey = encodeUriComponent(apiKey); if (!encodedApiKey) { if (typeof data.gtmOnFailure === "function") { data.gtmOnFailure(); } return; } const widgetUrl = loaderScriptBaseUrl + "/" + encodedApiKey + "/loader.js"; const queuePush = createQueue(queueKey); const instanceId = "gtm-" + encodedApiKey; const initOptions = { apiKey: apiKey, clientMeta: queueClientMeta, }; const themeInput = resolveGtmThemeInputFromTemplateData(data); const colorScheme = normalizeThemeInput(themeInput); if (colorScheme !== undefined) { initOptions.colorScheme = colorScheme; } const defaultConsent = deriveDefaultConsentFromGtmConsentState(); if (defaultConsent !== undefined) { initOptions.defaultConsent = defaultConsent; } if (generatedRuntimeEndpoints !== null) { initOptions.runtimeEndpoints = { apiUrl: generatedRuntimeEndpoints.apiUrl, coreUrl: generatedRuntimeEndpoints.coreUrl, }; } enqueuePublicCommand(queuePush, instanceId, { kind: "init", opts: initOptions, }); const identifyCommand = getIdentifyCommand(data); if (identifyCommand !== undefined) { enqueuePublicCommand(queuePush, instanceId, identifyCommand); } log("Loading getuserfeedback loader:", widgetUrl); if (queryPermission("inject_script", widgetUrl)) { injectScript( widgetUrl, typeof data.gtmOnSuccess === "function" ? data.gtmOnSuccess : undefined, typeof data.gtmOnFailure === "function" ? data.gtmOnFailure : undefined, "getuserfeedback", ); } else { if (typeof data.gtmOnFailure === "function") { data.gtmOnFailure(); } } ___WEB_PERMISSIONS___ [ { "instance": { "key": { "publicId": "inject_script", "versionId": "1" }, "param": [ { "key": "urls", "value": { "type": 2, "listItem": [ { "type": 1, "string": "https://cdn.getuserfeedback.com/widget/loader/v1/*/loader.js" } ] } } ] }, "clientAnnotations": { "isEditedByUser": true }, "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_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": "__getuserfeedback_queue" }, { "type": 8, "boolean": true }, { "type": 8, "boolean": true }, { "type": 8, "boolean": false } ] } ] } } ] }, "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": "functionality_storage" }, { "type": 8, "boolean": true }, { "type": 8, "boolean": false } ] }, { "type": 3, "mapKey": [ { "type": 1, "string": "consentType" }, { "type": 1, "string": "read" }, { "type": 1, "string": "write" } ], "mapValue": [ { "type": 1, "string": "security_storage" }, { "type": 8, "boolean": true }, { "type": 8, "boolean": false } ] }, { "type": 3, "mapKey": [ { "type": 1, "string": "consentType" }, { "type": 1, "string": "read" }, { "type": 1, "string": "write" } ], "mapValue": [ { "type": 1, "string": "analytics_storage" }, { "type": 8, "boolean": true }, { "type": 8, "boolean": false } ] }, { "type": 3, "mapKey": [ { "type": 1, "string": "consentType" }, { "type": 1, "string": "read" }, { "type": 1, "string": "write" } ], "mapValue": [ { "type": 1, "string": "personalization_storage" }, { "type": 8, "boolean": true }, { "type": 8, "boolean": false } ] }, { "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 } ] }, { "type": 3, "mapKey": [ { "type": 1, "string": "consentType" }, { "type": 1, "string": "read" }, { "type": 1, "string": "write" } ], "mapValue": [ { "type": 1, "string": "ad_user_data" }, { "type": 8, "boolean": true }, { "type": 8, "boolean": false } ] }, { "type": 3, "mapKey": [ { "type": 1, "string": "consentType" }, { "type": 1, "string": "read" }, { "type": 1, "string": "write" } ], "mapValue": [ { "type": 1, "string": "ad_personalization" }, { "type": 8, "boolean": true }, { "type": 8, "boolean": false } ] } ] } } ] }, "clientAnnotations": { "isEditedByUser": true }, "isRequired": true }, { "instance": { "key": { "publicId": "read_data_layer", "versionId": "1" }, "param": [ { "key": "keyPatterns", "value": { "type": 2, "listItem": [ { "type": 1, "string": "userId" }, { "type": 1, "string": "user.userId" }, { "type": 1, "string": "user.id" }, { "type": 1, "string": "traits.userId" }, { "type": 1, "string": "traits.id" }, { "type": 1, "string": "context.userId" }, { "type": 1, "string": "context.user.id" }, { "type": 1, "string": "email" }, { "type": 1, "string": "user.email" }, { "type": 1, "string": "traits.email" }, { "type": 1, "string": "context.email" }, { "type": 1, "string": "context.user.email" }, { "type": 1, "string": "firstName" }, { "type": 1, "string": "first_name" }, { "type": 1, "string": "user.firstName" }, { "type": 1, "string": "user.first_name" }, { "type": 1, "string": "user.givenName" }, { "type": 1, "string": "user.given_name" }, { "type": 1, "string": "traits.firstName" }, { "type": 1, "string": "traits.first_name" }, { "type": 1, "string": "traits.givenName" }, { "type": 1, "string": "traits.given_name" }, { "type": 1, "string": "context.firstName" }, { "type": 1, "string": "context.first_name" }, { "type": 1, "string": "context.user.firstName" }, { "type": 1, "string": "context.user.first_name" }, { "type": 1, "string": "context.user.givenName" }, { "type": 1, "string": "context.user.given_name" }, { "type": 1, "string": "lastName" }, { "type": 1, "string": "last_name" }, { "type": 1, "string": "user.lastName" }, { "type": 1, "string": "user.last_name" }, { "type": 1, "string": "user.familyName" }, { "type": 1, "string": "user.family_name" }, { "type": 1, "string": "traits.lastName" }, { "type": 1, "string": "traits.last_name" }, { "type": 1, "string": "traits.familyName" }, { "type": 1, "string": "traits.family_name" }, { "type": 1, "string": "context.lastName" }, { "type": 1, "string": "context.last_name" }, { "type": 1, "string": "context.user.lastName" }, { "type": 1, "string": "context.user.last_name" }, { "type": 1, "string": "context.user.familyName" }, { "type": 1, "string": "context.user.family_name" }, { "type": 1, "string": "phone" }, { "type": 1, "string": "user.phone" }, { "type": 1, "string": "traits.phone" }, { "type": 1, "string": "context.phone" }, { "type": 1, "string": "context.user.phone" } ] } } ] }, "clientAnnotations": { "isEditedByUser": true }, "isRequired": true } ] ___TESTS___ scenarios: - name: Loader URL uses encoded API key code: |- let capturedUrl = ''; mock('queryPermission', function(permissionId) { return permissionId === 'inject_script'; }); mock('encodeUriComponent', function(value) { return 'encoded-' + value; }); mock('injectScript', function(url, onSuccess) { capturedUrl = url; onSuccess(); }); runCode({ apiKey: 'test-api-key', themeMode: 'host', themeAttr: 'class,data-theme', identifyMode: 'disabled' }); assertThat(capturedUrl).isEqualTo('https://cdn.getuserfeedback.com/widget/loader/v1/encoded-test-api-key/loader.js'); - name: Permission denial skips script injection code: |- let injectScriptCalls = 0; mock('queryPermission', function() { return false; }); mock('encodeUriComponent', function(value) { return value; }); mock('injectScript', function() { injectScriptCalls = injectScriptCalls + 1; }); runCode({ apiKey: 'test-api-key', themeMode: 'host', themeAttr: 'class,data-theme', identifyMode: 'disabled' }); assertThat(injectScriptCalls).isEqualTo(0); - name: Fixed light theme sets init colorScheme code: |- let queuedCommands = []; mock('queryPermission', function(permissionId) { return permissionId === 'inject_script'; }); mock('encodeUriComponent', function(value) { return value; }); mock('injectScript', function(url, onSuccess) { onSuccess(); }); mock('createQueue', function() { return function(command) { queuedCommands.push(command); }; }); runCode({ apiKey: 'test-api-key', themeMode: 'light', identifyMode: 'disabled' }); assertThat(queuedCommands.length).isEqualTo(1); assertThat(queuedCommands[0].command.kind).isEqualTo('init'); assertThat(queuedCommands[0].command.opts.colorScheme).isEqualTo('light'); - name: Fixed dark theme sets init colorScheme code: |- let queuedCommands = []; mock('queryPermission', function(permissionId) { return permissionId === 'inject_script'; }); mock('encodeUriComponent', function(value) { return value; }); mock('injectScript', function(url, onSuccess) { onSuccess(); }); mock('createQueue', function() { return function(command) { queuedCommands.push(command); }; }); runCode({ apiKey: 'test-api-key', themeMode: 'dark', identifyMode: 'disabled' }); assertThat(queuedCommands[0].command.opts.colorScheme).isEqualTo('dark'); - name: Variable theme mode resolves system colorScheme code: |- let queuedCommands = []; mock('queryPermission', function(permissionId) { return permissionId === 'inject_script'; }); mock('encodeUriComponent', function(value) { return value; }); mock('injectScript', function(url, onSuccess) { onSuccess(); }); mock('createQueue', function() { return function(command) { queuedCommands.push(command); }; }); runCode({ apiKey: 'test-api-key', themeMode: 'variable', themeModeVariable: 'system', identifyMode: 'disabled' }); assertThat(queuedCommands[0].command.opts.colorScheme).isEqualTo('system'); - name: Automatic consent emits only analytics scopes when analytics storage is granted code: |- let queuedCommands = []; mock('queryPermission', function(permissionId) { return permissionId === 'inject_script'; }); mock('encodeUriComponent', function(value) { return value; }); mock('injectScript', function(url, onSuccess) { onSuccess(); }); mock('createQueue', function() { return function(command) { queuedCommands.push(command); }; }); mock('isConsentGranted', function(consentType) { return consentType === 'analytics_storage'; }); runCode({ apiKey: 'test-api-key', themeMode: 'host', themeAttr: 'class,data-theme', identifyMode: 'disabled' }); assertThat(queuedCommands[0].command.opts.defaultConsent).contains('analytics.storage', 'analytics.measurement'); - name: Automatic consent omits default consent when no GTM consent is granted code: |- let queuedCommands = []; mock('queryPermission', function(permissionId) { return permissionId === 'inject_script'; }); mock('encodeUriComponent', function(value) { return value; }); mock('injectScript', function(url, onSuccess) { onSuccess(); }); mock('createQueue', function() { return function(command) { queuedCommands.push(command); }; }); mock('isConsentGranted', function() { return false; }); runCode({ apiKey: 'test-api-key', themeMode: 'host', themeAttr: 'class,data-theme', identifyMode: 'disabled' }); assertThat(queuedCommands[0].command.opts.defaultConsent).isEqualTo(undefined); - name: Automatic consent includes analytics measurement when analytics storage is granted code: |- let queuedCommands = []; mock('queryPermission', function(permissionId) { return permissionId === 'inject_script'; }); mock('encodeUriComponent', function(value) { return value; }); mock('injectScript', function(url, onSuccess) { onSuccess(); }); mock('createQueue', function() { return function(command) { queuedCommands.push(command); }; }); mock('isConsentGranted', function(consentType) { return consentType === 'analytics_storage'; }); runCode({ apiKey: 'test-api-key', themeMode: 'host', themeAttr: 'class,data-theme', identifyMode: 'disabled' }); assertThat(queuedCommands[0].command.opts.defaultConsent).containsExactly('analytics.storage', 'analytics.measurement'); - name: Intelligent identity reads common data layer signals code: |- let queuedCommands = []; mock('queryPermission', function(permissionId) { return permissionId === 'inject_script' || permissionId === 'read_data_layer'; }); mock('encodeUriComponent', function(value) { return value; }); mock('copyFromDataLayer', function(key) { if (key === 'userId') return 'user_123'; if (key === 'email') return 'user@example.com'; if (key === 'phone') return '+61400000000'; return undefined; }); mock('injectScript', function(url, onSuccess) { onSuccess(); }); mock('createQueue', function() { return function(command) { queuedCommands.push(command); }; }); runCode({ apiKey: 'test-api-key', themeMode: 'host', themeAttr: 'class,data-theme', identifyMode: 'intelligent' }); assertThat(queuedCommands.length).isEqualTo(2); assertThat(queuedCommands[1].command.kind).isEqualTo('identify'); assertThat(queuedCommands[1].command.userId).isEqualTo('user_123'); assertThat(queuedCommands[1].command.traits.email).isEqualTo('user@example.com'); assertThat(queuedCommands[1].command.traits.phone).isEqualTo('+61400000000'); - name: Intelligent identity can emit traits without user ID code: |- let queuedCommands = []; mock('queryPermission', function(permissionId) { return permissionId === 'inject_script' || permissionId === 'read_data_layer'; }); mock('encodeUriComponent', function(value) { return value; }); mock('copyFromDataLayer', function(key) { if (key === 'email') return 'user@example.com'; return undefined; }); mock('injectScript', function(url, onSuccess) { onSuccess(); }); mock('createQueue', function() { return function(command) { queuedCommands.push(command); }; }); runCode({ apiKey: 'test-api-key', themeMode: 'host', themeAttr: 'class,data-theme', identifyMode: 'intelligent' }); assertThat(queuedCommands.length).isEqualTo(2); assertThat(queuedCommands[1].command.kind).isEqualTo('identify'); assertThat(queuedCommands[1].command.userId).isEqualTo(undefined); assertThat(queuedCommands[1].command.traits.email).isEqualTo('user@example.com'); - name: Intelligent identity skips data layer when permission is denied code: |- let queuedCommands = []; let copyFromDataLayerCalls = 0; mock('queryPermission', function(permissionId) { return permissionId === 'inject_script'; }); mock('encodeUriComponent', function(value) { return value; }); mock('copyFromDataLayer', function() { copyFromDataLayerCalls = copyFromDataLayerCalls + 1; return 'unexpected'; }); mock('injectScript', function(url, onSuccess) { onSuccess(); }); mock('createQueue', function() { return function(command) { queuedCommands.push(command); }; }); runCode({ apiKey: 'test-api-key', themeMode: 'host', themeAttr: 'class,data-theme', identifyMode: 'intelligent' }); assertThat(copyFromDataLayerCalls).isEqualTo(0); assertThat(queuedCommands.length).isEqualTo(1); assertThat(queuedCommands[0].command.kind).isEqualTo('init'); - name: Disabled identity queues only init code: |- let queuedCommands = []; mock('queryPermission', function(permissionId) { return permissionId === 'inject_script'; }); mock('encodeUriComponent', function(value) { return value; }); mock('injectScript', function(url, onSuccess) { onSuccess(); }); mock('createQueue', function() { return function(command) { queuedCommands.push(command); }; }); runCode({ apiKey: 'test-api-key', themeMode: 'host', themeAttr: 'class,data-theme', identifyMode: 'disabled' }); assertThat(queuedCommands.length).isEqualTo(1); assertThat(queuedCommands[0].command.kind).isEqualTo('init'); - name: Advanced identity can encode user ID as primary identity code: |- let queuedCommands = []; mock('queryPermission', function(permissionId) { return permissionId === 'inject_script'; }); mock('encodeUriComponent', function(value) { return value; }); mock('injectScript', function(url, onSuccess) { onSuccess(); }); mock('createQueue', function() { return function(command) { queuedCommands.push(command); }; }); runCode({ apiKey: 'test-api-key', themeMode: 'host', themeAttr: 'class,data-theme', identifyMode: 'advanced', identifyPrimaryIdentityType: 'userId', identifyPrimaryIdentityValue: 'user_456', identifyTraits: [ { name: 'plan', value: 'pro' } ] }); assertThat(queuedCommands.length).isEqualTo(2); assertThat(queuedCommands[1].command.kind).isEqualTo('identify'); assertThat(queuedCommands[1].command.userId).isEqualTo('user_456'); assertThat(queuedCommands[1].command.traits.plan).isEqualTo('pro'); - name: Advanced identity can encode email as the primary identity code: |- let queuedCommands = []; mock('queryPermission', function(permissionId) { return permissionId === 'inject_script'; }); mock('encodeUriComponent', function(value) { return value; }); mock('injectScript', function(url, onSuccess) { onSuccess(); }); mock('createQueue', function() { return function(command) { queuedCommands.push(command); }; }); runCode({ apiKey: 'test-api-key', themeMode: 'host', themeAttr: 'class,data-theme', identifyMode: 'advanced', identifyPrimaryIdentityType: 'email', identifyPrimaryIdentityValue: 'owner@example.com', identifyTraits: [ { name: 'plan', value: 'pro' } ] }); assertThat(queuedCommands.length).isEqualTo(2); assertThat(queuedCommands[1].command.kind).isEqualTo('identify'); assertThat(queuedCommands[1].command.traits.email).isEqualTo('owner@example.com'); assertThat(queuedCommands[1].command.traits.plan).isEqualTo('pro'); - name: Inject passes a failure handler to injectScript code: |- let hasFailureHandler = false; mock('queryPermission', function(permissionId) { return permissionId === 'inject_script'; }); mock('encodeUriComponent', function(value) { return value; }); mock('injectScript', function(url, onSuccess, onFailure) { hasFailureHandler = typeof onFailure === 'function'; onFailure(); }); runCode({ apiKey: 'test-api-key', themeMode: 'host', themeAttr: 'class,data-theme', identifyMode: 'disabled' }); assertThat(hasFailureHandler).isEqualTo(true); - name: Inject passes a success handler to injectScript code: |- let hasSuccessHandler = false; mock('queryPermission', function(permissionId) { return permissionId === 'inject_script'; }); mock('encodeUriComponent', function(value) { return value; }); mock('injectScript', function(url, onSuccess) { hasSuccessHandler = typeof onSuccess === 'function'; onSuccess(); }); runCode({ apiKey: 'test-api-key', themeMode: 'host', themeAttr: 'class,data-theme', identifyMode: 'disabled' }); assertThat(hasSuccessHandler).isEqualTo(true); ___NOTES___ Generated from @getuserfeedback/adapters/gtm.