@jenil_121/ga-bridge 1.0.3 → 1.0.6
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/README.md +2 -2
- package/dist/twinalyze-ga-bridge.min.js +26 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -9,7 +9,7 @@ This allows you to use Google Analytics as the source of truth and mirror the sa
|
|
|
9
9
|
## 🚀 Features
|
|
10
10
|
|
|
11
11
|
- Forward GA events (`gtag('event', ...)`) to Twinalyze
|
|
12
|
-
- Uses **GA callback-based forwarding**
|
|
12
|
+
- Uses **GA callback-based forwarding**
|
|
13
13
|
- Ensures:
|
|
14
14
|
- If GA event succeeds → Twinalyze receives it
|
|
15
15
|
- If GA event fails → Twinalyze does NOT receive it
|
|
@@ -25,4 +25,4 @@ This allows you to use Google Analytics as the source of truth and mirror the sa
|
|
|
25
25
|
### CDN (Recommended)
|
|
26
26
|
|
|
27
27
|
```html
|
|
28
|
-
<script src="https://cdn.jsdelivr.net/npm/@jenil_121/ga-bridge@1.0.
|
|
28
|
+
<script src="https://cdn.jsdelivr.net/npm/@jenil_121/ga-bridge@1.0.5/dist/twinalyze-ga-bridge.min.js"></script>
|
|
@@ -1 +1,26 @@
|
|
|
1
|
-
!function(e){"use strict";var t={debug:!0,forwardOnlyValidEvents:!0,addBridgeFlag:!0,bridgeFlagKey:"__from_bridge",installWaitMs:1500,eventTimeout:2e3},n="__gaTwinalyzeBridgeInstalled",o=/^[A-Za-z][A-Za-z0-9_]{0,39}$/;function i(){if(!e.__TWINALYZE_GA_BRIDGE_DEBUG__)return;var t=Array.prototype.slice.call(arguments);t.unshift("[Twinalyze GA Bridge]"),console.log.apply(console,t)}function r(){var t=Array.prototype.slice.call(arguments);t.unshift("[Twinalyze GA Bridge]"),console.warn.apply(console,t)}function a(e){return e&&"object"==typeof e&&!Array.isArray(e)}function l(e){return"string"==typeof e&&o.test(e)}function g(){return e.twinalyze||e.TwinalyzeAnalytics||null}function c(){var n=e.TwinalyzeGABridgeConfig||{},o={};for(var i in t)o[i]=t[i];for(var r in n)o[r]=n[r];return o}function d(){var t=c();if(e.__TWINALYZE_GA_BRIDGE_DEBUG__=!!t.debug,e[n])return void i("already installed");if("function"!=typeof e.gtag)return void r("gtag not found");var o=g();if(!o||"function"!=typeof o.track)return void r("twinalyze.track not found");var d=e.gtag;e.gtag=function(){var n=Array.prototype.slice.call(arguments);if(i("gtag call:",n),"event"===n[0]){var o=n[1],u=a(n[2])?Object.assign({},n[2]):{};if(t.forwardOnlyValidEvents&&!l(o))return r("invalid GA event name:",o),d.apply(e,n);var p=u.event_callback;return u.event_timeout="number"==typeof u.event_timeout?u.event_timeout:t.eventTimeout,u.event_callback=function(){i("GA callback fired:",o);try{"function"==typeof p&&p()}catch(e){console.error("[Twinalyze GA Bridge] old callback error",e)}try{var n=Object.assign({},u);if(delete n.event_callback,delete n.event_timeout,t.addBridgeFlag&&(n[t.bridgeFlagKey]=!0),!(s=g())||"function"!=typeof s.track)return void r("twinalyze.track missing during forward:",o);i("forwarding event:",o,n),s.track(o,n)}catch(e){console.error("[Twinalyze GA Bridge] track error",e)}var s},d.call(e,"event",o,u)}return d.apply(e,n)},e[n]=!0,i("installed successfully")}function u(){var e=c();setTimeout(d,e.installWaitMs)}u()}(window);
|
|
1
|
+
// !function(e){"use strict";var t={debug:!0,forwardOnlyValidEvents:!0,addBridgeFlag:!0,bridgeFlagKey:"__from_bridge",installWaitMs:1500,eventTimeout:2e3},n="__gaTwinalyzeBridgeInstalled",o=/^[A-Za-z][A-Za-z0-9_]{0,39}$/;function i(){if(!e.__TWINALYZE_GA_BRIDGE_DEBUG__)return;var t=Array.prototype.slice.call(arguments);t.unshift("[Twinalyze GA Bridge]"),console.log.apply(console,t)}function r(){var t=Array.prototype.slice.call(arguments);t.unshift("[Twinalyze GA Bridge]"),console.warn.apply(console,t)}function a(e){return e&&"object"==typeof e&&!Array.isArray(e)}function l(e){return"string"==typeof e&&o.test(e)}function g(){return e.twinalyze||e.TwinalyzeAnalytics||null}function c(){var n=e.TwinalyzeGABridgeConfig||{},o={};for(var i in t)o[i]=t[i];for(var r in n)o[r]=n[r];return o}function d(){var t=c();if(e.__TWINALYZE_GA_BRIDGE_DEBUG__=!!t.debug,e[n])return void i("already installed");if("function"!=typeof e.gtag)return void r("gtag not found");var o=g();if(!o||"function"!=typeof o.track)return void r("twinalyze.track not found");var d=e.gtag;e.gtag=function(){var n=Array.prototype.slice.call(arguments);if(i("gtag call:",n),"event"===n[0]){var o=n[1],u=a(n[2])?Object.assign({},n[2]):{};if(t.forwardOnlyValidEvents&&!l(o))return r("invalid GA event name:",o),d.apply(e,n);var p=u.event_callback;return u.event_timeout="number"==typeof u.event_timeout?u.event_timeout:t.eventTimeout,u.event_callback=function(){i("GA callback fired:",o);try{"function"==typeof p&&p()}catch(e){console.error("[Twinalyze GA Bridge] old callback error",e)}try{var n=Object.assign({},u);if(delete n.event_callback,delete n.event_timeout,t.addBridgeFlag&&(n[t.bridgeFlagKey]=!0),!(s=g())||"function"!=typeof s.track)return void r("twinalyze.track missing during forward:",o);i("forwarding event:",o,n),s.track(o,n)}catch(e){console.error("[Twinalyze GA Bridge] track error",e)}var s},d.call(e,"event",o,u)}return d.apply(e,n)},e[n]=!0,i("installed successfully")}function u(){var e=c();setTimeout(d,e.installWaitMs)}u()}(window);
|
|
2
|
+
|
|
3
|
+
// (function(global){
|
|
4
|
+
// "use strict";
|
|
5
|
+
// var DEFAULTS={debug:!1,forwardOnlyValidEvents:!0,addBridgeFlag:!0,bridgeFlagKey:"__from_bridge",installPollIntervalMs:100,installTimeoutMs:10000,maxRetryAttempts:3,retryDelayMs:500},
|
|
6
|
+
// BRIDGE_INSTALLED_KEY="__gaTwinalyzeBridgeInstalled",
|
|
7
|
+
// GA_EVENT_NAME_RE=/^[A-Za-z][A-Za-z0-9_]{0,39}$/;
|
|
8
|
+
// global.__twinalyzeBridge=global.__twinalyzeBridge||{};
|
|
9
|
+
// var debug=global.__twinalyzeBridge.debug||DEFAULTS.debug;
|
|
10
|
+
// function log(){if(!debug)return;var e=Array.prototype.slice.call(arguments);e.unshift("[Twinalyze GA Bridge]");console.log.apply(console,e);}
|
|
11
|
+
// function warn(){var e=Array.prototype.slice.call(arguments);e.unshift("[Twinalyze GA Bridge]");console.warn.apply(console,e);}
|
|
12
|
+
// function isObject(e){return e&&"object"==typeof e&&!Array.isArray(e);}
|
|
13
|
+
// function isValidGaEventName(e){return"string"==typeof e&&GA_EVENT_NAME_RE.test(e);}
|
|
14
|
+
// function getTwinalyzeSdk(){return global.twinalyze||global.TwinalyzeAnalytics||null;}
|
|
15
|
+
// var eventQueue=[],bridgeReady=!1;
|
|
16
|
+
// function retry(fn,attempts,delay){return new Promise(function(resolve,reject){!function r(){Promise.resolve().then(fn).then(resolve).catch(function(err){attempts===1?reject(err):(attempts--,setTimeout(r,delay))})}()});}
|
|
17
|
+
// function forwardToTwinalyze(name,params){return retry(function(){var sdk=getTwinalyzeSdk();if(!sdk||"function"!=typeof sdk.track)throw new Error("twinalyze.track missing");log("Forwarding event:",name,params);return sdk.track(name,params)},DEFAULTS.maxRetryAttempts,DEFAULTS.retryDelayMs).catch(function(e){warn("Failed to forward event:",e)});}
|
|
18
|
+
// function flushQueue(){if(!bridgeReady)return;for(;eventQueue.length>0;){var e=eventQueue.shift();forwardToTwinalyze(e.eventName,e.params);}}
|
|
19
|
+
// function installBridge(){if(global[BRIDGE_INSTALLED_KEY])return void log("Bridge already installed");if("function"!=typeof global.gtag)return void warn("gtag not found");var sdk=getTwinalyzeSdk();if(!sdk||"function"!=typeof sdk.track)return void warn("twinalyze.track not found");var oldGtag=global.gtag;global.gtag=function(){var args=Array.prototype.slice.call(arguments);log("gtag call:",args);"event"===args[0]&&(function(){var name=args[1],params=isObject(args[2])?Object.assign({},args[2]):{};if(DEFAULTS.forwardOnlyValidEvents&&!isValidGaEventName(name))return void(warn("Invalid GA event name, forwarding only to GA:",name),oldGtag.apply(global,args));DEFAULTS.addBridgeFlag&&(params[DEFAULTS.bridgeFlagKey]=!0);bridgeReady?forwardToTwinalyze(name,params):eventQueue.push({eventName:name,params:params})})();return oldGtag.apply(global,args)};bridgeReady=!0;global[BRIDGE_INSTALLED_KEY]=!0;log("Bridge installed successfully");flushQueue();}
|
|
20
|
+
// function waitForDependencies(timeout,poll){var elapsed=0;return new Promise(function(resolve,reject){!function check(){var sdk=getTwinalyzeSdk();return"function"==typeof global.gtag&&sdk&&"function"==typeof sdk.track?void resolve():(elapsed+=poll,elapsed>=timeout?void reject(new Error("Timeout waiting for gtag or twinalyze SDK")):void setTimeout(check,poll))}()});}
|
|
21
|
+
// function bootstrap(){var cfg=global.TwinalyzeGABridgeConfig||{};for(var key in DEFAULTS)cfg.hasOwnProperty(key)&&(DEFAULTS[key]=cfg[key]);debug=DEFAULTS.debug;waitForDependencies(DEFAULTS.installTimeoutMs,DEFAULTS.installPollIntervalMs).then(installBridge).catch(function(e){warn("Failed to install bridge:",e)});}
|
|
22
|
+
// bootstrap();
|
|
23
|
+
// })(window);
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
!function(e){"use strict";var t={debug:!1,forwardOnlyValidEvents:!0,addBridgeFlag:!0,bridgeFlagKey:"__from_bridge",installPollIntervalMs:100,installTimeoutMs:10000,maxRetryAttempts:3,retryDelayMs:500},n="__gaTwinalyzeBridgeInstalled",o=/^[A-Za-z][A-Za-z0-9_]{0,39}$/;function i(){if(!e.__twinalyzeBridge||!e.__twinalyzeBridge.debug)return;var t=Array.prototype.slice.call(arguments);t.unshift("[Twinalyze GA Bridge]"),console.log.apply(console,t)}function r(){var t=Array.prototype.slice.call(arguments);t.unshift("[Twinalyze GA Bridge]"),console.warn.apply(console,t)}function a(e){return e&&"object"==typeof e&&!Array.isArray(e)}function l(e){return"string"==typeof e&&o.test(e)}function g(){return e.twinalyze||e.TwinalyzeAnalytics||null}var c=[],d=!1;function s(e,t,n){return new Promise(function(o,i){!function r(){Promise.resolve().then(e).then(o).catch(function(e){1===t?i(e):(t--,setTimeout(r,n))})}()})}function f(e,t){return s(function(){var n=g();if(!n||"function"!=typeof n.track)throw new Error("twinalyze.track missing");i("Forwarding event:",e,t);return n.track(e,t)},t.retryAttempts||t.maxRetryAttempts,t.retryDelay||t.retryDelayMs).catch(function(e){r("Failed to forward event:",e)})}function p(){if(!d)return;for(;c.length>0;){var e=c.shift();f(e.eventName,e.params)}}function m(){if(e[n])return void i("Bridge already installed");if("function"!=typeof e.gtag)return void r("gtag not found");var t=g();if(!t||"function"!=typeof t.track)return void r("twinalyze.track not found");var o=e.gtag;e.gtag=function(){var n=Array.prototype.slice.call(arguments);i("gtag call:",n);"event"===n[0]&&(function(){var t=n[1],r=a(n[2])?Object.assign({},n[2]):{};if(l(t)===!1)return void(r("Invalid GA event name:",t),o.apply(e,n));if(t==="click"){i('Skipping forwarding "click" event to Twinalyze SDK');return o.apply(e,n)}t.addBridgeFlag&&(r[t.addBridgeFlag]=!0);d?f(t,r):c.push({eventName:t,params:r})})();return o.apply(e,n)},d=!0,e[n]=!0,i("Bridge installed successfully"),p()}function u(){var n=e.TwinalyzeGABridgeConfig||{};for(var o in t)n.hasOwnProperty(o)&&(t[o]=n[o]);i("Initializing bridge with config:",t),setTimeout(m,t.installPollIntervalMs||t.installWaitMs||100)}u()}(window);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jenil_121/ga-bridge",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.6",
|
|
4
4
|
"description": "Twinalyze GA Bridge (GA → Twinalyze event forwarding)",
|
|
5
5
|
"main": "dist/twinalyze-ga-bridge.min.js",
|
|
6
6
|
"files": [
|
|
@@ -13,6 +13,6 @@
|
|
|
13
13
|
"analytics",
|
|
14
14
|
"bridge"
|
|
15
15
|
],
|
|
16
|
-
"author": "
|
|
16
|
+
"author": "jenil",
|
|
17
17
|
"license": "MIT"
|
|
18
18
|
}
|