IF YOU WOULD LIKE TO GET AN ACCOUNT, please write an email to s dot adaszewski at gmail dot com. User accounts are meant only to report issues and/or generate pull requests. This is a purpose-specific Git hosting for ADARED projects. Thank you for your understanding!
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

52 lines
1.4KB

  1. import wbApplyPromiseOrdering from 'wb-apply-promise-ordering';
  2. const requestPromiseOrdering = {};
  3. function makeArvadosRequest(arvHost, arvToken, endpoint, params={}) {
  4. const defaultParams = {
  5. 'method': 'GET',
  6. 'data': null,
  7. 'contentType': 'application/json;charset=utf-8',
  8. 'responseType': 'json',
  9. 'useSsl': true,
  10. 'requireToken': true,
  11. 'onProgress': () => {}
  12. };
  13. Object.keys(defaultParams).map(k => (params[k] =
  14. (k in params ? params[k] : defaultParams[k])));
  15. let { method, data, contentType, responseType,
  16. useSsl, requireToken, onProgress } = params;
  17. if (!(arvHost && (arvToken || !requireToken)))
  18. return new Promise((accept, reject) => reject());
  19. let xhr = new XMLHttpRequest();
  20. xhr.open(method, (useSsl ? 'https://' : 'http://') + arvHost + endpoint);
  21. if (arvToken)
  22. xhr.setRequestHeader('Authorization', 'OAuth2 ' + arvToken);
  23. if (data !== null)
  24. xhr.setRequestHeader('Content-Type', contentType);
  25. xhr.responseType = responseType;
  26. xhr.onprogress = onProgress;
  27. let prom = new Promise((accept, reject) => {
  28. xhr.onreadystatechange = () => {
  29. if (xhr.readyState !== 4)
  30. return;
  31. if (xhr.status !== 200)
  32. reject(xhr);
  33. else
  34. accept(xhr);
  35. };
  36. xhr.send(data);
  37. });
  38. prom = wbApplyPromiseOrdering(prom, requestPromiseOrdering);
  39. return prom;
  40. }
  41. export default makeArvadosRequest;