Upload folder using huggingface_hub (part 2)
Browse filesThis view is limited to 50 files because it contains too many changes. See raw diff
- apps/backend/dist/libraries/nestjs-libraries/src/3rdparties/thirdparty.module.js +21 -0
- apps/backend/dist/libraries/nestjs-libraries/src/3rdparties/thirdparty.module.js.map +1 -0
- apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.categories.d.ts +1 -0
- apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.categories.js +36 -0
- apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.categories.js.map +1 -0
- apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.graph.insert.service.d.ts +27 -0
- apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.graph.insert.service.js +119 -0
- apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.graph.insert.service.js.map +1 -0
- apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.graph.service.d.ts +113 -0
- apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.graph.service.js +328 -0
- apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.graph.service.js.map +1 -0
- apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.module.d.ts +2 -0
- apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.module.js +20 -0
- apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.module.js.map +1 -0
- apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.topics.d.ts +1 -0
- apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.topics.js +86 -0
- apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.topics.js.map +1 -0
- apps/backend/dist/libraries/nestjs-libraries/src/chat/agent.tool.interface.d.ts +6 -0
- apps/backend/dist/libraries/nestjs-libraries/src/chat/agent.tool.interface.js +3 -0
- apps/backend/dist/libraries/nestjs-libraries/src/chat/agent.tool.interface.js.map +1 -0
- apps/backend/dist/libraries/nestjs-libraries/src/chat/async.storage.d.ts +9 -0
- apps/backend/dist/libraries/nestjs-libraries/src/chat/async.storage.js +21 -0
- apps/backend/dist/libraries/nestjs-libraries/src/chat/async.storage.js.map +1 -0
- apps/backend/dist/libraries/nestjs-libraries/src/chat/auth.context.d.ts +1 -0
- apps/backend/dist/libraries/nestjs-libraries/src/chat/auth.context.js +14 -0
- apps/backend/dist/libraries/nestjs-libraries/src/chat/auth.context.js.map +1 -0
- apps/backend/dist/libraries/nestjs-libraries/src/chat/chat.module.d.ts +2 -0
- apps/backend/dist/libraries/nestjs-libraries/src/chat/chat.module.js +21 -0
- apps/backend/dist/libraries/nestjs-libraries/src/chat/chat.module.js.map +1 -0
- apps/backend/dist/libraries/nestjs-libraries/src/chat/load.tools.service.d.ts +15 -0
- apps/backend/dist/libraries/nestjs-libraries/src/chat/load.tools.service.js +101 -0
- apps/backend/dist/libraries/nestjs-libraries/src/chat/load.tools.service.js.map +1 -0
- apps/backend/dist/libraries/nestjs-libraries/src/chat/mastra.service.d.ts +8 -0
- apps/backend/dist/libraries/nestjs-libraries/src/chat/mastra.service.js +35 -0
- apps/backend/dist/libraries/nestjs-libraries/src/chat/mastra.service.js.map +1 -0
- apps/backend/dist/libraries/nestjs-libraries/src/chat/mastra.store.d.ts +2 -0
- apps/backend/dist/libraries/nestjs-libraries/src/chat/mastra.store.js +9 -0
- apps/backend/dist/libraries/nestjs-libraries/src/chat/mastra.store.js.map +1 -0
- apps/backend/dist/libraries/nestjs-libraries/src/chat/oauth-middleware.d.ts +22 -0
- apps/backend/dist/libraries/nestjs-libraries/src/chat/oauth-middleware.js +168 -0
- apps/backend/dist/libraries/nestjs-libraries/src/chat/oauth-middleware.js.map +1 -0
- apps/backend/dist/libraries/nestjs-libraries/src/chat/oauth-types.d.ts +32 -0
- apps/backend/dist/libraries/nestjs-libraries/src/chat/oauth-types.js +47 -0
- apps/backend/dist/libraries/nestjs-libraries/src/chat/oauth-types.js.map +1 -0
- apps/backend/dist/libraries/nestjs-libraries/src/chat/rules.description.decorator.d.ts +2 -0
- apps/backend/dist/libraries/nestjs-libraries/src/chat/rules.description.decorator.js +10 -0
- apps/backend/dist/libraries/nestjs-libraries/src/chat/rules.description.decorator.js.map +1 -0
- apps/backend/dist/libraries/nestjs-libraries/src/chat/start.mcp.d.ts +2 -0
- apps/backend/dist/libraries/nestjs-libraries/src/chat/start.mcp.js +219 -0
- apps/backend/dist/libraries/nestjs-libraries/src/chat/start.mcp.js.map +1 -0
apps/backend/dist/libraries/nestjs-libraries/src/3rdparties/thirdparty.module.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"use strict";
|
| 2 |
+
Object.defineProperty(exports, "__esModule", { value: true });
|
| 3 |
+
exports.ThirdPartyModule = void 0;
|
| 4 |
+
const tslib_1 = require("tslib");
|
| 5 |
+
const common_1 = require("@nestjs/common");
|
| 6 |
+
const heygen_provider_1 = require("./heygen/heygen.provider");
|
| 7 |
+
const reelfarm_provider_1 = require("./reelfarm/reelfarm.provider");
|
| 8 |
+
const thirdparty_manager_1 = require("./thirdparty.manager");
|
| 9 |
+
let ThirdPartyModule = class ThirdPartyModule {
|
| 10 |
+
};
|
| 11 |
+
exports.ThirdPartyModule = ThirdPartyModule;
|
| 12 |
+
exports.ThirdPartyModule = ThirdPartyModule = tslib_1.__decorate([
|
| 13 |
+
(0, common_1.Global)(),
|
| 14 |
+
(0, common_1.Module)({
|
| 15 |
+
providers: [heygen_provider_1.HeygenProvider, reelfarm_provider_1.ReelFarmProvider, thirdparty_manager_1.ThirdPartyManager],
|
| 16 |
+
get exports() {
|
| 17 |
+
return this.providers;
|
| 18 |
+
},
|
| 19 |
+
})
|
| 20 |
+
], ThirdPartyModule);
|
| 21 |
+
//# sourceMappingURL=thirdparty.module.js.map
|
apps/backend/dist/libraries/nestjs-libraries/src/3rdparties/thirdparty.module.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 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"}
|
apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.categories.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
export declare const agentCategories: string[];
|
apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.categories.js
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"use strict";
|
| 2 |
+
Object.defineProperty(exports, "__esModule", { value: true });
|
| 3 |
+
exports.agentCategories = void 0;
|
| 4 |
+
exports.agentCategories = [
|
| 5 |
+
'Educational',
|
| 6 |
+
'Inspirational',
|
| 7 |
+
'Promotional',
|
| 8 |
+
'Entertaining',
|
| 9 |
+
'Interactive',
|
| 10 |
+
'Behind The Scenes',
|
| 11 |
+
'Testimonial',
|
| 12 |
+
'Informative',
|
| 13 |
+
'Humorous',
|
| 14 |
+
'Seasonal',
|
| 15 |
+
'News',
|
| 16 |
+
'Challenge',
|
| 17 |
+
'Contest',
|
| 18 |
+
'Tips',
|
| 19 |
+
'Tutorial',
|
| 20 |
+
'Poll',
|
| 21 |
+
'Survey',
|
| 22 |
+
'Quote',
|
| 23 |
+
'Event',
|
| 24 |
+
'FAQ',
|
| 25 |
+
'Story',
|
| 26 |
+
'Meme',
|
| 27 |
+
'Review',
|
| 28 |
+
'Announcement',
|
| 29 |
+
'Highlight',
|
| 30 |
+
'Celebration',
|
| 31 |
+
'Reminder',
|
| 32 |
+
'Debate',
|
| 33 |
+
'Update',
|
| 34 |
+
'Trend',
|
| 35 |
+
];
|
| 36 |
+
//# sourceMappingURL=agent.categories.js.map
|
apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.categories.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 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"}
|
apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.graph.insert.service.d.ts
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import { BaseMessage } from '@langchain/core/messages';
|
| 2 |
+
import { StateGraph } from '@langchain/langgraph';
|
| 3 |
+
import { PostsService } from "../database/prisma/posts/posts.service";
|
| 4 |
+
interface WorkflowChannelsState {
|
| 5 |
+
messages: BaseMessage[];
|
| 6 |
+
topic?: string;
|
| 7 |
+
category: string;
|
| 8 |
+
hook?: string;
|
| 9 |
+
content?: string;
|
| 10 |
+
}
|
| 11 |
+
export declare class AgentGraphInsertService {
|
| 12 |
+
private _postsService;
|
| 13 |
+
constructor(_postsService: PostsService);
|
| 14 |
+
static state: () => StateGraph<WorkflowChannelsState, WorkflowChannelsState, Partial<WorkflowChannelsState>, "__start__", import("@langchain/langgraph").StateDefinition, import("@langchain/langgraph").StateDefinition, import("@langchain/langgraph").StateDefinition, unknown, unknown, unknown>;
|
| 15 |
+
findCategory(state: WorkflowChannelsState): Promise<{
|
| 16 |
+
category?: string;
|
| 17 |
+
}>;
|
| 18 |
+
findTopic(state: WorkflowChannelsState): Promise<{
|
| 19 |
+
topic?: string;
|
| 20 |
+
}>;
|
| 21 |
+
findHook(state: WorkflowChannelsState): Promise<{
|
| 22 |
+
hook?: string;
|
| 23 |
+
}>;
|
| 24 |
+
savePost(state: WorkflowChannelsState): Promise<{}>;
|
| 25 |
+
newPost(post: string): Promise<import("@langchain/langgraph").StateType<import("@langchain/langgraph").StateDefinition>>;
|
| 26 |
+
}
|
| 27 |
+
export {};
|
apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.graph.insert.service.js
ADDED
|
@@ -0,0 +1,119 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"use strict";
|
| 2 |
+
var AgentGraphInsertService_1;
|
| 3 |
+
Object.defineProperty(exports, "__esModule", { value: true });
|
| 4 |
+
exports.AgentGraphInsertService = void 0;
|
| 5 |
+
const tslib_1 = require("tslib");
|
| 6 |
+
const common_1 = require("@nestjs/common");
|
| 7 |
+
const messages_1 = require("@langchain/core/messages");
|
| 8 |
+
const langgraph_1 = require("@langchain/langgraph");
|
| 9 |
+
const openai_1 = require("@langchain/openai");
|
| 10 |
+
const prompts_1 = require("@langchain/core/prompts");
|
| 11 |
+
const agent_categories_1 = require("./agent.categories");
|
| 12 |
+
const zod_1 = require("zod");
|
| 13 |
+
const agent_topics_1 = require("./agent.topics");
|
| 14 |
+
const posts_service_1 = require("../database/prisma/posts/posts.service");
|
| 15 |
+
const model = new openai_1.ChatOpenAI({
|
| 16 |
+
apiKey: process.env.OPENAI_API_KEY || 'sk-proj-',
|
| 17 |
+
model: 'gpt-4o-2024-08-06',
|
| 18 |
+
temperature: 0,
|
| 19 |
+
});
|
| 20 |
+
const category = zod_1.z.object({
|
| 21 |
+
category: zod_1.z.string().describe('The category for the post'),
|
| 22 |
+
});
|
| 23 |
+
const topic = zod_1.z.object({
|
| 24 |
+
topic: zod_1.z.string().describe('The topic of the post'),
|
| 25 |
+
});
|
| 26 |
+
const hook = zod_1.z.object({
|
| 27 |
+
hook: zod_1.z.string().describe('The hook of the post'),
|
| 28 |
+
});
|
| 29 |
+
let AgentGraphInsertService = AgentGraphInsertService_1 = class AgentGraphInsertService {
|
| 30 |
+
constructor(_postsService) {
|
| 31 |
+
this._postsService = _postsService;
|
| 32 |
+
}
|
| 33 |
+
async findCategory(state) {
|
| 34 |
+
const { messages } = state;
|
| 35 |
+
const structuredOutput = model.withStructuredOutput(category);
|
| 36 |
+
return prompts_1.ChatPromptTemplate.fromTemplate(`
|
| 37 |
+
You are an assistant that get a social media post and categorize it into to one from the following categories:
|
| 38 |
+
{categories}
|
| 39 |
+
Here is the post:
|
| 40 |
+
{post}
|
| 41 |
+
`)
|
| 42 |
+
.pipe(structuredOutput)
|
| 43 |
+
.invoke({
|
| 44 |
+
post: messages[0].content,
|
| 45 |
+
categories: agent_categories_1.agentCategories.join(', '),
|
| 46 |
+
});
|
| 47 |
+
}
|
| 48 |
+
findTopic(state) {
|
| 49 |
+
const { messages } = state;
|
| 50 |
+
const structuredOutput = model.withStructuredOutput(topic);
|
| 51 |
+
return prompts_1.ChatPromptTemplate.fromTemplate(`
|
| 52 |
+
You are an assistant that get a social media post and categorize it into one of the following topics:
|
| 53 |
+
{topics}
|
| 54 |
+
Here is the post:
|
| 55 |
+
{post}
|
| 56 |
+
`)
|
| 57 |
+
.pipe(structuredOutput)
|
| 58 |
+
.invoke({
|
| 59 |
+
post: messages[0].content,
|
| 60 |
+
topics: agent_topics_1.agentTopics.join(', '),
|
| 61 |
+
});
|
| 62 |
+
}
|
| 63 |
+
findHook(state) {
|
| 64 |
+
const { messages } = state;
|
| 65 |
+
const structuredOutput = model.withStructuredOutput(hook);
|
| 66 |
+
return prompts_1.ChatPromptTemplate.fromTemplate(`
|
| 67 |
+
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:
|
| 68 |
+
{post}
|
| 69 |
+
`)
|
| 70 |
+
.pipe(structuredOutput)
|
| 71 |
+
.invoke({
|
| 72 |
+
post: messages[0].content,
|
| 73 |
+
});
|
| 74 |
+
}
|
| 75 |
+
async savePost(state) {
|
| 76 |
+
await this._postsService.createPopularPosts({
|
| 77 |
+
category: state.category,
|
| 78 |
+
topic: state.topic,
|
| 79 |
+
hook: state.hook,
|
| 80 |
+
content: state.messages[0].content,
|
| 81 |
+
});
|
| 82 |
+
return {};
|
| 83 |
+
}
|
| 84 |
+
newPost(post) {
|
| 85 |
+
const state = AgentGraphInsertService_1.state();
|
| 86 |
+
const workflow = state
|
| 87 |
+
.addNode('find-category', this.findCategory)
|
| 88 |
+
.addNode('find-topic', this.findTopic)
|
| 89 |
+
.addNode('find-hook', this.findHook)
|
| 90 |
+
.addNode('save-post', this.savePost.bind(this))
|
| 91 |
+
.addEdge(langgraph_1.START, 'find-category')
|
| 92 |
+
.addEdge('find-category', 'find-topic')
|
| 93 |
+
.addEdge('find-topic', 'find-hook')
|
| 94 |
+
.addEdge('find-hook', 'save-post')
|
| 95 |
+
.addEdge('save-post', langgraph_1.END);
|
| 96 |
+
const app = workflow.compile();
|
| 97 |
+
return app.invoke({
|
| 98 |
+
messages: [new messages_1.HumanMessage(post)],
|
| 99 |
+
});
|
| 100 |
+
}
|
| 101 |
+
};
|
| 102 |
+
exports.AgentGraphInsertService = AgentGraphInsertService;
|
| 103 |
+
AgentGraphInsertService.state = () => new langgraph_1.StateGraph({
|
| 104 |
+
channels: {
|
| 105 |
+
messages: {
|
| 106 |
+
reducer: (currentState, updateValue) => currentState.concat(updateValue),
|
| 107 |
+
default: () => [],
|
| 108 |
+
},
|
| 109 |
+
topic: null,
|
| 110 |
+
category: null,
|
| 111 |
+
hook: null,
|
| 112 |
+
content: null,
|
| 113 |
+
},
|
| 114 |
+
});
|
| 115 |
+
exports.AgentGraphInsertService = AgentGraphInsertService = AgentGraphInsertService_1 = tslib_1.__decorate([
|
| 116 |
+
(0, common_1.Injectable)(),
|
| 117 |
+
tslib_1.__metadata("design:paramtypes", [posts_service_1.PostsService])
|
| 118 |
+
], AgentGraphInsertService);
|
| 119 |
+
//# sourceMappingURL=agent.graph.insert.service.js.map
|
apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.graph.insert.service.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 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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"}
|
apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.graph.service.d.ts
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import { BaseMessage, ToolMessage } from '@langchain/core/messages';
|
| 2 |
+
import { StateGraph } from '@langchain/langgraph';
|
| 3 |
+
import { PostsService } from "../database/prisma/posts/posts.service";
|
| 4 |
+
import { MediaService } from "../database/prisma/media/media.service";
|
| 5 |
+
import { GeneratorDto } from "../dtos/generator/generator.dto";
|
| 6 |
+
interface WorkflowChannelsState {
|
| 7 |
+
messages: BaseMessage[];
|
| 8 |
+
orgId: string;
|
| 9 |
+
question: string;
|
| 10 |
+
hook?: string;
|
| 11 |
+
fresearch?: string;
|
| 12 |
+
category?: string;
|
| 13 |
+
topic?: string;
|
| 14 |
+
date?: string;
|
| 15 |
+
format: 'one_short' | 'one_long' | 'thread_short' | 'thread_long';
|
| 16 |
+
tone: 'personal' | 'company';
|
| 17 |
+
content?: {
|
| 18 |
+
content: string;
|
| 19 |
+
website?: string;
|
| 20 |
+
prompt?: string;
|
| 21 |
+
image?: string;
|
| 22 |
+
}[];
|
| 23 |
+
isPicture?: boolean;
|
| 24 |
+
popularPosts?: {
|
| 25 |
+
content: string;
|
| 26 |
+
hook: string;
|
| 27 |
+
}[];
|
| 28 |
+
}
|
| 29 |
+
export declare class AgentGraphService {
|
| 30 |
+
private _postsService;
|
| 31 |
+
private _mediaService;
|
| 32 |
+
private storage;
|
| 33 |
+
constructor(_postsService: PostsService, _mediaService: MediaService);
|
| 34 |
+
static state: () => StateGraph<WorkflowChannelsState, WorkflowChannelsState, Partial<WorkflowChannelsState>, "__start__", import("@langchain/langgraph").StateDefinition, import("@langchain/langgraph").StateDefinition, import("@langchain/langgraph").StateDefinition, unknown, unknown, unknown>;
|
| 35 |
+
startCall(state: WorkflowChannelsState): Promise<{
|
| 36 |
+
messages: import("@langchain/core/messages").AIMessageChunk<import("@langchain/core/messages").MessageStructure<import("@langchain/core/messages").MessageToolSet>>[];
|
| 37 |
+
}>;
|
| 38 |
+
saveResearch(state: WorkflowChannelsState): Promise<{
|
| 39 |
+
fresearch: ToolMessage<any>[];
|
| 40 |
+
}>;
|
| 41 |
+
findCategories(state: WorkflowChannelsState): Promise<{
|
| 42 |
+
category: string;
|
| 43 |
+
}>;
|
| 44 |
+
findTopic(state: WorkflowChannelsState): Promise<{
|
| 45 |
+
topic: string;
|
| 46 |
+
}>;
|
| 47 |
+
findPopularPosts(state: WorkflowChannelsState): Promise<{
|
| 48 |
+
popularPosts: {
|
| 49 |
+
content: string;
|
| 50 |
+
hook: string;
|
| 51 |
+
}[];
|
| 52 |
+
}>;
|
| 53 |
+
generateHook(state: WorkflowChannelsState): Promise<{
|
| 54 |
+
hook: string;
|
| 55 |
+
}>;
|
| 56 |
+
generateContent(state: WorkflowChannelsState): Promise<{
|
| 57 |
+
content: {
|
| 58 |
+
website?: string;
|
| 59 |
+
content?: string;
|
| 60 |
+
prompt?: string;
|
| 61 |
+
} | {
|
| 62 |
+
website?: string;
|
| 63 |
+
content?: string;
|
| 64 |
+
prompt?: string;
|
| 65 |
+
}[];
|
| 66 |
+
}>;
|
| 67 |
+
fixArray(state: WorkflowChannelsState): Promise<{
|
| 68 |
+
content: {
|
| 69 |
+
content: string;
|
| 70 |
+
website?: string;
|
| 71 |
+
prompt?: string;
|
| 72 |
+
image?: string;
|
| 73 |
+
}[][];
|
| 74 |
+
} | {
|
| 75 |
+
content?: undefined;
|
| 76 |
+
}>;
|
| 77 |
+
generatePictures(state: WorkflowChannelsState): Promise<{
|
| 78 |
+
content?: undefined;
|
| 79 |
+
} | {
|
| 80 |
+
content: {
|
| 81 |
+
image: any;
|
| 82 |
+
content: string;
|
| 83 |
+
website?: string;
|
| 84 |
+
prompt?: string;
|
| 85 |
+
}[];
|
| 86 |
+
}>;
|
| 87 |
+
uploadPictures(state: WorkflowChannelsState): Promise<{
|
| 88 |
+
content: ({
|
| 89 |
+
content: string;
|
| 90 |
+
website?: string;
|
| 91 |
+
prompt?: string;
|
| 92 |
+
image?: string;
|
| 93 |
+
} | {
|
| 94 |
+
image: {
|
| 95 |
+
id: string;
|
| 96 |
+
name: string;
|
| 97 |
+
originalName: string;
|
| 98 |
+
path: string;
|
| 99 |
+
thumbnail: string;
|
| 100 |
+
alt: string;
|
| 101 |
+
};
|
| 102 |
+
content: string;
|
| 103 |
+
website?: string;
|
| 104 |
+
prompt?: string;
|
| 105 |
+
})[];
|
| 106 |
+
}>;
|
| 107 |
+
isGeneratePicture(state: WorkflowChannelsState): Promise<"generate-picture" | "post-time">;
|
| 108 |
+
postDateTime(state: WorkflowChannelsState): Promise<{
|
| 109 |
+
date: string;
|
| 110 |
+
}>;
|
| 111 |
+
start(orgId: string, body: GeneratorDto): import("@langchain/core/utils/stream").IterableReadableStream<import("@langchain/core/tracers/log_stream").StreamEvent>;
|
| 112 |
+
}
|
| 113 |
+
export {};
|
apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.graph.service.js
ADDED
|
@@ -0,0 +1,328 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"use strict";
|
| 2 |
+
var AgentGraphService_1;
|
| 3 |
+
Object.defineProperty(exports, "__esModule", { value: true });
|
| 4 |
+
exports.AgentGraphService = void 0;
|
| 5 |
+
const tslib_1 = require("tslib");
|
| 6 |
+
const common_1 = require("@nestjs/common");
|
| 7 |
+
const messages_1 = require("@langchain/core/messages");
|
| 8 |
+
const langgraph_1 = require("@langchain/langgraph");
|
| 9 |
+
const openai_1 = require("@langchain/openai");
|
| 10 |
+
const tavily_1 = require("@langchain/tavily");
|
| 11 |
+
const prebuilt_1 = require("@langchain/langgraph/prebuilt");
|
| 12 |
+
const prompts_1 = require("@langchain/core/prompts");
|
| 13 |
+
const dayjs_1 = tslib_1.__importDefault(require("dayjs"));
|
| 14 |
+
const posts_service_1 = require("../database/prisma/posts/posts.service");
|
| 15 |
+
const zod_1 = require("zod");
|
| 16 |
+
const media_service_1 = require("../database/prisma/media/media.service");
|
| 17 |
+
const upload_factory_1 = require("../upload/upload.factory");
|
| 18 |
+
const generation_error_1 = require("../openai/generation.error");
|
| 19 |
+
const tools = !process.env.TAVILY_API_KEY
|
| 20 |
+
? []
|
| 21 |
+
: [new tavily_1.TavilySearch({ maxResults: 3 })];
|
| 22 |
+
const toolNode = new prebuilt_1.ToolNode(tools);
|
| 23 |
+
const model = new openai_1.ChatOpenAI({
|
| 24 |
+
apiKey: process.env.OPENAI_API_KEY || 'sk-proj-',
|
| 25 |
+
model: 'gpt-4.1',
|
| 26 |
+
temperature: 0.7,
|
| 27 |
+
});
|
| 28 |
+
const dalle = new openai_1.DallEAPIWrapper({
|
| 29 |
+
apiKey: process.env.OPENAI_API_KEY || 'sk-proj-',
|
| 30 |
+
model: 'chatgpt-image-latest',
|
| 31 |
+
});
|
| 32 |
+
const category = zod_1.z.object({
|
| 33 |
+
category: zod_1.z.string().describe('The category for the post'),
|
| 34 |
+
});
|
| 35 |
+
const topic = zod_1.z.object({
|
| 36 |
+
topic: zod_1.z.string().describe('The topic for the post'),
|
| 37 |
+
});
|
| 38 |
+
const hook = zod_1.z.object({
|
| 39 |
+
hook: zod_1.z
|
| 40 |
+
.string()
|
| 41 |
+
.describe('Hook for the new post, don\'t take it from "the request of the user"'),
|
| 42 |
+
});
|
| 43 |
+
const contentZod = (isPicture, format) => {
|
| 44 |
+
const content = zod_1.z.object({
|
| 45 |
+
content: zod_1.z.string().describe('Content for the new post'),
|
| 46 |
+
website: zod_1.z
|
| 47 |
+
.string()
|
| 48 |
+
.nullable()
|
| 49 |
+
.optional()
|
| 50 |
+
.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"),
|
| 51 |
+
...(isPicture
|
| 52 |
+
? {
|
| 53 |
+
prompt: zod_1.z
|
| 54 |
+
.string()
|
| 55 |
+
.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"),
|
| 56 |
+
}
|
| 57 |
+
: {}),
|
| 58 |
+
});
|
| 59 |
+
return zod_1.z.object({
|
| 60 |
+
content: format === 'one_short' || format === 'one_long'
|
| 61 |
+
? content
|
| 62 |
+
: zod_1.z.array(content).min(2).describe(`Content for the new post`),
|
| 63 |
+
});
|
| 64 |
+
};
|
| 65 |
+
let AgentGraphService = AgentGraphService_1 = class AgentGraphService {
|
| 66 |
+
constructor(_postsService, _mediaService) {
|
| 67 |
+
this._postsService = _postsService;
|
| 68 |
+
this._mediaService = _mediaService;
|
| 69 |
+
this.storage = upload_factory_1.UploadFactory.createStorage();
|
| 70 |
+
}
|
| 71 |
+
async startCall(state) {
|
| 72 |
+
const runTools = model.bindTools(tools);
|
| 73 |
+
const response = await prompts_1.ChatPromptTemplate.fromTemplate(`
|
| 74 |
+
Today is ${(0, dayjs_1.default)().format()}, You are an assistant that gets a social media post or requests for a social media post.
|
| 75 |
+
You research should be on the most possible recent data.
|
| 76 |
+
You concat the text of the request together with an internet research based on the text.
|
| 77 |
+
{text}
|
| 78 |
+
`)
|
| 79 |
+
.pipe(runTools)
|
| 80 |
+
.invoke({
|
| 81 |
+
text: state.messages[state.messages.length - 1].content,
|
| 82 |
+
});
|
| 83 |
+
return { messages: [response] };
|
| 84 |
+
}
|
| 85 |
+
async saveResearch(state) {
|
| 86 |
+
const content = state.messages.filter((f) => f instanceof messages_1.ToolMessage);
|
| 87 |
+
return { fresearch: content };
|
| 88 |
+
}
|
| 89 |
+
async findCategories(state) {
|
| 90 |
+
const allCategories = await this._postsService.findAllExistingCategories();
|
| 91 |
+
const structuredOutput = model.withStructuredOutput(category);
|
| 92 |
+
const { category: outputCategory } = await prompts_1.ChatPromptTemplate.fromTemplate(`
|
| 93 |
+
You are an assistant that gets a text that will be later summarized into a social media post
|
| 94 |
+
and classify it to one of the following categories: {categories}
|
| 95 |
+
text: {text}
|
| 96 |
+
`)
|
| 97 |
+
.pipe(structuredOutput)
|
| 98 |
+
.invoke({
|
| 99 |
+
categories: allCategories.map((p) => p.category).join(', '),
|
| 100 |
+
text: state.fresearch,
|
| 101 |
+
});
|
| 102 |
+
return {
|
| 103 |
+
category: outputCategory,
|
| 104 |
+
};
|
| 105 |
+
}
|
| 106 |
+
async findTopic(state) {
|
| 107 |
+
const allTopics = await this._postsService.findAllExistingTopicsOfCategory(state?.category);
|
| 108 |
+
if (allTopics.length === 0) {
|
| 109 |
+
return { topic: null };
|
| 110 |
+
}
|
| 111 |
+
const structuredOutput = model.withStructuredOutput(topic);
|
| 112 |
+
const { topic: outputTopic } = await prompts_1.ChatPromptTemplate.fromTemplate(`
|
| 113 |
+
You are an assistant that gets a text that will be later summarized into a social media post
|
| 114 |
+
and classify it to one of the following topics: {topics}
|
| 115 |
+
text: {text}
|
| 116 |
+
`)
|
| 117 |
+
.pipe(structuredOutput)
|
| 118 |
+
.invoke({
|
| 119 |
+
topics: allTopics.map((p) => p.topic).join(', '),
|
| 120 |
+
text: state.fresearch,
|
| 121 |
+
});
|
| 122 |
+
return {
|
| 123 |
+
topic: outputTopic,
|
| 124 |
+
};
|
| 125 |
+
}
|
| 126 |
+
async findPopularPosts(state) {
|
| 127 |
+
const popularPosts = await this._postsService.findPopularPosts(state.category, state.topic);
|
| 128 |
+
return { popularPosts };
|
| 129 |
+
}
|
| 130 |
+
async generateHook(state) {
|
| 131 |
+
const structuredOutput = model.withStructuredOutput(hook);
|
| 132 |
+
const { hook: outputHook } = await prompts_1.ChatPromptTemplate.fromTemplate(`
|
| 133 |
+
You are an assistant that gets content for a social media post, and generate only the hook.
|
| 134 |
+
The hook is the 1-2 sentences of the post that will be used to grab the attention of the reader.
|
| 135 |
+
You will be provided existing hooks you should use as inspiration.
|
| 136 |
+
- Avoid weird hook that starts with "Discover the secret...", "The best...", "The most...", "The top..."
|
| 137 |
+
- Make sure it sounds ${state.tone}
|
| 138 |
+
- Use ${state.tone === 'personal' ? '1st' : '3rd'} person mode
|
| 139 |
+
- Make sure it's engaging
|
| 140 |
+
- Don't be cringy
|
| 141 |
+
- Use simple english
|
| 142 |
+
- Make sure you add "\n" between the lines
|
| 143 |
+
- Don't take the hook from "request of the user"
|
| 144 |
+
|
| 145 |
+
<!-- BEGIN request of the user -->
|
| 146 |
+
{request}
|
| 147 |
+
<!-- END request of the user -->
|
| 148 |
+
|
| 149 |
+
<!-- BEGIN existing hooks -->
|
| 150 |
+
{hooks}
|
| 151 |
+
<!-- END existing hooks -->
|
| 152 |
+
|
| 153 |
+
<!-- BEGIN current content -->
|
| 154 |
+
{text}
|
| 155 |
+
<!-- END current content -->
|
| 156 |
+
|
| 157 |
+
`)
|
| 158 |
+
.pipe(structuredOutput)
|
| 159 |
+
.invoke({
|
| 160 |
+
request: state.messages[0].content,
|
| 161 |
+
hooks: state.popularPosts.map((p) => p.hook).join('\n'),
|
| 162 |
+
text: state.fresearch,
|
| 163 |
+
});
|
| 164 |
+
return {
|
| 165 |
+
hook: outputHook,
|
| 166 |
+
};
|
| 167 |
+
}
|
| 168 |
+
async generateContent(state) {
|
| 169 |
+
const structuredOutput = model.withStructuredOutput(contentZod(!!state.isPicture, state.format));
|
| 170 |
+
const { content: outputContent } = await prompts_1.ChatPromptTemplate.fromTemplate(`
|
| 171 |
+
You are an assistant that gets existing hook of a social media, content and generate only the content.
|
| 172 |
+
- Don't add any hashtags
|
| 173 |
+
- Make sure it sounds ${state.tone}
|
| 174 |
+
- Use ${state.tone === 'personal' ? '1st' : '3rd'} person mode
|
| 175 |
+
- ${state.format === 'one_short' || state.format === 'thread_short'
|
| 176 |
+
? 'Post should be maximum 200 chars to fit twitter'
|
| 177 |
+
: 'Post should be long'}
|
| 178 |
+
- ${state.format === 'one_short' || state.format === 'one_long'
|
| 179 |
+
? 'Post should have only 1 item'
|
| 180 |
+
: 'Post should have minimum 2 items'}
|
| 181 |
+
- Use the hook as inspiration
|
| 182 |
+
- Make sure it's engaging
|
| 183 |
+
- Don't be cringy
|
| 184 |
+
- Use simple english
|
| 185 |
+
- The Content should not contain the hook
|
| 186 |
+
- Try to put some call to action at the end of the post
|
| 187 |
+
- Make sure you add "\n" between the lines
|
| 188 |
+
- Add "\n" after every "."
|
| 189 |
+
|
| 190 |
+
Hook:
|
| 191 |
+
{hook}
|
| 192 |
+
|
| 193 |
+
User request:
|
| 194 |
+
{request}
|
| 195 |
+
|
| 196 |
+
current content information:
|
| 197 |
+
{information}
|
| 198 |
+
`)
|
| 199 |
+
.pipe(structuredOutput)
|
| 200 |
+
.invoke({
|
| 201 |
+
hook: state.hook,
|
| 202 |
+
request: state.messages[0].content,
|
| 203 |
+
information: state.fresearch,
|
| 204 |
+
});
|
| 205 |
+
return {
|
| 206 |
+
content: outputContent,
|
| 207 |
+
};
|
| 208 |
+
}
|
| 209 |
+
async fixArray(state) {
|
| 210 |
+
if (state.format === 'one_short' || state.format === 'one_long') {
|
| 211 |
+
return {
|
| 212 |
+
content: [state.content],
|
| 213 |
+
};
|
| 214 |
+
}
|
| 215 |
+
return {};
|
| 216 |
+
}
|
| 217 |
+
async generatePictures(state) {
|
| 218 |
+
if (!state.isPicture) {
|
| 219 |
+
return {};
|
| 220 |
+
}
|
| 221 |
+
try {
|
| 222 |
+
const newContent = await Promise.all((state.content || []).map(async (p) => {
|
| 223 |
+
const image = await dalle.invoke(p.prompt);
|
| 224 |
+
return {
|
| 225 |
+
...p,
|
| 226 |
+
image,
|
| 227 |
+
};
|
| 228 |
+
}));
|
| 229 |
+
return {
|
| 230 |
+
content: newContent,
|
| 231 |
+
};
|
| 232 |
+
}
|
| 233 |
+
catch (err) {
|
| 234 |
+
throw (0, generation_error_1.generationError)(err);
|
| 235 |
+
}
|
| 236 |
+
}
|
| 237 |
+
async uploadPictures(state) {
|
| 238 |
+
const all = await Promise.all((state.content || []).map(async (p) => {
|
| 239 |
+
if (p.image) {
|
| 240 |
+
const upload = await this.storage.uploadSimple(p.image);
|
| 241 |
+
const name = upload.split('/').pop();
|
| 242 |
+
const uploadWithId = await this._mediaService.saveFile(state.orgId, name, upload);
|
| 243 |
+
return {
|
| 244 |
+
...p,
|
| 245 |
+
image: uploadWithId,
|
| 246 |
+
};
|
| 247 |
+
}
|
| 248 |
+
return p;
|
| 249 |
+
}));
|
| 250 |
+
return { content: all };
|
| 251 |
+
}
|
| 252 |
+
async isGeneratePicture(state) {
|
| 253 |
+
if (state.isPicture) {
|
| 254 |
+
return 'generate-picture';
|
| 255 |
+
}
|
| 256 |
+
return 'post-time';
|
| 257 |
+
}
|
| 258 |
+
async postDateTime(state) {
|
| 259 |
+
return { date: await this._postsService.findFreeDateTime(state.orgId) };
|
| 260 |
+
}
|
| 261 |
+
start(orgId, body) {
|
| 262 |
+
const state = AgentGraphService_1.state();
|
| 263 |
+
const workflow = state
|
| 264 |
+
.addNode('agent', this.startCall.bind(this))
|
| 265 |
+
.addNode('research', toolNode)
|
| 266 |
+
.addNode('save-research', this.saveResearch.bind(this))
|
| 267 |
+
.addNode('find-category', this.findCategories.bind(this))
|
| 268 |
+
.addNode('find-topic', this.findTopic.bind(this))
|
| 269 |
+
.addNode('find-popular-posts', this.findPopularPosts.bind(this))
|
| 270 |
+
.addNode('generate-hook', this.generateHook.bind(this))
|
| 271 |
+
.addNode('generate-content', this.generateContent.bind(this))
|
| 272 |
+
.addNode('generate-content-fix', this.fixArray.bind(this))
|
| 273 |
+
.addNode('generate-picture', this.generatePictures.bind(this))
|
| 274 |
+
.addNode('upload-pictures', this.uploadPictures.bind(this))
|
| 275 |
+
.addNode('post-time', this.postDateTime.bind(this))
|
| 276 |
+
.addEdge(langgraph_1.START, 'agent')
|
| 277 |
+
.addEdge('agent', 'research')
|
| 278 |
+
.addEdge('research', 'save-research')
|
| 279 |
+
.addEdge('save-research', 'find-category')
|
| 280 |
+
.addEdge('find-category', 'find-topic')
|
| 281 |
+
.addEdge('find-topic', 'find-popular-posts')
|
| 282 |
+
.addEdge('find-popular-posts', 'generate-hook')
|
| 283 |
+
.addEdge('generate-hook', 'generate-content')
|
| 284 |
+
.addEdge('generate-content', 'generate-content-fix')
|
| 285 |
+
.addConditionalEdges('generate-content-fix', this.isGeneratePicture.bind(this))
|
| 286 |
+
.addEdge('generate-picture', 'upload-pictures')
|
| 287 |
+
.addEdge('upload-pictures', 'post-time')
|
| 288 |
+
.addEdge('post-time', langgraph_1.END);
|
| 289 |
+
const app = workflow.compile();
|
| 290 |
+
return app.streamEvents({
|
| 291 |
+
messages: [new messages_1.HumanMessage(body.research)],
|
| 292 |
+
isPicture: body.isPicture,
|
| 293 |
+
format: body.format,
|
| 294 |
+
tone: body.tone,
|
| 295 |
+
orgId,
|
| 296 |
+
}, {
|
| 297 |
+
streamMode: 'values',
|
| 298 |
+
version: 'v2',
|
| 299 |
+
});
|
| 300 |
+
}
|
| 301 |
+
};
|
| 302 |
+
exports.AgentGraphService = AgentGraphService;
|
| 303 |
+
AgentGraphService.state = () => new langgraph_1.StateGraph({
|
| 304 |
+
channels: {
|
| 305 |
+
messages: {
|
| 306 |
+
reducer: (currentState, updateValue) => currentState.concat(updateValue),
|
| 307 |
+
default: () => [],
|
| 308 |
+
},
|
| 309 |
+
fresearch: null,
|
| 310 |
+
format: null,
|
| 311 |
+
tone: null,
|
| 312 |
+
question: null,
|
| 313 |
+
orgId: null,
|
| 314 |
+
hook: null,
|
| 315 |
+
content: null,
|
| 316 |
+
date: null,
|
| 317 |
+
category: null,
|
| 318 |
+
popularPosts: null,
|
| 319 |
+
topic: null,
|
| 320 |
+
isPicture: null,
|
| 321 |
+
},
|
| 322 |
+
});
|
| 323 |
+
exports.AgentGraphService = AgentGraphService = AgentGraphService_1 = tslib_1.__decorate([
|
| 324 |
+
(0, common_1.Injectable)(),
|
| 325 |
+
tslib_1.__metadata("design:paramtypes", [posts_service_1.PostsService,
|
| 326 |
+
media_service_1.MediaService])
|
| 327 |
+
], AgentGraphService);
|
| 328 |
+
//# sourceMappingURL=agent.graph.service.js.map
|
apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.graph.service.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
{"version":3,"file":"agent.graph.service.js","sourceRoot":"","sources":["../../../../../../../libraries/nestjs-libraries/src/agent/agent.graph.service.ts"],"names":[],"mappings":";;;;;AAAA,2CAA4C;AAC5C,uDAIkC;AAClC,oDAA8D;AAC9D,8CAAgE;AAChE,8CAAiD;AACjD,4DAAyD;AACzD,qDAA6D;AAC7D,0DAA0B;AAC1B,0EAA6F;AAC7F,6BAAwB;AACxB,0EAA6F;AAC7F,6DAAgF;AAEhF,iEAAoF;AAEpF,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc;IACvC,CAAC,CAAC,EAAE;IACJ,CAAC,CAAC,CAAC,IAAI,qBAAY,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1C,MAAM,QAAQ,GAAG,IAAI,mBAAQ,CAAC,KAAK,CAAC,CAAC;AAErC,MAAM,KAAK,GAAG,IAAI,mBAAU,CAAC;IAC3B,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,UAAU;IAChD,KAAK,EAAE,SAAS;IAChB,WAAW,EAAE,GAAG;CACjB,CAAC,CAAC;AAEH,MAAM,KAAK,GAAG,IAAI,wBAAe,CAAC;IAChC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,UAAU;IAChD,KAAK,EAAE,sBAAsB;CAC9B,CAAC,CAAC;AAuBH,MAAM,QAAQ,GAAG,OAAC,CAAC,MAAM,CAAC;IACxB,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;CAC3D,CAAC,CAAC;AAEH,MAAM,KAAK,GAAG,OAAC,CAAC,MAAM,CAAC;IACrB,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;CACrD,CAAC,CAAC;AAEH,MAAM,IAAI,GAAG,OAAC,CAAC,MAAM,CAAC;IACpB,IAAI,EAAE,OAAC;SACJ,MAAM,EAAE;SACR,QAAQ,CACP,sEAAsE,CACvE;CACJ,CAAC,CAAC;AAEH,MAAM,UAAU,GAAG,CACjB,SAAkB,EAClB,MAAiE,EACjE,EAAE;IACF,MAAM,OAAO,GAAG,OAAC,CAAC,MAAM,CAAC;QACvB,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;QACxD,OAAO,EAAE,OAAC;aACP,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,EAAE;aACV,QAAQ,CACP,6LAA6L,CAC9L;QACH,GAAG,CAAC,SAAS;YACX,CAAC,CAAC;gBACE,MAAM,EAAE,OAAC;qBACN,MAAM,EAAE;qBACR,QAAQ,CACP,2IAA2I,CAC5I;aACJ;YACH,CAAC,CAAC,EAAE,CAAC;KACR,CAAC,CAAC;IAEH,OAAO,OAAC,CAAC,MAAM,CAAC;QACd,OAAO,EACL,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,UAAU;YAC7C,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,OAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;KACnE,CAAC,CAAC;AACL,CAAC,CAAC;AAGK,IAAM,iBAAiB,yBAAvB,MAAM,iBAAiB;IAE5B,YACU,aAA2B,EAC3B,aAA2B;QAD3B,kBAAa,GAAb,aAAa,CAAc;QAC3B,kBAAa,GAAb,aAAa,CAAc;QAH7B,YAAO,GAAG,8BAAa,CAAC,aAAa,EAAE,CAAC;IAI7C,CAAC;IAwBJ,KAAK,CAAC,SAAS,CAAC,KAA4B;QAC1C,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,MAAM,4BAAkB,CAAC,YAAY,CACpD;eACS,IAAA,eAAK,GAAE,CAAC,MAAM,EAAE;;;;KAI1B,CACA;aACE,IAAI,CAAC,QAAQ,CAAC;aACd,MAAM,CAAC;YACN,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO;SACxD,CAAC,CAAC;QAEL,OAAO,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,KAA4B;QAC7C,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,YAAY,sBAAW,CAAC,CAAC;QACvE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,KAA4B;QAC/C,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,yBAAyB,EAAE,CAAC;QAC3E,MAAM,gBAAgB,GAAG,KAAK,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QAC9D,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,MAAM,4BAAkB,CAAC,YAAY,CACxE;;;;OAIC,CACF;aACE,IAAI,CAAC,gBAAgB,CAAC;aACtB,MAAM,CAAC;YACN,UAAU,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YAC3D,IAAI,EAAE,KAAK,CAAC,SAAS;SACtB,CAAC,CAAC;QAEL,OAAO;YACL,QAAQ,EAAE,cAAc;SACzB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,KAA4B;QAC1C,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,+BAA+B,CACxE,KAAK,EAAE,QAAS,CACjB,CAAC;QACF,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACzB,CAAC;QAED,MAAM,gBAAgB,GAAG,KAAK,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;QAC3D,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM,4BAAkB,CAAC,YAAY,CAClE;;;;OAIC,CACF;aACE,IAAI,CAAC,gBAAgB,CAAC;aACtB,MAAM,CAAC;YACN,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YAChD,IAAI,EAAE,KAAK,CAAC,SAAS;SACtB,CAAC,CAAC;QAEL,OAAO;YACL,KAAK,EAAE,WAAW;SACnB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,KAA4B;QACjD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAC5D,KAAK,CAAC,QAAS,EACf,KAAK,CAAC,KAAK,CACZ,CAAC;QACF,OAAO,EAAE,YAAY,EAAE,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,KAA4B;QAC7C,MAAM,gBAAgB,GAAG,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC1D,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,MAAM,4BAAkB,CAAC,YAAY,CAChE;;;;;gCAK0B,KAAK,CAAC,IAAI;gBAC1B,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK;;;;;;;;;;;;;;;;;;;OAmBlD,CACF;aACE,IAAI,CAAC,gBAAgB,CAAC;aACtB,MAAM,CAAC;YACN,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO;YAClC,KAAK,EAAE,KAAK,CAAC,YAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YACxD,IAAI,EAAE,KAAK,CAAC,SAAS;SACtB,CAAC,CAAC;QAEL,OAAO;YACL,IAAI,EAAE,UAAU;SACjB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,KAA4B;QAChD,MAAM,gBAAgB,GAAG,KAAK,CAAC,oBAAoB,CACjD,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAC5C,CAAC;QACF,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,MAAM,4BAAkB,CAAC,YAAY,CACtE;;;gCAG0B,KAAK,CAAC,IAAI;gBAC1B,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK;YAE/C,KAAK,CAAC,MAAM,KAAK,WAAW,IAAI,KAAK,CAAC,MAAM,KAAK,cAAc;YAC7D,CAAC,CAAC,iDAAiD;YACnD,CAAC,CAAC,qBACN;YAEE,KAAK,CAAC,MAAM,KAAK,WAAW,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU;YACzD,CAAC,CAAC,8BAA8B;YAChC,CAAC,CAAC,kCACN;;;;;;;;;;;;;;;;;;OAkBD,CACF;aACE,IAAI,CAAC,gBAAgB,CAAC;aACtB,MAAM,CAAC;YACN,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO;YAClC,WAAW,EAAE,KAAK,CAAC,SAAS;SAC7B,CAAC,CAAC;QAEL,OAAO;YACL,OAAO,EAAE,aAAa;SACvB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,KAA4B;QACzC,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YAChE,OAAO;gBACL,OAAO,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC;aACzB,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,KAA4B;QACjD,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;YACrB,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,GAAG,CAClC,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;gBACpC,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,MAAO,CAAC,CAAC;gBAC5C,OAAO;oBACL,GAAG,CAAC;oBACJ,KAAK;iBACN,CAAC;YACJ,CAAC,CAAC,CACH,CAAC;YAEF,OAAO;gBACL,OAAO,EAAE,UAAU;aACpB,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAA,kCAAe,EAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,KAA4B;QAC/C,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,GAAG,CAC3B,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;YACpC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;gBACZ,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;gBACxD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAG,CAAC;gBACtC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CACpD,KAAK,CAAC,KAAK,EACX,IAAI,EACJ,MAAM,CACP,CAAC;gBAEF,OAAO;oBACL,GAAG,CAAC;oBACJ,KAAK,EAAE,YAAY;iBACpB,CAAC;YACJ,CAAC;YAED,OAAO,CAAC,CAAC;QACX,CAAC,CAAC,CACH,CAAC;QAEF,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,KAA4B;QAClD,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO,kBAAkB,CAAC;QAC5B,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,KAA4B;QAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;IAC1E,CAAC;IAED,KAAK,CAAC,KAAa,EAAE,IAAkB;QACrC,MAAM,KAAK,GAAG,mBAAiB,CAAC,KAAK,EAAE,CAAC;QACxC,MAAM,QAAQ,GAAG,KAAK;aACnB,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAC3C,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC;aAC7B,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACtD,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACxD,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAChD,OAAO,CAAC,oBAAoB,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAC/D,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACtD,OAAO,CAAC,kBAAkB,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAC5D,OAAO,CAAC,sBAAsB,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACzD,OAAO,CAAC,kBAAkB,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAC7D,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAC1D,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAClD,OAAO,CAAC,iBAAK,EAAE,OAAO,CAAC;aACvB,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC;aAC5B,OAAO,CAAC,UAAU,EAAE,eAAe,CAAC;aACpC,OAAO,CAAC,eAAe,EAAE,eAAe,CAAC;aACzC,OAAO,CAAC,eAAe,EAAE,YAAY,CAAC;aACtC,OAAO,CAAC,YAAY,EAAE,oBAAoB,CAAC;aAC3C,OAAO,CAAC,oBAAoB,EAAE,eAAe,CAAC;aAC9C,OAAO,CAAC,eAAe,EAAE,kBAAkB,CAAC;aAC5C,OAAO,CAAC,kBAAkB,EAAE,sBAAsB,CAAC;aACnD,mBAAmB,CAClB,sBAAsB,EACtB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAClC;aACA,OAAO,CAAC,kBAAkB,EAAE,iBAAiB,CAAC;aAC9C,OAAO,CAAC,iBAAiB,EAAE,WAAW,CAAC;aACvC,OAAO,CAAC,WAAW,EAAE,eAAG,CAAC,CAAC;QAE7B,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;QAE/B,OAAO,GAAG,CAAC,YAAY,CACrB;YACE,QAAQ,EAAE,CAAC,IAAI,uBAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC3C,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK;SACN,EACD;YACE,UAAU,EAAE,QAAQ;YACpB,OAAO,EAAE,IAAI;SACd,CACF,CAAC;IACJ,CAAC;;AA/TU,8CAAiB;AAMrB,uBAAK,GAAG,GAAG,EAAE,CAClB,IAAI,sBAAU,CAAwB;IACpC,QAAQ,EAAE;QACR,QAAQ,EAAE;YACR,OAAO,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,EAAE,CACrC,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC;YAClC,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE;SAClB;QACD,SAAS,EAAE,IAAI;QACf,MAAM,EAAE,IAAI;QACZ,IAAI,EAAE,IAAI;QACV,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,IAAI;QACX,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,IAAI;QACV,QAAQ,EAAE,IAAI;QACd,YAAY,EAAE,IAAI;QAClB,KAAK,EAAE,IAAI;QACX,SAAS,EAAE,IAAI;KAChB;CACF,CAAC,AArBQ,CAqBP;4BA3BM,iBAAiB;IAD7B,IAAA,mBAAU,GAAE;6CAIc,4BAAY;QACZ,4BAAY;GAJ1B,iBAAiB,CAgU7B"}
|
apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.module.d.ts
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
|
|
|
| 1 |
+
export declare class AgentModule {
|
| 2 |
+
}
|
apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.module.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"use strict";
|
| 2 |
+
Object.defineProperty(exports, "__esModule", { value: true });
|
| 3 |
+
exports.AgentModule = void 0;
|
| 4 |
+
const tslib_1 = require("tslib");
|
| 5 |
+
const common_1 = require("@nestjs/common");
|
| 6 |
+
const agent_graph_service_1 = require("./agent.graph.service");
|
| 7 |
+
const agent_graph_insert_service_1 = require("./agent.graph.insert.service");
|
| 8 |
+
let AgentModule = class AgentModule {
|
| 9 |
+
};
|
| 10 |
+
exports.AgentModule = AgentModule;
|
| 11 |
+
exports.AgentModule = AgentModule = tslib_1.__decorate([
|
| 12 |
+
(0, common_1.Global)(),
|
| 13 |
+
(0, common_1.Module)({
|
| 14 |
+
providers: [agent_graph_service_1.AgentGraphService, agent_graph_insert_service_1.AgentGraphInsertService],
|
| 15 |
+
get exports() {
|
| 16 |
+
return this.providers;
|
| 17 |
+
},
|
| 18 |
+
})
|
| 19 |
+
], AgentModule);
|
| 20 |
+
//# sourceMappingURL=agent.module.js.map
|
apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.module.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 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"}
|
apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.topics.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
export declare const agentTopics: string[];
|
apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.topics.js
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"use strict";
|
| 2 |
+
Object.defineProperty(exports, "__esModule", { value: true });
|
| 3 |
+
exports.agentTopics = void 0;
|
| 4 |
+
exports.agentTopics = [
|
| 5 |
+
'Business',
|
| 6 |
+
'Marketing',
|
| 7 |
+
'Finance',
|
| 8 |
+
'Startups',
|
| 9 |
+
'Networking',
|
| 10 |
+
'Leadership',
|
| 11 |
+
'Strategy',
|
| 12 |
+
'Branding',
|
| 13 |
+
'Analytics',
|
| 14 |
+
'Growth',
|
| 15 |
+
'Drawing',
|
| 16 |
+
'Painting',
|
| 17 |
+
'Design',
|
| 18 |
+
'Photography',
|
| 19 |
+
'Writing',
|
| 20 |
+
'Sculpting',
|
| 21 |
+
'Animation',
|
| 22 |
+
'Sketching',
|
| 23 |
+
'Crafting',
|
| 24 |
+
'Calligraphy',
|
| 25 |
+
'Mindset',
|
| 26 |
+
'Productivity',
|
| 27 |
+
'Motivation',
|
| 28 |
+
'Education',
|
| 29 |
+
'Learning',
|
| 30 |
+
'Skills',
|
| 31 |
+
'Success',
|
| 32 |
+
'Wellness',
|
| 33 |
+
'Goals',
|
| 34 |
+
'Inspiration',
|
| 35 |
+
'Fashion',
|
| 36 |
+
'Travel',
|
| 37 |
+
'Food',
|
| 38 |
+
'Fitness',
|
| 39 |
+
'Health',
|
| 40 |
+
'Beauty',
|
| 41 |
+
'Home',
|
| 42 |
+
'Decor',
|
| 43 |
+
'Hobbies',
|
| 44 |
+
'Parenting',
|
| 45 |
+
'Tech',
|
| 46 |
+
'Gadgets',
|
| 47 |
+
'AI',
|
| 48 |
+
'Coding',
|
| 49 |
+
'Software',
|
| 50 |
+
'Innovation',
|
| 51 |
+
'Apps',
|
| 52 |
+
'Gaming',
|
| 53 |
+
'Robotics',
|
| 54 |
+
'Security',
|
| 55 |
+
'Music',
|
| 56 |
+
'Movies',
|
| 57 |
+
'Sports',
|
| 58 |
+
'Books',
|
| 59 |
+
'Theater',
|
| 60 |
+
'Comedy',
|
| 61 |
+
'Dance',
|
| 62 |
+
'Celebrities',
|
| 63 |
+
'Culture',
|
| 64 |
+
'Gaming',
|
| 65 |
+
'Environment',
|
| 66 |
+
'Equality',
|
| 67 |
+
'Activism',
|
| 68 |
+
'Justice',
|
| 69 |
+
'Diversity',
|
| 70 |
+
'Sustainability',
|
| 71 |
+
'Inclusion',
|
| 72 |
+
'Awareness',
|
| 73 |
+
'Charity',
|
| 74 |
+
'Peace',
|
| 75 |
+
'Holidays',
|
| 76 |
+
'Festivities',
|
| 77 |
+
'Seasons',
|
| 78 |
+
'Trends',
|
| 79 |
+
'Celebrations',
|
| 80 |
+
'Anniversaries',
|
| 81 |
+
'Milestones',
|
| 82 |
+
'Memories',
|
| 83 |
+
'Promotions',
|
| 84 |
+
'Updates',
|
| 85 |
+
];
|
| 86 |
+
//# sourceMappingURL=agent.topics.js.map
|
apps/backend/dist/libraries/nestjs-libraries/src/agent/agent.topics.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 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"}
|
apps/backend/dist/libraries/nestjs-libraries/src/chat/agent.tool.interface.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import type { ToolAction } from '@mastra/core/tools';
|
| 2 |
+
export type ToolReturn = ToolAction<any, any, any, any, any, any>;
|
| 3 |
+
export interface AgentToolInterface {
|
| 4 |
+
name: string;
|
| 5 |
+
run(): ToolReturn;
|
| 6 |
+
}
|
apps/backend/dist/libraries/nestjs-libraries/src/chat/agent.tool.interface.js
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"use strict";
|
| 2 |
+
Object.defineProperty(exports, "__esModule", { value: true });
|
| 3 |
+
//# sourceMappingURL=agent.tool.interface.js.map
|
apps/backend/dist/libraries/nestjs-libraries/src/chat/agent.tool.interface.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
{"version":3,"file":"agent.tool.interface.js","sourceRoot":"","sources":["../../../../../../../libraries/nestjs-libraries/src/chat/agent.tool.interface.ts"],"names":[],"mappings":""}
|
apps/backend/dist/libraries/nestjs-libraries/src/chat/async.storage.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
type Ctx = {
|
| 2 |
+
requestId: string;
|
| 3 |
+
auth: any;
|
| 4 |
+
};
|
| 5 |
+
export declare function runWithContext<T>(ctx: Ctx, fn: () => Promise<T> | T): T | Promise<T>;
|
| 6 |
+
export declare function getContext(): Ctx | undefined;
|
| 7 |
+
export declare function getAuth<T = any>(): T | undefined;
|
| 8 |
+
export declare function getRequestId(): string | undefined;
|
| 9 |
+
export {};
|
apps/backend/dist/libraries/nestjs-libraries/src/chat/async.storage.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"use strict";
|
| 2 |
+
Object.defineProperty(exports, "__esModule", { value: true });
|
| 3 |
+
exports.runWithContext = runWithContext;
|
| 4 |
+
exports.getContext = getContext;
|
| 5 |
+
exports.getAuth = getAuth;
|
| 6 |
+
exports.getRequestId = getRequestId;
|
| 7 |
+
const node_async_hooks_1 = require("node:async_hooks");
|
| 8 |
+
const als = new node_async_hooks_1.AsyncLocalStorage();
|
| 9 |
+
function runWithContext(ctx, fn) {
|
| 10 |
+
return als.run(ctx, fn);
|
| 11 |
+
}
|
| 12 |
+
function getContext() {
|
| 13 |
+
return als.getStore();
|
| 14 |
+
}
|
| 15 |
+
function getAuth() {
|
| 16 |
+
return als.getStore()?.auth;
|
| 17 |
+
}
|
| 18 |
+
function getRequestId() {
|
| 19 |
+
return als.getStore()?.requestId;
|
| 20 |
+
}
|
| 21 |
+
//# sourceMappingURL=async.storage.js.map
|
apps/backend/dist/libraries/nestjs-libraries/src/chat/async.storage.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 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"}
|
apps/backend/dist/libraries/nestjs-libraries/src/chat/auth.context.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
export declare const checkAuth: (inputData: any, context: any) => void;
|
apps/backend/dist/libraries/nestjs-libraries/src/chat/auth.context.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"use strict";
|
| 2 |
+
Object.defineProperty(exports, "__esModule", { value: true });
|
| 3 |
+
exports.checkAuth = void 0;
|
| 4 |
+
const async_storage_1 = require("./async.storage");
|
| 5 |
+
const checkAuth = (inputData, context) => {
|
| 6 |
+
const auth = (0, async_storage_1.getAuth)();
|
| 7 |
+
const authInfo = context?.mcp?.extra?.authInfo || auth;
|
| 8 |
+
if (authInfo && context?.requestContext) {
|
| 9 |
+
context.requestContext.set('organization', JSON.stringify(authInfo));
|
| 10 |
+
context.requestContext.set('ui', 'false');
|
| 11 |
+
}
|
| 12 |
+
};
|
| 13 |
+
exports.checkAuth = checkAuth;
|
| 14 |
+
//# sourceMappingURL=auth.context.js.map
|
apps/backend/dist/libraries/nestjs-libraries/src/chat/auth.context.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 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"}
|
apps/backend/dist/libraries/nestjs-libraries/src/chat/chat.module.d.ts
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
|
|
|
| 1 |
+
export declare class ChatModule {
|
| 2 |
+
}
|
apps/backend/dist/libraries/nestjs-libraries/src/chat/chat.module.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"use strict";
|
| 2 |
+
Object.defineProperty(exports, "__esModule", { value: true });
|
| 3 |
+
exports.ChatModule = void 0;
|
| 4 |
+
const tslib_1 = require("tslib");
|
| 5 |
+
const common_1 = require("@nestjs/common");
|
| 6 |
+
const load_tools_service_1 = require("./load.tools.service");
|
| 7 |
+
const mastra_service_1 = require("./mastra.service");
|
| 8 |
+
const tool_list_1 = require("./tools/tool.list");
|
| 9 |
+
let ChatModule = class ChatModule {
|
| 10 |
+
};
|
| 11 |
+
exports.ChatModule = ChatModule;
|
| 12 |
+
exports.ChatModule = ChatModule = tslib_1.__decorate([
|
| 13 |
+
(0, common_1.Global)(),
|
| 14 |
+
(0, common_1.Module)({
|
| 15 |
+
providers: [mastra_service_1.MastraService, load_tools_service_1.LoadToolsService, ...tool_list_1.toolList],
|
| 16 |
+
get exports() {
|
| 17 |
+
return this.providers;
|
| 18 |
+
},
|
| 19 |
+
})
|
| 20 |
+
], ChatModule);
|
| 21 |
+
//# sourceMappingURL=chat.module.js.map
|
apps/backend/dist/libraries/nestjs-libraries/src/chat/chat.module.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 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"}
|
apps/backend/dist/libraries/nestjs-libraries/src/chat/load.tools.service.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import { Agent } from '@mastra/core/agent';
|
| 2 |
+
import { ModuleRef } from '@nestjs/core';
|
| 3 |
+
export declare const AgentState: import("zod").ZodObject<{
|
| 4 |
+
proverbs: import("zod").ZodDefault<import("zod").ZodArray<import("zod").ZodString, "many">>;
|
| 5 |
+
}, "strip", import("zod").ZodTypeAny, {
|
| 6 |
+
proverbs?: string[];
|
| 7 |
+
}, {
|
| 8 |
+
proverbs?: string[];
|
| 9 |
+
}>;
|
| 10 |
+
export declare class LoadToolsService {
|
| 11 |
+
private _moduleRef;
|
| 12 |
+
constructor(_moduleRef: ModuleRef);
|
| 13 |
+
loadTools(): Promise<Record<string, any>>;
|
| 14 |
+
agent(): Promise<Agent<"postiz", Record<string, any>, undefined, unknown>>;
|
| 15 |
+
}
|
apps/backend/dist/libraries/nestjs-libraries/src/chat/load.tools.service.js
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"use strict";
|
| 2 |
+
Object.defineProperty(exports, "__esModule", { value: true });
|
| 3 |
+
exports.LoadToolsService = exports.AgentState = void 0;
|
| 4 |
+
const tslib_1 = require("tslib");
|
| 5 |
+
const common_1 = require("@nestjs/common");
|
| 6 |
+
const agent_1 = require("@mastra/core/agent");
|
| 7 |
+
const openai_1 = require("@ai-sdk/openai");
|
| 8 |
+
const memory_1 = require("@mastra/memory");
|
| 9 |
+
const mastra_store_1 = require("./mastra.store");
|
| 10 |
+
const zod_1 = require("zod");
|
| 11 |
+
const core_1 = require("@nestjs/core");
|
| 12 |
+
const tool_list_1 = require("./tools/tool.list");
|
| 13 |
+
const dayjs_1 = tslib_1.__importDefault(require("dayjs"));
|
| 14 |
+
exports.AgentState = (0, zod_1.object)({
|
| 15 |
+
proverbs: (0, zod_1.array)((0, zod_1.string)()).default([]),
|
| 16 |
+
});
|
| 17 |
+
const renderArray = (list, show) => {
|
| 18 |
+
if (!show)
|
| 19 |
+
return '';
|
| 20 |
+
return list.map((p) => `- ${p}`).join('\n');
|
| 21 |
+
};
|
| 22 |
+
let LoadToolsService = class LoadToolsService {
|
| 23 |
+
constructor(_moduleRef) {
|
| 24 |
+
this._moduleRef = _moduleRef;
|
| 25 |
+
}
|
| 26 |
+
async loadTools() {
|
| 27 |
+
return (await Promise.all(tool_list_1.toolList
|
| 28 |
+
.map((p) => this._moduleRef.get(p, { strict: false }))
|
| 29 |
+
.map(async (p) => ({
|
| 30 |
+
name: p.name,
|
| 31 |
+
tool: await p.run(),
|
| 32 |
+
})))).reduce((all, current) => ({
|
| 33 |
+
...all,
|
| 34 |
+
[current.name]: current.tool,
|
| 35 |
+
}), {});
|
| 36 |
+
}
|
| 37 |
+
async agent() {
|
| 38 |
+
const tools = await this.loadTools();
|
| 39 |
+
return new agent_1.Agent({
|
| 40 |
+
id: 'postiz',
|
| 41 |
+
name: 'postiz',
|
| 42 |
+
description: 'Agent that helps manage and schedule social media posts for users',
|
| 43 |
+
instructions: ({ requestContext }) => {
|
| 44 |
+
const ui = requestContext.get('ui');
|
| 45 |
+
return `
|
| 46 |
+
Global information:
|
| 47 |
+
- Date (UTC): ${(0, dayjs_1.default)().format('YYYY-MM-DD HH:mm:ss')}
|
| 48 |
+
|
| 49 |
+
You are an agent that helps manage and schedule social media posts for users, you can:
|
| 50 |
+
- Schedule posts into the future, or now, adding texts, images and videos
|
| 51 |
+
- Generate pictures for posts
|
| 52 |
+
- Generate videos for posts
|
| 53 |
+
- Generate text for posts
|
| 54 |
+
- Show global analytics about socials
|
| 55 |
+
- List integrations (channels)
|
| 56 |
+
- List groups (customers) and filter the channels by a group
|
| 57 |
+
|
| 58 |
+
- 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
|
| 59 |
+
- When scheduling a post, you must follow the social media rules and best practices.
|
| 60 |
+
- 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.
|
| 61 |
+
- For platforms like Threads, Bluesky and X (Twitter), each post in the array will be a separate post in the thread.
|
| 62 |
+
- For platforms like LinkedIn and Facebook, second part of the array will be added as "comments" to the first post.
|
| 63 |
+
- 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.
|
| 64 |
+
- For X, if you don't have Premium, don't suggest a long post because it won't work.
|
| 65 |
+
- Platform format will also be passed can be "normal", "markdown", "html", make sure you use the correct format for each platform.
|
| 66 |
+
|
| 67 |
+
- Sometimes 'integrationSchema' will return rules, make sure you follow them (these rules are set in stone, even if the user asks to ignore them)
|
| 68 |
+
- Each socials media platform has different settings and rules, you can get them by using the integrationSchema tool.
|
| 69 |
+
- Always make sure you use this tool before you schedule any post.
|
| 70 |
+
- 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.
|
| 71 |
+
- Make sure you always take the last information I give you about the socials, it might have changed.
|
| 72 |
+
- 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).
|
| 73 |
+
- Between tools, we will reference things like: [output:name] and [input:name] to set the information right.
|
| 74 |
+
- When outputting a date for the user, make sure it's human readable with time
|
| 75 |
+
- The content of the post, HTML, Each line must be wrapped in <p> 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
|
| 76 |
+
${renderArray([
|
| 77 |
+
'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.',
|
| 78 |
+
], !!ui)}
|
| 79 |
+
`;
|
| 80 |
+
},
|
| 81 |
+
model: (0, openai_1.openai)('gpt-5.2'),
|
| 82 |
+
tools,
|
| 83 |
+
memory: new memory_1.Memory({
|
| 84 |
+
storage: mastra_store_1.pStore,
|
| 85 |
+
options: {
|
| 86 |
+
generateTitle: true,
|
| 87 |
+
workingMemory: {
|
| 88 |
+
enabled: true,
|
| 89 |
+
schema: exports.AgentState,
|
| 90 |
+
},
|
| 91 |
+
},
|
| 92 |
+
}),
|
| 93 |
+
});
|
| 94 |
+
}
|
| 95 |
+
};
|
| 96 |
+
exports.LoadToolsService = LoadToolsService;
|
| 97 |
+
exports.LoadToolsService = LoadToolsService = tslib_1.__decorate([
|
| 98 |
+
(0, common_1.Injectable)(),
|
| 99 |
+
tslib_1.__metadata("design:paramtypes", [core_1.ModuleRef])
|
| 100 |
+
], LoadToolsService);
|
| 101 |
+
//# sourceMappingURL=load.tools.service.js.map
|
apps/backend/dist/libraries/nestjs-libraries/src/chat/load.tools.service.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 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"}
|
apps/backend/dist/libraries/nestjs-libraries/src/chat/mastra.service.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import { Mastra } from '@mastra/core/mastra';
|
| 2 |
+
import { LoadToolsService } from "./load.tools.service";
|
| 3 |
+
export declare class MastraService {
|
| 4 |
+
private _loadToolsService;
|
| 5 |
+
static mastra: Mastra;
|
| 6 |
+
constructor(_loadToolsService: LoadToolsService);
|
| 7 |
+
mastra(): Promise<Mastra<Record<string, import("@mastra/core/agent").Agent<any, import("@mastra/core/agent").ToolsInput, undefined, unknown>>, Record<string, import("@mastra/core/workflows").AnyWorkflow>, Record<string, import("@mastra/core/vector").MastraVector<any>>, Record<string, import("@mastra/core/dist/tts").MastraTTS>, import("@mastra/core/logger").IMastraLogger, Record<string, import("@mastra/core/mcp").MCPServerBase<any>>, Record<string, import("@mastra/core/evals").MastraScorer<any, any, any, any>>, Record<string, import("@mastra/core/tools").ToolAction<any, any, any, any, any, any, unknown>>, Record<string, import("@mastra/core/processors").Processor<any, unknown>>, Record<string, import("@mastra/core/memory").MastraMemory>>>;
|
| 8 |
+
}
|
apps/backend/dist/libraries/nestjs-libraries/src/chat/mastra.service.js
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"use strict";
|
| 2 |
+
var MastraService_1;
|
| 3 |
+
Object.defineProperty(exports, "__esModule", { value: true });
|
| 4 |
+
exports.MastraService = void 0;
|
| 5 |
+
const tslib_1 = require("tslib");
|
| 6 |
+
const mastra_1 = require("@mastra/core/mastra");
|
| 7 |
+
const logger_1 = require("@mastra/core/logger");
|
| 8 |
+
const mastra_store_1 = require("./mastra.store");
|
| 9 |
+
const common_1 = require("@nestjs/common");
|
| 10 |
+
const load_tools_service_1 = require("./load.tools.service");
|
| 11 |
+
let MastraService = MastraService_1 = class MastraService {
|
| 12 |
+
constructor(_loadToolsService) {
|
| 13 |
+
this._loadToolsService = _loadToolsService;
|
| 14 |
+
}
|
| 15 |
+
async mastra() {
|
| 16 |
+
MastraService_1.mastra =
|
| 17 |
+
MastraService_1.mastra ||
|
| 18 |
+
new mastra_1.Mastra({
|
| 19 |
+
storage: mastra_store_1.pStore,
|
| 20 |
+
agents: {
|
| 21 |
+
postiz: await this._loadToolsService.agent(),
|
| 22 |
+
},
|
| 23 |
+
logger: new logger_1.ConsoleLogger({
|
| 24 |
+
level: 'info',
|
| 25 |
+
}),
|
| 26 |
+
});
|
| 27 |
+
return MastraService_1.mastra;
|
| 28 |
+
}
|
| 29 |
+
};
|
| 30 |
+
exports.MastraService = MastraService;
|
| 31 |
+
exports.MastraService = MastraService = MastraService_1 = tslib_1.__decorate([
|
| 32 |
+
(0, common_1.Injectable)(),
|
| 33 |
+
tslib_1.__metadata("design:paramtypes", [load_tools_service_1.LoadToolsService])
|
| 34 |
+
], MastraService);
|
| 35 |
+
//# sourceMappingURL=mastra.service.js.map
|
apps/backend/dist/libraries/nestjs-libraries/src/chat/mastra.service.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 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"}
|
apps/backend/dist/libraries/nestjs-libraries/src/chat/mastra.store.d.ts
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import { PostgresStore } from '@mastra/pg';
|
| 2 |
+
export declare const pStore: PostgresStore;
|
apps/backend/dist/libraries/nestjs-libraries/src/chat/mastra.store.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"use strict";
|
| 2 |
+
Object.defineProperty(exports, "__esModule", { value: true });
|
| 3 |
+
exports.pStore = void 0;
|
| 4 |
+
const pg_1 = require("@mastra/pg");
|
| 5 |
+
exports.pStore = new pg_1.PostgresStore({
|
| 6 |
+
id: 'postiz-store',
|
| 7 |
+
connectionString: process.env.DATABASE_URL,
|
| 8 |
+
});
|
| 9 |
+
//# sourceMappingURL=mastra.store.js.map
|
apps/backend/dist/libraries/nestjs-libraries/src/chat/mastra.store.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 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"}
|
apps/backend/dist/libraries/nestjs-libraries/src/chat/oauth-middleware.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import type * as http from 'node:http';
|
| 2 |
+
import type { MCPServerOAuthConfig, TokenValidationResult } from './oauth-types';
|
| 3 |
+
interface OAuthMiddlewareLogger {
|
| 4 |
+
debug?: (message: string, ...args: unknown[]) => void;
|
| 5 |
+
}
|
| 6 |
+
export interface OAuthMiddlewareOptions {
|
| 7 |
+
oauth: MCPServerOAuthConfig;
|
| 8 |
+
mcpPath?: string;
|
| 9 |
+
logger?: OAuthMiddlewareLogger;
|
| 10 |
+
}
|
| 11 |
+
export interface OAuthMiddlewareResult {
|
| 12 |
+
proceed: boolean;
|
| 13 |
+
handled: boolean;
|
| 14 |
+
tokenValidation?: TokenValidationResult;
|
| 15 |
+
}
|
| 16 |
+
export declare function createOAuthMiddleware(options: OAuthMiddlewareOptions): (req: http.IncomingMessage, res: http.ServerResponse, url: URL) => Promise<OAuthMiddlewareResult>;
|
| 17 |
+
export declare function createStaticTokenValidator(validTokens: string[]): MCPServerOAuthConfig['validateToken'];
|
| 18 |
+
export declare function createIntrospectionValidator(introspectionEndpoint: string, clientCredentials?: {
|
| 19 |
+
clientId: string;
|
| 20 |
+
clientSecret: string;
|
| 21 |
+
}): MCPServerOAuthConfig['validateToken'];
|
| 22 |
+
export {};
|
apps/backend/dist/libraries/nestjs-libraries/src/chat/oauth-middleware.js
ADDED
|
@@ -0,0 +1,168 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"use strict";
|
| 2 |
+
Object.defineProperty(exports, "__esModule", { value: true });
|
| 3 |
+
exports.createOAuthMiddleware = createOAuthMiddleware;
|
| 4 |
+
exports.createStaticTokenValidator = createStaticTokenValidator;
|
| 5 |
+
exports.createIntrospectionValidator = createIntrospectionValidator;
|
| 6 |
+
const oauth_types_1 = require("./oauth-types");
|
| 7 |
+
function createOAuthMiddleware(options) {
|
| 8 |
+
const { oauth, mcpPath = '/mcp', logger } = options;
|
| 9 |
+
const protectedResourceMetadata = (0, oauth_types_1.generateProtectedResourceMetadata)(oauth);
|
| 10 |
+
const wellKnownPath = '/.well-known/oauth-protected-resource';
|
| 11 |
+
const resourceMetadataUrl = new URL(wellKnownPath, oauth.resource).toString();
|
| 12 |
+
return async function oauthMiddleware(req, res, url) {
|
| 13 |
+
logger?.debug?.(`OAuth middleware: ${req.method} ${url.pathname}`);
|
| 14 |
+
if (url.pathname === wellKnownPath && req.method === 'GET') {
|
| 15 |
+
logger?.debug?.('OAuth middleware: Serving Protected Resource Metadata');
|
| 16 |
+
res.writeHead(200, {
|
| 17 |
+
'Content-Type': 'application/json',
|
| 18 |
+
'Cache-Control': 'max-age=3600',
|
| 19 |
+
'Access-Control-Allow-Origin': '*',
|
| 20 |
+
});
|
| 21 |
+
res.end(JSON.stringify(protectedResourceMetadata));
|
| 22 |
+
return { proceed: false, handled: true };
|
| 23 |
+
}
|
| 24 |
+
if (url.pathname === wellKnownPath && req.method === 'OPTIONS') {
|
| 25 |
+
res.writeHead(204, {
|
| 26 |
+
'Access-Control-Allow-Origin': '*',
|
| 27 |
+
'Access-Control-Allow-Methods': 'GET, OPTIONS',
|
| 28 |
+
'Access-Control-Allow-Headers': 'Content-Type',
|
| 29 |
+
'Access-Control-Max-Age': '86400',
|
| 30 |
+
});
|
| 31 |
+
res.end();
|
| 32 |
+
return { proceed: false, handled: true };
|
| 33 |
+
}
|
| 34 |
+
if (!url.pathname.startsWith(mcpPath)) {
|
| 35 |
+
return { proceed: true, handled: false };
|
| 36 |
+
}
|
| 37 |
+
const authHeader = req.headers['authorization'];
|
| 38 |
+
const token = (0, oauth_types_1.extractBearerToken)(authHeader);
|
| 39 |
+
if (!token) {
|
| 40 |
+
logger?.debug?.('OAuth middleware: No bearer token provided');
|
| 41 |
+
res.writeHead(401, {
|
| 42 |
+
'Content-Type': 'application/json',
|
| 43 |
+
'WWW-Authenticate': (0, oauth_types_1.generateWWWAuthenticateHeader)({ resourceMetadataUrl }),
|
| 44 |
+
});
|
| 45 |
+
res.end(JSON.stringify({
|
| 46 |
+
error: 'unauthorized',
|
| 47 |
+
error_description: 'Bearer token required',
|
| 48 |
+
}));
|
| 49 |
+
return { proceed: false, handled: true };
|
| 50 |
+
}
|
| 51 |
+
if (oauth.validateToken) {
|
| 52 |
+
logger?.debug?.('OAuth middleware: Validating token');
|
| 53 |
+
const validationResult = await oauth.validateToken(token, oauth.resource);
|
| 54 |
+
if (!validationResult.valid) {
|
| 55 |
+
logger?.debug?.(`OAuth middleware: Token validation failed: ${validationResult.error}`);
|
| 56 |
+
res.writeHead(401, {
|
| 57 |
+
'Content-Type': 'application/json',
|
| 58 |
+
'WWW-Authenticate': (0, oauth_types_1.generateWWWAuthenticateHeader)({
|
| 59 |
+
resourceMetadataUrl,
|
| 60 |
+
additionalParams: {
|
| 61 |
+
error: validationResult.error || 'invalid_token',
|
| 62 |
+
...(validationResult.errorDescription && {
|
| 63 |
+
error_description: validationResult.errorDescription,
|
| 64 |
+
}),
|
| 65 |
+
},
|
| 66 |
+
}),
|
| 67 |
+
});
|
| 68 |
+
res.end(JSON.stringify({
|
| 69 |
+
error: validationResult.error || 'invalid_token',
|
| 70 |
+
error_description: validationResult.errorDescription || 'Token validation failed',
|
| 71 |
+
}));
|
| 72 |
+
return { proceed: false, handled: true, tokenValidation: validationResult };
|
| 73 |
+
}
|
| 74 |
+
logger?.debug?.('OAuth middleware: Token validated successfully');
|
| 75 |
+
return { proceed: true, handled: false, tokenValidation: validationResult };
|
| 76 |
+
}
|
| 77 |
+
logger?.debug?.('OAuth middleware: No token validation configured, accepting token');
|
| 78 |
+
return {
|
| 79 |
+
proceed: true,
|
| 80 |
+
handled: false,
|
| 81 |
+
tokenValidation: { valid: true },
|
| 82 |
+
};
|
| 83 |
+
};
|
| 84 |
+
}
|
| 85 |
+
function createStaticTokenValidator(validTokens) {
|
| 86 |
+
const tokenSet = new Set(validTokens);
|
| 87 |
+
return async (token) => {
|
| 88 |
+
if (tokenSet.has(token)) {
|
| 89 |
+
return { valid: true, scopes: ['mcp:read', 'mcp:write'] };
|
| 90 |
+
}
|
| 91 |
+
return {
|
| 92 |
+
valid: false,
|
| 93 |
+
error: 'invalid_token',
|
| 94 |
+
errorDescription: 'Token not recognized',
|
| 95 |
+
};
|
| 96 |
+
};
|
| 97 |
+
}
|
| 98 |
+
function createIntrospectionValidator(introspectionEndpoint, clientCredentials) {
|
| 99 |
+
return async (token, resource) => {
|
| 100 |
+
try {
|
| 101 |
+
const headers = {
|
| 102 |
+
'Content-Type': 'application/x-www-form-urlencoded',
|
| 103 |
+
};
|
| 104 |
+
if (clientCredentials) {
|
| 105 |
+
if (clientCredentials.clientId.includes(':')) {
|
| 106 |
+
return {
|
| 107 |
+
valid: false,
|
| 108 |
+
error: 'invalid_request',
|
| 109 |
+
errorDescription: 'clientId cannot contain a colon character per RFC 7617',
|
| 110 |
+
};
|
| 111 |
+
}
|
| 112 |
+
const credentials = Buffer.from(`${clientCredentials.clientId}:${clientCredentials.clientSecret}`).toString('base64');
|
| 113 |
+
headers['Authorization'] = `Basic ${credentials}`;
|
| 114 |
+
}
|
| 115 |
+
const response = await fetch(introspectionEndpoint, {
|
| 116 |
+
method: 'POST',
|
| 117 |
+
headers,
|
| 118 |
+
body: new URLSearchParams({
|
| 119 |
+
token,
|
| 120 |
+
token_type_hint: 'access_token',
|
| 121 |
+
}),
|
| 122 |
+
});
|
| 123 |
+
if (!response.ok) {
|
| 124 |
+
return {
|
| 125 |
+
valid: false,
|
| 126 |
+
error: 'server_error',
|
| 127 |
+
errorDescription: `Introspection failed: ${response.status}`,
|
| 128 |
+
};
|
| 129 |
+
}
|
| 130 |
+
const data = (await response.json());
|
| 131 |
+
if (!data.active) {
|
| 132 |
+
return {
|
| 133 |
+
valid: false,
|
| 134 |
+
error: 'invalid_token',
|
| 135 |
+
errorDescription: 'Token is not active',
|
| 136 |
+
};
|
| 137 |
+
}
|
| 138 |
+
if (data.aud) {
|
| 139 |
+
const audiences = Array.isArray(data.aud) ? data.aud : [data.aud];
|
| 140 |
+
if (!audiences.includes(resource)) {
|
| 141 |
+
return {
|
| 142 |
+
valid: false,
|
| 143 |
+
error: 'invalid_token',
|
| 144 |
+
errorDescription: 'Token audience does not match this resource',
|
| 145 |
+
};
|
| 146 |
+
}
|
| 147 |
+
}
|
| 148 |
+
return {
|
| 149 |
+
valid: true,
|
| 150 |
+
scopes: data.scope
|
| 151 |
+
?.trim()
|
| 152 |
+
.split(' ')
|
| 153 |
+
.filter(s => s !== '') || [],
|
| 154 |
+
subject: data.sub,
|
| 155 |
+
expiresAt: data.exp,
|
| 156 |
+
claims: data,
|
| 157 |
+
};
|
| 158 |
+
}
|
| 159 |
+
catch (error) {
|
| 160 |
+
return {
|
| 161 |
+
valid: false,
|
| 162 |
+
error: 'server_error',
|
| 163 |
+
errorDescription: error instanceof Error ? error.message : 'Introspection failed',
|
| 164 |
+
};
|
| 165 |
+
}
|
| 166 |
+
};
|
| 167 |
+
}
|
| 168 |
+
//# sourceMappingURL=oauth-middleware.js.map
|
apps/backend/dist/libraries/nestjs-libraries/src/chat/oauth-middleware.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
{"version":3,"file":"oauth-middleware.js","sourceRoot":"","sources":["../../../../../../../libraries/nestjs-libraries/src/chat/oauth-middleware.ts"],"names":[],"mappings":"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"}
|
apps/backend/dist/libraries/nestjs-libraries/src/chat/oauth-types.d.ts
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
export interface MCPServerOAuthConfig {
|
| 2 |
+
resource: string;
|
| 3 |
+
authorizationServers: string[];
|
| 4 |
+
scopesSupported?: string[];
|
| 5 |
+
resourceName?: string;
|
| 6 |
+
resourceDocumentation?: string;
|
| 7 |
+
validateToken?: (token: string, resource: string) => Promise<TokenValidationResult>;
|
| 8 |
+
}
|
| 9 |
+
export interface TokenValidationResult {
|
| 10 |
+
valid: boolean;
|
| 11 |
+
error?: string;
|
| 12 |
+
errorDescription?: string;
|
| 13 |
+
scopes?: string[];
|
| 14 |
+
subject?: string;
|
| 15 |
+
expiresAt?: number;
|
| 16 |
+
claims?: Record<string, unknown>;
|
| 17 |
+
}
|
| 18 |
+
export interface OAuthResponseOptions {
|
| 19 |
+
resourceMetadataUrl?: string;
|
| 20 |
+
additionalParams?: Record<string, string>;
|
| 21 |
+
}
|
| 22 |
+
export interface OAuthProtectedResourceMetadata {
|
| 23 |
+
resource: string;
|
| 24 |
+
authorization_servers: string[];
|
| 25 |
+
scopes_supported?: string[];
|
| 26 |
+
bearer_methods_supported?: string[];
|
| 27 |
+
resource_name?: string;
|
| 28 |
+
resource_documentation?: string;
|
| 29 |
+
}
|
| 30 |
+
export declare function generateWWWAuthenticateHeader(options?: OAuthResponseOptions): string;
|
| 31 |
+
export declare function generateProtectedResourceMetadata(config: MCPServerOAuthConfig): OAuthProtectedResourceMetadata;
|
| 32 |
+
export declare function extractBearerToken(authHeader: string | null | undefined): string | undefined;
|
apps/backend/dist/libraries/nestjs-libraries/src/chat/oauth-types.js
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"use strict";
|
| 2 |
+
Object.defineProperty(exports, "__esModule", { value: true });
|
| 3 |
+
exports.generateWWWAuthenticateHeader = generateWWWAuthenticateHeader;
|
| 4 |
+
exports.generateProtectedResourceMetadata = generateProtectedResourceMetadata;
|
| 5 |
+
exports.extractBearerToken = extractBearerToken;
|
| 6 |
+
function escapeHeaderValue(value) {
|
| 7 |
+
return value.replace(/\\/g, '\\\\').replace(/"/g, '\\"');
|
| 8 |
+
}
|
| 9 |
+
function generateWWWAuthenticateHeader(options = {}) {
|
| 10 |
+
const params = [];
|
| 11 |
+
if (options.resourceMetadataUrl) {
|
| 12 |
+
params.push(`resource_metadata="${escapeHeaderValue(options.resourceMetadataUrl)}"`);
|
| 13 |
+
}
|
| 14 |
+
if (options.additionalParams) {
|
| 15 |
+
for (const [key, value] of Object.entries(options.additionalParams)) {
|
| 16 |
+
params.push(`${key}="${escapeHeaderValue(value)}"`);
|
| 17 |
+
}
|
| 18 |
+
}
|
| 19 |
+
if (params.length === 0) {
|
| 20 |
+
return 'Bearer';
|
| 21 |
+
}
|
| 22 |
+
return `Bearer ${params.join(', ')}`;
|
| 23 |
+
}
|
| 24 |
+
function generateProtectedResourceMetadata(config) {
|
| 25 |
+
return {
|
| 26 |
+
resource: config.resource,
|
| 27 |
+
authorization_servers: config.authorizationServers,
|
| 28 |
+
scopes_supported: config.scopesSupported ?? ['mcp:read', 'mcp:write'],
|
| 29 |
+
bearer_methods_supported: ['header'],
|
| 30 |
+
...(config.resourceName && { resource_name: config.resourceName }),
|
| 31 |
+
...(config.resourceDocumentation && {
|
| 32 |
+
resource_documentation: config.resourceDocumentation,
|
| 33 |
+
}),
|
| 34 |
+
};
|
| 35 |
+
}
|
| 36 |
+
function extractBearerToken(authHeader) {
|
| 37 |
+
if (!authHeader)
|
| 38 |
+
return undefined;
|
| 39 |
+
const prefix = 'bearer ';
|
| 40 |
+
if (authHeader.length <= prefix.length)
|
| 41 |
+
return undefined;
|
| 42 |
+
if (authHeader.slice(0, prefix.length).toLowerCase() !== prefix)
|
| 43 |
+
return undefined;
|
| 44 |
+
const token = authHeader.slice(prefix.length).trim();
|
| 45 |
+
return token || undefined;
|
| 46 |
+
}
|
| 47 |
+
//# sourceMappingURL=oauth-types.js.map
|
apps/backend/dist/libraries/nestjs-libraries/src/chat/oauth-types.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 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"}
|
apps/backend/dist/libraries/nestjs-libraries/src/chat/rules.description.decorator.d.ts
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import 'reflect-metadata';
|
| 2 |
+
export declare function Rules(description: string): (target: any) => void;
|
apps/backend/dist/libraries/nestjs-libraries/src/chat/rules.description.decorator.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"use strict";
|
| 2 |
+
Object.defineProperty(exports, "__esModule", { value: true });
|
| 3 |
+
exports.Rules = Rules;
|
| 4 |
+
require("reflect-metadata");
|
| 5 |
+
function Rules(description) {
|
| 6 |
+
return function (target) {
|
| 7 |
+
Reflect.defineMetadata('custom:rules:description', description, target);
|
| 8 |
+
};
|
| 9 |
+
}
|
| 10 |
+
//# sourceMappingURL=rules.description.decorator.js.map
|
apps/backend/dist/libraries/nestjs-libraries/src/chat/rules.description.decorator.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 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"}
|
apps/backend/dist/libraries/nestjs-libraries/src/chat/start.mcp.d.ts
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import { INestApplication } from '@nestjs/common';
|
| 2 |
+
export declare const startMcp: (app: INestApplication) => Promise<void>;
|
apps/backend/dist/libraries/nestjs-libraries/src/chat/start.mcp.js
ADDED
|
@@ -0,0 +1,219 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"use strict";
|
| 2 |
+
Object.defineProperty(exports, "__esModule", { value: true });
|
| 3 |
+
exports.startMcp = void 0;
|
| 4 |
+
const mastra_service_1 = require("./mastra.service");
|
| 5 |
+
const mcp_1 = require("@mastra/mcp");
|
| 6 |
+
const crypto_1 = require("crypto");
|
| 7 |
+
const organization_service_1 = require("../database/prisma/organizations/organization.service");
|
| 8 |
+
const oauth_service_1 = require("../database/prisma/oauth/oauth.service");
|
| 9 |
+
const async_storage_1 = require("./async.storage");
|
| 10 |
+
const oauth_middleware_1 = require("./oauth-middleware");
|
| 11 |
+
const fixAcceptHeader = (req) => {
|
| 12 |
+
const value = 'application/json, text/event-stream';
|
| 13 |
+
req.headers.accept = value;
|
| 14 |
+
const idx = req.rawHeaders.findIndex((h) => h.toLowerCase() === 'accept');
|
| 15 |
+
if (idx !== -1) {
|
| 16 |
+
req.rawHeaders[idx + 1] = value;
|
| 17 |
+
}
|
| 18 |
+
else {
|
| 19 |
+
req.rawHeaders.push('Accept', value);
|
| 20 |
+
}
|
| 21 |
+
};
|
| 22 |
+
const startMcp = async (app) => {
|
| 23 |
+
const mastraService = app.get(mastra_service_1.MastraService, { strict: false });
|
| 24 |
+
const organizationService = app.get(organization_service_1.OrganizationService, { strict: false });
|
| 25 |
+
const oauthService = app.get(oauth_service_1.OAuthService, { strict: false });
|
| 26 |
+
const resolveAuth = async (token) => {
|
| 27 |
+
if (token.startsWith('pos_')) {
|
| 28 |
+
const authorization = await oauthService.getOrgByOAuthToken(token);
|
| 29 |
+
if (!authorization)
|
| 30 |
+
return null;
|
| 31 |
+
return authorization.organization;
|
| 32 |
+
}
|
| 33 |
+
return organizationService.getOrgByApiKey(token);
|
| 34 |
+
};
|
| 35 |
+
const mastra = await mastraService.mastra();
|
| 36 |
+
const agent = mastra.getAgent('postiz');
|
| 37 |
+
const tools = await agent.listTools();
|
| 38 |
+
const serverConfig = {
|
| 39 |
+
name: 'Postiz MCP',
|
| 40 |
+
version: '1.0.0',
|
| 41 |
+
tools,
|
| 42 |
+
agents: { postiz: agent },
|
| 43 |
+
};
|
| 44 |
+
const server = new mcp_1.MCPServer(serverConfig);
|
| 45 |
+
const oauthMiddleware = (0, oauth_middleware_1.createOAuthMiddleware)({
|
| 46 |
+
oauth: {
|
| 47 |
+
resource: new URL('/mcp-oauth', process.env.NEXT_PUBLIC_BACKEND_URL).toString(),
|
| 48 |
+
authorizationServers: [process.env.NEXT_PUBLIC_BACKEND_URL],
|
| 49 |
+
validateToken: async (token) => {
|
| 50 |
+
const org = await resolveAuth(token);
|
| 51 |
+
if (!org) {
|
| 52 |
+
return { valid: false, error: 'invalid_token', errorDescription: 'Invalid API Key or OAuth token' };
|
| 53 |
+
}
|
| 54 |
+
return { valid: true, subject: token };
|
| 55 |
+
},
|
| 56 |
+
},
|
| 57 |
+
mcpPath: '/mcp-oauth',
|
| 58 |
+
});
|
| 59 |
+
if (process.env.OPENAI_APP_CHALLANGE) {
|
| 60 |
+
app.use('/.well-known/openai-apps-challenge', (req, res) => {
|
| 61 |
+
res.setHeader('Content-Type', 'text/plain');
|
| 62 |
+
res.send(process.env.OPENAI_APP_CHALLANGE);
|
| 63 |
+
});
|
| 64 |
+
}
|
| 65 |
+
app.use('/.well-known/oauth-protected-resource', async (req, res) => {
|
| 66 |
+
const url = new URL('/.well-known/oauth-protected-resource', process.env.NEXT_PUBLIC_BACKEND_URL);
|
| 67 |
+
await oauthMiddleware(req, res, url);
|
| 68 |
+
});
|
| 69 |
+
app.use('/.well-known/oauth-authorization-server', async (req, res) => {
|
| 70 |
+
res.setHeader('Access-Control-Allow-Origin', '*');
|
| 71 |
+
if (req.method === 'OPTIONS') {
|
| 72 |
+
res.setHeader('Access-Control-Allow-Methods', 'GET, OPTIONS');
|
| 73 |
+
res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
|
| 74 |
+
res.writeHead(204);
|
| 75 |
+
res.end();
|
| 76 |
+
return;
|
| 77 |
+
}
|
| 78 |
+
res.setHeader('Content-Type', 'application/json');
|
| 79 |
+
res.setHeader('Cache-Control', 'max-age=3600');
|
| 80 |
+
res.json({
|
| 81 |
+
issuer: process.env.NEXT_PUBLIC_BACKEND_URL,
|
| 82 |
+
authorization_endpoint: `${process.env.FRONTEND_URL}/oauth/authorize`,
|
| 83 |
+
token_endpoint: `${process.env.NEXT_PUBLIC_OVERRIDE_BACKEND_URL || process.env.NEXT_PUBLIC_BACKEND_URL}/oauth/token`,
|
| 84 |
+
response_types_supported: ['code'],
|
| 85 |
+
grant_types_supported: ['authorization_code'],
|
| 86 |
+
code_challenge_methods_supported: ['S256'],
|
| 87 |
+
scopes_supported: ['mcp:read', 'mcp:write'],
|
| 88 |
+
});
|
| 89 |
+
});
|
| 90 |
+
app.use('/mcp-oauth', async (req, res, next) => {
|
| 91 |
+
if (req.path !== '/' && req.path !== '') {
|
| 92 |
+
next();
|
| 93 |
+
return;
|
| 94 |
+
}
|
| 95 |
+
const url = new URL('/mcp-oauth', process.env.NEXT_PUBLIC_BACKEND_URL);
|
| 96 |
+
const result = await oauthMiddleware(req, res, url);
|
| 97 |
+
if (!result.proceed)
|
| 98 |
+
return;
|
| 99 |
+
const token = result.tokenValidation?.subject;
|
| 100 |
+
const auth = await resolveAuth(token);
|
| 101 |
+
if (!auth) {
|
| 102 |
+
res.status(401).json({ error: 'invalid_token', error_description: 'Could not resolve organization' });
|
| 103 |
+
return;
|
| 104 |
+
}
|
| 105 |
+
fixAcceptHeader(req);
|
| 106 |
+
await (0, async_storage_1.runWithContext)({ requestId: token, auth }, async () => {
|
| 107 |
+
await server.startHTTP({
|
| 108 |
+
url: url,
|
| 109 |
+
httpPath: url.pathname,
|
| 110 |
+
options: {
|
| 111 |
+
sessionIdGenerator: () => {
|
| 112 |
+
return (0, crypto_1.randomUUID)();
|
| 113 |
+
},
|
| 114 |
+
enableJsonResponse: true,
|
| 115 |
+
},
|
| 116 |
+
req,
|
| 117 |
+
res,
|
| 118 |
+
});
|
| 119 |
+
});
|
| 120 |
+
});
|
| 121 |
+
app.use('/mcp', async (req, res, next) => {
|
| 122 |
+
if (req.path !== '/' && req.path !== '') {
|
| 123 |
+
next();
|
| 124 |
+
return;
|
| 125 |
+
}
|
| 126 |
+
res.setHeader('Access-Control-Allow-Origin', '*');
|
| 127 |
+
res.setHeader('Access-Control-Allow-Methods', '*');
|
| 128 |
+
res.setHeader('Access-Control-Allow-Headers', '*');
|
| 129 |
+
res.setHeader('Access-Control-Expose-Headers', '*');
|
| 130 |
+
if (req.method === 'OPTIONS') {
|
| 131 |
+
res.sendStatus(200);
|
| 132 |
+
return;
|
| 133 |
+
}
|
| 134 |
+
const token = req.headers.authorization?.replace('Bearer ', '');
|
| 135 |
+
if (!token) {
|
| 136 |
+
res.status(401).send('Missing Authorization header');
|
| 137 |
+
return;
|
| 138 |
+
}
|
| 139 |
+
req.auth = await resolveAuth(token);
|
| 140 |
+
if (!req.auth) {
|
| 141 |
+
res.status(401).send('Invalid API Key or OAuth token');
|
| 142 |
+
return;
|
| 143 |
+
}
|
| 144 |
+
const url = new URL('/mcp', process.env.NEXT_PUBLIC_BACKEND_URL);
|
| 145 |
+
fixAcceptHeader(req);
|
| 146 |
+
await (0, async_storage_1.runWithContext)({ requestId: token, auth: req.auth }, async () => {
|
| 147 |
+
await server.startHTTP({
|
| 148 |
+
url,
|
| 149 |
+
httpPath: url.pathname,
|
| 150 |
+
options: {
|
| 151 |
+
sessionIdGenerator: () => {
|
| 152 |
+
return (0, crypto_1.randomUUID)();
|
| 153 |
+
},
|
| 154 |
+
enableJsonResponse: true,
|
| 155 |
+
},
|
| 156 |
+
req,
|
| 157 |
+
res,
|
| 158 |
+
});
|
| 159 |
+
});
|
| 160 |
+
});
|
| 161 |
+
app.use('/mcp/:id', async (req, res) => {
|
| 162 |
+
res.setHeader('Access-Control-Allow-Origin', '*');
|
| 163 |
+
res.setHeader('Access-Control-Allow-Methods', '*');
|
| 164 |
+
res.setHeader('Access-Control-Allow-Headers', '*');
|
| 165 |
+
res.setHeader('Access-Control-Expose-Headers', '*');
|
| 166 |
+
if (req.method === 'OPTIONS') {
|
| 167 |
+
res.sendStatus(200);
|
| 168 |
+
return;
|
| 169 |
+
}
|
| 170 |
+
req.auth = await organizationService.getOrgByApiKey(req.params.id);
|
| 171 |
+
if (!req.auth) {
|
| 172 |
+
res.status(400).send('Invalid API Key');
|
| 173 |
+
return;
|
| 174 |
+
}
|
| 175 |
+
const url = new URL(`/mcp/${req.params.id}`, process.env.NEXT_PUBLIC_BACKEND_URL);
|
| 176 |
+
fixAcceptHeader(req);
|
| 177 |
+
await (0, async_storage_1.runWithContext)({ requestId: req.params.id, auth: req.auth }, async () => {
|
| 178 |
+
await server.startHTTP({
|
| 179 |
+
url,
|
| 180 |
+
httpPath: url.pathname,
|
| 181 |
+
options: {
|
| 182 |
+
sessionIdGenerator: () => {
|
| 183 |
+
return (0, crypto_1.randomUUID)();
|
| 184 |
+
},
|
| 185 |
+
enableJsonResponse: true,
|
| 186 |
+
},
|
| 187 |
+
req,
|
| 188 |
+
res,
|
| 189 |
+
});
|
| 190 |
+
});
|
| 191 |
+
});
|
| 192 |
+
app.use(['/sse/:id', '/message/:id'], async (req, res) => {
|
| 193 |
+
res.setHeader('Access-Control-Allow-Origin', '*');
|
| 194 |
+
res.setHeader('Access-Control-Allow-Methods', '*');
|
| 195 |
+
res.setHeader('Access-Control-Allow-Headers', '*');
|
| 196 |
+
res.setHeader('Access-Control-Expose-Headers', '*');
|
| 197 |
+
if (req.method === 'OPTIONS') {
|
| 198 |
+
res.sendStatus(200);
|
| 199 |
+
return;
|
| 200 |
+
}
|
| 201 |
+
req.auth = await organizationService.getOrgByApiKey(req.params.id);
|
| 202 |
+
if (!req.auth) {
|
| 203 |
+
res.status(400).send('Invalid API Key');
|
| 204 |
+
return;
|
| 205 |
+
}
|
| 206 |
+
const url = new URL(req.originalUrl, process.env.NEXT_PUBLIC_BACKEND_URL);
|
| 207 |
+
await (0, async_storage_1.runWithContext)({ requestId: req.params.id, auth: req.auth }, async () => {
|
| 208 |
+
await new mcp_1.MCPServer(serverConfig).startSSE({
|
| 209 |
+
url,
|
| 210 |
+
ssePath: `/sse/${req.params.id}`,
|
| 211 |
+
messagePath: `/message/${req.params.id}`,
|
| 212 |
+
req,
|
| 213 |
+
res,
|
| 214 |
+
});
|
| 215 |
+
});
|
| 216 |
+
});
|
| 217 |
+
};
|
| 218 |
+
exports.startMcp = startMcp;
|
| 219 |
+
//# sourceMappingURL=start.mcp.js.map
|
apps/backend/dist/libraries/nestjs-libraries/src/chat/start.mcp.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
{"version":3,"file":"start.mcp.js","sourceRoot":"","sources":["../../../../../../../libraries/nestjs-libraries/src/chat/start.mcp.ts"],"names":[],"mappings":"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"}
|