@xyo-network/react-user-events 3.0.16
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/LICENSE +165 -0
- package/README.md +13 -0
- package/dist/browser/CustomProperties.d.ts +6 -0
- package/dist/browser/CustomProperties.d.ts.map +1 -0
- package/dist/browser/Facebook/index.d.ts +11 -0
- package/dist/browser/Facebook/index.d.ts.map +1 -0
- package/dist/browser/FacebookEventHandler.d.ts +14 -0
- package/dist/browser/FacebookEventHandler.d.ts.map +1 -0
- package/dist/browser/Google/index.d.ts +18 -0
- package/dist/browser/Google/index.d.ts.map +1 -0
- package/dist/browser/GoogleEventHandler.d.ts +14 -0
- package/dist/browser/GoogleEventHandler.d.ts.map +1 -0
- package/dist/browser/Mixpanel/index.d.ts +13 -0
- package/dist/browser/Mixpanel/index.d.ts.map +1 -0
- package/dist/browser/MixpanelEventHandler.d.ts +15 -0
- package/dist/browser/MixpanelEventHandler.d.ts.map +1 -0
- package/dist/browser/Reddit/index.d.ts +4 -0
- package/dist/browser/Reddit/index.d.ts.map +1 -0
- package/dist/browser/Snapchat/index.d.ts +4 -0
- package/dist/browser/Snapchat/index.d.ts.map +1 -0
- package/dist/browser/TestData.d.ts +7 -0
- package/dist/browser/TestData.d.ts.map +1 -0
- package/dist/browser/Tiktok/index.d.ts +4 -0
- package/dist/browser/Tiktok/index.d.ts.map +1 -0
- package/dist/browser/XnsEstimateEventHandlerInterface.d.ts +19 -0
- package/dist/browser/XnsEstimateEventHandlerInterface.d.ts.map +1 -0
- package/dist/browser/XnsPurchaseEventHandlerInterface.d.ts +23 -0
- package/dist/browser/XnsPurchaseEventHandlerInterface.d.ts.map +1 -0
- package/dist/browser/XnsReservationEventHandlerInterface.d.ts +19 -0
- package/dist/browser/XnsReservationEventHandlerInterface.d.ts.map +1 -0
- package/dist/browser/Xy/index.d.ts +11 -0
- package/dist/browser/Xy/index.d.ts.map +1 -0
- package/dist/browser/XyoEventHandler.d.ts +36 -0
- package/dist/browser/XyoEventHandler.d.ts.map +1 -0
- package/dist/browser/XyoEventHandlerInterface.d.ts +17 -0
- package/dist/browser/XyoEventHandlerInterface.d.ts.map +1 -0
- package/dist/browser/XyoUserClickFields.d.ts +7 -0
- package/dist/browser/XyoUserClickFields.d.ts.map +1 -0
- package/dist/browser/XyoUserEvents.d.ts +29 -0
- package/dist/browser/XyoUserEvents.d.ts.map +1 -0
- package/dist/browser/getXyoUserEvents.d.ts +3 -0
- package/dist/browser/getXyoUserEvents.d.ts.map +1 -0
- package/dist/browser/hooks/index.d.ts +2 -0
- package/dist/browser/hooks/index.d.ts.map +1 -0
- package/dist/browser/hooks/useXyoUserEvents.d.ts +3 -0
- package/dist/browser/hooks/useXyoUserEvents.d.ts.map +1 -0
- package/dist/browser/index.d.ts +5 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.mjs +306 -0
- package/dist/browser/index.mjs.map +1 -0
- package/package.json +80 -0
- package/src/CustomProperties.ts +5 -0
- package/src/Facebook/index.ts +17 -0
- package/src/FacebookEventHandler.ts +41 -0
- package/src/Google/index.ts +33 -0
- package/src/GoogleEventHandler.ts +28 -0
- package/src/Mixpanel/index.ts +26 -0
- package/src/MixpanelEventHandler.ts +25 -0
- package/src/Reddit/index.ts +3 -0
- package/src/Snapchat/index.ts +3 -0
- package/src/TestData.ts +11 -0
- package/src/Tiktok/index.ts +3 -0
- package/src/XnsEstimateEventHandlerInterface.ts +24 -0
- package/src/XnsPurchaseEventHandlerInterface.ts +30 -0
- package/src/XnsReservationEventHandlerInterface.ts +23 -0
- package/src/Xy/index.ts +27 -0
- package/src/XyoEventHandler.ts +93 -0
- package/src/XyoEventHandlerInterface.ts +29 -0
- package/src/XyoUserClickFields.ts +6 -0
- package/src/XyoUserEvents.ts +97 -0
- package/src/getXyoUserEvents.ts +10 -0
- package/src/hooks/index.ts +1 -0
- package/src/hooks/useXyoUserEvents.ts +7 -0
- package/src/index.ts +4 -0
- package/typedoc.json +5 -0
- package/xy.config.ts +10 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { EmptyObject } from '@xylabs/object'
|
|
2
|
+
import type { UserEventHandler } from '@xylabs/pixel'
|
|
3
|
+
|
|
4
|
+
export interface XnsEstimateFields extends EmptyObject {
|
|
5
|
+
name: string
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export interface XnsEstimateAttemptedFields extends XnsEstimateFields {}
|
|
9
|
+
|
|
10
|
+
export interface XnsEstimateSuccessFields extends XnsEstimateFields {
|
|
11
|
+
price: number
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export interface XnsEstimateFailureFields extends XnsEstimateFields {
|
|
15
|
+
error: string
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export interface XnsEstimateEventHandlerInterface<TData extends EmptyObject> extends UserEventHandler<TData> {
|
|
19
|
+
xnsEstimateAttempted<T extends TData>(fields: XnsEstimateAttemptedFields | T): Promise<void>
|
|
20
|
+
|
|
21
|
+
xnsEstimateFailure<T extends TData>(fields: XnsEstimateFailureFields | T): Promise<void>
|
|
22
|
+
|
|
23
|
+
xnsEstimateSuccess<T extends TData>(fields: XnsEstimateSuccessFields | T): Promise<void>
|
|
24
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { EmptyObject } from '@xylabs/object'
|
|
2
|
+
import type { UserEventHandler } from '@xylabs/pixel'
|
|
3
|
+
|
|
4
|
+
export interface XnsPurchaseFields extends EmptyObject {
|
|
5
|
+
name: string
|
|
6
|
+
price: number
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export interface XnsPurchaseAttemptedFields extends XnsPurchaseFields {}
|
|
10
|
+
|
|
11
|
+
export interface XnsPurchaseSuccessFields extends XnsPurchaseFields {
|
|
12
|
+
currency?: string
|
|
13
|
+
/** Identifier for the purchase - rebilly or payload hash */
|
|
14
|
+
id: string
|
|
15
|
+
quantity?: number
|
|
16
|
+
/** price - discount */
|
|
17
|
+
value: number
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export interface XnsPurchaseFailureFields extends XnsPurchaseFields {
|
|
21
|
+
error: string
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export interface XnsPurchaseEventHandlerInterface<TData extends EmptyObject> extends UserEventHandler<TData> {
|
|
25
|
+
xnsPurchaseAttempted<T extends TData>(fields: T | XnsPurchaseAttemptedFields): Promise<void>
|
|
26
|
+
|
|
27
|
+
xnsPurchaseFailure<T extends TData>(fields: T | XnsPurchaseFailureFields): Promise<void>
|
|
28
|
+
|
|
29
|
+
xnsPurchaseSuccess<T extends TData>(fields: T | XnsPurchaseSuccessFields): Promise<void>
|
|
30
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { EmptyObject } from '@xylabs/object'
|
|
2
|
+
import type { UserEventHandler } from '@xylabs/pixel'
|
|
3
|
+
|
|
4
|
+
export interface XnsReservationFields extends EmptyObject {
|
|
5
|
+
email_hash: string
|
|
6
|
+
name: string
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export interface XnsReservationAttemptedFields extends XnsReservationFields {}
|
|
10
|
+
|
|
11
|
+
export interface XnsReservationSuccessFields extends XnsReservationFields {}
|
|
12
|
+
|
|
13
|
+
export interface XnsReservationFailureFields extends XnsReservationFields {
|
|
14
|
+
error: string
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export interface XnsReservationEventHandlerInterface<TData extends EmptyObject> extends UserEventHandler<TData> {
|
|
18
|
+
xnsReservationAttempted<T extends TData>(fields: T | XnsReservationAttemptedFields): Promise<void>
|
|
19
|
+
|
|
20
|
+
xnsReservationFailure<T extends TData>(fields: T | XnsReservationFailureFields): Promise<void>
|
|
21
|
+
|
|
22
|
+
xnsReservationSuccess<T extends TData>(fields: T | XnsReservationSuccessFields): Promise<void>
|
|
23
|
+
}
|
package/src/Xy/index.ts
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { EmptyObject } from '@xylabs/object'
|
|
2
|
+
import type {
|
|
3
|
+
PurchaseFields, UserClickFields, ViewContentFields,
|
|
4
|
+
} from '@xylabs/pixel'
|
|
5
|
+
import { XyCustomEvent } from '@xylabs/react-pixel'
|
|
6
|
+
|
|
7
|
+
export class XyEvents<T extends EmptyObject> {
|
|
8
|
+
custom(name: string) {
|
|
9
|
+
return new XyCustomEvent<PurchaseFields | T>(name)
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
pageview() {
|
|
13
|
+
return new XyCustomEvent<ViewContentFields | T>('ViewContent')
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
purchase() {
|
|
17
|
+
return new XyCustomEvent<PurchaseFields | T>('Purchase')
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
userClick() {
|
|
21
|
+
return new XyCustomEvent<UserClickFields | T>('UserClick')
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
viewContent() {
|
|
25
|
+
return new XyCustomEvent<ViewContentFields | T>('ViewContent')
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import type { EmptyObject } from '@xylabs/object'
|
|
2
|
+
import type {
|
|
3
|
+
FunnelStartedFields, PurchaseFields, TestStartedFields, UserClickFields, ViewContentFields,
|
|
4
|
+
} from '@xylabs/pixel'
|
|
5
|
+
import { UserEventHandler } from '@xylabs/pixel'
|
|
6
|
+
import type { Promisable } from '@xylabs/promise'
|
|
7
|
+
|
|
8
|
+
import type {
|
|
9
|
+
XnsEstimateAttemptedFields, XnsEstimateFailureFields, XnsEstimateSuccessFields,
|
|
10
|
+
} from './XnsEstimateEventHandlerInterface.ts'
|
|
11
|
+
import type {
|
|
12
|
+
XnsPurchaseAttemptedFields, XnsPurchaseFailureFields, XnsPurchaseSuccessFields,
|
|
13
|
+
} from './XnsPurchaseEventHandlerInterface.js'
|
|
14
|
+
import type {
|
|
15
|
+
XnsReservationAttemptedFields, XnsReservationFailureFields, XnsReservationSuccessFields,
|
|
16
|
+
} from './XnsReservationEventHandlerInterface.ts'
|
|
17
|
+
import { XyEvents } from './Xy/index.ts'
|
|
18
|
+
import type { XyoEventHandlerInterface, XyoNewsletterSignupFields } from './XyoEventHandlerInterface.ts'
|
|
19
|
+
|
|
20
|
+
export interface Event<TData extends EmptyObject = EmptyObject> {
|
|
21
|
+
send<T extends TData>(fields: T, eventId?: string): Promisable<void>
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export interface Events<TData extends EmptyObject = EmptyObject> {
|
|
25
|
+
custom<T extends TData>(name: string): Event<T>
|
|
26
|
+
purchase<T extends TData>(): Event<PurchaseFields | T>
|
|
27
|
+
userClick<T extends TData>(): Event<UserClickFields | T>
|
|
28
|
+
viewContent<T extends TData>(): Event<ViewContentFields | T>
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export class XyoEventHandler<T extends EmptyObject> extends UserEventHandler<T> implements XyoEventHandlerInterface<T> {
|
|
32
|
+
private _events = new XyEvents()
|
|
33
|
+
|
|
34
|
+
get events(): Events<T> {
|
|
35
|
+
return this._events
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
funnelStarted(_fields: T | FunnelStartedFields): Promise<void> {
|
|
39
|
+
throw new Error('Method not implemented.')
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
testStarted(_fields: T | TestStartedFields): Promise<void> {
|
|
43
|
+
throw new Error('Method not implemented.')
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
async userClick(fields: UserClickFields) {
|
|
47
|
+
await this.events.userClick().send(fields)
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
async viewContent(fields: ViewContentFields) {
|
|
51
|
+
await this.events.viewContent().send(fields)
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
async xnsEstimateAttempted(fields: XnsEstimateAttemptedFields | T) {
|
|
55
|
+
await this.events.custom('XnsEstimateAttempted').send(fields as T)
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
async xnsEstimateFailure(fields: XnsEstimateFailureFields | T) {
|
|
59
|
+
await this.events.custom('XnsEstimateFailure').send(fields as T)
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
async xnsEstimateSuccess(fields: XnsEstimateSuccessFields | T) {
|
|
63
|
+
await this.events.custom('XnsEstimateSuccess').send(fields as T)
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
async xnsPurchaseAttempted(fields: XnsPurchaseAttemptedFields | T) {
|
|
67
|
+
await this.events.custom('XnsPurchaseAttempted').send(fields as T)
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
async xnsPurchaseFailure(fields: XnsPurchaseFailureFields | T) {
|
|
71
|
+
await this.events.custom('XnsPurchaseFailure').send(fields as T)
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
async xnsPurchaseSuccess(fields: XnsPurchaseSuccessFields) {
|
|
75
|
+
await this.events.purchase().send(fields)
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
async xnsReservationAttempted(fields: XnsReservationAttemptedFields | T) {
|
|
79
|
+
await this.events.custom('XnsReservationAttempted').send(fields as T)
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
async xnsReservationFailure(fields: XnsReservationFailureFields | T) {
|
|
83
|
+
await this.events.custom('XnsReservationFailure').send(fields as T)
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
async xnsReservationSuccess(fields: XnsReservationSuccessFields | T) {
|
|
87
|
+
await this.events.custom('XnsReservationSuccess').send(fields as T)
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
async xyoNewsletterSignup(fields: XyoNewsletterSignupFields | T) {
|
|
91
|
+
await this.events.custom('XyoNewsletterSignup').send(fields as T)
|
|
92
|
+
}
|
|
93
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { EmptyObject } from '@xylabs/object'
|
|
2
|
+
import type {
|
|
3
|
+
FunnelStartedFields, TestStartedFields, UserClickFields, UserEventHandler, ViewContentFields,
|
|
4
|
+
} from '@xylabs/pixel'
|
|
5
|
+
|
|
6
|
+
import type { XnsEstimateEventHandlerInterface } from './XnsEstimateEventHandlerInterface.ts'
|
|
7
|
+
import type { XnsPurchaseEventHandlerInterface } from './XnsPurchaseEventHandlerInterface.ts'
|
|
8
|
+
import type { XnsReservationEventHandlerInterface } from './XnsReservationEventHandlerInterface.ts'
|
|
9
|
+
|
|
10
|
+
export interface XyoNewsletterSignupFields extends Record<string, unknown> {
|
|
11
|
+
email: string
|
|
12
|
+
url: string
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface XyoEventHandlerInterface<TData extends EmptyObject>
|
|
16
|
+
extends UserEventHandler<TData>,
|
|
17
|
+
XnsEstimateEventHandlerInterface<TData>,
|
|
18
|
+
XnsReservationEventHandlerInterface<TData>,
|
|
19
|
+
XnsPurchaseEventHandlerInterface<TData> {
|
|
20
|
+
funnelStarted<T extends TData>(_fields: T | FunnelStartedFields): Promise<void>
|
|
21
|
+
|
|
22
|
+
testStarted<T extends TData>(_fields: T | TestStartedFields): Promise<void>
|
|
23
|
+
|
|
24
|
+
userClick<T extends TData>(fields: T | UserClickFields): Promise<void>
|
|
25
|
+
|
|
26
|
+
viewContent<T extends TData>(fields: T | ViewContentFields): Promise<void>
|
|
27
|
+
|
|
28
|
+
xyoNewsletterSignup<T extends TData>(fields: T | XyoNewsletterSignupFields): Promise<void>
|
|
29
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import type { EmptyObject } from '@xylabs/object'
|
|
2
|
+
import type {
|
|
3
|
+
FunnelStartedFields, TestStartedFields, UserClickFields, ViewContentFields,
|
|
4
|
+
} from '@xylabs/pixel'
|
|
5
|
+
import { UserEventHandler } from '@xylabs/pixel'
|
|
6
|
+
import type { Mixpanel } from 'mixpanel-browser'
|
|
7
|
+
|
|
8
|
+
import { FacebookEventHandler } from './FacebookEventHandler.ts'
|
|
9
|
+
import { GoogleEventHandler } from './GoogleEventHandler.ts'
|
|
10
|
+
import { MixpanelEventHandler } from './MixpanelEventHandler.ts'
|
|
11
|
+
import type {
|
|
12
|
+
XnsEstimateAttemptedFields, XnsEstimateFailureFields, XnsEstimateSuccessFields,
|
|
13
|
+
} from './XnsEstimateEventHandlerInterface.ts'
|
|
14
|
+
import type {
|
|
15
|
+
XnsPurchaseAttemptedFields, XnsPurchaseFailureFields, XnsPurchaseSuccessFields,
|
|
16
|
+
} from './XnsPurchaseEventHandlerInterface.ts'
|
|
17
|
+
import type {
|
|
18
|
+
XnsReservationAttemptedFields, XnsReservationFailureFields, XnsReservationSuccessFields,
|
|
19
|
+
} from './XnsReservationEventHandlerInterface.ts'
|
|
20
|
+
import { XyoEventHandler } from './XyoEventHandler.ts'
|
|
21
|
+
import type { XyoEventHandlerInterface, XyoNewsletterSignupFields } from './XyoEventHandlerInterface.ts'
|
|
22
|
+
|
|
23
|
+
export class XyoUserEvents<TData extends EmptyObject = EmptyObject> extends UserEventHandler<TData> {
|
|
24
|
+
static instance: XyoUserEvents<EmptyObject>
|
|
25
|
+
|
|
26
|
+
protected handlers: XyoEventHandlerInterface<TData>[]
|
|
27
|
+
|
|
28
|
+
private constructor(handlers?: XyoEventHandlerInterface<TData>[]) {
|
|
29
|
+
super()
|
|
30
|
+
this.handlers = handlers ?? [new XyoEventHandler<TData>(), new FacebookEventHandler<TData>(), new GoogleEventHandler<TData>()]
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
static get<T extends EmptyObject = EmptyObject>(mixpanel?: Mixpanel) {
|
|
34
|
+
this.instance = this.instance ?? (() => {
|
|
35
|
+
const handlers = [new XyoEventHandler<T>(), new FacebookEventHandler<T>(), new GoogleEventHandler<T>()]
|
|
36
|
+
if (mixpanel) handlers.push(new MixpanelEventHandler(mixpanel))
|
|
37
|
+
return new XyoUserEvents<T>(handlers)
|
|
38
|
+
})()
|
|
39
|
+
return this.instance
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
funnelStarted<T extends TData>(_fields: T | FunnelStartedFields): Promise<void> {
|
|
43
|
+
throw new Error('Method not implemented.')
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
testStarted<T extends TData>(_fields: T | TestStartedFields): Promise<void> {
|
|
47
|
+
throw new Error('Method not implemented.')
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
async userClick<T extends TData>(fields: T | UserClickFields) {
|
|
51
|
+
await Promise.all(this.handlers.map(handler => handler.userClick<T>(fields)))
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
async viewContent<T extends TData>(fields: T | ViewContentFields) {
|
|
55
|
+
await Promise.all(this.handlers.map(handler => handler.viewContent(fields)))
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
async xnsEstimateAttempted<T extends TData>(fields: T | XnsEstimateAttemptedFields) {
|
|
59
|
+
await Promise.all(this.handlers.map(handler => handler.xnsEstimateAttempted(fields)))
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
async xnsEstimateFailure<T extends TData>(fields: T | XnsEstimateFailureFields) {
|
|
63
|
+
await Promise.all(this.handlers.map(handler => handler.xnsEstimateFailure(fields)))
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
async xnsEstimateSuccess<T extends TData>(fields: T | XnsEstimateSuccessFields) {
|
|
67
|
+
await Promise.all(this.handlers.map(handler => handler.xnsEstimateSuccess(fields)))
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
async xnsPurchaseAttempted<T extends TData>(fields: T | XnsPurchaseAttemptedFields) {
|
|
71
|
+
await Promise.all(this.handlers.map(handler => handler.xnsPurchaseAttempted(fields)))
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
async xnsPurchaseFailure<T extends TData>(fields: T | XnsPurchaseFailureFields) {
|
|
75
|
+
await Promise.all(this.handlers.map(handler => handler.xnsPurchaseFailure(fields)))
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
async xnsPurchaseSuccess<T extends TData>(fields: T | XnsPurchaseSuccessFields) {
|
|
79
|
+
await Promise.all(this.handlers.map(handler => handler.xnsPurchaseSuccess(fields)))
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
async xnsReservationAttempted<T extends TData>(fields: T | XnsReservationAttemptedFields) {
|
|
83
|
+
await Promise.all(this.handlers.map(handler => handler.xnsReservationAttempted(fields)))
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
async xnsReservationFailure<T extends TData>(fields: T | XnsReservationFailureFields) {
|
|
87
|
+
await Promise.all(this.handlers.map(handler => handler.xnsReservationFailure(fields)))
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
async xnsReservationSuccess<T extends TData>(fields: T | XnsReservationSuccessFields) {
|
|
91
|
+
await Promise.all(this.handlers.map(handler => handler.xnsReservationSuccess(fields)))
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
async xyoNewsletterSignup<T extends TData>(fields: T | XyoNewsletterSignupFields) {
|
|
95
|
+
await Promise.all(this.handlers.map(handler => handler.xyoNewsletterSignup(fields)))
|
|
96
|
+
}
|
|
97
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import mixpanel from 'mixpanel-browser'
|
|
2
|
+
|
|
3
|
+
import { XyoUserEvents } from './XyoUserEvents.ts'
|
|
4
|
+
|
|
5
|
+
// we call this outside the function to force initialization on page load
|
|
6
|
+
let instance: XyoUserEvents
|
|
7
|
+
|
|
8
|
+
export const getXyoUserEvents = (mixpanelToken?: string) => {
|
|
9
|
+
return instance = instance ?? XyoUserEvents.get(mixpanelToken ? mixpanel.init(mixpanelToken) : undefined)
|
|
10
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './useXyoUserEvents.ts'
|
package/src/index.ts
ADDED
package/typedoc.json
ADDED