@codeswayam/analytics 0.1.1 → 0.1.2
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 +1 -1
- package/dist/Analytics.d.ts +41 -1
- package/dist/Analytics.d.ts.map +1 -1
- package/dist/Analytics.js +34 -20
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/server.d.ts +5 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +25 -0
- package/package.json +5 -6
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @codeswayam/analytics
|
|
2
2
|
|
|
3
|
-
**Version:** 0.1.
|
|
3
|
+
**Version:** 0.1.1
|
|
4
4
|
|
|
5
5
|
Centralized analytics and tracking package for all CodeSwayam applications. A single `<Analytics />` component that loads GTM, GA4, Meta Pixel, Hotjar, and Microsoft Clarity — plus Google Search Console verification — all configurable from the Admin Panel or environment variables.
|
|
6
6
|
|
package/dist/Analytics.d.ts
CHANGED
|
@@ -8,10 +8,50 @@ export interface AnalyticsConfig {
|
|
|
8
8
|
}
|
|
9
9
|
interface AnalyticsProps extends AnalyticsConfig {
|
|
10
10
|
appName?: string;
|
|
11
|
+
consentGranted?: boolean;
|
|
11
12
|
}
|
|
12
|
-
export declare function Analytics({ gtmId, ga4Id, metaPixelId, gscVerification, hotjarId, clarityId, appName, }: AnalyticsProps): import("react/jsx-runtime").JSX.Element | null;
|
|
13
|
+
export declare function Analytics({ gtmId, ga4Id, metaPixelId, gscVerification, hotjarId, clarityId, appName, consentGranted, }: AnalyticsProps): import("react/jsx-runtime").JSX.Element | null;
|
|
13
14
|
export declare function trackEvent(eventName: string, eventData?: Record<string, any>): void;
|
|
14
15
|
export declare function trackPageView(url: string): void;
|
|
16
|
+
export declare function usePageTracking(): void;
|
|
17
|
+
export type SaaSConversionEvent = {
|
|
18
|
+
name: 'signup';
|
|
19
|
+
props: {
|
|
20
|
+
method: 'email' | 'google' | 'github';
|
|
21
|
+
};
|
|
22
|
+
} | {
|
|
23
|
+
name: 'trial_start';
|
|
24
|
+
props: {
|
|
25
|
+
productId: string;
|
|
26
|
+
planName: string;
|
|
27
|
+
};
|
|
28
|
+
} | {
|
|
29
|
+
name: 'subscription_started';
|
|
30
|
+
props: {
|
|
31
|
+
productId: string;
|
|
32
|
+
planName: string;
|
|
33
|
+
amount: number;
|
|
34
|
+
currency: string;
|
|
35
|
+
};
|
|
36
|
+
} | {
|
|
37
|
+
name: 'credits_purchased';
|
|
38
|
+
props: {
|
|
39
|
+
amount: number;
|
|
40
|
+
packId: string;
|
|
41
|
+
creditsCount: number;
|
|
42
|
+
};
|
|
43
|
+
} | {
|
|
44
|
+
name: 'agent_created';
|
|
45
|
+
props: {
|
|
46
|
+
model: string;
|
|
47
|
+
};
|
|
48
|
+
} | {
|
|
49
|
+
name: 'automation_created';
|
|
50
|
+
props: {
|
|
51
|
+
type: string;
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
export declare function trackConversion<T extends SaaSConversionEvent>(event: T): void;
|
|
15
55
|
declare global {
|
|
16
56
|
interface Window {
|
|
17
57
|
dataLayer: any[];
|
package/dist/Analytics.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Analytics.d.ts","sourceRoot":"","sources":["../src/Analytics.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Analytics.d.ts","sourceRoot":"","sources":["../src/Analytics.tsx"],"names":[],"mappings":"AAMA,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,cAAe,SAAQ,eAAe;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,KAAK,EACL,WAAW,EACX,eAAe,EACf,QAAQ,EACR,SAAS,EACT,OAAO,EACP,cAAqB,GACtB,EAAE,cAAc,kDA8EhB;AAED,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAI5E;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,QAIxC;AAED,wBAAgB,eAAe,SAO9B;AAED,MAAM,MAAM,mBAAmB,GAC3B;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE;QAAE,MAAM,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAA;KAAE,CAAA;CAAE,GACpE;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GACvE;IAAE,IAAI,EAAE,sBAAsB,CAAC;IAAC,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAClH;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAC9F;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GACnD;IAAE,IAAI,EAAE,oBAAoB,CAAC;IAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;AAE5D,wBAAgB,eAAe,CAAC,CAAC,SAAS,mBAAmB,EAAE,KAAK,EAAE,CAAC,QAEtE;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,SAAS,EAAE,GAAG,EAAE,CAAC;QACjB,GAAG,EAAE,GAAG,CAAC;QACT,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;KAChC;CACF"}
|
package/dist/Analytics.js
CHANGED
|
@@ -1,27 +1,30 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useEffect } from 'react';
|
|
4
|
+
import { usePathname } from 'next/navigation';
|
|
3
5
|
import Script from 'next/script';
|
|
4
|
-
export function Analytics({ gtmId, ga4Id, metaPixelId, gscVerification, hotjarId, clarityId, appName, }) {
|
|
5
|
-
|
|
6
|
+
export function Analytics({ gtmId, ga4Id, metaPixelId, gscVerification, hotjarId, clarityId, appName, consentGranted = true, }) {
|
|
7
|
+
const isTrackingAllowed = consentGranted;
|
|
8
|
+
if (!gtmId && !ga4Id && !metaPixelId && !hotjarId && !clarityId && !gscVerification)
|
|
6
9
|
return null;
|
|
7
|
-
return (_jsxs(_Fragment, { children: [gscVerification && (_jsx("meta", { name: "google-site-verification", content: gscVerification })), gtmId && (_jsxs(_Fragment, { children: [_jsx(Script, { id: "gtm-script", strategy: "afterInteractive", children: `(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
10
|
+
return (_jsxs(_Fragment, { children: [gscVerification && (_jsx("meta", { name: "google-site-verification", content: gscVerification })), isTrackingAllowed && (_jsxs(_Fragment, { children: [gtmId && (_jsxs(_Fragment, { children: [_jsx(Script, { id: "gtm-script", strategy: "afterInteractive", children: `(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
|
|
11
|
+
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
|
|
12
|
+
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
|
|
13
|
+
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
|
|
14
|
+
})(window,document,'script','dataLayer','${gtmId}');
|
|
15
|
+
${appName ? `window.dataLayer=window.dataLayer||[];window.dataLayer.push({'appName':'${appName}'});` : ''}` }), _jsx("noscript", { children: _jsx("iframe", { src: `https://www.googletagmanager.com/ns.html?id=${gtmId}`, height: "0", width: "0", style: { display: 'none', visibility: 'hidden' } }) })] })), ga4Id && !gtmId && (_jsxs(_Fragment, { children: [_jsx(Script, { src: `https://www.googletagmanager.com/gtag/js?id=${ga4Id}`, strategy: "afterInteractive" }), _jsx(Script, { id: "ga4-script", strategy: "afterInteractive", children: `window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments);}
|
|
16
|
+
gtag('js',new Date());gtag('config','${ga4Id}',{'send_page_view':true});` })] })), metaPixelId && (_jsxs(_Fragment, { children: [_jsx(Script, { id: "meta-pixel", strategy: "afterInteractive", children: `!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?
|
|
17
|
+
n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;
|
|
18
|
+
n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;
|
|
19
|
+
t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,
|
|
20
|
+
document,'script','https://connect.facebook.net/en_US/fbevents.js');
|
|
21
|
+
fbq('init','${metaPixelId}');fbq('track','PageView');` }), _jsx("noscript", { children: _jsx("img", { height: "1", width: "1", style: { display: 'none' }, src: `https://www.facebook.com/tr?id=${metaPixelId}&ev=PageView&noscript=1`, alt: "" }) })] })), hotjarId && (_jsx(Script, { id: "hotjar-script", strategy: "afterInteractive", children: `(function(h,o,t,j,a,r){h.hj=h.hj||function(){(h.hj.q=h.hj.q||[]).push(arguments)};
|
|
22
|
+
h._hjSettings={hjid:${hotjarId},hjsv:6};a=o.getElementsByTagName('head')[0];
|
|
23
|
+
r=o.createElement('script');r.async=1;r.src=t+h._hjSettings.hjid+j+h._hjSettings.hjsv;
|
|
24
|
+
a.appendChild(r);})(window,document,'https://static.hotjar.com/c/hotjar-','.js?sv=');` })), clarityId && (_jsx(Script, { id: "clarity-script", strategy: "afterInteractive", children: `(function(c,l,a,r,i,t,y){c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)};
|
|
25
|
+
t=l.createElement(r);t.async=1;t.src="https://www.clarity.ms/tag/"+i;
|
|
26
|
+
y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y);
|
|
27
|
+
})(window,document,"clarity","script","${clarityId}");` }))] }))] }));
|
|
25
28
|
}
|
|
26
29
|
export function trackEvent(eventName, eventData) {
|
|
27
30
|
if (typeof window === 'undefined')
|
|
@@ -39,3 +42,14 @@ export function trackPageView(url) {
|
|
|
39
42
|
if (window.fbq)
|
|
40
43
|
window.fbq('track', 'PageView');
|
|
41
44
|
}
|
|
45
|
+
export function usePageTracking() {
|
|
46
|
+
const pathname = usePathname();
|
|
47
|
+
useEffect(() => {
|
|
48
|
+
if (!pathname)
|
|
49
|
+
return;
|
|
50
|
+
trackPageView(pathname);
|
|
51
|
+
}, [pathname]);
|
|
52
|
+
}
|
|
53
|
+
export function trackConversion(event) {
|
|
54
|
+
trackEvent(event.name, event.props);
|
|
55
|
+
}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { Analytics, trackEvent, trackPageView } from './Analytics';
|
|
2
|
-
export type { AnalyticsConfig } from './Analytics';
|
|
3
|
-
export { getAnalyticsConfig } from './server';
|
|
1
|
+
export { Analytics, trackEvent, trackPageView, usePageTracking, trackConversion } from './Analytics';
|
|
2
|
+
export type { AnalyticsConfig, SaaSConversionEvent } from './Analytics';
|
|
3
|
+
export { getAnalyticsConfig, trackServerEvent } from './server';
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACrG,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { Analytics, trackEvent, trackPageView } from './Analytics';
|
|
2
|
-
export { getAnalyticsConfig } from './server';
|
|
1
|
+
export { Analytics, trackEvent, trackPageView, usePageTracking, trackConversion } from './Analytics';
|
|
2
|
+
export { getAnalyticsConfig, trackServerEvent } from './server';
|
package/dist/server.d.ts
CHANGED
|
@@ -8,4 +8,9 @@ import type { AnalyticsConfig } from './Analytics';
|
|
|
8
8
|
* <Analytics {...config} appName="web" />
|
|
9
9
|
*/
|
|
10
10
|
export declare function getAnalyticsConfig(appId: string): Promise<AnalyticsConfig>;
|
|
11
|
+
/**
|
|
12
|
+
* Log server-side events (such as logins, registration, payment verification)
|
|
13
|
+
* to the core-api backend analytics collector.
|
|
14
|
+
*/
|
|
15
|
+
export declare function trackServerEvent(eventName: string, eventData?: Record<string, any>, userId?: string): Promise<boolean>;
|
|
11
16
|
//# sourceMappingURL=server.d.ts.map
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAWhF"}
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAWhF;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC/B,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,OAAO,CAAC,CAmBlB"}
|
package/dist/server.js
CHANGED
|
@@ -20,3 +20,28 @@ export async function getAnalyticsConfig(appId) {
|
|
|
20
20
|
return {};
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
|
+
/**
|
|
24
|
+
* Log server-side events (such as logins, registration, payment verification)
|
|
25
|
+
* to the core-api backend analytics collector.
|
|
26
|
+
*/
|
|
27
|
+
export async function trackServerEvent(eventName, eventData, userId) {
|
|
28
|
+
const apiUrl = process.env.NEXT_PUBLIC_API_URL || process.env.API_URL || 'http://localhost:3000';
|
|
29
|
+
try {
|
|
30
|
+
const res = await fetch(`${apiUrl}/admin/analytics/track`, {
|
|
31
|
+
method: 'POST',
|
|
32
|
+
headers: {
|
|
33
|
+
'Content-Type': 'application/json',
|
|
34
|
+
},
|
|
35
|
+
body: JSON.stringify({
|
|
36
|
+
event: eventName,
|
|
37
|
+
userId,
|
|
38
|
+
properties: eventData || {},
|
|
39
|
+
timestamp: new Date().toISOString(),
|
|
40
|
+
}),
|
|
41
|
+
});
|
|
42
|
+
return res.ok;
|
|
43
|
+
}
|
|
44
|
+
catch (_a) {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@codeswayam/analytics",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "Centralized analytics and tracking for CodeSwayam apps",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.js",
|
|
@@ -22,15 +22,14 @@
|
|
|
22
22
|
"prepublishOnly": "npm run build"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"react": "^19.2.3"
|
|
26
|
-
"next": "^16.2.4"
|
|
25
|
+
"react": "^19.2.3"
|
|
27
26
|
},
|
|
28
27
|
"devDependencies": {
|
|
29
28
|
"@types/react": "^19",
|
|
30
29
|
"typescript": "^5"
|
|
31
30
|
},
|
|
32
31
|
"peerDependencies": {
|
|
33
|
-
"
|
|
34
|
-
"
|
|
32
|
+
"next": ">=15.0.0",
|
|
33
|
+
"react": "^19.2.3"
|
|
35
34
|
}
|
|
36
|
-
}
|
|
35
|
+
}
|