/
events.ts
52 lines (47 loc) · 1.38 KB
/
events.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import { AxiosRequestConfig } from 'axios'
import { Execute } from '../types/index'
export type ReservoirEventName =
| 'purchase_error'
| 'purchase_complete'
| 'accept_offer_error'
| 'accept_offer_complete'
| 'offer_error'
| 'offer_complete'
| 'listing_error'
| 'listing_complete'
| 'cancel_error'
| 'cancel_complete'
| 'unknown'
export type ReservoirEvent = {
name: ReservoirEventName
data: any
}
export const generateEvent = (
request: AxiosRequestConfig,
data?: Execute
): ReservoirEvent => {
const isBuy = request.url?.includes('/execute/buy')
const isSell = request.url?.includes('/execute/sell')
const isBid = request.url?.includes('/execute/bid')
const isList = request.url?.includes('/execute/list')
const isCancel = request.url?.includes('/execute/cancel')
let name: ReservoirEventName | undefined
const hasError = data?.error || data?.steps.some((step) => step.error)
if (isBuy) {
name = hasError ? 'purchase_error' : 'purchase_complete'
} else if (isSell) {
name = hasError ? 'accept_offer_error' : 'accept_offer_complete'
} else if (isBid) {
name = hasError ? 'offer_error' : 'offer_complete'
} else if (isList) {
name = hasError ? 'listing_error' : 'listing_complete'
} else if (isCancel) {
name = hasError ? 'cancel_error' : 'cancel_complete'
} else {
name = 'unknown'
}
return {
name,
data,
}
}