diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/3rdparties/thirdparty.module.js b/apps/backend/dist/libraries/nestjs-libraries/src/3rdparties/thirdparty.module.js new file mode 100644 index 0000000000000000000000000000000000000000..caf1380cad49c61a968e1e380585cc40d14994d4 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/3rdparties/thirdparty.module.js @@ -0,0 +1,21 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ThirdPartyModule = void 0; +const tslib_1 = require("tslib"); +const common_1 = require("@nestjs/common"); +const heygen_provider_1 = require("./heygen/heygen.provider"); +const reelfarm_provider_1 = require("./reelfarm/reelfarm.provider"); +const thirdparty_manager_1 = require("./thirdparty.manager"); +let ThirdPartyModule = class ThirdPartyModule { +}; +exports.ThirdPartyModule = ThirdPartyModule; +exports.ThirdPartyModule = ThirdPartyModule = tslib_1.__decorate([ + (0, common_1.Global)(), + (0, common_1.Module)({ + providers: [heygen_provider_1.HeygenProvider, reelfarm_provider_1.ReelFarmProvider, thirdparty_manager_1.ThirdPartyManager], + get exports() { + return this.providers; + }, + }) +], ThirdPartyModule); +//# sourceMappingURL=thirdparty.module.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/3rdparties/thirdparty.module.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/3rdparties/thirdparty.module.js.map new file mode 100644 index 0000000000000000000000000000000000000000..d011ae7e72addec08bd30ba167cbe429393f529d --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/3rdparties/thirdparty.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"thirdparty.module.js","sourceRoot":"","sources":["../../../../../../../libraries/nestjs-libraries/src/3rdparties/thirdparty.module.ts"],"names":[],"mappings":";;;;AAAA,2CAAgD;AAChD,8DAA6F;AAC7F,oEAAmG;AACnG,6DAA4F;AASrF,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;CAAG,CAAA;AAAnB,4CAAgB;2BAAhB,gBAAgB;IAP5B,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC;QACN,SAAS,EAAE,CAAC,gCAAc,EAAE,oCAAgB,EAAE,sCAAiB,CAAC;QAChE,IAAI,OAAO;YACT,OAAO,IAAI,CAAC,SAAS,CAAC;QACxB,CAAC;KACF,CAAC;GACW,gBAAgB,CAAG"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.categories.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.categories.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..01a95c2c707f8e09ffea4bf5cedfd5cd656bd257 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.categories.d.ts @@ -0,0 +1 @@ +export declare const agentCategories: string[]; diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.categories.js b/apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.categories.js new file mode 100644 index 0000000000000000000000000000000000000000..5dc0dcc9af709c747b2767c82e93055c21c4e042 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.categories.js @@ -0,0 +1,36 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.agentCategories = void 0; +exports.agentCategories = [ + 'Educational', + 'Inspirational', + 'Promotional', + 'Entertaining', + 'Interactive', + 'Behind The Scenes', + 'Testimonial', + 'Informative', + 'Humorous', + 'Seasonal', + 'News', + 'Challenge', + 'Contest', + 'Tips', + 'Tutorial', + 'Poll', + 'Survey', + 'Quote', + 'Event', + 'FAQ', + 'Story', + 'Meme', + 'Review', + 'Announcement', + 'Highlight', + 'Celebration', + 'Reminder', + 'Debate', + 'Update', + 'Trend', +]; +//# sourceMappingURL=agent.categories.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.categories.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.categories.js.map new file mode 100644 index 0000000000000000000000000000000000000000..c3f73577e2934f88477a1c9e65fe248dd2acbd14 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.categories.js.map @@ -0,0 +1 @@ +{"version":3,"file":"agent.categories.js","sourceRoot":"","sources":["../../../../../../../libraries/nestjs-libraries/src/agent/agent.categories.ts"],"names":[],"mappings":";;;AAAa,QAAA,eAAe,GAAG;IAC7B,aAAa;IACb,eAAe;IACf,aAAa;IACb,cAAc;IACd,aAAa;IACb,mBAAmB;IACnB,aAAa;IACb,aAAa;IACb,UAAU;IACV,UAAU;IACV,MAAM;IACN,WAAW;IACX,SAAS;IACT,MAAM;IACN,UAAU;IACV,MAAM;IACN,QAAQ;IACR,OAAO;IACP,OAAO;IACP,KAAK;IACL,OAAO;IACP,MAAM;IACN,QAAQ;IACR,cAAc;IACd,WAAW;IACX,aAAa;IACb,UAAU;IACV,QAAQ;IACR,QAAQ;IACR,OAAO;CACR,CAAC"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.graph.insert.service.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.graph.insert.service.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..52e54322d16610c6279100bbd15ad0980a9eace3 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.graph.insert.service.d.ts @@ -0,0 +1,27 @@ +import { BaseMessage } from '@langchain/core/messages'; +import { StateGraph } from '@langchain/langgraph'; +import { PostsService } from "../database/prisma/posts/posts.service"; +interface WorkflowChannelsState { + messages: BaseMessage[]; + topic?: string; + category: string; + hook?: string; + content?: string; +} +export declare class AgentGraphInsertService { + private _postsService; + constructor(_postsService: PostsService); + static state: () => StateGraph, "__start__", import("@langchain/langgraph").StateDefinition, import("@langchain/langgraph").StateDefinition, import("@langchain/langgraph").StateDefinition, unknown, unknown, unknown>; + findCategory(state: WorkflowChannelsState): Promise<{ + category?: string; + }>; + findTopic(state: WorkflowChannelsState): Promise<{ + topic?: string; + }>; + findHook(state: WorkflowChannelsState): Promise<{ + hook?: string; + }>; + savePost(state: WorkflowChannelsState): Promise<{}>; + newPost(post: string): Promise>; +} +export {}; diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.graph.insert.service.js b/apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.graph.insert.service.js new file mode 100644 index 0000000000000000000000000000000000000000..afad1c650949708e03971f69496e1615b0ddc46b --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.graph.insert.service.js @@ -0,0 +1,119 @@ +"use strict"; +var AgentGraphInsertService_1; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.AgentGraphInsertService = void 0; +const tslib_1 = require("tslib"); +const common_1 = require("@nestjs/common"); +const messages_1 = require("@langchain/core/messages"); +const langgraph_1 = require("@langchain/langgraph"); +const openai_1 = require("@langchain/openai"); +const prompts_1 = require("@langchain/core/prompts"); +const agent_categories_1 = require("./agent.categories"); +const zod_1 = require("zod"); +const agent_topics_1 = require("./agent.topics"); +const posts_service_1 = require("../database/prisma/posts/posts.service"); +const model = new openai_1.ChatOpenAI({ + apiKey: process.env.OPENAI_API_KEY || 'sk-proj-', + model: 'gpt-4o-2024-08-06', + temperature: 0, +}); +const category = zod_1.z.object({ + category: zod_1.z.string().describe('The category for the post'), +}); +const topic = zod_1.z.object({ + topic: zod_1.z.string().describe('The topic of the post'), +}); +const hook = zod_1.z.object({ + hook: zod_1.z.string().describe('The hook of the post'), +}); +let AgentGraphInsertService = AgentGraphInsertService_1 = class AgentGraphInsertService { + constructor(_postsService) { + this._postsService = _postsService; + } + async findCategory(state) { + const { messages } = state; + const structuredOutput = model.withStructuredOutput(category); + return prompts_1.ChatPromptTemplate.fromTemplate(` +You are an assistant that get a social media post and categorize it into to one from the following categories: +{categories} +Here is the post: +{post} + `) + .pipe(structuredOutput) + .invoke({ + post: messages[0].content, + categories: agent_categories_1.agentCategories.join(', '), + }); + } + findTopic(state) { + const { messages } = state; + const structuredOutput = model.withStructuredOutput(topic); + return prompts_1.ChatPromptTemplate.fromTemplate(` +You are an assistant that get a social media post and categorize it into one of the following topics: +{topics} +Here is the post: +{post} + `) + .pipe(structuredOutput) + .invoke({ + post: messages[0].content, + topics: agent_topics_1.agentTopics.join(', '), + }); + } + findHook(state) { + const { messages } = state; + const structuredOutput = model.withStructuredOutput(hook); + return prompts_1.ChatPromptTemplate.fromTemplate(` +You are an assistant that get a social media post and extract the hook, the hook is usually the first or second of both sentence of the post, but can be in a different place, make sure you don't change the wording of the post use the exact text: +{post} + `) + .pipe(structuredOutput) + .invoke({ + post: messages[0].content, + }); + } + async savePost(state) { + await this._postsService.createPopularPosts({ + category: state.category, + topic: state.topic, + hook: state.hook, + content: state.messages[0].content, + }); + return {}; + } + newPost(post) { + const state = AgentGraphInsertService_1.state(); + const workflow = state + .addNode('find-category', this.findCategory) + .addNode('find-topic', this.findTopic) + .addNode('find-hook', this.findHook) + .addNode('save-post', this.savePost.bind(this)) + .addEdge(langgraph_1.START, 'find-category') + .addEdge('find-category', 'find-topic') + .addEdge('find-topic', 'find-hook') + .addEdge('find-hook', 'save-post') + .addEdge('save-post', langgraph_1.END); + const app = workflow.compile(); + return app.invoke({ + messages: [new messages_1.HumanMessage(post)], + }); + } +}; +exports.AgentGraphInsertService = AgentGraphInsertService; +AgentGraphInsertService.state = () => new langgraph_1.StateGraph({ + channels: { + messages: { + reducer: (currentState, updateValue) => currentState.concat(updateValue), + default: () => [], + }, + topic: null, + category: null, + hook: null, + content: null, + }, +}); +exports.AgentGraphInsertService = AgentGraphInsertService = AgentGraphInsertService_1 = tslib_1.__decorate([ + (0, common_1.Injectable)(), + tslib_1.__metadata("design:paramtypes", [posts_service_1.PostsService]) +], AgentGraphInsertService); +//# sourceMappingURL=agent.graph.insert.service.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.graph.insert.service.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.graph.insert.service.js.map new file mode 100644 index 0000000000000000000000000000000000000000..1c48e7982017e12cab4f6b83ddcea8d8cbeeb4c1 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.graph.insert.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"agent.graph.insert.service.js","sourceRoot":"","sources":["../../../../../../../libraries/nestjs-libraries/src/agent/agent.graph.insert.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.graph.service.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.graph.service.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..591e85da8a55350efa85078dcba621a88c24b9f4 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.graph.service.d.ts @@ -0,0 +1,113 @@ +import { BaseMessage, ToolMessage } from '@langchain/core/messages'; +import { StateGraph } from '@langchain/langgraph'; +import { PostsService } from "../database/prisma/posts/posts.service"; +import { MediaService } from "../database/prisma/media/media.service"; +import { GeneratorDto } from "../dtos/generator/generator.dto"; +interface WorkflowChannelsState { + messages: BaseMessage[]; + orgId: string; + question: string; + hook?: string; + fresearch?: string; + category?: string; + topic?: string; + date?: string; + format: 'one_short' | 'one_long' | 'thread_short' | 'thread_long'; + tone: 'personal' | 'company'; + content?: { + content: string; + website?: string; + prompt?: string; + image?: string; + }[]; + isPicture?: boolean; + popularPosts?: { + content: string; + hook: string; + }[]; +} +export declare class AgentGraphService { + private _postsService; + private _mediaService; + private storage; + constructor(_postsService: PostsService, _mediaService: MediaService); + static state: () => StateGraph, "__start__", import("@langchain/langgraph").StateDefinition, import("@langchain/langgraph").StateDefinition, import("@langchain/langgraph").StateDefinition, unknown, unknown, unknown>; + startCall(state: WorkflowChannelsState): Promise<{ + messages: import("@langchain/core/messages").AIMessageChunk>[]; + }>; + saveResearch(state: WorkflowChannelsState): Promise<{ + fresearch: ToolMessage[]; + }>; + findCategories(state: WorkflowChannelsState): Promise<{ + category: string; + }>; + findTopic(state: WorkflowChannelsState): Promise<{ + topic: string; + }>; + findPopularPosts(state: WorkflowChannelsState): Promise<{ + popularPosts: { + content: string; + hook: string; + }[]; + }>; + generateHook(state: WorkflowChannelsState): Promise<{ + hook: string; + }>; + generateContent(state: WorkflowChannelsState): Promise<{ + content: { + website?: string; + content?: string; + prompt?: string; + } | { + website?: string; + content?: string; + prompt?: string; + }[]; + }>; + fixArray(state: WorkflowChannelsState): Promise<{ + content: { + content: string; + website?: string; + prompt?: string; + image?: string; + }[][]; + } | { + content?: undefined; + }>; + generatePictures(state: WorkflowChannelsState): Promise<{ + content?: undefined; + } | { + content: { + image: any; + content: string; + website?: string; + prompt?: string; + }[]; + }>; + uploadPictures(state: WorkflowChannelsState): Promise<{ + content: ({ + content: string; + website?: string; + prompt?: string; + image?: string; + } | { + image: { + id: string; + name: string; + originalName: string; + path: string; + thumbnail: string; + alt: string; + }; + content: string; + website?: string; + prompt?: string; + })[]; + }>; + isGeneratePicture(state: WorkflowChannelsState): Promise<"generate-picture" | "post-time">; + postDateTime(state: WorkflowChannelsState): Promise<{ + date: string; + }>; + start(orgId: string, body: GeneratorDto): import("@langchain/core/utils/stream").IterableReadableStream; +} +export {}; diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.graph.service.js b/apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.graph.service.js new file mode 100644 index 0000000000000000000000000000000000000000..82a0bb3c5d827e6726f7a9c26e19d51933db65a0 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.graph.service.js @@ -0,0 +1,328 @@ +"use strict"; +var AgentGraphService_1; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.AgentGraphService = void 0; +const tslib_1 = require("tslib"); +const common_1 = require("@nestjs/common"); +const messages_1 = require("@langchain/core/messages"); +const langgraph_1 = require("@langchain/langgraph"); +const openai_1 = require("@langchain/openai"); +const tavily_1 = require("@langchain/tavily"); +const prebuilt_1 = require("@langchain/langgraph/prebuilt"); +const prompts_1 = require("@langchain/core/prompts"); +const dayjs_1 = tslib_1.__importDefault(require("dayjs")); +const posts_service_1 = require("../database/prisma/posts/posts.service"); +const zod_1 = require("zod"); +const media_service_1 = require("../database/prisma/media/media.service"); +const upload_factory_1 = require("../upload/upload.factory"); +const generation_error_1 = require("../openai/generation.error"); +const tools = !process.env.TAVILY_API_KEY + ? [] + : [new tavily_1.TavilySearch({ maxResults: 3 })]; +const toolNode = new prebuilt_1.ToolNode(tools); +const model = new openai_1.ChatOpenAI({ + apiKey: process.env.OPENAI_API_KEY || 'sk-proj-', + model: 'gpt-4.1', + temperature: 0.7, +}); +const dalle = new openai_1.DallEAPIWrapper({ + apiKey: process.env.OPENAI_API_KEY || 'sk-proj-', + model: 'chatgpt-image-latest', +}); +const category = zod_1.z.object({ + category: zod_1.z.string().describe('The category for the post'), +}); +const topic = zod_1.z.object({ + topic: zod_1.z.string().describe('The topic for the post'), +}); +const hook = zod_1.z.object({ + hook: zod_1.z + .string() + .describe('Hook for the new post, don\'t take it from "the request of the user"'), +}); +const contentZod = (isPicture, format) => { + const content = zod_1.z.object({ + content: zod_1.z.string().describe('Content for the new post'), + website: zod_1.z + .string() + .nullable() + .optional() + .describe("Website for the new post if exists, If one of the post present a brand, website link must be to the root domain of the brand or don't include it, website url should contain the brand name"), + ...(isPicture + ? { + prompt: zod_1.z + .string() + .describe("Prompt to generate a picture for this post later, make sure it doesn't contain brand names and make it very descriptive in terms of style"), + } + : {}), + }); + return zod_1.z.object({ + content: format === 'one_short' || format === 'one_long' + ? content + : zod_1.z.array(content).min(2).describe(`Content for the new post`), + }); +}; +let AgentGraphService = AgentGraphService_1 = class AgentGraphService { + constructor(_postsService, _mediaService) { + this._postsService = _postsService; + this._mediaService = _mediaService; + this.storage = upload_factory_1.UploadFactory.createStorage(); + } + async startCall(state) { + const runTools = model.bindTools(tools); + const response = await prompts_1.ChatPromptTemplate.fromTemplate(` + Today is ${(0, dayjs_1.default)().format()}, You are an assistant that gets a social media post or requests for a social media post. + You research should be on the most possible recent data. + You concat the text of the request together with an internet research based on the text. + {text} + `) + .pipe(runTools) + .invoke({ + text: state.messages[state.messages.length - 1].content, + }); + return { messages: [response] }; + } + async saveResearch(state) { + const content = state.messages.filter((f) => f instanceof messages_1.ToolMessage); + return { fresearch: content }; + } + async findCategories(state) { + const allCategories = await this._postsService.findAllExistingCategories(); + const structuredOutput = model.withStructuredOutput(category); + const { category: outputCategory } = await prompts_1.ChatPromptTemplate.fromTemplate(` + You are an assistant that gets a text that will be later summarized into a social media post + and classify it to one of the following categories: {categories} + text: {text} + `) + .pipe(structuredOutput) + .invoke({ + categories: allCategories.map((p) => p.category).join(', '), + text: state.fresearch, + }); + return { + category: outputCategory, + }; + } + async findTopic(state) { + const allTopics = await this._postsService.findAllExistingTopicsOfCategory(state?.category); + if (allTopics.length === 0) { + return { topic: null }; + } + const structuredOutput = model.withStructuredOutput(topic); + const { topic: outputTopic } = await prompts_1.ChatPromptTemplate.fromTemplate(` + You are an assistant that gets a text that will be later summarized into a social media post + and classify it to one of the following topics: {topics} + text: {text} + `) + .pipe(structuredOutput) + .invoke({ + topics: allTopics.map((p) => p.topic).join(', '), + text: state.fresearch, + }); + return { + topic: outputTopic, + }; + } + async findPopularPosts(state) { + const popularPosts = await this._postsService.findPopularPosts(state.category, state.topic); + return { popularPosts }; + } + async generateHook(state) { + const structuredOutput = model.withStructuredOutput(hook); + const { hook: outputHook } = await prompts_1.ChatPromptTemplate.fromTemplate(` + You are an assistant that gets content for a social media post, and generate only the hook. + The hook is the 1-2 sentences of the post that will be used to grab the attention of the reader. + You will be provided existing hooks you should use as inspiration. + - Avoid weird hook that starts with "Discover the secret...", "The best...", "The most...", "The top..." + - Make sure it sounds ${state.tone} + - Use ${state.tone === 'personal' ? '1st' : '3rd'} person mode + - Make sure it's engaging + - Don't be cringy + - Use simple english + - Make sure you add "\n" between the lines + - Don't take the hook from "request of the user" + + + {request} + + + + {hooks} + + + + {text} + + + `) + .pipe(structuredOutput) + .invoke({ + request: state.messages[0].content, + hooks: state.popularPosts.map((p) => p.hook).join('\n'), + text: state.fresearch, + }); + return { + hook: outputHook, + }; + } + async generateContent(state) { + const structuredOutput = model.withStructuredOutput(contentZod(!!state.isPicture, state.format)); + const { content: outputContent } = await prompts_1.ChatPromptTemplate.fromTemplate(` + You are an assistant that gets existing hook of a social media, content and generate only the content. + - Don't add any hashtags + - Make sure it sounds ${state.tone} + - Use ${state.tone === 'personal' ? '1st' : '3rd'} person mode + - ${state.format === 'one_short' || state.format === 'thread_short' + ? 'Post should be maximum 200 chars to fit twitter' + : 'Post should be long'} + - ${state.format === 'one_short' || state.format === 'one_long' + ? 'Post should have only 1 item' + : 'Post should have minimum 2 items'} + - Use the hook as inspiration + - Make sure it's engaging + - Don't be cringy + - Use simple english + - The Content should not contain the hook + - Try to put some call to action at the end of the post + - Make sure you add "\n" between the lines + - Add "\n" after every "." + + Hook: + {hook} + + User request: + {request} + + current content information: + {information} + `) + .pipe(structuredOutput) + .invoke({ + hook: state.hook, + request: state.messages[0].content, + information: state.fresearch, + }); + return { + content: outputContent, + }; + } + async fixArray(state) { + if (state.format === 'one_short' || state.format === 'one_long') { + return { + content: [state.content], + }; + } + return {}; + } + async generatePictures(state) { + if (!state.isPicture) { + return {}; + } + try { + const newContent = await Promise.all((state.content || []).map(async (p) => { + const image = await dalle.invoke(p.prompt); + return { + ...p, + image, + }; + })); + return { + content: newContent, + }; + } + catch (err) { + throw (0, generation_error_1.generationError)(err); + } + } + async uploadPictures(state) { + const all = await Promise.all((state.content || []).map(async (p) => { + if (p.image) { + const upload = await this.storage.uploadSimple(p.image); + const name = upload.split('/').pop(); + const uploadWithId = await this._mediaService.saveFile(state.orgId, name, upload); + return { + ...p, + image: uploadWithId, + }; + } + return p; + })); + return { content: all }; + } + async isGeneratePicture(state) { + if (state.isPicture) { + return 'generate-picture'; + } + return 'post-time'; + } + async postDateTime(state) { + return { date: await this._postsService.findFreeDateTime(state.orgId) }; + } + start(orgId, body) { + const state = AgentGraphService_1.state(); + const workflow = state + .addNode('agent', this.startCall.bind(this)) + .addNode('research', toolNode) + .addNode('save-research', this.saveResearch.bind(this)) + .addNode('find-category', this.findCategories.bind(this)) + .addNode('find-topic', this.findTopic.bind(this)) + .addNode('find-popular-posts', this.findPopularPosts.bind(this)) + .addNode('generate-hook', this.generateHook.bind(this)) + .addNode('generate-content', this.generateContent.bind(this)) + .addNode('generate-content-fix', this.fixArray.bind(this)) + .addNode('generate-picture', this.generatePictures.bind(this)) + .addNode('upload-pictures', this.uploadPictures.bind(this)) + .addNode('post-time', this.postDateTime.bind(this)) + .addEdge(langgraph_1.START, 'agent') + .addEdge('agent', 'research') + .addEdge('research', 'save-research') + .addEdge('save-research', 'find-category') + .addEdge('find-category', 'find-topic') + .addEdge('find-topic', 'find-popular-posts') + .addEdge('find-popular-posts', 'generate-hook') + .addEdge('generate-hook', 'generate-content') + .addEdge('generate-content', 'generate-content-fix') + .addConditionalEdges('generate-content-fix', this.isGeneratePicture.bind(this)) + .addEdge('generate-picture', 'upload-pictures') + .addEdge('upload-pictures', 'post-time') + .addEdge('post-time', langgraph_1.END); + const app = workflow.compile(); + return app.streamEvents({ + messages: [new messages_1.HumanMessage(body.research)], + isPicture: body.isPicture, + format: body.format, + tone: body.tone, + orgId, + }, { + streamMode: 'values', + version: 'v2', + }); + } +}; +exports.AgentGraphService = AgentGraphService; +AgentGraphService.state = () => new langgraph_1.StateGraph({ + channels: { + messages: { + reducer: (currentState, updateValue) => currentState.concat(updateValue), + default: () => [], + }, + fresearch: null, + format: null, + tone: null, + question: null, + orgId: null, + hook: null, + content: null, + date: null, + category: null, + popularPosts: null, + topic: null, + isPicture: null, + }, +}); +exports.AgentGraphService = AgentGraphService = AgentGraphService_1 = tslib_1.__decorate([ + (0, common_1.Injectable)(), + tslib_1.__metadata("design:paramtypes", [posts_service_1.PostsService, + media_service_1.MediaService]) +], AgentGraphService); +//# sourceMappingURL=agent.graph.service.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.graph.service.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.graph.service.js.map new file mode 100644 index 0000000000000000000000000000000000000000..07f8c6d97b53da5fb3c9ad006d97243c4ef3b89e --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.graph.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"agent.graph.service.js","sourceRoot":"","sources":["../../../../../../../libraries/nestjs-libraries/src/agent/agent.graph.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.module.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.module.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..f6a99ae71a4b67c17352af4367526ac8ddf85ab6 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.module.d.ts @@ -0,0 +1,2 @@ +export declare class AgentModule { +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.module.js b/apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.module.js new file mode 100644 index 0000000000000000000000000000000000000000..636fec37d7bc2a874f8dbf98b1cf8ff8ba096ea3 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.module.js @@ -0,0 +1,20 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.AgentModule = void 0; +const tslib_1 = require("tslib"); +const common_1 = require("@nestjs/common"); +const agent_graph_service_1 = require("./agent.graph.service"); +const agent_graph_insert_service_1 = require("./agent.graph.insert.service"); +let AgentModule = class AgentModule { +}; +exports.AgentModule = AgentModule; +exports.AgentModule = AgentModule = tslib_1.__decorate([ + (0, common_1.Global)(), + (0, common_1.Module)({ + providers: [agent_graph_service_1.AgentGraphService, agent_graph_insert_service_1.AgentGraphInsertService], + get exports() { + return this.providers; + }, + }) +], AgentModule); +//# sourceMappingURL=agent.module.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.module.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.module.js.map new file mode 100644 index 0000000000000000000000000000000000000000..112514e8ce3c68d8a39761ce1dc28bd5f02c6941 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"agent.module.js","sourceRoot":"","sources":["../../../../../../../libraries/nestjs-libraries/src/agent/agent.module.ts"],"names":[],"mappings":";;;;AAAA,2CAAgD;AAChD,+DAAwF;AACxF,6EAAqG;AAS9F,IAAM,WAAW,GAAjB,MAAM,WAAW;CAAG,CAAA;AAAd,kCAAW;sBAAX,WAAW;IAPvB,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC;QACN,SAAS,EAAE,CAAC,uCAAiB,EAAE,oDAAuB,CAAC;QACvD,IAAI,OAAO;YACT,OAAO,IAAI,CAAC,SAAS,CAAC;QACxB,CAAC;KACF,CAAC;GACW,WAAW,CAAG"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.topics.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.topics.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..3642c4dbb2d5b5eaa81bb2647ada363e0bed229d --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.topics.d.ts @@ -0,0 +1 @@ +export declare const agentTopics: string[]; diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.topics.js b/apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.topics.js new file mode 100644 index 0000000000000000000000000000000000000000..4ab15c0bd5aeec0eeab8e1c2a36d39163f4dda8d --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.topics.js @@ -0,0 +1,86 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.agentTopics = void 0; +exports.agentTopics = [ + 'Business', + 'Marketing', + 'Finance', + 'Startups', + 'Networking', + 'Leadership', + 'Strategy', + 'Branding', + 'Analytics', + 'Growth', + 'Drawing', + 'Painting', + 'Design', + 'Photography', + 'Writing', + 'Sculpting', + 'Animation', + 'Sketching', + 'Crafting', + 'Calligraphy', + 'Mindset', + 'Productivity', + 'Motivation', + 'Education', + 'Learning', + 'Skills', + 'Success', + 'Wellness', + 'Goals', + 'Inspiration', + 'Fashion', + 'Travel', + 'Food', + 'Fitness', + 'Health', + 'Beauty', + 'Home', + 'Decor', + 'Hobbies', + 'Parenting', + 'Tech', + 'Gadgets', + 'AI', + 'Coding', + 'Software', + 'Innovation', + 'Apps', + 'Gaming', + 'Robotics', + 'Security', + 'Music', + 'Movies', + 'Sports', + 'Books', + 'Theater', + 'Comedy', + 'Dance', + 'Celebrities', + 'Culture', + 'Gaming', + 'Environment', + 'Equality', + 'Activism', + 'Justice', + 'Diversity', + 'Sustainability', + 'Inclusion', + 'Awareness', + 'Charity', + 'Peace', + 'Holidays', + 'Festivities', + 'Seasons', + 'Trends', + 'Celebrations', + 'Anniversaries', + 'Milestones', + 'Memories', + 'Promotions', + 'Updates', +]; +//# sourceMappingURL=agent.topics.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.topics.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.topics.js.map new file mode 100644 index 0000000000000000000000000000000000000000..4df5f67d309806ccc501d5dd0d2b2fcbe951568c --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.topics.js.map @@ -0,0 +1 @@ +{"version":3,"file":"agent.topics.js","sourceRoot":"","sources":["../../../../../../../libraries/nestjs-libraries/src/agent/agent.topics.ts"],"names":[],"mappings":";;;AAAa,QAAA,WAAW,GAAG;IACzB,UAAU;IACV,WAAW;IACX,SAAS;IACT,UAAU;IACV,YAAY;IACZ,YAAY;IACZ,UAAU;IACV,UAAU;IACV,WAAW;IACX,QAAQ;IACR,SAAS;IACT,UAAU;IACV,QAAQ;IACR,aAAa;IACb,SAAS;IACT,WAAW;IACX,WAAW;IACX,WAAW;IACX,UAAU;IACV,aAAa;IACb,SAAS;IACT,cAAc;IACd,YAAY;IACZ,WAAW;IACX,UAAU;IACV,QAAQ;IACR,SAAS;IACT,UAAU;IACV,OAAO;IACP,aAAa;IACb,SAAS;IACT,QAAQ;IACR,MAAM;IACN,SAAS;IACT,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,OAAO;IACP,SAAS;IACT,WAAW;IACX,MAAM;IACN,SAAS;IACT,IAAI;IACJ,QAAQ;IACR,UAAU;IACV,YAAY;IACZ,MAAM;IACN,QAAQ;IACR,UAAU;IACV,UAAU;IACV,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,OAAO;IACP,SAAS;IACT,QAAQ;IACR,OAAO;IACP,aAAa;IACb,SAAS;IACT,QAAQ;IACR,aAAa;IACb,UAAU;IACV,UAAU;IACV,SAAS;IACT,WAAW;IACX,gBAAgB;IAChB,WAAW;IACX,WAAW;IACX,SAAS;IACT,OAAO;IACP,UAAU;IACV,aAAa;IACb,SAAS;IACT,QAAQ;IACR,cAAc;IACd,eAAe;IACf,YAAY;IACZ,UAAU;IACV,YAAY;IACZ,SAAS;CACV,CAAC"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/agent.tool.interface.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/chat/agent.tool.interface.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..4f4ae2b31449a8dfb199cf33728012dca88d52dc --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/agent.tool.interface.d.ts @@ -0,0 +1,6 @@ +import type { ToolAction } from '@mastra/core/tools'; +export type ToolReturn = ToolAction; +export interface AgentToolInterface { + name: string; + run(): ToolReturn; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/agent.tool.interface.js b/apps/backend/dist/libraries/nestjs-libraries/src/chat/agent.tool.interface.js new file mode 100644 index 0000000000000000000000000000000000000000..f33220247d0c2f4adf0c7e870898dae53403d38f --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/agent.tool.interface.js @@ -0,0 +1,3 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +//# sourceMappingURL=agent.tool.interface.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/agent.tool.interface.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/chat/agent.tool.interface.js.map new file mode 100644 index 0000000000000000000000000000000000000000..d6d4bec4bfb379522a36da3b41709a8fb063337d --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/agent.tool.interface.js.map @@ -0,0 +1 @@ +{"version":3,"file":"agent.tool.interface.js","sourceRoot":"","sources":["../../../../../../../libraries/nestjs-libraries/src/chat/agent.tool.interface.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/async.storage.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/chat/async.storage.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..c56cf9cd2c23728ccdc445320f26eac71c3f5b14 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/async.storage.d.ts @@ -0,0 +1,9 @@ +type Ctx = { + requestId: string; + auth: any; +}; +export declare function runWithContext(ctx: Ctx, fn: () => Promise | T): T | Promise; +export declare function getContext(): Ctx | undefined; +export declare function getAuth(): T | undefined; +export declare function getRequestId(): string | undefined; +export {}; diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/async.storage.js b/apps/backend/dist/libraries/nestjs-libraries/src/chat/async.storage.js new file mode 100644 index 0000000000000000000000000000000000000000..d6205b9b4c70ebc087d61442d11c36fc5664212f --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/async.storage.js @@ -0,0 +1,21 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.runWithContext = runWithContext; +exports.getContext = getContext; +exports.getAuth = getAuth; +exports.getRequestId = getRequestId; +const node_async_hooks_1 = require("node:async_hooks"); +const als = new node_async_hooks_1.AsyncLocalStorage(); +function runWithContext(ctx, fn) { + return als.run(ctx, fn); +} +function getContext() { + return als.getStore(); +} +function getAuth() { + return als.getStore()?.auth; +} +function getRequestId() { + return als.getStore()?.requestId; +} +//# sourceMappingURL=async.storage.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/async.storage.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/chat/async.storage.js.map new file mode 100644 index 0000000000000000000000000000000000000000..92a25d0f4d8b13e0e9d26fb66583e838b9b8e754 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/async.storage.js.map @@ -0,0 +1 @@ +{"version":3,"file":"async.storage.js","sourceRoot":"","sources":["../../../../../../../libraries/nestjs-libraries/src/chat/async.storage.ts"],"names":[],"mappings":";;AAUA,wCAEC;AAED,gCAEC;AAED,0BAEC;AAED,oCAEC;AAvBD,uDAAqD;AAOrD,MAAM,GAAG,GAAG,IAAI,oCAAiB,EAAO,CAAC;AAEzC,SAAgB,cAAc,CAAI,GAAQ,EAAE,EAAwB;IAClE,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AAC1B,CAAC;AAED,SAAgB,UAAU;IACxB,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AACxB,CAAC;AAED,SAAgB,OAAO;IACrB,OAAO,GAAG,CAAC,QAAQ,EAAE,EAAE,IAAqB,CAAC;AAC/C,CAAC;AAED,SAAgB,YAAY;IAC1B,OAAO,GAAG,CAAC,QAAQ,EAAE,EAAE,SAAS,CAAC;AACnC,CAAC"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/auth.context.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/chat/auth.context.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..298eec23895349d8e83ffbad75024b9c992c38d0 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/auth.context.d.ts @@ -0,0 +1 @@ +export declare const checkAuth: (inputData: any, context: any) => void; diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/auth.context.js b/apps/backend/dist/libraries/nestjs-libraries/src/chat/auth.context.js new file mode 100644 index 0000000000000000000000000000000000000000..6613aa59b81106e0c6d2c5bbbbf6b1523a1bb60d --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/auth.context.js @@ -0,0 +1,14 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.checkAuth = void 0; +const async_storage_1 = require("./async.storage"); +const checkAuth = (inputData, context) => { + const auth = (0, async_storage_1.getAuth)(); + const authInfo = context?.mcp?.extra?.authInfo || auth; + if (authInfo && context?.requestContext) { + context.requestContext.set('organization', JSON.stringify(authInfo)); + context.requestContext.set('ui', 'false'); + } +}; +exports.checkAuth = checkAuth; +//# sourceMappingURL=auth.context.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/auth.context.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/chat/auth.context.js.map new file mode 100644 index 0000000000000000000000000000000000000000..18dd503b5c4c30a912bb95213149b1e3d78ba702 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/auth.context.js.map @@ -0,0 +1 @@ +{"version":3,"file":"auth.context.js","sourceRoot":"","sources":["../../../../../../../libraries/nestjs-libraries/src/chat/auth.context.ts"],"names":[],"mappings":";;;AAAA,mDAAuE;AAEhE,MAAM,SAAS,GAAG,CACvB,SAAc,EACd,OAAY,EACZ,EAAE;IACF,MAAM,IAAI,GAAG,IAAA,uBAAO,GAAE,CAAC;IACvB,MAAM,QAAQ,GAAG,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,IAAI,IAAI,CAAC;IACvD,IAAI,QAAQ,IAAI,OAAO,EAAE,cAAc,EAAE,CAAC;QACvC,OAAO,CAAC,cAAsB,CAAC,GAAG,CACjC,cAAc,EACd,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CACzB,CAAC;QACD,OAAO,CAAC,cAAsB,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;AACH,CAAC,CAAC;AAbW,QAAA,SAAS,aAapB"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/chat.module.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/chat/chat.module.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..24a4b7f7b48e165482cdfc1ff473743031ae70d0 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/chat.module.d.ts @@ -0,0 +1,2 @@ +export declare class ChatModule { +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/chat.module.js b/apps/backend/dist/libraries/nestjs-libraries/src/chat/chat.module.js new file mode 100644 index 0000000000000000000000000000000000000000..54f1f9093e823a975593abe0a426c99d7e52c5e3 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/chat.module.js @@ -0,0 +1,21 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ChatModule = void 0; +const tslib_1 = require("tslib"); +const common_1 = require("@nestjs/common"); +const load_tools_service_1 = require("./load.tools.service"); +const mastra_service_1 = require("./mastra.service"); +const tool_list_1 = require("./tools/tool.list"); +let ChatModule = class ChatModule { +}; +exports.ChatModule = ChatModule; +exports.ChatModule = ChatModule = tslib_1.__decorate([ + (0, common_1.Global)(), + (0, common_1.Module)({ + providers: [mastra_service_1.MastraService, load_tools_service_1.LoadToolsService, ...tool_list_1.toolList], + get exports() { + return this.providers; + }, + }) +], ChatModule); +//# sourceMappingURL=chat.module.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/chat.module.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/chat/chat.module.js.map new file mode 100644 index 0000000000000000000000000000000000000000..4c817b0c9164791f13f624c2229c1b35fe7001fa --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/chat.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"chat.module.js","sourceRoot":"","sources":["../../../../../../../libraries/nestjs-libraries/src/chat/chat.module.ts"],"names":[],"mappings":";;;;AAAA,2CAAgD;AAChD,6DAAqF;AACrF,qDAA8E;AAC9E,iDAA0E;AASnE,IAAM,UAAU,GAAhB,MAAM,UAAU;CAAG,CAAA;AAAb,gCAAU;qBAAV,UAAU;IAPtB,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC;QACN,SAAS,EAAE,CAAC,8BAAa,EAAE,qCAAgB,EAAE,GAAG,oBAAQ,CAAC;QACzD,IAAI,OAAO;YACT,OAAO,IAAI,CAAC,SAAS,CAAC;QACxB,CAAC;KACF,CAAC;GACW,UAAU,CAAG"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/load.tools.service.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/chat/load.tools.service.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..432ac825f95eba61e3ce05fddcf2d9260da08085 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/load.tools.service.d.ts @@ -0,0 +1,15 @@ +import { Agent } from '@mastra/core/agent'; +import { ModuleRef } from '@nestjs/core'; +export declare const AgentState: import("zod").ZodObject<{ + proverbs: import("zod").ZodDefault>; +}, "strip", import("zod").ZodTypeAny, { + proverbs?: string[]; +}, { + proverbs?: string[]; +}>; +export declare class LoadToolsService { + private _moduleRef; + constructor(_moduleRef: ModuleRef); + loadTools(): Promise>; + agent(): Promise, undefined, unknown>>; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/load.tools.service.js b/apps/backend/dist/libraries/nestjs-libraries/src/chat/load.tools.service.js new file mode 100644 index 0000000000000000000000000000000000000000..bba7135f53bbaa88e8eb7eb2ee14df86e9976dea --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/load.tools.service.js @@ -0,0 +1,101 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.LoadToolsService = exports.AgentState = void 0; +const tslib_1 = require("tslib"); +const common_1 = require("@nestjs/common"); +const agent_1 = require("@mastra/core/agent"); +const openai_1 = require("@ai-sdk/openai"); +const memory_1 = require("@mastra/memory"); +const mastra_store_1 = require("./mastra.store"); +const zod_1 = require("zod"); +const core_1 = require("@nestjs/core"); +const tool_list_1 = require("./tools/tool.list"); +const dayjs_1 = tslib_1.__importDefault(require("dayjs")); +exports.AgentState = (0, zod_1.object)({ + proverbs: (0, zod_1.array)((0, zod_1.string)()).default([]), +}); +const renderArray = (list, show) => { + if (!show) + return ''; + return list.map((p) => `- ${p}`).join('\n'); +}; +let LoadToolsService = class LoadToolsService { + constructor(_moduleRef) { + this._moduleRef = _moduleRef; + } + async loadTools() { + return (await Promise.all(tool_list_1.toolList + .map((p) => this._moduleRef.get(p, { strict: false })) + .map(async (p) => ({ + name: p.name, + tool: await p.run(), + })))).reduce((all, current) => ({ + ...all, + [current.name]: current.tool, + }), {}); + } + async agent() { + const tools = await this.loadTools(); + return new agent_1.Agent({ + id: 'postiz', + name: 'postiz', + description: 'Agent that helps manage and schedule social media posts for users', + instructions: ({ requestContext }) => { + const ui = requestContext.get('ui'); + return ` + Global information: + - Date (UTC): ${(0, dayjs_1.default)().format('YYYY-MM-DD HH:mm:ss')} + + You are an agent that helps manage and schedule social media posts for users, you can: + - Schedule posts into the future, or now, adding texts, images and videos + - Generate pictures for posts + - Generate videos for posts + - Generate text for posts + - Show global analytics about socials + - List integrations (channels) + - List groups (customers) and filter the channels by a group + + - We schedule posts to different integration like facebook, instagram, etc. but to the user we don't say integrations we say channels as integration is the technical name + - When scheduling a post, you must follow the social media rules and best practices. + - When scheduling a post, you can pass an array for list of posts for a social media platform, But it has different behavior depending on the platform. + - For platforms like Threads, Bluesky and X (Twitter), each post in the array will be a separate post in the thread. + - For platforms like LinkedIn and Facebook, second part of the array will be added as "comments" to the first post. + - If the social media platform has the concept of "threads", we need to ask the user if they want to create a thread or one long post. + - For X, if you don't have Premium, don't suggest a long post because it won't work. + - Platform format will also be passed can be "normal", "markdown", "html", make sure you use the correct format for each platform. + + - Sometimes 'integrationSchema' will return rules, make sure you follow them (these rules are set in stone, even if the user asks to ignore them) + - Each socials media platform has different settings and rules, you can get them by using the integrationSchema tool. + - Always make sure you use this tool before you schedule any post. + - In every message I will send you the list of needed social medias (id and platform), if you already have the information use it, if not, use the integrationSchema tool to get it. + - Make sure you always take the last information I give you about the socials, it might have changed. + - Before scheduling a post, always make sure you ask the user confirmation by providing all the details of the post (text, images, videos, date, time, social media platform, account). + - Between tools, we will reference things like: [output:name] and [input:name] to set the information right. + - When outputting a date for the user, make sure it's human readable with time + - The content of the post, HTML, Each line must be wrapped in

here is the possible tags: h1, h2, h3, u, strong, li, ul, p (you can\'t have u and strong together), don't use a "code" box + ${renderArray([ + 'If the user confirm, ask if they would like to get a modal with populated content without scheduling the post yet or if they want to schedule it right away.', + ], !!ui)} +`; + }, + model: (0, openai_1.openai)('gpt-5.2'), + tools, + memory: new memory_1.Memory({ + storage: mastra_store_1.pStore, + options: { + generateTitle: true, + workingMemory: { + enabled: true, + schema: exports.AgentState, + }, + }, + }), + }); + } +}; +exports.LoadToolsService = LoadToolsService; +exports.LoadToolsService = LoadToolsService = tslib_1.__decorate([ + (0, common_1.Injectable)(), + tslib_1.__metadata("design:paramtypes", [core_1.ModuleRef]) +], LoadToolsService); +//# sourceMappingURL=load.tools.service.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/load.tools.service.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/chat/load.tools.service.js.map new file mode 100644 index 0000000000000000000000000000000000000000..fbfe40881602edd514efb81c6351df2bb8ed3eb3 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/load.tools.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"load.tools.service.js","sourceRoot":"","sources":["../../../../../../../libraries/nestjs-libraries/src/chat/load.tools.service.ts"],"names":[],"mappings":";;;;AAAA,2CAA4C;AAC5C,8CAA2C;AAC3C,2CAAwC;AACxC,2CAAwC;AACxC,iDAAqE;AACrE,6BAA4C;AAC5C,uCAAyC;AACzC,iDAA0E;AAC1E,0DAA0B;AAEb,QAAA,UAAU,GAAG,IAAA,YAAM,EAAC;IAC/B,QAAQ,EAAE,IAAA,WAAK,EAAC,IAAA,YAAM,GAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CACtC,CAAC,CAAC;AAEH,MAAM,WAAW,GAAG,CAAC,IAAc,EAAE,IAAa,EAAE,EAAE;IACpD,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9C,CAAC,CAAC;AAGK,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IAC3B,YAAoB,UAAqB;QAArB,eAAU,GAAV,UAAU,CAAW;IAAG,CAAC;IAE7C,KAAK,CAAC,SAAS;QACb,OAAO,CACL,MAAM,OAAO,CAAC,GAAG,CACf,oBAAQ;aACL,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;aACrD,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YACjB,IAAI,EAAE,CAAC,CAAC,IAAc;YACtB,IAAI,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE;SACpB,CAAC,CAAC,CACN,CACF,CAAC,MAAM,CACN,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;YACjB,GAAG,GAAG;YACN,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI;SAC7B,CAAC,EACF,EAAyB,CAC1B,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACrC,OAAO,IAAI,aAAK,CAAC;YACf,EAAE,EAAE,QAAQ;YACZ,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,mEAAmE;YAChF,YAAY,EAAE,CAAC,EAAE,cAAc,EAAE,EAAE,EAAE;gBACnC,MAAM,EAAE,GAAW,cAAc,CAAC,GAAG,CAAC,IAAa,CAAC,CAAC;gBACrD,OAAO;;wBAES,IAAA,eAAK,GAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA6BrD,WAAW,CACX;oBACE,8JAA8J;iBAC/J,EACD,CAAC,CAAC,EAAE,CACL;CACN,CAAC;YACI,CAAC;YACD,KAAK,EAAE,IAAA,eAAM,EAAC,SAAS,CAAC;YACxB,KAAK;YACL,MAAM,EAAE,IAAI,eAAM,CAAC;gBACjB,OAAO,EAAE,qBAAM;gBACf,OAAO,EAAE;oBACP,aAAa,EAAE,IAAI;oBACnB,aAAa,EAAE;wBACb,OAAO,EAAE,IAAI;wBACb,MAAM,EAAE,kBAAU;qBACnB;iBACF;aACF,CAAC;SACH,CAAC,CAAC;IACL,CAAC;CACF,CAAA;AAnFY,4CAAgB;2BAAhB,gBAAgB;IAD5B,IAAA,mBAAU,GAAE;6CAEqB,gBAAS;GAD9B,gBAAgB,CAmF5B"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/mastra.service.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/chat/mastra.service.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..1a402faa9e174d6f81f348a049ee7d78d279eea6 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/mastra.service.d.ts @@ -0,0 +1,8 @@ +import { Mastra } from '@mastra/core/mastra'; +import { LoadToolsService } from "./load.tools.service"; +export declare class MastraService { + private _loadToolsService; + static mastra: Mastra; + constructor(_loadToolsService: LoadToolsService); + mastra(): Promise>, Record, Record>, Record, import("@mastra/core/logger").IMastraLogger, Record>, Record>, Record>, Record>, Record>>; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/mastra.service.js b/apps/backend/dist/libraries/nestjs-libraries/src/chat/mastra.service.js new file mode 100644 index 0000000000000000000000000000000000000000..f954e928a215e8d61b48cc7bcd546bcb470b3f33 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/mastra.service.js @@ -0,0 +1,35 @@ +"use strict"; +var MastraService_1; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.MastraService = void 0; +const tslib_1 = require("tslib"); +const mastra_1 = require("@mastra/core/mastra"); +const logger_1 = require("@mastra/core/logger"); +const mastra_store_1 = require("./mastra.store"); +const common_1 = require("@nestjs/common"); +const load_tools_service_1 = require("./load.tools.service"); +let MastraService = MastraService_1 = class MastraService { + constructor(_loadToolsService) { + this._loadToolsService = _loadToolsService; + } + async mastra() { + MastraService_1.mastra = + MastraService_1.mastra || + new mastra_1.Mastra({ + storage: mastra_store_1.pStore, + agents: { + postiz: await this._loadToolsService.agent(), + }, + logger: new logger_1.ConsoleLogger({ + level: 'info', + }), + }); + return MastraService_1.mastra; + } +}; +exports.MastraService = MastraService; +exports.MastraService = MastraService = MastraService_1 = tslib_1.__decorate([ + (0, common_1.Injectable)(), + tslib_1.__metadata("design:paramtypes", [load_tools_service_1.LoadToolsService]) +], MastraService); +//# sourceMappingURL=mastra.service.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/mastra.service.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/chat/mastra.service.js.map new file mode 100644 index 0000000000000000000000000000000000000000..e5f0cc122a7bf07be62b100a7626d8a637cdc58c --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/mastra.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"mastra.service.js","sourceRoot":"","sources":["../../../../../../../libraries/nestjs-libraries/src/chat/mastra.service.ts"],"names":[],"mappings":";;;;;AAAA,gDAA6C;AAC7C,gDAAoD;AACpD,iDAAqE;AACrE,2CAA4C;AAC5C,6DAAqF;AAG9E,IAAM,aAAa,qBAAnB,MAAM,aAAa;IAExB,YAAoB,iBAAmC;QAAnC,sBAAiB,GAAjB,iBAAiB,CAAkB;IAAG,CAAC;IAC3D,KAAK,CAAC,MAAM;QACV,eAAa,CAAC,MAAM;YAClB,eAAa,CAAC,MAAM;gBACpB,IAAI,eAAM,CAAC;oBACT,OAAO,EAAE,qBAAM;oBACf,MAAM,EAAE;wBACN,MAAM,EAAE,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE;qBAC7C;oBACD,MAAM,EAAE,IAAI,sBAAa,CAAC;wBACxB,KAAK,EAAE,MAAM;qBACd,CAAC;iBACH,CAAC,CAAC;QAEL,OAAO,eAAa,CAAC,MAAM,CAAC;IAC9B,CAAC;CACF,CAAA;AAlBY,sCAAa;wBAAb,aAAa;IADzB,IAAA,mBAAU,GAAE;6CAG4B,qCAAgB;GAF5C,aAAa,CAkBzB"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/mastra.store.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/chat/mastra.store.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..423848fa38e3dce2246dbeaab911268eb42416d5 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/mastra.store.d.ts @@ -0,0 +1,2 @@ +import { PostgresStore } from '@mastra/pg'; +export declare const pStore: PostgresStore; diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/mastra.store.js b/apps/backend/dist/libraries/nestjs-libraries/src/chat/mastra.store.js new file mode 100644 index 0000000000000000000000000000000000000000..d04bd39d1a8515ee0c38bddd75642cde348cc5eb --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/mastra.store.js @@ -0,0 +1,9 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.pStore = void 0; +const pg_1 = require("@mastra/pg"); +exports.pStore = new pg_1.PostgresStore({ + id: 'postiz-store', + connectionString: process.env.DATABASE_URL, +}); +//# sourceMappingURL=mastra.store.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/mastra.store.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/chat/mastra.store.js.map new file mode 100644 index 0000000000000000000000000000000000000000..1e956447017a25d80bedeb85ce4ba5c7279376b4 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/mastra.store.js.map @@ -0,0 +1 @@ +{"version":3,"file":"mastra.store.js","sourceRoot":"","sources":["../../../../../../../libraries/nestjs-libraries/src/chat/mastra.store.ts"],"names":[],"mappings":";;;AAAA,mCAA2C;AAE9B,QAAA,MAAM,GAAG,IAAI,kBAAa,CAAC;IACtC,EAAE,EAAE,cAAc;IAClB,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,YAAa;CAC5C,CAAC,CAAC"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/oauth-middleware.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/chat/oauth-middleware.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..817a0a83b1a8ea767031fa8d4e6c48fd68e887b4 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/oauth-middleware.d.ts @@ -0,0 +1,22 @@ +import type * as http from 'node:http'; +import type { MCPServerOAuthConfig, TokenValidationResult } from './oauth-types'; +interface OAuthMiddlewareLogger { + debug?: (message: string, ...args: unknown[]) => void; +} +export interface OAuthMiddlewareOptions { + oauth: MCPServerOAuthConfig; + mcpPath?: string; + logger?: OAuthMiddlewareLogger; +} +export interface OAuthMiddlewareResult { + proceed: boolean; + handled: boolean; + tokenValidation?: TokenValidationResult; +} +export declare function createOAuthMiddleware(options: OAuthMiddlewareOptions): (req: http.IncomingMessage, res: http.ServerResponse, url: URL) => Promise; +export declare function createStaticTokenValidator(validTokens: string[]): MCPServerOAuthConfig['validateToken']; +export declare function createIntrospectionValidator(introspectionEndpoint: string, clientCredentials?: { + clientId: string; + clientSecret: string; +}): MCPServerOAuthConfig['validateToken']; +export {}; diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/oauth-middleware.js b/apps/backend/dist/libraries/nestjs-libraries/src/chat/oauth-middleware.js new file mode 100644 index 0000000000000000000000000000000000000000..f0cc6a8815aaa63d2e9e0123a319c5ed2ff10032 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/oauth-middleware.js @@ -0,0 +1,168 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.createOAuthMiddleware = createOAuthMiddleware; +exports.createStaticTokenValidator = createStaticTokenValidator; +exports.createIntrospectionValidator = createIntrospectionValidator; +const oauth_types_1 = require("./oauth-types"); +function createOAuthMiddleware(options) { + const { oauth, mcpPath = '/mcp', logger } = options; + const protectedResourceMetadata = (0, oauth_types_1.generateProtectedResourceMetadata)(oauth); + const wellKnownPath = '/.well-known/oauth-protected-resource'; + const resourceMetadataUrl = new URL(wellKnownPath, oauth.resource).toString(); + return async function oauthMiddleware(req, res, url) { + logger?.debug?.(`OAuth middleware: ${req.method} ${url.pathname}`); + if (url.pathname === wellKnownPath && req.method === 'GET') { + logger?.debug?.('OAuth middleware: Serving Protected Resource Metadata'); + res.writeHead(200, { + 'Content-Type': 'application/json', + 'Cache-Control': 'max-age=3600', + 'Access-Control-Allow-Origin': '*', + }); + res.end(JSON.stringify(protectedResourceMetadata)); + return { proceed: false, handled: true }; + } + if (url.pathname === wellKnownPath && req.method === 'OPTIONS') { + res.writeHead(204, { + 'Access-Control-Allow-Origin': '*', + 'Access-Control-Allow-Methods': 'GET, OPTIONS', + 'Access-Control-Allow-Headers': 'Content-Type', + 'Access-Control-Max-Age': '86400', + }); + res.end(); + return { proceed: false, handled: true }; + } + if (!url.pathname.startsWith(mcpPath)) { + return { proceed: true, handled: false }; + } + const authHeader = req.headers['authorization']; + const token = (0, oauth_types_1.extractBearerToken)(authHeader); + if (!token) { + logger?.debug?.('OAuth middleware: No bearer token provided'); + res.writeHead(401, { + 'Content-Type': 'application/json', + 'WWW-Authenticate': (0, oauth_types_1.generateWWWAuthenticateHeader)({ resourceMetadataUrl }), + }); + res.end(JSON.stringify({ + error: 'unauthorized', + error_description: 'Bearer token required', + })); + return { proceed: false, handled: true }; + } + if (oauth.validateToken) { + logger?.debug?.('OAuth middleware: Validating token'); + const validationResult = await oauth.validateToken(token, oauth.resource); + if (!validationResult.valid) { + logger?.debug?.(`OAuth middleware: Token validation failed: ${validationResult.error}`); + res.writeHead(401, { + 'Content-Type': 'application/json', + 'WWW-Authenticate': (0, oauth_types_1.generateWWWAuthenticateHeader)({ + resourceMetadataUrl, + additionalParams: { + error: validationResult.error || 'invalid_token', + ...(validationResult.errorDescription && { + error_description: validationResult.errorDescription, + }), + }, + }), + }); + res.end(JSON.stringify({ + error: validationResult.error || 'invalid_token', + error_description: validationResult.errorDescription || 'Token validation failed', + })); + return { proceed: false, handled: true, tokenValidation: validationResult }; + } + logger?.debug?.('OAuth middleware: Token validated successfully'); + return { proceed: true, handled: false, tokenValidation: validationResult }; + } + logger?.debug?.('OAuth middleware: No token validation configured, accepting token'); + return { + proceed: true, + handled: false, + tokenValidation: { valid: true }, + }; + }; +} +function createStaticTokenValidator(validTokens) { + const tokenSet = new Set(validTokens); + return async (token) => { + if (tokenSet.has(token)) { + return { valid: true, scopes: ['mcp:read', 'mcp:write'] }; + } + return { + valid: false, + error: 'invalid_token', + errorDescription: 'Token not recognized', + }; + }; +} +function createIntrospectionValidator(introspectionEndpoint, clientCredentials) { + return async (token, resource) => { + try { + const headers = { + 'Content-Type': 'application/x-www-form-urlencoded', + }; + if (clientCredentials) { + if (clientCredentials.clientId.includes(':')) { + return { + valid: false, + error: 'invalid_request', + errorDescription: 'clientId cannot contain a colon character per RFC 7617', + }; + } + const credentials = Buffer.from(`${clientCredentials.clientId}:${clientCredentials.clientSecret}`).toString('base64'); + headers['Authorization'] = `Basic ${credentials}`; + } + const response = await fetch(introspectionEndpoint, { + method: 'POST', + headers, + body: new URLSearchParams({ + token, + token_type_hint: 'access_token', + }), + }); + if (!response.ok) { + return { + valid: false, + error: 'server_error', + errorDescription: `Introspection failed: ${response.status}`, + }; + } + const data = (await response.json()); + if (!data.active) { + return { + valid: false, + error: 'invalid_token', + errorDescription: 'Token is not active', + }; + } + if (data.aud) { + const audiences = Array.isArray(data.aud) ? data.aud : [data.aud]; + if (!audiences.includes(resource)) { + return { + valid: false, + error: 'invalid_token', + errorDescription: 'Token audience does not match this resource', + }; + } + } + return { + valid: true, + scopes: data.scope + ?.trim() + .split(' ') + .filter(s => s !== '') || [], + subject: data.sub, + expiresAt: data.exp, + claims: data, + }; + } + catch (error) { + return { + valid: false, + error: 'server_error', + errorDescription: error instanceof Error ? error.message : 'Introspection failed', + }; + } + }; +} +//# sourceMappingURL=oauth-middleware.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/oauth-middleware.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/chat/oauth-middleware.js.map new file mode 100644 index 0000000000000000000000000000000000000000..4cdf40c16d616a2cccdec498d20763563ad3dd50 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/oauth-middleware.js.map @@ -0,0 +1 @@ +{"version":3,"file":"oauth-middleware.js","sourceRoot":"","sources":["../../../../../../../libraries/nestjs-libraries/src/chat/oauth-middleware.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/oauth-types.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/chat/oauth-types.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..ccdbc300741712c28d9c8e966406380ef052d28d --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/oauth-types.d.ts @@ -0,0 +1,32 @@ +export interface MCPServerOAuthConfig { + resource: string; + authorizationServers: string[]; + scopesSupported?: string[]; + resourceName?: string; + resourceDocumentation?: string; + validateToken?: (token: string, resource: string) => Promise; +} +export interface TokenValidationResult { + valid: boolean; + error?: string; + errorDescription?: string; + scopes?: string[]; + subject?: string; + expiresAt?: number; + claims?: Record; +} +export interface OAuthResponseOptions { + resourceMetadataUrl?: string; + additionalParams?: Record; +} +export interface OAuthProtectedResourceMetadata { + resource: string; + authorization_servers: string[]; + scopes_supported?: string[]; + bearer_methods_supported?: string[]; + resource_name?: string; + resource_documentation?: string; +} +export declare function generateWWWAuthenticateHeader(options?: OAuthResponseOptions): string; +export declare function generateProtectedResourceMetadata(config: MCPServerOAuthConfig): OAuthProtectedResourceMetadata; +export declare function extractBearerToken(authHeader: string | null | undefined): string | undefined; diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/oauth-types.js b/apps/backend/dist/libraries/nestjs-libraries/src/chat/oauth-types.js new file mode 100644 index 0000000000000000000000000000000000000000..7bd1adbe660d9bf5b670a8a442389ec9f6fad769 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/oauth-types.js @@ -0,0 +1,47 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.generateWWWAuthenticateHeader = generateWWWAuthenticateHeader; +exports.generateProtectedResourceMetadata = generateProtectedResourceMetadata; +exports.extractBearerToken = extractBearerToken; +function escapeHeaderValue(value) { + return value.replace(/\\/g, '\\\\').replace(/"/g, '\\"'); +} +function generateWWWAuthenticateHeader(options = {}) { + const params = []; + if (options.resourceMetadataUrl) { + params.push(`resource_metadata="${escapeHeaderValue(options.resourceMetadataUrl)}"`); + } + if (options.additionalParams) { + for (const [key, value] of Object.entries(options.additionalParams)) { + params.push(`${key}="${escapeHeaderValue(value)}"`); + } + } + if (params.length === 0) { + return 'Bearer'; + } + return `Bearer ${params.join(', ')}`; +} +function generateProtectedResourceMetadata(config) { + return { + resource: config.resource, + authorization_servers: config.authorizationServers, + scopes_supported: config.scopesSupported ?? ['mcp:read', 'mcp:write'], + bearer_methods_supported: ['header'], + ...(config.resourceName && { resource_name: config.resourceName }), + ...(config.resourceDocumentation && { + resource_documentation: config.resourceDocumentation, + }), + }; +} +function extractBearerToken(authHeader) { + if (!authHeader) + return undefined; + const prefix = 'bearer '; + if (authHeader.length <= prefix.length) + return undefined; + if (authHeader.slice(0, prefix.length).toLowerCase() !== prefix) + return undefined; + const token = authHeader.slice(prefix.length).trim(); + return token || undefined; +} +//# sourceMappingURL=oauth-types.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/oauth-types.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/chat/oauth-types.js.map new file mode 100644 index 0000000000000000000000000000000000000000..145d8320bcecc1ddf2651062053d0236671bc27c --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/oauth-types.js.map @@ -0,0 +1 @@ +{"version":3,"file":"oauth-types.js","sourceRoot":"","sources":["../../../../../../../libraries/nestjs-libraries/src/chat/oauth-types.ts"],"names":[],"mappings":";;AA6DA,sEAkBC;AAED,8EAWC;AAED,gDASC;AA9CD,SAAS,iBAAiB,CAAC,KAAa;IACtC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC3D,CAAC;AAED,SAAgB,6BAA6B,CAAC,UAAgC,EAAE;IAC9E,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,sBAAsB,iBAAiB,CAAC,OAAO,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACvF,CAAC;IAED,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;QAC7B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACpE,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,KAAK,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,OAAO,UAAU,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AACvC,CAAC;AAED,SAAgB,iCAAiC,CAAC,MAA4B;IAC5E,OAAO;QACL,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,qBAAqB,EAAE,MAAM,CAAC,oBAAoB;QAClD,gBAAgB,EAAE,MAAM,CAAC,eAAe,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC;QACrE,wBAAwB,EAAE,CAAC,QAAQ,CAAC;QACpC,GAAG,CAAC,MAAM,CAAC,YAAY,IAAI,EAAE,aAAa,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC;QAClE,GAAG,CAAC,MAAM,CAAC,qBAAqB,IAAI;YAClC,sBAAsB,EAAE,MAAM,CAAC,qBAAqB;SACrD,CAAC;KACH,CAAC;AACJ,CAAC;AAED,SAAgB,kBAAkB,CAAC,UAAqC;IACtE,IAAI,CAAC,UAAU;QAAE,OAAO,SAAS,CAAC;IAElC,MAAM,MAAM,GAAG,SAAS,CAAC;IACzB,IAAI,UAAU,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IACzD,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,KAAK,MAAM;QAAE,OAAO,SAAS,CAAC;IAElF,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IACrD,OAAO,KAAK,IAAI,SAAS,CAAC;AAC5B,CAAC"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/rules.description.decorator.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/chat/rules.description.decorator.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..164f6f0d33cf60b68902c1b71a2384dc306144bf --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/rules.description.decorator.d.ts @@ -0,0 +1,2 @@ +import 'reflect-metadata'; +export declare function Rules(description: string): (target: any) => void; diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/rules.description.decorator.js b/apps/backend/dist/libraries/nestjs-libraries/src/chat/rules.description.decorator.js new file mode 100644 index 0000000000000000000000000000000000000000..c176dda4b97ad5ae56c72f5c9a2aec877f37ad41 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/rules.description.decorator.js @@ -0,0 +1,10 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Rules = Rules; +require("reflect-metadata"); +function Rules(description) { + return function (target) { + Reflect.defineMetadata('custom:rules:description', description, target); + }; +} +//# sourceMappingURL=rules.description.decorator.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/rules.description.decorator.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/chat/rules.description.decorator.js.map new file mode 100644 index 0000000000000000000000000000000000000000..52185f3fd9be7ca4ab8fb9705b1a195c978cf1c6 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/rules.description.decorator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"rules.description.decorator.js","sourceRoot":"","sources":["../../../../../../../libraries/nestjs-libraries/src/chat/rules.description.decorator.ts"],"names":[],"mappings":";;AAEA,sBASC;AAXD,4BAA0B;AAE1B,SAAgB,KAAK,CAAC,WAAmB;IACvC,OAAO,UAAU,MAAW;QAE1B,OAAO,CAAC,cAAc,CACpB,0BAA0B,EAC1B,WAAW,EACX,MAAM,CACP,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/start.mcp.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/chat/start.mcp.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..b6052436c8713923a3a4429ba3e77c1c6d185783 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/start.mcp.d.ts @@ -0,0 +1,2 @@ +import { INestApplication } from '@nestjs/common'; +export declare const startMcp: (app: INestApplication) => Promise; diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/start.mcp.js b/apps/backend/dist/libraries/nestjs-libraries/src/chat/start.mcp.js new file mode 100644 index 0000000000000000000000000000000000000000..8d803802e3d4e1f6817b1c578995e0b22ec0d5e2 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/start.mcp.js @@ -0,0 +1,219 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.startMcp = void 0; +const mastra_service_1 = require("./mastra.service"); +const mcp_1 = require("@mastra/mcp"); +const crypto_1 = require("crypto"); +const organization_service_1 = require("../database/prisma/organizations/organization.service"); +const oauth_service_1 = require("../database/prisma/oauth/oauth.service"); +const async_storage_1 = require("./async.storage"); +const oauth_middleware_1 = require("./oauth-middleware"); +const fixAcceptHeader = (req) => { + const value = 'application/json, text/event-stream'; + req.headers.accept = value; + const idx = req.rawHeaders.findIndex((h) => h.toLowerCase() === 'accept'); + if (idx !== -1) { + req.rawHeaders[idx + 1] = value; + } + else { + req.rawHeaders.push('Accept', value); + } +}; +const startMcp = async (app) => { + const mastraService = app.get(mastra_service_1.MastraService, { strict: false }); + const organizationService = app.get(organization_service_1.OrganizationService, { strict: false }); + const oauthService = app.get(oauth_service_1.OAuthService, { strict: false }); + const resolveAuth = async (token) => { + if (token.startsWith('pos_')) { + const authorization = await oauthService.getOrgByOAuthToken(token); + if (!authorization) + return null; + return authorization.organization; + } + return organizationService.getOrgByApiKey(token); + }; + const mastra = await mastraService.mastra(); + const agent = mastra.getAgent('postiz'); + const tools = await agent.listTools(); + const serverConfig = { + name: 'Postiz MCP', + version: '1.0.0', + tools, + agents: { postiz: agent }, + }; + const server = new mcp_1.MCPServer(serverConfig); + const oauthMiddleware = (0, oauth_middleware_1.createOAuthMiddleware)({ + oauth: { + resource: new URL('/mcp-oauth', process.env.NEXT_PUBLIC_BACKEND_URL).toString(), + authorizationServers: [process.env.NEXT_PUBLIC_BACKEND_URL], + validateToken: async (token) => { + const org = await resolveAuth(token); + if (!org) { + return { valid: false, error: 'invalid_token', errorDescription: 'Invalid API Key or OAuth token' }; + } + return { valid: true, subject: token }; + }, + }, + mcpPath: '/mcp-oauth', + }); + if (process.env.OPENAI_APP_CHALLANGE) { + app.use('/.well-known/openai-apps-challenge', (req, res) => { + res.setHeader('Content-Type', 'text/plain'); + res.send(process.env.OPENAI_APP_CHALLANGE); + }); + } + app.use('/.well-known/oauth-protected-resource', async (req, res) => { + const url = new URL('/.well-known/oauth-protected-resource', process.env.NEXT_PUBLIC_BACKEND_URL); + await oauthMiddleware(req, res, url); + }); + app.use('/.well-known/oauth-authorization-server', async (req, res) => { + res.setHeader('Access-Control-Allow-Origin', '*'); + if (req.method === 'OPTIONS') { + res.setHeader('Access-Control-Allow-Methods', 'GET, OPTIONS'); + res.setHeader('Access-Control-Allow-Headers', 'Content-Type'); + res.writeHead(204); + res.end(); + return; + } + res.setHeader('Content-Type', 'application/json'); + res.setHeader('Cache-Control', 'max-age=3600'); + res.json({ + issuer: process.env.NEXT_PUBLIC_BACKEND_URL, + authorization_endpoint: `${process.env.FRONTEND_URL}/oauth/authorize`, + token_endpoint: `${process.env.NEXT_PUBLIC_OVERRIDE_BACKEND_URL || process.env.NEXT_PUBLIC_BACKEND_URL}/oauth/token`, + response_types_supported: ['code'], + grant_types_supported: ['authorization_code'], + code_challenge_methods_supported: ['S256'], + scopes_supported: ['mcp:read', 'mcp:write'], + }); + }); + app.use('/mcp-oauth', async (req, res, next) => { + if (req.path !== '/' && req.path !== '') { + next(); + return; + } + const url = new URL('/mcp-oauth', process.env.NEXT_PUBLIC_BACKEND_URL); + const result = await oauthMiddleware(req, res, url); + if (!result.proceed) + return; + const token = result.tokenValidation?.subject; + const auth = await resolveAuth(token); + if (!auth) { + res.status(401).json({ error: 'invalid_token', error_description: 'Could not resolve organization' }); + return; + } + fixAcceptHeader(req); + await (0, async_storage_1.runWithContext)({ requestId: token, auth }, async () => { + await server.startHTTP({ + url: url, + httpPath: url.pathname, + options: { + sessionIdGenerator: () => { + return (0, crypto_1.randomUUID)(); + }, + enableJsonResponse: true, + }, + req, + res, + }); + }); + }); + app.use('/mcp', async (req, res, next) => { + if (req.path !== '/' && req.path !== '') { + next(); + return; + } + res.setHeader('Access-Control-Allow-Origin', '*'); + res.setHeader('Access-Control-Allow-Methods', '*'); + res.setHeader('Access-Control-Allow-Headers', '*'); + res.setHeader('Access-Control-Expose-Headers', '*'); + if (req.method === 'OPTIONS') { + res.sendStatus(200); + return; + } + const token = req.headers.authorization?.replace('Bearer ', ''); + if (!token) { + res.status(401).send('Missing Authorization header'); + return; + } + req.auth = await resolveAuth(token); + if (!req.auth) { + res.status(401).send('Invalid API Key or OAuth token'); + return; + } + const url = new URL('/mcp', process.env.NEXT_PUBLIC_BACKEND_URL); + fixAcceptHeader(req); + await (0, async_storage_1.runWithContext)({ requestId: token, auth: req.auth }, async () => { + await server.startHTTP({ + url, + httpPath: url.pathname, + options: { + sessionIdGenerator: () => { + return (0, crypto_1.randomUUID)(); + }, + enableJsonResponse: true, + }, + req, + res, + }); + }); + }); + app.use('/mcp/:id', async (req, res) => { + res.setHeader('Access-Control-Allow-Origin', '*'); + res.setHeader('Access-Control-Allow-Methods', '*'); + res.setHeader('Access-Control-Allow-Headers', '*'); + res.setHeader('Access-Control-Expose-Headers', '*'); + if (req.method === 'OPTIONS') { + res.sendStatus(200); + return; + } + req.auth = await organizationService.getOrgByApiKey(req.params.id); + if (!req.auth) { + res.status(400).send('Invalid API Key'); + return; + } + const url = new URL(`/mcp/${req.params.id}`, process.env.NEXT_PUBLIC_BACKEND_URL); + fixAcceptHeader(req); + await (0, async_storage_1.runWithContext)({ requestId: req.params.id, auth: req.auth }, async () => { + await server.startHTTP({ + url, + httpPath: url.pathname, + options: { + sessionIdGenerator: () => { + return (0, crypto_1.randomUUID)(); + }, + enableJsonResponse: true, + }, + req, + res, + }); + }); + }); + app.use(['/sse/:id', '/message/:id'], async (req, res) => { + res.setHeader('Access-Control-Allow-Origin', '*'); + res.setHeader('Access-Control-Allow-Methods', '*'); + res.setHeader('Access-Control-Allow-Headers', '*'); + res.setHeader('Access-Control-Expose-Headers', '*'); + if (req.method === 'OPTIONS') { + res.sendStatus(200); + return; + } + req.auth = await organizationService.getOrgByApiKey(req.params.id); + if (!req.auth) { + res.status(400).send('Invalid API Key'); + return; + } + const url = new URL(req.originalUrl, process.env.NEXT_PUBLIC_BACKEND_URL); + await (0, async_storage_1.runWithContext)({ requestId: req.params.id, auth: req.auth }, async () => { + await new mcp_1.MCPServer(serverConfig).startSSE({ + url, + ssePath: `/sse/${req.params.id}`, + messagePath: `/message/${req.params.id}`, + req, + res, + }); + }); + }); +}; +exports.startMcp = startMcp; +//# sourceMappingURL=start.mcp.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/start.mcp.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/chat/start.mcp.js.map new file mode 100644 index 0000000000000000000000000000000000000000..51c56a7a1ce1ca443f7e8106e872b07a7fb5f15d --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/start.mcp.js.map @@ -0,0 +1 @@ +{"version":3,"file":"start.mcp.js","sourceRoot":"","sources":["../../../../../../../libraries/nestjs-libraries/src/chat/start.mcp.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/generate.image.tool.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/generate.image.tool.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..0449ab775b782be9ed65d4cade9794d0017ccb13 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/generate.image.tool.d.ts @@ -0,0 +1,9 @@ +import { AgentToolInterface } from "../agent.tool.interface"; +import { MediaService } from "../../database/prisma/media/media.service"; +export declare class GenerateImageTool implements AgentToolInterface { + private _mediaService; + private storage; + constructor(_mediaService: MediaService); + name: string; + run(): import("@mastra/core/tools").Tool, InferPublicSchema, InferPublicSchema, InferPublicSchema, import("@mastra/core/tools").ToolExecutionContext, InferPublicSchema, unknown>, "generateImageTool", unknown>; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/generate.image.tool.js b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/generate.image.tool.js new file mode 100644 index 0000000000000000000000000000000000000000..d6b6c3175be4c877072901ce0271735bd62923a3 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/generate.image.tool.js @@ -0,0 +1,55 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GenerateImageTool = void 0; +const tslib_1 = require("tslib"); +const tools_1 = require("@mastra/core/tools"); +const zod_1 = require("zod"); +const common_1 = require("@nestjs/common"); +const media_service_1 = require("../../database/prisma/media/media.service"); +const upload_factory_1 = require("../../upload/upload.factory"); +const auth_context_1 = require("../auth.context"); +let GenerateImageTool = class GenerateImageTool { + constructor(_mediaService) { + this._mediaService = _mediaService; + this.storage = upload_factory_1.UploadFactory.createStorage(); + this.name = 'generateImageTool'; + } + run() { + return (0, tools_1.createTool)({ + id: 'generateImageTool', + description: `Generate image to use in a post, + in case the user specified a platform that requires attachment and attachment was not provided, + ask if they want to generate a picture of a video. + `, + mcp: { + annotations: { + title: 'Generate Image', + readOnlyHint: false, + destructiveHint: false, + idempotentHint: false, + openWorldHint: true, + }, + }, + inputSchema: zod_1.z.object({ + prompt: zod_1.z.string(), + }), + outputSchema: zod_1.z.object({ + id: zod_1.z.string(), + path: zod_1.z.string(), + }), + execute: async (inputData, context) => { + (0, auth_context_1.checkAuth)(inputData, context); + const org = JSON.parse(context?.requestContext?.get('organization')); + const image = await this._mediaService.generateImage(inputData.prompt, org); + const file = await this.storage.uploadSimple('data:image/png;base64,' + image); + return this._mediaService.saveFile(org.id, file.split('/').pop(), file); + }, + }); + } +}; +exports.GenerateImageTool = GenerateImageTool; +exports.GenerateImageTool = GenerateImageTool = tslib_1.__decorate([ + (0, common_1.Injectable)(), + tslib_1.__metadata("design:paramtypes", [media_service_1.MediaService]) +], GenerateImageTool); +//# sourceMappingURL=generate.image.tool.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/generate.image.tool.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/generate.image.tool.js.map new file mode 100644 index 0000000000000000000000000000000000000000..1a71c1567db1dc0adb91113f6924045a5e632057 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/generate.image.tool.js.map @@ -0,0 +1 @@ +{"version":3,"file":"generate.image.tool.js","sourceRoot":"","sources":["../../../../../../../../libraries/nestjs-libraries/src/chat/tools/generate.image.tool.ts"],"names":[],"mappings":";;;;AACA,8CAAgD;AAChD,6BAAwB;AACxB,2CAA4C;AAC5C,6EAA6F;AAC7F,gEAAgF;AAChF,kDAAwE;AAGjE,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAG5B,YAAoB,aAA2B;QAA3B,kBAAa,GAAb,aAAa,CAAc;QAFvC,YAAO,GAAG,8BAAa,CAAC,aAAa,EAAE,CAAC;QAGhD,SAAI,GAAG,mBAAmB,CAAC;IADuB,CAAC;IAGnD,GAAG;QACD,OAAO,IAAA,kBAAU,EAAC;YAChB,EAAE,EAAE,mBAAmB;YACvB,WAAW,EAAE;;;OAGZ;YACD,GAAG,EAAE;gBACH,WAAW,EAAE;oBACX,KAAK,EAAE,gBAAgB;oBACvB,YAAY,EAAE,KAAK;oBACnB,eAAe,EAAE,KAAK;oBACtB,cAAc,EAAE,KAAK;oBACrB,aAAa,EAAE,IAAI;iBACpB;aACF;YACD,WAAW,EAAE,OAAC,CAAC,MAAM,CAAC;gBACpB,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE;aACnB,CAAC;YACF,YAAY,EAAE,OAAC,CAAC,MAAM,CAAC;gBACrB,EAAE,EAAE,OAAC,CAAC,MAAM,EAAE;gBACd,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE;aACjB,CAAC;YACF,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE;gBACpC,IAAA,wBAAS,EAAC,SAAS,EAAE,OAAO,CAAC,CAAC;gBAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAE,OAAO,EAAE,cAAsB,EAAE,GAAG,CAAC,cAAc,CAAW,CAAC,CAAC;gBACxF,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,aAAa,CAClD,SAAS,CAAC,MAAM,EAChB,GAAG,CACJ,CAAC;gBAEF,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAC1C,wBAAwB,GAAG,KAAK,CACjC,CAAC;gBAEF,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;YAC1E,CAAC;SACF,CAAC,CAAC;IACL,CAAC;CACF,CAAA;AA7CY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,mBAAU,GAAE;6CAIwB,4BAAY;GAHpC,iBAAiB,CA6C7B"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/generate.video.options.tool.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/generate.video.options.tool.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..4573043b5872fe41006b7a8fea99afe2b304f218 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/generate.video.options.tool.d.ts @@ -0,0 +1,8 @@ +import { AgentToolInterface } from "../agent.tool.interface"; +import { VideoManager } from "../../videos/video.manager"; +export declare class GenerateVideoOptionsTool implements AgentToolInterface { + private _videoManagerService; + constructor(_videoManagerService: VideoManager); + name: string; + run(): import("@mastra/core/tools").Tool, InferPublicSchema, InferPublicSchema, InferPublicSchema, import("@mastra/core/tools").ToolExecutionContext, InferPublicSchema, unknown>, "generateVideoOptions", unknown>; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/generate.video.options.tool.js b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/generate.video.options.tool.js new file mode 100644 index 0000000000000000000000000000000000000000..04ae6d48659ccd201e9470ff17e60bda06e97f26 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/generate.video.options.tool.js @@ -0,0 +1,78 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GenerateVideoOptionsTool = void 0; +const tslib_1 = require("tslib"); +const tools_1 = require("@mastra/core/tools"); +const common_1 = require("@nestjs/common"); +const validation_schemas_helper_1 = require("../validation.schemas.helper"); +const video_manager_1 = require("../../videos/video.manager"); +const zod_1 = tslib_1.__importDefault(require("zod")); +const auth_context_1 = require("../auth.context"); +let GenerateVideoOptionsTool = class GenerateVideoOptionsTool { + constructor(_videoManagerService) { + this._videoManagerService = _videoManagerService; + this.name = 'generateVideoOptions'; + } + run() { + return (0, tools_1.createTool)({ + id: 'generateVideoOptions', + description: `All the options to generate videos, some tools might require another call to generateVideoFunction`, + inputSchema: zod_1.default.object({ + reasoning: zod_1.default + .string() + .optional() + .describe('Optional short reason for why you are listing the video generation options'), + }), + mcp: { + annotations: { + title: 'List Video Generation Options', + readOnlyHint: true, + destructiveHint: false, + idempotentHint: true, + openWorldHint: false, + }, + }, + outputSchema: zod_1.default.object({ + video: zod_1.default.array(zod_1.default.object({ + type: zod_1.default.string(), + output: zod_1.default.string(), + tools: zod_1.default.array(zod_1.default.object({ + functionName: zod_1.default.string(), + output: zod_1.default.string(), + })), + customParams: zod_1.default.any(), + })), + }), + execute: async (inputData, context) => { + (0, auth_context_1.checkAuth)(inputData, context); + const videos = this._videoManagerService.getAllVideos(); + console.log(JSON.stringify({ + video: videos.map((p) => { + return { + type: p.identifier, + output: 'vertical|horizontal', + tools: p.tools, + customParams: (0, validation_schemas_helper_1.getValidationSchemas)()[p.dto.name], + }; + }), + }, null, 2)); + return { + video: videos.map((p) => { + return { + type: p.identifier, + output: 'vertical|horizontal', + tools: p.tools, + customParams: (0, validation_schemas_helper_1.getValidationSchemas)()[p.dto.name], + }; + }), + }; + }, + }); + } +}; +exports.GenerateVideoOptionsTool = GenerateVideoOptionsTool; +exports.GenerateVideoOptionsTool = GenerateVideoOptionsTool = tslib_1.__decorate([ + (0, common_1.Injectable)(), + tslib_1.__metadata("design:paramtypes", [video_manager_1.VideoManager]) +], GenerateVideoOptionsTool); +//# sourceMappingURL=generate.video.options.tool.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/generate.video.options.tool.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/generate.video.options.tool.js.map new file mode 100644 index 0000000000000000000000000000000000000000..c8cc0d30687f93b5fc137e6c3f468532edc9e278 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/generate.video.options.tool.js.map @@ -0,0 +1 @@ +{"version":3,"file":"generate.video.options.tool.js","sourceRoot":"","sources":["../../../../../../../../libraries/nestjs-libraries/src/chat/tools/generate.video.options.tool.ts"],"names":[],"mappings":";;;;AAGA,8CAAgD;AAChD,2CAA4C;AAC5C,4EAAgG;AAChG,8DAA8E;AAC9E,sDAAoB;AACpB,kDAAwE;AAGjE,IAAM,wBAAwB,GAA9B,MAAM,wBAAwB;IACnC,YAAoB,oBAAkC;QAAlC,yBAAoB,GAApB,oBAAoB,CAAc;QACtD,SAAI,GAAG,sBAAsB,CAAC;IAD2B,CAAC;IAG1D,GAAG;QACD,OAAO,IAAA,kBAAU,EAAC;YAChB,EAAE,EAAE,sBAAsB;YAC1B,WAAW,EAAE,oGAAoG;YACjH,WAAW,EAAE,aAAC,CAAC,MAAM,CAAC;gBACpB,SAAS,EAAE,aAAC;qBACT,MAAM,EAAE;qBACR,QAAQ,EAAE;qBACV,QAAQ,CACP,4EAA4E,CAC7E;aACJ,CAAC;YACF,GAAG,EAAE;gBACH,WAAW,EAAE;oBACX,KAAK,EAAE,+BAA+B;oBACtC,YAAY,EAAE,IAAI;oBAClB,eAAe,EAAE,KAAK;oBACtB,cAAc,EAAE,IAAI;oBACpB,aAAa,EAAE,KAAK;iBACrB;aACF;YACD,YAAY,EAAE,aAAC,CAAC,MAAM,CAAC;gBACrB,KAAK,EAAE,aAAC,CAAC,KAAK,CACZ,aAAC,CAAC,MAAM,CAAC;oBACP,IAAI,EAAE,aAAC,CAAC,MAAM,EAAE;oBAChB,MAAM,EAAE,aAAC,CAAC,MAAM,EAAE;oBAClB,KAAK,EAAE,aAAC,CAAC,KAAK,CACZ,aAAC,CAAC,MAAM,CAAC;wBACP,YAAY,EAAE,aAAC,CAAC,MAAM,EAAE;wBACxB,MAAM,EAAE,aAAC,CAAC,MAAM,EAAE;qBACnB,CAAC,CACH;oBACD,YAAY,EAAE,aAAC,CAAC,GAAG,EAAE;iBACtB,CAAC,CACH;aACF,CAAC;YACF,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE;gBACpC,IAAA,wBAAS,EAAC,SAAS,EAAE,OAAO,CAAC,CAAC;gBAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE,CAAC;gBACxD,OAAO,CAAC,GAAG,CACT,IAAI,CAAC,SAAS,CACZ;oBACE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;wBACtB,OAAO;4BACL,IAAI,EAAE,CAAC,CAAC,UAAU;4BAClB,MAAM,EAAE,qBAAqB;4BAC7B,KAAK,EAAE,CAAC,CAAC,KAAK;4BACd,YAAY,EAAE,IAAA,gDAAoB,GAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;yBACjD,CAAC;oBACJ,CAAC,CAAC;iBACH,EACD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;gBAEF,OAAO;oBACL,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;wBACtB,OAAO;4BACL,IAAI,EAAE,CAAC,CAAC,UAAU;4BAClB,MAAM,EAAE,qBAAqB;4BAC7B,KAAK,EAAE,CAAC,CAAC,KAAK;4BACd,YAAY,EAAE,IAAA,gDAAoB,GAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;yBACjD,CAAC;oBACJ,CAAC,CAAC;iBACH,CAAC;YACJ,CAAC;SACF,CAAC,CAAC;IACL,CAAC;CACF,CAAA;AAzEY,4DAAwB;mCAAxB,wBAAwB;IADpC,IAAA,mBAAU,GAAE;6CAE+B,4BAAY;GAD3C,wBAAwB,CAyEpC"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/generate.video.tool.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/generate.video.tool.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..786b9baade02c08301ef158de99dd35ce503ff28 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/generate.video.tool.d.ts @@ -0,0 +1,10 @@ +import { AgentToolInterface } from "../agent.tool.interface"; +import { MediaService } from "../../database/prisma/media/media.service"; +import { VideoManager } from "../../videos/video.manager"; +export declare class GenerateVideoTool implements AgentToolInterface { + private _mediaService; + private _videoManager; + constructor(_mediaService: MediaService, _videoManager: VideoManager); + name: string; + run(): import("@mastra/core/tools").Tool, InferPublicSchema, InferPublicSchema, InferPublicSchema, import("@mastra/core/tools").ToolExecutionContext, InferPublicSchema, unknown>, "generateVideoTool", unknown>; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/generate.video.tool.js b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/generate.video.tool.js new file mode 100644 index 0000000000000000000000000000000000000000..f1166bb3f613c87602fe2d1d80fd04326673f0f9 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/generate.video.tool.js @@ -0,0 +1,74 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GenerateVideoTool = void 0; +const tslib_1 = require("tslib"); +const tools_1 = require("@mastra/core/tools"); +const zod_1 = require("zod"); +const common_1 = require("@nestjs/common"); +const media_service_1 = require("../../database/prisma/media/media.service"); +const video_manager_1 = require("../../videos/video.manager"); +const auth_context_1 = require("../auth.context"); +let GenerateVideoTool = class GenerateVideoTool { + constructor(_mediaService, _videoManager) { + this._mediaService = _mediaService; + this._videoManager = _videoManager; + this.name = 'generateVideoTool'; + } + run() { + return (0, tools_1.createTool)({ + id: 'generateVideoTool', + mcp: { + annotations: { + title: 'Generate Video', + readOnlyHint: false, + destructiveHint: false, + idempotentHint: false, + openWorldHint: true, + }, + }, + description: `Generate video to use in a post, + in case the user specified a platform that requires attachment and attachment was not provided, + ask if they want to generate a picture of a video. + In many cases 'videoFunctionTool' will need to be called first, to get things like voice id + Here are the type of video that can be generated: + ${this._videoManager + .getAllVideos() + .map((p) => "-" + p.title) + .join('\n')} + `, + inputSchema: zod_1.z.object({ + identifier: zod_1.z.string(), + output: zod_1.z.enum(['vertical', 'horizontal']), + customParams: zod_1.z.array(zod_1.z.object({ + key: zod_1.z.string().describe('Name of the settings key to pass'), + value: zod_1.z.any().describe('Value of the key'), + })), + }), + outputSchema: zod_1.z.object({ + url: zod_1.z.string(), + }), + execute: async (inputData, context) => { + (0, auth_context_1.checkAuth)(inputData, context); + const org = JSON.parse(context?.requestContext?.get('organization')); + const value = await this._mediaService.generateVideo(org, { + type: inputData.identifier, + output: inputData.output, + customParams: inputData.customParams.reduce((all, current) => ({ + ...all, + [current.key]: current.value, + }), {}), + }); + return { + url: value.path, + }; + }, + }); + } +}; +exports.GenerateVideoTool = GenerateVideoTool; +exports.GenerateVideoTool = GenerateVideoTool = tslib_1.__decorate([ + (0, common_1.Injectable)(), + tslib_1.__metadata("design:paramtypes", [media_service_1.MediaService, + video_manager_1.VideoManager]) +], GenerateVideoTool); +//# sourceMappingURL=generate.video.tool.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/generate.video.tool.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/generate.video.tool.js.map new file mode 100644 index 0000000000000000000000000000000000000000..edaffe483c079866c43f76ed9befbbf77311fee8 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/generate.video.tool.js.map @@ -0,0 +1 @@ +{"version":3,"file":"generate.video.tool.js","sourceRoot":"","sources":["../../../../../../../../libraries/nestjs-libraries/src/chat/tools/generate.video.tool.ts"],"names":[],"mappings":";;;;AACA,8CAAgD;AAChD,6BAAwB;AACxB,2CAA4C;AAQ5C,6EAA6F;AAE7F,8DAA8E;AAC9E,kDAAwE;AAGjE,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAC5B,YACU,aAA2B,EAC3B,aAA2B;QAD3B,kBAAa,GAAb,aAAa,CAAc;QAC3B,kBAAa,GAAb,aAAa,CAAc;QAErC,SAAI,GAAG,mBAAmB,CAAC;IADxB,CAAC;IAGJ,GAAG;QACD,OAAO,IAAA,kBAAU,EAAC;YAChB,EAAE,EAAE,mBAAmB;YACvB,GAAG,EAAE;gBACH,WAAW,EAAE;oBACX,KAAK,EAAE,gBAAgB;oBACvB,YAAY,EAAE,KAAK;oBACnB,eAAe,EAAE,KAAK;oBACtB,cAAc,EAAE,KAAK;oBACrB,aAAa,EAAE,IAAI;iBACpB;aACF;YACD,WAAW,EAAE;;;;;sBAKG,IAAI,CAAC,aAAa;iBACjB,YAAY,EAAE;iBACd,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC;iBACzB,IAAI,CAAC,IAAI,CAAC;OAC1B;YACD,WAAW,EAAE,OAAC,CAAC,MAAM,CAAC;gBACpB,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE;gBACtB,MAAM,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;gBAC1C,YAAY,EAAE,OAAC,CAAC,KAAK,CACnB,OAAC,CAAC,MAAM,CAAC;oBACP,GAAG,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;oBAC5D,KAAK,EAAE,OAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;iBAC5C,CAAC,CACH;aACF,CAAC;YACF,YAAY,EAAE,OAAC,CAAC,MAAM,CAAC;gBACrB,GAAG,EAAE,OAAC,CAAC,MAAM,EAAE;aAChB,CAAC;YACF,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE;gBACpC,IAAA,wBAAS,EAAC,SAAS,EAAE,OAAO,CAAC,CAAC;gBAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAE,OAAO,EAAE,cAAsB,EAAE,GAAG,CAAC,cAAc,CAAW,CAAC,CAAC;gBACxF,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,GAAG,EAAE;oBACxD,IAAI,EAAE,SAAS,CAAC,UAAU;oBAC1B,MAAM,EAAE,SAAS,CAAC,MAAM;oBACxB,YAAY,EAAE,SAAS,CAAC,YAAY,CAAC,MAAM,CACzC,CAAC,GAAwB,EAAE,OAAoC,EAAE,EAAE,CAAC,CAAC;wBACnE,GAAG,GAAG;wBACN,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,KAAK;qBAC7B,CAAC,EACF,EAAyB,CAC1B;iBACF,CAAC,CAAC;gBAEH,OAAO;oBACL,GAAG,EAAE,KAAK,CAAC,IAAI;iBAChB,CAAC;YACJ,CAAC;SACF,CAAC,CAAC;IACL,CAAC;CACF,CAAA;AA/DY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,mBAAU,GAAE;6CAGc,4BAAY;QACZ,4BAAY;GAH1B,iBAAiB,CA+D7B"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/group.list.tool.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/group.list.tool.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..5c3e567933b8080d440f2364b97db28b9a61b948 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/group.list.tool.d.ts @@ -0,0 +1,8 @@ +import { AgentToolInterface } from "../agent.tool.interface"; +import { IntegrationService } from "../../database/prisma/integrations/integration.service"; +export declare class GroupListTool implements AgentToolInterface { + private _integrationService; + constructor(_integrationService: IntegrationService); + name: string; + run(): import("@mastra/core/tools").Tool, InferPublicSchema, InferPublicSchema, InferPublicSchema, import("@mastra/core/tools").ToolExecutionContext, InferPublicSchema, unknown>, "groupList", unknown>; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/group.list.tool.js b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/group.list.tool.js new file mode 100644 index 0000000000000000000000000000000000000000..b9ea874c7dfc741d519122d0181857ccb5c3bbca --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/group.list.tool.js @@ -0,0 +1,53 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GroupListTool = void 0; +const tslib_1 = require("tslib"); +const tools_1 = require("@mastra/core/tools"); +const common_1 = require("@nestjs/common"); +const integration_service_1 = require("../../database/prisma/integrations/integration.service"); +const zod_1 = tslib_1.__importDefault(require("zod")); +const auth_context_1 = require("../auth.context"); +let GroupListTool = class GroupListTool { + constructor(_integrationService) { + this._integrationService = _integrationService; + this.name = 'groupList'; + } + run() { + return (0, tools_1.createTool)({ + id: 'groupList', + description: `This tool lists the available groups (customers). Use a group id with the integrationList tool to filter the integrations belonging to that group`, + inputSchema: zod_1.default.object({}), + mcp: { + annotations: { + title: 'List Groups', + readOnlyHint: true, + destructiveHint: false, + idempotentHint: true, + openWorldHint: false, + }, + }, + outputSchema: zod_1.default.object({ + output: zod_1.default.array(zod_1.default.object({ + id: zod_1.default.string(), + name: zod_1.default.string(), + })), + }), + execute: async (inputData, context) => { + (0, auth_context_1.checkAuth)(inputData, context); + const organizationId = JSON.parse(context?.requestContext?.get('organization')).id; + return { + output: (await this._integrationService.customers(organizationId)).map((p) => ({ + id: p.id, + name: p.name, + })), + }; + }, + }); + } +}; +exports.GroupListTool = GroupListTool; +exports.GroupListTool = GroupListTool = tslib_1.__decorate([ + (0, common_1.Injectable)(), + tslib_1.__metadata("design:paramtypes", [integration_service_1.IntegrationService]) +], GroupListTool); +//# sourceMappingURL=group.list.tool.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/group.list.tool.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/group.list.tool.js.map new file mode 100644 index 0000000000000000000000000000000000000000..a3537876de25e714720762965940a8b517e91ada --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/group.list.tool.js.map @@ -0,0 +1 @@ +{"version":3,"file":"group.list.tool.js","sourceRoot":"","sources":["../../../../../../../../libraries/nestjs-libraries/src/chat/tools/group.list.tool.ts"],"names":[],"mappings":";;;;AACA,8CAAgD;AAChD,2CAA4C;AAC5C,gGAAgH;AAChH,sDAAoB;AACpB,kDAAwE;AAGjE,IAAM,aAAa,GAAnB,MAAM,aAAa;IACxB,YAAoB,mBAAuC;QAAvC,wBAAmB,GAAnB,mBAAmB,CAAoB;QAC3D,SAAI,GAAG,WAAW,CAAC;IAD2C,CAAC;IAG/D,GAAG;QACD,OAAO,IAAA,kBAAU,EAAC;YAChB,EAAE,EAAE,WAAW;YACf,WAAW,EAAE,mJAAmJ;YAChK,WAAW,EAAE,aAAC,CAAC,MAAM,CAAC,EAAE,CAAC;YACzB,GAAG,EAAE;gBACH,WAAW,EAAE;oBACX,KAAK,EAAE,aAAa;oBACpB,YAAY,EAAE,IAAI;oBAClB,eAAe,EAAE,KAAK;oBACtB,cAAc,EAAE,IAAI;oBACpB,aAAa,EAAE,KAAK;iBACrB;aACF;YACD,YAAY,EAAE,aAAC,CAAC,MAAM,CAAC;gBACrB,MAAM,EAAE,aAAC,CAAC,KAAK,CACb,aAAC,CAAC,MAAM,CAAC;oBACP,EAAE,EAAE,aAAC,CAAC,MAAM,EAAE;oBACd,IAAI,EAAE,aAAC,CAAC,MAAM,EAAE;iBACjB,CAAC,CACH;aACF,CAAC;YACF,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE;gBACpC,IAAA,wBAAS,EAAC,SAAS,EAAE,OAAO,CAAC,CAAC;gBAC9B,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAC9B,OAAO,EAAE,cAAsB,EAAE,GAAG,CAAC,cAAc,CAAW,CAChE,CAAC,EAAE,CAAC;gBAEL,OAAO;oBACL,MAAM,EAAE,CAAC,MAAM,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,CACpE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;wBACN,EAAE,EAAE,CAAC,CAAC,EAAE;wBACR,IAAI,EAAE,CAAC,CAAC,IAAI;qBACb,CAAC,CACH;iBACF,CAAC;YACJ,CAAC;SACF,CAAC,CAAC;IACL,CAAC;CACF,CAAA;AA3CY,sCAAa;wBAAb,aAAa;IADzB,IAAA,mBAAU,GAAE;6CAE8B,wCAAkB;GADhD,aAAa,CA2CzB"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/integration.list.tool.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/integration.list.tool.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..0ef0cdc8f7d5c619934cd45cb605e01b9920de3d --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/integration.list.tool.d.ts @@ -0,0 +1,8 @@ +import { AgentToolInterface } from "../agent.tool.interface"; +import { IntegrationService } from "../../database/prisma/integrations/integration.service"; +export declare class IntegrationListTool implements AgentToolInterface { + private _integrationService; + constructor(_integrationService: IntegrationService); + name: string; + run(): import("@mastra/core/tools").Tool, InferPublicSchema, InferPublicSchema, InferPublicSchema, import("@mastra/core/tools").ToolExecutionContext, InferPublicSchema, unknown>, "integrationList", unknown>; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/integration.list.tool.js b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/integration.list.tool.js new file mode 100644 index 0000000000000000000000000000000000000000..d797368b77cce3f5c8df6ba79372ac33411fa96a --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/integration.list.tool.js @@ -0,0 +1,73 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.IntegrationListTool = void 0; +const tslib_1 = require("tslib"); +const tools_1 = require("@mastra/core/tools"); +const common_1 = require("@nestjs/common"); +const integration_service_1 = require("../../database/prisma/integrations/integration.service"); +const zod_1 = tslib_1.__importDefault(require("zod")); +const auth_context_1 = require("../auth.context"); +let IntegrationListTool = class IntegrationListTool { + constructor(_integrationService) { + this._integrationService = _integrationService; + this.name = 'integrationList'; + } + run() { + return (0, tools_1.createTool)({ + id: 'integrationList', + description: `This tool list available integrations to schedule posts to. Optionally pass a group id (from the groupList tool) to only list integrations belonging to that group`, + inputSchema: zod_1.default.object({ + group: zod_1.default + .string() + .optional() + .describe('Optional group (customer) id from the groupList tool to filter the integrations'), + }), + mcp: { + annotations: { + title: 'List Integrations', + readOnlyHint: true, + destructiveHint: false, + idempotentHint: true, + openWorldHint: false, + }, + }, + outputSchema: zod_1.default.object({ + output: zod_1.default.array(zod_1.default.object({ + id: zod_1.default.string(), + name: zod_1.default.string(), + picture: zod_1.default.string(), + platform: zod_1.default.string(), + })), + }), + execute: async (inputData, context) => { + (0, auth_context_1.checkAuth)(inputData, context); + const organizationId = JSON.parse(context?.requestContext?.get('organization')).id; + return { + output: (await this._integrationService.getIntegrationsList(organizationId)) + .filter((p) => !inputData.group || p.customer?.id === inputData.group) + .map((p) => ({ + name: p.name, + id: p.id, + disabled: p.disabled, + picture: p.picture || '/no-picture.jpg', + platform: p.providerIdentifier, + display: p.profile, + type: p.type, + customer: p.customer + ? { + id: p.customer.id, + name: p.customer.name, + } + : undefined, + })), + }; + }, + }); + } +}; +exports.IntegrationListTool = IntegrationListTool; +exports.IntegrationListTool = IntegrationListTool = tslib_1.__decorate([ + (0, common_1.Injectable)(), + tslib_1.__metadata("design:paramtypes", [integration_service_1.IntegrationService]) +], IntegrationListTool); +//# sourceMappingURL=integration.list.tool.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/integration.list.tool.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/integration.list.tool.js.map new file mode 100644 index 0000000000000000000000000000000000000000..5ee67dc7fc1078355d2d3ccf6faacc0f69665098 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/integration.list.tool.js.map @@ -0,0 +1 @@ +{"version":3,"file":"integration.list.tool.js","sourceRoot":"","sources":["../../../../../../../../libraries/nestjs-libraries/src/chat/tools/integration.list.tool.ts"],"names":[],"mappings":";;;;AAGA,8CAAgD;AAChD,2CAA4C;AAC5C,gGAAgH;AAChH,sDAAoB;AACpB,kDAAwE;AAGjE,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;IAC9B,YAAoB,mBAAuC;QAAvC,wBAAmB,GAAnB,mBAAmB,CAAoB;QAC3D,SAAI,GAAG,iBAAiB,CAAC;IADqC,CAAC;IAG/D,GAAG;QACD,OAAO,IAAA,kBAAU,EAAC;YAChB,EAAE,EAAE,iBAAiB;YACrB,WAAW,EAAE,oKAAoK;YACjL,WAAW,EAAE,aAAC,CAAC,MAAM,CAAC;gBACpB,KAAK,EAAE,aAAC;qBACL,MAAM,EAAE;qBACR,QAAQ,EAAE;qBACV,QAAQ,CACP,iFAAiF,CAClF;aACJ,CAAC;YACF,GAAG,EAAE;gBACH,WAAW,EAAE;oBACX,KAAK,EAAE,mBAAmB;oBAC1B,YAAY,EAAE,IAAI;oBAClB,eAAe,EAAE,KAAK;oBACtB,cAAc,EAAE,IAAI;oBACpB,aAAa,EAAE,KAAK;iBACrB;aACF;YACD,YAAY,EAAE,aAAC,CAAC,MAAM,CAAC;gBACrB,MAAM,EAAE,aAAC,CAAC,KAAK,CACb,aAAC,CAAC,MAAM,CAAC;oBACP,EAAE,EAAE,aAAC,CAAC,MAAM,EAAE;oBACd,IAAI,EAAE,aAAC,CAAC,MAAM,EAAE;oBAChB,OAAO,EAAE,aAAC,CAAC,MAAM,EAAE;oBACnB,QAAQ,EAAE,aAAC,CAAC,MAAM,EAAE;iBACrB,CAAC,CACH;aACF,CAAC;YACF,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE;gBACpC,IAAA,wBAAS,EAAC,SAAS,EAAE,OAAO,CAAC,CAAC;gBAC9B,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAC9B,OAAO,EAAE,cAAsB,EAAE,GAAG,CAAC,cAAc,CAAW,CAChE,CAAC,EAAE,CAAC;gBAEL,OAAO;oBACL,MAAM,EAAE,CACN,MAAM,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,cAAc,CAAC,CACnE;yBACE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,KAAK,SAAS,CAAC,KAAK,CAAC;yBACrE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;wBACX,IAAI,EAAE,CAAC,CAAC,IAAI;wBACZ,EAAE,EAAE,CAAC,CAAC,EAAE;wBACR,QAAQ,EAAE,CAAC,CAAC,QAAQ;wBACpB,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,iBAAiB;wBACvC,QAAQ,EAAE,CAAC,CAAC,kBAAkB;wBAC9B,OAAO,EAAE,CAAC,CAAC,OAAO;wBAClB,IAAI,EAAE,CAAC,CAAC,IAAI;wBACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;4BAClB,CAAC,CAAC;gCACE,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE;gCACjB,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI;6BACtB;4BACH,CAAC,CAAC,SAAS;qBACd,CAAC,CAAC;iBACN,CAAC;YACJ,CAAC;SACF,CAAC,CAAC;IACL,CAAC;CACF,CAAA;AAjEY,kDAAmB;8BAAnB,mBAAmB;IAD/B,IAAA,mBAAU,GAAE;6CAE8B,wCAAkB;GADhD,mBAAmB,CAiE/B"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/integration.schedule.post.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/integration.schedule.post.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..9f0d586e863310d5dcb94362553fd907d1474688 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/integration.schedule.post.d.ts @@ -0,0 +1,10 @@ +import { AgentToolInterface } from "../agent.tool.interface"; +import { IntegrationService } from "../../database/prisma/integrations/integration.service"; +import { PostsService } from "../../database/prisma/posts/posts.service"; +export declare class IntegrationSchedulePostTool implements AgentToolInterface { + private _postsService; + private _integrationService; + constructor(_postsService: PostsService, _integrationService: IntegrationService); + name: string; + run(): import("@mastra/core/tools").Tool, InferPublicSchema, InferPublicSchema, InferPublicSchema, import("@mastra/core/tools").ToolExecutionContext, InferPublicSchema, unknown>, "schedulePostTool", unknown>; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/integration.schedule.post.js b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/integration.schedule.post.js new file mode 100644 index 0000000000000000000000000000000000000000..393c97a677f343bfb40ca4798bc2860d1ed4565e --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/integration.schedule.post.js @@ -0,0 +1,196 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.IntegrationSchedulePostTool = void 0; +const tslib_1 = require("tslib"); +const tools_1 = require("@mastra/core/tools"); +const zod_1 = require("zod"); +const common_1 = require("@nestjs/common"); +const integration_service_1 = require("../../database/prisma/integrations/integration.service"); +const posts_service_1 = require("../../database/prisma/posts/posts.service"); +const make_is_1 = require("../../services/make.is"); +const auth_context_1 = require("../auth.context"); +const valid_url_path_1 = require("../../../../helpers/src/utils/valid.url.path"); +const validUrlExtension = new valid_url_path_1.ValidUrlExtension(); +const validUrlPath = new valid_url_path_1.ValidUrlPath(); +const attachmentUrl = zod_1.z + .string() + .refine((url) => validUrlPath.validate(url, {}), { + message: validUrlPath.defaultMessage({}), +}) + .refine((url) => validUrlExtension.validate(url, {}), { + message: validUrlExtension.defaultMessage({}), +}); +let IntegrationSchedulePostTool = class IntegrationSchedulePostTool { + constructor(_postsService, _integrationService) { + this._postsService = _postsService; + this._integrationService = _integrationService; + this.name = 'integrationSchedulePostTool'; + } + run() { + return (0, tools_1.createTool)({ + id: 'schedulePostTool', + mcp: { + annotations: { + title: 'Schedule Social Media Post', + readOnlyHint: false, + destructiveHint: false, + idempotentHint: false, + openWorldHint: true, + }, + }, + description: ` +This tool allows you to schedule a post to a social media platform, based on integrationSchema tool. +So for example: + +If the user want to post a post to LinkedIn with one comment +- socialPost array length will be one +- postsAndComments array length will be two (one for the post, one for the comment) + +If the user want to post 20 posts for facebook each in individual days without comments +- socialPost array length will be 20 +- postsAndComments array length will be one + +If the tools return errors, you would need to rerun it with the right parameters, don't ask again, just run it +`, + inputSchema: zod_1.z.object({ + socialPost: zod_1.z + .array(zod_1.z.object({ + integrationId: zod_1.z + .string() + .describe('The id of the integration (not internal id)'), + isPremium: zod_1.z + .boolean() + .describe("If the integration is X, return if it's premium or not"), + date: zod_1.z.string().describe('The date of the post in UTC time'), + shortLink: zod_1.z + .boolean() + .describe('If the post has a link inside, we can ask the user if they want to add a short link'), + type: zod_1.z + .enum(['draft', 'schedule', 'now']) + .describe('The type of the post, if we pass now, we should pass the current date also'), + postsAndComments: zod_1.z + .array(zod_1.z.object({ + content: zod_1.z + .string() + .describe("The content of the post, HTML, Each line must be wrapped in

here is the possible tags: h1, h2, h3, u, strong, li, ul, p (you can't have u and strong together)"), + attachments: zod_1.z + .array(attachmentUrl) + .describe('The image of the post (URLS)'), + })) + .describe('first item is the post, every other item is the comments'), + settings: zod_1.z + .array(zod_1.z.object({ + key: zod_1.z + .string() + .describe('Name of the settings key to pass'), + value: zod_1.z + .any() + .describe('Value of the key, always prefer the id then label if possible'), + })) + .describe('This relies on the integrationSchema tool to get the settings [input:settings]'), + })) + .describe('Individual post'), + }), + outputSchema: zod_1.z.object({ + output: zod_1.z + .array(zod_1.z.object({ + postId: zod_1.z.string(), + integration: zod_1.z.string(), + })) + .or(zod_1.z.object({ errors: zod_1.z.string() })), + }), + execute: async (inputData, context) => { + (0, auth_context_1.checkAuth)(inputData, context); + const organizationId = JSON.parse(context?.requestContext?.get('organization')).id; + const finalOutput = []; + const integrations = {}; + for (const platform of inputData.socialPost) { + integrations[platform.integrationId] = + await this._integrationService.getIntegrationById(organizationId, platform.integrationId); + const settings = platform.settings.reduce((acc, s) => ({ + ...acc, + [s.key]: s.value, + }), {}); + const [validation] = await this._postsService.validatePosts(organizationId, [ + { + integration: { id: platform.integrationId }, + settings, + value: platform.postsAndComments.map((p) => ({ + content: p.content, + image: (p.attachments || []).map((path) => ({ + path, + })), + })), + }, + ]); + if (validation.emptyContent) { + return { + errors: `${validation.name}: Your post should have at least one character or one image.`, + }; + } + if (platform.type !== 'draft') { + if (!validation.valid) { + return { + errors: `${validation.name}: ${validation.settingsError || 'Please fix your settings'}, please fix it, and try integrationSchedulePostTool again.`, + }; + } + if (validation.errors !== true) { + return { + errors: `${validation.name}: ${validation.errors}, please fix it, and try integrationSchedulePostTool again.`, + }; + } + if (validation.tooLong) { + return { + errors: `${validation.name}: The maximum characters is ${validation.maximumCharacters}, please fix it, and try integrationSchedulePostTool again.`, + }; + } + } + } + for (const post of inputData.socialPost) { + const integration = integrations[post.integrationId]; + if (!integration) { + throw new Error('Integration not found'); + } + const output = await this._postsService.createPost(organizationId, { + date: post.date, + type: post.type, + shortLink: post.shortLink, + tags: [], + posts: [ + { + integration, + group: (0, make_is_1.makeId)(10), + settings: post.settings.reduce((acc, s) => ({ + ...acc, + [s.key]: s.value, + }), { + __type: integration.providerIdentifier, + }), + value: post.postsAndComments.map((p) => ({ + content: p.content, + id: (0, make_is_1.makeId)(10), + delay: 0, + image: p.attachments.map((p) => ({ + id: (0, make_is_1.makeId)(10), + path: p, + })), + })), + }, + ], + }, 'MCP'); + finalOutput.push(...output); + } + return { + output: finalOutput, + }; + }, + }); + } +}; +exports.IntegrationSchedulePostTool = IntegrationSchedulePostTool; +exports.IntegrationSchedulePostTool = IntegrationSchedulePostTool = tslib_1.__decorate([ + (0, common_1.Injectable)(), + tslib_1.__metadata("design:paramtypes", [posts_service_1.PostsService, + integration_service_1.IntegrationService]) +], IntegrationSchedulePostTool); +//# sourceMappingURL=integration.schedule.post.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/integration.schedule.post.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/integration.schedule.post.js.map new file mode 100644 index 0000000000000000000000000000000000000000..578d806f1f1387ad64bd8bb8289963ddc35c73ca --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/integration.schedule.post.js.map @@ -0,0 +1 @@ +{"version":3,"file":"integration.schedule.post.js","sourceRoot":"","sources":["../../../../../../../../libraries/nestjs-libraries/src/chat/tools/integration.schedule.post.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/integration.trigger.tool.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/integration.trigger.tool.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..03ddba5686fdb947a24fad6bbc1b4d6f5b7892c1 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/integration.trigger.tool.d.ts @@ -0,0 +1,12 @@ +import { AgentToolInterface } from "../agent.tool.interface"; +import { IntegrationManager } from "../../integrations/integration.manager"; +import { IntegrationService } from "../../database/prisma/integrations/integration.service"; +import { RefreshIntegrationService } from "../../integrations/refresh.integration.service"; +export declare class IntegrationTriggerTool implements AgentToolInterface { + private _integrationManager; + private _integrationService; + private _refreshIntegrationService; + constructor(_integrationManager: IntegrationManager, _integrationService: IntegrationService, _refreshIntegrationService: RefreshIntegrationService); + name: string; + run(): import("@mastra/core/tools").Tool, InferPublicSchema, InferPublicSchema, InferPublicSchema, import("@mastra/core/tools").ToolExecutionContext, InferPublicSchema, unknown>, "triggerTool", unknown>; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/integration.trigger.tool.js b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/integration.trigger.tool.js new file mode 100644 index 0000000000000000000000000000000000000000..bc02c20f1f68dfd9ca7a7b7328a62fbf300e272f --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/integration.trigger.tool.js @@ -0,0 +1,111 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.IntegrationTriggerTool = void 0; +const tslib_1 = require("tslib"); +const tools_1 = require("@mastra/core/tools"); +const zod_1 = require("zod"); +const common_1 = require("@nestjs/common"); +const integration_manager_1 = require("../../integrations/integration.manager"); +const integration_service_1 = require("../../database/prisma/integrations/integration.service"); +const social_abstract_1 = require("../../integrations/social.abstract"); +const timer_1 = require("../../../../helpers/src/utils/timer"); +const auth_context_1 = require("../auth.context"); +const refresh_integration_service_1 = require("../../integrations/refresh.integration.service"); +let IntegrationTriggerTool = class IntegrationTriggerTool { + constructor(_integrationManager, _integrationService, _refreshIntegrationService) { + this._integrationManager = _integrationManager; + this._integrationService = _integrationService; + this._refreshIntegrationService = _refreshIntegrationService; + this.name = 'triggerTool'; + } + run() { + return (0, tools_1.createTool)({ + id: 'triggerTool', + description: `After using the integrationSchema, we sometimes miss details we can\'t ask from the user, like ids. + Sometimes this tool requires to user prompt for some settings, like a word to search for. methodName is required [input:callable-tools]`, + mcp: { + annotations: { + title: 'Trigger Integration Tool', + readOnlyHint: true, + destructiveHint: false, + idempotentHint: false, + openWorldHint: true, + }, + }, + inputSchema: zod_1.z.object({ + integrationId: zod_1.z.string().describe('The id of the integration'), + methodName: zod_1.z + .string() + .describe('The methodName from the `integrationSchema` functions in the tools array, required'), + dataSchema: zod_1.z.array(zod_1.z.object({ + key: zod_1.z.string().describe('Name of the settings key to pass'), + value: zod_1.z.string().describe('Value of the key'), + })), + }), + outputSchema: zod_1.z.object({ + output: zod_1.z.array(zod_1.z.record(zod_1.z.string(), zod_1.z.any())), + }), + execute: async (inputData, context) => { + (0, auth_context_1.checkAuth)(inputData, context); + console.log('triggerTool', inputData); + const organizationId = JSON.parse(context?.requestContext?.get('organization')).id; + const getIntegration = await this._integrationService.getIntegrationById(organizationId, inputData.integrationId); + if (!getIntegration) { + return { + output: 'Integration not found', + }; + } + const integrationProvider = integration_manager_1.socialIntegrationList.find((p) => p.identifier === getIntegration.providerIdentifier); + if (!integrationProvider) { + return { + output: 'Integration not found', + }; + } + const tools = this._integrationManager.getAllTools(); + if (!tools[integrationProvider.identifier].some((p) => p.methodName === inputData.methodName) || + !integrationProvider[inputData.methodName]) { + return { output: 'tool not found' }; + } + while (true) { + try { + const load = await integrationProvider[inputData.methodName](getIntegration.token, inputData.dataSchema.reduce((all, current) => ({ + ...all, + [current.key]: current.value, + }), {}), getIntegration.internalId, getIntegration); + return { output: load }; + } + catch (err) { + if (err instanceof social_abstract_1.RefreshToken) { + const data = await this._refreshIntegrationService.refresh(getIntegration); + if (!data) { + await this._integrationService.disconnectChannel(organizationId, getIntegration); + return { + output: 'We had to disconnect the channel as the token expired', + }; + } + const { accessToken } = data; + if (accessToken) { + getIntegration.token = accessToken; + if (integrationProvider.refreshWait) { + await (0, timer_1.timer)(10000); + } + continue; + } + else { + } + } + return { output: 'Unexpected error' }; + } + } + }, + }); + } +}; +exports.IntegrationTriggerTool = IntegrationTriggerTool; +exports.IntegrationTriggerTool = IntegrationTriggerTool = tslib_1.__decorate([ + (0, common_1.Injectable)(), + tslib_1.__metadata("design:paramtypes", [integration_manager_1.IntegrationManager, + integration_service_1.IntegrationService, + refresh_integration_service_1.RefreshIntegrationService]) +], IntegrationTriggerTool); +//# sourceMappingURL=integration.trigger.tool.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/integration.trigger.tool.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/integration.trigger.tool.js.map new file mode 100644 index 0000000000000000000000000000000000000000..b02d102aa672b68eded80edeb5503eb13cc1c467 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/integration.trigger.tool.js.map @@ -0,0 +1 @@ +{"version":3,"file":"integration.trigger.tool.js","sourceRoot":"","sources":["../../../../../../../../libraries/nestjs-libraries/src/chat/tools/integration.trigger.tool.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/integration.validation.tool.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/integration.validation.tool.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..324cb3906dd9f194d3b81ceb4459eb4352803c10 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/integration.validation.tool.d.ts @@ -0,0 +1,8 @@ +import { AgentToolInterface } from "../agent.tool.interface"; +import { IntegrationManager } from "../../integrations/integration.manager"; +export declare class IntegrationValidationTool implements AgentToolInterface { + private _integrationManager; + constructor(_integrationManager: IntegrationManager); + name: string; + run(): import("@mastra/core/tools").Tool, InferPublicSchema, InferPublicSchema, InferPublicSchema, import("@mastra/core/tools").ToolExecutionContext, InferPublicSchema, unknown>, "integrationSchema", unknown>; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/integration.validation.tool.js b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/integration.validation.tool.js new file mode 100644 index 0000000000000000000000000000000000000000..79f305ba257f592c5e9d14b8c6e605d65e9171d7 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/integration.validation.tool.js @@ -0,0 +1,104 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.IntegrationValidationTool = void 0; +const tslib_1 = require("tslib"); +const tools_1 = require("@mastra/core/tools"); +const zod_1 = require("zod"); +const common_1 = require("@nestjs/common"); +const integration_manager_1 = require("../../integrations/integration.manager"); +const validation_schemas_helper_1 = require("../validation.schemas.helper"); +const auth_context_1 = require("../auth.context"); +let IntegrationValidationTool = class IntegrationValidationTool { + constructor(_integrationManager) { + this._integrationManager = _integrationManager; + this.name = 'integrationSchema'; + } + run() { + return (0, tools_1.createTool)({ + id: 'integrationSchema', + description: `Everytime we want to schedule a social media post, we need to understand the schema of the integration. + This tool helps us get the schema of the integration. + Sometimes we might get a schema back the requires some id, for that, you can get information from 'tools' + And use the triggerTool function. + `, + mcp: { + annotations: { + title: 'Get Integration Schema', + readOnlyHint: true, + destructiveHint: false, + idempotentHint: true, + openWorldHint: false, + }, + }, + inputSchema: zod_1.z.object({ + isPremium: zod_1.z + .boolean() + .describe('is this the user premium? if not, set to false'), + platform: zod_1.z + .string() + .describe(`platform identifier (${integration_manager_1.socialIntegrationList + .map((p) => p.identifier) + .join(', ')})`), + }), + outputSchema: zod_1.z.object({ + output: zod_1.z.object({ + rules: zod_1.z.string(), + maxLength: zod_1.z + .number() + .describe('The maximum length of a post / comment'), + settings: zod_1.z + .any() + .describe('List of settings need to be passed to schedule a post'), + tools: zod_1.z + .array(zod_1.z.object({ + description: zod_1.z.string().describe('Description of the tool'), + methodName: zod_1.z + .string() + .describe('Method to call to get the information'), + dataSchema: zod_1.z + .array(zod_1.z.object({ + key: zod_1.z + .string() + .describe('Name of the settings key to pass'), + description: zod_1.z + .string() + .describe('Description of the setting key'), + type: zod_1.z.string(), + })) + .describe('This will be passed to schedulePostTool [output:settings]'), + })) + .describe("Sometimes settings require some id, tags and stuff, if you don't have, trigger the `triggerTool` function from the tools list [output:callable-tools]"), + }), + }), + execute: async (inputData, context) => { + (0, auth_context_1.checkAuth)(inputData, context); + const integration = integration_manager_1.socialIntegrationList.find((p) => p.identifier === inputData.platform); + if (!integration) { + return { + output: { rules: '', maxLength: 0, settings: {}, tools: [] }, + }; + } + const maxLength = integration.maxLength(inputData.isPremium); + const schemas = !integration.dto + ? false + : (0, validation_schemas_helper_1.getValidationSchemas)()[integration.dto.name]; + const tools = this._integrationManager.getAllTools(); + const rules = this._integrationManager.getAllRulesDescription(); + return { + output: { + rules: rules[integration.identifier], + maxLength, + settings: !schemas ? 'No additional settings required' : schemas, + tools: tools[integration.identifier], + }, + }; + }, + }); + } +}; +exports.IntegrationValidationTool = IntegrationValidationTool; +exports.IntegrationValidationTool = IntegrationValidationTool = tslib_1.__decorate([ + (0, common_1.Injectable)(), + tslib_1.__metadata("design:paramtypes", [integration_manager_1.IntegrationManager]) +], IntegrationValidationTool); +//# sourceMappingURL=integration.validation.tool.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/integration.validation.tool.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/integration.validation.tool.js.map new file mode 100644 index 0000000000000000000000000000000000000000..e2e446c46f358439854a7fe1879e8a32cb41de40 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/integration.validation.tool.js.map @@ -0,0 +1 @@ +{"version":3,"file":"integration.validation.tool.js","sourceRoot":"","sources":["../../../../../../../../libraries/nestjs-libraries/src/chat/tools/integration.validation.tool.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/tool.list.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/tool.list.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..0fdab7cff6520d42e72a173c112592f331629b64 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/tool.list.d.ts @@ -0,0 +1,11 @@ +import { IntegrationValidationTool } from "./integration.validation.tool"; +import { IntegrationTriggerTool } from "./integration.trigger.tool"; +import { IntegrationSchedulePostTool } from './integration.schedule.post'; +import { GenerateVideoOptionsTool } from "./generate.video.options.tool"; +import { VideoFunctionTool } from "./video.function.tool"; +import { GenerateVideoTool } from "./generate.video.tool"; +import { GenerateImageTool } from "./generate.image.tool"; +import { IntegrationListTool } from "./integration.list.tool"; +import { GroupListTool } from "./group.list.tool"; +import { UploadFromUrlTool } from "./upload.from.url.tool"; +export declare const toolList: (typeof IntegrationValidationTool | typeof IntegrationTriggerTool | typeof IntegrationSchedulePostTool | typeof GenerateVideoOptionsTool | typeof VideoFunctionTool | typeof GenerateVideoTool | typeof GenerateImageTool | typeof IntegrationListTool | typeof GroupListTool | typeof UploadFromUrlTool)[]; diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/tool.list.js b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/tool.list.js new file mode 100644 index 0000000000000000000000000000000000000000..2e9eade4db9441a17c9e59a8fb3e06e062a6ac1c --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/tool.list.js @@ -0,0 +1,26 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.toolList = void 0; +const integration_validation_tool_1 = require("./integration.validation.tool"); +const integration_trigger_tool_1 = require("./integration.trigger.tool"); +const integration_schedule_post_1 = require("./integration.schedule.post"); +const generate_video_options_tool_1 = require("./generate.video.options.tool"); +const video_function_tool_1 = require("./video.function.tool"); +const generate_video_tool_1 = require("./generate.video.tool"); +const generate_image_tool_1 = require("./generate.image.tool"); +const integration_list_tool_1 = require("./integration.list.tool"); +const group_list_tool_1 = require("./group.list.tool"); +const upload_from_url_tool_1 = require("./upload.from.url.tool"); +exports.toolList = [ + integration_list_tool_1.IntegrationListTool, + group_list_tool_1.GroupListTool, + integration_validation_tool_1.IntegrationValidationTool, + integration_trigger_tool_1.IntegrationTriggerTool, + integration_schedule_post_1.IntegrationSchedulePostTool, + generate_video_options_tool_1.GenerateVideoOptionsTool, + video_function_tool_1.VideoFunctionTool, + generate_video_tool_1.GenerateVideoTool, + generate_image_tool_1.GenerateImageTool, + upload_from_url_tool_1.UploadFromUrlTool, +]; +//# sourceMappingURL=tool.list.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/tool.list.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/tool.list.js.map new file mode 100644 index 0000000000000000000000000000000000000000..9646a67c8a6ffefdda438b27ad086914160d9abf --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/tool.list.js.map @@ -0,0 +1 @@ +{"version":3,"file":"tool.list.js","sourceRoot":"","sources":["../../../../../../../../libraries/nestjs-libraries/src/chat/tools/tool.list.ts"],"names":[],"mappings":";;;AAAA,+EAA6G;AAC7G,yEAAuG;AACvG,2EAA0E;AAC1E,+EAA4G;AAC5G,+DAA6F;AAC7F,+DAA6F;AAC7F,+DAA6F;AAC7F,mEAAiG;AACjG,uDAAqF;AACrF,iEAA8F;AAEjF,QAAA,QAAQ,GAAG;IACtB,2CAAmB;IACnB,+BAAa;IACb,uDAAyB;IACzB,iDAAsB;IACtB,uDAA2B;IAC3B,sDAAwB;IACxB,uCAAiB;IACjB,uCAAiB;IACjB,uCAAiB;IACjB,wCAAiB;CAClB,CAAC"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/upload.from.url.tool.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/upload.from.url.tool.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..2100e302514a6883ae76a9e0c2940a84be0095a3 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/upload.from.url.tool.d.ts @@ -0,0 +1,9 @@ +import { AgentToolInterface } from "../agent.tool.interface"; +import { MediaService } from "../../database/prisma/media/media.service"; +export declare class UploadFromUrlTool implements AgentToolInterface { + private _mediaService; + private storage; + constructor(_mediaService: MediaService); + name: string; + run(): import("@mastra/core/tools").Tool, InferPublicSchema, InferPublicSchema, InferPublicSchema, import("@mastra/core/tools").ToolExecutionContext, InferPublicSchema, unknown>, "uploadFromUrlTool", unknown>; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/upload.from.url.tool.js b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/upload.from.url.tool.js new file mode 100644 index 0000000000000000000000000000000000000000..059eaaac8c10b9c2a473fb7621900266ac062fed --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/upload.from.url.tool.js @@ -0,0 +1,119 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.UploadFromUrlTool = void 0; +const tslib_1 = require("tslib"); +const tools_1 = require("@mastra/core/tools"); +const zod_1 = require("zod"); +const common_1 = require("@nestjs/common"); +const media_service_1 = require("../../database/prisma/media/media.service"); +const upload_factory_1 = require("../../upload/upload.factory"); +const custom_upload_validation_1 = require("../../upload/custom.upload.validation"); +const auth_context_1 = require("../auth.context"); +const ssrf_safe_dispatcher_1 = require("../../dtos/webhooks/ssrf.safe.dispatcher"); +const stream_1 = require("stream"); +const { fromBuffer } = require('file-type'); +const ALLOWED_MIME = new Set([ + 'image/jpeg', + 'image/png', + 'image/gif', + 'image/webp', + 'image/avif', + 'image/bmp', + 'image/tiff', + 'video/mp4', +]); +let UploadFromUrlTool = class UploadFromUrlTool { + constructor(_mediaService) { + this._mediaService = _mediaService; + this.storage = upload_factory_1.UploadFactory.createStorage(); + this.name = 'uploadFromUrlTool'; + } + run() { + return (0, tools_1.createTool)({ + id: 'uploadFromUrlTool', + description: `Upload a remote image or video into the media library from a public URL. +Use this before scheduling a post when the user provides an external media URL (not already hosted on our domain), +so the attachment passes the upload-domain validation. Returns the hosted media { id, path } to use as an attachment, or { error } on failure.`, + mcp: { + annotations: { + title: 'Upload Media From URL', + readOnlyHint: false, + destructiveHint: false, + idempotentHint: false, + openWorldHint: true, + }, + }, + inputSchema: zod_1.z.object({ + url: zod_1.z + .string() + .url() + .describe('The public URL of the image or video to upload'), + }), + outputSchema: zod_1.z.object({ + id: zod_1.z.string().optional(), + path: zod_1.z.string().optional(), + error: zod_1.z.string().optional(), + }), + execute: async (inputData, context) => { + (0, auth_context_1.checkAuth)(inputData, context); + try { + const org = JSON.parse(context?.requestContext?.get('organization')); + const response = await fetch(inputData.url, { + dispatcher: ssrf_safe_dispatcher_1.ssrfSafeDispatcher, + }); + if (!response.ok) { + return { error: 'Failed to fetch URL' }; + } + const maxDownloadSize = (0, custom_upload_validation_1.getMaxSize)('video/mp4'); + const declaredSize = Number(response.headers.get('content-length')); + if (declaredSize && declaredSize > maxDownloadSize) { + return { + error: `File is too large: ${declaredSize} bytes (max ${maxDownloadSize} bytes).`, + }; + } + const buffer = Buffer.from(await response.arrayBuffer()); + const detected = await fromBuffer(buffer); + if (!detected || !ALLOWED_MIME.has(detected.mime)) { + return { error: 'Unsupported file type.' }; + } + const maxSize = (0, custom_upload_validation_1.getMaxSize)(detected.mime); + if (buffer.length > maxSize) { + return { + error: `File is too large: ${buffer.length} bytes (max ${maxSize} bytes).`, + }; + } + const getFile = await this.storage.uploadFile({ + buffer, + mimetype: detected.mime, + size: buffer.length, + path: '', + fieldname: '', + destination: '', + stream: new stream_1.Readable(), + filename: '', + originalname: `upload.${detected.ext}`, + encoding: '', + }); + return await this._mediaService.saveFile(org.id, getFile.originalname, getFile.path); + } + catch (err) { + const cause = err instanceof Error + ? err.cause + : undefined; + const causeText = cause instanceof Error && cause.message + ? ` (${cause.message})` + : ''; + return { + error: `Failed to upload media from URL: ${err instanceof Error ? err.message : 'Unexpected error'}${causeText}`, + }; + } + }, + }); + } +}; +exports.UploadFromUrlTool = UploadFromUrlTool; +exports.UploadFromUrlTool = UploadFromUrlTool = tslib_1.__decorate([ + (0, common_1.Injectable)(), + tslib_1.__metadata("design:paramtypes", [media_service_1.MediaService]) +], UploadFromUrlTool); +//# sourceMappingURL=upload.from.url.tool.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/upload.from.url.tool.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/upload.from.url.tool.js.map new file mode 100644 index 0000000000000000000000000000000000000000..9478795693b82b43812e03cd206418a38786d709 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/upload.from.url.tool.js.map @@ -0,0 +1 @@ +{"version":3,"file":"upload.from.url.tool.js","sourceRoot":"","sources":["../../../../../../../../libraries/nestjs-libraries/src/chat/tools/upload.from.url.tool.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/video.function.tool.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/video.function.tool.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..861683ff6983cfadc53ac6ee2b6e3c5c0fb39264 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/video.function.tool.d.ts @@ -0,0 +1,10 @@ +import { AgentToolInterface } from "../agent.tool.interface"; +import { VideoManager } from "../../videos/video.manager"; +import { ModuleRef } from '@nestjs/core'; +export declare class VideoFunctionTool implements AgentToolInterface { + private _videoManagerService; + private _moduleRef; + constructor(_videoManagerService: VideoManager, _moduleRef: ModuleRef); + name: string; + run(): import("@mastra/core/tools").Tool, InferPublicSchema, InferPublicSchema, InferPublicSchema, import("@mastra/core/tools").ToolExecutionContext, InferPublicSchema, unknown>, "videoFunctionTool", unknown>; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/video.function.tool.js b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/video.function.tool.js new file mode 100644 index 0000000000000000000000000000000000000000..052bac31ae524d2ffec3ed9d10e94643083fb5d4 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/video.function.tool.js @@ -0,0 +1,56 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.VideoFunctionTool = void 0; +const tslib_1 = require("tslib"); +const tools_1 = require("@mastra/core/tools"); +const common_1 = require("@nestjs/common"); +const video_manager_1 = require("../../videos/video.manager"); +const zod_1 = tslib_1.__importDefault(require("zod")); +const core_1 = require("@nestjs/core"); +const auth_context_1 = require("../auth.context"); +let VideoFunctionTool = class VideoFunctionTool { + constructor(_videoManagerService, _moduleRef) { + this._videoManagerService = _videoManagerService; + this._moduleRef = _moduleRef; + this.name = 'videoFunctionTool'; + } + run() { + return (0, tools_1.createTool)({ + id: 'videoFunctionTool', + description: `Sometimes when we want to generate videos we might need to get some additional information like voice_id, etc`, + mcp: { + annotations: { + title: 'Video Function Helper', + readOnlyHint: true, + destructiveHint: false, + idempotentHint: true, + openWorldHint: false, + }, + }, + inputSchema: zod_1.default.object({ + identifier: zod_1.default.string(), + functionName: zod_1.default.string(), + }), + outputSchema: zod_1.default.object({}).passthrough(), + execute: async (inputData, context) => { + (0, auth_context_1.checkAuth)(inputData, context); + const videos = this._videoManagerService.getAllVideos(); + const findVideo = videos.find((p) => p.identifier === inputData.identifier && + p.tools.some((p) => p.functionName === inputData.functionName)); + if (!findVideo) { + throw new Error('Function not found'); + } + const func = await this._moduleRef + .get(findVideo.target, { strict: false })[inputData.functionName](); + return func; + }, + }); + } +}; +exports.VideoFunctionTool = VideoFunctionTool; +exports.VideoFunctionTool = VideoFunctionTool = tslib_1.__decorate([ + (0, common_1.Injectable)(), + tslib_1.__metadata("design:paramtypes", [video_manager_1.VideoManager, + core_1.ModuleRef]) +], VideoFunctionTool); +//# sourceMappingURL=video.function.tool.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/video.function.tool.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/video.function.tool.js.map new file mode 100644 index 0000000000000000000000000000000000000000..a2096fa7c51d93d590d1dd314014f216b6ba33c7 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/tools/video.function.tool.js.map @@ -0,0 +1 @@ +{"version":3,"file":"video.function.tool.js","sourceRoot":"","sources":["../../../../../../../../libraries/nestjs-libraries/src/chat/tools/video.function.tool.ts"],"names":[],"mappings":";;;;AACA,8CAAgD;AAChD,2CAA4C;AAC5C,8DAA8E;AAC9E,sDAAoB;AACpB,uCAAyC;AACzC,kDAAwE;AAGjE,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAC5B,YACU,oBAAkC,EAClC,UAAqB;QADrB,yBAAoB,GAApB,oBAAoB,CAAc;QAClC,eAAU,GAAV,UAAU,CAAW;QAE/B,SAAI,GAAG,mBAAmB,CAAC;IADxB,CAAC;IAGJ,GAAG;QACD,OAAO,IAAA,kBAAU,EAAC;YAChB,EAAE,EAAE,mBAAmB;YACvB,WAAW,EAAE,+GAA+G;YAC5H,GAAG,EAAE;gBACH,WAAW,EAAE;oBACX,KAAK,EAAE,uBAAuB;oBAC9B,YAAY,EAAE,IAAI;oBAClB,eAAe,EAAE,KAAK;oBACtB,cAAc,EAAE,IAAI;oBACpB,aAAa,EAAE,KAAK;iBACrB;aACF;YACD,WAAW,EAAE,aAAC,CAAC,MAAM,CAAC;gBACpB,UAAU,EAAE,aAAC,CAAC,MAAM,EAAE;gBACtB,YAAY,EAAE,aAAC,CAAC,MAAM,EAAE;aACzB,CAAC;YACF,YAAY,EAAE,aAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE;YACxC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE;gBACpC,IAAA,wBAAS,EAAC,SAAS,EAAE,OAAO,CAAC,CAAC;gBAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE,CAAC;gBACxD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAC3B,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,UAAU,KAAK,SAAS,CAAC,UAAU;oBACrC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,SAAS,CAAC,YAAY,CAAC,CACjE,CAAC;gBAEF,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;gBACxC,CAAC;gBAED,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU;qBAE/B,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CACxC,SAAS,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC7B,OAAO,IAAI,CAAC;YACd,CAAC;SACF,CAAC,CAAC;IACL,CAAC;CACF,CAAA;AA9CY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,mBAAU,GAAE;6CAGqB,4BAAY;QACtB,gBAAS;GAHpB,iBAAiB,CA8C7B"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/validation.schemas.helper.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/chat/validation.schemas.helper.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..972f5aa34b0cc88b0c92d4030dcbdf761fedefbb --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/validation.schemas.helper.d.ts @@ -0,0 +1 @@ +export declare function getValidationSchemas(): Record; diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/validation.schemas.helper.js b/apps/backend/dist/libraries/nestjs-libraries/src/chat/validation.schemas.helper.js new file mode 100644 index 0000000000000000000000000000000000000000..6ca6b600a572ab7e44fe8bf3c7cc64d4ed72c9d5 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/validation.schemas.helper.js @@ -0,0 +1,26 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.getValidationSchemas = getValidationSchemas; +const class_validator_jsonschema_1 = require("class-validator-jsonschema"); +const class_validator_1 = require("class-validator"); +const storage_1 = require("class-transformer/cjs/storage"); +function getValidationSchemas() { + return (0, class_validator_jsonschema_1.validationMetadatasToSchemas)({ + classTransformerMetadataStorage: storage_1.defaultMetadataStorage, + additionalConverters: { + [class_validator_1.ValidationTypes.NESTED_VALIDATION]: (meta, options) => { + if (typeof meta.target === 'function') { + const typeMeta = options.classTransformerMetadataStorage + ? options.classTransformerMetadataStorage.findTypeMetadata(meta.target, meta.propertyName) + : null; + if (typeMeta) { + const childType = typeMeta.typeFunction(); + return (0, class_validator_jsonschema_1.targetConstructorToSchema)(childType, options); + } + } + return {}; + }, + }, + }); +} +//# sourceMappingURL=validation.schemas.helper.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/chat/validation.schemas.helper.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/chat/validation.schemas.helper.js.map new file mode 100644 index 0000000000000000000000000000000000000000..4922fdc4882c71aeb91c9b13f0cb4ab1834aa01a --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/chat/validation.schemas.helper.js.map @@ -0,0 +1 @@ +{"version":3,"file":"validation.schemas.helper.js","sourceRoot":"","sources":["../../../../../../../libraries/nestjs-libraries/src/chat/validation.schemas.helper.ts"],"names":[],"mappings":";;AAQA,oDAqBC;AA7BD,2EAGoC;AACpC,qDAAkD;AAElD,2DAAuE;AAEvE,SAAgB,oBAAoB;IAClC,OAAO,IAAA,yDAA4B,EAAC;QAClC,+BAA+B,EAAE,gCAAsB;QACvD,oBAAoB,EAAE;YACpB,CAAC,iCAAe,CAAC,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE;gBACrD,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;oBACtC,MAAM,QAAQ,GAAG,OAAO,CAAC,+BAA+B;wBACtD,CAAC,CAAC,OAAO,CAAC,+BAA+B,CAAC,gBAAgB,CACtD,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,YAAY,CAClB;wBACH,CAAC,CAAC,IAAI,CAAC;oBACT,IAAI,QAAQ,EAAE,CAAC;wBACb,MAAM,SAAS,GAAG,QAAQ,CAAC,YAAY,EAAE,CAAC;wBAC1C,OAAO,IAAA,sDAAyB,EAAC,SAAS,EAAE,OAAO,CAAC,CAAC;oBACvD,CAAC;gBACH,CAAC;gBACD,OAAO,EAAE,CAAC;YACZ,CAAC;SACF;KACF,CAAC,CAAC;AACL,CAAC"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/admin-stats/admin-stats.repository.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/admin-stats/admin-stats.repository.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..1cb0595c209509e3a8fbb4b51da8fd0ac59314d4 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/admin-stats/admin-stats.repository.d.ts @@ -0,0 +1,37 @@ +import { PrismaRepository } from "../prisma.service"; +export interface StatsParams { + from: Date; + to: Date; + unknownOnly?: boolean; +} +interface PerSocial { + provider: string; + count: number; +} +export interface StatsResponse { + from: string; + to: string; + errors: { + total: number; + perSocial: PerSocial[]; + }; + posts: { + total: number; + perSocial: PerSocial[]; + }; + connected: { + total: number; + perSocial: PerSocial[]; + }; +} +export declare class AdminStatsRepository { + private _post; + private _integration; + private _errors; + constructor(_post: PrismaRepository<'post'>, _integration: PrismaRepository<'integration'>, _errors: PrismaRepository<'errors'>); + private errorStats; + private postStats; + private connectedStats; + getStats(params: StatsParams): Promise; +} +export {}; diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/admin-stats/admin-stats.repository.js b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/admin-stats/admin-stats.repository.js new file mode 100644 index 0000000000000000000000000000000000000000..d71faf70923d15bffb5dbf302663580846ece4f9 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/admin-stats/admin-stats.repository.js @@ -0,0 +1,117 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.AdminStatsRepository = void 0; +const tslib_1 = require("tslib"); +const prisma_service_1 = require("../prisma.service"); +const common_1 = require("@nestjs/common"); +const UNKNOWN_ERROR_TOKEN = '"message":"Unknown Error"'; +const sortDesc = (list) => list.sort((a, b) => b.count - a.count || a.provider.localeCompare(b.provider)); +let AdminStatsRepository = class AdminStatsRepository { + constructor(_post, _integration, _errors) { + this._post = _post; + this._integration = _integration; + this._errors = _errors; + } + async errorStats(params) { + const where = { + createdAt: { gte: params.from, lte: params.to }, + ...(params.unknownOnly + ? { message: { contains: UNKNOWN_ERROR_TOKEN } } + : {}), + }; + const [total, grouped] = await Promise.all([ + this._errors.model.errors.count({ where }), + this._errors.model.errors.groupBy({ + by: ['platform'], + where, + _count: { _all: true }, + }), + ]); + return { + total, + perSocial: sortDesc(grouped.map((g) => ({ + provider: g.platform, + count: g._count._all, + }))), + }; + } + async postStats(params) { + const where = { + state: 'PUBLISHED', + parentPostId: null, + deletedAt: null, + publishDate: { gte: params.from, lte: params.to }, + }; + const [total, grouped] = await Promise.all([ + this._post.model.post.count({ where }), + this._post.model.post.groupBy({ + by: ['integrationId'], + where, + _count: { _all: true }, + }), + ]); + const integrationIds = grouped.map((g) => g.integrationId); + const integrations = integrationIds.length + ? await this._integration.model.integration.findMany({ + where: { id: { in: integrationIds } }, + select: { id: true, providerIdentifier: true }, + }) + : []; + const providerById = new Map(integrations.map((i) => [i.id, i.providerIdentifier])); + const byProvider = new Map(); + for (const g of grouped) { + const provider = providerById.get(g.integrationId) || 'unknown'; + byProvider.set(provider, (byProvider.get(provider) || 0) + g._count._all); + } + return { + total, + perSocial: sortDesc([...byProvider.entries()].map(([provider, count]) => ({ + provider, + count, + }))), + }; + } + async connectedStats(params) { + const where = { + deletedAt: null, + createdAt: { gte: params.from, lte: params.to }, + }; + const [total, grouped] = await Promise.all([ + this._integration.model.integration.count({ where }), + this._integration.model.integration.groupBy({ + by: ['providerIdentifier'], + where, + _count: { _all: true }, + }), + ]); + return { + total, + perSocial: sortDesc(grouped.map((g) => ({ + provider: g.providerIdentifier, + count: g._count._all, + }))), + }; + } + async getStats(params) { + const [errors, posts, connected] = await Promise.all([ + this.errorStats(params), + this.postStats(params), + this.connectedStats(params), + ]); + return { + from: params.from.toISOString(), + to: params.to.toISOString(), + errors, + posts, + connected, + }; + } +}; +exports.AdminStatsRepository = AdminStatsRepository; +exports.AdminStatsRepository = AdminStatsRepository = tslib_1.__decorate([ + (0, common_1.Injectable)(), + tslib_1.__metadata("design:paramtypes", [prisma_service_1.PrismaRepository, + prisma_service_1.PrismaRepository, + prisma_service_1.PrismaRepository]) +], AdminStatsRepository); +//# sourceMappingURL=admin-stats.repository.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/admin-stats/admin-stats.repository.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/admin-stats/admin-stats.repository.js.map new file mode 100644 index 0000000000000000000000000000000000000000..fc5812323b7a666b641667266c33037c8b2526a4 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/admin-stats/admin-stats.repository.js.map @@ -0,0 +1 @@ +{"version":3,"file":"admin-stats.repository.js","sourceRoot":"","sources":["../../../../../../../../../libraries/nestjs-libraries/src/database/prisma/admin-stats/admin-stats.repository.ts"],"names":[],"mappings":";;;;AAAA,sDAA4F;AAC5F,2CAA4C;AAW5C,MAAM,mBAAmB,GAAG,2BAA2B,CAAC;AAexD,MAAM,QAAQ,GAAG,CAAC,IAAiB,EAAE,EAAE,CACrC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AAG1E,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IAC/B,YACU,KAA+B,EAC/B,YAA6C,EAC7C,OAAmC;QAFnC,UAAK,GAAL,KAAK,CAA0B;QAC/B,iBAAY,GAAZ,YAAY,CAAiC;QAC7C,YAAO,GAAP,OAAO,CAA4B;IAC1C,CAAC;IAEI,KAAK,CAAC,UAAU,CAAC,MAAmB;QAC1C,MAAM,KAAK,GAA4B;YACrC,SAAS,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE;YAC/C,GAAG,CAAC,MAAM,CAAC,WAAW;gBACpB,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,mBAAmB,EAAE,EAAE;gBAChD,CAAC,CAAC,EAAE,CAAC;SACR,CAAC;QAEF,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACzC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC;YAC1C,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC;gBAChC,EAAE,EAAE,CAAC,UAAU,CAAC;gBAChB,KAAK;gBACL,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;aACvB,CAAC;SACH,CAAC,CAAC;QAEH,OAAO;YACL,KAAK;YACL,SAAS,EAAE,QAAQ,CACjB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAClB,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI;aACrB,CAAC,CAAC,CACJ;SACF,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,SAAS,CAAC,MAAmB;QAGzC,MAAM,KAAK,GAA0B;YACnC,KAAK,EAAE,WAAW;YAClB,YAAY,EAAE,IAAI;YAClB,SAAS,EAAE,IAAI;YACf,WAAW,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE;SAClD,CAAC;QAEF,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACzC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC;YACtC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;gBAC5B,EAAE,EAAE,CAAC,eAAe,CAAC;gBACrB,KAAK;gBACL,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;aACvB,CAAC;SACH,CAAC,CAAC;QAIH,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;QAC3D,MAAM,YAAY,GAAG,cAAc,CAAC,MAAM;YACxC,CAAC,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC;gBACjD,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE;gBACrC,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE;aAC/C,CAAC;YACJ,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,YAAY,GAAG,IAAI,GAAG,CAC1B,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,kBAAkB,CAAC,CAAC,CACtD,CAAC;QAEF,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC7C,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,SAAS,CAAC;YAChE,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC5E,CAAC;QAED,OAAO;YACL,KAAK;YACL,SAAS,EAAE,QAAQ,CACjB,CAAC,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;gBACpD,QAAQ;gBACR,KAAK;aACN,CAAC,CAAC,CACJ;SACF,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,MAAmB;QAC9C,MAAM,KAAK,GAAiC;YAC1C,SAAS,EAAE,IAAI;YACf,SAAS,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE;SAChD,CAAC;QAEF,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACzC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC;YACpD,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC;gBAC1C,EAAE,EAAE,CAAC,oBAAoB,CAAC;gBAC1B,KAAK;gBACL,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;aACvB,CAAC;SACH,CAAC,CAAC;QAEH,OAAO;YACL,KAAK;YACL,SAAS,EAAE,QAAQ,CACjB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAClB,QAAQ,EAAE,CAAC,CAAC,kBAAkB;gBAC9B,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI;aACrB,CAAC,CAAC,CACJ;SACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,MAAmB;QAChC,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACnD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;YACvB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;YACtB,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;SAC5B,CAAC,CAAC;QAEH,OAAO;YACL,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE;YAC/B,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE;YAC3B,MAAM;YACN,KAAK;YACL,SAAS;SACV,CAAC;IACJ,CAAC;CACF,CAAA;AA7HY,oDAAoB;+BAApB,oBAAoB;IADhC,IAAA,mBAAU,GAAE;6CAGM,iCAAgB;QACT,iCAAgB;QACrB,iCAAgB;GAJxB,oBAAoB,CA6HhC"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/admin-stats/admin-stats.service.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/admin-stats/admin-stats.service.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..8842d6a7f5e204abe42174b8f178e80ee34e18e9 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/admin-stats/admin-stats.service.d.ts @@ -0,0 +1,6 @@ +import { AdminStatsRepository, StatsParams } from "./admin-stats.repository"; +export declare class AdminStatsService { + private _adminStatsRepository; + constructor(_adminStatsRepository: AdminStatsRepository); + getStats(params: StatsParams): Promise; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/admin-stats/admin-stats.service.js b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/admin-stats/admin-stats.service.js new file mode 100644 index 0000000000000000000000000000000000000000..f77f2300ef79f8a6c05bc5c6c8f358433c2efb94 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/admin-stats/admin-stats.service.js @@ -0,0 +1,20 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.AdminStatsService = void 0; +const tslib_1 = require("tslib"); +const common_1 = require("@nestjs/common"); +const admin_stats_repository_1 = require("./admin-stats.repository"); +let AdminStatsService = class AdminStatsService { + constructor(_adminStatsRepository) { + this._adminStatsRepository = _adminStatsRepository; + } + getStats(params) { + return this._adminStatsRepository.getStats(params); + } +}; +exports.AdminStatsService = AdminStatsService; +exports.AdminStatsService = AdminStatsService = tslib_1.__decorate([ + (0, common_1.Injectable)(), + tslib_1.__metadata("design:paramtypes", [admin_stats_repository_1.AdminStatsRepository]) +], AdminStatsService); +//# sourceMappingURL=admin-stats.service.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/admin-stats/admin-stats.service.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/admin-stats/admin-stats.service.js.map new file mode 100644 index 0000000000000000000000000000000000000000..4d007f7c04710ef2094a21c7ed7d0c7a0ebd667e --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/admin-stats/admin-stats.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"admin-stats.service.js","sourceRoot":"","sources":["../../../../../../../../../libraries/nestjs-libraries/src/database/prisma/admin-stats/admin-stats.service.ts"],"names":[],"mappings":";;;;AAAA,2CAA4C;AAC5C,qEAGsF;AAG/E,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAC5B,YAAoB,qBAA2C;QAA3C,0BAAqB,GAArB,qBAAqB,CAAsB;IAAG,CAAC;IAEnE,QAAQ,CAAC,MAAmB;QAC1B,OAAO,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACrD,CAAC;CACF,CAAA;AANY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,mBAAU,GAAE;6CAEgC,6CAAoB;GADpD,iBAAiB,CAM7B"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/agencies/agencies.repository.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/agencies/agencies.repository.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..5c6dcc239fab1fb99c03cf899af059d35d31e6b8 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/agencies/agencies.repository.d.ts @@ -0,0 +1,227 @@ +import { PrismaRepository } from "../prisma.service"; +import { User } from '@prisma/client'; +import { CreateAgencyDto } from "../../../dtos/agencies/create.agency.dto"; +export declare class AgenciesRepository { + private _socialMediaAgencies; + private _socialMediaAgenciesNiche; + constructor(_socialMediaAgencies: PrismaRepository<'socialMediaAgency'>, _socialMediaAgenciesNiche: PrismaRepository<'socialMediaAgencyNiche'>); + getAllAgencies(): import(".prisma/client").Prisma.PrismaPromise<({ + logo: { + id: string; + name: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + originalName: string | null; + path: string; + fileSize: number; + type: string; + thumbnail: string | null; + alt: string | null; + thumbnailTimestamp: number | null; + }; + niches: { + agencyId: string; + niche: string; + }[]; + } & { + id: string; + name: string; + description: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + userId: string; + logoId: string | null; + website: string | null; + slug: string | null; + facebook: string | null; + instagram: string | null; + twitter: string | null; + linkedIn: string | null; + youtube: string | null; + tiktok: string | null; + otherSocialMedia: string | null; + shortDescription: string; + approved: boolean; + })[]>; + getCount(): import(".prisma/client").Prisma.PrismaPromise; + getAllAgenciesSlug(): import(".prisma/client").Prisma.PrismaPromise<{ + slug: string; + }[]>; + approveOrDecline(action: string, id: string): import(".prisma/client").Prisma.Prisma__SocialMediaAgencyClient<{ + id: string; + name: string; + description: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + userId: string; + logoId: string | null; + website: string | null; + slug: string | null; + facebook: string | null; + instagram: string | null; + twitter: string | null; + linkedIn: string | null; + youtube: string | null; + tiktok: string | null; + otherSocialMedia: string | null; + shortDescription: string; + approved: boolean; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + getAgencyById(id: string): import(".prisma/client").Prisma.Prisma__SocialMediaAgencyClient<{ + user: { + password: string | null; + email: string; + id: string; + name: string | null; + createdAt: Date; + updatedAt: Date; + providerName: import(".prisma/client").$Enums.Provider; + lastName: string | null; + isSuperAdmin: boolean; + bio: string | null; + audience: number; + providerId: string | null; + timezone: number; + lastReadNotifications: Date; + inviteId: string | null; + activated: boolean; + account: string | null; + connectedAccount: boolean; + lastOnline: Date; + ip: string | null; + agent: string | null; + sendSuccessEmails: boolean; + sendFailureEmails: boolean; + sendStreakEmails: boolean; + pictureId: string | null; + }; + logo: { + id: string; + name: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + originalName: string | null; + path: string; + fileSize: number; + type: string; + thumbnail: string | null; + alt: string | null; + thumbnailTimestamp: number | null; + }; + niches: { + agencyId: string; + niche: string; + }[]; + } & { + id: string; + name: string; + description: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + userId: string; + logoId: string | null; + website: string | null; + slug: string | null; + facebook: string | null; + instagram: string | null; + twitter: string | null; + linkedIn: string | null; + youtube: string | null; + tiktok: string | null; + otherSocialMedia: string | null; + shortDescription: string; + approved: boolean; + }, null, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + getAgencyInformation(agency: string): import(".prisma/client").Prisma.Prisma__SocialMediaAgencyClient<{ + logo: { + id: string; + name: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + originalName: string | null; + path: string; + fileSize: number; + type: string; + thumbnail: string | null; + alt: string | null; + thumbnailTimestamp: number | null; + }; + niches: { + agencyId: string; + niche: string; + }[]; + } & { + id: string; + name: string; + description: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + userId: string; + logoId: string | null; + website: string | null; + slug: string | null; + facebook: string | null; + instagram: string | null; + twitter: string | null; + linkedIn: string | null; + youtube: string | null; + tiktok: string | null; + otherSocialMedia: string | null; + shortDescription: string; + approved: boolean; + }, null, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + getAgencyByUser(user: User): import(".prisma/client").Prisma.Prisma__SocialMediaAgencyClient<{ + logo: { + id: string; + name: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + originalName: string | null; + path: string; + fileSize: number; + type: string; + thumbnail: string | null; + alt: string | null; + thumbnailTimestamp: number | null; + }; + niches: { + agencyId: string; + niche: string; + }[]; + } & { + id: string; + name: string; + description: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + userId: string; + logoId: string | null; + website: string | null; + slug: string | null; + facebook: string | null; + instagram: string | null; + twitter: string | null; + linkedIn: string | null; + youtube: string | null; + tiktok: string | null; + otherSocialMedia: string | null; + shortDescription: string; + approved: boolean; + }, null, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + createAgency(user: User, body: CreateAgencyDto): Promise<{ + id: string; + }>; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/agencies/agencies.repository.js b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/agencies/agencies.repository.js new file mode 100644 index 0000000000000000000000000000000000000000..20dd2e716762f4660855eac9911920cd8217f5e8 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/agencies/agencies.repository.js @@ -0,0 +1,167 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.AgenciesRepository = void 0; +const tslib_1 = require("tslib"); +const prisma_service_1 = require("../prisma.service"); +const common_1 = require("@nestjs/common"); +let AgenciesRepository = class AgenciesRepository { + constructor(_socialMediaAgencies, _socialMediaAgenciesNiche) { + this._socialMediaAgencies = _socialMediaAgencies; + this._socialMediaAgenciesNiche = _socialMediaAgenciesNiche; + } + getAllAgencies() { + return this._socialMediaAgencies.model.socialMediaAgency.findMany({ + where: { + deletedAt: null, + approved: true, + }, + include: { + logo: true, + niches: true, + }, + orderBy: { + createdAt: 'desc', + }, + }); + } + getCount() { + return this._socialMediaAgencies.model.socialMediaAgency.count({ + where: { + deletedAt: null, + approved: true, + }, + }); + } + getAllAgenciesSlug() { + return this._socialMediaAgencies.model.socialMediaAgency.findMany({ + where: { + deletedAt: null, + approved: true, + }, + select: { + slug: true, + }, + }); + } + approveOrDecline(action, id) { + return this._socialMediaAgencies.model.socialMediaAgency.update({ + where: { + id, + }, + data: { + approved: action === 'approve', + }, + }); + } + getAgencyById(id) { + return this._socialMediaAgencies.model.socialMediaAgency.findFirst({ + where: { + id, + deletedAt: null, + approved: true, + }, + include: { + logo: true, + niches: true, + user: true, + }, + }); + } + getAgencyInformation(agency) { + return this._socialMediaAgencies.model.socialMediaAgency.findFirst({ + where: { + slug: agency, + deletedAt: null, + approved: true, + }, + include: { + logo: true, + niches: true, + }, + }); + } + getAgencyByUser(user) { + return this._socialMediaAgencies.model.socialMediaAgency.findFirst({ + where: { + userId: user.id, + deletedAt: null, + }, + include: { + logo: true, + niches: true, + }, + }); + } + async createAgency(user, body) { + const insertAgency = await this._socialMediaAgencies.model.socialMediaAgency.upsert({ + where: { + userId: user.id, + }, + update: { + userId: user.id, + name: body.name, + website: body.website, + facebook: body.facebook, + instagram: body.instagram, + twitter: body.twitter, + linkedIn: body.linkedIn, + youtube: body.youtube, + tiktok: body.tiktok, + logoId: body.logo.id, + shortDescription: body.shortDescription, + description: body.description, + approved: false, + }, + create: { + userId: user.id, + name: body.name, + website: body.website, + facebook: body.facebook, + instagram: body.instagram, + twitter: body.twitter, + linkedIn: body.linkedIn, + youtube: body.youtube, + tiktok: body.tiktok, + logoId: body.logo.id, + shortDescription: body.shortDescription, + description: body.description, + slug: body.name.toLowerCase().replace(/ /g, '-'), + approved: false, + }, + select: { + id: true, + }, + }); + await this._socialMediaAgenciesNiche.model.socialMediaAgencyNiche.deleteMany({ + where: { + agencyId: insertAgency.id, + niche: { + notIn: body.niches, + }, + }, + }); + const currentNiche = await this._socialMediaAgenciesNiche.model.socialMediaAgencyNiche.findMany({ + where: { + agencyId: insertAgency.id, + }, + select: { + niche: true, + }, + }); + const addNewNiche = body.niches.filter((n) => !currentNiche.some((c) => c.niche === n)); + await this._socialMediaAgenciesNiche.model.socialMediaAgencyNiche.createMany({ + data: addNewNiche.map((n) => ({ + agencyId: insertAgency.id, + niche: n, + })), + }); + return insertAgency; + } +}; +exports.AgenciesRepository = AgenciesRepository; +exports.AgenciesRepository = AgenciesRepository = tslib_1.__decorate([ + (0, common_1.Injectable)(), + tslib_1.__metadata("design:paramtypes", [prisma_service_1.PrismaRepository, + prisma_service_1.PrismaRepository]) +], AgenciesRepository); +//# sourceMappingURL=agencies.repository.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/agencies/agencies.repository.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/agencies/agencies.repository.js.map new file mode 100644 index 0000000000000000000000000000000000000000..df0a1e83b2c78c38cae585850bce9a0215b418bb --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/agencies/agencies.repository.js.map @@ -0,0 +1 @@ +{"version":3,"file":"agencies.repository.js","sourceRoot":"","sources":["../../../../../../../../../libraries/nestjs-libraries/src/database/prisma/agencies/agencies.repository.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/agencies/agencies.service.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/agencies/agencies.service.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..297bb8ebc3250a02b3a2a1d39d041a0147be7fa2 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/agencies/agencies.service.d.ts @@ -0,0 +1,140 @@ +import { AgenciesRepository } from "./agencies.repository"; +import { User } from '@prisma/client'; +import { CreateAgencyDto } from "../../../dtos/agencies/create.agency.dto"; +import { NotificationService } from "../notifications/notification.service"; +export declare class AgenciesService { + private _agenciesRepository; + private _notificationService; + constructor(_agenciesRepository: AgenciesRepository, _notificationService: NotificationService); + getAgencyByUser(user: User): import(".prisma/client").Prisma.Prisma__SocialMediaAgencyClient<{ + logo: { + id: string; + name: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + originalName: string | null; + path: string; + fileSize: number; + type: string; + thumbnail: string | null; + alt: string | null; + thumbnailTimestamp: number | null; + }; + niches: { + agencyId: string; + niche: string; + }[]; + } & { + id: string; + name: string; + description: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + userId: string; + logoId: string | null; + website: string | null; + slug: string | null; + facebook: string | null; + instagram: string | null; + twitter: string | null; + linkedIn: string | null; + youtube: string | null; + tiktok: string | null; + otherSocialMedia: string | null; + shortDescription: string; + approved: boolean; + }, null, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + getCount(): import(".prisma/client").Prisma.PrismaPromise; + getAllAgencies(): import(".prisma/client").Prisma.PrismaPromise<({ + logo: { + id: string; + name: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + originalName: string | null; + path: string; + fileSize: number; + type: string; + thumbnail: string | null; + alt: string | null; + thumbnailTimestamp: number | null; + }; + niches: { + agencyId: string; + niche: string; + }[]; + } & { + id: string; + name: string; + description: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + userId: string; + logoId: string | null; + website: string | null; + slug: string | null; + facebook: string | null; + instagram: string | null; + twitter: string | null; + linkedIn: string | null; + youtube: string | null; + tiktok: string | null; + otherSocialMedia: string | null; + shortDescription: string; + approved: boolean; + })[]>; + getAllAgenciesSlug(): import(".prisma/client").Prisma.PrismaPromise<{ + slug: string; + }[]>; + getAgencyInformation(agency: string): import(".prisma/client").Prisma.Prisma__SocialMediaAgencyClient<{ + logo: { + id: string; + name: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + originalName: string | null; + path: string; + fileSize: number; + type: string; + thumbnail: string | null; + alt: string | null; + thumbnailTimestamp: number | null; + }; + niches: { + agencyId: string; + niche: string; + }[]; + } & { + id: string; + name: string; + description: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + userId: string; + logoId: string | null; + website: string | null; + slug: string | null; + facebook: string | null; + instagram: string | null; + twitter: string | null; + linkedIn: string | null; + youtube: string | null; + tiktok: string | null; + otherSocialMedia: string | null; + shortDescription: string; + approved: boolean; + }, null, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + approveOrDecline(email: string, action: string, id: string): Promise; + createAgency(user: User, body: CreateAgencyDto): Promise<{ + id: string; + }>; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/agencies/agencies.service.js b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/agencies/agencies.service.js new file mode 100644 index 0000000000000000000000000000000000000000..312c32ad00636d79d0f8b49586115416e593c3b3 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/agencies/agencies.service.js @@ -0,0 +1,162 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.AgenciesService = void 0; +const tslib_1 = require("tslib"); +const common_1 = require("@nestjs/common"); +const agencies_repository_1 = require("./agencies.repository"); +const notification_service_1 = require("../notifications/notification.service"); +let AgenciesService = class AgenciesService { + constructor(_agenciesRepository, _notificationService) { + this._agenciesRepository = _agenciesRepository; + this._notificationService = _notificationService; + } + getAgencyByUser(user) { + return this._agenciesRepository.getAgencyByUser(user); + } + getCount() { + return this._agenciesRepository.getCount(); + } + getAllAgencies() { + return this._agenciesRepository.getAllAgencies(); + } + getAllAgenciesSlug() { + return this._agenciesRepository.getAllAgenciesSlug(); + } + getAgencyInformation(agency) { + return this._agenciesRepository.getAgencyInformation(agency); + } + async approveOrDecline(email, action, id) { + await this._agenciesRepository.approveOrDecline(action, id); + const agency = await this._agenciesRepository.getAgencyById(id); + if (action === 'approve') { + await this._notificationService.sendEmail(agency?.user?.email, 'Your Agency has been approved and added to Postiz 🚀', ` + + + + + + Your Agency has been approved and added to Postiz 🚀 + + + + Hi there,

+ Your agency ${agency?.name} has been added to Postiz!
+ You can check it here
+ It will appear on the main agency of Postiz in the next 24 hours.

+ +`); + return; + } + await this._notificationService.sendEmail(agency?.user?.email, 'Your Agency has been declined 😔', ` + + + + + + Your Agency has been declined + + + + Hi there,

+ Your agency ${agency?.name} has been declined to Postiz!
+ If you think we have made a mistake, please reply to this email and let us know + +`); + return; + } + async createAgency(user, body) { + const agency = await this._agenciesRepository.createAgency(user, body); + await this._notificationService.sendEmail('nevo@postiz.com', 'New agency created', ` + + + + + + Email Template + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + ${body.website} +
+ +

+ Social Medias: + ${body.facebook}
+ ${body.instagram}
+ ${body.twitter}
+ ${body.linkedIn}
+ ${body.youtube}
+ ${body.tiktok} +

+
+ +

Logo

+

+ +

+
+ +

Name

+

${body.name}

+
+ +

Short Description

+

${body.shortDescription}

+
+ +

Description

+

${body.description}

+
+ +

Niches

+

${body.niches.join(',')}

+
+ To approve click here


+ To decline click here


+
+

© 2024 Your Gitroom Limited All rights reserved.

+
+ + + + `); + return agency; + } +}; +exports.AgenciesService = AgenciesService; +exports.AgenciesService = AgenciesService = tslib_1.__decorate([ + (0, common_1.Injectable)(), + tslib_1.__metadata("design:paramtypes", [agencies_repository_1.AgenciesRepository, + notification_service_1.NotificationService]) +], AgenciesService); +//# sourceMappingURL=agencies.service.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/agencies/agencies.service.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/agencies/agencies.service.js.map new file mode 100644 index 0000000000000000000000000000000000000000..3aea165a64ec7db61585b80e4de0ef956c646929 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/agencies/agencies.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"agencies.service.js","sourceRoot":"","sources":["../../../../../../../../../libraries/nestjs-libraries/src/database/prisma/agencies/agencies.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/announcements/announcements.repository.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/announcements/announcements.repository.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..b62f6843a4d3ef7d434a5662f1c3b199dc083492 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/announcements/announcements.repository.d.ts @@ -0,0 +1,27 @@ +import { PrismaRepository } from "../prisma.service"; +import { AnnouncementDto } from "../../../dtos/announcements/announcements.dto"; +export declare class AnnouncementsRepository { + private _announcements; + constructor(_announcements: PrismaRepository<'announcement'>); + getAnnouncements(): import(".prisma/client").Prisma.PrismaPromise<{ + id: string; + description: string; + createdAt: Date; + title: string; + color: import(".prisma/client").$Enums.AnnouncementColor; + }[]>; + createAnnouncement(body: AnnouncementDto): import(".prisma/client").Prisma.Prisma__AnnouncementClient<{ + id: string; + description: string; + createdAt: Date; + title: string; + color: import(".prisma/client").$Enums.AnnouncementColor; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + deleteAnnouncement(id: string): import(".prisma/client").Prisma.Prisma__AnnouncementClient<{ + id: string; + description: string; + createdAt: Date; + title: string; + color: import(".prisma/client").$Enums.AnnouncementColor; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/announcements/announcements.repository.js b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/announcements/announcements.repository.js new file mode 100644 index 0000000000000000000000000000000000000000..daacb71f15c634d72c0ae65f7753e04dd3878baa --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/announcements/announcements.repository.js @@ -0,0 +1,41 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.AnnouncementsRepository = void 0; +const tslib_1 = require("tslib"); +const prisma_service_1 = require("../prisma.service"); +const common_1 = require("@nestjs/common"); +const client_1 = require("@prisma/client"); +let AnnouncementsRepository = class AnnouncementsRepository { + constructor(_announcements) { + this._announcements = _announcements; + } + getAnnouncements() { + return this._announcements.model.announcement.findMany({ + orderBy: { + createdAt: 'desc', + }, + }); + } + createAnnouncement(body) { + return this._announcements.model.announcement.create({ + data: { + title: body.title, + description: body.description, + color: body.color || client_1.AnnouncementColor.INFO, + }, + }); + } + deleteAnnouncement(id) { + return this._announcements.model.announcement.delete({ + where: { + id, + }, + }); + } +}; +exports.AnnouncementsRepository = AnnouncementsRepository; +exports.AnnouncementsRepository = AnnouncementsRepository = tslib_1.__decorate([ + (0, common_1.Injectable)(), + tslib_1.__metadata("design:paramtypes", [prisma_service_1.PrismaRepository]) +], AnnouncementsRepository); +//# sourceMappingURL=announcements.repository.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/announcements/announcements.repository.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/announcements/announcements.repository.js.map new file mode 100644 index 0000000000000000000000000000000000000000..b1138374fed04733dc9613b87ff027c178056498 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/announcements/announcements.repository.js.map @@ -0,0 +1 @@ +{"version":3,"file":"announcements.repository.js","sourceRoot":"","sources":["../../../../../../../../../libraries/nestjs-libraries/src/database/prisma/announcements/announcements.repository.ts"],"names":[],"mappings":";;;;AAAA,sDAA4F;AAC5F,2CAA4C;AAE5C,2CAAmD;AAG5C,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IAClC,YAAoB,cAAgD;QAAhD,mBAAc,GAAd,cAAc,CAAkC;IAAG,CAAC;IAExE,gBAAgB;QACd,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC;YACrD,OAAO,EAAE;gBACP,SAAS,EAAE,MAAM;aAClB;SACF,CAAC,CAAC;IACL,CAAC;IAED,kBAAkB,CAAC,IAAqB;QACtC,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC;YACnD,IAAI,EAAE;gBACJ,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,KAAK,EAAG,IAAI,CAAC,KAA2B,IAAI,0BAAiB,CAAC,IAAI;aACnE;SACF,CAAC,CAAC;IACL,CAAC;IAED,kBAAkB,CAAC,EAAU;QAC3B,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC;YACnD,KAAK,EAAE;gBACL,EAAE;aACH;SACF,CAAC,CAAC;IACL,CAAC;CACF,CAAA;AA5BY,0DAAuB;kCAAvB,uBAAuB;IADnC,IAAA,mBAAU,GAAE;6CAEyB,iCAAgB;GADzC,uBAAuB,CA4BnC"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/announcements/announcements.service.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/announcements/announcements.service.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..2c83f73145096d473f97325d29bf3f1b54d0f2ec --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/announcements/announcements.service.d.ts @@ -0,0 +1,27 @@ +import { AnnouncementsRepository } from "./announcements.repository"; +import { AnnouncementDto } from "../../../dtos/announcements/announcements.dto"; +export declare class AnnouncementsService { + private _announcementsRepository; + constructor(_announcementsRepository: AnnouncementsRepository); + getAnnouncements(): import(".prisma/client").Prisma.PrismaPromise<{ + id: string; + description: string; + createdAt: Date; + title: string; + color: import(".prisma/client").$Enums.AnnouncementColor; + }[]>; + createAnnouncement(body: AnnouncementDto): import(".prisma/client").Prisma.Prisma__AnnouncementClient<{ + id: string; + description: string; + createdAt: Date; + title: string; + color: import(".prisma/client").$Enums.AnnouncementColor; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + deleteAnnouncement(id: string): import(".prisma/client").Prisma.Prisma__AnnouncementClient<{ + id: string; + description: string; + createdAt: Date; + title: string; + color: import(".prisma/client").$Enums.AnnouncementColor; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/announcements/announcements.service.js b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/announcements/announcements.service.js new file mode 100644 index 0000000000000000000000000000000000000000..bbe6b89fb492f81aa36a29d0f4baf0785bdaacd3 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/announcements/announcements.service.js @@ -0,0 +1,26 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.AnnouncementsService = void 0; +const tslib_1 = require("tslib"); +const common_1 = require("@nestjs/common"); +const announcements_repository_1 = require("./announcements.repository"); +let AnnouncementsService = class AnnouncementsService { + constructor(_announcementsRepository) { + this._announcementsRepository = _announcementsRepository; + } + getAnnouncements() { + return this._announcementsRepository.getAnnouncements(); + } + createAnnouncement(body) { + return this._announcementsRepository.createAnnouncement(body); + } + deleteAnnouncement(id) { + return this._announcementsRepository.deleteAnnouncement(id); + } +}; +exports.AnnouncementsService = AnnouncementsService; +exports.AnnouncementsService = AnnouncementsService = tslib_1.__decorate([ + (0, common_1.Injectable)(), + tslib_1.__metadata("design:paramtypes", [announcements_repository_1.AnnouncementsRepository]) +], AnnouncementsService); +//# sourceMappingURL=announcements.service.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/announcements/announcements.service.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/announcements/announcements.service.js.map new file mode 100644 index 0000000000000000000000000000000000000000..cd67c4d94ca626a157168db5dc5344809ef279ac --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/announcements/announcements.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"announcements.service.js","sourceRoot":"","sources":["../../../../../../../../../libraries/nestjs-libraries/src/database/prisma/announcements/announcements.service.ts"],"names":[],"mappings":";;;;AAAA,2CAA4C;AAC5C,yEAA2H;AAIpH,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IAC/B,YAAoB,wBAAiD;QAAjD,6BAAwB,GAAxB,wBAAwB,CAAyB;IAAG,CAAC;IAEzE,gBAAgB;QACd,OAAO,IAAI,CAAC,wBAAwB,CAAC,gBAAgB,EAAE,CAAC;IAC1D,CAAC;IAED,kBAAkB,CAAC,IAAqB;QACtC,OAAO,IAAI,CAAC,wBAAwB,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAChE,CAAC;IAED,kBAAkB,CAAC,EAAU;QAC3B,OAAO,IAAI,CAAC,wBAAwB,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;IAC9D,CAAC;CACF,CAAA;AAdY,oDAAoB;+BAApB,oBAAoB;IADhC,IAAA,mBAAU,GAAE;6CAEmC,kDAAuB;GAD1D,oBAAoB,CAchC"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/autopost/autopost.repository.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/autopost/autopost.repository.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..036b5b7f7deed148f7799cd3ff0b116deecf2ddd --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/autopost/autopost.repository.d.ts @@ -0,0 +1,96 @@ +import { PrismaRepository } from "../prisma.service"; +import { AutopostDto } from "../../../dtos/autopost/autopost.dto"; +export declare class AutopostRepository { + private _autoPost; + constructor(_autoPost: PrismaRepository<'autoPost'>); + getTotal(orgId: string): import(".prisma/client").Prisma.PrismaPromise; + getAutoposts(orgId: string): import(".prisma/client").Prisma.PrismaPromise<{ + id: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + content: string | null; + url: string; + title: string; + lastUrl: string; + onSlot: boolean; + syncLast: boolean; + active: boolean; + addPicture: boolean; + generateContent: boolean; + integrations: string; + }[]>; + deleteAutopost(orgId: string, id: string): import(".prisma/client").Prisma.Prisma__AutoPostClient<{ + id: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + content: string | null; + url: string; + title: string; + lastUrl: string; + onSlot: boolean; + syncLast: boolean; + active: boolean; + addPicture: boolean; + generateContent: boolean; + integrations: string; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + getAutopost(id: string): import(".prisma/client").Prisma.Prisma__AutoPostClient<{ + id: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + content: string | null; + url: string; + title: string; + lastUrl: string; + onSlot: boolean; + syncLast: boolean; + active: boolean; + addPicture: boolean; + generateContent: boolean; + integrations: string; + }, null, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + updateUrl(id: string, url: string): import(".prisma/client").Prisma.Prisma__AutoPostClient<{ + id: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + content: string | null; + url: string; + title: string; + lastUrl: string; + onSlot: boolean; + syncLast: boolean; + active: boolean; + addPicture: boolean; + generateContent: boolean; + integrations: string; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + changeActive(orgId: string, id: string, active: boolean): import(".prisma/client").Prisma.Prisma__AutoPostClient<{ + id: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + content: string | null; + url: string; + title: string; + lastUrl: string; + onSlot: boolean; + syncLast: boolean; + active: boolean; + addPicture: boolean; + generateContent: boolean; + integrations: string; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + createAutopost(orgId: string, body: AutopostDto, id?: string): Promise<{ + id: string; + active: boolean; + }>; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/autopost/autopost.repository.js b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/autopost/autopost.repository.js new file mode 100644 index 0000000000000000000000000000000000000000..ffc0682b7d95c3e8e59303853fb7ad0d86e12a38 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/autopost/autopost.repository.js @@ -0,0 +1,108 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.AutopostRepository = void 0; +const tslib_1 = require("tslib"); +const prisma_service_1 = require("../prisma.service"); +const common_1 = require("@nestjs/common"); +const uuid_1 = require("uuid"); +let AutopostRepository = class AutopostRepository { + constructor(_autoPost) { + this._autoPost = _autoPost; + } + getTotal(orgId) { + return this._autoPost.model.autoPost.count({ + where: { + organizationId: orgId, + deletedAt: null, + }, + }); + } + getAutoposts(orgId) { + return this._autoPost.model.autoPost.findMany({ + where: { + organizationId: orgId, + deletedAt: null, + }, + }); + } + deleteAutopost(orgId, id) { + return this._autoPost.model.autoPost.update({ + where: { + id, + organizationId: orgId, + }, + data: { + deletedAt: new Date(), + }, + }); + } + getAutopost(id) { + return this._autoPost.model.autoPost.findUnique({ + where: { + id, + deletedAt: null, + }, + }); + } + updateUrl(id, url) { + return this._autoPost.model.autoPost.update({ + where: { + id, + }, + data: { + lastUrl: url, + }, + }); + } + changeActive(orgId, id, active) { + return this._autoPost.model.autoPost.update({ + where: { + id, + organizationId: orgId, + }, + data: { + active, + }, + }); + } + async createAutopost(orgId, body, id) { + const { id: newId, active } = await this._autoPost.model.autoPost.upsert({ + where: { + id: id || (0, uuid_1.v4)(), + organizationId: orgId, + }, + create: { + organizationId: orgId, + url: body.url, + title: body.title, + integrations: JSON.stringify(body.integrations), + active: body.active, + content: body.content, + generateContent: body.generateContent, + addPicture: body.addPicture, + syncLast: body.syncLast, + onSlot: body.onSlot, + lastUrl: body.lastUrl, + }, + update: { + url: body.url, + title: body.title, + integrations: JSON.stringify(body.integrations), + active: body.active, + content: body.content, + generateContent: body.generateContent, + addPicture: body.addPicture, + syncLast: body.syncLast, + onSlot: body.onSlot, + lastUrl: body.lastUrl, + }, + }); + return { id: newId, active }; + } +}; +exports.AutopostRepository = AutopostRepository; +exports.AutopostRepository = AutopostRepository = tslib_1.__decorate([ + (0, common_1.Injectable)(), + tslib_1.__metadata("design:paramtypes", [prisma_service_1.PrismaRepository]) +], AutopostRepository); +//# sourceMappingURL=autopost.repository.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/autopost/autopost.repository.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/autopost/autopost.repository.js.map new file mode 100644 index 0000000000000000000000000000000000000000..698260d2666e0434f0dd97805c9f853973ae6dee --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/autopost/autopost.repository.js.map @@ -0,0 +1 @@ +{"version":3,"file":"autopost.repository.js","sourceRoot":"","sources":["../../../../../../../../../libraries/nestjs-libraries/src/database/prisma/autopost/autopost.repository.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/autopost/autopost.service.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/autopost/autopost.service.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..bfc2ca65c08cae946c2dce4e3caefe9a1e0bfac8 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/autopost/autopost.service.d.ts @@ -0,0 +1,128 @@ +import { AutopostRepository } from "./autopost.repository"; +import { AutopostDto } from "../../../dtos/autopost/autopost.dto"; +import { StateGraph } from '@langchain/langgraph'; +import { AutoPost, Integration } from '@prisma/client'; +import { BaseMessage } from '@langchain/core/messages'; +import { PostsService } from "../posts/posts.service"; +import { IntegrationService } from "../integrations/integration.service"; +import { TemporalService } from 'nestjs-temporal-core'; +interface WorkflowChannelsState { + messages: BaseMessage[]; + integrations: Integration[]; + body: AutoPost; + description: string; + image: string; + id: string; + load: { + date: string; + url: string; + description: string; + }; +} +export declare class AutopostService { + private _autopostsRepository; + private _temporalService; + private _integrationService; + private _postsService; + constructor(_autopostsRepository: AutopostRepository, _temporalService: TemporalService, _integrationService: IntegrationService, _postsService: PostsService); + stopAll(org: string): Promise; + getAutoposts(orgId: string): import(".prisma/client").Prisma.PrismaPromise<{ + id: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + content: string | null; + url: string; + title: string; + lastUrl: string; + onSlot: boolean; + syncLast: boolean; + active: boolean; + addPicture: boolean; + generateContent: boolean; + integrations: string; + }[]>; + createAutopost(orgId: string, body: AutopostDto, id?: string): Promise<{ + id: string; + active: boolean; + }>; + changeActive(orgId: string, id: string, active: boolean): Promise<{ + id: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + content: string | null; + url: string; + title: string; + lastUrl: string; + onSlot: boolean; + syncLast: boolean; + active: boolean; + addPicture: boolean; + generateContent: boolean; + integrations: string; + }>; + processCron(active: boolean, orgId: string, id: string): Promise | import("nestjs-temporal-core").WorkflowTerminationResult>; + deleteAutopost(orgId: string, id: string): Promise<{ + id: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + content: string | null; + url: string; + title: string; + lastUrl: string; + onSlot: boolean; + syncLast: boolean; + active: boolean; + addPicture: boolean; + generateContent: boolean; + integrations: string; + }>; + loadXML(url: string): Promise<{ + success: boolean; + date: any; + url: any; + description: string; + } | { + success: boolean; + date?: undefined; + url?: undefined; + description?: undefined; + }>; + static state: () => StateGraph, "__start__", import("@langchain/langgraph").StateDefinition, import("@langchain/langgraph").StateDefinition, import("@langchain/langgraph").StateDefinition, unknown, unknown, unknown>; + loadUrl(url: string): Promise; + generateDescription(state: WorkflowChannelsState): Promise<{ + description: string; + messages: BaseMessage[]; + integrations: Integration[]; + body: AutoPost; + image: string; + id: string; + load: { + date: string; + url: string; + description: string; + }; + }>; + generatePicture(state: WorkflowChannelsState): Promise<{ + image: any; + messages: BaseMessage[]; + integrations: Integration[]; + body: AutoPost; + description: string; + id: string; + load: { + date: string; + url: string; + description: string; + }; + }>; + schedulePost(state: WorkflowChannelsState): Promise; + updateUrl(state: WorkflowChannelsState): Promise; + startAutopost(id: string): Promise; +} +export {}; diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/autopost/autopost.service.js b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/autopost/autopost.service.js new file mode 100644 index 0000000000000000000000000000000000000000..65d3b73b035f530b0b2a45da6820ffa2640d2a9b --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/autopost/autopost.service.js @@ -0,0 +1,299 @@ +"use strict"; +var AutopostService_1; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.AutopostService = void 0; +const tslib_1 = require("tslib"); +const common_1 = require("@nestjs/common"); +const autopost_repository_1 = require("./autopost.repository"); +const dayjs_1 = tslib_1.__importDefault(require("dayjs")); +const langgraph_1 = require("@langchain/langgraph"); +const striptags_1 = tslib_1.__importDefault(require("striptags")); +const openai_1 = require("@langchain/openai"); +const jsdom_1 = require("jsdom"); +const zod_1 = require("zod"); +const prompts_1 = require("@langchain/core/prompts"); +const posts_service_1 = require("../posts/posts.service"); +const rss_parser_1 = tslib_1.__importDefault(require("rss-parser")); +const integration_service_1 = require("../integrations/integration.service"); +const make_is_1 = require("../../../services/make.is"); +const nestjs_temporal_core_1 = require("nestjs-temporal-core"); +const common_2 = require("@temporalio/common"); +const temporal_search_attribute_1 = require("../../../temporal/temporal.search.attribute"); +const parser = new rss_parser_1.default(); +const model = new openai_1.ChatOpenAI({ + apiKey: process.env.OPENAI_API_KEY || 'sk-proj-', + model: 'gpt-4.1', + temperature: 0.7, +}); +const dalle = new openai_1.DallEAPIWrapper({ + apiKey: process.env.OPENAI_API_KEY || 'sk-proj-', + model: 'chatgpt-image-latest', +}); +const generateContent = zod_1.z.object({ + socialMediaPostContent: zod_1.z + .string() + .describe('Content for social media posts max 120 chars'), +}); +const dallePrompt = zod_1.z.object({ + generatedTextToBeSentToDallE: zod_1.z + .string() + .describe('Generated prompt from description to be sent to DallE'), +}); +let AutopostService = AutopostService_1 = class AutopostService { + constructor(_autopostsRepository, _temporalService, _integrationService, _postsService) { + this._autopostsRepository = _autopostsRepository; + this._temporalService = _temporalService; + this._integrationService = _integrationService; + this._postsService = _postsService; + } + async stopAll(org) { + const getAll = (await this.getAutoposts(org)).filter((f) => f.active); + for (const autopost of getAll) { + await this.changeActive(org, autopost.id, false); + } + } + getAutoposts(orgId) { + return this._autopostsRepository.getAutoposts(orgId); + } + async createAutopost(orgId, body, id) { + const data = await this._autopostsRepository.createAutopost(orgId, body, id); + await this.processCron(body.active, orgId, data.id); + return data; + } + async changeActive(orgId, id, active) { + const data = await this._autopostsRepository.changeActive(orgId, id, active); + await this.processCron(active, orgId, id); + return data; + } + async processCron(active, orgId, id) { + if (active) { + try { + return this._temporalService.client + .getRawClient() + ?.workflow.start('autoPostWorkflow', { + workflowId: `autopost-${id}`, + taskQueue: 'main', + args: [{ id, immediately: true }], + typedSearchAttributes: new common_2.TypedSearchAttributes([ + { + key: temporal_search_attribute_1.organizationId, + value: orgId, + }, + ]), + }); + } + catch (err) { } + } + try { + return await this._temporalService.terminateWorkflow(`autopost-${id}`); + } + catch (err) { + return false; + } + } + async deleteAutopost(orgId, id) { + const data = await this._autopostsRepository.deleteAutopost(orgId, id); + await this.processCron(false, orgId, id); + return data; + } + async loadXML(url) { + try { + const { items } = await parser.parseURL(url); + const findLast = items.reduce((all, current) => { + if ((0, dayjs_1.default)(current.pubDate).isAfter(all.pubDate)) { + return current; + } + return all; + }, { pubDate: (0, dayjs_1.default)().subtract(100, 'years') }); + return { + success: true, + date: findLast.pubDate, + url: findLast.link, + description: (0, striptags_1.default)(findLast?.['content:encoded'] || + findLast?.content || + findLast?.description || + '') + .replace(/\n/g, ' ') + .trim(), + }; + } + catch (err) { + } + return { success: false }; + } + async loadUrl(url) { + try { + const loadDom = new jsdom_1.JSDOM(await (await fetch(url)).text()); + loadDom.window.document + .querySelectorAll('script') + .forEach((s) => s.remove()); + loadDom.window.document + .querySelectorAll('style') + .forEach((s) => s.remove()); + return (0, striptags_1.default)(loadDom.window.document.body.innerHTML); + } + catch (err) { + return ''; + } + } + async generateDescription(state) { + if (!state.body.generateContent) { + return { + ...state, + description: state.body.content, + }; + } + const description = state.load.description || (await this.loadUrl(state.load.url)); + if (!description) { + return { + ...state, + description: '', + }; + } + const structuredOutput = model.withStructuredOutput(generateContent); + const { socialMediaPostContent } = await prompts_1.ChatPromptTemplate.fromTemplate(` + You are an assistant that gets raw 'description' of a content and generate a social media post content. + Rules: + - Maximum 100 chars + - Try to make it a short as possible to fit any social media + - Add line breaks between sentences (\\n) + - Don't add hashtags + - Add emojis when needed + + 'description': + {content} + `) + .pipe(structuredOutput) + .invoke({ + content: description, + }); + return { + ...state, + description: socialMediaPostContent, + }; + } + async generatePicture(state) { + const structuredOutput = model.withStructuredOutput(dallePrompt); + const { generatedTextToBeSentToDallE } = await prompts_1.ChatPromptTemplate.fromTemplate(` + You are an assistant that gets description and generate a prompt that will be sent to DallE to generate pictures. + + content: + {content} + `) + .pipe(structuredOutput) + .invoke({ + content: state.load.description || state.description, + }); + const image = await dalle.invoke(generatedTextToBeSentToDallE); + return { ...state, image }; + } + async schedulePost(state) { + const nextTime = await this._postsService.findFreeDateTime(state.integrations[0].organizationId); + await this._postsService.createPost(state.integrations[0].organizationId, { + date: nextTime + 'Z', + order: (0, make_is_1.makeId)(10), + shortLink: false, + type: 'draft', + tags: [], + posts: state.integrations.map((i) => ({ + settings: { + __type: i.providerIdentifier, + title: '', + tags: [], + subreddit: [], + }, + group: (0, make_is_1.makeId)(10), + integration: { id: i.id }, + value: [ + { + id: (0, make_is_1.makeId)(10), + delay: 0, + content: state.description.replace(/\n/g, '\n\n') + + '\n\n' + + state.load.url, + image: !state.image + ? [] + : [ + { + id: (0, make_is_1.makeId)(10), + name: (0, make_is_1.makeId)(10), + path: state.image, + organizationId: state.integrations[0].organizationId, + }, + ], + }, + ], + })), + }, 'AUTOPOST'); + } + async updateUrl(state) { + await this._autopostsRepository.updateUrl(state.id, state.load.url); + } + async startAutopost(id) { + const getPost = await this._autopostsRepository.getAutopost(id); + if (!getPost || !getPost.active) { + return; + } + const load = await this.loadXML(getPost.url); + if (!load.success || load.url === getPost.lastUrl) { + return; + } + const integrations = await this._integrationService.getIntegrationsList(getPost.organizationId); + const parseIntegrations = JSON.parse(getPost.integrations || '[]') || []; + const neededIntegrations = integrations.filter((i) => parseIntegrations.some((ii) => ii.id === i.id)); + const integrationsToSend = parseIntegrations.length === 0 ? integrations : neededIntegrations; + if (integrationsToSend.length === 0) { + return; + } + const state = AutopostService_1.state(); + const workflow = state + .addNode('generate-description', this.generateDescription.bind(this)) + .addNode('generate-picture', this.generatePicture.bind(this)) + .addNode('schedule-post', this.schedulePost.bind(this)) + .addNode('update-url', this.updateUrl.bind(this)) + .addEdge(langgraph_1.START, 'generate-description') + .addConditionalEdges('generate-description', (state) => { + if (!state.description) { + return 'schedule-post'; + } + if (state.body.addPicture) { + return 'generate-picture'; + } + return 'schedule-post'; + }) + .addEdge('generate-picture', 'schedule-post') + .addEdge('schedule-post', 'update-url') + .addEdge('update-url', langgraph_1.END); + const app = workflow.compile(); + await app.invoke({ + messages: [], + id, + body: getPost, + load, + integrations: integrationsToSend, + }); + } +}; +exports.AutopostService = AutopostService; +AutopostService.state = () => new langgraph_1.StateGraph({ + channels: { + messages: { + reducer: (currentState, updateValue) => currentState.concat(updateValue), + default: () => [], + }, + body: null, + description: null, + load: null, + image: null, + integrations: null, + id: null, + }, +}); +exports.AutopostService = AutopostService = AutopostService_1 = tslib_1.__decorate([ + (0, common_1.Injectable)(), + tslib_1.__metadata("design:paramtypes", [autopost_repository_1.AutopostRepository, + nestjs_temporal_core_1.TemporalService, + integration_service_1.IntegrationService, + posts_service_1.PostsService]) +], AutopostService); +//# sourceMappingURL=autopost.service.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/autopost/autopost.service.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/autopost/autopost.service.js.map new file mode 100644 index 0000000000000000000000000000000000000000..a5104a4f214dfc0e06969a873129e5b16bbcc91d --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/autopost/autopost.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"autopost.service.js","sourceRoot":"","sources":["../../../../../../../../../libraries/nestjs-libraries/src/database/prisma/autopost/autopost.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/database.module.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/database.module.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..d6fdcd7513cce2b255e1a2bac92b786ddbba6a42 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/database.module.d.ts @@ -0,0 +1,2 @@ +export declare class DatabaseModule { +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/database.module.js b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/database.module.js new file mode 100644 index 0000000000000000000000000000000000000000..a3e61ac295300740f41abbe720f314f65ed2cd35 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/database.module.js @@ -0,0 +1,113 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.DatabaseModule = void 0; +const tslib_1 = require("tslib"); +const common_1 = require("@nestjs/common"); +const prisma_service_1 = require("./prisma.service"); +const organization_repository_1 = require("./organizations/organization.repository"); +const organization_service_1 = require("./organizations/organization.service"); +const users_service_1 = require("./users/users.service"); +const users_repository_1 = require("./users/users.repository"); +const subscription_service_1 = require("./subscriptions/subscription.service"); +const subscription_repository_1 = require("./subscriptions/subscription.repository"); +const notification_service_1 = require("./notifications/notification.service"); +const integration_service_1 = require("./integrations/integration.service"); +const integration_repository_1 = require("./integrations/integration.repository"); +const posts_service_1 = require("./posts/posts.service"); +const posts_repository_1 = require("./posts/posts.repository"); +const integration_manager_1 = require("../../integrations/integration.manager"); +const media_service_1 = require("./media/media.service"); +const media_repository_1 = require("./media/media.repository"); +const notifications_repository_1 = require("./notifications/notifications.repository"); +const email_service_1 = require("../../services/email.service"); +const stripe_service_1 = require("../../services/stripe.service"); +const extract_content_service_1 = require("../../openai/extract.content.service"); +const openai_service_1 = require("../../openai/openai.service"); +const agencies_service_1 = require("./agencies/agencies.service"); +const agencies_repository_1 = require("./agencies/agencies.repository"); +const track_service_1 = require("../../track/track.service"); +const short_link_service_1 = require("../../short-linking/short.link.service"); +const webhooks_repository_1 = require("./webhooks/webhooks.repository"); +const webhooks_service_1 = require("./webhooks/webhooks.service"); +const signature_repository_1 = require("./signatures/signature.repository"); +const signature_service_1 = require("./signatures/signature.service"); +const autopost_repository_1 = require("./autopost/autopost.repository"); +const autopost_service_1 = require("./autopost/autopost.service"); +const sets_service_1 = require("./sets/sets.service"); +const sets_repository_1 = require("./sets/sets.repository"); +const third_party_repository_1 = require("./third-party/third-party.repository"); +const third_party_service_1 = require("./third-party/third-party.service"); +const video_manager_1 = require("../../videos/video.manager"); +const fal_service_1 = require("../../openai/fal.service"); +const refresh_integration_service_1 = require("../../integrations/refresh.integration.service"); +const oauth_repository_1 = require("./oauth/oauth.repository"); +const oauth_service_1 = require("./oauth/oauth.service"); +const announcements_repository_1 = require("./announcements/announcements.repository"); +const announcements_service_1 = require("./announcements/announcements.service"); +const errors_repository_1 = require("./errors/errors.repository"); +const errors_service_1 = require("./errors/errors.service"); +const admin_stats_repository_1 = require("./admin-stats/admin-stats.repository"); +const admin_stats_service_1 = require("./admin-stats/admin-stats.service"); +let DatabaseModule = class DatabaseModule { +}; +exports.DatabaseModule = DatabaseModule; +exports.DatabaseModule = DatabaseModule = tslib_1.__decorate([ + (0, common_1.Global)(), + (0, common_1.Module)({ + imports: [], + controllers: [], + providers: [ + prisma_service_1.PrismaService, + prisma_service_1.PrismaRepository, + prisma_service_1.PrismaTransaction, + users_service_1.UsersService, + users_repository_1.UsersRepository, + organization_service_1.OrganizationService, + organization_repository_1.OrganizationRepository, + subscription_service_1.SubscriptionService, + subscription_repository_1.SubscriptionRepository, + notification_service_1.NotificationService, + notifications_repository_1.NotificationsRepository, + webhooks_repository_1.WebhooksRepository, + webhooks_service_1.WebhooksService, + integration_service_1.IntegrationService, + integration_repository_1.IntegrationRepository, + posts_service_1.PostsService, + posts_repository_1.PostsRepository, + stripe_service_1.StripeService, + signature_repository_1.SignatureRepository, + autopost_repository_1.AutopostRepository, + autopost_service_1.AutopostService, + signature_service_1.SignatureService, + media_service_1.MediaService, + media_repository_1.MediaRepository, + agencies_service_1.AgenciesService, + agencies_repository_1.AgenciesRepository, + integration_manager_1.IntegrationManager, + refresh_integration_service_1.RefreshIntegrationService, + extract_content_service_1.ExtractContentService, + openai_service_1.OpenaiService, + fal_service_1.FalService, + email_service_1.EmailService, + track_service_1.TrackService, + short_link_service_1.ShortLinkService, + sets_service_1.SetsService, + sets_repository_1.SetsRepository, + third_party_repository_1.ThirdPartyRepository, + third_party_service_1.ThirdPartyService, + oauth_repository_1.OAuthRepository, + oauth_service_1.OAuthService, + video_manager_1.VideoManager, + announcements_repository_1.AnnouncementsRepository, + announcements_service_1.AnnouncementsService, + errors_repository_1.ErrorsRepository, + errors_service_1.ErrorsService, + admin_stats_repository_1.AdminStatsRepository, + admin_stats_service_1.AdminStatsService, + ], + get exports() { + return this.providers; + }, + }) +], DatabaseModule); +//# sourceMappingURL=database.module.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/database.module.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/database.module.js.map new file mode 100644 index 0000000000000000000000000000000000000000..3377f8b9448183f3e34f9f31b96c45db2afc5e75 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/database.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"database.module.js","sourceRoot":"","sources":["../../../../../../../../libraries/nestjs-libraries/src/database/prisma/database.module.ts"],"names":[],"mappings":";;;;AAAA,2CAAgD;AAChD,qDAAsF;AACtF,qFAAyH;AACzH,+EAAmH;AACnH,yDAA6F;AAC7F,+DAAmG;AACnG,+EAAmH;AACnH,qFAAyH;AACzH,+EAAmH;AACnH,4EAAgH;AAChH,kFAAsH;AACtH,yDAA6F;AAC7F,+DAAmG;AACnG,gFAAgG;AAChG,yDAA6F;AAC7F,+DAAmG;AACnG,uFAA2H;AAC3H,gEAAgF;AAChF,kEAAkF;AAClF,kFAAiG;AACjG,gEAAgF;AAChF,kEAAsG;AACtG,wEAA4G;AAC5G,6DAA6E;AAC7E,+EAA8F;AAC9F,wEAA4G;AAC5G,kEAAsG;AACtG,4EAAgH;AAChH,sEAA0G;AAC1G,wEAA4G;AAC5G,kEAAsG;AACtG,sDAA0F;AAC1F,4DAAgG;AAChG,iFAAoH;AACpH,2EAA8G;AAC9G,8DAA8E;AAC9E,0DAA0E;AAC1E,gGAA+G;AAC/G,+DAAmG;AACnG,yDAA6F;AAC7F,uFAA2H;AAC3H,iFAAqH;AACrH,kEAAsG;AACtG,4DAAgG;AAChG,iFAAoH;AACpH,2EAA8G;AA2DvG,IAAM,cAAc,GAApB,MAAM,cAAc;CAAG,CAAA;AAAjB,wCAAc;yBAAd,cAAc;IAzD1B,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,EAAE;QACf,SAAS,EAAE;YACT,8BAAa;YACb,iCAAgB;YAChB,kCAAiB;YACjB,4BAAY;YACZ,kCAAe;YACf,0CAAmB;YACnB,gDAAsB;YACtB,0CAAmB;YACnB,gDAAsB;YACtB,0CAAmB;YACnB,kDAAuB;YACvB,wCAAkB;YAClB,kCAAe;YACf,wCAAkB;YAClB,8CAAqB;YACrB,4BAAY;YACZ,kCAAe;YACf,8BAAa;YACb,0CAAmB;YACnB,wCAAkB;YAClB,kCAAe;YACf,oCAAgB;YAChB,4BAAY;YACZ,kCAAe;YACf,kCAAe;YACf,wCAAkB;YAClB,wCAAkB;YAClB,uDAAyB;YACzB,+CAAqB;YACrB,8BAAa;YACb,wBAAU;YACV,4BAAY;YACZ,4BAAY;YACZ,qCAAgB;YAChB,0BAAW;YACX,gCAAc;YACd,6CAAoB;YACpB,uCAAiB;YACjB,kCAAe;YACf,4BAAY;YACZ,4BAAY;YACZ,kDAAuB;YACvB,4CAAoB;YACpB,oCAAgB;YAChB,8BAAa;YACb,6CAAoB;YACpB,uCAAiB;SAClB;QACD,IAAI,OAAO;YACT,OAAO,IAAI,CAAC,SAAS,CAAC;QACxB,CAAC;KACF,CAAC;GACW,cAAc,CAAG"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/errors/errors.repository.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/errors/errors.repository.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..21196a6a115d1db18e8cca6bd442b8a5b551e2ae --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/errors/errors.repository.d.ts @@ -0,0 +1,23 @@ +import { PrismaRepository } from "../prisma.service"; +interface ListErrorsParams { + page?: number; + limit?: number; + platform?: string; + email?: string; + unknownFirst?: boolean; +} +export declare class ErrorsRepository { + private _errors; + constructor(_errors: PrismaRepository<'errors'>); + private buildWhere; + private get include(); + listPlatforms(): Promise; + listErrors(params: ListErrorsParams): Promise<{ + items: any[]; + total: number; + page: number; + limit: number; + hasMore: boolean; + }>; +} +export {}; diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/errors/errors.repository.js b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/errors/errors.repository.js new file mode 100644 index 0000000000000000000000000000000000000000..87020243365a54dfdc77b997bb81c897ab34612c --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/errors/errors.repository.js @@ -0,0 +1,135 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ErrorsRepository = void 0; +const tslib_1 = require("tslib"); +const prisma_service_1 = require("../prisma.service"); +const common_1 = require("@nestjs/common"); +const UNKNOWN_TOKEN = 'An unknown error occurred'; +let ErrorsRepository = class ErrorsRepository { + constructor(_errors) { + this._errors = _errors; + } + buildWhere(params) { + const where = {}; + if (params.platform) { + where.platform = params.platform; + } + if (params.email) { + where.organization = { + users: { + some: { + user: { + email: { contains: params.email, mode: 'insensitive' }, + }, + }, + }, + }; + } + return where; + } + get include() { + return { + organization: { + select: { + id: true, + name: true, + users: { + select: { + user: { select: { id: true, email: true, name: true } }, + }, + }, + }, + }, + post: { select: { id: true, content: true } }, + }; + } + async listPlatforms() { + const rows = await this._errors.model.errors.findMany({ + distinct: ['platform'], + select: { platform: true }, + orderBy: { platform: 'asc' }, + }); + return rows.map((r) => r.platform); + } + async listErrors(params) { + const page = Math.max(0, params.page || 0); + const limit = Math.min(Math.max(1, params.limit || 20), 100); + const skip = page * limit; + const where = this.buildWhere(params); + const include = this.include; + if (!params.unknownFirst) { + const [items, total] = await Promise.all([ + this._errors.model.errors.findMany({ + where, + orderBy: { createdAt: 'desc' }, + skip, + take: limit, + include, + }), + this._errors.model.errors.count({ where }), + ]); + return { + items, + total, + page, + limit, + hasMore: skip + items.length < total, + }; + } + const unknownWhere = { ...where, message: { contains: UNKNOWN_TOKEN } }; + const knownWhere = { + ...where, + NOT: { message: { contains: UNKNOWN_TOKEN } }, + }; + const [unknownTotal, knownTotal] = await Promise.all([ + this._errors.model.errors.count({ where: unknownWhere }), + this._errors.model.errors.count({ where: knownWhere }), + ]); + let unknownItems = []; + let knownItems = []; + if (skip < unknownTotal) { + const takeUnknown = Math.min(unknownTotal - skip, limit); + unknownItems = await this._errors.model.errors.findMany({ + where: unknownWhere, + orderBy: { createdAt: 'desc' }, + skip, + take: takeUnknown, + include, + }); + const remaining = limit - unknownItems.length; + if (remaining > 0) { + knownItems = await this._errors.model.errors.findMany({ + where: knownWhere, + orderBy: { createdAt: 'desc' }, + skip: 0, + take: remaining, + include, + }); + } + } + else { + knownItems = await this._errors.model.errors.findMany({ + where: knownWhere, + orderBy: { createdAt: 'desc' }, + skip: skip - unknownTotal, + take: limit, + include, + }); + } + const items = [...unknownItems, ...knownItems]; + const total = unknownTotal + knownTotal; + return { + items, + total, + page, + limit, + hasMore: skip + items.length < total, + }; + } +}; +exports.ErrorsRepository = ErrorsRepository; +exports.ErrorsRepository = ErrorsRepository = tslib_1.__decorate([ + (0, common_1.Injectable)(), + tslib_1.__metadata("design:paramtypes", [prisma_service_1.PrismaRepository]) +], ErrorsRepository); +//# sourceMappingURL=errors.repository.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/errors/errors.repository.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/errors/errors.repository.js.map new file mode 100644 index 0000000000000000000000000000000000000000..f2e5aa0afb1d0a1d78bf56d4fedbd3a794b7763e --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/errors/errors.repository.js.map @@ -0,0 +1 @@ +{"version":3,"file":"errors.repository.js","sourceRoot":"","sources":["../../../../../../../../../libraries/nestjs-libraries/src/database/prisma/errors/errors.repository.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/errors/errors.service.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/errors/errors.service.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..ba05e0c0623d8e8fdf30cf371341251abf9deffe --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/errors/errors.service.d.ts @@ -0,0 +1,19 @@ +import { ErrorsRepository } from "./errors.repository"; +export declare class ErrorsService { + private _errorsRepository; + constructor(_errorsRepository: ErrorsRepository); + listErrors(params: { + page?: number; + limit?: number; + platform?: string; + email?: string; + unknownFirst?: boolean; + }): Promise<{ + items: any[]; + total: number; + page: number; + limit: number; + hasMore: boolean; + }>; + listPlatforms(): Promise; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/errors/errors.service.js b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/errors/errors.service.js new file mode 100644 index 0000000000000000000000000000000000000000..1a5799a2023b09047146b893ff3e5484f63c12bc --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/errors/errors.service.js @@ -0,0 +1,23 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ErrorsService = void 0; +const tslib_1 = require("tslib"); +const common_1 = require("@nestjs/common"); +const errors_repository_1 = require("./errors.repository"); +let ErrorsService = class ErrorsService { + constructor(_errorsRepository) { + this._errorsRepository = _errorsRepository; + } + listErrors(params) { + return this._errorsRepository.listErrors(params); + } + listPlatforms() { + return this._errorsRepository.listPlatforms(); + } +}; +exports.ErrorsService = ErrorsService; +exports.ErrorsService = ErrorsService = tslib_1.__decorate([ + (0, common_1.Injectable)(), + tslib_1.__metadata("design:paramtypes", [errors_repository_1.ErrorsRepository]) +], ErrorsService); +//# sourceMappingURL=errors.service.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/errors/errors.service.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/errors/errors.service.js.map new file mode 100644 index 0000000000000000000000000000000000000000..bd51f76ff01edc6956e8ccf02ff8da4e62144aad --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/errors/errors.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"errors.service.js","sourceRoot":"","sources":["../../../../../../../../../libraries/nestjs-libraries/src/database/prisma/errors/errors.service.ts"],"names":[],"mappings":";;;;AAAA,2CAA4C;AAC5C,2DAAsG;AAG/F,IAAM,aAAa,GAAnB,MAAM,aAAa;IACxB,YAAoB,iBAAmC;QAAnC,sBAAiB,GAAjB,iBAAiB,CAAkB;IAAG,CAAC;IAE3D,UAAU,CAAC,MAMV;QACC,OAAO,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IACnD,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;IAChD,CAAC;CACF,CAAA;AAhBY,sCAAa;wBAAb,aAAa;IADzB,IAAA,mBAAU,GAAE;6CAE4B,oCAAgB;GAD5C,aAAa,CAgBzB"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/integrations/integration.repository.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/integrations/integration.repository.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..cef68b2d920cc51b92bc99ae3e068c771833589e --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/integrations/integration.repository.d.ts @@ -0,0 +1,457 @@ +import { PrismaRepository } from "../prisma.service"; +import { Integration } from '@prisma/client'; +import { IntegrationTimeDto } from "../../../dtos/integrations/integration.time.dto"; +import { PlugDto } from "../../../dtos/plugs/plug.dto"; +export declare class IntegrationRepository { + private _integration; + private _posts; + private _plugs; + private _exisingPlugData; + private _customers; + private _mentions; + private storage; + constructor(_integration: PrismaRepository<'integration'>, _posts: PrismaRepository<'post'>, _plugs: PrismaRepository<'plugs'>, _exisingPlugData: PrismaRepository<'exisingPlugData'>, _customers: PrismaRepository<'customer'>, _mentions: PrismaRepository<'mentions'>); + getMentions(platform: string, q: string): import(".prisma/client").Prisma.PrismaPromise<{ + name: string; + image: string; + username: string; + }[]>; + insertMentions(platform: string, mentions: { + name: string; + username: string; + image: string; + }[]): any[] | import(".prisma/client").Prisma.PrismaPromise; + checkPreviousConnections(org: string, id: string): Promise; + updateProviderSettings(org: string, id: string, settings: string): import(".prisma/client").Prisma.Prisma__IntegrationClient<{ + id: string; + name: string; + createdAt: Date; + updatedAt: Date | null; + deletedAt: Date | null; + organizationId: string; + disabled: boolean; + picture: string | null; + type: string; + internalId: string; + providerIdentifier: string; + token: string; + tokenExpiration: Date | null; + refreshToken: string | null; + profile: string | null; + inBetweenSteps: boolean; + refreshNeeded: boolean; + postingTimes: string; + customInstanceDetails: string | null; + customerId: string | null; + rootInternalId: string | null; + additionalSettings: string | null; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + setTimes(org: string, id: string, times: IntegrationTimeDto): Promise<{ + id: string; + }>; + getPlug(plugId: string): import(".prisma/client").Prisma.Prisma__PlugsClient<{ + integration: { + id: string; + name: string; + createdAt: Date; + updatedAt: Date | null; + deletedAt: Date | null; + organizationId: string; + disabled: boolean; + picture: string | null; + type: string; + internalId: string; + providerIdentifier: string; + token: string; + tokenExpiration: Date | null; + refreshToken: string | null; + profile: string | null; + inBetweenSteps: boolean; + refreshNeeded: boolean; + postingTimes: string; + customInstanceDetails: string | null; + customerId: string | null; + rootInternalId: string | null; + additionalSettings: string | null; + }; + } & { + id: string; + data: string; + organizationId: string; + activated: boolean; + integrationId: string; + plugFunction: string; + }, null, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + getPlugs(orgId: string, integrationId: string): Promise<({ + integration: { + id: string; + providerIdentifier: string; + }; + } & { + id: string; + data: string; + organizationId: string; + activated: boolean; + integrationId: string; + plugFunction: string; + })[]>; + updateIntegration(id: string, params: Partial): Promise<{ + id: string; + name: string; + createdAt: Date; + updatedAt: Date | null; + deletedAt: Date | null; + organizationId: string; + disabled: boolean; + picture: string | null; + type: string; + internalId: string; + providerIdentifier: string; + token: string; + tokenExpiration: Date | null; + refreshToken: string | null; + profile: string | null; + inBetweenSteps: boolean; + refreshNeeded: boolean; + postingTimes: string; + customInstanceDetails: string | null; + customerId: string | null; + rootInternalId: string | null; + additionalSettings: string | null; + }>; + disconnectChannel(org: string, id: string): import(".prisma/client").Prisma.Prisma__IntegrationClient<{ + id: string; + name: string; + createdAt: Date; + updatedAt: Date | null; + deletedAt: Date | null; + organizationId: string; + disabled: boolean; + picture: string | null; + type: string; + internalId: string; + providerIdentifier: string; + token: string; + tokenExpiration: Date | null; + refreshToken: string | null; + profile: string | null; + inBetweenSteps: boolean; + refreshNeeded: boolean; + postingTimes: string; + customInstanceDetails: string | null; + customerId: string | null; + rootInternalId: string | null; + additionalSettings: string | null; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + createOrUpdateIntegration(additionalSettings: { + title: string; + description: string; + type: 'checkbox' | 'text' | 'textarea'; + value: any; + regex?: string; + }[] | undefined, oneTimeToken: boolean, org: string, name: string, picture: string | undefined, type: 'article' | 'social', internalId: string, provider: string, token: string, refreshToken?: string, expiresIn?: number, username?: string, isBetweenSteps?: boolean, refresh?: string, timezone?: number, customInstanceDetails?: string): Promise<{ + id: string; + name: string; + createdAt: Date; + updatedAt: Date | null; + deletedAt: Date | null; + organizationId: string; + disabled: boolean; + picture: string | null; + type: string; + internalId: string; + providerIdentifier: string; + token: string; + tokenExpiration: Date | null; + refreshToken: string | null; + profile: string | null; + inBetweenSteps: boolean; + refreshNeeded: boolean; + postingTimes: string; + customInstanceDetails: string | null; + customerId: string | null; + rootInternalId: string | null; + additionalSettings: string | null; + }>; + needsToBeRefreshed(): import(".prisma/client").Prisma.PrismaPromise<{ + id: string; + name: string; + createdAt: Date; + updatedAt: Date | null; + deletedAt: Date | null; + organizationId: string; + disabled: boolean; + picture: string | null; + type: string; + internalId: string; + providerIdentifier: string; + token: string; + tokenExpiration: Date | null; + refreshToken: string | null; + profile: string | null; + inBetweenSteps: boolean; + refreshNeeded: boolean; + postingTimes: string; + customInstanceDetails: string | null; + customerId: string | null; + rootInternalId: string | null; + additionalSettings: string | null; + }[]>; + setBetweenRefreshSteps(id: string): Promise<{ + id: string; + name: string; + createdAt: Date; + updatedAt: Date | null; + deletedAt: Date | null; + organizationId: string; + disabled: boolean; + picture: string | null; + type: string; + internalId: string; + providerIdentifier: string; + token: string; + tokenExpiration: Date | null; + refreshToken: string | null; + profile: string | null; + inBetweenSteps: boolean; + refreshNeeded: boolean; + postingTimes: string; + customInstanceDetails: string | null; + customerId: string | null; + rootInternalId: string | null; + additionalSettings: string | null; + }>; + refreshNeeded(org: string, id: string): import(".prisma/client").Prisma.Prisma__IntegrationClient<{ + id: string; + name: string; + createdAt: Date; + updatedAt: Date | null; + deletedAt: Date | null; + organizationId: string; + disabled: boolean; + picture: string | null; + type: string; + internalId: string; + providerIdentifier: string; + token: string; + tokenExpiration: Date | null; + refreshToken: string | null; + profile: string | null; + inBetweenSteps: boolean; + refreshNeeded: boolean; + postingTimes: string; + customInstanceDetails: string | null; + customerId: string | null; + rootInternalId: string | null; + additionalSettings: string | null; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + updateNameAndUrl(id: string, name: string, url: string): import(".prisma/client").Prisma.Prisma__IntegrationClient<{ + id: string; + name: string; + createdAt: Date; + updatedAt: Date | null; + deletedAt: Date | null; + organizationId: string; + disabled: boolean; + picture: string | null; + type: string; + internalId: string; + providerIdentifier: string; + token: string; + tokenExpiration: Date | null; + refreshToken: string | null; + profile: string | null; + inBetweenSteps: boolean; + refreshNeeded: boolean; + postingTimes: string; + customInstanceDetails: string | null; + customerId: string | null; + rootInternalId: string | null; + additionalSettings: string | null; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + getIntegrationById(org: string, id: string): import(".prisma/client").Prisma.Prisma__IntegrationClient<{ + id: string; + name: string; + createdAt: Date; + updatedAt: Date | null; + deletedAt: Date | null; + organizationId: string; + disabled: boolean; + picture: string | null; + type: string; + internalId: string; + providerIdentifier: string; + token: string; + tokenExpiration: Date | null; + refreshToken: string | null; + profile: string | null; + inBetweenSteps: boolean; + refreshNeeded: boolean; + postingTimes: string; + customInstanceDetails: string | null; + customerId: string | null; + rootInternalId: string | null; + additionalSettings: string | null; + }, null, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + getIntegrationForOrder(id: string, order: string, user: string, org: string): Promise<{ + id: string; + name: string; + picture: string; + providerIdentifier: string; + inBetweenSteps: boolean; + }>; + updateOnCustomerName(org: string, id: string, name: string): Promise<{ + id: string; + name: string; + createdAt: Date; + updatedAt: Date | null; + deletedAt: Date | null; + organizationId: string; + disabled: boolean; + picture: string | null; + type: string; + internalId: string; + providerIdentifier: string; + token: string; + tokenExpiration: Date | null; + refreshToken: string | null; + profile: string | null; + inBetweenSteps: boolean; + refreshNeeded: boolean; + postingTimes: string; + customInstanceDetails: string | null; + customerId: string | null; + rootInternalId: string | null; + additionalSettings: string | null; + }>; + updateIntegrationGroup(org: string, id: string, group: string): import(".prisma/client").Prisma.Prisma__IntegrationClient<{ + id: string; + name: string; + createdAt: Date; + updatedAt: Date | null; + deletedAt: Date | null; + organizationId: string; + disabled: boolean; + picture: string | null; + type: string; + internalId: string; + providerIdentifier: string; + token: string; + tokenExpiration: Date | null; + refreshToken: string | null; + profile: string | null; + inBetweenSteps: boolean; + refreshNeeded: boolean; + postingTimes: string; + customInstanceDetails: string | null; + customerId: string | null; + rootInternalId: string | null; + additionalSettings: string | null; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + customers(orgId: string): import(".prisma/client").Prisma.PrismaPromise<{ + id: string; + name: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + orgId: string; + }[]>; + getIntegrationsList(org: string): import(".prisma/client").Prisma.PrismaPromise<({ + customer: { + id: string; + name: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + orgId: string; + }; + } & { + id: string; + name: string; + createdAt: Date; + updatedAt: Date | null; + deletedAt: Date | null; + organizationId: string; + disabled: boolean; + picture: string | null; + type: string; + internalId: string; + providerIdentifier: string; + token: string; + tokenExpiration: Date | null; + refreshToken: string | null; + profile: string | null; + inBetweenSteps: boolean; + refreshNeeded: boolean; + postingTimes: string; + customInstanceDetails: string | null; + customerId: string | null; + rootInternalId: string | null; + additionalSettings: string | null; + })[]>; + disableChannel(org: string, id: string): Promise; + enableChannel(org: string, id: string): Promise; + getPostsForChannel(org: string, id: string): import(".prisma/client").Prisma.GetPostGroupByPayload<{ + by: "group"[]; + where: { + organizationId: string; + integrationId: string; + deletedAt: null; + }; + }>; + deleteChannel(org: string, id: string): import(".prisma/client").Prisma.Prisma__IntegrationClient<{ + id: string; + name: string; + createdAt: Date; + updatedAt: Date | null; + deletedAt: Date | null; + organizationId: string; + disabled: boolean; + picture: string | null; + type: string; + internalId: string; + providerIdentifier: string; + token: string; + tokenExpiration: Date | null; + refreshToken: string | null; + profile: string | null; + inBetweenSteps: boolean; + refreshNeeded: boolean; + postingTimes: string; + customInstanceDetails: string | null; + customerId: string | null; + rootInternalId: string | null; + additionalSettings: string | null; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + checkForDeletedOnceAndUpdate(org: string, page: string): Promise; + disableIntegrations(org: string, totalChannels: number): Promise; + getPlugsByIntegrationId(org: string, id: string): import(".prisma/client").Prisma.PrismaPromise<{ + id: string; + data: string; + organizationId: string; + activated: boolean; + integrationId: string; + plugFunction: string; + }[]>; + createOrUpdatePlug(org: string, integrationId: string, body: PlugDto): import(".prisma/client").Prisma.Prisma__PlugsClient<{ + activated: boolean; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + changePlugActivation(orgId: string, plugId: string, status: boolean): import(".prisma/client").Prisma.Prisma__PlugsClient<{ + id: string; + data: string; + organizationId: string; + activated: boolean; + integrationId: string; + plugFunction: string; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + loadExisingData(methodName: string, integrationId: string, id: string[]): Promise<{ + id: string; + value: string; + integrationId: string; + methodName: string; + }[]>; + saveExisingData(methodName: string, integrationId: string, value: string[]): Promise; + getPostingTimes(orgId: string, integrationsId?: string): Promise<{ + postingTimes: string; + }[]>; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/integrations/integration.repository.js b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/integrations/integration.repository.js new file mode 100644 index 0000000000000000000000000000000000000000..86c265a28cfcb3e73ac95e9ed2c8361524e723ae --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/integrations/integration.repository.js @@ -0,0 +1,595 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.IntegrationRepository = void 0; +const tslib_1 = require("tslib"); +const prisma_service_1 = require("../prisma.service"); +const common_1 = require("@nestjs/common"); +const dayjs_1 = tslib_1.__importDefault(require("dayjs")); +const make_is_1 = require("../../../services/make.is"); +const upload_factory_1 = require("../../../upload/upload.factory"); +let IntegrationRepository = class IntegrationRepository { + constructor(_integration, _posts, _plugs, _exisingPlugData, _customers, _mentions) { + this._integration = _integration; + this._posts = _posts; + this._plugs = _plugs; + this._exisingPlugData = _exisingPlugData; + this._customers = _customers; + this._mentions = _mentions; + this.storage = upload_factory_1.UploadFactory.createStorage(); + } + getMentions(platform, q) { + return this._mentions.model.mentions.findMany({ + where: { + platform, + OR: [ + { + name: { + contains: q, + mode: 'insensitive', + }, + }, + { + username: { + contains: q, + mode: 'insensitive', + }, + }, + ], + }, + orderBy: { + name: 'asc', + }, + take: 100, + select: { + name: true, + username: true, + image: true, + }, + }); + } + insertMentions(platform, mentions) { + if (mentions.length === 0) { + return []; + } + return this._mentions.model.mentions.createMany({ + data: mentions.map((mention) => ({ + platform, + name: mention.name, + username: mention.username, + image: mention.image, + })), + skipDuplicates: true, + }); + } + async checkPreviousConnections(org, id) { + const findIt = await this._integration.model.integration.findMany({ + where: { + rootInternalId: id, + }, + select: { + organizationId: true, + id: true, + }, + }); + if (findIt.some((f) => f.organizationId === org)) { + return false; + } + return findIt.length > 0; + } + updateProviderSettings(org, id, settings) { + return this._integration.model.integration.update({ + where: { + id, + organizationId: org, + }, + data: { + additionalSettings: settings, + }, + }); + } + async setTimes(org, id, times) { + return this._integration.model.integration.update({ + select: { + id: true, + }, + where: { + id, + organizationId: org, + }, + data: { + postingTimes: JSON.stringify(times.time), + }, + }); + } + getPlug(plugId) { + return this._plugs.model.plugs.findFirst({ + where: { + id: plugId, + }, + include: { + integration: true, + }, + }); + } + async getPlugs(orgId, integrationId) { + return this._plugs.model.plugs.findMany({ + where: { + integrationId, + organizationId: orgId, + activated: true, + }, + include: { + integration: { + select: { + id: true, + providerIdentifier: true, + }, + }, + }, + }); + } + async updateIntegration(id, params) { + if (params.picture && + (params.picture.indexOf(process.env.CLOUDFLARE_BUCKET_URL) === -1 || + params.picture.indexOf(process.env.FRONTEND_URL) === -1)) { + params.picture = await this.storage.uploadSimple(params.picture); + } + const existing = await this._integration.model.integration.findUnique({ + where: { + organizationId_internalId: { + organizationId: params.organizationId, + internalId: params.internalId, + }, + }, + }); + if (existing) { + await this._posts.model.post.updateMany({ + where: { + integrationId: id, + }, + data: { + deletedAt: new Date(), + }, + }); + await this._integration.model.integration.update({ + where: { + id, + }, + data: { + internalId: `deleted_${params.internalId}_${(0, make_is_1.makeId)(10)}`, + deletedAt: new Date(), + }, + }); + } + return this._integration.model.integration.update({ + where: { + ...(existing ? { id: existing.id } : { id }), + }, + data: { + ...params, + disabled: false, + deletedAt: null, + }, + }); + } + disconnectChannel(org, id) { + return this._integration.model.integration.update({ + where: { + id, + organizationId: org, + }, + data: { + refreshNeeded: true, + }, + }); + } + async createOrUpdateIntegration(additionalSettings, oneTimeToken, org, name, picture, type, internalId, provider, token, refreshToken = '', expiresIn = 999999999, username, isBetweenSteps = false, refresh, timezone, customInstanceDetails) { + const postTimes = timezone + ? { + postingTimes: JSON.stringify([ + { time: 560 - timezone }, + { time: 850 - timezone }, + { time: 1140 - timezone }, + ]), + } + : {}; + const upsert = await this._integration.model.integration.upsert({ + where: { + organizationId_internalId: { + internalId, + organizationId: org, + }, + }, + create: { + type: type, + name, + providerIdentifier: provider, + token, + profile: username, + ...(picture ? { picture } : {}), + inBetweenSteps: isBetweenSteps, + refreshToken, + ...(expiresIn + ? { tokenExpiration: new Date(Date.now() + expiresIn * 1000) } + : {}), + internalId, + ...postTimes, + organizationId: org, + refreshNeeded: false, + rootInternalId: internalId, + ...(customInstanceDetails ? { customInstanceDetails } : {}), + additionalSettings: additionalSettings + ? JSON.stringify(additionalSettings) + : '[]', + }, + update: { + ...(additionalSettings + ? { additionalSettings: JSON.stringify(additionalSettings) } + : {}), + ...(customInstanceDetails ? { customInstanceDetails } : {}), + type: type, + ...(!refresh + ? { + inBetweenSteps: isBetweenSteps, + } + : {}), + ...(picture ? { picture } : {}), + profile: username, + providerIdentifier: provider, + token, + refreshToken, + ...(expiresIn + ? { tokenExpiration: new Date(Date.now() + expiresIn * 1000) } + : {}), + internalId, + organizationId: org, + deletedAt: null, + refreshNeeded: false, + }, + }); + if (oneTimeToken) { + const rootId = (await this._integration.model.integration.findFirst({ + where: { + organizationId: org, + internalId: internalId, + }, + }))?.rootInternalId || internalId; + await this._integration.model.integration.updateMany({ + where: { + id: { + not: upsert.id, + }, + rootInternalId: rootId, + }, + data: { + token, + refreshToken, + refreshNeeded: false, + ...(expiresIn + ? { tokenExpiration: new Date(Date.now() + expiresIn * 1000) } + : {}), + }, + }); + } + return upsert; + } + needsToBeRefreshed() { + return this._integration.model.integration.findMany({ + where: { + tokenExpiration: { + lte: (0, dayjs_1.default)().add(1, 'day').toDate(), + }, + inBetweenSteps: false, + deletedAt: null, + refreshNeeded: false, + }, + }); + } + async setBetweenRefreshSteps(id) { + return this._integration.model.integration.update({ + where: { + id, + }, + data: { + inBetweenSteps: true, + }, + }); + } + refreshNeeded(org, id) { + return this._integration.model.integration.update({ + where: { + id, + organizationId: org, + }, + data: { + refreshNeeded: true, + }, + }); + } + updateNameAndUrl(id, name, url) { + return this._integration.model.integration.update({ + where: { + id, + }, + data: { + ...(name ? { name } : {}), + ...(url ? { picture: url } : {}), + }, + }); + } + getIntegrationById(org, id) { + return this._integration.model.integration.findFirst({ + where: { + organizationId: org, + id, + }, + }); + } + async getIntegrationForOrder(id, order, user, org) { + const integration = await this._posts.model.post.findFirst({ + where: { + integrationId: id, + submittedForOrder: { + id: order, + messageGroup: { + OR: [ + { sellerId: user }, + { buyerId: user }, + { buyerOrganizationId: org }, + ], + }, + }, + }, + select: { + integration: { + select: { + id: true, + name: true, + picture: true, + inBetweenSteps: true, + providerIdentifier: true, + }, + }, + }, + }); + return integration?.integration; + } + async updateOnCustomerName(org, id, name) { + const customer = !name + ? undefined + : (await this._customers.model.customer.findFirst({ + where: { + orgId: org, + name, + }, + })) || + (await this._customers.model.customer.create({ + data: { + name, + orgId: org, + }, + })); + return this._integration.model.integration.update({ + where: { + id, + organizationId: org, + }, + data: { + customer: !customer + ? { disconnect: true } + : { + connect: { + id: customer.id, + }, + }, + }, + }); + } + updateIntegrationGroup(org, id, group) { + return this._integration.model.integration.update({ + where: { + id, + organizationId: org, + }, + data: !group + ? { + customer: { + disconnect: true, + }, + } + : { + customer: { + connect: { + id: group, + }, + }, + }, + }); + } + customers(orgId) { + return this._customers.model.customer.findMany({ + where: { + orgId, + deletedAt: null, + }, + }); + } + getIntegrationsList(org) { + return this._integration.model.integration.findMany({ + where: { + organizationId: org, + deletedAt: null, + }, + include: { + customer: true, + }, + }); + } + async disableChannel(org, id) { + await this._integration.model.integration.update({ + where: { + id, + organizationId: org, + }, + data: { + disabled: true, + }, + }); + } + async enableChannel(org, id) { + await this._integration.model.integration.update({ + where: { + id, + organizationId: org, + }, + data: { + disabled: false, + }, + }); + } + getPostsForChannel(org, id) { + return this._posts.model.post.groupBy({ + by: ['group'], + where: { + organizationId: org, + integrationId: id, + deletedAt: null, + }, + }); + } + deleteChannel(org, id) { + return this._integration.model.integration.update({ + where: { + id, + organizationId: org, + }, + data: { + deletedAt: new Date(), + }, + }); + } + async checkForDeletedOnceAndUpdate(org, page) { + return this._integration.model.integration.updateMany({ + where: { + organizationId: org, + internalId: page, + deletedAt: { + not: null, + }, + }, + data: { + internalId: (0, make_is_1.makeId)(10), + }, + }); + } + async disableIntegrations(org, totalChannels) { + const getChannels = await this._integration.model.integration.findMany({ + where: { + organizationId: org, + disabled: false, + deletedAt: null, + }, + take: totalChannels, + select: { + id: true, + }, + }); + for (const channel of getChannels) { + await this._integration.model.integration.update({ + where: { + id: channel.id, + }, + data: { + disabled: true, + }, + }); + } + } + getPlugsByIntegrationId(org, id) { + return this._plugs.model.plugs.findMany({ + where: { + organizationId: org, + integrationId: id, + }, + }); + } + createOrUpdatePlug(org, integrationId, body) { + return this._plugs.model.plugs.upsert({ + where: { + organizationId: org, + plugFunction_integrationId: { + integrationId, + plugFunction: body.func, + }, + }, + create: { + integrationId, + organizationId: org, + plugFunction: body.func, + data: JSON.stringify(body.fields), + activated: true, + }, + update: { + data: JSON.stringify(body.fields), + }, + select: { + activated: true, + }, + }); + } + changePlugActivation(orgId, plugId, status) { + return this._plugs.model.plugs.update({ + where: { + organizationId: orgId, + id: plugId, + }, + data: { + activated: !!status, + }, + }); + } + async loadExisingData(methodName, integrationId, id) { + return this._exisingPlugData.model.exisingPlugData.findMany({ + where: { + integrationId, + methodName, + value: { + in: id, + }, + }, + }); + } + async saveExisingData(methodName, integrationId, value) { + return this._exisingPlugData.model.exisingPlugData.createMany({ + data: value.map((p) => ({ + integrationId, + methodName, + value: p, + })), + }); + } + async getPostingTimes(orgId, integrationsId) { + return this._integration.model.integration.findMany({ + where: { + ...(integrationsId ? { id: integrationsId } : {}), + organizationId: orgId, + disabled: false, + deletedAt: null, + }, + select: { + postingTimes: true, + }, + }); + } +}; +exports.IntegrationRepository = IntegrationRepository; +exports.IntegrationRepository = IntegrationRepository = tslib_1.__decorate([ + (0, common_1.Injectable)(), + tslib_1.__metadata("design:paramtypes", [prisma_service_1.PrismaRepository, + prisma_service_1.PrismaRepository, + prisma_service_1.PrismaRepository, + prisma_service_1.PrismaRepository, + prisma_service_1.PrismaRepository, + prisma_service_1.PrismaRepository]) +], IntegrationRepository); +//# sourceMappingURL=integration.repository.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/integrations/integration.repository.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/integrations/integration.repository.js.map new file mode 100644 index 0000000000000000000000000000000000000000..3d4b86d62e3c8341a6aa3da0074d5ced509fb15c --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/integrations/integration.repository.js.map @@ -0,0 +1 @@ +{"version":3,"file":"integration.repository.js","sourceRoot":"","sources":["../../../../../../../../../libraries/nestjs-libraries/src/database/prisma/integrations/integration.repository.ts"],"names":[],"mappings":";;;;AAAA,sDAA4F;AAC5F,2CAA4C;AAC5C,0DAA0B;AAE1B,uDAAoE;AAEpE,mEAAgF;AAIzE,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IAEhC,YACU,YAA6C,EAC7C,MAAgC,EAChC,MAAiC,EACjC,gBAAqD,EACrD,UAAwC,EACxC,SAAuC;QALvC,iBAAY,GAAZ,YAAY,CAAiC;QAC7C,WAAM,GAAN,MAAM,CAA0B;QAChC,WAAM,GAAN,MAAM,CAA2B;QACjC,qBAAgB,GAAhB,gBAAgB,CAAqC;QACrD,eAAU,GAAV,UAAU,CAA8B;QACxC,cAAS,GAAT,SAAS,CAA8B;QAPzC,YAAO,GAAG,8BAAa,CAAC,aAAa,EAAE,CAAC;IAQ7C,CAAC;IAEJ,WAAW,CAAC,QAAgB,EAAE,CAAS;QACrC,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC5C,KAAK,EAAE;gBACL,QAAQ;gBACR,EAAE,EAAE;oBACF;wBACE,IAAI,EAAE;4BACJ,QAAQ,EAAE,CAAC;4BACX,IAAI,EAAE,aAAa;yBACpB;qBACF;oBACD;wBACE,QAAQ,EAAE;4BACR,QAAQ,EAAE,CAAC;4BACX,IAAI,EAAE,aAAa;yBACpB;qBACF;iBACF;aACF;YACD,OAAO,EAAE;gBACP,IAAI,EAAE,KAAK;aACZ;YACD,IAAI,EAAE,GAAG;YACT,MAAM,EAAE;gBACN,IAAI,EAAE,IAAI;gBACV,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,IAAI;aACZ;SACF,CAAC,CAAC;IACL,CAAC;IAED,cAAc,CACZ,QAAgB,EAChB,QAA6D;QAE7D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,EAAW,CAAC;QACrB,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC;YAC9C,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBAC/B,QAAQ;gBACR,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;aACrB,CAAC,CAAC;YACH,cAAc,EAAE,IAAI;SACrB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,wBAAwB,CAAC,GAAW,EAAE,EAAU;QACpD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC;YAChE,KAAK,EAAE;gBACL,cAAc,EAAE,EAAE;aACnB;YACD,MAAM,EAAE;gBACN,cAAc,EAAE,IAAI;gBACpB,EAAE,EAAE,IAAI;aACT;SACF,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,KAAK,GAAG,CAAC,EAAE,CAAC;YACjD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,sBAAsB,CAAC,GAAW,EAAE,EAAU,EAAE,QAAgB;QAC9D,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC;YAChD,KAAK,EAAE;gBACL,EAAE;gBACF,cAAc,EAAE,GAAG;aACpB;YACD,IAAI,EAAE;gBACJ,kBAAkB,EAAE,QAAQ;aAC7B;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,GAAW,EAAE,EAAU,EAAE,KAAyB;QAC/D,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC;YAChD,MAAM,EAAE;gBACN,EAAE,EAAE,IAAI;aACT;YACD,KAAK,EAAE;gBACL,EAAE;gBACF,cAAc,EAAE,GAAG;aACpB;YACD,IAAI,EAAE;gBACJ,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;aACzC;SACF,CAAC,CAAC;IACL,CAAC;IAED,OAAO,CAAC,MAAc;QACpB,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC;YACvC,KAAK,EAAE;gBACL,EAAE,EAAE,MAAM;aACX;YACD,OAAO,EAAE;gBACP,WAAW,EAAE,IAAI;aAClB;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,KAAa,EAAE,aAAqB;QACjD,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC;YACtC,KAAK,EAAE;gBACL,aAAa;gBACb,cAAc,EAAE,KAAK;gBACrB,SAAS,EAAE,IAAI;aAChB;YACD,OAAO,EAAE;gBACP,WAAW,EAAE;oBACX,MAAM,EAAE;wBACN,EAAE,EAAE,IAAI;wBACR,kBAAkB,EAAE,IAAI;qBACzB;iBACF;aACF;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,EAAU,EAAE,MAA4B;QAC9D,IACE,MAAM,CAAC,OAAO;YACd,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAsB,CAAC,KAAK,CAAC,CAAC;gBAChE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,YAAa,CAAC,KAAK,CAAC,CAAC,CAAC,EAC3D,CAAC;YACD,MAAM,CAAC,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACnE,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC;YACpE,KAAK,EAAE;gBACL,yBAAyB,EAAE;oBACzB,cAAc,EAAE,MAAM,CAAC,cAAe;oBACtC,UAAU,EAAE,MAAM,CAAC,UAAU;iBAC9B;aACF;SACF,CAAC,CAAC;QAEH,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;gBACtC,KAAK,EAAE;oBACL,aAAa,EAAE,EAAE;iBAClB;gBACD,IAAI,EAAE;oBACJ,SAAS,EAAE,IAAI,IAAI,EAAE;iBACtB;aACF,CAAC,CAAC;YAEH,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC;gBAC/C,KAAK,EAAE;oBACL,EAAE;iBACH;gBACD,IAAI,EAAE;oBACJ,UAAU,EAAE,WAAW,MAAM,CAAC,UAAU,IAAI,IAAA,gBAAM,EAAC,EAAE,CAAC,EAAE;oBACxD,SAAS,EAAE,IAAI,IAAI,EAAE;iBACtB;aACF,CAAC,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC;YAChD,KAAK,EAAE;gBACL,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC;aAC7C;YACD,IAAI,EAAE;gBACJ,GAAG,MAAM;gBACT,QAAQ,EAAE,KAAK;gBACf,SAAS,EAAE,IAAI;aAChB;SACF,CAAC,CAAC;IACL,CAAC;IAED,iBAAiB,CAAC,GAAW,EAAE,EAAU;QACvC,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC;YAChD,KAAK,EAAE;gBACL,EAAE;gBACF,cAAc,EAAE,GAAG;aACpB;YACD,IAAI,EAAE;gBACJ,aAAa,EAAE,IAAI;aACpB;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,yBAAyB,CAC7B,kBAQa,EACb,YAAqB,EACrB,GAAW,EACX,IAAY,EACZ,OAA2B,EAC3B,IAA0B,EAC1B,UAAkB,EAClB,QAAgB,EAChB,KAAa,EACb,YAAY,GAAG,EAAE,EACjB,SAAS,GAAG,SAAS,EACrB,QAAiB,EACjB,cAAc,GAAG,KAAK,EACtB,OAAgB,EAChB,QAAiB,EACjB,qBAA8B;QAE9B,MAAM,SAAS,GAAG,QAAQ;YACxB,CAAC,CAAC;gBACE,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC;oBAC3B,EAAE,IAAI,EAAE,GAAG,GAAG,QAAQ,EAAE;oBACxB,EAAE,IAAI,EAAE,GAAG,GAAG,QAAQ,EAAE;oBACxB,EAAE,IAAI,EAAE,IAAI,GAAG,QAAQ,EAAE;iBAC1B,CAAC;aACH;YACH,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC;YAC9D,KAAK,EAAE;gBACL,yBAAyB,EAAE;oBACzB,UAAU;oBACV,cAAc,EAAE,GAAG;iBACpB;aACF;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,IAAW;gBACjB,IAAI;gBACJ,kBAAkB,EAAE,QAAQ;gBAC5B,KAAK;gBACL,OAAO,EAAE,QAAQ;gBACjB,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/B,cAAc,EAAE,cAAc;gBAC9B,YAAY;gBACZ,GAAG,CAAC,SAAS;oBACX,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,IAAI,CAAC,EAAE;oBAC9D,CAAC,CAAC,EAAE,CAAC;gBACP,UAAU;gBACV,GAAG,SAAS;gBACZ,cAAc,EAAE,GAAG;gBACnB,aAAa,EAAE,KAAK;gBACpB,cAAc,EAAE,UAAU;gBAC1B,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,qBAAqB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3D,kBAAkB,EAAE,kBAAkB;oBACpC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC;oBACpC,CAAC,CAAC,IAAI;aACT;YACD,MAAM,EAAE;gBACN,GAAG,CAAC,kBAAkB;oBACpB,CAAC,CAAC,EAAE,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,EAAE;oBAC5D,CAAC,CAAC,EAAE,CAAC;gBACP,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,qBAAqB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3D,IAAI,EAAE,IAAW;gBACjB,GAAG,CAAC,CAAC,OAAO;oBACV,CAAC,CAAC;wBACE,cAAc,EAAE,cAAc;qBAC/B;oBACH,CAAC,CAAC,EAAE,CAAC;gBACP,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/B,OAAO,EAAE,QAAQ;gBACjB,kBAAkB,EAAE,QAAQ;gBAC5B,KAAK;gBACL,YAAY;gBACZ,GAAG,CAAC,SAAS;oBACX,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,IAAI,CAAC,EAAE;oBAC9D,CAAC,CAAC,EAAE,CAAC;gBACP,UAAU;gBACV,cAAc,EAAE,GAAG;gBACnB,SAAS,EAAE,IAAI;gBACf,aAAa,EAAE,KAAK;aACrB;SACF,CAAC,CAAC;QAEH,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,MAAM,GACV,CACE,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC;gBAClD,KAAK,EAAE;oBACL,cAAc,EAAE,GAAG;oBACnB,UAAU,EAAE,UAAU;iBACvB;aACF,CAAC,CACH,EAAE,cAAc,IAAI,UAAU,CAAC;YAElC,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC;gBACnD,KAAK,EAAE;oBACL,EAAE,EAAE;wBACF,GAAG,EAAE,MAAM,CAAC,EAAE;qBACf;oBACD,cAAc,EAAE,MAAM;iBACvB;gBACD,IAAI,EAAE;oBACJ,KAAK;oBACL,YAAY;oBACZ,aAAa,EAAE,KAAK;oBACpB,GAAG,CAAC,SAAS;wBACX,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,IAAI,CAAC,EAAE;wBAC9D,CAAC,CAAC,EAAE,CAAC;iBACR;aACF,CAAC,CAAC;QACL,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,kBAAkB;QAChB,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC;YAClD,KAAK,EAAE;gBACL,eAAe,EAAE;oBACf,GAAG,EAAE,IAAA,eAAK,GAAE,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE;iBACpC;gBACD,cAAc,EAAE,KAAK;gBACrB,SAAS,EAAE,IAAI;gBACf,aAAa,EAAE,KAAK;aACrB;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,EAAU;QACrC,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC;YAChD,KAAK,EAAE;gBACL,EAAE;aACH;YACD,IAAI,EAAE;gBACJ,cAAc,EAAE,IAAI;aACrB;SACF,CAAC,CAAC;IACL,CAAC;IACD,aAAa,CAAC,GAAW,EAAE,EAAU;QACnC,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC;YAChD,KAAK,EAAE;gBACL,EAAE;gBACF,cAAc,EAAE,GAAG;aACpB;YACD,IAAI,EAAE;gBACJ,aAAa,EAAE,IAAI;aACpB;SACF,CAAC,CAAC;IACL,CAAC;IAED,gBAAgB,CAAC,EAAU,EAAE,IAAY,EAAE,GAAW;QACpD,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC;YAChD,KAAK,EAAE;gBACL,EAAE;aACH;YACD,IAAI,EAAE;gBACJ,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACjC;SACF,CAAC,CAAC;IACL,CAAC;IAED,kBAAkB,CAAC,GAAW,EAAE,EAAU;QACxC,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC;YACnD,KAAK,EAAE;gBACL,cAAc,EAAE,GAAG;gBACnB,EAAE;aACH;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,sBAAsB,CAC1B,EAAU,EACV,KAAa,EACb,IAAY,EACZ,GAAW;QAEX,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;YACzD,KAAK,EAAE;gBACL,aAAa,EAAE,EAAE;gBACjB,iBAAiB,EAAE;oBACjB,EAAE,EAAE,KAAK;oBACT,YAAY,EAAE;wBACZ,EAAE,EAAE;4BACF,EAAE,QAAQ,EAAE,IAAI,EAAE;4BAClB,EAAE,OAAO,EAAE,IAAI,EAAE;4BACjB,EAAE,mBAAmB,EAAE,GAAG,EAAE;yBAC7B;qBACF;iBACF;aACF;YACD,MAAM,EAAE;gBACN,WAAW,EAAE;oBACX,MAAM,EAAE;wBACN,EAAE,EAAE,IAAI;wBACR,IAAI,EAAE,IAAI;wBACV,OAAO,EAAE,IAAI;wBACb,cAAc,EAAE,IAAI;wBACpB,kBAAkB,EAAE,IAAI;qBACzB;iBACF;aACF;SACF,CAAC,CAAC;QAEH,OAAO,WAAW,EAAE,WAAW,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,GAAW,EAAE,EAAU,EAAE,IAAY;QAC9D,MAAM,QAAQ,GAAG,CAAC,IAAI;YACpB,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAC9C,KAAK,EAAE;oBACL,KAAK,EAAE,GAAG;oBACV,IAAI;iBACL;aACF,CAAC,CAAC;gBACH,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;oBAC3C,IAAI,EAAE;wBACJ,IAAI;wBACJ,KAAK,EAAE,GAAG;qBACX;iBACF,CAAC,CAAC,CAAC;QAER,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC;YAChD,KAAK,EAAE;gBACL,EAAE;gBACF,cAAc,EAAE,GAAG;aACpB;YACD,IAAI,EAAE;gBACJ,QAAQ,EAAE,CAAC,QAAQ;oBACjB,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE;oBACtB,CAAC,CAAC;wBACE,OAAO,EAAE;4BACP,EAAE,EAAE,QAAQ,CAAC,EAAE;yBAChB;qBACF;aACN;SACF,CAAC,CAAC;IACL,CAAC;IAED,sBAAsB,CAAC,GAAW,EAAE,EAAU,EAAE,KAAa;QAC3D,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC;YAChD,KAAK,EAAE;gBACL,EAAE;gBACF,cAAc,EAAE,GAAG;aACpB;YACD,IAAI,EAAE,CAAC,KAAK;gBACV,CAAC,CAAC;oBACE,QAAQ,EAAE;wBACR,UAAU,EAAE,IAAI;qBACjB;iBACF;gBACH,CAAC,CAAC;oBACE,QAAQ,EAAE;wBACR,OAAO,EAAE;4BACP,EAAE,EAAE,KAAK;yBACV;qBACF;iBACF;SACN,CAAC,CAAC;IACL,CAAC;IAED,SAAS,CAAC,KAAa;QACrB,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC7C,KAAK,EAAE;gBACL,KAAK;gBACL,SAAS,EAAE,IAAI;aAChB;SACF,CAAC,CAAC;IACL,CAAC;IAED,mBAAmB,CAAC,GAAW;QAC7B,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC;YAClD,KAAK,EAAE;gBACL,cAAc,EAAE,GAAG;gBACnB,SAAS,EAAE,IAAI;aAChB;YACD,OAAO,EAAE;gBACP,QAAQ,EAAE,IAAI;aACf;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,GAAW,EAAE,EAAU;QAC1C,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC;YAC/C,KAAK,EAAE;gBACL,EAAE;gBACF,cAAc,EAAE,GAAG;aACpB;YACD,IAAI,EAAE;gBACJ,QAAQ,EAAE,IAAI;aACf;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,GAAW,EAAE,EAAU;QACzC,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC;YAC/C,KAAK,EAAE;gBACL,EAAE;gBACF,cAAc,EAAE,GAAG;aACpB;YACD,IAAI,EAAE;gBACJ,QAAQ,EAAE,KAAK;aAChB;SACF,CAAC,CAAC;IACL,CAAC;IAED,kBAAkB,CAAC,GAAW,EAAE,EAAU;QACxC,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;YACpC,EAAE,EAAE,CAAC,OAAO,CAAC;YACb,KAAK,EAAE;gBACL,cAAc,EAAE,GAAG;gBACnB,aAAa,EAAE,EAAE;gBACjB,SAAS,EAAE,IAAI;aAChB;SACF,CAAC,CAAC;IACL,CAAC;IAED,aAAa,CAAC,GAAW,EAAE,EAAU;QACnC,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC;YAChD,KAAK,EAAE;gBACL,EAAE;gBACF,cAAc,EAAE,GAAG;aACpB;YACD,IAAI,EAAE;gBACJ,SAAS,EAAE,IAAI,IAAI,EAAE;aACtB;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,4BAA4B,CAAC,GAAW,EAAE,IAAY;QAC1D,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC;YACpD,KAAK,EAAE;gBACL,cAAc,EAAE,GAAG;gBACnB,UAAU,EAAE,IAAI;gBAChB,SAAS,EAAE;oBACT,GAAG,EAAE,IAAI;iBACV;aACF;YACD,IAAI,EAAE;gBACJ,UAAU,EAAE,IAAA,gBAAM,EAAC,EAAE,CAAC;aACvB;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,GAAW,EAAE,aAAqB;QAC1D,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC;YACrE,KAAK,EAAE;gBACL,cAAc,EAAE,GAAG;gBACnB,QAAQ,EAAE,KAAK;gBACf,SAAS,EAAE,IAAI;aAChB;YACD,IAAI,EAAE,aAAa;YACnB,MAAM,EAAE;gBACN,EAAE,EAAE,IAAI;aACT;SACF,CAAC,CAAC;QAEH,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE,CAAC;YAClC,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC;gBAC/C,KAAK,EAAE;oBACL,EAAE,EAAE,OAAO,CAAC,EAAE;iBACf;gBACD,IAAI,EAAE;oBACJ,QAAQ,EAAE,IAAI;iBACf;aACF,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,uBAAuB,CAAC,GAAW,EAAE,EAAU;QAC7C,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC;YACtC,KAAK,EAAE;gBACL,cAAc,EAAE,GAAG;gBACnB,aAAa,EAAE,EAAE;aAClB;SACF,CAAC,CAAC;IACL,CAAC;IAED,kBAAkB,CAAC,GAAW,EAAE,aAAqB,EAAE,IAAa;QAClE,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;YACpC,KAAK,EAAE;gBACL,cAAc,EAAE,GAAG;gBACnB,0BAA0B,EAAE;oBAC1B,aAAa;oBACb,YAAY,EAAE,IAAI,CAAC,IAAI;iBACxB;aACF;YACD,MAAM,EAAE;gBACN,aAAa;gBACb,cAAc,EAAE,GAAG;gBACnB,YAAY,EAAE,IAAI,CAAC,IAAI;gBACvB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;gBACjC,SAAS,EAAE,IAAI;aAChB;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;aAClC;YACD,MAAM,EAAE;gBACN,SAAS,EAAE,IAAI;aAChB;SACF,CAAC,CAAC;IACL,CAAC;IAED,oBAAoB,CAAC,KAAa,EAAE,MAAc,EAAE,MAAe;QACjE,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;YACpC,KAAK,EAAE;gBACL,cAAc,EAAE,KAAK;gBACrB,EAAE,EAAE,MAAM;aACX;YACD,IAAI,EAAE;gBACJ,SAAS,EAAE,CAAC,CAAC,MAAM;aACpB;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,UAAkB,EAClB,aAAqB,EACrB,EAAY;QAEZ,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,eAAe,CAAC,QAAQ,CAAC;YAC1D,KAAK,EAAE;gBACL,aAAa;gBACb,UAAU;gBACV,KAAK,EAAE;oBACL,EAAE,EAAE,EAAE;iBACP;aACF;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,UAAkB,EAClB,aAAqB,EACrB,KAAe;QAEf,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,eAAe,CAAC,UAAU,CAAC;YAC5D,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACtB,aAAa;gBACb,UAAU;gBACV,KAAK,EAAE,CAAC;aACT,CAAC,CAAC;SACJ,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,KAAa,EAAE,cAAuB;QAC1D,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC;YAClD,KAAK,EAAE;gBACL,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjD,cAAc,EAAE,KAAK;gBACrB,QAAQ,EAAE,KAAK;gBACf,SAAS,EAAE,IAAI;aAChB;YACD,MAAM,EAAE;gBACN,YAAY,EAAE,IAAI;aACnB;SACF,CAAC,CAAC;IACL,CAAC;CACF,CAAA;AAvpBY,sDAAqB;gCAArB,qBAAqB;IADjC,IAAA,mBAAU,GAAE;6CAIa,iCAAgB;QACtB,iCAAgB;QAChB,iCAAgB;QACN,iCAAgB;QACtB,iCAAgB;QACjB,iCAAgB;GAR1B,qBAAqB,CAupBjC"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/integrations/integration.service.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/integrations/integration.service.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..e7b22cc6479096e5c45ed2665704f81335c50d01 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/integrations/integration.service.d.ts @@ -0,0 +1,367 @@ +import { IntegrationRepository } from "./integration.repository"; +import { IntegrationManager } from "../../../integrations/integration.manager"; +import { AnalyticsData, SocialProvider } from "../../../integrations/social/social.integrations.interface"; +import { Integration, Organization } from '@prisma/client'; +import { NotificationService } from "../notifications/notification.service"; +import { IntegrationTimeDto } from "../../../dtos/integrations/integration.time.dto"; +import { PlugDto } from "../../../dtos/plugs/plug.dto"; +import { AutopostRepository } from "../autopost/autopost.repository"; +import { RefreshIntegrationService } from "../../../integrations/refresh.integration.service"; +import { TemporalService } from 'nestjs-temporal-core'; +export declare class IntegrationService { + private _integrationRepository; + private _autopostsRepository; + private _integrationManager; + private _notificationService; + private _refreshIntegrationService; + private _temporalService; + private storage; + constructor(_integrationRepository: IntegrationRepository, _autopostsRepository: AutopostRepository, _integrationManager: IntegrationManager, _notificationService: NotificationService, _refreshIntegrationService: RefreshIntegrationService, _temporalService: TemporalService); + changeActiveCron(orgId: string): Promise; + getMentions(platform: string, q: string): import(".prisma/client").Prisma.PrismaPromise<{ + name: string; + image: string; + username: string; + }[]>; + insertMentions(platform: string, mentions: { + name: string; + username: string; + image: string; + }[]): any[] | import(".prisma/client").Prisma.PrismaPromise; + setTimes(orgId: string, integrationId: string, times: IntegrationTimeDto): Promise<{ + id: string; + }>; + updateProviderSettings(org: string, id: string, additionalSettings: string): import(".prisma/client").Prisma.Prisma__IntegrationClient<{ + id: string; + name: string; + createdAt: Date; + updatedAt: Date | null; + deletedAt: Date | null; + organizationId: string; + disabled: boolean; + picture: string | null; + type: string; + internalId: string; + providerIdentifier: string; + token: string; + tokenExpiration: Date | null; + refreshToken: string | null; + profile: string | null; + inBetweenSteps: boolean; + refreshNeeded: boolean; + postingTimes: string; + customInstanceDetails: string | null; + customerId: string | null; + rootInternalId: string | null; + additionalSettings: string | null; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + checkPreviousConnections(org: string, id: string): Promise; + createOrUpdateIntegration(additionalSettings: { + title: string; + description: string; + type: 'checkbox' | 'text' | 'textarea'; + value: any; + regex?: string; + }[] | undefined, oneTimeToken: boolean, org: string, name: string, picture: string | undefined, type: 'article' | 'social', internalId: string, provider: string, token: string, refreshToken?: string, expiresIn?: number, username?: string, isBetweenSteps?: boolean, refresh?: string, timezone?: number, customInstanceDetails?: string): Promise<{ + id: string; + name: string; + createdAt: Date; + updatedAt: Date | null; + deletedAt: Date | null; + organizationId: string; + disabled: boolean; + picture: string | null; + type: string; + internalId: string; + providerIdentifier: string; + token: string; + tokenExpiration: Date | null; + refreshToken: string | null; + profile: string | null; + inBetweenSteps: boolean; + refreshNeeded: boolean; + postingTimes: string; + customInstanceDetails: string | null; + customerId: string | null; + rootInternalId: string | null; + additionalSettings: string | null; + }>; + updateIntegrationGroup(org: string, id: string, group: string): import(".prisma/client").Prisma.Prisma__IntegrationClient<{ + id: string; + name: string; + createdAt: Date; + updatedAt: Date | null; + deletedAt: Date | null; + organizationId: string; + disabled: boolean; + picture: string | null; + type: string; + internalId: string; + providerIdentifier: string; + token: string; + tokenExpiration: Date | null; + refreshToken: string | null; + profile: string | null; + inBetweenSteps: boolean; + refreshNeeded: boolean; + postingTimes: string; + customInstanceDetails: string | null; + customerId: string | null; + rootInternalId: string | null; + additionalSettings: string | null; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + updateOnCustomerName(org: string, id: string, name: string): Promise<{ + id: string; + name: string; + createdAt: Date; + updatedAt: Date | null; + deletedAt: Date | null; + organizationId: string; + disabled: boolean; + picture: string | null; + type: string; + internalId: string; + providerIdentifier: string; + token: string; + tokenExpiration: Date | null; + refreshToken: string | null; + profile: string | null; + inBetweenSteps: boolean; + refreshNeeded: boolean; + postingTimes: string; + customInstanceDetails: string | null; + customerId: string | null; + rootInternalId: string | null; + additionalSettings: string | null; + }>; + getIntegrationsList(org: string): import(".prisma/client").Prisma.PrismaPromise<({ + customer: { + id: string; + name: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + orgId: string; + }; + } & { + id: string; + name: string; + createdAt: Date; + updatedAt: Date | null; + deletedAt: Date | null; + organizationId: string; + disabled: boolean; + picture: string | null; + type: string; + internalId: string; + providerIdentifier: string; + token: string; + tokenExpiration: Date | null; + refreshToken: string | null; + profile: string | null; + inBetweenSteps: boolean; + refreshNeeded: boolean; + postingTimes: string; + customInstanceDetails: string | null; + customerId: string | null; + rootInternalId: string | null; + additionalSettings: string | null; + })[]>; + getIntegrationForOrder(id: string, order: string, user: string, org: string): Promise<{ + id: string; + name: string; + picture: string; + providerIdentifier: string; + inBetweenSteps: boolean; + }>; + updateNameAndUrl(id: string, name: string, url: string): import(".prisma/client").Prisma.Prisma__IntegrationClient<{ + id: string; + name: string; + createdAt: Date; + updatedAt: Date | null; + deletedAt: Date | null; + organizationId: string; + disabled: boolean; + picture: string | null; + type: string; + internalId: string; + providerIdentifier: string; + token: string; + tokenExpiration: Date | null; + refreshToken: string | null; + profile: string | null; + inBetweenSteps: boolean; + refreshNeeded: boolean; + postingTimes: string; + customInstanceDetails: string | null; + customerId: string | null; + rootInternalId: string | null; + additionalSettings: string | null; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + getIntegrationById(org: string, id: string): import(".prisma/client").Prisma.Prisma__IntegrationClient<{ + id: string; + name: string; + createdAt: Date; + updatedAt: Date | null; + deletedAt: Date | null; + organizationId: string; + disabled: boolean; + picture: string | null; + type: string; + internalId: string; + providerIdentifier: string; + token: string; + tokenExpiration: Date | null; + refreshToken: string | null; + profile: string | null; + inBetweenSteps: boolean; + refreshNeeded: boolean; + postingTimes: string; + customInstanceDetails: string | null; + customerId: string | null; + rootInternalId: string | null; + additionalSettings: string | null; + }, null, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + refreshToken(provider: SocialProvider, refresh: string): Promise; + disconnectChannel(orgId: string, integration: Integration): Promise; + informAboutRefreshError(orgId: string, integration: Integration, err?: string): Promise; + refreshNeeded(org: string, id: string): Promise<{ + id: string; + name: string; + createdAt: Date; + updatedAt: Date | null; + deletedAt: Date | null; + organizationId: string; + disabled: boolean; + picture: string | null; + type: string; + internalId: string; + providerIdentifier: string; + token: string; + tokenExpiration: Date | null; + refreshToken: string | null; + profile: string | null; + inBetweenSteps: boolean; + refreshNeeded: boolean; + postingTimes: string; + customInstanceDetails: string | null; + customerId: string | null; + rootInternalId: string | null; + additionalSettings: string | null; + }>; + setBetweenRefreshSteps(id: string): Promise<{ + id: string; + name: string; + createdAt: Date; + updatedAt: Date | null; + deletedAt: Date | null; + organizationId: string; + disabled: boolean; + picture: string | null; + type: string; + internalId: string; + providerIdentifier: string; + token: string; + tokenExpiration: Date | null; + refreshToken: string | null; + profile: string | null; + inBetweenSteps: boolean; + refreshNeeded: boolean; + postingTimes: string; + customInstanceDetails: string | null; + customerId: string | null; + rootInternalId: string | null; + additionalSettings: string | null; + }>; + refreshTokens(): Promise; + disableChannel(org: string, id: string): Promise; + enableChannel(org: string, totalChannels: number, id: string): Promise; + getPostsForChannel(org: string, id: string): Promise<(import(".prisma/client").Prisma.PickEnumerable & {})[]>; + deleteChannel(org: string, id: string): Promise<{ + id: string; + name: string; + createdAt: Date; + updatedAt: Date | null; + deletedAt: Date | null; + organizationId: string; + disabled: boolean; + picture: string | null; + type: string; + internalId: string; + providerIdentifier: string; + token: string; + tokenExpiration: Date | null; + refreshToken: string | null; + profile: string | null; + inBetweenSteps: boolean; + refreshNeeded: boolean; + postingTimes: string; + customInstanceDetails: string | null; + customerId: string | null; + rootInternalId: string | null; + additionalSettings: string | null; + }>; + disableIntegrations(org: string, totalChannels: number): Promise; + checkForDeletedOnceAndUpdate(org: string, page: string): Promise; + saveProviderPage(org: string, id: string, data: any): Promise<{ + success: boolean; + }>; + checkAnalytics(org: Organization, integration: string, date: string, forceRefresh?: boolean): Promise; + customers(orgId: string): import(".prisma/client").Prisma.PrismaPromise<{ + id: string; + name: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + orgId: string; + }[]>; + getPlugsByIntegrationId(org: string, integrationId: string): import(".prisma/client").Prisma.PrismaPromise<{ + id: string; + data: string; + organizationId: string; + activated: boolean; + integrationId: string; + plugFunction: string; + }[]>; + processInternalPlug(data: { + post: string; + originalIntegration: string; + integration: string; + plugName: string; + orgId: string; + delay: number; + information: any; + }, forceRefresh?: boolean): Promise; + processPlugs(data: { + plugId: string; + postId: string; + delay: number; + totalRuns: number; + currentRun: number; + }): Promise; + createOrUpdatePlug(orgId: string, integrationId: string, body: PlugDto): Promise<{ + activated: boolean; + }>; + changePlugActivation(orgId: string, plugId: string, status: boolean): Promise<{ + id: string; + }>; + getPlugs(orgId: string, integrationId: string): Promise<({ + integration: { + id: string; + providerIdentifier: string; + }; + } & { + id: string; + data: string; + organizationId: string; + activated: boolean; + integrationId: string; + plugFunction: string; + })[]>; + loadExisingData(methodName: string, integrationId: string, id: string[]): Promise; + findFreeDateTime(orgId: string, integrationsId?: string): Promise; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/integrations/integration.service.js b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/integrations/integration.service.js new file mode 100644 index 0000000000000000000000000000000000000000..b8e594456e4a92428df568d700e436e20b4d1b77 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/integrations/integration.service.js @@ -0,0 +1,294 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.IntegrationService = void 0; +const tslib_1 = require("tslib"); +const common_1 = require("@nestjs/common"); +const integration_repository_1 = require("./integration.repository"); +const integration_manager_1 = require("../../../integrations/integration.manager"); +const notification_service_1 = require("../notifications/notification.service"); +const dayjs_1 = tslib_1.__importDefault(require("dayjs")); +const timer_1 = require("../../../../../helpers/src/utils/timer"); +const redis_service_1 = require("../../../redis/redis.service"); +const social_abstract_1 = require("../../../integrations/social.abstract"); +const upload_factory_1 = require("../../../upload/upload.factory"); +const lodash_1 = require("lodash"); +const utc_1 = tslib_1.__importDefault(require("dayjs/plugin/utc")); +const autopost_repository_1 = require("../autopost/autopost.repository"); +const refresh_integration_service_1 = require("../../../integrations/refresh.integration.service"); +const nestjs_temporal_core_1 = require("nestjs-temporal-core"); +dayjs_1.default.extend(utc_1.default); +let IntegrationService = class IntegrationService { + constructor(_integrationRepository, _autopostsRepository, _integrationManager, _notificationService, _refreshIntegrationService, _temporalService) { + this._integrationRepository = _integrationRepository; + this._autopostsRepository = _autopostsRepository; + this._integrationManager = _integrationManager; + this._notificationService = _notificationService; + this._refreshIntegrationService = _refreshIntegrationService; + this._temporalService = _temporalService; + this.storage = upload_factory_1.UploadFactory.createStorage(); + } + async changeActiveCron(orgId) { + const data = await this._autopostsRepository.getAutoposts(orgId); + for (const item of data.filter((f) => f.active)) { + try { + await this._temporalService.terminateWorkflow(`autopost-${item.id}`); + } + catch (err) { } + } + return true; + } + getMentions(platform, q) { + return this._integrationRepository.getMentions(platform, q); + } + insertMentions(platform, mentions) { + return this._integrationRepository.insertMentions(platform, mentions); + } + async setTimes(orgId, integrationId, times) { + return this._integrationRepository.setTimes(orgId, integrationId, times); + } + updateProviderSettings(org, id, additionalSettings) { + return this._integrationRepository.updateProviderSettings(org, id, additionalSettings); + } + checkPreviousConnections(org, id) { + return this._integrationRepository.checkPreviousConnections(org, id); + } + async createOrUpdateIntegration(additionalSettings, oneTimeToken, org, name, picture, type, internalId, provider, token, refreshToken = '', expiresIn, username, isBetweenSteps = false, refresh, timezone, customInstanceDetails) { + const uploadedPicture = picture + ? picture?.indexOf('imagedelivery.net') > -1 + ? picture + : await this.storage.uploadSimple(picture) + : undefined; + return this._integrationRepository.createOrUpdateIntegration(additionalSettings, oneTimeToken, org, name, uploadedPicture, type, internalId, provider, token, refreshToken, expiresIn, username, isBetweenSteps, refresh, timezone, customInstanceDetails); + } + updateIntegrationGroup(org, id, group) { + return this._integrationRepository.updateIntegrationGroup(org, id, group); + } + updateOnCustomerName(org, id, name) { + return this._integrationRepository.updateOnCustomerName(org, id, name); + } + getIntegrationsList(org) { + return this._integrationRepository.getIntegrationsList(org); + } + getIntegrationForOrder(id, order, user, org) { + return this._integrationRepository.getIntegrationForOrder(id, order, user, org); + } + updateNameAndUrl(id, name, url) { + return this._integrationRepository.updateNameAndUrl(id, name, url); + } + getIntegrationById(org, id) { + return this._integrationRepository.getIntegrationById(org, id); + } + async refreshToken(provider, refresh) { + try { + const { refreshToken, accessToken, expiresIn } = await provider.refreshToken(refresh); + if (!refreshToken || !accessToken || !expiresIn) { + return false; + } + return { refreshToken, accessToken, expiresIn }; + } + catch (e) { + return false; + } + } + async disconnectChannel(orgId, integration) { + await this._integrationRepository.disconnectChannel(orgId, integration.id); + await this.informAboutRefreshError(orgId, integration); + } + async informAboutRefreshError(orgId, integration, err = '') { + await this._notificationService.inAppNotification(orgId, `Could not refresh your ${integration.providerIdentifier} channel ${err}`, `Could not refresh your ${integration.providerIdentifier} channel ${err}. Please go back to the system and connect it again ${process.env.FRONTEND_URL}/launches`, true, false, 'info'); + } + async refreshNeeded(org, id) { + return this._integrationRepository.refreshNeeded(org, id); + } + async setBetweenRefreshSteps(id) { + return this._integrationRepository.setBetweenRefreshSteps(id); + } + async refreshTokens() { + const integrations = await this._integrationRepository.needsToBeRefreshed(); + for (const integration of integrations) { + const provider = this._integrationManager.getSocialIntegration(integration.providerIdentifier); + const data = await this.refreshToken(provider, integration.refreshToken); + if (!data) { + await this.informAboutRefreshError(integration.organizationId, integration); + await this._integrationRepository.refreshNeeded(integration.organizationId, integration.id); + return; + } + const { refreshToken, accessToken, expiresIn } = data; + await this.createOrUpdateIntegration(undefined, !!provider.oneTimeToken, integration.organizationId, integration.name, undefined, 'social', integration.internalId, integration.providerIdentifier, accessToken, refreshToken, expiresIn); + } + } + async disableChannel(org, id) { + return this._integrationRepository.disableChannel(org, id); + } + async enableChannel(org, totalChannels, id) { + const integrations = (await this._integrationRepository.getIntegrationsList(org)).filter((f) => !f.disabled); + if (!!process.env.STRIPE_PUBLISHABLE_KEY && + integrations.length >= totalChannels) { + throw new Error('You have reached the maximum number of channels'); + } + return this._integrationRepository.enableChannel(org, id); + } + async getPostsForChannel(org, id) { + return this._integrationRepository.getPostsForChannel(org, id); + } + async deleteChannel(org, id) { + return this._integrationRepository.deleteChannel(org, id); + } + async disableIntegrations(org, totalChannels) { + return this._integrationRepository.disableIntegrations(org, totalChannels); + } + async checkForDeletedOnceAndUpdate(org, page) { + return this._integrationRepository.checkForDeletedOnceAndUpdate(org, page); + } + async saveProviderPage(org, id, data) { + const getIntegration = await this._integrationRepository.getIntegrationById(org, id); + if (!getIntegration) { + throw new common_1.HttpException('Integration not found', common_1.HttpStatus.NOT_FOUND); + } + if (!getIntegration.inBetweenSteps) { + throw new common_1.HttpException('Invalid request', common_1.HttpStatus.BAD_REQUEST); + } + const provider = this._integrationManager.getSocialIntegration(getIntegration.providerIdentifier); + if (!provider.fetchPageInformation) { + throw new common_1.HttpException('Provider does not support page selection', common_1.HttpStatus.BAD_REQUEST); + } + const getIntegrationInformation = await provider.fetchPageInformation(getIntegration.token, data); + await this.checkForDeletedOnceAndUpdate(org, String(getIntegrationInformation.id)); + await this._integrationRepository.updateIntegration(id, { + picture: getIntegrationInformation.picture, + internalId: String(getIntegrationInformation.id), + organizationId: org, + name: getIntegrationInformation.name, + inBetweenSteps: false, + token: getIntegrationInformation.access_token, + profile: getIntegrationInformation.username, + }); + return { success: true }; + } + async checkAnalytics(org, integration, date, forceRefresh = false) { + const getIntegration = await this.getIntegrationById(org.id, integration); + if (!getIntegration) { + throw new Error('Invalid integration'); + } + if (getIntegration.type !== 'social') { + return []; + } + const integrationProvider = this._integrationManager.getSocialIntegration(getIntegration.providerIdentifier); + if ((0, dayjs_1.default)(getIntegration?.tokenExpiration).isBefore((0, dayjs_1.default)()) || + forceRefresh) { + const data = await this._refreshIntegrationService.refresh(getIntegration); + if (!data) { + return []; + } + const { accessToken } = data; + if (accessToken) { + getIntegration.token = accessToken; + if (integrationProvider.refreshWait) { + await (0, timer_1.timer)(10000); + } + } + else { + await this.disconnectChannel(org.id, getIntegration); + return []; + } + } + const getIntegrationData = await redis_service_1.ioRedis.get(`integration:${org.id}:${integration}:${date}`); + if (getIntegrationData) { + return JSON.parse(getIntegrationData); + } + if (integrationProvider.analytics) { + try { + const loadAnalytics = await integrationProvider.analytics(getIntegration.internalId, getIntegration.token, +date); + await redis_service_1.ioRedis.set(`integration:${org.id}:${integration}:${date}`, JSON.stringify(loadAnalytics), 'EX', !process.env.NODE_ENV || process.env.NODE_ENV === 'development' + ? 1 + : 3600); + return loadAnalytics; + } + catch (e) { + if (e instanceof social_abstract_1.RefreshToken) { + return this.checkAnalytics(org, integration, date, true); + } + } + } + return []; + } + customers(orgId) { + return this._integrationRepository.customers(orgId); + } + getPlugsByIntegrationId(org, integrationId) { + return this._integrationRepository.getPlugsByIntegrationId(org, integrationId); + } + async processInternalPlug(data, forceRefresh = false) { + const originalIntegration = await this._integrationRepository.getIntegrationById(data.orgId, data.originalIntegration); + const getIntegration = await this._integrationRepository.getIntegrationById(data.orgId, data.integration); + if (!getIntegration || !originalIntegration) { + return; + } + const getAllInternalPlugs = this._integrationManager + .getInternalPlugs(getIntegration.providerIdentifier) + .internalPlugs.find((p) => p.identifier === data.plugName); + if (!getAllInternalPlugs) { + return; + } + const getSocialIntegration = this._integrationManager.getSocialIntegration(getIntegration.providerIdentifier); + await getSocialIntegration?.[getAllInternalPlugs.methodName]?.(getIntegration, originalIntegration, data.post, data.information); + return; + } + async processPlugs(data) { + const getPlugById = await this._integrationRepository.getPlug(data.plugId); + if (!getPlugById) { + return true; + } + const integration = this._integrationManager.getSocialIntegration(getPlugById.integration.providerIdentifier); + const process = await integration[getPlugById.plugFunction](getPlugById.integration, data.postId, JSON.parse(getPlugById.data).reduce((all, current) => { + all[current.name] = current.value; + return all; + }, {})); + if (process) { + return true; + } + if (data.totalRuns === data.currentRun) { + return true; + } + return false; + } + async createOrUpdatePlug(orgId, integrationId, body) { + const { activated } = await this._integrationRepository.createOrUpdatePlug(orgId, integrationId, body); + return { + activated, + }; + } + async changePlugActivation(orgId, plugId, status) { + const { id, integrationId, plugFunction } = await this._integrationRepository.changePlugActivation(orgId, plugId, status); + return { id }; + } + async getPlugs(orgId, integrationId) { + return this._integrationRepository.getPlugs(orgId, integrationId); + } + async loadExisingData(methodName, integrationId, id) { + const exisingData = await this._integrationRepository.loadExisingData(methodName, integrationId, id); + const loadOnlyIds = exisingData.map((p) => p.value); + return (0, lodash_1.difference)(id, loadOnlyIds); + } + async findFreeDateTime(orgId, integrationsId) { + const findTimes = await this._integrationRepository.getPostingTimes(orgId, integrationsId); + return (0, lodash_1.uniq)(findTimes.reduce((all, current) => { + return [ + ...all, + ...JSON.parse(current.postingTimes).map((p) => p.time), + ]; + }, [])); + } +}; +exports.IntegrationService = IntegrationService; +exports.IntegrationService = IntegrationService = tslib_1.__decorate([ + (0, common_1.Injectable)(), + tslib_1.__param(4, (0, common_1.Inject)((0, common_1.forwardRef)(() => refresh_integration_service_1.RefreshIntegrationService))), + tslib_1.__metadata("design:paramtypes", [integration_repository_1.IntegrationRepository, + autopost_repository_1.AutopostRepository, + integration_manager_1.IntegrationManager, + notification_service_1.NotificationService, + refresh_integration_service_1.RefreshIntegrationService, + nestjs_temporal_core_1.TemporalService]) +], IntegrationService); +//# sourceMappingURL=integration.service.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/integrations/integration.service.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/integrations/integration.service.js.map new file mode 100644 index 0000000000000000000000000000000000000000..ddc3f1910008eff2545f1a532607efc7756fc731 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/integrations/integration.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"integration.service.js","sourceRoot":"","sources":["../../../../../../../../../libraries/nestjs-libraries/src/database/prisma/integrations/integration.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/media/media.repository.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/media/media.repository.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..7d1be503290f010f9ad5d221926e1196d067e812 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/media/media.repository.d.ts @@ -0,0 +1,65 @@ +import { PrismaRepository } from "../prisma.service"; +import { SaveMediaInformationDto } from "../../../dtos/media/save.media.information.dto"; +export declare class MediaRepository { + private _media; + constructor(_media: PrismaRepository<'media'>); + saveFile(org: string, fileName: string, filePath: string, originalName?: string): import(".prisma/client").Prisma.Prisma__MediaClient<{ + id: string; + name: string; + originalName: string; + path: string; + thumbnail: string; + alt: string; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + getMediaById(id: string): import(".prisma/client").Prisma.Prisma__MediaClient<{ + id: string; + name: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + originalName: string | null; + path: string; + fileSize: number; + type: string; + thumbnail: string | null; + alt: string | null; + thumbnailTimestamp: number | null; + }, null, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + deleteMedia(org: string, id: string): import(".prisma/client").Prisma.Prisma__MediaClient<{ + id: string; + name: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + originalName: string | null; + path: string; + fileSize: number; + type: string; + thumbnail: string | null; + alt: string | null; + thumbnailTimestamp: number | null; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + saveMediaInformation(org: string, data: SaveMediaInformationDto): import(".prisma/client").Prisma.Prisma__MediaClient<{ + id: string; + name: string; + originalName: string; + path: string; + thumbnail: string; + alt: string; + thumbnailTimestamp: number; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + getMedia(org: string, page: number, search?: string): Promise<{ + pages: number; + results: { + id: string; + name: string; + originalName: string; + path: string; + thumbnail: string; + alt: string; + thumbnailTimestamp: number; + }[]; + }>; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/media/media.repository.js b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/media/media.repository.js new file mode 100644 index 0000000000000000000000000000000000000000..23f7efbb6d6781221fe2ef4b08a599dad6d54268 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/media/media.repository.js @@ -0,0 +1,126 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.MediaRepository = void 0; +const tslib_1 = require("tslib"); +const prisma_service_1 = require("../prisma.service"); +const common_1 = require("@nestjs/common"); +let MediaRepository = class MediaRepository { + constructor(_media) { + this._media = _media; + } + saveFile(org, fileName, filePath, originalName) { + return this._media.model.media.create({ + data: { + organization: { + connect: { + id: org, + }, + }, + name: fileName, + path: filePath, + originalName: originalName || null, + }, + select: { + id: true, + name: true, + originalName: true, + path: true, + thumbnail: true, + alt: true, + }, + }); + } + getMediaById(id) { + return this._media.model.media.findUnique({ + where: { + id, + }, + }); + } + deleteMedia(org, id) { + return this._media.model.media.update({ + where: { + id, + organizationId: org, + }, + data: { + deletedAt: new Date(), + }, + }); + } + saveMediaInformation(org, data) { + return this._media.model.media.update({ + where: { + id: data.id, + organizationId: org, + }, + data: { + alt: data.alt, + thumbnail: data.thumbnail, + thumbnailTimestamp: data.thumbnailTimestamp, + }, + select: { + id: true, + name: true, + originalName: true, + alt: true, + thumbnail: true, + path: true, + thumbnailTimestamp: true, + }, + }); + } + async getMedia(org, page, search) { + const pageNum = (page || 1) - 1; + const trimmedSearch = search?.trim(); + const searchFilter = trimmedSearch + ? { + originalName: { + contains: trimmedSearch, + mode: 'insensitive', + }, + } + : {}; + const query = { + where: { + organization: { + id: org, + }, + deletedAt: null, + ...searchFilter, + }, + }; + const pages = Math.ceil((await this._media.model.media.count(query)) / 18); + const results = await this._media.model.media.findMany({ + where: { + organizationId: org, + deletedAt: null, + ...searchFilter, + }, + orderBy: { + createdAt: 'desc', + }, + select: { + id: true, + name: true, + originalName: true, + path: true, + thumbnail: true, + alt: true, + thumbnailTimestamp: true, + }, + skip: pageNum * 18, + take: 18, + }); + return { + pages, + results, + }; + } +}; +exports.MediaRepository = MediaRepository; +exports.MediaRepository = MediaRepository = tslib_1.__decorate([ + (0, common_1.Injectable)(), + tslib_1.__metadata("design:paramtypes", [prisma_service_1.PrismaRepository]) +], MediaRepository); +//# sourceMappingURL=media.repository.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/media/media.repository.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/media/media.repository.js.map new file mode 100644 index 0000000000000000000000000000000000000000..1e38d1e65898ad870f2466f3ca98ebd46942c1e8 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/media/media.repository.js.map @@ -0,0 +1 @@ +{"version":3,"file":"media.repository.js","sourceRoot":"","sources":["../../../../../../../../../libraries/nestjs-libraries/src/database/prisma/media/media.repository.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/media/media.service.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/media/media.service.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..1822cbcd771cf80a2bff1476d040d10c70c6dec7 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/media/media.service.d.ts @@ -0,0 +1,98 @@ +import { MediaRepository } from "./media.repository"; +import { OpenaiService } from "../../../openai/openai.service"; +import { SubscriptionService } from "../subscriptions/subscription.service"; +import { Organization } from '@prisma/client'; +import { SaveMediaInformationDto } from "../../../dtos/media/save.media.information.dto"; +import { VideoManager } from "../../../videos/video.manager"; +import { VideoDto } from "../../../dtos/videos/video.dto"; +export declare class MediaService { + private _mediaRepository; + private _openAi; + private _subscriptionService; + private _videoManager; + private storage; + constructor(_mediaRepository: MediaRepository, _openAi: OpenaiService, _subscriptionService: SubscriptionService, _videoManager: VideoManager); + deleteMedia(org: string, id: string): Promise<{ + id: string; + name: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + originalName: string | null; + path: string; + fileSize: number; + type: string; + thumbnail: string | null; + alt: string | null; + thumbnailTimestamp: number | null; + }>; + getMediaById(id: string): import(".prisma/client").Prisma.Prisma__MediaClient<{ + id: string; + name: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + originalName: string | null; + path: string; + fileSize: number; + type: string; + thumbnail: string | null; + alt: string | null; + thumbnailTimestamp: number | null; + }, null, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + generateImage(prompt: string, org: Organization, generatePromptFirst?: boolean): Promise; + saveFile(org: string, fileName: string, filePath: string, originalName?: string): import(".prisma/client").Prisma.Prisma__MediaClient<{ + id: string; + name: string; + originalName: string; + path: string; + thumbnail: string; + alt: string; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + getMedia(org: string, page: number, search?: string): Promise<{ + pages: number; + results: { + id: string; + name: string; + originalName: string; + path: string; + thumbnail: string; + alt: string; + thumbnailTimestamp: number; + }[]; + }>; + saveMediaInformation(org: string, data: SaveMediaInformationDto): import(".prisma/client").Prisma.Prisma__MediaClient<{ + id: string; + name: string; + originalName: string; + path: string; + thumbnail: string; + alt: string; + thumbnailTimestamp: number; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + getVideoOptions(): { + identifier: string; + title: string; + dto: any; + description: string; + target: import("../../../videos/video.interface").VideoAbstract; + tools: { + functionName: string; + output: string; + }[]; + placement: string; + trial: boolean; + }[]; + generateVideoAllowed(org: Organization, type: string): Promise; + generateVideo(org: Organization, body: VideoDto): Promise<{ + id: string; + name: string; + originalName: string; + path: string; + thumbnail: string; + alt: string; + }>; + videoFunction(identifier: string, functionName: string, body: any): Promise; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/media/media.service.js b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/media/media.service.js new file mode 100644 index 0000000000000000000000000000000000000000..60ad24acffde3f5ec04bfe55287c725e723500ba --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/media/media.service.js @@ -0,0 +1,114 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.MediaService = void 0; +const tslib_1 = require("tslib"); +const common_1 = require("@nestjs/common"); +const media_repository_1 = require("./media.repository"); +const openai_service_1 = require("../../../openai/openai.service"); +const generation_error_1 = require("../../../openai/generation.error"); +const subscription_service_1 = require("../subscriptions/subscription.service"); +const video_manager_1 = require("../../../videos/video.manager"); +const upload_factory_1 = require("../../../upload/upload.factory"); +const permission_exception_class_1 = require("../../../../../../apps/backend/src/services/auth/permissions/permission.exception.class"); +let MediaService = class MediaService { + constructor(_mediaRepository, _openAi, _subscriptionService, _videoManager) { + this._mediaRepository = _mediaRepository; + this._openAi = _openAi; + this._subscriptionService = _subscriptionService; + this._videoManager = _videoManager; + this.storage = upload_factory_1.UploadFactory.createStorage(); + } + async deleteMedia(org, id) { + return this._mediaRepository.deleteMedia(org, id); + } + getMediaById(id) { + return this._mediaRepository.getMediaById(id); + } + async generateImage(prompt, org, generatePromptFirst) { + try { + const generating = await this._subscriptionService.useCredit(org, 'ai_images', async () => { + if (generatePromptFirst) { + prompt = await this._openAi.generatePromptForPicture(prompt); + console.log('Prompt:', prompt); + } + return this._openAi.generateImage(prompt); + }); + return generating; + } + catch (err) { + throw (0, generation_error_1.generationError)(err); + } + } + saveFile(org, fileName, filePath, originalName) { + return this._mediaRepository.saveFile(org, fileName, filePath, originalName); + } + getMedia(org, page, search) { + return this._mediaRepository.getMedia(org, page, search); + } + saveMediaInformation(org, data) { + return this._mediaRepository.saveMediaInformation(org, data); + } + getVideoOptions() { + return this._videoManager.getAllVideos(); + } + async generateVideoAllowed(org, type) { + const video = this._videoManager.getVideoByName(type); + if (!video) { + throw new Error(`Video type ${type} not found`); + } + if (!video.trial && org.isTrailing) { + throw new common_1.HttpException('This video is not available in trial mode', 406); + } + return true; + } + async generateVideo(org, body) { + try { + const totalCredits = await this._subscriptionService.checkCredits(org, 'ai_videos'); + if (totalCredits.credits <= 0) { + throw new permission_exception_class_1.SubscriptionException({ + action: permission_exception_class_1.AuthorizationActions.Create, + section: permission_exception_class_1.Sections.VIDEOS_PER_MONTH, + }); + } + const video = this._videoManager.getVideoByName(body.type); + if (!video) { + throw new Error(`Video type ${body.type} not found`); + } + if (!video.trial && org.isTrailing) { + throw new common_1.HttpException('This video is not available in trial mode', 406); + } + console.log(body.customParams); + await video.instance.processAndValidate(body.customParams); + console.log('no err'); + return await this._subscriptionService.useCredit(org, 'ai_videos', async () => { + const loadedData = await video.instance.process(body.output, body.customParams); + const file = await this.storage.uploadSimple(loadedData); + return this.saveFile(org.id, file.split('/').pop(), file); + }); + } + catch (err) { + throw (0, generation_error_1.generationError)(err); + } + } + async videoFunction(identifier, functionName, body) { + const video = this._videoManager.getVideoByName(identifier); + if (!video) { + throw new Error(`Video with identifier ${identifier} not found`); + } + const functionToCall = video.instance[functionName]; + if (typeof functionToCall !== 'function' || + this._videoManager.checkAvailableVideoFunction(functionToCall)) { + throw new common_1.HttpException(`Function ${functionName} not found on video instance`, 400); + } + return functionToCall(body); + } +}; +exports.MediaService = MediaService; +exports.MediaService = MediaService = tslib_1.__decorate([ + (0, common_1.Injectable)(), + tslib_1.__metadata("design:paramtypes", [media_repository_1.MediaRepository, + openai_service_1.OpenaiService, + subscription_service_1.SubscriptionService, + video_manager_1.VideoManager]) +], MediaService); +//# sourceMappingURL=media.service.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/media/media.service.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/media/media.service.js.map new file mode 100644 index 0000000000000000000000000000000000000000..e9e3ef65b15cd853ac1ce36952258d8eabc1d3d5 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/media/media.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"media.service.js","sourceRoot":"","sources":["../../../../../../../../../libraries/nestjs-libraries/src/database/prisma/media/media.service.ts"],"names":[],"mappings":";;;;AAAA,2CAA2D;AAC3D,yDAAmG;AACnG,mEAAgF;AAChF,uEAAoF;AACpF,gFAAmH;AAGnH,iEAA8E;AAE9E,mEAAgF;AAChF,wIAI+E;AAGxE,IAAM,YAAY,GAAlB,MAAM,YAAY;IAGvB,YACU,gBAAiC,EACjC,OAAsB,EACtB,oBAAyC,EACzC,aAA2B;QAH3B,qBAAgB,GAAhB,gBAAgB,CAAiB;QACjC,YAAO,GAAP,OAAO,CAAe;QACtB,yBAAoB,GAApB,oBAAoB,CAAqB;QACzC,kBAAa,GAAb,aAAa,CAAc;QAN7B,YAAO,GAAG,8BAAa,CAAC,aAAa,EAAE,CAAC;IAO7C,CAAC;IAEJ,KAAK,CAAC,WAAW,CAAC,GAAW,EAAE,EAAU;QACvC,OAAO,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,YAAY,CAAC,EAAU;QACrB,OAAO,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,MAAc,EACd,GAAiB,EACjB,mBAA6B;QAE7B,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAC1D,GAAG,EACH,WAAW,EACX,KAAK,IAAI,EAAE;gBACT,IAAI,mBAAmB,EAAE,CAAC;oBACxB,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC;oBAC7D,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;gBACjC,CAAC;gBACD,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAC5C,CAAC,CACF,CAAC;YAEF,OAAO,UAAU,CAAC;QACpB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAA,kCAAe,EAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,QAAQ,CAAC,GAAW,EAAE,QAAgB,EAAE,QAAgB,EAAE,YAAqB;QAC7E,OAAO,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;IAC/E,CAAC;IAED,QAAQ,CAAC,GAAW,EAAE,IAAY,EAAE,MAAe;QACjD,OAAO,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAC3D,CAAC;IAED,oBAAoB,CAAC,GAAW,EAAE,IAA6B;QAC7D,OAAO,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC/D,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,GAAiB,EAAE,IAAY;QACxD,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QACtD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,cAAc,IAAI,YAAY,CAAC,CAAC;QAClD,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;YACnC,MAAM,IAAI,sBAAa,CAAC,2CAA2C,EAAE,GAAG,CAAC,CAAC;QAC5E,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,GAAiB,EAAE,IAAc;QACnD,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAC/D,GAAG,EACH,WAAW,CACZ,CAAC;YAEF,IAAI,YAAY,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC;gBAC9B,MAAM,IAAI,kDAAqB,CAAC;oBAC9B,MAAM,EAAE,iDAAoB,CAAC,MAAM;oBACnC,OAAO,EAAE,qCAAQ,CAAC,gBAAgB;iBACnC,CAAC,CAAC;YACL,CAAC;YAED,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3D,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,KAAK,CAAC,cAAc,IAAI,CAAC,IAAI,YAAY,CAAC,CAAC;YACvD,CAAC;YAED,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;gBACnC,MAAM,IAAI,sBAAa,CACrB,2CAA2C,EAC3C,GAAG,CACJ,CAAC;YACJ,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC/B,MAAM,KAAK,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC3D,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAEtB,OAAO,MAAM,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAC9C,GAAG,EACH,WAAW,EACX,KAAK,IAAI,EAAE;gBACT,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,OAAO,CAC7C,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,YAAY,CAClB,CAAC;gBAEF,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;gBACzD,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;YAC5D,CAAC,CACF,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAA,kCAAe,EAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,UAAkB,EAAE,YAAoB,EAAE,IAAS;QACrE,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QAC5D,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,yBAAyB,UAAU,YAAY,CAAC,CAAC;QACnE,CAAC;QAGD,MAAM,cAAc,GAAG,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QACpD,IACE,OAAO,cAAc,KAAK,UAAU;YACpC,IAAI,CAAC,aAAa,CAAC,2BAA2B,CAAC,cAAc,CAAC,EAC9D,CAAC;YACD,MAAM,IAAI,sBAAa,CACrB,YAAY,YAAY,8BAA8B,EACtD,GAAG,CACJ,CAAC;QACJ,CAAC;QAED,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;CACF,CAAA;AA3IY,oCAAY;uBAAZ,YAAY;IADxB,IAAA,mBAAU,GAAE;6CAKiB,kCAAe;QACxB,8BAAa;QACA,0CAAmB;QAC1B,4BAAY;GAP1B,YAAY,CA2IxB"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/notifications/notification.service.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/notifications/notification.service.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..bedb012c68d271f9fe9f71f505529bf71014066b --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/notifications/notification.service.d.ts @@ -0,0 +1,38 @@ +import { NotificationsRepository } from "./notifications.repository"; +import { EmailService } from "../../../services/email.service"; +import { OrganizationRepository } from "../organizations/organization.repository"; +import { TemporalService } from 'nestjs-temporal-core'; +export type NotificationType = 'success' | 'fail' | 'info'; +export declare class NotificationService { + private _notificationRepository; + private _emailService; + private _organizationRepository; + private _temporalService; + constructor(_notificationRepository: NotificationsRepository, _emailService: EmailService, _organizationRepository: OrganizationRepository, _temporalService: TemporalService); + getMainPageCount(organizationId: string, userId: string): Promise<{ + total: number; + }>; + getNotificationsPaginated(organizationId: string, page: number): Promise<{ + notifications: { + link: string; + id: string; + createdAt: Date; + content: string; + }[]; + total: number; + page: number; + limit: number; + hasMore: boolean; + }>; + getNotifications(organizationId: string, userId: string): Promise<{ + lastReadNotifications: Date; + notifications: { + createdAt: Date; + content: string; + }[]; + }>; + inAppNotification(orgId: string, subject: string, message: string, sendEmail?: boolean, digest?: boolean, type?: NotificationType): Promise; + sendEmailsToOrg(orgId: string, subject: string, message: string, type?: NotificationType): Promise; + sendEmail(to: string, subject: string, html: string, replyTo?: string): Promise; + hasEmailProvider(): boolean; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/notifications/notification.service.js b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/notifications/notification.service.js new file mode 100644 index 0000000000000000000000000000000000000000..7f9e4709c9640811b1740d436d689defbef26530 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/notifications/notification.service.js @@ -0,0 +1,94 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.NotificationService = void 0; +const tslib_1 = require("tslib"); +const common_1 = require("@nestjs/common"); +const notifications_repository_1 = require("./notifications.repository"); +const email_service_1 = require("../../../services/email.service"); +const organization_repository_1 = require("../organizations/organization.repository"); +const nestjs_temporal_core_1 = require("nestjs-temporal-core"); +const common_2 = require("@temporalio/common"); +const temporal_search_attribute_1 = require("../../../temporal/temporal.search.attribute"); +let NotificationService = class NotificationService { + constructor(_notificationRepository, _emailService, _organizationRepository, _temporalService) { + this._notificationRepository = _notificationRepository; + this._emailService = _emailService; + this._organizationRepository = _organizationRepository; + this._temporalService = _temporalService; + } + getMainPageCount(organizationId, userId) { + return this._notificationRepository.getMainPageCount(organizationId, userId); + } + getNotificationsPaginated(organizationId, page) { + return this._notificationRepository.getNotificationsPaginated(organizationId, page); + } + getNotifications(organizationId, userId) { + return this._notificationRepository.getNotifications(organizationId, userId); + } + async inAppNotification(orgId, subject, message, sendEmail = false, digest = false, type = 'success') { + await this._notificationRepository.createNotification(orgId, message); + if (!sendEmail) { + return; + } + if (digest) { + try { + await this._temporalService.client + .getRawClient() + ?.workflow.signalWithStart('digestEmailWorkflow', { + workflowId: 'digest_email_workflow_' + orgId, + signal: 'email', + signalArgs: [ + [ + { + title: subject, + message, + type, + }, + ], + ], + taskQueue: 'main', + workflowIdConflictPolicy: 'USE_EXISTING', + args: [{ organizationId: orgId }], + typedSearchAttributes: new common_2.TypedSearchAttributes([ + { + key: temporal_search_attribute_1.organizationId, + value: orgId, + }, + ]), + }); + } + catch (err) { } + return; + } + await this.sendEmailsToOrg(orgId, subject, message, type); + } + async sendEmailsToOrg(orgId, subject, message, type) { + const userOrg = await this._organizationRepository.getAllUsersOrgs(orgId); + for (const user of userOrg?.users || []) { + if (type !== 'info') { + if (type === 'success' && !user.user.sendSuccessEmails) { + continue; + } + if (type === 'fail' && !user.user.sendFailureEmails) { + continue; + } + } + await this.sendEmail(user.user.email, subject, message); + } + } + async sendEmail(to, subject, html, replyTo) { + await this._emailService.sendEmail(to, subject, html, 'top', replyTo); + } + hasEmailProvider() { + return this._emailService.hasProvider(); + } +}; +exports.NotificationService = NotificationService; +exports.NotificationService = NotificationService = tslib_1.__decorate([ + (0, common_1.Injectable)(), + tslib_1.__metadata("design:paramtypes", [notifications_repository_1.NotificationsRepository, + email_service_1.EmailService, + organization_repository_1.OrganizationRepository, + nestjs_temporal_core_1.TemporalService]) +], NotificationService); +//# sourceMappingURL=notification.service.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/notifications/notification.service.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/notifications/notification.service.js.map new file mode 100644 index 0000000000000000000000000000000000000000..9be6377700ae4cc25c3f9778d4d009f56ca5d79b --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/notifications/notification.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"notification.service.js","sourceRoot":"","sources":["../../../../../../../../../libraries/nestjs-libraries/src/database/prisma/notifications/notification.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/notifications/notifications.repository.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/notifications/notifications.repository.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..39df2ba2b79ad4ef196220907bc15adb3133b70e --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/notifications/notifications.repository.d.ts @@ -0,0 +1,41 @@ +import { PrismaRepository } from "../prisma.service"; +export declare class NotificationsRepository { + private _notifications; + private _user; + constructor(_notifications: PrismaRepository<'notifications'>, _user: PrismaRepository<'user'>); + getLastReadNotification(userId: string): import(".prisma/client").Prisma.Prisma__UserClient<{ + lastReadNotifications: Date; + }, null, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + getMainPageCount(organizationId: string, userId: string): Promise<{ + total: number; + }>; + createNotification(organizationId: string, content: string): Promise; + getNotificationsSince(organizationId: string, since: string): Promise<{ + link: string | null; + id: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + content: string; + }[]>; + getNotificationsPaginated(organizationId: string, page: number): Promise<{ + notifications: { + link: string; + id: string; + createdAt: Date; + content: string; + }[]; + total: number; + page: number; + limit: number; + hasMore: boolean; + }>; + getNotifications(organizationId: string, userId: string): Promise<{ + lastReadNotifications: Date; + notifications: { + createdAt: Date; + content: string; + }[]; + }>; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/notifications/notifications.repository.js b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/notifications/notifications.repository.js new file mode 100644 index 0000000000000000000000000000000000000000..7b83c543fedddc9219775341466685e50272ab00 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/notifications/notifications.repository.js @@ -0,0 +1,119 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.NotificationsRepository = void 0; +const tslib_1 = require("tslib"); +const prisma_service_1 = require("../prisma.service"); +const common_1 = require("@nestjs/common"); +let NotificationsRepository = class NotificationsRepository { + constructor(_notifications, _user) { + this._notifications = _notifications; + this._user = _user; + } + getLastReadNotification(userId) { + return this._user.model.user.findFirst({ + where: { + id: userId, + }, + select: { + lastReadNotifications: true, + }, + }); + } + async getMainPageCount(organizationId, userId) { + const { lastReadNotifications } = (await this.getLastReadNotification(userId)); + return { + total: await this._notifications.model.notifications.count({ + where: { + organizationId, + createdAt: { + gt: lastReadNotifications, + }, + }, + }), + }; + } + async createNotification(organizationId, content) { + await this._notifications.model.notifications.create({ + data: { + organizationId, + content, + }, + }); + } + async getNotificationsSince(organizationId, since) { + return this._notifications.model.notifications.findMany({ + where: { + organizationId, + createdAt: { + gte: new Date(since), + }, + }, + }); + } + async getNotificationsPaginated(organizationId, page) { + const limit = 100; + const skip = page * limit; + const where = { + organizationId, + deletedAt: null, + }; + const [notifications, total] = await Promise.all([ + this._notifications.model.notifications.findMany({ + where, + orderBy: { + createdAt: 'desc', + }, + skip, + take: limit, + select: { + id: true, + content: true, + link: true, + createdAt: true, + }, + }), + this._notifications.model.notifications.count({ where }), + ]); + return { + notifications, + total, + page, + limit, + hasMore: skip + notifications.length < total, + }; + } + async getNotifications(organizationId, userId) { + const { lastReadNotifications } = (await this.getLastReadNotification(userId)); + await this._user.model.user.update({ + where: { + id: userId, + }, + data: { + lastReadNotifications: new Date(), + }, + }); + return { + lastReadNotifications, + notifications: await this._notifications.model.notifications.findMany({ + orderBy: { + createdAt: 'desc', + }, + take: 10, + where: { + organizationId, + }, + select: { + createdAt: true, + content: true, + }, + }), + }; + } +}; +exports.NotificationsRepository = NotificationsRepository; +exports.NotificationsRepository = NotificationsRepository = tslib_1.__decorate([ + (0, common_1.Injectable)(), + tslib_1.__metadata("design:paramtypes", [prisma_service_1.PrismaRepository, + prisma_service_1.PrismaRepository]) +], NotificationsRepository); +//# sourceMappingURL=notifications.repository.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/notifications/notifications.repository.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/notifications/notifications.repository.js.map new file mode 100644 index 0000000000000000000000000000000000000000..36037174383f5e4c6af1bec2434ccd6b2847e0ca --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/notifications/notifications.repository.js.map @@ -0,0 +1 @@ +{"version":3,"file":"notifications.repository.js","sourceRoot":"","sources":["../../../../../../../../../libraries/nestjs-libraries/src/database/prisma/notifications/notifications.repository.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/oauth/oauth.repository.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/oauth/oauth.repository.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..e26d4b862c8e6ef22425e15e2007e149bd890fd7 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/oauth/oauth.repository.d.ts @@ -0,0 +1,286 @@ +import { PrismaRepository } from "../prisma.service"; +export declare class OAuthRepository { + private _oauthApp; + private _oauthAuth; + constructor(_oauthApp: PrismaRepository<'oAuthApp'>, _oauthAuth: PrismaRepository<'oAuthAuthorization'>); + getAppByOrgId(orgId: string): import(".prisma/client").Prisma.Prisma__OAuthAppClient<{ + picture: { + id: string; + name: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + originalName: string | null; + path: string; + fileSize: number; + type: string; + thumbnail: string | null; + alt: string | null; + thumbnailTimestamp: number | null; + }; + } & { + id: string; + name: string; + description: string | null; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + pictureId: string | null; + redirectUrl: string; + clientId: string; + clientSecret: string; + }, null, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + getAppByClientId(clientId: string): import(".prisma/client").Prisma.Prisma__OAuthAppClient<{ + picture: { + id: string; + name: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + originalName: string | null; + path: string; + fileSize: number; + type: string; + thumbnail: string | null; + alt: string | null; + thumbnailTimestamp: number | null; + }; + } & { + id: string; + name: string; + description: string | null; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + pictureId: string | null; + redirectUrl: string; + clientId: string; + clientSecret: string; + }, null, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + createApp(orgId: string, data: { + name: string; + description?: string; + pictureId?: string; + redirectUrl: string; + clientId: string; + clientSecret: string; + }): import(".prisma/client").Prisma.Prisma__OAuthAppClient<{ + picture: { + id: string; + name: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + originalName: string | null; + path: string; + fileSize: number; + type: string; + thumbnail: string | null; + alt: string | null; + thumbnailTimestamp: number | null; + }; + } & { + id: string; + name: string; + description: string | null; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + pictureId: string | null; + redirectUrl: string; + clientId: string; + clientSecret: string; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + updateApp(orgId: string, data: { + name?: string; + description?: string; + pictureId?: string; + redirectUrl?: string; + }): Promise<{ + picture: { + id: string; + name: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + originalName: string | null; + path: string; + fileSize: number; + type: string; + thumbnail: string | null; + alt: string | null; + thumbnailTimestamp: number | null; + }; + } & { + id: string; + name: string; + description: string | null; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + pictureId: string | null; + redirectUrl: string; + clientId: string; + clientSecret: string; + }>; + deleteApp(orgId: string): Promise<{ + id: string; + name: string; + description: string | null; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + pictureId: string | null; + redirectUrl: string; + clientId: string; + clientSecret: string; + }>; + updateClientSecret(orgId: string, newSecret: string): Promise<{ + id: string; + name: string; + description: string | null; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + pictureId: string | null; + redirectUrl: string; + clientId: string; + clientSecret: string; + }>; + createAuthorization(data: { + oauthAppId: string; + userId: string; + organizationId: string; + authorizationCode: string; + codeExpiresAt: Date; + }): import(".prisma/client").Prisma.Prisma__OAuthAuthorizationClient<{ + id: string; + createdAt: Date; + updatedAt: Date; + organizationId: string; + userId: string; + accessToken: string | null; + oauthAppId: string; + authorizationCode: string | null; + codeExpiresAt: Date | null; + revokedAt: Date | null; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + findByCode(encryptedCode: string): import(".prisma/client").Prisma.Prisma__OAuthAuthorizationClient<{ + id: string; + createdAt: Date; + updatedAt: Date; + organizationId: string; + userId: string; + accessToken: string | null; + oauthAppId: string; + authorizationCode: string | null; + codeExpiresAt: Date | null; + revokedAt: Date | null; + }, null, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + exchangeCodeForToken(id: string, encryptedToken: string): import(".prisma/client").Prisma.Prisma__OAuthAuthorizationClient<{ + organization: { + paymentId: string; + }; + organizationId: string; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + findByAccessToken(encryptedToken: string): import(".prisma/client").Prisma.Prisma__OAuthAuthorizationClient<{ + organization: { + subscription: { + subscriptionTier: import(".prisma/client").$Enums.SubscriptionTier; + totalChannels: number; + isLifetime: boolean; + }; + } & { + id: string; + name: string; + description: string | null; + apiKey: string | null; + paymentId: string | null; + streakSince: Date | null; + createdAt: Date; + updatedAt: Date; + allowTrial: boolean; + isTrailing: boolean; + shortlink: import(".prisma/client").$Enums.ShortLinkPreference; + }; + user: { + id: string; + }; + } & { + id: string; + createdAt: Date; + updatedAt: Date; + organizationId: string; + userId: string; + accessToken: string | null; + oauthAppId: string; + authorizationCode: string | null; + codeExpiresAt: Date | null; + revokedAt: Date | null; + }, null, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + getApprovedApps(userId: string): import(".prisma/client").Prisma.PrismaPromise<({ + oauthApp: { + picture: { + id: string; + name: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + originalName: string | null; + path: string; + fileSize: number; + type: string; + thumbnail: string | null; + alt: string | null; + thumbnailTimestamp: number | null; + }; + } & { + id: string; + name: string; + description: string | null; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + pictureId: string | null; + redirectUrl: string; + clientId: string; + clientSecret: string; + }; + } & { + id: string; + createdAt: Date; + updatedAt: Date; + organizationId: string; + userId: string; + accessToken: string | null; + oauthAppId: string; + authorizationCode: string | null; + codeExpiresAt: Date | null; + revokedAt: Date | null; + })[]>; + revokeAuthorization(userId: string, authId: string): import(".prisma/client").Prisma.Prisma__OAuthAuthorizationClient<{ + id: string; + createdAt: Date; + updatedAt: Date; + organizationId: string; + userId: string; + accessToken: string | null; + oauthAppId: string; + authorizationCode: string | null; + codeExpiresAt: Date | null; + revokedAt: Date | null; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + revokeAllForApp(oauthAppId: string): import(".prisma/client").Prisma.PrismaPromise; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/oauth/oauth.repository.js b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/oauth/oauth.repository.js new file mode 100644 index 0000000000000000000000000000000000000000..108e01e651eb7b5f9b68297a4f84d9f2f8cfcf3a --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/oauth/oauth.repository.js @@ -0,0 +1,224 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.OAuthRepository = void 0; +const tslib_1 = require("tslib"); +const common_1 = require("@nestjs/common"); +const prisma_service_1 = require("../prisma.service"); +let OAuthRepository = class OAuthRepository { + constructor(_oauthApp, _oauthAuth) { + this._oauthApp = _oauthApp; + this._oauthAuth = _oauthAuth; + } + getAppByOrgId(orgId) { + return this._oauthApp.model.oAuthApp.findFirst({ + where: { + organizationId: orgId, + deletedAt: null, + }, + include: { + picture: true, + }, + }); + } + getAppByClientId(clientId) { + return this._oauthApp.model.oAuthApp.findFirst({ + where: { + clientId, + deletedAt: null, + }, + include: { + picture: true, + }, + }); + } + createApp(orgId, data) { + return this._oauthApp.model.oAuthApp.create({ + data: { + organizationId: orgId, + name: data.name, + description: data.description, + pictureId: data.pictureId, + redirectUrl: data.redirectUrl, + clientId: data.clientId, + clientSecret: data.clientSecret, + }, + include: { + picture: true, + }, + }); + } + async updateApp(orgId, data) { + const app = await this._oauthApp.model.oAuthApp.findFirst({ + where: { + organizationId: orgId, + deletedAt: null, + }, + }); + if (!app) { + return null; + } + return this._oauthApp.model.oAuthApp.update({ + where: { id: app.id }, + data, + include: { + picture: true, + }, + }); + } + async deleteApp(orgId) { + const app = await this._oauthApp.model.oAuthApp.findFirst({ + where: { + organizationId: orgId, + deletedAt: null, + }, + }); + if (!app) { + return null; + } + return this._oauthApp.model.oAuthApp.update({ + where: { id: app.id }, + data: { + deletedAt: new Date(), + }, + }); + } + async updateClientSecret(orgId, newSecret) { + const app = await this._oauthApp.model.oAuthApp.findFirst({ + where: { + organizationId: orgId, + deletedAt: null, + }, + }); + if (!app) { + return null; + } + return this._oauthApp.model.oAuthApp.update({ + where: { id: app.id }, + data: { + clientSecret: newSecret, + }, + }); + } + createAuthorization(data) { + return this._oauthAuth.model.oAuthAuthorization.upsert({ + where: { + oauthAppId_userId_organizationId: { + oauthAppId: data.oauthAppId, + userId: data.userId, + organizationId: data.organizationId, + }, + }, + create: { + oauthAppId: data.oauthAppId, + userId: data.userId, + organizationId: data.organizationId, + authorizationCode: data.authorizationCode, + codeExpiresAt: data.codeExpiresAt, + }, + update: { + authorizationCode: data.authorizationCode, + codeExpiresAt: data.codeExpiresAt, + accessToken: null, + revokedAt: null, + }, + }); + } + findByCode(encryptedCode) { + return this._oauthAuth.model.oAuthAuthorization.findFirst({ + where: { + authorizationCode: encryptedCode, + revokedAt: null, + }, + }); + } + exchangeCodeForToken(id, encryptedToken) { + return this._oauthAuth.model.oAuthAuthorization.update({ + where: { id }, + select: { + organizationId: true, + organization: { + select: { + paymentId: true, + } + } + }, + data: { + accessToken: encryptedToken, + authorizationCode: null, + codeExpiresAt: null, + }, + }); + } + findByAccessToken(encryptedToken) { + return this._oauthAuth.model.oAuthAuthorization.findFirst({ + where: { + accessToken: encryptedToken, + revokedAt: null, + }, + include: { + organization: { + include: { + subscription: { + select: { + subscriptionTier: true, + totalChannels: true, + isLifetime: true, + }, + }, + }, + }, + user: { + select: { id: true }, + }, + }, + }); + } + getApprovedApps(userId) { + return this._oauthAuth.model.oAuthAuthorization.findMany({ + where: { + userId, + revokedAt: null, + accessToken: { not: null }, + }, + include: { + oauthApp: { + include: { + picture: true, + }, + }, + }, + orderBy: { + createdAt: 'desc', + }, + }); + } + revokeAuthorization(userId, authId) { + return this._oauthAuth.model.oAuthAuthorization.update({ + where: { + id: authId, + userId, + }, + data: { + revokedAt: new Date(), + }, + }); + } + revokeAllForApp(oauthAppId) { + return this._oauthAuth.model.oAuthAuthorization.updateMany({ + where: { + oauthAppId, + revokedAt: null, + }, + data: { + revokedAt: new Date(), + }, + }); + } +}; +exports.OAuthRepository = OAuthRepository; +exports.OAuthRepository = OAuthRepository = tslib_1.__decorate([ + (0, common_1.Injectable)(), + tslib_1.__metadata("design:paramtypes", [prisma_service_1.PrismaRepository, + prisma_service_1.PrismaRepository]) +], OAuthRepository); +//# sourceMappingURL=oauth.repository.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/oauth/oauth.repository.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/oauth/oauth.repository.js.map new file mode 100644 index 0000000000000000000000000000000000000000..0229da5f763cb352271b0141ba82ac5533b14999 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/oauth/oauth.repository.js.map @@ -0,0 +1 @@ +{"version":3,"file":"oauth.repository.js","sourceRoot":"","sources":["../../../../../../../../../libraries/nestjs-libraries/src/database/prisma/oauth/oauth.repository.ts"],"names":[],"mappings":";;;;AAAA,2CAA4C;AAC5C,sDAA4F;AAGrF,IAAM,eAAe,GAArB,MAAM,eAAe;IAC1B,YACU,SAAuC,EACvC,UAAkD;QADlD,cAAS,GAAT,SAAS,CAA8B;QACvC,eAAU,GAAV,UAAU,CAAwC;IACzD,CAAC;IAEJ,aAAa,CAAC,KAAa;QACzB,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;YAC7C,KAAK,EAAE;gBACL,cAAc,EAAE,KAAK;gBACrB,SAAS,EAAE,IAAI;aAChB;YACD,OAAO,EAAE;gBACP,OAAO,EAAE,IAAI;aACd;SACF,CAAC,CAAC;IACL,CAAC;IAED,gBAAgB,CAAC,QAAgB;QAC/B,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;YAC7C,KAAK,EAAE;gBACL,QAAQ;gBACR,SAAS,EAAE,IAAI;aAChB;YACD,OAAO,EAAE;gBACP,OAAO,EAAE,IAAI;aACd;SACF,CAAC,CAAC;IACL,CAAC;IAED,SAAS,CACP,KAAa,EACb,IAOC;QAED,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC1C,IAAI,EAAE;gBACJ,cAAc,EAAE,KAAK;gBACrB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,YAAY,EAAE,IAAI,CAAC,YAAY;aAChC;YACD,OAAO,EAAE;gBACP,OAAO,EAAE,IAAI;aACd;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,SAAS,CACb,KAAa,EACb,IAKC;QAED,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;YACxD,KAAK,EAAE;gBACL,cAAc,EAAE,KAAK;gBACrB,SAAS,EAAE,IAAI;aAChB;SACF,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC1C,KAAK,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE;YACrB,IAAI;YACJ,OAAO,EAAE;gBACP,OAAO,EAAE,IAAI;aACd;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,KAAa;QAC3B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;YACxD,KAAK,EAAE;gBACL,cAAc,EAAE,KAAK;gBACrB,SAAS,EAAE,IAAI;aAChB;SACF,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC1C,KAAK,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE;YACrB,IAAI,EAAE;gBACJ,SAAS,EAAE,IAAI,IAAI,EAAE;aACtB;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,KAAa,EAAE,SAAiB;QACvD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;YACxD,KAAK,EAAE;gBACL,cAAc,EAAE,KAAK;gBACrB,SAAS,EAAE,IAAI;aAChB;SACF,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC1C,KAAK,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE;YACrB,IAAI,EAAE;gBACJ,YAAY,EAAE,SAAS;aACxB;SACF,CAAC,CAAC;IACL,CAAC;IAED,mBAAmB,CAAC,IAMnB;QACC,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,kBAAkB,CAAC,MAAM,CAAC;YACrD,KAAK,EAAE;gBACL,gCAAgC,EAAE;oBAChC,UAAU,EAAE,IAAI,CAAC,UAAU;oBAC3B,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,cAAc,EAAE,IAAI,CAAC,cAAc;iBACpC;aACF;YACD,MAAM,EAAE;gBACN,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,cAAc,EAAE,IAAI,CAAC,cAAc;gBACnC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;gBACzC,aAAa,EAAE,IAAI,CAAC,aAAa;aAClC;YACD,MAAM,EAAE;gBACN,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;gBACzC,aAAa,EAAE,IAAI,CAAC,aAAa;gBACjC,WAAW,EAAE,IAAI;gBACjB,SAAS,EAAE,IAAI;aAChB;SACF,CAAC,CAAC;IACL,CAAC;IAED,UAAU,CAAC,aAAqB;QAC9B,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,kBAAkB,CAAC,SAAS,CAAC;YACxD,KAAK,EAAE;gBACL,iBAAiB,EAAE,aAAa;gBAChC,SAAS,EAAE,IAAI;aAChB;SACF,CAAC,CAAC;IACL,CAAC;IAED,oBAAoB,CAAC,EAAU,EAAE,cAAsB;QACrD,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,kBAAkB,CAAC,MAAM,CAAC;YACrD,KAAK,EAAE,EAAE,EAAE,EAAE;YACb,MAAM,EAAE;gBACN,cAAc,EAAE,IAAI;gBACpB,YAAY,EAAE;oBACZ,MAAM,EAAE;wBACN,SAAS,EAAE,IAAI;qBAChB;iBACF;aACF;YACD,IAAI,EAAE;gBACJ,WAAW,EAAE,cAAc;gBAC3B,iBAAiB,EAAE,IAAI;gBACvB,aAAa,EAAE,IAAI;aACpB;SACF,CAAC,CAAC;IACL,CAAC;IAED,iBAAiB,CAAC,cAAsB;QACtC,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,kBAAkB,CAAC,SAAS,CAAC;YACxD,KAAK,EAAE;gBACL,WAAW,EAAE,cAAc;gBAC3B,SAAS,EAAE,IAAI;aAChB;YACD,OAAO,EAAE;gBACP,YAAY,EAAE;oBACZ,OAAO,EAAE;wBACP,YAAY,EAAE;4BACZ,MAAM,EAAE;gCACN,gBAAgB,EAAE,IAAI;gCACtB,aAAa,EAAE,IAAI;gCACnB,UAAU,EAAE,IAAI;6BACjB;yBACF;qBACF;iBACF;gBACD,IAAI,EAAE;oBACJ,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE;iBACrB;aACF;SACF,CAAC,CAAC;IACL,CAAC;IAED,eAAe,CAAC,MAAc;QAC5B,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,kBAAkB,CAAC,QAAQ,CAAC;YACvD,KAAK,EAAE;gBACL,MAAM;gBACN,SAAS,EAAE,IAAI;gBACf,WAAW,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE;aAC3B;YACD,OAAO,EAAE;gBACP,QAAQ,EAAE;oBACR,OAAO,EAAE;wBACP,OAAO,EAAE,IAAI;qBACd;iBACF;aACF;YACD,OAAO,EAAE;gBACP,SAAS,EAAE,MAAM;aAClB;SACF,CAAC,CAAC;IACL,CAAC;IAED,mBAAmB,CAAC,MAAc,EAAE,MAAc;QAChD,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,kBAAkB,CAAC,MAAM,CAAC;YACrD,KAAK,EAAE;gBACL,EAAE,EAAE,MAAM;gBACV,MAAM;aACP;YACD,IAAI,EAAE;gBACJ,SAAS,EAAE,IAAI,IAAI,EAAE;aACtB;SACF,CAAC,CAAC;IACL,CAAC;IAED,eAAe,CAAC,UAAkB;QAChC,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,kBAAkB,CAAC,UAAU,CAAC;YACzD,KAAK,EAAE;gBACL,UAAU;gBACV,SAAS,EAAE,IAAI;aAChB;YACD,IAAI,EAAE;gBACJ,SAAS,EAAE,IAAI,IAAI,EAAE;aACtB;SACF,CAAC,CAAC;IACL,CAAC;CACF,CAAA;AAvPY,0CAAe;0BAAf,eAAe;IAD3B,IAAA,mBAAU,GAAE;6CAGU,iCAAgB;QACf,iCAAgB;GAH3B,eAAe,CAuP3B"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/oauth/oauth.service.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/oauth/oauth.service.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..383450cb9688ac8f874a1c4f09bed665a388ec35 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/oauth/oauth.service.d.ts @@ -0,0 +1,213 @@ +import { OAuthRepository } from "./oauth.repository"; +import { CreateOAuthAppDto } from "../../../dtos/oauth/create-oauth-app.dto"; +import { UpdateOAuthAppDto } from "../../../dtos/oauth/update-oauth-app.dto"; +export declare class OAuthService { + private _oauthRepository; + constructor(_oauthRepository: OAuthRepository); + getApp(orgId: string): Promise; + createApp(orgId: string, dto: CreateOAuthAppDto): Promise<{ + clientSecret: string; + picture: { + id: string; + name: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + originalName: string | null; + path: string; + fileSize: number; + type: string; + thumbnail: string | null; + alt: string | null; + thumbnailTimestamp: number | null; + }; + id: string; + name: string; + description: string | null; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + pictureId: string | null; + redirectUrl: string; + clientId: string; + }>; + updateApp(orgId: string, dto: UpdateOAuthAppDto): Promise<{ + picture: { + id: string; + name: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + originalName: string | null; + path: string; + fileSize: number; + type: string; + thumbnail: string | null; + alt: string | null; + thumbnailTimestamp: number | null; + }; + } & { + id: string; + name: string; + description: string | null; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + pictureId: string | null; + redirectUrl: string; + clientId: string; + clientSecret: string; + }>; + deleteApp(orgId: string): Promise<{ + success: boolean; + }>; + rotateSecret(orgId: string): Promise<{ + clientSecret: string; + }>; + validateAuthorizationRequest(clientId: string): Promise<{ + picture: { + id: string; + name: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + originalName: string | null; + path: string; + fileSize: number; + type: string; + thumbnail: string | null; + alt: string | null; + thumbnailTimestamp: number | null; + }; + } & { + id: string; + name: string; + description: string | null; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + pictureId: string | null; + redirectUrl: string; + clientId: string; + clientSecret: string; + }>; + createAuthorizationCode(oauthAppId: string, userId: string, organizationId: string): Promise; + exchangeCodeForToken(code: string, clientId: string, clientSecret: string): Promise<{ + id: string; + cus: string; + access_token: string; + token_type: string; + }>; + getOrgByOAuthToken(token: string): Promise<{ + organization: { + subscription: { + subscriptionTier: import(".prisma/client").$Enums.SubscriptionTier; + totalChannels: number; + isLifetime: boolean; + }; + } & { + id: string; + name: string; + description: string | null; + apiKey: string | null; + paymentId: string | null; + streakSince: Date | null; + createdAt: Date; + updatedAt: Date; + allowTrial: boolean; + isTrailing: boolean; + shortlink: import(".prisma/client").$Enums.ShortLinkPreference; + }; + user: { + id: string; + }; + } & { + id: string; + createdAt: Date; + updatedAt: Date; + organizationId: string; + userId: string; + accessToken: string | null; + oauthAppId: string; + authorizationCode: string | null; + codeExpiresAt: Date | null; + revokedAt: Date | null; + }>; + getApprovedApps(userId: string): Promise<({ + oauthApp: { + picture: { + id: string; + name: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + originalName: string | null; + path: string; + fileSize: number; + type: string; + thumbnail: string | null; + alt: string | null; + thumbnailTimestamp: number | null; + }; + } & { + id: string; + name: string; + description: string | null; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + pictureId: string | null; + redirectUrl: string; + clientId: string; + clientSecret: string; + }; + } & { + id: string; + createdAt: Date; + updatedAt: Date; + organizationId: string; + userId: string; + accessToken: string | null; + oauthAppId: string; + authorizationCode: string | null; + codeExpiresAt: Date | null; + revokedAt: Date | null; + })[]>; + revokeApp(userId: string, authId: string): Promise<{ + success: boolean; + }>; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/oauth/oauth.service.js b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/oauth/oauth.service.js new file mode 100644 index 0000000000000000000000000000000000000000..541ab78693aaea17ee3e124549da8aed32038307 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/oauth/oauth.service.js @@ -0,0 +1,128 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.OAuthService = void 0; +const tslib_1 = require("tslib"); +const common_1 = require("@nestjs/common"); +const oauth_repository_1 = require("./oauth.repository"); +const make_is_1 = require("../../../services/make.is"); +const auth_service_1 = require("../../../../../helpers/src/auth/auth.service"); +let OAuthService = class OAuthService { + constructor(_oauthRepository) { + this._oauthRepository = _oauthRepository; + } + async getApp(orgId) { + const app = await this._oauthRepository.getAppByOrgId(orgId); + if (!app) + return false; + const { clientSecret, ...rest } = app; + return rest; + } + async createApp(orgId, dto) { + const existing = await this._oauthRepository.getAppByOrgId(orgId); + if (existing) { + throw new common_1.HttpException('You can only have one OAuth application per organization', common_1.HttpStatus.BAD_REQUEST); + } + const clientId = 'pca_' + (0, make_is_1.makeId)(32); + const clientSecret = 'pcs_' + (0, make_is_1.makeId)(48); + const encryptedSecret = auth_service_1.AuthService.fixedEncryption(clientSecret); + const app = await this._oauthRepository.createApp(orgId, { + name: dto.name, + description: dto.description, + pictureId: dto.pictureId, + redirectUrl: dto.redirectUrl, + clientId, + clientSecret: encryptedSecret, + }); + return { ...app, clientSecret }; + } + async updateApp(orgId, dto) { + return this._oauthRepository.updateApp(orgId, { + ...(dto.name && { name: dto.name }), + ...(dto.description !== undefined && { description: dto.description }), + ...(dto.pictureId !== undefined && { pictureId: dto.pictureId }), + ...(dto.redirectUrl && { redirectUrl: dto.redirectUrl }), + }); + } + async deleteApp(orgId) { + const app = await this._oauthRepository.getAppByOrgId(orgId); + if (!app) { + throw new common_1.HttpException('No OAuth app found', common_1.HttpStatus.NOT_FOUND); + } + await this._oauthRepository.revokeAllForApp(app.id); + await this._oauthRepository.deleteApp(orgId); + return { success: true }; + } + async rotateSecret(orgId) { + const app = await this._oauthRepository.getAppByOrgId(orgId); + if (!app) { + throw new common_1.HttpException('No OAuth app found', common_1.HttpStatus.NOT_FOUND); + } + const newSecret = 'pcs_' + (0, make_is_1.makeId)(48); + const encrypted = auth_service_1.AuthService.fixedEncryption(newSecret); + await this._oauthRepository.updateClientSecret(orgId, encrypted); + return { clientSecret: newSecret }; + } + async validateAuthorizationRequest(clientId) { + const app = await this._oauthRepository.getAppByClientId(clientId); + if (!app) { + throw new common_1.HttpException('Invalid client_id', common_1.HttpStatus.BAD_REQUEST); + } + return app; + } + async createAuthorizationCode(oauthAppId, userId, organizationId) { + const code = (0, make_is_1.makeId)(32); + const encryptedCode = auth_service_1.AuthService.fixedEncryption(code); + const codeExpiresAt = new Date(Date.now() + 10 * 60 * 1000); + await this._oauthRepository.createAuthorization({ + oauthAppId, + userId, + organizationId, + authorizationCode: encryptedCode, + codeExpiresAt, + }); + return code; + } + async exchangeCodeForToken(code, clientId, clientSecret) { + const app = await this._oauthRepository.getAppByClientId(clientId); + if (!app) { + throw new common_1.HttpException({ error: 'invalid_client' }, common_1.HttpStatus.UNAUTHORIZED); + } + if (app.clientSecret !== auth_service_1.AuthService.fixedEncryption(clientSecret)) { + throw new common_1.HttpException({ error: 'invalid_client' }, common_1.HttpStatus.UNAUTHORIZED); + } + const encryptedCode = auth_service_1.AuthService.fixedEncryption(code); + const auth = await this._oauthRepository.findByCode(encryptedCode); + if (!auth || auth.oauthAppId !== app.id) { + throw new common_1.HttpException({ error: 'invalid_grant' }, common_1.HttpStatus.BAD_REQUEST); + } + if (!auth.codeExpiresAt || new Date() > auth.codeExpiresAt) { + throw new common_1.HttpException({ error: 'invalid_grant', error_description: 'Code has expired' }, common_1.HttpStatus.BAD_REQUEST); + } + const token = 'pos_' + (0, make_is_1.makeId)(40); + const encryptedToken = auth_service_1.AuthService.fixedEncryption(token); + const { organizationId, organization: { paymentId }, } = await this._oauthRepository.exchangeCodeForToken(auth.id, encryptedToken); + return { + id: organizationId, + cus: paymentId, + access_token: token, + token_type: 'bearer', + }; + } + async getOrgByOAuthToken(token) { + const encrypted = auth_service_1.AuthService.fixedEncryption(token); + return this._oauthRepository.findByAccessToken(encrypted); + } + async getApprovedApps(userId) { + return this._oauthRepository.getApprovedApps(userId); + } + async revokeApp(userId, authId) { + await this._oauthRepository.revokeAuthorization(userId, authId); + return { success: true }; + } +}; +exports.OAuthService = OAuthService; +exports.OAuthService = OAuthService = tslib_1.__decorate([ + (0, common_1.Injectable)(), + tslib_1.__metadata("design:paramtypes", [oauth_repository_1.OAuthRepository]) +], OAuthService); +//# sourceMappingURL=oauth.service.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/oauth/oauth.service.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/oauth/oauth.service.js.map new file mode 100644 index 0000000000000000000000000000000000000000..1696048b4a01e89e5da6874a1c1697b34367f2a5 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/oauth/oauth.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"oauth.service.js","sourceRoot":"","sources":["../../../../../../../../../libraries/nestjs-libraries/src/database/prisma/oauth/oauth.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/organizations/organization.repository.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/organizations/organization.repository.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..6f0fcd1eabb2db31a9e0acb12a6d90e2dda51788 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/organizations/organization.repository.d.ts @@ -0,0 +1,253 @@ +import { PrismaRepository } from "../prisma.service"; +import { ShortLinkPreference } from '@prisma/client'; +import { CreateOrgUserDto } from "../../../dtos/auth/create.org.user.dto"; +export declare class OrganizationRepository { + private _organization; + private _userOrg; + private _user; + constructor(_organization: PrismaRepository<'organization'>, _userOrg: PrismaRepository<'userOrganization'>, _user: PrismaRepository<'user'>); + createMaxUser(id: string, name: string, saasName: string, email: string): import(".prisma/client").Prisma.Prisma__OrganizationClient<{ + id: string; + apiKey: string; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + getOrgByApiKey(api: string): import(".prisma/client").Prisma.Prisma__OrganizationClient<{ + subscription: { + subscriptionTier: import(".prisma/client").$Enums.SubscriptionTier; + totalChannels: number; + isLifetime: boolean; + }; + } & { + id: string; + name: string; + description: string | null; + apiKey: string | null; + paymentId: string | null; + streakSince: Date | null; + createdAt: Date; + updatedAt: Date; + allowTrial: boolean; + isTrailing: boolean; + shortlink: import(".prisma/client").$Enums.ShortLinkPreference; + }, null, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + getCount(): import(".prisma/client").Prisma.PrismaPromise; + getUserOrg(id: string): import(".prisma/client").Prisma.Prisma__UserOrganizationClient<{ + organization: { + subscription: { + subscriptionTier: import(".prisma/client").$Enums.SubscriptionTier; + totalChannels: number; + isLifetime: boolean; + }; + users: { + id: string; + disabled: boolean; + role: import(".prisma/client").$Enums.Role; + userId: string; + }[]; + } & { + id: string; + name: string; + description: string | null; + apiKey: string | null; + paymentId: string | null; + streakSince: Date | null; + createdAt: Date; + updatedAt: Date; + allowTrial: boolean; + isTrailing: boolean; + shortlink: import(".prisma/client").$Enums.ShortLinkPreference; + }; + user: { + password: string | null; + email: string; + id: string; + name: string | null; + createdAt: Date; + updatedAt: Date; + providerName: import(".prisma/client").$Enums.Provider; + lastName: string | null; + isSuperAdmin: boolean; + bio: string | null; + audience: number; + providerId: string | null; + timezone: number; + lastReadNotifications: Date; + inviteId: string | null; + activated: boolean; + account: string | null; + connectedAccount: boolean; + lastOnline: Date; + ip: string | null; + agent: string | null; + sendSuccessEmails: boolean; + sendFailureEmails: boolean; + sendStreakEmails: boolean; + pictureId: string | null; + }; + }, null, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + getImpersonateUser(name: string): import(".prisma/client").Prisma.PrismaPromise<{ + organization: { + id: string; + }; + user: { + email: string; + id: string; + name: string; + }; + id: string; + }[]>; + updateApiKey(orgId: string): import(".prisma/client").Prisma.Prisma__OrganizationClient<{ + id: string; + name: string; + description: string | null; + apiKey: string | null; + paymentId: string | null; + streakSince: Date | null; + createdAt: Date; + updatedAt: Date; + allowTrial: boolean; + isTrailing: boolean; + shortlink: import(".prisma/client").$Enums.ShortLinkPreference; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + getOrgsByUserId(userId: string): Promise<({ + subscription: { + createdAt: Date; + subscriptionTier: import(".prisma/client").$Enums.SubscriptionTier; + totalChannels: number; + isLifetime: boolean; + }; + users: { + disabled: boolean; + role: import(".prisma/client").$Enums.Role; + }[]; + } & { + id: string; + name: string; + description: string | null; + apiKey: string | null; + paymentId: string | null; + streakSince: Date | null; + createdAt: Date; + updatedAt: Date; + allowTrial: boolean; + isTrailing: boolean; + shortlink: import(".prisma/client").$Enums.ShortLinkPreference; + })[]>; + getOrgById(id: string): Promise<{ + id: string; + name: string; + description: string | null; + apiKey: string | null; + paymentId: string | null; + streakSince: Date | null; + createdAt: Date; + updatedAt: Date; + allowTrial: boolean; + isTrailing: boolean; + shortlink: import(".prisma/client").$Enums.ShortLinkPreference; + }>; + addUserToOrg(userId: string, id: string, orgId: string, role: 'USER' | 'ADMIN'): Promise; + createOrgAndUser(body: Omit & { + providerId?: string; + }, hasEmail: boolean, ip: string, userAgent: string): Promise<{ + id: string; + users: { + user: { + password: string | null; + email: string; + id: string; + name: string | null; + createdAt: Date; + updatedAt: Date; + providerName: import(".prisma/client").$Enums.Provider; + lastName: string | null; + isSuperAdmin: boolean; + bio: string | null; + audience: number; + providerId: string | null; + timezone: number; + lastReadNotifications: Date; + inviteId: string | null; + activated: boolean; + account: string | null; + connectedAccount: boolean; + lastOnline: Date; + ip: string | null; + agent: string | null; + sendSuccessEmails: boolean; + sendFailureEmails: boolean; + sendStreakEmails: boolean; + pictureId: string | null; + }; + }[]; + }>; + getOrgByCustomerId(customerId: string): import(".prisma/client").Prisma.Prisma__OrganizationClient<{ + id: string; + name: string; + description: string | null; + apiKey: string | null; + paymentId: string | null; + streakSince: Date | null; + createdAt: Date; + updatedAt: Date; + allowTrial: boolean; + isTrailing: boolean; + shortlink: import(".prisma/client").$Enums.ShortLinkPreference; + }, null, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + setStreak(organizationId: string, type: 'start' | 'end'): Promise; + getTeam(orgId: string): Promise<{ + users: { + user: { + email: string; + id: string; + sendSuccessEmails: boolean; + sendFailureEmails: boolean; + sendStreakEmails: boolean; + }; + role: import(".prisma/client").$Enums.Role; + }[]; + }>; + getAllUsersOrgs(orgId: string): import(".prisma/client").Prisma.Prisma__OrganizationClient<{ + users: { + user: { + email: string; + id: string; + sendSuccessEmails: boolean; + sendFailureEmails: boolean; + }; + }[]; + }, null, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + deleteTeamMember(orgId: string, userId: string): Promise<{ + id: string; + createdAt: Date; + updatedAt: Date; + organizationId: string; + disabled: boolean; + role: import(".prisma/client").$Enums.Role; + userId: string; + }>; + disableOrEnableNonSuperAdminUsers(orgId: string, disable: boolean): import(".prisma/client").Prisma.PrismaPromise; + getShortlinkPreference(orgId: string): import(".prisma/client").Prisma.Prisma__OrganizationClient<{ + shortlink: import(".prisma/client").$Enums.ShortLinkPreference; + }, null, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + updateShortlinkPreference(orgId: string, shortlink: ShortLinkPreference): import(".prisma/client").Prisma.Prisma__OrganizationClient<{ + id: string; + name: string; + description: string | null; + apiKey: string | null; + paymentId: string | null; + streakSince: Date | null; + createdAt: Date; + updatedAt: Date; + allowTrial: boolean; + isTrailing: boolean; + shortlink: import(".prisma/client").$Enums.ShortLinkPreference; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/organizations/organization.repository.js b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/organizations/organization.repository.js new file mode 100644 index 0000000000000000000000000000000000000000..6adc94009c103c3d2a4f730a3f5f02f944fa0265 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/organizations/organization.repository.js @@ -0,0 +1,395 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.OrganizationRepository = void 0; +const tslib_1 = require("tslib"); +const prisma_service_1 = require("../prisma.service"); +const client_1 = require("@prisma/client"); +const common_1 = require("@nestjs/common"); +const auth_service_1 = require("../../../../../helpers/src/auth/auth.service"); +const make_is_1 = require("../../../services/make.is"); +let OrganizationRepository = class OrganizationRepository { + constructor(_organization, _userOrg, _user) { + this._organization = _organization; + this._userOrg = _userOrg; + this._user = _user; + } + createMaxUser(id, name, saasName, email) { + return this._organization.model.organization.create({ + select: { + id: true, + apiKey: true, + }, + data: { + name: name ? `${name}###${id}` : `Unnamed User###${id}`, + apiKey: auth_service_1.AuthService.fixedEncryption((0, make_is_1.makeId)(20)), + isTrailing: false, + subscription: { + create: { + totalChannels: 1000000, + subscriptionTier: 'ULTIMATE', + isLifetime: true, + period: 'YEARLY', + }, + }, + users: { + create: { + role: client_1.Role.SUPERADMIN, + user: { + create: { + activated: true, + email: email + ? email.split('@').join(`+${saasName}@`) + : `${saasName}+` + (0, make_is_1.makeId)(10) + '@postiz.com', + name: name ? `${name}###${id}` : `Unnamed User###${id}`, + providerName: 'LOCAL', + password: auth_service_1.AuthService.hashPassword((0, make_is_1.makeId)(500)), + timezone: 0, + }, + }, + }, + }, + }, + }); + } + getOrgByApiKey(api) { + return this._organization.model.organization.findFirst({ + where: { + apiKey: api, + }, + include: { + subscription: { + select: { + subscriptionTier: true, + totalChannels: true, + isLifetime: true, + }, + }, + }, + }); + } + getCount() { + return this._organization.model.organization.count(); + } + getUserOrg(id) { + return this._userOrg.model.userOrganization.findFirst({ + where: { + id, + }, + select: { + user: true, + organization: { + include: { + users: { + select: { + id: true, + disabled: true, + role: true, + userId: true, + }, + }, + subscription: { + select: { + subscriptionTier: true, + totalChannels: true, + isLifetime: true, + }, + }, + }, + }, + }, + }); + } + getImpersonateUser(name) { + return this._userOrg.model.userOrganization.findMany({ + where: { + OR: [ + { + organizationId: { + contains: name, + }, + }, + { + user: { + OR: [ + { + name: { + contains: name, + }, + }, + { + email: { + contains: name, + }, + }, + { + id: { + contains: name, + }, + }, + ], + }, + }, + ], + }, + select: { + id: true, + organization: { + select: { + id: true, + }, + }, + user: { + select: { + id: true, + name: true, + email: true, + }, + }, + }, + }); + } + updateApiKey(orgId) { + return this._organization.model.organization.update({ + where: { + id: orgId, + }, + data: { + apiKey: auth_service_1.AuthService.fixedEncryption((0, make_is_1.makeId)(20)), + }, + }); + } + async getOrgsByUserId(userId) { + return this._organization.model.organization.findMany({ + where: { + users: { + some: { + userId, + }, + }, + }, + include: { + users: { + where: { + userId, + }, + select: { + disabled: true, + role: true, + }, + }, + subscription: { + select: { + subscriptionTier: true, + totalChannels: true, + isLifetime: true, + createdAt: true, + }, + }, + }, + }); + } + async getOrgById(id) { + return this._organization.model.organization.findUnique({ + where: { + id, + }, + }); + } + async addUserToOrg(userId, id, orgId, role) { + const checkIfInviteExists = await this._user.model.user.findFirst({ + where: { + inviteId: id, + }, + }); + if (checkIfInviteExists) { + return false; + } + const checkForSubscription = await this._organization.model.organization.findFirst({ + where: { + id: orgId, + }, + select: { + subscription: true, + }, + }); + if (process.env.STRIPE_PUBLISHABLE_KEY && + checkForSubscription?.subscription?.subscriptionTier === + client_1.SubscriptionTier.STANDARD) { + return false; + } + const create = await this._userOrg.model.userOrganization.create({ + data: { + role, + userId, + organizationId: orgId, + }, + }); + await this._user.model.user.update({ + where: { + id: userId, + }, + data: { + inviteId: id, + }, + }); + return create; + } + async createOrgAndUser(body, hasEmail, ip, userAgent) { + return this._organization.model.organization.create({ + data: { + name: body.company, + apiKey: auth_service_1.AuthService.fixedEncryption((0, make_is_1.makeId)(20)), + allowTrial: true, + isTrailing: true, + users: { + create: { + role: client_1.Role.SUPERADMIN, + user: { + create: { + activated: body.provider !== 'LOCAL' || !hasEmail, + email: body.email, + password: body.password + ? auth_service_1.AuthService.hashPassword(body.password) + : '', + providerName: body.provider, + providerId: body.providerId || '', + timezone: 0, + ip, + agent: userAgent, + }, + }, + }, + }, + }, + select: { + id: true, + users: { + select: { + user: true, + }, + }, + }, + }); + } + getOrgByCustomerId(customerId) { + return this._organization.model.organization.findFirst({ + where: { + paymentId: customerId, + }, + }); + } + async setStreak(organizationId, type) { + try { + await this._organization.model.organization.update({ + where: { + id: organizationId, + ...(type === 'start' + ? { + streakSince: null, + } + : {}), + }, + data: { + ...(type === 'end' ? { streakSince: null } : {}), + ...(type === 'start' ? { streakSince: new Date() } : {}), + }, + }); + } + catch (err) { } + } + async getTeam(orgId) { + return this._organization.model.organization.findUnique({ + where: { + id: orgId, + }, + select: { + users: { + select: { + role: true, + user: { + select: { + email: true, + id: true, + sendSuccessEmails: true, + sendFailureEmails: true, + sendStreakEmails: true, + }, + }, + }, + }, + }, + }); + } + getAllUsersOrgs(orgId) { + return this._organization.model.organization.findUnique({ + where: { + id: orgId, + }, + select: { + users: { + select: { + user: { + select: { + email: true, + id: true, + sendSuccessEmails: true, + sendFailureEmails: true, + }, + }, + }, + }, + }, + }); + } + async deleteTeamMember(orgId, userId) { + return this._userOrg.model.userOrganization.delete({ + where: { + userId_organizationId: { + userId, + organizationId: orgId, + }, + }, + }); + } + disableOrEnableNonSuperAdminUsers(orgId, disable) { + return this._userOrg.model.userOrganization.updateMany({ + where: { + organizationId: orgId, + role: { + not: client_1.Role.SUPERADMIN, + }, + }, + data: { + disabled: disable, + }, + }); + } + getShortlinkPreference(orgId) { + return this._organization.model.organization.findUnique({ + where: { + id: orgId, + }, + select: { + shortlink: true, + }, + }); + } + updateShortlinkPreference(orgId, shortlink) { + return this._organization.model.organization.update({ + where: { + id: orgId, + }, + data: { + shortlink, + }, + }); + } +}; +exports.OrganizationRepository = OrganizationRepository; +exports.OrganizationRepository = OrganizationRepository = tslib_1.__decorate([ + (0, common_1.Injectable)(), + tslib_1.__metadata("design:paramtypes", [prisma_service_1.PrismaRepository, + prisma_service_1.PrismaRepository, + prisma_service_1.PrismaRepository]) +], OrganizationRepository); +//# sourceMappingURL=organization.repository.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/organizations/organization.repository.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/organizations/organization.repository.js.map new file mode 100644 index 0000000000000000000000000000000000000000..c1eb641cf965fc97e897859ca4c1b0727c074463 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/organizations/organization.repository.js.map @@ -0,0 +1 @@ +{"version":3,"file":"organization.repository.js","sourceRoot":"","sources":["../../../../../../../../../libraries/nestjs-libraries/src/database/prisma/organizations/organization.repository.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/organizations/organization.service.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/organizations/organization.service.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..9062c8e400479ec7f349a233229e3df05515fc3e --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/organizations/organization.service.d.ts @@ -0,0 +1,236 @@ +import { CreateOrgUserDto } from "../../../dtos/auth/create.org.user.dto"; +import { OrganizationRepository } from "./organization.repository"; +import { NotificationService } from "../notifications/notification.service"; +import { AddTeamMemberDto } from "../../../dtos/settings/add.team.member.dto"; +import { Organization, ShortLinkPreference } from '@prisma/client'; +export declare class OrganizationService { + private _organizationRepository; + private _notificationsService; + constructor(_organizationRepository: OrganizationRepository, _notificationsService: NotificationService); + createOrgAndUser(body: Omit & { + providerId?: string; + }, ip: string, userAgent: string): Promise<{ + id: string; + users: { + user: { + password: string | null; + email: string; + id: string; + name: string | null; + createdAt: Date; + updatedAt: Date; + providerName: import(".prisma/client").$Enums.Provider; + lastName: string | null; + isSuperAdmin: boolean; + bio: string | null; + audience: number; + providerId: string | null; + timezone: number; + lastReadNotifications: Date; + inviteId: string | null; + activated: boolean; + account: string | null; + connectedAccount: boolean; + lastOnline: Date; + ip: string | null; + agent: string | null; + sendSuccessEmails: boolean; + sendFailureEmails: boolean; + sendStreakEmails: boolean; + pictureId: string | null; + }; + }[]; + }>; + getCount(): Promise; + createMaxUser(id: string, name: string, saasName: string, email: string): Promise<{ + id: string; + apiKey: string; + }>; + addUserToOrg(userId: string, id: string, orgId: string, role: 'USER' | 'ADMIN'): Promise; + getOrgById(id: string): Promise<{ + id: string; + name: string; + description: string | null; + apiKey: string | null; + paymentId: string | null; + streakSince: Date | null; + createdAt: Date; + updatedAt: Date; + allowTrial: boolean; + isTrailing: boolean; + shortlink: import(".prisma/client").$Enums.ShortLinkPreference; + }>; + getOrgByApiKey(api: string): import(".prisma/client").Prisma.Prisma__OrganizationClient<{ + subscription: { + subscriptionTier: import(".prisma/client").$Enums.SubscriptionTier; + totalChannels: number; + isLifetime: boolean; + }; + } & { + id: string; + name: string; + description: string | null; + apiKey: string | null; + paymentId: string | null; + streakSince: Date | null; + createdAt: Date; + updatedAt: Date; + allowTrial: boolean; + isTrailing: boolean; + shortlink: import(".prisma/client").$Enums.ShortLinkPreference; + }, null, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + getUserOrg(id: string): import(".prisma/client").Prisma.Prisma__UserOrganizationClient<{ + organization: { + subscription: { + subscriptionTier: import(".prisma/client").$Enums.SubscriptionTier; + totalChannels: number; + isLifetime: boolean; + }; + users: { + id: string; + disabled: boolean; + role: import(".prisma/client").$Enums.Role; + userId: string; + }[]; + } & { + id: string; + name: string; + description: string | null; + apiKey: string | null; + paymentId: string | null; + streakSince: Date | null; + createdAt: Date; + updatedAt: Date; + allowTrial: boolean; + isTrailing: boolean; + shortlink: import(".prisma/client").$Enums.ShortLinkPreference; + }; + user: { + password: string | null; + email: string; + id: string; + name: string | null; + createdAt: Date; + updatedAt: Date; + providerName: import(".prisma/client").$Enums.Provider; + lastName: string | null; + isSuperAdmin: boolean; + bio: string | null; + audience: number; + providerId: string | null; + timezone: number; + lastReadNotifications: Date; + inviteId: string | null; + activated: boolean; + account: string | null; + connectedAccount: boolean; + lastOnline: Date; + ip: string | null; + agent: string | null; + sendSuccessEmails: boolean; + sendFailureEmails: boolean; + sendStreakEmails: boolean; + pictureId: string | null; + }; + }, null, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + getOrgsByUserId(userId: string): Promise<({ + subscription: { + createdAt: Date; + subscriptionTier: import(".prisma/client").$Enums.SubscriptionTier; + totalChannels: number; + isLifetime: boolean; + }; + users: { + disabled: boolean; + role: import(".prisma/client").$Enums.Role; + }[]; + } & { + id: string; + name: string; + description: string | null; + apiKey: string | null; + paymentId: string | null; + streakSince: Date | null; + createdAt: Date; + updatedAt: Date; + allowTrial: boolean; + isTrailing: boolean; + shortlink: import(".prisma/client").$Enums.ShortLinkPreference; + })[]>; + updateApiKey(orgId: string): import(".prisma/client").Prisma.Prisma__OrganizationClient<{ + id: string; + name: string; + description: string | null; + apiKey: string | null; + paymentId: string | null; + streakSince: Date | null; + createdAt: Date; + updatedAt: Date; + allowTrial: boolean; + isTrailing: boolean; + shortlink: import(".prisma/client").$Enums.ShortLinkPreference; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + getTeam(orgId: string): Promise<{ + users: { + user: { + email: string; + id: string; + sendSuccessEmails: boolean; + sendFailureEmails: boolean; + sendStreakEmails: boolean; + }; + role: import(".prisma/client").$Enums.Role; + }[]; + }>; + setStreak(organizationId: string, type: 'start' | 'end'): Promise; + getOrgByCustomerId(customerId: string): import(".prisma/client").Prisma.Prisma__OrganizationClient<{ + id: string; + name: string; + description: string | null; + apiKey: string | null; + paymentId: string | null; + streakSince: Date | null; + createdAt: Date; + updatedAt: Date; + allowTrial: boolean; + isTrailing: boolean; + shortlink: import(".prisma/client").$Enums.ShortLinkPreference; + }, null, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + inviteTeamMember(orgId: string, body: AddTeamMemberDto): Promise<{ + url: string; + }>; + deleteTeamMember(org: Organization, userId: string): Promise<{ + id: string; + createdAt: Date; + updatedAt: Date; + organizationId: string; + disabled: boolean; + role: import(".prisma/client").$Enums.Role; + userId: string; + }>; + disableOrEnableNonSuperAdminUsers(orgId: string, disable: boolean): import(".prisma/client").Prisma.PrismaPromise; + getShortlinkPreference(orgId: string): import(".prisma/client").Prisma.Prisma__OrganizationClient<{ + shortlink: import(".prisma/client").$Enums.ShortLinkPreference; + }, null, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + updateShortlinkPreference(orgId: string, shortlink: ShortLinkPreference): import(".prisma/client").Prisma.Prisma__OrganizationClient<{ + id: string; + name: string; + description: string | null; + apiKey: string | null; + paymentId: string | null; + streakSince: Date | null; + createdAt: Date; + updatedAt: Date; + allowTrial: boolean; + isTrailing: boolean; + shortlink: import(".prisma/client").$Enums.ShortLinkPreference; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/organizations/organization.service.js b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/organizations/organization.service.js new file mode 100644 index 0000000000000000000000000000000000000000..7c6f766a62fa3de51adf1f52d64c72564d2f3578 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/organizations/organization.service.js @@ -0,0 +1,93 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.OrganizationService = void 0; +const tslib_1 = require("tslib"); +const common_1 = require("@nestjs/common"); +const organization_repository_1 = require("./organization.repository"); +const notification_service_1 = require("../notifications/notification.service"); +const auth_service_1 = require("../../../../../helpers/src/auth/auth.service"); +const dayjs_1 = tslib_1.__importDefault(require("dayjs")); +const make_is_1 = require("../../../services/make.is"); +let OrganizationService = class OrganizationService { + constructor(_organizationRepository, _notificationsService) { + this._organizationRepository = _organizationRepository; + this._notificationsService = _notificationsService; + } + async createOrgAndUser(body, ip, userAgent) { + return this._organizationRepository.createOrgAndUser(body, this._notificationsService.hasEmailProvider(), ip, userAgent); + } + async getCount() { + return this._organizationRepository.getCount(); + } + async createMaxUser(id, name, saasName, email) { + return this._organizationRepository.createMaxUser(id, name, saasName, email); + } + addUserToOrg(userId, id, orgId, role) { + return this._organizationRepository.addUserToOrg(userId, id, orgId, role); + } + getOrgById(id) { + return this._organizationRepository.getOrgById(id); + } + getOrgByApiKey(api) { + return this._organizationRepository.getOrgByApiKey(api); + } + getUserOrg(id) { + return this._organizationRepository.getUserOrg(id); + } + getOrgsByUserId(userId) { + return this._organizationRepository.getOrgsByUserId(userId); + } + updateApiKey(orgId) { + return this._organizationRepository.updateApiKey(orgId); + } + getTeam(orgId) { + return this._organizationRepository.getTeam(orgId); + } + async setStreak(organizationId, type) { + return this._organizationRepository.setStreak(organizationId, type); + } + getOrgByCustomerId(customerId) { + return this._organizationRepository.getOrgByCustomerId(customerId); + } + async inviteTeamMember(orgId, body) { + const timeLimit = (0, dayjs_1.default)().add(2, 'day').format('YYYY-MM-DD HH:mm:ss'); + const id = (0, make_is_1.makeId)(5); + const url = process.env.FRONTEND_URL + + `/?org=${auth_service_1.AuthService.signJWT({ ...body, orgId, timeLimit, id })}`; + if (body.sendEmail) { + await this._notificationsService.sendEmail(body.email, 'You have been invited to join an organization', `You have been invited to join an organization. Click here to join.
The link will expire in 2 days.`); + } + return { url }; + } + async deleteTeamMember(org, userId) { + const userOrgs = await this._organizationRepository.getOrgsByUserId(userId); + const findOrgToDelete = userOrgs.find((orgUser) => orgUser.id === org.id); + if (!findOrgToDelete) { + throw new Error('User is not part of this organization'); + } + const myRole = org.users[0].role; + const userRole = findOrgToDelete.users[0].role; + const myLevel = myRole === 'USER' ? 0 : myRole === 'ADMIN' ? 1 : 2; + const userLevel = userRole === 'USER' ? 0 : userRole === 'ADMIN' ? 1 : 2; + if (myLevel < userLevel) { + throw new Error('You do not have permission to delete this user'); + } + return this._organizationRepository.deleteTeamMember(org.id, userId); + } + disableOrEnableNonSuperAdminUsers(orgId, disable) { + return this._organizationRepository.disableOrEnableNonSuperAdminUsers(orgId, disable); + } + getShortlinkPreference(orgId) { + return this._organizationRepository.getShortlinkPreference(orgId); + } + updateShortlinkPreference(orgId, shortlink) { + return this._organizationRepository.updateShortlinkPreference(orgId, shortlink); + } +}; +exports.OrganizationService = OrganizationService; +exports.OrganizationService = OrganizationService = tslib_1.__decorate([ + (0, common_1.Injectable)(), + tslib_1.__metadata("design:paramtypes", [organization_repository_1.OrganizationRepository, + notification_service_1.NotificationService]) +], OrganizationService); +//# sourceMappingURL=organization.service.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/organizations/organization.service.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/organizations/organization.service.js.map new file mode 100644 index 0000000000000000000000000000000000000000..4fb2a0bb22894d038151dcf180e184a8b1864bd6 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/organizations/organization.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"organization.service.js","sourceRoot":"","sources":["../../../../../../../../../libraries/nestjs-libraries/src/database/prisma/organizations/organization.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/posts/posts.repository.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/posts/posts.repository.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..7736d4daa1a894bd0d706fd83507b4e4663889a7 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/posts/posts.repository.d.ts @@ -0,0 +1,660 @@ +import { PrismaRepository } from "../prisma.service"; +import { Post as PostBody } from "../../../dtos/posts/create.post.dto"; +import { CreationMethod, State } from '@prisma/client'; +import { GetPostsDto } from "../../../dtos/posts/get.posts.dto"; +import { GetPostsListDto } from "../../../dtos/posts/get.posts.list.dto"; +import dayjs from 'dayjs'; +import { CreateTagDto } from "../../../dtos/posts/create.tag.dto"; +export declare class PostsRepository { + private _post; + private _popularPosts; + private _comments; + private _tags; + private _tagsPosts; + private _errors; + constructor(_post: PrismaRepository<'post'>, _popularPosts: PrismaRepository<'popularPosts'>, _comments: PrismaRepository<'comments'>, _tags: PrismaRepository<'tags'>, _tagsPosts: PrismaRepository<'tagsPosts'>, _errors: PrismaRepository<'errors'>); + searchForMissingThreeHoursPosts(): import(".prisma/client").Prisma.PrismaPromise<{ + integration: { + providerIdentifier: string; + }; + id: string; + organizationId: string; + publishDate: Date; + }[]>; + getOldPosts(orgId: string, date: string): import(".prisma/client").Prisma.PrismaPromise<{ + integration: { + id: string; + name: string; + picture: string; + type: string; + providerIdentifier: string; + }; + id: string; + content: string; + state: import(".prisma/client").$Enums.State; + publishDate: Date; + releaseURL: string; + }[]>; + updateImages(id: string, images: string): import(".prisma/client").Prisma.Prisma__PostClient<{ + error: string | null; + id: string; + description: string | null; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + content: string; + title: string | null; + image: string | null; + group: string; + delay: number; + settings: string | null; + state: import(".prisma/client").$Enums.State; + publishDate: Date; + integrationId: string; + parentPostId: string | null; + releaseId: string | null; + releaseURL: string | null; + submittedForOrderId: string | null; + submittedForOrganizationId: string | null; + approvedSubmitForOrder: import(".prisma/client").$Enums.APPROVED_SUBMIT_FOR_ORDER; + creationMethod: import(".prisma/client").$Enums.CreationMethod; + lastMessageId: string | null; + intervalInDays: number | null; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + getPostUrls(orgId: string, ids: string[]): import(".prisma/client").Prisma.PrismaPromise<{ + id: string; + releaseURL: string; + }[]>; + getPosts(orgId: string, query: GetPostsDto): Promise; + getPostsList(orgId: string, query: GetPostsListDto): Promise<{ + posts: { + tags: { + tag: { + id: string; + name: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + color: string; + orgId: string; + }; + }[]; + integration: { + id: string; + name: string; + picture: string; + providerIdentifier: string; + }; + id: string; + content: string; + group: string; + state: import(".prisma/client").$Enums.State; + publishDate: Date; + releaseId: string; + releaseURL: string; + creationMethod: import(".prisma/client").$Enums.CreationMethod; + intervalInDays: number; + }[]; + total: number; + page: number; + limit: number; + hasMore: boolean; + }>; + deletePost(orgId: string, group: string): Promise<{ + id: string; + }>; + getPostsByGroup(orgId: string, group: string): import(".prisma/client").Prisma.PrismaPromise<({ + tags: { + tag: { + id: string; + name: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + color: string; + orgId: string; + }; + }[]; + integration: { + id: string; + name: string; + createdAt: Date; + updatedAt: Date | null; + deletedAt: Date | null; + organizationId: string; + disabled: boolean; + picture: string | null; + type: string; + internalId: string; + providerIdentifier: string; + token: string; + tokenExpiration: Date | null; + refreshToken: string | null; + profile: string | null; + inBetweenSteps: boolean; + refreshNeeded: boolean; + postingTimes: string; + customInstanceDetails: string | null; + customerId: string | null; + rootInternalId: string | null; + additionalSettings: string | null; + }; + } & { + error: string | null; + id: string; + description: string | null; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + content: string; + title: string | null; + image: string | null; + group: string; + delay: number; + settings: string | null; + state: import(".prisma/client").$Enums.State; + publishDate: Date; + integrationId: string; + parentPostId: string | null; + releaseId: string | null; + releaseURL: string | null; + submittedForOrderId: string | null; + submittedForOrganizationId: string | null; + approvedSubmitForOrder: import(".prisma/client").$Enums.APPROVED_SUBMIT_FOR_ORDER; + creationMethod: import(".prisma/client").$Enums.CreationMethod; + lastMessageId: string | null; + intervalInDays: number | null; + })[]>; + getPost(id: string, includeIntegration?: boolean, orgId?: string, isFirst?: boolean): import(".prisma/client").Prisma.Prisma__PostClient<{ + tags: { + tag: { + id: string; + name: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + color: string; + orgId: string; + }; + }[]; + integration: { + id: string; + name: string; + createdAt: Date; + updatedAt: Date | null; + deletedAt: Date | null; + organizationId: string; + disabled: boolean; + picture: string | null; + type: string; + internalId: string; + providerIdentifier: string; + token: string; + tokenExpiration: Date | null; + refreshToken: string | null; + profile: string | null; + inBetweenSteps: boolean; + refreshNeeded: boolean; + postingTimes: string; + customInstanceDetails: string | null; + customerId: string | null; + rootInternalId: string | null; + additionalSettings: string | null; + }; + childrenPost: { + error: string | null; + id: string; + description: string | null; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + content: string; + title: string | null; + image: string | null; + group: string; + delay: number; + settings: string | null; + state: import(".prisma/client").$Enums.State; + publishDate: Date; + integrationId: string; + parentPostId: string | null; + releaseId: string | null; + releaseURL: string | null; + submittedForOrderId: string | null; + submittedForOrganizationId: string | null; + approvedSubmitForOrder: import(".prisma/client").$Enums.APPROVED_SUBMIT_FOR_ORDER; + creationMethod: import(".prisma/client").$Enums.CreationMethod; + lastMessageId: string | null; + intervalInDays: number | null; + }[]; + } & { + error: string | null; + id: string; + description: string | null; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + content: string; + title: string | null; + image: string | null; + group: string; + delay: number; + settings: string | null; + state: import(".prisma/client").$Enums.State; + publishDate: Date; + integrationId: string; + parentPostId: string | null; + releaseId: string | null; + releaseURL: string | null; + submittedForOrderId: string | null; + submittedForOrganizationId: string | null; + approvedSubmitForOrder: import(".prisma/client").$Enums.APPROVED_SUBMIT_FOR_ORDER; + creationMethod: import(".prisma/client").$Enums.CreationMethod; + lastMessageId: string | null; + intervalInDays: number | null; + }, null, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + updatePost(id: string, postId: string, releaseURL: string): import(".prisma/client").Prisma.Prisma__PostClient<{ + error: string | null; + id: string; + description: string | null; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + content: string; + title: string | null; + image: string | null; + group: string; + delay: number; + settings: string | null; + state: import(".prisma/client").$Enums.State; + publishDate: Date; + integrationId: string; + parentPostId: string | null; + releaseId: string | null; + releaseURL: string | null; + submittedForOrderId: string | null; + submittedForOrganizationId: string | null; + approvedSubmitForOrder: import(".prisma/client").$Enums.APPROVED_SUBMIT_FOR_ORDER; + creationMethod: import(".prisma/client").$Enums.CreationMethod; + lastMessageId: string | null; + intervalInDays: number | null; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + updateReleaseId(id: string, orgId: string, releaseId: string): import(".prisma/client").Prisma.Prisma__PostClient<{ + error: string | null; + id: string; + description: string | null; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + content: string; + title: string | null; + image: string | null; + group: string; + delay: number; + settings: string | null; + state: import(".prisma/client").$Enums.State; + publishDate: Date; + integrationId: string; + parentPostId: string | null; + releaseId: string | null; + releaseURL: string | null; + submittedForOrderId: string | null; + submittedForOrganizationId: string | null; + approvedSubmitForOrder: import(".prisma/client").$Enums.APPROVED_SUBMIT_FOR_ORDER; + creationMethod: import(".prisma/client").$Enums.CreationMethod; + lastMessageId: string | null; + intervalInDays: number | null; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + changeState(id: string, state: State, err?: any, body?: any): Promise<{ + integration: { + providerIdentifier: string; + }; + } & { + error: string | null; + id: string; + description: string | null; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + content: string; + title: string | null; + image: string | null; + group: string; + delay: number; + settings: string | null; + state: import(".prisma/client").$Enums.State; + publishDate: Date; + integrationId: string; + parentPostId: string | null; + releaseId: string | null; + releaseURL: string | null; + submittedForOrderId: string | null; + submittedForOrganizationId: string | null; + approvedSubmitForOrder: import(".prisma/client").$Enums.APPROVED_SUBMIT_FOR_ORDER; + creationMethod: import(".prisma/client").$Enums.CreationMethod; + lastMessageId: string | null; + intervalInDays: number | null; + }>; + getErrorsByPostIds(postIds: string[]): import(".prisma/client").Prisma.PrismaPromise<{ + id: string; + createdAt: Date; + updatedAt: Date; + organizationId: string; + postId: string; + message: string; + platform: string; + body: string; + }[]>; + changeDate(orgId: string, id: string, date: string, isDraft: boolean, action?: 'schedule' | 'update'): Promise<{ + error: string | null; + id: string; + description: string | null; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + content: string; + title: string | null; + image: string | null; + group: string; + delay: number; + settings: string | null; + state: import(".prisma/client").$Enums.State; + publishDate: Date; + integrationId: string; + parentPostId: string | null; + releaseId: string | null; + releaseURL: string | null; + submittedForOrderId: string | null; + submittedForOrganizationId: string | null; + approvedSubmitForOrder: import(".prisma/client").$Enums.APPROVED_SUBMIT_FOR_ORDER; + creationMethod: import(".prisma/client").$Enums.CreationMethod; + lastMessageId: string | null; + intervalInDays: number | null; + }>; + countPostsFromDay(orgId: string, date: Date): import(".prisma/client").Prisma.PrismaPromise; + createOrUpdatePost(state: 'draft' | 'schedule' | 'now' | 'update', orgId: string, date: string, body: PostBody, tags: { + value: string; + label: string; + }[], creationMethod: CreationMethod, inter?: number): Promise<{ + previousPost: string; + posts: { + error: string | null; + id: string; + description: string | null; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + content: string; + title: string | null; + image: string | null; + group: string; + delay: number; + settings: string | null; + state: import(".prisma/client").$Enums.State; + publishDate: Date; + integrationId: string; + parentPostId: string | null; + releaseId: string | null; + releaseURL: string | null; + submittedForOrderId: string | null; + submittedForOrganizationId: string | null; + approvedSubmitForOrder: import(".prisma/client").$Enums.APPROVED_SUBMIT_FOR_ORDER; + creationMethod: import(".prisma/client").$Enums.CreationMethod; + lastMessageId: string | null; + intervalInDays: number | null; + }[]; + }>; + submit(id: string, order: string, buyerOrganizationId: string): Promise<{ + id: string; + description: string; + submittedForOrder: { + messageGroupId: string; + }; + }>; + updateMessage(id: string, messageId: string): import(".prisma/client").Prisma.Prisma__PostClient<{ + error: string | null; + id: string; + description: string | null; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + content: string; + title: string | null; + image: string | null; + group: string; + delay: number; + settings: string | null; + state: import(".prisma/client").$Enums.State; + publishDate: Date; + integrationId: string; + parentPostId: string | null; + releaseId: string | null; + releaseURL: string | null; + submittedForOrderId: string | null; + submittedForOrganizationId: string | null; + approvedSubmitForOrder: import(".prisma/client").$Enums.APPROVED_SUBMIT_FOR_ORDER; + creationMethod: import(".prisma/client").$Enums.CreationMethod; + lastMessageId: string | null; + intervalInDays: number | null; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + getPostById(id: string, org?: string): import(".prisma/client").Prisma.Prisma__PostClient<{ + integration: { + id: string; + name: string; + createdAt: Date; + updatedAt: Date | null; + deletedAt: Date | null; + organizationId: string; + disabled: boolean; + picture: string | null; + type: string; + internalId: string; + providerIdentifier: string; + token: string; + tokenExpiration: Date | null; + refreshToken: string | null; + profile: string | null; + inBetweenSteps: boolean; + refreshNeeded: boolean; + postingTimes: string; + customInstanceDetails: string | null; + customerId: string | null; + rootInternalId: string | null; + additionalSettings: string | null; + }; + submittedForOrder: { + posts: { + error: string | null; + id: string; + description: string | null; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + content: string; + title: string | null; + image: string | null; + group: string; + delay: number; + settings: string | null; + state: import(".prisma/client").$Enums.State; + publishDate: Date; + integrationId: string; + parentPostId: string | null; + releaseId: string | null; + releaseURL: string | null; + submittedForOrderId: string | null; + submittedForOrganizationId: string | null; + approvedSubmitForOrder: import(".prisma/client").$Enums.APPROVED_SUBMIT_FOR_ORDER; + creationMethod: import(".prisma/client").$Enums.CreationMethod; + lastMessageId: string | null; + intervalInDays: number | null; + }[]; + ordersItems: { + id: string; + integrationId: string; + orderId: string; + quantity: number; + price: number; + }[]; + seller: { + id: string; + account: string; + }; + } & { + id: string; + createdAt: Date; + updatedAt: Date; + status: import(".prisma/client").$Enums.OrderStatus; + buyerId: string; + sellerId: string; + messageGroupId: string; + captureId: string | null; + }; + } & { + error: string | null; + id: string; + description: string | null; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + content: string; + title: string | null; + image: string | null; + group: string; + delay: number; + settings: string | null; + state: import(".prisma/client").$Enums.State; + publishDate: Date; + integrationId: string; + parentPostId: string | null; + releaseId: string | null; + releaseURL: string | null; + submittedForOrderId: string | null; + submittedForOrganizationId: string | null; + approvedSubmitForOrder: import(".prisma/client").$Enums.APPROVED_SUBMIT_FOR_ORDER; + creationMethod: import(".prisma/client").$Enums.CreationMethod; + lastMessageId: string | null; + intervalInDays: number | null; + }, null, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + findAllExistingCategories(): import(".prisma/client").Prisma.PrismaPromise<{ + category: string; + }[]>; + findAllExistingTopicsOfCategory(category: string): import(".prisma/client").Prisma.PrismaPromise<{ + topic: string; + }[]>; + findPopularPosts(category: string, topic?: string): import(".prisma/client").Prisma.PrismaPromise<{ + content: string; + hook: string; + }[]>; + createPopularPosts(post: { + category: string; + topic: string; + content: string; + hook: string; + }): import(".prisma/client").Prisma.Prisma__PopularPostsClient<{ + id: string; + createdAt: Date; + updatedAt: Date; + content: string; + category: string; + topic: string; + hook: string; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + getPostsCountsByDates(orgId: string, times: number[], date: dayjs.Dayjs): Promise; + getComments(postId: string): Promise<{ + id: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + userId: string; + content: string; + postId: string; + }[]>; + getTags(orgId: string): Promise<{ + id: string; + name: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + color: string; + orgId: string; + }[]>; + createTag(orgId: string, body: CreateTagDto): import(".prisma/client").Prisma.Prisma__TagsClient<{ + id: string; + name: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + color: string; + orgId: string; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + editTag(id: string, orgId: string, body: CreateTagDto): import(".prisma/client").Prisma.Prisma__TagsClient<{ + id: string; + name: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + color: string; + orgId: string; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + deleteTag(id: string, orgId: string): import(".prisma/client").Prisma.Prisma__TagsClient<{ + id: string; + name: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + color: string; + orgId: string; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + createComment(orgId: string, userId: string, postId: string, content: string): import(".prisma/client").Prisma.Prisma__CommentsClient<{ + id: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + userId: string; + content: string; + postId: string; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + getPostByForWebhookId(postId: string): Promise<{ + integration: { + id: string; + name: string; + picture: string; + type: string; + providerIdentifier: string; + }; + id: string; + content: string; + state: import(".prisma/client").$Enums.State; + publishDate: Date; + releaseURL: string; + }[]>; + getPostsSince(orgId: string, since: string): Promise<{ + integration: { + id: string; + name: string; + picture: string; + type: string; + providerIdentifier: string; + }; + id: string; + content: string; + state: import(".prisma/client").$Enums.State; + publishDate: Date; + releaseURL: string; + }[]>; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/posts/posts.repository.js b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/posts/posts.repository.js new file mode 100644 index 0000000000000000000000000000000000000000..f578f3f3f848228fdc26cac695aa4764108126ed --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/posts/posts.repository.js @@ -0,0 +1,822 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PostsRepository = void 0; +const tslib_1 = require("tslib"); +const prisma_service_1 = require("../prisma.service"); +const common_1 = require("@nestjs/common"); +const client_1 = require("@prisma/client"); +const dayjs_1 = tslib_1.__importDefault(require("dayjs")); +const isoWeek_1 = tslib_1.__importDefault(require("dayjs/plugin/isoWeek")); +const weekOfYear_1 = tslib_1.__importDefault(require("dayjs/plugin/weekOfYear")); +const isSameOrAfter_1 = tslib_1.__importDefault(require("dayjs/plugin/isSameOrAfter")); +const utc_1 = tslib_1.__importDefault(require("dayjs/plugin/utc")); +const uuid_1 = require("uuid"); +dayjs_1.default.extend(isoWeek_1.default); +dayjs_1.default.extend(weekOfYear_1.default); +dayjs_1.default.extend(isSameOrAfter_1.default); +dayjs_1.default.extend(utc_1.default); +let PostsRepository = class PostsRepository { + constructor(_post, _popularPosts, _comments, _tags, _tagsPosts, _errors) { + this._post = _post; + this._popularPosts = _popularPosts; + this._comments = _comments; + this._tags = _tags; + this._tagsPosts = _tagsPosts; + this._errors = _errors; + } + searchForMissingThreeHoursPosts() { + return this._post.model.post.findMany({ + where: { + integration: { + refreshNeeded: false, + inBetweenSteps: false, + disabled: false, + deletedAt: null, + }, + publishDate: { + gte: dayjs_1.default.utc().subtract(2, 'day').toDate(), + lt: dayjs_1.default.utc().toDate(), + }, + state: 'QUEUE', + deletedAt: null, + parentPostId: null, + }, + select: { + id: true, + organizationId: true, + integration: { + select: { + providerIdentifier: true, + }, + }, + publishDate: true, + }, + }); + } + getOldPosts(orgId, date) { + return this._post.model.post.findMany({ + where: { + integration: { + refreshNeeded: false, + inBetweenSteps: false, + disabled: false, + }, + organizationId: orgId, + publishDate: { + lte: (0, dayjs_1.default)(date).toDate(), + }, + deletedAt: null, + parentPostId: null, + }, + orderBy: { + publishDate: 'desc', + }, + select: { + id: true, + content: true, + publishDate: true, + releaseURL: true, + state: true, + integration: { + select: { + id: true, + name: true, + providerIdentifier: true, + picture: true, + type: true, + }, + }, + }, + }); + } + updateImages(id, images) { + return this._post.model.post.update({ + where: { + id, + }, + data: { + image: images, + }, + }); + } + getPostUrls(orgId, ids) { + return this._post.model.post.findMany({ + where: { + organizationId: orgId, + id: { + in: ids, + }, + }, + select: { + id: true, + releaseURL: true, + }, + }); + } + async getPosts(orgId, query) { + const startDate = dayjs_1.default.utc(query.startDate).toDate(); + const endDate = dayjs_1.default.utc(query.endDate).toDate(); + const list = await this._post.model.post.findMany({ + where: { + AND: [ + { + OR: [ + { + organizationId: orgId, + }, + ], + }, + { + OR: [ + { + publishDate: { + gte: startDate, + lte: endDate, + }, + }, + { + intervalInDays: { + not: null, + }, + }, + ], + }, + ], + integration: { + deletedAt: null, + organizationId: orgId, + }, + deletedAt: null, + parentPostId: null, + ...(query.customer + ? { + integration: { + customerId: query.customer, + }, + } + : {}), + }, + select: { + id: true, + content: true, + publishDate: true, + releaseURL: true, + releaseId: true, + state: true, + intervalInDays: true, + group: true, + creationMethod: true, + tags: { + select: { + tag: true, + }, + }, + integration: { + select: { + id: true, + providerIdentifier: true, + name: true, + picture: true, + }, + }, + }, + }); + return list.reduce((all, post) => { + if (!post.intervalInDays) { + return [...all, post]; + } + const addMorePosts = []; + let startingDate = dayjs_1.default.utc(post.publishDate); + while (dayjs_1.default.utc(endDate).isSameOrAfter(startingDate)) { + if ((0, dayjs_1.default)(startingDate).isSameOrAfter(dayjs_1.default.utc(post.publishDate))) { + addMorePosts.push({ + ...post, + publishDate: startingDate.toDate(), + actualDate: post.publishDate, + }); + } + startingDate = startingDate.add(post.intervalInDays, 'days'); + } + return [...all, ...addMorePosts]; + }, []); + } + async getPostsList(orgId, query) { + const page = query.page || 0; + const limit = query.limit || 20; + const skip = page * limit; + const stateFilter = query.state || 'all'; + const stateAndDate = stateFilter === 'scheduled' + ? { + state: client_1.State.QUEUE, + } + : stateFilter === 'draft' + ? { state: client_1.State.DRAFT } + : stateFilter === 'published' + ? { state: client_1.State.PUBLISHED } + : { + state: { + in: [client_1.State.QUEUE, client_1.State.DRAFT, client_1.State.PUBLISHED, client_1.State.ERROR], + }, + }; + const orderDirection = stateFilter === 'published' ? 'desc' : 'asc'; + const where = { + AND: [ + { + OR: [ + { + organizationId: orgId, + }, + ], + }, + ], + ...stateAndDate, + ...(stateFilter === 'published' + ? {} + : { publishDate: { gte: dayjs_1.default.utc().toDate() } }), + deletedAt: null, + parentPostId: null, + intervalInDays: null, + integration: { + deletedAt: null, + organizationId: orgId, + ...(query.customer + ? { + customerId: query.customer, + } + : {}), + }, + }; + const [posts, total] = await Promise.all([ + this._post.model.post.findMany({ + where, + skip, + take: limit, + orderBy: { + publishDate: orderDirection, + }, + select: { + id: true, + content: true, + publishDate: true, + releaseURL: true, + releaseId: true, + state: true, + intervalInDays: true, + group: true, + creationMethod: true, + tags: { + select: { + tag: true, + }, + }, + integration: { + select: { + id: true, + providerIdentifier: true, + name: true, + picture: true, + }, + }, + }, + }), + this._post.model.post.count({ where }), + ]); + return { + posts, + total, + page, + limit, + hasMore: skip + posts.length < total, + }; + } + async deletePost(orgId, group) { + await this._post.model.post.updateMany({ + where: { + organizationId: orgId, + group, + }, + data: { + deletedAt: new Date(), + }, + }); + return this._post.model.post.findFirst({ + where: { + organizationId: orgId, + group, + parentPostId: null, + }, + select: { + id: true, + }, + }); + } + getPostsByGroup(orgId, group) { + return this._post.model.post.findMany({ + where: { + group, + ...(orgId ? { organizationId: orgId } : {}), + deletedAt: null, + }, + include: { + integration: true, + tags: { + select: { + tag: true, + }, + }, + }, + }); + } + getPost(id, includeIntegration = false, orgId, isFirst) { + return this._post.model.post.findUnique({ + where: { + id, + ...(orgId ? { organizationId: orgId } : {}), + deletedAt: null, + }, + include: { + ...(includeIntegration + ? { + integration: true, + tags: { + select: { + tag: true, + }, + }, + } + : {}), + childrenPost: true, + }, + }); + } + updatePost(id, postId, releaseURL) { + return this._post.model.post.update({ + where: { + id, + }, + data: { + state: 'PUBLISHED', + releaseURL, + releaseId: postId, + }, + }); + } + updateReleaseId(id, orgId, releaseId) { + return this._post.model.post.update({ + where: { + id, + organizationId: orgId, + releaseId: 'missing', + }, + data: { + releaseId: String(releaseId), + }, + }); + } + async changeState(id, state, err, body) { + const update = await this._post.model.post.update({ + where: { + id, + }, + data: { + state, + ...(err + ? { error: typeof err === 'string' ? err : JSON.stringify(err) } + : {}), + }, + include: { + integration: { + select: { + providerIdentifier: true, + }, + }, + }, + }); + if (state === 'ERROR' && err && body) { + try { + await this._errors.model.errors.create({ + data: { + message: typeof err === 'string' ? err : JSON.stringify(err), + organizationId: update.organizationId, + platform: update.integration.providerIdentifier, + postId: update.id, + body: typeof body === 'string' ? body : JSON.stringify(body), + }, + }); + } + catch (err) { } + } + return update; + } + getErrorsByPostIds(postIds) { + return this._errors.model.errors.findMany({ + where: { + postId: { in: postIds }, + }, + orderBy: { createdAt: 'desc' }, + }); + } + async changeDate(orgId, id, date, isDraft, action = 'schedule') { + return this._post.model.post.update({ + where: { + organizationId: orgId, + id, + }, + data: { + publishDate: (0, dayjs_1.default)(date).toDate(), + ...(action === 'schedule' + ? { + state: isDraft ? 'DRAFT' : 'QUEUE', + releaseId: null, + releaseURL: null, + } + : {}), + }, + }); + } + countPostsFromDay(orgId, date) { + return this._post.model.post.count({ + where: { + organizationId: orgId, + publishDate: { + gte: date, + }, + OR: [ + { + deletedAt: null, + state: { + in: ['QUEUE'], + }, + }, + { + state: 'PUBLISHED', + }, + ], + }, + }); + } + async createOrUpdatePost(state, orgId, date, body, tags, creationMethod, inter) { + const posts = []; + const uuid = (0, uuid_1.v4)(); + for (const value of body.value) { + const updateData = (type) => ({ + publishDate: (0, dayjs_1.default)(date).toDate(), + integration: { + connect: { + id: body.integration.id, + organizationId: orgId, + }, + }, + ...(posts?.[posts.length - 1]?.id + ? { + parentPost: { + connect: { + id: posts[posts.length - 1]?.id, + }, + }, + } + : type === 'update' + ? { + parentPost: { + disconnect: true, + }, + } + : {}), + content: value.content, + delay: value.delay || 0, + group: uuid, + intervalInDays: inter ? +inter : null, + approvedSubmitForOrder: client_1.APPROVED_SUBMIT_FOR_ORDER.NO, + ...(type === 'create' ? { creationMethod } : {}), + ...(state === 'update' + ? {} + : { + state: state === 'draft' ? 'DRAFT' : 'QUEUE', + }), + image: JSON.stringify(value.image), + settings: JSON.stringify(body.settings), + organization: { + connect: { + id: orgId, + }, + }, + }); + posts.push(await this._post.model.post.upsert({ + where: { + id: value.id || (0, uuid_1.v4)(), + }, + create: { ...updateData('create') }, + update: { + ...updateData('update'), + lastMessage: { + disconnect: true, + }, + submittedForOrder: { + disconnect: true, + }, + }, + })); + if (posts.length === 1) { + await this._tagsPosts.model.tagsPosts.deleteMany({ + where: { + post: { + id: posts[0].id, + }, + }, + }); + if (tags.length) { + const tagsList = await this._tags.model.tags.findMany({ + where: { + orgId: orgId, + name: { + in: tags.map((tag) => tag.label).filter((f) => f), + }, + }, + }); + if (tagsList.length) { + await this._post.model.post.update({ + where: { + id: posts[posts.length - 1].id, + }, + data: { + tags: { + createMany: { + data: tagsList.map((tag) => ({ + tagId: tag.id, + })), + }, + }, + }, + }); + } + } + } + } + const previousPost = body.group + ? (await this._post.model.post.findFirst({ + where: { + group: body.group, + deletedAt: null, + parentPostId: null, + }, + select: { + id: true, + }, + }))?.id + : undefined; + if (body.group) { + await this._post.model.post.updateMany({ + where: { + group: body.group, + deletedAt: null, + }, + data: { + parentPostId: null, + deletedAt: new Date(), + }, + }); + } + return { previousPost, posts }; + } + async submit(id, order, buyerOrganizationId) { + return this._post.model.post.update({ + where: { + id, + }, + data: { + submittedForOrderId: order, + approvedSubmitForOrder: 'WAITING_CONFIRMATION', + submittedForOrganizationId: buyerOrganizationId, + }, + select: { + id: true, + description: true, + submittedForOrder: { + select: { + messageGroupId: true, + }, + }, + }, + }); + } + updateMessage(id, messageId) { + return this._post.model.post.update({ + where: { + id, + }, + data: { + lastMessageId: messageId, + }, + }); + } + getPostById(id, org) { + return this._post.model.post.findUnique({ + where: { + id, + ...(org ? { organizationId: org } : {}), + }, + include: { + integration: true, + submittedForOrder: { + include: { + posts: { + where: { + state: 'PUBLISHED', + }, + }, + ordersItems: true, + seller: { + select: { + id: true, + account: true, + }, + }, + }, + }, + }, + }); + } + findAllExistingCategories() { + return this._popularPosts.model.popularPosts.findMany({ + select: { + category: true, + }, + distinct: ['category'], + }); + } + findAllExistingTopicsOfCategory(category) { + return this._popularPosts.model.popularPosts.findMany({ + where: { + category, + }, + select: { + topic: true, + }, + distinct: ['topic'], + }); + } + findPopularPosts(category, topic) { + return this._popularPosts.model.popularPosts.findMany({ + where: { + category, + ...(topic ? { topic } : {}), + }, + select: { + content: true, + hook: true, + }, + }); + } + createPopularPosts(post) { + return this._popularPosts.model.popularPosts.create({ + data: { + category: 'category', + topic: 'topic', + content: 'content', + hook: 'hook', + }, + }); + } + async getPostsCountsByDates(orgId, times, date) { + const dates = await this._post.model.post.findMany({ + where: { + deletedAt: null, + organizationId: orgId, + publishDate: { + in: times.map((time) => { + return date.clone().add(time, 'minutes').toDate(); + }), + }, + }, + }); + return times.filter((time) => date.clone().add(time, 'minutes').isAfter(dayjs_1.default.utc()) && + !dates.find((dateFind) => { + return (dayjs_1.default + .utc(dateFind.publishDate) + .diff(date.clone().startOf('day'), 'minutes') == time); + })); + } + async getComments(postId) { + return this._comments.model.comments.findMany({ + where: { + postId, + }, + orderBy: { + createdAt: 'asc', + }, + }); + } + async getTags(orgId) { + return this._tags.model.tags.findMany({ + where: { + orgId, + deletedAt: null, + }, + }); + } + createTag(orgId, body) { + return this._tags.model.tags.create({ + data: { + orgId, + name: body.name, + color: body.color, + }, + }); + } + editTag(id, orgId, body) { + return this._tags.model.tags.update({ + where: { + id, + }, + data: { + name: body.name, + color: body.color, + }, + }); + } + deleteTag(id, orgId) { + return this._tags.model.tags.update({ + where: { + id, + orgId, + }, + data: { + deletedAt: new Date(), + }, + }); + } + createComment(orgId, userId, postId, content) { + return this._comments.model.comments.create({ + data: { + organizationId: orgId, + userId, + postId, + content, + }, + }); + } + async getPostByForWebhookId(postId) { + return this._post.model.post.findMany({ + where: { + id: postId, + deletedAt: null, + parentPostId: null, + }, + select: { + id: true, + content: true, + publishDate: true, + releaseURL: true, + state: true, + integration: { + select: { + id: true, + name: true, + providerIdentifier: true, + picture: true, + type: true, + }, + }, + }, + }); + } + async getPostsSince(orgId, since) { + return this._post.model.post.findMany({ + where: { + organizationId: orgId, + publishDate: { + gte: new Date(since), + }, + deletedAt: null, + parentPostId: null, + }, + select: { + id: true, + content: true, + publishDate: true, + releaseURL: true, + state: true, + integration: { + select: { + id: true, + name: true, + providerIdentifier: true, + picture: true, + type: true, + }, + }, + }, + }); + } +}; +exports.PostsRepository = PostsRepository; +exports.PostsRepository = PostsRepository = tslib_1.__decorate([ + (0, common_1.Injectable)(), + tslib_1.__metadata("design:paramtypes", [prisma_service_1.PrismaRepository, + prisma_service_1.PrismaRepository, + prisma_service_1.PrismaRepository, + prisma_service_1.PrismaRepository, + prisma_service_1.PrismaRepository, + prisma_service_1.PrismaRepository]) +], PostsRepository); +//# sourceMappingURL=posts.repository.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/posts/posts.repository.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/posts/posts.repository.js.map new file mode 100644 index 0000000000000000000000000000000000000000..488b0d8ee43673819a3861e0363fcdcc0c57128c --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/posts/posts.repository.js.map @@ -0,0 +1 @@ +{"version":3,"file":"posts.repository.js","sourceRoot":"","sources":["../../../../../../../../../libraries/nestjs-libraries/src/database/prisma/posts/posts.repository.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/posts/posts.service.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/posts/posts.service.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..5ba6fc8fdc6b4290b8ada2d46be5f5643419091c --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/posts/posts.service.d.ts @@ -0,0 +1,549 @@ +import { PostsRepository } from "./posts.repository"; +import { CreatePostDto } from "../../../dtos/posts/create.post.dto"; +import { IntegrationManager } from "../../../integrations/integration.manager"; +import { Integration, Post, CreationMethod, State } from '@prisma/client'; +import { GetPostsDto } from "../../../dtos/posts/get.posts.dto"; +import { GetPostsListDto } from "../../../dtos/posts/get.posts.list.dto"; +import { CreateGeneratedPostsDto } from "../../../dtos/generator/create.generated.posts.dto"; +import { IntegrationService } from "../integrations/integration.service"; +import { MediaService } from "../media/media.service"; +import { ShortLinkService } from "../../../short-linking/short.link.service"; +import { CreateTagDto } from "../../../dtos/posts/create.tag.dto"; +import { OpenaiService } from "../../../openai/openai.service"; +import { TemporalService } from 'nestjs-temporal-core'; +import { AnalyticsData } from "../../../integrations/social/social.integrations.interface"; +import { RefreshIntegrationService } from "../../../integrations/refresh.integration.service"; +type PostWithConditionals = Post & { + integration?: Integration; + childrenPost: Post[]; +}; +export declare class PostsService { + private _postRepository; + private _integrationManager; + private _integrationService; + private _mediaService; + private _shortLinkService; + private _openaiService; + private _temporalService; + private _refreshIntegrationService; + private storage; + constructor(_postRepository: PostsRepository, _integrationManager: IntegrationManager, _integrationService: IntegrationService, _mediaService: MediaService, _shortLinkService: ShortLinkService, _openaiService: OpenaiService, _temporalService: TemporalService, _refreshIntegrationService: RefreshIntegrationService); + searchForMissingThreeHoursPosts(): import(".prisma/client").Prisma.PrismaPromise<{ + integration: { + providerIdentifier: string; + }; + id: string; + organizationId: string; + publishDate: Date; + }[]>; + updatePost(id: string, postId: string, releaseURL: string): import(".prisma/client").Prisma.Prisma__PostClient<{ + error: string | null; + id: string; + description: string | null; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + content: string; + title: string | null; + image: string | null; + group: string; + delay: number; + settings: string | null; + state: import(".prisma/client").$Enums.State; + publishDate: Date; + integrationId: string; + parentPostId: string | null; + releaseId: string | null; + releaseURL: string | null; + submittedForOrderId: string | null; + submittedForOrganizationId: string | null; + approvedSubmitForOrder: import(".prisma/client").$Enums.APPROVED_SUBMIT_FOR_ORDER; + creationMethod: import(".prisma/client").$Enums.CreationMethod; + lastMessageId: string | null; + intervalInDays: number | null; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + getMissingContent(orgId: string, postId: string, forceRefresh?: boolean): Promise<{ + id: string; + url: string; + }[]>; + getPostById(postId: string, orgId: string): Promise<{ + integration: { + id: string; + name: string; + createdAt: Date; + updatedAt: Date | null; + deletedAt: Date | null; + organizationId: string; + disabled: boolean; + picture: string | null; + type: string; + internalId: string; + providerIdentifier: string; + token: string; + tokenExpiration: Date | null; + refreshToken: string | null; + profile: string | null; + inBetweenSteps: boolean; + refreshNeeded: boolean; + postingTimes: string; + customInstanceDetails: string | null; + customerId: string | null; + rootInternalId: string | null; + additionalSettings: string | null; + }; + submittedForOrder: { + posts: { + error: string | null; + id: string; + description: string | null; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + content: string; + title: string | null; + image: string | null; + group: string; + delay: number; + settings: string | null; + state: import(".prisma/client").$Enums.State; + publishDate: Date; + integrationId: string; + parentPostId: string | null; + releaseId: string | null; + releaseURL: string | null; + submittedForOrderId: string | null; + submittedForOrganizationId: string | null; + approvedSubmitForOrder: import(".prisma/client").$Enums.APPROVED_SUBMIT_FOR_ORDER; + creationMethod: import(".prisma/client").$Enums.CreationMethod; + lastMessageId: string | null; + intervalInDays: number | null; + }[]; + ordersItems: { + id: string; + integrationId: string; + orderId: string; + quantity: number; + price: number; + }[]; + seller: { + id: string; + account: string; + }; + } & { + id: string; + createdAt: Date; + updatedAt: Date; + status: import(".prisma/client").$Enums.OrderStatus; + buyerId: string; + sellerId: string; + messageGroupId: string; + captureId: string | null; + }; + } & { + error: string | null; + id: string; + description: string | null; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + content: string; + title: string | null; + image: string | null; + group: string; + delay: number; + settings: string | null; + state: import(".prisma/client").$Enums.State; + publishDate: Date; + integrationId: string; + parentPostId: string | null; + releaseId: string | null; + releaseURL: string | null; + submittedForOrderId: string | null; + submittedForOrganizationId: string | null; + approvedSubmitForOrder: import(".prisma/client").$Enums.APPROVED_SUBMIT_FOR_ORDER; + creationMethod: import(".prisma/client").$Enums.CreationMethod; + lastMessageId: string | null; + intervalInDays: number | null; + }>; + updateReleaseId(orgId: string, postId: string, releaseId: string): Promise<{ + error: string | null; + id: string; + description: string | null; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + content: string; + title: string | null; + image: string | null; + group: string; + delay: number; + settings: string | null; + state: import(".prisma/client").$Enums.State; + publishDate: Date; + integrationId: string; + parentPostId: string | null; + releaseId: string | null; + releaseURL: string | null; + submittedForOrderId: string | null; + submittedForOrganizationId: string | null; + approvedSubmitForOrder: import(".prisma/client").$Enums.APPROVED_SUBMIT_FOR_ORDER; + creationMethod: import(".prisma/client").$Enums.CreationMethod; + lastMessageId: string | null; + intervalInDays: number | null; + }>; + checkPostAnalytics(orgId: string, postId: string, date: number, forceRefresh?: boolean): Promise; + getStatistics(orgId: string, id: string): Promise<{ + clicks: { + short: string; + original: string; + clicks: string; + }[]; + }>; + mapTypeToPost(body: CreatePostDto, organization: string, replaceDraft?: boolean): Promise; + getPostsRecursively(id: string, includeIntegration?: boolean, orgId?: string, isFirst?: boolean): Promise; + getPosts(orgId: string, query: GetPostsDto): Promise; + getPostsMinified(orgId: string, query: GetPostsDto): Promise>; + getPostsList(orgId: string, query: GetPostsListDto): Promise>; + updateMedia(id: string, imagesList: any[], convertToJPEG?: boolean): Promise; + getPostGroupDebugExport(orgId: string, group: string): Promise<{ + type: "draft"; + shortLink: boolean; + date: any; + tags: any; + posts: { + integration: { + id: string; + }; + group: any; + settings: any; + value: { + content: string; + image: any; + delay: number; + }[]; + }[]; + _debug: { + providerIdentifier: any; + providerName: any; + state: any; + error: any; + errors: { + message: string; + platform: string; + body: string; + createdAt: Date; + }[]; + originalGroup: string; + originalPublishDate: any; + exportedAt: `${string}-${string}-${string}T${string}:${string}:${string}Z`; + }; + }>; + getPostsByGroup(orgId: string, group: string): Promise<{ + group: string; + posts: { + image: any[]; + error: string | null; + id: string; + description: string | null; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + content: string; + title: string | null; + group: string; + delay: number; + settings: string | null; + state: import(".prisma/client").$Enums.State; + publishDate: Date; + integrationId: string; + parentPostId: string | null; + releaseId: string | null; + releaseURL: string | null; + submittedForOrderId: string | null; + submittedForOrganizationId: string | null; + approvedSubmitForOrder: import(".prisma/client").$Enums.APPROVED_SUBMIT_FOR_ORDER; + creationMethod: import(".prisma/client").$Enums.CreationMethod; + lastMessageId: string | null; + intervalInDays: number | null; + integration?: Integration; + childrenPost: Post[]; + }[]; + integrationPicture: string; + integration: string; + settings: any; + }>; + arrangePostsByGroup(all: any, parent?: string): PostWithConditionals[]; + getPost(orgId: string, id: string, convertToJPEG?: boolean): Promise<{ + group: string; + posts: { + image: any[]; + error: string | null; + id: string; + description: string | null; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + content: string; + title: string | null; + group: string; + delay: number; + settings: string | null; + state: import(".prisma/client").$Enums.State; + publishDate: Date; + integrationId: string; + parentPostId: string | null; + releaseId: string | null; + releaseURL: string | null; + submittedForOrderId: string | null; + submittedForOrganizationId: string | null; + approvedSubmitForOrder: import(".prisma/client").$Enums.APPROVED_SUBMIT_FOR_ORDER; + creationMethod: import(".prisma/client").$Enums.CreationMethod; + lastMessageId: string | null; + intervalInDays: number | null; + integration?: Integration; + childrenPost: Post[]; + }[]; + integrationPicture: string; + integration: string; + settings: any; + }>; + getOldPosts(orgId: string, date: string): Promise<{ + integration: { + id: string; + name: string; + picture: string; + type: string; + providerIdentifier: string; + }; + id: string; + content: string; + state: import(".prisma/client").$Enums.State; + publishDate: Date; + releaseURL: string; + }[]>; + updateTags(orgId: string, post: Post[]): Promise; + checkInternalPlug(integration: Integration, orgId: string, id: string, settings: any): Promise<{ + type: string; + post: string; + originalIntegration: string; + integration: string; + plugName: string; + orgId: string; + delay: number; + information: { + name: string; + integrations: { + id: string; + }[]; + delay: string; + active: boolean; + }; + }[]>; + checkPlugs(orgId: string, providerName: string, integrationId: string): Promise<{ + type: string; + plugId: string; + delay: any; + totalRuns: any; + }[]>; + deletePost(orgId: string, group: string): Promise<{ + error: boolean; + }>; + countPostsFromDay(orgId: string, date: Date): Promise; + getPostByForWebhookId(id: string): Promise<{ + integration: { + id: string; + name: string; + picture: string; + type: string; + providerIdentifier: string; + }; + id: string; + content: string; + state: import(".prisma/client").$Enums.State; + publishDate: Date; + releaseURL: string; + }[]>; + startWorkflow(taskQueue: string, postId: string, orgId: string, state: State): Promise; + validatePosts(orgId: string, posts: Array<{ + integration: { + id: string; + }; + value: Array<{ + content?: string; + image?: Array<{ + path: string; + thumbnail?: string; + }>; + }>; + settings?: any; + }>): Promise<{ + id: string; + identifier: string; + name: string; + valid: boolean; + settingsError: string; + errors: string | true; + emptyContent: boolean; + tooLong: boolean; + maximumCharacters: number; + }[]>; + private firstValidationError; + createPost(orgId: string, body: CreatePostDto, creationMethod: CreationMethod): Promise; + separatePosts(content: string, len: number): Promise<{ + posts: any[]; + }>; + changeState(id: string, state: State, err?: any, body?: any): Promise<{ + integration: { + providerIdentifier: string; + }; + } & { + error: string | null; + id: string; + description: string | null; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + content: string; + title: string | null; + image: string | null; + group: string; + delay: number; + settings: string | null; + state: import(".prisma/client").$Enums.State; + publishDate: Date; + integrationId: string; + parentPostId: string | null; + releaseId: string | null; + releaseURL: string | null; + submittedForOrderId: string | null; + submittedForOrganizationId: string | null; + approvedSubmitForOrder: import(".prisma/client").$Enums.APPROVED_SUBMIT_FOR_ORDER; + creationMethod: import(".prisma/client").$Enums.CreationMethod; + lastMessageId: string | null; + intervalInDays: number | null; + }>; + changePostStatus(orgId: string, id: string, status: 'draft' | 'schedule'): Promise<{ + id: string; + state: "QUEUE" | "DRAFT"; + }>; + changeDate(orgId: string, id: string, date: string, action?: 'schedule' | 'update'): Promise<{ + error: string | null; + id: string; + description: string | null; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + content: string; + title: string | null; + image: string | null; + group: string; + delay: number; + settings: string | null; + state: import(".prisma/client").$Enums.State; + publishDate: Date; + integrationId: string; + parentPostId: string | null; + releaseId: string | null; + releaseURL: string | null; + submittedForOrderId: string | null; + submittedForOrganizationId: string | null; + approvedSubmitForOrder: import(".prisma/client").$Enums.APPROVED_SUBMIT_FOR_ORDER; + creationMethod: import(".prisma/client").$Enums.CreationMethod; + lastMessageId: string | null; + intervalInDays: number | null; + }>; + generatePostsDraft(orgId: string, body: CreateGeneratedPostsDto): Promise; + findAllExistingCategories(): import(".prisma/client").Prisma.PrismaPromise<{ + category: string; + }[]>; + findAllExistingTopicsOfCategory(category: string): import(".prisma/client").Prisma.PrismaPromise<{ + topic: string; + }[]>; + findPopularPosts(category: string, topic?: string): import(".prisma/client").Prisma.PrismaPromise<{ + content: string; + hook: string; + }[]>; + findFreeDateTime(orgId: string, integrationId?: string): Promise; + createPopularPosts(post: { + category: string; + topic: string; + content: string; + hook: string; + }): Promise<{ + id: string; + createdAt: Date; + updatedAt: Date; + content: string; + category: string; + topic: string; + hook: string; + }>; + private findFreeDateTimeRecursive; + getComments(postId: string): Promise<{ + id: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + userId: string; + content: string; + postId: string; + }[]>; + getTags(orgId: string): Promise<{ + id: string; + name: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + color: string; + orgId: string; + }[]>; + createTag(orgId: string, body: CreateTagDto): import(".prisma/client").Prisma.Prisma__TagsClient<{ + id: string; + name: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + color: string; + orgId: string; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + editTag(id: string, orgId: string, body: CreateTagDto): import(".prisma/client").Prisma.Prisma__TagsClient<{ + id: string; + name: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + color: string; + orgId: string; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + deleteTag(id: string, orgId: string): import(".prisma/client").Prisma.Prisma__TagsClient<{ + id: string; + name: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + color: string; + orgId: string; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + createComment(orgId: string, userId: string, postId: string, comment: string): import(".prisma/client").Prisma.Prisma__CommentsClient<{ + id: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + userId: string; + content: string; + postId: string; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; +} +export {}; diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/posts/posts.service.js b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/posts/posts.service.js new file mode 100644 index 0000000000000000000000000000000000000000..0b19c4541700ab8ba4809b1a1134cd2fe063165a --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/posts/posts.service.js @@ -0,0 +1,772 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PostsService = void 0; +const tslib_1 = require("tslib"); +const common_1 = require("@nestjs/common"); +const posts_repository_1 = require("./posts.repository"); +const create_post_dto_1 = require("../../../dtos/posts/create.post.dto"); +const dayjs_1 = tslib_1.__importDefault(require("dayjs")); +const integration_manager_1 = require("../../../integrations/integration.manager"); +const lodash_1 = require("lodash"); +const integration_service_1 = require("../integrations/integration.service"); +const make_is_1 = require("../../../services/make.is"); +const utc_1 = tslib_1.__importDefault(require("dayjs/plugin/utc")); +const media_service_1 = require("../media/media.service"); +const short_link_service_1 = require("../../../short-linking/short.link.service"); +const posts_list_minify_1 = require("../../../../../helpers/src/utils/posts.list.minify"); +const axios_1 = tslib_1.__importDefault(require("axios")); +const sharp_1 = tslib_1.__importDefault(require("sharp")); +const upload_factory_1 = require("../../../upload/upload.factory"); +const stream_1 = require("stream"); +const openai_service_1 = require("../../../openai/openai.service"); +dayjs_1.default.extend(utc_1.default); +const Sentry = tslib_1.__importStar(require("@sentry/nestjs")); +const nestjs_temporal_core_1 = require("nestjs-temporal-core"); +const common_2 = require("@temporalio/common"); +const temporal_search_attribute_1 = require("../../../temporal/temporal.search.attribute"); +const timer_1 = require("../../../../../helpers/src/utils/timer"); +const redis_service_1 = require("../../../redis/redis.service"); +const social_abstract_1 = require("../../../integrations/social.abstract"); +const refresh_integration_service_1 = require("../../../integrations/refresh.integration.service"); +const has_extension_1 = require("../../../../../helpers/src/utils/has.extension"); +const strip_links_1 = require("../../../../../helpers/src/utils/strip.links"); +const class_validator_1 = require("class-validator"); +const class_transformer_1 = require("class-transformer"); +const strip_html_validation_1 = require("../../../../../helpers/src/utils/strip.html.validation"); +const count_length_1 = require("../../../../../helpers/src/utils/count.length"); +let PostsService = class PostsService { + constructor(_postRepository, _integrationManager, _integrationService, _mediaService, _shortLinkService, _openaiService, _temporalService, _refreshIntegrationService) { + this._postRepository = _postRepository; + this._integrationManager = _integrationManager; + this._integrationService = _integrationService; + this._mediaService = _mediaService; + this._shortLinkService = _shortLinkService; + this._openaiService = _openaiService; + this._temporalService = _temporalService; + this._refreshIntegrationService = _refreshIntegrationService; + this.storage = upload_factory_1.UploadFactory.createStorage(); + } + searchForMissingThreeHoursPosts() { + return this._postRepository.searchForMissingThreeHoursPosts(); + } + updatePost(id, postId, releaseURL) { + return this._postRepository.updatePost(id, postId, releaseURL); + } + async getMissingContent(orgId, postId, forceRefresh = false) { + const post = await this._postRepository.getPostById(postId, orgId); + if (!post || post.releaseId !== 'missing') { + return []; + } + const integrationProvider = this._integrationManager.getSocialIntegration(post.integration.providerIdentifier); + if (!integrationProvider.missing) { + return []; + } + const getIntegration = post.integration; + if ((0, dayjs_1.default)(getIntegration?.tokenExpiration).isBefore((0, dayjs_1.default)()) || + forceRefresh) { + const data = await this._refreshIntegrationService.refresh(getIntegration); + if (!data) { + return []; + } + const { accessToken } = data; + if (accessToken) { + getIntegration.token = accessToken; + if (integrationProvider.refreshWait) { + await (0, timer_1.timer)(10000); + } + } + else { + await this._integrationService.disconnectChannel(orgId, getIntegration); + return []; + } + } + try { + return await integrationProvider.missing(getIntegration.internalId, getIntegration.token); + } + catch (e) { + console.log(e); + if (e instanceof social_abstract_1.RefreshToken) { + return this.getMissingContent(orgId, postId, true); + } + } + return []; + } + async getPostById(postId, orgId) { + return this._postRepository.getPostById(postId, orgId); + } + async updateReleaseId(orgId, postId, releaseId) { + return this._postRepository.updateReleaseId(postId, orgId, releaseId); + } + async checkPostAnalytics(orgId, postId, date, forceRefresh = false) { + const post = await this._postRepository.getPostById(postId, orgId); + if (!post || !post.releaseId) { + return []; + } + if (post.releaseId === 'missing') { + return { missing: true }; + } + const integrationProvider = this._integrationManager.getSocialIntegration(post.integration.providerIdentifier); + if (!integrationProvider.postAnalytics) { + return []; + } + const getIntegration = post.integration; + if ((0, dayjs_1.default)(getIntegration?.tokenExpiration).isBefore((0, dayjs_1.default)()) || + forceRefresh) { + const data = await this._refreshIntegrationService.refresh(getIntegration); + if (!data) { + return []; + } + const { accessToken } = data; + if (accessToken) { + getIntegration.token = accessToken; + if (integrationProvider.refreshWait) { + await (0, timer_1.timer)(10000); + } + } + else { + await this._integrationService.disconnectChannel(orgId, getIntegration); + return []; + } + } + try { + const loadAnalytics = await integrationProvider.postAnalytics(getIntegration.internalId, getIntegration.token, post.releaseId, date); + await redis_service_1.ioRedis.set(`integration:${orgId}:${post.id}:${date}`, JSON.stringify(loadAnalytics), 'EX', !process.env.NODE_ENV || process.env.NODE_ENV === 'development' + ? 1 + : 3600); + return loadAnalytics; + } + catch (e) { + console.log(e); + if (e instanceof social_abstract_1.RefreshToken) { + return this.checkPostAnalytics(orgId, postId, date, true); + } + } + return []; + } + async getStatistics(orgId, id) { + const getPost = await this.getPostsRecursively(id, true, orgId, true); + const content = getPost.map((p) => p.content); + const shortLinksTracking = await this._shortLinkService.getStatistics(content); + return { + clicks: shortLinksTracking, + }; + } + async mapTypeToPost(body, organization, replaceDraft = false) { + if (!body?.posts?.every((p) => p?.integration?.id)) { + throw new common_1.BadRequestException('All posts must have an integration id'); + } + const mappedValues = { + ...body, + type: replaceDraft ? 'schedule' : body?.type, + posts: await Promise.all(body?.posts?.map(async (post) => { + const integration = await this._integrationService.getIntegrationById(organization, post.integration.id); + if (!integration) { + throw new common_1.BadRequestException(`Integration with id ${post.integration.id} not found`); + } + return { + type: replaceDraft ? 'schedule' : body?.type, + ...post, + settings: { + ...(post.settings || {}), + __type: integration.providerIdentifier, + }, + }; + }) || []), + }; + const validationPipe = new common_1.ValidationPipe({ + skipMissingProperties: false, + transform: true, + transformOptions: { + enableImplicitConversion: true, + }, + }); + return await validationPipe.transform(mappedValues, { + type: 'body', + metatype: create_post_dto_1.CreatePostDto, + }); + } + async getPostsRecursively(id, includeIntegration = false, orgId, isFirst) { + const post = await this._postRepository.getPost(id, includeIntegration, orgId, isFirst); + if (!post) { + return []; + } + return [ + post, + ...(post?.childrenPost?.length + ? await this.getPostsRecursively(post?.childrenPost?.[0]?.id, false, orgId, false) + : []), + ]; + } + async getPosts(orgId, query) { + return this._postRepository.getPosts(orgId, query); + } + async getPostsMinified(orgId, query) { + return (0, posts_list_minify_1.minifyPosts)({ + posts: await this._postRepository.getPosts(orgId, query), + }); + } + async getPostsList(orgId, query) { + return (0, posts_list_minify_1.minifyPostsList)(await this._postRepository.getPostsList(orgId, query)); + } + async updateMedia(id, imagesList, convertToJPEG = false) { + try { + let imageUpdateNeeded = false; + const getImageList = await Promise.all((await Promise.all((imagesList || []).map(async (p) => { + if (!p.path && p.id) { + imageUpdateNeeded = true; + return this._mediaService.getMediaById(p.id); + } + return p; + }))) + .map((m) => { + return { + ...m, + url: m.path.indexOf('http') === -1 + ? process.env.FRONTEND_URL + + '/' + + process.env.NEXT_PUBLIC_UPLOAD_STATIC_DIRECTORY + + m.path + : m.path, + type: 'image', + path: m.path.indexOf('http') === -1 + ? process.env.UPLOAD_DIRECTORY + m.path + : m.path, + }; + }) + .map(async (m) => { + if (!convertToJPEG) { + return m; + } + if ((0, has_extension_1.hasExtension)(m.path, 'png')) { + imageUpdateNeeded = true; + const response = await axios_1.default.get(m.url, { + responseType: 'arraybuffer', + }); + const imageBuffer = Buffer.from(response.data); + const buffer = await (0, sharp_1.default)(imageBuffer) + .jpeg({ quality: 100 }) + .toBuffer(); + const { path, originalname } = await this.storage.uploadFile({ + buffer, + mimetype: 'image/jpeg', + size: buffer.length, + path: '', + fieldname: '', + destination: '', + stream: new stream_1.Readable(), + filename: '', + originalname: '', + encoding: '', + }); + return { + ...m, + name: originalname, + url: path.indexOf('http') === -1 + ? process.env.FRONTEND_URL + + '/' + + process.env.NEXT_PUBLIC_UPLOAD_STATIC_DIRECTORY + + path + : path, + type: 'image', + path: path.indexOf('http') === -1 + ? process.env.UPLOAD_DIRECTORY + path + : path, + }; + } + return m; + })); + if (imageUpdateNeeded) { + await this._postRepository.updateImages(id, JSON.stringify(getImageList)); + } + return getImageList; + } + catch (err) { + return imagesList; + } + } + async getPostGroupDebugExport(orgId, group) { + const loadAll = await this._postRepository.getPostsByGroup(orgId, group); + const errors = await this._postRepository.getErrorsByPostIds(loadAll.map((p) => p.id)); + const posts = this.arrangePostsByGroup(loadAll, undefined); + const rootPost = posts[0]; + return { + type: 'draft', + shortLink: false, + date: rootPost.publishDate.toISOString(), + tags: rootPost.tags?.map((t) => ({ + value: t.tag.id, + label: t.tag.name, + })) || [], + posts: [ + { + integration: { id: 'REPLACE_WITH_LOCAL_INTEGRATION_ID' }, + group: rootPost.group, + settings: JSON.parse(rootPost.settings || '{}'), + value: posts.map((post) => ({ + content: post.content, + image: JSON.parse(post.image || '[]'), + delay: post.delay || 0, + })), + }, + ], + _debug: { + providerIdentifier: rootPost.integration?.providerIdentifier, + providerName: rootPost.integration?.name, + state: rootPost.state, + error: rootPost.error, + errors: errors.map((e) => ({ + message: e.message, + platform: e.platform, + body: e.body, + createdAt: e.createdAt, + })), + originalGroup: group, + originalPublishDate: rootPost.publishDate, + exportedAt: new Date().toISOString(), + }, + }; + } + async getPostsByGroup(orgId, group) { + const convertToJPEG = false; + const loadAll = await this._postRepository.getPostsByGroup(orgId, group); + const posts = this.arrangePostsByGroup(loadAll, undefined); + return { + group: posts?.[0]?.group, + posts: await Promise.all((posts || []).map(async (post) => ({ + ...post, + image: await this.updateMedia(post.id, JSON.parse(post.image || '[]'), convertToJPEG), + }))), + integrationPicture: posts[0]?.integration?.picture, + integration: posts[0].integrationId, + settings: JSON.parse(posts[0].settings || '{}'), + }; + } + arrangePostsByGroup(all, parent) { + const findAll = all + .filter((p) => !parent ? !p.parentPostId : p.parentPostId === parent) + .map(({ integration, ...all }) => ({ + ...all, + ...(!parent ? { integration } : {}), + })); + return [ + ...findAll, + ...(findAll.length + ? findAll.flatMap((p) => this.arrangePostsByGroup(all, p.id)) + : []), + ]; + } + async getPost(orgId, id, convertToJPEG = false) { + const posts = await this.getPostsRecursively(id, true, orgId, true); + const list = { + group: posts?.[0]?.group, + posts: await Promise.all((posts || []).map(async (post) => ({ + ...post, + image: await this.updateMedia(post.id, JSON.parse(post.image || '[]'), convertToJPEG), + }))), + integrationPicture: posts[0]?.integration?.picture, + integration: posts[0].integrationId, + settings: JSON.parse(posts[0].settings || '{}'), + }; + return list; + } + async getOldPosts(orgId, date) { + return this._postRepository.getOldPosts(orgId, date); + } + async updateTags(orgId, post) { + const plainText = JSON.stringify(post); + const extract = Array.from(plainText.match(/\(post:[a-zA-Z0-9-_]+\)/g) || []); + if (!extract.length) { + return post; + } + const ids = (extract || []).map((e) => e.replace('(post:', '').replace(')', '')); + const urls = await this._postRepository.getPostUrls(orgId, ids); + const newPlainText = ids.reduce((acc, value) => { + const findUrl = urls?.find?.((u) => u.id === value)?.releaseURL || ''; + return acc.replace(new RegExp(`\\(post:${value}\\)`, 'g'), findUrl.split(',')[0]); + }, plainText); + return this.updateTags(orgId, JSON.parse(newPlainText)); + } + async checkInternalPlug(integration, orgId, id, settings) { + const plugs = Object.entries(settings).filter(([key]) => { + return key.indexOf('plug-') > -1; + }); + if (plugs.length === 0) { + return []; + } + const parsePlugs = plugs.reduce((all, [key, value]) => { + const [_, name, identifier] = key.split('--'); + all[name] = all[name] || { name }; + all[name][identifier] = value; + return all; + }, {}); + const list = Object.values(parsePlugs); + return (list || []).flatMap((trigger) => { + return (trigger?.integrations || []).flatMap((int) => ({ + type: 'internal-plug', + post: id, + originalIntegration: integration.id, + integration: int.id, + plugName: trigger.name, + orgId: orgId, + delay: +trigger.delay, + information: trigger, + })); + }); + } + async checkPlugs(orgId, providerName, integrationId) { + const loadAllPlugs = this._integrationManager.getAllPlugs(); + const getPlugs = await this._integrationService.getPlugs(orgId, integrationId); + const currentPlug = loadAllPlugs.find((p) => p.identifier === providerName); + return getPlugs + .filter((plug) => { + return currentPlug?.plugs?.some((p) => p.methodName === plug.plugFunction); + }) + .map((plug) => { + const runPlug = currentPlug?.plugs?.find((p) => p.methodName === plug.plugFunction); + return { + type: 'global', + plugId: plug.id, + delay: runPlug.runEveryMilliseconds, + totalRuns: runPlug.totalRuns, + }; + }); + } + async deletePost(orgId, group) { + const post = await this._postRepository.deletePost(orgId, group); + if (post?.id) { + try { + const workflows = this._temporalService.client + .getRawClient() + ?.workflow.list({ + query: `postId="${post.id}" AND ExecutionStatus="Running"`, + }); + for await (const executionInfo of workflows) { + try { + const workflow = await this._temporalService.client.getWorkflowHandle(executionInfo.workflowId); + if (workflow && + (await workflow.describe()).status.name !== 'TERMINATED') { + await workflow.terminate(); + } + } + catch (err) { } + } + } + catch (err) { } + } + return { error: true }; + } + async countPostsFromDay(orgId, date) { + return this._postRepository.countPostsFromDay(orgId, date); + } + getPostByForWebhookId(id) { + return this._postRepository.getPostByForWebhookId(id); + } + async startWorkflow(taskQueue, postId, orgId, state) { + try { + const workflows = this._temporalService.client + .getRawClient() + ?.workflow.list({ + query: `postId="${postId}" AND ExecutionStatus="Running"`, + }); + for await (const executionInfo of workflows) { + try { + const workflow = await this._temporalService.client.getWorkflowHandle(executionInfo.workflowId); + if (workflow && + (await workflow.describe()).status.name !== 'TERMINATED') { + await workflow.terminate(); + } + } + catch (err) { } + } + } + catch (err) { } + if (state === 'DRAFT') { + return; + } + try { + await this._temporalService.client + .getRawClient() + ?.workflow.start('postWorkflowV105', { + workflowId: `post_${postId}`, + taskQueue: 'main', + workflowIdConflictPolicy: 'TERMINATE_EXISTING', + args: [ + { + taskQueue: taskQueue, + postId: postId, + organizationId: orgId, + }, + ], + typedSearchAttributes: new common_2.TypedSearchAttributes([ + { + key: temporal_search_attribute_1.postId, + value: postId, + }, + { + key: temporal_search_attribute_1.organizationId, + value: orgId, + }, + ]), + }); + } + catch (err) { } + } + async validatePosts(orgId, posts) { + return Promise.all((posts || []).map(async (post) => { + const integration = await this._integrationService.getIntegrationById(orgId, post?.integration?.id); + if (!integration) { + throw new common_1.BadRequestException(`Integration with id ${post?.integration?.id} not found`); + } + const provider = this._integrationManager.getSocialIntegration(integration.providerIdentifier); + let additionalSettings = []; + try { + additionalSettings = JSON.parse(integration.additionalSettings || '[]'); + } + catch { + additionalSettings = []; + } + const settings = post.settings || {}; + const media = (post.value || []).map((p) => p.image || []); + let valid = true; + let settingsError = ''; + if (provider?.dto) { + const instance = (0, class_transformer_1.plainToInstance)(provider.dto, settings, { + enableImplicitConversion: false, + }); + const validationErrors = await (0, class_validator_1.validate)(instance, { + skipMissingProperties: false, + }); + settingsError = this.firstValidationError(validationErrors); + valid = validationErrors.length === 0; + } + let errors = true; + try { + errors = await provider.checkValidity(media, settings, additionalSettings); + } + catch (err) { + errors = err?.message || 'Invalid media'; + } + const maximumCharacters = provider.maxLength(additionalSettings); + const isX = integration.providerIdentifier === 'x'; + const emptyContent = (post.value || []).some((a) => { + const strip = (0, strip_html_validation_1.stripHtmlValidation)('normal', a.content || '', true); + const length = isX ? (0, count_length_1.weightedLength)(strip) : strip.length; + return length === 0 && (a.image || []).length === 0; + }); + const tooLong = (post.value || []).some((a) => { + const strip = (0, strip_html_validation_1.stripHtmlValidation)('normal', a.content || '', true); + const weighted = isX ? (0, count_length_1.weightedLength)(strip) : strip.length; + const totalCharacters = weighted > strip.length ? weighted : strip.length; + return totalCharacters > (maximumCharacters || 1000000); + }); + return { + id: integration.id, + identifier: integration.providerIdentifier, + name: integration.name, + valid, + settingsError, + errors, + emptyContent, + tooLong, + maximumCharacters, + }; + })); + } + firstValidationError(errors) { + for (const e of errors || []) { + if (e?.constraints) { + return Object.values(e.constraints)[0] || ''; + } + const child = e?.children?.length + ? this.firstValidationError(e.children) + : ''; + if (child) { + return child; + } + } + return ''; + } + async createPost(orgId, body, creationMethod) { + const postList = []; + for (const post of body.posts) { + const provider = this._integrationManager.getSocialIntegration(post.settings?.__type); + const removeLinks = !!provider?.stripLinks?.(); + const messages = (post.value || []).map((p) => p.content); + const updateContent = !body.shortLink || removeLinks + ? messages + : await this._shortLinkService.convertTextToShortLinks(orgId, messages); + post.value = (post.value || []).map((p, i) => ({ + ...p, + content: removeLinks ? (0, strip_links_1.stripLinks)(updateContent[i]) : updateContent[i], + })); + const { posts } = await this._postRepository.createOrUpdatePost(body.type, orgId, body.type === 'now' ? (0, dayjs_1.default)().format('YYYY-MM-DDTHH:mm:00') : body.date, post, body.tags, creationMethod, body.inter); + if (!posts?.length) { + return []; + } + if (body.type !== 'update') { + this.startWorkflow(post.settings.__type.split('-')[0].toLowerCase(), posts[0].id, orgId, posts[0].state).catch((err) => { }); + } + Sentry.metrics.count('post_created', 1); + postList.push({ + postId: posts[0].id, + integration: post.integration.id, + }); + } + return postList; + } + async separatePosts(content, len) { + return this._openaiService.separatePosts(content, len); + } + async changeState(id, state, err, body) { + return this._postRepository.changeState(id, state, err, body); + } + async changePostStatus(orgId, id, status) { + const getPostById = await this._postRepository.getPostById(id, orgId); + if (!getPostById) { + throw new common_1.BadRequestException('Post not found'); + } + const state = status === 'draft' ? 'DRAFT' : 'QUEUE'; + await this._postRepository.changeState(id, state); + try { + await this.startWorkflow(getPostById.integration.providerIdentifier.split('-')[0].toLowerCase(), getPostById.id, orgId, state); + } + catch (err) { } + return { id, state }; + } + async changeDate(orgId, id, date, action = 'schedule') { + const getPostById = await this._postRepository.getPostById(id, orgId); + const newDate = await this._postRepository.changeDate(orgId, id, date, getPostById.state === 'DRAFT', action); + if (action === 'schedule') { + try { + await this.startWorkflow(getPostById.integration.providerIdentifier + .split('-')[0] + .toLowerCase(), getPostById.id, orgId, getPostById.state === 'DRAFT' ? 'DRAFT' : 'QUEUE'); + } + catch (err) { } + } + return newDate; + } + async generatePostsDraft(orgId, body) { + const getAllIntegrations = (await this._integrationService.getIntegrationsList(orgId)).filter((f) => !f.disabled && f.providerIdentifier !== 'reddit'); + const allDates = (0, dayjs_1.default)() + .isoWeek(body.week) + .year(body.year) + .startOf('isoWeek'); + const dates = [...new Array(7)].map((_, i) => { + return allDates.add(i, 'day').format('YYYY-MM-DD'); + }); + const findTime = () => { + const totalMinutes = Math.floor(Math.random() * 144) * 10; + const hours = Math.floor(totalMinutes / 60); + const minutes = totalMinutes % 60; + const formattedHours = hours.toString().padStart(2, '0'); + const formattedMinutes = minutes.toString().padStart(2, '0'); + const randomDate = (0, lodash_1.shuffle)(dates)[0] + 'T' + `${formattedHours}:${formattedMinutes}:00`; + if ((0, dayjs_1.default)(randomDate).isBefore((0, dayjs_1.default)())) { + return findTime(); + } + return randomDate; + }; + for (const integration of getAllIntegrations) { + for (const toPost of body.posts) { + const group = (0, make_is_1.makeId)(10); + const randomDate = findTime(); + await this.createPost(orgId, { + type: 'draft', + date: randomDate, + order: '', + shortLink: false, + tags: [], + posts: [ + { + group, + integration: { + id: integration.id, + }, + settings: { + __type: integration.providerIdentifier, + title: '', + tags: [], + subreddit: [], + }, + value: [ + ...toPost.list.map((l) => ({ + id: '', + content: l.post, + delay: 0, + image: [], + })), + { + id: '', + delay: 0, + content: `Check out the full story here:\n${body.postId || body.url}`, + image: [], + }, + ], + }, + ], + }, 'WEB'); + } + } + } + findAllExistingCategories() { + return this._postRepository.findAllExistingCategories(); + } + findAllExistingTopicsOfCategory(category) { + return this._postRepository.findAllExistingTopicsOfCategory(category); + } + findPopularPosts(category, topic) { + return this._postRepository.findPopularPosts(category, topic); + } + async findFreeDateTime(orgId, integrationId) { + const findTimes = await this._integrationService.findFreeDateTime(orgId, integrationId); + return this.findFreeDateTimeRecursive(orgId, findTimes, dayjs_1.default.utc().startOf('day')); + } + async createPopularPosts(post) { + return this._postRepository.createPopularPosts(post); + } + async findFreeDateTimeRecursive(orgId, times, date) { + const list = await this._postRepository.getPostsCountsByDates(orgId, times, date); + if (!list.length) { + return this.findFreeDateTimeRecursive(orgId, times, date.add(1, 'day')); + } + const num = list.reduce((prev, curr) => { + if (prev === null || prev > curr) { + return curr; + } + return prev; + }, null); + return date.clone().add(num, 'minutes').format('YYYY-MM-DDTHH:mm:00'); + } + getComments(postId) { + return this._postRepository.getComments(postId); + } + getTags(orgId) { + return this._postRepository.getTags(orgId); + } + createTag(orgId, body) { + return this._postRepository.createTag(orgId, body); + } + editTag(id, orgId, body) { + return this._postRepository.editTag(id, orgId, body); + } + deleteTag(id, orgId) { + return this._postRepository.deleteTag(id, orgId); + } + createComment(orgId, userId, postId, comment) { + return this._postRepository.createComment(orgId, userId, postId, comment); + } +}; +exports.PostsService = PostsService; +exports.PostsService = PostsService = tslib_1.__decorate([ + (0, common_1.Injectable)(), + tslib_1.__metadata("design:paramtypes", [posts_repository_1.PostsRepository, + integration_manager_1.IntegrationManager, + integration_service_1.IntegrationService, + media_service_1.MediaService, + short_link_service_1.ShortLinkService, + openai_service_1.OpenaiService, + nestjs_temporal_core_1.TemporalService, + refresh_integration_service_1.RefreshIntegrationService]) +], PostsService); +//# sourceMappingURL=posts.service.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/posts/posts.service.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/posts/posts.service.js.map new file mode 100644 index 0000000000000000000000000000000000000000..068285971804e4ec4ff1ac4df213629677afa1f5 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/posts/posts.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"posts.service.js","sourceRoot":"","sources":["../../../../../../../../../libraries/nestjs-libraries/src/database/prisma/posts/posts.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/prisma.service.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/prisma.service.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..28f26ec5328321d4b0c39bf1ea5f153a98ab82bb --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/prisma.service.d.ts @@ -0,0 +1,17 @@ +import { OnModuleDestroy, OnModuleInit } from '@nestjs/common'; +import { PrismaClient } from '@prisma/client'; +export declare class PrismaService extends PrismaClient implements OnModuleInit, OnModuleDestroy { + constructor(); + onModuleInit(): Promise; + onModuleDestroy(): Promise; +} +export declare class PrismaRepository { + private _prismaService; + model: Pick; + constructor(_prismaService: PrismaService); +} +export declare class PrismaTransaction { + private _prismaService; + model: Pick; + constructor(_prismaService: PrismaService); +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/prisma.service.js b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/prisma.service.js new file mode 100644 index 0000000000000000000000000000000000000000..b936159576e83952ab6d5ec3bc9925865f3cad6f --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/prisma.service.js @@ -0,0 +1,52 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PrismaTransaction = exports.PrismaRepository = exports.PrismaService = void 0; +const tslib_1 = require("tslib"); +const common_1 = require("@nestjs/common"); +const client_1 = require("@prisma/client"); +let PrismaService = class PrismaService extends client_1.PrismaClient { + constructor() { + super({ + log: [ + { + emit: 'event', + level: 'query', + }, + ], + }); + } + async onModuleInit() { + await this.$connect(); + } + async onModuleDestroy() { + await this.$disconnect(); + } +}; +exports.PrismaService = PrismaService; +exports.PrismaService = PrismaService = tslib_1.__decorate([ + (0, common_1.Injectable)(), + tslib_1.__metadata("design:paramtypes", []) +], PrismaService); +let PrismaRepository = class PrismaRepository { + constructor(_prismaService) { + this._prismaService = _prismaService; + this.model = this._prismaService; + } +}; +exports.PrismaRepository = PrismaRepository; +exports.PrismaRepository = PrismaRepository = tslib_1.__decorate([ + (0, common_1.Injectable)(), + tslib_1.__metadata("design:paramtypes", [PrismaService]) +], PrismaRepository); +let PrismaTransaction = class PrismaTransaction { + constructor(_prismaService) { + this._prismaService = _prismaService; + this.model = this._prismaService; + } +}; +exports.PrismaTransaction = PrismaTransaction; +exports.PrismaTransaction = PrismaTransaction = tslib_1.__decorate([ + (0, common_1.Injectable)(), + tslib_1.__metadata("design:paramtypes", [PrismaService]) +], PrismaTransaction); +//# sourceMappingURL=prisma.service.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/prisma.service.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/prisma.service.js.map new file mode 100644 index 0000000000000000000000000000000000000000..23d608583863cb982ff13d22fa15394f336ce4df --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/prisma.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"prisma.service.js","sourceRoot":"","sources":["../../../../../../../../libraries/nestjs-libraries/src/database/prisma/prisma.service.ts"],"names":[],"mappings":";;;;AAAA,2CAA2E;AAC3E,2CAA8C;AAGvC,IAAM,aAAa,GAAnB,MAAM,aAAc,SAAQ,qBAAY;IAC7C;QACE,KAAK,CAAC;YACJ,GAAG,EAAE;gBACH;oBACE,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,OAAO;iBACf;aACF;SACF,CAAC,CAAC;IACL,CAAC;IACD,KAAK,CAAC,YAAY;QAChB,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;IAC3B,CAAC;CACF,CAAA;AAlBY,sCAAa;wBAAb,aAAa;IADzB,IAAA,mBAAU,GAAE;;GACA,aAAa,CAkBzB;AAGM,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IAE3B,YAAoB,cAA6B;QAA7B,mBAAc,GAAd,cAAc,CAAe;QAC/C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC;IACnC,CAAC;CACF,CAAA;AALY,4CAAgB;2BAAhB,gBAAgB;IAD5B,IAAA,mBAAU,GAAE;6CAGyB,aAAa;GAFtC,gBAAgB,CAK5B;AAGM,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAE5B,YAAoB,cAA6B;QAA7B,mBAAc,GAAd,cAAc,CAAe;QAC/C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC;IACnC,CAAC;CACF,CAAA;AALY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,mBAAU,GAAE;6CAGyB,aAAa;GAFtC,iBAAiB,CAK7B"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/sets/sets.repository.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/sets/sets.repository.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..4808245a2b90eb11b8bed42261dd5e9a89b7bdbd --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/sets/sets.repository.d.ts @@ -0,0 +1,26 @@ +import { PrismaRepository } from "../prisma.service"; +import { SetsDto } from "../../../dtos/sets/sets.dto"; +export declare class SetsRepository { + private _sets; + constructor(_sets: PrismaRepository<'sets'>); + getTotal(orgId: string): import(".prisma/client").Prisma.PrismaPromise; + getSets(orgId: string): import(".prisma/client").Prisma.PrismaPromise<{ + id: string; + name: string; + createdAt: Date; + updatedAt: Date; + organizationId: string; + content: string; + }[]>; + deleteSet(orgId: string, id: string): import(".prisma/client").Prisma.Prisma__SetsClient<{ + id: string; + name: string; + createdAt: Date; + updatedAt: Date; + organizationId: string; + content: string; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + createSet(orgId: string, body: SetsDto): Promise<{ + id: string; + }>; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/sets/sets.repository.js b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/sets/sets.repository.js new file mode 100644 index 0000000000000000000000000000000000000000..4ae98cc087c19e1357178ba2aa4f222f98290f57 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/sets/sets.repository.js @@ -0,0 +1,62 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SetsRepository = void 0; +const tslib_1 = require("tslib"); +const prisma_service_1 = require("../prisma.service"); +const common_1 = require("@nestjs/common"); +const uuid_1 = require("uuid"); +let SetsRepository = class SetsRepository { + constructor(_sets) { + this._sets = _sets; + } + getTotal(orgId) { + return this._sets.model.sets.count({ + where: { + organizationId: orgId, + }, + }); + } + getSets(orgId) { + return this._sets.model.sets.findMany({ + where: { + organizationId: orgId, + }, + orderBy: { + createdAt: 'desc', + }, + }); + } + deleteSet(orgId, id) { + return this._sets.model.sets.delete({ + where: { + id, + organizationId: orgId, + }, + }); + } + async createSet(orgId, body) { + const { id } = await this._sets.model.sets.upsert({ + where: { + id: body.id || (0, uuid_1.v4)(), + organizationId: orgId, + }, + create: { + id: body.id || (0, uuid_1.v4)(), + organizationId: orgId, + name: body.name, + content: body.content, + }, + update: { + name: body.name, + content: body.content, + }, + }); + return { id }; + } +}; +exports.SetsRepository = SetsRepository; +exports.SetsRepository = SetsRepository = tslib_1.__decorate([ + (0, common_1.Injectable)(), + tslib_1.__metadata("design:paramtypes", [prisma_service_1.PrismaRepository]) +], SetsRepository); +//# sourceMappingURL=sets.repository.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/sets/sets.repository.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/sets/sets.repository.js.map new file mode 100644 index 0000000000000000000000000000000000000000..4ee2cac600b0c2e0ce1893b27bda42fcf0f09979 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/sets/sets.repository.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sets.repository.js","sourceRoot":"","sources":["../../../../../../../../../libraries/nestjs-libraries/src/database/prisma/sets/sets.repository.ts"],"names":[],"mappings":";;;;AAAA,sDAA4F;AAC5F,2CAA4C;AAE5C,+BAAoC;AAG7B,IAAM,cAAc,GAApB,MAAM,cAAc;IACzB,YAAoB,KAA+B;QAA/B,UAAK,GAAL,KAAK,CAA0B;IAAG,CAAC;IAEvD,QAAQ,CAAC,KAAa;QACpB,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;YACjC,KAAK,EAAE;gBACL,cAAc,EAAE,KAAK;aACtB;SACF,CAAC,CAAC;IACL,CAAC;IAED,OAAO,CAAC,KAAa;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;YACpC,KAAK,EAAE;gBACL,cAAc,EAAE,KAAK;aACtB;YACD,OAAO,EAAE;gBACP,SAAS,EAAE,MAAM;aAClB;SACF,CAAC,CAAC;IACL,CAAC;IAED,SAAS,CAAC,KAAa,EAAE,EAAU;QACjC,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;YAClC,KAAK,EAAE;gBACL,EAAE;gBACF,cAAc,EAAE,KAAK;aACtB;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,KAAa,EAAE,IAAa;QAC1C,MAAM,EAAE,EAAE,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;YAChD,KAAK,EAAE;gBACL,EAAE,EAAE,IAAI,CAAC,EAAE,IAAI,IAAA,SAAM,GAAE;gBACvB,cAAc,EAAE,KAAK;aACtB;YACD,MAAM,EAAE;gBACN,EAAE,EAAE,IAAI,CAAC,EAAE,IAAI,IAAA,SAAM,GAAE;gBACvB,cAAc,EAAE,KAAK;gBACrB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,OAAO,EAAE,IAAI,CAAC,OAAO;aACtB;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,OAAO,EAAE,IAAI,CAAC,OAAO;aACtB;SACF,CAAC,CAAC;QAEH,OAAO,EAAE,EAAE,EAAE,CAAC;IAChB,CAAC;CACF,CAAA;AAnDY,wCAAc;yBAAd,cAAc;IAD1B,IAAA,mBAAU,GAAE;6CAEgB,iCAAgB;GADhC,cAAc,CAmD1B"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/sets/sets.service.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/sets/sets.service.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..e7eeda678db79de5820ccae1f2cc5f15b8dc42e6 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/sets/sets.service.d.ts @@ -0,0 +1,26 @@ +import { SetsRepository } from "./sets.repository"; +import { SetsDto } from "../../../dtos/sets/sets.dto"; +export declare class SetsService { + private _setsRepository; + constructor(_setsRepository: SetsRepository); + getTotal(orgId: string): import(".prisma/client").Prisma.PrismaPromise; + getSets(orgId: string): import(".prisma/client").Prisma.PrismaPromise<{ + id: string; + name: string; + createdAt: Date; + updatedAt: Date; + organizationId: string; + content: string; + }[]>; + createSet(orgId: string, body: SetsDto): Promise<{ + id: string; + }>; + deleteSet(orgId: string, id: string): import(".prisma/client").Prisma.Prisma__SetsClient<{ + id: string; + name: string; + createdAt: Date; + updatedAt: Date; + organizationId: string; + content: string; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/sets/sets.service.js b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/sets/sets.service.js new file mode 100644 index 0000000000000000000000000000000000000000..f3e0adfa33890e795738748aaae2c2c56278a216 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/sets/sets.service.js @@ -0,0 +1,29 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SetsService = void 0; +const tslib_1 = require("tslib"); +const common_1 = require("@nestjs/common"); +const sets_repository_1 = require("./sets.repository"); +let SetsService = class SetsService { + constructor(_setsRepository) { + this._setsRepository = _setsRepository; + } + getTotal(orgId) { + return this._setsRepository.getTotal(orgId); + } + getSets(orgId) { + return this._setsRepository.getSets(orgId); + } + createSet(orgId, body) { + return this._setsRepository.createSet(orgId, body); + } + deleteSet(orgId, id) { + return this._setsRepository.deleteSet(orgId, id); + } +}; +exports.SetsService = SetsService; +exports.SetsService = SetsService = tslib_1.__decorate([ + (0, common_1.Injectable)(), + tslib_1.__metadata("design:paramtypes", [sets_repository_1.SetsRepository]) +], SetsService); +//# sourceMappingURL=sets.service.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/sets/sets.service.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/sets/sets.service.js.map new file mode 100644 index 0000000000000000000000000000000000000000..f6c935b136730be5ab6cc8660ef7af035483136e --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/sets/sets.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sets.service.js","sourceRoot":"","sources":["../../../../../../../../../libraries/nestjs-libraries/src/database/prisma/sets/sets.service.ts"],"names":[],"mappings":";;;;AAAA,2CAA4C;AAC5C,uDAAgG;AAIzF,IAAM,WAAW,GAAjB,MAAM,WAAW;IACtB,YAAoB,eAA+B;QAA/B,oBAAe,GAAf,eAAe,CAAgB;IAAG,CAAC;IAEvD,QAAQ,CAAC,KAAa;QACpB,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO,CAAC,KAAa;QACnB,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC;IAED,SAAS,CAAC,KAAa,EAAE,IAAa;QACpC,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACrD,CAAC;IAED,SAAS,CAAC,KAAa,EAAE,EAAU;QACjC,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACnD,CAAC;CACF,CAAA;AAlBY,kCAAW;sBAAX,WAAW;IADvB,IAAA,mBAAU,GAAE;6CAE0B,gCAAc;GADxC,WAAW,CAkBvB"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/signatures/signature.repository.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/signatures/signature.repository.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..d14db7db3ebb6c293c062ddeac8378fb3ee258d0 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/signatures/signature.repository.d.ts @@ -0,0 +1,36 @@ +import { PrismaRepository } from "../prisma.service"; +import { SignatureDto } from "../../../dtos/signature/signature.dto"; +export declare class SignatureRepository { + private _signatures; + constructor(_signatures: PrismaRepository<'signatures'>); + getSignaturesByOrgId(orgId: string): import(".prisma/client").Prisma.PrismaPromise<{ + id: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + content: string; + autoAdd: boolean; + }[]>; + getDefaultSignature(orgId: string): import(".prisma/client").Prisma.Prisma__SignaturesClient<{ + id: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + content: string; + autoAdd: boolean; + }, null, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + createOrUpdateSignature(orgId: string, signature: SignatureDto, id?: string): Promise<{ + id: string; + }>; + deleteSignature(orgId: string, id: string): import(".prisma/client").Prisma.Prisma__SignaturesClient<{ + id: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + content: string; + autoAdd: boolean; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/signatures/signature.repository.js b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/signatures/signature.repository.js new file mode 100644 index 0000000000000000000000000000000000000000..8b5ad44b832c6a98748973244b9657d5c0614f3a --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/signatures/signature.repository.js @@ -0,0 +1,53 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SignatureRepository = void 0; +const tslib_1 = require("tslib"); +const prisma_service_1 = require("../prisma.service"); +const common_1 = require("@nestjs/common"); +const uuid_1 = require("uuid"); +let SignatureRepository = class SignatureRepository { + constructor(_signatures) { + this._signatures = _signatures; + } + getSignaturesByOrgId(orgId) { + return this._signatures.model.signatures.findMany({ + where: { organizationId: orgId, deletedAt: null }, + }); + } + getDefaultSignature(orgId) { + return this._signatures.model.signatures.findFirst({ + where: { organizationId: orgId, autoAdd: true, deletedAt: null }, + }); + } + async createOrUpdateSignature(orgId, signature, id) { + const values = { + organizationId: orgId, + content: signature.content, + autoAdd: signature.autoAdd, + }; + const { id: updatedId } = await this._signatures.model.signatures.upsert({ + where: { id: id || (0, uuid_1.v4)(), organizationId: orgId }, + update: values, + create: values, + }); + if (values.autoAdd) { + await this._signatures.model.signatures.updateMany({ + where: { organizationId: orgId, id: { not: updatedId } }, + data: { autoAdd: false }, + }); + } + return { id: updatedId }; + } + deleteSignature(orgId, id) { + return this._signatures.model.signatures.update({ + where: { id, organizationId: orgId }, + data: { deletedAt: new Date() }, + }); + } +}; +exports.SignatureRepository = SignatureRepository; +exports.SignatureRepository = SignatureRepository = tslib_1.__decorate([ + (0, common_1.Injectable)(), + tslib_1.__metadata("design:paramtypes", [prisma_service_1.PrismaRepository]) +], SignatureRepository); +//# sourceMappingURL=signature.repository.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/signatures/signature.repository.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/signatures/signature.repository.js.map new file mode 100644 index 0000000000000000000000000000000000000000..913116a6cf8f089c668a841f637e7d200753537f --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/signatures/signature.repository.js.map @@ -0,0 +1 @@ +{"version":3,"file":"signature.repository.js","sourceRoot":"","sources":["../../../../../../../../../libraries/nestjs-libraries/src/database/prisma/signatures/signature.repository.ts"],"names":[],"mappings":";;;;AAAA,sDAA4F;AAC5F,2CAA4C;AAC5C,+BAAoC;AAI7B,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;IAC9B,YAAoB,WAA2C;QAA3C,gBAAW,GAAX,WAAW,CAAgC;IAAG,CAAC;IAEnE,oBAAoB,CAAC,KAAa;QAChC,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC;YAChD,KAAK,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE;SAClD,CAAC,CAAC;IACL,CAAC;IAED,mBAAmB,CAAC,KAAa;QAC/B,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC;YACjD,KAAK,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE;SACjE,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,uBAAuB,CAC3B,KAAa,EACb,SAAuB,EACvB,EAAW;QAEX,MAAM,MAAM,GAAG;YACb,cAAc,EAAE,KAAK;YACrB,OAAO,EAAE,SAAS,CAAC,OAAO;YAC1B,OAAO,EAAE,SAAS,CAAC,OAAO;SAC3B,CAAC;QAEF,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC;YACvE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,IAAA,SAAM,GAAE,EAAE,cAAc,EAAE,KAAK,EAAE;YACpD,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC;gBACjD,KAAK,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE;gBACxD,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;aACzB,CAAC,CAAC;QACL,CAAC;QAED,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC;IAC3B,CAAC;IAED,eAAe,CAAC,KAAa,EAAE,EAAU;QACvC,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC;YAC9C,KAAK,EAAE,EAAE,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE;YACpC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE;SAChC,CAAC,CAAC;IACL,CAAC;CACF,CAAA;AAhDY,kDAAmB;8BAAnB,mBAAmB;IAD/B,IAAA,mBAAU,GAAE;6CAEsB,iCAAgB;GADtC,mBAAmB,CAgD/B"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/signatures/signature.service.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/signatures/signature.service.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..befc70b4f0c2cedeeb944eda220a8647f607817e --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/signatures/signature.service.d.ts @@ -0,0 +1,36 @@ +import { SignatureRepository } from "./signature.repository"; +import { SignatureDto } from "../../../dtos/signature/signature.dto"; +export declare class SignatureService { + private _signatureRepository; + constructor(_signatureRepository: SignatureRepository); + getSignaturesByOrgId(orgId: string): import(".prisma/client").Prisma.PrismaPromise<{ + id: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + content: string; + autoAdd: boolean; + }[]>; + getDefaultSignature(orgId: string): import(".prisma/client").Prisma.Prisma__SignaturesClient<{ + id: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + content: string; + autoAdd: boolean; + }, null, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + createOrUpdateSignature(orgId: string, signature: SignatureDto, id?: string): Promise<{ + id: string; + }>; + deleteSignature(orgId: string, id: string): import(".prisma/client").Prisma.Prisma__SignaturesClient<{ + id: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + content: string; + autoAdd: boolean; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/signatures/signature.service.js b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/signatures/signature.service.js new file mode 100644 index 0000000000000000000000000000000000000000..f62e7d7ef4ba82a312841af0146091d1dd77763c --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/signatures/signature.service.js @@ -0,0 +1,29 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SignatureService = void 0; +const tslib_1 = require("tslib"); +const common_1 = require("@nestjs/common"); +const signature_repository_1 = require("./signature.repository"); +let SignatureService = class SignatureService { + constructor(_signatureRepository) { + this._signatureRepository = _signatureRepository; + } + getSignaturesByOrgId(orgId) { + return this._signatureRepository.getSignaturesByOrgId(orgId); + } + getDefaultSignature(orgId) { + return this._signatureRepository.getDefaultSignature(orgId); + } + createOrUpdateSignature(orgId, signature, id) { + return this._signatureRepository.createOrUpdateSignature(orgId, signature, id); + } + deleteSignature(orgId, id) { + return this._signatureRepository.deleteSignature(orgId, id); + } +}; +exports.SignatureService = SignatureService; +exports.SignatureService = SignatureService = tslib_1.__decorate([ + (0, common_1.Injectable)(), + tslib_1.__metadata("design:paramtypes", [signature_repository_1.SignatureRepository]) +], SignatureService); +//# sourceMappingURL=signature.service.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/signatures/signature.service.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/signatures/signature.service.js.map new file mode 100644 index 0000000000000000000000000000000000000000..994f461cf76cad69c629238b3f66b567eb7ff1d1 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/signatures/signature.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"signature.service.js","sourceRoot":"","sources":["../../../../../../../../../libraries/nestjs-libraries/src/database/prisma/signatures/signature.service.ts"],"names":[],"mappings":";;;;AAAA,2CAA4C;AAC5C,iEAAgH;AAIzG,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IAC3B,YAAoB,oBAAyC;QAAzC,yBAAoB,GAApB,oBAAoB,CAAqB;IAAG,CAAC;IAEjE,oBAAoB,CAAC,KAAa;QAChC,OAAO,IAAI,CAAC,oBAAoB,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC/D,CAAC;IAED,mBAAmB,CAAC,KAAa;QAC/B,OAAO,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC9D,CAAC;IAED,uBAAuB,CAAC,KAAa,EAAE,SAAuB,EAAE,EAAW;QACzE,OAAO,IAAI,CAAC,oBAAoB,CAAC,uBAAuB,CACtD,KAAK,EACL,SAAS,EACT,EAAE,CACH,CAAC;IACJ,CAAC;IAED,eAAe,CAAC,KAAa,EAAE,EAAU;QACvC,OAAO,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC9D,CAAC;CACF,CAAA;AAtBY,4CAAgB;2BAAhB,gBAAgB;IAD5B,IAAA,mBAAU,GAAE;6CAE+B,0CAAmB;GADlD,gBAAgB,CAsB5B"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/subscriptions/pricing.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/subscriptions/pricing.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..473f245b22b91fb315d105d5af6000c296e134c8 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/subscriptions/pricing.d.ts @@ -0,0 +1,22 @@ +export interface PricingInnerInterface { + current: string; + month_price: number; + year_price: number; + channel?: number; + posts_per_month: number; + team_members: boolean; + community_features: boolean; + featured_by_gitroom: boolean; + ai: boolean; + import_from_channels: boolean; + image_generator?: boolean; + image_generation_count: number; + generate_videos: number; + public_api: boolean; + webhooks: number; + autoPost: boolean; +} +export interface PricingInterface { + [key: string]: PricingInnerInterface; +} +export declare const pricing: PricingInterface; diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/subscriptions/pricing.js b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/subscriptions/pricing.js new file mode 100644 index 0000000000000000000000000000000000000000..a6a1434e1071cceaf6a95bd5b8a58da7f739e8d0 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/subscriptions/pricing.js @@ -0,0 +1,96 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.pricing = void 0; +exports.pricing = { + FREE: { + current: 'FREE', + month_price: 0, + year_price: 0, + channel: 0, + image_generation_count: 0, + posts_per_month: 0, + team_members: false, + community_features: false, + featured_by_gitroom: false, + ai: false, + import_from_channels: false, + image_generator: false, + public_api: false, + webhooks: 0, + autoPost: false, + generate_videos: 0, + }, + STANDARD: { + current: 'STANDARD', + month_price: 29, + year_price: 278, + channel: 5, + posts_per_month: 400, + image_generation_count: 20, + team_members: false, + ai: true, + community_features: false, + featured_by_gitroom: false, + import_from_channels: true, + image_generator: false, + public_api: true, + webhooks: 2, + autoPost: false, + generate_videos: 3, + }, + TEAM: { + current: 'TEAM', + month_price: 39, + year_price: 374, + channel: 10, + posts_per_month: 1000000, + image_generation_count: 100, + community_features: true, + team_members: true, + featured_by_gitroom: true, + ai: true, + import_from_channels: true, + image_generator: true, + public_api: true, + webhooks: 10, + autoPost: true, + generate_videos: 10, + }, + PRO: { + current: 'PRO', + month_price: 49, + year_price: 470, + channel: 30, + posts_per_month: 1000000, + image_generation_count: 300, + community_features: true, + team_members: true, + featured_by_gitroom: true, + ai: true, + import_from_channels: true, + image_generator: true, + public_api: true, + webhooks: 30, + autoPost: true, + generate_videos: 30, + }, + ULTIMATE: { + current: 'ULTIMATE', + month_price: 99, + year_price: 950, + channel: 100, + posts_per_month: 1000000, + image_generation_count: 500, + community_features: true, + team_members: true, + featured_by_gitroom: true, + ai: true, + import_from_channels: true, + image_generator: true, + public_api: true, + webhooks: 10000, + autoPost: true, + generate_videos: 60, + }, +}; +//# sourceMappingURL=pricing.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/subscriptions/pricing.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/subscriptions/pricing.js.map new file mode 100644 index 0000000000000000000000000000000000000000..985343ce9d261332a4a347b6dbc12e6305091045 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/subscriptions/pricing.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pricing.js","sourceRoot":"","sources":["../../../../../../../../../libraries/nestjs-libraries/src/database/prisma/subscriptions/pricing.ts"],"names":[],"mappings":";;;AAqBa,QAAA,OAAO,GAAqB;IACvC,IAAI,EAAE;QACJ,OAAO,EAAE,MAAM;QACf,WAAW,EAAE,CAAC;QACd,UAAU,EAAE,CAAC;QACb,OAAO,EAAE,CAAC;QACV,sBAAsB,EAAE,CAAC;QACzB,eAAe,EAAE,CAAC;QAClB,YAAY,EAAE,KAAK;QACnB,kBAAkB,EAAE,KAAK;QACzB,mBAAmB,EAAE,KAAK;QAC1B,EAAE,EAAE,KAAK;QACT,oBAAoB,EAAE,KAAK;QAC3B,eAAe,EAAE,KAAK;QACtB,UAAU,EAAE,KAAK;QACjB,QAAQ,EAAE,CAAC;QACX,QAAQ,EAAE,KAAK;QACf,eAAe,EAAE,CAAC;KACnB;IACD,QAAQ,EAAE;QACR,OAAO,EAAE,UAAU;QACnB,WAAW,EAAE,EAAE;QACf,UAAU,EAAE,GAAG;QACf,OAAO,EAAE,CAAC;QACV,eAAe,EAAE,GAAG;QACpB,sBAAsB,EAAE,EAAE;QAC1B,YAAY,EAAE,KAAK;QACnB,EAAE,EAAE,IAAI;QACR,kBAAkB,EAAE,KAAK;QACzB,mBAAmB,EAAE,KAAK;QAC1B,oBAAoB,EAAE,IAAI;QAC1B,eAAe,EAAE,KAAK;QACtB,UAAU,EAAE,IAAI;QAChB,QAAQ,EAAE,CAAC;QACX,QAAQ,EAAE,KAAK;QACf,eAAe,EAAE,CAAC;KACnB;IACD,IAAI,EAAE;QACJ,OAAO,EAAE,MAAM;QACf,WAAW,EAAE,EAAE;QACf,UAAU,EAAE,GAAG;QACf,OAAO,EAAE,EAAE;QACX,eAAe,EAAE,OAAO;QACxB,sBAAsB,EAAE,GAAG;QAC3B,kBAAkB,EAAE,IAAI;QACxB,YAAY,EAAE,IAAI;QAClB,mBAAmB,EAAE,IAAI;QACzB,EAAE,EAAE,IAAI;QACR,oBAAoB,EAAE,IAAI;QAC1B,eAAe,EAAE,IAAI;QACrB,UAAU,EAAE,IAAI;QAChB,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,IAAI;QACd,eAAe,EAAE,EAAE;KACpB;IACD,GAAG,EAAE;QACH,OAAO,EAAE,KAAK;QACd,WAAW,EAAE,EAAE;QACf,UAAU,EAAE,GAAG;QACf,OAAO,EAAE,EAAE;QACX,eAAe,EAAE,OAAO;QACxB,sBAAsB,EAAE,GAAG;QAC3B,kBAAkB,EAAE,IAAI;QACxB,YAAY,EAAE,IAAI;QAClB,mBAAmB,EAAE,IAAI;QACzB,EAAE,EAAE,IAAI;QACR,oBAAoB,EAAE,IAAI;QAC1B,eAAe,EAAE,IAAI;QACrB,UAAU,EAAE,IAAI;QAChB,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,IAAI;QACd,eAAe,EAAE,EAAE;KACpB;IACD,QAAQ,EAAE;QACR,OAAO,EAAE,UAAU;QACnB,WAAW,EAAE,EAAE;QACf,UAAU,EAAE,GAAG;QACf,OAAO,EAAE,GAAG;QACZ,eAAe,EAAE,OAAO;QACxB,sBAAsB,EAAE,GAAG;QAC3B,kBAAkB,EAAE,IAAI;QACxB,YAAY,EAAE,IAAI;QAClB,mBAAmB,EAAE,IAAI;QACzB,EAAE,EAAE,IAAI;QACR,oBAAoB,EAAE,IAAI;QAC1B,eAAe,EAAE,IAAI;QACrB,UAAU,EAAE,IAAI;QAChB,QAAQ,EAAE,KAAK;QACf,QAAQ,EAAE,IAAI;QACd,eAAe,EAAE,EAAE;KACpB;CACF,CAAC"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/subscriptions/subscription.repository.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/subscriptions/subscription.repository.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..437f910a1c4aab558fbcc392d8a60456037812a3 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/subscriptions/subscription.repository.d.ts @@ -0,0 +1,190 @@ +import { PrismaRepository } from "../prisma.service"; +import dayjs from 'dayjs'; +import { Organization } from '@prisma/client'; +export declare class SubscriptionRepository { + private readonly _subscription; + private readonly _organization; + private readonly _user; + private readonly _credits; + private _usedCodes; + constructor(_subscription: PrismaRepository<'subscription'>, _organization: PrismaRepository<'organization'>, _user: PrismaRepository<'user'>, _credits: PrismaRepository<'credits'>, _usedCodes: PrismaRepository<'usedCodes'>); + getUserAccount(userId: string): import(".prisma/client").Prisma.Prisma__UserClient<{ + account: string; + connectedAccount: boolean; + }, null, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + getCode(code: string): import(".prisma/client").Prisma.Prisma__UsedCodesClient<{ + id: string; + createdAt: Date; + updatedAt: Date; + orgId: string; + code: string; + }, null, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + updateAccount(userId: string, account: string): import(".prisma/client").Prisma.Prisma__UserClient<{ + password: string | null; + email: string; + id: string; + name: string | null; + createdAt: Date; + updatedAt: Date; + providerName: import(".prisma/client").$Enums.Provider; + lastName: string | null; + isSuperAdmin: boolean; + bio: string | null; + audience: number; + providerId: string | null; + timezone: number; + lastReadNotifications: Date; + inviteId: string | null; + activated: boolean; + account: string | null; + connectedAccount: boolean; + lastOnline: Date; + ip: string | null; + agent: string | null; + sendSuccessEmails: boolean; + sendFailureEmails: boolean; + sendStreakEmails: boolean; + pictureId: string | null; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + getSubscriptionByOrganizationId(organizationId: string): import(".prisma/client").Prisma.Prisma__SubscriptionClient<{ + id: string; + createdAt: Date; + updatedAt: Date; + subscriptionTier: import(".prisma/client").$Enums.SubscriptionTier; + identifier: string | null; + cancelAt: Date | null; + period: import(".prisma/client").$Enums.Period; + totalChannels: number; + isLifetime: boolean; + deletedAt: Date | null; + organizationId: string; + }, null, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + updateConnectedStatus(account: string, accountCharges: boolean): import(".prisma/client").Prisma.PrismaPromise; + getCustomerIdByOrgId(organizationId: string): import(".prisma/client").Prisma.Prisma__OrganizationClient<{ + paymentId: string; + }, null, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + checkSubscription(organizationId: string, subscriptionId: string): import(".prisma/client").Prisma.Prisma__SubscriptionClient<{ + id: string; + createdAt: Date; + updatedAt: Date; + subscriptionTier: import(".prisma/client").$Enums.SubscriptionTier; + identifier: string | null; + cancelAt: Date | null; + period: import(".prisma/client").$Enums.Period; + totalChannels: number; + isLifetime: boolean; + deletedAt: Date | null; + organizationId: string; + }, null, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + deleteSubscriptionByCustomerId(customerId: string): import(".prisma/client").Prisma.PrismaPromise; + updateCustomerId(organizationId: string, customerId: string): import(".prisma/client").Prisma.Prisma__OrganizationClient<{ + id: string; + name: string; + description: string | null; + apiKey: string | null; + paymentId: string | null; + streakSince: Date | null; + createdAt: Date; + updatedAt: Date; + allowTrial: boolean; + isTrailing: boolean; + shortlink: import(".prisma/client").$Enums.ShortLinkPreference; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + getSubscriptionByOrgId(orgId: string): Promise<{ + id: string; + createdAt: Date; + updatedAt: Date; + subscriptionTier: import(".prisma/client").$Enums.SubscriptionTier; + identifier: string | null; + cancelAt: Date | null; + period: import(".prisma/client").$Enums.Period; + totalChannels: number; + isLifetime: boolean; + deletedAt: Date | null; + organizationId: string; + }>; + getSubscriptionByCustomerId(customerId: string): Promise<{ + id: string; + createdAt: Date; + updatedAt: Date; + subscriptionTier: import(".prisma/client").$Enums.SubscriptionTier; + identifier: string | null; + cancelAt: Date | null; + period: import(".prisma/client").$Enums.Period; + totalChannels: number; + isLifetime: boolean; + deletedAt: Date | null; + organizationId: string; + }>; + getOrganizationByCustomerId(customerId: string): Promise<{ + id: string; + name: string; + description: string | null; + apiKey: string | null; + paymentId: string | null; + streakSince: Date | null; + createdAt: Date; + updatedAt: Date; + allowTrial: boolean; + isTrailing: boolean; + shortlink: import(".prisma/client").$Enums.ShortLinkPreference; + }>; + createOrUpdateSubscription(isTrailing: boolean, identifier: string, customerId: string, totalChannels: number, billing: 'STANDARD' | 'TEAM' | 'PRO' | 'ULTIMATE', period: 'MONTHLY' | 'YEARLY', cancelAt: number | null, code?: string, org?: { + id: string; + }): Promise; + getSubscriptionByIdentifier(identifier: string): import(".prisma/client").Prisma.Prisma__SubscriptionClient<{ + organization: { + id: string; + name: string; + description: string | null; + apiKey: string | null; + paymentId: string | null; + streakSince: Date | null; + createdAt: Date; + updatedAt: Date; + allowTrial: boolean; + isTrailing: boolean; + shortlink: import(".prisma/client").$Enums.ShortLinkPreference; + }; + } & { + id: string; + createdAt: Date; + updatedAt: Date; + subscriptionTier: import(".prisma/client").$Enums.SubscriptionTier; + identifier: string | null; + cancelAt: Date | null; + period: import(".prisma/client").$Enums.Period; + totalChannels: number; + isLifetime: boolean; + deletedAt: Date | null; + organizationId: string; + }, null, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + getSubscription(organizationId: string): import(".prisma/client").Prisma.Prisma__SubscriptionClient<{ + id: string; + createdAt: Date; + updatedAt: Date; + subscriptionTier: import(".prisma/client").$Enums.SubscriptionTier; + identifier: string | null; + cancelAt: Date | null; + period: import(".prisma/client").$Enums.Period; + totalChannels: number; + isLifetime: boolean; + deletedAt: Date | null; + organizationId: string; + }, null, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + getCreditsFrom(organizationId: string, from: dayjs.Dayjs, type?: string): Promise; + useCredit(org: Organization, type: string, func: () => Promise): Promise; + setCustomerId(orgId: string, customerId: string): import(".prisma/client").Prisma.Prisma__OrganizationClient<{ + id: string; + name: string; + description: string | null; + apiKey: string | null; + paymentId: string | null; + streakSince: Date | null; + createdAt: Date; + updatedAt: Date; + allowTrial: boolean; + isTrailing: boolean; + shortlink: import(".prisma/client").$Enums.ShortLinkPreference; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/subscriptions/subscription.repository.js b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/subscriptions/subscription.repository.js new file mode 100644 index 0000000000000000000000000000000000000000..68b4f98e020ba8a6ec1675d7ec4968621697e3a9 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/subscriptions/subscription.repository.js @@ -0,0 +1,251 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SubscriptionRepository = void 0; +const tslib_1 = require("tslib"); +const common_1 = require("@nestjs/common"); +const prisma_service_1 = require("../prisma.service"); +let SubscriptionRepository = class SubscriptionRepository { + constructor(_subscription, _organization, _user, _credits, _usedCodes) { + this._subscription = _subscription; + this._organization = _organization; + this._user = _user; + this._credits = _credits; + this._usedCodes = _usedCodes; + } + getUserAccount(userId) { + return this._user.model.user.findFirst({ + where: { + id: userId, + }, + select: { + account: true, + connectedAccount: true, + }, + }); + } + getCode(code) { + return this._usedCodes.model.usedCodes.findFirst({ + where: { + code, + }, + }); + } + updateAccount(userId, account) { + return this._user.model.user.update({ + where: { + id: userId, + }, + data: { + account, + }, + }); + } + getSubscriptionByOrganizationId(organizationId) { + return this._subscription.model.subscription.findFirst({ + where: { + organizationId, + deletedAt: null, + }, + }); + } + updateConnectedStatus(account, accountCharges) { + return this._user.model.user.updateMany({ + where: { + account, + }, + data: { + connectedAccount: accountCharges, + }, + }); + } + getCustomerIdByOrgId(organizationId) { + return this._organization.model.organization.findFirst({ + where: { + id: organizationId, + }, + select: { + paymentId: true, + }, + }); + } + checkSubscription(organizationId, subscriptionId) { + return this._subscription.model.subscription.findFirst({ + where: { + organizationId, + identifier: subscriptionId, + deletedAt: null, + }, + }); + } + deleteSubscriptionByCustomerId(customerId) { + return this._subscription.model.subscription.deleteMany({ + where: { + organization: { + paymentId: customerId, + }, + }, + }); + } + updateCustomerId(organizationId, customerId) { + return this._organization.model.organization.update({ + where: { + id: organizationId, + }, + data: { + paymentId: customerId, + }, + }); + } + async getSubscriptionByOrgId(orgId) { + return this._subscription.model.subscription.findFirst({ + where: { + organizationId: orgId, + }, + }); + } + async getSubscriptionByCustomerId(customerId) { + return this._subscription.model.subscription.findFirst({ + where: { + organization: { + paymentId: customerId, + }, + }, + }); + } + async getOrganizationByCustomerId(customerId) { + return this._organization.model.organization.findFirst({ + where: { + paymentId: customerId, + }, + }); + } + async createOrUpdateSubscription(isTrailing, identifier, customerId, totalChannels, billing, period, cancelAt, code, org) { + const findOrg = org || (await this.getOrganizationByCustomerId(customerId)); + if (!findOrg) { + return; + } + await this._subscription.model.subscription.upsert({ + where: { + organizationId: findOrg.id, + ...(!code + ? { + organization: { + paymentId: customerId, + }, + } + : {}), + }, + update: { + subscriptionTier: billing, + totalChannels, + period, + identifier, + isLifetime: !!code, + cancelAt: cancelAt ? new Date(cancelAt * 1000) : null, + deletedAt: null, + }, + create: { + organizationId: findOrg.id, + subscriptionTier: billing, + isLifetime: !!code, + totalChannels, + period, + cancelAt: cancelAt ? new Date(cancelAt * 1000) : null, + identifier, + deletedAt: null, + }, + }); + await this._organization.model.organization.update({ + where: { + id: findOrg.id, + }, + data: { + isTrailing, + allowTrial: false, + }, + }); + if (code) { + await this._usedCodes.model.usedCodes.create({ + data: { + code, + orgId: findOrg.id, + }, + }); + } + } + getSubscriptionByIdentifier(identifier) { + return this._subscription.model.subscription.findFirst({ + where: { + identifier, + deletedAt: null, + }, + include: { + organization: true, + }, + }); + } + getSubscription(organizationId) { + return this._subscription.model.subscription.findFirst({ + where: { + organizationId, + deletedAt: null, + }, + }); + } + async getCreditsFrom(organizationId, from, type = 'ai_images') { + const load = await this._credits.model.credits.groupBy({ + by: ['organizationId'], + where: { + organizationId, + type, + createdAt: { + gte: from.toDate(), + }, + }, + _sum: { + credits: true, + }, + }); + return load?.[0]?._sum?.credits || 0; + } + async useCredit(org, type = 'ai_images', func) { + const data = await this._credits.model.credits.create({ + data: { + organizationId: org.id, + credits: 1, + type, + }, + }); + try { + return await func(); + } + catch (err) { + await this._credits.model.credits.delete({ + where: { + id: data.id, + }, + }); + throw err; + } + } + setCustomerId(orgId, customerId) { + return this._organization.model.organization.update({ + where: { + id: orgId, + }, + data: { + paymentId: customerId, + }, + }); + } +}; +exports.SubscriptionRepository = SubscriptionRepository; +exports.SubscriptionRepository = SubscriptionRepository = tslib_1.__decorate([ + (0, common_1.Injectable)(), + tslib_1.__metadata("design:paramtypes", [prisma_service_1.PrismaRepository, + prisma_service_1.PrismaRepository, + prisma_service_1.PrismaRepository, + prisma_service_1.PrismaRepository, + prisma_service_1.PrismaRepository]) +], SubscriptionRepository); +//# sourceMappingURL=subscription.repository.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/subscriptions/subscription.repository.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/subscriptions/subscription.repository.js.map new file mode 100644 index 0000000000000000000000000000000000000000..be727bfee75be5facae7ab552755ea36888151ab --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/subscriptions/subscription.repository.js.map @@ -0,0 +1 @@ +{"version":3,"file":"subscription.repository.js","sourceRoot":"","sources":["../../../../../../../../../libraries/nestjs-libraries/src/database/prisma/subscriptions/subscription.repository.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/subscriptions/subscription.service.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/subscriptions/subscription.service.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..50f06f380f2b0f019d54bbbbe33ae382eb3c3f31 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/subscriptions/subscription.service.d.ts @@ -0,0 +1,105 @@ +import { SubscriptionRepository } from "./subscription.repository"; +import { IntegrationService } from "../integrations/integration.service"; +import { OrganizationService } from "../organizations/organization.service"; +import { Organization } from '@prisma/client'; +export declare class SubscriptionService { + private readonly _subscriptionRepository; + private readonly _integrationService; + private readonly _organizationService; + constructor(_subscriptionRepository: SubscriptionRepository, _integrationService: IntegrationService, _organizationService: OrganizationService); + getSubscriptionByOrganizationId(organizationId: string): import(".prisma/client").Prisma.Prisma__SubscriptionClient<{ + id: string; + createdAt: Date; + updatedAt: Date; + subscriptionTier: import(".prisma/client").$Enums.SubscriptionTier; + identifier: string | null; + cancelAt: Date | null; + period: import(".prisma/client").$Enums.Period; + totalChannels: number; + isLifetime: boolean; + deletedAt: Date | null; + organizationId: string; + }, null, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + useCredit(organization: Organization, type: string, func: () => Promise): Promise; + getCode(code: string): import(".prisma/client").Prisma.Prisma__UsedCodesClient<{ + id: string; + createdAt: Date; + updatedAt: Date; + orgId: string; + code: string; + }, null, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + deleteSubscription(customerId: string): Promise; + updateCustomerId(organizationId: string, customerId: string): import(".prisma/client").Prisma.Prisma__OrganizationClient<{ + id: string; + name: string; + description: string | null; + apiKey: string | null; + paymentId: string | null; + streakSince: Date | null; + createdAt: Date; + updatedAt: Date; + allowTrial: boolean; + isTrailing: boolean; + shortlink: import(".prisma/client").$Enums.ShortLinkPreference; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + checkSubscription(organizationId: string, subscriptionId: string): Promise<{ + id: string; + createdAt: Date; + updatedAt: Date; + subscriptionTier: import(".prisma/client").$Enums.SubscriptionTier; + identifier: string | null; + cancelAt: Date | null; + period: import(".prisma/client").$Enums.Period; + totalChannels: number; + isLifetime: boolean; + deletedAt: Date | null; + organizationId: string; + }>; + modifySubscriptionByOrg(organizationId: string, totalChannels: number, billing: 'FREE' | 'STANDARD' | 'TEAM' | 'PRO' | 'ULTIMATE'): Promise; + modifySubscription(customerId: string, totalChannels: number, billing: 'FREE' | 'STANDARD' | 'TEAM' | 'PRO' | 'ULTIMATE'): Promise; + createOrUpdateSubscription(isTrailing: boolean, identifier: string, customerId: string, totalChannels: number, billing: 'STANDARD' | 'TEAM' | 'PRO' | 'ULTIMATE', period: 'MONTHLY' | 'YEARLY', cancelAt: number | null, code?: string, org?: string): Promise; + getSubscriptionByIdentifier(identifier: string): import(".prisma/client").Prisma.Prisma__SubscriptionClient<{ + organization: { + id: string; + name: string; + description: string | null; + apiKey: string | null; + paymentId: string | null; + streakSince: Date | null; + createdAt: Date; + updatedAt: Date; + allowTrial: boolean; + isTrailing: boolean; + shortlink: import(".prisma/client").$Enums.ShortLinkPreference; + }; + } & { + id: string; + createdAt: Date; + updatedAt: Date; + subscriptionTier: import(".prisma/client").$Enums.SubscriptionTier; + identifier: string | null; + cancelAt: Date | null; + period: import(".prisma/client").$Enums.Period; + totalChannels: number; + isLifetime: boolean; + deletedAt: Date | null; + organizationId: string; + }, null, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + getSubscription(organizationId: string): Promise<{ + id: string; + createdAt: Date; + updatedAt: Date; + subscriptionTier: import(".prisma/client").$Enums.SubscriptionTier; + identifier: string | null; + cancelAt: Date | null; + period: import(".prisma/client").$Enums.Period; + totalChannels: number; + isLifetime: boolean; + deletedAt: Date | null; + organizationId: string; + }>; + checkCredits(organization: Organization, checkType?: string): Promise<{ + credits: number; + }>; + addSubscription(orgId: string, userId: string, subscription: any): Promise; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/subscriptions/subscription.service.js b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/subscriptions/subscription.service.js new file mode 100644 index 0000000000000000000000000000000000000000..a2ebb75b6f18df6293496ae9dd4652ab21d0656a --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/subscriptions/subscription.service.js @@ -0,0 +1,136 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SubscriptionService = void 0; +const tslib_1 = require("tslib"); +const common_1 = require("@nestjs/common"); +const pricing_1 = require("./pricing"); +const subscription_repository_1 = require("./subscription.repository"); +const integration_service_1 = require("../integrations/integration.service"); +const organization_service_1 = require("../organizations/organization.service"); +const dayjs_1 = tslib_1.__importDefault(require("dayjs")); +const make_is_1 = require("../../../services/make.is"); +let SubscriptionService = class SubscriptionService { + constructor(_subscriptionRepository, _integrationService, _organizationService) { + this._subscriptionRepository = _subscriptionRepository; + this._integrationService = _integrationService; + this._organizationService = _organizationService; + } + getSubscriptionByOrganizationId(organizationId) { + return this._subscriptionRepository.getSubscriptionByOrganizationId(organizationId); + } + useCredit(organization, type = 'ai_images', func) { + return this._subscriptionRepository.useCredit(organization, type, func); + } + getCode(code) { + return this._subscriptionRepository.getCode(code); + } + async deleteSubscription(customerId) { + await this.modifySubscription(customerId, pricing_1.pricing.FREE.channel || 0, 'FREE'); + return this._subscriptionRepository.deleteSubscriptionByCustomerId(customerId); + } + updateCustomerId(organizationId, customerId) { + return this._subscriptionRepository.updateCustomerId(organizationId, customerId); + } + async checkSubscription(organizationId, subscriptionId) { + return await this._subscriptionRepository.checkSubscription(organizationId, subscriptionId); + } + async modifySubscriptionByOrg(organizationId, totalChannels, billing) { + if (!organizationId) { + return false; + } + const getCurrentSubscription = (await this._subscriptionRepository.getSubscriptionByOrgId(organizationId)); + const from = pricing_1.pricing[getCurrentSubscription?.subscriptionTier || 'FREE']; + const to = pricing_1.pricing[billing]; + const currentTotalChannels = (await this._integrationService.getIntegrationsList(organizationId)).filter((f) => !f.disabled); + if (currentTotalChannels.length > totalChannels) { + await this._integrationService.disableIntegrations(organizationId, currentTotalChannels.length - totalChannels); + } + if (from.team_members && !to.team_members) { + await this._organizationService.disableOrEnableNonSuperAdminUsers(organizationId, true); + } + if (!from.team_members && to.team_members) { + await this._organizationService.disableOrEnableNonSuperAdminUsers(organizationId, false); + } + if (billing === 'FREE') { + await this._integrationService.changeActiveCron(organizationId); + } + return true; + } + async modifySubscription(customerId, totalChannels, billing) { + if (!customerId) { + return false; + } + const getOrgByCustomerId = await this._subscriptionRepository.getOrganizationByCustomerId(customerId); + const getCurrentSubscription = (await this._subscriptionRepository.getSubscriptionByCustomerId(customerId)); + if (!getOrgByCustomerId || + (getCurrentSubscription && getCurrentSubscription?.isLifetime)) { + return false; + } + const from = pricing_1.pricing[getCurrentSubscription?.subscriptionTier || 'FREE']; + const to = pricing_1.pricing[billing]; + const currentTotalChannels = (await this._integrationService.getIntegrationsList(getOrgByCustomerId?.id)).filter((f) => !f.disabled); + if (currentTotalChannels.length > totalChannels) { + await this._integrationService.disableIntegrations(getOrgByCustomerId?.id, currentTotalChannels.length - totalChannels); + } + if (from.team_members && !to.team_members) { + await this._organizationService.disableOrEnableNonSuperAdminUsers(getOrgByCustomerId?.id, true); + } + if (!from.team_members && to.team_members) { + await this._organizationService.disableOrEnableNonSuperAdminUsers(getOrgByCustomerId?.id, false); + } + if (billing === 'FREE') { + await this._integrationService.changeActiveCron(getOrgByCustomerId?.id); + } + return true; + } + async createOrUpdateSubscription(isTrailing, identifier, customerId, totalChannels, billing, period, cancelAt, code, org) { + if (!code) { + try { + const load = await this.modifySubscription(customerId, totalChannels, billing); + if (!load) { + return {}; + } + } + catch (e) { + return {}; + } + } + return this._subscriptionRepository.createOrUpdateSubscription(isTrailing, identifier, customerId, totalChannels, billing, period, cancelAt, code, org ? { id: org } : undefined); + } + getSubscriptionByIdentifier(identifier) { + return this._subscriptionRepository.getSubscriptionByIdentifier(identifier); + } + async getSubscription(organizationId) { + return this._subscriptionRepository.getSubscription(organizationId); + } + async checkCredits(organization, checkType = 'ai_images') { + const type = organization?.subscription?.subscriptionTier || 'FREE'; + if (type === 'FREE') { + return { credits: 0 }; + } + let date = (0, dayjs_1.default)(organization.subscription.createdAt); + while (date.isBefore((0, dayjs_1.default)())) { + date = date.add(1, 'month'); + } + const checkFromMonth = date.subtract(1, 'month'); + const imageGenerationCount = checkType === 'ai_images' + ? pricing_1.pricing[type].image_generation_count + : pricing_1.pricing[type].generate_videos; + const totalUse = await this._subscriptionRepository.getCreditsFrom(organization.id, checkFromMonth, checkType); + return { + credits: imageGenerationCount - totalUse, + }; + } + async addSubscription(orgId, userId, subscription) { + await this._subscriptionRepository.setCustomerId(orgId, userId); + return this.createOrUpdateSubscription(false, (0, make_is_1.makeId)(5), userId, pricing_1.pricing[subscription].channel, subscription, 'MONTHLY', null, undefined, orgId); + } +}; +exports.SubscriptionService = SubscriptionService; +exports.SubscriptionService = SubscriptionService = tslib_1.__decorate([ + (0, common_1.Injectable)(), + tslib_1.__metadata("design:paramtypes", [subscription_repository_1.SubscriptionRepository, + integration_service_1.IntegrationService, + organization_service_1.OrganizationService]) +], SubscriptionService); +//# sourceMappingURL=subscription.service.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/subscriptions/subscription.service.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/subscriptions/subscription.service.js.map new file mode 100644 index 0000000000000000000000000000000000000000..7f82d9c4b3e1cd43cea35d15c1dc08c6b6723638 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/subscriptions/subscription.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"subscription.service.js","sourceRoot":"","sources":["../../../../../../../../../libraries/nestjs-libraries/src/database/prisma/subscriptions/subscription.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/third-party/third-party.repository.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/third-party/third-party.repository.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..66ebd2eb11d8fde791d019a6ed8b20bc34cff6ae --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/third-party/third-party.repository.d.ts @@ -0,0 +1,47 @@ +import { PrismaRepository } from "../prisma.service"; +export declare class ThirdPartyRepository { + private _thirdParty; + constructor(_thirdParty: PrismaRepository<'thirdParty'>); + getAllThirdPartiesByOrganization(org: string): import(".prisma/client").Prisma.PrismaPromise<{ + id: string; + name: string; + identifier: string; + }[]>; + deleteIntegration(org: string, id: string): import(".prisma/client").Prisma.Prisma__ThirdPartyClient<{ + id: string; + name: string; + apiKey: string; + createdAt: Date; + updatedAt: Date; + identifier: string; + deletedAt: Date | null; + organizationId: string; + internalId: string; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + getIntegrationById(org: string, id: string): import(".prisma/client").Prisma.Prisma__ThirdPartyClient<{ + id: string; + name: string; + apiKey: string; + createdAt: Date; + updatedAt: Date; + identifier: string; + deletedAt: Date | null; + organizationId: string; + internalId: string; + }, null, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + saveIntegration(org: string, identifier: string, apiKey: string, data: { + name: string; + username: string; + id: string; + }): import(".prisma/client").Prisma.Prisma__ThirdPartyClient<{ + id: string; + name: string; + apiKey: string; + createdAt: Date; + updatedAt: Date; + identifier: string; + deletedAt: Date | null; + organizationId: string; + internalId: string; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/third-party/third-party.repository.js b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/third-party/third-party.repository.js new file mode 100644 index 0000000000000000000000000000000000000000..7f158bc0785919e96730ec66ae1ec8febbeb4d87 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/third-party/third-party.repository.js @@ -0,0 +1,65 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ThirdPartyRepository = void 0; +const tslib_1 = require("tslib"); +const prisma_service_1 = require("../prisma.service"); +const common_1 = require("@nestjs/common"); +const auth_service_1 = require("../../../../../helpers/src/auth/auth.service"); +let ThirdPartyRepository = class ThirdPartyRepository { + constructor(_thirdParty) { + this._thirdParty = _thirdParty; + } + getAllThirdPartiesByOrganization(org) { + return this._thirdParty.model.thirdParty.findMany({ + where: { organizationId: org, deletedAt: null }, + select: { + id: true, + name: true, + identifier: true, + }, + }); + } + deleteIntegration(org, id) { + return this._thirdParty.model.thirdParty.update({ + where: { id, organizationId: org }, + data: { deletedAt: new Date() }, + }); + } + getIntegrationById(org, id) { + return this._thirdParty.model.thirdParty.findFirst({ + where: { id, organizationId: org, deletedAt: null }, + }); + } + saveIntegration(org, identifier, apiKey, data) { + return this._thirdParty.model.thirdParty.upsert({ + where: { + organizationId_internalId: { + internalId: data.id, + organizationId: org, + }, + }, + create: { + organizationId: org, + name: data.name, + internalId: data.id, + identifier, + apiKey: auth_service_1.AuthService.fixedEncryption(apiKey), + deletedAt: null, + }, + update: { + organizationId: org, + name: data.name, + internalId: data.id, + identifier, + apiKey: auth_service_1.AuthService.fixedEncryption(apiKey), + deletedAt: null, + }, + }); + } +}; +exports.ThirdPartyRepository = ThirdPartyRepository; +exports.ThirdPartyRepository = ThirdPartyRepository = tslib_1.__decorate([ + (0, common_1.Injectable)(), + tslib_1.__metadata("design:paramtypes", [prisma_service_1.PrismaRepository]) +], ThirdPartyRepository); +//# sourceMappingURL=third-party.repository.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/third-party/third-party.repository.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/third-party/third-party.repository.js.map new file mode 100644 index 0000000000000000000000000000000000000000..3fa3fb21805782fffe44ceda0ee531f1001bfe35 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/third-party/third-party.repository.js.map @@ -0,0 +1 @@ +{"version":3,"file":"third-party.repository.js","sourceRoot":"","sources":["../../../../../../../../../libraries/nestjs-libraries/src/database/prisma/third-party/third-party.repository.ts"],"names":[],"mappings":";;;;AAAA,sDAA4F;AAC5F,2CAA4C;AAC5C,+EAAiE;AAG1D,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IAC/B,YAAoB,WAA2C;QAA3C,gBAAW,GAAX,WAAW,CAAgC;IAAG,CAAC;IAEnE,gCAAgC,CAAC,GAAW;QAC1C,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC;YAChD,KAAK,EAAE,EAAE,cAAc,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE;YAC/C,MAAM,EAAE;gBACN,EAAE,EAAE,IAAI;gBACR,IAAI,EAAE,IAAI;gBACV,UAAU,EAAE,IAAI;aACjB;SACF,CAAC,CAAC;IACL,CAAC;IAED,iBAAiB,CAAC,GAAW,EAAE,EAAU;QACvC,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC;YAC9C,KAAK,EAAE,EAAE,EAAE,EAAE,cAAc,EAAE,GAAG,EAAE;YAClC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE;SAChC,CAAC,CAAC;IACL,CAAC;IAED,kBAAkB,CAAC,GAAW,EAAE,EAAU;QACxC,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC;YACjD,KAAK,EAAE,EAAE,EAAE,EAAE,cAAc,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE;SACpD,CAAC,CAAC;IACL,CAAC;IAED,eAAe,CACb,GAAW,EACX,UAAkB,EAClB,MAAc,EACd,IAAoD;QAEpD,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC;YAC9C,KAAK,EAAE;gBACL,yBAAyB,EAAE;oBACzB,UAAU,EAAE,IAAI,CAAC,EAAE;oBACnB,cAAc,EAAE,GAAG;iBACpB;aACF;YACD,MAAM,EAAE;gBACN,cAAc,EAAE,GAAG;gBACnB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,UAAU,EAAE,IAAI,CAAC,EAAE;gBACnB,UAAU;gBACV,MAAM,EAAE,0BAAW,CAAC,eAAe,CAAC,MAAM,CAAC;gBAC3C,SAAS,EAAE,IAAI;aAChB;YACD,MAAM,EAAE;gBACN,cAAc,EAAE,GAAG;gBACnB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,UAAU,EAAE,IAAI,CAAC,EAAE;gBACnB,UAAU;gBACV,MAAM,EAAE,0BAAW,CAAC,eAAe,CAAC,MAAM,CAAC;gBAC3C,SAAS,EAAE,IAAI;aAChB;SACF,CAAC,CAAC;IACL,CAAC;CACF,CAAA;AA1DY,oDAAoB;+BAApB,oBAAoB;IADhC,IAAA,mBAAU,GAAE;6CAEsB,iCAAgB;GADtC,oBAAoB,CA0DhC"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/third-party/third-party.service.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/third-party/third-party.service.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..71490f77e0e6d20ec90eebd9267759e26fa1ec82 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/third-party/third-party.service.d.ts @@ -0,0 +1,47 @@ +import { ThirdPartyRepository } from "./third-party.repository"; +export declare class ThirdPartyService { + private _thirdPartyRepository; + constructor(_thirdPartyRepository: ThirdPartyRepository); + getAllThirdPartiesByOrganization(org: string): import(".prisma/client").Prisma.PrismaPromise<{ + id: string; + name: string; + identifier: string; + }[]>; + deleteIntegration(org: string, id: string): import(".prisma/client").Prisma.Prisma__ThirdPartyClient<{ + id: string; + name: string; + apiKey: string; + createdAt: Date; + updatedAt: Date; + identifier: string; + deletedAt: Date | null; + organizationId: string; + internalId: string; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + getIntegrationById(org: string, id: string): import(".prisma/client").Prisma.Prisma__ThirdPartyClient<{ + id: string; + name: string; + apiKey: string; + createdAt: Date; + updatedAt: Date; + identifier: string; + deletedAt: Date | null; + organizationId: string; + internalId: string; + }, null, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + saveIntegration(org: string, identifier: string, apiKey: string, data: { + name: string; + username: string; + id: string; + }): import(".prisma/client").Prisma.Prisma__ThirdPartyClient<{ + id: string; + name: string; + apiKey: string; + createdAt: Date; + updatedAt: Date; + identifier: string; + deletedAt: Date | null; + organizationId: string; + internalId: string; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/third-party/third-party.service.js b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/third-party/third-party.service.js new file mode 100644 index 0000000000000000000000000000000000000000..6f7351ec2ff584f62f5e93c67db710b22134b2a1 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/third-party/third-party.service.js @@ -0,0 +1,29 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ThirdPartyService = void 0; +const tslib_1 = require("tslib"); +const common_1 = require("@nestjs/common"); +const third_party_repository_1 = require("./third-party.repository"); +let ThirdPartyService = class ThirdPartyService { + constructor(_thirdPartyRepository) { + this._thirdPartyRepository = _thirdPartyRepository; + } + getAllThirdPartiesByOrganization(org) { + return this._thirdPartyRepository.getAllThirdPartiesByOrganization(org); + } + deleteIntegration(org, id) { + return this._thirdPartyRepository.deleteIntegration(org, id); + } + getIntegrationById(org, id) { + return this._thirdPartyRepository.getIntegrationById(org, id); + } + saveIntegration(org, identifier, apiKey, data) { + return this._thirdPartyRepository.saveIntegration(org, identifier, apiKey, data); + } +}; +exports.ThirdPartyService = ThirdPartyService; +exports.ThirdPartyService = ThirdPartyService = tslib_1.__decorate([ + (0, common_1.Injectable)(), + tslib_1.__metadata("design:paramtypes", [third_party_repository_1.ThirdPartyRepository]) +], ThirdPartyService); +//# sourceMappingURL=third-party.service.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/third-party/third-party.service.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/third-party/third-party.service.js.map new file mode 100644 index 0000000000000000000000000000000000000000..70058f860530533a5ee876127140778b036fff65 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/third-party/third-party.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"third-party.service.js","sourceRoot":"","sources":["../../../../../../../../../libraries/nestjs-libraries/src/database/prisma/third-party/third-party.service.ts"],"names":[],"mappings":";;;;AAAA,2CAA4C;AAC5C,qEAAoH;AAG7G,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAC5B,YAAoB,qBAA2C;QAA3C,0BAAqB,GAArB,qBAAqB,CAAsB;IAAG,CAAC;IAEnE,gCAAgC,CAAC,GAAW;QAC1C,OAAO,IAAI,CAAC,qBAAqB,CAAC,gCAAgC,CAAC,GAAG,CAAC,CAAC;IAC1E,CAAC;IAED,iBAAiB,CAAC,GAAW,EAAE,EAAU;QACvC,OAAO,IAAI,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,kBAAkB,CAAC,GAAW,EAAE,EAAU;QACxC,OAAO,IAAI,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,eAAe,CACb,GAAW,EACX,UAAkB,EAClB,MAAc,EACd,IAAoD;QAEpD,OAAO,IAAI,CAAC,qBAAqB,CAAC,eAAe,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IACnF,CAAC;CACF,CAAA;AAvBY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,mBAAU,GAAE;6CAEgC,6CAAoB;GADpD,iBAAiB,CAuB7B"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/users/users.repository.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/users/users.repository.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..465a7273010322786540f3bebe0c0315beeaebe1 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/users/users.repository.d.ts @@ -0,0 +1,196 @@ +import { PrismaRepository } from "../prisma.service"; +import { Provider } from '@prisma/client'; +import { UserDetailDto } from "../../../dtos/users/user.details.dto"; +import { EmailNotificationsDto } from "../../../dtos/users/email-notifications.dto"; +export declare class UsersRepository { + private _user; + constructor(_user: PrismaRepository<'user'>); + getImpersonateUser(name: string): import(".prisma/client").Prisma.PrismaPromise<{ + email: string; + id: string; + name: string; + }[]>; + getUserById(id: string): import(".prisma/client").Prisma.Prisma__UserClient<{ + password: string | null; + email: string; + id: string; + name: string | null; + createdAt: Date; + updatedAt: Date; + providerName: import(".prisma/client").$Enums.Provider; + lastName: string | null; + isSuperAdmin: boolean; + bio: string | null; + audience: number; + providerId: string | null; + timezone: number; + lastReadNotifications: Date; + inviteId: string | null; + activated: boolean; + account: string | null; + connectedAccount: boolean; + lastOnline: Date; + ip: string | null; + agent: string | null; + sendSuccessEmails: boolean; + sendFailureEmails: boolean; + sendStreakEmails: boolean; + pictureId: string | null; + }, null, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + getUserByEmail(email: string): import(".prisma/client").Prisma.Prisma__UserClient<{ + picture: { + id: string; + path: string; + }; + } & { + password: string | null; + email: string; + id: string; + name: string | null; + createdAt: Date; + updatedAt: Date; + providerName: import(".prisma/client").$Enums.Provider; + lastName: string | null; + isSuperAdmin: boolean; + bio: string | null; + audience: number; + providerId: string | null; + timezone: number; + lastReadNotifications: Date; + inviteId: string | null; + activated: boolean; + account: string | null; + connectedAccount: boolean; + lastOnline: Date; + ip: string | null; + agent: string | null; + sendSuccessEmails: boolean; + sendFailureEmails: boolean; + sendStreakEmails: boolean; + pictureId: string | null; + }, null, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + activateUser(id: string): import(".prisma/client").Prisma.Prisma__UserClient<{ + password: string | null; + email: string; + id: string; + name: string | null; + createdAt: Date; + updatedAt: Date; + providerName: import(".prisma/client").$Enums.Provider; + lastName: string | null; + isSuperAdmin: boolean; + bio: string | null; + audience: number; + providerId: string | null; + timezone: number; + lastReadNotifications: Date; + inviteId: string | null; + activated: boolean; + account: string | null; + connectedAccount: boolean; + lastOnline: Date; + ip: string | null; + agent: string | null; + sendSuccessEmails: boolean; + sendFailureEmails: boolean; + sendStreakEmails: boolean; + pictureId: string | null; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + getUserByProvider(providerId: string, provider: Provider): import(".prisma/client").Prisma.Prisma__UserClient<{ + password: string | null; + email: string; + id: string; + name: string | null; + createdAt: Date; + updatedAt: Date; + providerName: import(".prisma/client").$Enums.Provider; + lastName: string | null; + isSuperAdmin: boolean; + bio: string | null; + audience: number; + providerId: string | null; + timezone: number; + lastReadNotifications: Date; + inviteId: string | null; + activated: boolean; + account: string | null; + connectedAccount: boolean; + lastOnline: Date; + ip: string | null; + agent: string | null; + sendSuccessEmails: boolean; + sendFailureEmails: boolean; + sendStreakEmails: boolean; + pictureId: string | null; + }, null, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + updatePassword(id: string, password: string): import(".prisma/client").Prisma.Prisma__UserClient<{ + password: string | null; + email: string; + id: string; + name: string | null; + createdAt: Date; + updatedAt: Date; + providerName: import(".prisma/client").$Enums.Provider; + lastName: string | null; + isSuperAdmin: boolean; + bio: string | null; + audience: number; + providerId: string | null; + timezone: number; + lastReadNotifications: Date; + inviteId: string | null; + activated: boolean; + account: string | null; + connectedAccount: boolean; + lastOnline: Date; + ip: string | null; + agent: string | null; + sendSuccessEmails: boolean; + sendFailureEmails: boolean; + sendStreakEmails: boolean; + pictureId: string | null; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + changeAudienceSize(userId: string, audience: number): import(".prisma/client").Prisma.Prisma__UserClient<{ + password: string | null; + email: string; + id: string; + name: string | null; + createdAt: Date; + updatedAt: Date; + providerName: import(".prisma/client").$Enums.Provider; + lastName: string | null; + isSuperAdmin: boolean; + bio: string | null; + audience: number; + providerId: string | null; + timezone: number; + lastReadNotifications: Date; + inviteId: string | null; + activated: boolean; + account: string | null; + connectedAccount: boolean; + lastOnline: Date; + ip: string | null; + agent: string | null; + sendSuccessEmails: boolean; + sendFailureEmails: boolean; + sendStreakEmails: boolean; + pictureId: string | null; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + getPersonal(userId: string): Promise<{ + id: string; + name: string; + bio: string; + picture: { + id: string; + path: string; + }; + }>; + changePersonal(userId: string, body: UserDetailDto): Promise; + getEmailNotifications(userId: string): Promise<{ + sendSuccessEmails: boolean; + sendFailureEmails: boolean; + sendStreakEmails: boolean; + }>; + updateEmailNotifications(userId: string, body: EmailNotificationsDto): Promise; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/users/users.repository.js b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/users/users.repository.js new file mode 100644 index 0000000000000000000000000000000000000000..fdece87c1661adca1e40ed269bf02de5d3d54f5c --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/users/users.repository.js @@ -0,0 +1,173 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.UsersRepository = void 0; +const tslib_1 = require("tslib"); +const prisma_service_1 = require("../prisma.service"); +const common_1 = require("@nestjs/common"); +const client_1 = require("@prisma/client"); +const auth_service_1 = require("../../../../../helpers/src/auth/auth.service"); +let UsersRepository = class UsersRepository { + constructor(_user) { + this._user = _user; + } + getImpersonateUser(name) { + return this._user.model.user.findMany({ + where: { + OR: [ + { + name: { + contains: name, + }, + }, + { + email: { + contains: name, + }, + }, + { + id: { + contains: name, + }, + }, + ], + }, + select: { + id: true, + name: true, + email: true, + }, + take: 10, + }); + } + getUserById(id) { + return this._user.model.user.findFirst({ + where: { + id, + }, + }); + } + getUserByEmail(email) { + return this._user.model.user.findFirst({ + where: { + email, + providerName: client_1.Provider.LOCAL, + }, + include: { + picture: { + select: { + id: true, + path: true, + }, + }, + }, + }); + } + activateUser(id) { + return this._user.model.user.update({ + where: { + id, + }, + data: { + activated: true, + }, + }); + } + getUserByProvider(providerId, provider) { + return this._user.model.user.findFirst({ + where: { + providerId, + providerName: provider, + }, + }); + } + updatePassword(id, password) { + return this._user.model.user.update({ + where: { + id, + providerName: client_1.Provider.LOCAL, + }, + data: { + password: auth_service_1.AuthService.hashPassword(password), + }, + }); + } + changeAudienceSize(userId, audience) { + return this._user.model.user.update({ + where: { + id: userId, + }, + data: { + audience, + }, + }); + } + async getPersonal(userId) { + const user = await this._user.model.user.findUnique({ + where: { + id: userId, + }, + select: { + id: true, + name: true, + bio: true, + picture: { + select: { + id: true, + path: true, + }, + }, + }, + }); + return user; + } + async changePersonal(userId, body) { + await this._user.model.user.update({ + where: { + id: userId, + }, + data: { + name: body.fullname, + bio: body.bio, + picture: body.picture + ? { + connect: { + id: body.picture.id, + }, + } + : { + disconnect: true, + }, + }, + }); + } + async getEmailNotifications(userId) { + return this._user.model.user.findUnique({ + where: { + id: userId, + }, + select: { + sendSuccessEmails: true, + sendFailureEmails: true, + sendStreakEmails: true, + }, + }); + } + async updateEmailNotifications(userId, body) { + await this._user.model.user.update({ + where: { + id: userId, + }, + data: { + sendSuccessEmails: body.sendSuccessEmails, + sendFailureEmails: body.sendFailureEmails, + sendStreakEmails: body.sendStreakEmails, + }, + }); + } +}; +exports.UsersRepository = UsersRepository; +exports.UsersRepository = UsersRepository = tslib_1.__decorate([ + (0, common_1.Injectable)(), + tslib_1.__metadata("design:paramtypes", [prisma_service_1.PrismaRepository]) +], UsersRepository); +//# sourceMappingURL=users.repository.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/users/users.repository.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/users/users.repository.js.map new file mode 100644 index 0000000000000000000000000000000000000000..ed653c3a2c6c93fd3f9d8272570072541ed7a61a --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/users/users.repository.js.map @@ -0,0 +1 @@ +{"version":3,"file":"users.repository.js","sourceRoot":"","sources":["../../../../../../../../../libraries/nestjs-libraries/src/database/prisma/users/users.repository.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/users/users.service.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/users/users.service.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..1e2797b85baf3b65fa164a37b447bd3667f3d951 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/users/users.service.d.ts @@ -0,0 +1,177 @@ +import { UsersRepository } from "./users.repository"; +import { Provider } from '@prisma/client'; +import { UserDetailDto } from "../../../dtos/users/user.details.dto"; +import { EmailNotificationsDto } from "../../../dtos/users/email-notifications.dto"; +import { OrganizationRepository } from "../organizations/organization.repository"; +export declare class UsersService { + private _usersRepository; + private _organizationRepository; + constructor(_usersRepository: UsersRepository, _organizationRepository: OrganizationRepository); + getUserByEmail(email: string): import(".prisma/client").Prisma.Prisma__UserClient<{ + picture: { + id: string; + path: string; + }; + } & { + password: string | null; + email: string; + id: string; + name: string | null; + createdAt: Date; + updatedAt: Date; + providerName: import(".prisma/client").$Enums.Provider; + lastName: string | null; + isSuperAdmin: boolean; + bio: string | null; + audience: number; + providerId: string | null; + timezone: number; + lastReadNotifications: Date; + inviteId: string | null; + activated: boolean; + account: string | null; + connectedAccount: boolean; + lastOnline: Date; + ip: string | null; + agent: string | null; + sendSuccessEmails: boolean; + sendFailureEmails: boolean; + sendStreakEmails: boolean; + pictureId: string | null; + }, null, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + getUserById(id: string): import(".prisma/client").Prisma.Prisma__UserClient<{ + password: string | null; + email: string; + id: string; + name: string | null; + createdAt: Date; + updatedAt: Date; + providerName: import(".prisma/client").$Enums.Provider; + lastName: string | null; + isSuperAdmin: boolean; + bio: string | null; + audience: number; + providerId: string | null; + timezone: number; + lastReadNotifications: Date; + inviteId: string | null; + activated: boolean; + account: string | null; + connectedAccount: boolean; + lastOnline: Date; + ip: string | null; + agent: string | null; + sendSuccessEmails: boolean; + sendFailureEmails: boolean; + sendStreakEmails: boolean; + pictureId: string | null; + }, null, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + getImpersonateUser(name: string): import(".prisma/client").Prisma.PrismaPromise<{ + organization: { + id: string; + }; + user: { + email: string; + id: string; + name: string; + }; + id: string; + }[]>; + getUserByProvider(providerId: string, provider: Provider): import(".prisma/client").Prisma.Prisma__UserClient<{ + password: string | null; + email: string; + id: string; + name: string | null; + createdAt: Date; + updatedAt: Date; + providerName: import(".prisma/client").$Enums.Provider; + lastName: string | null; + isSuperAdmin: boolean; + bio: string | null; + audience: number; + providerId: string | null; + timezone: number; + lastReadNotifications: Date; + inviteId: string | null; + activated: boolean; + account: string | null; + connectedAccount: boolean; + lastOnline: Date; + ip: string | null; + agent: string | null; + sendSuccessEmails: boolean; + sendFailureEmails: boolean; + sendStreakEmails: boolean; + pictureId: string | null; + }, null, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + activateUser(id: string): import(".prisma/client").Prisma.Prisma__UserClient<{ + password: string | null; + email: string; + id: string; + name: string | null; + createdAt: Date; + updatedAt: Date; + providerName: import(".prisma/client").$Enums.Provider; + lastName: string | null; + isSuperAdmin: boolean; + bio: string | null; + audience: number; + providerId: string | null; + timezone: number; + lastReadNotifications: Date; + inviteId: string | null; + activated: boolean; + account: string | null; + connectedAccount: boolean; + lastOnline: Date; + ip: string | null; + agent: string | null; + sendSuccessEmails: boolean; + sendFailureEmails: boolean; + sendStreakEmails: boolean; + pictureId: string | null; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + updatePassword(id: string, password: string): import(".prisma/client").Prisma.Prisma__UserClient<{ + password: string | null; + email: string; + id: string; + name: string | null; + createdAt: Date; + updatedAt: Date; + providerName: import(".prisma/client").$Enums.Provider; + lastName: string | null; + isSuperAdmin: boolean; + bio: string | null; + audience: number; + providerId: string | null; + timezone: number; + lastReadNotifications: Date; + inviteId: string | null; + activated: boolean; + account: string | null; + connectedAccount: boolean; + lastOnline: Date; + ip: string | null; + agent: string | null; + sendSuccessEmails: boolean; + sendFailureEmails: boolean; + sendStreakEmails: boolean; + pictureId: string | null; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + getPersonal(userId: string): Promise<{ + id: string; + name: string; + bio: string; + picture: { + id: string; + path: string; + }; + }>; + changePersonal(userId: string, body: UserDetailDto): Promise; + getEmailNotifications(userId: string): Promise<{ + sendSuccessEmails: boolean; + sendFailureEmails: boolean; + sendStreakEmails: boolean; + }>; + updateEmailNotifications(userId: string, body: EmailNotificationsDto): Promise; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/users/users.service.js b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/users/users.service.js new file mode 100644 index 0000000000000000000000000000000000000000..d9013ebfc77fabdec3d981726fb6b62a70af994e --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/users/users.service.js @@ -0,0 +1,50 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.UsersService = void 0; +const tslib_1 = require("tslib"); +const common_1 = require("@nestjs/common"); +const users_repository_1 = require("./users.repository"); +const organization_repository_1 = require("../organizations/organization.repository"); +let UsersService = class UsersService { + constructor(_usersRepository, _organizationRepository) { + this._usersRepository = _usersRepository; + this._organizationRepository = _organizationRepository; + } + getUserByEmail(email) { + return this._usersRepository.getUserByEmail(email); + } + getUserById(id) { + return this._usersRepository.getUserById(id); + } + getImpersonateUser(name) { + return this._organizationRepository.getImpersonateUser(name); + } + getUserByProvider(providerId, provider) { + return this._usersRepository.getUserByProvider(providerId, provider); + } + activateUser(id) { + return this._usersRepository.activateUser(id); + } + updatePassword(id, password) { + return this._usersRepository.updatePassword(id, password); + } + getPersonal(userId) { + return this._usersRepository.getPersonal(userId); + } + changePersonal(userId, body) { + return this._usersRepository.changePersonal(userId, body); + } + getEmailNotifications(userId) { + return this._usersRepository.getEmailNotifications(userId); + } + updateEmailNotifications(userId, body) { + return this._usersRepository.updateEmailNotifications(userId, body); + } +}; +exports.UsersService = UsersService; +exports.UsersService = UsersService = tslib_1.__decorate([ + (0, common_1.Injectable)(), + tslib_1.__metadata("design:paramtypes", [users_repository_1.UsersRepository, + organization_repository_1.OrganizationRepository]) +], UsersService); +//# sourceMappingURL=users.service.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/users/users.service.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/users/users.service.js.map new file mode 100644 index 0000000000000000000000000000000000000000..26411ae8a32d4cea9dc459a32da583046555fc80 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/users/users.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"users.service.js","sourceRoot":"","sources":["../../../../../../../../../libraries/nestjs-libraries/src/database/prisma/users/users.service.ts"],"names":[],"mappings":";;;;AAAA,2CAA4C;AAC5C,yDAAmG;AAInG,sFAAyH;AAGlH,IAAM,YAAY,GAAlB,MAAM,YAAY;IACvB,YACU,gBAAiC,EACjC,uBAA+C;QAD/C,qBAAgB,GAAhB,gBAAgB,CAAiB;QACjC,4BAAuB,GAAvB,uBAAuB,CAAwB;IACtD,CAAC;IAEJ,cAAc,CAAC,KAAa;QAC1B,OAAO,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IACrD,CAAC;IAED,WAAW,CAAC,EAAU;QACpB,OAAO,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,kBAAkB,CAAC,IAAY;QAC7B,OAAO,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC/D,CAAC;IAED,iBAAiB,CAAC,UAAkB,EAAE,QAAkB;QACtD,OAAO,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IACvE,CAAC;IAED,YAAY,CAAC,EAAU;QACrB,OAAO,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,cAAc,CAAC,EAAU,EAAE,QAAgB;QACzC,OAAO,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC5D,CAAC;IAED,WAAW,CAAC,MAAc;QACxB,OAAO,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IACnD,CAAC;IAED,cAAc,CAAC,MAAc,EAAE,IAAmB;QAChD,OAAO,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC5D,CAAC;IAED,qBAAqB,CAAC,MAAc;QAClC,OAAO,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC7D,CAAC;IAED,wBAAwB,CAAC,MAAc,EAAE,IAA2B;QAClE,OAAO,IAAI,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACtE,CAAC;CACF,CAAA;AA7CY,oCAAY;uBAAZ,YAAY;IADxB,IAAA,mBAAU,GAAE;6CAGiB,kCAAe;QACR,gDAAsB;GAH9C,YAAY,CA6CxB"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/webhooks/webhooks.repository.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/webhooks/webhooks.repository.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..456a16b2248e235b367fd7a541c412e95e6be00e --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/webhooks/webhooks.repository.d.ts @@ -0,0 +1,36 @@ +import { PrismaRepository } from "../prisma.service"; +import { WebhooksDto } from "../../../dtos/webhooks/webhooks.dto"; +export declare class WebhooksRepository { + private _webhooks; + constructor(_webhooks: PrismaRepository<'webhooks'>); + getTotal(orgId: string): import(".prisma/client").Prisma.PrismaPromise; + getWebhooks(orgId: string): import(".prisma/client").Prisma.PrismaPromise<({ + integrations: { + integration: { + id: string; + name: string; + picture: string; + }; + }[]; + } & { + id: string; + name: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + url: string; + })[]>; + deleteWebhook(orgId: string, id: string): import(".prisma/client").Prisma.Prisma__WebhooksClient<{ + id: string; + name: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + url: string; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; + createWebhook(orgId: string, body: WebhooksDto): Promise<{ + id: string; + }>; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/webhooks/webhooks.repository.js b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/webhooks/webhooks.repository.js new file mode 100644 index 0000000000000000000000000000000000000000..b1e66a8d598552ff6de3c1c0c76845ec6338fc37 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/webhooks/webhooks.repository.js @@ -0,0 +1,90 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.WebhooksRepository = void 0; +const tslib_1 = require("tslib"); +const prisma_service_1 = require("../prisma.service"); +const common_1 = require("@nestjs/common"); +const uuid_1 = require("uuid"); +let WebhooksRepository = class WebhooksRepository { + constructor(_webhooks) { + this._webhooks = _webhooks; + } + getTotal(orgId) { + return this._webhooks.model.webhooks.count({ + where: { + organizationId: orgId, + deletedAt: null, + }, + }); + } + getWebhooks(orgId) { + return this._webhooks.model.webhooks.findMany({ + where: { + organizationId: orgId, + deletedAt: null, + }, + include: { + integrations: { + select: { + integration: { + select: { + id: true, + picture: true, + name: true, + }, + }, + }, + }, + }, + }); + } + deleteWebhook(orgId, id) { + return this._webhooks.model.webhooks.update({ + where: { + id, + organizationId: orgId, + }, + data: { + deletedAt: new Date(), + }, + }); + } + async createWebhook(orgId, body) { + const { id } = await this._webhooks.model.webhooks.upsert({ + where: { + id: body.id || (0, uuid_1.v4)(), + organizationId: orgId, + }, + create: { + organizationId: orgId, + url: body.url, + name: body.name, + }, + update: { + url: body.url, + name: body.name, + }, + }); + await this._webhooks.model.webhooks.update({ + where: { + id, + organizationId: orgId, + }, + data: { + integrations: { + deleteMany: {}, + create: body.integrations.map((integration) => ({ + integrationId: integration.id, + })), + }, + }, + }); + return { id }; + } +}; +exports.WebhooksRepository = WebhooksRepository; +exports.WebhooksRepository = WebhooksRepository = tslib_1.__decorate([ + (0, common_1.Injectable)(), + tslib_1.__metadata("design:paramtypes", [prisma_service_1.PrismaRepository]) +], WebhooksRepository); +//# sourceMappingURL=webhooks.repository.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/webhooks/webhooks.repository.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/webhooks/webhooks.repository.js.map new file mode 100644 index 0000000000000000000000000000000000000000..17eaa170e2b964a3d146c402f1cda76536a62205 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/webhooks/webhooks.repository.js.map @@ -0,0 +1 @@ +{"version":3,"file":"webhooks.repository.js","sourceRoot":"","sources":["../../../../../../../../../libraries/nestjs-libraries/src/database/prisma/webhooks/webhooks.repository.ts"],"names":[],"mappings":";;;;AAAA,sDAA4F;AAC5F,2CAA4C;AAE5C,+BAAoC;AAG7B,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAC7B,YAAoB,SAAuC;QAAvC,cAAS,GAAT,SAAS,CAA8B;IAAG,CAAC;IAE/D,QAAQ,CAAC,KAAa;QACpB,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;YACzC,KAAK,EAAE;gBACL,cAAc,EAAE,KAAK;gBACrB,SAAS,EAAE,IAAI;aAChB;SACF,CAAC,CAAC;IACL,CAAC;IAED,WAAW,CAAC,KAAa;QACvB,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC5C,KAAK,EAAE;gBACL,cAAc,EAAE,KAAK;gBACrB,SAAS,EAAE,IAAI;aAChB;YACD,OAAO,EAAE;gBACP,YAAY,EAAE;oBACZ,MAAM,EAAE;wBACN,WAAW,EAAE;4BACX,MAAM,EAAE;gCACN,EAAE,EAAE,IAAI;gCACR,OAAO,EAAE,IAAI;gCACb,IAAI,EAAE,IAAI;6BACX;yBACF;qBACF;iBACF;aACF;SACF,CAAC,CAAC;IACL,CAAC;IAED,aAAa,CAAC,KAAa,EAAE,EAAU;QACrC,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC1C,KAAK,EAAE;gBACL,EAAE;gBACF,cAAc,EAAE,KAAK;aACtB;YACD,IAAI,EAAE;gBACJ,SAAS,EAAE,IAAI,IAAI,EAAE;aACtB;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,KAAa,EAAE,IAAiB;QAClD,MAAM,EAAE,EAAE,EAAE,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;YACxD,KAAK,EAAE;gBACL,EAAE,EAAE,IAAI,CAAC,EAAE,IAAI,IAAA,SAAM,GAAE;gBACvB,cAAc,EAAE,KAAK;aACtB;YACD,MAAM,EAAE;gBACN,cAAc,EAAE,KAAK;gBACrB,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,IAAI,EAAE,IAAI,CAAC,IAAI;aAChB;YACD,MAAM,EAAE;gBACN,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,IAAI,EAAE,IAAI,CAAC,IAAI;aAChB;SACF,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;YACzC,KAAK,EAAE;gBACL,EAAE;gBACF,cAAc,EAAE,KAAK;aACtB;YACD,IAAI,EAAE;gBACJ,YAAY,EAAE;oBACZ,UAAU,EAAE,EAAE;oBACd,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;wBAC9C,aAAa,EAAE,WAAW,CAAC,EAAE;qBAC9B,CAAC,CAAC;iBACJ;aACF;SACF,CAAC,CAAC;QAEH,OAAO,EAAE,EAAE,EAAE,CAAC;IAChB,CAAC;CACF,CAAA;AAhFY,gDAAkB;6BAAlB,kBAAkB;IAD9B,IAAA,mBAAU,GAAE;6CAEoB,iCAAgB;GADpC,kBAAkB,CAgF9B"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/webhooks/webhooks.service.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/webhooks/webhooks.service.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..8aa9b986748c0301aaf45ca1863dd1c1194f7d70 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/webhooks/webhooks.service.d.ts @@ -0,0 +1,36 @@ +import { WebhooksRepository } from "./webhooks.repository"; +import { WebhooksDto } from "../../../dtos/webhooks/webhooks.dto"; +export declare class WebhooksService { + private _webhooksRepository; + constructor(_webhooksRepository: WebhooksRepository); + getTotal(orgId: string): import(".prisma/client").Prisma.PrismaPromise; + getWebhooks(orgId: string): import(".prisma/client").Prisma.PrismaPromise<({ + integrations: { + integration: { + id: string; + name: string; + picture: string; + }; + }[]; + } & { + id: string; + name: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + url: string; + })[]>; + createWebhook(orgId: string, body: WebhooksDto): Promise<{ + id: string; + }>; + deleteWebhook(orgId: string, id: string): import(".prisma/client").Prisma.Prisma__WebhooksClient<{ + id: string; + name: string; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + organizationId: string; + url: string; + }, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/webhooks/webhooks.service.js b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/webhooks/webhooks.service.js new file mode 100644 index 0000000000000000000000000000000000000000..ed7fbc1367d2e1eef410773d1781b7f043c1c48d --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/webhooks/webhooks.service.js @@ -0,0 +1,29 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.WebhooksService = void 0; +const tslib_1 = require("tslib"); +const common_1 = require("@nestjs/common"); +const webhooks_repository_1 = require("./webhooks.repository"); +let WebhooksService = class WebhooksService { + constructor(_webhooksRepository) { + this._webhooksRepository = _webhooksRepository; + } + getTotal(orgId) { + return this._webhooksRepository.getTotal(orgId); + } + getWebhooks(orgId) { + return this._webhooksRepository.getWebhooks(orgId); + } + createWebhook(orgId, body) { + return this._webhooksRepository.createWebhook(orgId, body); + } + deleteWebhook(orgId, id) { + return this._webhooksRepository.deleteWebhook(orgId, id); + } +}; +exports.WebhooksService = WebhooksService; +exports.WebhooksService = WebhooksService = tslib_1.__decorate([ + (0, common_1.Injectable)(), + tslib_1.__metadata("design:paramtypes", [webhooks_repository_1.WebhooksRepository]) +], WebhooksService); +//# sourceMappingURL=webhooks.service.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/webhooks/webhooks.service.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/webhooks/webhooks.service.js.map new file mode 100644 index 0000000000000000000000000000000000000000..e20ea1451cab9279e5335d18e4e815f3fbaf2936 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/database/prisma/webhooks/webhooks.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"webhooks.service.js","sourceRoot":"","sources":["../../../../../../../../../libraries/nestjs-libraries/src/database/prisma/webhooks/webhooks.service.ts"],"names":[],"mappings":";;;;AAAA,2CAA4C;AAC5C,+DAA4G;AAIrG,IAAM,eAAe,GAArB,MAAM,eAAe;IAC1B,YAAoB,mBAAuC;QAAvC,wBAAmB,GAAnB,mBAAmB,CAAoB;IAAG,CAAC;IAE/D,QAAQ,CAAC,KAAa;QACpB,OAAO,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClD,CAAC;IAED,WAAW,CAAC,KAAa;QACvB,OAAO,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IACrD,CAAC;IAED,aAAa,CAAC,KAAa,EAAE,IAAiB;QAC5C,OAAO,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC7D,CAAC;IAED,aAAa,CAAC,KAAa,EAAE,EAAU;QACrC,OAAO,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC3D,CAAC;CACF,CAAA;AAlBY,0CAAe;0BAAf,eAAe;IAD3B,IAAA,mBAAU,GAAE;6CAE8B,wCAAkB;GADhD,eAAe,CAkB3B"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/dtos/agencies/create.agency.dto.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/agencies/create.agency.dto.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..2a9f086d0b270176189d2c144ffc0b01266d4e9a --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/agencies/create.agency.dto.d.ts @@ -0,0 +1,18 @@ +export declare class CreateAgencyLogoDto { + id: string; + path: string; +} +export declare class CreateAgencyDto { + name: string; + website: string; + facebook: string; + instagram: string; + twitter: string; + linkedIn: string; + youtube: string; + tiktok: string; + logo: CreateAgencyLogoDto; + shortDescription: string; + description: string; + niches: string[]; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/dtos/agencies/create.agency.dto.js b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/agencies/create.agency.dto.js new file mode 100644 index 0000000000000000000000000000000000000000..700621f322acb6ff0d843b9055df551505ef5af3 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/agencies/create.agency.dto.js @@ -0,0 +1,102 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.CreateAgencyDto = exports.CreateAgencyLogoDto = void 0; +const tslib_1 = require("tslib"); +const class_validator_1 = require("class-validator"); +const class_transformer_1 = require("class-transformer"); +class CreateAgencyLogoDto { +} +exports.CreateAgencyLogoDto = CreateAgencyLogoDto; +tslib_1.__decorate([ + (0, class_validator_1.IsString)(), + (0, class_validator_1.IsDefined)(), + tslib_1.__metadata("design:type", String) +], CreateAgencyLogoDto.prototype, "id", void 0); +class CreateAgencyDto { +} +exports.CreateAgencyDto = CreateAgencyDto; +tslib_1.__decorate([ + (0, class_validator_1.IsString)(), + (0, class_validator_1.MinLength)(3), + tslib_1.__metadata("design:type", String) +], CreateAgencyDto.prototype, "name", void 0); +tslib_1.__decorate([ + (0, class_validator_1.IsUrl)(), + (0, class_validator_1.IsDefined)(), + tslib_1.__metadata("design:type", String) +], CreateAgencyDto.prototype, "website", void 0); +tslib_1.__decorate([ + (0, class_validator_1.IsUrl)(), + (0, class_validator_1.ValidateIf)((o) => o.facebook), + tslib_1.__metadata("design:type", String) +], CreateAgencyDto.prototype, "facebook", void 0); +tslib_1.__decorate([ + (0, class_validator_1.IsString)(), + (0, class_validator_1.IsOptional)(), + tslib_1.__metadata("design:type", String) +], CreateAgencyDto.prototype, "instagram", void 0); +tslib_1.__decorate([ + (0, class_validator_1.IsString)(), + (0, class_validator_1.IsOptional)(), + tslib_1.__metadata("design:type", String) +], CreateAgencyDto.prototype, "twitter", void 0); +tslib_1.__decorate([ + (0, class_validator_1.IsUrl)(), + (0, class_validator_1.ValidateIf)((o) => o.linkedIn), + tslib_1.__metadata("design:type", String) +], CreateAgencyDto.prototype, "linkedIn", void 0); +tslib_1.__decorate([ + (0, class_validator_1.IsUrl)(), + (0, class_validator_1.ValidateIf)((o) => o.youtube), + tslib_1.__metadata("design:type", String) +], CreateAgencyDto.prototype, "youtube", void 0); +tslib_1.__decorate([ + (0, class_validator_1.IsString)(), + (0, class_validator_1.IsOptional)(), + tslib_1.__metadata("design:type", String) +], CreateAgencyDto.prototype, "tiktok", void 0); +tslib_1.__decorate([ + (0, class_transformer_1.Type)(() => CreateAgencyLogoDto), + tslib_1.__metadata("design:type", CreateAgencyLogoDto) +], CreateAgencyDto.prototype, "logo", void 0); +tslib_1.__decorate([ + (0, class_validator_1.IsString)(), + tslib_1.__metadata("design:type", String) +], CreateAgencyDto.prototype, "shortDescription", void 0); +tslib_1.__decorate([ + (0, class_validator_1.IsString)(), + tslib_1.__metadata("design:type", String) +], CreateAgencyDto.prototype, "description", void 0); +tslib_1.__decorate([ + (0, class_validator_1.IsString)({ + each: true, + }), + (0, class_validator_1.ArrayMinSize)(1), + (0, class_validator_1.ArrayMaxSize)(3), + (0, class_validator_1.IsIn)([ + 'Real Estate', + 'Fashion', + 'Health and Fitness', + 'Beauty', + 'Travel', + 'Food', + 'Tech', + 'Gaming', + 'Parenting', + 'Education', + 'Business', + 'Finance', + 'DIY', + 'Pets', + 'Lifestyle', + 'Sports', + 'Entertainment', + 'Art', + 'Photography', + 'Sustainability', + ], { + each: true, + }), + tslib_1.__metadata("design:type", Array) +], CreateAgencyDto.prototype, "niches", void 0); +//# sourceMappingURL=create.agency.dto.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/dtos/agencies/create.agency.dto.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/agencies/create.agency.dto.js.map new file mode 100644 index 0000000000000000000000000000000000000000..0f0f1b14e08092eeef04d1a661e582b40b71e816 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/agencies/create.agency.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"create.agency.dto.js","sourceRoot":"","sources":["../../../../../../../../libraries/nestjs-libraries/src/dtos/agencies/create.agency.dto.ts"],"names":[],"mappings":";;;;AAAA,qDAUyB;AACzB,yDAAyC;AAEzC,MAAa,mBAAmB;CAM/B;AAND,kDAMC;AAHC;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,2BAAS,GAAE;;+CACD;AAIb,MAAa,eAAe;CA2E3B;AA3ED,0CA2EC;AAxEC;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,2BAAS,EAAC,CAAC,CAAC;;6CACA;AAIb;IAFC,IAAA,uBAAK,GAAE;IACP,IAAA,2BAAS,GAAE;;gDACI;AAIhB;IAFC,IAAA,uBAAK,GAAE;IACP,IAAA,4BAAU,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;;iDACb;AAIjB;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;kDACK;AAIlB;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;gDACG;AAIhB;IAFC,IAAA,uBAAK,GAAE;IACP,IAAA,4BAAU,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;;iDACb;AAIjB;IAFC,IAAA,uBAAK,GAAE;IACP,IAAA,4BAAU,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;;gDACb;AAIhB;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;+CACE;AAGf;IADC,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC;sCAC1B,mBAAmB;6CAAC;AAG1B;IADC,IAAA,0BAAQ,GAAE;;yDACc;AAGzB;IADC,IAAA,0BAAQ,GAAE;;oDACS;AAkCpB;IAhCC,IAAA,0BAAQ,EAAC;QACR,IAAI,EAAE,IAAI;KACX,CAAC;IACD,IAAA,8BAAY,EAAC,CAAC,CAAC;IACf,IAAA,8BAAY,EAAC,CAAC,CAAC;IACf,IAAA,sBAAI,EACH;QACE,aAAa;QACb,SAAS;QACT,oBAAoB;QACpB,QAAQ;QACR,QAAQ;QACR,MAAM;QACN,MAAM;QACN,QAAQ;QACR,WAAW;QACX,WAAW;QACX,UAAU;QACV,SAAS;QACT,KAAK;QACL,MAAM;QACN,WAAW;QACX,QAAQ;QACR,eAAe;QACf,KAAK;QACL,aAAa;QACb,gBAAgB;KACjB,EACD;QACE,IAAI,EAAE,IAAI;KACX,CACF;;+CACgB"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/dtos/announcements/announcements.dto.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/announcements/announcements.dto.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..151833bce53123c0f4e79d17bf3e539b24b91d83 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/announcements/announcements.dto.d.ts @@ -0,0 +1,5 @@ +export declare class AnnouncementDto { + title: string; + description: string; + color?: string; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/dtos/announcements/announcements.dto.js b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/announcements/announcements.dto.js new file mode 100644 index 0000000000000000000000000000000000000000..fdccaec1947458fc04191f2d751875c21ee688d4 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/announcements/announcements.dto.js @@ -0,0 +1,25 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.AnnouncementDto = void 0; +const tslib_1 = require("tslib"); +const class_validator_1 = require("class-validator"); +class AnnouncementDto { +} +exports.AnnouncementDto = AnnouncementDto; +tslib_1.__decorate([ + (0, class_validator_1.IsString)(), + (0, class_validator_1.IsDefined)(), + tslib_1.__metadata("design:type", String) +], AnnouncementDto.prototype, "title", void 0); +tslib_1.__decorate([ + (0, class_validator_1.IsString)(), + (0, class_validator_1.IsDefined)(), + tslib_1.__metadata("design:type", String) +], AnnouncementDto.prototype, "description", void 0); +tslib_1.__decorate([ + (0, class_validator_1.IsOptional)(), + (0, class_validator_1.IsString)(), + (0, class_validator_1.IsIn)(['INFO', 'WARNING', 'ERROR']), + tslib_1.__metadata("design:type", String) +], AnnouncementDto.prototype, "color", void 0); +//# sourceMappingURL=announcements.dto.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/dtos/announcements/announcements.dto.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/announcements/announcements.dto.js.map new file mode 100644 index 0000000000000000000000000000000000000000..1fea5501b992cb4d0f72f114893b8f4f31e79e91 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/announcements/announcements.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"announcements.dto.js","sourceRoot":"","sources":["../../../../../../../../libraries/nestjs-libraries/src/dtos/announcements/announcements.dto.ts"],"names":[],"mappings":";;;;AAAA,qDAAwE;AAExE,MAAa,eAAe;CAa3B;AAbD,0CAaC;AAVC;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,2BAAS,GAAE;;8CACE;AAId;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,2BAAS,GAAE;;oDACQ;AAKpB;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;IACV,IAAA,sBAAI,EAAC,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;;8CACpB"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/dtos/auth/create.org.user.dto.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/auth/create.org.user.dto.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..29c5150ecf1d2e6ea1ec1779ada335377d4c65d4 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/auth/create.org.user.dto.d.ts @@ -0,0 +1,9 @@ +import { Provider } from '@prisma/client'; +export declare class CreateOrgUserDto { + password: string; + provider: Provider; + providerToken: string; + email: string; + company: string; + datafast_visitor_id: string; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/dtos/auth/create.org.user.dto.js b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/auth/create.org.user.dto.js new file mode 100644 index 0000000000000000000000000000000000000000..a3e105f94b740896f4cdb10bcedf7732b09131ed --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/auth/create.org.user.dto.js @@ -0,0 +1,42 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.CreateOrgUserDto = void 0; +const tslib_1 = require("tslib"); +const class_validator_1 = require("class-validator"); +const client_1 = require("@prisma/client"); +class CreateOrgUserDto { +} +exports.CreateOrgUserDto = CreateOrgUserDto; +tslib_1.__decorate([ + (0, class_validator_1.IsString)(), + (0, class_validator_1.MinLength)(3), + (0, class_validator_1.MaxLength)(64), + (0, class_validator_1.IsDefined)(), + (0, class_validator_1.ValidateIf)((o) => !o.providerToken), + tslib_1.__metadata("design:type", String) +], CreateOrgUserDto.prototype, "password", void 0); +tslib_1.__decorate([ + (0, class_validator_1.IsString)(), + (0, class_validator_1.IsDefined)(), + tslib_1.__metadata("design:type", String) +], CreateOrgUserDto.prototype, "provider", void 0); +tslib_1.__decorate([ + (0, class_validator_1.IsString)(), + (0, class_validator_1.IsDefined)(), + (0, class_validator_1.ValidateIf)((o) => !o.password), + tslib_1.__metadata("design:type", String) +], CreateOrgUserDto.prototype, "providerToken", void 0); +tslib_1.__decorate([ + (0, class_validator_1.IsEmail)(), + (0, class_validator_1.IsDefined)(), + (0, class_validator_1.ValidateIf)((o) => !o.providerToken), + tslib_1.__metadata("design:type", String) +], CreateOrgUserDto.prototype, "email", void 0); +tslib_1.__decorate([ + (0, class_validator_1.IsString)(), + (0, class_validator_1.IsDefined)(), + (0, class_validator_1.MinLength)(3), + (0, class_validator_1.MaxLength)(128), + tslib_1.__metadata("design:type", String) +], CreateOrgUserDto.prototype, "company", void 0); +//# sourceMappingURL=create.org.user.dto.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/dtos/auth/create.org.user.dto.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/auth/create.org.user.dto.js.map new file mode 100644 index 0000000000000000000000000000000000000000..5fb8760d9589feaeb05034d819a5243393f792fb --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/auth/create.org.user.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"create.org.user.dto.js","sourceRoot":"","sources":["../../../../../../../../libraries/nestjs-libraries/src/dtos/auth/create.org.user.dto.ts"],"names":[],"mappings":";;;;AAAA,qDAOyB;AACzB,2CAA0C;AAE1C,MAAa,gBAAgB;CA6B5B;AA7BD,4CA6BC;AAvBC;IALC,IAAA,0BAAQ,GAAE;IACV,IAAA,2BAAS,EAAC,CAAC,CAAC;IACZ,IAAA,2BAAS,EAAC,EAAE,CAAC;IACb,IAAA,2BAAS,GAAE;IACX,IAAA,4BAAU,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;;kDACnB;AAIjB;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,2BAAS,GAAE;;kDACO;AAKnB;IAHC,IAAA,0BAAQ,GAAE;IACV,IAAA,2BAAS,GAAE;IACX,IAAA,4BAAU,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;;uDACT;AAKtB;IAHC,IAAA,yBAAO,GAAE;IACT,IAAA,2BAAS,GAAE;IACX,IAAA,4BAAU,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;;+CACtB;AAMd;IAJC,IAAA,0BAAQ,GAAE;IACV,IAAA,2BAAS,GAAE;IACX,IAAA,2BAAS,EAAC,CAAC,CAAC;IACZ,IAAA,2BAAS,EAAC,GAAG,CAAC;;iDACC"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/dtos/auth/forgot-return.password.dto.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/auth/forgot-return.password.dto.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..46fc75accb0bb3e60c2dae62a4f6cc5bb1542f7e --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/auth/forgot-return.password.dto.d.ts @@ -0,0 +1,5 @@ +export declare class ForgotReturnPasswordDto { + password: string; + repeatPassword: string; + token: string; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/dtos/auth/forgot-return.password.dto.js b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/auth/forgot-return.password.dto.js new file mode 100644 index 0000000000000000000000000000000000000000..d62e4cece96866bae18b16cc78dcbb121c2fd203 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/auth/forgot-return.password.dto.js @@ -0,0 +1,31 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ForgotReturnPasswordDto = void 0; +const tslib_1 = require("tslib"); +const class_validator_1 = require("class-validator"); +const make_is_1 = require("../../services/make.is"); +class ForgotReturnPasswordDto { +} +exports.ForgotReturnPasswordDto = ForgotReturnPasswordDto; +tslib_1.__decorate([ + (0, class_validator_1.IsString)(), + (0, class_validator_1.IsDefined)(), + (0, class_validator_1.MinLength)(3), + tslib_1.__metadata("design:type", String) +], ForgotReturnPasswordDto.prototype, "password", void 0); +tslib_1.__decorate([ + (0, class_validator_1.IsString)(), + (0, class_validator_1.IsDefined)(), + (0, class_validator_1.IsIn)([(0, make_is_1.makeId)(10)], { + message: 'Passwords do not match', + }), + (0, class_validator_1.ValidateIf)((o) => o.password !== o.repeatPassword), + tslib_1.__metadata("design:type", String) +], ForgotReturnPasswordDto.prototype, "repeatPassword", void 0); +tslib_1.__decorate([ + (0, class_validator_1.IsString)(), + (0, class_validator_1.IsDefined)(), + (0, class_validator_1.MinLength)(5), + tslib_1.__metadata("design:type", String) +], ForgotReturnPasswordDto.prototype, "token", void 0); +//# sourceMappingURL=forgot-return.password.dto.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/dtos/auth/forgot-return.password.dto.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/auth/forgot-return.password.dto.js.map new file mode 100644 index 0000000000000000000000000000000000000000..bf60e10ce43050869a6ba5a82e6f1f177f0a97ab --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/auth/forgot-return.password.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"forgot-return.password.dto.js","sourceRoot":"","sources":["../../../../../../../../libraries/nestjs-libraries/src/dtos/auth/forgot-return.password.dto.ts"],"names":[],"mappings":";;;;AAAA,qDAMyB;AACzB,oDAAoE;AAEpE,MAAa,uBAAuB;CAkBnC;AAlBD,0DAkBC;AAdC;IAHC,IAAA,0BAAQ,GAAE;IACV,IAAA,2BAAS,GAAE;IACX,IAAA,2BAAS,EAAC,CAAC,CAAC;;yDACI;AAQjB;IANC,IAAA,0BAAQ,GAAE;IACV,IAAA,2BAAS,GAAE;IACX,IAAA,sBAAI,EAAC,CAAC,IAAA,gBAAM,EAAC,EAAE,CAAC,CAAC,EAAE;QAClB,OAAO,EAAE,wBAAwB;KAClC,CAAC;IACD,IAAA,4BAAU,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,cAAc,CAAC;;+DAC5B;AAKvB;IAHC,IAAA,0BAAQ,GAAE;IACV,IAAA,2BAAS,GAAE;IACX,IAAA,2BAAS,EAAC,CAAC,CAAC;;sDACC"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/dtos/auth/forgot.password.dto.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/auth/forgot.password.dto.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..e4041603eb3c9a5e752981a33013ec1e84535584 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/auth/forgot.password.dto.d.ts @@ -0,0 +1,3 @@ +export declare class ForgotPasswordDto { + email: string; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/dtos/auth/forgot.password.dto.js b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/auth/forgot.password.dto.js new file mode 100644 index 0000000000000000000000000000000000000000..cd980bdc46d9777fa7f4b9aa81b78fd5285def38 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/auth/forgot.password.dto.js @@ -0,0 +1,15 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ForgotPasswordDto = void 0; +const tslib_1 = require("tslib"); +const class_validator_1 = require("class-validator"); +class ForgotPasswordDto { +} +exports.ForgotPasswordDto = ForgotPasswordDto; +tslib_1.__decorate([ + (0, class_validator_1.IsString)(), + (0, class_validator_1.IsDefined)(), + (0, class_validator_1.IsEmail)(), + tslib_1.__metadata("design:type", String) +], ForgotPasswordDto.prototype, "email", void 0); +//# sourceMappingURL=forgot.password.dto.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/dtos/auth/forgot.password.dto.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/auth/forgot.password.dto.js.map new file mode 100644 index 0000000000000000000000000000000000000000..56cb538066d866ca8a00fc35425852ae64302250 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/auth/forgot.password.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"forgot.password.dto.js","sourceRoot":"","sources":["../../../../../../../../libraries/nestjs-libraries/src/dtos/auth/forgot.password.dto.ts"],"names":[],"mappings":";;;;AAAA,qDAA+D;AAE/D,MAAa,iBAAiB;CAK7B;AALD,8CAKC;AADC;IAHC,IAAA,0BAAQ,GAAE;IACV,IAAA,2BAAS,GAAE;IACX,IAAA,yBAAO,GAAE;;gDACI"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/dtos/auth/login.user.dto.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/auth/login.user.dto.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..6e170180dcc24b70c6920d8c724041f4580b6598 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/auth/login.user.dto.d.ts @@ -0,0 +1,8 @@ +import { Provider } from '@prisma/client'; +export declare class LoginUserDto { + password: string; + provider: Provider; + providerToken: string; + email: string; + datafast_visitor_id: string; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/dtos/auth/login.user.dto.js b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/auth/login.user.dto.js new file mode 100644 index 0000000000000000000000000000000000000000..c4e4097318a6860980ff1711af56c36b28c5a814 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/auth/login.user.dto.js @@ -0,0 +1,33 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.LoginUserDto = void 0; +const tslib_1 = require("tslib"); +const class_validator_1 = require("class-validator"); +const client_1 = require("@prisma/client"); +class LoginUserDto { +} +exports.LoginUserDto = LoginUserDto; +tslib_1.__decorate([ + (0, class_validator_1.IsString)(), + (0, class_validator_1.IsDefined)(), + (0, class_validator_1.ValidateIf)((o) => !o.providerToken), + (0, class_validator_1.MinLength)(3), + tslib_1.__metadata("design:type", String) +], LoginUserDto.prototype, "password", void 0); +tslib_1.__decorate([ + (0, class_validator_1.IsString)(), + (0, class_validator_1.IsDefined)(), + tslib_1.__metadata("design:type", String) +], LoginUserDto.prototype, "provider", void 0); +tslib_1.__decorate([ + (0, class_validator_1.IsString)(), + (0, class_validator_1.IsDefined)(), + (0, class_validator_1.ValidateIf)((o) => !o.password), + tslib_1.__metadata("design:type", String) +], LoginUserDto.prototype, "providerToken", void 0); +tslib_1.__decorate([ + (0, class_validator_1.IsEmail)(), + (0, class_validator_1.IsDefined)(), + tslib_1.__metadata("design:type", String) +], LoginUserDto.prototype, "email", void 0); +//# sourceMappingURL=login.user.dto.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/dtos/auth/login.user.dto.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/auth/login.user.dto.js.map new file mode 100644 index 0000000000000000000000000000000000000000..021d75f1c07cc6d61130aac0ecdfde2947a8435f --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/auth/login.user.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"login.user.dto.js","sourceRoot":"","sources":["../../../../../../../../libraries/nestjs-libraries/src/dtos/auth/login.user.dto.ts"],"names":[],"mappings":";;;;AAAA,qDAMyB;AACzB,2CAA0C;AAE1C,MAAa,YAAY;CAqBxB;AArBD,oCAqBC;AAhBC;IAJC,IAAA,0BAAQ,GAAE;IACV,IAAA,2BAAS,GAAE;IACX,IAAA,4BAAU,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;IACnC,IAAA,2BAAS,EAAC,CAAC,CAAC;;8CACI;AAIjB;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,2BAAS,GAAE;;8CACO;AAKnB;IAHC,IAAA,0BAAQ,GAAE;IACV,IAAA,2BAAS,GAAE;IACX,IAAA,4BAAU,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;;mDACT;AAItB;IAFC,IAAA,yBAAO,GAAE;IACT,IAAA,2BAAS,GAAE;;2CACE"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/dtos/auth/resend-activation.dto.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/auth/resend-activation.dto.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..3dc734706c6b1c641cd03672596c738de863fd6b --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/auth/resend-activation.dto.d.ts @@ -0,0 +1,3 @@ +export declare class ResendActivationDto { + email: string; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/dtos/auth/resend-activation.dto.js b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/auth/resend-activation.dto.js new file mode 100644 index 0000000000000000000000000000000000000000..2dac708771728a83ecf2a915e7316227d35e1420 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/auth/resend-activation.dto.js @@ -0,0 +1,15 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ResendActivationDto = void 0; +const tslib_1 = require("tslib"); +const class_validator_1 = require("class-validator"); +class ResendActivationDto { +} +exports.ResendActivationDto = ResendActivationDto; +tslib_1.__decorate([ + (0, class_validator_1.IsString)(), + (0, class_validator_1.IsDefined)(), + (0, class_validator_1.IsEmail)(), + tslib_1.__metadata("design:type", String) +], ResendActivationDto.prototype, "email", void 0); +//# sourceMappingURL=resend-activation.dto.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/dtos/auth/resend-activation.dto.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/auth/resend-activation.dto.js.map new file mode 100644 index 0000000000000000000000000000000000000000..07d528f6048da655654c8537b1d5537bd1bade4f --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/auth/resend-activation.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"resend-activation.dto.js","sourceRoot":"","sources":["../../../../../../../../libraries/nestjs-libraries/src/dtos/auth/resend-activation.dto.ts"],"names":[],"mappings":";;;;AAAA,qDAA+D;AAE/D,MAAa,mBAAmB;CAK/B;AALD,kDAKC;AADC;IAHC,IAAA,0BAAQ,GAAE;IACV,IAAA,2BAAS,GAAE;IACX,IAAA,yBAAO,GAAE;;kDACI"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/dtos/autopost/autopost.dto.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/autopost/autopost.dto.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..bd506628561ba8b78f86cd23bf54312ef797d52b --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/autopost/autopost.dto.d.ts @@ -0,0 +1,15 @@ +export declare class Integrations { + id: string; +} +export declare class AutopostDto { + title: string; + content: string; + lastUrl: string; + onSlot: boolean; + syncLast: boolean; + url: string; + active: boolean; + addPicture: boolean; + generateContent: boolean; + integrations: Integrations[]; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/dtos/autopost/autopost.dto.js b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/autopost/autopost.dto.js new file mode 100644 index 0000000000000000000000000000000000000000..b81493e8bf970a2bfe6239d86c9322e99aff384e --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/autopost/autopost.dto.js @@ -0,0 +1,73 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.AutopostDto = exports.Integrations = void 0; +const tslib_1 = require("tslib"); +const class_validator_1 = require("class-validator"); +const class_transformer_1 = require("class-transformer"); +const webhook_url_validator_1 = require("../webhooks/webhook.url.validator"); +class Integrations { +} +exports.Integrations = Integrations; +tslib_1.__decorate([ + (0, class_validator_1.IsString)(), + (0, class_validator_1.IsDefined)(), + tslib_1.__metadata("design:type", String) +], Integrations.prototype, "id", void 0); +class AutopostDto { +} +exports.AutopostDto = AutopostDto; +tslib_1.__decorate([ + (0, class_validator_1.IsString)(), + (0, class_validator_1.IsDefined)(), + tslib_1.__metadata("design:type", String) +], AutopostDto.prototype, "title", void 0); +tslib_1.__decorate([ + (0, class_validator_1.IsString)(), + (0, class_validator_1.IsOptional)(), + tslib_1.__metadata("design:type", String) +], AutopostDto.prototype, "content", void 0); +tslib_1.__decorate([ + (0, class_validator_1.IsString)(), + (0, class_validator_1.IsOptional)(), + tslib_1.__metadata("design:type", String) +], AutopostDto.prototype, "lastUrl", void 0); +tslib_1.__decorate([ + (0, class_validator_1.IsBoolean)(), + (0, class_validator_1.IsDefined)(), + tslib_1.__metadata("design:type", Boolean) +], AutopostDto.prototype, "onSlot", void 0); +tslib_1.__decorate([ + (0, class_validator_1.IsBoolean)(), + (0, class_validator_1.IsDefined)(), + tslib_1.__metadata("design:type", Boolean) +], AutopostDto.prototype, "syncLast", void 0); +tslib_1.__decorate([ + (0, class_validator_1.IsUrl)(), + (0, class_validator_1.IsDefined)(), + (0, webhook_url_validator_1.IsSafeWebhookUrl)({ + message: 'Autopost URL must be a public HTTPS URL and cannot point to internal network addresses', + }), + tslib_1.__metadata("design:type", String) +], AutopostDto.prototype, "url", void 0); +tslib_1.__decorate([ + (0, class_validator_1.IsBoolean)(), + (0, class_validator_1.IsDefined)(), + tslib_1.__metadata("design:type", Boolean) +], AutopostDto.prototype, "active", void 0); +tslib_1.__decorate([ + (0, class_validator_1.IsBoolean)(), + (0, class_validator_1.IsDefined)(), + tslib_1.__metadata("design:type", Boolean) +], AutopostDto.prototype, "addPicture", void 0); +tslib_1.__decorate([ + (0, class_validator_1.IsBoolean)(), + (0, class_validator_1.IsDefined)(), + tslib_1.__metadata("design:type", Boolean) +], AutopostDto.prototype, "generateContent", void 0); +tslib_1.__decorate([ + (0, class_validator_1.IsArray)(), + (0, class_transformer_1.Type)(() => Integrations), + (0, class_validator_1.ValidateNested)({ each: true }), + tslib_1.__metadata("design:type", Array) +], AutopostDto.prototype, "integrations", void 0); +//# sourceMappingURL=autopost.dto.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/dtos/autopost/autopost.dto.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/autopost/autopost.dto.js.map new file mode 100644 index 0000000000000000000000000000000000000000..3b74e65ae2684693e834bf8c482d6fdbc6e51006 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/autopost/autopost.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"autopost.dto.js","sourceRoot":"","sources":["../../../../../../../../libraries/nestjs-libraries/src/dtos/autopost/autopost.dto.ts"],"names":[],"mappings":";;;;AAAA,qDAQyB;AACzB,yDAAyC;AACzC,6EAAiG;AAEjG,MAAa,YAAY;CAIxB;AAJD,oCAIC;AADC;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,2BAAS,GAAE;;wCACD;AAGb,MAAa,WAAW;CA6CvB;AA7CD,kCA6CC;AA1CC;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,2BAAS,GAAE;;0CACE;AAId;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;4CACG;AAIhB;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;4CACG;AAIhB;IAFC,IAAA,2BAAS,GAAE;IACX,IAAA,2BAAS,GAAE;;2CACI;AAIhB;IAFC,IAAA,2BAAS,GAAE;IACX,IAAA,2BAAS,GAAE;;6CACM;AAQlB;IANC,IAAA,uBAAK,GAAE;IACP,IAAA,2BAAS,GAAE;IACX,IAAA,wCAAgB,EAAC;QAChB,OAAO,EACL,wFAAwF;KAC3F,CAAC;;wCACU;AAIZ;IAFC,IAAA,2BAAS,GAAE;IACX,IAAA,2BAAS,GAAE;;2CACI;AAIhB;IAFC,IAAA,2BAAS,GAAE;IACX,IAAA,2BAAS,GAAE;;+CACQ;AAIpB;IAFC,IAAA,2BAAS,GAAE;IACX,IAAA,2BAAS,GAAE;;oDACa;AAKzB;IAHC,IAAA,yBAAO,GAAE;IACT,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,YAAY,CAAC;IACxB,IAAA,gCAAc,EAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;;iDACF"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/dtos/billing/billing.subscribe.dto.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/billing/billing.subscribe.dto.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..58f750c78bd22787657d7a60caf82a9c974a6b70 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/billing/billing.subscribe.dto.d.ts @@ -0,0 +1,8 @@ +export declare class BillingSubscribeDto { + period: 'MONTHLY' | 'YEARLY'; + billing: 'STANDARD' | 'PRO' | 'TEAM' | 'ULTIMATE'; + utm: string; + dub: string; + datafast_session_id: string; + datafast_visitor_id: string; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/dtos/billing/billing.subscribe.dto.js b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/billing/billing.subscribe.dto.js new file mode 100644 index 0000000000000000000000000000000000000000..12b360812c0ddae5b71c936ff8d7e8a98c4b198b --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/billing/billing.subscribe.dto.js @@ -0,0 +1,17 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.BillingSubscribeDto = void 0; +const tslib_1 = require("tslib"); +const class_validator_1 = require("class-validator"); +class BillingSubscribeDto { +} +exports.BillingSubscribeDto = BillingSubscribeDto; +tslib_1.__decorate([ + (0, class_validator_1.IsIn)(['MONTHLY', 'YEARLY']), + tslib_1.__metadata("design:type", String) +], BillingSubscribeDto.prototype, "period", void 0); +tslib_1.__decorate([ + (0, class_validator_1.IsIn)(['STANDARD', 'PRO', 'TEAM', 'ULTIMATE']), + tslib_1.__metadata("design:type", String) +], BillingSubscribeDto.prototype, "billing", void 0); +//# sourceMappingURL=billing.subscribe.dto.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/dtos/billing/billing.subscribe.dto.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/billing/billing.subscribe.dto.js.map new file mode 100644 index 0000000000000000000000000000000000000000..9edae4d4349fc6e38a8d071d81d60dd7dac2ae34 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/billing/billing.subscribe.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"billing.subscribe.dto.js","sourceRoot":"","sources":["../../../../../../../../libraries/nestjs-libraries/src/dtos/billing/billing.subscribe.dto.ts"],"names":[],"mappings":";;;;AAAA,qDAAuC;AAEvC,MAAa,mBAAmB;CAa/B;AAbD,kDAaC;AAXC;IADC,IAAA,sBAAI,EAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;;mDACC;AAG7B;IADC,IAAA,sBAAI,EAAC,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;;oDACI"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/dtos/generator/create.generated.posts.dto.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/generator/create.generated.posts.dto.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..4dd1f872d96145fa9d40c4be6e021473df0409c7 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/generator/create.generated.posts.dto.d.ts @@ -0,0 +1,14 @@ +declare class InnerPost { + post: string; +} +declare class PostGroup { + list: InnerPost[]; +} +export declare class CreateGeneratedPostsDto { + posts: PostGroup[]; + week: number; + year: number; + url: string; + postId: string; +} +export {}; diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/dtos/generator/create.generated.posts.dto.js b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/generator/create.generated.posts.dto.js new file mode 100644 index 0000000000000000000000000000000000000000..3629c10e9040dd3547dbe2b2449b264c3e63ffe8 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/generator/create.generated.posts.dto.js @@ -0,0 +1,57 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.CreateGeneratedPostsDto = void 0; +const tslib_1 = require("tslib"); +const class_validator_1 = require("class-validator"); +const class_transformer_1 = require("class-transformer"); +class InnerPost { +} +tslib_1.__decorate([ + (0, class_validator_1.IsString)(), + (0, class_validator_1.IsDefined)(), + tslib_1.__metadata("design:type", String) +], InnerPost.prototype, "post", void 0); +class PostGroup { +} +tslib_1.__decorate([ + (0, class_validator_1.IsArray)(), + (0, class_validator_1.ArrayMinSize)(1), + (0, class_validator_1.ValidateNested)({ each: true }), + (0, class_transformer_1.Type)(() => InnerPost), + (0, class_validator_1.IsDefined)(), + tslib_1.__metadata("design:type", Array) +], PostGroup.prototype, "list", void 0); +class CreateGeneratedPostsDto { +} +exports.CreateGeneratedPostsDto = CreateGeneratedPostsDto; +tslib_1.__decorate([ + (0, class_validator_1.IsArray)(), + (0, class_validator_1.ArrayMinSize)(1), + (0, class_validator_1.ValidateNested)({ each: true }), + (0, class_transformer_1.Type)(() => PostGroup), + (0, class_validator_1.IsDefined)(), + tslib_1.__metadata("design:type", Array) +], CreateGeneratedPostsDto.prototype, "posts", void 0); +tslib_1.__decorate([ + (0, class_validator_1.IsNumber)(), + (0, class_validator_1.IsDefined)(), + tslib_1.__metadata("design:type", Number) +], CreateGeneratedPostsDto.prototype, "week", void 0); +tslib_1.__decorate([ + (0, class_validator_1.IsNumber)(), + (0, class_validator_1.IsDefined)(), + tslib_1.__metadata("design:type", Number) +], CreateGeneratedPostsDto.prototype, "year", void 0); +tslib_1.__decorate([ + (0, class_validator_1.IsString)(), + (0, class_validator_1.IsDefined)(), + (0, class_validator_1.ValidateIf)((o) => !o.url), + tslib_1.__metadata("design:type", String) +], CreateGeneratedPostsDto.prototype, "url", void 0); +tslib_1.__decorate([ + (0, class_validator_1.IsString)(), + (0, class_validator_1.IsDefined)(), + (0, class_validator_1.ValidateIf)((o) => !o.url), + tslib_1.__metadata("design:type", String) +], CreateGeneratedPostsDto.prototype, "postId", void 0); +//# sourceMappingURL=create.generated.posts.dto.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/dtos/generator/create.generated.posts.dto.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/generator/create.generated.posts.dto.js.map new file mode 100644 index 0000000000000000000000000000000000000000..a2e8970d133bfab24884a4299128b91dea593fab --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/generator/create.generated.posts.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"create.generated.posts.dto.js","sourceRoot":"","sources":["../../../../../../../../libraries/nestjs-libraries/src/dtos/generator/create.generated.posts.dto.ts"],"names":[],"mappings":";;;;AAAA,qDAQyB;AACzB,yDAAyC;AAEzC,MAAM,SAAS;CAId;AADC;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,2BAAS,GAAE;;uCACC;AAGf,MAAM,SAAS;CAOd;AADC;IALC,IAAA,yBAAO,GAAE;IACT,IAAA,8BAAY,EAAC,CAAC,CAAC;IACf,IAAA,gCAAc,EAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC9B,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,SAAS,CAAC;IACrB,IAAA,2BAAS,GAAE;;uCACM;AAGpB,MAAa,uBAAuB;CAyBnC;AAzBD,0DAyBC;AAnBC;IALC,IAAA,yBAAO,GAAE;IACT,IAAA,8BAAY,EAAC,CAAC,CAAC;IACf,IAAA,gCAAc,EAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC9B,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,SAAS,CAAC;IACrB,IAAA,2BAAS,GAAE;;sDACO;AAInB;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,2BAAS,GAAE;;qDACC;AAIb;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,2BAAS,GAAE;;qDACC;AAKb;IAHC,IAAA,0BAAQ,GAAE;IACV,IAAA,2BAAS,GAAE;IACX,IAAA,4BAAU,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;;oDACd;AAKZ;IAHC,IAAA,0BAAQ,GAAE;IACV,IAAA,2BAAS,GAAE;IACX,IAAA,4BAAU,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;;uDACX"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/dtos/generator/generator.dto.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/generator/generator.dto.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..1ce337d69634b67453501def57e5e7f1767f6950 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/generator/generator.dto.d.ts @@ -0,0 +1,6 @@ +export declare class GeneratorDto { + research: string; + isPicture: boolean; + format: 'one_short' | 'one_long' | 'thread_short' | 'thread_long'; + tone: 'personal' | 'company'; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/dtos/generator/generator.dto.js b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/generator/generator.dto.js new file mode 100644 index 0000000000000000000000000000000000000000..83cb5711b20bede19e5a4f0220fcc0a89d6937d1 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/generator/generator.dto.js @@ -0,0 +1,28 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GeneratorDto = void 0; +const tslib_1 = require("tslib"); +const class_validator_1 = require("class-validator"); +class GeneratorDto { +} +exports.GeneratorDto = GeneratorDto; +tslib_1.__decorate([ + (0, class_validator_1.IsString)(), + (0, class_validator_1.MinLength)(10), + tslib_1.__metadata("design:type", String) +], GeneratorDto.prototype, "research", void 0); +tslib_1.__decorate([ + (0, class_validator_1.IsBoolean)(), + tslib_1.__metadata("design:type", Boolean) +], GeneratorDto.prototype, "isPicture", void 0); +tslib_1.__decorate([ + (0, class_validator_1.IsString)(), + (0, class_validator_1.IsIn)(['one_short', 'one_long', 'thread_short', 'thread_long']), + tslib_1.__metadata("design:type", String) +], GeneratorDto.prototype, "format", void 0); +tslib_1.__decorate([ + (0, class_validator_1.IsString)(), + (0, class_validator_1.IsIn)(['personal', 'company']), + tslib_1.__metadata("design:type", String) +], GeneratorDto.prototype, "tone", void 0); +//# sourceMappingURL=generator.dto.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/dtos/generator/generator.dto.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/generator/generator.dto.js.map new file mode 100644 index 0000000000000000000000000000000000000000..3d7b240d4c8e60d075b4012e9f327d5e8a4502c3 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/generator/generator.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"generator.dto.js","sourceRoot":"","sources":["../../../../../../../../libraries/nestjs-libraries/src/dtos/generator/generator.dto.ts"],"names":[],"mappings":";;;;AAAA,qDAAuE;AAEvE,MAAa,YAAY;CAexB;AAfD,oCAeC;AAZC;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,2BAAS,EAAC,EAAE,CAAC;;8CACG;AAGjB;IADC,IAAA,2BAAS,GAAE;;+CACO;AAInB;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,sBAAI,EAAC,CAAC,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC;;4CACG;AAIlE;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,sBAAI,EAAC,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;;0CACD"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/dtos/integrations/connect.integration.dto.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/integrations/connect.integration.dto.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..7d7e99dc74f9d45feb42d42a3d36312e11fb3e93 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/integrations/connect.integration.dto.d.ts @@ -0,0 +1,6 @@ +export declare class ConnectIntegrationDto { + state: string; + code: string; + timezone: string; + refresh?: string; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/dtos/integrations/connect.integration.dto.js b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/integrations/connect.integration.dto.js new file mode 100644 index 0000000000000000000000000000000000000000..ad31dae02f9f14e45a2dfef9bfe668a8f5be4ede --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/integrations/connect.integration.dto.js @@ -0,0 +1,29 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ConnectIntegrationDto = void 0; +const tslib_1 = require("tslib"); +const class_validator_1 = require("class-validator"); +class ConnectIntegrationDto { +} +exports.ConnectIntegrationDto = ConnectIntegrationDto; +tslib_1.__decorate([ + (0, class_validator_1.IsString)(), + (0, class_validator_1.IsDefined)(), + tslib_1.__metadata("design:type", String) +], ConnectIntegrationDto.prototype, "state", void 0); +tslib_1.__decorate([ + (0, class_validator_1.IsString)(), + (0, class_validator_1.IsDefined)(), + tslib_1.__metadata("design:type", String) +], ConnectIntegrationDto.prototype, "code", void 0); +tslib_1.__decorate([ + (0, class_validator_1.IsString)(), + (0, class_validator_1.IsDefined)(), + tslib_1.__metadata("design:type", String) +], ConnectIntegrationDto.prototype, "timezone", void 0); +tslib_1.__decorate([ + (0, class_validator_1.IsString)(), + (0, class_validator_1.IsOptional)(), + tslib_1.__metadata("design:type", String) +], ConnectIntegrationDto.prototype, "refresh", void 0); +//# sourceMappingURL=connect.integration.dto.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/dtos/integrations/connect.integration.dto.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/integrations/connect.integration.dto.js.map new file mode 100644 index 0000000000000000000000000000000000000000..a99e637a1069792237cb8722786c5991e11ca4bf --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/integrations/connect.integration.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"connect.integration.dto.js","sourceRoot":"","sources":["../../../../../../../../libraries/nestjs-libraries/src/dtos/integrations/connect.integration.dto.ts"],"names":[],"mappings":";;;;AAAA,qDAAkE;AAElE,MAAa,qBAAqB;CAgBjC;AAhBD,sDAgBC;AAbC;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,2BAAS,GAAE;;oDACE;AAId;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,2BAAS,GAAE;;mDACC;AAIb;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,2BAAS,GAAE;;uDACK;AAIjB;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;sDACI"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/dtos/integrations/integration.function.dto.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/integrations/integration.function.dto.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..684c86b8e787dfc7a07bdaf299f9595b01e42b04 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/integrations/integration.function.dto.d.ts @@ -0,0 +1,5 @@ +export declare class IntegrationFunctionDto { + name: string; + id: string; + data: any; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/dtos/integrations/integration.function.dto.js b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/integrations/integration.function.dto.js new file mode 100644 index 0000000000000000000000000000000000000000..6a4f519d9debf01e112988782dba3beae7171969 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/integrations/integration.function.dto.js @@ -0,0 +1,19 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.IntegrationFunctionDto = void 0; +const tslib_1 = require("tslib"); +const class_validator_1 = require("class-validator"); +class IntegrationFunctionDto { +} +exports.IntegrationFunctionDto = IntegrationFunctionDto; +tslib_1.__decorate([ + (0, class_validator_1.IsString)(), + (0, class_validator_1.IsDefined)(), + tslib_1.__metadata("design:type", String) +], IntegrationFunctionDto.prototype, "name", void 0); +tslib_1.__decorate([ + (0, class_validator_1.IsString)(), + (0, class_validator_1.IsDefined)(), + tslib_1.__metadata("design:type", String) +], IntegrationFunctionDto.prototype, "id", void 0); +//# sourceMappingURL=integration.function.dto.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/dtos/integrations/integration.function.dto.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/integrations/integration.function.dto.js.map new file mode 100644 index 0000000000000000000000000000000000000000..0de20de48ef3713922562941e14929d4ac8358ee --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/integrations/integration.function.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"integration.function.dto.js","sourceRoot":"","sources":["../../../../../../../../libraries/nestjs-libraries/src/dtos/integrations/integration.function.dto.ts"],"names":[],"mappings":";;;;AAAA,qDAAsD;AAEtD,MAAa,sBAAsB;CAUlC;AAVD,wDAUC;AAPC;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,2BAAS,GAAE;;oDACC;AAIb;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,2BAAS,GAAE;;kDACD"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/dtos/integrations/integration.time.dto.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/integrations/integration.time.dto.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..a5267895f208afdae4d04af4278abf51b46a2e30 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/integrations/integration.time.dto.d.ts @@ -0,0 +1,6 @@ +export declare class IntegrationValidateTimeDto { + time: number; +} +export declare class IntegrationTimeDto { + time: IntegrationValidateTimeDto[]; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/dtos/integrations/integration.time.dto.js b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/integrations/integration.time.dto.js new file mode 100644 index 0000000000000000000000000000000000000000..434f1c804249c0af1e8c4ec31ff8e34a6e232f9f --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/integrations/integration.time.dto.js @@ -0,0 +1,25 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.IntegrationTimeDto = exports.IntegrationValidateTimeDto = void 0; +const tslib_1 = require("tslib"); +const class_validator_1 = require("class-validator"); +const class_transformer_1 = require("class-transformer"); +class IntegrationValidateTimeDto { +} +exports.IntegrationValidateTimeDto = IntegrationValidateTimeDto; +tslib_1.__decorate([ + (0, class_validator_1.IsDefined)(), + (0, class_validator_1.IsNumber)(), + tslib_1.__metadata("design:type", Number) +], IntegrationValidateTimeDto.prototype, "time", void 0); +class IntegrationTimeDto { +} +exports.IntegrationTimeDto = IntegrationTimeDto; +tslib_1.__decorate([ + (0, class_transformer_1.Type)(() => IntegrationValidateTimeDto), + (0, class_validator_1.IsArray)(), + (0, class_validator_1.IsDefined)(), + (0, class_validator_1.ValidateNested)({ each: true }), + tslib_1.__metadata("design:type", Array) +], IntegrationTimeDto.prototype, "time", void 0); +//# sourceMappingURL=integration.time.dto.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/dtos/integrations/integration.time.dto.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/integrations/integration.time.dto.js.map new file mode 100644 index 0000000000000000000000000000000000000000..492c88d7d19e16655465b6727cc8c7bea984febe --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/integrations/integration.time.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"integration.time.dto.js","sourceRoot":"","sources":["../../../../../../../../libraries/nestjs-libraries/src/dtos/integrations/integration.time.dto.ts"],"names":[],"mappings":";;;;AAAA,qDAA+E;AAC/E,yDAAyC;AAEzC,MAAa,0BAA0B;CAItC;AAJD,gEAIC;AADC;IAFC,IAAA,2BAAS,GAAE;IACX,IAAA,0BAAQ,GAAE;;wDACE;AAEf,MAAa,kBAAkB;CAM9B;AAND,gDAMC;AADC;IAJC,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,0BAA0B,CAAC;IACtC,IAAA,yBAAO,GAAE;IACT,IAAA,2BAAS,GAAE;IACX,IAAA,gCAAc,EAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;;gDACI"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/dtos/media/media.dto.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/media/media.dto.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..427e9714ef5bae1cca08b1cd60a08ff9a86a7e95 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/media/media.dto.d.ts @@ -0,0 +1,6 @@ +export declare class MediaDto { + id: string; + path: string; + alt?: string; + thumbnail?: string; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/dtos/media/media.dto.js b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/media/media.dto.js new file mode 100644 index 0000000000000000000000000000000000000000..913c08270b01132837337321621fcd7411d2d92c --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/media/media.dto.js @@ -0,0 +1,32 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.MediaDto = void 0; +const tslib_1 = require("tslib"); +const class_validator_1 = require("class-validator"); +const valid_url_path_1 = require("../../../../helpers/src/utils/valid.url.path"); +class MediaDto { +} +exports.MediaDto = MediaDto; +tslib_1.__decorate([ + (0, class_validator_1.IsString)(), + (0, class_validator_1.IsDefined)(), + tslib_1.__metadata("design:type", String) +], MediaDto.prototype, "id", void 0); +tslib_1.__decorate([ + (0, class_validator_1.IsString)(), + (0, class_validator_1.IsDefined)(), + (0, class_validator_1.Validate)(valid_url_path_1.ValidUrlPath), + (0, class_validator_1.Validate)(valid_url_path_1.ValidUrlExtension), + tslib_1.__metadata("design:type", String) +], MediaDto.prototype, "path", void 0); +tslib_1.__decorate([ + (0, class_validator_1.ValidateIf)((o) => o.alt), + (0, class_validator_1.IsString)(), + tslib_1.__metadata("design:type", String) +], MediaDto.prototype, "alt", void 0); +tslib_1.__decorate([ + (0, class_validator_1.ValidateIf)((o) => o.thumbnail), + (0, class_validator_1.IsUrl)(), + tslib_1.__metadata("design:type", String) +], MediaDto.prototype, "thumbnail", void 0); +//# sourceMappingURL=media.dto.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/dtos/media/media.dto.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/media/media.dto.js.map new file mode 100644 index 0000000000000000000000000000000000000000..564d678aa47beee1149904d24b2467dd1f05996b --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/media/media.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"media.dto.js","sourceRoot":"","sources":["../../../../../../../../libraries/nestjs-libraries/src/dtos/media/media.dto.ts"],"names":[],"mappings":";;;;AAAA,qDAAmF;AACnF,iFAAwF;AAExF,MAAa,QAAQ;CAkBpB;AAlBD,4BAkBC;AAfC;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,2BAAS,GAAE;;oCACD;AAMX;IAJC,IAAA,0BAAQ,GAAE;IACV,IAAA,2BAAS,GAAE;IACX,IAAA,0BAAQ,EAAC,6BAAY,CAAC;IACtB,IAAA,0BAAQ,EAAC,kCAAiB,CAAC;;sCACf;AAIb;IAFC,IAAA,4BAAU,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;IACxB,IAAA,0BAAQ,GAAE;;qCACE;AAIb;IAFC,IAAA,4BAAU,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9B,IAAA,uBAAK,GAAE;;2CACW"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/dtos/media/save.media.information.dto.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/media/save.media.information.dto.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..8cb50fabeaca87a4d0bf0f78f69681ce1ec7fc39 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/media/save.media.information.dto.d.ts @@ -0,0 +1,6 @@ +export declare class SaveMediaInformationDto { + id: string; + alt: string; + thumbnail: string; + thumbnailTimestamp: number; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/dtos/media/save.media.information.dto.js b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/media/save.media.information.dto.js new file mode 100644 index 0000000000000000000000000000000000000000..162fc520206826d2ad072b280b053bcbedefe323 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/media/save.media.information.dto.js @@ -0,0 +1,27 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SaveMediaInformationDto = void 0; +const tslib_1 = require("tslib"); +const class_validator_1 = require("class-validator"); +class SaveMediaInformationDto { +} +exports.SaveMediaInformationDto = SaveMediaInformationDto; +tslib_1.__decorate([ + (0, class_validator_1.IsString)(), + tslib_1.__metadata("design:type", String) +], SaveMediaInformationDto.prototype, "id", void 0); +tslib_1.__decorate([ + (0, class_validator_1.IsString)(), + tslib_1.__metadata("design:type", String) +], SaveMediaInformationDto.prototype, "alt", void 0); +tslib_1.__decorate([ + (0, class_validator_1.IsUrl)(), + (0, class_validator_1.ValidateIf)((o) => !!o.thumbnail), + tslib_1.__metadata("design:type", String) +], SaveMediaInformationDto.prototype, "thumbnail", void 0); +tslib_1.__decorate([ + (0, class_validator_1.IsNumber)(), + (0, class_validator_1.ValidateIf)((o) => !!o.thumbnailTimestamp), + tslib_1.__metadata("design:type", Number) +], SaveMediaInformationDto.prototype, "thumbnailTimestamp", void 0); +//# sourceMappingURL=save.media.information.dto.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/dtos/media/save.media.information.dto.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/media/save.media.information.dto.js.map new file mode 100644 index 0000000000000000000000000000000000000000..85c2d1e54d30e76e5217b150c49ad17eebd4a6ee --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/media/save.media.information.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"save.media.information.dto.js","sourceRoot":"","sources":["../../../../../../../../libraries/nestjs-libraries/src/dtos/media/save.media.information.dto.ts"],"names":[],"mappings":";;;;AAAA,qDAAoF;AAEpF,MAAa,uBAAuB;CAcnC;AAdD,0DAcC;AAZC;IADC,IAAA,0BAAQ,GAAE;;mDACA;AAGX;IADC,IAAA,0BAAQ,GAAE;;oDACC;AAIZ;IAFC,IAAA,uBAAK,GAAE;IACP,IAAA,4BAAU,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;;0DACf;AAIlB;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC;;mEACf"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/dtos/media/upload.dto.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/media/upload.dto.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..f67d4bd646bb48357f4d82a216ee86a57aa1f525 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/media/upload.dto.d.ts @@ -0,0 +1,3 @@ +export declare class UploadDto { + url: string; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/dtos/media/upload.dto.js b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/media/upload.dto.js new file mode 100644 index 0000000000000000000000000000000000000000..4cced199f017fc5fb7af8180427670b5e3be14f3 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/media/upload.dto.js @@ -0,0 +1,20 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.UploadDto = void 0; +const tslib_1 = require("tslib"); +const class_validator_1 = require("class-validator"); +const valid_url_path_1 = require("../../../../helpers/src/utils/valid.url.path"); +const webhook_url_validator_1 = require("../webhooks/webhook.url.validator"); +class UploadDto { +} +exports.UploadDto = UploadDto; +tslib_1.__decorate([ + (0, class_validator_1.IsString)(), + (0, class_validator_1.IsDefined)(), + (0, class_validator_1.Validate)(valid_url_path_1.ValidUrlExtension), + (0, webhook_url_validator_1.IsSafeWebhookUrl)({ + message: 'URL must be a public HTTPS URL and cannot point to internal network addresses', + }), + tslib_1.__metadata("design:type", String) +], UploadDto.prototype, "url", void 0); +//# sourceMappingURL=upload.dto.js.map \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/dtos/media/upload.dto.js.map b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/media/upload.dto.js.map new file mode 100644 index 0000000000000000000000000000000000000000..adb9a2a74d013ae433a1d87e0d832cd9560e925d --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/media/upload.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"upload.dto.js","sourceRoot":"","sources":["../../../../../../../../libraries/nestjs-libraries/src/dtos/media/upload.dto.ts"],"names":[],"mappings":";;;;AAAA,qDAAgE;AAChE,iFAA0E;AAC1E,6EAAiG;AAEjG,MAAa,SAAS;CASrB;AATD,8BASC;AADC;IAPC,IAAA,0BAAQ,GAAE;IACV,IAAA,2BAAS,GAAE;IACX,IAAA,0BAAQ,EAAC,kCAAiB,CAAC;IAC3B,IAAA,wCAAgB,EAAC;QAChB,OAAO,EACL,+EAA+E;KAClF,CAAC;;sCACU"} \ No newline at end of file diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/dtos/notifications/get.notifications.dto.d.ts b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/notifications/get.notifications.dto.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..ad4b45ff4d7513c39938339d8106d9db72ebb566 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/notifications/get.notifications.dto.d.ts @@ -0,0 +1,3 @@ +export declare class GetNotificationsDto { + page?: number; +} diff --git a/apps/backend/dist/libraries/nestjs-libraries/src/dtos/notifications/get.notifications.dto.js b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/notifications/get.notifications.dto.js new file mode 100644 index 0000000000000000000000000000000000000000..041adb0558a2b823ec95add22fa51108f22b3326 --- /dev/null +++ b/apps/backend/dist/libraries/nestjs-libraries/src/dtos/notifications/get.notifications.dto.js @@ -0,0 +1,20 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GetNotificationsDto = void 0; +const tslib_1 = require("tslib"); +const class_validator_1 = require("class-validator"); +const class_transformer_1 = require("class-transformer"); +class GetNotificationsDto { + constructor() { + this.page = 0; + } +} +exports.GetNotificationsDto = GetNotificationsDto; +tslib_1.__decorate([ + (0, class_validator_1.IsOptional)(), + (0, class_validator_1.IsNumber)(), + (0, class_validator_1.Min)(0), + (0, class_transformer_1.Transform)(({ value }) => parseInt(value, 10)), + tslib_1.__metadata("design:type", Number) +], GetNotificationsDto.prototype, "page", void 0); +//# sourceMappingURL=get.notifications.dto.js.map \ No newline at end of file