{"version":3,"file":"index.mjs","sources":["../src/errors.ts","../src/API.ts","../src/models/Column.ts","../src/models/utilities.ts","../src/models/PendingRequest.ts","../src/models/Row.ts","../src/models/Table.ts","../src/models/Page.ts","../src/models/Control.ts","../src/models/Doc.ts","../src/index.ts"],"sourcesContent":["// 400\nexport class BadRequestError extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = 'BadRequestError';\n\n    Object.setPrototypeOf(this, BadRequestError.prototype);\n  }\n}\n\n// 401\nexport class UnauthorizedError extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = 'UnauthorizedError';\n\n    Object.setPrototypeOf(this, UnauthorizedError.prototype);\n  }\n}\n\n// 403\nexport class ForbiddenError extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = 'ForbiddenError';\n\n    Object.setPrototypeOf(this, ForbiddenError.prototype);\n  }\n}\n\n// 404\nexport class NotFoundError extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = 'NotFoundError';\n\n    Object.setPrototypeOf(this, NotFoundError.prototype);\n  }\n}\n\n// 410\nexport class GoneError extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = 'GoneError';\n\n    Object.setPrototypeOf(this, GoneError.prototype);\n  }\n}\n\n// 429\nexport class TooManyRequestsError extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = 'TooManyRequestsError';\n\n    Object.setPrototypeOf(this, TooManyRequestsError.prototype);\n  }\n}\n","import axios, { AxiosRequestConfig, AxiosError, Method } from 'axios';\nimport * as Errors from './errors';\n\nclass API {\n  private _axiosInstance: any;\n\n  constructor(token: string) {\n    this._axiosInstance = axios.create({\n      baseURL: 'https://coda.io/apis/v1',\n      headers: { Authorization: `Bearer ${token}` },\n    });\n  }\n\n  async request(\n    url: string,\n    params: any = {},\n    method: Method = 'GET'\n  ): Promise<any> {\n    const options: AxiosRequestConfig = ['POST', 'PUT', 'PATCH'].includes(\n      method.toUpperCase()\n    )\n      ? { url, method, data: params }\n      : { url, method, params };\n    return await this._axiosInstance(options).catch(determineErrorType);\n  }\n\n  async deleteWithBody(url: string, params: any = {}): Promise<any> {\n    const options: AxiosRequestConfig = { url, method: 'DELETE', data: params };\n    return await this._axiosInstance(options).catch(determineErrorType);\n  }\n}\n\nfunction determineErrorType(error: AxiosError) {\n  if (error.response) {\n    switch (error.response.status) {\n      case 400:\n        throw new Errors.BadRequestError(error.response.statusText);\n      case 401:\n        throw new Errors.UnauthorizedError(error.response.statusText);\n      case 403:\n        throw new Errors.ForbiddenError(error.response.statusText);\n      case 404:\n        throw new Errors.NotFoundError(error.response.statusText);\n      case 429:\n        throw new Errors.TooManyRequestsError(error.response.statusText);\n    }\n  }\n\n  throw error; // re-throw\n}\n\nexport default API;\n","class Column {\n  // TODO: possibly need to set calculated to false if the property doesn't exist\n  constructor(data) {\n    // set properties (docId, tableId, id, type, href, name, display, calculated)\n    Object.assign(this, data);\n  }\n}\n\nexport default Column;\n","// formats each row based on whether it is in object or array format\nconst formatRows = (rows: any[]) => {\n  // error handling\n  if (!Array.isArray(rows)) throw new Error('`rows` must be an array');\n  if (!rows.length) throw new Error('Must include at least one row when calling `insertRows`');\n\n  const formattedRows = rows.map((row) => {\n    // detect if array (containing column objects) - the alternative being one object\n    if (Array.isArray(row)) {\n      // detect if rows already have column and value as separate properties\n      const hasBoth = row.some((column) => column.hasOwnProperty('column') && column.hasOwnProperty('value'));\n      if (hasBoth) return { cells: row };\n      throw new Error('A row must either be an array of objects for each column, or else one object of column/value pairs..');\n    }\n\n    // keys are acting as column ID/name\n    const columns: any[] = [];\n\n    Object.keys(row).forEach((column) => {\n      columns.push({ column, value: row[column] });\n    });\n\n    return { cells: columns };\n  });\n\n  return formattedRows;\n};\n\nexport { formatRows };\n","import API from '../API';\n\nclass PendingRequest {\n  API: API;\n  requestId: string;\n  addedRowIds?: string[]\n\n  constructor(API: API, requestId: string, addedRowIds?: string[]) {\n    this.API = API;\n    this.requestId = requestId;\n    if (addedRowIds) this.addedRowIds = addedRowIds;\n  }\n\n  // check to see if request that generated this pending request is completed\n  async isCompleted(): Promise<boolean> {\n    const { data } = await this.API.request(`/mutationStatus/${this.requestId}`);\n    return data.completed;\n  }\n}\n\nexport default PendingRequest;\n","import { formatRows } from './utilities';\nimport API from '../API';\nimport PendingRequest from './PendingRequest';\n\nclass Row {\n  API: API;\n  id?: string;\n  docId?: string;\n  tableId?: string;\n  values?: any;\n\n  constructor(API: API, data: any) {\n    this.API = API;\n    // set properties (docId, tableId, id, type, href, name, index, browserLink, createdAt, updatedAt, values (object))\n    Object.assign(this, data);\n  }\n\n  // format values as key/value pair array instead of as object\n  listValues(): any[] {\n    const values: any[] = [];\n\n    Object.keys(this.values).forEach((column) => {\n      values.push({ column, value: this.values[column] });\n    });\n\n    return values;\n  }\n\n  // params: row (array - required)\n  // https://coda.io/developers/apis/v1#operation/updateRow\n  async update(row: any): Promise<PendingRequest> {\n    const [formattedRow] = formatRows([row]);\n    const params = { row: formattedRow };\n\n    const { data } = await this.API.request(`/docs/${this.docId}/tables/${this.tableId}/rows/${this.id}`, params, 'PUT');\n    return new PendingRequest(this.API, data.requestId);\n  }\n\n  // https://coda.io/developers/apis/v1#operation/deleteRow\n  async delete(): Promise<PendingRequest> {\n    const { data } = await this.API.request(`/docs/${this.docId}/tables/${this.tableId}/rows/${this.id}`, {}, 'DELETE');\n    return new PendingRequest(this.API, data.requestId);\n  }\n}\n\nexport default Row;\n","import Column from './Column';\nimport Row from './Row';\nimport { formatRows } from './utilities';\nimport API from '../API';\nimport PendingRequest from './PendingRequest';\n\nclass Table {\n  API: API;\n  id?: string;\n  docId?: string;\n  name?: string;\n\n  constructor(API: API, data: any) {\n    this.API = API;\n    // set properties (docId, id, type, href, browserLink, name, parent(object),parentTable(object),displayColumn (object), rowCount, createdAt, updatedAt, sorts, layout)\n    Object.assign(this, data);\n  }\n\n  // params: limit, pageToken\n  // https://coda.io/developers/apis/v1#operation/listColumns\n  async listColumns(params: any): Promise<Column[]> {\n    const { data } = await this.API.request(`/docs/${this.docId}/tables/${this.id}/columns`, params);\n    return data.items.map((column) => new Column({ ...column, docId: this.docId, tableId: this.id })); // map all items into Columns\n  }\n\n  // https://coda.io/developers/apis/v1#operation/getColumn\n  async getColumn(columnIdOrName: string): Promise<Column> {\n    const { data } = await this.API.request(`/docs/${this.docId}/tables/${this.id}/columns/${columnIdOrName}`);\n    return new Column({ ...data, docId: this.docId, tableId: this.id });\n  }\n\n  // params: query, useColumnNames, limit, pageToken\n  // https://coda.io/developers/apis/v1#operation/listRows\n  async listRows(params: any): Promise<Row[]> {\n    const { data } = await this.API.request(`/docs/${this.docId}/tables/${this.id}/rows`, params);\n    return data.items.map((row) => new Row(this.API, { ...row, docId: this.docId, tableId: this.id })); // map all items into Rows\n  }\n\n  // params: query, useColumnNames, limit, pageToken\n  // https://coda.io/developers/apis/v1#operation/listRows\n  async listRowsPaginatedByToken(params: any): Promise<{ items: Row[]; token: string }> {\n    const { data } = await this.API.request(`/docs/${this.docId}/tables/${this.id}/rows`, params);\n    const items = data.items.map((row) => new Row(this.API, { ...row, docId: this.docId, tableId: this.id })); // map all items into Rows\n    return { items, token: data.nextPageToken as string };\n  }\n\n  // params: useColumnNames\n  // https://coda.io/developers/apis/v1#operation/getColumn\n  async getRow(rowIdOrName: string, params: any): Promise<Row> {\n    const { data } = await this.API.request(`/docs/${this.docId}/tables/${this.id}/rows/${rowIdOrName}`, params);\n    return new Row(this.API, { ...data, docId: this.docId, tableId: this.id });\n  }\n\n  // upserts rows\n  // params: rows (array - required), keyColumns (array)\n  // https://coda.io/developers/apis/v1#operation/upsertRows\n  async insertRows(rows: any[] = [], keyColumns: any[] = []): Promise<PendingRequest> {\n    const formattedRows = formatRows(rows);\n    const params = { rows: formattedRows, keyColumns };\n\n    const { data } = await this.API.request(`/docs/${this.docId}/tables/${this.id}/rows`, params, 'POST');\n    return new PendingRequest(this.API, data.requestId, data.addedRowIds);\n  }\n\n  // params: row (array - required)\n  // https://coda.io/developers/apis/v1#operation/updateRow\n  async updateRow(rowIdOrName: string, row: any): Promise<PendingRequest> {\n    const [formattedRow] = formatRows([row]);\n    const params = { row: formattedRow };\n\n    const { data } = await this.API.request(`/docs/${this.docId}/tables/${this.id}/rows/${rowIdOrName}`, params, 'PUT');\n    return new PendingRequest(this.API, data.requestId);\n  }\n\n  // https://coda.io/developers/apis/v1#operation/deleteRow\n  async deleteRow(rowIdOrName: string): Promise<PendingRequest> {\n    const { data } = await this.API.request(`/docs/${this.docId}/tables/${this.id}/rows/${rowIdOrName}`, {}, 'DELETE');\n    return new PendingRequest(this.API, data.requestId);\n  }\n\n  // https://coda.io/developers/apis/v1#operation/deleteRows\n  async deleteRows(rowIds: string[]): Promise<PendingRequest> {\n    const params = { rowIds };\n    const { data } = await this.API.deleteWithBody(`/docs/${this.docId}/tables/${this.id}/rows`, params);\n    return new PendingRequest(this.API, data.requestId);\n  }\n}\n\nexport default Table;\n","class Page {\n  constructor(data: any) {\n    // set properties (docId, id, type, href, name, browserLink)\n    Object.assign(this, data);\n  }\n}\n\nexport default Page;\n","class Control {\n  constructor(data: any) {\n    // set properties (docId, id, type, href, name, parent, controlType, value)\n    Object.assign(this, data);\n  }\n}\n\nexport default Control;\n","import Table from './Table';\nimport Section from './Page';\nimport Control from './Control';\nimport API from '../API';\n\nclass Doc {\n  API: API;\n  id?: string;\n\n  constructor(API: API, data: any) {\n    this.API = API;\n    // set properties (id, type, href, browserLink, name, owner, createdAt, updatedAt)\n    Object.assign(this, data);\n  }\n\n  async listSections(params: any): Promise<Section[]> {\n    // params: limit, pageToken\n    // https://coda.io/developers/apis/v1#operation/listSections\n    const { data } = await this.API.request(`/docs/${this.id}/sections`, params);\n    return data.items.map((section) => new Section({ ...section, docId: this.id })); // map all items into sections\n  }\n\n  async getSection(sectionIdOrName: string): Promise<Section> {\n    // https://coda.io/developers/apis/v1#operation/getSection\n    const { data } = await this.API.request(`/docs/${this.id}/sections/${sectionIdOrName}`);\n    return new Section({ ...data, docId: this.id });\n  }\n\n  async listTables(): Promise<Table[]> {\n    // https://coda.io/developers/apis/v1#operation/listTables\n    const { data } = await this.API.request(`/docs/${this.id}/tables`);\n    return data.items.map((table) => new Table(this.API, { ...table, docId: this.id })); // map all items into tables\n  }\n\n  async getTable(tableIdOrName: string): Promise<Table> {\n    // https://coda.io/developers/apis/v1#operation/getTable\n    const { data } = await this.API.request(`/docs/${this.id}/tables/${tableIdOrName}`);\n    return new Table(this.API, { ...data, docId: this.id });\n  }\n\n  async listControls(params: any): Promise<Control[]> {\n    // https://coda.io/developers/apis/v1#operation/listControls\n    const { data } = await this.API.request(`/docs/${this.id}/controls`, params);\n    return data.items.map((control) => new Control({ ...control, docId: this.id })); // map all items into controls\n  }\n\n  async getControl(controlIdOrName: string): Promise<Control> {\n    // https://coda.io/developers/apis/v1#operation/getControl\n    const { data } = await this.API.request(`/docs/${this.id}/controls/${controlIdOrName}`);\n    return new Control({ ...data, docId: this.id });\n  }\n}\n\nexport default Doc;\n","import API from './API';\nimport { Doc, Table, Row, Column, Page, Control, PendingRequest } from './models/index';\nimport { formatRows } from './models/utilities';\nexport * from './errors';\n\nexport class Coda {\n  API: API;\n\n  constructor(token: string) {\n    this.API = new API(token);\n  }\n\n  // returns information about the user\n  async whoAmI(): Promise<any> {\n    const { data } = await this.API.request('/whoami');\n    return data;\n  }\n\n  // gets an array of docs\n  // https://coda.io/developers/apis/v1#operation/listDocs\n  async listDocs(params: any = {}): Promise<Doc[]> {\n    const { data } = await this.API.request('/docs', params);\n    return data.items.map((doc) => new Doc(this.API, doc)); // map all items into docs\n  }\n\n  async getDoc(id: string): Promise<Doc> {\n    const { data } = await this.API.request(`/docs/${id}`);\n    return new Doc(this.API, data);\n  }\n\n  // params: limit, pageToken\n  // https://coda.io/developers/apis/v1#operation/listPages\n  async listPages(docId: string, params: any): Promise<Page[]> {\n    const { data } = await this.API.request(`/docs/${docId}/pages`, params);\n    return data.items.map((page) => new Page({ ...page, docId })); // map all items into Pages\n  }\n\n  // https://coda.io/developers/apis/v1#operation/getPage\n  async getPage(docId: string, pageIdOrName: string): Promise<Page> {\n    const { data } = await this.API.request(`/docs/${docId}/pages/${pageIdOrName}`);\n    return new Page({ ...data, docId });\n  }\n\n  // https://coda.io/developers/apis/v1#operation/listTables\n  async listTables(docId: string): Promise<Table[]> {\n    const { data } = await this.API.request(`/docs/${docId}/tables`);\n    return data.items.map((table) => new Table(this.API, { ...table, docId })); // map all items into tables\n  }\n\n  // https://coda.io/developers/apis/v1#operation/getTable\n  async getTable(docId: string, tableIdOrName: string): Promise<Table> {\n    const { data } = await this.API.request(`/docs/${docId}/tables/${tableIdOrName}`);\n    return new Table(this.API, { ...data, docId });\n  }\n\n  // params: limit, pageToken\n  // https://coda.io/developers/apis/v1#operation/listColumns\n  async listColumns(docId: string, tableId: string, params: any): Promise<Column[]> {\n    const { data } = await this.API.request(`/docs/${docId}/tables/${tableId}/columns`, params);\n    return data.items.map((column) => new Column({ ...column, docId, tableId })); // map all items into Columns\n  }\n\n  // https://coda.io/developers/apis/v1#operation/getColumn\n  async getColumn(docId: string, tableId: string, columnIdOrName: string): Promise<Column> {\n    const { data } = await this.API.request(`/docs/${docId}/tables/${tableId}/columns/${columnIdOrName}`);\n    return new Column({ ...data, docId, tableId });\n  }\n\n  // params: query, useColumnNames, limit, pageToken\n  // https://coda.io/developers/apis/v1#operation/listRows\n  async listRows(docId: string, tableId: string, params: any): Promise<Row[]> {\n    const { data } = await this.API.request(`/docs/${docId}/tables/${tableId}/rows`, params);\n    return data.items.map((row) => new Row(this.API, { ...row, docId, tableId })); // map all items into Rows\n  }\n\n  // params: useColumnNames\n  // https://coda.io/developers/apis/v1#operation/getColumn\n  async getRow(docId: string, tableId: string, rowIdOrName: string, params: any): Promise<Row> {\n    const { data } = await this.API.request(`/docs/${docId}/tables/${tableId}/rows/${rowIdOrName}`, params);\n    return new Row(this.API, { ...data, docId, tableId });\n  }\n\n  // upserts rows\n  // params: rows (array - required), keyColumns (array)\n  // https://coda.io/developers/apis/v1#operation/upsertRows\n  async insertRows(docId: string, tableId: string, rows: any[] = [], keyColumns: any[] = []): Promise<PendingRequest> {\n    const formattedRows = formatRows(rows);\n    const params = { rows: formattedRows, keyColumns };\n\n    const { data } = await this.API.request(`/docs/${docId}/tables/${tableId}/rows`, params, 'POST');\n    return new PendingRequest(this.API, data.requestId, data.addedRowIds);\n  }\n\n  // params: row (array - required)\n  // https://coda.io/developers/apis/v1#operation/updateRow\n  async updateRow(docId: string, tableId: string, rowIdOrName: string, row: any): Promise<PendingRequest> {\n    const [formattedRow] = formatRows([row]);\n    const params = { row: formattedRow };\n\n    const { data } = await this.API.request(`/docs/${docId}/tables/${tableId}/rows/${rowIdOrName}`, params, 'PUT');\n    return new PendingRequest(this.API, data.requestId);\n  }\n\n  // https://coda.io/developers/apis/v1#operation/deleteRow\n  async deleteRow(docId: string, tableId: string, rowIdOrName: string): Promise<PendingRequest> {\n    const { data } = await this.API.request(`/docs/${docId}/tables/${tableId}/rows/${rowIdOrName}`, {}, 'DELETE');\n    return new PendingRequest(this.API, data.requestId);\n  }\n\n  // https://coda.io/developers/apis/v1#operation/deleteRows\n  async deleteRows(docId: string, tableId: string, rowIds: string[]): Promise<PendingRequest> {\n    const params = { rowIds };\n    const { data } = await this.API.deleteWithBody(`/docs/${docId}/tables/${tableId}/rows`, params);\n    return new PendingRequest(this.API, data.requestId);\n  }\n\n  // https://coda.io/developers/apis/v1#operation/getMutationStatus\n  async mutationStatus(requestId: string): Promise<boolean> {\n    const { data } = await this.API.request(`/mutationStatus/${requestId}`);\n    return data.completed;\n  }\n\n  // params: limit, pageToken, sortBy\n  // https://coda.io/developers/apis/v1#operation/listControls\n  async listControls(docId: string, params: any): Promise<Page[]> {\n    const { data } = await this.API.request(`/docs/${docId}/controls`, params);\n    return data.items.map((control) => new Control({ ...control, docId })); // map all items into Pages\n  }\n\n  // https://coda.io/developers/apis/v1#operation/getControl\n  async getControl(docId: string, controlIdOrName: string): Promise<Page> {\n    const { data } = await this.API.request(`/docs/${docId}/controls/${controlIdOrName}`);\n    return new Control({ ...data, docId });\n  }\n}\n"],"names":["BadRequestError","message","_this","name","Object","setPrototypeOf","prototype","Error","UnauthorizedError","_this2","ForbiddenError","_this3","NotFoundError","_this4","GoneError","_this5","TooManyRequestsError","_this6","API","token","this","_axiosInstance","axios","create","baseURL","headers","Authorization","request","url","params","method","options","includes","toUpperCase","data","determineErrorType","deleteWithBody","error","response","status","Errors","statusText","Column","assign","formatRows","rows","Array","isArray","length","map","row","some","column","hasOwnProperty","cells","columns","keys","forEach","push","value","PendingRequest","requestId","addedRowIds","isCompleted","completed","Row","listValues","values","update","docId","tableId","id","Table","listColumns","items","getColumn","columnIdOrName","listRows","listRowsPaginatedByToken","_this8","nextPageToken","getRow","rowIdOrName","_this10","insertRows","keyColumns","formattedRows","_this12","updateRow","_this14","deleteRow","_this16","deleteRows","rowIds","_this18","Page","Control","Doc","listSections","section","Section","getSection","sectionIdOrName","listTables","table","getTable","tableIdOrName","listControls","control","getControl","controlIdOrName","Coda","whoAmI","listDocs","doc","getDoc","listPages","page","getPage","pageIdOrName","_this20","_this22","_this24","_this26","_this28","_this30","mutationStatus"],"mappings":"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"}