From c6c1c10912c028895a070ca547c63b413e736dae Mon Sep 17 00:00:00 2001 From: Nevo David Date: Mon, 16 Sep 2024 10:45:16 +0700 Subject: [PATCH] feat: test bad body --- .../src/database/prisma/posts/posts.service.ts | 6 +++++- .../src/integrations/social.abstract.ts | 13 ++++++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/libraries/nestjs-libraries/src/database/prisma/posts/posts.service.ts b/libraries/nestjs-libraries/src/database/prisma/posts/posts.service.ts index 68004556..393c84a3 100644 --- a/libraries/nestjs-libraries/src/database/prisma/posts/posts.service.ts +++ b/libraries/nestjs-libraries/src/database/prisma/posts/posts.service.ts @@ -15,7 +15,7 @@ import { OpenaiService } from '@gitroom/nestjs-libraries/openai/openai.service'; import { CreateGeneratedPostsDto } from '@gitroom/nestjs-libraries/dtos/generator/create.generated.posts.dto'; import { IntegrationService } from '@gitroom/nestjs-libraries/database/prisma/integrations/integration.service'; import { makeId } from '@gitroom/nestjs-libraries/services/make.is'; -import { RefreshToken } from '@gitroom/nestjs-libraries/integrations/social.abstract'; +import { BadBody, RefreshToken } from '@gitroom/nestjs-libraries/integrations/social.abstract'; import { BullMqClient } from '@gitroom/nestjs-libraries/bull-mq-transport-new/client'; type PostWithConditionals = Post & { @@ -279,6 +279,10 @@ export class PostsService { return this.postSocial(integration, posts, true); } + if (err instanceof BadBody && process.env.EMAIL_FROM_ADDRESS === 'nevo@postiz.com') { + await this._notificationService.sendEmail('nevo@positz.com', 'Bad body', JSON.stringify(err.body)); + } + throw err; } } diff --git a/libraries/nestjs-libraries/src/integrations/social.abstract.ts b/libraries/nestjs-libraries/src/integrations/social.abstract.ts index e24bf6a3..39034f55 100644 --- a/libraries/nestjs-libraries/src/integrations/social.abstract.ts +++ b/libraries/nestjs-libraries/src/integrations/social.abstract.ts @@ -1,11 +1,15 @@ export class RefreshToken {} +export class BadBody { + constructor(public body: BodyInit) { + } +} export class NotEnoughScopes {} export abstract class SocialAbstract { async fetch(url: string, options: RequestInit = {}) { const request = await fetch(url, options); - console.log(request.status); + if (request.status !== 200 && request.status !== 201) { try { console.log(await request.json()); @@ -14,15 +18,18 @@ export abstract class SocialAbstract { console.log('skip'); } } - if (request.status === 401 || request.status === 400) { + if (request.status === 401) { throw new RefreshToken(); } + if (request.status === 400) { + throw new BadBody(options.body!); + } + return request; } checkScopes(required: string[], got: string | string[]) { - console.log(required, got); if (Array.isArray(got)) { if (!required.every((scope) => got.includes(scope))) { throw new NotEnoughScopes();