@walkeros/web-destination-pinterest 4.0.0-next-1777463920154 → 4.0.0

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.
@@ -1 +1 @@
1
- "use strict";var Destination=(()=>{var t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,e=Object.getOwnPropertyNames,r=Object.prototype.hasOwnProperty,o={};((n,e)=>{for(var r in e)t(n,r,{get:e[r],enumerable:!0})})(o,{DestinationPinterest:()=>g,default:()=>h,destinationPinterest:()=>j});var i=Object.defineProperty;((t,n)=>{for(var e in n)i(t,e,{get:n[e],enumerable:!0})})({},{Level:()=>a});var c,a=((c=a||{})[c.ERROR=0]="ERROR",c[c.WARN=1]="WARN",c[c.INFO=2]="INFO",c[c.DEBUG=3]="DEBUG",c);function s(t){return Array.isArray(t)}function u(t){return void 0!==t}function l(t){return"object"==typeof t&&null!==t&&!s(t)&&"[object Object]"===Object.prototype.toString.call(t)}function f(t){return"string"==typeof t}function d(t,n="",e){const r=n.split(".");let o=t;for(let t=0;t<r.length;t++){const n=r[t];if("*"===n&&s(o)){const n=r.slice(t+1).join("."),i=[];for(const t of o){const r=d(t,n,e);i.push(r)}return i}if(o=o instanceof Object?o[n]:void 0,void 0===o)break}return u(o)?o:e}function y(t){return function(t){return"boolean"==typeof t}(t)||f(t)||function(t){return"number"==typeof t&&!Number.isNaN(t)}(t)||!u(t)||s(t)&&t.every(y)||l(t)&&Object.values(t).every(y)}function p(t){return y(t)?t:void 0}function v(t,n,e){return async function(...r){try{return await t(...r)}catch(t){if(!n)return;return await n(t)}finally{await(null==e?void 0:e())}}}async function w(t,n={},e={}){var r;if(!u(t))return;const o=l(t)&&t.consent||e.consent||(null==(r=e.collector)?void 0:r.consent),i=s(n)?n:[n];for(const n of i){const r=await v(m)(t,n,{...e,consent:o});if(u(r))return r}}async function m(t,n,e={}){const{collector:r,consent:o}=e;return(s(n)?n:[n]).reduce(async(n,i)=>{const c=await n;if(c)return c;const a=f(i)?{key:i}:i;if(!Object.keys(a).length)return;const{condition:l,consent:y,fn:b,key:g,loop:O,map:j,set:h,validate:k,value:_}=a;if(l&&!await v(l)(t,i,r))return;if(y&&!function(t,n={},e={}){const r={...n,...e},o={};let i=!t||0===Object.keys(t).length;return Object.keys(r).forEach(n=>{r[n]&&(o[n]=!0,t&&t[n]&&(i=!0))}),!!i&&o}(y,o))return _;let P=u(_)?_:t;if(b&&(P=await v(b)(t,i,e)),g&&(P=d(t,g,_)),O){const[n,r]=O,o="this"===n?[t]:await w(t,n,e);s(o)&&(P=(await Promise.all(o.map(t=>w(t,r,e)))).filter(u))}else j?P=await Object.entries(j).reduce(async(n,[r,o])=>{const i=await n,c=await w(t,o,e);return u(c)&&(i[r]=c),i},Promise.resolve({})):h&&(P=await Promise.all(h.map(n=>m(t,n,e))));k&&!await v(k)(P)&&(P=void 0);const G=p(P);return u(G)?G:p(_)},Promise.resolve(void 0))}function b(t){return{window:"undefined"!=typeof window?window:globalThis.window,document:"undefined"!=typeof document?document:globalThis.document,...t}}var g={};var O,j={type:"pinterest",config:{},init({config:t,env:n}){const e=t.settings;if(!(null==e?void 0:e.apiKey))return!1;const r=!1!==e.pageview;!function(t){const{window:n}=b(t),e=n;if(e.pintrk)return;const r=(...t)=>{e.pintrk.queue.push(t)};r.queue=[],r.version="3.0",e.pintrk=r}(n),!1!==t.loadScript&&function(t){const{document:n}=b(t),e=n,r=e.createElement("script");r.src="https://s.pinimg.com/ct/core.js",r.async=!0,e.head.appendChild(r)}(n);const{window:o}=b(n),i=o.pintrk;return i("load",e.apiKey),r&&i("page"),e._state={lastIdentify:void 0,consentGranted:!0},t},async push(t,{config:n,rule:e,data:r,env:o}){var i,c;const a=n.settings||{},s=a._state||(a._state={consentGranted:!0});if(!1===s.consentGranted)return;const{window:u}=b(o),d=u.pintrk;if(!d)return;const y=null!=(c=null==(i=null==e?void 0:e.settings)?void 0:i.identify)?c:a.identify,p=await async function(t,n){if(null==n)return;const e=await w(t,n);if(!l(e))return;const r={},o=e.em,i=e.external_id;return f(o)&&o&&(r.em=o),f(i)&&i&&(r.external_id=i),Object.keys(r).length>0?r:void 0}(t,y);var v,m;if(!p||(v=p,m=s.lastIdentify,!v&&!m||v&&m&&v.em===m.em&&v.external_id===m.external_id)||(d("set",p),s.lastIdentify=p),!0===(null==e?void 0:e.silent))return;const g=f(null==e?void 0:e.name)?e.name:t.name,O=l(r)?r:{};d("track",g,{...t.id?{event_id:t.id}:{},...O})},on(t,n){var e,r;if("consent"!==t||!n.data)return;const o=null==(e=n.config)?void 0:e.settings;if(!o)return;const i=n.data,c=null==(r=n.config)?void 0:r.consent;if(!c)return;const a=Object.keys(c);if(0===a.length)return;let s=!1,u=!0;for(const t of a)!0!==i[t]&&(!1===i[t]?(s=!0,u=!1):u=!1);const l=o._state||(o._state={consentGranted:!0});s?l.consentGranted=!1:u&&(l.consentGranted=!0)}},h=j;return O=o,((o,i,c,a)=>{if(i&&"object"==typeof i||"function"==typeof i)for(let s of e(i))r.call(o,s)||s===c||t(o,s,{get:()=>i[s],enumerable:!(a=n(i,s))||a.enumerable});return o})(t({},"__esModule",{value:!0}),O)})();
1
+ "use strict";var Destination=(()=>{var t=Object.defineProperty,e=Object.getOwnPropertyDescriptor,n=Object.getOwnPropertyNames,r=Object.prototype.hasOwnProperty,o={};((e,n)=>{for(var r in n)t(e,r,{get:n[r],enumerable:!0})})(o,{DestinationPinterest:()=>b,default:()=>h,destinationPinterest:()=>j});var i=Object.defineProperty;((t,e)=>{for(var n in e)i(t,n,{get:e[n],enumerable:!0})})({},{Level:()=>a});var c,a=((c=a||{})[c.ERROR=0]="ERROR",c[c.WARN=1]="WARN",c[c.INFO=2]="INFO",c[c.DEBUG=3]="DEBUG",c);function s(t){return Array.isArray(t)}function u(t){return void 0!==t}function l(t){return"object"==typeof t&&null!==t&&!s(t)&&"[object Object]"===Object.prototype.toString.call(t)}function f(t){return"string"==typeof t}function d(t,e="",n){const r=e.split(".");let o=t;for(let t=0;t<r.length;t++){const e=r[t];if("*"===e&&s(o)){const e=r.slice(t+1).join("."),i=[];for(const t of o){const r=d(t,e,n);i.push(r)}return i}if(o=o instanceof Object?o[e]:void 0,void 0===o)break}return u(o)?o:n}function p(t){return function(t){return"boolean"==typeof t}(t)||f(t)||function(t){return"number"==typeof t&&!Number.isNaN(t)}(t)||!u(t)||s(t)&&t.every(p)||l(t)&&Object.values(t).every(p)}function v(t){return p(t)?t:void 0}function y(t,e,n){return async function(...r){try{return await t(...r)}catch(t){if(!e)return;return await e(t)}finally{await(null==n?void 0:n())}}}async function w(t,e={},n={}){var r,o;if(!u(t))return;const i=l(t)&&t.consent||n.consent||(null==(r=n.collector)?void 0:r.consent),c=null!=(o=n.event)?o:l(t)?t:{};if(!n.collector)throw new Error("getMappingValue: context.collector is required");const a={event:c,mapping:e,collector:n.collector,logger:n.collector.logger,consent:i},f=s(e)?e:[e];for(const e of f){const n=await y(g)(t,e,{...a,mapping:e});if(u(n))return n}}async function g(t,e,n){return(s(e)?e:[e]).reduce(async(e,r)=>{const o=await e;if(o)return o;const i=f(r)?{key:r}:r;if(!Object.keys(i).length)return;const{condition:c,consent:a,fn:l,key:p,loop:m,map:b,set:O,validate:j,value:h}=i,k={...n,mapping:r};if(c&&!await y(c)(t,k))return;if(a&&!function(t,e={},n={}){const r={...e,...n},o={};let i=!t||0===Object.keys(t).length;return Object.keys(r).forEach(e=>{r[e]&&(o[e]=!0,t&&t[e]&&(i=!0))}),!!i&&o}(a,k.consent))return h;let _=u(h)?h:t;if(l&&(_=await y(l)(t,k)),p&&(_=d(t,p,h)),m){const[e,n]=m,r="this"===e?[t]:await w(t,e,k);s(r)&&(_=(await Promise.all(r.map(t=>w(t,n,k)))).filter(u))}else b?_=await Object.entries(b).reduce(async(e,[n,r])=>{const o=await e,i=await w(t,r,k);return u(i)&&(o[n]=i),o},Promise.resolve({})):O&&(_=await Promise.all(O.map(e=>g(t,e,k))));j&&!await y(j)(_,k)&&(_=void 0);const P=v(_);return u(P)?P:v(h)},Promise.resolve(void 0))}function m(t){return{window:"undefined"!=typeof window?window:globalThis.window,document:"undefined"!=typeof document?document:globalThis.document,...t}}var b={};var O,j={type:"pinterest",config:{},init({config:t,env:e}){const n=t.settings;if(!(null==n?void 0:n.apiKey))return!1;const r=!1!==n.pageview;!function(t){const{window:e}=m(t),n=e;if(n.pintrk)return;const r=(...t)=>{n.pintrk.queue.push(t)};r.queue=[],r.version="3.0",n.pintrk=r}(e),!1!==t.loadScript&&function(t){const{document:e}=m(t),n=e,r=n.createElement("script");r.src="https://s.pinimg.com/ct/core.js",r.async=!0,n.head.appendChild(r)}(e);const{window:o}=m(e),i=o.pintrk;return i("load",n.apiKey),r&&i("page"),n._state={lastIdentify:void 0,consentGranted:!0},t},async push(t,{config:e,rule:n,data:r,env:o,collector:i}){var c,a;const s=e.settings||{},u=s._state||(s._state={consentGranted:!0});if(!1===u.consentGranted)return;const{window:d}=m(o),p=d.pintrk;if(!p)return;const v=null!=(a=null==(c=null==n?void 0:n.settings)?void 0:c.identify)?a:s.identify,y=await async function(t,e,n){if(null==e)return;const r=await w(t,e,{collector:n});if(!l(r))return;const o={},i=r.em,c=r.external_id;return f(i)&&i&&(o.em=i),f(c)&&c&&(o.external_id=c),Object.keys(o).length>0?o:void 0}(t,v,i);var g,b;if(!y||(g=y,b=u.lastIdentify,!g&&!b||g&&b&&g.em===b.em&&g.external_id===b.external_id)||(p("set",y),u.lastIdentify=y),!0===(null==n?void 0:n.silent))return;const O=f(null==n?void 0:n.name)?n.name:t.name,j=l(r)?r:{};p("track",O,{...t.id?{event_id:t.id}:{},...j})},on(t,e){var n,r;if("consent"!==t||!e.data)return;const o=null==(n=e.config)?void 0:n.settings;if(!o)return;const i=e.data,c=null==(r=e.config)?void 0:r.consent;if(!c)return;const a=Object.keys(c);if(0===a.length)return;let s=!1,u=!0;for(const t of a)!0!==i[t]&&(!1===i[t]?(s=!0,u=!1):u=!1);const l=o._state||(o._state={consentGranted:!0});s?l.consentGranted=!1:u&&(l.consentGranted=!0)}},h=j;return O=o,((o,i,c,a)=>{if(i&&"object"==typeof i||"function"==typeof i)for(let s of n(i))r.call(o,s)||s===c||t(o,s,{get:()=>i[s],enumerable:!(a=e(i,s))||a.enumerable});return o})(t({},"__esModule",{value:!0}),O)})();
package/dist/index.es5.js CHANGED
@@ -1 +1 @@
1
- "use strict";function _array_like_to_array(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function _array_with_holes(e){if(Array.isArray(e))return e}function _array_without_holes(e){if(Array.isArray(e))return _array_like_to_array(e)}function asyncGeneratorStep(e,t,r,n,o,a,i){try{var u=e[a](i),c=u.value}catch(e){return void r(e)}u.done?t(c):Promise.resolve(c).then(n,o)}function _async_to_generator(e){return function(){var t=this,r=arguments;return new Promise(function(n,o){var a=e.apply(t,r);function i(e){asyncGeneratorStep(a,n,o,i,u,"next",e)}function u(e){asyncGeneratorStep(a,n,o,i,u,"throw",e)}i(void 0)})}}function _define_property(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function _instanceof(e,t){return null!=t&&"undefined"!=typeof Symbol&&t[Symbol.hasInstance]?!!t[Symbol.hasInstance](e):e instanceof t}function _iterable_to_array(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}function _iterable_to_array_limit(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,o,a=[],i=!0,u=!1;try{for(r=r.call(e);!(i=(n=r.next()).done)&&(a.push(n.value),!t||a.length!==t);i=!0);}catch(e){u=!0,o=e}finally{try{i||null==r.return||r.return()}finally{if(u)throw o}}return a}}function _non_iterable_rest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _non_iterable_spread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _object_spread(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){_define_property(e,t,r[t])})}return e}function ownKeys(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function _object_spread_props(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}),e}function _sliced_to_array(e,t){return _array_with_holes(e)||_iterable_to_array_limit(e,t)||_unsupported_iterable_to_array(e,t)||_non_iterable_rest()}function _to_consumable_array(e){return _array_without_holes(e)||_iterable_to_array(e)||_unsupported_iterable_to_array(e)||_non_iterable_spread()}function _type_of(e){return e&&"undefined"!=typeof Symbol&&e.constructor===Symbol?"symbol":typeof e}function _unsupported_iterable_to_array(e,t){if(e){if("string"==typeof e)return _array_like_to_array(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(r):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?_array_like_to_array(e,t):void 0}}function _ts_generator(e,t){var r,n,o,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},i=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),u=Object.defineProperty;return u(i,"next",{value:c(0)}),u(i,"throw",{value:c(1)}),u(i,"return",{value:c(2)}),"function"==typeof Symbol&&u(i,Symbol.iterator,{value:function(){return this}}),i;function c(u){return function(c){return function(u){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,u[0]&&(a=0)),a;)try{if(r=1,n&&(o=2&u[0]?n.return:u[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,u[1])).done)return o;switch(n=0,o&&(u=[2&u[0],o.value]),u[0]){case 0:case 1:o=u;break;case 4:return a.label++,{value:u[1],done:!1};case 5:a.label++,n=u[1],u=[0];continue;case 7:u=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==u[0]&&2!==u[0])){a=0;continue}if(3===u[0]&&(!o||u[1]>o[0]&&u[1]<o[3])){a.label=u[1];break}if(6===u[0]&&a.label<o[1]){a.label=o[1],o=u;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(u);break}o[2]&&a.ops.pop(),a.trys.pop();continue}u=t.call(e,a)}catch(e){u=[6,e],n=0}finally{r=o=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}([u,c])}}}var Destination=function(){var e=function(e){return Array.isArray(e)},t=function(e){return void 0!==e},r=function(t){return"object"==(void 0===t?"undefined":_type_of(t))&&null!==t&&!e(t)&&"[object Object]"===Object.prototype.toString.call(t)},n=function(e){return"string"==typeof e},o=function(e){return h(e)?e:void 0},a=function(e,t,r){return function(){for(var n=arguments.length,o=new Array(n),a=0;a<n;a++)o[a]=arguments[a];return _async_to_generator(function(){var n;return _ts_generator(this,function(a){switch(a.label){case 0:return a.trys.push([0,2,4,6]),[4,e.apply(void 0,_to_consumable_array(o))];case 1:case 3:return[2,a.sent()];case 2:return n=a.sent(),t?[4,t(n)]:[2];case 4:return[4,null==r?void 0:r()];case 5:return a.sent(),[7];case 6:return[2]}})})()}},i=function(n){return _async_to_generator(function(n){var o,i,u,c,l,s,f,y,_,d,p,b,v,h=arguments;return _ts_generator(this,function(m){switch(m.label){case 0:if(o=h.length>1&&void 0!==h[1]?h[1]:{},i=h.length>2&&void 0!==h[2]?h[2]:{},!t(n))return[2];c=r(n)&&n.consent||i.consent||(null===(u=i.collector)||void 0===u?void 0:u.consent),l=e(o)?o:[o],s=!0,f=!1,y=void 0,m.label=1;case 1:m.trys.push([1,6,7,8]),_=l[Symbol.iterator](),m.label=2;case 2:return(s=(d=_.next()).done)?[3,5]:(p=d.value,[4,a(g)(n,p,_object_spread_props(_object_spread({},i),{consent:c}))]);case 3:if(b=m.sent(),t(b))return[2,b];m.label=4;case 4:return s=!0,[3,2];case 5:return[3,8];case 6:return v=m.sent(),f=!0,y=v,[3,8];case 7:try{s||null==_.return||_.return()}finally{if(f)throw y}return[7];case 8:return[2]}})}).apply(this,arguments)},u=function(e){return _object_spread({window:"undefined"!=typeof window?window:globalThis.window,document:"undefined"!=typeof document?document:globalThis.document},e)},c=function(e,t){return _async_to_generator(function(){var o,a,u,c;return _ts_generator(this,function(l){switch(l.label){case 0:return null==t?[2,void 0]:[4,i(e,t)];case 1:return o=l.sent(),r(o)?(a={},u=o.em,c=o.external_id,n(u)&&u&&(a.em=u),n(c)&&c&&(a.external_id=c),[2,Object.keys(a).length>0?a:void 0]):[2,void 0]}})})()},l=Object.defineProperty,s=Object.getOwnPropertyDescriptor,f=Object.getOwnPropertyNames,y=Object.prototype.hasOwnProperty,_={};!function(e,t){for(var r in t)l(e,r,{get:t[r],enumerable:!0})}(_,{DestinationPinterest:function(){return w},default:function(){return S},destinationPinterest:function(){return j}});var d=Object.defineProperty;!function(e,t){for(var r in t)d(e,r,{get:t[r],enumerable:!0})}({},{Level:function(){return b}});var p,b=((p=b||{})[p.ERROR=0]="ERROR",p[p.WARN=1]="WARN",p[p.INFO=2]="INFO",p[p.DEBUG=3]="DEBUG",p);function v(r){for(var n=arguments.length>2?arguments[2]:void 0,o=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:"").split("."),a=r,i=0;i<o.length;i++){var u=o[i];if("*"===u&&e(a)){var c=o.slice(i+1).join("."),l=[],s=!0,f=!1,y=void 0;try{for(var _,d=a[Symbol.iterator]();!(s=(_=d.next()).done);s=!0){var p=v(_.value,c,n);l.push(p)}}catch(e){f=!0,y=e}finally{try{s||null==d.return||d.return()}finally{if(f)throw y}}return l}if(void 0===(a=_instanceof(a,Object)?a[u]:void 0))break}return t(a)?a:n}function h(o){return function(e){return"boolean"==typeof e}(o)||n(o)||function(e){return"number"==typeof e&&!Number.isNaN(e)}(o)||!t(o)||e(o)&&o.every(h)||r(o)&&Object.values(o).every(h)}function g(r,u){return _async_to_generator(function(r,u){var c,l,s,f=arguments;return _ts_generator(this,function(y){return l=(c=f.length>2&&void 0!==f[2]?f[2]:{}).collector,s=c.consent,[2,(e(u)?u:[u]).reduce(function(u,f){return _async_to_generator(function(){var y,_,d,p,b,h,m,w,O,j,S,P,k,A,I,x,G,E,D,N,R;return _ts_generator(this,function(T){switch(T.label){case 0:return[4,u];case 1:return(y=T.sent())?[2,y]:(_=n(f)?{key:f}:f,Object.keys(_).length?(d=_.condition,p=_.consent,b=_.fn,h=_.key,m=_.loop,w=_.map,O=_.set,j=_.validate,S=_.value,(P=d)?[4,a(d)(r,f,l)]:[3,3]):[2]);case 2:P=!T.sent(),T.label=3;case 3:return P?[2]:p&&!function(e){var t=_object_spread({},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}),r={},n=!e||0===Object.keys(e).length;return Object.keys(t).forEach(function(o){t[o]&&(r[o]=!0,e&&e[o]&&(n=!0))}),!!n&&r}(p,s)?[2,S]:(k=t(S)?S:r,b?[4,a(b)(r,f,c)]:[3,5]);case 4:k=T.sent(),T.label=5;case 5:return h&&(k=v(r,h,S)),m?(A=_sliced_to_array(m,2),I=A[0],x=A[1],"this"!==I?[3,6]:(E=[r],[3,8])):[3,11];case 6:return[4,i(r,I,c)];case 7:E=T.sent(),T.label=8;case 8:return e(G=E)?[4,Promise.all(G.map(function(e){return i(e,x,c)}))]:[3,10];case 9:k=T.sent().filter(t),T.label=10;case 10:return[3,17];case 11:return w?[4,Object.entries(w).reduce(function(e,n){var o=_sliced_to_array(n,2),a=o[0],u=o[1];return _async_to_generator(function(){var n,o;return _ts_generator(this,function(l){switch(l.label){case 0:return[4,e];case 1:return n=l.sent(),[4,i(r,u,c)];case 2:return o=l.sent(),[2,(t(o)&&(n[a]=o),n)]}})})()},Promise.resolve({}))]:[3,13];case 12:return k=T.sent(),[3,16];case 13:return(D=O)?[4,Promise.all(O.map(function(e){return g(r,e,c)}))]:[3,15];case 14:D=k=T.sent(),T.label=15;case 15:T.label=16;case 16:T.label=17;case 17:return(N=j)?[4,a(j)(k)]:[3,19];case 18:N=!T.sent(),T.label=19;case 19:return N&&(k=void 0),R=o(k),[2,t(R)?R:o(S)]}})})()},Promise.resolve(void 0))]})}).apply(this,arguments)}var m,w={},O="https://s.pinimg.com/ct/core.js",j={type:"pinterest",config:{},init:function(e){var t=e.config,r=e.env,n=t.settings;if(!(null==n?void 0:n.apiKey))return!1;var o=!1!==n.pageview;!function(e){var t=u(e).window;if(!t.pintrk){var r=function(){for(var e=arguments.length,r=new Array(e),n=0;n<e;n++)r[n]=arguments[n];t.pintrk.queue.push(r)};r.queue=[],r.version="3.0",t.pintrk=r}}(r),!1!==t.loadScript&&function(e){var t=u(e).document,r=t.createElement("script");r.src=O,r.async=!0,t.head.appendChild(r)}(r);var a=u(r).window.pintrk;return a("load",n.apiKey),o&&a("page"),n._state={lastIdentify:void 0,consentGranted:!0},t},push:function(e,t){return _async_to_generator(function(e,t){var o,a,i,l,s,f,y,_,d,p,b,v,h,g,m,w;return _ts_generator(this,function(O){switch(O.label){case 0:return o=t.config,a=t.rule,i=t.data,l=t.env,y=o.settings||{},!1===(_=y._state||(y._state={consentGranted:!0})).consentGranted?[2]:(d=u(l),p=d.window,(b=p.pintrk)?(v=null!==(s=null==a||null===(f=a.settings)||void 0===f?void 0:f.identify)&&void 0!==s?s:y.identify,[4,c(e,v)]):[2]);case 1:return!(h=O.sent())||(j=h,S=_.lastIdentify,!j&&!S||j&&S&&j.em===S.em&&j.external_id===S.external_id)||(b("set",h),_.lastIdentify=h),!0===(null==a?void 0:a.silent)?[2]:(g=n(null==a?void 0:a.name)?a.name:e.name,m=r(i)?i:{},w=_object_spread({},e.id?{event_id:e.id}:{},m),b("track",g,w),[2])}var j,S})}).apply(this,arguments)},on:function(e,t){var r,n;if("consent"===e&&t.data){var o=null===(r=t.config)||void 0===r?void 0:r.settings;if(o){var a=t.data,i=null===(n=t.config)||void 0===n?void 0:n.consent;if(i){var u=Object.keys(i);if(0!==u.length){var c=!1,l=!0,s=!0,f=!1,y=void 0;try{for(var _,d=u[Symbol.iterator]();!(s=(_=d.next()).done);s=!0){var p=_.value;!0!==a[p]&&(!1===a[p]?(c=!0,l=!1):l=!1)}}catch(e){f=!0,y=e}finally{try{s||null==d.return||d.return()}finally{if(f)throw y}}var b=o._state||(o._state={consentGranted:!0});c?b.consentGranted=!1:l&&(b.consentGranted=!0)}}}}}},S=j;return m=_,function(e,t,r,n){if(t&&"object"===(void 0===t?"undefined":_type_of(t))||"function"==typeof t){var o=!0,a=!1,i=void 0;try{for(var u,c=function(){var o=u.value;y.call(e,o)||o===r||l(e,o,{get:function(){return t[o]},enumerable:!(n=s(t,o))||n.enumerable})},_=f(t)[Symbol.iterator]();!(o=(u=_.next()).done);o=!0)c()}catch(e){a=!0,i=e}finally{try{o||null==_.return||_.return()}finally{if(a)throw i}}}return e}(l({},"__esModule",{value:!0}),m)}();
1
+ "use strict";function _array_like_to_array(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function _array_with_holes(e){if(Array.isArray(e))return e}function _array_without_holes(e){if(Array.isArray(e))return _array_like_to_array(e)}function asyncGeneratorStep(e,t,r,n,o,a,i){try{var c=e[a](i),u=c.value}catch(e){return void r(e)}c.done?t(u):Promise.resolve(u).then(n,o)}function _async_to_generator(e){return function(){var t=this,r=arguments;return new Promise(function(n,o){var a=e.apply(t,r);function i(e){asyncGeneratorStep(a,n,o,i,c,"next",e)}function c(e){asyncGeneratorStep(a,n,o,i,c,"throw",e)}i(void 0)})}}function _define_property(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function _instanceof(e,t){return null!=t&&"undefined"!=typeof Symbol&&t[Symbol.hasInstance]?!!t[Symbol.hasInstance](e):e instanceof t}function _iterable_to_array(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}function _iterable_to_array_limit(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,o,a=[],i=!0,c=!1;try{for(r=r.call(e);!(i=(n=r.next()).done)&&(a.push(n.value),!t||a.length!==t);i=!0);}catch(e){c=!0,o=e}finally{try{i||null==r.return||r.return()}finally{if(c)throw o}}return a}}function _non_iterable_rest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _non_iterable_spread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _object_spread(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){_define_property(e,t,r[t])})}return e}function ownKeys(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function _object_spread_props(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}),e}function _sliced_to_array(e,t){return _array_with_holes(e)||_iterable_to_array_limit(e,t)||_unsupported_iterable_to_array(e,t)||_non_iterable_rest()}function _to_consumable_array(e){return _array_without_holes(e)||_iterable_to_array(e)||_unsupported_iterable_to_array(e)||_non_iterable_spread()}function _type_of(e){return e&&"undefined"!=typeof Symbol&&e.constructor===Symbol?"symbol":typeof e}function _unsupported_iterable_to_array(e,t){if(e){if("string"==typeof e)return _array_like_to_array(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(r):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?_array_like_to_array(e,t):void 0}}function _ts_generator(e,t){var r,n,o,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},i=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),c=Object.defineProperty;return c(i,"next",{value:u(0)}),c(i,"throw",{value:u(1)}),c(i,"return",{value:u(2)}),"function"==typeof Symbol&&c(i,Symbol.iterator,{value:function(){return this}}),i;function u(c){return function(u){return function(c){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,c[0]&&(a=0)),a;)try{if(r=1,n&&(o=2&c[0]?n.return:c[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,c[1])).done)return o;switch(n=0,o&&(c=[2&c[0],o.value]),c[0]){case 0:case 1:o=c;break;case 4:return a.label++,{value:c[1],done:!1};case 5:a.label++,n=c[1],c=[0];continue;case 7:c=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==c[0]&&2!==c[0])){a=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){a.label=c[1];break}if(6===c[0]&&a.label<o[1]){a.label=o[1],o=c;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(c);break}o[2]&&a.ops.pop(),a.trys.pop();continue}c=t.call(e,a)}catch(e){c=[6,e],n=0}finally{r=o=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}([c,u])}}}var Destination=function(){var e=function(e){return Array.isArray(e)},t=function(e){return void 0!==e},r=function(t){return"object"==(void 0===t?"undefined":_type_of(t))&&null!==t&&!e(t)&&"[object Object]"===Object.prototype.toString.call(t)},n=function(e){return"string"==typeof e},o=function(e){return h(e)?e:void 0},a=function(e,t,r){return function(){for(var n=arguments.length,o=new Array(n),a=0;a<n;a++)o[a]=arguments[a];return _async_to_generator(function(){var n;return _ts_generator(this,function(a){switch(a.label){case 0:return a.trys.push([0,2,4,6]),[4,e.apply(void 0,_to_consumable_array(o))];case 1:case 3:return[2,a.sent()];case 2:return n=a.sent(),t?[4,t(n)]:[2];case 4:return[4,null==r?void 0:r()];case 5:return a.sent(),[7];case 6:return[2]}})})()}},i=function(n){return _async_to_generator(function(n){var o,i,c,u,l,s,f,y,_,d,p,b,v,h,m,w,j=arguments;return _ts_generator(this,function(O){switch(O.label){case 0:if(o=j.length>1&&void 0!==j[1]?j[1]:{},i=j.length>2&&void 0!==j[2]?j[2]:{},!t(n))return[2];if(l=r(n)&&n.consent||i.consent||(null===(u=i.collector)||void 0===u?void 0:u.consent),s=null!==(c=i.event)&&void 0!==c?c:r(n)?n:{},!i.collector)throw new Error("getMappingValue: context.collector is required");f={event:s,mapping:o,collector:i.collector,logger:i.collector.logger,consent:l},y=e(o)?o:[o],_=!0,d=!1,p=void 0,O.label=1;case 1:O.trys.push([1,6,7,8]),b=y[Symbol.iterator](),O.label=2;case 2:return(_=(v=b.next()).done)?[3,5]:(h=v.value,[4,a(g)(n,h,_object_spread_props(_object_spread({},f),{mapping:h}))]);case 3:if(m=O.sent(),t(m))return[2,m];O.label=4;case 4:return _=!0,[3,2];case 5:return[3,8];case 6:return w=O.sent(),d=!0,p=w,[3,8];case 7:try{_||null==b.return||b.return()}finally{if(d)throw p}return[7];case 8:return[2]}})}).apply(this,arguments)},c=function(e){return _object_spread({window:"undefined"!=typeof window?window:globalThis.window,document:"undefined"!=typeof document?document:globalThis.document},e)},u=function(e,t,o){return _async_to_generator(function(){var a,c,u,l;return _ts_generator(this,function(s){switch(s.label){case 0:return null==t?[2,void 0]:[4,i(e,t,{collector:o})];case 1:return a=s.sent(),r(a)?(c={},u=a.em,l=a.external_id,n(u)&&u&&(c.em=u),n(l)&&l&&(c.external_id=l),[2,Object.keys(c).length>0?c:void 0]):[2,void 0]}})})()},l=Object.defineProperty,s=Object.getOwnPropertyDescriptor,f=Object.getOwnPropertyNames,y=Object.prototype.hasOwnProperty,_={};!function(e,t){for(var r in t)l(e,r,{get:t[r],enumerable:!0})}(_,{DestinationPinterest:function(){return w},default:function(){return S},destinationPinterest:function(){return O}});var d=Object.defineProperty;!function(e,t){for(var r in t)d(e,r,{get:t[r],enumerable:!0})}({},{Level:function(){return b}});var p,b=((p=b||{})[p.ERROR=0]="ERROR",p[p.WARN=1]="WARN",p[p.INFO=2]="INFO",p[p.DEBUG=3]="DEBUG",p);function v(r){for(var n=arguments.length>2?arguments[2]:void 0,o=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:"").split("."),a=r,i=0;i<o.length;i++){var c=o[i];if("*"===c&&e(a)){var u=o.slice(i+1).join("."),l=[],s=!0,f=!1,y=void 0;try{for(var _,d=a[Symbol.iterator]();!(s=(_=d.next()).done);s=!0){var p=v(_.value,u,n);l.push(p)}}catch(e){f=!0,y=e}finally{try{s||null==d.return||d.return()}finally{if(f)throw y}}return l}if(void 0===(a=_instanceof(a,Object)?a[c]:void 0))break}return t(a)?a:n}function h(o){return function(e){return"boolean"==typeof e}(o)||n(o)||function(e){return"number"==typeof e&&!Number.isNaN(e)}(o)||!t(o)||e(o)&&o.every(h)||r(o)&&Object.values(o).every(h)}function g(r,c,u){return _async_to_generator(function(){return _ts_generator(this,function(l){return[2,(e(c)?c:[c]).reduce(function(c,l){return _async_to_generator(function(){var s,f,y,_,d,p,b,h,m,w,j,O,S,P,k,A,x,I,E,G,D,N;return _ts_generator(this,function(R){switch(R.label){case 0:return[4,c];case 1:return(s=R.sent())?[2,s]:(f=n(l)?{key:l}:l,Object.keys(f).length?(y=f.condition,_=f.consent,d=f.fn,p=f.key,b=f.loop,h=f.map,m=f.set,w=f.validate,j=f.value,O=_object_spread_props(_object_spread({},u),{mapping:l}),(S=y)?[4,a(y)(r,O)]:[3,3]):[2]);case 2:S=!R.sent(),R.label=3;case 3:return S?[2]:_&&!function(e){var t=_object_spread({},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}),r={},n=!e||0===Object.keys(e).length;return Object.keys(t).forEach(function(o){t[o]&&(r[o]=!0,e&&e[o]&&(n=!0))}),!!n&&r}(_,O.consent)?[2,j]:(P=t(j)?j:r,d?[4,a(d)(r,O)]:[3,5]);case 4:P=R.sent(),R.label=5;case 5:return p&&(P=v(r,p,j)),b?(k=_sliced_to_array(b,2),A=k[0],x=k[1],"this"!==A?[3,6]:(E=[r],[3,8])):[3,11];case 6:return[4,i(r,A,O)];case 7:E=R.sent(),R.label=8;case 8:return e(I=E)?[4,Promise.all(I.map(function(e){return i(e,x,O)}))]:[3,10];case 9:P=R.sent().filter(t),R.label=10;case 10:return[3,17];case 11:return h?[4,Object.entries(h).reduce(function(e,n){var o=_sliced_to_array(n,2),a=o[0],c=o[1];return _async_to_generator(function(){var n,o;return _ts_generator(this,function(u){switch(u.label){case 0:return[4,e];case 1:return n=u.sent(),[4,i(r,c,O)];case 2:return o=u.sent(),[2,(t(o)&&(n[a]=o),n)]}})})()},Promise.resolve({}))]:[3,13];case 12:return P=R.sent(),[3,16];case 13:return(G=m)?[4,Promise.all(m.map(function(e){return g(r,e,O)}))]:[3,15];case 14:G=P=R.sent(),R.label=15;case 15:R.label=16;case 16:R.label=17;case 17:return(D=w)?[4,a(w)(P,O)]:[3,19];case 18:D=!R.sent(),R.label=19;case 19:return D&&(P=void 0),N=o(P),[2,t(N)?N:o(j)]}})})()},Promise.resolve(void 0))]})})()}var m,w={},j="https://s.pinimg.com/ct/core.js",O={type:"pinterest",config:{},init:function(e){var t=e.config,r=e.env,n=t.settings;if(!(null==n?void 0:n.apiKey))return!1;var o=!1!==n.pageview;!function(e){var t=c(e).window;if(!t.pintrk){var r=function(){for(var e=arguments.length,r=new Array(e),n=0;n<e;n++)r[n]=arguments[n];t.pintrk.queue.push(r)};r.queue=[],r.version="3.0",t.pintrk=r}}(r),!1!==t.loadScript&&function(e){var t=c(e).document,r=t.createElement("script");r.src=j,r.async=!0,t.head.appendChild(r)}(r);var a=c(r).window.pintrk;return a("load",n.apiKey),o&&a("page"),n._state={lastIdentify:void 0,consentGranted:!0},t},push:function(e,t){return _async_to_generator(function(e,t){var o,a,i,l,s,f,y,_,d,p,b,v,h,g,m,w,j;return _ts_generator(this,function(O){switch(O.label){case 0:return o=t.config,a=t.rule,i=t.data,l=t.env,s=t.collector,_=o.settings||{},!1===(d=_._state||(_._state={consentGranted:!0})).consentGranted?[2]:(p=c(l),b=p.window,(v=b.pintrk)?(h=null!==(f=null==a||null===(y=a.settings)||void 0===y?void 0:y.identify)&&void 0!==f?f:_.identify,[4,u(e,h,s)]):[2]);case 1:return!(g=O.sent())||(S=g,P=d.lastIdentify,!S&&!P||S&&P&&S.em===P.em&&S.external_id===P.external_id)||(v("set",g),d.lastIdentify=g),!0===(null==a?void 0:a.silent)?[2]:(m=n(null==a?void 0:a.name)?a.name:e.name,w=r(i)?i:{},j=_object_spread({},e.id?{event_id:e.id}:{},w),v("track",m,j),[2])}var S,P})}).apply(this,arguments)},on:function(e,t){var r,n;if("consent"===e&&t.data){var o=null===(r=t.config)||void 0===r?void 0:r.settings;if(o){var a=t.data,i=null===(n=t.config)||void 0===n?void 0:n.consent;if(i){var c=Object.keys(i);if(0!==c.length){var u=!1,l=!0,s=!0,f=!1,y=void 0;try{for(var _,d=c[Symbol.iterator]();!(s=(_=d.next()).done);s=!0){var p=_.value;!0!==a[p]&&(!1===a[p]?(u=!0,l=!1):l=!1)}}catch(e){f=!0,y=e}finally{try{s||null==d.return||d.return()}finally{if(f)throw y}}var b=o._state||(o._state={consentGranted:!0});u?b.consentGranted=!1:l&&(b.consentGranted=!0)}}}}}},S=O;return m=_,function(e,t,r,n){if(t&&"object"===(void 0===t?"undefined":_type_of(t))||"function"==typeof t){var o=!0,a=!1,i=void 0;try{for(var c,u=function(){var o=c.value;y.call(e,o)||o===r||l(e,o,{get:function(){return t[o]},enumerable:!(n=s(t,o))||n.enumerable})},_=f(t)[Symbol.iterator]();!(o=(c=_.next()).done);o=!0)u()}catch(e){a=!0,i=e}finally{try{o||null==_.return||_.return()}finally{if(a)throw i}}}return e}(l({},"__esModule",{value:!0}),m)}();
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var t,e=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,o=Object.prototype.hasOwnProperty,i={};((t,n)=>{for(var r in n)e(t,r,{get:n[r],enumerable:!0})})(i,{DestinationPinterest:()=>O,default:()=>h,destinationPinterest:()=>j}),module.exports=(t=i,((t,i,c,a)=>{if(i&&"object"==typeof i||"function"==typeof i)for(let s of r(i))o.call(t,s)||s===c||e(t,s,{get:()=>i[s],enumerable:!(a=n(i,s))||a.enumerable});return t})(e({},"__esModule",{value:!0}),t));var c=require("@walkeros/web-core"),a=Object.defineProperty;((t,e)=>{for(var n in e)a(t,n,{get:e[n],enumerable:!0})})({},{Level:()=>u});var s,u=((s=u||{})[s.ERROR=0]="ERROR",s[s.WARN=1]="WARN",s[s.INFO=2]="INFO",s[s.DEBUG=3]="DEBUG",s);function l(t){return Array.isArray(t)}function f(t){return void 0!==t}function d(t){return"object"==typeof t&&null!==t&&!l(t)&&"[object Object]"===Object.prototype.toString.call(t)}function v(t){return"string"==typeof t}function p(t,e="",n){const r=e.split(".");let o=t;for(let t=0;t<r.length;t++){const e=r[t];if("*"===e&&l(o)){const e=r.slice(t+1).join("."),i=[];for(const t of o){const r=p(t,e,n);i.push(r)}return i}if(o=o instanceof Object?o[e]:void 0,void 0===o)break}return f(o)?o:n}function y(t){return function(t){return"boolean"==typeof t}(t)||v(t)||function(t){return"number"==typeof t&&!Number.isNaN(t)}(t)||!f(t)||l(t)&&t.every(y)||d(t)&&Object.values(t).every(y)}function g(t){return y(t)?t:void 0}function w(t,e,n){return async function(...r){try{return await t(...r)}catch(t){if(!e)return;return await e(t)}finally{await(null==n?void 0:n())}}}async function b(t,e={},n={}){var r;if(!f(t))return;const o=d(t)&&t.consent||n.consent||(null==(r=n.collector)?void 0:r.consent),i=l(e)?e:[e];for(const e of i){const r=await w(m)(t,e,{...n,consent:o});if(f(r))return r}}async function m(t,e,n={}){const{collector:r,consent:o}=n;return(l(e)?e:[e]).reduce(async(e,i)=>{const c=await e;if(c)return c;const a=v(i)?{key:i}:i;if(!Object.keys(a).length)return;const{condition:s,consent:u,fn:d,key:y,loop:O,map:j,set:h,validate:k,value:_}=a;if(s&&!await w(s)(t,i,r))return;if(u&&!function(t,e={},n={}){const r={...e,...n},o={};let i=!t||0===Object.keys(t).length;return Object.keys(r).forEach(e=>{r[e]&&(o[e]=!0,t&&t[e]&&(i=!0))}),!!i&&o}(u,o))return _;let P=f(_)?_:t;if(d&&(P=await w(d)(t,i,n)),y&&(P=p(t,y,_)),O){const[e,r]=O,o="this"===e?[t]:await b(t,e,n);l(o)&&(P=(await Promise.all(o.map(t=>b(t,r,n)))).filter(f))}else j?P=await Object.entries(j).reduce(async(e,[r,o])=>{const i=await e,c=await b(t,o,n);return f(c)&&(i[r]=c),i},Promise.resolve({})):h&&(P=await Promise.all(h.map(e=>m(t,e,n))));k&&!await w(k)(P)&&(P=void 0);const E=g(P);return f(E)?E:g(_)},Promise.resolve(void 0))}var O={};var j={type:"pinterest",config:{},init({config:t,env:e}){const n=t.settings;if(!(null==n?void 0:n.apiKey))return!1;const r=!1!==n.pageview;!function(t){const{window:e}=(0,c.getEnv)(t),n=e;if(n.pintrk)return;const r=(...t)=>{n.pintrk.queue.push(t)};r.queue=[],r.version="3.0",n.pintrk=r}(e),!1!==t.loadScript&&function(t){const{document:e}=(0,c.getEnv)(t),n=e,r=n.createElement("script");r.src="https://s.pinimg.com/ct/core.js",r.async=!0,n.head.appendChild(r)}(e);const{window:o}=(0,c.getEnv)(e),i=o.pintrk;return i("load",n.apiKey),r&&i("page"),n._state={lastIdentify:void 0,consentGranted:!0},t},async push(t,{config:e,rule:n,data:r,env:o}){var i,a;const s=e.settings||{},u=s._state||(s._state={consentGranted:!0});if(!1===u.consentGranted)return;const{window:l}=(0,c.getEnv)(o),f=l.pintrk;if(!f)return;const p=null!=(a=null==(i=null==n?void 0:n.settings)?void 0:i.identify)?a:s.identify,y=await async function(t,e){if(null==e)return;const n=await b(t,e);if(!d(n))return;const r={},o=n.em,i=n.external_id;return v(o)&&o&&(r.em=o),v(i)&&i&&(r.external_id=i),Object.keys(r).length>0?r:void 0}(t,p);var g,w;if(!y||(g=y,w=u.lastIdentify,!g&&!w||g&&w&&g.em===w.em&&g.external_id===w.external_id)||(f("set",y),u.lastIdentify=y),!0===(null==n?void 0:n.silent))return;const m=v(null==n?void 0:n.name)?n.name:t.name,O=d(r)?r:{};f("track",m,{...t.id?{event_id:t.id}:{},...O})},on(t,e){var n,r;if("consent"!==t||!e.data)return;const o=null==(n=e.config)?void 0:n.settings;if(!o)return;const i=e.data,c=null==(r=e.config)?void 0:r.consent;if(!c)return;const a=Object.keys(c);if(0===a.length)return;let s=!1,u=!0;for(const t of a)!0!==i[t]&&(!1===i[t]?(s=!0,u=!1):u=!1);const l=o._state||(o._state={consentGranted:!0});s?l.consentGranted=!1:u&&(l.consentGranted=!0)}},h=j;//# sourceMappingURL=index.js.map
1
+ "use strict";var t,e=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,o=Object.prototype.hasOwnProperty,i={};((t,n)=>{for(var r in n)e(t,r,{get:n[r],enumerable:!0})})(i,{DestinationPinterest:()=>O,default:()=>h,destinationPinterest:()=>j}),module.exports=(t=i,((t,i,c,a)=>{if(i&&"object"==typeof i||"function"==typeof i)for(let s of r(i))o.call(t,s)||s===c||e(t,s,{get:()=>i[s],enumerable:!(a=n(i,s))||a.enumerable});return t})(e({},"__esModule",{value:!0}),t));var c=require("@walkeros/web-core"),a=Object.defineProperty;((t,e)=>{for(var n in e)a(t,n,{get:e[n],enumerable:!0})})({},{Level:()=>l});var s,l=((s=l||{})[s.ERROR=0]="ERROR",s[s.WARN=1]="WARN",s[s.INFO=2]="INFO",s[s.DEBUG=3]="DEBUG",s);function u(t){return Array.isArray(t)}function f(t){return void 0!==t}function d(t){return"object"==typeof t&&null!==t&&!u(t)&&"[object Object]"===Object.prototype.toString.call(t)}function p(t){return"string"==typeof t}function v(t,e="",n){const r=e.split(".");let o=t;for(let t=0;t<r.length;t++){const e=r[t];if("*"===e&&u(o)){const e=r.slice(t+1).join("."),i=[];for(const t of o){const r=v(t,e,n);i.push(r)}return i}if(o=o instanceof Object?o[e]:void 0,void 0===o)break}return f(o)?o:n}function y(t){return function(t){return"boolean"==typeof t}(t)||p(t)||function(t){return"number"==typeof t&&!Number.isNaN(t)}(t)||!f(t)||u(t)&&t.every(y)||d(t)&&Object.values(t).every(y)}function g(t){return y(t)?t:void 0}function w(t,e,n){return async function(...r){try{return await t(...r)}catch(t){if(!e)return;return await e(t)}finally{await(null==n?void 0:n())}}}async function m(t,e={},n={}){var r,o;if(!f(t))return;const i=d(t)&&t.consent||n.consent||(null==(r=n.collector)?void 0:r.consent),c=null!=(o=n.event)?o:d(t)?t:{};if(!n.collector)throw new Error("getMappingValue: context.collector is required");const a={event:c,mapping:e,collector:n.collector,logger:n.collector.logger,consent:i},s=u(e)?e:[e];for(const e of s){const n=await w(b)(t,e,{...a,mapping:e});if(f(n))return n}}async function b(t,e,n){return(u(e)?e:[e]).reduce(async(e,r)=>{const o=await e;if(o)return o;const i=p(r)?{key:r}:r;if(!Object.keys(i).length)return;const{condition:c,consent:a,fn:s,key:l,loop:d,map:y,set:O,validate:j,value:h}=i,k={...n,mapping:r};if(c&&!await w(c)(t,k))return;if(a&&!function(t,e={},n={}){const r={...e,...n},o={};let i=!t||0===Object.keys(t).length;return Object.keys(r).forEach(e=>{r[e]&&(o[e]=!0,t&&t[e]&&(i=!0))}),!!i&&o}(a,k.consent))return h;let _=f(h)?h:t;if(s&&(_=await w(s)(t,k)),l&&(_=v(t,l,h)),d){const[e,n]=d,r="this"===e?[t]:await m(t,e,k);u(r)&&(_=(await Promise.all(r.map(t=>m(t,n,k)))).filter(f))}else y?_=await Object.entries(y).reduce(async(e,[n,r])=>{const o=await e,i=await m(t,r,k);return f(i)&&(o[n]=i),o},Promise.resolve({})):O&&(_=await Promise.all(O.map(e=>b(t,e,k))));j&&!await w(j)(_,k)&&(_=void 0);const E=g(_);return f(E)?E:g(h)},Promise.resolve(void 0))}var O={};var j={type:"pinterest",config:{},init({config:t,env:e}){const n=t.settings;if(!(null==n?void 0:n.apiKey))return!1;const r=!1!==n.pageview;!function(t){const{window:e}=(0,c.getEnv)(t),n=e;if(n.pintrk)return;const r=(...t)=>{n.pintrk.queue.push(t)};r.queue=[],r.version="3.0",n.pintrk=r}(e),!1!==t.loadScript&&function(t){const{document:e}=(0,c.getEnv)(t),n=e,r=n.createElement("script");r.src="https://s.pinimg.com/ct/core.js",r.async=!0,n.head.appendChild(r)}(e);const{window:o}=(0,c.getEnv)(e),i=o.pintrk;return i("load",n.apiKey),r&&i("page"),n._state={lastIdentify:void 0,consentGranted:!0},t},async push(t,{config:e,rule:n,data:r,env:o,collector:i}){var a,s;const l=e.settings||{},u=l._state||(l._state={consentGranted:!0});if(!1===u.consentGranted)return;const{window:f}=(0,c.getEnv)(o),v=f.pintrk;if(!v)return;const y=null!=(s=null==(a=null==n?void 0:n.settings)?void 0:a.identify)?s:l.identify,g=await async function(t,e,n){if(null==e)return;const r=await m(t,e,{collector:n});if(!d(r))return;const o={},i=r.em,c=r.external_id;return p(i)&&i&&(o.em=i),p(c)&&c&&(o.external_id=c),Object.keys(o).length>0?o:void 0}(t,y,i);var w,b;if(!g||(w=g,b=u.lastIdentify,!w&&!b||w&&b&&w.em===b.em&&w.external_id===b.external_id)||(v("set",g),u.lastIdentify=g),!0===(null==n?void 0:n.silent))return;const O=p(null==n?void 0:n.name)?n.name:t.name,j=d(r)?r:{};v("track",O,{...t.id?{event_id:t.id}:{},...j})},on(t,e){var n,r;if("consent"!==t||!e.data)return;const o=null==(n=e.config)?void 0:n.settings;if(!o)return;const i=e.data,c=null==(r=e.config)?void 0:r.consent;if(!c)return;const a=Object.keys(c);if(0===a.length)return;let s=!1,l=!0;for(const t of a)!0!==i[t]&&(!1===i[t]?(s=!0,l=!1):l=!1);const u=o._state||(o._state={consentGranted:!0});s?u.consentGranted=!1:l&&(u.consentGranted=!0)}},h=j;//# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/types/index.ts"],"sourcesContent":["import type { DestinationWeb } from '@walkeros/web-core';\nimport { getEnv } from '@walkeros/web-core';\nimport { getMappingValue, isObject, isString } from '@walkeros/core';\nimport type { WalkerOS } from '@walkeros/core';\nimport type {\n Destination,\n EventData,\n IdentifyFields,\n Pintrk,\n Settings,\n} from './types';\n\n// Types export\nexport * as DestinationPinterest from './types';\n\nconst PINTEREST_SCRIPT_SRC = 'https://s.pinimg.com/ct/core.js';\n\n/**\n * Install the Pinterest `window.pintrk` queue shim. Mirrors the official\n * snippet - any call made before core.js loads is pushed onto `pintrk.queue`,\n * which the real script processes once it initializes. Idempotent.\n */\nfunction installPintrkQueue(env?: DestinationWeb.Env): void {\n const { window } = getEnv(env);\n const w = window as Window & { pintrk?: Pintrk };\n if (w.pintrk) return;\n const queue: unknown[][] = [];\n const fn = ((...args: unknown[]) => {\n (w.pintrk!.queue as unknown[][]).push(args);\n }) as unknown as Pintrk;\n fn.queue = queue;\n fn.version = '3.0';\n w.pintrk = fn;\n}\n\n/**\n * Insert the Pinterest core.js script tag. Async, non-blocking. Matches the\n * plausible/meta precedent.\n */\nfunction addScript(env?: DestinationWeb.Env): void {\n const { document } = getEnv(env);\n const doc = document as Document;\n const script = doc.createElement('script');\n script.src = PINTEREST_SCRIPT_SRC;\n script.async = true;\n doc.head.appendChild(script);\n}\n\n/**\n * Resolve an identify mapping value into IdentifyFields. Strict allow-list:\n * only `em` and `external_id` pass through.\n */\nasync function resolveIdentify(\n event: WalkerOS.Event,\n mappingValue: unknown,\n): Promise<IdentifyFields | undefined> {\n if (mappingValue === undefined || mappingValue === null) return undefined;\n const resolved = await getMappingValue(\n event,\n mappingValue as Parameters<typeof getMappingValue>[1],\n );\n if (!isObject(resolved)) return undefined;\n const fields: IdentifyFields = {};\n const em = (resolved as Record<string, unknown>).em;\n const external_id = (resolved as Record<string, unknown>).external_id;\n if (isString(em) && em) fields.em = em;\n if (isString(external_id) && external_id) fields.external_id = external_id;\n return Object.keys(fields).length > 0 ? fields : undefined;\n}\n\n/**\n * Shallow-equal compare two IdentifyFields - used to suppress redundant\n * pintrk('set', ...) calls when the resolved identity has not changed.\n */\nfunction identifyEqual(a?: IdentifyFields, b?: IdentifyFields): boolean {\n if (!a && !b) return true;\n if (!a || !b) return false;\n return a.em === b.em && a.external_id === b.external_id;\n}\n\nexport const destinationPinterest: Destination = {\n type: 'pinterest',\n\n config: {},\n\n init({ config, env }) {\n const settings = config.settings;\n if (!settings?.apiKey) return false;\n\n const pageview = settings.pageview !== false;\n\n installPintrkQueue(env);\n if (config.loadScript !== false) addScript(env);\n\n const { window } = getEnv(env);\n const pintrk = (window as Window).pintrk as Pintrk;\n\n pintrk('load', settings.apiKey);\n if (pageview) pintrk('page');\n\n // Seed runtime state (mutation is allowed on Settings._state).\n settings._state = {\n lastIdentify: undefined,\n consentGranted: true,\n };\n\n return config;\n },\n\n async push(event, { config, rule, data, env }) {\n const settings = (config.settings || {}) as Settings;\n const state = (settings._state ||= { consentGranted: true });\n if (state.consentGranted === false) return; // Consent revoked - suppress\n\n const { window } = getEnv(env);\n const pintrk = (window as Window).pintrk as Pintrk;\n if (!pintrk) return;\n\n // 1. Identity - per-event override falls back to destination-level.\n const identifyMapping =\n (rule?.settings?.identify as unknown) ?? settings.identify;\n const identify = await resolveIdentify(event, identifyMapping);\n if (identify && !identifyEqual(identify, state.lastIdentify)) {\n pintrk('set', identify);\n state.lastIdentify = identify;\n }\n\n // 2. Silent - process identity (above) but suppress the default track.\n if (rule?.silent === true) return;\n\n // 3. Track\n const eventName = isString(rule?.name)\n ? (rule!.name as string)\n : event.name;\n\n // context.data contains both include-flattened and mapping.data-resolved\n // properties. Include is the bottom layer, mapping.data wins on conflict.\n const contextData: Record<string, unknown> = isObject(data)\n ? (data as Record<string, unknown>)\n : {};\n\n const eventData: EventData = {\n ...(event.id ? { event_id: event.id } : {}),\n ...contextData,\n };\n\n pintrk('track', eventName, eventData);\n },\n\n on(type, context) {\n if (type !== 'consent' || !context.data) return;\n const settings = context.config?.settings as Settings | undefined;\n if (!settings) return;\n\n const consent = context.data as WalkerOS.Consent;\n const required = context.config?.consent;\n if (!required) return;\n\n const keys = Object.keys(required);\n if (keys.length === 0) return;\n\n // Deny as soon as any required key is explicitly false. Grant only if\n // every required key is explicitly true.\n let anyDenied = false;\n let allGranted = true;\n for (const key of keys) {\n if (consent[key] === true) continue;\n if (consent[key] === false) {\n anyDenied = true;\n allGranted = false;\n } else {\n // undefined / unknown - don't flip\n allGranted = false;\n }\n }\n\n const state = (settings._state ||= { consentGranted: true });\n if (anyDenied) {\n state.consentGranted = false;\n } else if (allGranted) {\n state.consentGranted = true;\n }\n },\n};\n\nexport default destinationPinterest;\n","import type {\n Mapping as WalkerOSMapping,\n Destination as CoreDestination,\n} from '@walkeros/core';\nimport type { DestinationWeb } from '@walkeros/web-core';\n\n/**\n * Pinterest Tag global. The queue-based function created by the Pinterest\n * snippet. Before core.js loads, calls are queued on `pintrk.queue`.\n * After core.js resolves the queue, `pintrk` is replaced with the real\n * implementation. Both shapes accept the same argument signatures.\n */\nexport interface Pintrk {\n (command: 'load', tagId: string, identify?: IdentifyFields): void;\n (command: 'page'): void;\n (\n command: 'track',\n eventName: string,\n eventData?: EventData,\n callback?: (didInit: boolean, error?: unknown) => void,\n ): void;\n (command: 'set', userData: IdentifyFields): void;\n queue?: unknown[][];\n version?: string;\n}\n\ndeclare global {\n interface Window {\n pintrk?: Pintrk;\n }\n}\n\n/**\n * Pinterest standard event taxonomy. See Pinterest Tag documentation.\n * Client-side names are lowercase concatenated strings (addtocart,\n * not add_to_cart). Sending the wrong name means the event will not\n * appear correctly in Pinterest's conversion reports.\n */\nexport type StandardEventName =\n | 'pagevisit'\n | 'viewcategory'\n | 'search'\n | 'addtocart'\n | 'checkout'\n | 'watchvideo'\n | 'signup'\n | 'lead'\n | 'addpaymentinfo'\n | 'addtowishlist'\n | 'initiatecheckout'\n | 'subscribe'\n | 'viewcontent'\n | 'contact'\n | 'customizeproduct'\n | 'findlocation'\n | 'schedule'\n | 'starttrial'\n | 'submitapplication'\n | 'custom';\n\n/** Open union — any string is still passed through to pintrk. */\nexport type EventName = StandardEventName | (string & {});\n\n/**\n * Enhanced matching fields. Web destination strictly limits to the two\n * documented client-side Pinterest Tag fields. CAPI-only fields (ph, fn,\n * ln, address, country, ip, ua) belong to a future server destination\n * and are intentionally not accepted here.\n *\n * The Pinterest JS tag auto-hashes `em` with SHA-256 before transmission —\n * the destination does NOT hash.\n */\nexport interface IdentifyFields {\n em?: string;\n external_id?: string;\n}\n\n/**\n * Event data payload for pintrk('track', ...). Pinterest has a prescribed\n * set of parameter names. Common parameters across events plus an open\n * `[key: string]: unknown` for event-specific fields (search_query,\n * video_title, lead_type, opt_out_type, custom properties, etc.).\n */\nexport interface EventData {\n value?: number;\n order_quantity?: number;\n currency?: string;\n event_id?: string;\n order_id?: string;\n promo_code?: string;\n property?: string;\n product_name?: string;\n product_id?: string;\n product_category?: string;\n product_brand?: string;\n product_price?: number;\n product_quantity?: number;\n product_variant_id?: string;\n product_variant?: string;\n line_items?: LineItem[];\n search_query?: string;\n video_title?: string;\n lead_type?: string;\n opt_out_type?: 'LDP';\n [key: string]: unknown;\n}\n\nexport interface LineItem {\n product_name?: string;\n product_id?: string;\n product_category?: string;\n product_brand?: string;\n product_price?: number;\n product_quantity?: number;\n product_variant_id?: string;\n product_variant?: string;\n [key: string]: unknown;\n}\n\n/**\n * Destination-level settings.\n *\n * @property apiKey — Pinterest Tag ID (numeric string). Required. Passed\n * to pintrk('load', tagId) on init.\n * @property pageview — Fire pintrk('page') once in init after core.js\n * loads. Default true (matches Pinterest's base code convention).\n * Set false when walkerOS sources already emit page view events and\n * you would otherwise get a duplicate initial fire.\n * @property identify — walkerOS mapping value resolving to IdentifyFields.\n * Enhanced matching data for pintrk('load', tagId, data) and subsequent\n * pintrk('set', data) calls when the resolved identity changes.\n * @property include — walkerOS event sections forwarded as prefixed\n * properties in the track event data. Pinterest strongly prefers\n * explicit mapping.data over include — include is a fallback for\n * forwarding auxiliary context.\n */\nexport interface Settings {\n apiKey: string;\n pageview?: boolean;\n identify?: WalkerOSMapping.Value;\n /**\n * Runtime-only state. Not serialized to schema, not configurable by users.\n * The destination uses this to diff enhanced matching across pushes and\n * to suppress track() calls after consent revocation.\n */\n _state?: {\n lastIdentify?: IdentifyFields;\n consentGranted?: boolean;\n };\n}\n\nexport type InitSettings = Partial<Settings>;\n\n/**\n * Per-event mapping settings (on rule.settings).\n *\n * @property identify — Per-event identity override. Resolves to\n * IdentifyFields passed to pintrk('set', data).\n * @property include — Overrides destination-level include for this rule.\n */\nexport interface Mapping {\n identify?: WalkerOSMapping.Value;\n}\n\n/**\n * Env — mock surface for tests. Pinterest Tag uses window.pintrk, so\n * the env extends DestinationWeb.Env (which already provides window\n * and document).\n */\nexport interface Env extends DestinationWeb.Env {\n window: {\n pintrk?: Pintrk;\n };\n}\n\nexport type Types = CoreDestination.Types<Settings, Mapping, Env, InitSettings>;\n\nexport type Destination = DestinationWeb.Destination<Types>;\nexport type Config = DestinationWeb.Config<Types>;\n\nexport interface PinterestDestination extends Destination {\n env?: Env;\n}\n\nexport type Rule = WalkerOSMapping.Rule<Mapping>;\nexport type Rules = WalkerOSMapping.Rules<Rule>;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,sBAAuB;A;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACDvB;;;ADeA,IAAM,uBAAuB;AAO7B,SAAS,mBAAmB,KAAgC;AAC1D,QAAM,EAAE,OAAO,QAAI,wBAAO,GAAG;AAC7B,QAAM,IAAI;AACV,MAAI,EAAE,OAAQ;AACd,QAAM,QAAqB,CAAC;AAC5B,QAAM,MAAM,IAAI,SAAoB;AAClC,IAAC,EAAE,OAAQ,MAAsB,KAAK,IAAI;AAAA,EAC5C;AACA,KAAG,QAAQ;AACX,KAAG,UAAU;AACb,IAAE,SAAS;AACb;AAMA,SAAS,UAAU,KAAgC;AACjD,QAAM,EAAE,SAAS,QAAI,wBAAO,GAAG;AAC/B,QAAM,MAAM;AACZ,QAAM,SAAS,IAAI,cAAc,QAAQ;AACzC,SAAO,MAAM;AACb,SAAO,QAAQ;AACf,MAAI,KAAK,YAAY,MAAM;AAC7B;AAMA,eAAe,gBACb,OACA,cACqC;AACrC,MAAI,iBAAiB,UAAa,iBAAiB,KAAM,QAAO;AAChE,QAAM,WAAW,MAAM;AAAA,IACrB;AAAA,IACA;AAAA,EACF;AACA,MAAI,CAAC,GAAS,QAAQ,EAAG,QAAO;AAChC,QAAM,SAAyB,CAAC;AAChC,QAAM,KAAM,SAAqC;AACjD,QAAM,cAAe,SAAqC;AAC1D,MAAI,GAAS,EAAE,KAAK,GAAI,QAAO,KAAK;AACpC,MAAI,GAAS,WAAW,KAAK,YAAa,QAAO,cAAc;AAC/D,SAAO,OAAO,KAAK,MAAM,EAAE,SAAS,IAAI,SAAS;AACnD;AAMA,SAAS,cAAcA,IAAoB,GAA6B;AACtE,MAAI,CAACA,MAAK,CAAC,EAAG,QAAO;AACrB,MAAI,CAACA,MAAK,CAAC,EAAG,QAAO;AACrB,SAAOA,GAAE,OAAO,EAAE,MAAMA,GAAE,gBAAgB,EAAE;AAC9C;AAEO,IAAM,uBAAoC;AAAA,EAC/C,MAAM;AAAA,EAEN,QAAQ,CAAC;AAAA,EAET,KAAK,EAAE,QAAQ,IAAI,GAAG;AACpB,UAAM,WAAW,OAAO;AACxB,QAAI,EAAC,qCAAU,QAAQ,QAAO;AAE9B,UAAM,WAAW,SAAS,aAAa;AAEvC,uBAAmB,GAAG;AACtB,QAAI,OAAO,eAAe,MAAO,WAAU,GAAG;AAE9C,UAAM,EAAE,OAAO,QAAI,wBAAO,GAAG;AAC7B,UAAM,SAAU,OAAkB;AAElC,WAAO,QAAQ,SAAS,MAAM;AAC9B,QAAI,SAAU,QAAO,MAAM;AAG3B,aAAS,SAAS;AAAA,MAChB,cAAc;AAAA,MACd,gBAAgB;AAAA,IAClB;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,KAAK,OAAO,EAAE,QAAQ,MAAM,MAAM,IAAI,GAAG;AA7GjD;AA8GI,UAAM,WAAY,OAAO,YAAY,CAAC;AACtC,UAAM,QAAS,SAAS,WAAT,SAAS,SAAW,EAAE,gBAAgB,KAAK;AAC1D,QAAI,MAAM,mBAAmB,MAAO;AAEpC,UAAM,EAAE,OAAO,QAAI,wBAAO,GAAG;AAC7B,UAAM,SAAU,OAAkB;AAClC,QAAI,CAAC,OAAQ;AAGb,UAAM,mBACH,wCAAM,aAAN,mBAAgB,aAAhB,YAAwC,SAAS;AACpD,UAAM,WAAW,MAAM,gBAAgB,OAAO,eAAe;AAC7D,QAAI,YAAY,CAAC,cAAc,UAAU,MAAM,YAAY,GAAG;AAC5D,aAAO,OAAO,QAAQ;AACtB,YAAM,eAAe;AAAA,IACvB;AAGA,SAAI,6BAAM,YAAW,KAAM;AAG3B,UAAM,YAAY,GAAS,6BAAM,IAAI,IAChC,KAAM,OACP,MAAM;AAIV,UAAM,cAAuC,GAAS,IAAI,IACrD,OACD,CAAC;AAEL,UAAM,YAAuB;AAAA,MAC3B,GAAI,MAAM,KAAK,EAAE,UAAU,MAAM,GAAG,IAAI,CAAC;AAAA,MACzC,GAAG;AAAA,IACL;AAEA,WAAO,SAAS,WAAW,SAAS;AAAA,EACtC;AAAA,EAEA,GAAG,MAAM,SAAS;AArJpB;AAsJI,QAAI,SAAS,aAAa,CAAC,QAAQ,KAAM;AACzC,UAAM,YAAW,aAAQ,WAAR,mBAAgB;AACjC,QAAI,CAAC,SAAU;AAEf,UAAM,UAAU,QAAQ;AACxB,UAAM,YAAW,aAAQ,WAAR,mBAAgB;AACjC,QAAI,CAAC,SAAU;AAEf,UAAM,OAAO,OAAO,KAAK,QAAQ;AACjC,QAAI,KAAK,WAAW,EAAG;AAIvB,QAAI,YAAY;AAChB,QAAI,aAAa;AACjB,eAAW,OAAO,MAAM;AACtB,UAAI,QAAQ,GAAG,MAAM,KAAM;AAC3B,UAAI,QAAQ,GAAG,MAAM,OAAO;AAC1B,oBAAY;AACZ,qBAAa;AAAA,MACf,OAAO;AAEL,qBAAa;AAAA,MACf;AAAA,IACF;AAEA,UAAM,QAAS,SAAS,WAAT,SAAS,SAAW,EAAE,gBAAgB,KAAK;AAC1D,QAAI,WAAW;AACb,YAAM,iBAAiB;AAAA,IACzB,WAAW,YAAY;AACrB,YAAM,iBAAiB;AAAA,IACzB;AAAA,EACF;AACF;AAEA,IAAO,gBAAQ;","names":["a"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/types/index.ts"],"sourcesContent":["import type { DestinationWeb } from '@walkeros/web-core';\nimport { getEnv } from '@walkeros/web-core';\nimport { getMappingValue, isObject, isString } from '@walkeros/core';\nimport type { Collector, WalkerOS } from '@walkeros/core';\nimport type {\n Destination,\n EventData,\n IdentifyFields,\n Pintrk,\n Settings,\n} from './types';\n\n// Types export\nexport * as DestinationPinterest from './types';\n\nconst PINTEREST_SCRIPT_SRC = 'https://s.pinimg.com/ct/core.js';\n\n/**\n * Install the Pinterest `window.pintrk` queue shim. Mirrors the official\n * snippet - any call made before core.js loads is pushed onto `pintrk.queue`,\n * which the real script processes once it initializes. Idempotent.\n */\nfunction installPintrkQueue(env?: DestinationWeb.Env): void {\n const { window } = getEnv(env);\n const w = window as Window & { pintrk?: Pintrk };\n if (w.pintrk) return;\n const queue: unknown[][] = [];\n const fn = ((...args: unknown[]) => {\n (w.pintrk!.queue as unknown[][]).push(args);\n }) as unknown as Pintrk;\n fn.queue = queue;\n fn.version = '3.0';\n w.pintrk = fn;\n}\n\n/**\n * Insert the Pinterest core.js script tag. Async, non-blocking. Matches the\n * plausible/meta precedent.\n */\nfunction addScript(env?: DestinationWeb.Env): void {\n const { document } = getEnv(env);\n const doc = document as Document;\n const script = doc.createElement('script');\n script.src = PINTEREST_SCRIPT_SRC;\n script.async = true;\n doc.head.appendChild(script);\n}\n\n/**\n * Resolve an identify mapping value into IdentifyFields. Strict allow-list:\n * only `em` and `external_id` pass through.\n */\nasync function resolveIdentify(\n event: WalkerOS.Event,\n mappingValue: unknown,\n collector: Collector.Instance,\n): Promise<IdentifyFields | undefined> {\n if (mappingValue === undefined || mappingValue === null) return undefined;\n const resolved = await getMappingValue(\n event,\n mappingValue as Parameters<typeof getMappingValue>[1],\n { collector },\n );\n if (!isObject(resolved)) return undefined;\n const fields: IdentifyFields = {};\n const em = (resolved as Record<string, unknown>).em;\n const external_id = (resolved as Record<string, unknown>).external_id;\n if (isString(em) && em) fields.em = em;\n if (isString(external_id) && external_id) fields.external_id = external_id;\n return Object.keys(fields).length > 0 ? fields : undefined;\n}\n\n/**\n * Shallow-equal compare two IdentifyFields - used to suppress redundant\n * pintrk('set', ...) calls when the resolved identity has not changed.\n */\nfunction identifyEqual(a?: IdentifyFields, b?: IdentifyFields): boolean {\n if (!a && !b) return true;\n if (!a || !b) return false;\n return a.em === b.em && a.external_id === b.external_id;\n}\n\nexport const destinationPinterest: Destination = {\n type: 'pinterest',\n\n config: {},\n\n init({ config, env }) {\n const settings = config.settings;\n if (!settings?.apiKey) return false;\n\n const pageview = settings.pageview !== false;\n\n installPintrkQueue(env);\n if (config.loadScript !== false) addScript(env);\n\n const { window } = getEnv(env);\n const pintrk = (window as Window).pintrk as Pintrk;\n\n pintrk('load', settings.apiKey);\n if (pageview) pintrk('page');\n\n // Seed runtime state (mutation is allowed on Settings._state).\n settings._state = {\n lastIdentify: undefined,\n consentGranted: true,\n };\n\n return config;\n },\n\n async push(event, { config, rule, data, env, collector }) {\n const settings = (config.settings || {}) as Settings;\n const state = (settings._state ||= { consentGranted: true });\n if (state.consentGranted === false) return; // Consent revoked - suppress\n\n const { window } = getEnv(env);\n const pintrk = (window as Window).pintrk as Pintrk;\n if (!pintrk) return;\n\n // 1. Identity - per-event override falls back to destination-level.\n const identifyMapping =\n (rule?.settings?.identify as unknown) ?? settings.identify;\n const identify = await resolveIdentify(event, identifyMapping, collector);\n if (identify && !identifyEqual(identify, state.lastIdentify)) {\n pintrk('set', identify);\n state.lastIdentify = identify;\n }\n\n // 2. Silent - process identity (above) but suppress the default track.\n if (rule?.silent === true) return;\n\n // 3. Track\n const eventName = isString(rule?.name)\n ? (rule!.name as string)\n : event.name;\n\n // context.data contains both include-flattened and mapping.data-resolved\n // properties. Include is the bottom layer, mapping.data wins on conflict.\n const contextData: Record<string, unknown> = isObject(data)\n ? (data as Record<string, unknown>)\n : {};\n\n const eventData: EventData = {\n ...(event.id ? { event_id: event.id } : {}),\n ...contextData,\n };\n\n pintrk('track', eventName, eventData);\n },\n\n on(type, context) {\n if (type !== 'consent' || !context.data) return;\n const settings = context.config?.settings as Settings | undefined;\n if (!settings) return;\n\n const consent = context.data as WalkerOS.Consent;\n const required = context.config?.consent;\n if (!required) return;\n\n const keys = Object.keys(required);\n if (keys.length === 0) return;\n\n // Deny as soon as any required key is explicitly false. Grant only if\n // every required key is explicitly true.\n let anyDenied = false;\n let allGranted = true;\n for (const key of keys) {\n if (consent[key] === true) continue;\n if (consent[key] === false) {\n anyDenied = true;\n allGranted = false;\n } else {\n // undefined / unknown - don't flip\n allGranted = false;\n }\n }\n\n const state = (settings._state ||= { consentGranted: true });\n if (anyDenied) {\n state.consentGranted = false;\n } else if (allGranted) {\n state.consentGranted = true;\n }\n },\n};\n\nexport default destinationPinterest;\n","import type {\n Mapping as WalkerOSMapping,\n Destination as CoreDestination,\n} from '@walkeros/core';\nimport type { DestinationWeb } from '@walkeros/web-core';\n\n/**\n * Pinterest Tag global. The queue-based function created by the Pinterest\n * snippet. Before core.js loads, calls are queued on `pintrk.queue`.\n * After core.js resolves the queue, `pintrk` is replaced with the real\n * implementation. Both shapes accept the same argument signatures.\n */\nexport interface Pintrk {\n (command: 'load', tagId: string, identify?: IdentifyFields): void;\n (command: 'page'): void;\n (\n command: 'track',\n eventName: string,\n eventData?: EventData,\n callback?: (didInit: boolean, error?: unknown) => void,\n ): void;\n (command: 'set', userData: IdentifyFields): void;\n queue?: unknown[][];\n version?: string;\n}\n\ndeclare global {\n interface Window {\n pintrk?: Pintrk;\n }\n}\n\n/**\n * Pinterest standard event taxonomy. See Pinterest Tag documentation.\n * Client-side names are lowercase concatenated strings (addtocart,\n * not add_to_cart). Sending the wrong name means the event will not\n * appear correctly in Pinterest's conversion reports.\n */\nexport type StandardEventName =\n | 'pagevisit'\n | 'viewcategory'\n | 'search'\n | 'addtocart'\n | 'checkout'\n | 'watchvideo'\n | 'signup'\n | 'lead'\n | 'addpaymentinfo'\n | 'addtowishlist'\n | 'initiatecheckout'\n | 'subscribe'\n | 'viewcontent'\n | 'contact'\n | 'customizeproduct'\n | 'findlocation'\n | 'schedule'\n | 'starttrial'\n | 'submitapplication'\n | 'custom';\n\n/** Open union — any string is still passed through to pintrk. */\nexport type EventName = StandardEventName | (string & {});\n\n/**\n * Enhanced matching fields. Web destination strictly limits to the two\n * documented client-side Pinterest Tag fields. CAPI-only fields (ph, fn,\n * ln, address, country, ip, ua) belong to a future server destination\n * and are intentionally not accepted here.\n *\n * The Pinterest JS tag auto-hashes `em` with SHA-256 before transmission —\n * the destination does NOT hash.\n */\nexport interface IdentifyFields {\n em?: string;\n external_id?: string;\n}\n\n/**\n * Event data payload for pintrk('track', ...). Pinterest has a prescribed\n * set of parameter names. Common parameters across events plus an open\n * `[key: string]: unknown` for event-specific fields (search_query,\n * video_title, lead_type, opt_out_type, custom properties, etc.).\n */\nexport interface EventData {\n value?: number;\n order_quantity?: number;\n currency?: string;\n event_id?: string;\n order_id?: string;\n promo_code?: string;\n property?: string;\n product_name?: string;\n product_id?: string;\n product_category?: string;\n product_brand?: string;\n product_price?: number;\n product_quantity?: number;\n product_variant_id?: string;\n product_variant?: string;\n line_items?: LineItem[];\n search_query?: string;\n video_title?: string;\n lead_type?: string;\n opt_out_type?: 'LDP';\n [key: string]: unknown;\n}\n\nexport interface LineItem {\n product_name?: string;\n product_id?: string;\n product_category?: string;\n product_brand?: string;\n product_price?: number;\n product_quantity?: number;\n product_variant_id?: string;\n product_variant?: string;\n [key: string]: unknown;\n}\n\n/**\n * Destination-level settings.\n *\n * @property apiKey — Pinterest Tag ID (numeric string). Required. Passed\n * to pintrk('load', tagId) on init.\n * @property pageview — Fire pintrk('page') once in init after core.js\n * loads. Default true (matches Pinterest's base code convention).\n * Set false when walkerOS sources already emit page view events and\n * you would otherwise get a duplicate initial fire.\n * @property identify — walkerOS mapping value resolving to IdentifyFields.\n * Enhanced matching data for pintrk('load', tagId, data) and subsequent\n * pintrk('set', data) calls when the resolved identity changes.\n * @property include — walkerOS event sections forwarded as prefixed\n * properties in the track event data. Pinterest strongly prefers\n * explicit mapping.data over include — include is a fallback for\n * forwarding auxiliary context.\n */\nexport interface Settings {\n apiKey: string;\n pageview?: boolean;\n identify?: WalkerOSMapping.Value;\n /**\n * Runtime-only state. Not serialized to schema, not configurable by users.\n * The destination uses this to diff enhanced matching across pushes and\n * to suppress track() calls after consent revocation.\n */\n _state?: {\n lastIdentify?: IdentifyFields;\n consentGranted?: boolean;\n };\n}\n\nexport type InitSettings = Partial<Settings>;\n\n/**\n * Per-event mapping settings (on rule.settings).\n *\n * @property identify — Per-event identity override. Resolves to\n * IdentifyFields passed to pintrk('set', data).\n * @property include — Overrides destination-level include for this rule.\n */\nexport interface Mapping {\n identify?: WalkerOSMapping.Value;\n}\n\n/**\n * Env — mock surface for tests. Pinterest Tag uses window.pintrk, so\n * the env extends DestinationWeb.Env (which already provides window\n * and document).\n */\nexport interface Env extends DestinationWeb.Env {\n window: {\n pintrk?: Pintrk;\n };\n}\n\nexport type Types = CoreDestination.Types<Settings, Mapping, Env, InitSettings>;\n\nexport type Destination = DestinationWeb.Destination<Types>;\nexport type Config = DestinationWeb.Config<Types>;\n\nexport interface PinterestDestination extends Destination {\n env?: Env;\n}\n\nexport type Rule = WalkerOSMapping.Rule<Mapping>;\nexport type Rules = WalkerOSMapping.Rules<Rule>;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,sBAAuB;A;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACDvB;;;ADeA,IAAM,uBAAuB;AAO7B,SAAS,mBAAmB,KAAgC;AAC1D,QAAM,EAAE,OAAO,QAAI,wBAAO,GAAG;AAC7B,QAAM,IAAI;AACV,MAAI,EAAE,OAAQ;AACd,QAAM,QAAqB,CAAC;AAC5B,QAAM,MAAM,IAAI,SAAoB;AAClC,IAAC,EAAE,OAAQ,MAAsB,KAAK,IAAI;AAAA,EAC5C;AACA,KAAG,QAAQ;AACX,KAAG,UAAU;AACb,IAAE,SAAS;AACb;AAMA,SAAS,UAAU,KAAgC;AACjD,QAAM,EAAE,SAAS,QAAI,wBAAO,GAAG;AAC/B,QAAM,MAAM;AACZ,QAAM,SAAS,IAAI,cAAc,QAAQ;AACzC,SAAO,MAAM;AACb,SAAO,QAAQ;AACf,MAAI,KAAK,YAAY,MAAM;AAC7B;AAMA,eAAe,gBACb,OACA,cACA,WACqC;AACrC,MAAI,iBAAiB,UAAa,iBAAiB,KAAM,QAAO;AAChE,QAAM,WAAW,MAAM;AAAA,IACrB;AAAA,IACA;AAAA,IACA,EAAE,UAAU;AAAA,EACd;AACA,MAAI,CAAC,GAAS,QAAQ,EAAG,QAAO;AAChC,QAAM,SAAyB,CAAC;AAChC,QAAM,KAAM,SAAqC;AACjD,QAAM,cAAe,SAAqC;AAC1D,MAAI,GAAS,EAAE,KAAK,GAAI,QAAO,KAAK;AACpC,MAAI,GAAS,WAAW,KAAK,YAAa,QAAO,cAAc;AAC/D,SAAO,OAAO,KAAK,MAAM,EAAE,SAAS,IAAI,SAAS;AACnD;AAMA,SAAS,cAAcA,IAAoB,GAA6B;AACtE,MAAI,CAACA,MAAK,CAAC,EAAG,QAAO;AACrB,MAAI,CAACA,MAAK,CAAC,EAAG,QAAO;AACrB,SAAOA,GAAE,OAAO,EAAE,MAAMA,GAAE,gBAAgB,EAAE;AAC9C;AAEO,IAAM,uBAAoC;AAAA,EAC/C,MAAM;AAAA,EAEN,QAAQ,CAAC;AAAA,EAET,KAAK,EAAE,QAAQ,IAAI,GAAG;AACpB,UAAM,WAAW,OAAO;AACxB,QAAI,EAAC,qCAAU,QAAQ,QAAO;AAE9B,UAAM,WAAW,SAAS,aAAa;AAEvC,uBAAmB,GAAG;AACtB,QAAI,OAAO,eAAe,MAAO,WAAU,GAAG;AAE9C,UAAM,EAAE,OAAO,QAAI,wBAAO,GAAG;AAC7B,UAAM,SAAU,OAAkB;AAElC,WAAO,QAAQ,SAAS,MAAM;AAC9B,QAAI,SAAU,QAAO,MAAM;AAG3B,aAAS,SAAS;AAAA,MAChB,cAAc;AAAA,MACd,gBAAgB;AAAA,IAClB;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,KAAK,OAAO,EAAE,QAAQ,MAAM,MAAM,KAAK,UAAU,GAAG;AA/G5D;AAgHI,UAAM,WAAY,OAAO,YAAY,CAAC;AACtC,UAAM,QAAS,SAAS,WAAT,SAAS,SAAW,EAAE,gBAAgB,KAAK;AAC1D,QAAI,MAAM,mBAAmB,MAAO;AAEpC,UAAM,EAAE,OAAO,QAAI,wBAAO,GAAG;AAC7B,UAAM,SAAU,OAAkB;AAClC,QAAI,CAAC,OAAQ;AAGb,UAAM,mBACH,wCAAM,aAAN,mBAAgB,aAAhB,YAAwC,SAAS;AACpD,UAAM,WAAW,MAAM,gBAAgB,OAAO,iBAAiB,SAAS;AACxE,QAAI,YAAY,CAAC,cAAc,UAAU,MAAM,YAAY,GAAG;AAC5D,aAAO,OAAO,QAAQ;AACtB,YAAM,eAAe;AAAA,IACvB;AAGA,SAAI,6BAAM,YAAW,KAAM;AAG3B,UAAM,YAAY,GAAS,6BAAM,IAAI,IAChC,KAAM,OACP,MAAM;AAIV,UAAM,cAAuC,GAAS,IAAI,IACrD,OACD,CAAC;AAEL,UAAM,YAAuB;AAAA,MAC3B,GAAI,MAAM,KAAK,EAAE,UAAU,MAAM,GAAG,IAAI,CAAC;AAAA,MACzC,GAAG;AAAA,IACL;AAEA,WAAO,SAAS,WAAW,SAAS;AAAA,EACtC;AAAA,EAEA,GAAG,MAAM,SAAS;AAvJpB;AAwJI,QAAI,SAAS,aAAa,CAAC,QAAQ,KAAM;AACzC,UAAM,YAAW,aAAQ,WAAR,mBAAgB;AACjC,QAAI,CAAC,SAAU;AAEf,UAAM,UAAU,QAAQ;AACxB,UAAM,YAAW,aAAQ,WAAR,mBAAgB;AACjC,QAAI,CAAC,SAAU;AAEf,UAAM,OAAO,OAAO,KAAK,QAAQ;AACjC,QAAI,KAAK,WAAW,EAAG;AAIvB,QAAI,YAAY;AAChB,QAAI,aAAa;AACjB,eAAW,OAAO,MAAM;AACtB,UAAI,QAAQ,GAAG,MAAM,KAAM;AAC3B,UAAI,QAAQ,GAAG,MAAM,OAAO;AAC1B,oBAAY;AACZ,qBAAa;AAAA,MACf,OAAO;AAEL,qBAAa;AAAA,MACf;AAAA,IACF;AAEA,UAAM,QAAS,SAAS,WAAT,SAAS,SAAW,EAAE,gBAAgB,KAAK;AAC1D,QAAI,WAAW;AACb,YAAM,iBAAiB;AAAA,IACzB,WAAW,YAAY;AACrB,YAAM,iBAAiB;AAAA,IACzB;AAAA,EACF;AACF;AAEA,IAAO,gBAAQ;","names":["a"]}
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- import{getEnv as t}from"@walkeros/web-core";var n=Object.defineProperty;((t,e)=>{for(var r in e)n(t,r,{get:e[r],enumerable:!0})})({},{Level:()=>r});var e,r=((e=r||{})[e.ERROR=0]="ERROR",e[e.WARN=1]="WARN",e[e.INFO=2]="INFO",e[e.DEBUG=3]="DEBUG",e);function i(t){return Array.isArray(t)}function o(t){return void 0!==t}function c(t){return"object"==typeof t&&null!==t&&!i(t)&&"[object Object]"===Object.prototype.toString.call(t)}function a(t){return"string"==typeof t}function s(t,n="",e){const r=n.split(".");let c=t;for(let t=0;t<r.length;t++){const n=r[t];if("*"===n&&i(c)){const n=r.slice(t+1).join("."),i=[];for(const t of c){const r=s(t,n,e);i.push(r)}return i}if(c=c instanceof Object?c[n]:void 0,void 0===c)break}return o(c)?c:e}function u(t){return function(t){return"boolean"==typeof t}(t)||a(t)||function(t){return"number"==typeof t&&!Number.isNaN(t)}(t)||!o(t)||i(t)&&t.every(u)||c(t)&&Object.values(t).every(u)}function l(t){return u(t)?t:void 0}function f(t,n,e){return async function(...r){try{return await t(...r)}catch(t){if(!n)return;return await n(t)}finally{await(null==e?void 0:e())}}}async function d(t,n={},e={}){var r;if(!o(t))return;const a=c(t)&&t.consent||e.consent||(null==(r=e.collector)?void 0:r.consent),s=i(n)?n:[n];for(const n of s){const r=await f(v)(t,n,{...e,consent:a});if(o(r))return r}}async function v(t,n,e={}){const{collector:r,consent:c}=e;return(i(n)?n:[n]).reduce(async(n,u)=>{const y=await n;if(y)return y;const p=a(u)?{key:u}:u;if(!Object.keys(p).length)return;const{condition:w,consent:m,fn:g,key:b,loop:j,map:k,set:O,validate:h,value:_}=p;if(w&&!await f(w)(t,u,r))return;if(m&&!function(t,n={},e={}){const r={...n,...e},i={};let o=!t||0===Object.keys(t).length;return Object.keys(r).forEach(n=>{r[n]&&(i[n]=!0,t&&t[n]&&(o=!0))}),!!o&&i}(m,c))return _;let G=o(_)?_:t;if(g&&(G=await f(g)(t,u,e)),b&&(G=s(t,b,_)),j){const[n,r]=j,c="this"===n?[t]:await d(t,n,e);i(c)&&(G=(await Promise.all(c.map(t=>d(t,r,e)))).filter(o))}else k?G=await Object.entries(k).reduce(async(n,[r,i])=>{const c=await n,a=await d(t,i,e);return o(a)&&(c[r]=a),c},Promise.resolve({})):O&&(G=await Promise.all(O.map(n=>v(t,n,e))));h&&!await f(h)(G)&&(G=void 0);const R=l(G);return o(R)?R:l(_)},Promise.resolve(void 0))}var y={};var p={type:"pinterest",config:{},init({config:n,env:e}){const r=n.settings;if(!(null==r?void 0:r.apiKey))return!1;const i=!1!==r.pageview;!function(n){const{window:e}=t(n),r=e;if(r.pintrk)return;const i=(...t)=>{r.pintrk.queue.push(t)};i.queue=[],i.version="3.0",r.pintrk=i}(e),!1!==n.loadScript&&function(n){const{document:e}=t(n),r=e,i=r.createElement("script");i.src="https://s.pinimg.com/ct/core.js",i.async=!0,r.head.appendChild(i)}(e);const{window:o}=t(e),c=o.pintrk;return c("load",r.apiKey),i&&c("page"),r._state={lastIdentify:void 0,consentGranted:!0},n},async push(n,{config:e,rule:r,data:i,env:o}){var s,u;const l=e.settings||{},f=l._state||(l._state={consentGranted:!0});if(!1===f.consentGranted)return;const{window:v}=t(o),y=v.pintrk;if(!y)return;const p=null!=(u=null==(s=null==r?void 0:r.settings)?void 0:s.identify)?u:l.identify,w=await async function(t,n){if(null==n)return;const e=await d(t,n);if(!c(e))return;const r={},i=e.em,o=e.external_id;return a(i)&&i&&(r.em=i),a(o)&&o&&(r.external_id=o),Object.keys(r).length>0?r:void 0}(n,p);var m,g;if(!w||(m=w,g=f.lastIdentify,!m&&!g||m&&g&&m.em===g.em&&m.external_id===g.external_id)||(y("set",w),f.lastIdentify=w),!0===(null==r?void 0:r.silent))return;const b=a(null==r?void 0:r.name)?r.name:n.name,j=c(i)?i:{};y("track",b,{...n.id?{event_id:n.id}:{},...j})},on(t,n){var e,r;if("consent"!==t||!n.data)return;const i=null==(e=n.config)?void 0:e.settings;if(!i)return;const o=n.data,c=null==(r=n.config)?void 0:r.consent;if(!c)return;const a=Object.keys(c);if(0===a.length)return;let s=!1,u=!0;for(const t of a)!0!==o[t]&&(!1===o[t]?(s=!0,u=!1):u=!1);const l=i._state||(i._state={consentGranted:!0});s?l.consentGranted=!1:u&&(l.consentGranted=!0)}},w=p;export{y as DestinationPinterest,w as default,p as destinationPinterest};//# sourceMappingURL=index.mjs.map
1
+ import{getEnv as t}from"@walkeros/web-core";var n=Object.defineProperty;((t,e)=>{for(var r in e)n(t,r,{get:e[r],enumerable:!0})})({},{Level:()=>r});var e,r=((e=r||{})[e.ERROR=0]="ERROR",e[e.WARN=1]="WARN",e[e.INFO=2]="INFO",e[e.DEBUG=3]="DEBUG",e);function o(t){return Array.isArray(t)}function i(t){return void 0!==t}function c(t){return"object"==typeof t&&null!==t&&!o(t)&&"[object Object]"===Object.prototype.toString.call(t)}function a(t){return"string"==typeof t}function s(t,n="",e){const r=n.split(".");let c=t;for(let t=0;t<r.length;t++){const n=r[t];if("*"===n&&o(c)){const n=r.slice(t+1).join("."),o=[];for(const t of c){const r=s(t,n,e);o.push(r)}return o}if(c=c instanceof Object?c[n]:void 0,void 0===c)break}return i(c)?c:e}function l(t){return function(t){return"boolean"==typeof t}(t)||a(t)||function(t){return"number"==typeof t&&!Number.isNaN(t)}(t)||!i(t)||o(t)&&t.every(l)||c(t)&&Object.values(t).every(l)}function u(t){return l(t)?t:void 0}function f(t,n,e){return async function(...r){try{return await t(...r)}catch(t){if(!n)return;return await n(t)}finally{await(null==e?void 0:e())}}}async function d(t,n={},e={}){var r,a;if(!i(t))return;const s=c(t)&&t.consent||e.consent||(null==(r=e.collector)?void 0:r.consent),l=null!=(a=e.event)?a:c(t)?t:{};if(!e.collector)throw new Error("getMappingValue: context.collector is required");const u={event:l,mapping:n,collector:e.collector,logger:e.collector.logger,consent:s},d=o(n)?n:[n];for(const n of d){const e=await f(p)(t,n,{...u,mapping:n});if(i(e))return e}}async function p(t,n,e){return(o(n)?n:[n]).reduce(async(n,r)=>{const c=await n;if(c)return c;const l=a(r)?{key:r}:r;if(!Object.keys(l).length)return;const{condition:v,consent:y,fn:g,key:w,loop:m,map:b,set:h,validate:j,value:k}=l,O={...e,mapping:r};if(v&&!await f(v)(t,O))return;if(y&&!function(t,n={},e={}){const r={...n,...e},o={};let i=!t||0===Object.keys(t).length;return Object.keys(r).forEach(n=>{r[n]&&(o[n]=!0,t&&t[n]&&(i=!0))}),!!i&&o}(y,O.consent))return k;let _=i(k)?k:t;if(g&&(_=await f(g)(t,O)),w&&(_=s(t,w,k)),m){const[n,e]=m,r="this"===n?[t]:await d(t,n,O);o(r)&&(_=(await Promise.all(r.map(t=>d(t,e,O)))).filter(i))}else b?_=await Object.entries(b).reduce(async(n,[e,r])=>{const o=await n,c=await d(t,r,O);return i(c)&&(o[e]=c),o},Promise.resolve({})):h&&(_=await Promise.all(h.map(n=>p(t,n,O))));j&&!await f(j)(_,O)&&(_=void 0);const G=u(_);return i(G)?G:u(k)},Promise.resolve(void 0))}var v={};var y={type:"pinterest",config:{},init({config:n,env:e}){const r=n.settings;if(!(null==r?void 0:r.apiKey))return!1;const o=!1!==r.pageview;!function(n){const{window:e}=t(n),r=e;if(r.pintrk)return;const o=(...t)=>{r.pintrk.queue.push(t)};o.queue=[],o.version="3.0",r.pintrk=o}(e),!1!==n.loadScript&&function(n){const{document:e}=t(n),r=e,o=r.createElement("script");o.src="https://s.pinimg.com/ct/core.js",o.async=!0,r.head.appendChild(o)}(e);const{window:i}=t(e),c=i.pintrk;return c("load",r.apiKey),o&&c("page"),r._state={lastIdentify:void 0,consentGranted:!0},n},async push(n,{config:e,rule:r,data:o,env:i,collector:s}){var l,u;const f=e.settings||{},p=f._state||(f._state={consentGranted:!0});if(!1===p.consentGranted)return;const{window:v}=t(i),y=v.pintrk;if(!y)return;const g=null!=(u=null==(l=null==r?void 0:r.settings)?void 0:l.identify)?u:f.identify,w=await async function(t,n,e){if(null==n)return;const r=await d(t,n,{collector:e});if(!c(r))return;const o={},i=r.em,s=r.external_id;return a(i)&&i&&(o.em=i),a(s)&&s&&(o.external_id=s),Object.keys(o).length>0?o:void 0}(n,g,s);var m,b;if(!w||(m=w,b=p.lastIdentify,!m&&!b||m&&b&&m.em===b.em&&m.external_id===b.external_id)||(y("set",w),p.lastIdentify=w),!0===(null==r?void 0:r.silent))return;const h=a(null==r?void 0:r.name)?r.name:n.name,j=c(o)?o:{};y("track",h,{...n.id?{event_id:n.id}:{},...j})},on(t,n){var e,r;if("consent"!==t||!n.data)return;const o=null==(e=n.config)?void 0:e.settings;if(!o)return;const i=n.data,c=null==(r=n.config)?void 0:r.consent;if(!c)return;const a=Object.keys(c);if(0===a.length)return;let s=!1,l=!0;for(const t of a)!0!==i[t]&&(!1===i[t]?(s=!0,l=!1):l=!1);const u=o._state||(o._state={consentGranted:!0});s?u.consentGranted=!1:l&&(u.consentGranted=!0)}},g=y;export{v as DestinationPinterest,g as default,y as destinationPinterest};//# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/types/index.ts"],"sourcesContent":["import type { DestinationWeb } from '@walkeros/web-core';\nimport { getEnv } from '@walkeros/web-core';\nimport { getMappingValue, isObject, isString } from '@walkeros/core';\nimport type { WalkerOS } from '@walkeros/core';\nimport type {\n Destination,\n EventData,\n IdentifyFields,\n Pintrk,\n Settings,\n} from './types';\n\n// Types export\nexport * as DestinationPinterest from './types';\n\nconst PINTEREST_SCRIPT_SRC = 'https://s.pinimg.com/ct/core.js';\n\n/**\n * Install the Pinterest `window.pintrk` queue shim. Mirrors the official\n * snippet - any call made before core.js loads is pushed onto `pintrk.queue`,\n * which the real script processes once it initializes. Idempotent.\n */\nfunction installPintrkQueue(env?: DestinationWeb.Env): void {\n const { window } = getEnv(env);\n const w = window as Window & { pintrk?: Pintrk };\n if (w.pintrk) return;\n const queue: unknown[][] = [];\n const fn = ((...args: unknown[]) => {\n (w.pintrk!.queue as unknown[][]).push(args);\n }) as unknown as Pintrk;\n fn.queue = queue;\n fn.version = '3.0';\n w.pintrk = fn;\n}\n\n/**\n * Insert the Pinterest core.js script tag. Async, non-blocking. Matches the\n * plausible/meta precedent.\n */\nfunction addScript(env?: DestinationWeb.Env): void {\n const { document } = getEnv(env);\n const doc = document as Document;\n const script = doc.createElement('script');\n script.src = PINTEREST_SCRIPT_SRC;\n script.async = true;\n doc.head.appendChild(script);\n}\n\n/**\n * Resolve an identify mapping value into IdentifyFields. Strict allow-list:\n * only `em` and `external_id` pass through.\n */\nasync function resolveIdentify(\n event: WalkerOS.Event,\n mappingValue: unknown,\n): Promise<IdentifyFields | undefined> {\n if (mappingValue === undefined || mappingValue === null) return undefined;\n const resolved = await getMappingValue(\n event,\n mappingValue as Parameters<typeof getMappingValue>[1],\n );\n if (!isObject(resolved)) return undefined;\n const fields: IdentifyFields = {};\n const em = (resolved as Record<string, unknown>).em;\n const external_id = (resolved as Record<string, unknown>).external_id;\n if (isString(em) && em) fields.em = em;\n if (isString(external_id) && external_id) fields.external_id = external_id;\n return Object.keys(fields).length > 0 ? fields : undefined;\n}\n\n/**\n * Shallow-equal compare two IdentifyFields - used to suppress redundant\n * pintrk('set', ...) calls when the resolved identity has not changed.\n */\nfunction identifyEqual(a?: IdentifyFields, b?: IdentifyFields): boolean {\n if (!a && !b) return true;\n if (!a || !b) return false;\n return a.em === b.em && a.external_id === b.external_id;\n}\n\nexport const destinationPinterest: Destination = {\n type: 'pinterest',\n\n config: {},\n\n init({ config, env }) {\n const settings = config.settings;\n if (!settings?.apiKey) return false;\n\n const pageview = settings.pageview !== false;\n\n installPintrkQueue(env);\n if (config.loadScript !== false) addScript(env);\n\n const { window } = getEnv(env);\n const pintrk = (window as Window).pintrk as Pintrk;\n\n pintrk('load', settings.apiKey);\n if (pageview) pintrk('page');\n\n // Seed runtime state (mutation is allowed on Settings._state).\n settings._state = {\n lastIdentify: undefined,\n consentGranted: true,\n };\n\n return config;\n },\n\n async push(event, { config, rule, data, env }) {\n const settings = (config.settings || {}) as Settings;\n const state = (settings._state ||= { consentGranted: true });\n if (state.consentGranted === false) return; // Consent revoked - suppress\n\n const { window } = getEnv(env);\n const pintrk = (window as Window).pintrk as Pintrk;\n if (!pintrk) return;\n\n // 1. Identity - per-event override falls back to destination-level.\n const identifyMapping =\n (rule?.settings?.identify as unknown) ?? settings.identify;\n const identify = await resolveIdentify(event, identifyMapping);\n if (identify && !identifyEqual(identify, state.lastIdentify)) {\n pintrk('set', identify);\n state.lastIdentify = identify;\n }\n\n // 2. Silent - process identity (above) but suppress the default track.\n if (rule?.silent === true) return;\n\n // 3. Track\n const eventName = isString(rule?.name)\n ? (rule!.name as string)\n : event.name;\n\n // context.data contains both include-flattened and mapping.data-resolved\n // properties. Include is the bottom layer, mapping.data wins on conflict.\n const contextData: Record<string, unknown> = isObject(data)\n ? (data as Record<string, unknown>)\n : {};\n\n const eventData: EventData = {\n ...(event.id ? { event_id: event.id } : {}),\n ...contextData,\n };\n\n pintrk('track', eventName, eventData);\n },\n\n on(type, context) {\n if (type !== 'consent' || !context.data) return;\n const settings = context.config?.settings as Settings | undefined;\n if (!settings) return;\n\n const consent = context.data as WalkerOS.Consent;\n const required = context.config?.consent;\n if (!required) return;\n\n const keys = Object.keys(required);\n if (keys.length === 0) return;\n\n // Deny as soon as any required key is explicitly false. Grant only if\n // every required key is explicitly true.\n let anyDenied = false;\n let allGranted = true;\n for (const key of keys) {\n if (consent[key] === true) continue;\n if (consent[key] === false) {\n anyDenied = true;\n allGranted = false;\n } else {\n // undefined / unknown - don't flip\n allGranted = false;\n }\n }\n\n const state = (settings._state ||= { consentGranted: true });\n if (anyDenied) {\n state.consentGranted = false;\n } else if (allGranted) {\n state.consentGranted = true;\n }\n },\n};\n\nexport default destinationPinterest;\n","import type {\n Mapping as WalkerOSMapping,\n Destination as CoreDestination,\n} from '@walkeros/core';\nimport type { DestinationWeb } from '@walkeros/web-core';\n\n/**\n * Pinterest Tag global. The queue-based function created by the Pinterest\n * snippet. Before core.js loads, calls are queued on `pintrk.queue`.\n * After core.js resolves the queue, `pintrk` is replaced with the real\n * implementation. Both shapes accept the same argument signatures.\n */\nexport interface Pintrk {\n (command: 'load', tagId: string, identify?: IdentifyFields): void;\n (command: 'page'): void;\n (\n command: 'track',\n eventName: string,\n eventData?: EventData,\n callback?: (didInit: boolean, error?: unknown) => void,\n ): void;\n (command: 'set', userData: IdentifyFields): void;\n queue?: unknown[][];\n version?: string;\n}\n\ndeclare global {\n interface Window {\n pintrk?: Pintrk;\n }\n}\n\n/**\n * Pinterest standard event taxonomy. See Pinterest Tag documentation.\n * Client-side names are lowercase concatenated strings (addtocart,\n * not add_to_cart). Sending the wrong name means the event will not\n * appear correctly in Pinterest's conversion reports.\n */\nexport type StandardEventName =\n | 'pagevisit'\n | 'viewcategory'\n | 'search'\n | 'addtocart'\n | 'checkout'\n | 'watchvideo'\n | 'signup'\n | 'lead'\n | 'addpaymentinfo'\n | 'addtowishlist'\n | 'initiatecheckout'\n | 'subscribe'\n | 'viewcontent'\n | 'contact'\n | 'customizeproduct'\n | 'findlocation'\n | 'schedule'\n | 'starttrial'\n | 'submitapplication'\n | 'custom';\n\n/** Open union — any string is still passed through to pintrk. */\nexport type EventName = StandardEventName | (string & {});\n\n/**\n * Enhanced matching fields. Web destination strictly limits to the two\n * documented client-side Pinterest Tag fields. CAPI-only fields (ph, fn,\n * ln, address, country, ip, ua) belong to a future server destination\n * and are intentionally not accepted here.\n *\n * The Pinterest JS tag auto-hashes `em` with SHA-256 before transmission —\n * the destination does NOT hash.\n */\nexport interface IdentifyFields {\n em?: string;\n external_id?: string;\n}\n\n/**\n * Event data payload for pintrk('track', ...). Pinterest has a prescribed\n * set of parameter names. Common parameters across events plus an open\n * `[key: string]: unknown` for event-specific fields (search_query,\n * video_title, lead_type, opt_out_type, custom properties, etc.).\n */\nexport interface EventData {\n value?: number;\n order_quantity?: number;\n currency?: string;\n event_id?: string;\n order_id?: string;\n promo_code?: string;\n property?: string;\n product_name?: string;\n product_id?: string;\n product_category?: string;\n product_brand?: string;\n product_price?: number;\n product_quantity?: number;\n product_variant_id?: string;\n product_variant?: string;\n line_items?: LineItem[];\n search_query?: string;\n video_title?: string;\n lead_type?: string;\n opt_out_type?: 'LDP';\n [key: string]: unknown;\n}\n\nexport interface LineItem {\n product_name?: string;\n product_id?: string;\n product_category?: string;\n product_brand?: string;\n product_price?: number;\n product_quantity?: number;\n product_variant_id?: string;\n product_variant?: string;\n [key: string]: unknown;\n}\n\n/**\n * Destination-level settings.\n *\n * @property apiKey — Pinterest Tag ID (numeric string). Required. Passed\n * to pintrk('load', tagId) on init.\n * @property pageview — Fire pintrk('page') once in init after core.js\n * loads. Default true (matches Pinterest's base code convention).\n * Set false when walkerOS sources already emit page view events and\n * you would otherwise get a duplicate initial fire.\n * @property identify — walkerOS mapping value resolving to IdentifyFields.\n * Enhanced matching data for pintrk('load', tagId, data) and subsequent\n * pintrk('set', data) calls when the resolved identity changes.\n * @property include — walkerOS event sections forwarded as prefixed\n * properties in the track event data. Pinterest strongly prefers\n * explicit mapping.data over include — include is a fallback for\n * forwarding auxiliary context.\n */\nexport interface Settings {\n apiKey: string;\n pageview?: boolean;\n identify?: WalkerOSMapping.Value;\n /**\n * Runtime-only state. Not serialized to schema, not configurable by users.\n * The destination uses this to diff enhanced matching across pushes and\n * to suppress track() calls after consent revocation.\n */\n _state?: {\n lastIdentify?: IdentifyFields;\n consentGranted?: boolean;\n };\n}\n\nexport type InitSettings = Partial<Settings>;\n\n/**\n * Per-event mapping settings (on rule.settings).\n *\n * @property identify — Per-event identity override. Resolves to\n * IdentifyFields passed to pintrk('set', data).\n * @property include — Overrides destination-level include for this rule.\n */\nexport interface Mapping {\n identify?: WalkerOSMapping.Value;\n}\n\n/**\n * Env — mock surface for tests. Pinterest Tag uses window.pintrk, so\n * the env extends DestinationWeb.Env (which already provides window\n * and document).\n */\nexport interface Env extends DestinationWeb.Env {\n window: {\n pintrk?: Pintrk;\n };\n}\n\nexport type Types = CoreDestination.Types<Settings, Mapping, Env, InitSettings>;\n\nexport type Destination = DestinationWeb.Destination<Types>;\nexport type Config = DestinationWeb.Config<Types>;\n\nexport interface PinterestDestination extends Destination {\n env?: Env;\n}\n\nexport type Rule = WalkerOSMapping.Rule<Mapping>;\nexport type Rules = WalkerOSMapping.Rules<Rule>;\n"],"mappings":"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","names":["a"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/types/index.ts"],"sourcesContent":["import type { DestinationWeb } from '@walkeros/web-core';\nimport { getEnv } from '@walkeros/web-core';\nimport { getMappingValue, isObject, isString } from '@walkeros/core';\nimport type { Collector, WalkerOS } from '@walkeros/core';\nimport type {\n Destination,\n EventData,\n IdentifyFields,\n Pintrk,\n Settings,\n} from './types';\n\n// Types export\nexport * as DestinationPinterest from './types';\n\nconst PINTEREST_SCRIPT_SRC = 'https://s.pinimg.com/ct/core.js';\n\n/**\n * Install the Pinterest `window.pintrk` queue shim. Mirrors the official\n * snippet - any call made before core.js loads is pushed onto `pintrk.queue`,\n * which the real script processes once it initializes. Idempotent.\n */\nfunction installPintrkQueue(env?: DestinationWeb.Env): void {\n const { window } = getEnv(env);\n const w = window as Window & { pintrk?: Pintrk };\n if (w.pintrk) return;\n const queue: unknown[][] = [];\n const fn = ((...args: unknown[]) => {\n (w.pintrk!.queue as unknown[][]).push(args);\n }) as unknown as Pintrk;\n fn.queue = queue;\n fn.version = '3.0';\n w.pintrk = fn;\n}\n\n/**\n * Insert the Pinterest core.js script tag. Async, non-blocking. Matches the\n * plausible/meta precedent.\n */\nfunction addScript(env?: DestinationWeb.Env): void {\n const { document } = getEnv(env);\n const doc = document as Document;\n const script = doc.createElement('script');\n script.src = PINTEREST_SCRIPT_SRC;\n script.async = true;\n doc.head.appendChild(script);\n}\n\n/**\n * Resolve an identify mapping value into IdentifyFields. Strict allow-list:\n * only `em` and `external_id` pass through.\n */\nasync function resolveIdentify(\n event: WalkerOS.Event,\n mappingValue: unknown,\n collector: Collector.Instance,\n): Promise<IdentifyFields | undefined> {\n if (mappingValue === undefined || mappingValue === null) return undefined;\n const resolved = await getMappingValue(\n event,\n mappingValue as Parameters<typeof getMappingValue>[1],\n { collector },\n );\n if (!isObject(resolved)) return undefined;\n const fields: IdentifyFields = {};\n const em = (resolved as Record<string, unknown>).em;\n const external_id = (resolved as Record<string, unknown>).external_id;\n if (isString(em) && em) fields.em = em;\n if (isString(external_id) && external_id) fields.external_id = external_id;\n return Object.keys(fields).length > 0 ? fields : undefined;\n}\n\n/**\n * Shallow-equal compare two IdentifyFields - used to suppress redundant\n * pintrk('set', ...) calls when the resolved identity has not changed.\n */\nfunction identifyEqual(a?: IdentifyFields, b?: IdentifyFields): boolean {\n if (!a && !b) return true;\n if (!a || !b) return false;\n return a.em === b.em && a.external_id === b.external_id;\n}\n\nexport const destinationPinterest: Destination = {\n type: 'pinterest',\n\n config: {},\n\n init({ config, env }) {\n const settings = config.settings;\n if (!settings?.apiKey) return false;\n\n const pageview = settings.pageview !== false;\n\n installPintrkQueue(env);\n if (config.loadScript !== false) addScript(env);\n\n const { window } = getEnv(env);\n const pintrk = (window as Window).pintrk as Pintrk;\n\n pintrk('load', settings.apiKey);\n if (pageview) pintrk('page');\n\n // Seed runtime state (mutation is allowed on Settings._state).\n settings._state = {\n lastIdentify: undefined,\n consentGranted: true,\n };\n\n return config;\n },\n\n async push(event, { config, rule, data, env, collector }) {\n const settings = (config.settings || {}) as Settings;\n const state = (settings._state ||= { consentGranted: true });\n if (state.consentGranted === false) return; // Consent revoked - suppress\n\n const { window } = getEnv(env);\n const pintrk = (window as Window).pintrk as Pintrk;\n if (!pintrk) return;\n\n // 1. Identity - per-event override falls back to destination-level.\n const identifyMapping =\n (rule?.settings?.identify as unknown) ?? settings.identify;\n const identify = await resolveIdentify(event, identifyMapping, collector);\n if (identify && !identifyEqual(identify, state.lastIdentify)) {\n pintrk('set', identify);\n state.lastIdentify = identify;\n }\n\n // 2. Silent - process identity (above) but suppress the default track.\n if (rule?.silent === true) return;\n\n // 3. Track\n const eventName = isString(rule?.name)\n ? (rule!.name as string)\n : event.name;\n\n // context.data contains both include-flattened and mapping.data-resolved\n // properties. Include is the bottom layer, mapping.data wins on conflict.\n const contextData: Record<string, unknown> = isObject(data)\n ? (data as Record<string, unknown>)\n : {};\n\n const eventData: EventData = {\n ...(event.id ? { event_id: event.id } : {}),\n ...contextData,\n };\n\n pintrk('track', eventName, eventData);\n },\n\n on(type, context) {\n if (type !== 'consent' || !context.data) return;\n const settings = context.config?.settings as Settings | undefined;\n if (!settings) return;\n\n const consent = context.data as WalkerOS.Consent;\n const required = context.config?.consent;\n if (!required) return;\n\n const keys = Object.keys(required);\n if (keys.length === 0) return;\n\n // Deny as soon as any required key is explicitly false. Grant only if\n // every required key is explicitly true.\n let anyDenied = false;\n let allGranted = true;\n for (const key of keys) {\n if (consent[key] === true) continue;\n if (consent[key] === false) {\n anyDenied = true;\n allGranted = false;\n } else {\n // undefined / unknown - don't flip\n allGranted = false;\n }\n }\n\n const state = (settings._state ||= { consentGranted: true });\n if (anyDenied) {\n state.consentGranted = false;\n } else if (allGranted) {\n state.consentGranted = true;\n }\n },\n};\n\nexport default destinationPinterest;\n","import type {\n Mapping as WalkerOSMapping,\n Destination as CoreDestination,\n} from '@walkeros/core';\nimport type { DestinationWeb } from '@walkeros/web-core';\n\n/**\n * Pinterest Tag global. The queue-based function created by the Pinterest\n * snippet. Before core.js loads, calls are queued on `pintrk.queue`.\n * After core.js resolves the queue, `pintrk` is replaced with the real\n * implementation. Both shapes accept the same argument signatures.\n */\nexport interface Pintrk {\n (command: 'load', tagId: string, identify?: IdentifyFields): void;\n (command: 'page'): void;\n (\n command: 'track',\n eventName: string,\n eventData?: EventData,\n callback?: (didInit: boolean, error?: unknown) => void,\n ): void;\n (command: 'set', userData: IdentifyFields): void;\n queue?: unknown[][];\n version?: string;\n}\n\ndeclare global {\n interface Window {\n pintrk?: Pintrk;\n }\n}\n\n/**\n * Pinterest standard event taxonomy. See Pinterest Tag documentation.\n * Client-side names are lowercase concatenated strings (addtocart,\n * not add_to_cart). Sending the wrong name means the event will not\n * appear correctly in Pinterest's conversion reports.\n */\nexport type StandardEventName =\n | 'pagevisit'\n | 'viewcategory'\n | 'search'\n | 'addtocart'\n | 'checkout'\n | 'watchvideo'\n | 'signup'\n | 'lead'\n | 'addpaymentinfo'\n | 'addtowishlist'\n | 'initiatecheckout'\n | 'subscribe'\n | 'viewcontent'\n | 'contact'\n | 'customizeproduct'\n | 'findlocation'\n | 'schedule'\n | 'starttrial'\n | 'submitapplication'\n | 'custom';\n\n/** Open union — any string is still passed through to pintrk. */\nexport type EventName = StandardEventName | (string & {});\n\n/**\n * Enhanced matching fields. Web destination strictly limits to the two\n * documented client-side Pinterest Tag fields. CAPI-only fields (ph, fn,\n * ln, address, country, ip, ua) belong to a future server destination\n * and are intentionally not accepted here.\n *\n * The Pinterest JS tag auto-hashes `em` with SHA-256 before transmission —\n * the destination does NOT hash.\n */\nexport interface IdentifyFields {\n em?: string;\n external_id?: string;\n}\n\n/**\n * Event data payload for pintrk('track', ...). Pinterest has a prescribed\n * set of parameter names. Common parameters across events plus an open\n * `[key: string]: unknown` for event-specific fields (search_query,\n * video_title, lead_type, opt_out_type, custom properties, etc.).\n */\nexport interface EventData {\n value?: number;\n order_quantity?: number;\n currency?: string;\n event_id?: string;\n order_id?: string;\n promo_code?: string;\n property?: string;\n product_name?: string;\n product_id?: string;\n product_category?: string;\n product_brand?: string;\n product_price?: number;\n product_quantity?: number;\n product_variant_id?: string;\n product_variant?: string;\n line_items?: LineItem[];\n search_query?: string;\n video_title?: string;\n lead_type?: string;\n opt_out_type?: 'LDP';\n [key: string]: unknown;\n}\n\nexport interface LineItem {\n product_name?: string;\n product_id?: string;\n product_category?: string;\n product_brand?: string;\n product_price?: number;\n product_quantity?: number;\n product_variant_id?: string;\n product_variant?: string;\n [key: string]: unknown;\n}\n\n/**\n * Destination-level settings.\n *\n * @property apiKey — Pinterest Tag ID (numeric string). Required. Passed\n * to pintrk('load', tagId) on init.\n * @property pageview — Fire pintrk('page') once in init after core.js\n * loads. Default true (matches Pinterest's base code convention).\n * Set false when walkerOS sources already emit page view events and\n * you would otherwise get a duplicate initial fire.\n * @property identify — walkerOS mapping value resolving to IdentifyFields.\n * Enhanced matching data for pintrk('load', tagId, data) and subsequent\n * pintrk('set', data) calls when the resolved identity changes.\n * @property include — walkerOS event sections forwarded as prefixed\n * properties in the track event data. Pinterest strongly prefers\n * explicit mapping.data over include — include is a fallback for\n * forwarding auxiliary context.\n */\nexport interface Settings {\n apiKey: string;\n pageview?: boolean;\n identify?: WalkerOSMapping.Value;\n /**\n * Runtime-only state. Not serialized to schema, not configurable by users.\n * The destination uses this to diff enhanced matching across pushes and\n * to suppress track() calls after consent revocation.\n */\n _state?: {\n lastIdentify?: IdentifyFields;\n consentGranted?: boolean;\n };\n}\n\nexport type InitSettings = Partial<Settings>;\n\n/**\n * Per-event mapping settings (on rule.settings).\n *\n * @property identify — Per-event identity override. Resolves to\n * IdentifyFields passed to pintrk('set', data).\n * @property include — Overrides destination-level include for this rule.\n */\nexport interface Mapping {\n identify?: WalkerOSMapping.Value;\n}\n\n/**\n * Env — mock surface for tests. Pinterest Tag uses window.pintrk, so\n * the env extends DestinationWeb.Env (which already provides window\n * and document).\n */\nexport interface Env extends DestinationWeb.Env {\n window: {\n pintrk?: Pintrk;\n };\n}\n\nexport type Types = CoreDestination.Types<Settings, Mapping, Env, InitSettings>;\n\nexport type Destination = DestinationWeb.Destination<Types>;\nexport type Config = DestinationWeb.Config<Types>;\n\nexport interface PinterestDestination extends Destination {\n env?: Env;\n}\n\nexport type Rule = WalkerOSMapping.Rule<Mapping>;\nexport type Rules = WalkerOSMapping.Rules<Rule>;\n"],"mappings":";AACA,SAAS,cAAc;A;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACDvB;;;ADeA,IAAM,uBAAuB;AAO7B,SAAS,mBAAmB,KAAgC;AAC1D,QAAM,EAAE,OAAO,IAAI,OAAO,GAAG;AAC7B,QAAM,IAAI;AACV,MAAI,EAAE,OAAQ;AACd,QAAM,QAAqB,CAAC;AAC5B,QAAM,MAAM,IAAI,SAAoB;AAClC,IAAC,EAAE,OAAQ,MAAsB,KAAK,IAAI;AAAA,EAC5C;AACA,KAAG,QAAQ;AACX,KAAG,UAAU;AACb,IAAE,SAAS;AACb;AAMA,SAAS,UAAU,KAAgC;AACjD,QAAM,EAAE,SAAS,IAAI,OAAO,GAAG;AAC/B,QAAM,MAAM;AACZ,QAAM,SAAS,IAAI,cAAc,QAAQ;AACzC,SAAO,MAAM;AACb,SAAO,QAAQ;AACf,MAAI,KAAK,YAAY,MAAM;AAC7B;AAMA,eAAe,gBACb,OACA,cACA,WACqC;AACrC,MAAI,iBAAiB,UAAa,iBAAiB,KAAM,QAAO;AAChE,QAAM,WAAW,MAAM;AAAA,IACrB;AAAA,IACA;AAAA,IACA,EAAE,UAAU;AAAA,EACd;AACA,MAAI,CAAC,GAAS,QAAQ,EAAG,QAAO;AAChC,QAAM,SAAyB,CAAC;AAChC,QAAM,KAAM,SAAqC;AACjD,QAAM,cAAe,SAAqC;AAC1D,MAAI,GAAS,EAAE,KAAK,GAAI,QAAO,KAAK;AACpC,MAAI,GAAS,WAAW,KAAK,YAAa,QAAO,cAAc;AAC/D,SAAO,OAAO,KAAK,MAAM,EAAE,SAAS,IAAI,SAAS;AACnD;AAMA,SAAS,cAAcA,IAAoB,GAA6B;AACtE,MAAI,CAACA,MAAK,CAAC,EAAG,QAAO;AACrB,MAAI,CAACA,MAAK,CAAC,EAAG,QAAO;AACrB,SAAOA,GAAE,OAAO,EAAE,MAAMA,GAAE,gBAAgB,EAAE;AAC9C;AAEO,IAAM,uBAAoC;AAAA,EAC/C,MAAM;AAAA,EAEN,QAAQ,CAAC;AAAA,EAET,KAAK,EAAE,QAAQ,IAAI,GAAG;AACpB,UAAM,WAAW,OAAO;AACxB,QAAI,EAAC,qCAAU,QAAQ,QAAO;AAE9B,UAAM,WAAW,SAAS,aAAa;AAEvC,uBAAmB,GAAG;AACtB,QAAI,OAAO,eAAe,MAAO,WAAU,GAAG;AAE9C,UAAM,EAAE,OAAO,IAAI,OAAO,GAAG;AAC7B,UAAM,SAAU,OAAkB;AAElC,WAAO,QAAQ,SAAS,MAAM;AAC9B,QAAI,SAAU,QAAO,MAAM;AAG3B,aAAS,SAAS;AAAA,MAChB,cAAc;AAAA,MACd,gBAAgB;AAAA,IAClB;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,KAAK,OAAO,EAAE,QAAQ,MAAM,MAAM,KAAK,UAAU,GAAG;AA/G5D;AAgHI,UAAM,WAAY,OAAO,YAAY,CAAC;AACtC,UAAM,QAAS,SAAS,WAAT,SAAS,SAAW,EAAE,gBAAgB,KAAK;AAC1D,QAAI,MAAM,mBAAmB,MAAO;AAEpC,UAAM,EAAE,OAAO,IAAI,OAAO,GAAG;AAC7B,UAAM,SAAU,OAAkB;AAClC,QAAI,CAAC,OAAQ;AAGb,UAAM,mBACH,wCAAM,aAAN,mBAAgB,aAAhB,YAAwC,SAAS;AACpD,UAAM,WAAW,MAAM,gBAAgB,OAAO,iBAAiB,SAAS;AACxE,QAAI,YAAY,CAAC,cAAc,UAAU,MAAM,YAAY,GAAG;AAC5D,aAAO,OAAO,QAAQ;AACtB,YAAM,eAAe;AAAA,IACvB;AAGA,SAAI,6BAAM,YAAW,KAAM;AAG3B,UAAM,YAAY,GAAS,6BAAM,IAAI,IAChC,KAAM,OACP,MAAM;AAIV,UAAM,cAAuC,GAAS,IAAI,IACrD,OACD,CAAC;AAEL,UAAM,YAAuB;AAAA,MAC3B,GAAI,MAAM,KAAK,EAAE,UAAU,MAAM,GAAG,IAAI,CAAC;AAAA,MACzC,GAAG;AAAA,IACL;AAEA,WAAO,SAAS,WAAW,SAAS;AAAA,EACtC;AAAA,EAEA,GAAG,MAAM,SAAS;AAvJpB;AAwJI,QAAI,SAAS,aAAa,CAAC,QAAQ,KAAM;AACzC,UAAM,YAAW,aAAQ,WAAR,mBAAgB;AACjC,QAAI,CAAC,SAAU;AAEf,UAAM,UAAU,QAAQ;AACxB,UAAM,YAAW,aAAQ,WAAR,mBAAgB;AACjC,QAAI,CAAC,SAAU;AAEf,UAAM,OAAO,OAAO,KAAK,QAAQ;AACjC,QAAI,KAAK,WAAW,EAAG;AAIvB,QAAI,YAAY;AAChB,QAAI,aAAa;AACjB,eAAW,OAAO,MAAM;AACtB,UAAI,QAAQ,GAAG,MAAM,KAAM;AAC3B,UAAI,QAAQ,GAAG,MAAM,OAAO;AAC1B,oBAAY;AACZ,qBAAa;AAAA,MACf,OAAO;AAEL,qBAAa;AAAA,MACf;AAAA,IACF;AAEA,UAAM,QAAS,SAAS,WAAT,SAAS,SAAW,EAAE,gBAAgB,KAAK;AAC1D,QAAI,WAAW;AACb,YAAM,iBAAiB;AAAA,IACzB,WAAW,YAAY;AACrB,YAAM,iBAAiB;AAAA,IACzB;AAAA,EACF;AACF;AAEA,IAAO,gBAAQ;","names":["a"]}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$meta": {
3
3
  "package": "@walkeros/web-destination-pinterest",
4
- "version": "4.0.0-next-1777463920154",
4
+ "version": "4.0.0",
5
5
  "type": "destination",
6
6
  "platform": [
7
7
  "web"
@@ -820,7 +820,7 @@
820
820
  "consent": {
821
821
  "functional": true
822
822
  },
823
- "id": "f71b5f70759087aa",
823
+ "id": "fa374b57ab371f4b",
824
824
  "trigger": "test",
825
825
  "entity": "debug",
826
826
  "action": "noise",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@walkeros/web-destination-pinterest",
3
3
  "description": "Pinterest Tag web destination for walkerOS (conversion tracking, enhanced matching, audience building)",
4
- "version": "4.0.0-next-1777463920154",
4
+ "version": "4.0.0",
5
5
  "license": "MIT",
6
6
  "main": "./dist/index.js",
7
7
  "module": "./dist/index.mjs",
@@ -37,10 +37,10 @@
37
37
  "update": "npx npm-check-updates -u && npm update"
38
38
  },
39
39
  "dependencies": {
40
- "@walkeros/web-core": "4.0.0-next-1777463920154"
40
+ "@walkeros/web-core": "4.0.0"
41
41
  },
42
42
  "devDependencies": {
43
- "@walkeros/collector": "4.0.0-next-1777463920154"
43
+ "@walkeros/collector": "4.0.0"
44
44
  },
45
45
  "repository": {
46
46
  "url": "git+https://github.com/elbwalker/walkerOS.git",