{"version":3,"file":"index.mjs","sources":["../src/index.js"],"sourcesContent":["const axios = require('axios');\nconst Promise = require('bluebird');\nconst { sortedUniqBy } = require('lodash');\nconst queryString = require('query-string');\n\nconst BASE_URL = 'https://api.cognitedata.com';\n\nclass CogniteSDKError extends Error {\n  constructor(message, status) {\n    super(message);\n    this.name = this.constructor.name;\n    this.status = status;\n    if (typeof Error.captureStackTrace === 'function') {\n      Error.captureStackTrace(this, this.constructor);\n    } else {\n      this.stack = new Error(message).stack;\n    }\n  }\n}\n\nconst instance = axios.create({\n  baseUrl: BASE_URL,\n  headers: {},\n});\n\nconst window = global.window || {\n  location: {\n    href: '',\n  },\n};\n\nconst initialOptions = {\n  baseUrl: BASE_URL,\n  project: null,\n  version: '0.5',\n  apiKey: null,\n  withCredentials: false,\n};\n\nlet options = Object.assign({}, initialOptions);\n\nconst apiUrl = () => `api/${options.version}/`;\n\nconst retrieveData = response => {\n  // At the top level, we have the headers; save them so that we can return them\n  // as a sidecar to the `data` object.\n  const { headers } = response;\n  // Not everything is result.data.data, so find the deepest one.\n  let current = response;\n  while (current.data) {\n    current = current.data;\n  }\n  if (\n    current &&\n    typeof current === 'object' &&\n    current.constructor === Object\n  ) {\n    current.headers = headers;\n  }\n  return current;\n};\n\nfunction rawGet(url, params) {\n  return instance({\n    method: 'get',\n    url: `${options.baseUrl}/${url}`,\n    withCredentials: options.withCredentials,\n    params,\n  }).then(retrieveData);\n}\n\nconst getLoginStatus = () => rawGet('login/status');\n\nconst isLoggedIn = route =>\n  getLoginStatus().then(res => {\n    if (res.loggedIn) {\n      return res;\n    }\n    throw new CogniteSDKError(\n      `Can not access ${route}, you are not logged in.`,\n      403\n    );\n  });\n\nfunction get(url, { params } = {}, middleware = false) {\n  if (middleware) {\n    return isLoggedIn(url).then(() => rawGet(url, params));\n  }\n  return rawGet(url, params);\n}\n\nfunction rawPost(url, data) {\n  return instance({\n    method: 'post',\n    url: `${options.baseUrl}/${url}`,\n    data,\n    withCredentials: options.withCredentials,\n  }).then(retrieveData);\n}\n\nfunction post(url, body, middleware = true) {\n  if (middleware) {\n    return isLoggedIn().then(() => rawPost(url, body));\n  }\n  return rawPost(url, body);\n}\n\nfunction rawPut(url, data) {\n  return instance({\n    method: 'put',\n    url: `${options.baseUrl}/${url}`,\n    data,\n    withCredentials: options.withCredentials,\n  }).then(retrieveData);\n}\n\nfunction put(url, body, middleware = true) {\n  if (middleware) {\n    return isLoggedIn().then(() => rawPut(url, body));\n  }\n  return rawPut(url, body);\n}\n\nfunction stringifyIfNeeded(param) {\n  return typeof param === 'string' ? param : JSON.stringify(param);\n}\n\nfunction search(url, { assetIds, assetSubtrees, metadata, ...params } = {}) {\n  return get(url, {\n    params: {\n      ...params,\n      assetIds: stringifyIfNeeded(assetIds),\n      assetSubtrees: stringifyIfNeeded(assetSubtrees),\n      metadata: stringifyIfNeeded(metadata),\n    },\n  });\n}\n\nfunction getLoginUrl({\n  project = options.project,\n  redirectUrl = window.location.href,\n  errorRedirectUrl = window.location.href,\n}) {\n  return get(\n    `login/url`,\n    {\n      params: {\n        project,\n        redirectUrl,\n        errorRedirectUrl,\n      },\n    },\n    false\n  );\n}\n\nfunction setBearerToken(token) {\n  instance.defaults.headers.Authorization = `Bearer ${token}`;\n}\n\n// Pass in url to an empty html file on the same domain as your application\nasync function getAccessTokenFromSession(silentRedirectURL) {\n  if (silentRedirectURL === null) {\n    throw new Error(\n      'No silent redirect url specified. Please pass it as an argument'\n    );\n  }\n\n  // Prevent possible recursiveness\n  if (window != null && window.self === window.top) {\n    const loginUrl = (await getLoginUrl({\n      redirectUrl: silentRedirectURL,\n      errorRedirectUrl: silentRedirectURL,\n    })).url;\n\n    return new Promise((resolve, reject) => {\n      const iframe = document.createElement('iframe');\n      iframe.name = 'cognite-auth-frame';\n      iframe.style = 'width:0;height:0;border:0;border:none;';\n      iframe.onload = () => {\n        try {\n          const qs = queryString.parse(iframe.contentWindow.location.search);\n          if (qs.error == null && qs.access_token != null) {\n            resolve(qs.access_token);\n          } else {\n            reject(new CogniteSDKError(`${qs.error}: ${qs.error_description}`));\n          }\n        } catch (e) {\n          reject(e);\n        } finally {\n          document.body.removeChild(iframe);\n        }\n      };\n      iframe.src = `${loginUrl}&prompt=none`;\n      document.body.appendChild(iframe);\n    });\n  }\n  return null;\n}\n\nfunction configure(opts) {\n  options = Object.assign({}, options, opts);\n  if (options.apiKey) {\n    instance.defaults.headers['Api-Key'] = options.apiKey;\n  }\n\n  return options;\n}\n\nfunction loginWithRedirect({\n  project = options.project,\n  redirectUrl = window.location.href,\n  errorRedirectUrl = window.location.href,\n} = {}) {\n  return getLoginUrl({ project, redirectUrl, errorRedirectUrl }).then(data => {\n    window.location.href = data.url;\n  });\n}\n\nfunction loginWithApiKey(apiKey) {\n  instance.defaults.headers['Api-Key'] = apiKey;\n  return isLoggedIn().catch(() => {\n    delete instance.defaults.headers['Api-Key'];\n    throw new CogniteSDKError(`Could not authenticate.`, 400);\n  });\n}\n\nfunction tagMatching({\n  project = options.project,\n  platform = 'IA',\n  fuzzyThreshold = 0,\n  tagIds = [],\n}) {\n  const body = {\n    tagIds,\n    metadata: {\n      fuzzyThreshold,\n      platform,\n    },\n  };\n  return post(`${apiUrl()}projects/${project}/tagmatching/`, body);\n}\n\nfunction unsetApiKey() {\n  options = Object.assign({}, options, {\n    apiKey: null,\n  });\n  delete instance.defaults.headers['Api-Key'];\n}\n\nfunction logout({ redirectUrl = null } = {}) {\n  return get('logout/url', {\n    params: { redirectUrl },\n  }).then(res => {\n    unsetApiKey();\n    options = initialOptions;\n    return res.url;\n  });\n}\n\nfunction getAsset({ project = options.project, assetId } = {}) {\n  return get(`${apiUrl()}projects/${project}/assets/${assetId}`);\n}\n\nfunction getAssetSubtree({\n  project = options.project,\n  assetId,\n  ...params\n} = {}) {\n  return get(`${apiUrl()}projects/${project}/assets/${assetId}/subtree`, {\n    params,\n  });\n}\n\nfunction getAssets({ project = options.project, ...params } = {}) {\n  return get(`${apiUrl()}projects/${project}/assets/`, { params });\n}\n\nfunction searchAssets({ project = options.project, ...params }) {\n  return search(`${apiUrl()}projects/${project}/assets/search`, params);\n}\n\nfunction getProject({ project = options.project } = {}) {\n  return get(`${apiUrl()}projects/${project}`);\n}\n\nfunction getEvents({ project = options.project, ...params } = {}) {\n  return get(`${apiUrl()}projects/${project}/events`, { params });\n}\n\nfunction getEvent({ project = options.project, id } = {}) {\n  return get(`${apiUrl()}projects/${project}/events/${id}`);\n}\n\nfunction searchEvents({ project = options.project, ...params }) {\n  return search(`${apiUrl()}projects/${project}/events/search`, params);\n}\n\nfunction createEvents({ project = options.project, body }) {\n  return post(\n    `${apiUrl()}projects/${project}/events`,\n    body,\n    true,\n    result => result\n  );\n}\n\nfunction updateEvents({ project = options.project, body }) {\n  return post(\n    `${apiUrl()}projects/${project}/events/update`,\n    body,\n    true,\n    result => result\n  );\n}\n\nfunction getTimeSeries({ project = options.project, ...params } = {}) {\n  return get(`${apiUrl()}projects/${project}/timeseries`, { params });\n}\n\nfunction getDatapoints({ project = options.project, name, ...params } = {}) {\n  return get(\n    `${apiUrl()}projects/${project}/timeseries/data/${encodeURIComponent(\n      name\n    )}`,\n    { params },\n    false\n  );\n}\n\nfunction getDatapointsFrame({ project = options.project, body } = {}) {\n  return post(\n    `${apiUrl()}projects/${project}/timeseries/dataframe`,\n    body,\n    true,\n    result => result\n  );\n}\n\nfunction getLatestDataPoint({\n  project = options.project,\n  name,\n  ...params\n} = {}) {\n  return get(\n    `${apiUrl()}projects/${project}/timeseries/latest/${encodeURIComponent(\n      name\n    )}`,\n    { params }\n  );\n}\n\nfunction getFiles({ project = options.project, ...params } = {}) {\n  return get(`${apiUrl()}projects/${project}/files`, { params });\n}\n\nfunction searchFiles({ project = options.project, ...params }) {\n  return search(`${apiUrl()}projects/${project}/files/search`, params);\n}\n\nfunction getFile({ project = options.project, id } = {}) {\n  return get(`${apiUrl()}projects/${project}/files/${id}`);\n}\n\nfunction getDownloadLink({ project = options.project, id } = {}) {\n  return get(`${apiUrl()}projects/${project}/files/${id}/downloadlink`);\n}\n\nfunction timeseriesSearch({ project = options.project, q, asset, ...rest }) {\n  const qParams = { q, path: [asset], ...rest };\n  const dParams = { description: q, path: [asset], ...rest };\n  return Promise.join(\n    get(\n      `${apiUrl()}projects/${project}/timeseries`,\n      {\n        params: qParams,\n      },\n      false\n    ),\n    get(\n      `${apiUrl()}projects/${project}/timeseries`,\n      {\n        params: dParams,\n      },\n      false\n    )\n  ).then(([a, b]) => sortedUniqBy([...a.items, ...b.items], i => i.tagId));\n}\n\nfunction searchTimeSeries({ project = options.project, ...params }) {\n  return search(`${apiUrl()}projects/${project}/timeseries/search`, params);\n}\n\nfunction getTablesInDatabase({\n  apiKey = options.apiKey,\n  project = options.project,\n  dbName,\n}) {\n  instance.defaults.headers['Api-Key'] = apiKey;\n  return get(`${apiUrl()}projects/${project}/raw/${dbName}`);\n}\n\nfunction createTable({\n  apiKey = options.apiKey,\n  project = options.project,\n  table,\n  dbName,\n}) {\n  instance.defaults.headers['Api-Key'] = apiKey;\n  const body = {\n    items: [{ tableName: table }],\n  };\n  return post(`${apiUrl()}projects/${project}/raw/${dbName}/create`, body);\n}\n\nmodule.exports = {\n  loginWithRedirect,\n  getLoginStatus,\n  configure,\n  logout,\n  getAssets,\n  getAssetSubtree,\n  getAsset,\n  searchAssets,\n  loginWithApiKey,\n  unsetApiKey,\n  getProject,\n  getEvents,\n  getEvent,\n  searchEvents,\n  createEvents,\n  updateEvents,\n  getLatestDataPoint,\n  getTimeSeries,\n  getDatapointsFrame,\n  get,\n  post,\n  put,\n  getDatapoints,\n  tagMatching,\n  getFiles,\n  getFile,\n  searchFiles,\n  getDownloadLink,\n  timeseriesSearch,\n  searchTimeSeries,\n  getAccessTokenFromSession,\n  setBearerToken,\n  getTablesInDatabase,\n  createTable,\n  instance,\n};\n"],"names":["const","axios","require","Promise","queryString","BASE_URL","CogniteSDKError","message","status","super","this","name","constructor","Error","captureStackTrace","stack","instance","create","baseUrl","headers","window","global","location","href","initialOptions","project","version","apiKey","withCredentials","options","Object","assign","apiUrl","retrieveData","response","current","data","rawGet","url","params","method","then","getLoginStatus","isLoggedIn","route","res","loggedIn","get","ref","middleware","rawPost","post","body","rawPut","stringifyIfNeeded","param","JSON","stringify","search","assetIds","assetSubtrees","metadata","getLoginUrl","redirectUrl","errorRedirectUrl","unsetApiKey","defaults","module","exports","opts","assetId","catch","id","encodeURIComponent","tagIds","fuzzyThreshold","platform","qParams","q","path","asset","rest","dParams","description","join","sortedUniqBy","items","i","tagId","silentRedirectURL","self","top","loginUrl","$await_3","resolve","reject","iframe","document","createElement","style","onload","qs","parse","contentWindow","error","access_token","e","removeChild","src","appendChild","token","Authorization","dbName","tableName","table"],"mappings":"2HAAAA,IAAMC,EAAQC,QAAQ,SAChBC,EAAUD,QAAQ,cACCA,QAAQ,uBAC3BE,EAAcF,QAAQ,gBAEtBG,EAAW,8BAEXC,cACJ,WAAYC,EAASC,GACnBC,YAAMF,GACNG,KAAKC,KAAOD,KAAKE,YAAYD,KAC7BD,KAAKF,OAASA,EACyB,mBAA5BK,EAAMC,kBACfD,EAAMC,kBAAkBJ,KAAMA,KAAKE,aAEnCF,KAAKK,MAAQ,IAAIF,EAAMN,GAASQ,6FARRF,OAaxBG,EAAWf,EAAMgB,QACrBC,QAASb,EACTc,aAGIC,EAASC,OAAOD,SACpBE,UACEC,KAAM,KAIJC,GACJN,QAASb,EACToB,QAAS,KACTC,QAAS,MACTC,OAAQ,KACRC,iBAAiB,GAGfC,EAAUC,OAAOC,UAAWP,GAE1BQ,0BAAsBH,eAEtBI,WAAeC,GAMnB,IAHQ,gBAEJC,EAAUD,EACPC,EAAQC,MACbD,EAAUA,EAAQC,KASpB,OANED,GACmB,iBAAZA,GACPA,EAAQvB,cAAgBkB,SAExBK,EAAQhB,QAAUA,GAEbgB,GAGT,SAASE,EAAOC,EAAKC,GACnB,OAAOvB,GACLwB,OAAQ,MACRF,IAAQT,cAAmBS,EAC3BV,gBAAiBC,EAAQD,uBACzBW,IACCE,KAAKR,GAGVjC,IAAM0C,oBAAuBL,EAAO,iBAE9BM,WAAaC,UACjBF,IAAiBD,cAAKI,GACpB,GAAIA,EAAIC,SACN,OAAOD,EAET,MAAM,IAAIvC,oBACUsC,6BAClB,QAIN,SAASG,EAAIT,EAAKU,EAAiBC,qCACjC,uBAD8C,GAC1CA,EACKN,EAAWL,GAAKG,uBAAWJ,EAAOC,EAAKC,KAEzCF,EAAOC,EAAKC,GAGrB,SAASW,EAAQZ,EAAKF,GACpB,OAAOpB,GACLwB,OAAQ,OACRF,IAAQT,cAAmBS,OAC3BF,EACAR,gBAAiBC,EAAQD,kBACxBa,KAAKR,GAGV,SAASkB,EAAKb,EAAKc,EAAMH,GACvB,uBADoC,GAChCA,EACKN,IAAaF,uBAAWS,EAAQZ,EAAKc,KAEvCF,EAAQZ,EAAKc,GAGtB,SAASC,EAAOf,EAAKF,GACnB,OAAOpB,GACLwB,OAAQ,MACRF,IAAQT,cAAmBS,OAC3BF,EACAR,gBAAiBC,EAAQD,kBACxBa,KAAKR,GAUV,SAASqB,EAAkBC,GACzB,MAAwB,iBAAVA,EAAqBA,EAAQC,KAAKC,UAAUF,GAG5D,SAASG,EAAOpB,EAAKU,qHACnB,OAAOD,EAAIT,GACTC,OAAQT,oBAEN6B,SAAUL,EAAkBK,GAC5BC,cAAeN,EAAkBM,GACjCC,SAAUP,EAAkBO,OAKlC,SAASC,EAAYd,kCACTnB,EAAQJ,4CACJL,EAAOE,SAASC,+BAG9B,sBAFmBH,EAAOE,SAASC,MAE5BwB,EACL,aAEER,gBACEd,cACAsC,mBACAC,KAGJ,GA2FJ,SAASC,IACPpC,EAAUC,OAAOC,UAAWF,GAC1BF,OAAQ,cAEHX,EAASkD,SAAS/C,QAAQ,WAwKnCgD,OAAOC,2BA9MP,SAA2BpB,qDACfnB,EAAQJ,4CACJL,EAAOE,SAASC,+BAG9B,sBAFmBH,EAAOE,SAASC,MAE5BuC,WAAcrC,cAASsC,mBAAaC,IAAoBvB,cAAKL,GAClEhB,EAAOE,SAASC,KAAOa,EAAKE,sBA0M9BI,YAzNF,SAAmB2B,GAMjB,OALAxC,EAAUC,OAAOC,UAAWF,EAASwC,IACzB1C,SACVX,EAASkD,SAAS/C,QAAQ,WAAaU,EAAQF,QAG1CE,UA4CT,SAAgBmB,0CACd,sBAD8B,MACvBD,EAAI,cACTR,oBAAUwB,KACTtB,cAAKI,GAGN,OAFAoB,IACApC,EAAUL,EACHqB,EAAIP,iBAkBf,SAAmBU,qDAAYnB,EAAQJ,gCACrC,OAAOsB,EAAOf,gBAAoBP,qBAAqBc,qBAXzD,SAAyBS,qDACbnB,EAAQJ,sDAIlB,OAAOsB,EAAOf,gBAAoBP,aAAkB6C,qBAClD/B,cAVJ,SAAkBS,qDAAYnB,EAAQJ,yBACpC,OAAOsB,EAAOf,gBAAoBP,aAAkB6C,iBAiBtD,SAAsBtB,kCAAYnB,EAAQJ,gCACxC,OAAOiC,EAAU1B,gBAAoBP,mBAAyBc,oBA5DhE,SAAyBZ,GAEvB,OADAX,EAASkD,SAAS/C,QAAQ,WAAaQ,EAChCgB,IAAa4B,iBAElB,aADOvD,EAASkD,SAAS/C,QAAQ,WAC3B,IAAIb,EAAgB,0BAA2B,oBA0MvD2D,aA/IF,SAAoBjB,sCAClB,sBAD8BnB,EAAQJ,SAC/BsB,EAAOf,gBAAoBP,cAGpC,SAAmBuB,qDAAYnB,EAAQJ,gCACrC,OAAOsB,EAAOf,gBAAoBP,oBAAoBc,cAGxD,SAAkBS,qDAAYnB,EAAQJ,oBACpC,OAAOsB,EAAOf,gBAAoBP,aAAkB+C,iBAGtD,SAAsBxB,kCAAYnB,EAAQJ,gCACxC,OAAOiC,EAAU1B,gBAAoBP,mBAAyBc,iBAGhE,SAAsBS,kCAAYnB,EAAQJ,sBACxC,OAAO0B,EACFnB,gBAAoBP,YACvB2B,GACA,iBAKJ,SAAsBJ,kCAAYnB,EAAQJ,sBACxC,OAAO0B,EACFnB,gBAAoBP,mBACvB2B,GACA,uBA4BJ,SAA4BJ,qDAChBnB,EAAQJ,gDAIlB,OAAOsB,EACFf,gBAAoBP,wBAA6BgD,mBAClD9D,WAEA4B,mBAhCN,SAAuBS,qDAAYnB,EAAQJ,gCACzC,OAAOsB,EAAOf,gBAAoBP,wBAAwBc,wBAa5D,SAA4BS,qDAAYnB,EAAQJ,sBAC9C,OAAO0B,EACFnB,gBAAoBP,0BACvB2B,GACA,QAqGFL,OACAI,MAhUF,SAAab,EAAKc,EAAMH,GACtB,uBADmC,GAC/BA,EACKN,IAAaF,uBAAWY,EAAOf,EAAKc,KAEtCC,EAAOf,EAAKc,kBAwMrB,SAAuBJ,qDAAYnB,EAAQJ,gDACzC,OAAOsB,EACFf,gBAAoBP,sBAA2BgD,mBAChD9D,WAEA4B,IACF,gBAnGJ,SAAqBS,kCACTnB,EAAQJ,yCACP,4CACM,qCAGjBzB,IAAMoD,UACJsB,EACAb,yBACEc,WACAC,IAGJ,OAAOzB,EAAQnB,gBAAoBP,kBAAwB2B,aAgH7D,SAAkBJ,qDAAYnB,EAAQJ,gCACpC,OAAOsB,EAAOf,gBAAoBP,mBAAmBc,aAOvD,SAAiBS,qDAAYnB,EAAQJ,oBACnC,OAAOsB,EAAOf,gBAAoBP,YAAiB+C,gBALrD,SAAqBxB,kCAAYnB,EAAQJ,gCACvC,OAAOiC,EAAU1B,gBAAoBP,kBAAwBc,oBAO/D,SAAyBS,qDAAYnB,EAAQJ,oBAC3C,OAAOsB,EAAOf,gBAAoBP,YAAiB+C,qCAGrD,SAA0BxB,kCAAYnB,EAAQJ,4DACtCoD,EAAU/C,oBAAEgD,EAAGC,MAAOC,IAAQC,GAC9BC,EAAUpD,kBAAEqD,YAAaL,EAAGC,MAAOC,IAAQC,GACjD,OAAO9E,EAAQiF,KACbrC,EACKf,gBAAoBP,iBAErBc,OAAQsC,IAEV,GAEF9B,EACKf,gBAAoBP,iBAErBc,OAAQ2C,IAEV,IAEFzC,cAAMO,UAAWqC,OAAmBC,kBAAYA,gBAAQC,UAAKA,EAAEC,4BAGnE,SAA0BxC,kCAAYnB,EAAQJ,gCAC5C,OAAOiC,EAAU1B,gBAAoBP,uBAA6Bc,8BArOpE,SAAyCkD,GAAzC,2BACE,OAA0B,OAAtBA,IACI,IAAI5E,MACR,oEAKU,MAAVO,GAAkBA,EAAOsE,OAAStE,EAAOuE,IACnB7B,GACtBC,YAAa0B,EACbzB,iBAAkByB,IAFFhD,qBAKlB,OALMmD,EAAYC,EAGdvD,MAEG,IAAInC,WAAS2F,EAASC,GAC3B/F,IAAMgG,EAASC,SAASC,cAAc,UACtCF,EAAOrF,KAAO,qBACdqF,EAAOG,MAAQ,yCACfH,EAAOI,kBACL,IACEpG,IAAMqG,EAAKjG,EAAYkG,MAAMN,EAAOO,cAAcjF,SAASoC,QAC3C,MAAZ2C,EAAGG,OAAoC,MAAnBH,EAAGI,aACzBX,EAAQO,EAAGI,cAEXV,EAAO,IAAIzF,EAAmB+F,aAAaA,4BAEtCK,GACPX,EAAOW,WAEPT,SAAS7C,KAAKuD,YAAYX,KAG9BA,EAAOY,IAAMhB,iBACbK,SAAS7C,KAAKyD,YAAYb,kCAGvB,8BAzCT,SAAwBc,GACtB9F,EAASkD,SAAS/C,QAAQ4F,cAAgB,UAAUD,uBA4OtD,SAA6B9D,iCAClBnB,EAAQF,uCACPE,EAAQJ,wBAIlB,OADAT,EAASkD,SAAS/C,QAAQ,WAAaQ,EAChCoB,EAAOf,gBAAoBP,UAAeuF,gBAGnD,SAAqBhE,iCACVnB,EAAQF,uCACPE,EAAQJ,kCAIlBT,EAASkD,SAAS/C,QAAQ,WAAaQ,EACvC3B,IAAMoD,GACJkC,QAAU2B,UAAWC,KAEvB,OAAO/D,EAAQnB,gBAAoBP,UAAeuF,YAAiB5D,aAsCnEpC"}