@@ -24,75 +24,108 @@ const inputAbi = z.object({
2424 type : z . string ( ) ,
2525} ) ;
2626
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+ ) ;
96129
97130export type WebhookFormValues = z . infer < typeof webhookFormSchema > ;
98131
0 commit comments