{"version":3,"file":"taskade.cjs","names":["BaseDocumentLoader","Document"],"sources":["../../../src/document_loaders/web/taskade.ts"],"sourcesContent":["import { getEnvironmentVariable } from \"@langchain/core/utils/env\";\nimport { Document } from \"@langchain/core/documents\";\nimport { BaseDocumentLoader } from \"@langchain/core/document_loaders/base\";\n\n/**\n * Interface representing the parameters for configuring the TaskadeLoader.\n * It includes optional properties for the personal access token and project id.\n */\nexport interface TaskadeLoaderParams {\n  personalAccessToken?: string;\n  projectId: string;\n}\n\n/**\n * Interface representing a Taskade project. It includes properties for the\n * id, text, parentId and completed.\n */\nexport interface TaskadeProject {\n  tasks: Array<{\n    id: string;\n    text: string;\n    parentId: string;\n    completed: boolean;\n  }>;\n}\n\n/**\n * Class representing a document loader for loading Taskade project. It\n * extends the BaseDocumentLoader and implements the TaskadeLoaderParams\n * interface. The constructor takes a config object as a parameter, which\n * contains the personal access token and project ID.\n * @example\n * ```typescript\n * const loader = new TaskadeProjectLoader({\n *   personalAccessToken: \"TASKADE_PERSONAL_ACCESS_TOKEN\",\n *   projectId: \"projectId\",\n * });\n * const docs = await loader.load();\n * ```\n */\nexport class TaskadeProjectLoader\n  extends BaseDocumentLoader\n  implements TaskadeLoaderParams\n{\n  public readonly personalAccessToken?: string;\n\n  public readonly projectId: string;\n\n  private headers: Record<string, string> = {};\n\n  constructor({\n    personalAccessToken = getEnvironmentVariable(\n      \"TASKADE_PERSONAL_ACCESS_TOKEN\"\n    ),\n    projectId,\n  }: TaskadeLoaderParams) {\n    super();\n    this.personalAccessToken = personalAccessToken;\n    this.projectId = projectId;\n\n    if (this.personalAccessToken) {\n      this.headers = {\n        Authorization: `Bearer ${this.personalAccessToken}`,\n      };\n    }\n  }\n\n  /**\n   * Fetches the Taskade project using the Taskade API and returns it as a\n   * TaskadeProject object.\n   * @returns A Promise that resolves to a TaskadeProject object.\n   */\n  private async getTaskadeProject(): Promise<TaskadeProject> {\n    const tasks = [];\n    let after: string | null = null;\n    let hasMoreTasks = true;\n    while (hasMoreTasks) {\n      const queryParamsString: string = new URLSearchParams({\n        limit: \"100\",\n        ...(after == null ? {} : { after }),\n      }).toString();\n      const url = `https://www.taskade.com/api/v1/projects/${this.projectId}/tasks?${queryParamsString}`;\n\n      const response = await fetch(url, { headers: this.headers });\n      const data = await response.json();\n\n      if (!response.ok) {\n        throw new Error(\n          `Unable to get Taskade project: ${response.status} ${JSON.stringify(\n            data\n          )}`\n        );\n      }\n\n      if (!data) {\n        throw new Error(\"Unable to get Taskade project\");\n      }\n\n      if (data.items.length === 0) {\n        hasMoreTasks = false;\n      } else {\n        after = data.items[data.items.length - 1].id;\n      }\n\n      tasks.push(...data.items);\n    }\n\n    return { tasks };\n  }\n\n  /**\n   * Fetches the Taskade project using the Taskade API, creates a Document instance\n   * with the JSON representation of the file as the page content and the\n   * API URL as the metadata, and returns it.\n   * @returns A Promise that resolves to an array of Document instances.\n   */\n  public async load(): Promise<Document[]> {\n    const data = await this.getTaskadeProject();\n\n    const metadata = { projectId: this.projectId };\n    const text = data.tasks.map((t) => t.text).join(\"\\n\");\n\n    return [new Document({ pageContent: text, metadata })];\n  }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAwCA,IAAa,uBAAb,cACUA,sCAAAA,mBAEV;CACE;CAEA;CAEA,UAA0C,EAAE;CAE5C,YAAY,EACV,uBAAA,GAAA,0BAAA,wBACE,gCACD,EACD,aACsB;AACtB,SAAO;AACP,OAAK,sBAAsB;AAC3B,OAAK,YAAY;AAEjB,MAAI,KAAK,oBACP,MAAK,UAAU,EACb,eAAe,UAAU,KAAK,uBAC/B;;;;;;;CASL,MAAc,oBAA6C;EACzD,MAAM,QAAQ,EAAE;EAChB,IAAI,QAAuB;EAC3B,IAAI,eAAe;AACnB,SAAO,cAAc;GACnB,MAAM,oBAA4B,IAAI,gBAAgB;IACpD,OAAO;IACP,GAAI,SAAS,OAAO,EAAE,GAAG,EAAE,OAAO;IACnC,CAAC,CAAC,UAAU;GACb,MAAM,MAAM,2CAA2C,KAAK,UAAU,SAAS;GAE/E,MAAM,WAAW,MAAM,MAAM,KAAK,EAAE,SAAS,KAAK,SAAS,CAAC;GAC5D,MAAM,OAAO,MAAM,SAAS,MAAM;AAElC,OAAI,CAAC,SAAS,GACZ,OAAM,IAAI,MACR,kCAAkC,SAAS,OAAO,GAAG,KAAK,UACxD,KACD,GACF;AAGH,OAAI,CAAC,KACH,OAAM,IAAI,MAAM,gCAAgC;AAGlD,OAAI,KAAK,MAAM,WAAW,EACxB,gBAAe;OAEf,SAAQ,KAAK,MAAM,KAAK,MAAM,SAAS,GAAG;AAG5C,SAAM,KAAK,GAAG,KAAK,MAAM;;AAG3B,SAAO,EAAE,OAAO;;;;;;;;CASlB,MAAa,OAA4B;EACvC,MAAM,OAAO,MAAM,KAAK,mBAAmB;EAE3C,MAAM,WAAW,EAAE,WAAW,KAAK,WAAW;AAG9C,SAAO,CAAC,IAAIC,0BAAAA,SAAS;GAAE,aAFV,KAAK,MAAM,KAAK,MAAM,EAAE,KAAK,CAAC,KAAK,KAAK;GAEX;GAAU,CAAC,CAAC"}