@walkeros/web-destination-gtag 4.2.1 → 4.2.2-next-1782892388850
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +11 -0
- package/dist/dev.d.mts +1 -0
- package/dist/dev.d.ts +1 -0
- package/dist/dev.js +1 -1
- package/dist/dev.js.map +1 -1
- package/dist/dev.mjs +1 -1
- package/dist/dev.mjs.map +1 -1
- package/dist/index.browser.js +1 -1
- package/dist/index.d.mts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.es5.js +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/walkerOS.json +20 -9
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
# @walkeros/web-destination-gtag
|
|
2
2
|
|
|
3
|
+
## 4.2.2-next-1782892388850
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 3aa2cd9: Consent Mode now sets the denied `consent default` before `config`,
|
|
8
|
+
as Google requires. Add `como_advanced` to enable advanced mode (default at
|
|
9
|
+
page load with `wait_for_update`) for non-EU setups. Sites that do not use
|
|
10
|
+
consent are unaffected.
|
|
11
|
+
- @walkeros/core@4.2.2-next-1782892388850
|
|
12
|
+
- @walkeros/web-core@4.2.2-next-1782892388850
|
|
13
|
+
|
|
3
14
|
## 4.2.1
|
|
4
15
|
|
|
5
16
|
### Patch Changes
|
package/dist/dev.d.mts
CHANGED
|
@@ -69,6 +69,7 @@ declare const GTMSettingsSchema: z.ZodObject<{
|
|
|
69
69
|
|
|
70
70
|
declare const SettingsSchema: z.ZodObject<{
|
|
71
71
|
como: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>]>>;
|
|
72
|
+
como_advanced: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodNumber]>>;
|
|
72
73
|
ga4: z.ZodOptional<z.ZodObject<{
|
|
73
74
|
measurementId: z.ZodString;
|
|
74
75
|
debug: z.ZodOptional<z.ZodBoolean>;
|
package/dist/dev.d.ts
CHANGED
|
@@ -69,6 +69,7 @@ declare const GTMSettingsSchema: z.ZodObject<{
|
|
|
69
69
|
|
|
70
70
|
declare const SettingsSchema: z.ZodObject<{
|
|
71
71
|
como: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>]>>;
|
|
72
|
+
como_advanced: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodNumber]>>;
|
|
72
73
|
ga4: z.ZodOptional<z.ZodObject<{
|
|
73
74
|
measurementId: z.ZodString;
|
|
74
75
|
debug: z.ZodOptional<z.ZodBoolean>;
|
package/dist/dev.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var e,a=Object.defineProperty,t=Object.getOwnPropertyDescriptor,n=Object.getOwnPropertyNames,i=Object.prototype.hasOwnProperty,o=(e,t)=>{for(var n in t)a(e,n,{get:t[n],enumerable:!0})},r={};o(r,{examples:()=>k,schemas:()=>s}),module.exports=(e=r,((e,o,r,s)=>{if(o&&"object"==typeof o||"function"==typeof o)for(let d of n(o))i.call(e,d)||d===r||a(e,d,{get:()=>o[d],enumerable:!(s=t(o,d))||s.enumerable});return e})(a({},"__esModule",{value:!0}),e));var s={};o(s,{AdsSettingsSchema:()=>m,ConsentModeSchema:()=>p,GA4SettingsSchema:()=>u,GTMSettingsSchema:()=>v,MappingSchema:()=>f,SettingsSchema:()=>_,UserDataMappingSchema:()=>g,ads:()=>G,ga4:()=>z,gtm:()=>E,mapping:()=>w,settings:()=>A});var d=require("@walkeros/core/dev"),c=require("@walkeros/core/dev"),l=require("@walkeros/core/dev"),p=l.z.union([l.z.boolean(),l.z.record(l.z.string(),l.z.union([l.z.string(),l.z.array(l.z.string())]))]),u=l.z.object({measurementId:l.z.string().regex(/^G-[A-Z0-9]+$/,"Must be a valid GA4 Measurement ID (G-XXXXXXXXXX)").describe("GA4 Measurement ID from Google Analytics (like G-XXXXXXXXXX)"),debug:l.z.boolean().describe("Enable debug mode for GA4 (like true)").optional(),pageview:l.z.boolean().describe("Enable automatic pageview tracking (like true)").optional(),server_container_url:l.z.string().url().describe("Server-side GTM container URL (like https://server-container.com)").optional(),snakeCase:l.z.boolean().describe("Convert parameter names to snake_case (like true)").optional(),transport_url:l.z.string().url().describe("Custom transport URL for GA4 (like https://analytics.example.com/mp/collect)").optional(),data:l.z.any().describe("Custom data mapping configuration").optional()}),g=l.z.object({email:l.z.any().describe("Mapping value for user email (like user.email)").optional(),phone_number:l.z.any().describe("Mapping value for user phone number (like user.phone)").optional(),address:l.z.object({first_name:l.z.any().describe("Mapping value for first name (like data.firstName)").optional(),last_name:l.z.any().describe("Mapping value for last name (like data.lastName)").optional(),street:l.z.any().describe("Mapping value for street address").optional(),city:l.z.any().describe("Mapping value for city (like user.city)").optional(),region:l.z.any().describe("Mapping value for region/state (like user.region)").optional(),postal_code:l.z.any().describe("Mapping value for postal/zip code (like user.zip)").optional(),country:l.z.any().describe("Mapping value for country (like user.country)").optional()}).describe("Address mapping for enhanced conversions").optional()}),m=l.z.object({conversionId:l.z.string().regex(/^AW-[0-9]+$/,"Must be a valid Ads Conversion ID (AW-XXXXXXXXXX)").describe("Google Ads Conversion ID (required)"),currency:l.z.string().length(3).describe("Currency code (ISO 4217, e.g., USD, EUR)").optional(),data:l.z.any().describe("Custom data mapping (WalkerOS.Mapping.Value | Values)").optional(),enhancedConversions:g.describe("Enhanced conversions: maps event fields to Google user_data for improved measurement accuracy").optional()}),v=l.z.object({containerId:l.z.string().regex(/^GTM-[A-Z0-9]+$/,"Must be a valid GTM Container ID (GTM-XXXXXXX)").describe("GTM Container ID (required)"),dataLayer:l.z.string().describe("Custom dataLayer variable name (default: dataLayer)").optional(),domain:l.z.string().describe("Custom GTM domain for script loading").optional(),data:l.z.any().describe("Custom data mapping (WalkerOS.Mapping.Value | Values)").optional()}),_=c.z.object({como:p.describe("Consent mode configuration: false (disabled), true (use defaults), or custom mapping").optional(),ga4:u.describe("GA4-specific configuration settings (like { measurementId: G-XXXXXXXXXX })").optional(),ads:m.describe("Google Ads specific configuration settings (like { conversionId: AW-XXXXXXXXX })").optional(),gtm:v.describe("Google Tag Manager specific configuration settings (like { containerId: GTM-XXXXXXX })").optional()}).refine(e=>{var a,t,n;return(null==(a=e.ga4)?void 0:a.measurementId)||(null==(t=e.ads)?void 0:t.conversionId)||(null==(n=e.gtm)?void 0:n.containerId)},{message:"At least one Google tool must be configured (ga4.measurementId, ads.conversionId, or gtm.containerId)"}),X=require("@walkeros/core/dev"),b=X.z.object({}),y=X.z.object({label:X.z.string().describe("Conversion label for this specific event").optional()}),h=X.z.object({}),f=X.z.object({ga4:b.describe("GA4-specific event mapping").optional(),ads:y.describe("Google Ads-specific event mapping").optional(),gtm:h.describe("GTM-specific event mapping").optional()}),A=(0,d.zodToSchema)(_),w=(0,d.zodToSchema)(f),z=(0,d.zodToSchema)(u),G=(0,d.zodToSchema)(m),E=(0,d.zodToSchema)(v),k={};o(k,{env:()=>C,step:()=>R});var C={};o(C,{init:()=>M,push:()=>S,simulation:()=>I});var M={window:{dataLayer:[]},document:{createElement:()=>({src:"",setAttribute:()=>{},removeAttribute:()=>{}}),head:{appendChild:()=>{}}}},S={window:{gtag:Object.assign(()=>{},{}),dataLayer:[]},document:{createElement:()=>({src:"",setAttribute:()=>{},removeAttribute:()=>{}}),head:{appendChild:()=>{}}}},I=["call:window.gtag"],R={};o(R,{addToCart:()=>L,adsEnhancedConversions:()=>W,adsInit:()=>O,consentModeV2:()=>N,ga4Init:()=>j,ga4WithIncludeAll:()=>$,googleAdsConversion:()=>V,gtmDataLayerPush:()=>H,gtmInit:()=>P,multipleToolsSimultaneous:()=>Z,pageView:()=>D,purchase:()=>q});var U=require("@walkeros/core"),T=17e11,x=new Date(T),j={title:"GA4 init",description:"The destination bootstraps gtag and configures a GA4 property via its measurementId.",in:{settings:{ga4:{measurementId:"G-XXXXXX-1"}}},out:[["gtag","js",x],["gtag","config","G-XXXXXX-1",{}]]},O={title:"Google Ads init",description:"The destination bootstraps gtag and configures a Google Ads account via its conversionId.",in:{settings:{ads:{conversionId:"AW-123456789",currency:"EUR"}}},out:[["gtag","js",x],["gtag","config","AW-123456789"]]},P={title:"GTM init",description:"The destination initializes the dataLayer and pushes the gtm.js start event for a GTM container.",in:{settings:{gtm:{containerId:"GTM-XXXXXXX"}}},out:[["dataLayer.push",{"gtm.start":T,event:"gtm.js"}]]},q={title:"Purchase",description:"An order complete event is mapped to the GA4 purchase event with transaction details and nested product items.",in:(0,U.getEvent)("order complete",{timestamp:1700000100}),mapping:{name:"purchase",include:["data","context"],data:{map:{transaction_id:"data.id",value:"data.total",tax:"data.taxes",shipping:"data.shipping",currency:{key:"data.currency",value:"EUR"},items:{loop:["nested",{condition:e=>(0,U.isObject)(e)&&"product"===e.entity,map:{item_id:"data.id",item_name:"data.name",quantity:{key:"data.quantity",value:1}}}]}}}},out:[["gtag","event","purchase",{transaction_id:"0rd3r1d",value:555,tax:73.76,shipping:5.22,currency:"EUR",items:[{item_id:"ers",item_name:"Everyday Ruck Snack",quantity:1},{item_id:"cc",item_name:"Cool Cap",quantity:1}],data_id:"0rd3r1d",data_currency:"EUR",data_shipping:5.22,data_taxes:73.76,data_total:555,context_shopping:"complete",send_to:"G-XXXXXX-1"}]]},L={title:"Add to cart",description:"A product add event is mapped to the GA4 add_to_cart event with item details and value.",in:(0,U.getEvent)("product add",{timestamp:1700000101}),mapping:{name:"add_to_cart",include:["data"],data:{map:{currency:{value:"EUR",key:"data.currency"},value:"data.price",items:{loop:["this",{map:{item_id:"data.id",item_variant:"data.color",quantity:{value:1,key:"data.quantity"}}}]}}}},out:[["gtag","event","add_to_cart",{currency:"EUR",value:420,items:[{item_id:"ers",item_variant:"black",quantity:1}],data_id:"ers",data_name:"Everyday Ruck Snack",data_color:"black",data_size:"l",data_price:420,send_to:"G-XXXXXX-1"}]]},D={title:"Page view",description:"A page view event is forwarded as a GA4 page_view event with no additional mapping.",in:(0,U.getEvent)("page view",{timestamp:1700000102}),mapping:void 0,out:[["gtag","event","page_view",{send_to:"G-XXXXXX-1"}]]},V={title:"Ads conversion",description:"An order complete event is sent as a Google Ads conversion with a configured label and transaction value.",in:(0,U.getEvent)("order complete",{timestamp:1700000103}),mapping:{name:"PURCHASE_CONV",settings:{ads:{label:"PURCHASE_CONV"}},data:{map:{value:"data.total"}}},out:[["gtag","event","conversion",{send_to:"AW-123456789/PURCHASE_CONV",currency:"EUR",value:555}]]},W={title:"Enhanced conversions",description:"enhancedConversions maps event fields into a gtag set user_data call sent immediately before the conversion event.",in:(0,U.getEvent)("order complete",{timestamp:1700000109,data:{id:"0rd3r1d",currency:"EUR",shipping:5.22,taxes:73.76,total:555,customerEmail:"buyer@shop.com",customerPhone:"+1234567890"}}),mapping:{name:"PURCHASE_EC2",settings:{ads:{label:"PURCHASE_EC2"}},data:{map:{value:"data.total"}}},out:[["gtag","set","user_data",{email:"buyer@shop.com",phone_number:"+1234567890"}],["gtag","event","conversion",{send_to:"AW-123456789/PURCHASE_EC2",currency:"EUR",value:555}]]},H={title:"GTM dataLayer push",description:"A page view event is pushed to window.dataLayer for GTM with the mapped event name and parameters.",in:(0,U.getEvent)("page view",{timestamp:1700000104}),mapping:{name:"page_view",settings:{gtm:{}},data:{map:{page_title:"data.title",page_location:"data.domain"}}},out:[["dataLayer.push",{event:"page_view",page_title:"walkerOS documentation",page_location:"www.example.com"}]]},N={title:"Consent Mode v2",description:"A walker consent command with marketing and functional granted updates gtag Consent Mode v2 parameters.",command:"consent",in:{marketing:!0,functional:!0},out:[["gtag","consent","default",{ad_storage:"denied",ad_user_data:"denied",ad_personalization:"denied",analytics_storage:"denied"}],["gtag","consent","update",{ad_storage:"granted",ad_user_data:"granted",ad_personalization:"granted",analytics_storage:"granted"}]]},$={title:"GA4 include all",description:"Include flattens every event section into prefixed GA4 params, exposing data, context, user, source, and event fields.",in:(0,U.getEvent)("page view",{id:"ev-1700000106",timestamp:1700000106,source:{type:"collector",schema:"4",count:1,trace:"1700000106abcdef1700000106abcdef"}}),mapping:{include:["data","context","globals","user","source","event"]},out:[["gtag","event","page_view",{data_domain:"www.example.com",data_title:"walkerOS documentation",data_referrer:"https://www.walkeros.io/",data_search:"?foo=bar",data_hash:"#hash",data_id:"/docs/",context_dev:"test",globals_pagegroup:"docs",user_id:"us3r",user_device:"c00k13",user_session:"s3ss10n",source_type:"collector",source_schema:"4",source_count:1,source_trace:"1700000106abcdef1700000106abcdef",event_entity:"page",event_action:"view",event_trigger:"load",event_id:"ev-1700000106",event_name:"page view",event_timestamp:1700000106,event_timing:3.14,send_to:"G-XXXXXX-1"}]]},Z={title:"Multi-tool push",description:"A single order event fans out to GA4, Google Ads, and GTM from one mapping rule with per-tool settings.",in:(0,U.getEvent)("order complete",{timestamp:1700000107}),mapping:{name:"purchase",include:["data"],settings:{ga4:{},ads:{label:"PURCHASE_CONV"},gtm:{}},data:{map:{value:"data.total",currency:{key:"data.currency",value:"EUR"}}}},out:[["gtag","event","purchase",{value:555,currency:"EUR",data_id:"0rd3r1d",data_currency:"EUR",data_shipping:5.22,data_taxes:73.76,data_total:555,send_to:"G-XXXXXX-1"}],["gtag","event","conversion",{send_to:"AW-123456789/PURCHASE_CONV",currency:"EUR",value:555,data_id:"0rd3r1d",data_currency:"EUR",data_shipping:5.22,data_taxes:73.76,data_total:555}],["dataLayer.push",{event:"purchase",value:555,currency:"EUR",data_id:"0rd3r1d",data_currency:"EUR",data_shipping:5.22,data_taxes:73.76,data_total:555}]]};//# sourceMappingURL=dev.js.map
|
|
1
|
+
"use strict";var e,a=Object.defineProperty,t=Object.getOwnPropertyDescriptor,n=Object.getOwnPropertyNames,i=Object.prototype.hasOwnProperty,o=(e,t)=>{for(var n in t)a(e,n,{get:t[n],enumerable:!0})},r={};o(r,{examples:()=>k,schemas:()=>s}),module.exports=(e=r,((e,o,r,s)=>{if(o&&"object"==typeof o||"function"==typeof o)for(let d of n(o))i.call(e,d)||d===r||a(e,d,{get:()=>o[d],enumerable:!(s=t(o,d))||s.enumerable});return e})(a({},"__esModule",{value:!0}),e));var s={};o(s,{AdsSettingsSchema:()=>m,ConsentModeSchema:()=>p,GA4SettingsSchema:()=>u,GTMSettingsSchema:()=>v,MappingSchema:()=>f,SettingsSchema:()=>_,UserDataMappingSchema:()=>g,ads:()=>G,ga4:()=>z,gtm:()=>E,mapping:()=>w,settings:()=>A});var d=require("@walkeros/core/dev"),c=require("@walkeros/core/dev"),l=require("@walkeros/core/dev"),p=l.z.union([l.z.boolean(),l.z.record(l.z.string(),l.z.union([l.z.string(),l.z.array(l.z.string())]))]),u=l.z.object({measurementId:l.z.string().regex(/^G-[A-Z0-9]+$/,"Must be a valid GA4 Measurement ID (G-XXXXXXXXXX)").describe("GA4 Measurement ID from Google Analytics (like G-XXXXXXXXXX)"),debug:l.z.boolean().describe("Enable debug mode for GA4 (like true)").optional(),pageview:l.z.boolean().describe("Enable automatic pageview tracking (like true)").optional(),server_container_url:l.z.string().url().describe("Server-side GTM container URL (like https://server-container.com)").optional(),snakeCase:l.z.boolean().describe("Convert parameter names to snake_case (like true)").optional(),transport_url:l.z.string().url().describe("Custom transport URL for GA4 (like https://analytics.example.com/mp/collect)").optional(),data:l.z.any().describe("Custom data mapping configuration").optional()}),g=l.z.object({email:l.z.any().describe("Mapping value for user email (like user.email)").optional(),phone_number:l.z.any().describe("Mapping value for user phone number (like user.phone)").optional(),address:l.z.object({first_name:l.z.any().describe("Mapping value for first name (like data.firstName)").optional(),last_name:l.z.any().describe("Mapping value for last name (like data.lastName)").optional(),street:l.z.any().describe("Mapping value for street address").optional(),city:l.z.any().describe("Mapping value for city (like user.city)").optional(),region:l.z.any().describe("Mapping value for region/state (like user.region)").optional(),postal_code:l.z.any().describe("Mapping value for postal/zip code (like user.zip)").optional(),country:l.z.any().describe("Mapping value for country (like user.country)").optional()}).describe("Address mapping for enhanced conversions").optional()}),m=l.z.object({conversionId:l.z.string().regex(/^AW-[0-9]+$/,"Must be a valid Ads Conversion ID (AW-XXXXXXXXXX)").describe("Google Ads Conversion ID (required)"),currency:l.z.string().length(3).describe("Currency code (ISO 4217, e.g., USD, EUR)").optional(),data:l.z.any().describe("Custom data mapping (WalkerOS.Mapping.Value | Values)").optional(),enhancedConversions:g.describe("Enhanced conversions: maps event fields to Google user_data for improved measurement accuracy").optional()}),v=l.z.object({containerId:l.z.string().regex(/^GTM-[A-Z0-9]+$/,"Must be a valid GTM Container ID (GTM-XXXXXXX)").describe("GTM Container ID (required)"),dataLayer:l.z.string().describe("Custom dataLayer variable name (default: dataLayer)").optional(),domain:l.z.string().describe("Custom GTM domain for script loading").optional(),data:l.z.any().describe("Custom data mapping (WalkerOS.Mapping.Value | Values)").optional()}),_=c.z.object({como:p.describe("Consent mode configuration: false (disabled), true (use defaults), or custom mapping").optional(),como_advanced:c.z.union([c.z.boolean(),c.z.number()]).describe("Advanced consent mode (non-EU): emit denied default at page load with wait_for_update (true=500ms, or a number of ms)").optional(),ga4:u.describe("GA4-specific configuration settings (like { measurementId: G-XXXXXXXXXX })").optional(),ads:m.describe("Google Ads specific configuration settings (like { conversionId: AW-XXXXXXXXX })").optional(),gtm:v.describe("Google Tag Manager specific configuration settings (like { containerId: GTM-XXXXXXX })").optional()}).refine(e=>{var a,t,n;return(null==(a=e.ga4)?void 0:a.measurementId)||(null==(t=e.ads)?void 0:t.conversionId)||(null==(n=e.gtm)?void 0:n.containerId)},{message:"At least one Google tool must be configured (ga4.measurementId, ads.conversionId, or gtm.containerId)"}),X=require("@walkeros/core/dev"),b=X.z.object({}),y=X.z.object({label:X.z.string().describe("Conversion label for this specific event").optional()}),h=X.z.object({}),f=X.z.object({ga4:b.describe("GA4-specific event mapping").optional(),ads:y.describe("Google Ads-specific event mapping").optional(),gtm:h.describe("GTM-specific event mapping").optional()}),A=(0,d.zodToSchema)(_),w=(0,d.zodToSchema)(f),z=(0,d.zodToSchema)(u),G=(0,d.zodToSchema)(m),E=(0,d.zodToSchema)(v),k={};o(k,{env:()=>C,step:()=>I});var C={};o(C,{init:()=>M,push:()=>S,simulation:()=>U});var M={window:{dataLayer:[]},document:{createElement:()=>({src:"",setAttribute:()=>{},removeAttribute:()=>{}}),head:{appendChild:()=>{}}}},S={window:{gtag:Object.assign(()=>{},{}),dataLayer:[]},document:{createElement:()=>({src:"",setAttribute:()=>{},removeAttribute:()=>{}}),head:{appendChild:()=>{}}}},U=["call:window.gtag"],I={};o(I,{addToCart:()=>L,adsEnhancedConversions:()=>W,adsInit:()=>O,consentModeV2:()=>N,ga4Init:()=>j,ga4WithIncludeAll:()=>$,googleAdsConversion:()=>V,gtmDataLayerPush:()=>H,gtmInit:()=>P,multipleToolsSimultaneous:()=>Z,pageView:()=>D,purchase:()=>q});var R=require("@walkeros/core"),T=17e11,x=new Date(T),j={title:"GA4 init",description:"The destination bootstraps gtag and configures a GA4 property via its measurementId.",in:{settings:{ga4:{measurementId:"G-XXXXXX-1"}}},out:[["gtag","js",x],["gtag","config","G-XXXXXX-1",{}]]},O={title:"Google Ads init",description:"The destination bootstraps gtag and configures a Google Ads account via its conversionId.",in:{settings:{ads:{conversionId:"AW-123456789",currency:"EUR"}}},out:[["gtag","js",x],["gtag","config","AW-123456789"]]},P={title:"GTM init",description:"The destination initializes the dataLayer and pushes the gtm.js start event for a GTM container.",in:{settings:{gtm:{containerId:"GTM-XXXXXXX"}}},out:[["dataLayer.push",{"gtm.start":T,event:"gtm.js"}]]},q={title:"Purchase",description:"An order complete event is mapped to the GA4 purchase event with transaction details and nested product items.",in:(0,R.getEvent)("order complete",{timestamp:1700000100}),mapping:{name:"purchase",include:["data","context"],data:{map:{transaction_id:"data.id",value:"data.total",tax:"data.taxes",shipping:"data.shipping",currency:{key:"data.currency",value:"EUR"},items:{loop:["nested",{condition:e=>(0,R.isObject)(e)&&"product"===e.entity,map:{item_id:"data.id",item_name:"data.name",quantity:{key:"data.quantity",value:1}}}]}}}},out:[["gtag","event","purchase",{transaction_id:"0rd3r1d",value:555,tax:73.76,shipping:5.22,currency:"EUR",items:[{item_id:"ers",item_name:"Everyday Ruck Snack",quantity:1},{item_id:"cc",item_name:"Cool Cap",quantity:1}],data_id:"0rd3r1d",data_currency:"EUR",data_shipping:5.22,data_taxes:73.76,data_total:555,context_shopping:"complete",send_to:"G-XXXXXX-1"}]]},L={title:"Add to cart",description:"A product add event is mapped to the GA4 add_to_cart event with item details and value.",in:(0,R.getEvent)("product add",{timestamp:1700000101}),mapping:{name:"add_to_cart",include:["data"],data:{map:{currency:{value:"EUR",key:"data.currency"},value:"data.price",items:{loop:["this",{map:{item_id:"data.id",item_variant:"data.color",quantity:{value:1,key:"data.quantity"}}}]}}}},out:[["gtag","event","add_to_cart",{currency:"EUR",value:420,items:[{item_id:"ers",item_variant:"black",quantity:1}],data_id:"ers",data_name:"Everyday Ruck Snack",data_color:"black",data_size:"l",data_price:420,send_to:"G-XXXXXX-1"}]]},D={title:"Page view",description:"A page view event is forwarded as a GA4 page_view event with no additional mapping.",in:(0,R.getEvent)("page view",{timestamp:1700000102}),mapping:void 0,out:[["gtag","event","page_view",{send_to:"G-XXXXXX-1"}]]},V={title:"Ads conversion",description:"An order complete event is sent as a Google Ads conversion with a configured label and transaction value.",in:(0,R.getEvent)("order complete",{timestamp:1700000103}),mapping:{name:"PURCHASE_CONV",settings:{ads:{label:"PURCHASE_CONV"}},data:{map:{value:"data.total"}}},out:[["gtag","event","conversion",{send_to:"AW-123456789/PURCHASE_CONV",currency:"EUR",value:555}]]},W={title:"Enhanced conversions",description:"enhancedConversions maps event fields into a gtag set user_data call sent immediately before the conversion event.",in:(0,R.getEvent)("order complete",{timestamp:1700000109,data:{id:"0rd3r1d",currency:"EUR",shipping:5.22,taxes:73.76,total:555,customerEmail:"buyer@shop.com",customerPhone:"+1234567890"}}),mapping:{name:"PURCHASE_EC2",settings:{ads:{label:"PURCHASE_EC2"}},data:{map:{value:"data.total"}}},out:[["gtag","set","user_data",{email:"buyer@shop.com",phone_number:"+1234567890"}],["gtag","event","conversion",{send_to:"AW-123456789/PURCHASE_EC2",currency:"EUR",value:555}]]},H={title:"GTM dataLayer push",description:"A page view event is pushed to window.dataLayer for GTM with the mapped event name and parameters.",in:(0,R.getEvent)("page view",{timestamp:1700000104}),mapping:{name:"page_view",settings:{gtm:{}},data:{map:{page_title:"data.title",page_location:"data.domain"}}},out:[["dataLayer.push",{event:"page_view",page_title:"walkerOS documentation",page_location:"www.example.com"}]]},N={title:"Consent Mode v2",description:"A walker consent command with marketing and functional granted updates gtag Consent Mode v2 parameters.",command:"consent",in:{marketing:!0,functional:!0},out:[["gtag","consent","default",{ad_storage:"denied",ad_user_data:"denied",ad_personalization:"denied",analytics_storage:"denied"}],["gtag","consent","update",{ad_storage:"granted",ad_user_data:"granted",ad_personalization:"granted",analytics_storage:"granted"}]]},$={title:"GA4 include all",description:"Include flattens every event section into prefixed GA4 params, exposing data, context, user, source, and event fields.",in:(0,R.getEvent)("page view",{id:"ev-1700000106",timestamp:1700000106,source:{type:"collector",schema:"4",count:1,trace:"1700000106abcdef1700000106abcdef"}}),mapping:{include:["data","context","globals","user","source","event"]},out:[["gtag","event","page_view",{data_domain:"www.example.com",data_title:"walkerOS documentation",data_referrer:"https://www.walkeros.io/",data_search:"?foo=bar",data_hash:"#hash",data_id:"/docs/",context_dev:"test",globals_pagegroup:"docs",user_id:"us3r",user_device:"c00k13",user_session:"s3ss10n",source_type:"collector",source_schema:"4",source_count:1,source_trace:"1700000106abcdef1700000106abcdef",event_entity:"page",event_action:"view",event_trigger:"load",event_id:"ev-1700000106",event_name:"page view",event_timestamp:1700000106,event_timing:3.14,send_to:"G-XXXXXX-1"}]]},Z={title:"Multi-tool push",description:"A single order event fans out to GA4, Google Ads, and GTM from one mapping rule with per-tool settings.",in:(0,R.getEvent)("order complete",{timestamp:1700000107}),mapping:{name:"purchase",include:["data"],settings:{ga4:{},ads:{label:"PURCHASE_CONV"},gtm:{}},data:{map:{value:"data.total",currency:{key:"data.currency",value:"EUR"}}}},out:[["gtag","event","purchase",{value:555,currency:"EUR",data_id:"0rd3r1d",data_currency:"EUR",data_shipping:5.22,data_taxes:73.76,data_total:555,send_to:"G-XXXXXX-1"}],["gtag","event","conversion",{send_to:"AW-123456789/PURCHASE_CONV",currency:"EUR",value:555,data_id:"0rd3r1d",data_currency:"EUR",data_shipping:5.22,data_taxes:73.76,data_total:555}],["dataLayer.push",{event:"purchase",value:555,currency:"EUR",data_id:"0rd3r1d",data_currency:"EUR",data_shipping:5.22,data_taxes:73.76,data_total:555}]]};//# sourceMappingURL=dev.js.map
|
package/dist/dev.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/dev.ts","../src/schemas/index.ts","../src/schemas/settings.ts","../src/schemas/primitives.ts","../src/schemas/mapping.ts","../src/examples/index.ts","../src/examples/env.ts","../src/examples/step.ts"],"sourcesContent":["export * as schemas from './schemas';\nexport * as examples from './examples';\n","import { zodToSchema } from '@walkeros/core/dev';\nimport { SettingsSchema } from './settings';\nimport { MappingSchema } from './mapping';\nimport {\n GA4SettingsSchema,\n AdsSettingsSchema,\n GTMSettingsSchema,\n} from './primitives';\n\nexport * from './primitives';\n\nexport { SettingsSchema, type Settings } from './settings';\nexport { MappingSchema, type Mapping } from './mapping';\n\n// JSON Schema\nexport const settings = zodToSchema(SettingsSchema);\nexport const mapping = zodToSchema(MappingSchema);\n\n// Nested JSON Schemas for sub-pages\nexport const ga4 = zodToSchema(GA4SettingsSchema);\nexport const ads = zodToSchema(AdsSettingsSchema);\nexport const gtm = zodToSchema(GTMSettingsSchema);\n","import { z } from '@walkeros/core/dev';\nimport {\n ConsentModeSchema,\n GA4SettingsSchema,\n AdsSettingsSchema,\n GTMSettingsSchema,\n} from './primitives';\n\nexport const SettingsSchema = z\n .object({\n como: ConsentModeSchema.describe(\n 'Consent mode configuration: false (disabled), true (use defaults), or custom mapping',\n ).optional(),\n ga4: GA4SettingsSchema.describe(\n 'GA4-specific configuration settings (like { measurementId: G-XXXXXXXXXX })',\n ).optional(),\n ads: AdsSettingsSchema.describe(\n 'Google Ads specific configuration settings (like { conversionId: AW-XXXXXXXXX })',\n ).optional(),\n gtm: GTMSettingsSchema.describe(\n 'Google Tag Manager specific configuration settings (like { containerId: GTM-XXXXXXX })',\n ).optional(),\n })\n .refine(\n (data) => {\n return (\n data.ga4?.measurementId ||\n data.ads?.conversionId ||\n data.gtm?.containerId\n );\n },\n {\n message:\n 'At least one Google tool must be configured (ga4.measurementId, ads.conversionId, or gtm.containerId)',\n },\n );\n\nexport type Settings = z.infer<typeof SettingsSchema>;\n","import { z } from '@walkeros/core/dev';\n\n/**\n * Consent Mode Configuration\n * Can be false (disabled), true (use defaults), or custom mapping\n */\nexport const ConsentModeSchema = z.union([\n z.boolean(),\n z.record(z.string(), z.union([z.string(), z.array(z.string())])),\n]);\n\nexport const GA4SettingsSchema = z.object({\n measurementId: z\n .string()\n .regex(/^G-[A-Z0-9]+$/, 'Must be a valid GA4 Measurement ID (G-XXXXXXXXXX)')\n .describe('GA4 Measurement ID from Google Analytics (like G-XXXXXXXXXX)'),\n debug: z\n .boolean()\n .describe('Enable debug mode for GA4 (like true)')\n .optional(),\n pageview: z\n .boolean()\n .describe('Enable automatic pageview tracking (like true)')\n .optional(),\n server_container_url: z\n .string()\n .url()\n .describe(\n 'Server-side GTM container URL (like https://server-container.com)',\n )\n .optional(),\n snakeCase: z\n .boolean()\n .describe('Convert parameter names to snake_case (like true)')\n .optional(),\n transport_url: z\n .string()\n .url()\n .describe(\n 'Custom transport URL for GA4 (like https://analytics.example.com/mp/collect)',\n )\n .optional(),\n data: z.any().describe('Custom data mapping configuration').optional(),\n});\n\n/**\n * User Data Mapping Schema\n * Maps walkerOS event fields to Google's user_data structure\n */\nexport const UserDataMappingSchema = z.object({\n email: z\n .any()\n .describe('Mapping value for user email (like user.email)')\n .optional(),\n phone_number: z\n .any()\n .describe('Mapping value for user phone number (like user.phone)')\n .optional(),\n address: z\n .object({\n first_name: z\n .any()\n .describe('Mapping value for first name (like data.firstName)')\n .optional(),\n last_name: z\n .any()\n .describe('Mapping value for last name (like data.lastName)')\n .optional(),\n street: z.any().describe('Mapping value for street address').optional(),\n city: z\n .any()\n .describe('Mapping value for city (like user.city)')\n .optional(),\n region: z\n .any()\n .describe('Mapping value for region/state (like user.region)')\n .optional(),\n postal_code: z\n .any()\n .describe('Mapping value for postal/zip code (like user.zip)')\n .optional(),\n country: z\n .any()\n .describe('Mapping value for country (like user.country)')\n .optional(),\n })\n .describe('Address mapping for enhanced conversions')\n .optional(),\n});\n\n/**\n * Google Ads Settings Schema\n * Configuration for Google Ads conversions\n */\nexport const AdsSettingsSchema = z.object({\n conversionId: z\n .string()\n .regex(/^AW-[0-9]+$/, 'Must be a valid Ads Conversion ID (AW-XXXXXXXXXX)')\n .describe('Google Ads Conversion ID (required)'),\n currency: z\n .string()\n .length(3)\n .describe('Currency code (ISO 4217, e.g., USD, EUR)')\n .optional(),\n data: z\n .any()\n .describe('Custom data mapping (WalkerOS.Mapping.Value | Values)')\n .optional(),\n enhancedConversions: UserDataMappingSchema.describe(\n 'Enhanced conversions: maps event fields to Google user_data for improved measurement accuracy',\n ).optional(),\n});\n\n/**\n * GTM Settings Schema\n * Configuration for Google Tag Manager\n */\nexport const GTMSettingsSchema = z.object({\n containerId: z\n .string()\n .regex(/^GTM-[A-Z0-9]+$/, 'Must be a valid GTM Container ID (GTM-XXXXXXX)')\n .describe('GTM Container ID (required)'),\n dataLayer: z\n .string()\n .describe('Custom dataLayer variable name (default: dataLayer)')\n .optional(),\n domain: z\n .string()\n .describe('Custom GTM domain for script loading')\n .optional(),\n data: z\n .any()\n .describe('Custom data mapping (WalkerOS.Mapping.Value | Values)')\n .optional(),\n});\n","import { z } from '@walkeros/core/dev';\n\n/**\n * GA4 Mapping Schema\n * Event-level mapping for GA4\n */\nexport const GA4MappingSchema = z.object({});\n\n/**\n * Google Ads Mapping Schema\n * Event-level mapping for Google Ads\n */\nexport const AdsMappingSchema = z.object({\n label: z\n .string()\n .describe('Conversion label for this specific event')\n .optional(),\n});\n\n/**\n * GTM Mapping Schema\n * Event-level mapping for GTM (empty - GTM uses dataLayer directly)\n */\nexport const GTMMappingSchema = z.object({});\n\n/**\n * Gtag Mapping Schema\n * Tool-specific event-level mappings\n */\nexport const MappingSchema = z.object({\n ga4: GA4MappingSchema.describe('GA4-specific event mapping').optional(),\n ads: AdsMappingSchema.describe(\n 'Google Ads-specific event mapping',\n ).optional(),\n gtm: GTMMappingSchema.describe('GTM-specific event mapping').optional(),\n});\n\n/**\n * Type inference from MappingSchema\n */\nexport type Mapping = z.infer<typeof MappingSchema>;\n","export * as env from './env';\nexport * as step from './step';\n","import type { Env } from '../types';\n\n/**\n * Example environment configurations for Gtag destination\n *\n * These environments provide standardized mock structures for testing\n * and development without requiring external dependencies.\n */\n\n// Simple no-op function for mocking\nconst noop = () => {};\n\nexport const init: Env | undefined = {\n window: {\n // gtag absent: initializeGtag() installs it during init.\n dataLayer: [],\n },\n document: {\n createElement: () => ({\n src: '',\n setAttribute: () => {},\n removeAttribute: () => {},\n }),\n head: { appendChild: () => {} },\n },\n};\n\nexport const push: Env = {\n window: {\n gtag: Object.assign(noop, {\n // Add any gtag-specific properties if needed\n }),\n dataLayer: [],\n },\n document: {\n createElement: () => ({\n src: '',\n setAttribute: () => {},\n removeAttribute: () => {},\n }),\n head: { appendChild: () => {} },\n },\n};\n\nexport const simulation = [\n 'call:window.gtag', // Track gtag function calls\n];\n","import type { Flow, WalkerOS } from '@walkeros/core';\nimport { getEvent, isObject } from '@walkeros/core';\n\n/**\n * Fixed system time used by the step-examples test so init calls\n * that reference `new Date()` produce deterministic output.\n * Inlined (not exported) so it isn't surfaced as a step example.\n */\nconst INIT_DATE_MS = 1700000000000;\nconst INIT_DATE = new Date(INIT_DATE_MS);\n\n/**\n * GA4 destination bootstrap.\n * Initializes gtag infrastructure and configures the GA4 measurementId.\n */\nexport const ga4Init: Flow.StepExample = {\n title: 'GA4 init',\n description:\n 'The destination bootstraps gtag and configures a GA4 property via its measurementId.',\n in: {\n settings: {\n ga4: { measurementId: 'G-XXXXXX-1' },\n },\n },\n out: [\n ['gtag', 'js', INIT_DATE],\n ['gtag', 'config', 'G-XXXXXX-1', {}],\n ],\n};\n\n/**\n * Google Ads destination bootstrap.\n * Initializes gtag infrastructure and configures the Ads conversionId.\n */\nexport const adsInit: Flow.StepExample = {\n title: 'Google Ads init',\n description:\n 'The destination bootstraps gtag and configures a Google Ads account via its conversionId.',\n in: {\n settings: {\n ads: { conversionId: 'AW-123456789', currency: 'EUR' },\n },\n },\n out: [\n ['gtag', 'js', INIT_DATE],\n ['gtag', 'config', 'AW-123456789'],\n ],\n};\n\n/**\n * GTM destination bootstrap.\n * Initializes the dataLayer and pushes the gtm.js start event.\n */\nexport const gtmInit: Flow.StepExample = {\n title: 'GTM init',\n description:\n 'The destination initializes the dataLayer and pushes the gtm.js start event for a GTM container.',\n in: {\n settings: {\n gtm: { containerId: 'GTM-XXXXXXX' },\n },\n },\n out: [\n [\n 'dataLayer.push',\n {\n 'gtm.start': INIT_DATE_MS,\n event: 'gtm.js',\n },\n ],\n ],\n};\n\nexport const purchase: Flow.StepExample = {\n title: 'Purchase',\n description:\n 'An order complete event is mapped to the GA4 purchase event with transaction details and nested product items.',\n in: getEvent('order complete', { timestamp: 1700000100 }),\n mapping: {\n name: 'purchase',\n include: ['data', 'context'],\n data: {\n map: {\n transaction_id: 'data.id',\n value: 'data.total',\n tax: 'data.taxes',\n shipping: 'data.shipping',\n currency: { key: 'data.currency', value: 'EUR' },\n items: {\n loop: [\n 'nested',\n {\n condition: (entity: unknown) =>\n isObject(entity) && entity.entity === 'product',\n map: {\n item_id: 'data.id',\n item_name: 'data.name',\n quantity: { key: 'data.quantity', value: 1 },\n },\n },\n ],\n },\n },\n },\n },\n out: [\n [\n 'gtag',\n 'event',\n 'purchase',\n {\n transaction_id: '0rd3r1d',\n value: 555,\n tax: 73.76,\n shipping: 5.22,\n currency: 'EUR',\n items: [\n { item_id: 'ers', item_name: 'Everyday Ruck Snack', quantity: 1 },\n { item_id: 'cc', item_name: 'Cool Cap', quantity: 1 },\n ],\n // include: ['data', 'context'] flattens both sections as prefixed params.\n data_id: '0rd3r1d',\n data_currency: 'EUR',\n data_shipping: 5.22,\n data_taxes: 73.76,\n data_total: 555,\n context_shopping: 'complete',\n send_to: 'G-XXXXXX-1',\n },\n ],\n ],\n};\n\nexport const addToCart: Flow.StepExample = {\n title: 'Add to cart',\n description:\n 'A product add event is mapped to the GA4 add_to_cart event with item details and value.',\n in: getEvent('product add', { timestamp: 1700000101 }),\n mapping: {\n name: 'add_to_cart',\n include: ['data'],\n data: {\n map: {\n currency: { value: 'EUR', key: 'data.currency' },\n value: 'data.price',\n items: {\n loop: [\n 'this',\n {\n map: {\n item_id: 'data.id',\n item_variant: 'data.color',\n quantity: { value: 1, key: 'data.quantity' },\n },\n },\n ],\n },\n },\n },\n },\n out: [\n [\n 'gtag',\n 'event',\n 'add_to_cart',\n {\n currency: 'EUR',\n value: 420,\n items: [{ item_id: 'ers', item_variant: 'black', quantity: 1 }],\n // include: ['data'] flattens data as prefixed params.\n data_id: 'ers',\n data_name: 'Everyday Ruck Snack',\n data_color: 'black',\n data_size: 'l',\n data_price: 420,\n send_to: 'G-XXXXXX-1',\n },\n ],\n ],\n};\n\nexport const pageView: Flow.StepExample = {\n title: 'Page view',\n description:\n 'A page view event is forwarded as a GA4 page_view event with no additional mapping.',\n in: getEvent('page view', { timestamp: 1700000102 }),\n mapping: undefined,\n out: [['gtag', 'event', 'page_view', { send_to: 'G-XXXXXX-1' }]],\n};\n\n/**\n * Google Ads conversion tracking.\n * Shows how settings.ads.label maps an event to an Ads conversion call.\n * The Ads push produces gtag('event', 'conversion', { send_to, currency, ...data }).\n */\nexport const googleAdsConversion: Flow.StepExample = {\n title: 'Ads conversion',\n description:\n 'An order complete event is sent as a Google Ads conversion with a configured label and transaction value.',\n in: getEvent('order complete', { timestamp: 1700000103 }),\n mapping: {\n name: 'PURCHASE_CONV',\n settings: {\n ads: { label: 'PURCHASE_CONV' },\n },\n data: {\n map: {\n value: 'data.total',\n },\n },\n },\n out: [\n [\n 'gtag',\n 'event',\n 'conversion',\n {\n send_to: 'AW-123456789/PURCHASE_CONV',\n currency: 'EUR',\n value: 555,\n },\n ],\n ],\n};\n\n/**\n * Google Ads conversion with Enhanced Conversions.\n * enhancedConversions maps event fields to Google's user_data. The destination\n * resolves each mapping value and calls gtag('set', 'user_data', {...}) before\n * gtag('event', 'conversion', {...}).\n */\nexport const adsEnhancedConversions: Flow.StepExample = {\n title: 'Enhanced conversions',\n description:\n 'enhancedConversions maps event fields into a gtag set user_data call sent immediately before the conversion event.',\n in: getEvent('order complete', {\n timestamp: 1700000109,\n data: {\n id: '0rd3r1d',\n currency: 'EUR',\n shipping: 5.22,\n taxes: 73.76,\n total: 555,\n customerEmail: 'buyer@shop.com',\n customerPhone: '+1234567890',\n },\n }),\n mapping: {\n name: 'PURCHASE_EC2',\n settings: {\n ads: { label: 'PURCHASE_EC2' },\n },\n data: {\n map: {\n value: 'data.total',\n },\n },\n },\n out: [\n [\n 'gtag',\n 'set',\n 'user_data',\n {\n email: 'buyer@shop.com',\n phone_number: '+1234567890',\n },\n ],\n [\n 'gtag',\n 'event',\n 'conversion',\n {\n send_to: 'AW-123456789/PURCHASE_EC2',\n currency: 'EUR',\n value: 555,\n },\n ],\n ],\n};\n\n/**\n * GTM dataLayer push.\n * Shows how settings.gtm triggers a window.dataLayer.push() call\n * with { event: mappedName, ...mappedData }.\n * Note: GTM pushes to dataLayer (not gtag), so the out format is a plain object.\n */\nexport const gtmDataLayerPush: Flow.StepExample = {\n title: 'GTM dataLayer push',\n description:\n 'A page view event is pushed to window.dataLayer for GTM with the mapped event name and parameters.',\n in: getEvent('page view', { timestamp: 1700000104 }),\n mapping: {\n name: 'page_view',\n settings: {\n gtm: {},\n },\n data: {\n map: {\n page_title: 'data.title',\n page_location: 'data.domain',\n },\n },\n },\n out: [\n [\n 'dataLayer.push',\n {\n event: 'page_view',\n page_title: 'walkerOS documentation',\n page_location: 'www.example.com',\n },\n ],\n ],\n};\n\n/**\n * Consent Mode v2 with marketing + functional granted.\n *\n * Uses the `command: 'consent'` field to route `in` through the\n * `elb('walker consent', in)` handler rather than pushing it as an event.\n * The default consent mapping is:\n * marketing → ad_storage, ad_user_data, ad_personalization\n * functional → analytics_storage\n */\nexport const consentModeV2: Flow.StepExample = {\n title: 'Consent Mode v2',\n description:\n 'A walker consent command with marketing and functional granted updates gtag Consent Mode v2 parameters.',\n command: 'consent',\n in: { marketing: true, functional: true },\n out: [\n // First consent call sets default to denied for all mapped parameters.\n [\n 'gtag',\n 'consent',\n 'default',\n {\n ad_storage: 'denied',\n ad_user_data: 'denied',\n ad_personalization: 'denied',\n analytics_storage: 'denied',\n },\n ],\n [\n 'gtag',\n 'consent',\n 'update',\n {\n ad_storage: 'granted',\n ad_user_data: 'granted',\n ad_personalization: 'granted',\n analytics_storage: 'granted',\n },\n ],\n ],\n};\n\n/**\n * GA4 event flattening selected event sections into prefixed params.\n * Each listed section (data, context, globals, user, source, event) is\n * flattened into params like data_*, context_*, user_*, etc.\n * The `version` section is intentionally omitted - version_source is baked\n * in at build time from @walkeros/core's package.json, so asserting on it\n * would couple the fixture to the release version.\n */\nexport const ga4WithIncludeAll: Flow.StepExample = {\n title: 'GA4 include all',\n description:\n 'Include flattens every event section into prefixed GA4 params, exposing data, context, user, source, and event fields.',\n in: getEvent('page view', {\n id: 'ev-1700000106',\n timestamp: 1700000106,\n source: {\n type: 'collector',\n schema: '4',\n count: 1,\n trace: '1700000106abcdef1700000106abcdef',\n },\n }),\n mapping: {\n include: ['data', 'context', 'globals', 'user', 'source', 'event'],\n },\n out: [\n [\n 'gtag',\n 'event',\n 'page_view',\n {\n // data_* params from event.data\n data_domain: 'www.example.com',\n data_title: 'walkerOS documentation',\n data_referrer: 'https://www.walkeros.io/',\n data_search: '?foo=bar',\n data_hash: '#hash',\n data_id: '/docs/',\n // context_* params from event.context\n context_dev: 'test',\n // globals_* params from event.globals\n globals_pagegroup: 'docs',\n // user_* params from event.user\n user_id: 'us3r',\n user_device: 'c00k13',\n user_session: 's3ss10n',\n // source_* params from event.source\n source_type: 'collector',\n source_schema: '4',\n source_count: 1,\n source_trace: '1700000106abcdef1700000106abcdef',\n // event_* params from event properties\n event_entity: 'page',\n event_action: 'view',\n event_trigger: 'load',\n event_id: 'ev-1700000106',\n event_name: 'page view',\n event_timestamp: 1700000106,\n event_timing: 3.14,\n // send_to is always set for GA4\n send_to: 'G-XXXXXX-1',\n },\n ],\n ],\n};\n\n/**\n * One event pushed to GA4 + Ads + GTM simultaneously.\n * Shows settings for all three tools in a single mapping rule.\n * The out is a flat array of all observable calls in execution order:\n *\n * - GA4: gtag('event', eventName, { ...params, send_to })\n * - Ads: gtag('event', 'conversion', { send_to, currency, ...data })\n * - GTM: window.dataLayer.push({ event: eventName, ...data })\n */\nexport const multipleToolsSimultaneous: Flow.StepExample = {\n title: 'Multi-tool push',\n description:\n 'A single order event fans out to GA4, Google Ads, and GTM from one mapping rule with per-tool settings.',\n in: getEvent('order complete', { timestamp: 1700000107 }),\n mapping: {\n name: 'purchase',\n include: ['data'],\n settings: {\n ga4: {},\n ads: { label: 'PURCHASE_CONV' },\n gtm: {},\n },\n data: {\n map: {\n value: 'data.total',\n currency: { key: 'data.currency', value: 'EUR' },\n },\n },\n },\n out: [\n [\n 'gtag',\n 'event',\n 'purchase',\n {\n value: 555,\n currency: 'EUR',\n // include: ['data'] flattens data as prefixed params.\n data_id: '0rd3r1d',\n data_currency: 'EUR',\n data_shipping: 5.22,\n data_taxes: 73.76,\n data_total: 555,\n send_to: 'G-XXXXXX-1',\n },\n ],\n [\n 'gtag',\n 'event',\n 'conversion',\n {\n send_to: 'AW-123456789/PURCHASE_CONV',\n currency: 'EUR',\n value: 555,\n data_id: '0rd3r1d',\n data_currency: 'EUR',\n data_shipping: 5.22,\n data_taxes: 73.76,\n data_total: 555,\n },\n ],\n [\n 'dataLayer.push',\n {\n event: 'purchase',\n value: 555,\n currency: 'EUR',\n data_id: '0rd3r1d',\n data_currency: 'EUR',\n data_shipping: 5.22,\n data_taxes: 73.76,\n data_total: 555,\n },\n ],\n ],\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAAA,cAA4B;;;ACA5B,IAAAC,cAAkB;;;ACAlB,iBAAkB;AAMX,IAAM,oBAAoB,aAAE,MAAM;AAAA,EACvC,aAAE,QAAQ;AAAA,EACV,aAAE,OAAO,aAAE,OAAO,GAAG,aAAE,MAAM,CAAC,aAAE,OAAO,GAAG,aAAE,MAAM,aAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AACjE,CAAC;AAEM,IAAM,oBAAoB,aAAE,OAAO;AAAA,EACxC,eAAe,aACZ,OAAO,EACP,MAAM,iBAAiB,mDAAmD,EAC1E,SAAS,8DAA8D;AAAA,EAC1E,OAAO,aACJ,QAAQ,EACR,SAAS,uCAAuC,EAChD,SAAS;AAAA,EACZ,UAAU,aACP,QAAQ,EACR,SAAS,gDAAgD,EACzD,SAAS;AAAA,EACZ,sBAAsB,aACnB,OAAO,EACP,IAAI,EACJ;AAAA,IACC;AAAA,EACF,EACC,SAAS;AAAA,EACZ,WAAW,aACR,QAAQ,EACR,SAAS,mDAAmD,EAC5D,SAAS;AAAA,EACZ,eAAe,aACZ,OAAO,EACP,IAAI,EACJ;AAAA,IACC;AAAA,EACF,EACC,SAAS;AAAA,EACZ,MAAM,aAAE,IAAI,EAAE,SAAS,mCAAmC,EAAE,SAAS;AACvE,CAAC;AAMM,IAAM,wBAAwB,aAAE,OAAO;AAAA,EAC5C,OAAO,aACJ,IAAI,EACJ,SAAS,gDAAgD,EACzD,SAAS;AAAA,EACZ,cAAc,aACX,IAAI,EACJ,SAAS,uDAAuD,EAChE,SAAS;AAAA,EACZ,SAAS,aACN,OAAO;AAAA,IACN,YAAY,aACT,IAAI,EACJ,SAAS,oDAAoD,EAC7D,SAAS;AAAA,IACZ,WAAW,aACR,IAAI,EACJ,SAAS,kDAAkD,EAC3D,SAAS;AAAA,IACZ,QAAQ,aAAE,IAAI,EAAE,SAAS,kCAAkC,EAAE,SAAS;AAAA,IACtE,MAAM,aACH,IAAI,EACJ,SAAS,yCAAyC,EAClD,SAAS;AAAA,IACZ,QAAQ,aACL,IAAI,EACJ,SAAS,mDAAmD,EAC5D,SAAS;AAAA,IACZ,aAAa,aACV,IAAI,EACJ,SAAS,mDAAmD,EAC5D,SAAS;AAAA,IACZ,SAAS,aACN,IAAI,EACJ,SAAS,+CAA+C,EACxD,SAAS;AAAA,EACd,CAAC,EACA,SAAS,0CAA0C,EACnD,SAAS;AACd,CAAC;AAMM,IAAM,oBAAoB,aAAE,OAAO;AAAA,EACxC,cAAc,aACX,OAAO,EACP,MAAM,eAAe,mDAAmD,EACxE,SAAS,qCAAqC;AAAA,EACjD,UAAU,aACP,OAAO,EACP,OAAO,CAAC,EACR,SAAS,0CAA0C,EACnD,SAAS;AAAA,EACZ,MAAM,aACH,IAAI,EACJ,SAAS,uDAAuD,EAChE,SAAS;AAAA,EACZ,qBAAqB,sBAAsB;AAAA,IACzC;AAAA,EACF,EAAE,SAAS;AACb,CAAC;AAMM,IAAM,oBAAoB,aAAE,OAAO;AAAA,EACxC,aAAa,aACV,OAAO,EACP,MAAM,mBAAmB,gDAAgD,EACzE,SAAS,6BAA6B;AAAA,EACzC,WAAW,aACR,OAAO,EACP,SAAS,qDAAqD,EAC9D,SAAS;AAAA,EACZ,QAAQ,aACL,OAAO,EACP,SAAS,sCAAsC,EAC/C,SAAS;AAAA,EACZ,MAAM,aACH,IAAI,EACJ,SAAS,uDAAuD,EAChE,SAAS;AACd,CAAC;;;AD9HM,IAAM,iBAAiB,cAC3B,OAAO;AAAA,EACN,MAAM,kBAAkB;AAAA,IACtB;AAAA,EACF,EAAE,SAAS;AAAA,EACX,KAAK,kBAAkB;AAAA,IACrB;AAAA,EACF,EAAE,SAAS;AAAA,EACX,KAAK,kBAAkB;AAAA,IACrB;AAAA,EACF,EAAE,SAAS;AAAA,EACX,KAAK,kBAAkB;AAAA,IACrB;AAAA,EACF,EAAE,SAAS;AACb,CAAC,EACA;AAAA,EACC,CAAC,SAAS;AAxBd;AAyBM,aACE,UAAK,QAAL,mBAAU,oBACV,UAAK,QAAL,mBAAU,mBACV,UAAK,QAAL,mBAAU;AAAA,EAEd;AAAA,EACA;AAAA,IACE,SACE;AAAA,EACJ;AACF;;;AEnCF,IAAAC,cAAkB;AAMX,IAAM,mBAAmB,cAAE,OAAO,CAAC,CAAC;AAMpC,IAAM,mBAAmB,cAAE,OAAO;AAAA,EACvC,OAAO,cACJ,OAAO,EACP,SAAS,0CAA0C,EACnD,SAAS;AACd,CAAC;AAMM,IAAM,mBAAmB,cAAE,OAAO,CAAC,CAAC;AAMpC,IAAM,gBAAgB,cAAE,OAAO;AAAA,EACpC,KAAK,iBAAiB,SAAS,4BAA4B,EAAE,SAAS;AAAA,EACtE,KAAK,iBAAiB;AAAA,IACpB;AAAA,EACF,EAAE,SAAS;AAAA,EACX,KAAK,iBAAiB,SAAS,4BAA4B,EAAE,SAAS;AACxE,CAAC;;;AHpBM,IAAM,eAAW,yBAAY,cAAc;AAC3C,IAAM,cAAU,yBAAY,aAAa;AAGzC,IAAM,UAAM,yBAAY,iBAAiB;AACzC,IAAM,UAAM,yBAAY,iBAAiB;AACzC,IAAM,UAAM,yBAAY,iBAAiB;;;AIrBhD;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUA,IAAM,OAAO,MAAM;AAAC;AAEb,IAAM,OAAwB;AAAA,EACnC,QAAQ;AAAA;AAAA,IAEN,WAAW,CAAC;AAAA,EACd;AAAA,EACA,UAAU;AAAA,IACR,eAAe,OAAO;AAAA,MACpB,KAAK;AAAA,MACL,cAAc,MAAM;AAAA,MAAC;AAAA,MACrB,iBAAiB,MAAM;AAAA,MAAC;AAAA,IAC1B;AAAA,IACA,MAAM,EAAE,aAAa,MAAM;AAAA,IAAC,EAAE;AAAA,EAChC;AACF;AAEO,IAAM,OAAY;AAAA,EACvB,QAAQ;AAAA,IACN,MAAM,OAAO,OAAO,MAAM;AAAA;AAAA,IAE1B,CAAC;AAAA,IACD,WAAW,CAAC;AAAA,EACd;AAAA,EACA,UAAU;AAAA,IACR,eAAe,OAAO;AAAA,MACpB,KAAK;AAAA,MACL,cAAc,MAAM;AAAA,MAAC;AAAA,MACrB,iBAAiB,MAAM;AAAA,MAAC;AAAA,IAC1B;AAAA,IACA,MAAM,EAAE,aAAa,MAAM;AAAA,IAAC,EAAE;AAAA,EAChC;AACF;AAEO,IAAM,aAAa;AAAA,EACxB;AAAA;AACF;;;AC9CA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,kBAAmC;AAOnC,IAAM,eAAe;AACrB,IAAM,YAAY,IAAI,KAAK,YAAY;AAMhC,IAAM,UAA4B;AAAA,EACvC,OAAO;AAAA,EACP,aACE;AAAA,EACF,IAAI;AAAA,IACF,UAAU;AAAA,MACR,KAAK,EAAE,eAAe,aAAa;AAAA,IACrC;AAAA,EACF;AAAA,EACA,KAAK;AAAA,IACH,CAAC,QAAQ,MAAM,SAAS;AAAA,IACxB,CAAC,QAAQ,UAAU,cAAc,CAAC,CAAC;AAAA,EACrC;AACF;AAMO,IAAM,UAA4B;AAAA,EACvC,OAAO;AAAA,EACP,aACE;AAAA,EACF,IAAI;AAAA,IACF,UAAU;AAAA,MACR,KAAK,EAAE,cAAc,gBAAgB,UAAU,MAAM;AAAA,IACvD;AAAA,EACF;AAAA,EACA,KAAK;AAAA,IACH,CAAC,QAAQ,MAAM,SAAS;AAAA,IACxB,CAAC,QAAQ,UAAU,cAAc;AAAA,EACnC;AACF;AAMO,IAAM,UAA4B;AAAA,EACvC,OAAO;AAAA,EACP,aACE;AAAA,EACF,IAAI;AAAA,IACF,UAAU;AAAA,MACR,KAAK,EAAE,aAAa,cAAc;AAAA,IACpC;AAAA,EACF;AAAA,EACA,KAAK;AAAA,IACH;AAAA,MACE;AAAA,MACA;AAAA,QACE,aAAa;AAAA,QACb,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,WAA6B;AAAA,EACxC,OAAO;AAAA,EACP,aACE;AAAA,EACF,QAAI,sBAAS,kBAAkB,EAAE,WAAW,WAAW,CAAC;AAAA,EACxD,SAAS;AAAA,IACP,MAAM;AAAA,IACN,SAAS,CAAC,QAAQ,SAAS;AAAA,IAC3B,MAAM;AAAA,MACJ,KAAK;AAAA,QACH,gBAAgB;AAAA,QAChB,OAAO;AAAA,QACP,KAAK;AAAA,QACL,UAAU;AAAA,QACV,UAAU,EAAE,KAAK,iBAAiB,OAAO,MAAM;AAAA,QAC/C,OAAO;AAAA,UACL,MAAM;AAAA,YACJ;AAAA,YACA;AAAA,cACE,WAAW,CAAC,eACV,sBAAS,MAAM,KAAK,OAAO,WAAW;AAAA,cACxC,KAAK;AAAA,gBACH,SAAS;AAAA,gBACT,WAAW;AAAA,gBACX,UAAU,EAAE,KAAK,iBAAiB,OAAO,EAAE;AAAA,cAC7C;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,KAAK;AAAA,IACH;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,QACE,gBAAgB;AAAA,QAChB,OAAO;AAAA,QACP,KAAK;AAAA,QACL,UAAU;AAAA,QACV,UAAU;AAAA,QACV,OAAO;AAAA,UACL,EAAE,SAAS,OAAO,WAAW,uBAAuB,UAAU,EAAE;AAAA,UAChE,EAAE,SAAS,MAAM,WAAW,YAAY,UAAU,EAAE;AAAA,QACtD;AAAA;AAAA,QAEA,SAAS;AAAA,QACT,eAAe;AAAA,QACf,eAAe;AAAA,QACf,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ,kBAAkB;AAAA,QAClB,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,YAA8B;AAAA,EACzC,OAAO;AAAA,EACP,aACE;AAAA,EACF,QAAI,sBAAS,eAAe,EAAE,WAAW,WAAW,CAAC;AAAA,EACrD,SAAS;AAAA,IACP,MAAM;AAAA,IACN,SAAS,CAAC,MAAM;AAAA,IAChB,MAAM;AAAA,MACJ,KAAK;AAAA,QACH,UAAU,EAAE,OAAO,OAAO,KAAK,gBAAgB;AAAA,QAC/C,OAAO;AAAA,QACP,OAAO;AAAA,UACL,MAAM;AAAA,YACJ;AAAA,YACA;AAAA,cACE,KAAK;AAAA,gBACH,SAAS;AAAA,gBACT,cAAc;AAAA,gBACd,UAAU,EAAE,OAAO,GAAG,KAAK,gBAAgB;AAAA,cAC7C;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,KAAK;AAAA,IACH;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,QACE,UAAU;AAAA,QACV,OAAO;AAAA,QACP,OAAO,CAAC,EAAE,SAAS,OAAO,cAAc,SAAS,UAAU,EAAE,CAAC;AAAA;AAAA,QAE9D,SAAS;AAAA,QACT,WAAW;AAAA,QACX,YAAY;AAAA,QACZ,WAAW;AAAA,QACX,YAAY;AAAA,QACZ,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,WAA6B;AAAA,EACxC,OAAO;AAAA,EACP,aACE;AAAA,EACF,QAAI,sBAAS,aAAa,EAAE,WAAW,WAAW,CAAC;AAAA,EACnD,SAAS;AAAA,EACT,KAAK,CAAC,CAAC,QAAQ,SAAS,aAAa,EAAE,SAAS,aAAa,CAAC,CAAC;AACjE;AAOO,IAAM,sBAAwC;AAAA,EACnD,OAAO;AAAA,EACP,aACE;AAAA,EACF,QAAI,sBAAS,kBAAkB,EAAE,WAAW,WAAW,CAAC;AAAA,EACxD,SAAS;AAAA,IACP,MAAM;AAAA,IACN,UAAU;AAAA,MACR,KAAK,EAAE,OAAO,gBAAgB;AAAA,IAChC;AAAA,IACA,MAAM;AAAA,MACJ,KAAK;AAAA,QACH,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAAA,EACA,KAAK;AAAA,IACH;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,UAAU;AAAA,QACV,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACF;AAQO,IAAM,yBAA2C;AAAA,EACtD,OAAO;AAAA,EACP,aACE;AAAA,EACF,QAAI,sBAAS,kBAAkB;AAAA,IAC7B,WAAW;AAAA,IACX,MAAM;AAAA,MACJ,IAAI;AAAA,MACJ,UAAU;AAAA,MACV,UAAU;AAAA,MACV,OAAO;AAAA,MACP,OAAO;AAAA,MACP,eAAe;AAAA,MACf,eAAe;AAAA,IACjB;AAAA,EACF,CAAC;AAAA,EACD,SAAS;AAAA,IACP,MAAM;AAAA,IACN,UAAU;AAAA,MACR,KAAK,EAAE,OAAO,eAAe;AAAA,IAC/B;AAAA,IACA,MAAM;AAAA,MACJ,KAAK;AAAA,QACH,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAAA,EACA,KAAK;AAAA,IACH;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,QACE,OAAO;AAAA,QACP,cAAc;AAAA,MAChB;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,UAAU;AAAA,QACV,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACF;AAQO,IAAM,mBAAqC;AAAA,EAChD,OAAO;AAAA,EACP,aACE;AAAA,EACF,QAAI,sBAAS,aAAa,EAAE,WAAW,WAAW,CAAC;AAAA,EACnD,SAAS;AAAA,IACP,MAAM;AAAA,IACN,UAAU;AAAA,MACR,KAAK,CAAC;AAAA,IACR;AAAA,IACA,MAAM;AAAA,MACJ,KAAK;AAAA,QACH,YAAY;AAAA,QACZ,eAAe;AAAA,MACjB;AAAA,IACF;AAAA,EACF;AAAA,EACA,KAAK;AAAA,IACH;AAAA,MACE;AAAA,MACA;AAAA,QACE,OAAO;AAAA,QACP,YAAY;AAAA,QACZ,eAAe;AAAA,MACjB;AAAA,IACF;AAAA,EACF;AACF;AAWO,IAAM,gBAAkC;AAAA,EAC7C,OAAO;AAAA,EACP,aACE;AAAA,EACF,SAAS;AAAA,EACT,IAAI,EAAE,WAAW,MAAM,YAAY,KAAK;AAAA,EACxC,KAAK;AAAA;AAAA,IAEH;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,QACE,YAAY;AAAA,QACZ,cAAc;AAAA,QACd,oBAAoB;AAAA,QACpB,mBAAmB;AAAA,MACrB;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,QACE,YAAY;AAAA,QACZ,cAAc;AAAA,QACd,oBAAoB;AAAA,QACpB,mBAAmB;AAAA,MACrB;AAAA,IACF;AAAA,EACF;AACF;AAUO,IAAM,oBAAsC;AAAA,EACjD,OAAO;AAAA,EACP,aACE;AAAA,EACF,QAAI,sBAAS,aAAa;AAAA,IACxB,IAAI;AAAA,IACJ,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,EACF,CAAC;AAAA,EACD,SAAS;AAAA,IACP,SAAS,CAAC,QAAQ,WAAW,WAAW,QAAQ,UAAU,OAAO;AAAA,EACnE;AAAA,EACA,KAAK;AAAA,IACH;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,QAEE,aAAa;AAAA,QACb,YAAY;AAAA,QACZ,eAAe;AAAA,QACf,aAAa;AAAA,QACb,WAAW;AAAA,QACX,SAAS;AAAA;AAAA,QAET,aAAa;AAAA;AAAA,QAEb,mBAAmB;AAAA;AAAA,QAEnB,SAAS;AAAA,QACT,aAAa;AAAA,QACb,cAAc;AAAA;AAAA,QAEd,aAAa;AAAA,QACb,eAAe;AAAA,QACf,cAAc;AAAA,QACd,cAAc;AAAA;AAAA,QAEd,cAAc;AAAA,QACd,cAAc;AAAA,QACd,eAAe;AAAA,QACf,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,iBAAiB;AAAA,QACjB,cAAc;AAAA;AAAA,QAEd,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AACF;AAWO,IAAM,4BAA8C;AAAA,EACzD,OAAO;AAAA,EACP,aACE;AAAA,EACF,QAAI,sBAAS,kBAAkB,EAAE,WAAW,WAAW,CAAC;AAAA,EACxD,SAAS;AAAA,IACP,MAAM;AAAA,IACN,SAAS,CAAC,MAAM;AAAA,IAChB,UAAU;AAAA,MACR,KAAK,CAAC;AAAA,MACN,KAAK,EAAE,OAAO,gBAAgB;AAAA,MAC9B,KAAK,CAAC;AAAA,IACR;AAAA,IACA,MAAM;AAAA,MACJ,KAAK;AAAA,QACH,OAAO;AAAA,QACP,UAAU,EAAE,KAAK,iBAAiB,OAAO,MAAM;AAAA,MACjD;AAAA,IACF;AAAA,EACF;AAAA,EACA,KAAK;AAAA,IACH;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,QACE,OAAO;AAAA,QACP,UAAU;AAAA;AAAA,QAEV,SAAS;AAAA,QACT,eAAe;AAAA,QACf,eAAe;AAAA,QACf,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ,SAAS;AAAA,MACX;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,UAAU;AAAA,QACV,OAAO;AAAA,QACP,SAAS;AAAA,QACT,eAAe;AAAA,QACf,eAAe;AAAA,QACf,YAAY;AAAA,QACZ,YAAY;AAAA,MACd;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,QACE,OAAO;AAAA,QACP,OAAO;AAAA,QACP,UAAU;AAAA,QACV,SAAS;AAAA,QACT,eAAe;AAAA,QACf,eAAe;AAAA,QACf,YAAY;AAAA,QACZ,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AACF;","names":["import_dev","import_dev","import_dev"]}
|
|
1
|
+
{"version":3,"sources":["../src/dev.ts","../src/schemas/index.ts","../src/schemas/settings.ts","../src/schemas/primitives.ts","../src/schemas/mapping.ts","../src/examples/index.ts","../src/examples/env.ts","../src/examples/step.ts"],"sourcesContent":["export * as schemas from './schemas';\nexport * as examples from './examples';\n","import { zodToSchema } from '@walkeros/core/dev';\nimport { SettingsSchema } from './settings';\nimport { MappingSchema } from './mapping';\nimport {\n GA4SettingsSchema,\n AdsSettingsSchema,\n GTMSettingsSchema,\n} from './primitives';\n\nexport * from './primitives';\n\nexport { SettingsSchema, type Settings } from './settings';\nexport { MappingSchema, type Mapping } from './mapping';\n\n// JSON Schema\nexport const settings = zodToSchema(SettingsSchema);\nexport const mapping = zodToSchema(MappingSchema);\n\n// Nested JSON Schemas for sub-pages\nexport const ga4 = zodToSchema(GA4SettingsSchema);\nexport const ads = zodToSchema(AdsSettingsSchema);\nexport const gtm = zodToSchema(GTMSettingsSchema);\n","import { z } from '@walkeros/core/dev';\nimport {\n ConsentModeSchema,\n GA4SettingsSchema,\n AdsSettingsSchema,\n GTMSettingsSchema,\n} from './primitives';\n\nexport const SettingsSchema = z\n .object({\n como: ConsentModeSchema.describe(\n 'Consent mode configuration: false (disabled), true (use defaults), or custom mapping',\n ).optional(),\n como_advanced: z\n .union([z.boolean(), z.number()])\n .describe(\n 'Advanced consent mode (non-EU): emit denied default at page load with wait_for_update (true=500ms, or a number of ms)',\n )\n .optional(),\n ga4: GA4SettingsSchema.describe(\n 'GA4-specific configuration settings (like { measurementId: G-XXXXXXXXXX })',\n ).optional(),\n ads: AdsSettingsSchema.describe(\n 'Google Ads specific configuration settings (like { conversionId: AW-XXXXXXXXX })',\n ).optional(),\n gtm: GTMSettingsSchema.describe(\n 'Google Tag Manager specific configuration settings (like { containerId: GTM-XXXXXXX })',\n ).optional(),\n })\n .refine(\n (data) => {\n return (\n data.ga4?.measurementId ||\n data.ads?.conversionId ||\n data.gtm?.containerId\n );\n },\n {\n message:\n 'At least one Google tool must be configured (ga4.measurementId, ads.conversionId, or gtm.containerId)',\n },\n );\n\nexport type Settings = z.infer<typeof SettingsSchema>;\n","import { z } from '@walkeros/core/dev';\n\n/**\n * Consent Mode Configuration\n * Can be false (disabled), true (use defaults), or custom mapping\n */\nexport const ConsentModeSchema = z.union([\n z.boolean(),\n z.record(z.string(), z.union([z.string(), z.array(z.string())])),\n]);\n\nexport const GA4SettingsSchema = z.object({\n measurementId: z\n .string()\n .regex(/^G-[A-Z0-9]+$/, 'Must be a valid GA4 Measurement ID (G-XXXXXXXXXX)')\n .describe('GA4 Measurement ID from Google Analytics (like G-XXXXXXXXXX)'),\n debug: z\n .boolean()\n .describe('Enable debug mode for GA4 (like true)')\n .optional(),\n pageview: z\n .boolean()\n .describe('Enable automatic pageview tracking (like true)')\n .optional(),\n server_container_url: z\n .string()\n .url()\n .describe(\n 'Server-side GTM container URL (like https://server-container.com)',\n )\n .optional(),\n snakeCase: z\n .boolean()\n .describe('Convert parameter names to snake_case (like true)')\n .optional(),\n transport_url: z\n .string()\n .url()\n .describe(\n 'Custom transport URL for GA4 (like https://analytics.example.com/mp/collect)',\n )\n .optional(),\n data: z.any().describe('Custom data mapping configuration').optional(),\n});\n\n/**\n * User Data Mapping Schema\n * Maps walkerOS event fields to Google's user_data structure\n */\nexport const UserDataMappingSchema = z.object({\n email: z\n .any()\n .describe('Mapping value for user email (like user.email)')\n .optional(),\n phone_number: z\n .any()\n .describe('Mapping value for user phone number (like user.phone)')\n .optional(),\n address: z\n .object({\n first_name: z\n .any()\n .describe('Mapping value for first name (like data.firstName)')\n .optional(),\n last_name: z\n .any()\n .describe('Mapping value for last name (like data.lastName)')\n .optional(),\n street: z.any().describe('Mapping value for street address').optional(),\n city: z\n .any()\n .describe('Mapping value for city (like user.city)')\n .optional(),\n region: z\n .any()\n .describe('Mapping value for region/state (like user.region)')\n .optional(),\n postal_code: z\n .any()\n .describe('Mapping value for postal/zip code (like user.zip)')\n .optional(),\n country: z\n .any()\n .describe('Mapping value for country (like user.country)')\n .optional(),\n })\n .describe('Address mapping for enhanced conversions')\n .optional(),\n});\n\n/**\n * Google Ads Settings Schema\n * Configuration for Google Ads conversions\n */\nexport const AdsSettingsSchema = z.object({\n conversionId: z\n .string()\n .regex(/^AW-[0-9]+$/, 'Must be a valid Ads Conversion ID (AW-XXXXXXXXXX)')\n .describe('Google Ads Conversion ID (required)'),\n currency: z\n .string()\n .length(3)\n .describe('Currency code (ISO 4217, e.g., USD, EUR)')\n .optional(),\n data: z\n .any()\n .describe('Custom data mapping (WalkerOS.Mapping.Value | Values)')\n .optional(),\n enhancedConversions: UserDataMappingSchema.describe(\n 'Enhanced conversions: maps event fields to Google user_data for improved measurement accuracy',\n ).optional(),\n});\n\n/**\n * GTM Settings Schema\n * Configuration for Google Tag Manager\n */\nexport const GTMSettingsSchema = z.object({\n containerId: z\n .string()\n .regex(/^GTM-[A-Z0-9]+$/, 'Must be a valid GTM Container ID (GTM-XXXXXXX)')\n .describe('GTM Container ID (required)'),\n dataLayer: z\n .string()\n .describe('Custom dataLayer variable name (default: dataLayer)')\n .optional(),\n domain: z\n .string()\n .describe('Custom GTM domain for script loading')\n .optional(),\n data: z\n .any()\n .describe('Custom data mapping (WalkerOS.Mapping.Value | Values)')\n .optional(),\n});\n","import { z } from '@walkeros/core/dev';\n\n/**\n * GA4 Mapping Schema\n * Event-level mapping for GA4\n */\nexport const GA4MappingSchema = z.object({});\n\n/**\n * Google Ads Mapping Schema\n * Event-level mapping for Google Ads\n */\nexport const AdsMappingSchema = z.object({\n label: z\n .string()\n .describe('Conversion label for this specific event')\n .optional(),\n});\n\n/**\n * GTM Mapping Schema\n * Event-level mapping for GTM (empty - GTM uses dataLayer directly)\n */\nexport const GTMMappingSchema = z.object({});\n\n/**\n * Gtag Mapping Schema\n * Tool-specific event-level mappings\n */\nexport const MappingSchema = z.object({\n ga4: GA4MappingSchema.describe('GA4-specific event mapping').optional(),\n ads: AdsMappingSchema.describe(\n 'Google Ads-specific event mapping',\n ).optional(),\n gtm: GTMMappingSchema.describe('GTM-specific event mapping').optional(),\n});\n\n/**\n * Type inference from MappingSchema\n */\nexport type Mapping = z.infer<typeof MappingSchema>;\n","export * as env from './env';\nexport * as step from './step';\n","import type { Env } from '../types';\n\n/**\n * Example environment configurations for Gtag destination\n *\n * These environments provide standardized mock structures for testing\n * and development without requiring external dependencies.\n */\n\n// Simple no-op function for mocking\nconst noop = () => {};\n\nexport const init: Env | undefined = {\n window: {\n // gtag absent: initializeGtag() installs it during init.\n dataLayer: [],\n },\n document: {\n createElement: () => ({\n src: '',\n setAttribute: () => {},\n removeAttribute: () => {},\n }),\n head: { appendChild: () => {} },\n },\n};\n\nexport const push: Env = {\n window: {\n gtag: Object.assign(noop, {\n // Add any gtag-specific properties if needed\n }),\n dataLayer: [],\n },\n document: {\n createElement: () => ({\n src: '',\n setAttribute: () => {},\n removeAttribute: () => {},\n }),\n head: { appendChild: () => {} },\n },\n};\n\nexport const simulation = [\n 'call:window.gtag', // Track gtag function calls\n];\n","import type { Flow, WalkerOS } from '@walkeros/core';\nimport { getEvent, isObject } from '@walkeros/core';\n\n/**\n * Fixed system time used by the step-examples test so init calls\n * that reference `new Date()` produce deterministic output.\n * Inlined (not exported) so it isn't surfaced as a step example.\n */\nconst INIT_DATE_MS = 1700000000000;\nconst INIT_DATE = new Date(INIT_DATE_MS);\n\n/**\n * GA4 destination bootstrap.\n * Initializes gtag infrastructure and configures the GA4 measurementId.\n */\nexport const ga4Init: Flow.StepExample = {\n title: 'GA4 init',\n description:\n 'The destination bootstraps gtag and configures a GA4 property via its measurementId.',\n in: {\n settings: {\n ga4: { measurementId: 'G-XXXXXX-1' },\n },\n },\n out: [\n ['gtag', 'js', INIT_DATE],\n ['gtag', 'config', 'G-XXXXXX-1', {}],\n ],\n};\n\n/**\n * Google Ads destination bootstrap.\n * Initializes gtag infrastructure and configures the Ads conversionId.\n */\nexport const adsInit: Flow.StepExample = {\n title: 'Google Ads init',\n description:\n 'The destination bootstraps gtag and configures a Google Ads account via its conversionId.',\n in: {\n settings: {\n ads: { conversionId: 'AW-123456789', currency: 'EUR' },\n },\n },\n out: [\n ['gtag', 'js', INIT_DATE],\n ['gtag', 'config', 'AW-123456789'],\n ],\n};\n\n/**\n * GTM destination bootstrap.\n * Initializes the dataLayer and pushes the gtm.js start event.\n */\nexport const gtmInit: Flow.StepExample = {\n title: 'GTM init',\n description:\n 'The destination initializes the dataLayer and pushes the gtm.js start event for a GTM container.',\n in: {\n settings: {\n gtm: { containerId: 'GTM-XXXXXXX' },\n },\n },\n out: [\n [\n 'dataLayer.push',\n {\n 'gtm.start': INIT_DATE_MS,\n event: 'gtm.js',\n },\n ],\n ],\n};\n\nexport const purchase: Flow.StepExample = {\n title: 'Purchase',\n description:\n 'An order complete event is mapped to the GA4 purchase event with transaction details and nested product items.',\n in: getEvent('order complete', { timestamp: 1700000100 }),\n mapping: {\n name: 'purchase',\n include: ['data', 'context'],\n data: {\n map: {\n transaction_id: 'data.id',\n value: 'data.total',\n tax: 'data.taxes',\n shipping: 'data.shipping',\n currency: { key: 'data.currency', value: 'EUR' },\n items: {\n loop: [\n 'nested',\n {\n condition: (entity: unknown) =>\n isObject(entity) && entity.entity === 'product',\n map: {\n item_id: 'data.id',\n item_name: 'data.name',\n quantity: { key: 'data.quantity', value: 1 },\n },\n },\n ],\n },\n },\n },\n },\n out: [\n [\n 'gtag',\n 'event',\n 'purchase',\n {\n transaction_id: '0rd3r1d',\n value: 555,\n tax: 73.76,\n shipping: 5.22,\n currency: 'EUR',\n items: [\n { item_id: 'ers', item_name: 'Everyday Ruck Snack', quantity: 1 },\n { item_id: 'cc', item_name: 'Cool Cap', quantity: 1 },\n ],\n // include: ['data', 'context'] flattens both sections as prefixed params.\n data_id: '0rd3r1d',\n data_currency: 'EUR',\n data_shipping: 5.22,\n data_taxes: 73.76,\n data_total: 555,\n context_shopping: 'complete',\n send_to: 'G-XXXXXX-1',\n },\n ],\n ],\n};\n\nexport const addToCart: Flow.StepExample = {\n title: 'Add to cart',\n description:\n 'A product add event is mapped to the GA4 add_to_cart event with item details and value.',\n in: getEvent('product add', { timestamp: 1700000101 }),\n mapping: {\n name: 'add_to_cart',\n include: ['data'],\n data: {\n map: {\n currency: { value: 'EUR', key: 'data.currency' },\n value: 'data.price',\n items: {\n loop: [\n 'this',\n {\n map: {\n item_id: 'data.id',\n item_variant: 'data.color',\n quantity: { value: 1, key: 'data.quantity' },\n },\n },\n ],\n },\n },\n },\n },\n out: [\n [\n 'gtag',\n 'event',\n 'add_to_cart',\n {\n currency: 'EUR',\n value: 420,\n items: [{ item_id: 'ers', item_variant: 'black', quantity: 1 }],\n // include: ['data'] flattens data as prefixed params.\n data_id: 'ers',\n data_name: 'Everyday Ruck Snack',\n data_color: 'black',\n data_size: 'l',\n data_price: 420,\n send_to: 'G-XXXXXX-1',\n },\n ],\n ],\n};\n\nexport const pageView: Flow.StepExample = {\n title: 'Page view',\n description:\n 'A page view event is forwarded as a GA4 page_view event with no additional mapping.',\n in: getEvent('page view', { timestamp: 1700000102 }),\n mapping: undefined,\n out: [['gtag', 'event', 'page_view', { send_to: 'G-XXXXXX-1' }]],\n};\n\n/**\n * Google Ads conversion tracking.\n * Shows how settings.ads.label maps an event to an Ads conversion call.\n * The Ads push produces gtag('event', 'conversion', { send_to, currency, ...data }).\n */\nexport const googleAdsConversion: Flow.StepExample = {\n title: 'Ads conversion',\n description:\n 'An order complete event is sent as a Google Ads conversion with a configured label and transaction value.',\n in: getEvent('order complete', { timestamp: 1700000103 }),\n mapping: {\n name: 'PURCHASE_CONV',\n settings: {\n ads: { label: 'PURCHASE_CONV' },\n },\n data: {\n map: {\n value: 'data.total',\n },\n },\n },\n out: [\n [\n 'gtag',\n 'event',\n 'conversion',\n {\n send_to: 'AW-123456789/PURCHASE_CONV',\n currency: 'EUR',\n value: 555,\n },\n ],\n ],\n};\n\n/**\n * Google Ads conversion with Enhanced Conversions.\n * enhancedConversions maps event fields to Google's user_data. The destination\n * resolves each mapping value and calls gtag('set', 'user_data', {...}) before\n * gtag('event', 'conversion', {...}).\n */\nexport const adsEnhancedConversions: Flow.StepExample = {\n title: 'Enhanced conversions',\n description:\n 'enhancedConversions maps event fields into a gtag set user_data call sent immediately before the conversion event.',\n in: getEvent('order complete', {\n timestamp: 1700000109,\n data: {\n id: '0rd3r1d',\n currency: 'EUR',\n shipping: 5.22,\n taxes: 73.76,\n total: 555,\n customerEmail: 'buyer@shop.com',\n customerPhone: '+1234567890',\n },\n }),\n mapping: {\n name: 'PURCHASE_EC2',\n settings: {\n ads: { label: 'PURCHASE_EC2' },\n },\n data: {\n map: {\n value: 'data.total',\n },\n },\n },\n out: [\n [\n 'gtag',\n 'set',\n 'user_data',\n {\n email: 'buyer@shop.com',\n phone_number: '+1234567890',\n },\n ],\n [\n 'gtag',\n 'event',\n 'conversion',\n {\n send_to: 'AW-123456789/PURCHASE_EC2',\n currency: 'EUR',\n value: 555,\n },\n ],\n ],\n};\n\n/**\n * GTM dataLayer push.\n * Shows how settings.gtm triggers a window.dataLayer.push() call\n * with { event: mappedName, ...mappedData }.\n * Note: GTM pushes to dataLayer (not gtag), so the out format is a plain object.\n */\nexport const gtmDataLayerPush: Flow.StepExample = {\n title: 'GTM dataLayer push',\n description:\n 'A page view event is pushed to window.dataLayer for GTM with the mapped event name and parameters.',\n in: getEvent('page view', { timestamp: 1700000104 }),\n mapping: {\n name: 'page_view',\n settings: {\n gtm: {},\n },\n data: {\n map: {\n page_title: 'data.title',\n page_location: 'data.domain',\n },\n },\n },\n out: [\n [\n 'dataLayer.push',\n {\n event: 'page_view',\n page_title: 'walkerOS documentation',\n page_location: 'www.example.com',\n },\n ],\n ],\n};\n\n/**\n * Consent Mode v2 with marketing + functional granted.\n *\n * Uses the `command: 'consent'` field to route `in` through the\n * `elb('walker consent', in)` handler rather than pushing it as an event.\n * The default consent mapping is:\n * marketing → ad_storage, ad_user_data, ad_personalization\n * functional → analytics_storage\n */\nexport const consentModeV2: Flow.StepExample = {\n title: 'Consent Mode v2',\n description:\n 'A walker consent command with marketing and functional granted updates gtag Consent Mode v2 parameters.',\n command: 'consent',\n in: { marketing: true, functional: true },\n out: [\n // First consent call sets default to denied for all mapped parameters.\n [\n 'gtag',\n 'consent',\n 'default',\n {\n ad_storage: 'denied',\n ad_user_data: 'denied',\n ad_personalization: 'denied',\n analytics_storage: 'denied',\n },\n ],\n [\n 'gtag',\n 'consent',\n 'update',\n {\n ad_storage: 'granted',\n ad_user_data: 'granted',\n ad_personalization: 'granted',\n analytics_storage: 'granted',\n },\n ],\n ],\n};\n\n/**\n * GA4 event flattening selected event sections into prefixed params.\n * Each listed section (data, context, globals, user, source, event) is\n * flattened into params like data_*, context_*, user_*, etc.\n * The `version` section is intentionally omitted - version_source is baked\n * in at build time from @walkeros/core's package.json, so asserting on it\n * would couple the fixture to the release version.\n */\nexport const ga4WithIncludeAll: Flow.StepExample = {\n title: 'GA4 include all',\n description:\n 'Include flattens every event section into prefixed GA4 params, exposing data, context, user, source, and event fields.',\n in: getEvent('page view', {\n id: 'ev-1700000106',\n timestamp: 1700000106,\n source: {\n type: 'collector',\n schema: '4',\n count: 1,\n trace: '1700000106abcdef1700000106abcdef',\n },\n }),\n mapping: {\n include: ['data', 'context', 'globals', 'user', 'source', 'event'],\n },\n out: [\n [\n 'gtag',\n 'event',\n 'page_view',\n {\n // data_* params from event.data\n data_domain: 'www.example.com',\n data_title: 'walkerOS documentation',\n data_referrer: 'https://www.walkeros.io/',\n data_search: '?foo=bar',\n data_hash: '#hash',\n data_id: '/docs/',\n // context_* params from event.context\n context_dev: 'test',\n // globals_* params from event.globals\n globals_pagegroup: 'docs',\n // user_* params from event.user\n user_id: 'us3r',\n user_device: 'c00k13',\n user_session: 's3ss10n',\n // source_* params from event.source\n source_type: 'collector',\n source_schema: '4',\n source_count: 1,\n source_trace: '1700000106abcdef1700000106abcdef',\n // event_* params from event properties\n event_entity: 'page',\n event_action: 'view',\n event_trigger: 'load',\n event_id: 'ev-1700000106',\n event_name: 'page view',\n event_timestamp: 1700000106,\n event_timing: 3.14,\n // send_to is always set for GA4\n send_to: 'G-XXXXXX-1',\n },\n ],\n ],\n};\n\n/**\n * One event pushed to GA4 + Ads + GTM simultaneously.\n * Shows settings for all three tools in a single mapping rule.\n * The out is a flat array of all observable calls in execution order:\n *\n * - GA4: gtag('event', eventName, { ...params, send_to })\n * - Ads: gtag('event', 'conversion', { send_to, currency, ...data })\n * - GTM: window.dataLayer.push({ event: eventName, ...data })\n */\nexport const multipleToolsSimultaneous: Flow.StepExample = {\n title: 'Multi-tool push',\n description:\n 'A single order event fans out to GA4, Google Ads, and GTM from one mapping rule with per-tool settings.',\n in: getEvent('order complete', { timestamp: 1700000107 }),\n mapping: {\n name: 'purchase',\n include: ['data'],\n settings: {\n ga4: {},\n ads: { label: 'PURCHASE_CONV' },\n gtm: {},\n },\n data: {\n map: {\n value: 'data.total',\n currency: { key: 'data.currency', value: 'EUR' },\n },\n },\n },\n out: [\n [\n 'gtag',\n 'event',\n 'purchase',\n {\n value: 555,\n currency: 'EUR',\n // include: ['data'] flattens data as prefixed params.\n data_id: '0rd3r1d',\n data_currency: 'EUR',\n data_shipping: 5.22,\n data_taxes: 73.76,\n data_total: 555,\n send_to: 'G-XXXXXX-1',\n },\n ],\n [\n 'gtag',\n 'event',\n 'conversion',\n {\n send_to: 'AW-123456789/PURCHASE_CONV',\n currency: 'EUR',\n value: 555,\n data_id: '0rd3r1d',\n data_currency: 'EUR',\n data_shipping: 5.22,\n data_taxes: 73.76,\n data_total: 555,\n },\n ],\n [\n 'dataLayer.push',\n {\n event: 'purchase',\n value: 555,\n currency: 'EUR',\n data_id: '0rd3r1d',\n data_currency: 'EUR',\n data_shipping: 5.22,\n data_taxes: 73.76,\n data_total: 555,\n },\n ],\n ],\n};\n"],"mappings":"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","names":["import_dev","import_dev","import_dev"]}
|
package/dist/dev.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var e=Object.defineProperty,a=(a,t)=>{for(var n in t)e(a,n,{get:t[n],enumerable:!0})},t={};a(t,{AdsSettingsSchema:()=>c,ConsentModeSchema:()=>r,GA4SettingsSchema:()=>s,GTMSettingsSchema:()=>p,MappingSchema:()=>_,SettingsSchema:()=>l,UserDataMappingSchema:()=>d,ads:()=>h,ga4:()=>y,gtm:()=>f,mapping:()=>b,settings:()=>X});import{zodToSchema as n}from"@walkeros/core/dev";import{z as i}from"@walkeros/core/dev";import{z as o}from"@walkeros/core/dev";var r=o.union([o.boolean(),o.record(o.string(),o.union([o.string(),o.array(o.string())]))]),s=o.object({measurementId:o.string().regex(/^G-[A-Z0-9]+$/,"Must be a valid GA4 Measurement ID (G-XXXXXXXXXX)").describe("GA4 Measurement ID from Google Analytics (like G-XXXXXXXXXX)"),debug:o.boolean().describe("Enable debug mode for GA4 (like true)").optional(),pageview:o.boolean().describe("Enable automatic pageview tracking (like true)").optional(),server_container_url:o.string().url().describe("Server-side GTM container URL (like https://server-container.com)").optional(),snakeCase:o.boolean().describe("Convert parameter names to snake_case (like true)").optional(),transport_url:o.string().url().describe("Custom transport URL for GA4 (like https://analytics.example.com/mp/collect)").optional(),data:o.any().describe("Custom data mapping configuration").optional()}),d=o.object({email:o.any().describe("Mapping value for user email (like user.email)").optional(),phone_number:o.any().describe("Mapping value for user phone number (like user.phone)").optional(),address:o.object({first_name:o.any().describe("Mapping value for first name (like data.firstName)").optional(),last_name:o.any().describe("Mapping value for last name (like data.lastName)").optional(),street:o.any().describe("Mapping value for street address").optional(),city:o.any().describe("Mapping value for city (like user.city)").optional(),region:o.any().describe("Mapping value for region/state (like user.region)").optional(),postal_code:o.any().describe("Mapping value for postal/zip code (like user.zip)").optional(),country:o.any().describe("Mapping value for country (like user.country)").optional()}).describe("Address mapping for enhanced conversions").optional()}),c=o.object({conversionId:o.string().regex(/^AW-[0-9]+$/,"Must be a valid Ads Conversion ID (AW-XXXXXXXXXX)").describe("Google Ads Conversion ID (required)"),currency:o.string().length(3).describe("Currency code (ISO 4217, e.g., USD, EUR)").optional(),data:o.any().describe("Custom data mapping (WalkerOS.Mapping.Value | Values)").optional(),enhancedConversions:d.describe("Enhanced conversions: maps event fields to Google user_data for improved measurement accuracy").optional()}),p=o.object({containerId:o.string().regex(/^GTM-[A-Z0-9]+$/,"Must be a valid GTM Container ID (GTM-XXXXXXX)").describe("GTM Container ID (required)"),dataLayer:o.string().describe("Custom dataLayer variable name (default: dataLayer)").optional(),domain:o.string().describe("Custom GTM domain for script loading").optional(),data:o.any().describe("Custom data mapping (WalkerOS.Mapping.Value | Values)").optional()}),l=i.object({como:r.describe("Consent mode configuration: false (disabled), true (use defaults), or custom mapping").optional(),ga4:s.describe("GA4-specific configuration settings (like { measurementId: G-XXXXXXXXXX })").optional(),ads:c.describe("Google Ads specific configuration settings (like { conversionId: AW-XXXXXXXXX })").optional(),gtm:p.describe("Google Tag Manager specific configuration settings (like { containerId: GTM-XXXXXXX })").optional()}).refine(e=>{var a,t,n;return(null==(a=e.ga4)?void 0:a.measurementId)||(null==(t=e.ads)?void 0:t.conversionId)||(null==(n=e.gtm)?void 0:n.containerId)},{message:"At least one Google tool must be configured (ga4.measurementId, ads.conversionId, or gtm.containerId)"});import{z as u}from"@walkeros/core/dev";var g=u.object({}),m=u.object({label:u.string().describe("Conversion label for this specific event").optional()}),v=u.object({}),_=u.object({ga4:g.describe("GA4-specific event mapping").optional(),ads:m.describe("Google Ads-specific event mapping").optional(),gtm:v.describe("GTM-specific event mapping").optional()}),X=n(l),b=n(_),y=n(s),h=n(c),f=n(p),A={};a(A,{env:()=>G,step:()=>M});var G={};a(G,{init:()=>w,push:()=>k,simulation:()=>C});var w={window:{dataLayer:[]},document:{createElement:()=>({src:"",setAttribute:()=>{},removeAttribute:()=>{}}),head:{appendChild:()=>{}}}},k={window:{gtag:Object.assign(()=>{},{}),dataLayer:[]},document:{createElement:()=>({src:"",setAttribute:()=>{},removeAttribute:()=>{}}),head:{appendChild:()=>{}}}},C=["call:window.gtag"],M={};a(M,{addToCart:()=>L,adsEnhancedConversions:()=>V,adsInit:()=>x,consentModeV2:()=>D,ga4Init:()=>U,ga4WithIncludeAll:()=>q,googleAdsConversion:()=>O,gtmDataLayerPush:()=>W,gtmInit:()=>T,multipleToolsSimultaneous:()=>z,pageView:()=>P,purchase:()=>j});import{getEvent as E,isObject as I}from"@walkeros/core";var R=17e11,S=new Date(R),U={title:"GA4 init",description:"The destination bootstraps gtag and configures a GA4 property via its measurementId.",in:{settings:{ga4:{measurementId:"G-XXXXXX-1"}}},out:[["gtag","js",S],["gtag","config","G-XXXXXX-1",{}]]},x={title:"Google Ads init",description:"The destination bootstraps gtag and configures a Google Ads account via its conversionId.",in:{settings:{ads:{conversionId:"AW-123456789",currency:"EUR"}}},out:[["gtag","js",S],["gtag","config","AW-123456789"]]},T={title:"GTM init",description:"The destination initializes the dataLayer and pushes the gtm.js start event for a GTM container.",in:{settings:{gtm:{containerId:"GTM-XXXXXXX"}}},out:[["dataLayer.push",{"gtm.start":R,event:"gtm.js"}]]},j={title:"Purchase",description:"An order complete event is mapped to the GA4 purchase event with transaction details and nested product items.",in:E("order complete",{timestamp:1700000100}),mapping:{name:"purchase",include:["data","context"],data:{map:{transaction_id:"data.id",value:"data.total",tax:"data.taxes",shipping:"data.shipping",currency:{key:"data.currency",value:"EUR"},items:{loop:["nested",{condition:e=>I(e)&&"product"===e.entity,map:{item_id:"data.id",item_name:"data.name",quantity:{key:"data.quantity",value:1}}}]}}}},out:[["gtag","event","purchase",{transaction_id:"0rd3r1d",value:555,tax:73.76,shipping:5.22,currency:"EUR",items:[{item_id:"ers",item_name:"Everyday Ruck Snack",quantity:1},{item_id:"cc",item_name:"Cool Cap",quantity:1}],data_id:"0rd3r1d",data_currency:"EUR",data_shipping:5.22,data_taxes:73.76,data_total:555,context_shopping:"complete",send_to:"G-XXXXXX-1"}]]},L={title:"Add to cart",description:"A product add event is mapped to the GA4 add_to_cart event with item details and value.",in:E("product add",{timestamp:1700000101}),mapping:{name:"add_to_cart",include:["data"],data:{map:{currency:{value:"EUR",key:"data.currency"},value:"data.price",items:{loop:["this",{map:{item_id:"data.id",item_variant:"data.color",quantity:{value:1,key:"data.quantity"}}}]}}}},out:[["gtag","event","add_to_cart",{currency:"EUR",value:420,items:[{item_id:"ers",item_variant:"black",quantity:1}],data_id:"ers",data_name:"Everyday Ruck Snack",data_color:"black",data_size:"l",data_price:420,send_to:"G-XXXXXX-1"}]]},P={title:"Page view",description:"A page view event is forwarded as a GA4 page_view event with no additional mapping.",in:E("page view",{timestamp:1700000102}),mapping:void 0,out:[["gtag","event","page_view",{send_to:"G-XXXXXX-1"}]]},O={title:"Ads conversion",description:"An order complete event is sent as a Google Ads conversion with a configured label and transaction value.",in:E("order complete",{timestamp:1700000103}),mapping:{name:"PURCHASE_CONV",settings:{ads:{label:"PURCHASE_CONV"}},data:{map:{value:"data.total"}}},out:[["gtag","event","conversion",{send_to:"AW-123456789/PURCHASE_CONV",currency:"EUR",value:555}]]},V={title:"Enhanced conversions",description:"enhancedConversions maps event fields into a gtag set user_data call sent immediately before the conversion event.",in:E("order complete",{timestamp:1700000109,data:{id:"0rd3r1d",currency:"EUR",shipping:5.22,taxes:73.76,total:555,customerEmail:"buyer@shop.com",customerPhone:"+1234567890"}}),mapping:{name:"PURCHASE_EC2",settings:{ads:{label:"PURCHASE_EC2"}},data:{map:{value:"data.total"}}},out:[["gtag","set","user_data",{email:"buyer@shop.com",phone_number:"+1234567890"}],["gtag","event","conversion",{send_to:"AW-123456789/PURCHASE_EC2",currency:"EUR",value:555}]]},W={title:"GTM dataLayer push",description:"A page view event is pushed to window.dataLayer for GTM with the mapped event name and parameters.",in:E("page view",{timestamp:1700000104}),mapping:{name:"page_view",settings:{gtm:{}},data:{map:{page_title:"data.title",page_location:"data.domain"}}},out:[["dataLayer.push",{event:"page_view",page_title:"walkerOS documentation",page_location:"www.example.com"}]]},D={title:"Consent Mode v2",description:"A walker consent command with marketing and functional granted updates gtag Consent Mode v2 parameters.",command:"consent",in:{marketing:!0,functional:!0},out:[["gtag","consent","default",{ad_storage:"denied",ad_user_data:"denied",ad_personalization:"denied",analytics_storage:"denied"}],["gtag","consent","update",{ad_storage:"granted",ad_user_data:"granted",ad_personalization:"granted",analytics_storage:"granted"}]]},q={title:"GA4 include all",description:"Include flattens every event section into prefixed GA4 params, exposing data, context, user, source, and event fields.",in:E("page view",{id:"ev-1700000106",timestamp:1700000106,source:{type:"collector",schema:"4",count:1,trace:"1700000106abcdef1700000106abcdef"}}),mapping:{include:["data","context","globals","user","source","event"]},out:[["gtag","event","page_view",{data_domain:"www.example.com",data_title:"walkerOS documentation",data_referrer:"https://www.walkeros.io/",data_search:"?foo=bar",data_hash:"#hash",data_id:"/docs/",context_dev:"test",globals_pagegroup:"docs",user_id:"us3r",user_device:"c00k13",user_session:"s3ss10n",source_type:"collector",source_schema:"4",source_count:1,source_trace:"1700000106abcdef1700000106abcdef",event_entity:"page",event_action:"view",event_trigger:"load",event_id:"ev-1700000106",event_name:"page view",event_timestamp:1700000106,event_timing:3.14,send_to:"G-XXXXXX-1"}]]},z={title:"Multi-tool push",description:"A single order event fans out to GA4, Google Ads, and GTM from one mapping rule with per-tool settings.",in:E("order complete",{timestamp:1700000107}),mapping:{name:"purchase",include:["data"],settings:{ga4:{},ads:{label:"PURCHASE_CONV"},gtm:{}},data:{map:{value:"data.total",currency:{key:"data.currency",value:"EUR"}}}},out:[["gtag","event","purchase",{value:555,currency:"EUR",data_id:"0rd3r1d",data_currency:"EUR",data_shipping:5.22,data_taxes:73.76,data_total:555,send_to:"G-XXXXXX-1"}],["gtag","event","conversion",{send_to:"AW-123456789/PURCHASE_CONV",currency:"EUR",value:555,data_id:"0rd3r1d",data_currency:"EUR",data_shipping:5.22,data_taxes:73.76,data_total:555}],["dataLayer.push",{event:"purchase",value:555,currency:"EUR",data_id:"0rd3r1d",data_currency:"EUR",data_shipping:5.22,data_taxes:73.76,data_total:555}]]};export{A as examples,t as schemas};//# sourceMappingURL=dev.mjs.map
|
|
1
|
+
var e=Object.defineProperty,a=(a,t)=>{for(var n in t)e(a,n,{get:t[n],enumerable:!0})},t={};a(t,{AdsSettingsSchema:()=>c,ConsentModeSchema:()=>r,GA4SettingsSchema:()=>s,GTMSettingsSchema:()=>p,MappingSchema:()=>_,SettingsSchema:()=>l,UserDataMappingSchema:()=>d,ads:()=>h,ga4:()=>y,gtm:()=>f,mapping:()=>b,settings:()=>X});import{zodToSchema as n}from"@walkeros/core/dev";import{z as i}from"@walkeros/core/dev";import{z as o}from"@walkeros/core/dev";var r=o.union([o.boolean(),o.record(o.string(),o.union([o.string(),o.array(o.string())]))]),s=o.object({measurementId:o.string().regex(/^G-[A-Z0-9]+$/,"Must be a valid GA4 Measurement ID (G-XXXXXXXXXX)").describe("GA4 Measurement ID from Google Analytics (like G-XXXXXXXXXX)"),debug:o.boolean().describe("Enable debug mode for GA4 (like true)").optional(),pageview:o.boolean().describe("Enable automatic pageview tracking (like true)").optional(),server_container_url:o.string().url().describe("Server-side GTM container URL (like https://server-container.com)").optional(),snakeCase:o.boolean().describe("Convert parameter names to snake_case (like true)").optional(),transport_url:o.string().url().describe("Custom transport URL for GA4 (like https://analytics.example.com/mp/collect)").optional(),data:o.any().describe("Custom data mapping configuration").optional()}),d=o.object({email:o.any().describe("Mapping value for user email (like user.email)").optional(),phone_number:o.any().describe("Mapping value for user phone number (like user.phone)").optional(),address:o.object({first_name:o.any().describe("Mapping value for first name (like data.firstName)").optional(),last_name:o.any().describe("Mapping value for last name (like data.lastName)").optional(),street:o.any().describe("Mapping value for street address").optional(),city:o.any().describe("Mapping value for city (like user.city)").optional(),region:o.any().describe("Mapping value for region/state (like user.region)").optional(),postal_code:o.any().describe("Mapping value for postal/zip code (like user.zip)").optional(),country:o.any().describe("Mapping value for country (like user.country)").optional()}).describe("Address mapping for enhanced conversions").optional()}),c=o.object({conversionId:o.string().regex(/^AW-[0-9]+$/,"Must be a valid Ads Conversion ID (AW-XXXXXXXXXX)").describe("Google Ads Conversion ID (required)"),currency:o.string().length(3).describe("Currency code (ISO 4217, e.g., USD, EUR)").optional(),data:o.any().describe("Custom data mapping (WalkerOS.Mapping.Value | Values)").optional(),enhancedConversions:d.describe("Enhanced conversions: maps event fields to Google user_data for improved measurement accuracy").optional()}),p=o.object({containerId:o.string().regex(/^GTM-[A-Z0-9]+$/,"Must be a valid GTM Container ID (GTM-XXXXXXX)").describe("GTM Container ID (required)"),dataLayer:o.string().describe("Custom dataLayer variable name (default: dataLayer)").optional(),domain:o.string().describe("Custom GTM domain for script loading").optional(),data:o.any().describe("Custom data mapping (WalkerOS.Mapping.Value | Values)").optional()}),l=i.object({como:r.describe("Consent mode configuration: false (disabled), true (use defaults), or custom mapping").optional(),como_advanced:i.union([i.boolean(),i.number()]).describe("Advanced consent mode (non-EU): emit denied default at page load with wait_for_update (true=500ms, or a number of ms)").optional(),ga4:s.describe("GA4-specific configuration settings (like { measurementId: G-XXXXXXXXXX })").optional(),ads:c.describe("Google Ads specific configuration settings (like { conversionId: AW-XXXXXXXXX })").optional(),gtm:p.describe("Google Tag Manager specific configuration settings (like { containerId: GTM-XXXXXXX })").optional()}).refine(e=>{var a,t,n;return(null==(a=e.ga4)?void 0:a.measurementId)||(null==(t=e.ads)?void 0:t.conversionId)||(null==(n=e.gtm)?void 0:n.containerId)},{message:"At least one Google tool must be configured (ga4.measurementId, ads.conversionId, or gtm.containerId)"});import{z as u}from"@walkeros/core/dev";var m=u.object({}),g=u.object({label:u.string().describe("Conversion label for this specific event").optional()}),v=u.object({}),_=u.object({ga4:m.describe("GA4-specific event mapping").optional(),ads:g.describe("Google Ads-specific event mapping").optional(),gtm:v.describe("GTM-specific event mapping").optional()}),X=n(l),b=n(_),y=n(s),h=n(c),f=n(p),A={};a(A,{env:()=>w,step:()=>E});var w={};a(w,{init:()=>G,push:()=>k,simulation:()=>C});var G={window:{dataLayer:[]},document:{createElement:()=>({src:"",setAttribute:()=>{},removeAttribute:()=>{}}),head:{appendChild:()=>{}}}},k={window:{gtag:Object.assign(()=>{},{}),dataLayer:[]},document:{createElement:()=>({src:"",setAttribute:()=>{},removeAttribute:()=>{}}),head:{appendChild:()=>{}}}},C=["call:window.gtag"],E={};a(E,{addToCart:()=>L,adsEnhancedConversions:()=>V,adsInit:()=>x,consentModeV2:()=>D,ga4Init:()=>S,ga4WithIncludeAll:()=>q,googleAdsConversion:()=>O,gtmDataLayerPush:()=>W,gtmInit:()=>T,multipleToolsSimultaneous:()=>z,pageView:()=>P,purchase:()=>j});import{getEvent as M,isObject as U}from"@walkeros/core";var I=17e11,R=new Date(I),S={title:"GA4 init",description:"The destination bootstraps gtag and configures a GA4 property via its measurementId.",in:{settings:{ga4:{measurementId:"G-XXXXXX-1"}}},out:[["gtag","js",R],["gtag","config","G-XXXXXX-1",{}]]},x={title:"Google Ads init",description:"The destination bootstraps gtag and configures a Google Ads account via its conversionId.",in:{settings:{ads:{conversionId:"AW-123456789",currency:"EUR"}}},out:[["gtag","js",R],["gtag","config","AW-123456789"]]},T={title:"GTM init",description:"The destination initializes the dataLayer and pushes the gtm.js start event for a GTM container.",in:{settings:{gtm:{containerId:"GTM-XXXXXXX"}}},out:[["dataLayer.push",{"gtm.start":I,event:"gtm.js"}]]},j={title:"Purchase",description:"An order complete event is mapped to the GA4 purchase event with transaction details and nested product items.",in:M("order complete",{timestamp:1700000100}),mapping:{name:"purchase",include:["data","context"],data:{map:{transaction_id:"data.id",value:"data.total",tax:"data.taxes",shipping:"data.shipping",currency:{key:"data.currency",value:"EUR"},items:{loop:["nested",{condition:e=>U(e)&&"product"===e.entity,map:{item_id:"data.id",item_name:"data.name",quantity:{key:"data.quantity",value:1}}}]}}}},out:[["gtag","event","purchase",{transaction_id:"0rd3r1d",value:555,tax:73.76,shipping:5.22,currency:"EUR",items:[{item_id:"ers",item_name:"Everyday Ruck Snack",quantity:1},{item_id:"cc",item_name:"Cool Cap",quantity:1}],data_id:"0rd3r1d",data_currency:"EUR",data_shipping:5.22,data_taxes:73.76,data_total:555,context_shopping:"complete",send_to:"G-XXXXXX-1"}]]},L={title:"Add to cart",description:"A product add event is mapped to the GA4 add_to_cart event with item details and value.",in:M("product add",{timestamp:1700000101}),mapping:{name:"add_to_cart",include:["data"],data:{map:{currency:{value:"EUR",key:"data.currency"},value:"data.price",items:{loop:["this",{map:{item_id:"data.id",item_variant:"data.color",quantity:{value:1,key:"data.quantity"}}}]}}}},out:[["gtag","event","add_to_cart",{currency:"EUR",value:420,items:[{item_id:"ers",item_variant:"black",quantity:1}],data_id:"ers",data_name:"Everyday Ruck Snack",data_color:"black",data_size:"l",data_price:420,send_to:"G-XXXXXX-1"}]]},P={title:"Page view",description:"A page view event is forwarded as a GA4 page_view event with no additional mapping.",in:M("page view",{timestamp:1700000102}),mapping:void 0,out:[["gtag","event","page_view",{send_to:"G-XXXXXX-1"}]]},O={title:"Ads conversion",description:"An order complete event is sent as a Google Ads conversion with a configured label and transaction value.",in:M("order complete",{timestamp:1700000103}),mapping:{name:"PURCHASE_CONV",settings:{ads:{label:"PURCHASE_CONV"}},data:{map:{value:"data.total"}}},out:[["gtag","event","conversion",{send_to:"AW-123456789/PURCHASE_CONV",currency:"EUR",value:555}]]},V={title:"Enhanced conversions",description:"enhancedConversions maps event fields into a gtag set user_data call sent immediately before the conversion event.",in:M("order complete",{timestamp:1700000109,data:{id:"0rd3r1d",currency:"EUR",shipping:5.22,taxes:73.76,total:555,customerEmail:"buyer@shop.com",customerPhone:"+1234567890"}}),mapping:{name:"PURCHASE_EC2",settings:{ads:{label:"PURCHASE_EC2"}},data:{map:{value:"data.total"}}},out:[["gtag","set","user_data",{email:"buyer@shop.com",phone_number:"+1234567890"}],["gtag","event","conversion",{send_to:"AW-123456789/PURCHASE_EC2",currency:"EUR",value:555}]]},W={title:"GTM dataLayer push",description:"A page view event is pushed to window.dataLayer for GTM with the mapped event name and parameters.",in:M("page view",{timestamp:1700000104}),mapping:{name:"page_view",settings:{gtm:{}},data:{map:{page_title:"data.title",page_location:"data.domain"}}},out:[["dataLayer.push",{event:"page_view",page_title:"walkerOS documentation",page_location:"www.example.com"}]]},D={title:"Consent Mode v2",description:"A walker consent command with marketing and functional granted updates gtag Consent Mode v2 parameters.",command:"consent",in:{marketing:!0,functional:!0},out:[["gtag","consent","default",{ad_storage:"denied",ad_user_data:"denied",ad_personalization:"denied",analytics_storage:"denied"}],["gtag","consent","update",{ad_storage:"granted",ad_user_data:"granted",ad_personalization:"granted",analytics_storage:"granted"}]]},q={title:"GA4 include all",description:"Include flattens every event section into prefixed GA4 params, exposing data, context, user, source, and event fields.",in:M("page view",{id:"ev-1700000106",timestamp:1700000106,source:{type:"collector",schema:"4",count:1,trace:"1700000106abcdef1700000106abcdef"}}),mapping:{include:["data","context","globals","user","source","event"]},out:[["gtag","event","page_view",{data_domain:"www.example.com",data_title:"walkerOS documentation",data_referrer:"https://www.walkeros.io/",data_search:"?foo=bar",data_hash:"#hash",data_id:"/docs/",context_dev:"test",globals_pagegroup:"docs",user_id:"us3r",user_device:"c00k13",user_session:"s3ss10n",source_type:"collector",source_schema:"4",source_count:1,source_trace:"1700000106abcdef1700000106abcdef",event_entity:"page",event_action:"view",event_trigger:"load",event_id:"ev-1700000106",event_name:"page view",event_timestamp:1700000106,event_timing:3.14,send_to:"G-XXXXXX-1"}]]},z={title:"Multi-tool push",description:"A single order event fans out to GA4, Google Ads, and GTM from one mapping rule with per-tool settings.",in:M("order complete",{timestamp:1700000107}),mapping:{name:"purchase",include:["data"],settings:{ga4:{},ads:{label:"PURCHASE_CONV"},gtm:{}},data:{map:{value:"data.total",currency:{key:"data.currency",value:"EUR"}}}},out:[["gtag","event","purchase",{value:555,currency:"EUR",data_id:"0rd3r1d",data_currency:"EUR",data_shipping:5.22,data_taxes:73.76,data_total:555,send_to:"G-XXXXXX-1"}],["gtag","event","conversion",{send_to:"AW-123456789/PURCHASE_CONV",currency:"EUR",value:555,data_id:"0rd3r1d",data_currency:"EUR",data_shipping:5.22,data_taxes:73.76,data_total:555}],["dataLayer.push",{event:"purchase",value:555,currency:"EUR",data_id:"0rd3r1d",data_currency:"EUR",data_shipping:5.22,data_taxes:73.76,data_total:555}]]};export{A as examples,t as schemas};//# sourceMappingURL=dev.mjs.map
|
package/dist/dev.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/schemas/index.ts","../src/schemas/settings.ts","../src/schemas/primitives.ts","../src/schemas/mapping.ts","../src/examples/index.ts","../src/examples/env.ts","../src/examples/step.ts"],"sourcesContent":["import { zodToSchema } from '@walkeros/core/dev';\nimport { SettingsSchema } from './settings';\nimport { MappingSchema } from './mapping';\nimport {\n GA4SettingsSchema,\n AdsSettingsSchema,\n GTMSettingsSchema,\n} from './primitives';\n\nexport * from './primitives';\n\nexport { SettingsSchema, type Settings } from './settings';\nexport { MappingSchema, type Mapping } from './mapping';\n\n// JSON Schema\nexport const settings = zodToSchema(SettingsSchema);\nexport const mapping = zodToSchema(MappingSchema);\n\n// Nested JSON Schemas for sub-pages\nexport const ga4 = zodToSchema(GA4SettingsSchema);\nexport const ads = zodToSchema(AdsSettingsSchema);\nexport const gtm = zodToSchema(GTMSettingsSchema);\n","import { z } from '@walkeros/core/dev';\nimport {\n ConsentModeSchema,\n GA4SettingsSchema,\n AdsSettingsSchema,\n GTMSettingsSchema,\n} from './primitives';\n\nexport const SettingsSchema = z\n .object({\n como: ConsentModeSchema.describe(\n 'Consent mode configuration: false (disabled), true (use defaults), or custom mapping',\n ).optional(),\n ga4: GA4SettingsSchema.describe(\n 'GA4-specific configuration settings (like { measurementId: G-XXXXXXXXXX })',\n ).optional(),\n ads: AdsSettingsSchema.describe(\n 'Google Ads specific configuration settings (like { conversionId: AW-XXXXXXXXX })',\n ).optional(),\n gtm: GTMSettingsSchema.describe(\n 'Google Tag Manager specific configuration settings (like { containerId: GTM-XXXXXXX })',\n ).optional(),\n })\n .refine(\n (data) => {\n return (\n data.ga4?.measurementId ||\n data.ads?.conversionId ||\n data.gtm?.containerId\n );\n },\n {\n message:\n 'At least one Google tool must be configured (ga4.measurementId, ads.conversionId, or gtm.containerId)',\n },\n );\n\nexport type Settings = z.infer<typeof SettingsSchema>;\n","import { z } from '@walkeros/core/dev';\n\n/**\n * Consent Mode Configuration\n * Can be false (disabled), true (use defaults), or custom mapping\n */\nexport const ConsentModeSchema = z.union([\n z.boolean(),\n z.record(z.string(), z.union([z.string(), z.array(z.string())])),\n]);\n\nexport const GA4SettingsSchema = z.object({\n measurementId: z\n .string()\n .regex(/^G-[A-Z0-9]+$/, 'Must be a valid GA4 Measurement ID (G-XXXXXXXXXX)')\n .describe('GA4 Measurement ID from Google Analytics (like G-XXXXXXXXXX)'),\n debug: z\n .boolean()\n .describe('Enable debug mode for GA4 (like true)')\n .optional(),\n pageview: z\n .boolean()\n .describe('Enable automatic pageview tracking (like true)')\n .optional(),\n server_container_url: z\n .string()\n .url()\n .describe(\n 'Server-side GTM container URL (like https://server-container.com)',\n )\n .optional(),\n snakeCase: z\n .boolean()\n .describe('Convert parameter names to snake_case (like true)')\n .optional(),\n transport_url: z\n .string()\n .url()\n .describe(\n 'Custom transport URL for GA4 (like https://analytics.example.com/mp/collect)',\n )\n .optional(),\n data: z.any().describe('Custom data mapping configuration').optional(),\n});\n\n/**\n * User Data Mapping Schema\n * Maps walkerOS event fields to Google's user_data structure\n */\nexport const UserDataMappingSchema = z.object({\n email: z\n .any()\n .describe('Mapping value for user email (like user.email)')\n .optional(),\n phone_number: z\n .any()\n .describe('Mapping value for user phone number (like user.phone)')\n .optional(),\n address: z\n .object({\n first_name: z\n .any()\n .describe('Mapping value for first name (like data.firstName)')\n .optional(),\n last_name: z\n .any()\n .describe('Mapping value for last name (like data.lastName)')\n .optional(),\n street: z.any().describe('Mapping value for street address').optional(),\n city: z\n .any()\n .describe('Mapping value for city (like user.city)')\n .optional(),\n region: z\n .any()\n .describe('Mapping value for region/state (like user.region)')\n .optional(),\n postal_code: z\n .any()\n .describe('Mapping value for postal/zip code (like user.zip)')\n .optional(),\n country: z\n .any()\n .describe('Mapping value for country (like user.country)')\n .optional(),\n })\n .describe('Address mapping for enhanced conversions')\n .optional(),\n});\n\n/**\n * Google Ads Settings Schema\n * Configuration for Google Ads conversions\n */\nexport const AdsSettingsSchema = z.object({\n conversionId: z\n .string()\n .regex(/^AW-[0-9]+$/, 'Must be a valid Ads Conversion ID (AW-XXXXXXXXXX)')\n .describe('Google Ads Conversion ID (required)'),\n currency: z\n .string()\n .length(3)\n .describe('Currency code (ISO 4217, e.g., USD, EUR)')\n .optional(),\n data: z\n .any()\n .describe('Custom data mapping (WalkerOS.Mapping.Value | Values)')\n .optional(),\n enhancedConversions: UserDataMappingSchema.describe(\n 'Enhanced conversions: maps event fields to Google user_data for improved measurement accuracy',\n ).optional(),\n});\n\n/**\n * GTM Settings Schema\n * Configuration for Google Tag Manager\n */\nexport const GTMSettingsSchema = z.object({\n containerId: z\n .string()\n .regex(/^GTM-[A-Z0-9]+$/, 'Must be a valid GTM Container ID (GTM-XXXXXXX)')\n .describe('GTM Container ID (required)'),\n dataLayer: z\n .string()\n .describe('Custom dataLayer variable name (default: dataLayer)')\n .optional(),\n domain: z\n .string()\n .describe('Custom GTM domain for script loading')\n .optional(),\n data: z\n .any()\n .describe('Custom data mapping (WalkerOS.Mapping.Value | Values)')\n .optional(),\n});\n","import { z } from '@walkeros/core/dev';\n\n/**\n * GA4 Mapping Schema\n * Event-level mapping for GA4\n */\nexport const GA4MappingSchema = z.object({});\n\n/**\n * Google Ads Mapping Schema\n * Event-level mapping for Google Ads\n */\nexport const AdsMappingSchema = z.object({\n label: z\n .string()\n .describe('Conversion label for this specific event')\n .optional(),\n});\n\n/**\n * GTM Mapping Schema\n * Event-level mapping for GTM (empty - GTM uses dataLayer directly)\n */\nexport const GTMMappingSchema = z.object({});\n\n/**\n * Gtag Mapping Schema\n * Tool-specific event-level mappings\n */\nexport const MappingSchema = z.object({\n ga4: GA4MappingSchema.describe('GA4-specific event mapping').optional(),\n ads: AdsMappingSchema.describe(\n 'Google Ads-specific event mapping',\n ).optional(),\n gtm: GTMMappingSchema.describe('GTM-specific event mapping').optional(),\n});\n\n/**\n * Type inference from MappingSchema\n */\nexport type Mapping = z.infer<typeof MappingSchema>;\n","export * as env from './env';\nexport * as step from './step';\n","import type { Env } from '../types';\n\n/**\n * Example environment configurations for Gtag destination\n *\n * These environments provide standardized mock structures for testing\n * and development without requiring external dependencies.\n */\n\n// Simple no-op function for mocking\nconst noop = () => {};\n\nexport const init: Env | undefined = {\n window: {\n // gtag absent: initializeGtag() installs it during init.\n dataLayer: [],\n },\n document: {\n createElement: () => ({\n src: '',\n setAttribute: () => {},\n removeAttribute: () => {},\n }),\n head: { appendChild: () => {} },\n },\n};\n\nexport const push: Env = {\n window: {\n gtag: Object.assign(noop, {\n // Add any gtag-specific properties if needed\n }),\n dataLayer: [],\n },\n document: {\n createElement: () => ({\n src: '',\n setAttribute: () => {},\n removeAttribute: () => {},\n }),\n head: { appendChild: () => {} },\n },\n};\n\nexport const simulation = [\n 'call:window.gtag', // Track gtag function calls\n];\n","import type { Flow, WalkerOS } from '@walkeros/core';\nimport { getEvent, isObject } from '@walkeros/core';\n\n/**\n * Fixed system time used by the step-examples test so init calls\n * that reference `new Date()` produce deterministic output.\n * Inlined (not exported) so it isn't surfaced as a step example.\n */\nconst INIT_DATE_MS = 1700000000000;\nconst INIT_DATE = new Date(INIT_DATE_MS);\n\n/**\n * GA4 destination bootstrap.\n * Initializes gtag infrastructure and configures the GA4 measurementId.\n */\nexport const ga4Init: Flow.StepExample = {\n title: 'GA4 init',\n description:\n 'The destination bootstraps gtag and configures a GA4 property via its measurementId.',\n in: {\n settings: {\n ga4: { measurementId: 'G-XXXXXX-1' },\n },\n },\n out: [\n ['gtag', 'js', INIT_DATE],\n ['gtag', 'config', 'G-XXXXXX-1', {}],\n ],\n};\n\n/**\n * Google Ads destination bootstrap.\n * Initializes gtag infrastructure and configures the Ads conversionId.\n */\nexport const adsInit: Flow.StepExample = {\n title: 'Google Ads init',\n description:\n 'The destination bootstraps gtag and configures a Google Ads account via its conversionId.',\n in: {\n settings: {\n ads: { conversionId: 'AW-123456789', currency: 'EUR' },\n },\n },\n out: [\n ['gtag', 'js', INIT_DATE],\n ['gtag', 'config', 'AW-123456789'],\n ],\n};\n\n/**\n * GTM destination bootstrap.\n * Initializes the dataLayer and pushes the gtm.js start event.\n */\nexport const gtmInit: Flow.StepExample = {\n title: 'GTM init',\n description:\n 'The destination initializes the dataLayer and pushes the gtm.js start event for a GTM container.',\n in: {\n settings: {\n gtm: { containerId: 'GTM-XXXXXXX' },\n },\n },\n out: [\n [\n 'dataLayer.push',\n {\n 'gtm.start': INIT_DATE_MS,\n event: 'gtm.js',\n },\n ],\n ],\n};\n\nexport const purchase: Flow.StepExample = {\n title: 'Purchase',\n description:\n 'An order complete event is mapped to the GA4 purchase event with transaction details and nested product items.',\n in: getEvent('order complete', { timestamp: 1700000100 }),\n mapping: {\n name: 'purchase',\n include: ['data', 'context'],\n data: {\n map: {\n transaction_id: 'data.id',\n value: 'data.total',\n tax: 'data.taxes',\n shipping: 'data.shipping',\n currency: { key: 'data.currency', value: 'EUR' },\n items: {\n loop: [\n 'nested',\n {\n condition: (entity: unknown) =>\n isObject(entity) && entity.entity === 'product',\n map: {\n item_id: 'data.id',\n item_name: 'data.name',\n quantity: { key: 'data.quantity', value: 1 },\n },\n },\n ],\n },\n },\n },\n },\n out: [\n [\n 'gtag',\n 'event',\n 'purchase',\n {\n transaction_id: '0rd3r1d',\n value: 555,\n tax: 73.76,\n shipping: 5.22,\n currency: 'EUR',\n items: [\n { item_id: 'ers', item_name: 'Everyday Ruck Snack', quantity: 1 },\n { item_id: 'cc', item_name: 'Cool Cap', quantity: 1 },\n ],\n // include: ['data', 'context'] flattens both sections as prefixed params.\n data_id: '0rd3r1d',\n data_currency: 'EUR',\n data_shipping: 5.22,\n data_taxes: 73.76,\n data_total: 555,\n context_shopping: 'complete',\n send_to: 'G-XXXXXX-1',\n },\n ],\n ],\n};\n\nexport const addToCart: Flow.StepExample = {\n title: 'Add to cart',\n description:\n 'A product add event is mapped to the GA4 add_to_cart event with item details and value.',\n in: getEvent('product add', { timestamp: 1700000101 }),\n mapping: {\n name: 'add_to_cart',\n include: ['data'],\n data: {\n map: {\n currency: { value: 'EUR', key: 'data.currency' },\n value: 'data.price',\n items: {\n loop: [\n 'this',\n {\n map: {\n item_id: 'data.id',\n item_variant: 'data.color',\n quantity: { value: 1, key: 'data.quantity' },\n },\n },\n ],\n },\n },\n },\n },\n out: [\n [\n 'gtag',\n 'event',\n 'add_to_cart',\n {\n currency: 'EUR',\n value: 420,\n items: [{ item_id: 'ers', item_variant: 'black', quantity: 1 }],\n // include: ['data'] flattens data as prefixed params.\n data_id: 'ers',\n data_name: 'Everyday Ruck Snack',\n data_color: 'black',\n data_size: 'l',\n data_price: 420,\n send_to: 'G-XXXXXX-1',\n },\n ],\n ],\n};\n\nexport const pageView: Flow.StepExample = {\n title: 'Page view',\n description:\n 'A page view event is forwarded as a GA4 page_view event with no additional mapping.',\n in: getEvent('page view', { timestamp: 1700000102 }),\n mapping: undefined,\n out: [['gtag', 'event', 'page_view', { send_to: 'G-XXXXXX-1' }]],\n};\n\n/**\n * Google Ads conversion tracking.\n * Shows how settings.ads.label maps an event to an Ads conversion call.\n * The Ads push produces gtag('event', 'conversion', { send_to, currency, ...data }).\n */\nexport const googleAdsConversion: Flow.StepExample = {\n title: 'Ads conversion',\n description:\n 'An order complete event is sent as a Google Ads conversion with a configured label and transaction value.',\n in: getEvent('order complete', { timestamp: 1700000103 }),\n mapping: {\n name: 'PURCHASE_CONV',\n settings: {\n ads: { label: 'PURCHASE_CONV' },\n },\n data: {\n map: {\n value: 'data.total',\n },\n },\n },\n out: [\n [\n 'gtag',\n 'event',\n 'conversion',\n {\n send_to: 'AW-123456789/PURCHASE_CONV',\n currency: 'EUR',\n value: 555,\n },\n ],\n ],\n};\n\n/**\n * Google Ads conversion with Enhanced Conversions.\n * enhancedConversions maps event fields to Google's user_data. The destination\n * resolves each mapping value and calls gtag('set', 'user_data', {...}) before\n * gtag('event', 'conversion', {...}).\n */\nexport const adsEnhancedConversions: Flow.StepExample = {\n title: 'Enhanced conversions',\n description:\n 'enhancedConversions maps event fields into a gtag set user_data call sent immediately before the conversion event.',\n in: getEvent('order complete', {\n timestamp: 1700000109,\n data: {\n id: '0rd3r1d',\n currency: 'EUR',\n shipping: 5.22,\n taxes: 73.76,\n total: 555,\n customerEmail: 'buyer@shop.com',\n customerPhone: '+1234567890',\n },\n }),\n mapping: {\n name: 'PURCHASE_EC2',\n settings: {\n ads: { label: 'PURCHASE_EC2' },\n },\n data: {\n map: {\n value: 'data.total',\n },\n },\n },\n out: [\n [\n 'gtag',\n 'set',\n 'user_data',\n {\n email: 'buyer@shop.com',\n phone_number: '+1234567890',\n },\n ],\n [\n 'gtag',\n 'event',\n 'conversion',\n {\n send_to: 'AW-123456789/PURCHASE_EC2',\n currency: 'EUR',\n value: 555,\n },\n ],\n ],\n};\n\n/**\n * GTM dataLayer push.\n * Shows how settings.gtm triggers a window.dataLayer.push() call\n * with { event: mappedName, ...mappedData }.\n * Note: GTM pushes to dataLayer (not gtag), so the out format is a plain object.\n */\nexport const gtmDataLayerPush: Flow.StepExample = {\n title: 'GTM dataLayer push',\n description:\n 'A page view event is pushed to window.dataLayer for GTM with the mapped event name and parameters.',\n in: getEvent('page view', { timestamp: 1700000104 }),\n mapping: {\n name: 'page_view',\n settings: {\n gtm: {},\n },\n data: {\n map: {\n page_title: 'data.title',\n page_location: 'data.domain',\n },\n },\n },\n out: [\n [\n 'dataLayer.push',\n {\n event: 'page_view',\n page_title: 'walkerOS documentation',\n page_location: 'www.example.com',\n },\n ],\n ],\n};\n\n/**\n * Consent Mode v2 with marketing + functional granted.\n *\n * Uses the `command: 'consent'` field to route `in` through the\n * `elb('walker consent', in)` handler rather than pushing it as an event.\n * The default consent mapping is:\n * marketing → ad_storage, ad_user_data, ad_personalization\n * functional → analytics_storage\n */\nexport const consentModeV2: Flow.StepExample = {\n title: 'Consent Mode v2',\n description:\n 'A walker consent command with marketing and functional granted updates gtag Consent Mode v2 parameters.',\n command: 'consent',\n in: { marketing: true, functional: true },\n out: [\n // First consent call sets default to denied for all mapped parameters.\n [\n 'gtag',\n 'consent',\n 'default',\n {\n ad_storage: 'denied',\n ad_user_data: 'denied',\n ad_personalization: 'denied',\n analytics_storage: 'denied',\n },\n ],\n [\n 'gtag',\n 'consent',\n 'update',\n {\n ad_storage: 'granted',\n ad_user_data: 'granted',\n ad_personalization: 'granted',\n analytics_storage: 'granted',\n },\n ],\n ],\n};\n\n/**\n * GA4 event flattening selected event sections into prefixed params.\n * Each listed section (data, context, globals, user, source, event) is\n * flattened into params like data_*, context_*, user_*, etc.\n * The `version` section is intentionally omitted - version_source is baked\n * in at build time from @walkeros/core's package.json, so asserting on it\n * would couple the fixture to the release version.\n */\nexport const ga4WithIncludeAll: Flow.StepExample = {\n title: 'GA4 include all',\n description:\n 'Include flattens every event section into prefixed GA4 params, exposing data, context, user, source, and event fields.',\n in: getEvent('page view', {\n id: 'ev-1700000106',\n timestamp: 1700000106,\n source: {\n type: 'collector',\n schema: '4',\n count: 1,\n trace: '1700000106abcdef1700000106abcdef',\n },\n }),\n mapping: {\n include: ['data', 'context', 'globals', 'user', 'source', 'event'],\n },\n out: [\n [\n 'gtag',\n 'event',\n 'page_view',\n {\n // data_* params from event.data\n data_domain: 'www.example.com',\n data_title: 'walkerOS documentation',\n data_referrer: 'https://www.walkeros.io/',\n data_search: '?foo=bar',\n data_hash: '#hash',\n data_id: '/docs/',\n // context_* params from event.context\n context_dev: 'test',\n // globals_* params from event.globals\n globals_pagegroup: 'docs',\n // user_* params from event.user\n user_id: 'us3r',\n user_device: 'c00k13',\n user_session: 's3ss10n',\n // source_* params from event.source\n source_type: 'collector',\n source_schema: '4',\n source_count: 1,\n source_trace: '1700000106abcdef1700000106abcdef',\n // event_* params from event properties\n event_entity: 'page',\n event_action: 'view',\n event_trigger: 'load',\n event_id: 'ev-1700000106',\n event_name: 'page view',\n event_timestamp: 1700000106,\n event_timing: 3.14,\n // send_to is always set for GA4\n send_to: 'G-XXXXXX-1',\n },\n ],\n ],\n};\n\n/**\n * One event pushed to GA4 + Ads + GTM simultaneously.\n * Shows settings for all three tools in a single mapping rule.\n * The out is a flat array of all observable calls in execution order:\n *\n * - GA4: gtag('event', eventName, { ...params, send_to })\n * - Ads: gtag('event', 'conversion', { send_to, currency, ...data })\n * - GTM: window.dataLayer.push({ event: eventName, ...data })\n */\nexport const multipleToolsSimultaneous: Flow.StepExample = {\n title: 'Multi-tool push',\n description:\n 'A single order event fans out to GA4, Google Ads, and GTM from one mapping rule with per-tool settings.',\n in: getEvent('order complete', { timestamp: 1700000107 }),\n mapping: {\n name: 'purchase',\n include: ['data'],\n settings: {\n ga4: {},\n ads: { label: 'PURCHASE_CONV' },\n gtm: {},\n },\n data: {\n map: {\n value: 'data.total',\n currency: { key: 'data.currency', value: 'EUR' },\n },\n },\n },\n out: [\n [\n 'gtag',\n 'event',\n 'purchase',\n {\n value: 555,\n currency: 'EUR',\n // include: ['data'] flattens data as prefixed params.\n data_id: '0rd3r1d',\n data_currency: 'EUR',\n data_shipping: 5.22,\n data_taxes: 73.76,\n data_total: 555,\n send_to: 'G-XXXXXX-1',\n },\n ],\n [\n 'gtag',\n 'event',\n 'conversion',\n {\n send_to: 'AW-123456789/PURCHASE_CONV',\n currency: 'EUR',\n value: 555,\n data_id: '0rd3r1d',\n data_currency: 'EUR',\n data_shipping: 5.22,\n data_taxes: 73.76,\n data_total: 555,\n },\n ],\n [\n 'dataLayer.push',\n {\n event: 'purchase',\n value: 555,\n currency: 'EUR',\n data_id: '0rd3r1d',\n data_currency: 'EUR',\n data_shipping: 5.22,\n data_taxes: 73.76,\n data_total: 555,\n },\n ],\n ],\n};\n"],"mappings":"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","names":["z","z","z"]}
|
|
1
|
+
{"version":3,"sources":["../src/schemas/index.ts","../src/schemas/settings.ts","../src/schemas/primitives.ts","../src/schemas/mapping.ts","../src/examples/index.ts","../src/examples/env.ts","../src/examples/step.ts"],"sourcesContent":["import { zodToSchema } from '@walkeros/core/dev';\nimport { SettingsSchema } from './settings';\nimport { MappingSchema } from './mapping';\nimport {\n GA4SettingsSchema,\n AdsSettingsSchema,\n GTMSettingsSchema,\n} from './primitives';\n\nexport * from './primitives';\n\nexport { SettingsSchema, type Settings } from './settings';\nexport { MappingSchema, type Mapping } from './mapping';\n\n// JSON Schema\nexport const settings = zodToSchema(SettingsSchema);\nexport const mapping = zodToSchema(MappingSchema);\n\n// Nested JSON Schemas for sub-pages\nexport const ga4 = zodToSchema(GA4SettingsSchema);\nexport const ads = zodToSchema(AdsSettingsSchema);\nexport const gtm = zodToSchema(GTMSettingsSchema);\n","import { z } from '@walkeros/core/dev';\nimport {\n ConsentModeSchema,\n GA4SettingsSchema,\n AdsSettingsSchema,\n GTMSettingsSchema,\n} from './primitives';\n\nexport const SettingsSchema = z\n .object({\n como: ConsentModeSchema.describe(\n 'Consent mode configuration: false (disabled), true (use defaults), or custom mapping',\n ).optional(),\n como_advanced: z\n .union([z.boolean(), z.number()])\n .describe(\n 'Advanced consent mode (non-EU): emit denied default at page load with wait_for_update (true=500ms, or a number of ms)',\n )\n .optional(),\n ga4: GA4SettingsSchema.describe(\n 'GA4-specific configuration settings (like { measurementId: G-XXXXXXXXXX })',\n ).optional(),\n ads: AdsSettingsSchema.describe(\n 'Google Ads specific configuration settings (like { conversionId: AW-XXXXXXXXX })',\n ).optional(),\n gtm: GTMSettingsSchema.describe(\n 'Google Tag Manager specific configuration settings (like { containerId: GTM-XXXXXXX })',\n ).optional(),\n })\n .refine(\n (data) => {\n return (\n data.ga4?.measurementId ||\n data.ads?.conversionId ||\n data.gtm?.containerId\n );\n },\n {\n message:\n 'At least one Google tool must be configured (ga4.measurementId, ads.conversionId, or gtm.containerId)',\n },\n );\n\nexport type Settings = z.infer<typeof SettingsSchema>;\n","import { z } from '@walkeros/core/dev';\n\n/**\n * Consent Mode Configuration\n * Can be false (disabled), true (use defaults), or custom mapping\n */\nexport const ConsentModeSchema = z.union([\n z.boolean(),\n z.record(z.string(), z.union([z.string(), z.array(z.string())])),\n]);\n\nexport const GA4SettingsSchema = z.object({\n measurementId: z\n .string()\n .regex(/^G-[A-Z0-9]+$/, 'Must be a valid GA4 Measurement ID (G-XXXXXXXXXX)')\n .describe('GA4 Measurement ID from Google Analytics (like G-XXXXXXXXXX)'),\n debug: z\n .boolean()\n .describe('Enable debug mode for GA4 (like true)')\n .optional(),\n pageview: z\n .boolean()\n .describe('Enable automatic pageview tracking (like true)')\n .optional(),\n server_container_url: z\n .string()\n .url()\n .describe(\n 'Server-side GTM container URL (like https://server-container.com)',\n )\n .optional(),\n snakeCase: z\n .boolean()\n .describe('Convert parameter names to snake_case (like true)')\n .optional(),\n transport_url: z\n .string()\n .url()\n .describe(\n 'Custom transport URL for GA4 (like https://analytics.example.com/mp/collect)',\n )\n .optional(),\n data: z.any().describe('Custom data mapping configuration').optional(),\n});\n\n/**\n * User Data Mapping Schema\n * Maps walkerOS event fields to Google's user_data structure\n */\nexport const UserDataMappingSchema = z.object({\n email: z\n .any()\n .describe('Mapping value for user email (like user.email)')\n .optional(),\n phone_number: z\n .any()\n .describe('Mapping value for user phone number (like user.phone)')\n .optional(),\n address: z\n .object({\n first_name: z\n .any()\n .describe('Mapping value for first name (like data.firstName)')\n .optional(),\n last_name: z\n .any()\n .describe('Mapping value for last name (like data.lastName)')\n .optional(),\n street: z.any().describe('Mapping value for street address').optional(),\n city: z\n .any()\n .describe('Mapping value for city (like user.city)')\n .optional(),\n region: z\n .any()\n .describe('Mapping value for region/state (like user.region)')\n .optional(),\n postal_code: z\n .any()\n .describe('Mapping value for postal/zip code (like user.zip)')\n .optional(),\n country: z\n .any()\n .describe('Mapping value for country (like user.country)')\n .optional(),\n })\n .describe('Address mapping for enhanced conversions')\n .optional(),\n});\n\n/**\n * Google Ads Settings Schema\n * Configuration for Google Ads conversions\n */\nexport const AdsSettingsSchema = z.object({\n conversionId: z\n .string()\n .regex(/^AW-[0-9]+$/, 'Must be a valid Ads Conversion ID (AW-XXXXXXXXXX)')\n .describe('Google Ads Conversion ID (required)'),\n currency: z\n .string()\n .length(3)\n .describe('Currency code (ISO 4217, e.g., USD, EUR)')\n .optional(),\n data: z\n .any()\n .describe('Custom data mapping (WalkerOS.Mapping.Value | Values)')\n .optional(),\n enhancedConversions: UserDataMappingSchema.describe(\n 'Enhanced conversions: maps event fields to Google user_data for improved measurement accuracy',\n ).optional(),\n});\n\n/**\n * GTM Settings Schema\n * Configuration for Google Tag Manager\n */\nexport const GTMSettingsSchema = z.object({\n containerId: z\n .string()\n .regex(/^GTM-[A-Z0-9]+$/, 'Must be a valid GTM Container ID (GTM-XXXXXXX)')\n .describe('GTM Container ID (required)'),\n dataLayer: z\n .string()\n .describe('Custom dataLayer variable name (default: dataLayer)')\n .optional(),\n domain: z\n .string()\n .describe('Custom GTM domain for script loading')\n .optional(),\n data: z\n .any()\n .describe('Custom data mapping (WalkerOS.Mapping.Value | Values)')\n .optional(),\n});\n","import { z } from '@walkeros/core/dev';\n\n/**\n * GA4 Mapping Schema\n * Event-level mapping for GA4\n */\nexport const GA4MappingSchema = z.object({});\n\n/**\n * Google Ads Mapping Schema\n * Event-level mapping for Google Ads\n */\nexport const AdsMappingSchema = z.object({\n label: z\n .string()\n .describe('Conversion label for this specific event')\n .optional(),\n});\n\n/**\n * GTM Mapping Schema\n * Event-level mapping for GTM (empty - GTM uses dataLayer directly)\n */\nexport const GTMMappingSchema = z.object({});\n\n/**\n * Gtag Mapping Schema\n * Tool-specific event-level mappings\n */\nexport const MappingSchema = z.object({\n ga4: GA4MappingSchema.describe('GA4-specific event mapping').optional(),\n ads: AdsMappingSchema.describe(\n 'Google Ads-specific event mapping',\n ).optional(),\n gtm: GTMMappingSchema.describe('GTM-specific event mapping').optional(),\n});\n\n/**\n * Type inference from MappingSchema\n */\nexport type Mapping = z.infer<typeof MappingSchema>;\n","export * as env from './env';\nexport * as step from './step';\n","import type { Env } from '../types';\n\n/**\n * Example environment configurations for Gtag destination\n *\n * These environments provide standardized mock structures for testing\n * and development without requiring external dependencies.\n */\n\n// Simple no-op function for mocking\nconst noop = () => {};\n\nexport const init: Env | undefined = {\n window: {\n // gtag absent: initializeGtag() installs it during init.\n dataLayer: [],\n },\n document: {\n createElement: () => ({\n src: '',\n setAttribute: () => {},\n removeAttribute: () => {},\n }),\n head: { appendChild: () => {} },\n },\n};\n\nexport const push: Env = {\n window: {\n gtag: Object.assign(noop, {\n // Add any gtag-specific properties if needed\n }),\n dataLayer: [],\n },\n document: {\n createElement: () => ({\n src: '',\n setAttribute: () => {},\n removeAttribute: () => {},\n }),\n head: { appendChild: () => {} },\n },\n};\n\nexport const simulation = [\n 'call:window.gtag', // Track gtag function calls\n];\n","import type { Flow, WalkerOS } from '@walkeros/core';\nimport { getEvent, isObject } from '@walkeros/core';\n\n/**\n * Fixed system time used by the step-examples test so init calls\n * that reference `new Date()` produce deterministic output.\n * Inlined (not exported) so it isn't surfaced as a step example.\n */\nconst INIT_DATE_MS = 1700000000000;\nconst INIT_DATE = new Date(INIT_DATE_MS);\n\n/**\n * GA4 destination bootstrap.\n * Initializes gtag infrastructure and configures the GA4 measurementId.\n */\nexport const ga4Init: Flow.StepExample = {\n title: 'GA4 init',\n description:\n 'The destination bootstraps gtag and configures a GA4 property via its measurementId.',\n in: {\n settings: {\n ga4: { measurementId: 'G-XXXXXX-1' },\n },\n },\n out: [\n ['gtag', 'js', INIT_DATE],\n ['gtag', 'config', 'G-XXXXXX-1', {}],\n ],\n};\n\n/**\n * Google Ads destination bootstrap.\n * Initializes gtag infrastructure and configures the Ads conversionId.\n */\nexport const adsInit: Flow.StepExample = {\n title: 'Google Ads init',\n description:\n 'The destination bootstraps gtag and configures a Google Ads account via its conversionId.',\n in: {\n settings: {\n ads: { conversionId: 'AW-123456789', currency: 'EUR' },\n },\n },\n out: [\n ['gtag', 'js', INIT_DATE],\n ['gtag', 'config', 'AW-123456789'],\n ],\n};\n\n/**\n * GTM destination bootstrap.\n * Initializes the dataLayer and pushes the gtm.js start event.\n */\nexport const gtmInit: Flow.StepExample = {\n title: 'GTM init',\n description:\n 'The destination initializes the dataLayer and pushes the gtm.js start event for a GTM container.',\n in: {\n settings: {\n gtm: { containerId: 'GTM-XXXXXXX' },\n },\n },\n out: [\n [\n 'dataLayer.push',\n {\n 'gtm.start': INIT_DATE_MS,\n event: 'gtm.js',\n },\n ],\n ],\n};\n\nexport const purchase: Flow.StepExample = {\n title: 'Purchase',\n description:\n 'An order complete event is mapped to the GA4 purchase event with transaction details and nested product items.',\n in: getEvent('order complete', { timestamp: 1700000100 }),\n mapping: {\n name: 'purchase',\n include: ['data', 'context'],\n data: {\n map: {\n transaction_id: 'data.id',\n value: 'data.total',\n tax: 'data.taxes',\n shipping: 'data.shipping',\n currency: { key: 'data.currency', value: 'EUR' },\n items: {\n loop: [\n 'nested',\n {\n condition: (entity: unknown) =>\n isObject(entity) && entity.entity === 'product',\n map: {\n item_id: 'data.id',\n item_name: 'data.name',\n quantity: { key: 'data.quantity', value: 1 },\n },\n },\n ],\n },\n },\n },\n },\n out: [\n [\n 'gtag',\n 'event',\n 'purchase',\n {\n transaction_id: '0rd3r1d',\n value: 555,\n tax: 73.76,\n shipping: 5.22,\n currency: 'EUR',\n items: [\n { item_id: 'ers', item_name: 'Everyday Ruck Snack', quantity: 1 },\n { item_id: 'cc', item_name: 'Cool Cap', quantity: 1 },\n ],\n // include: ['data', 'context'] flattens both sections as prefixed params.\n data_id: '0rd3r1d',\n data_currency: 'EUR',\n data_shipping: 5.22,\n data_taxes: 73.76,\n data_total: 555,\n context_shopping: 'complete',\n send_to: 'G-XXXXXX-1',\n },\n ],\n ],\n};\n\nexport const addToCart: Flow.StepExample = {\n title: 'Add to cart',\n description:\n 'A product add event is mapped to the GA4 add_to_cart event with item details and value.',\n in: getEvent('product add', { timestamp: 1700000101 }),\n mapping: {\n name: 'add_to_cart',\n include: ['data'],\n data: {\n map: {\n currency: { value: 'EUR', key: 'data.currency' },\n value: 'data.price',\n items: {\n loop: [\n 'this',\n {\n map: {\n item_id: 'data.id',\n item_variant: 'data.color',\n quantity: { value: 1, key: 'data.quantity' },\n },\n },\n ],\n },\n },\n },\n },\n out: [\n [\n 'gtag',\n 'event',\n 'add_to_cart',\n {\n currency: 'EUR',\n value: 420,\n items: [{ item_id: 'ers', item_variant: 'black', quantity: 1 }],\n // include: ['data'] flattens data as prefixed params.\n data_id: 'ers',\n data_name: 'Everyday Ruck Snack',\n data_color: 'black',\n data_size: 'l',\n data_price: 420,\n send_to: 'G-XXXXXX-1',\n },\n ],\n ],\n};\n\nexport const pageView: Flow.StepExample = {\n title: 'Page view',\n description:\n 'A page view event is forwarded as a GA4 page_view event with no additional mapping.',\n in: getEvent('page view', { timestamp: 1700000102 }),\n mapping: undefined,\n out: [['gtag', 'event', 'page_view', { send_to: 'G-XXXXXX-1' }]],\n};\n\n/**\n * Google Ads conversion tracking.\n * Shows how settings.ads.label maps an event to an Ads conversion call.\n * The Ads push produces gtag('event', 'conversion', { send_to, currency, ...data }).\n */\nexport const googleAdsConversion: Flow.StepExample = {\n title: 'Ads conversion',\n description:\n 'An order complete event is sent as a Google Ads conversion with a configured label and transaction value.',\n in: getEvent('order complete', { timestamp: 1700000103 }),\n mapping: {\n name: 'PURCHASE_CONV',\n settings: {\n ads: { label: 'PURCHASE_CONV' },\n },\n data: {\n map: {\n value: 'data.total',\n },\n },\n },\n out: [\n [\n 'gtag',\n 'event',\n 'conversion',\n {\n send_to: 'AW-123456789/PURCHASE_CONV',\n currency: 'EUR',\n value: 555,\n },\n ],\n ],\n};\n\n/**\n * Google Ads conversion with Enhanced Conversions.\n * enhancedConversions maps event fields to Google's user_data. The destination\n * resolves each mapping value and calls gtag('set', 'user_data', {...}) before\n * gtag('event', 'conversion', {...}).\n */\nexport const adsEnhancedConversions: Flow.StepExample = {\n title: 'Enhanced conversions',\n description:\n 'enhancedConversions maps event fields into a gtag set user_data call sent immediately before the conversion event.',\n in: getEvent('order complete', {\n timestamp: 1700000109,\n data: {\n id: '0rd3r1d',\n currency: 'EUR',\n shipping: 5.22,\n taxes: 73.76,\n total: 555,\n customerEmail: 'buyer@shop.com',\n customerPhone: '+1234567890',\n },\n }),\n mapping: {\n name: 'PURCHASE_EC2',\n settings: {\n ads: { label: 'PURCHASE_EC2' },\n },\n data: {\n map: {\n value: 'data.total',\n },\n },\n },\n out: [\n [\n 'gtag',\n 'set',\n 'user_data',\n {\n email: 'buyer@shop.com',\n phone_number: '+1234567890',\n },\n ],\n [\n 'gtag',\n 'event',\n 'conversion',\n {\n send_to: 'AW-123456789/PURCHASE_EC2',\n currency: 'EUR',\n value: 555,\n },\n ],\n ],\n};\n\n/**\n * GTM dataLayer push.\n * Shows how settings.gtm triggers a window.dataLayer.push() call\n * with { event: mappedName, ...mappedData }.\n * Note: GTM pushes to dataLayer (not gtag), so the out format is a plain object.\n */\nexport const gtmDataLayerPush: Flow.StepExample = {\n title: 'GTM dataLayer push',\n description:\n 'A page view event is pushed to window.dataLayer for GTM with the mapped event name and parameters.',\n in: getEvent('page view', { timestamp: 1700000104 }),\n mapping: {\n name: 'page_view',\n settings: {\n gtm: {},\n },\n data: {\n map: {\n page_title: 'data.title',\n page_location: 'data.domain',\n },\n },\n },\n out: [\n [\n 'dataLayer.push',\n {\n event: 'page_view',\n page_title: 'walkerOS documentation',\n page_location: 'www.example.com',\n },\n ],\n ],\n};\n\n/**\n * Consent Mode v2 with marketing + functional granted.\n *\n * Uses the `command: 'consent'` field to route `in` through the\n * `elb('walker consent', in)` handler rather than pushing it as an event.\n * The default consent mapping is:\n * marketing → ad_storage, ad_user_data, ad_personalization\n * functional → analytics_storage\n */\nexport const consentModeV2: Flow.StepExample = {\n title: 'Consent Mode v2',\n description:\n 'A walker consent command with marketing and functional granted updates gtag Consent Mode v2 parameters.',\n command: 'consent',\n in: { marketing: true, functional: true },\n out: [\n // First consent call sets default to denied for all mapped parameters.\n [\n 'gtag',\n 'consent',\n 'default',\n {\n ad_storage: 'denied',\n ad_user_data: 'denied',\n ad_personalization: 'denied',\n analytics_storage: 'denied',\n },\n ],\n [\n 'gtag',\n 'consent',\n 'update',\n {\n ad_storage: 'granted',\n ad_user_data: 'granted',\n ad_personalization: 'granted',\n analytics_storage: 'granted',\n },\n ],\n ],\n};\n\n/**\n * GA4 event flattening selected event sections into prefixed params.\n * Each listed section (data, context, globals, user, source, event) is\n * flattened into params like data_*, context_*, user_*, etc.\n * The `version` section is intentionally omitted - version_source is baked\n * in at build time from @walkeros/core's package.json, so asserting on it\n * would couple the fixture to the release version.\n */\nexport const ga4WithIncludeAll: Flow.StepExample = {\n title: 'GA4 include all',\n description:\n 'Include flattens every event section into prefixed GA4 params, exposing data, context, user, source, and event fields.',\n in: getEvent('page view', {\n id: 'ev-1700000106',\n timestamp: 1700000106,\n source: {\n type: 'collector',\n schema: '4',\n count: 1,\n trace: '1700000106abcdef1700000106abcdef',\n },\n }),\n mapping: {\n include: ['data', 'context', 'globals', 'user', 'source', 'event'],\n },\n out: [\n [\n 'gtag',\n 'event',\n 'page_view',\n {\n // data_* params from event.data\n data_domain: 'www.example.com',\n data_title: 'walkerOS documentation',\n data_referrer: 'https://www.walkeros.io/',\n data_search: '?foo=bar',\n data_hash: '#hash',\n data_id: '/docs/',\n // context_* params from event.context\n context_dev: 'test',\n // globals_* params from event.globals\n globals_pagegroup: 'docs',\n // user_* params from event.user\n user_id: 'us3r',\n user_device: 'c00k13',\n user_session: 's3ss10n',\n // source_* params from event.source\n source_type: 'collector',\n source_schema: '4',\n source_count: 1,\n source_trace: '1700000106abcdef1700000106abcdef',\n // event_* params from event properties\n event_entity: 'page',\n event_action: 'view',\n event_trigger: 'load',\n event_id: 'ev-1700000106',\n event_name: 'page view',\n event_timestamp: 1700000106,\n event_timing: 3.14,\n // send_to is always set for GA4\n send_to: 'G-XXXXXX-1',\n },\n ],\n ],\n};\n\n/**\n * One event pushed to GA4 + Ads + GTM simultaneously.\n * Shows settings for all three tools in a single mapping rule.\n * The out is a flat array of all observable calls in execution order:\n *\n * - GA4: gtag('event', eventName, { ...params, send_to })\n * - Ads: gtag('event', 'conversion', { send_to, currency, ...data })\n * - GTM: window.dataLayer.push({ event: eventName, ...data })\n */\nexport const multipleToolsSimultaneous: Flow.StepExample = {\n title: 'Multi-tool push',\n description:\n 'A single order event fans out to GA4, Google Ads, and GTM from one mapping rule with per-tool settings.',\n in: getEvent('order complete', { timestamp: 1700000107 }),\n mapping: {\n name: 'purchase',\n include: ['data'],\n settings: {\n ga4: {},\n ads: { label: 'PURCHASE_CONV' },\n gtm: {},\n },\n data: {\n map: {\n value: 'data.total',\n currency: { key: 'data.currency', value: 'EUR' },\n },\n },\n },\n out: [\n [\n 'gtag',\n 'event',\n 'purchase',\n {\n value: 555,\n currency: 'EUR',\n // include: ['data'] flattens data as prefixed params.\n data_id: '0rd3r1d',\n data_currency: 'EUR',\n data_shipping: 5.22,\n data_taxes: 73.76,\n data_total: 555,\n send_to: 'G-XXXXXX-1',\n },\n ],\n [\n 'gtag',\n 'event',\n 'conversion',\n {\n send_to: 'AW-123456789/PURCHASE_CONV',\n currency: 'EUR',\n value: 555,\n data_id: '0rd3r1d',\n data_currency: 'EUR',\n data_shipping: 5.22,\n data_taxes: 73.76,\n data_total: 555,\n },\n ],\n [\n 'dataLayer.push',\n {\n event: 'purchase',\n value: 555,\n currency: 'EUR',\n data_id: '0rd3r1d',\n data_currency: 'EUR',\n data_shipping: 5.22,\n data_taxes: 73.76,\n data_total: 555,\n },\n ],\n ],\n};\n"],"mappings":"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","names":["z","z","z"]}
|
package/dist/index.browser.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var Destination=(()=>{var
|
|
1
|
+
"use strict";var Destination=(()=>{var n=Object.defineProperty,e=Object.getOwnPropertyDescriptor,t=Object.getOwnPropertyNames,o=Object.prototype.hasOwnProperty,r={};((e,t)=>{for(var o in t)n(e,o,{get:t[o],enumerable:!0})})(r,{DestinationGtag:()=>G,default:()=>V,destinationGtag:()=>M,resetConsentState:()=>F});var a=new Set;function i(n,e="https://www.googletagmanager.com/gtag/js?id=",t=globalThis.document){if(a.has(n))return;const o=t.createElement("script");o.src=e+n,t.head.appendChild(o),a.add(n)}function c(n){const e=n;return e.dataLayer=e.dataLayer||[],e.gtag||(e.gtag=function(){e.dataLayer.push(arguments)}),e.gtag}var s=Object.defineProperty,u=(n,e)=>{for(var t in e)s(n,t,{get:e[t],enumerable:!0})};function l(n,e){if("collector"===n)return"collector";if(!e)throw new Error(`stepId(${n}) requires an id`);return`${n}.${e}`}u({},{stepId:()=>l});function d(n,e){const t=n.destinations[e];if(!t)throw new Error(`Destination not found: ${e}`);return t}u({},{getDestination:()=>d});u({},{Level:()=>g});var f,g=((f=g||{})[f.ERROR=0]="ERROR",f[f.WARN=1]="WARN",f[f.INFO=2]="INFO",f[f.DEBUG=3]="DEBUG",f);function m(n,e){const t=n.transformers[e];if(!t)throw new Error(`Transformer not found: ${e}`);return t}u({},{getTransformer:()=>m});function w(n,e){const t=n.sources[e];if(!t)throw new Error(`Source not found: ${e}`);return t}u({},{getSource:()=>w});function v(n,e){const t=n.stores[e];if(!t)throw new Error(`Store not found: ${e}`);return t}async function p(n,e){return await n.get(e)}u({},{getStore:()=>v,getStoreValue:()=>p});var y={merge:!0,shallow:!0,extend:!0};function h(n,e={},t={}){t={...y,...t};const o=Object.entries(e).reduce((e,[o,r])=>{const a=n[o];return t.merge&&Array.isArray(a)&&Array.isArray(r)?e[o]=r.reduce((n,e)=>n.includes(e)?n:[...n,e],[...a]):(t.extend||o in n)&&(e[o]=r),e},{});return t.shallow?{...n,...o}:(Object.assign(n,o),n)}function b(n){return Array.isArray(n)}function j(n){return void 0!==n}function O(n){return"object"==typeof n&&null!==n&&!b(n)&&"[object Object]"===Object.prototype.toString.call(n)}function _(n){return"string"==typeof n}function I(n,e="",t){const o=e.split(".");let r=n;for(let n=0;n<o.length;n++){const e=o[n];if("*"===e&&b(r)){const e=o.slice(n+1).join("."),a=[];for(const n of r){const o=I(n,e,t);a.push(o)}return a}if(r=O(r)||b(r)?r[e]:void 0,void 0===r)break}return j(r)?r:t}function E(n){return function(n){return"boolean"==typeof n}(n)||_(n)||function(n){return"number"==typeof n&&!Number.isNaN(n)}(n)||!j(n)||b(n)&&n.every(E)||O(n)&&Object.values(n).every(E)}function C(n){return E(n)?n:void 0}function k(n,e,t){return async function(...o){try{return await n(...o)}catch(n){if(!e)return;return await e(n)}finally{await(null==t?void 0:t())}}}var A=class n extends Error{constructor(e,t){super(e,t),this.name="FatalError",Object.setPrototypeOf(this,n.prototype)}};async function S(n,e={},t={}){var o,r;if(!j(n))return;const a=O(n)&&n.consent||t.consent||(null==(o=t.collector)?void 0:o.consent),i=null!=(r=t.event)?r:O(n)?n:{};if(!t.collector)throw new Error("getMappingValue: context.collector is required");const c={event:i,mapping:e,collector:t.collector,logger:t.collector.logger,consent:a},s=b(e)?e:[e];for(const e of s){const o=await k(D,n=>{if(n instanceof A)throw n;t.collector&&t.collector.status.failed++,c.logger.error("mapping processing failed",{event:i,error:n})})(n,e,{...c,mapping:e});if(j(o))return o}}async function D(n,e,t){return(b(e)?e:[e]).reduce(async(e,o)=>{const r=await e;if(r)return r;const a=_(o)?{key:o}:o;if(!Object.keys(a).length)return;const{condition:i,consent:c,fn:s,key:u,loop:l,map:d,set:f,validate:g,value:m}=a,w={...t,mapping:o};if(i&&!await k(i,n=>{if(n instanceof A)throw n;return w.logger.error("mapping condition failed",{event:w.event,error:n}),!1})(n,w))return;if(c&&!function(n,e={},t={}){const o={...e,...t},r={};let a=!n||0===Object.keys(n).length;return Object.keys(o).forEach(e=>{o[e]&&(r[e]=!0,n&&n[e]&&(a=!0))}),!!a&&r}(c,w.consent))return m;let v=j(m)?m:n;if(s&&(v=await k(s,n=>{if(n instanceof A)throw n;w.logger.error("mapping fn failed",{event:w.event,error:n})})(n,w)),u&&(v=I(n,u,m)),l){const[e,t]=l,o="this"===e?[n]:await S(n,e,w);b(o)&&(v=(await Promise.all(o.map(n=>S(n,t,w)))).filter(j))}else d?v=await Object.entries(d).reduce(async(e,[t,o])=>{const r=await e,a=await S(n,o,w);return j(a)&&(r[t]=a),r},Promise.resolve({})):f&&(v=await Promise.all(f.map(e=>D(n,e,w))));g&&!await k(g,n=>{if(n instanceof A)throw n;return w.logger.error("mapping validate failed",{event:w.event,error:n}),!1})(v,w)&&(v=void 0);const p=C(v);return j(p)?p:C(m)},Promise.resolve(void 0))}function P(n){return{window:"undefined"!=typeof window?window:globalThis.window,document:"undefined"!=typeof document?document:globalThis.document,...n}}async function R(n,e,t,o,r){const a=O(e)?e:{},i=t.data?await S(n,t.data,{collector:r}):{},c=(null==o?void 0:o.data)?await S(n,o.data,{collector:r}):{},s=O(i)?i:{},u=O(c)?c:{};return h(h(a,s),u)}var $="dataLayer";function L(n,e,t,o){const{window:r,document:a}=P(t),{containerId:i,dataLayer:c,domain:s}=n,u=c||$,l=r[u],d=b(l)?l:[];r[u]=d,d.push({"gtm.start":(new Date).getTime(),event:"gtm.js"}),e&&i&&function(n,e,t,o=globalThis.document){const r=t!=$?"&l="+t:"",a=o.createElement("script");a.src=e+n+r,o.head.appendChild(a)}(i,s||"https://www.googletagmanager.com/gtm.js?id=",u,a)}var N={marketing:["ad_storage","ad_user_data","ad_personalization"],functional:["analytics_storage"]};function T(n){const{como:e=!0}=n;if(!1!==e)return!0===e?N:e}function x(n){const e=T(n);if(!e)return;const t=function(n){const e=new Set;return Object.values(n).forEach(n=>{(Array.isArray(n)?n:[n]).forEach(n=>e.add(n))}),[...e]}(e);if(!t.length)return;const o={};t.forEach(n=>o[n]="denied");const{como_advanced:r}=n;return r&&(o.wait_for_update="number"==typeof r?r:500),o}var G={},U=!1;function F(){U=!1}function q(n,e){const t=n.settings||{};if(U)return;if(!function(n,e){return!!(n&&Object.keys(n).length>0)||!!e.como_advanced}(n.consent,t))return;const o=x(t);if(!o)return;const{window:r}=P(e),a=c(r);a&&(a("consent","default",o),U=!0)}var B,M={type:"google-gtag",config:{settings:{}},init({config:n,env:e,logger:t}){const{settings:o={},loadScript:r}=n,{ga4:a,ads:s,gtm:u}=o;return(null==a?void 0:a.measurementId)||(null==s?void 0:s.conversionId)||(null==u?void 0:u.containerId)||t.throw("Config settings missing. Set ga4.measurementId, ads.conversionId, or gtm.containerId"),q(n,e),(null==a?void 0:a.measurementId)&&function(n,e,t,o){const{window:r,document:a}=P(t),{measurementId:s,transport_url:u,server_container_url:l,pageview:d}=n;s||o.throw("Config settings ga4.measurementId missing"),e&&i(s,void 0,a),c(r);const f={};u&&(f.transport_url=u),l&&(f.server_container_url=l),!1===d&&(f.send_page_view=!1);const g=r.gtag;g("js",new Date),g("config",s,f)}(a,r,e,t),(null==s?void 0:s.conversionId)&&function(n,e,t,o){const{window:r,document:a}=P(t),{conversionId:s}=n;s||o.throw("Config settings ads.conversionId missing"),n.currency||(n.currency="EUR"),e&&i(s,void 0,a),c(r);const u=r.gtag;u("js",new Date),n.enhancedConversions?u("config",s,{allow_enhanced_conversions:!0}):u("config",s)}(s,r,e,t),(null==u?void 0:u.containerId)&&L(u,r,e),n},async push(n,{config:e,rule:t={},data:o,env:r,collector:a,logger:i}){const{settings:c={}}=e,{ga4:s,ads:u,gtm:l}=c,d=t.settings||{},f=await R(n,o,e,s,a),g=await R(n,o,e,u,a),m=await R(n,o,e,l,a);let w;(null==s?void 0:s.measurementId)&&function(n,e,t,o,r){const{window:a}=P(o);e.measurementId||r.throw("Config settings ga4.measurementId missing");const i=O(t)?{...t}:{};let c=n.name;!1!==e.snakeCase&&(c=function(n,e=!0){return e?n.replace(/\s+/g,"_").toLowerCase():n}(c)),i.send_to=e.measurementId,e.debug&&(i.debug_mode=!0),(0,a.gtag)("event",c,i)}(n,s,f,r,i),(null==u?void 0:u.conversionId)&&(null==u?void 0:u.enhancedConversions)&&(w=await async function(n,e,t){const o=e.enhancedConversions;if(!o)return;const r={};if(o.email){const e=await S(n,o.email,{collector:t});e&&(r.email=e)}if(o.phone_number){const e=await S(n,o.phone_number,{collector:t});e&&(r.phone_number=e)}if(o.address){const e={};for(const[r,a]of Object.entries(o.address))if(a){const o=await S(n,a,{collector:t});o&&(e[r]=o)}Object.keys(e).length>0&&(r.address=e)}return Object.keys(r).length>0?r:void 0}(n,u,a)),(null==u?void 0:u.conversionId)&&t.name&&function(n,e,t={},o,r,a,i,c){const{conversionId:s,currency:u}=e,l=O(o)?o:{},d=t.label||r;d||i.throw("Config mapping ads.label missing");const f={send_to:`${s}/${d}`,currency:u||"EUR",...l},{window:g}=P(a),m=g.gtag;c&&m("set","user_data",c),m("event","conversion",f)}(0,u,d.ads,g,t.name,r,i,w),(null==l?void 0:l.containerId)&&function(n,e,t={},o,r){const{window:a}=P(r),i={event:n.name},c=e.dataLayer||$,s=a[c],u=b(s)?s:[];a[c]=u,u.push({...i,...O(o)?o:n})}(n,l,d.gtm,m,r)},on(n,e){var t;if("consent"!==n||!O(e.data))return;const o=e.data,r=(null==(t=e.config)?void 0:t.settings)||{},a=T(r);if(!a)return;const{window:i}=P(e.env),c=i.gtag;if(!c)return;if(!U){const n=x(r);n&&c("consent","default",n),U=!0}const s={};Object.entries(o).forEach(([n,e])=>{const t=a[n];if(!t)return;const o=Array.isArray(t)?t:[t],r=e?"granted":"denied";o.forEach(n=>{s[n]=r})}),0!==Object.keys(s).length&&c("consent","update",s)}},V=M;return B=r,((r,a,i,c)=>{if(a&&"object"==typeof a||"function"==typeof a)for(let s of t(a))o.call(r,s)||s===i||n(r,s,{get:()=>a[s],enumerable:!(c=e(a,s))||c.enumerable});return r})(n({},"__esModule",{value:!0}),B)})();
|
package/dist/index.d.mts
CHANGED