@formo/analytics 0.1.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/README.md +141 -0
- package/dist/cjs/src/FormoAnalytics.d.ts +30 -0
- package/dist/cjs/src/FormoAnalytics.d.ts.map +1 -0
- package/dist/cjs/src/FormoAnalytics.js +297 -0
- package/dist/cjs/src/FormoAnalytics.js.map +1 -0
- package/dist/cjs/src/FormoAnalyticsProvider.d.ts +7 -0
- package/dist/cjs/src/FormoAnalyticsProvider.d.ts.map +1 -0
- package/dist/cjs/src/FormoAnalyticsProvider.js +45 -0
- package/dist/cjs/src/FormoAnalyticsProvider.js.map +1 -0
- package/dist/cjs/src/constants/config.d.ts +430 -0
- package/dist/cjs/src/constants/config.d.ts.map +1 -0
- package/dist/cjs/src/constants/config.js +433 -0
- package/dist/cjs/src/constants/config.js.map +1 -0
- package/dist/cjs/src/constants/index.d.ts +2 -0
- package/dist/cjs/src/constants/index.d.ts.map +1 -0
- package/dist/cjs/src/constants/index.js +18 -0
- package/dist/cjs/src/constants/index.js.map +1 -0
- package/dist/cjs/src/index.d.ts +4 -0
- package/dist/cjs/src/index.d.ts.map +1 -0
- package/dist/cjs/src/index.js +20 -0
- package/dist/cjs/src/index.js.map +1 -0
- package/dist/cjs/src/types/base.d.ts +8 -0
- package/dist/cjs/src/types/base.d.ts.map +1 -0
- package/dist/cjs/src/types/base.js +3 -0
- package/dist/cjs/src/types/base.js.map +1 -0
- package/dist/cjs/src/types/index.d.ts +2 -0
- package/dist/cjs/src/types/index.d.ts.map +1 -0
- package/dist/cjs/src/types/index.js +18 -0
- package/dist/cjs/src/types/index.js.map +1 -0
- package/dist/cjs/src/utils/index.d.ts +2 -0
- package/dist/cjs/src/utils/index.d.ts.map +1 -0
- package/dist/cjs/src/utils/index.js +18 -0
- package/dist/cjs/src/utils/index.js.map +1 -0
- package/dist/cjs/src/utils/isNotEmptyObject.d.ts +2 -0
- package/dist/cjs/src/utils/isNotEmptyObject.d.ts.map +1 -0
- package/dist/cjs/src/utils/isNotEmptyObject.js +10 -0
- package/dist/cjs/src/utils/isNotEmptyObject.js.map +1 -0
- package/dist/cjs/tsconfig.tsbuildinfo +1 -0
- package/dist/esm/src/FormoAnalytics.d.ts +30 -0
- package/dist/esm/src/FormoAnalytics.d.ts.map +1 -0
- package/dist/esm/src/FormoAnalytics.js +291 -0
- package/dist/esm/src/FormoAnalytics.js.map +1 -0
- package/dist/esm/src/FormoAnalyticsProvider.d.ts +7 -0
- package/dist/esm/src/FormoAnalyticsProvider.d.ts.map +1 -0
- package/dist/esm/src/FormoAnalyticsProvider.js +40 -0
- package/dist/esm/src/FormoAnalyticsProvider.js.map +1 -0
- package/dist/esm/src/constants/config.d.ts +430 -0
- package/dist/esm/src/constants/config.d.ts.map +1 -0
- package/dist/esm/src/constants/config.js +430 -0
- package/dist/esm/src/constants/config.js.map +1 -0
- package/dist/esm/src/constants/index.d.ts +2 -0
- package/dist/esm/src/constants/index.d.ts.map +1 -0
- package/dist/esm/src/constants/index.js +2 -0
- package/dist/esm/src/constants/index.js.map +1 -0
- package/dist/esm/src/index.d.ts +4 -0
- package/dist/esm/src/index.d.ts.map +1 -0
- package/dist/esm/src/index.js +4 -0
- package/dist/esm/src/index.js.map +1 -0
- package/dist/esm/src/types/base.d.ts +8 -0
- package/dist/esm/src/types/base.d.ts.map +1 -0
- package/dist/esm/src/types/base.js +2 -0
- package/dist/esm/src/types/base.js.map +1 -0
- package/dist/esm/src/types/index.d.ts +2 -0
- package/dist/esm/src/types/index.d.ts.map +1 -0
- package/dist/esm/src/types/index.js +2 -0
- package/dist/esm/src/types/index.js.map +1 -0
- package/dist/esm/src/utils/index.d.ts +2 -0
- package/dist/esm/src/utils/index.d.ts.map +1 -0
- package/dist/esm/src/utils/index.js +2 -0
- package/dist/esm/src/utils/index.js.map +1 -0
- package/dist/esm/src/utils/isNotEmptyObject.d.ts +2 -0
- package/dist/esm/src/utils/isNotEmptyObject.d.ts.map +1 -0
- package/dist/esm/src/utils/isNotEmptyObject.js +6 -0
- package/dist/esm/src/utils/isNotEmptyObject.js.map +1 -0
- package/dist/esm/tsconfig.tsbuildinfo +1 -0
- package/dist/index.umd.min.js +3 -0
- package/dist/index.umd.min.js.LICENSE.txt +19 -0
- package/dist/index.umd.min.js.map +1 -0
- package/package.json +89 -0
- package/src/FormoAnalytics.ts +264 -0
- package/src/FormoAnalyticsProvider.tsx +54 -0
- package/src/constants/config.ts +429 -0
- package/src/constants/index.ts +1 -0
- package/src/global.d.ts +8 -0
- package/src/index.ts +3 -0
- package/src/types/base.ts +6 -0
- package/src/types/index.ts +1 -0
- package/src/utils/index.ts +1 -0
- package/src/utils/isNotEmptyObject.ts +5 -0
- package/tsconfig.json +28 -0
- package/webpack.config.ts +23 -0
package/README.md
ADDED
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
# Installation Guide
|
|
2
|
+
|
|
3
|
+
## Option 1 - tracking code
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Add the following to your `index.html`:
|
|
8
|
+
|
|
9
|
+
```html
|
|
10
|
+
<script>
|
|
11
|
+
const script = document.createElement('script');
|
|
12
|
+
const apiKey = 'YOUR_API_KEY';
|
|
13
|
+
const projectId = 'YOUR_PROJECT_ID';
|
|
14
|
+
|
|
15
|
+
script.src = 'https://unpkg.com/@formo/analytics';
|
|
16
|
+
script.onload = function () {
|
|
17
|
+
FormoAnalytics.init(apiKey, projectId).then((sdkInstance) => window.formo = sdkInstance);
|
|
18
|
+
};
|
|
19
|
+
document.head.appendChild(script);
|
|
20
|
+
</script>
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Option 2 - using npm package
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
1. Install the npm package:
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
yarn add @formo/analytics
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
or
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
npm install @formo/analytics --save
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
2. Set up the `FormoAnalyticsProvider` in your application:
|
|
40
|
+
|
|
41
|
+
```jsx
|
|
42
|
+
// FormoAnalyticsProvider.tsx
|
|
43
|
+
|
|
44
|
+
'use client';
|
|
45
|
+
|
|
46
|
+
import { FormoAnalytics, FormoAnalyticsProvider } from '@formo/analytics';
|
|
47
|
+
import React, { FC, useEffect } from 'react';
|
|
48
|
+
|
|
49
|
+
type FormoAnalyticsProviderProps = {
|
|
50
|
+
apiKey: string;
|
|
51
|
+
projectId: string;
|
|
52
|
+
children: React.ReactNode;
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
// The provider component
|
|
56
|
+
export const AnalyticsProvider: FC<FormoAnalyticsProviderProps> = ({
|
|
57
|
+
apiKey,
|
|
58
|
+
projectId,
|
|
59
|
+
children,
|
|
60
|
+
}) => {
|
|
61
|
+
// Initialize the FormoAnalytics SDK inside useEffect
|
|
62
|
+
useEffect(() => {
|
|
63
|
+
const initialize = async () => {
|
|
64
|
+
try {
|
|
65
|
+
await FormoAnalytics.init(apiKey, projectId);
|
|
66
|
+
console.log('FormoAnalytics SDK initialized');
|
|
67
|
+
} catch (error) {
|
|
68
|
+
console.error('Failed to initialize FormoAnalytics SDK', error);
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
initialize();
|
|
73
|
+
}, [apiKey]);
|
|
74
|
+
|
|
75
|
+
return (
|
|
76
|
+
<FormoAnalyticsProvider apiKey={apiKey} projectId={projectId}>
|
|
77
|
+
{children}
|
|
78
|
+
</FormoAnalyticsProvider>
|
|
79
|
+
);
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
export default AnalyticsProvider;
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
1. Integrating the Provider in Your Layout
|
|
86
|
+
Wrap your application with the `AnalyticsProvider` in your main layout file:
|
|
87
|
+
|
|
88
|
+
```jsx
|
|
89
|
+
import { FormoAnalyticsProvider } from './FormoAnalyticsProvider';
|
|
90
|
+
|
|
91
|
+
export default function RootLayout({ children }: { children: React.ReactNode }) {
|
|
92
|
+
return (
|
|
93
|
+
<html lang="en">
|
|
94
|
+
<body>
|
|
95
|
+
<FormoAnalyticsProvider
|
|
96
|
+
apiKey="YOUR_API_KEY"
|
|
97
|
+
projectId="formo"
|
|
98
|
+
>
|
|
99
|
+
Your Page Content
|
|
100
|
+
</FormoAnalyticsProvider>
|
|
101
|
+
</body>
|
|
102
|
+
</html>
|
|
103
|
+
);
|
|
104
|
+
}
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
3. Using the SDK
|
|
108
|
+
Once the SDK is initialized, you can use its methods to track events and user interactions. Here’s how to do that:
|
|
109
|
+
|
|
110
|
+
```jsx
|
|
111
|
+
import { useFormoAnalytics } from '@formo/analytics';
|
|
112
|
+
import React, { useEffect } from 'react';
|
|
113
|
+
|
|
114
|
+
const YourComponent = () => {
|
|
115
|
+
const analytics = useFormoAnalytics();
|
|
116
|
+
|
|
117
|
+
useEffect(() => {
|
|
118
|
+
const initialize = async () => {
|
|
119
|
+
try {
|
|
120
|
+
console.log('Tracking page hit...');
|
|
121
|
+
analytics.page(); // Track the page view
|
|
122
|
+
analytics.track('custom_event', { key: 'value' }); // Track a custom event
|
|
123
|
+
} catch (error) {
|
|
124
|
+
console.error('Failed to track page hit', error);
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
initialize();
|
|
129
|
+
}, [analytics]);
|
|
130
|
+
|
|
131
|
+
return <div>Your Component Content</div>;
|
|
132
|
+
};
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
# Development notes
|
|
136
|
+
|
|
137
|
+
To run a local version of the script:
|
|
138
|
+
|
|
139
|
+
1. Run `yarn build-cjs && yarn build-esm && yarn webpack --mode=production` or `npm run build` at the root level to build the script.
|
|
140
|
+
2. To authorize device, login into npmjs using `npm login` or `npm adduser`
|
|
141
|
+
3. Run `yarn publish` or `npm run publish` to publish new versions of the package.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
interface IFormoAnalytics {
|
|
2
|
+
init(apiKey: string, projectId: string): Promise<FormoAnalytics>;
|
|
3
|
+
identify(userData: any): void;
|
|
4
|
+
page(): void;
|
|
5
|
+
track(eventName: string, eventData: any): void;
|
|
6
|
+
}
|
|
7
|
+
export declare class FormoAnalytics implements IFormoAnalytics {
|
|
8
|
+
readonly apiKey: string;
|
|
9
|
+
projectId: string;
|
|
10
|
+
private config;
|
|
11
|
+
private sessionIdKey;
|
|
12
|
+
private timezoneToCountry;
|
|
13
|
+
private constructor();
|
|
14
|
+
static init(apiKey: string, projectId: string): Promise<FormoAnalytics>;
|
|
15
|
+
private identifyUser;
|
|
16
|
+
private getSessionId;
|
|
17
|
+
private setSessionCookie;
|
|
18
|
+
private generateSessionId;
|
|
19
|
+
private getCookieValue;
|
|
20
|
+
private trackEvent;
|
|
21
|
+
private maskSensitiveData;
|
|
22
|
+
private trackPageHit;
|
|
23
|
+
private buildApiUrl;
|
|
24
|
+
init(apiKey: string, projectId: string): Promise<FormoAnalytics>;
|
|
25
|
+
identify(userData: any): void;
|
|
26
|
+
page(): void;
|
|
27
|
+
track(eventName: string, eventData: any): void;
|
|
28
|
+
}
|
|
29
|
+
export {};
|
|
30
|
+
//# sourceMappingURL=FormoAnalytics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FormoAnalytics.d.ts","sourceRoot":"","sources":["../../../src/FormoAnalytics.ts"],"names":[],"mappings":"AAIA,UAAU,eAAe;IACvB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IACjE,QAAQ,CAAC,QAAQ,EAAE,GAAG,GAAG,IAAI,CAAC;IAC9B,IAAI,IAAI,IAAI,CAAC;IACb,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,GAAG,IAAI,CAAC;CAChD;AACD,qBAAa,cAAe,YAAW,eAAe;aAMlC,MAAM,EAAE,MAAM;IACvB,SAAS,EAAE,MAAM;IAN1B,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,YAAY,CAAkC;IACtD,OAAO,CAAC,iBAAiB,CAAwC;IAEjE,OAAO;WASM,IAAI,CACf,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,cAAc,CAAC;IAU1B,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,iBAAiB;IAKzB,OAAO,CAAC,cAAc;YAUR,UAAU;IAuDxB,OAAO,CAAC,iBAAiB;IAkEzB,OAAO,CAAC,YAAY;IA8BpB,OAAO,CAAC,WAAW;IAiBnB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAMhE,QAAQ,CAAC,QAAQ,EAAE,GAAG;IAItB,IAAI;IAIJ,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG;CAGxC"}
|
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
14
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
15
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
16
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
17
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
18
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
19
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
20
|
+
});
|
|
21
|
+
};
|
|
22
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
23
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
24
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
25
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
26
|
+
function step(op) {
|
|
27
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
28
|
+
while (_) try {
|
|
29
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
30
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
31
|
+
switch (op[0]) {
|
|
32
|
+
case 0: case 1: t = op; break;
|
|
33
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
34
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
35
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
36
|
+
default:
|
|
37
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
38
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
39
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
40
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
41
|
+
if (t[2]) _.ops.pop();
|
|
42
|
+
_.trys.pop(); continue;
|
|
43
|
+
}
|
|
44
|
+
op = body.call(thisArg, _);
|
|
45
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
46
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
50
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
51
|
+
};
|
|
52
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
|
+
exports.FormoAnalytics = void 0;
|
|
54
|
+
var axios_1 = __importDefault(require("axios"));
|
|
55
|
+
var constants_1 = require("./constants");
|
|
56
|
+
var utils_1 = require("./utils");
|
|
57
|
+
var FormoAnalytics = /** @class */ (function () {
|
|
58
|
+
function FormoAnalytics(apiKey, projectId) {
|
|
59
|
+
this.apiKey = apiKey;
|
|
60
|
+
this.projectId = projectId;
|
|
61
|
+
this.sessionIdKey = constants_1.SESSION_STORAGE_ID_KEY;
|
|
62
|
+
this.timezoneToCountry = constants_1.COUNTRY_LIST;
|
|
63
|
+
this.config = {
|
|
64
|
+
token: this.apiKey,
|
|
65
|
+
};
|
|
66
|
+
this.trackPageHit();
|
|
67
|
+
}
|
|
68
|
+
FormoAnalytics.init = function (apiKey, projectId) {
|
|
69
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
70
|
+
var config, instance;
|
|
71
|
+
return __generator(this, function (_a) {
|
|
72
|
+
config = {
|
|
73
|
+
token: apiKey,
|
|
74
|
+
};
|
|
75
|
+
instance = new FormoAnalytics(apiKey, projectId);
|
|
76
|
+
instance.config = config;
|
|
77
|
+
return [2 /*return*/, instance];
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
};
|
|
81
|
+
FormoAnalytics.prototype.identifyUser = function (userData) {
|
|
82
|
+
this.trackEvent('identify', userData);
|
|
83
|
+
};
|
|
84
|
+
FormoAnalytics.prototype.getSessionId = function () {
|
|
85
|
+
var existingSessionId = this.getCookieValue(this.sessionIdKey);
|
|
86
|
+
if (existingSessionId) {
|
|
87
|
+
return existingSessionId;
|
|
88
|
+
}
|
|
89
|
+
var newSessionId = this.generateSessionId();
|
|
90
|
+
return newSessionId;
|
|
91
|
+
};
|
|
92
|
+
// Function to set the session cookie
|
|
93
|
+
FormoAnalytics.prototype.setSessionCookie = function (domain) {
|
|
94
|
+
var sessionId = this.getSessionId();
|
|
95
|
+
var cookieValue = "".concat(this.sessionIdKey, "=").concat(sessionId, "; Max-Age=1800; path=/; secure");
|
|
96
|
+
if (domain) {
|
|
97
|
+
cookieValue += "; domain=".concat(domain);
|
|
98
|
+
}
|
|
99
|
+
document.cookie = cookieValue;
|
|
100
|
+
};
|
|
101
|
+
// Function to generate a new session ID
|
|
102
|
+
FormoAnalytics.prototype.generateSessionId = function () {
|
|
103
|
+
return crypto.randomUUID();
|
|
104
|
+
};
|
|
105
|
+
// Function to get a cookie value by name
|
|
106
|
+
FormoAnalytics.prototype.getCookieValue = function (name) {
|
|
107
|
+
var cookies = document.cookie.split(';').reduce(function (acc, cookie) {
|
|
108
|
+
var _a = cookie.split('='), key = _a[0], value = _a[1];
|
|
109
|
+
acc[key.trim()] = value;
|
|
110
|
+
return acc;
|
|
111
|
+
}, {});
|
|
112
|
+
return cookies[name];
|
|
113
|
+
};
|
|
114
|
+
// Function to send tracking data
|
|
115
|
+
FormoAnalytics.prototype.trackEvent = function (action, payload) {
|
|
116
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
117
|
+
var maxRetries, attempt, apiUrl, requestData, sendRequest;
|
|
118
|
+
var _this = this;
|
|
119
|
+
return __generator(this, function (_a) {
|
|
120
|
+
switch (_a.label) {
|
|
121
|
+
case 0:
|
|
122
|
+
maxRetries = 3;
|
|
123
|
+
attempt = 0;
|
|
124
|
+
this.setSessionCookie(this.config.domain);
|
|
125
|
+
apiUrl = this.buildApiUrl();
|
|
126
|
+
requestData = {
|
|
127
|
+
project_id: this.projectId,
|
|
128
|
+
address: '',
|
|
129
|
+
session_id: this.getSessionId(),
|
|
130
|
+
timestamp: new Date().toISOString(),
|
|
131
|
+
action: action,
|
|
132
|
+
version: '1',
|
|
133
|
+
payload: (0, utils_1.isNotEmpty)(payload) ? this.maskSensitiveData(payload) : payload,
|
|
134
|
+
};
|
|
135
|
+
console.log('Request data:', JSON.stringify(requestData));
|
|
136
|
+
sendRequest = function () { return __awaiter(_this, void 0, void 0, function () {
|
|
137
|
+
var response, error_1, retryDelay;
|
|
138
|
+
return __generator(this, function (_a) {
|
|
139
|
+
switch (_a.label) {
|
|
140
|
+
case 0:
|
|
141
|
+
_a.trys.push([0, 2, , 3]);
|
|
142
|
+
return [4 /*yield*/, axios_1.default.post(apiUrl, JSON.stringify(requestData), {
|
|
143
|
+
headers: {
|
|
144
|
+
'Content-Type': 'application/json',
|
|
145
|
+
},
|
|
146
|
+
})];
|
|
147
|
+
case 1:
|
|
148
|
+
response = _a.sent();
|
|
149
|
+
if (response.status >= 200 && response.status < 300) {
|
|
150
|
+
console.log('Event sent successfully:', action);
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
throw new Error("Failed with status: ".concat(response.status));
|
|
154
|
+
}
|
|
155
|
+
return [3 /*break*/, 3];
|
|
156
|
+
case 2:
|
|
157
|
+
error_1 = _a.sent();
|
|
158
|
+
attempt++;
|
|
159
|
+
if (attempt <= maxRetries) {
|
|
160
|
+
retryDelay = Math.pow(2, attempt) * 1000;
|
|
161
|
+
console.error("Attempt ".concat(attempt, ": Retrying event \"").concat(action, "\" in ").concat(retryDelay / 1000, " seconds..."));
|
|
162
|
+
setTimeout(sendRequest, retryDelay);
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
console.error("Event \"".concat(action, "\" failed after ").concat(maxRetries, " attempts. Error: ").concat(error_1));
|
|
166
|
+
}
|
|
167
|
+
return [3 /*break*/, 3];
|
|
168
|
+
case 3: return [2 /*return*/];
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
}); };
|
|
172
|
+
// Start the initial request
|
|
173
|
+
return [4 /*yield*/, sendRequest()];
|
|
174
|
+
case 1:
|
|
175
|
+
// Start the initial request
|
|
176
|
+
_a.sent();
|
|
177
|
+
return [2 /*return*/];
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
});
|
|
181
|
+
};
|
|
182
|
+
// Function to mask sensitive data in the payload
|
|
183
|
+
FormoAnalytics.prototype.maskSensitiveData = function (data) {
|
|
184
|
+
// Check if data is null or undefined
|
|
185
|
+
if (data === null || data === undefined) {
|
|
186
|
+
console.warn('Data is null or undefined, returning null');
|
|
187
|
+
return null;
|
|
188
|
+
}
|
|
189
|
+
// Check if data is a string; if so, parse it to an object
|
|
190
|
+
if (typeof data === 'string') {
|
|
191
|
+
var parsedData = void 0;
|
|
192
|
+
try {
|
|
193
|
+
parsedData = JSON.parse(data);
|
|
194
|
+
}
|
|
195
|
+
catch (error) {
|
|
196
|
+
console.error('Failed to parse JSON:', error);
|
|
197
|
+
return null; // Return null if parsing fails
|
|
198
|
+
}
|
|
199
|
+
var sensitiveFields = [
|
|
200
|
+
'username',
|
|
201
|
+
'user',
|
|
202
|
+
'user_id',
|
|
203
|
+
'password',
|
|
204
|
+
'email',
|
|
205
|
+
'phone',
|
|
206
|
+
];
|
|
207
|
+
// Create a new object to store masked data
|
|
208
|
+
var maskedData_1 = __assign({}, parsedData);
|
|
209
|
+
// Mask sensitive fields
|
|
210
|
+
sensitiveFields.forEach(function (field) {
|
|
211
|
+
if (field in maskedData_1) {
|
|
212
|
+
maskedData_1[field] = '********'; // Replace value with masked string
|
|
213
|
+
}
|
|
214
|
+
});
|
|
215
|
+
return maskedData_1; // Return the new object with masked fields
|
|
216
|
+
}
|
|
217
|
+
else if (typeof data === 'object') {
|
|
218
|
+
// If data is already an object, handle masking directly
|
|
219
|
+
var sensitiveFields = [
|
|
220
|
+
'username',
|
|
221
|
+
'user',
|
|
222
|
+
'user_id',
|
|
223
|
+
'password',
|
|
224
|
+
'email',
|
|
225
|
+
'phone',
|
|
226
|
+
];
|
|
227
|
+
var maskedData_2 = __assign({}, data);
|
|
228
|
+
// Mask sensitive fields
|
|
229
|
+
sensitiveFields.forEach(function (field) {
|
|
230
|
+
if (field in maskedData_2) {
|
|
231
|
+
maskedData_2[field] = '********'; // Replace value with masked string
|
|
232
|
+
}
|
|
233
|
+
});
|
|
234
|
+
return maskedData_2; // Return the new object with masked fields
|
|
235
|
+
}
|
|
236
|
+
return data;
|
|
237
|
+
};
|
|
238
|
+
// Function to track page hits
|
|
239
|
+
FormoAnalytics.prototype.trackPageHit = function () {
|
|
240
|
+
var _this = this;
|
|
241
|
+
if (window.__nightmare || window.navigator.webdriver || window.Cypress)
|
|
242
|
+
return;
|
|
243
|
+
var location;
|
|
244
|
+
var language;
|
|
245
|
+
try {
|
|
246
|
+
var timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
|
|
247
|
+
location = this.timezoneToCountry[timezone];
|
|
248
|
+
language =
|
|
249
|
+
navigator.languages && navigator.languages.length
|
|
250
|
+
? navigator.languages[0]
|
|
251
|
+
: navigator.language || 'en';
|
|
252
|
+
}
|
|
253
|
+
catch (error) {
|
|
254
|
+
console.error('Error resolving timezone or language:', error);
|
|
255
|
+
}
|
|
256
|
+
setTimeout(function () {
|
|
257
|
+
_this.trackEvent('page_hit', {
|
|
258
|
+
'user-agent': window.navigator.userAgent,
|
|
259
|
+
locale: language,
|
|
260
|
+
location: location,
|
|
261
|
+
referrer: document.referrer,
|
|
262
|
+
pathname: window.location.pathname,
|
|
263
|
+
href: window.location.href,
|
|
264
|
+
});
|
|
265
|
+
}, 300);
|
|
266
|
+
};
|
|
267
|
+
// Function to build the API URL
|
|
268
|
+
FormoAnalytics.prototype.buildApiUrl = function () {
|
|
269
|
+
var _a = this.config, host = _a.host, proxy = _a.proxy, token = _a.token, _b = _a.dataSource, dataSource = _b === void 0 ? 'analytics_events' : _b;
|
|
270
|
+
if (token) {
|
|
271
|
+
if (proxy) {
|
|
272
|
+
return "".concat(proxy, "/api/tracking");
|
|
273
|
+
}
|
|
274
|
+
if (host) {
|
|
275
|
+
return "".concat(host.replace(/\/+$/, ''), "/v0/events?name=").concat(dataSource, "&token=").concat(token);
|
|
276
|
+
}
|
|
277
|
+
return "".concat(constants_1.EVENTS_API, "?name=").concat(dataSource, "&token=").concat(token);
|
|
278
|
+
}
|
|
279
|
+
return 'Error: No token provided';
|
|
280
|
+
};
|
|
281
|
+
FormoAnalytics.prototype.init = function (apiKey, projectId) {
|
|
282
|
+
var instance = new FormoAnalytics(apiKey, projectId);
|
|
283
|
+
return Promise.resolve(instance);
|
|
284
|
+
};
|
|
285
|
+
FormoAnalytics.prototype.identify = function (userData) {
|
|
286
|
+
this.identifyUser(userData);
|
|
287
|
+
};
|
|
288
|
+
FormoAnalytics.prototype.page = function () {
|
|
289
|
+
this.trackPageHit();
|
|
290
|
+
};
|
|
291
|
+
FormoAnalytics.prototype.track = function (eventName, eventData) {
|
|
292
|
+
this.trackEvent(eventName, eventData);
|
|
293
|
+
};
|
|
294
|
+
return FormoAnalytics;
|
|
295
|
+
}());
|
|
296
|
+
exports.FormoAnalytics = FormoAnalytics;
|
|
297
|
+
//# sourceMappingURL=FormoAnalytics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FormoAnalytics.js","sourceRoot":"","sources":["../../../src/FormoAnalytics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { FormoAnalytics } from './FormoAnalytics';
|
|
3
|
+
import { FormoAnalyticsProviderProps } from './types';
|
|
4
|
+
export declare const FormoAnalyticsContext: React.Context<FormoAnalytics | undefined>;
|
|
5
|
+
export declare const FormoAnalyticsProvider: ({ apiKey, projectId, disabled, children, }: FormoAnalyticsProviderProps) => import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
export declare const useFormoAnalytics: () => FormoAnalytics;
|
|
7
|
+
//# sourceMappingURL=FormoAnalyticsProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FormoAnalyticsProvider.d.ts","sourceRoot":"","sources":["../../../src/FormoAnalyticsProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAMN,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,2BAA2B,EAAE,MAAM,SAAS,CAAC;AAEtD,eAAO,MAAM,qBAAqB,2CAEjC,CAAC;AAEF,eAAO,MAAM,sBAAsB,+CAKhC,2BAA2B,4CAsB7B,CAAC;AAEF,eAAO,MAAM,iBAAiB,sBAU7B,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.useFormoAnalytics = exports.FormoAnalyticsProvider = exports.FormoAnalyticsContext = void 0;
|
|
15
|
+
var jsx_runtime_1 = require("react/jsx-runtime");
|
|
16
|
+
var react_1 = require("react");
|
|
17
|
+
var FormoAnalytics_1 = require("./FormoAnalytics");
|
|
18
|
+
exports.FormoAnalyticsContext = (0, react_1.createContext)(undefined);
|
|
19
|
+
var FormoAnalyticsProvider = function (_a) {
|
|
20
|
+
var apiKey = _a.apiKey, projectId = _a.projectId, disabled = _a.disabled, children = _a.children;
|
|
21
|
+
var _b = (0, react_1.useState)(), sdk = _b[0], setSdk = _b[1];
|
|
22
|
+
var initializedStartedRef = (0, react_1.useRef)(false);
|
|
23
|
+
(0, react_1.useEffect)(function () {
|
|
24
|
+
if (!apiKey) {
|
|
25
|
+
throw new Error('FormoAnalyticsProvider: No API key provided');
|
|
26
|
+
}
|
|
27
|
+
if (disabled)
|
|
28
|
+
return;
|
|
29
|
+
if (initializedStartedRef.current)
|
|
30
|
+
return;
|
|
31
|
+
initializedStartedRef.current = true;
|
|
32
|
+
FormoAnalytics_1.FormoAnalytics.init(apiKey, projectId).then(function (sdkInstance) { return setSdk(sdkInstance); });
|
|
33
|
+
}, [apiKey, disabled]);
|
|
34
|
+
return ((0, jsx_runtime_1.jsx)(exports.FormoAnalyticsContext.Provider, __assign({ value: sdk }, { children: children })));
|
|
35
|
+
};
|
|
36
|
+
exports.FormoAnalyticsProvider = FormoAnalyticsProvider;
|
|
37
|
+
var useFormoAnalytics = function () {
|
|
38
|
+
var context = (0, react_1.useContext)(exports.FormoAnalyticsContext);
|
|
39
|
+
if (!context) {
|
|
40
|
+
throw new Error('useFormoAnalytics must be used within a FormoAnalyticsProvider');
|
|
41
|
+
}
|
|
42
|
+
return context;
|
|
43
|
+
};
|
|
44
|
+
exports.useFormoAnalytics = useFormoAnalytics;
|
|
45
|
+
//# sourceMappingURL=FormoAnalyticsProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FormoAnalyticsProvider.js","sourceRoot":"","sources":["../../../src/FormoAnalyticsProvider.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,+BAMe;AACf,mDAAkD;AAGrC,QAAA,qBAAqB,GAAG,IAAA,qBAAa,EAChD,SAAS,CACV,CAAC;AAEK,IAAM,sBAAsB,GAAG,UAAC,EAKT;QAJ5B,MAAM,YAAA,EACN,SAAS,eAAA,EACT,QAAQ,cAAA,EACR,QAAQ,cAAA;IAEF,IAAA,KAAgB,IAAA,gBAAQ,GAA8B,EAArD,GAAG,QAAA,EAAE,MAAM,QAA0C,CAAC;IAC7D,IAAM,qBAAqB,GAAG,IAAA,cAAM,EAAC,KAAK,CAAC,CAAC;IAE5C,IAAA,iBAAS,EAAC;QACR,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;SAChE;QAED,IAAI,QAAQ;YAAE,OAAO;QAErB,IAAI,qBAAqB,CAAC,OAAO;YAAE,OAAO;QAC1C,qBAAqB,CAAC,OAAO,GAAG,IAAI,CAAC;QAErC,+BAAc,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,UAAC,WAAW,IAAK,OAAA,MAAM,CAAC,WAAW,CAAC,EAAnB,CAAmB,CAAC,CAAC;IACpF,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEvB,OAAO,CACL,uBAAC,6BAAqB,CAAC,QAAQ,aAAC,KAAK,EAAE,GAAG,gBACvC,QAAQ,IACsB,CAClC,CAAC;AACJ,CAAC,CAAC;AA3BW,QAAA,sBAAsB,0BA2BjC;AAEK,IAAM,iBAAiB,GAAG;IAC/B,IAAM,OAAO,GAAG,IAAA,kBAAU,EAAC,6BAAqB,CAAC,CAAC;IAElD,IAAI,CAAC,OAAO,EAAE;QACZ,MAAM,IAAI,KAAK,CACb,gEAAgE,CACjE,CAAC;KACH;IAED,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAVW,QAAA,iBAAiB,qBAU5B"}
|