@@ -24,75 +24,108 @@ const inputAbi = z.object({
24
24
type : z . string ( ) ,
25
25
} ) ;
26
26
27
- export const webhookFormSchema = z . object ( {
28
- abi : z . string ( ) . optional ( ) ,
29
- addresses : z
30
- . string ( )
31
- . optional ( )
32
- . refine (
33
- ( val ) => {
34
- if ( val === undefined || val . trim ( ) === "" ) {
35
- return true ;
36
- }
37
- return val
38
- . split ( / [ , \s ] + / )
39
- . filter ( Boolean )
40
- . every ( ( a ) => isAddress ( a . trim ( ) ) ) ;
41
- } ,
42
- {
43
- message : "Enter valid addresses (comma-separated) or leave empty" ,
44
- } ,
45
- ) ,
46
- chainIds : z
47
- . array ( z . string ( ) )
48
- . min ( 1 , { message : "Select at least one chain" } ) ,
49
- eventTypes : z . array ( z . string ( ) ) . optional ( ) ,
50
- filterType : z . enum ( [ "event" , "transaction" ] ) ,
51
- fromAddresses : z
52
- . string ( )
53
- . optional ( )
54
- . refine (
55
- ( val ) => {
56
- if ( val === undefined || val . trim ( ) === "" ) {
57
- return true ;
58
- }
59
- return val
60
- . split ( / [ , \s ] + / )
61
- . filter ( Boolean )
62
- . every ( ( a ) => isAddress ( a . trim ( ) ) ) ;
63
- } ,
64
- {
65
- message : "Enter valid addresses (comma-separated) or leave empty" ,
66
- } ,
67
- ) ,
68
- inputAbi : z . array ( inputAbi ) . optional ( ) ,
69
- name : z
70
- . string ( )
71
- . min ( 3 , { message : "Name must be at least 3 characters long" } )
72
- . max ( 100 , { message : "Name must be at most 100 characters long" } ) ,
73
- params : z . record ( z . unknown ( ) ) . optional ( ) ,
74
- secret : z . string ( ) . optional ( ) ,
75
- sigHash : z . string ( ) . optional ( ) ,
76
- sigHashAbi : z . string ( ) . optional ( ) ,
77
- toAddresses : z
78
- . string ( )
79
- . optional ( )
80
- . refine (
81
- ( val ) => {
82
- if ( val === undefined || val . trim ( ) === "" ) {
83
- return true ;
84
- }
85
- return val
86
- . split ( / [ , \s ] + / )
87
- . filter ( Boolean )
88
- . every ( ( a ) => isAddress ( a . trim ( ) ) ) ;
89
- } ,
90
- {
91
- message : "Enter valid addresses (comma-separated) or leave empty" ,
92
- } ,
93
- ) ,
94
- webhookUrl : z . string ( ) . url ( { message : "Must be a valid URL" } ) ,
95
- } ) ;
27
+ export const webhookFormSchema = z
28
+ . object ( {
29
+ abi : z . string ( ) . optional ( ) ,
30
+ addresses : z
31
+ . string ( )
32
+ . optional ( )
33
+ . refine (
34
+ ( val : string | undefined ) => {
35
+ if ( val === undefined || val . trim ( ) === "" ) {
36
+ return true ;
37
+ }
38
+ return val
39
+ . split ( / [ , \s ] + / )
40
+ . filter ( Boolean )
41
+ . every ( ( a : string ) => isAddress ( a . trim ( ) ) ) ;
42
+ } ,
43
+ {
44
+ message : "Enter valid addresses (comma-separated)" ,
45
+ } ,
46
+ ) ,
47
+ chainIds : z
48
+ . array ( z . string ( ) )
49
+ . min ( 1 , { message : "Select at least one chain" } ) ,
50
+ eventTypes : z . array ( z . string ( ) ) . optional ( ) ,
51
+ filterType : z . enum ( [ "event" , "transaction" ] ) ,
52
+ fromAddresses : z
53
+ . string ( )
54
+ . optional ( )
55
+ . refine (
56
+ ( val : string | undefined ) => {
57
+ if ( val === undefined || val . trim ( ) === "" ) {
58
+ return true ;
59
+ }
60
+ return val
61
+ . split ( / [ , \s ] + / )
62
+ . filter ( Boolean )
63
+ . every ( ( a : string ) => isAddress ( a . trim ( ) ) ) ;
64
+ } ,
65
+ {
66
+ message : "Enter valid addresses (comma-separated)" ,
67
+ } ,
68
+ ) ,
69
+ inputAbi : z . array ( inputAbi ) . optional ( ) ,
70
+ name : z
71
+ . string ( )
72
+ . min ( 3 , { message : "Name must be at least 3 characters long" } )
73
+ . max ( 100 , { message : "Name must be at most 100 characters long" } ) ,
74
+ params : z . record ( z . unknown ( ) ) . optional ( ) ,
75
+ secret : z . string ( ) . optional ( ) ,
76
+ sigHash : z . string ( ) . optional ( ) ,
77
+ sigHashAbi : z . string ( ) . optional ( ) ,
78
+ toAddresses : z
79
+ . string ( )
80
+ . optional ( )
81
+ . refine (
82
+ ( val : string | undefined ) => {
83
+ if ( val === undefined || val . trim ( ) === "" ) {
84
+ return true ;
85
+ }
86
+ return val
87
+ . split ( / [ , \s ] + / )
88
+ . filter ( Boolean )
89
+ . every ( ( a : string ) => isAddress ( a . trim ( ) ) ) ;
90
+ } ,
91
+ {
92
+ message : "Enter valid addresses (comma-separated) or leave empty" ,
93
+ } ,
94
+ ) ,
95
+ webhookUrl : z . string ( ) . url ( { message : "Must be a valid URL" } ) ,
96
+ } )
97
+ . refine (
98
+ ( data : {
99
+ filterType : "event" | "transaction" ;
100
+ addresses ?: string ;
101
+ fromAddresses ?: string ;
102
+ } ) => {
103
+ if ( data . filterType === "event" ) {
104
+ return data . addresses && data . addresses . trim ( ) !== "" ;
105
+ }
106
+ return true ;
107
+ } ,
108
+ {
109
+ message : "Contract address is required for event webhooks" ,
110
+ path : [ "addresses" ] ,
111
+ } ,
112
+ )
113
+ . refine (
114
+ ( data : {
115
+ filterType : "event" | "transaction" ;
116
+ addresses ?: string ;
117
+ fromAddresses ?: string ;
118
+ } ) => {
119
+ if ( data . filterType === "transaction" ) {
120
+ return data . fromAddresses && data . fromAddresses . trim ( ) !== "" ;
121
+ }
122
+ return true ;
123
+ } ,
124
+ {
125
+ message : "From address is required for transaction webhooks" ,
126
+ path : [ "fromAddresses" ] ,
127
+ } ,
128
+ ) ;
96
129
97
130
export type WebhookFormValues = z . infer < typeof webhookFormSchema > ;
98
131
0 commit comments