@@ -31,23 +31,51 @@ export default function WebhookDemo() {
3131 const [ loading , setLoading ] = useState ( false )
3232
3333 async function handleRegister ( ) {
34- if ( ! stellarAddress . trim ( ) || ! webhookUrl . trim ( ) ) return
34+ if ( ! stellarAddress . trim ( ) || ! webhookUrl . trim ( ) ) {
35+ setResponse ( {
36+ ok : false ,
37+ body : 'Address and webhook URL are required' ,
38+ } )
39+ return
40+ }
41+
42+ if ( ! signingSecret . trim ( ) ) {
43+ setResponse ( {
44+ ok : false ,
45+ body : 'Signing secret is required' ,
46+ } )
47+ return
48+ }
49+
3550 setLoading ( true )
3651 setResponse ( null )
3752
3853 try {
3954 const res = await fetch ( `${ SERVER } /webhooks/register` , {
4055 method : 'POST' ,
4156 headers : { 'Content-Type' : 'application/json' } ,
57+
58+ // ✅ MUST match server contract (apps/server/src/routes.ts)
4259 body : JSON . stringify ( {
4360 address : stellarAddress . trim ( ) ,
44- webhookUrl : webhookUrl . trim ( ) ,
45- signingSecret : signingSecret . trim ( ) || undefined ,
61+ url : webhookUrl . trim ( ) ,
62+ secret : signingSecret . trim ( ) ,
4663 } ) ,
4764 } )
48- const data = await res . json ( )
65+
66+ const data = await res . json ( ) . catch ( ( ) => null )
67+
68+ if ( ! res . ok ) {
69+ setResponse ( {
70+ ok : false ,
71+ status : res . status ,
72+ body : data ?. error || 'Webhook registration failed' ,
73+ } )
74+ return
75+ }
76+
4977 setResponse ( {
50- ok : res . ok ,
78+ ok : true ,
5179 status : res . status ,
5280 body : JSON . stringify ( data , null , 2 ) ,
5381 } )
@@ -60,7 +88,6 @@ export default function WebhookDemo() {
6088 setLoading ( false )
6189 }
6290 }
63-
6491 return (
6592 < section style = { { padding : '120px 32px' } } >
6693 < div
0 commit comments