diff --git a/apps/backend/src/api/routes/webhooks.controller.ts b/apps/backend/src/api/routes/webhooks.controller.ts index 19a78730..6b341d6a 100644 --- a/apps/backend/src/api/routes/webhooks.controller.ts +++ b/apps/backend/src/api/routes/webhooks.controller.ts @@ -1,4 +1,13 @@ -import { Body, Controller, Delete, Get, Param, Post, Put } from '@nestjs/common'; +import { + Body, + Controller, + Delete, + Get, + Param, + Post, + Put, + Query, +} from '@nestjs/common'; import { GetOrgFromRequest } from '@gitroom/nestjs-libraries/user/org.from.request'; import { Organization } from '@prisma/client'; import { ApiTags } from '@nestjs/swagger'; @@ -47,4 +56,19 @@ export class WebhookController { ) { return this._webhooksService.deleteWebhook(org.id, id); } + + @Post('/send') + async sendWebhook(@Body() body: any, @Query('url') url: string) { + try { + await fetch(url, { + method: 'POST', + body: JSON.stringify(body), + headers: { 'Content-Type': 'application/json' }, + }); + } catch (err) { + /** sent **/ + } + + return { send: true }; + } } diff --git a/apps/frontend/src/components/webhooks/webhooks.tsx b/apps/frontend/src/components/webhooks/webhooks.tsx index 6d964d99..a1792854 100644 --- a/apps/frontend/src/components/webhooks/webhooks.tsx +++ b/apps/frontend/src/components/webhooks/webhooks.tsx @@ -175,6 +175,51 @@ export const AddOrEditWebhook: FC<{ data?: any; reload: () => void }> = ( [data, integrations] ); + const sendTest = useCallback(async () => { + const url = form.getValues('url'); + toast.show('Webhook send', 'success'); + try { + await fetch(`/webhooks/send?url=${encodeURIComponent(url)}`, { + method: 'POST', + headers: { + contentType: 'application/json', + }, + body: JSON.stringify([ + { + id: 'cm6tcts4f0005qcwit25cis26', + content: 'This is the first post to instagram', + publishDate: '2025-02-06T13:09:00.000Z', + releaseURL: 'https://facebook.com/release/release', + state: 'PUBLISHED', + integration: { + id: 'cm6s4uyou0001i2r47pxix6z1', + name: 'test', + providerIdentifier: 'instagram', + picture: 'https://uploads.gitroom.com/F6LSCD8wrrQ.jpeg', + type: 'social', + }, + }, + { + id: 'cm6tcts4f0005qcwit25cis26', + content: 'This is the second post to facebook', + publishDate: '2025-02-06T13:09:00.000Z', + releaseURL: 'https://facebook.com/release2/release2', + state: 'PUBLISHED', + integration: { + id: 'cm6s4uyou0001i2r47pxix6z1', + name: 'test2', + providerIdentifier: 'facebook', + picture: 'https://uploads.gitroom.com/F6LSCD8wrrQ.jpeg', + type: 'social', + }, + }, + ]), + }); + } catch (e: any) { + /** empty **/ + } + }, []); + return (
@@ -227,16 +272,32 @@ export const AddOrEditWebhook: FC<{ data?: any; reload: () => void }> = ( isMain={true} /> )} - +
+ + +
diff --git a/libraries/nestjs-libraries/src/database/prisma/webhooks/webhooks.service.ts b/libraries/nestjs-libraries/src/database/prisma/webhooks/webhooks.service.ts index d23bed29..54672b5e 100644 --- a/libraries/nestjs-libraries/src/database/prisma/webhooks/webhooks.service.ts +++ b/libraries/nestjs-libraries/src/database/prisma/webhooks/webhooks.service.ts @@ -73,10 +73,12 @@ export class WebhooksService { ); } - sendList.push({ - url: webhook.url, - data: toSend, - }); + if (toSend.length) { + sendList.push({ + url: webhook.url, + data: toSend, + }); + } } return Promise.all(