@walkeros/web-destination-linkedin 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.
- package/dist/index.browser.js +1 -1
- package/dist/index.es5.js +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/walkerOS.json +5 -5
- package/package.json +3 -3
package/dist/index.browser.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var Destination=(()=>{var n=Object.defineProperty,e=Object.getOwnPropertyDescriptor,t=Object.getOwnPropertyNames,r=Object.prototype.hasOwnProperty,i={};((e,t)=>{for(var r in t)n(e,r,{get:t[r],enumerable:!0})})(i,{DestinationLinkedIn:()=>
|
|
1
|
+
"use strict";var Destination=(()=>{var n=Object.defineProperty,e=Object.getOwnPropertyDescriptor,t=Object.getOwnPropertyNames,r=Object.prototype.hasOwnProperty,i={};((e,t)=>{for(var r in t)n(e,r,{get:t[r],enumerable:!0})})(i,{DestinationLinkedIn:()=>_,default:()=>j,destinationLinkedIn:()=>h});var o=Object.defineProperty;((n,e)=>{for(var t in e)o(n,t,{get:e[t],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 u(n){return Array.isArray(n)}function s(n){return void 0!==n}function l(n){return"number"==typeof n&&!Number.isNaN(n)}function f(n){return"object"==typeof n&&null!==n&&!u(n)&&"[object Object]"===Object.prototype.toString.call(n)}function d(n){return"string"==typeof n}function p(n,e="",t){const r=e.split(".");let i=n;for(let n=0;n<r.length;n++){const e=r[n];if("*"===e&&u(i)){const e=r.slice(n+1).join("."),o=[];for(const n of i){const r=p(n,e,t);o.push(r)}return o}if(i=i instanceof Object?i[e]:void 0,void 0===i)break}return s(i)?i:t}function v(n){return function(n){return"boolean"==typeof n}(n)||d(n)||l(n)||!s(n)||u(n)&&n.every(v)||f(n)&&Object.values(n).every(v)}function y(n){return v(n)?n:void 0}function m(n,e,t){return async function(...r){try{return await n(...r)}catch(n){if(!e)return;return await e(n)}finally{await(null==t?void 0:t())}}}async function w(n,e={},t={}){var r,i;if(!s(n))return;const o=f(n)&&n.consent||t.consent||(null==(r=t.collector)?void 0:r.consent),c=null!=(i=t.event)?i:f(n)?n:{};if(!t.collector)throw new Error("getMappingValue: context.collector is required");const a={event:c,mapping:e,collector:t.collector,logger:t.collector.logger,consent:o},l=u(e)?e:[e];for(const e of l){const t=await m(b)(n,e,{...a,mapping:e});if(s(t))return t}}async function b(n,e,t){return(u(e)?e:[e]).reduce(async(e,r)=>{const i=await e;if(i)return i;const o=d(r)?{key:r}:r;if(!Object.keys(o).length)return;const{condition:c,consent:a,fn:l,key:f,loop:v,map:g,set:_,validate:O,value:k}=o,h={...t,mapping:r};if(c&&!await m(c)(n,h))return;if(a&&!function(n,e={},t={}){const r={...e,...t},i={};let o=!n||0===Object.keys(n).length;return Object.keys(r).forEach(e=>{r[e]&&(i[e]=!0,n&&n[e]&&(o=!0))}),!!o&&i}(a,h.consent))return k;let j=s(k)?k:n;if(l&&(j=await m(l)(n,h)),f&&(j=p(n,f,k)),v){const[e,t]=v,r="this"===e?[n]:await w(n,e,h);u(r)&&(j=(await Promise.all(r.map(n=>w(n,t,h)))).filter(s))}else g?j=await Object.entries(g).reduce(async(e,[t,r])=>{const i=await e,o=await w(n,r,h);return s(o)&&(i[t]=o),i},Promise.resolve({})):_&&(j=await Promise.all(_.map(e=>b(n,e,h))));O&&!await m(O)(j,h)&&(j=void 0);const N=y(j);return s(N)?N:y(k)},Promise.resolve(void 0))}function g(n){return{window:"undefined"!=typeof window?window:globalThis.window,document:"undefined"!=typeof document?document:globalThis.document,...n}}var _={};function O(n){const{document:e}=g(n),t=e,r=t.createElement("script");r.src="https://snap.licdn.com/li.lms-analytics/insight.min.js",r.async=!0,t.head.appendChild(r)}var k,h={type:"linkedin",config:{},init({config:n,env:e}){const t=n.settings;return!!(null==t?void 0:t.apiKey)&&(function(n,e){const{window:t}=g(n),r=t;r._linkedin_partner_id=e,r._linkedin_data_partner_ids=r._linkedin_data_partner_ids||[],r._linkedin_data_partner_ids.includes(e)||r._linkedin_data_partner_ids.push(e)}(e,t.apiKey),function(n){const{window:e}=g(n),t=e;if(t.lintrk)return;const r=function(...n){(r.q=r.q||[]).push(n)};r.q=[],t.lintrk=r}(e),n.loadScript&&O(e),n)},async push(n,{rule:e,env:t,collector:r}){const{window:i}=g(t),o=i.lintrk;if(!o)return;if(!0===(null==e?void 0:e.silent))return;const c=(null==e?void 0:e.settings)||{};if(void 0===c.conversion)return;const a=function(n){if(!f(n))return;const{id:e,value:t,currency:r,eventId:i}=n,o=l(e)?e:d(e)&&""!==e&&!Number.isNaN(Number(e))?Number(e):void 0;if(void 0===o||0===o)return;const c={conversion_id:o};if(l(t))c.conversion_value=t;else if(d(t)&&""!==t){const n=Number(t);Number.isNaN(n)||(c.conversion_value=n)}return d(r)&&""!==r&&(c.currency=r),d(i)&&""!==i&&(c.event_id=i),c}(await w(n,c.conversion,{collector:r}));a&&o("track",a)},on(n,e){if("consent"!==n||!e.data)return;const t=e.data,r=e.config;if(!(null==r?void 0:r.loadScript))return;if(!0!==t.marketing)return;const{document:i}=g(e.env),o=i;(o.querySelector?o.querySelector('script[src*="snap.licdn.com"]'):null)||O(e.env)}},j=h;return k=i,((i,o,c,a)=>{if(o&&"object"==typeof o||"function"==typeof o)for(let u of t(o))r.call(i,u)||u===c||n(i,u,{get:()=>o[u],enumerable:!(a=e(o,u))||a.enumerable});return i})(n({},"__esModule",{value:!0}),k)})();
|
package/dist/index.es5.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";function _array_like_to_array(e,r){(null==r||r>e.length)&&(r=e.length);for(var t=0,n=new Array(r);t<r;t++)n[t]=e[t];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,r,t,n,o,a,i){try{var u=e[a](i),c=u.value}catch(e){return void t(e)}u.done?r(c):Promise.resolve(c).then(n,o)}function _async_to_generator(e){return function(){var r=this,t=arguments;return new Promise(function(n,o){var a=e.apply(r,t);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,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _instanceof(e,r){return null!=r&&"undefined"!=typeof Symbol&&r[Symbol.hasInstance]?!!r[Symbol.hasInstance](e):e instanceof r}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,r){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var n,o,a=[],i=!0,u=!1;try{for(t=t.call(e);!(i=(n=t.next()).done)&&(a.push(n.value),!r||a.length!==r);i=!0);}catch(e){u=!0,o=e}finally{try{i||null==t.return||t.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 r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{},n=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.forEach(function(r){_define_property(e,r,t[r])})}return e}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,n)}return t}function _object_spread_props(e,r){return r=null!=r?r:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):ownKeys(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}),e}function _sliced_to_array(e,r){return _array_with_holes(e)||_iterable_to_array_limit(e,r)||_unsupported_iterable_to_array(e,r)||_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,r){if(e){if("string"==typeof e)return _array_like_to_array(e,r);var t=Object.prototype.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(t):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_array_like_to_array(e,r):void 0}}function _ts_generator(e,r){var t,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(t)throw new TypeError("Generator is already executing.");for(;i&&(i=0,u[0]&&(a=0)),a;)try{if(t=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=r.call(e,a)}catch(e){u=[6,e],n=0}finally{t=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)},r=function(e){return void 0!==e},t=function(e){return"number"==typeof e&&!Number.isNaN(e)},n=function(r){return"object"==(void 0===r?"undefined":_type_of(r))&&null!==r&&!e(r)&&"[object Object]"===Object.prototype.toString.call(r)},o=function(e){return"string"==typeof e},a=function(e){return m(e)?e:void 0},i=function(e,r,t){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(),r?[4,r(n)]:[2];case 4:return[4,null==t?void 0:t()];case 5:return a.sent(),[7];case 6:return[2]}})})()}},u=function(t){return _async_to_generator(function(t){var o,a,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]:{},a=h.length>2&&void 0!==h[2]?h[2]:{},!r(t))return[2];c=n(t)&&t.consent||a.consent||(null===(u=a.collector)||void 0===u?void 0:u.consent),l=e(o)?o:[o],s=!0,f=!1,_=void 0,m.label=1;case 1:m.trys.push([1,6,7,8]),y=l[Symbol.iterator](),m.label=2;case 2:return(s=(d=y.next()).done)?[3,5]:(p=d.value,[4,i(g)(t,p,_object_spread_props(_object_spread({},a),{consent:c}))]);case 3:if(b=m.sent(),r(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,_=v,[3,8];case 7:try{s||null==y.return||y.return()}finally{if(f)throw _}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)},l=function(e){var r=c(e).document,t=r.createElement("script");t.src=j,t.async=!0,r.head.appendChild(t)},s=Object.defineProperty,f=Object.getOwnPropertyDescriptor,_=Object.getOwnPropertyNames,y=Object.prototype.hasOwnProperty,d={};!function(e,r){for(var t in r)s(e,t,{get:r[t],enumerable:!0})}(d,{DestinationLinkedIn:function(){return O},default:function(){return k},destinationLinkedIn:function(){return S}});var p=Object.defineProperty;!function(e,r){for(var t in r)p(e,t,{get:r[t],enumerable:!0})}({},{Level:function(){return v}});var b,v=((b=v||{})[b.ERROR=0]="ERROR",b[b.WARN=1]="WARN",b[b.INFO=2]="INFO",b[b.DEBUG=3]="DEBUG",b);function h(t){for(var n=arguments.length>2?arguments[2]:void 0,o=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:"").split("."),a=t,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,_=void 0;try{for(var y,d=a[Symbol.iterator]();!(s=(y=d.next()).done);s=!0){var p=h(y.value,c,n);l.push(p)}}catch(e){f=!0,_=e}finally{try{s||null==d.return||d.return()}finally{if(f)throw _}}return l}if(void 0===(a=_instanceof(a,Object)?a[u]:void 0))break}return r(a)?a:n}function m(a){return function(e){return"boolean"==typeof e}(a)||o(a)||t(a)||!r(a)||e(a)&&a.every(m)||n(a)&&Object.values(a).every(m)}function g(t,n){return _async_to_generator(function(t,n){var c,l,s,f=arguments;return _ts_generator(this,function(_){return l=(c=f.length>2&&void 0!==f[2]?f[2]:{}).collector,s=c.consent,[2,(e(n)?n:[n]).reduce(function(n,f){return _async_to_generator(function(){var _,y,d,p,b,v,m,w,O,j,S,k,P,N,A,I,E,D,x,R,G;return _ts_generator(this,function(q){switch(q.label){case 0:return[4,n];case 1:return(_=q.sent())?[2,_]:(y=o(f)?{key:f}:f,Object.keys(y).length?(d=y.condition,p=y.consent,b=y.fn,v=y.key,m=y.loop,w=y.map,O=y.set,j=y.validate,S=y.value,(k=d)?[4,i(d)(t,f,l)]:[3,3]):[2]);case 2:k=!q.sent(),q.label=3;case 3:return k?[2]:p&&!function(e){var r=_object_spread({},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}),t={},n=!e||0===Object.keys(e).length;return Object.keys(r).forEach(function(o){r[o]&&(t[o]=!0,e&&e[o]&&(n=!0))}),!!n&&t}(p,s)?[2,S]:(P=r(S)?S:t,b?[4,i(b)(t,f,c)]:[3,5]);case 4:P=q.sent(),q.label=5;case 5:return v&&(P=h(t,v,S)),m?(N=_sliced_to_array(m,2),A=N[0],I=N[1],"this"!==A?[3,6]:(D=[t],[3,8])):[3,11];case 6:return[4,u(t,A,c)];case 7:D=q.sent(),q.label=8;case 8:return e(E=D)?[4,Promise.all(E.map(function(e){return u(e,I,c)}))]:[3,10];case 9:P=q.sent().filter(r),q.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],i=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,u(t,i,c)];case 2:return o=l.sent(),[2,(r(o)&&(n[a]=o),n)]}})})()},Promise.resolve({}))]:[3,13];case 12:return P=q.sent(),[3,16];case 13:return(x=O)?[4,Promise.all(O.map(function(e){return g(t,e,c)}))]:[3,15];case 14:x=P=q.sent(),q.label=15;case 15:q.label=16;case 16:q.label=17;case 17:return(R=j)?[4,i(j)(P)]:[3,19];case 18:R=!q.sent(),q.label=19;case 19:return R&&(P=void 0),G=a(P),[2,r(G)?G:a(S)]}})})()},Promise.resolve(void 0))]})}).apply(this,arguments)}var w,O={},j="https://snap.licdn.com/li.lms-analytics/insight.min.js",S={type:"linkedin",config:{},init:function(e){var r=e.config,t=e.env,n=r.settings;return!!(null==n?void 0:n.apiKey)&&(function(e,r){var t=c(e).window;t._linkedin_partner_id=r,t._linkedin_data_partner_ids=t._linkedin_data_partner_ids||[],t._linkedin_data_partner_ids.includes(r)||t._linkedin_data_partner_ids.push(r)}(t,n.apiKey),function(e){var r=c(e).window;if(!r.lintrk){var t=function(){for(var e=arguments.length,r=new Array(e),n=0;n<e;n++)r[n]=arguments[n];(t.q=t.q||[]).push(r)};t.q=[],r.lintrk=t}}(t),r.loadScript&&l(t),r)},push:function(e,r){return _async_to_generator(function(e,r){var a,i,l,s,f,_,y,d;return _ts_generator(this,function(p){switch(p.label){case 0:return a=r.rule,i=r.env,l=c(i),s=l.window,(f=s.lintrk)?!0===(null==a?void 0:a.silent)||void 0===(_=(null==a?void 0:a.settings)||{}).conversion?[2]:[4,u(e,_.conversion)]:[2];case 1:return y=p.sent(),d=function(e){if(n(e)){var r=e.id,a=e.value,i=e.currency,u=e.eventId,c=t(r)?r:o(r)&&""!==r&&!Number.isNaN(Number(r))?Number(r):void 0;if(void 0!==c&&0!==c){var l={conversion_id:c};if(t(a))l.conversion_value=a;else if(o(a)&&""!==a){var s=Number(a);Number.isNaN(s)||(l.conversion_value=s)}return o(i)&&""!==i&&(l.currency=i),o(u)&&""!==u&&(l.event_id=u),l}}}(y),d?(f("track",d),[2]):[2]}})}).apply(this,arguments)},on:function(e,r){if("consent"===e&&r.data){var t=r.data,n=r.config;if((null==n?void 0:n.loadScript)&&!0===t.marketing){var o=c(r.env).document;(o.querySelector?o.querySelector('script[src*="snap.licdn.com"]'):null)||l(r.env)}}}},k=S;return w=d,function(e,r,t,n){if(r&&"object"===(void 0===r?"undefined":_type_of(r))||"function"==typeof r){var o=!0,a=!1,i=void 0;try{for(var u,c=function(){var o=u.value;y.call(e,o)||o===t||s(e,o,{get:function(){return r[o]},enumerable:!(n=f(r,o))||n.enumerable})},l=_(r)[Symbol.iterator]();!(o=(u=l.next()).done);o=!0)c()}catch(e){a=!0,i=e}finally{try{o||null==l.return||l.return()}finally{if(a)throw i}}}return e}(s({},"__esModule",{value:!0}),w)}();
|
|
1
|
+
"use strict";function _array_like_to_array(e,r){(null==r||r>e.length)&&(r=e.length);for(var t=0,n=new Array(r);t<r;t++)n[t]=e[t];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,r,t,n,o,a,i){try{var c=e[a](i),u=c.value}catch(e){return void t(e)}c.done?r(u):Promise.resolve(u).then(n,o)}function _async_to_generator(e){return function(){var r=this,t=arguments;return new Promise(function(n,o){var a=e.apply(r,t);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,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _instanceof(e,r){return null!=r&&"undefined"!=typeof Symbol&&r[Symbol.hasInstance]?!!r[Symbol.hasInstance](e):e instanceof r}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,r){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var n,o,a=[],i=!0,c=!1;try{for(t=t.call(e);!(i=(n=t.next()).done)&&(a.push(n.value),!r||a.length!==r);i=!0);}catch(e){c=!0,o=e}finally{try{i||null==t.return||t.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 r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{},n=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.forEach(function(r){_define_property(e,r,t[r])})}return e}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,n)}return t}function _object_spread_props(e,r){return r=null!=r?r:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):ownKeys(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}),e}function _sliced_to_array(e,r){return _array_with_holes(e)||_iterable_to_array_limit(e,r)||_unsupported_iterable_to_array(e,r)||_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,r){if(e){if("string"==typeof e)return _array_like_to_array(e,r);var t=Object.prototype.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(t):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_array_like_to_array(e,r):void 0}}function _ts_generator(e,r){var t,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(t)throw new TypeError("Generator is already executing.");for(;i&&(i=0,c[0]&&(a=0)),a;)try{if(t=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=r.call(e,a)}catch(e){c=[6,e],n=0}finally{t=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)},r=function(e){return void 0!==e},t=function(e){return"number"==typeof e&&!Number.isNaN(e)},n=function(r){return"object"==(void 0===r?"undefined":_type_of(r))&&null!==r&&!e(r)&&"[object Object]"===Object.prototype.toString.call(r)},o=function(e){return"string"==typeof e},a=function(e){return m(e)?e:void 0},i=function(e,r,t){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(),r?[4,r(n)]:[2];case 4:return[4,null==t?void 0:t()];case 5:return a.sent(),[7];case 6:return[2]}})})()}},c=function(t){return _async_to_generator(function(t){var o,a,c,u,l,s,f,_,y,p,d,b,v,h,m,w,O=arguments;return _ts_generator(this,function(j){switch(j.label){case 0:if(o=O.length>1&&void 0!==O[1]?O[1]:{},a=O.length>2&&void 0!==O[2]?O[2]:{},!r(t))return[2];if(l=n(t)&&t.consent||a.consent||(null===(u=a.collector)||void 0===u?void 0:u.consent),s=null!==(c=a.event)&&void 0!==c?c:n(t)?t:{},!a.collector)throw new Error("getMappingValue: context.collector is required");f={event:s,mapping:o,collector:a.collector,logger:a.collector.logger,consent:l},_=e(o)?o:[o],y=!0,p=!1,d=void 0,j.label=1;case 1:j.trys.push([1,6,7,8]),b=_[Symbol.iterator](),j.label=2;case 2:return(y=(v=b.next()).done)?[3,5]:(h=v.value,[4,i(g)(t,h,_object_spread_props(_object_spread({},f),{mapping:h}))]);case 3:if(m=j.sent(),r(m))return[2,m];j.label=4;case 4:return y=!0,[3,2];case 5:return[3,8];case 6:return w=j.sent(),p=!0,d=w,[3,8];case 7:try{y||null==b.return||b.return()}finally{if(p)throw d}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)},l=function(e){var r=u(e).document,t=r.createElement("script");t.src=j,t.async=!0,r.head.appendChild(t)},s=Object.defineProperty,f=Object.getOwnPropertyDescriptor,_=Object.getOwnPropertyNames,y=Object.prototype.hasOwnProperty,p={};!function(e,r){for(var t in r)s(e,t,{get:r[t],enumerable:!0})}(p,{DestinationLinkedIn:function(){return O},default:function(){return k},destinationLinkedIn:function(){return S}});var d=Object.defineProperty;!function(e,r){for(var t in r)d(e,t,{get:r[t],enumerable:!0})}({},{Level:function(){return v}});var b,v=((b=v||{})[b.ERROR=0]="ERROR",b[b.WARN=1]="WARN",b[b.INFO=2]="INFO",b[b.DEBUG=3]="DEBUG",b);function h(t){for(var n=arguments.length>2?arguments[2]:void 0,o=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:"").split("."),a=t,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,_=void 0;try{for(var y,p=a[Symbol.iterator]();!(s=(y=p.next()).done);s=!0){var d=h(y.value,u,n);l.push(d)}}catch(e){f=!0,_=e}finally{try{s||null==p.return||p.return()}finally{if(f)throw _}}return l}if(void 0===(a=_instanceof(a,Object)?a[c]:void 0))break}return r(a)?a:n}function m(a){return function(e){return"boolean"==typeof e}(a)||o(a)||t(a)||!r(a)||e(a)&&a.every(m)||n(a)&&Object.values(a).every(m)}function g(t,n,u){return _async_to_generator(function(){return _ts_generator(this,function(l){return[2,(e(n)?n:[n]).reduce(function(n,l){return _async_to_generator(function(){var s,f,_,y,p,d,b,v,m,w,O,j,S,k,P,N,A,I,E,D,x,R;return _ts_generator(this,function(q){switch(q.label){case 0:return[4,n];case 1:return(s=q.sent())?[2,s]:(f=o(l)?{key:l}:l,Object.keys(f).length?(_=f.condition,y=f.consent,p=f.fn,d=f.key,b=f.loop,v=f.map,m=f.set,w=f.validate,O=f.value,j=_object_spread_props(_object_spread({},u),{mapping:l}),(S=_)?[4,i(_)(t,j)]:[3,3]):[2]);case 2:S=!q.sent(),q.label=3;case 3:return S?[2]:y&&!function(e){var r=_object_spread({},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}),t={},n=!e||0===Object.keys(e).length;return Object.keys(r).forEach(function(o){r[o]&&(t[o]=!0,e&&e[o]&&(n=!0))}),!!n&&t}(y,j.consent)?[2,O]:(k=r(O)?O:t,p?[4,i(p)(t,j)]:[3,5]);case 4:k=q.sent(),q.label=5;case 5:return d&&(k=h(t,d,O)),b?(P=_sliced_to_array(b,2),N=P[0],A=P[1],"this"!==N?[3,6]:(E=[t],[3,8])):[3,11];case 6:return[4,c(t,N,j)];case 7:E=q.sent(),q.label=8;case 8:return e(I=E)?[4,Promise.all(I.map(function(e){return c(e,A,j)}))]:[3,10];case 9:k=q.sent().filter(r),q.label=10;case 10:return[3,17];case 11:return v?[4,Object.entries(v).reduce(function(e,n){var o=_sliced_to_array(n,2),a=o[0],i=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,c(t,i,j)];case 2:return o=u.sent(),[2,(r(o)&&(n[a]=o),n)]}})})()},Promise.resolve({}))]:[3,13];case 12:return k=q.sent(),[3,16];case 13:return(D=m)?[4,Promise.all(m.map(function(e){return g(t,e,j)}))]:[3,15];case 14:D=k=q.sent(),q.label=15;case 15:q.label=16;case 16:q.label=17;case 17:return(x=w)?[4,i(w)(k,j)]:[3,19];case 18:x=!q.sent(),q.label=19;case 19:return x&&(k=void 0),R=a(k),[2,r(R)?R:a(O)]}})})()},Promise.resolve(void 0))]})})()}var w,O={},j="https://snap.licdn.com/li.lms-analytics/insight.min.js",S={type:"linkedin",config:{},init:function(e){var r=e.config,t=e.env,n=r.settings;return!!(null==n?void 0:n.apiKey)&&(function(e,r){var t=u(e).window;t._linkedin_partner_id=r,t._linkedin_data_partner_ids=t._linkedin_data_partner_ids||[],t._linkedin_data_partner_ids.includes(r)||t._linkedin_data_partner_ids.push(r)}(t,n.apiKey),function(e){var r=u(e).window;if(!r.lintrk){var t=function(){for(var e=arguments.length,r=new Array(e),n=0;n<e;n++)r[n]=arguments[n];(t.q=t.q||[]).push(r)};t.q=[],r.lintrk=t}}(t),r.loadScript&&l(t),r)},push:function(e,r){return _async_to_generator(function(e,r){var a,i,l,s,f,_,y,p,d;return _ts_generator(this,function(b){switch(b.label){case 0:return a=r.rule,i=r.env,l=r.collector,s=u(i),f=s.window,(_=f.lintrk)?!0===(null==a?void 0:a.silent)||void 0===(y=(null==a?void 0:a.settings)||{}).conversion?[2]:[4,c(e,y.conversion,{collector:l})]:[2];case 1:return p=b.sent(),d=function(e){if(n(e)){var r=e.id,a=e.value,i=e.currency,c=e.eventId,u=t(r)?r:o(r)&&""!==r&&!Number.isNaN(Number(r))?Number(r):void 0;if(void 0!==u&&0!==u){var l={conversion_id:u};if(t(a))l.conversion_value=a;else if(o(a)&&""!==a){var s=Number(a);Number.isNaN(s)||(l.conversion_value=s)}return o(i)&&""!==i&&(l.currency=i),o(c)&&""!==c&&(l.event_id=c),l}}}(p),d?(_("track",d),[2]):[2]}})}).apply(this,arguments)},on:function(e,r){if("consent"===e&&r.data){var t=r.data,n=r.config;if((null==n?void 0:n.loadScript)&&!0===t.marketing){var o=u(r.env).document;(o.querySelector?o.querySelector('script[src*="snap.licdn.com"]'):null)||l(r.env)}}}},k=S;return w=p,function(e,r,t,n){if(r&&"object"===(void 0===r?"undefined":_type_of(r))||"function"==typeof r){var o=!0,a=!1,i=void 0;try{for(var c,u=function(){var o=c.value;y.call(e,o)||o===t||s(e,o,{get:function(){return r[o]},enumerable:!(n=f(r,o))||n.enumerable})},l=_(r)[Symbol.iterator]();!(o=(c=l.next()).done);o=!0)u()}catch(e){a=!0,i=e}finally{try{o||null==l.return||l.return()}finally{if(a)throw i}}}return e}(s({},"__esModule",{value:!0}),w)}();
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var n,e=Object.defineProperty,t=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.prototype.hasOwnProperty,o={};((n,t)=>{for(var r in t)e(n,r,{get:t[r],enumerable:!0})})(o,{DestinationLinkedIn:()=>k,default:()=>N,destinationLinkedIn:()=>j}),module.exports=(n=o,((n,o,c,a)=>{if(o&&"object"==typeof o||"function"==typeof o)for(let s of r(o))i.call(n,s)||s===c||e(n,s,{get:()=>o[s],enumerable:!(a=t(o,s))||a.enumerable});return n})(e({},"__esModule",{value:!0}),n));var c=Object.defineProperty;((n,e)=>{for(var t in e)c(n,t,{get:e[t],enumerable:!0})})({},{Level:()=>s});var a,s=((a=s||{})[a.ERROR=0]="ERROR",a[a.WARN=1]="WARN",a[a.INFO=2]="INFO",a[a.DEBUG=3]="DEBUG",a);function
|
|
1
|
+
"use strict";var n,e=Object.defineProperty,t=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.prototype.hasOwnProperty,o={};((n,t)=>{for(var r in t)e(n,r,{get:t[r],enumerable:!0})})(o,{DestinationLinkedIn:()=>k,default:()=>N,destinationLinkedIn:()=>j}),module.exports=(n=o,((n,o,c,a)=>{if(o&&"object"==typeof o||"function"==typeof o)for(let s of r(o))i.call(n,s)||s===c||e(n,s,{get:()=>o[s],enumerable:!(a=t(o,s))||a.enumerable});return n})(e({},"__esModule",{value:!0}),n));var c=Object.defineProperty;((n,e)=>{for(var t in e)c(n,t,{get:e[t],enumerable:!0})})({},{Level:()=>s});var a,s=((a=s||{})[a.ERROR=0]="ERROR",a[a.WARN=1]="WARN",a[a.INFO=2]="INFO",a[a.DEBUG=3]="DEBUG",a);function l(n){return Array.isArray(n)}function u(n){return void 0!==n}function f(n){return"number"==typeof n&&!Number.isNaN(n)}function d(n){return"object"==typeof n&&null!==n&&!l(n)&&"[object Object]"===Object.prototype.toString.call(n)}function v(n){return"string"==typeof n}function p(n,e="",t){const r=e.split(".");let i=n;for(let n=0;n<r.length;n++){const e=r[n];if("*"===e&&l(i)){const e=r.slice(n+1).join("."),o=[];for(const n of i){const r=p(n,e,t);o.push(r)}return o}if(i=i instanceof Object?i[e]:void 0,void 0===i)break}return u(i)?i:t}function y(n){return function(n){return"boolean"==typeof n}(n)||v(n)||f(n)||!u(n)||l(n)&&n.every(y)||d(n)&&Object.values(n).every(y)}function g(n){return y(n)?n:void 0}function m(n,e,t){return async function(...r){try{return await n(...r)}catch(n){if(!e)return;return await e(n)}finally{await(null==t?void 0:t())}}}async function b(n,e={},t={}){var r,i;if(!u(n))return;const o=d(n)&&n.consent||t.consent||(null==(r=t.collector)?void 0:r.consent),c=null!=(i=t.event)?i:d(n)?n:{};if(!t.collector)throw new Error("getMappingValue: context.collector is required");const a={event:c,mapping:e,collector:t.collector,logger:t.collector.logger,consent:o},s=l(e)?e:[e];for(const e of s){const t=await m(w)(n,e,{...a,mapping:e});if(u(t))return t}}async function w(n,e,t){return(l(e)?e:[e]).reduce(async(e,r)=>{const i=await e;if(i)return i;const o=v(r)?{key:r}:r;if(!Object.keys(o).length)return;const{condition:c,consent:a,fn:s,key:f,loop:d,map:y,set:_,validate:k,value:O}=o,j={...t,mapping:r};if(c&&!await m(c)(n,j))return;if(a&&!function(n,e={},t={}){const r={...e,...t},i={};let o=!n||0===Object.keys(n).length;return Object.keys(r).forEach(e=>{r[e]&&(i[e]=!0,n&&n[e]&&(o=!0))}),!!o&&i}(a,j.consent))return O;let N=u(O)?O:n;if(s&&(N=await m(s)(n,j)),f&&(N=p(n,f,O)),d){const[e,t]=d,r="this"===e?[n]:await b(n,e,j);l(r)&&(N=(await Promise.all(r.map(n=>b(n,t,j)))).filter(u))}else y?N=await Object.entries(y).reduce(async(e,[t,r])=>{const i=await e,o=await b(n,r,j);return u(o)&&(i[t]=o),i},Promise.resolve({})):_&&(N=await Promise.all(_.map(e=>w(n,e,j))));k&&!await m(k)(N,j)&&(N=void 0);const h=g(N);return u(h)?h:g(O)},Promise.resolve(void 0))}var _=require("@walkeros/web-core"),k={};function O(n){const{document:e}=(0,_.getEnv)(n),t=e,r=t.createElement("script");r.src="https://snap.licdn.com/li.lms-analytics/insight.min.js",r.async=!0,t.head.appendChild(r)}var j={type:"linkedin",config:{},init({config:n,env:e}){const t=n.settings;return!!(null==t?void 0:t.apiKey)&&(function(n,e){const{window:t}=(0,_.getEnv)(n),r=t;r._linkedin_partner_id=e,r._linkedin_data_partner_ids=r._linkedin_data_partner_ids||[],r._linkedin_data_partner_ids.includes(e)||r._linkedin_data_partner_ids.push(e)}(e,t.apiKey),function(n){const{window:e}=(0,_.getEnv)(n),t=e;if(t.lintrk)return;const r=function(...n){(r.q=r.q||[]).push(n)};r.q=[],t.lintrk=r}(e),n.loadScript&&O(e),n)},async push(n,{rule:e,env:t,collector:r}){const{window:i}=(0,_.getEnv)(t),o=i.lintrk;if(!o)return;if(!0===(null==e?void 0:e.silent))return;const c=(null==e?void 0:e.settings)||{};if(void 0===c.conversion)return;const a=function(n){if(!d(n))return;const{id:e,value:t,currency:r,eventId:i}=n,o=f(e)?e:v(e)&&""!==e&&!Number.isNaN(Number(e))?Number(e):void 0;if(void 0===o||0===o)return;const c={conversion_id:o};if(f(t))c.conversion_value=t;else if(v(t)&&""!==t){const n=Number(t);Number.isNaN(n)||(c.conversion_value=n)}return v(r)&&""!==r&&(c.currency=r),v(i)&&""!==i&&(c.event_id=i),c}(await b(n,c.conversion,{collector:r}));a&&o("track",a)},on(n,e){if("consent"!==n||!e.data)return;const t=e.data,r=e.config;if(!(null==r?void 0:r.loadScript))return;if(!0!==t.marketing)return;const{document:i}=(0,_.getEnv)(e.env),o=i;(o.querySelector?o.querySelector('script[src*="snap.licdn.com"]'):null)||O(e.env)}},N=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 { WalkerOS } from '@walkeros/core';\nimport { getMappingValue, isNumber, isObject, isString } from '@walkeros/core';\nimport type { DestinationWeb } from '@walkeros/web-core';\nimport { getEnv } from '@walkeros/web-core';\nimport type {\n Destination,\n Env,\n Lintrk,\n LintrkTrackData,\n Mapping,\n} from './types';\n\n// Types export\nexport * as DestinationLinkedIn from './types';\n\n/**\n * LinkedIn Insight Tag web destination.\n *\n * Loads the LinkedIn Insight Tag script from LinkedIn's CDN and forwards\n * explicit conversions via `window.lintrk('track', ...)`. Opt-in: events\n * without `mapping.settings.conversion` produce zero calls.\n *\n * See `/workspaces/developer/docs/research/linkedin-destination-guide.md`.\n */\n\nconst LINKEDIN_SCRIPT_SRC =\n 'https://snap.licdn.com/li.lms-analytics/insight.min.js';\n\n/**\n * Install the LinkedIn `window.lintrk` queue shim. Mirrors the official\n * snippet: any call made before the CDN script loads is pushed to a queue\n * the script processes once it initializes.\n *\n * Idempotent - if `lintrk` is already installed (e.g. another tag installed\n * it), leave the existing function alone.\n */\nfunction installLintrkQueue(env: Env | undefined): void {\n const { window } = getEnv(env);\n const w = window as Env['window'];\n if (w.lintrk) return;\n const lintrk = function (this: unknown, ...args: unknown[]) {\n (lintrk.q = lintrk.q || []).push(args);\n } as unknown as Lintrk;\n lintrk.q = [];\n w.lintrk = lintrk;\n}\n\nfunction setPartnerGlobals(env: Env | undefined, partnerId: string): void {\n const { window } = getEnv(env);\n const w = window as Env['window'];\n w._linkedin_partner_id = partnerId;\n w._linkedin_data_partner_ids = w._linkedin_data_partner_ids || [];\n if (!w._linkedin_data_partner_ids.includes(partnerId)) {\n w._linkedin_data_partner_ids.push(partnerId);\n }\n}\n\nfunction addScript(env: DestinationWeb.Env | undefined): void {\n const { document } = getEnv(env);\n const doc = document as Document;\n const script = doc.createElement('script');\n script.src = LINKEDIN_SCRIPT_SRC;\n script.async = true;\n doc.head.appendChild(script);\n}\n\n/**\n * Resolve the short-key walkerOS mapping shape into a LintrkTrackData object.\n *\n * Input (already resolved via getMappingValue):\n * { id, value?, currency?, eventId? }\n *\n * Output (vendor API shape):\n * { conversion_id, conversion_value?, currency?, event_id? }\n *\n * Null/falsy guards:\n * - id must resolve to a truthy number → otherwise return undefined (skip call)\n * - other fields are omitted when falsy\n */\nfunction buildLintrkData(resolved: unknown): LintrkTrackData | undefined {\n if (!isObject(resolved)) return undefined;\n\n const { id, value, currency, eventId } = resolved as {\n id?: unknown;\n value?: unknown;\n currency?: unknown;\n eventId?: unknown;\n };\n\n // id must be a truthy number (Campaign Manager conversion_id).\n // Accept numeric strings by coercion - users may supply { value: \"12345\" }.\n const numericId = isNumber(id)\n ? id\n : isString(id) && id !== '' && !Number.isNaN(Number(id))\n ? Number(id)\n : undefined;\n if (numericId === undefined || numericId === 0) return undefined;\n\n const data: LintrkTrackData = { conversion_id: numericId };\n\n // conversion_value - accept number or numeric string; omit if falsy/NaN.\n if (isNumber(value)) {\n data.conversion_value = value;\n } else if (isString(value) && value !== '') {\n const n = Number(value);\n if (!Number.isNaN(n)) data.conversion_value = n;\n }\n\n // currency - string only; omit if falsy.\n if (isString(currency) && currency !== '') {\n data.currency = currency;\n }\n\n // event_id - string only; omit if falsy.\n if (isString(eventId) && eventId !== '') {\n data.event_id = eventId;\n }\n\n return data;\n}\n\nexport const destinationLinkedIn: Destination = {\n type: 'linkedin',\n\n config: {},\n\n init({ config, env }) {\n const settings = config.settings;\n if (!settings?.apiKey) return false;\n\n setPartnerGlobals(env as Env | undefined, settings.apiKey);\n installLintrkQueue(env as Env | undefined);\n\n // Script injection is opt-in via config.loadScript (same default as\n // plausible / meta). Users who already embed the Insight Tag snippet in\n // their HTML should leave loadScript false - the destination only\n // installs the queue shim and mutates _linkedin_partner_id.\n if (config.loadScript) addScript(env);\n\n return config;\n },\n\n async push(event, { rule, env }) {\n const { window } = getEnv(env);\n const w = window as Env['window'];\n const lintrk = w.lintrk;\n if (!lintrk) return; // init must have run\n\n // Honor rule-level silent (core flag at packages/core/src/types/mapping.ts).\n if (rule?.silent === true) return;\n\n const mappingSettings = (rule?.settings || {}) as Mapping;\n if (mappingSettings.conversion === undefined) return; // opt-in: no config = no call\n\n const resolved = await getMappingValue(\n event as WalkerOS.Event,\n mappingSettings.conversion,\n );\n\n const data = buildLintrkData(resolved);\n if (!data) return;\n\n lintrk('track', data);\n },\n\n on(type, context) {\n if (type !== 'consent' || !context.data) return;\n\n // LinkedIn has no vendor consent mode. The collector's config.consent gate\n // is the sole mechanism for blocking events. This handler exists for a\n // narrow case: config.loadScript was true BUT marketing consent was\n // initially denied, so init() skipped addScript(). When consent later\n // grants marketing, we inject the script.\n const consent = context.data as WalkerOS.Consent;\n const config = context.config;\n if (!config?.loadScript) return;\n if (consent.marketing !== true) return;\n\n // Check whether the script tag is already in the DOM - addScript is not\n // idempotent, and re-injecting would load the tag twice.\n const { document } = getEnv(context.env);\n const doc = document as Document;\n const existing = doc.querySelector\n ? doc.querySelector('script[src*=\"snap.licdn.com\"]')\n : null;\n if (existing) return;\n\n addScript(context.env);\n },\n};\n\nexport default destinationLinkedIn;\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 * LinkedIn Insight Tag runtime surface.\n *\n * The Insight Tag script installs `window.lintrk` — a single function that\n * accepts exactly one tracked action: `lintrk('track', data)`.\n *\n * Before the script loads, the destination installs a queue-backed shim so\n * calls made during init are buffered and flushed once the script loads.\n * This mirrors the pattern LinkedIn's own snippet uses.\n */\nexport type LintrkAction = 'track';\n\nexport interface LintrkTrackData {\n conversion_id: number;\n conversion_value?: number;\n currency?: string;\n event_id?: string;\n}\n\nexport type Lintrk = ((action: LintrkAction, data: LintrkTrackData) => void) & {\n /** Internal queue populated before the CDN script loads. */\n q?: unknown[];\n};\n\ndeclare global {\n interface Window {\n _linkedin_partner_id?: string;\n _linkedin_data_partner_ids?: string[];\n lintrk?: Lintrk;\n }\n}\n\n/**\n * Destination-level settings.\n *\n * apiKey — the LinkedIn Partner ID (numeric string, e.g. \"123456\"), assigned\n * to `window._linkedin_partner_id` before the script loads.\n * include — event sections made available for mapping resolution. Present for\n * consistency with other destinations; has no effect at call time\n * because `lintrk()` only accepts four fixed fields. Kept so users\n * can reference section-prefixed keys in future custom mapping\n * strategies without a breaking change.\n */\nexport interface Settings {\n apiKey: string;\n}\n\nexport type InitSettings = Partial<Settings>;\n\n/**\n * Per-rule mapping settings.\n *\n * conversion — mapping value resolving to an object with short keys:\n * { id (required), value?, currency?, eventId? }\n *\n * `id` becomes `conversion_id` (number, Campaign Manager conversion rule ID).\n * Other keys translate 1:1 to the vendor parameter names.\n *\n * Events without a resolved `conversion.id` are silently ignored — LinkedIn\n * is an opt-in conversion model.\n */\nexport interface Mapping {\n conversion?: WalkerOSMapping.Value;\n}\n\n/**\n * Env — mock surface for tests and dev. The destination mutates\n * `window._linkedin_partner_id` / `window._linkedin_data_partner_ids` and\n * installs `window.lintrk` in init; tests can pre-seed `window.lintrk` with\n * a spy to skip the script injection path.\n *\n * `document` is also mocked so `addScript()` can run headlessly.\n */\nexport interface Env extends DestinationWeb.Env {\n window: {\n _linkedin_partner_id?: string;\n _linkedin_data_partner_ids?: string[];\n lintrk?: Lintrk;\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 LinkedInDestination 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;A;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,sBAAuB;;;ACHvB;;;ADyBA,IAAM,sBACJ;AAUF,SAAS,mBAAmB,KAA4B;AACtD,QAAM,EAAE,OAAO,QAAI,wBAAO,GAAG;AAC7B,QAAM,IAAI;AACV,MAAI,EAAE,OAAQ;AACd,QAAM,SAAS,YAA4B,MAAiB;AAC1D,KAAC,OAAO,IAAI,OAAO,KAAK,CAAC,GAAG,KAAK,IAAI;AAAA,EACvC;AACA,SAAO,IAAI,CAAC;AACZ,IAAE,SAAS;AACb;AAEA,SAAS,kBAAkB,KAAsB,WAAyB;AACxE,QAAM,EAAE,OAAO,QAAI,wBAAO,GAAG;AAC7B,QAAM,IAAI;AACV,IAAE,uBAAuB;AACzB,IAAE,6BAA6B,EAAE,8BAA8B,CAAC;AAChE,MAAI,CAAC,EAAE,2BAA2B,SAAS,SAAS,GAAG;AACrD,MAAE,2BAA2B,KAAK,SAAS;AAAA,EAC7C;AACF;AAEA,SAAS,UAAU,KAA2C;AAC5D,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;AAeA,SAAS,gBAAgB,UAAgD;AACvE,MAAI,CAAC,GAAS,QAAQ,EAAG,QAAO;AAEhC,QAAM,EAAE,IAAI,OAAO,UAAU,QAAQ,IAAI;AASzC,QAAM,YAAY,GAAS,EAAE,IACzB,KACA,GAAS,EAAE,KAAK,OAAO,MAAM,CAAC,OAAO,MAAM,OAAO,EAAE,CAAC,IACnD,OAAO,EAAE,IACT;AACN,MAAI,cAAc,UAAa,cAAc,EAAG,QAAO;AAEvD,QAAM,OAAwB,EAAE,eAAe,UAAU;AAGzD,MAAI,GAAS,KAAK,GAAG;AACnB,SAAK,mBAAmB;AAAA,EAC1B,WAAW,GAAS,KAAK,KAAK,UAAU,IAAI;AAC1C,UAAM,IAAI,OAAO,KAAK;AACtB,QAAI,CAAC,OAAO,MAAM,CAAC,EAAG,MAAK,mBAAmB;AAAA,EAChD;AAGA,MAAI,GAAS,QAAQ,KAAK,aAAa,IAAI;AACzC,SAAK,WAAW;AAAA,EAClB;AAGA,MAAI,GAAS,OAAO,KAAK,YAAY,IAAI;AACvC,SAAK,WAAW;AAAA,EAClB;AAEA,SAAO;AACT;AAEO,IAAM,sBAAmC;AAAA,EAC9C,MAAM;AAAA,EAEN,QAAQ,CAAC;AAAA,EAET,KAAK,EAAE,QAAQ,IAAI,GAAG;AACpB,UAAM,WAAW,OAAO;AACxB,QAAI,EAAC,qCAAU,QAAQ,QAAO;AAE9B,sBAAkB,KAAwB,SAAS,MAAM;AACzD,uBAAmB,GAAsB;AAMzC,QAAI,OAAO,WAAY,WAAU,GAAG;AAEpC,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,KAAK,OAAO,EAAE,MAAM,IAAI,GAAG;AAC/B,UAAM,EAAE,OAAO,QAAI,wBAAO,GAAG;AAC7B,UAAM,IAAI;AACV,UAAM,SAAS,EAAE;AACjB,QAAI,CAAC,OAAQ;AAGb,SAAI,6BAAM,YAAW,KAAM;AAE3B,UAAM,mBAAmB,6BAAM,aAAY,CAAC;AAC5C,QAAI,gBAAgB,eAAe,OAAW;AAE9C,UAAM,WAAW,MAAM;AAAA,MACrB;AAAA,MACA,gBAAgB;AAAA,IAClB;AAEA,UAAM,OAAO,gBAAgB,QAAQ;AACrC,QAAI,CAAC,KAAM;AAEX,WAAO,SAAS,IAAI;AAAA,EACtB;AAAA,EAEA,GAAG,MAAM,SAAS;AAChB,QAAI,SAAS,aAAa,CAAC,QAAQ,KAAM;AAOzC,UAAM,UAAU,QAAQ;AACxB,UAAM,SAAS,QAAQ;AACvB,QAAI,EAAC,iCAAQ,YAAY;AACzB,QAAI,QAAQ,cAAc,KAAM;AAIhC,UAAM,EAAE,SAAS,QAAI,wBAAO,QAAQ,GAAG;AACvC,UAAM,MAAM;AACZ,UAAM,WAAW,IAAI,gBACjB,IAAI,cAAc,+BAA+B,IACjD;AACJ,QAAI,SAAU;AAEd,cAAU,QAAQ,GAAG;AAAA,EACvB;AACF;AAEA,IAAO,gBAAQ;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/types/index.ts"],"sourcesContent":["import type { WalkerOS } from '@walkeros/core';\nimport { getMappingValue, isNumber, isObject, isString } from '@walkeros/core';\nimport type { DestinationWeb } from '@walkeros/web-core';\nimport { getEnv } from '@walkeros/web-core';\nimport type {\n Destination,\n Env,\n Lintrk,\n LintrkTrackData,\n Mapping,\n} from './types';\n\n// Types export\nexport * as DestinationLinkedIn from './types';\n\n/**\n * LinkedIn Insight Tag web destination.\n *\n * Loads the LinkedIn Insight Tag script from LinkedIn's CDN and forwards\n * explicit conversions via `window.lintrk('track', ...)`. Opt-in: events\n * without `mapping.settings.conversion` produce zero calls.\n *\n * See `/workspaces/developer/docs/research/linkedin-destination-guide.md`.\n */\n\nconst LINKEDIN_SCRIPT_SRC =\n 'https://snap.licdn.com/li.lms-analytics/insight.min.js';\n\n/**\n * Install the LinkedIn `window.lintrk` queue shim. Mirrors the official\n * snippet: any call made before the CDN script loads is pushed to a queue\n * the script processes once it initializes.\n *\n * Idempotent - if `lintrk` is already installed (e.g. another tag installed\n * it), leave the existing function alone.\n */\nfunction installLintrkQueue(env: Env | undefined): void {\n const { window } = getEnv(env);\n const w = window as Env['window'];\n if (w.lintrk) return;\n const lintrk = function (this: unknown, ...args: unknown[]) {\n (lintrk.q = lintrk.q || []).push(args);\n } as unknown as Lintrk;\n lintrk.q = [];\n w.lintrk = lintrk;\n}\n\nfunction setPartnerGlobals(env: Env | undefined, partnerId: string): void {\n const { window } = getEnv(env);\n const w = window as Env['window'];\n w._linkedin_partner_id = partnerId;\n w._linkedin_data_partner_ids = w._linkedin_data_partner_ids || [];\n if (!w._linkedin_data_partner_ids.includes(partnerId)) {\n w._linkedin_data_partner_ids.push(partnerId);\n }\n}\n\nfunction addScript(env: DestinationWeb.Env | undefined): void {\n const { document } = getEnv(env);\n const doc = document as Document;\n const script = doc.createElement('script');\n script.src = LINKEDIN_SCRIPT_SRC;\n script.async = true;\n doc.head.appendChild(script);\n}\n\n/**\n * Resolve the short-key walkerOS mapping shape into a LintrkTrackData object.\n *\n * Input (already resolved via getMappingValue):\n * { id, value?, currency?, eventId? }\n *\n * Output (vendor API shape):\n * { conversion_id, conversion_value?, currency?, event_id? }\n *\n * Null/falsy guards:\n * - id must resolve to a truthy number → otherwise return undefined (skip call)\n * - other fields are omitted when falsy\n */\nfunction buildLintrkData(resolved: unknown): LintrkTrackData | undefined {\n if (!isObject(resolved)) return undefined;\n\n const { id, value, currency, eventId } = resolved as {\n id?: unknown;\n value?: unknown;\n currency?: unknown;\n eventId?: unknown;\n };\n\n // id must be a truthy number (Campaign Manager conversion_id).\n // Accept numeric strings by coercion - users may supply { value: \"12345\" }.\n const numericId = isNumber(id)\n ? id\n : isString(id) && id !== '' && !Number.isNaN(Number(id))\n ? Number(id)\n : undefined;\n if (numericId === undefined || numericId === 0) return undefined;\n\n const data: LintrkTrackData = { conversion_id: numericId };\n\n // conversion_value - accept number or numeric string; omit if falsy/NaN.\n if (isNumber(value)) {\n data.conversion_value = value;\n } else if (isString(value) && value !== '') {\n const n = Number(value);\n if (!Number.isNaN(n)) data.conversion_value = n;\n }\n\n // currency - string only; omit if falsy.\n if (isString(currency) && currency !== '') {\n data.currency = currency;\n }\n\n // event_id - string only; omit if falsy.\n if (isString(eventId) && eventId !== '') {\n data.event_id = eventId;\n }\n\n return data;\n}\n\nexport const destinationLinkedIn: Destination = {\n type: 'linkedin',\n\n config: {},\n\n init({ config, env }) {\n const settings = config.settings;\n if (!settings?.apiKey) return false;\n\n setPartnerGlobals(env as Env | undefined, settings.apiKey);\n installLintrkQueue(env as Env | undefined);\n\n // Script injection is opt-in via config.loadScript (same default as\n // plausible / meta). Users who already embed the Insight Tag snippet in\n // their HTML should leave loadScript false - the destination only\n // installs the queue shim and mutates _linkedin_partner_id.\n if (config.loadScript) addScript(env);\n\n return config;\n },\n\n async push(event, { rule, env, collector }) {\n const { window } = getEnv(env);\n const w = window as Env['window'];\n const lintrk = w.lintrk;\n if (!lintrk) return; // init must have run\n\n // Honor rule-level silent (core flag at packages/core/src/types/mapping.ts).\n if (rule?.silent === true) return;\n\n const mappingSettings = (rule?.settings || {}) as Mapping;\n if (mappingSettings.conversion === undefined) return; // opt-in: no config = no call\n\n const resolved = await getMappingValue(\n event as WalkerOS.Event,\n mappingSettings.conversion,\n { collector },\n );\n\n const data = buildLintrkData(resolved);\n if (!data) return;\n\n lintrk('track', data);\n },\n\n on(type, context) {\n if (type !== 'consent' || !context.data) return;\n\n // LinkedIn has no vendor consent mode. The collector's config.consent gate\n // is the sole mechanism for blocking events. This handler exists for a\n // narrow case: config.loadScript was true BUT marketing consent was\n // initially denied, so init() skipped addScript(). When consent later\n // grants marketing, we inject the script.\n const consent = context.data as WalkerOS.Consent;\n const config = context.config;\n if (!config?.loadScript) return;\n if (consent.marketing !== true) return;\n\n // Check whether the script tag is already in the DOM - addScript is not\n // idempotent, and re-injecting would load the tag twice.\n const { document } = getEnv(context.env);\n const doc = document as Document;\n const existing = doc.querySelector\n ? doc.querySelector('script[src*=\"snap.licdn.com\"]')\n : null;\n if (existing) return;\n\n addScript(context.env);\n },\n};\n\nexport default destinationLinkedIn;\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 * LinkedIn Insight Tag runtime surface.\n *\n * The Insight Tag script installs `window.lintrk` — a single function that\n * accepts exactly one tracked action: `lintrk('track', data)`.\n *\n * Before the script loads, the destination installs a queue-backed shim so\n * calls made during init are buffered and flushed once the script loads.\n * This mirrors the pattern LinkedIn's own snippet uses.\n */\nexport type LintrkAction = 'track';\n\nexport interface LintrkTrackData {\n conversion_id: number;\n conversion_value?: number;\n currency?: string;\n event_id?: string;\n}\n\nexport type Lintrk = ((action: LintrkAction, data: LintrkTrackData) => void) & {\n /** Internal queue populated before the CDN script loads. */\n q?: unknown[];\n};\n\ndeclare global {\n interface Window {\n _linkedin_partner_id?: string;\n _linkedin_data_partner_ids?: string[];\n lintrk?: Lintrk;\n }\n}\n\n/**\n * Destination-level settings.\n *\n * apiKey — the LinkedIn Partner ID (numeric string, e.g. \"123456\"), assigned\n * to `window._linkedin_partner_id` before the script loads.\n * include — event sections made available for mapping resolution. Present for\n * consistency with other destinations; has no effect at call time\n * because `lintrk()` only accepts four fixed fields. Kept so users\n * can reference section-prefixed keys in future custom mapping\n * strategies without a breaking change.\n */\nexport interface Settings {\n apiKey: string;\n}\n\nexport type InitSettings = Partial<Settings>;\n\n/**\n * Per-rule mapping settings.\n *\n * conversion — mapping value resolving to an object with short keys:\n * { id (required), value?, currency?, eventId? }\n *\n * `id` becomes `conversion_id` (number, Campaign Manager conversion rule ID).\n * Other keys translate 1:1 to the vendor parameter names.\n *\n * Events without a resolved `conversion.id` are silently ignored — LinkedIn\n * is an opt-in conversion model.\n */\nexport interface Mapping {\n conversion?: WalkerOSMapping.Value;\n}\n\n/**\n * Env — mock surface for tests and dev. The destination mutates\n * `window._linkedin_partner_id` / `window._linkedin_data_partner_ids` and\n * installs `window.lintrk` in init; tests can pre-seed `window.lintrk` with\n * a spy to skip the script injection path.\n *\n * `document` is also mocked so `addScript()` can run headlessly.\n */\nexport interface Env extends DestinationWeb.Env {\n window: {\n _linkedin_partner_id?: string;\n _linkedin_data_partner_ids?: string[];\n lintrk?: Lintrk;\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 LinkedInDestination 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":[]}
|
package/dist/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var n=Object.defineProperty;((t,e)=>{for(var r in e)n(t,r,{get:e[r],enumerable:!0})})({},{Level:()=>e});var t,e=((t=e||{})[t.ERROR=0]="ERROR",t[t.WARN=1]="WARN",t[t.INFO=2]="INFO",t[t.DEBUG=3]="DEBUG",t);function r(n){return Array.isArray(n)}function i(n){return void 0!==n}function o(n){return"number"==typeof n&&!Number.isNaN(n)}function c(n){return"object"==typeof n&&null!==n&&!r(n)&&"[object Object]"===Object.prototype.toString.call(n)}function a(n){return"string"==typeof n}function s(n,t="",e){const o=t.split(".");let c=n;for(let n=0;n<o.length;n++){const t=o[n];if("*"===t&&r(c)){const t=o.slice(n+1).join("."),r=[];for(const n of c){const i=s(n,t,e);r.push(i)}return r}if(c=c instanceof Object?c[t]:void 0,void 0===c)break}return i(c)?c:e}function
|
|
1
|
+
var n=Object.defineProperty;((t,e)=>{for(var r in e)n(t,r,{get:e[r],enumerable:!0})})({},{Level:()=>e});var t,e=((t=e||{})[t.ERROR=0]="ERROR",t[t.WARN=1]="WARN",t[t.INFO=2]="INFO",t[t.DEBUG=3]="DEBUG",t);function r(n){return Array.isArray(n)}function i(n){return void 0!==n}function o(n){return"number"==typeof n&&!Number.isNaN(n)}function c(n){return"object"==typeof n&&null!==n&&!r(n)&&"[object Object]"===Object.prototype.toString.call(n)}function a(n){return"string"==typeof n}function s(n,t="",e){const o=t.split(".");let c=n;for(let n=0;n<o.length;n++){const t=o[n];if("*"===t&&r(c)){const t=o.slice(n+1).join("."),r=[];for(const n of c){const i=s(n,t,e);r.push(i)}return r}if(c=c instanceof Object?c[t]:void 0,void 0===c)break}return i(c)?c:e}function l(n){return function(n){return"boolean"==typeof n}(n)||a(n)||o(n)||!i(n)||r(n)&&n.every(l)||c(n)&&Object.values(n).every(l)}function u(n){return l(n)?n:void 0}function f(n,t,e){return async function(...r){try{return await n(...r)}catch(n){if(!t)return;return await t(n)}finally{await(null==e?void 0:e())}}}async function d(n,t={},e={}){var o,a;if(!i(n))return;const s=c(n)&&n.consent||e.consent||(null==(o=e.collector)?void 0:o.consent),l=null!=(a=e.event)?a:c(n)?n:{};if(!e.collector)throw new Error("getMappingValue: context.collector is required");const u={event:l,mapping:t,collector:e.collector,logger:e.collector.logger,consent:s},d=r(t)?t:[t];for(const t of d){const e=await f(v)(n,t,{...u,mapping:t});if(i(e))return e}}async function v(n,t,e){return(r(t)?t:[t]).reduce(async(t,o)=>{const c=await t;if(c)return c;const l=a(o)?{key:o}:o;if(!Object.keys(l).length)return;const{condition:p,consent:y,fn:m,key:w,loop:_,map:b,set:g,validate:k,value:N}=l,h={...e,mapping:o};if(p&&!await f(p)(n,h))return;if(y&&!function(n,t={},e={}){const r={...t,...e},i={};let o=!n||0===Object.keys(n).length;return Object.keys(r).forEach(t=>{r[t]&&(i[t]=!0,n&&n[t]&&(o=!0))}),!!o&&i}(y,h.consent))return N;let j=i(N)?N:n;if(m&&(j=await f(m)(n,h)),w&&(j=s(n,w,N)),_){const[t,e]=_,o="this"===t?[n]:await d(n,t,h);r(o)&&(j=(await Promise.all(o.map(n=>d(n,e,h)))).filter(i))}else b?j=await Object.entries(b).reduce(async(t,[e,r])=>{const o=await t,c=await d(n,r,h);return i(c)&&(o[e]=c),o},Promise.resolve({})):g&&(j=await Promise.all(g.map(t=>v(n,t,h))));k&&!await f(k)(j,h)&&(j=void 0);const O=u(j);return i(O)?O:u(N)},Promise.resolve(void 0))}import{getEnv as p}from"@walkeros/web-core";var y={};function m(n){const{document:t}=p(n),e=t,r=e.createElement("script");r.src="https://snap.licdn.com/li.lms-analytics/insight.min.js",r.async=!0,e.head.appendChild(r)}var w={type:"linkedin",config:{},init({config:n,env:t}){const e=n.settings;return!!(null==e?void 0:e.apiKey)&&(function(n,t){const{window:e}=p(n),r=e;r._linkedin_partner_id=t,r._linkedin_data_partner_ids=r._linkedin_data_partner_ids||[],r._linkedin_data_partner_ids.includes(t)||r._linkedin_data_partner_ids.push(t)}(t,e.apiKey),function(n){const{window:t}=p(n),e=t;if(e.lintrk)return;const r=function(...n){(r.q=r.q||[]).push(n)};r.q=[],e.lintrk=r}(t),n.loadScript&&m(t),n)},async push(n,{rule:t,env:e,collector:r}){const{window:i}=p(e),s=i.lintrk;if(!s)return;if(!0===(null==t?void 0:t.silent))return;const l=(null==t?void 0:t.settings)||{};if(void 0===l.conversion)return;const u=function(n){if(!c(n))return;const{id:t,value:e,currency:r,eventId:i}=n,s=o(t)?t:a(t)&&""!==t&&!Number.isNaN(Number(t))?Number(t):void 0;if(void 0===s||0===s)return;const l={conversion_id:s};if(o(e))l.conversion_value=e;else if(a(e)&&""!==e){const n=Number(e);Number.isNaN(n)||(l.conversion_value=n)}return a(r)&&""!==r&&(l.currency=r),a(i)&&""!==i&&(l.event_id=i),l}(await d(n,l.conversion,{collector:r}));u&&s("track",u)},on(n,t){if("consent"!==n||!t.data)return;const e=t.data,r=t.config;if(!(null==r?void 0:r.loadScript))return;if(!0!==e.marketing)return;const{document:i}=p(t.env),o=i;(o.querySelector?o.querySelector('script[src*="snap.licdn.com"]'):null)||m(t.env)}},_=w;export{y as DestinationLinkedIn,_ as default,w as destinationLinkedIn};//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/types/index.ts"],"sourcesContent":["import type { WalkerOS } from '@walkeros/core';\nimport { getMappingValue, isNumber, isObject, isString } from '@walkeros/core';\nimport type { DestinationWeb } from '@walkeros/web-core';\nimport { getEnv } from '@walkeros/web-core';\nimport type {\n Destination,\n Env,\n Lintrk,\n LintrkTrackData,\n Mapping,\n} from './types';\n\n// Types export\nexport * as DestinationLinkedIn from './types';\n\n/**\n * LinkedIn Insight Tag web destination.\n *\n * Loads the LinkedIn Insight Tag script from LinkedIn's CDN and forwards\n * explicit conversions via `window.lintrk('track', ...)`. Opt-in: events\n * without `mapping.settings.conversion` produce zero calls.\n *\n * See `/workspaces/developer/docs/research/linkedin-destination-guide.md`.\n */\n\nconst LINKEDIN_SCRIPT_SRC =\n 'https://snap.licdn.com/li.lms-analytics/insight.min.js';\n\n/**\n * Install the LinkedIn `window.lintrk` queue shim. Mirrors the official\n * snippet: any call made before the CDN script loads is pushed to a queue\n * the script processes once it initializes.\n *\n * Idempotent - if `lintrk` is already installed (e.g. another tag installed\n * it), leave the existing function alone.\n */\nfunction installLintrkQueue(env: Env | undefined): void {\n const { window } = getEnv(env);\n const w = window as Env['window'];\n if (w.lintrk) return;\n const lintrk = function (this: unknown, ...args: unknown[]) {\n (lintrk.q = lintrk.q || []).push(args);\n } as unknown as Lintrk;\n lintrk.q = [];\n w.lintrk = lintrk;\n}\n\nfunction setPartnerGlobals(env: Env | undefined, partnerId: string): void {\n const { window } = getEnv(env);\n const w = window as Env['window'];\n w._linkedin_partner_id = partnerId;\n w._linkedin_data_partner_ids = w._linkedin_data_partner_ids || [];\n if (!w._linkedin_data_partner_ids.includes(partnerId)) {\n w._linkedin_data_partner_ids.push(partnerId);\n }\n}\n\nfunction addScript(env: DestinationWeb.Env | undefined): void {\n const { document } = getEnv(env);\n const doc = document as Document;\n const script = doc.createElement('script');\n script.src = LINKEDIN_SCRIPT_SRC;\n script.async = true;\n doc.head.appendChild(script);\n}\n\n/**\n * Resolve the short-key walkerOS mapping shape into a LintrkTrackData object.\n *\n * Input (already resolved via getMappingValue):\n * { id, value?, currency?, eventId? }\n *\n * Output (vendor API shape):\n * { conversion_id, conversion_value?, currency?, event_id? }\n *\n * Null/falsy guards:\n * - id must resolve to a truthy number → otherwise return undefined (skip call)\n * - other fields are omitted when falsy\n */\nfunction buildLintrkData(resolved: unknown): LintrkTrackData | undefined {\n if (!isObject(resolved)) return undefined;\n\n const { id, value, currency, eventId } = resolved as {\n id?: unknown;\n value?: unknown;\n currency?: unknown;\n eventId?: unknown;\n };\n\n // id must be a truthy number (Campaign Manager conversion_id).\n // Accept numeric strings by coercion - users may supply { value: \"12345\" }.\n const numericId = isNumber(id)\n ? id\n : isString(id) && id !== '' && !Number.isNaN(Number(id))\n ? Number(id)\n : undefined;\n if (numericId === undefined || numericId === 0) return undefined;\n\n const data: LintrkTrackData = { conversion_id: numericId };\n\n // conversion_value - accept number or numeric string; omit if falsy/NaN.\n if (isNumber(value)) {\n data.conversion_value = value;\n } else if (isString(value) && value !== '') {\n const n = Number(value);\n if (!Number.isNaN(n)) data.conversion_value = n;\n }\n\n // currency - string only; omit if falsy.\n if (isString(currency) && currency !== '') {\n data.currency = currency;\n }\n\n // event_id - string only; omit if falsy.\n if (isString(eventId) && eventId !== '') {\n data.event_id = eventId;\n }\n\n return data;\n}\n\nexport const destinationLinkedIn: Destination = {\n type: 'linkedin',\n\n config: {},\n\n init({ config, env }) {\n const settings = config.settings;\n if (!settings?.apiKey) return false;\n\n setPartnerGlobals(env as Env | undefined, settings.apiKey);\n installLintrkQueue(env as Env | undefined);\n\n // Script injection is opt-in via config.loadScript (same default as\n // plausible / meta). Users who already embed the Insight Tag snippet in\n // their HTML should leave loadScript false - the destination only\n // installs the queue shim and mutates _linkedin_partner_id.\n if (config.loadScript) addScript(env);\n\n return config;\n },\n\n async push(event, { rule, env }) {\n const { window } = getEnv(env);\n const w = window as Env['window'];\n const lintrk = w.lintrk;\n if (!lintrk) return; // init must have run\n\n // Honor rule-level silent (core flag at packages/core/src/types/mapping.ts).\n if (rule?.silent === true) return;\n\n const mappingSettings = (rule?.settings || {}) as Mapping;\n if (mappingSettings.conversion === undefined) return; // opt-in: no config = no call\n\n const resolved = await getMappingValue(\n event as WalkerOS.Event,\n mappingSettings.conversion,\n );\n\n const data = buildLintrkData(resolved);\n if (!data) return;\n\n lintrk('track', data);\n },\n\n on(type, context) {\n if (type !== 'consent' || !context.data) return;\n\n // LinkedIn has no vendor consent mode. The collector's config.consent gate\n // is the sole mechanism for blocking events. This handler exists for a\n // narrow case: config.loadScript was true BUT marketing consent was\n // initially denied, so init() skipped addScript(). When consent later\n // grants marketing, we inject the script.\n const consent = context.data as WalkerOS.Consent;\n const config = context.config;\n if (!config?.loadScript) return;\n if (consent.marketing !== true) return;\n\n // Check whether the script tag is already in the DOM - addScript is not\n // idempotent, and re-injecting would load the tag twice.\n const { document } = getEnv(context.env);\n const doc = document as Document;\n const existing = doc.querySelector\n ? doc.querySelector('script[src*=\"snap.licdn.com\"]')\n : null;\n if (existing) return;\n\n addScript(context.env);\n },\n};\n\nexport default destinationLinkedIn;\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 * LinkedIn Insight Tag runtime surface.\n *\n * The Insight Tag script installs `window.lintrk` — a single function that\n * accepts exactly one tracked action: `lintrk('track', data)`.\n *\n * Before the script loads, the destination installs a queue-backed shim so\n * calls made during init are buffered and flushed once the script loads.\n * This mirrors the pattern LinkedIn's own snippet uses.\n */\nexport type LintrkAction = 'track';\n\nexport interface LintrkTrackData {\n conversion_id: number;\n conversion_value?: number;\n currency?: string;\n event_id?: string;\n}\n\nexport type Lintrk = ((action: LintrkAction, data: LintrkTrackData) => void) & {\n /** Internal queue populated before the CDN script loads. */\n q?: unknown[];\n};\n\ndeclare global {\n interface Window {\n _linkedin_partner_id?: string;\n _linkedin_data_partner_ids?: string[];\n lintrk?: Lintrk;\n }\n}\n\n/**\n * Destination-level settings.\n *\n * apiKey — the LinkedIn Partner ID (numeric string, e.g. \"123456\"), assigned\n * to `window._linkedin_partner_id` before the script loads.\n * include — event sections made available for mapping resolution. Present for\n * consistency with other destinations; has no effect at call time\n * because `lintrk()` only accepts four fixed fields. Kept so users\n * can reference section-prefixed keys in future custom mapping\n * strategies without a breaking change.\n */\nexport interface Settings {\n apiKey: string;\n}\n\nexport type InitSettings = Partial<Settings>;\n\n/**\n * Per-rule mapping settings.\n *\n * conversion — mapping value resolving to an object with short keys:\n * { id (required), value?, currency?, eventId? }\n *\n * `id` becomes `conversion_id` (number, Campaign Manager conversion rule ID).\n * Other keys translate 1:1 to the vendor parameter names.\n *\n * Events without a resolved `conversion.id` are silently ignored — LinkedIn\n * is an opt-in conversion model.\n */\nexport interface Mapping {\n conversion?: WalkerOSMapping.Value;\n}\n\n/**\n * Env — mock surface for tests and dev. The destination mutates\n * `window._linkedin_partner_id` / `window._linkedin_data_partner_ids` and\n * installs `window.lintrk` in init; tests can pre-seed `window.lintrk` with\n * a spy to skip the script injection path.\n *\n * `document` is also mocked so `addScript()` can run headlessly.\n */\nexport interface Env extends DestinationWeb.Env {\n window: {\n _linkedin_partner_id?: string;\n _linkedin_data_partner_ids?: string[];\n lintrk?: Lintrk;\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 LinkedInDestination 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":[]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/types/index.ts"],"sourcesContent":["import type { WalkerOS } from '@walkeros/core';\nimport { getMappingValue, isNumber, isObject, isString } from '@walkeros/core';\nimport type { DestinationWeb } from '@walkeros/web-core';\nimport { getEnv } from '@walkeros/web-core';\nimport type {\n Destination,\n Env,\n Lintrk,\n LintrkTrackData,\n Mapping,\n} from './types';\n\n// Types export\nexport * as DestinationLinkedIn from './types';\n\n/**\n * LinkedIn Insight Tag web destination.\n *\n * Loads the LinkedIn Insight Tag script from LinkedIn's CDN and forwards\n * explicit conversions via `window.lintrk('track', ...)`. Opt-in: events\n * without `mapping.settings.conversion` produce zero calls.\n *\n * See `/workspaces/developer/docs/research/linkedin-destination-guide.md`.\n */\n\nconst LINKEDIN_SCRIPT_SRC =\n 'https://snap.licdn.com/li.lms-analytics/insight.min.js';\n\n/**\n * Install the LinkedIn `window.lintrk` queue shim. Mirrors the official\n * snippet: any call made before the CDN script loads is pushed to a queue\n * the script processes once it initializes.\n *\n * Idempotent - if `lintrk` is already installed (e.g. another tag installed\n * it), leave the existing function alone.\n */\nfunction installLintrkQueue(env: Env | undefined): void {\n const { window } = getEnv(env);\n const w = window as Env['window'];\n if (w.lintrk) return;\n const lintrk = function (this: unknown, ...args: unknown[]) {\n (lintrk.q = lintrk.q || []).push(args);\n } as unknown as Lintrk;\n lintrk.q = [];\n w.lintrk = lintrk;\n}\n\nfunction setPartnerGlobals(env: Env | undefined, partnerId: string): void {\n const { window } = getEnv(env);\n const w = window as Env['window'];\n w._linkedin_partner_id = partnerId;\n w._linkedin_data_partner_ids = w._linkedin_data_partner_ids || [];\n if (!w._linkedin_data_partner_ids.includes(partnerId)) {\n w._linkedin_data_partner_ids.push(partnerId);\n }\n}\n\nfunction addScript(env: DestinationWeb.Env | undefined): void {\n const { document } = getEnv(env);\n const doc = document as Document;\n const script = doc.createElement('script');\n script.src = LINKEDIN_SCRIPT_SRC;\n script.async = true;\n doc.head.appendChild(script);\n}\n\n/**\n * Resolve the short-key walkerOS mapping shape into a LintrkTrackData object.\n *\n * Input (already resolved via getMappingValue):\n * { id, value?, currency?, eventId? }\n *\n * Output (vendor API shape):\n * { conversion_id, conversion_value?, currency?, event_id? }\n *\n * Null/falsy guards:\n * - id must resolve to a truthy number → otherwise return undefined (skip call)\n * - other fields are omitted when falsy\n */\nfunction buildLintrkData(resolved: unknown): LintrkTrackData | undefined {\n if (!isObject(resolved)) return undefined;\n\n const { id, value, currency, eventId } = resolved as {\n id?: unknown;\n value?: unknown;\n currency?: unknown;\n eventId?: unknown;\n };\n\n // id must be a truthy number (Campaign Manager conversion_id).\n // Accept numeric strings by coercion - users may supply { value: \"12345\" }.\n const numericId = isNumber(id)\n ? id\n : isString(id) && id !== '' && !Number.isNaN(Number(id))\n ? Number(id)\n : undefined;\n if (numericId === undefined || numericId === 0) return undefined;\n\n const data: LintrkTrackData = { conversion_id: numericId };\n\n // conversion_value - accept number or numeric string; omit if falsy/NaN.\n if (isNumber(value)) {\n data.conversion_value = value;\n } else if (isString(value) && value !== '') {\n const n = Number(value);\n if (!Number.isNaN(n)) data.conversion_value = n;\n }\n\n // currency - string only; omit if falsy.\n if (isString(currency) && currency !== '') {\n data.currency = currency;\n }\n\n // event_id - string only; omit if falsy.\n if (isString(eventId) && eventId !== '') {\n data.event_id = eventId;\n }\n\n return data;\n}\n\nexport const destinationLinkedIn: Destination = {\n type: 'linkedin',\n\n config: {},\n\n init({ config, env }) {\n const settings = config.settings;\n if (!settings?.apiKey) return false;\n\n setPartnerGlobals(env as Env | undefined, settings.apiKey);\n installLintrkQueue(env as Env | undefined);\n\n // Script injection is opt-in via config.loadScript (same default as\n // plausible / meta). Users who already embed the Insight Tag snippet in\n // their HTML should leave loadScript false - the destination only\n // installs the queue shim and mutates _linkedin_partner_id.\n if (config.loadScript) addScript(env);\n\n return config;\n },\n\n async push(event, { rule, env, collector }) {\n const { window } = getEnv(env);\n const w = window as Env['window'];\n const lintrk = w.lintrk;\n if (!lintrk) return; // init must have run\n\n // Honor rule-level silent (core flag at packages/core/src/types/mapping.ts).\n if (rule?.silent === true) return;\n\n const mappingSettings = (rule?.settings || {}) as Mapping;\n if (mappingSettings.conversion === undefined) return; // opt-in: no config = no call\n\n const resolved = await getMappingValue(\n event as WalkerOS.Event,\n mappingSettings.conversion,\n { collector },\n );\n\n const data = buildLintrkData(resolved);\n if (!data) return;\n\n lintrk('track', data);\n },\n\n on(type, context) {\n if (type !== 'consent' || !context.data) return;\n\n // LinkedIn has no vendor consent mode. The collector's config.consent gate\n // is the sole mechanism for blocking events. This handler exists for a\n // narrow case: config.loadScript was true BUT marketing consent was\n // initially denied, so init() skipped addScript(). When consent later\n // grants marketing, we inject the script.\n const consent = context.data as WalkerOS.Consent;\n const config = context.config;\n if (!config?.loadScript) return;\n if (consent.marketing !== true) return;\n\n // Check whether the script tag is already in the DOM - addScript is not\n // idempotent, and re-injecting would load the tag twice.\n const { document } = getEnv(context.env);\n const doc = document as Document;\n const existing = doc.querySelector\n ? doc.querySelector('script[src*=\"snap.licdn.com\"]')\n : null;\n if (existing) return;\n\n addScript(context.env);\n },\n};\n\nexport default destinationLinkedIn;\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 * LinkedIn Insight Tag runtime surface.\n *\n * The Insight Tag script installs `window.lintrk` — a single function that\n * accepts exactly one tracked action: `lintrk('track', data)`.\n *\n * Before the script loads, the destination installs a queue-backed shim so\n * calls made during init are buffered and flushed once the script loads.\n * This mirrors the pattern LinkedIn's own snippet uses.\n */\nexport type LintrkAction = 'track';\n\nexport interface LintrkTrackData {\n conversion_id: number;\n conversion_value?: number;\n currency?: string;\n event_id?: string;\n}\n\nexport type Lintrk = ((action: LintrkAction, data: LintrkTrackData) => void) & {\n /** Internal queue populated before the CDN script loads. */\n q?: unknown[];\n};\n\ndeclare global {\n interface Window {\n _linkedin_partner_id?: string;\n _linkedin_data_partner_ids?: string[];\n lintrk?: Lintrk;\n }\n}\n\n/**\n * Destination-level settings.\n *\n * apiKey — the LinkedIn Partner ID (numeric string, e.g. \"123456\"), assigned\n * to `window._linkedin_partner_id` before the script loads.\n * include — event sections made available for mapping resolution. Present for\n * consistency with other destinations; has no effect at call time\n * because `lintrk()` only accepts four fixed fields. Kept so users\n * can reference section-prefixed keys in future custom mapping\n * strategies without a breaking change.\n */\nexport interface Settings {\n apiKey: string;\n}\n\nexport type InitSettings = Partial<Settings>;\n\n/**\n * Per-rule mapping settings.\n *\n * conversion — mapping value resolving to an object with short keys:\n * { id (required), value?, currency?, eventId? }\n *\n * `id` becomes `conversion_id` (number, Campaign Manager conversion rule ID).\n * Other keys translate 1:1 to the vendor parameter names.\n *\n * Events without a resolved `conversion.id` are silently ignored — LinkedIn\n * is an opt-in conversion model.\n */\nexport interface Mapping {\n conversion?: WalkerOSMapping.Value;\n}\n\n/**\n * Env — mock surface for tests and dev. The destination mutates\n * `window._linkedin_partner_id` / `window._linkedin_data_partner_ids` and\n * installs `window.lintrk` in init; tests can pre-seed `window.lintrk` with\n * a spy to skip the script injection path.\n *\n * `document` is also mocked so `addScript()` can run headlessly.\n */\nexport interface Env extends DestinationWeb.Env {\n window: {\n _linkedin_partner_id?: string;\n _linkedin_data_partner_ids?: string[];\n lintrk?: Lintrk;\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 LinkedInDestination 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":[]}
|
package/dist/walkerOS.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$meta": {
|
|
3
3
|
"package": "@walkeros/web-destination-linkedin",
|
|
4
|
-
"version": "4.0.0
|
|
4
|
+
"version": "4.0.0",
|
|
5
5
|
"type": "destination",
|
|
6
6
|
"platform": [
|
|
7
7
|
"web"
|
|
@@ -126,7 +126,7 @@
|
|
|
126
126
|
"consent": {
|
|
127
127
|
"functional": true
|
|
128
128
|
},
|
|
129
|
-
"id": "
|
|
129
|
+
"id": "6576e4c46e04bf24",
|
|
130
130
|
"trigger": "test",
|
|
131
131
|
"entity": "form",
|
|
132
132
|
"action": "submit",
|
|
@@ -270,7 +270,7 @@
|
|
|
270
270
|
"consent": {
|
|
271
271
|
"functional": true
|
|
272
272
|
},
|
|
273
|
-
"id": "
|
|
273
|
+
"id": "7c1c225bfea0f673",
|
|
274
274
|
"trigger": "test",
|
|
275
275
|
"entity": "form",
|
|
276
276
|
"action": "submit",
|
|
@@ -645,7 +645,7 @@
|
|
|
645
645
|
"consent": {
|
|
646
646
|
"functional": true
|
|
647
647
|
},
|
|
648
|
-
"id": "
|
|
648
|
+
"id": "105c861735ae28c2",
|
|
649
649
|
"trigger": "test",
|
|
650
650
|
"entity": "form",
|
|
651
651
|
"action": "submit",
|
|
@@ -709,7 +709,7 @@
|
|
|
709
709
|
"consent": {
|
|
710
710
|
"functional": true
|
|
711
711
|
},
|
|
712
|
-
"id": "
|
|
712
|
+
"id": "03a38148c7e64bab",
|
|
713
713
|
"trigger": "load",
|
|
714
714
|
"entity": "product",
|
|
715
715
|
"action": "view",
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@walkeros/web-destination-linkedin",
|
|
3
3
|
"description": "LinkedIn Insight Tag web destination for walkerOS (conversion tracking, retargeting, demographic insights)",
|
|
4
|
-
"version": "4.0.0
|
|
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
|
|
40
|
+
"@walkeros/web-core": "4.0.0"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
|
-
"@walkeros/collector": "4.0.0
|
|
43
|
+
"@walkeros/collector": "4.0.0"
|
|
44
44
|
},
|
|
45
45
|
"repository": {
|
|
46
46
|
"url": "git+https://github.com/elbwalker/walkerOS.git",
|