-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathaction-payloads.ts
More file actions
98 lines (86 loc) · 2.96 KB
/
action-payloads.ts
File metadata and controls
98 lines (86 loc) · 2.96 KB
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
import { z } from "zod";
const parseJsonString = (value: unknown): unknown => {
if (typeof value !== "string") {
return value;
}
try {
return JSON.parse(value);
} catch {
return value;
}
};
const stringNumberRecordSchema = z.record(
z.string(),
z.union([z.string(), z.number()]),
);
export const DepositPayloadSchema = z.object({
recipientAddress: z.string().min(1),
amount: z.coerce.number().positive(),
transactionHash: z.string().min(1),
since: z.coerce.number().optional(),
params: z.preprocess(parseJsonString, stringNumberRecordSchema).default({}),
});
export const CallPayloadSchema = z.object({
functionName: z.string().regex(/^[A-Za-z][A-Za-z0-9]*$/),
args: z.preprocess(parseJsonString, z.array(z.unknown())).default([]),
params: z
.preprocess(parseJsonString, z.record(z.string(), z.unknown()))
.default({}),
});
export const FetchDepositAddressesPayloadSchema = z.object({
chain: z.string().min(1),
params: z
.preprocess(parseJsonString, z.record(z.string(), z.string()))
.default({}),
});
export const WithdrawPayloadSchema = z.object({
recipientAddress: z.string().min(1),
amount: z.coerce.number().positive(),
chain: z.string().min(1),
params: z.preprocess(parseJsonString, stringNumberRecordSchema).default({}),
});
export const CreateOrderPayloadSchema = z.object({
orderType: z.enum(["market", "limit"]).default("limit"),
amount: z.coerce.number().positive(),
fromToken: z.string().min(1),
toToken: z.string().min(1),
price: z.coerce.number().positive(),
params: z.preprocess(parseJsonString, stringNumberRecordSchema).default({}),
});
export const GetOrderDetailsPayloadSchema = z.object({
orderId: z.string().min(1),
params: z.preprocess(parseJsonString, stringNumberRecordSchema).default({}),
});
export const CancelOrderPayloadSchema = z.object({
orderId: z.string().min(1),
params: z.preprocess(parseJsonString, stringNumberRecordSchema).default({}),
});
const booleanLikeSchema = z.preprocess((value: unknown) => {
if (typeof value !== "string") {
return value;
}
const normalized = value.trim().toLowerCase();
if (["true", "1", "yes"].includes(normalized)) {
return true;
}
if (["false", "0", "no"].includes(normalized)) {
return false;
}
return value;
}, z.boolean());
export const FetchFeesPayloadSchema = z.object({
includeAllFees: booleanLikeSchema.optional().default(false),
includeFundingFees: booleanLikeSchema.optional(),
});
export type DepositPayload = z.infer<typeof DepositPayloadSchema>;
export type CallPayload = z.infer<typeof CallPayloadSchema>;
export type FetchDepositAddressesPayload = z.infer<
typeof FetchDepositAddressesPayloadSchema
>;
export type WithdrawPayload = z.infer<typeof WithdrawPayloadSchema>;
export type CreateOrderPayload = z.infer<typeof CreateOrderPayloadSchema>;
export type GetOrderDetailsPayload = z.infer<
typeof GetOrderDetailsPayloadSchema
>;
export type CancelOrderPayload = z.infer<typeof CancelOrderPayloadSchema>;
export type FetchFeesPayload = z.infer<typeof FetchFeesPayloadSchema>;