n8n-nodes-zep-stemx-memory
Version:
n8n community node for Zep AI Memory Service
426 lines (425 loc) • 18 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ZepMemory = void 0;
class ZepMemory {
constructor() {
this.description = {
displayName: 'Zep Memory (Stemx)',
name: 'zepMemoryStemx',
icon: 'file:zep.svg',
group: ['input'],
version: 1,
subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
description: 'Interact with Zep AI Memory Service',
defaults: {
name: 'Zep Memory (Stemx)',
},
inputs: ['main'],
outputs: ['main'],
credentials: [
{
name: 'zepApiStemx-Api',
required: true,
},
],
properties: [
{
displayName: 'Resource',
name: 'resource',
type: 'options',
noDataExpression: true,
options: [
{
name: 'User',
value: 'user',
},
{
name: 'Session',
value: 'session',
},
{
name: 'Memory',
value: 'memory',
},
],
default: 'memory',
},
{
displayName: 'Operation',
name: 'operation',
type: 'options',
noDataExpression: true,
displayOptions: {
show: {
resource: ['user'],
},
},
options: [
{
name: 'Create',
value: 'create',
description: 'Create a new user',
action: 'Create a user',
},
{
name: 'Delete',
value: 'delete',
description: 'Delete a user',
action: 'Delete a user',
},
{
name: 'Get',
value: 'get',
description: 'Get a user',
action: 'Get a user',
},
{
name: 'List',
value: 'list',
description: 'List users',
action: 'List users',
},
{
name: 'Update',
value: 'update',
description: 'Update a user',
action: 'Update a user',
},
],
default: 'create',
},
{
displayName: 'Operation',
name: 'operation',
type: 'options',
noDataExpression: true,
displayOptions: {
show: {
resource: ['session'],
},
},
options: [
{
name: 'Create',
value: 'create',
description: 'Create a new session',
action: 'Create a session',
},
{
name: 'Delete',
value: 'delete',
description: 'Delete a session',
action: 'Delete a session',
},
{
name: 'Get',
value: 'get',
description: 'Get a session',
action: 'Get a session',
},
{
name: 'List',
value: 'list',
description: 'List sessions',
action: 'List sessions',
},
{
name: 'Update',
value: 'update',
description: 'Update a session',
action: 'Update a session',
},
],
default: 'create',
},
{
displayName: 'Operation',
name: 'operation',
type: 'options',
noDataExpression: true,
displayOptions: {
show: {
resource: ['memory'],
},
},
options: [
{
name: 'Add',
value: 'add',
description: 'Add messages to memory',
action: 'Add memory',
},
{
name: 'Delete',
value: 'delete',
description: 'Delete session memory',
action: 'Delete memory',
},
{
name: 'Get',
value: 'get',
description: 'Get session memory',
action: 'Get memory',
},
],
default: 'get',
},
// User fields
{
displayName: 'User ID',
name: 'userId',
type: 'string',
required: true,
displayOptions: {
show: {
resource: ['user'],
operation: ['create', 'get', 'update', 'delete'],
},
},
default: '',
description: 'The unique identifier for the user',
},
{
displayName: 'Email',
name: 'email',
type: 'string',
placeholder: 'name@email.com',
displayOptions: {
show: {
resource: ['user'],
operation: ['create', 'update'],
},
},
default: '',
description: 'User email address',
},
{
displayName: 'First Name',
name: 'firstName',
type: 'string',
displayOptions: {
show: {
resource: ['user'],
operation: ['create', 'update'],
},
},
default: '',
description: 'User first name',
},
{
displayName: 'Last Name',
name: 'lastName',
type: 'string',
displayOptions: {
show: {
resource: ['user'],
operation: ['create', 'update'],
},
},
default: '',
description: 'User last name',
},
// Session fields
{
displayName: 'Session ID',
name: 'sessionId',
type: 'string',
required: true,
displayOptions: {
show: {
resource: ['session', 'memory'],
},
},
default: '',
description: 'The unique identifier for the session',
},
{
displayName: 'User ID',
name: 'userId',
type: 'string',
displayOptions: {
show: {
resource: ['session'],
operation: ['create', 'update'],
},
},
default: '',
description: 'The user ID to associate with the session',
},
// Memory fields
{
displayName: 'Messages',
name: 'messages',
type: 'json',
required: true,
displayOptions: {
show: {
resource: ['memory'],
operation: ['add'],
},
},
default: '[{"role": "user", "content": "Hello"}, {"role": "assistant", "content": "Hi there!"}]',
description: 'Array of message objects with role and content',
},
{
displayName: 'Metadata',
name: 'metadata',
type: 'json',
displayOptions: {
show: {
resource: ['user', 'session'],
operation: ['create', 'update'],
},
},
default: '{}',
description: 'Additional metadata as JSON object',
},
],
};
}
async execute() {
const items = this.getInputData();
const returnData = [];
const resource = this.getNodeParameter('resource', 0);
const operation = this.getNodeParameter('operation', 0);
const credentials = await this.getCredentials('zepApiStemx-Api');
const baseUrl = credentials.baseUrl;
const apiKey = credentials.apiKey;
for (let i = 0; i < items.length; i++) {
try {
const options = {
headers: {
'Authorization': `Bearer ${apiKey}`,
'Content-Type': 'application/json',
},
returnFullResponse: false,
url: '',
method: 'GET',
};
if (resource === 'user') {
if (operation === 'list') {
options.url = `${baseUrl}/users`;
options.method = 'GET';
}
else if (operation === 'create') {
const userId = this.getNodeParameter('userId', i);
const email = this.getNodeParameter('email', i);
const firstName = this.getNodeParameter('firstName', i);
const lastName = this.getNodeParameter('lastName', i);
const metadata = this.getNodeParameter('metadata', i);
options.url = `${baseUrl}/users`;
options.method = 'POST';
options.body = {
user_id: userId,
email: email || undefined,
first_name: firstName || undefined,
last_name: lastName || undefined,
metadata: metadata ? JSON.parse(metadata) : undefined,
};
}
else if (operation === 'get') {
const userId = this.getNodeParameter('userId', i);
options.url = `${baseUrl}/users/${userId}`;
options.method = 'GET';
}
else if (operation === 'update') {
const userId = this.getNodeParameter('userId', i);
const email = this.getNodeParameter('email', i);
const firstName = this.getNodeParameter('firstName', i);
const lastName = this.getNodeParameter('lastName', i);
const metadata = this.getNodeParameter('metadata', i);
options.url = `${baseUrl}/users/${userId}`;
options.method = 'PUT';
options.body = {
user_id: userId,
email: email || undefined,
first_name: firstName || undefined,
last_name: lastName || undefined,
metadata: metadata ? JSON.parse(metadata) : undefined,
};
}
else if (operation === 'delete') {
const userId = this.getNodeParameter('userId', i);
options.url = `${baseUrl}/users/${userId}`;
options.method = 'DELETE';
}
}
else if (resource === 'session') {
if (operation === 'list') {
options.url = `${baseUrl}/sessions`;
options.method = 'GET';
}
else if (operation === 'create') {
const sessionId = this.getNodeParameter('sessionId', i);
const userId = this.getNodeParameter('userId', i);
const metadata = this.getNodeParameter('metadata', i);
options.url = `${baseUrl}/sessions`;
options.method = 'POST';
options.body = {
session_id: sessionId,
user_id: userId || undefined,
metadata: metadata ? JSON.parse(metadata) : undefined,
};
}
else if (operation === 'get') {
const sessionId = this.getNodeParameter('sessionId', i);
options.url = `${baseUrl}/sessions/${sessionId}`;
options.method = 'GET';
}
else if (operation === 'update') {
const sessionId = this.getNodeParameter('sessionId', i);
const userId = this.getNodeParameter('userId', i);
const metadata = this.getNodeParameter('metadata', i);
options.url = `${baseUrl}/sessions/${sessionId}`;
options.method = 'PUT';
options.body = {
session_id: sessionId,
user_id: userId || undefined,
metadata: metadata ? JSON.parse(metadata) : undefined,
};
}
else if (operation === 'delete') {
const sessionId = this.getNodeParameter('sessionId', i);
options.url = `${baseUrl}/sessions/${sessionId}`;
options.method = 'DELETE';
}
}
else if (resource === 'memory') {
if (operation === 'get') {
const sessionId = this.getNodeParameter('sessionId', i);
options.url = `${baseUrl}/memory/${sessionId}`;
options.method = 'GET';
}
else if (operation === 'add') {
const sessionId = this.getNodeParameter('sessionId', i);
const messages = this.getNodeParameter('messages', i);
options.url = `${baseUrl}/memory`;
options.method = 'POST';
options.body = {
session_id: sessionId,
messages: JSON.parse(messages),
};
}
else if (operation === 'delete') {
const sessionId = this.getNodeParameter('sessionId', i);
options.url = `${baseUrl}/memory/${sessionId}`;
options.method = 'DELETE';
}
}
const responseData = await this.helpers.request(options);
const executionData = this.helpers.constructExecutionMetaData(this.helpers.returnJsonArray(responseData), { itemData: { item: i } });
returnData.push(...executionData);
}
catch (error) {
if (this.continueOnFail()) {
const executionData = this.helpers.constructExecutionMetaData(this.helpers.returnJsonArray({ error: error.message }), { itemData: { item: i } });
returnData.push(...executionData);
continue;
}
throw error;
}
}
return [returnData];
}
}
exports.ZepMemory = ZepMemory;