1
1
import { generateChildLogger , Logger } from "@walletconnect/logger" ;
2
2
import { ICore , IEventClient , EventClientTypes } from "@walletconnect/types" ;
3
- import { uuidv4 } from "@walletconnect/utils" ;
3
+ import { formatUA , isTestRun , uuidv4 } from "@walletconnect/utils" ;
4
4
import {
5
5
CORE_STORAGE_PREFIX ,
6
6
EVENTS_CLIENT_API_URL ,
@@ -16,12 +16,12 @@ export class EventClient extends IEventClient {
16
16
public readonly context = EVENTS_STORAGE_CONTEXT ;
17
17
private readonly storagePrefix = CORE_STORAGE_PREFIX ;
18
18
private readonly storageVersion = EVENTS_STORAGE_VERSION ;
19
-
20
19
private events = new Map < string , EventClientTypes . Event > ( ) ;
21
20
private shouldPersist = false ;
22
21
constructor ( public core : ICore , public logger : Logger , telemetryEnabled = true ) {
23
22
super ( core , logger , telemetryEnabled ) ;
24
23
this . logger = generateChildLogger ( logger , this . context ) ;
24
+ this . telemetryEnabled = telemetryEnabled ;
25
25
if ( telemetryEnabled ) {
26
26
this . restore ( ) . then ( async ( ) => {
27
27
await this . submit ( ) ;
@@ -39,6 +39,31 @@ export class EventClient extends IEventClient {
39
39
) ;
40
40
}
41
41
42
+ public init : IEventClient [ "init" ] = async ( ) => {
43
+ if ( isTestRun ( ) ) return ;
44
+ try {
45
+ const initEvent = {
46
+ eventId : uuidv4 ( ) ,
47
+ timestamp : Date . now ( ) ,
48
+ props : {
49
+ event : "INIT" ,
50
+ type : "" ,
51
+ properties : {
52
+ client_id : await this . core . crypto . getClientId ( ) ,
53
+ user_agent : formatUA (
54
+ this . core . relayer . protocol ,
55
+ this . core . relayer . version ,
56
+ RELAYER_SDK_VERSION ,
57
+ ) ,
58
+ } ,
59
+ } ,
60
+ } ;
61
+ await this . sendEvent ( [ initEvent ] as unknown as EventClientTypes . Event [ ] ) ;
62
+ } catch ( error ) {
63
+ this . logger . warn ( error ) ;
64
+ }
65
+ } ;
66
+
42
67
public createEvent : IEventClient [ "createEvent" ] = ( params ) => {
43
68
const {
44
69
event = "ERROR" ,
@@ -172,13 +197,7 @@ export class EventClient extends IEventClient {
172
197
if ( eventsToSend . length === 0 ) return ;
173
198
174
199
try {
175
- const response = await fetch (
176
- `${ EVENTS_CLIENT_API_URL } ?projectId=${ this . core . projectId } &st=events_sdk&sv=js-${ RELAYER_SDK_VERSION } ` ,
177
- {
178
- method : "POST" ,
179
- body : JSON . stringify ( eventsToSend ) ,
180
- } ,
181
- ) ;
200
+ const response = await this . sendEvent ( eventsToSend ) ;
182
201
if ( response . ok ) {
183
202
for ( const event of eventsToSend ) {
184
203
this . events . delete ( event . eventId ) ;
@@ -189,4 +208,15 @@ export class EventClient extends IEventClient {
189
208
this . logger . warn ( error ) ;
190
209
}
191
210
} ;
211
+
212
+ private sendEvent = async ( events : EventClientTypes . Event [ ] ) => {
213
+ const response = await fetch (
214
+ `${ EVENTS_CLIENT_API_URL } ?projectId=${ this . core . projectId } &st=events_sdk&sv=js-${ RELAYER_SDK_VERSION } ` ,
215
+ {
216
+ method : "POST" ,
217
+ body : JSON . stringify ( events ) ,
218
+ } ,
219
+ ) ;
220
+ return response ;
221
+ } ;
192
222
}
0 commit comments