1+ "use server" ;
2+
3+ import { getAuthToken } from "app/(app)/api/lib/getAuthToken" ;
4+ import { THIRDWEB_INSIGHT_API_DOMAIN } from "constants/urls" ;
5+
6+ export interface WebhookResponse {
7+ id : string ;
8+ name : string ;
9+ team_id : string ;
10+ project_id : string ;
11+ webhook_url : string ;
12+ webhook_secret : string ;
13+ filters : WebhookFilters ;
14+ suspended_at : string | null ;
15+ suspended_reason : string | null ;
16+ disabled : boolean ;
17+ created_at : string ;
18+ updated_at : string | null ;
19+ }
20+
21+ export interface WebhookFilters {
22+ "v1.events" ?: {
23+ chain_ids ?: string [ ] ;
24+ addresses ?: string [ ] ;
25+ signatures ?: Array < {
26+ sig_hash : string ;
27+ abi ?: string ;
28+ params ?: Record < string , unknown > ;
29+ } > ;
30+ } ;
31+ "v1.transactions" ?: {
32+ chain_ids ?: string [ ] ;
33+ from_addresses ?: string [ ] ;
34+ to_addresses ?: string [ ] ;
35+ signatures ?: Array < {
36+ sig_hash : string ;
37+ abi ?: string ;
38+ params ?: Record < string , unknown > ;
39+ } > ;
40+ } ;
41+ }
42+
43+ export interface CreateWebhookPayload {
44+ name : string ;
45+ webhook_url : string ;
46+ filters : WebhookFilters ;
47+ }
48+
49+ interface WebhooksListResponse {
50+ data : WebhookResponse [ ] ;
51+ error ?: string ;
52+ }
53+
54+ interface WebhookSingleResponse {
55+ data : WebhookResponse | null ;
56+ error ?: string ;
57+ }
58+
59+ interface TestWebhookPayload {
60+ webhook_url : string ;
61+ type ?: "event" | "transaction" ;
62+ }
63+
64+ interface TestWebhookResponse {
65+ success : boolean ;
66+ error ?: string ;
67+ }
68+
69+ export async function createWebhook (
70+ payload : CreateWebhookPayload ,
71+ clientId : string ,
72+ ) : Promise < WebhookSingleResponse > {
73+ try {
74+ const authToken = await getAuthToken ( ) ;
75+ const response = await fetch ( `${ THIRDWEB_INSIGHT_API_DOMAIN } /v1/webhooks` , {
76+ method : "POST" ,
77+ headers : {
78+ "Content-Type" : "application/json" ,
79+ "x-client-id" : clientId ,
80+ Authorization : `Bearer ${ authToken } ` ,
81+ } ,
82+ body : JSON . stringify ( payload ) ,
83+ } ) ;
84+
85+ if ( ! response . ok ) {
86+ const errorText = await response . text ( ) ;
87+ return {
88+ data : null ,
89+ error : `Failed to create webhook: ${ errorText } ` ,
90+ } ;
91+ }
92+
93+ return ( await response . json ( ) ) as WebhookSingleResponse ;
94+ } catch ( error ) {
95+ return {
96+ data : null ,
97+ error : `Network or parsing error: ${ error instanceof Error ? error . message : "Unknown error" } ` ,
98+ } ;
99+ }
100+ }
101+
102+ export async function getWebhooks (
103+ clientId : string ,
104+ ) : Promise < WebhooksListResponse > {
105+ try {
106+ const authToken = await getAuthToken ( ) ;
107+ const response = await fetch ( `${ THIRDWEB_INSIGHT_API_DOMAIN } /v1/webhooks` , {
108+ method : "GET" ,
109+ headers : {
110+ "x-client-id" : clientId ,
111+ Authorization : `Bearer ${ authToken } ` ,
112+ } ,
113+ } ) ;
114+
115+ if ( ! response . ok ) {
116+ const errorText = await response . text ( ) ;
117+ return {
118+ data : [ ] ,
119+ error : `Failed to get webhooks: ${ errorText } ` ,
120+ } ;
121+ }
122+
123+ return ( await response . json ( ) ) as WebhooksListResponse ;
124+ } catch ( error ) {
125+ return {
126+ data : [ ] ,
127+ error : `Network or parsing error: ${ error instanceof Error ? error . message : "Unknown error" } ` ,
128+ } ;
129+ }
130+ }
131+
132+ export async function deleteWebhook (
133+ webhookId : string ,
134+ clientId : string ,
135+ ) : Promise < WebhookSingleResponse > {
136+ try {
137+ const authToken = await getAuthToken ( ) ;
138+ const response = await fetch (
139+ `${ THIRDWEB_INSIGHT_API_DOMAIN } /v1/webhooks/${ encodeURIComponent ( webhookId ) } ` ,
140+ {
141+ method : "DELETE" ,
142+ headers : {
143+ "x-client-id" : clientId ,
144+ Authorization : `Bearer ${ authToken } ` ,
145+ } ,
146+ } ,
147+ ) ;
148+
149+ if ( ! response . ok ) {
150+ const errorText = await response . text ( ) ;
151+ return {
152+ data : null ,
153+ error : `Failed to delete webhook: ${ errorText } ` ,
154+ } ;
155+ }
156+
157+ return ( await response . json ( ) ) as WebhookSingleResponse ;
158+ } catch ( error ) {
159+ return {
160+ data : null ,
161+ error : `Network or parsing error: ${ error instanceof Error ? error . message : "Unknown error" } ` ,
162+ } ;
163+ }
164+ }
165+
166+ export async function testWebhook (
167+ payload : TestWebhookPayload ,
168+ clientId : string ,
169+ ) : Promise < TestWebhookResponse > {
170+ try {
171+ const authToken = await getAuthToken ( ) ;
172+ const response = await fetch (
173+ `${ THIRDWEB_INSIGHT_API_DOMAIN } /v1/webhooks/test` ,
174+ {
175+ method : "POST" ,
176+ headers : {
177+ "Content-Type" : "application/json" ,
178+ "x-client-id" : clientId ,
179+ Authorization : `Bearer ${ authToken } ` ,
180+ } ,
181+ body : JSON . stringify ( payload ) ,
182+ } ,
183+ ) ;
184+
185+ if ( ! response . ok ) {
186+ const errorText = await response . text ( ) ;
187+ return {
188+ success : false ,
189+ error : `Failed to test webhook: ${ errorText } ` ,
190+ } ;
191+ }
192+
193+ return ( await response . json ( ) ) as TestWebhookResponse ;
194+ } catch ( error ) {
195+ return {
196+ success : false ,
197+ error : `Network or parsing error: ${ error instanceof Error ? error . message : "Unknown error" } ` ,
198+ } ;
199+ }
200+ }
0 commit comments