{
    "exportFormatVersion": 2,
    "exportTime": "2025-07-11 09:53:13",
    "containerVersion": {
        "path": "accounts/6004919094/containers/52118568/versions/0",
        "accountId": "6004919094",
        "containerId": "52118568",
        "containerVersionId": "0",
        "container": {
            "path": "accounts/6004919094/containers/52118568",
            "accountId": "6004919094",
            "containerId": "52118568",
            "name": "demo.bambuser.shop",
            "publicId": "GTM-P3PVVX5",
            "usageContext": [
                "WEB"
            ],
            "fingerprint": "1632749035751",
            "tagManagerUrl": "https://tagmanager.google.com/#/container/accounts/6004919094/containers/52118568/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-P3PVVX5"
            ]
        },
        "tag": [
            {
                "accountId": "6004919094",
                "containerId": "52118568",
                "tagId": "168",
                "name": "Bambuser - Purchase",
                "type": "cvt_NC685",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "scriptUrl"
                    },
                    {
                        "type": "BOOLEAN",
                        "key": "debug",
                        "value": "false"
                    },
                    {
                        "type": "TEMPLATE",
                        "key": "feature",
                        "value": "ecomTracker"
                    },
                    {
                        "type": "TEMPLATE",
                        "key": "transactionObject",
                        "value": "{{cjs - Bambuser Transaction Object}}"
                    },
                    {
                        "type": "TEMPLATE",
                        "key": "ecomEventName",
                        "value": "purchase"
                    },
                    {
                        "type": "TEMPLATE",
                        "key": "products",
                        "value": "{{cjs - Bambuser Products Object}}"
                    }
                ],
                "fingerprint": "1752226810053",
                "firingTriggerId": [
                    "167"
                ],
                "parentFolderId": "163",
                "tagFiringOption": "ONCE_PER_EVENT",
                "monitoringMetadata": {
                    "type": "MAP"
                },
                "consentSettings": {
                    "consentStatus": "NOT_SET"
                }
            },
            {
                "accountId": "6004919094",
                "containerId": "52118568",
                "tagId": "174",
                "name": "Bambuser - Add To Cart",
                "type": "cvt_NC685",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "scriptUrl"
                    },
                    {
                        "type": "BOOLEAN",
                        "key": "debug",
                        "value": "false"
                    },
                    {
                        "type": "TEMPLATE",
                        "key": "feature",
                        "value": "ecomTracker"
                    },
                    {
                        "type": "TEMPLATE",
                        "key": "ecomEventName",
                        "value": "add-to-cart"
                    },
                    {
                        "type": "TEMPLATE",
                        "key": "products",
                        "value": "{{cjs - Bambuser Products Object}}"
                    }
                ],
                "fingerprint": "1752227390716",
                "firingTriggerId": [
                    "169"
                ],
                "parentFolderId": "163",
                "tagFiringOption": "ONCE_PER_EVENT",
                "monitoringMetadata": {
                    "type": "MAP"
                },
                "consentSettings": {
                    "consentStatus": "NOT_SET"
                }
            },
            {
                "accountId": "6004919094",
                "containerId": "52118568",
                "tagId": "175",
                "name": "Bambuser - Refund",
                "type": "cvt_NC685",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "scriptUrl"
                    },
                    {
                        "type": "BOOLEAN",
                        "key": "debug",
                        "value": "false"
                    },
                    {
                        "type": "TEMPLATE",
                        "key": "feature",
                        "value": "ecomTracker"
                    },
                    {
                        "type": "TEMPLATE",
                        "key": "transactionObject",
                        "value": "{{cjs - Bambuser Transaction Object}}"
                    },
                    {
                        "type": "TEMPLATE",
                        "key": "ecomEventName",
                        "value": "refund"
                    },
                    {
                        "type": "TEMPLATE",
                        "key": "products",
                        "value": "{{cjs - Bambuser Products Object}}"
                    }
                ],
                "fingerprint": "1752227428273",
                "firingTriggerId": [
                    "171"
                ],
                "parentFolderId": "163",
                "tagFiringOption": "ONCE_PER_EVENT",
                "monitoringMetadata": {
                    "type": "MAP"
                },
                "consentSettings": {
                    "consentStatus": "NOT_SET"
                }
            },
            {
                "accountId": "6004919094",
                "containerId": "52118568",
                "tagId": "176",
                "name": "Bambuser - Add To Wishlist",
                "type": "cvt_NC685",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "scriptUrl"
                    },
                    {
                        "type": "BOOLEAN",
                        "key": "debug",
                        "value": "false"
                    },
                    {
                        "type": "TEMPLATE",
                        "key": "feature",
                        "value": "ecomTracker"
                    },
                    {
                        "type": "TEMPLATE",
                        "key": "ecomEventName",
                        "value": "add-to-wishlist"
                    },
                    {
                        "type": "TEMPLATE",
                        "key": "products",
                        "value": "{{cjs - Bambuser Products Object}}"
                    }
                ],
                "fingerprint": "1752227466436",
                "firingTriggerId": [
                    "173"
                ],
                "parentFolderId": "163",
                "tagFiringOption": "ONCE_PER_EVENT",
                "monitoringMetadata": {
                    "type": "MAP"
                },
                "consentSettings": {
                    "consentStatus": "NOT_SET"
                }
            }
        ],
        "trigger": [
            {
                "accountId": "6004919094",
                "containerId": "52118568",
                "triggerId": "167",
                "name": "GA4 Ecommerce Purchase",
                "type": "CUSTOM_EVENT",
                "customEventFilter": [
                    {
                        "type": "EQUALS",
                        "parameter": [
                            {
                                "type": "TEMPLATE",
                                "key": "arg0",
                                "value": "{{_event}}"
                            },
                            {
                                "type": "TEMPLATE",
                                "key": "arg1",
                                "value": "purchase"
                            }
                        ]
                    }
                ],
                "fingerprint": "1752226754926",
                "parentFolderId": "163"
            },
            {
                "accountId": "6004919094",
                "containerId": "52118568",
                "triggerId": "169",
                "name": "GA4 Ecommerce 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": "1752227237486",
                "parentFolderId": "163"
            },
            {
                "accountId": "6004919094",
                "containerId": "52118568",
                "triggerId": "171",
                "name": "GA4 Ecommence Refund",
                "type": "CUSTOM_EVENT",
                "customEventFilter": [
                    {
                        "type": "EQUALS",
                        "parameter": [
                            {
                                "type": "TEMPLATE",
                                "key": "arg0",
                                "value": "{{_event}}"
                            },
                            {
                                "type": "TEMPLATE",
                                "key": "arg1",
                                "value": "refund"
                            }
                        ]
                    }
                ],
                "fingerprint": "1752227184806",
                "parentFolderId": "163"
            },
            {
                "accountId": "6004919094",
                "containerId": "52118568",
                "triggerId": "172",
                "name": "GA4 Ecommerce View Item",
                "type": "CUSTOM_EVENT",
                "customEventFilter": [
                    {
                        "type": "EQUALS",
                        "parameter": [
                            {
                                "type": "TEMPLATE",
                                "key": "arg0",
                                "value": "{{_event}}"
                            },
                            {
                                "type": "TEMPLATE",
                                "key": "arg1",
                                "value": "view_item"
                            }
                        ]
                    }
                ],
                "fingerprint": "1752227213392",
                "parentFolderId": "163"
            },
            {
                "accountId": "6004919094",
                "containerId": "52118568",
                "triggerId": "173",
                "name": "GA4 Ecommerce Add To Wishlist",
                "type": "CUSTOM_EVENT",
                "customEventFilter": [
                    {
                        "type": "EQUALS",
                        "parameter": [
                            {
                                "type": "TEMPLATE",
                                "key": "arg0",
                                "value": "{{_event}}"
                            },
                            {
                                "type": "TEMPLATE",
                                "key": "arg1",
                                "value": "add_to_wishlist"
                            }
                        ]
                    }
                ],
                "fingerprint": "1752227265026",
                "parentFolderId": "163"
            }
        ],
        "variable": [
            {
                "accountId": "6004919094",
                "containerId": "52118568",
                "variableId": "164",
                "name": "cjs - Bambuser Products Object",
                "type": "jsm",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "javascript",
                        "value": "function () {\n  // This function transforms the Ecommerce GA4 standard object structure to what\n  // Bambuser expects in their products object for ecommerce events\n  // https://developers.google.com/analytics/devguides/collection/ga4/ecommerce?client_type=gtm#make_a_purchase_or_issue_a_refund\n  \n  // You may have other datalayer variabels available that you can use to make this transformation\n  // work as expected\n  \n  var items = {{dlv - Ecommerce Object}}.items;\n  if (Array.isArray(items)) {\n    return items.map(function(item) {\n\n        return {\n            id: item.item_id,\n            name: item.item_name,\n            currency: {{dlv - Ecommerce Object}}.currency,\n            price: item.price,\n            coupon: item.coupon,\n            discount: item.discount,\n            quantity: item.quantity,\n            brand: item.item_brand,\n            category: [item.item_category, item.item_category2, item.item_category3].filter(function(cat) { return !!cat}).join('>'),\n            location: item.location_id\n        };\n    });\n  } else {\n    return [];\n  }\n}"
                    }
                ],
                "fingerprint": "1752226576693",
                "parentFolderId": "163",
                "formatValue": {}
            },
            {
                "accountId": "6004919094",
                "containerId": "52118568",
                "variableId": "165",
                "name": "cjs - Bambuser Transaction Object",
                "type": "jsm",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "javascript",
                        "value": "function () {\n  // This function transforms the Ecommerce GA4 standard object structure to what\n  // Bambuser expects in their transaction object in purchases and refunds\n  // https://developers.google.com/analytics/devguides/collection/ga4/ecommerce?client_type=gtm#make_a_purchase_or_issue_a_refund\n  \n  // You may have other datalayer variabels available that you can use to make this transformation\n  // work as expected\n  \n  var productItems = {{dlv - Ecommerce Object}}.items || [];\n  var discounts = 0;\n  for (var i = 0; i < productItems.length; i++) {\n    discounts += productItems[i].discount || 0;\n  }\n  return {\n      id: {{dlv - Ecommerce Object}}.transaction_id, // The unique transaction ID or order id. \n      currency: {{dlv - Ecommerce Object}}.currency,\n      subtotal: {{dlv - Ecommerce Object}}.value,\n      total: {{dlv - Ecommerce Object}}.value + {{dlv - Ecommerce Object}}.shipping + {{dlv - Ecommerce Object}}.tax,\n      tax: {{dlv - Ecommerce Object}}.tax,\n      shippingCost: {{dlv - Ecommerce Object}}.shipping,\n      coupon: {{dlv - Ecommerce Object}}.coupon,\n      discount: discounts,\n  }\n}"
                    }
                ],
                "fingerprint": "1752226668608",
                "parentFolderId": "163",
                "formatValue": {}
            },
            {
                "accountId": "6004919094",
                "containerId": "52118568",
                "variableId": "166",
                "name": "dlv - Ecommerce Object",
                "type": "v",
                "parameter": [
                    {
                        "type": "INTEGER",
                        "key": "dataLayerVersion",
                        "value": "2"
                    },
                    {
                        "type": "BOOLEAN",
                        "key": "setDefaultValue",
                        "value": "false"
                    },
                    {
                        "type": "TEMPLATE",
                        "key": "name",
                        "value": "ecommerce"
                    }
                ],
                "fingerprint": "1752226668609",
                "parentFolderId": "163",
                "formatValue": {}
            }
        ],
        "folder": [
            {
                "accountId": "6004919094",
                "containerId": "52118568",
                "folderId": "163",
                "name": "Bambuser Shopper Events Tracking",
                "fingerprint": "1752226482571"
            }
        ],
        "fingerprint": "1752227593002",
        "tagManagerUrl": "https://tagmanager.google.com/#/versions/accounts/6004919094/containers/52118568/versions/0?apiLink=version",
        "customTemplate": [
            {
                "accountId": "6004919094",
                "containerId": "52118568",
                "templateId": "12",
                "name": "Bambuser Live Shopping",
                "fingerprint": "1751918478497",
                "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_NC685\",\n  \"version\": 1,\n  \"displayName\": \"Bambuser Live Shopping\",\n  \"categories\": [\n    \"ANALYTICS\",\n    \"MARKETING\",\n    \"CHAT\",\n    \"SALES\",\n    \"PERSONALIZATION\"\n  ],\n  \"brand\": {\n    \"id\": \"github.com_bambuser\",\n    \"displayName\": \"bambuser\",\n    \"thumbnail\": \"data:image/png;base64,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\\u003d\\u003d\"\n  },\n  \"description\": \"If you\\u0027re a Bambuser customer this template is an easy way to set up the Bambuser Live Shopping conversion tracker, Video Consultation or Shoppable video on your website.\",\n  \"containerContexts\": [\n    \"WEB\"\n  ]\n}\n\n\n___TEMPLATE_PARAMETERS___\n\n[\n  {\n    \"type\": \"SELECT\",\n    \"name\": \"feature\",\n    \"displayName\": \"Feature\",\n    \"selectItems\": [\n      {\n        \"value\": \"ecomTracker\",\n        \"displayValue\": \"Shopper Events Tracking\"\n      },\n      {\n        \"value\": \"oneToOneIntegration\",\n        \"displayValue\": \"Video Consultation\"\n      },\n      {\n        \"value\": \"vod\",\n        \"displayValue\": \"Shoppable Video\"\n      },\n      {\n        \"value\": \"conversionTracker\",\n        \"displayValue\": \"Legacy Conversion Tracker\"\n      }\n    ],\n    \"simpleValueType\": true,\n    \"defaultValue\": \"ecomTracker\"\n  },\n  {\n    \"type\": \"SELECT\",\n    \"name\": \"ecomEventName\",\n    \"displayName\": \"Event name\",\n    \"macrosInSelect\": false,\n    \"selectItems\": [\n      {\n        \"value\": \"purchase\",\n        \"displayValue\": \"Purchase\"\n      },\n      {\n        \"value\": \"add-to-cart\",\n        \"displayValue\": \"Add to Cart\"\n      },\n      {\n        \"value\": \"update-cart\",\n        \"displayValue\": \"Update Cart\"\n      },\n      {\n        \"value\": \"add-to-wishlist\",\n        \"displayValue\": \"Add to Wishlist\"\n      },\n      {\n        \"value\": \"remove-from-wishlist\",\n        \"displayValue\": \"Remove from Wishlist\"\n      },\n      {\n        \"value\": \"product-view\",\n        \"displayValue\": \"Product View\"\n      },\n      {\n        \"value\": \"refund\",\n        \"displayValue\": \"Refund\"\n      }\n    ],\n    \"simpleValueType\": true,\n    \"enablingConditions\": [\n      {\n        \"paramName\": \"feature\",\n        \"paramValue\": \"ecomTracker\",\n        \"type\": \"EQUALS\"\n      }\n    ],\n    \"valueValidators\": [\n      {\n        \"type\": \"NON_EMPTY\"\n      }\n    ],\n    \"defaultValue\": \"purchase\"\n  },\n  {\n    \"type\": \"TEXT\",\n    \"name\": \"transactionObject\",\n    \"displayName\": \"Transaction Object\",\n    \"simpleValueType\": true,\n    \"enablingConditions\": [\n      {\n        \"paramName\": \"ecomEventName\",\n        \"paramValue\": \"purchase\",\n        \"type\": \"EQUALS\"\n      },\n      {\n        \"paramName\": \"ecomEventName\",\n        \"paramValue\": \"refund\",\n        \"type\": \"EQUALS\"\n      }\n    ],\n    \"help\": \"Provide a custom javascript variable object that specifies information about the transaction: \\nhttps://bambuser.com/docs/live/shopper-events-tracking/#transaction-object\"\n  },\n  {\n    \"type\": \"TEXT\",\n    \"name\": \"products\",\n    \"displayName\": \"Products array\",\n    \"simpleValueType\": true,\n    \"enablingConditions\": [\n      {\n        \"paramName\": \"feature\",\n        \"paramValue\": \"ecomTracker\",\n        \"type\": \"EQUALS\"\n      }\n    ],\n    \"help\": \"Provide a custom javascript variable object that specifies information about the products:  https://bambuser.com/docs/live/shopper-events-tracking/#product-object\"\n  },\n  {\n    \"type\": \"TEXT\",\n    \"name\": \"orderId\",\n    \"displayName\": \"Order ID\",\n    \"simpleValueType\": true,\n    \"help\": \"Unique identifier for a placed Order - Can be String or Number\",\n    \"valueHint\": \"order ID,  e.g. 12345\",\n    \"valueValidators\": [\n      {\n        \"type\": \"NON_EMPTY\",\n        \"errorMessage\": \"You must provide a value\"\n      }\n    ],\n    \"enablingConditions\": [\n      {\n        \"paramName\": \"feature\",\n        \"paramValue\": \"conversionTracker\",\n        \"type\": \"EQUALS\"\n      }\n    ]\n  },\n  {\n    \"type\": \"TEXT\",\n    \"name\": \"orderValue\",\n    \"displayName\": \"Order Value\",\n    \"simpleValueType\": true,\n    \"help\": \"Total cost of the Order -  Must be Number\",\n    \"valueHint\": \"Total value of order, e.g. 1000\",\n    \"valueValidators\": [\n      {\n        \"type\": \"NON_EMPTY\",\n        \"errorMessage\": \"You must provide an Order Value\"\n      }\n    ],\n    \"enablingConditions\": [\n      {\n        \"paramName\": \"feature\",\n        \"paramValue\": \"conversionTracker\",\n        \"type\": \"EQUALS\"\n      }\n    ]\n  },\n  {\n    \"type\": \"TEXT\",\n    \"name\": \"productIds\",\n    \"displayName\": \"Product IDs\",\n    \"simpleValueType\": true,\n    \"help\": \"A comma-separated string or an array of product IDs that were part of the Order.\\nE.g.  \\u0027123,456,789\\u0027 or [\\u0027123\\u0027, \\u0027456\\u0027, \\u0027789\\u0027]\",\n    \"valueHint\": \"IDs of products in order, e.g. 123,456,789\",\n    \"valueValidators\": [\n      {\n        \"type\": \"NON_EMPTY\",\n        \"errorMessage\": \"You must provide Product IDs\"\n      }\n    ],\n    \"enablingConditions\": [\n      {\n        \"paramName\": \"feature\",\n        \"paramValue\": \"conversionTracker\",\n        \"type\": \"EQUALS\"\n      }\n    ]\n  },\n  {\n    \"type\": \"TEXT\",\n    \"name\": \"currency\",\n    \"displayName\": \"Currency\",\n    \"simpleValueType\": true,\n    \"help\": \"Currency in which the Order Value was paid. \\nList of supported currencies is available on \\u003ca href\\u003d\\u0027https://fixer.io/symbols\\u0027\\u003ehttps://fixer.io/symbols\\u003c/a\\u003e\",\n    \"valueHint\": \"Currency of order, e.g. SEK, EUR, USD, etc\",\n    \"valueValidators\": [\n      {\n        \"type\": \"NON_EMPTY\",\n        \"errorMessage\": \"You must provide a Currency\"\n      }\n    ],\n    \"enablingConditions\": [\n      {\n        \"paramName\": \"feature\",\n        \"paramValue\": \"conversionTracker\",\n        \"type\": \"EQUALS\"\n      }\n    ]\n  },\n  {\n    \"type\": \"GROUP\",\n    \"name\": \"setting\",\n    \"displayName\": \"Settings\",\n    \"subParams\": [\n      {\n        \"type\": \"CHECKBOX\",\n        \"name\": \"debug\",\n        \"checkboxText\": \"Enable debug mode\",\n        \"simpleValueType\": true,\n        \"help\": \"Logs debugging information on browser console\"\n      },\n      {\n        \"type\": \"TEXT\",\n        \"name\": \"scriptUrl\",\n        \"displayName\": \"Custom Tracking Library URL (Optional)\",\n        \"simpleValueType\": true,\n        \"canBeEmptyString\": true,\n        \"valueHint\": \"E.g. https://cdn.liveshopping.bambuser.com/metrics/bambuser.min.js\",\n        \"valueValidators\": [\n          {\n            \"type\": \"REGEX\",\n            \"args\": [\n              \"(^$|^(https?:\\\\/\\\\/)?([\\\\da-z\\\\.-]+\\\\.[a-z\\\\.]{2,6}|[\\\\d\\\\.]+)([\\\\/:?\\u003d\\u0026#]{1}[\\\\da-z\\\\.-]+)*[\\\\/\\\\?]?$)\"\n            ],\n            \"errorMessage\": \"Please insert a valid URL including!\",\n            \"enablingConditions\": []\n          }\n        ],\n        \"help\": \"Do not write anything here unless you have been given a custom tracking library URL!\"\n      }\n    ],\n    \"groupStyle\": \"ZIPPY_CLOSED\",\n    \"enablingConditions\": [\n      {\n        \"paramName\": \"feature\",\n        \"paramValue\": \"conversionTracker\",\n        \"type\": \"EQUALS\"\n      },\n      {\n        \"paramName\": \"feature\",\n        \"paramValue\": \"ecomTracker\",\n        \"type\": \"EQUALS\"\n      }\n    ]\n  },\n  {\n    \"type\": \"TEXT\",\n    \"name\": \"bambuserOrgId\",\n    \"displayName\": \"Bambuser Organisation ID\",\n    \"simpleValueType\": true,\n    \"help\": \"You should receive an organisation id form your Bambuser contact\",\n    \"enablingConditions\": [\n      {\n        \"paramName\": \"feature\",\n        \"paramValue\": \"oneToOneIntegration\",\n        \"type\": \"EQUALS\"\n      },\n      {\n        \"paramName\": \"feature\",\n        \"paramValue\": \"vod\",\n        \"type\": \"EQUALS\"\n      }\n    ]\n  },\n  {\n    \"type\": \"TEXT\",\n    \"name\": \"themeId\",\n    \"displayName\": \"Theme ID\",\n    \"simpleValueType\": true,\n    \"help\": \"Optional to apply a specific theme, you would get the theme ID from your Bambuser contact\",\n    \"enablingConditions\": [\n      {\n        \"paramName\": \"feature\",\n        \"paramValue\": \"oneToOneIntegration\",\n        \"type\": \"EQUALS\"\n      }\n    ]\n  },\n  {\n    \"type\": \"TEXT\",\n    \"name\": \"queue\",\n    \"displayName\": \"Queue\",\n    \"simpleValueType\": true,\n    \"help\": \"Optional to provide a queue that would be used for a drop-in call. Provide the ID or the name of the queue, both can be found in your Bambuser dashboard. Leaving empty will use the default queue\",\n    \"enablingConditions\": [\n      {\n        \"paramName\": \"feature\",\n        \"paramValue\": \"oneToOneIntegration\",\n        \"type\": \"EQUALS\"\n      }\n    ]\n  },\n  {\n    \"type\": \"TEXT\",\n    \"name\": \"locale\",\n    \"displayName\": \"Locale\",\n    \"simpleValueType\": true,\n    \"valueHint\": \"e.g: en-US, en-GB, sv-SE\",\n    \"help\": \"We are using INTL to parse locale https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale\",\n    \"enablingConditions\": [\n      {\n        \"paramName\": \"feature\",\n        \"paramValue\": \"oneToOneIntegration\",\n        \"type\": \"EQUALS\"\n      }\n    ]\n  },\n  {\n    \"type\": \"GROUP\",\n    \"name\": \"overlayWidget\",\n    \"displayName\": \"Overlay Widget\",\n    \"groupStyle\": \"ZIPPY_OPEN\",\n    \"subParams\": [\n      {\n        \"type\": \"SELECT\",\n        \"name\": \"overlayWidgetVariant\",\n        \"displayName\": \"Choose overlay widget type\",\n        \"macrosInSelect\": false,\n        \"selectItems\": [\n          {\n            \"value\": \"Avatar\",\n            \"displayValue\": \"Avatar\"\n          },\n          {\n            \"value\": \"Side dock\",\n            \"displayValue\": \"Side dock\"\n          },\n          {\n            \"value\": \"Video\",\n            \"displayValue\": \"Video\"\n          },\n          {\n            \"value\": \"none\",\n            \"displayValue\": \"None\"\n          }\n        ],\n        \"simpleValueType\": true,\n        \"enablingConditions\": []\n      },\n      {\n        \"type\": \"TEXT\",\n        \"name\": \"overlayWidgetPopupTimeout\",\n        \"displayName\": \"Time to wait before showing overlay widget first time\",\n        \"simpleValueType\": true,\n        \"defaultValue\": 2,\n        \"enablingConditions\": [\n          {\n            \"paramName\": \"overlayWidgetVariant\",\n            \"paramValue\": \"none\",\n            \"type\": \"NOT_EQUALS\"\n          }\n        ],\n        \"valueValidators\": [\n          {\n            \"type\": \"NON_NEGATIVE_NUMBER\"\n          }\n        ],\n        \"valueUnit\": \"seconds\"\n      }\n    ],\n    \"help\": \"Have a floating widget on your site for your customers to interact with. Learn more here: https://bambuser.com/docs/one-to-one/overlay-widget\",\n    \"enablingConditions\": [\n      {\n        \"paramName\": \"feature\",\n        \"paramValue\": \"oneToOneIntegration\",\n        \"type\": \"EQUALS\"\n      }\n    ]\n  },\n  {\n    \"type\": \"GROUP\",\n    \"name\": \"dataLayerMappers\",\n    \"displayName\": \"Datalayer Event Strutures\",\n    \"groupStyle\": \"ZIPPY_CLOSED\",\n    \"subParams\": [\n      {\n        \"type\": \"GROUP\",\n        \"name\": \"addToCart\",\n        \"displayName\": \"Add to cart events\",\n        \"groupStyle\": \"ZIPPY_CLOSED\",\n        \"subParams\": [\n          {\n            \"type\": \"TEXT\",\n            \"name\": \"addToCartEventName\",\n            \"displayName\": \"Event name\",\n            \"simpleValueType\": true,\n            \"help\": \"i.e. addToCart\"\n          },\n          {\n            \"type\": \"TEXT\",\n            \"name\": \"addToCartSku\",\n            \"displayName\": \"SKU / Product id field\",\n            \"simpleValueType\": true,\n            \"help\": \"Note that you are supposed to fill in the path to the field and not the current datalayer value. For example, a correct value can be: ecommerce.add.products.0.id. A full guide can be found at https://bambuser.com/docs/one-to-one/install-one-to-one-with-gtm.\"\n          },\n          {\n            \"type\": \"TEXT\",\n            \"name\": \"addToCartProductName\",\n            \"displayName\": \"Product name field\",\n            \"simpleValueType\": true\n          },\n          {\n            \"type\": \"TEXT\",\n            \"name\": \"addToCartPrice\",\n            \"displayName\": \"Price field\",\n            \"simpleValueType\": true\n          },\n          {\n            \"type\": \"TEXT\",\n            \"name\": \"addToCartQuantity\",\n            \"displayName\": \"Quantity field\",\n            \"simpleValueType\": true\n          },\n          {\n            \"type\": \"CHECKBOX\",\n            \"name\": \"totalQuantityInsteadOfChange\",\n            \"checkboxText\": \"Quantity on events is the total and not the change\",\n            \"simpleValueType\": true\n          },\n          {\n            \"type\": \"TEXT\",\n            \"name\": \"addToCartCurrency\",\n            \"displayName\": \"Currency field\",\n            \"simpleValueType\": true\n          }\n        ],\n        \"help\": \"\"\n      },\n      {\n        \"type\": \"GROUP\",\n        \"name\": \"removeFromCart\",\n        \"displayName\": \"Remove from cart events\",\n        \"groupStyle\": \"ZIPPY_CLOSED\",\n        \"subParams\": [\n          {\n            \"type\": \"TEXT\",\n            \"name\": \"removeFromCartEventName\",\n            \"displayName\": \"Event name\",\n            \"simpleValueType\": true,\n            \"help\": \"i.e. removeFromCart\"\n          },\n          {\n            \"type\": \"TEXT\",\n            \"name\": \"removeFromCartSku\",\n            \"displayName\": \"SKU / Product id field\",\n            \"simpleValueType\": true,\n            \"help\": \"Note that you are supposed to fill in the path to the field and not the current datalayer value. For example, a correct value can be: ecommerce.remove.products.0.id. A full guide can be found at https://bambuser.com/docs/one-to-one/install-one-to-one-with-gtm.\"\n          },\n          {\n            \"type\": \"TEXT\",\n            \"name\": \"removeFromCartProductName\",\n            \"displayName\": \"Product name field\",\n            \"simpleValueType\": true\n          },\n          {\n            \"type\": \"TEXT\",\n            \"name\": \"removeFromCartPrice\",\n            \"displayName\": \"Price field\",\n            \"simpleValueType\": true\n          },\n          {\n            \"type\": \"TEXT\",\n            \"name\": \"removeFromCartQuantity\",\n            \"displayName\": \"Quantity field\",\n            \"simpleValueType\": true\n          },\n          {\n            \"type\": \"TEXT\",\n            \"name\": \"removeFromCartCurrency\",\n            \"displayName\": \"Currency field\",\n            \"simpleValueType\": true\n          }\n        ]\n      },\n      {\n        \"type\": \"GROUP\",\n        \"name\": \"viewItem\",\n        \"displayName\": \"Product impression event\",\n        \"groupStyle\": \"ZIPPY_CLOSED\",\n        \"subParams\": [\n          {\n            \"type\": \"TEXT\",\n            \"name\": \"viewItemEventName\",\n            \"displayName\": \"Event name\",\n            \"simpleValueType\": true,\n            \"help\": \"i.e. ProductImpression\"\n          },\n          {\n            \"type\": \"TEXT\",\n            \"name\": \"viewItemSku\",\n            \"displayName\": \"SKU / Product id field\",\n            \"simpleValueType\": true,\n            \"help\": \"Note that you are supposed to fill in the path to the field and not the current datalayer value. For example, a correct value can be: ecommerce.products.0.id. A full guide can be found at https://bambuser.com/docs/one-to-one/install-one-to-one-with-gtm.\"\n          },\n          {\n            \"type\": \"TEXT\",\n            \"name\": \"viewItemProductName\",\n            \"displayName\": \"Product name field\",\n            \"simpleValueType\": true\n          },\n          {\n            \"type\": \"TEXT\",\n            \"name\": \"viewItemBrand\",\n            \"displayName\": \"Brand field\",\n            \"simpleValueType\": true\n          },\n          {\n            \"type\": \"TEXT\",\n            \"name\": \"viewItemPrice\",\n            \"displayName\": \"Price field\",\n            \"simpleValueType\": true\n          },\n          {\n            \"type\": \"TEXT\",\n            \"name\": \"viewItemCurrency\",\n            \"displayName\": \"Currency field\",\n            \"simpleValueType\": true\n          }\n        ],\n        \"help\": \"\"\n      }\n    ],\n    \"enablingConditions\": [\n      {\n        \"paramName\": \"feature\",\n        \"paramValue\": \"oneToOneIntegration\",\n        \"type\": \"EQUALS\"\n      }\n    ],\n    \"help\": \"Bambuser can listen to events in your datalayer to create a more integrated feel of the experience when allowing the co-browsing feature. If you already follow google analytics 4 ecommerce event standard it will just work out of the box. However, if you have another data format of your events, you can here configure where we can find the required fields in your datalayer in order to achieve the same functionality.  See GA4 standard here: https://developers.google.com/analytics/devguides/collection/ga4/ecommerce?client_type\\u003dgtm\"\n  },\n  {\n    \"type\": \"GROUP\",\n    \"name\": \"Advanced Bambuser Features\",\n    \"displayName\": \"Advanced One-to-One Features\",\n    \"groupStyle\": \"ZIPPY_CLOSED\",\n    \"subParams\": [\n      {\n        \"type\": \"TEXT\",\n        \"name\": \"customerData\",\n        \"displayName\": \"Customer Data\",\n        \"simpleValueType\": true,\n        \"valueHint\": \"jsonObject\",\n        \"help\": \"A jsonObject including information about the customer such as name, email, customer number that will be shown to the agent in the call. Reference: https://bambuser.com/docs/one-to-one/initial-setup#provide-customer-data\"\n      },\n      {\n        \"type\": \"CHECKBOX\",\n        \"name\": \"datalayerTracking\",\n        \"checkboxText\": \"Track Bambuser events to the datalayer\",\n        \"simpleValueType\": true,\n        \"help\": \"These events will allow you to track user interactions. Check out our guide to pipe all these straight into Google Analytics: https://bambuser.com/docs/one-to-one/one-to-one-gtm-ga4\",\n        \"defaultValue\": true\n      },\n      {\n        \"type\": \"CHECKBOX\",\n        \"name\": \"ecommerceTracking\",\n        \"checkboxText\": \"Let Bambuser trigger ecommerce events\",\n        \"simpleValueType\": true,\n        \"help\": \"Bambuser track standard GA4 ecommerce events by default so that you can follow user funnels and conversions in Google Analytics. Learn more here: https://bambuser.com/docs/one-to-one/one-to-one-gtm-ga4\",\n        \"defaultValue\": true,\n        \"enablingConditions\": []\n      },\n      {\n        \"type\": \"CHECKBOX\",\n        \"name\": \"launchInDebugMode\",\n        \"checkboxText\": \"Launch in Debug Mode\",\n        \"simpleValueType\": true,\n        \"help\": \"Launching in debug mode will expose the oneToOneEmbed instance on the window for you to be able to inspect in the developer console\"\n      },\n      {\n        \"type\": \"SELECT\",\n        \"name\": \"region\",\n        \"displayName\": \"Region\",\n        \"macrosInSelect\": false,\n        \"selectItems\": [\n          {\n            \"value\": \"US\",\n            \"displayValue\": \"US\"\n          },\n          {\n            \"value\": \"EU\",\n            \"displayValue\": \"EU\"\n          }\n        ],\n        \"simpleValueType\": true,\n        \"help\": \"This should match the region of your Bambuser dashboard. If you don\\u0027t know, ask your Bambuser contact.\",\n        \"defaultValue\": \"US\"\n      }\n    ],\n    \"enablingConditions\": [\n      {\n        \"paramName\": \"feature\",\n        \"paramValue\": \"oneToOneIntegration\",\n        \"type\": \"EQUALS\"\n      }\n    ]\n  },\n  {\n    \"type\": \"SELECT\",\n    \"name\": \"dataRegion\",\n    \"displayName\": \"Data region\",\n    \"macrosInSelect\": false,\n    \"selectItems\": [\n      {\n        \"value\": \"US\",\n        \"displayValue\": \"US\"\n      },\n      {\n        \"value\": \"EU\",\n        \"displayValue\": \"EU\"\n      }\n    ],\n    \"simpleValueType\": true,\n    \"defaultValue\": \"US\",\n    \"enablingConditions\": [\n      {\n        \"paramName\": \"feature\",\n        \"paramValue\": \"vod\",\n        \"type\": \"EQUALS\"\n      }\n    ],\n    \"help\": \"Your BamHub data region\"\n  },\n  {\n    \"type\": \"SIMPLE_TABLE\",\n    \"name\": \"vodContainers\",\n    \"displayName\": \"Playlists\",\n    \"simpleTableColumns\": [\n      {\n        \"defaultValue\": \"\",\n        \"displayName\": \"Selector\",\n        \"name\": \"selector\",\n        \"type\": \"TEXT\",\n        \"valueValidators\": [\n          {\n            \"type\": \"STRING_LENGTH\",\n            \"args\": [\n              2,\n              100\n            ]\n          }\n        ],\n        \"valueHint\": \"\"\n      },\n      {\n        \"defaultValue\": \"\",\n        \"displayName\": \"Relative position to selector\",\n        \"name\": \"position\",\n        \"type\": \"SELECT\",\n        \"selectItems\": [\n          {\n            \"value\": \"beforebegin\",\n            \"displayValue\": \"Before selector\"\n          },\n          {\n            \"value\": \"afterbegin\",\n            \"displayValue\": \"Inside selector at top\"\n          },\n          {\n            \"value\": \"beforeend\",\n            \"displayValue\": \"Inside selector at bottom\"\n          },\n          {\n            \"value\": \"afterend\",\n            \"displayValue\": \"After selector\"\n          }\n        ]\n      },\n      {\n        \"defaultValue\": \"\",\n        \"displayName\": \"Playlist id (optional)\",\n        \"name\": \"playlistId\",\n        \"type\": \"TEXT\"\n      }\n    ],\n    \"newRowButtonText\": \"Add playlist\",\n    \"enablingConditions\": [\n      {\n        \"paramName\": \"feature\",\n        \"paramValue\": \"vod\",\n        \"type\": \"EQUALS\"\n      }\n    ],\n    \"notSetText\": \"Add playlists to inject shoppable videos on your page\",\n    \"help\": \"A playlist element can be added on a relative position to some other element on your page. For example, to add inside a div tag with the class product-description, use the selector .product-description and set a position.\"\n  },\n  {\n    \"type\": \"LABEL\",\n    \"name\": \"Playlist id description\",\n    \"displayName\": \"In case you have multiple playlists on the same page, you may want to set explicit playlist ids to ensure the correct videos end up in the intended playlist. Learn more here: https://bambuser.com/docs/shoppable-video/bam-playlist-integration#multiple-playlists-on-one-page\",\n    \"enablingConditions\": [\n      {\n        \"paramName\": \"feature\",\n        \"paramValue\": \"vod\",\n        \"type\": \"EQUALS\"\n      }\n    ]\n  }\n]\n\n\n___SANDBOXED_JS_FOR_WEB_TEMPLATE___\n\n// Enter your template code here.\nconst injectScript = require('injectScript');\nconst queryPermission = require('queryPermission');\nconst copyFromWindow = require('copyFromWindow');\nconst setInWindow = require('setInWindow');\nconst logToConsole = require('logToConsole');\nconst callInWindow = require('callInWindow');\nconst makeInteger = require('makeInteger');\nconst getType = require('getType');\nconst getContainerVersion = require('getContainerVersion');\nconst JSON = require('JSON');\nconst Object = require('Object');\nconst addConsentListener = require('addConsentListener');\nconst isConsentGranted = require('isConsentGranted');\n\n\n// If the user chose to log debug output, initialize the logging method\nconst log = data.debug || data.launchInDebugMode\n  ? logToConsole\n  : function () {};\n\nif (data.feature === 'ecomTracker') {\n  // Get the URL the user input into the text field\n  const url = data.scriptUrl || 'https://cdn.liveshopping.bambuser.com/metrics/bambuser.min.js';\n  \n  // If the script loaded successfully, log a message and signal success\n  const onSuccess = () => {\n    log('🧪 Bambuser Debugger 🧪\\n', '✅ Tracking Library loaded successfully.');\n    var bbu = copyFromWindow('_bambuser');\n    if (typeof bbu === 'object') {\n      log(data);\n      const gtmInfo = getContainerVersion();\n      const options = {\n        meta: {\n        source: 'gtm-template',\n        customPayload: gtmInfo,\n      }};\n      var eventData = {\n        products: data.products\n      };\n      if (data.ecomEventName === 'purchase' || data.ecomEventName === 'refund') {\n        eventData.transaction = data.transactionObject;\n      }\n      log('Will track data');\n      log(eventData);\n\n      bbu.track(data.ecomEventName, eventData, options).then(() => {\n        log('🧪 Bambuser Debugger 🧪\\n', '✅ Tracking successfully sent with the following data:', eventData);\n        data.gtmOnSuccess();\n      }).catch(data.gtmOnFailure);\n      \n    }\n    else {\n      log('🧪 Bambuser Debugger 🧪\\n', '❌ Problem with loading the library: ', bbu);\n      data.gtmOnFailure();\n    }\n  };\n\n  // If the script fails to load, log a message and signal failure\n  const onFailure = () => {\n    log('🧪 Bambuser Debugger 🧪\\n', '❌ Script load failed.');\n    data.gtmOnFailure();\n  };\n\n  // If the URL input by the user matches the permissions set for the template,\n  // inject the script with the onSuccess and onFailure methods as callbacks.\n  if (queryPermission('inject_script', url)) {\n    log('🧪 Bambuser Debugger 🧪\\n', '🔄 Loading the tracking library from ' + url);\n    injectScript(url, onSuccess, onFailure);\n  } else {\n    log('🧪 Bambuser Debugger 🧪\\n', '🚫 Script load failed due to permissions mismatch. You may need to whitelist your custom script URL ('+ url +') in the template setting > permissions > Allowed URL match patterns.');\n    data.gtmOnFailure();\n  }\n  \n} else if (data.feature === 'conversionTracker') {\n  // LEGACY Conversion tracker\n\n  // Get the URL the user input into the text field\n  const url = data.scriptUrl || 'https://cdn.liveshopping.bambuser.com/metrics/bambuser.min.js';\n\n  log('🧪 Bambuser Debugger 🧪\\n', '🏁 Bambuser purchase tracker started with the given tag data: ', data);\n\n  // If the script loaded successfully, log a message and signal success\n  const onSuccess = () => {\n    log('🧪 Bambuser Debugger 🧪\\n', '✅ Tracking Library loaded successfully.');\n    var bbu = copyFromWindow('_bambuser');\n    if (typeof bbu === 'object') {\n      var eventData = {};\n      eventData[bbu.params.EVENT.dataSelector] = 'purchase';\n      eventData[bbu.params.ORDER_ID.dataSelector] = data.orderId;\n      eventData[bbu.params.ORDER_VALUE.dataSelector] = data.orderValue;\n      eventData[bbu.params.CURRENCY.dataSelector] = data.currency;\n      eventData[bbu.params.ORDER_PRODUCTIDS.dataSelector] = data.productIds;\n\n      bbu.collect(eventData);\n      log('🧪 Bambuser Debugger 🧪\\n', '✅ Purchase has been tracked successfully with the following order data:', eventData);\n      // Call data.gtmOnSuccess when the tag is finished.\n      data.gtmOnSuccess();\n    }\n    else {\n      log('🧪 Bambuser Debugger 🧪\\n', '❌ Problem with loading the library: ', bbu);\n      data.gtmOnFailure();\n    }\n  };\n\n  // If the script fails to load, log a message and signal failure\n  const onFailure = () => {\n    log('🧪 Bambuser Debugger 🧪\\n', '❌ Script load failed.');\n    data.gtmOnFailure();\n  };\n\n  // If the URL input by the user matches the permissions set for the template,\n  // inject the script with the onSuccess and onFailure methods as callbacks.\n  if (queryPermission('inject_script', url)) {\n    log('🧪 Bambuser Debugger 🧪\\n', '🔄 Loading the tracking library from ' + url);\n    injectScript(url, onSuccess, onFailure);\n  } else {\n    log('🧪 Bambuser Debugger 🧪\\n', '🚫 Script load failed due to permissions mismatch. You may need to whitelist your custom script URL ('+ url +') in the template setting > permissions > Allowed URL match patterns.');\n    data.gtmOnFailure();\n  }\n} else if (data.feature === 'oneToOneIntegration') {\n  let allowFirstPartyCookies = false;\n  if (queryPermission('access_consent', 'analytics_storage', 'read')) {\n\tallowFirstPartyCookies = !!isConsentGranted('analytics_storage');\n  }\n\n  const customInterceptor = {};\n  if (!!data.addToCartEventName) {\n    customInterceptor.add_to_cart = {\n      eventName: data.addToCartEventName,\n      sku: data.addToCartSku,\n      name: data.addToCartProductName,\n      price: data.addToCartPrice,\n      quantity: data.addToCartQuantity,\n      currency: data.addToCartCurrency\n    };\n  }\n  if (!!data.removeFromCartEventName) {\n    customInterceptor.remove_from_cart = {\n      eventname: data.removeFromCartEventName,\n      sku: data.removeFromCartSku,\n      name: data.removeFromCartProductName,\n      price: data.removeFromCartPrice,\n      quantity: data.removeFromCartQuantity,\n      currency: data.removeFromCartCurrency\n    };\n  }\n  if (!!data.viewItemEventName) {\n    customInterceptor.view_item = {\n      eventname: data.viewItemEventName,\n      sku: data.viewItemSku,\n      name: data.viewItemProductName,\n      price: data.viewItemPrice,\n      brand: data.viewItemBrand,\n      currency: data.viewItemCurrency\n    };\n  }\n      \n  const gtmInfo = getContainerVersion();\n  const conf = {\n    orgId: data.bambuserOrgId,\n    themeId: data.themeId,\n    queue: data.queue,\n    triggers: ['manual', 'connect-link', 'smart'],\n    smartVariantOverride: data.overlayWidgetVariant,\n    popupTimeoutSeconds: makeInteger(data.overlayWidgetPopupTimeuot) || 2,\n    datalayerTracking: data.datalayerTracking,\n    ecommerceTracking: data.ecommerceTracking,\n    allowFirstPartyCookies: allowFirstPartyCookies,\n    gtmContainerInfo: gtmInfo,\n    customInterceptor: customInterceptor,\n  };\n  \n  const cleanNestedData = function (obj) {\n    return Object.entries(obj).reduce(function (acc, item) {\n      const key = item[0];\n      const value = item[1];\n      const itemType = getType(value);\n      if (\n        itemType !== 'object' &&\n        itemType !== 'array' &&\n        itemType !== 'function'\n      ) {\n        acc[key] = value;\n      }\n      return acc;\n    }, {});\n  };\n\n  const parseCustomerData = function (customerData) {\n    const type = getType(customerData);\n    if (type === 'string') {\n      const parsed = JSON.parse(customerData);\n      if (!parsed) {\n        return undefined;\n      }\n      return cleanNestedData(parsed);\n    } else if (type === 'object') {\n      return cleanNestedData(customerData);\n    } else if (type === 'function') {\n      return customerData;\n    }\n  };\n\n  if (!!data.queueId) {\n    conf.queue = data.queueId;\n  }\n  if (!!data.locale) {\n    conf.locale = data.locale;\n  }\n\n  const customerInfo = parseCustomerData(data.customerData);\n  if (!!customerInfo) {\n    conf.data = customerInfo;\n  }\n\n  const launch = function (debugMode) {\n    if (queryPermission('access_globals', 'execute', 'launchBambuserOneToOne')) {\n      const oneToOneEmbed = callInWindow('launchBambuserOneToOne', conf, debugMode);\n      log('successfully created one-to-one instance');\n      if (queryPermission('access_consent', 'analytics_storage', 'read')) {\n        addConsentListener('analytics_storage', (_, granted) => {\n          if (oneToOneEmbed.config.allowFirstPartyCookies !== granted) {\n            log('Detected consent change, will update widget');\n            oneToOneEmbed.config.allowFirstPartyCookies = granted;\n            oneToOneEmbed.loadConfig(oneToOneEmbed.config);\n          }\n        });\n      }\n      if (queryPermission('access_globals', 'readwrite', '_bambuser')) {\n        var _bambuser = copyFromWindow('_bambuser');\n        var bbu = {};\n        if (typeof _bambuser === 'object') {\n          bbu = _bambuser;\n        }\n        bbu.oneToOneEmbed = oneToOneEmbed;\n        setInWindow('_bambuser', bbu, true);\n      }\n      \n      data.gtmOnSuccess();\n    } else {\n      data.gtmOnFailure();\n    }\n  };\n\n  // US is the default region\n  let url = 'https://one-to-one.bambuser.com/embed.js'; \n  if(data.region === 'EU') {\n    url = 'https://one-to-one.bambuser.com/eu/embed.js';\n  }\n\n  if (queryPermission('inject_script', url)) {\n    injectScript(\n      url,\n      function () {\n        log('success inject');\n        launch(data.launchInDebugMode);\n      },\n      function () {\n        log('failed inject');\n        data.gtmOnFailure();\n      }\n    );\n  } else {\n    data.gtmOnFailure();\n  }\n\n  return conf;\n} else if (data.feature === 'vod') {\n  \n  const conf = {\n    orgId: data.bambuserOrgId,\n    containers: data.vodContainers\n  };\n  const launch = function () {\n    if (queryPermission('access_globals', 'execute', 'injectBambuserPlayer')) {\n      callInWindow('injectBambuserPlayer', conf);\n      data.gtmOnSuccess();\n    } else {\n      data.gtmOnFailure();\n    }\n  };\n  // US is the default region\n  let url = 'https://lcx-embed.bambuser.com/default/embed.js';\n  if(data.dataRegion === 'EU') {\n    url = 'https://lcx-embed-eu.bambuser.com/default/embed.js';\n  }\n\n  if (queryPermission('inject_script', url)) {\n    injectScript(\n      url,\n      function () {\n        log('success inject');\n        launch();\n      },\n      function () {\n        log('failed inject');\n        data.gtmOnFailure();\n      }\n    );\n  } else {\n    data.gtmOnFailure();\n  }\n  \n} else {\n  data.gtmOnFailure();\n}\n\n\n___WEB_PERMISSIONS___\n\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    \"clientAnnotations\": {\n      \"isEditedByUser\": true\n    },\n    \"isRequired\": true\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\": \"_bambuser\"\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\": \"launchBambuserOneToOne\"\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\": \"injectBambuserPlayer\"\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          }\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://*.bambuser.com/*\"\n              }\n            ]\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\": \"access_consent\",\n        \"versionId\": \"1\"\n      },\n      \"param\": [\n        {\n          \"key\": \"consentTypes\",\n          \"value\": {\n            \"type\": 2,\n            \"listItem\": [\n              {\n                \"type\": 3,\n                \"mapKey\": [\n                  {\n                    \"type\": 1,\n                    \"string\": \"consentType\"\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\": \"analytics_storage\"\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\n\n___TESTS___\n\nscenarios:\n- name: Can inject script\n  code: |-\n    const mockData = {\n      feature: 'oneToOneIntegration'\n    };\n\n    runCode(mockData);\n    assertApi('injectScript').wasCalled();\n- name: Allow string as customer data\n  code: |-\n    const mockData = {\n      feature: 'oneToOneIntegration',\n      customerData: '{\"name\": \"John Doe\", \"customerId\": \"1234\"}'\n    };\n\n    mock('injectScript', function(url, callback) { callback(); });\n\n    // Call runCode to run the template's code.\n    const config = runCode(mockData);\n\n    // Verify that the tag finished successfully.\n    assertThat(config.data.name).isEqualTo(\"John Doe\");\n    assertThat(config.data.customerId).isEqualTo(\"1234\");\n    assertApi('callInWindow').wasCalled();\n- name: Allow object as customer data\n  code: |-\n    const mockData = {\n      feature: 'oneToOneIntegration',\n      customerData: {\"name\": \"John Doe\", \"customerId\": \"1234\"}\n    };\n\n    mock('injectScript', function(url, callback) { callback(); });\n\n    // Call runCode to run the template's code.\n    const config = runCode(mockData);\n\n    // Verify that the tag finished successfully.\n    assertThat(config.data.name).isEqualTo(\"John Doe\");\n    assertThat(config.data.customerId).isEqualTo(\"1234\");\n    assertApi('callInWindow').wasCalled();\n- name: Allow null as customer data\n  code: |-\n    const mockData = {\n      feature: 'oneToOneIntegration',\n      customerData: null\n    };\n\n    mock('injectScript', function(url, callback) { callback(); });\n\n    // Call runCode to run the template's code.\n    const config = runCode(mockData);\n\n    // Verify that the tag finished successfully.\n    assertThat(config.data).isUndefined();\n    assertApi('callInWindow').wasCalled();\n- name: Allow function as customer data\n  code: |-\n    const customerDataFunc = function () {\n     return {};\n    };\n\n    const mockData = {\n      feature: 'oneToOneIntegration',\n      customerData: customerDataFunc\n    };\n\n    mock('injectScript', function(url, callback) { callback(); });\n\n    // Call runCode to run the template's code.\n    const config = runCode(mockData);\n\n    // Verify that the tag finished successfully.\n    assertThat(config.data).isStrictlyEqualTo(customerDataFunc);\n    assertApi('callInWindow').wasCalled();\n- name: Will remove nested customer data\n  code: |-\n    const nestedDataKey = \"nestedData\";\n\n    const mockData = {\n      feature: 'oneToOneIntegration',\n      customerData: {\"name\": \"John Doe\", \"customerId\": \"1337\", nestedDataKey: { \"mockData\": \"shouldBeRemoved\" }}\n    };\n\n    mock('injectScript', function(url, callback) { callback(); });\n\n    // Call runCode to run the template's code.\n    const config = runCode(mockData);\n\n    // Verify that the tag finished successfully.\n    assertThat(config.data.name).isEqualTo(\"John Doe\");\n    assertThat(config.data.customerId).isEqualTo(\"1337\");\n    assertThat(config.data[nestedDataKey]).isUndefined();\n    assertApi('callInWindow').wasCalled();\n- name: Handle non-JSON string as customer data\n  code: |-\n    const mockData = {\n      feature: 'oneToOneIntegration',\n      customerData: 'string'\n    };\n\n    mock('injectScript', function(url, callback) { callback(); });\n\n    // Call runCode to run the template's code.\n    const config = runCode(mockData);\n\n    // Verify that the tag finished successfully.\n    assertThat(config.data).isUndefined();\n    assertApi('callInWindow').wasCalled();\n\n\n___NOTES___\n\nCreated on 1/14/2020, 4:42:38 PM\n\n\n",
                "galleryReference": {
                    "host": "github.com",
                    "owner": "bambuser",
                    "repository": "bambuser-live-shopping-gtm",
                    "version": "986fa98c14037f86c3f66e792269d0210d23028e",
                    "signature": "1b62a9792d8eba94113f644b7ec833a5ef72e812a81e2327406731749a3671ad",
                    "galleryTemplateId": "NC685"
                }
            }
        ]
    }
}