@formo/analytics 1.13.0-alpha.1 → 1.13.3-alpha.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.
Files changed (70) hide show
  1. package/CONTRIBUTING.md +3 -3
  2. package/dist/cjs/src/FormoAnalytics.d.ts +115 -24
  3. package/dist/cjs/src/FormoAnalytics.d.ts.map +1 -1
  4. package/dist/cjs/src/FormoAnalytics.js +442 -65
  5. package/dist/cjs/src/FormoAnalytics.js.map +1 -1
  6. package/dist/cjs/src/constants/config.d.ts +522 -522
  7. package/dist/cjs/src/constants/config.d.ts.map +1 -1
  8. package/dist/cjs/src/constants/config.js +557 -557
  9. package/dist/cjs/src/constants/config.js.map +1 -1
  10. package/dist/cjs/src/constants/events.d.ts +1 -1
  11. package/dist/cjs/src/constants/events.d.ts.map +1 -1
  12. package/dist/cjs/src/constants/events.js +1 -1
  13. package/dist/cjs/src/constants/events.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/src/types/events.d.ts +11 -0
  17. package/dist/cjs/src/types/events.d.ts.map +1 -0
  18. package/dist/cjs/src/types/events.js +16 -0
  19. package/dist/cjs/src/types/events.js.map +1 -0
  20. package/dist/cjs/src/types/index.d.ts +2 -1
  21. package/dist/cjs/src/types/index.d.ts.map +1 -1
  22. package/dist/cjs/src/types/index.js +2 -1
  23. package/dist/cjs/src/types/index.js.map +1 -1
  24. package/dist/cjs/src/types/{wallet.d.ts → provider.d.ts} +5 -1
  25. package/dist/cjs/src/types/provider.d.ts.map +1 -0
  26. package/dist/cjs/src/types/{wallet.js → provider.js} +1 -1
  27. package/dist/cjs/src/types/provider.js.map +1 -0
  28. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  29. package/dist/esm/src/FormoAnalytics.d.ts +115 -24
  30. package/dist/esm/src/FormoAnalytics.d.ts.map +1 -1
  31. package/dist/esm/src/FormoAnalytics.js +443 -66
  32. package/dist/esm/src/FormoAnalytics.js.map +1 -1
  33. package/dist/esm/src/constants/config.d.ts +522 -522
  34. package/dist/esm/src/constants/config.d.ts.map +1 -1
  35. package/dist/esm/src/constants/config.js +556 -556
  36. package/dist/esm/src/constants/config.js.map +1 -1
  37. package/dist/esm/src/constants/events.d.ts +1 -1
  38. package/dist/esm/src/constants/events.d.ts.map +1 -1
  39. package/dist/esm/src/constants/events.js +1 -1
  40. package/dist/esm/src/constants/events.js.map +1 -1
  41. package/dist/esm/src/types/base.d.ts +1 -1
  42. package/dist/esm/src/types/base.d.ts.map +1 -1
  43. package/dist/esm/src/types/events.d.ts +11 -0
  44. package/dist/esm/src/types/events.d.ts.map +1 -0
  45. package/dist/esm/src/types/events.js +13 -0
  46. package/dist/esm/src/types/events.js.map +1 -0
  47. package/dist/esm/src/types/index.d.ts +2 -1
  48. package/dist/esm/src/types/index.d.ts.map +1 -1
  49. package/dist/esm/src/types/index.js +2 -1
  50. package/dist/esm/src/types/index.js.map +1 -1
  51. package/dist/esm/src/types/{wallet.d.ts → provider.d.ts} +5 -1
  52. package/dist/esm/src/types/provider.d.ts.map +1 -0
  53. package/dist/esm/src/types/provider.js +2 -0
  54. package/dist/esm/src/types/provider.js.map +1 -0
  55. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  56. package/dist/index.umd.min.js +1 -1
  57. package/dist/index.umd.min.js.map +1 -1
  58. package/package.json +3 -3
  59. package/src/FormoAnalytics.ts +474 -82
  60. package/src/constants/config.ts +556 -556
  61. package/src/constants/events.ts +1 -1
  62. package/src/types/base.ts +1 -1
  63. package/src/types/events.ts +11 -0
  64. package/src/types/index.ts +2 -1
  65. package/src/types/{wallet.ts → provider.ts} +5 -0
  66. package/dist/cjs/src/types/wallet.d.ts.map +0 -1
  67. package/dist/cjs/src/types/wallet.js.map +0 -1
  68. package/dist/esm/src/types/wallet.d.ts.map +0 -1
  69. package/dist/esm/src/types/wallet.js +0 -2
  70. package/dist/esm/src/types/wallet.js.map +0 -1
package/CONTRIBUTING.md CHANGED
@@ -85,9 +85,9 @@ npm adduser
85
85
  Run the following command to publish the package to NPM:
86
86
 
87
87
  ```jsx
88
- // Increment the version number in package.json and create git tag
89
- npm version
88
+ // Increment the version number in package.json and create git tag https://docs.npmjs.com/cli/v8/commands/npm-version
89
+ npm version <major/minor/patch>
90
90
 
91
91
  // Publish the package to NPM
92
- npm publish
92
+ npm publish
93
93
  ```
@@ -1,34 +1,38 @@
1
- import { ChainID, Address, EIP1193Provider, Options, Config } from "./types";
1
+ import { ChainID, Address, EIP1193Provider, Options, Config, SignatureStatus, TransactionStatus } from "./types";
2
2
  interface IFormoAnalytics {
3
- /**
4
- * Tracks page visit events.
5
- */
6
3
  page(): void;
7
- /**
8
- * Connects to a wallet with the specified chain ID and address.
9
- */
10
4
  connect(params: {
11
5
  chainId: ChainID;
12
- address: string;
6
+ address: Address;
13
7
  }): Promise<void>;
14
- /**
15
- * Disconnects the current wallet.
16
- */
17
8
  disconnect(params?: {
18
9
  chainId?: ChainID;
19
- address?: string;
10
+ address?: Address;
20
11
  }): Promise<void>;
21
- /**
22
- * Switches the blockchain chain context and optionally logs additional params.
23
- */
24
12
  chain(params: {
25
13
  chainId: ChainID;
26
- address?: string;
14
+ address?: Address;
27
15
  }): Promise<void>;
28
- /**
29
- * Tracks a specific event with a name and associated data.
30
- */
31
- track(eventName: string, eventData: Record<string, any>): Promise<void>;
16
+ signature({ status, chainId, address, message, signatureHash, }: {
17
+ status: SignatureStatus;
18
+ chainId?: ChainID;
19
+ address: Address;
20
+ message: string;
21
+ signatureHash?: string;
22
+ }): Promise<void>;
23
+ transaction({ status, chainId, address, data, to, value, transactionHash, }: {
24
+ status: TransactionStatus;
25
+ chainId: ChainID;
26
+ address: Address;
27
+ data?: string;
28
+ to?: string;
29
+ value?: string;
30
+ transactionHash?: string;
31
+ }): Promise<void>;
32
+ identify(params: {
33
+ address: Address;
34
+ }): Promise<void>;
35
+ track(action: string, payload: Record<string, any>): Promise<void>;
32
36
  }
33
37
  export declare class FormoAnalytics implements IFormoAnalytics {
34
38
  readonly apiKey: string;
@@ -40,30 +44,114 @@ export declare class FormoAnalytics implements IFormoAnalytics {
40
44
  currentConnectedAddress?: Address;
41
45
  private constructor();
42
46
  static init(apiKey: string, options?: Options): Promise<FormoAnalytics>;
43
- connect({ chainId, address }: {
47
+ /**
48
+ * Emits a page visit event with the current URL information, fire on page change.
49
+ * @returns {Promise<void>}
50
+ */
51
+ page(): Promise<void>;
52
+ /**
53
+ * Emits a wallet connect event.
54
+ * @param {ChainID} params.chainId
55
+ * @param {Address} params.address
56
+ * @throws {Error} If chainId or address is empty
57
+ * @returns {Promise<void>}
58
+ */
59
+ connect({ chainId, address, }: {
44
60
  chainId: ChainID;
45
61
  address: Address;
46
62
  }): Promise<void>;
63
+ /**
64
+ * Emits a wallet disconnect event.
65
+ * @param {ChainID} params.chainId
66
+ * @param {Address} params.address
67
+ * @returns {Promise<void>}
68
+ */
47
69
  disconnect(params?: {
48
70
  chainId?: ChainID;
49
71
  address?: Address;
50
72
  }): Promise<void>;
51
- chain({ chainId, address }: {
73
+ /**
74
+ * Emits a chain network change event.
75
+ * @param {ChainID} params.chainId
76
+ * @param {Address} params.address
77
+ * @throws {Error} If chainId is empty, zero, or not a valid number
78
+ * @throws {Error} If no address is provided and no previous address is recorded
79
+ * @returns {Promise<void>}
80
+ */
81
+ chain({ chainId, address, }: {
52
82
  chainId: ChainID;
53
83
  address?: Address;
54
84
  }): Promise<void>;
55
- page(): Promise<void>;
56
- track(eventName: string, eventData: Record<string, any>): Promise<void>;
85
+ /**
86
+ * Emits a signature event.
87
+ * @param {SignatureStatus} params.status - requested, confirmed, rejected
88
+ * @param {ChainID} params.chainId
89
+ * @param {Address} params.address
90
+ * @param {string} params.message
91
+ * @param {string} params.signatureHash - only provided if status is confirmed
92
+ * @returns {Promise<void>}
93
+ */
94
+ signature({ status, chainId, address, message, signatureHash, }: {
95
+ status: SignatureStatus;
96
+ chainId?: ChainID;
97
+ address: Address;
98
+ message: string;
99
+ signatureHash?: string;
100
+ }): Promise<void>;
101
+ /**
102
+ * Emits a transaction event.
103
+ * @param {TransactionStatus} params.status - started, broadcasted, rejected
104
+ * @param {ChainID} params.chainId
105
+ * @param {Address} params.address
106
+ * @param {string} params.data
107
+ * @param {string} params.to
108
+ * @param {string} params.value
109
+ * @param {string} params.transactionHash - only provided if status is broadcasted
110
+ * @returns {Promise<void>}
111
+ */
112
+ transaction({ status, chainId, address, data, to, value, transactionHash, }: {
113
+ status: TransactionStatus;
114
+ chainId: ChainID;
115
+ address: Address;
116
+ data?: string;
117
+ to?: string;
118
+ value?: string;
119
+ transactionHash?: string;
120
+ }): Promise<void>;
121
+ /**
122
+ * Emits a identify event with current wallet address.
123
+ * @param {Address} params.address
124
+ * @returns {Promise<void>}
125
+ */
126
+ identify({ address, providerName, rdns }: {
127
+ address: Address;
128
+ providerName?: string;
129
+ rdns?: string;
130
+ }): Promise<void>;
131
+ /**
132
+ * Emits a custom event with custom data.
133
+ * @param {string} action
134
+ * @param {Record<string, any>} payload
135
+ * @returns {Promise<void>}
136
+ */
137
+ track(action: string, payload: Record<string, any>): Promise<void>;
57
138
  private trackProvider;
58
139
  private registerAddressChangedListener;
59
140
  private registerChainChangedListener;
141
+ private registerSignatureListener;
142
+ private registerTransactionListener;
60
143
  private onAddressChanged;
61
144
  private onAddressConnected;
62
145
  private handleDisconnect;
63
146
  private onAddressDisconnected;
64
147
  private onChainChanged;
148
+ private trackFirstPageVisit;
149
+ private trackPagesChange;
150
+ private onLocationChange;
65
151
  private trackPageHit;
66
152
  private trackEvent;
153
+ private getProviders;
154
+ private identifyAll;
67
155
  get provider(): EIP1193Provider | undefined;
68
156
  private getAddress;
69
157
  private getAccounts;
@@ -71,6 +159,9 @@ export declare class FormoAnalytics implements IFormoAnalytics {
71
159
  private getLocation;
72
160
  private getLanguage;
73
161
  private buildEventPayload;
162
+ private buildSignatureEventPayload;
163
+ private buildTransactionEventPayload;
164
+ private getActionDescriptor;
74
165
  }
75
166
  export {};
76
167
  //# sourceMappingURL=FormoAnalytics.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FormoAnalytics.d.ts","sourceRoot":"","sources":["../../../src/FormoAnalytics.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAE7E,UAAU,eAAe;IACvB;;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,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5E;;OAEG;IACH,KAAK,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAErE;;OAEG;IACH,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACzE;AAED,qBAAa,cAAe,YAAW,eAAe;aAYlC,MAAM,EAAE,MAAM;IACvB,OAAO,EAAE,OAAO;IAZzB,OAAO,CAAC,SAAS,CAAC,CAAkB;IACpC,OAAO,CAAC,kBAAkB,CAGnB;IAEP,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAElC,OAAO;WAeM,IAAI,CACf,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,OAAO,GAChB,OAAO,CAAC,cAAc,CAAC;IAUpB,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBpF,UAAU,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAM5E,KAAK,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBnF,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrB,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ7E,OAAO,CAAC,aAAa;IA8BrB,OAAO,CAAC,8BAA8B;IAYtC,OAAO,CAAC,4BAA4B;YAOtB,gBAAgB;YAQhB,kBAAkB;YAYlB,gBAAgB;YAUhB,qBAAqB;YAIrB,cAAc;IAsC5B,OAAO,CAAC,YAAY;YAcN,UAAU;IAyCxB,IAAI,QAAQ,IAAI,eAAe,GAAG,SAAS,CAE1C;YAEa,UAAU;YAsBV,WAAW;YAuBX,iBAAiB;IA0B/B,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,WAAW;YAcL,iBAAiB;CAwBhC"}
1
+ {"version":3,"file":"FormoAnalytics.d.ts","sourceRoot":"","sources":["../../../src/FormoAnalytics.ts"],"names":[],"mappings":"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"}