{"version":3,"file":"upstash_redis.cjs","names":["BaseListChatMessageHistory","Redis"],"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,6BAAAA,2BAA2B;CAC7E,eAAe;EAAC;EAAa;EAAU;EAAW;EAAgB;CAElE,IAAI,aAAa;AACf,SAAO;GACL,cAAc;GACd,gBAAgB;GACjB;;CAGH;CAEA;CAEA;CAEA,YAAY,QAA6C;AACvD,QAAM,OAAO;EACb,MAAM,EAAE,WAAW,YAAY,QAAQ,WAAW;AAClD,MAAI,OACF,MAAK,SAAS;WACL,OACT,MAAK,SAAS,IAAIC,eAAAA,MAAM,OAAO;MAE/B,OAAM,IAAI,MACR,0FACD;AAEH,OAAK,YAAY;AACjB,OAAK,aAAa;;;;;;CAOpB,MAAM,cAAsC;AAS1C,UAAA,GAAA,yBAAA,kCAPE,MAAM,KAAK,OAAO,OAAsB,KAAK,WAAW,GAAG,GAAG,EAEtB,SAAS,CACV,QACtC,MACC,EAAE,SAAS,KAAA,KAAa,EAAE,KAAK,YAAY,KAAA,EAC9C,CACuD;;;;;;;CAQ1D,MAAM,WAAW,SAAqC;EACpD,MAAM,gBAAA,GAAA,yBAAA,iCAA+C,CAAC,QAAQ,CAAC;AAC/D,QAAM,KAAK,OAAO,MAAM,KAAK,WAAW,KAAK,UAAU,aAAa,GAAG,CAAC;AACxE,MAAI,KAAK,WACP,OAAM,KAAK,OAAO,OAAO,KAAK,WAAW,KAAK,WAAW;;;;;;CAQ7D,MAAM,QAAuB;AAC3B,QAAM,KAAK,OAAO,IAAI,KAAK,UAAU"}