From 63ebcad3bde557a45675a23e96560277c38baeb0 Mon Sep 17 00:00:00 2001 From: Nevo David Date: Mon, 16 Sep 2024 13:39:17 +0700 Subject: [PATCH] feat: wait integration --- .../src/api/routes/analytics.controller.ts | 5 +++++ .../database/prisma/posts/posts.service.ts | 21 ++++++++++++++++--- .../social/linkedin.page.provider.ts | 1 + .../integrations/social/linkedin.provider.ts | 1 + .../social/social.integrations.interface.ts | 1 + 5 files changed, 26 insertions(+), 3 deletions(-) diff --git a/apps/backend/src/api/routes/analytics.controller.ts b/apps/backend/src/api/routes/analytics.controller.ts index 257df0a8..1a685174 100644 --- a/apps/backend/src/api/routes/analytics.controller.ts +++ b/apps/backend/src/api/routes/analytics.controller.ts @@ -17,6 +17,7 @@ import { IntegrationService } from '@gitroom/nestjs-libraries/database/prisma/in import { IntegrationManager } from '@gitroom/nestjs-libraries/integrations/integration.manager'; import { ioRedis } from '@gitroom/nestjs-libraries/redis/redis.service'; import { RefreshToken } from '@gitroom/nestjs-libraries/integrations/social.abstract'; +import { timer } from '@gitroom/helpers/utils/timer'; @ApiTags('Analytics') @Controller('/analytics') @@ -96,6 +97,10 @@ export class AnalyticsController { ); getIntegration.token = accessToken; + + if (integrationProvider.refreshWait) { + await timer(10000); + } } } 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 393c84a3..1ec0b844 100644 --- a/libraries/nestjs-libraries/src/database/prisma/posts/posts.service.ts +++ b/libraries/nestjs-libraries/src/database/prisma/posts/posts.service.ts @@ -15,8 +15,12 @@ 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 { BadBody, 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'; +import { timer } from '@gitroom/helpers/utils/timer'; type PostWithConditionals = Post & { integration?: Integration; @@ -224,6 +228,10 @@ export class PostsService { ); integration.token = accessToken; + + if (getIntegration.refreshWait) { + await timer(10000); + } } const newPosts = await this.updateTags(integration.organizationId, posts); @@ -279,8 +287,15 @@ 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)); + 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/linkedin.page.provider.ts b/libraries/nestjs-libraries/src/integrations/social/linkedin.page.provider.ts index 6b77a387..452b9123 100644 --- a/libraries/nestjs-libraries/src/integrations/social/linkedin.page.provider.ts +++ b/libraries/nestjs-libraries/src/integrations/social/linkedin.page.provider.ts @@ -16,6 +16,7 @@ export class LinkedinPageProvider override identifier = 'linkedin-page'; override name = 'LinkedIn Page'; override isBetweenSteps = true; + override refreshWait = true; override scopes = [ 'openid', 'profile', diff --git a/libraries/nestjs-libraries/src/integrations/social/linkedin.provider.ts b/libraries/nestjs-libraries/src/integrations/social/linkedin.provider.ts index 539d1139..6bacf92c 100644 --- a/libraries/nestjs-libraries/src/integrations/social/linkedin.provider.ts +++ b/libraries/nestjs-libraries/src/integrations/social/linkedin.provider.ts @@ -16,6 +16,7 @@ export class LinkedinProvider extends SocialAbstract implements SocialProvider { name = 'LinkedIn'; isBetweenSteps = false; scopes = ['openid', 'profile', 'w_member_social', 'r_basicprofile']; + refreshWait = true; async refreshToken(refresh_token: string): Promise { const { access_token: accessToken, refresh_token: refreshToken, expires_in } = await ( diff --git a/libraries/nestjs-libraries/src/integrations/social/social.integrations.interface.ts b/libraries/nestjs-libraries/src/integrations/social/social.integrations.interface.ts index 80c06876..35a9c299 100644 --- a/libraries/nestjs-libraries/src/integrations/social/social.integrations.interface.ts +++ b/libraries/nestjs-libraries/src/integrations/social/social.integrations.interface.ts @@ -69,6 +69,7 @@ export interface SocialProvider extends IAuthenticator, ISocialMediaIntegration { identifier: string; + refreshWait?: boolean; name: string; isBetweenSteps: boolean; scopes: string[];