@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.
Files changed (37) hide show
  1. package/CONTRIBUTING.md +43 -0
  2. package/README.md +4 -251
  3. package/dist/cjs/src/FormoAnalytics.d.ts +10 -9
  4. package/dist/cjs/src/FormoAnalytics.d.ts.map +1 -1
  5. package/dist/cjs/src/FormoAnalytics.js +215 -132
  6. package/dist/cjs/src/FormoAnalytics.js.map +1 -1
  7. package/dist/cjs/src/FormoAnalyticsProvider.d.ts.map +1 -1
  8. package/dist/cjs/src/FormoAnalyticsProvider.js +53 -37
  9. package/dist/cjs/src/FormoAnalyticsProvider.js.map +1 -1
  10. package/dist/cjs/src/constants/config.d.ts +0 -1
  11. package/dist/cjs/src/constants/config.d.ts.map +1 -1
  12. package/dist/cjs/src/constants/config.js +1 -2
  13. package/dist/cjs/src/constants/config.js.map +1 -1
  14. package/dist/cjs/src/types/base.d.ts +1 -1
  15. package/dist/cjs/src/types/base.d.ts.map +1 -1
  16. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  17. package/dist/esm/src/FormoAnalytics.d.ts +10 -9
  18. package/dist/esm/src/FormoAnalytics.d.ts.map +1 -1
  19. package/dist/esm/src/FormoAnalytics.js +216 -133
  20. package/dist/esm/src/FormoAnalytics.js.map +1 -1
  21. package/dist/esm/src/FormoAnalyticsProvider.d.ts.map +1 -1
  22. package/dist/esm/src/FormoAnalyticsProvider.js +53 -37
  23. package/dist/esm/src/FormoAnalyticsProvider.js.map +1 -1
  24. package/dist/esm/src/constants/config.d.ts +0 -1
  25. package/dist/esm/src/constants/config.d.ts.map +1 -1
  26. package/dist/esm/src/constants/config.js +0 -1
  27. package/dist/esm/src/constants/config.js.map +1 -1
  28. package/dist/esm/src/types/base.d.ts +1 -1
  29. package/dist/esm/src/types/base.d.ts.map +1 -1
  30. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  31. package/dist/index.umd.min.js +1 -1
  32. package/dist/index.umd.min.js.map +1 -1
  33. package/package.json +2 -2
  34. package/src/FormoAnalytics.ts +169 -123
  35. package/src/FormoAnalyticsProvider.tsx +36 -30
  36. package/src/constants/config.ts +0 -1
  37. package/src/types/base.ts +1 -1
@@ -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
- # Installation Guide
1
+ # Formo Analytics SDK
2
2
 
3
- ## Option 1 - tracking code
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
- Add the following to your page:
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: Options): Promise<FormoAnalytics>;
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: Options): Promise<FormoAnalytics>;
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":"AAQA,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAE5D,UAAU,eAAe;IACvB;;OAEG;IACH,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAEhE;;OAEG;IACH,IAAI,IAAI,IAAI,CAAC;IAEb;;OAEG;IACH,OAAO,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtE;;OAEG;IACH,UAAU,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAEnE;;OAEG;IACH,KAAK,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAE5D;;OAEG;IACH,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;CAChE;AAID,qBAAa,cAAe,YAAW,eAAe;aAgBlC,MAAM,EAAE,MAAM;IACvB,OAAO,EAAE,OAAO;IAhBzB,OAAO,CAAC,SAAS,CAAC,CAAkB;IACpC,OAAO,CAAC,4BAA4B,CAG7B;IAEP,OAAO,CAAC,uBAAuB,CAAmB;IAClD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,YAAY,CAAkC;IACtD,OAAO,CAAC,iBAAiB,CAAwC;IAEjE,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IAEjC,OAAO;WAeM,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC;IAU5E,IAAI,QAAQ,IAAI,eAAe,GAAG,SAAS,CAE1C;IAED,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,iBAAiB;IAKzB,OAAO,CAAC,cAAc;YAUR,UAAU;IAgExB,OAAO,CAAC,uBAAuB;IA6B/B,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,aAAa;YA0BP,gBAAgB;YAwBhB,iBAAiB;IAiB/B,OAAO,CAAC,8BAA8B;IAYtC,OAAO,CAAC,4BAA4B;YAOtB,gBAAgB;YAWhB,kBAAkB;IAchC,OAAO,CAAC,qBAAqB;YAgBf,cAAc;IA4C5B;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAiB1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAI1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC;IAK/D,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAiBnE,UAAU,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE;IAkB3D,KAAK,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE;IAuBlE,IAAI;IAIJ,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG;CAGxC"}
1
+ {"version":3,"file":"FormoAnalytics.d.ts","sourceRoot":"","sources":["../../../src/FormoAnalytics.ts"],"names":[],"mappings":"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"}