@formo/analytics 1.11.13 → 1.11.14-alpha.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/CONTRIBUTING.md +43 -0
- package/README.md +4 -251
- package/dist/cjs/src/FormoAnalytics.d.ts +10 -9
- package/dist/cjs/src/FormoAnalytics.d.ts.map +1 -1
- package/dist/cjs/src/FormoAnalytics.js +215 -132
- package/dist/cjs/src/FormoAnalytics.js.map +1 -1
- package/dist/cjs/src/FormoAnalyticsProvider.d.ts.map +1 -1
- package/dist/cjs/src/FormoAnalyticsProvider.js +53 -37
- package/dist/cjs/src/FormoAnalyticsProvider.js.map +1 -1
- package/dist/cjs/src/constants/config.d.ts +0 -1
- package/dist/cjs/src/constants/config.d.ts.map +1 -1
- package/dist/cjs/src/constants/config.js +1 -2
- package/dist/cjs/src/constants/config.js.map +1 -1
- package/dist/cjs/src/types/base.d.ts +1 -1
- package/dist/cjs/src/types/base.d.ts.map +1 -1
- package/dist/cjs/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/src/FormoAnalytics.d.ts +10 -9
- package/dist/esm/src/FormoAnalytics.d.ts.map +1 -1
- package/dist/esm/src/FormoAnalytics.js +216 -133
- package/dist/esm/src/FormoAnalytics.js.map +1 -1
- package/dist/esm/src/FormoAnalyticsProvider.d.ts.map +1 -1
- package/dist/esm/src/FormoAnalyticsProvider.js +53 -37
- package/dist/esm/src/FormoAnalyticsProvider.js.map +1 -1
- package/dist/esm/src/constants/config.d.ts +0 -1
- package/dist/esm/src/constants/config.d.ts.map +1 -1
- package/dist/esm/src/constants/config.js +0 -1
- package/dist/esm/src/constants/config.js.map +1 -1
- package/dist/esm/src/types/base.d.ts +1 -1
- package/dist/esm/src/types/base.d.ts.map +1 -1
- package/dist/esm/tsconfig.tsbuildinfo +1 -1
- package/dist/index.umd.min.js +1 -1
- package/dist/index.umd.min.js.map +1 -1
- package/package.json +2 -2
- package/src/FormoAnalytics.ts +169 -123
- package/src/FormoAnalyticsProvider.tsx +36 -30
- package/src/constants/config.ts +0 -1
- package/src/types/base.ts +1 -1
package/CONTRIBUTING.md
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Development Guide
|
|
2
|
+
|
|
3
|
+
If you want to contribute or run a local version of the Formo Analytics SDK, follow these steps:
|
|
4
|
+
|
|
5
|
+
1. Build the SDK Locally
|
|
6
|
+
|
|
7
|
+
Run the following command to build both CommonJS and ESM versions of the SDK:
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
yarn build-cjs && yarn build-esm && yarn webpack --mode=production
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
or if you're using NPM:
|
|
14
|
+
|
|
15
|
+
```jsx
|
|
16
|
+
npm run build
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
2. Authenticate with NPM
|
|
20
|
+
|
|
21
|
+
To publish a new version of the package, log in to your NPM account:
|
|
22
|
+
|
|
23
|
+
```jsx
|
|
24
|
+
npm login
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
or:
|
|
28
|
+
|
|
29
|
+
```jsx
|
|
30
|
+
npm adduser
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
3. Publish the Package
|
|
34
|
+
|
|
35
|
+
Run the following command to publish the package to NPM:
|
|
36
|
+
|
|
37
|
+
```jsx
|
|
38
|
+
npm version prerelease --preid alpha
|
|
39
|
+
OR
|
|
40
|
+
npm version
|
|
41
|
+
|
|
42
|
+
npm run publish
|
|
43
|
+
```
|
package/README.md
CHANGED
|
@@ -1,255 +1,8 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Formo Analytics SDK
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
The Formo Analytics SDK is a Javascript library that allows you to track and analyze user interactions on your dapp.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
## Installation
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Please visit Formo's [Developer Docs](https://docs.formo.so) for detailed guides and installation instructions.
|
|
8
8
|
|
|
9
|
-
```html
|
|
10
|
-
<script>
|
|
11
|
-
const script = document.createElement('script');
|
|
12
|
-
const apiKey = 'YOUR_API_KEY';
|
|
13
|
-
|
|
14
|
-
script.src = 'https://unpkg.com/@formo/analytics';
|
|
15
|
-
script.onload = function () {
|
|
16
|
-
FormoAnalytics.init(apiKey)
|
|
17
|
-
.then((sdkInstance) => {
|
|
18
|
-
window.formo = sdkInstance;
|
|
19
|
-
|
|
20
|
-
// Call the public `page` method to track a page hit
|
|
21
|
-
window.formo.page();
|
|
22
|
-
})
|
|
23
|
-
.catch((error) => {
|
|
24
|
-
console.error('Error initializing FormoAnalytics:', error);
|
|
25
|
-
});
|
|
26
|
-
};
|
|
27
|
-
document.head.appendChild(script);
|
|
28
|
-
</script>
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
## Option 2 - using npm package
|
|
32
|
-
|
|
33
|
-
---
|
|
34
|
-
|
|
35
|
-
### React Application
|
|
36
|
-
|
|
37
|
-
**1. Install the SDK**
|
|
38
|
-
Install the Formo Analytics SDK using Yarn or NPM:
|
|
39
|
-
|
|
40
|
-
```jsx
|
|
41
|
-
yarn add @formo/analytics
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
or
|
|
45
|
-
|
|
46
|
-
```jsx
|
|
47
|
-
npm install @formo/analytics --save
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
**2. Set up FormoAnalyticsProvider in Your Application**
|
|
51
|
-
|
|
52
|
-
Wrap your entire React application in the `FormoAnalyticsProvider` provided by the SDK.
|
|
53
|
-
|
|
54
|
-
```jsx
|
|
55
|
-
//App.tsx (or App.js)
|
|
56
|
-
import React from 'react';
|
|
57
|
-
import ReactDOM from 'react-dom/client';
|
|
58
|
-
import { FormoAnalyticsProvider } from '@formo/analytics';
|
|
59
|
-
import App from './App';
|
|
60
|
-
|
|
61
|
-
const root = ReactDOM.createRoot(document.getElementById('root') as HTMLElement);
|
|
62
|
-
|
|
63
|
-
root.render(
|
|
64
|
-
<React.StrictMode>
|
|
65
|
-
<FormoAnalyticsProvider apiKey="YOUR_API_KEY">
|
|
66
|
-
<App />
|
|
67
|
-
</FormoAnalyticsProvider>
|
|
68
|
-
</React.StrictMode>
|
|
69
|
-
);
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
**3. Tracking Events**
|
|
73
|
-
|
|
74
|
-
You can use the `useFormoAnalytics` hook from the SDK to track user interactions.
|
|
75
|
-
|
|
76
|
-
Example: Tracking a Custom Event
|
|
77
|
-
|
|
78
|
-
```jsx
|
|
79
|
-
import React, { useEffect } from 'react';
|
|
80
|
-
import { useFormoAnalytics } from '@formo/analytics';
|
|
81
|
-
|
|
82
|
-
const HomePage = () => {
|
|
83
|
-
const analytics = useFormoAnalytics();
|
|
84
|
-
|
|
85
|
-
useEffect(() => {
|
|
86
|
-
// Track a custom event
|
|
87
|
-
analytics.track('custom_event', { key: 'value' });
|
|
88
|
-
}, [analytics]);
|
|
89
|
-
|
|
90
|
-
return <div>Welcome to the Home Page!</div>;
|
|
91
|
-
};
|
|
92
|
-
|
|
93
|
-
export default HomePage;
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
**4. Folder Structure Example**
|
|
97
|
-
|
|
98
|
-
```
|
|
99
|
-
/src
|
|
100
|
-
├── /components
|
|
101
|
-
│ └── HomePage.tsx
|
|
102
|
-
├── /App.tsx
|
|
103
|
-
└── /index.tsx (or index.js)
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
---
|
|
107
|
-
|
|
108
|
-
### Next.js Application
|
|
109
|
-
|
|
110
|
-
**1. Install the npm package:**
|
|
111
|
-
|
|
112
|
-
Install `@formo/analytics` via yarn or npm:
|
|
113
|
-
|
|
114
|
-
```jsx
|
|
115
|
-
yarn add @formo/analytics
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
or
|
|
119
|
-
|
|
120
|
-
```jsx
|
|
121
|
-
npm install @formo/analytics --save
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
**2. Set up the `FormoAnalyticsProvider` in your application:**
|
|
125
|
-
|
|
126
|
-
```jsx
|
|
127
|
-
// AnalyticsProvider.tsx
|
|
128
|
-
|
|
129
|
-
'use client';
|
|
130
|
-
|
|
131
|
-
import { FormoAnalytics, FormoAnalyticsProvider } from '@formo/analytics';
|
|
132
|
-
import React, { FC, useEffect } from 'react';
|
|
133
|
-
|
|
134
|
-
type FormoAnalyticsProviderProps = {
|
|
135
|
-
apiKey: string,
|
|
136
|
-
children: React.ReactNode,
|
|
137
|
-
};
|
|
138
|
-
|
|
139
|
-
// The provider component
|
|
140
|
-
export const AnalyticsProvider: FC<FormoAnalyticsProviderProps> = ({
|
|
141
|
-
apiKey,
|
|
142
|
-
children,
|
|
143
|
-
}) => {
|
|
144
|
-
return (
|
|
145
|
-
<FormoAnalyticsProvider apiKey={apiKey}>
|
|
146
|
-
{children}
|
|
147
|
-
</FormoAnalyticsProvider>
|
|
148
|
-
);
|
|
149
|
-
};
|
|
150
|
-
|
|
151
|
-
export default AnalyticsProvider;
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
**3. Integrating the Provider in Your Root Layout**
|
|
155
|
-
|
|
156
|
-
Wrap your application with the newly created `AnalyticsProvider` in your main layout file:
|
|
157
|
-
|
|
158
|
-
```jsx
|
|
159
|
-
import { AnalyticsProvider } from './AnalyticsProvider';
|
|
160
|
-
|
|
161
|
-
export default function RootLayout({
|
|
162
|
-
children,
|
|
163
|
-
}: {
|
|
164
|
-
children: React.ReactNode,
|
|
165
|
-
}) {
|
|
166
|
-
return (
|
|
167
|
-
<html lang='en'>
|
|
168
|
-
<body>
|
|
169
|
-
<AnalyticsProvider apiKey='YOUR_API_KEY'>
|
|
170
|
-
Your Page Content
|
|
171
|
-
</AnalyticsProvider>
|
|
172
|
-
</body>
|
|
173
|
-
</html>
|
|
174
|
-
);
|
|
175
|
-
}
|
|
176
|
-
```
|
|
177
|
-
|
|
178
|
-
**4. Using the SDK**
|
|
179
|
-
|
|
180
|
-
Once the SDK is initialized, you can use its methods to track events and user interactions. Here’s how to do that:
|
|
181
|
-
|
|
182
|
-
```jsx
|
|
183
|
-
import { useFormoAnalytics } from '@formo/analytics';
|
|
184
|
-
import React, { useEffect } from 'react';
|
|
185
|
-
|
|
186
|
-
const YourComponent = () => {
|
|
187
|
-
const analytics = useFormoAnalytics();
|
|
188
|
-
|
|
189
|
-
useEffect(() => {
|
|
190
|
-
const track = async () => {
|
|
191
|
-
try {
|
|
192
|
-
analytics.track('custom_event', { key: 'value' }); // Track a custom event
|
|
193
|
-
} catch (error) {
|
|
194
|
-
console.error('Failed to track event', error);
|
|
195
|
-
}
|
|
196
|
-
};
|
|
197
|
-
|
|
198
|
-
track();
|
|
199
|
-
}, [analytics]);
|
|
200
|
-
|
|
201
|
-
return <div>Your Component Content</div>;
|
|
202
|
-
};
|
|
203
|
-
```
|
|
204
|
-
|
|
205
|
-
# Development Notes
|
|
206
|
-
|
|
207
|
-
If you want to contribute or run a local version of the Formo Analytics SDK, follow these steps:
|
|
208
|
-
|
|
209
|
-
1. Build the SDK Locally
|
|
210
|
-
|
|
211
|
-
Run the following command to build both CommonJS and ESM versions of the SDK:
|
|
212
|
-
|
|
213
|
-
```jsx
|
|
214
|
-
yarn build-cjs && yarn build-esm && yarn webpack --mode=production
|
|
215
|
-
```
|
|
216
|
-
|
|
217
|
-
or if you're using NPM:
|
|
218
|
-
|
|
219
|
-
```jsx
|
|
220
|
-
yarn build
|
|
221
|
-
```
|
|
222
|
-
|
|
223
|
-
2. Authenticate with NPM
|
|
224
|
-
|
|
225
|
-
To publish a new version of the package, log in to your NPM account:
|
|
226
|
-
|
|
227
|
-
```jsx
|
|
228
|
-
npm login
|
|
229
|
-
```
|
|
230
|
-
|
|
231
|
-
or:
|
|
232
|
-
|
|
233
|
-
```jsx
|
|
234
|
-
npm adduser
|
|
235
|
-
```
|
|
236
|
-
|
|
237
|
-
3. Publish the Package
|
|
238
|
-
|
|
239
|
-
Run the following command to publish the package to NPM:
|
|
240
|
-
|
|
241
|
-
```jsx
|
|
242
|
-
yarn publish
|
|
243
|
-
```
|
|
244
|
-
|
|
245
|
-
or:
|
|
246
|
-
|
|
247
|
-
```jsx
|
|
248
|
-
npm run publish
|
|
249
|
-
```
|
|
250
|
-
|
|
251
|
-
# Troubleshooting
|
|
252
|
-
|
|
253
|
-
**API Key Not Provided:** Ensure you pass a valid apiKey when initializing the SDK.
|
|
254
|
-
**SDK Not Initialized:** If you encounter issues with initialization, check the console logs for errors and ensure the project ID and API key are correct.
|
|
255
|
-
**Network Errors:** Verify that the analytics service URL is accessible from your network.
|
|
@@ -3,7 +3,7 @@ interface IFormoAnalytics {
|
|
|
3
3
|
/**
|
|
4
4
|
* Initializes the FormoAnalytics instance with the provided API key and project ID.
|
|
5
5
|
*/
|
|
6
|
-
init(apiKey: string, options
|
|
6
|
+
init(apiKey: string, options?: Options): Promise<FormoAnalytics>;
|
|
7
7
|
/**
|
|
8
8
|
* Tracks page visit events.
|
|
9
9
|
*/
|
|
@@ -41,28 +41,29 @@ export declare class FormoAnalytics implements IFormoAnalytics {
|
|
|
41
41
|
private _registeredProviderListeners;
|
|
42
42
|
private walletAddressSessionKey;
|
|
43
43
|
private config;
|
|
44
|
-
private sessionIdKey;
|
|
45
44
|
private timezoneToCountry;
|
|
46
45
|
currentChainId?: string | null;
|
|
47
46
|
currentConnectedAddress?: string;
|
|
48
47
|
private constructor();
|
|
49
|
-
static init(apiKey: string, options
|
|
48
|
+
static init(apiKey: string, options?: Options): Promise<FormoAnalytics>;
|
|
50
49
|
get provider(): EIP1193Provider | undefined;
|
|
51
|
-
private getSessionId;
|
|
52
|
-
private getOrigin;
|
|
53
|
-
private setSessionCookie;
|
|
54
|
-
private generateSessionId;
|
|
55
|
-
private getCookieValue;
|
|
56
50
|
private trackEvent;
|
|
57
|
-
private getCommonTrackingFields;
|
|
58
51
|
private trackPageHit;
|
|
52
|
+
private isAutomationEnvironment;
|
|
53
|
+
private getUserLocation;
|
|
54
|
+
private getUserLanguage;
|
|
55
|
+
buildEventPayload(eventSpecificPayload?: Record<string, unknown>): Promise<Record<string, unknown>>;
|
|
59
56
|
private trackProvider;
|
|
57
|
+
private getAndStoreConnectedAddress;
|
|
60
58
|
private getCurrentWallet;
|
|
59
|
+
private fetchAccounts;
|
|
60
|
+
private fetchChainId;
|
|
61
61
|
private getCurrentChainId;
|
|
62
62
|
private registerAddressChangedListener;
|
|
63
63
|
private registerChainChangedListener;
|
|
64
64
|
private onAddressChanged;
|
|
65
65
|
private onAddressConnected;
|
|
66
|
+
private handleDisconnection;
|
|
66
67
|
private onAddressDisconnected;
|
|
67
68
|
private onChainChanged;
|
|
68
69
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormoAnalytics.d.ts","sourceRoot":"","sources":["../../../src/FormoAnalytics.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"FormoAnalytics.d.ts","sourceRoot":"","sources":["../../../src/FormoAnalytics.ts"],"names":[],"mappings":"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"}
|