{"version":3,"file":"upstash_redis.cjs","names":["BaseListChatMessageHistory","fields: UpstashRedisChatMessageHistoryInput","Redis","rawStoredMessages: StoredMessage[]","message: BaseMessage"],"sources":["../../../src/stores/message/upstash_redis.ts"],"sourcesContent":["import { Redis, type RedisConfigNodejs } from \"@upstash/redis\";\nimport { BaseListChatMessageHistory } from \"@langchain/core/chat_history\";\nimport {\n  BaseMessage,\n  StoredMessage,\n  mapChatMessagesToStoredMessages,\n  mapStoredMessagesToChatMessages,\n} from \"@langchain/core/messages\";\n\n/**\n * Type definition for the input parameters required to initialize an\n * instance of the UpstashRedisChatMessageHistory class.\n */\nexport type UpstashRedisChatMessageHistoryInput = {\n  sessionId: string;\n  sessionTTL?: number;\n  config?: RedisConfigNodejs;\n  client?: Redis;\n};\n\n/**\n * Class used to store chat message history in Redis. It provides methods\n * to add, get, and clear messages.\n */\nexport class UpstashRedisChatMessageHistory extends BaseListChatMessageHistory {\n  lc_namespace = [\"langchain\", \"stores\", \"message\", \"upstash_redis\"];\n\n  get lc_secrets() {\n    return {\n      \"config.url\": \"UPSTASH_REDIS_REST_URL\",\n      \"config.token\": \"UPSTASH_REDIS_REST_TOKEN\",\n    };\n  }\n\n  public client: Redis;\n\n  private sessionId: string;\n\n  private sessionTTL?: number;\n\n  constructor(fields: UpstashRedisChatMessageHistoryInput) {\n    super(fields);\n    const { sessionId, sessionTTL, config, client } = fields;\n    if (client) {\n      this.client = client;\n    } else if (config) {\n      this.client = new Redis(config);\n    } else {\n      throw new Error(\n        `Upstash Redis message stores require either a config object or a pre-configured client.`\n      );\n    }\n    this.sessionId = sessionId;\n    this.sessionTTL = sessionTTL;\n  }\n\n  /**\n   * Retrieves the chat messages from the Redis database.\n   * @returns An array of BaseMessage instances representing the chat history.\n   */\n  async getMessages(): Promise<BaseMessage[]> {\n    const rawStoredMessages: StoredMessage[] =\n      await this.client.lrange<StoredMessage>(this.sessionId, 0, -1);\n\n    const orderedMessages = rawStoredMessages.reverse();\n    const previousMessages = orderedMessages.filter(\n      (x): x is StoredMessage =>\n        x.type !== undefined && x.data.content !== undefined\n    );\n    return mapStoredMessagesToChatMessages(previousMessages);\n  }\n\n  /**\n   * Adds a new message to the chat history in the Redis database.\n   * @param message The message to be added to the chat history.\n   * @returns Promise resolving to void.\n   */\n  async addMessage(message: BaseMessage): Promise<void> {\n    const messageToAdd = mapChatMessagesToStoredMessages([message]);\n    await this.client.lpush(this.sessionId, JSON.stringify(messageToAdd[0]));\n    if (this.sessionTTL) {\n      await this.client.expire(this.sessionId, this.sessionTTL);\n    }\n  }\n\n  /**\n   * Deletes all messages from the chat history in the Redis database.\n   * @returns Promise resolving to void.\n   */\n  async clear(): Promise<void> {\n    await this.client.del(this.sessionId);\n  }\n}\n"],"mappings":";;;;;;;;;;;;AAwBA,IAAa,iCAAb,cAAoDA,yDAA2B;CAC7E,eAAe;EAAC;EAAa;EAAU;EAAW;CAAgB;CAElE,IAAI,aAAa;AACf,SAAO;GACL,cAAc;GACd,gBAAgB;EACjB;CACF;CAED,AAAO;CAEP,AAAQ;CAER,AAAQ;CAER,YAAYC,QAA6C;EACvD,MAAM,OAAO;EACb,MAAM,EAAE,WAAW,YAAY,QAAQ,QAAQ,GAAG;AAClD,MAAI,QACF,KAAK,SAAS;WACL,QACT,KAAK,SAAS,IAAIC,sBAAM;MAExB,OAAM,IAAI,MACR,CAAC,uFAAuF,CAAC;EAG7F,KAAK,YAAY;EACjB,KAAK,aAAa;CACnB;;;;;CAMD,MAAM,cAAsC;EAC1C,MAAMC,oBACJ,MAAM,KAAK,OAAO,OAAsB,KAAK,WAAW,GAAG,GAAG;EAEhE,MAAM,kBAAkB,kBAAkB,SAAS;EACnD,MAAM,mBAAmB,gBAAgB,OACvC,CAAC,MACC,EAAE,SAAS,UAAa,EAAE,KAAK,YAAY,OAC9C;AACD,wEAAuC,iBAAiB;CACzD;;;;;;CAOD,MAAM,WAAWC,SAAqC;EACpD,MAAM,8EAA+C,CAAC,OAAQ,EAAC;EAC/D,MAAM,KAAK,OAAO,MAAM,KAAK,WAAW,KAAK,UAAU,aAAa,GAAG,CAAC;AACxE,MAAI,KAAK,YACP,MAAM,KAAK,OAAO,OAAO,KAAK,WAAW,KAAK,WAAW;CAE5D;;;;;CAMD,MAAM,QAAuB;EAC3B,MAAM,KAAK,OAAO,IAAI,KAAK,UAAU;CACtC;AACF"}