n8n-nodes-memory 0.0.1 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ export { Memory } from './nodes/Memory/Memory.node';
package/dist/index.js ADDED
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Memory = void 0;
4
+ var Memory_node_1 = require("./nodes/Memory/Memory.node");
5
+ Object.defineProperty(exports, "Memory", { enumerable: true, get: function () { return Memory_node_1.Memory; } });
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMERBQW9EO0FBQTNDLHFHQUFBLE1BQU0sT0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IE1lbW9yeSB9IGZyb20gJy4vbm9kZXMvTWVtb3J5L01lbW9yeS5ub2RlJztcbiJdfQ==
@@ -0,0 +1,18 @@
1
+ import { BaseListChatMessageHistory } from '@langchain/core/chat_history';
2
+ import { BaseMessage } from '@langchain/core/messages';
3
+ export interface ApiMemoryHistoryConfig {
4
+ apiUrl: string;
5
+ sessionId: string;
6
+ apiKey?: string;
7
+ }
8
+ export declare class ApiMemoryHistory extends BaseListChatMessageHistory {
9
+ lc_namespace: string[];
10
+ private apiUrl;
11
+ private sessionId;
12
+ private apiKey?;
13
+ constructor(config: ApiMemoryHistoryConfig);
14
+ getMessages(): Promise<BaseMessage[]>;
15
+ addMessage(message: BaseMessage): Promise<void>;
16
+ addMessages(messages: BaseMessage[]): Promise<void>;
17
+ clear(): Promise<void>;
18
+ }
@@ -0,0 +1,113 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ApiMemoryHistory = void 0;
4
+ const chat_history_1 = require("@langchain/core/chat_history");
5
+ const messages_1 = require("@langchain/core/messages");
6
+ class ApiMemoryHistory extends chat_history_1.BaseListChatMessageHistory {
7
+ constructor(config) {
8
+ super();
9
+ this.lc_namespace = ['langchain', 'stores', 'message', 'api'];
10
+ this.apiUrl = config.apiUrl;
11
+ this.sessionId = config.sessionId;
12
+ this.apiKey = config.apiKey;
13
+ }
14
+ async getMessages() {
15
+ try {
16
+ const url = new URL(this.apiUrl);
17
+ url.searchParams.set('sessionId', this.sessionId);
18
+ url.searchParams.set('action', 'get');
19
+ const headers = {
20
+ 'Content-Type': 'application/json',
21
+ };
22
+ if (this.apiKey) {
23
+ headers['Authorization'] = `Bearer ${this.apiKey}`;
24
+ }
25
+ const response = await fetch(url.toString(), {
26
+ method: 'GET',
27
+ headers,
28
+ });
29
+ if (!response.ok) {
30
+ console.error(`Memory API error: ${response.status}`);
31
+ return [];
32
+ }
33
+ const data = await response.json();
34
+ const messages = data.messages || [];
35
+ return messages.map((msg) => {
36
+ switch (msg.type) {
37
+ case 'human':
38
+ return new messages_1.HumanMessage(msg.content);
39
+ case 'ai':
40
+ return new messages_1.AIMessage(msg.content);
41
+ case 'system':
42
+ return new messages_1.SystemMessage(msg.content);
43
+ default:
44
+ return new messages_1.HumanMessage(msg.content);
45
+ }
46
+ });
47
+ }
48
+ catch (error) {
49
+ console.error('Failed to get messages from API:', error);
50
+ return [];
51
+ }
52
+ }
53
+ async addMessage(message) {
54
+ try {
55
+ const headers = {
56
+ 'Content-Type': 'application/json',
57
+ };
58
+ if (this.apiKey) {
59
+ headers['Authorization'] = `Bearer ${this.apiKey}`;
60
+ }
61
+ let type = 'human';
62
+ if (message._getType() === 'ai') {
63
+ type = 'ai';
64
+ }
65
+ else if (message._getType() === 'system') {
66
+ type = 'system';
67
+ }
68
+ await fetch(this.apiUrl, {
69
+ method: 'POST',
70
+ headers,
71
+ body: JSON.stringify({
72
+ action: 'add',
73
+ sessionId: this.sessionId,
74
+ message: {
75
+ type,
76
+ content: message.content,
77
+ },
78
+ }),
79
+ });
80
+ }
81
+ catch (error) {
82
+ console.error('Failed to add message to API:', error);
83
+ }
84
+ }
85
+ async addMessages(messages) {
86
+ for (const message of messages) {
87
+ await this.addMessage(message);
88
+ }
89
+ }
90
+ async clear() {
91
+ try {
92
+ const headers = {
93
+ 'Content-Type': 'application/json',
94
+ };
95
+ if (this.apiKey) {
96
+ headers['Authorization'] = `Bearer ${this.apiKey}`;
97
+ }
98
+ await fetch(this.apiUrl, {
99
+ method: 'POST',
100
+ headers,
101
+ body: JSON.stringify({
102
+ action: 'clear',
103
+ sessionId: this.sessionId,
104
+ }),
105
+ });
106
+ }
107
+ catch (error) {
108
+ console.error('Failed to clear messages from API:', error);
109
+ }
110
+ }
111
+ }
112
+ exports.ApiMemoryHistory = ApiMemoryHistory;
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXBpTWVtb3J5SGlzdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ub2Rlcy9NZW1vcnkvQXBpTWVtb3J5SGlzdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrREFFc0M7QUFDdEMsdURBS2tDO0FBaUJsQyxNQUFhLGdCQUFpQixTQUFRLHlDQUEwQjtJQU85RCxZQUFZLE1BQThCO1FBQ3hDLEtBQUssRUFBRSxDQUFDO1FBUFYsaUJBQVksR0FBRyxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBUXZELElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUM1QixJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUM7UUFDbEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQzlCLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVztRQUNmLElBQUksQ0FBQztZQUNILE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNqQyxHQUFHLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2xELEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUV0QyxNQUFNLE9BQU8sR0FBMkI7Z0JBQ3RDLGNBQWMsRUFBRSxrQkFBa0I7YUFDbkMsQ0FBQztZQUNGLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNoQixPQUFPLENBQUMsZUFBZSxDQUFDLEdBQUcsVUFBVSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDckQsQ0FBQztZQUVELE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUs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QkFBa0I7YUFDbkMsQ0FBQztZQUNGLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNoQixPQUFPLENBQUMsZUFBZSxDQUFDLEdBQUcsVUFBVSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDckQsQ0FBQztZQUVELE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQ3ZCLE1BQU0sRUFBRSxNQUFNO2dCQUNkLE9BQU87Z0JBQ1AsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUM7b0JBQ25CLE1BQU0sRUFBRSxPQUFPO29CQUNmLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztpQkFDMUIsQ0FBQzthQUNILENBQUMsQ0FBQztRQUNMLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxvQ0FBb0MsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM3RCxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBdEhELDRDQXNIQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEJhc2VMaXN0Q2hhdE1lc3NhZ2VIaXN0b3J5LFxufSBmcm9tICdAbGFuZ2NoYWluL2NvcmUvY2hhdF9oaXN0b3J5JztcbmltcG9ydCB7XG4gIEJhc2VNZXNzYWdlLFxuICBIdW1hbk1lc3NhZ2UsXG4gIEFJTWVzc2FnZSxcbiAgU3lzdGVtTWVzc2FnZSxcbn0gZnJvbSAnQGxhbmdjaGFpbi9jb3JlL21lc3NhZ2VzJztcblxuZXhwb3J0IGludGVyZmFjZSBBcGlNZW1vcnlIaXN0b3J5Q29uZmlnIHtcbiAgYXBpVXJsOiBzdHJpbmc7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBhcGlLZXk/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBBcGlNZXNzYWdlIHtcbiAgdHlwZTogJ2h1bWFuJyB8ICdhaScgfCAnc3lzdGVtJztcbiAgY29udGVudDogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgQXBpUmVzcG9uc2Uge1xuICBtZXNzYWdlcz86IEFwaU1lc3NhZ2VbXTtcbn1cblxuZXhwb3J0IGNsYXNzIEFwaU1lbW9yeUhpc3RvcnkgZXh0ZW5kcyBCYXNlTGlzdENoYXRNZXNzYWdlSGlzdG9yeSB7XG4gIGxjX25hbWVzcGFjZSA9IFsnbGFuZ2NoYWluJywgJ3N0b3JlcycsICdtZXNzYWdlJywgJ2FwaSddO1xuXG4gIHByaXZhdGUgYXBpVXJsOiBzdHJpbmc7XG4gIHByaXZhdGUgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgYXBpS2V5Pzogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogQXBpTWVtb3J5SGlzdG9yeUNvbmZpZykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hcGlVcmwgPSBjb25maWcuYXBpVXJsO1xuICAgIHRoaXMuc2Vzc2lvbklkID0gY29uZmlnLnNlc3Npb25JZDtcbiAgICB0aGlzLmFwaUtleSA9IGNvbmZpZy5hcGlLZXk7XG4gIH1cblxuICBhc3luYyBnZXRNZXNzYWdlcygpOiBQcm9taXNlPEJhc2VNZXNzYWdlW10+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdXJsID0gbmV3IFVSTCh0aGlzLmFwaVVybCk7XG4gICAgICB1cmwuc2VhcmNoUGFyYW1zLnNldCgnc2Vzc2lvbklkJywgdGhpcy5zZXNzaW9uSWQpO1xuICAgICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoJ2FjdGlvbicsICdnZXQnKTtcblxuICAgICAgY29uc3QgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIH07XG4gICAgICBpZiAodGhpcy5hcGlLZXkpIHtcbiAgICAgICAgaGVhZGVyc1snQXV0aG9yaXphdGlvbiddID0gYEJlYXJlciAke3RoaXMuYXBpS2V5fWA7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLnRvU3RyaW5nKCksIHtcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgaGVhZGVycyxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYE1lbW9yeSBBUEkgZXJyb3I6ICR7cmVzcG9uc2Uuc3RhdHVzfWApO1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgQXBpUmVzcG9uc2U7XG4gICAgICBjb25zdCBtZXNzYWdlczogQXBpTWVzc2FnZVtdID0gZGF0YS5tZXNzYWdlcyB8fCBbXTtcblxuICAgICAgcmV0dXJuIG1lc3NhZ2VzLm1hcCgobXNnKSA9PiB7XG4gICAgICAgIHN3aXRjaCAobXNnLnR5cGUpIHtcbiAgICAgICAgICBjYXNlICdodW1hbic6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEh1bWFuTWVzc2FnZShtc2cuY29udGVudCk7XG4gICAgICAgICAgY2FzZSAnYWknOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBBSU1lc3NhZ2UobXNnLmNvbnRlbnQpO1xuICAgICAgICAgIGNhc2UgJ3N5c3RlbSc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IFN5c3RlbU1lc3NhZ2UobXNnLmNvbnRlbnQpO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEh1bWFuTWVzc2FnZShtc2cuY29udGVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZ2V0IG1lc3NhZ2VzIGZyb20gQVBJOicsIGVycm9yKTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBhZGRNZXNzYWdlKG1lc3NhZ2U6IEJhc2VNZXNzYWdlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICB9O1xuICAgICAgaWYgKHRoaXMuYXBpS2V5KSB7XG4gICAgICAgIGhlYWRlcnNbJ0F1dGhvcml6YXRpb24nXSA9IGBCZWFyZXIgJHt0aGlzLmFwaUtleX1gO1xuICAgICAgfVxuXG4gICAgICBsZXQgdHlwZTogJ2h1bWFuJyB8ICdhaScgfCAnc3lzdGVtJyA9ICdodW1hbic7XG4gICAgICBpZiAobWVzc2FnZS5fZ2V0VHlwZSgpID09PSAnYWknKSB7XG4gICAgICAgIHR5cGUgPSAnYWknO1xuICAgICAgfSBlbHNlIGlmIChtZXNzYWdlLl9nZXRUeXBlKCkgPT09ICdzeXN0ZW0nKSB7XG4gICAgICAgIHR5cGUgPSAnc3lzdGVtJztcbiAgICAgIH1cblxuICAgICAgYXdhaXQgZmV0Y2godGhpcy5hcGlVcmwsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBhY3Rpb246ICdhZGQnLFxuICAgICAgICAgIHNlc3Npb25JZDogdGhpcy5zZXNzaW9uSWQsXG4gICAgICAgICAgbWVzc2FnZToge1xuICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IG1lc3NhZ2UuY29udGVudCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gYWRkIG1lc3NhZ2UgdG8gQVBJOicsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBhZGRNZXNzYWdlcyhtZXNzYWdlczogQmFzZU1lc3NhZ2VbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGZvciAoY29uc3QgbWVzc2FnZSBvZiBtZXNzYWdlcykge1xuICAgICAgYXdhaXQgdGhpcy5hZGRNZXNzYWdlKG1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNsZWFyKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgfTtcbiAgICAgIGlmICh0aGlzLmFwaUtleSkge1xuICAgICAgICBoZWFkZXJzWydBdXRob3JpemF0aW9uJ10gPSBgQmVhcmVyICR7dGhpcy5hcGlLZXl9YDtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgZmV0Y2godGhpcy5hcGlVcmwsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBhY3Rpb246ICdjbGVhcicsXG4gICAgICAgICAgc2Vzc2lvbklkOiB0aGlzLnNlc3Npb25JZCxcbiAgICAgICAgfSksXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGNsZWFyIG1lc3NhZ2VzIGZyb20gQVBJOicsIGVycm9yKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,5 @@
1
+ import type { INodeType, INodeTypeDescription, ISupplyDataFunctions, SupplyData } from 'n8n-workflow';
2
+ export declare class Memory implements INodeType {
3
+ description: INodeTypeDescription;
4
+ supplyData(this: ISupplyDataFunctions, itemIndex: number): Promise<SupplyData>;
5
+ }
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Memory = void 0;
4
+ const memory_1 = require("@langchain/classic/memory");
5
+ const ApiMemoryHistory_1 = require("./ApiMemoryHistory");
6
+ class Memory {
7
+ constructor() {
8
+ this.description = {
9
+ displayName: 'Memory',
10
+ name: 'memory',
11
+ icon: 'fa:brain',
12
+ group: ['transform'],
13
+ version: 1,
14
+ description: 'Custom memory node with external API support',
15
+ defaults: {
16
+ name: 'Memory',
17
+ },
18
+ codex: {
19
+ categories: ['AI'],
20
+ subcategories: {
21
+ AI: ['Memory'],
22
+ },
23
+ resources: {
24
+ primaryDocumentation: [
25
+ {
26
+ url: 'https://github.com/filipexyz/n8n-nodes-memory',
27
+ },
28
+ ],
29
+ },
30
+ },
31
+ inputs: [],
32
+ outputs: ['ai_memory'],
33
+ outputNames: ['Memory'],
34
+ properties: [
35
+ {
36
+ displayName: 'API URL',
37
+ name: 'apiUrl',
38
+ type: 'string',
39
+ default: '',
40
+ required: true,
41
+ description: 'URL of the memory API (e.g., n8n webhook URL)',
42
+ placeholder: 'https://your-n8n.com/webhook/memory',
43
+ },
44
+ {
45
+ displayName: 'Session ID',
46
+ name: 'sessionId',
47
+ type: 'string',
48
+ default: '={{ $json.sessionId }}',
49
+ required: true,
50
+ description: 'Unique identifier for the conversation session',
51
+ },
52
+ {
53
+ displayName: 'API Key',
54
+ name: 'apiKey',
55
+ type: 'string',
56
+ typeOptions: {
57
+ password: true,
58
+ },
59
+ default: '',
60
+ description: 'Optional API key for authentication',
61
+ },
62
+ {
63
+ displayName: 'Context Window Length',
64
+ name: 'contextWindowLength',
65
+ type: 'number',
66
+ default: 10,
67
+ description: 'Number of previous messages to include as context',
68
+ },
69
+ ],
70
+ };
71
+ }
72
+ async supplyData(itemIndex) {
73
+ const apiUrl = this.getNodeParameter('apiUrl', itemIndex);
74
+ const sessionId = this.getNodeParameter('sessionId', itemIndex);
75
+ const apiKey = this.getNodeParameter('apiKey', itemIndex, '');
76
+ const contextWindowLength = this.getNodeParameter('contextWindowLength', itemIndex, 10);
77
+ const chatHistory = new ApiMemoryHistory_1.ApiMemoryHistory({
78
+ apiUrl,
79
+ sessionId,
80
+ apiKey: apiKey || undefined,
81
+ });
82
+ const memory = new memory_1.BufferWindowMemory({
83
+ memoryKey: 'chat_history',
84
+ chatHistory,
85
+ returnMessages: true,
86
+ inputKey: 'input',
87
+ outputKey: 'output',
88
+ k: contextWindowLength,
89
+ });
90
+ return {
91
+ response: memory,
92
+ };
93
+ }
94
+ }
95
+ exports.Memory = Memory;
96
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWVtb3J5Lm5vZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbm9kZXMvTWVtb3J5L01lbW9yeS5ub2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQU1BLHNEQUErRDtBQUMvRCx5REFBc0Q7QUFFdEQsTUFBYSxNQUFNO0lBQW5CO1FBQ0UsZ0JBQVcsR0FBeUI7WUFDbEMsV0FBVyxFQUFFLFFBQVE7WUFDckIsSUFBSSxFQUFFLFFBQVE7WUFDZCxJQUFJLEVBQUUsVUFBVTtZQUNoQixLQUFLLEVBQUUsQ0FBQyxXQUFXLENBQUM7WUFDcEIsT0FBTyxFQUFFLENBQUM7WUFDVixXQUFXLEVBQUUsOENBQThDO1lBQzNELFFBQVEsRUFBRTtnQkFDUixJQUFJLEVBQUUsUUFBUTthQUNmO1lBQ0QsS0FBSyxFQUFFO2dCQUNMLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQztnQkFDbEIsYUFBYSxFQUFFO29CQUNiLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQztpQkFDZjtnQkFDRCxTQUFTLEVBQUU7b0JBQ1Qsb0JBQW9CLEVBQUU7d0JBQ3BCOzRCQUNFLEdBQUcsRUFBRSwrQ0FBK0M7eUJBQ3JEO3FCQUNGO2lCQUNGO2FBQ0Y7WUFDRCxNQUFNLEVBQUUsRUFBRTtZQUNWLE9BQU8sRUFBRSxDQUFDLFdBQW9CLENBQUM7WUFDL0IsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDO1lBQ3ZCLFVBQVUsRUFBRTtnQkFDVjtvQkFDRSxXQUFXLEVBQUUsU0FBUztvQkFDdEIsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsT0FBTyxFQUFFLEVBQUU7b0JBQ1gsUUFBUSxFQUFFLElBQUk7b0JBQ2QsV0FBVyxFQUFFLCtDQUErQztvQkFDNUQsV0FBVyxFQUFFLHFDQUFxQztpQkFDbkQ7Z0JBQ0Q7b0JBQ0UsV0FBVyxFQUFFLFlBQVk7b0JBQ3pCLElBQUksRUFBRSxXQUFXO29CQUNqQixJQUFJLEVBQUUsUUFBUTtvQkFDZCxPQUFPLEVBQUUsd0JBQXdCO29CQUNqQyxRQUFRLEVBQUUsSUFBSTtvQkFDZCxXQUFXLEVBQUUsZ0RBQWdEO2lCQUM5RDtnQkFDRDtvQkFDRSxXQUFXLEVBQUUsU0FBUztvQkFDdEIsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsV0FBVyxFQUFFO3dCQUNYLFFBQVEsRUFBRSxJQUFJO3FCQUNmO29CQUNELE9BQU8sRUFBRSxFQUFFO29CQUNYLFdBQVcsRUFBRSxxQ0FBcUM7aUJBQ25EO2dCQUNEO29CQUNFLFdBQVcsRUFBRSx1QkFBdUI7b0JBQ3BDLElBQUksRUFBRSxxQkFBcUI7b0JBQzNCLElBQUksRUFBRSxRQUFRO29CQUNkLE9BQU8sRUFBRSxFQUFFO29CQUNYLFdBQVcsRUFBRSxtREFBbUQ7aUJBQ2pFO2FBQ0Y7U0FDRixDQUFDO0lBa0NKLENBQUM7SUFoQ0MsS0FBSyxDQUFDLFVBQVUsQ0FFZCxTQUFpQjtRQUVqQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBVyxDQUFDO1FBQ3BFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFXLENBQUM7UUFDMUUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUFXLENBQUM7UUFDeEUsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQy9DLHFCQUFxQixFQUNyQixTQUFTLEVBQ1QsRUFBRSxDQUNPLENBQUM7UUFFWixNQUFNLFdBQVcsR0FBRyxJQUFJLG1DQUFnQixDQUFDO1lBQ3ZDLE1BQU07WUFDTixTQUFTO1lBQ1QsTUFBTSxFQUFFLE1BQU0sSUFBSSxTQUFTO1NBQzVCLENBQUMsQ0FBQztRQUVILE1BQU0sTUFBTSxHQUFHLElBQUksMkJBQWtCLENBQUM7WUFDcEMsU0FBUyxFQUFFLGNBQWM7WUFDekIsV0FBVztZQUNYLGNBQWMsRUFBRSxJQUFJO1lBQ3BCLFFBQVEsRUFBRSxPQUFPO1lBQ2pCLFNBQVMsRUFBRSxRQUFRO1lBQ25CLENBQUMsRUFBRSxtQkFBbUI7U0FDdkIsQ0FBQyxDQUFDO1FBRUgsT0FBTztZQUNMLFFBQVEsRUFBRSxNQUFNO1NBQ2pCLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFqR0Qsd0JBaUdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuICBJTm9kZVR5cGUsXG4gIElOb2RlVHlwZURlc2NyaXB0aW9uLFxuICBJU3VwcGx5RGF0YUZ1bmN0aW9ucyxcbiAgU3VwcGx5RGF0YSxcbn0gZnJvbSAnbjhuLXdvcmtmbG93JztcbmltcG9ydCB7IEJ1ZmZlcldpbmRvd01lbW9yeSB9IGZyb20gJ0BsYW5nY2hhaW4vY2xhc3NpYy9tZW1vcnknO1xuaW1wb3J0IHsgQXBpTWVtb3J5SGlzdG9yeSB9IGZyb20gJy4vQXBpTWVtb3J5SGlzdG9yeSc7XG5cbmV4cG9ydCBjbGFzcyBNZW1vcnkgaW1wbGVtZW50cyBJTm9kZVR5cGUge1xuICBkZXNjcmlwdGlvbjogSU5vZGVUeXBlRGVzY3JpcHRpb24gPSB7XG4gICAgZGlzcGxheU5hbWU6ICdNZW1vcnknLFxuICAgIG5hbWU6ICdtZW1vcnknLFxuICAgIGljb246ICdmYTpicmFpbicsXG4gICAgZ3JvdXA6IFsndHJhbnNmb3JtJ10sXG4gICAgdmVyc2lvbjogMSxcbiAgICBkZXNjcmlwdGlvbjogJ0N1c3RvbSBtZW1vcnkgbm9kZSB3aXRoIGV4dGVybmFsIEFQSSBzdXBwb3J0JyxcbiAgICBkZWZhdWx0czoge1xuICAgICAgbmFtZTogJ01lbW9yeScsXG4gICAgfSxcbiAgICBjb2RleDoge1xuICAgICAgY2F0ZWdvcmllczogWydBSSddLFxuICAgICAgc3ViY2F0ZWdvcmllczoge1xuICAgICAgICBBSTogWydNZW1vcnknXSxcbiAgICAgIH0sXG4gICAgICByZXNvdXJjZXM6IHtcbiAgICAgICAgcHJpbWFyeURvY3VtZW50YXRpb246IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB1cmw6ICdodHRwczovL2dpdGh1Yi5jb20vZmlsaXBleHl6L244bi1ub2Rlcy1tZW1vcnknLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIH0sXG4gICAgaW5wdXRzOiBbXSxcbiAgICBvdXRwdXRzOiBbJ2FpX21lbW9yeScgYXMgY29uc3RdLFxuICAgIG91dHB1dE5hbWVzOiBbJ01lbW9yeSddLFxuICAgIHByb3BlcnRpZXM6IFtcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheU5hbWU6ICdBUEkgVVJMJyxcbiAgICAgICAgbmFtZTogJ2FwaVVybCcsXG4gICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICBkZWZhdWx0OiAnJyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVVJMIG9mIHRoZSBtZW1vcnkgQVBJIChlLmcuLCBuOG4gd2ViaG9vayBVUkwpJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICdodHRwczovL3lvdXItbjhuLmNvbS93ZWJob29rL21lbW9yeScsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBkaXNwbGF5TmFtZTogJ1Nlc3Npb24gSUQnLFxuICAgICAgICBuYW1lOiAnc2Vzc2lvbklkJyxcbiAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIGRlZmF1bHQ6ICc9e3sgJGpzb24uc2Vzc2lvbklkIH19JyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBjb252ZXJzYXRpb24gc2Vzc2lvbicsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBkaXNwbGF5TmFtZTogJ0FQSSBLZXknLFxuICAgICAgICBuYW1lOiAnYXBpS2V5JyxcbiAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIHR5cGVPcHRpb25zOiB7XG4gICAgICAgICAgcGFzc3dvcmQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6ICcnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ09wdGlvbmFsIEFQSSBrZXkgZm9yIGF1dGhlbnRpY2F0aW9uJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGRpc3BsYXlOYW1lOiAnQ29udGV4dCBXaW5kb3cgTGVuZ3RoJyxcbiAgICAgICAgbmFtZTogJ2NvbnRleHRXaW5kb3dMZW5ndGgnLFxuICAgICAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICAgICAgZGVmYXVsdDogMTAsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnTnVtYmVyIG9mIHByZXZpb3VzIG1lc3NhZ2VzIHRvIGluY2x1ZGUgYXMgY29udGV4dCcsXG4gICAgICB9LFxuICAgIF0sXG4gIH07XG5cbiAgYXN5bmMgc3VwcGx5RGF0YShcbiAgICB0aGlzOiBJU3VwcGx5RGF0YUZ1bmN0aW9ucyxcbiAgICBpdGVtSW5kZXg6IG51bWJlclxuICApOiBQcm9taXNlPFN1cHBseURhdGE+IHtcbiAgICBjb25zdCBhcGlVcmwgPSB0aGlzLmdldE5vZGVQYXJhbWV0ZXIoJ2FwaVVybCcsIGl0ZW1JbmRleCkgYXMgc3RyaW5nO1xuICAgIGNvbnN0IHNlc3Npb25JZCA9IHRoaXMuZ2V0Tm9kZVBhcmFtZXRlcignc2Vzc2lvbklkJywgaXRlbUluZGV4KSBhcyBzdHJpbmc7XG4gICAgY29uc3QgYXBpS2V5ID0gdGhpcy5nZXROb2RlUGFyYW1ldGVyKCdhcGlLZXknLCBpdGVtSW5kZXgsICcnKSBhcyBzdHJpbmc7XG4gICAgY29uc3QgY29udGV4dFdpbmRvd0xlbmd0aCA9IHRoaXMuZ2V0Tm9kZVBhcmFtZXRlcihcbiAgICAgICdjb250ZXh0V2luZG93TGVuZ3RoJyxcbiAgICAgIGl0ZW1JbmRleCxcbiAgICAgIDEwXG4gICAgKSBhcyBudW1iZXI7XG5cbiAgICBjb25zdCBjaGF0SGlzdG9yeSA9IG5ldyBBcGlNZW1vcnlIaXN0b3J5KHtcbiAgICAgIGFwaVVybCxcbiAgICAgIHNlc3Npb25JZCxcbiAgICAgIGFwaUtleTogYXBpS2V5IHx8IHVuZGVmaW5lZCxcbiAgICB9KTtcblxuICAgIGNvbnN0IG1lbW9yeSA9IG5ldyBCdWZmZXJXaW5kb3dNZW1vcnkoe1xuICAgICAgbWVtb3J5S2V5OiAnY2hhdF9oaXN0b3J5JyxcbiAgICAgIGNoYXRIaXN0b3J5LFxuICAgICAgcmV0dXJuTWVzc2FnZXM6IHRydWUsXG4gICAgICBpbnB1dEtleTogJ2lucHV0JyxcbiAgICAgIG91dHB1dEtleTogJ291dHB1dCcsXG4gICAgICBrOiBjb250ZXh0V2luZG93TGVuZ3RoLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc3BvbnNlOiBtZW1vcnksXG4gICAgfTtcbiAgfVxufVxuIl19
package/package.json CHANGED
@@ -1,8 +1,47 @@
1
1
  {
2
2
  "name": "n8n-nodes-memory",
3
- "version": "0.0.1",
4
- "description": "Custom memory node for n8n AI Agent",
3
+ "version": "0.1.0",
4
+ "description": "Custom memory node for n8n AI Agent with external API support",
5
+ "keywords": [
6
+ "n8n-community-node-package",
7
+ "n8n",
8
+ "langchain",
9
+ "memory",
10
+ "ai"
11
+ ],
5
12
  "license": "MIT",
6
13
  "author": "Filipe Labs",
7
- "repository": "https://github.com/filipexyz/n8n-nodes-memory"
14
+ "repository": {
15
+ "type": "git",
16
+ "url": "https://github.com/filipexyz/n8n-nodes-memory"
17
+ },
18
+ "main": "dist/index.js",
19
+ "types": "dist/index.d.ts",
20
+ "scripts": {
21
+ "build": "tsc",
22
+ "dev": "tsc --watch",
23
+ "prepublishOnly": "npm run build"
24
+ },
25
+ "files": [
26
+ "dist"
27
+ ],
28
+ "n8n": {
29
+ "n8nNodesApiVersion": 1,
30
+ "nodes": [
31
+ "dist/nodes/Memory/Memory.node.js"
32
+ ],
33
+ "credentials": []
34
+ },
35
+ "devDependencies": {
36
+ "@types/node": "^25.0.3",
37
+ "typescript": "^5.9.3"
38
+ },
39
+ "peerDependencies": {
40
+ "n8n-workflow": "^2.2.1"
41
+ },
42
+ "dependencies": {
43
+ "@langchain/classic": "^1.0.7",
44
+ "@langchain/core": "^1.1.0",
45
+ "langchain": "^1.1.1"
46
+ }
8
47
  }