@prisme.ai/sdk 1.0.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,12 +3,47 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var _tslib = require('../../../_virtual/_tslib.js');
6
+ var utils = require('../utils.js');
6
7
 
7
8
  var UsersEndpoint = /** @class */ (function () {
8
9
  function UsersEndpoint(id, api) {
9
10
  this.id = id;
10
11
  this.api = api;
11
12
  }
13
+ UsersEndpoint.prototype.update = function (data) {
14
+ return _tslib.__awaiter(this, void 0, void 0, function () {
15
+ return _tslib.__generator(this, function (_a) {
16
+ switch (_a.label) {
17
+ case 0:
18
+ if (!utils.isDataURL(data.photo)) return [3 /*break*/, 2];
19
+ return [4 /*yield*/, this.updatePhoto(data.photo)];
20
+ case 1:
21
+ _a.sent();
22
+ delete data.photo;
23
+ _a.label = 2;
24
+ case 2: return [4 /*yield*/, this.api.patch('/user', data)];
25
+ case 3: return [2 /*return*/, _a.sent()];
26
+ }
27
+ });
28
+ });
29
+ };
30
+ UsersEndpoint.prototype.updatePhoto = function (photo) {
31
+ return _tslib.__awaiter(this, void 0, void 0, function () {
32
+ var formData;
33
+ return _tslib.__generator(this, function (_a) {
34
+ switch (_a.label) {
35
+ case 0:
36
+ if (!utils.isDataURL(photo)) {
37
+ throw new Error('Photo must be a dataurl file');
38
+ }
39
+ formData = new FormData();
40
+ formData.append.apply(formData, _tslib.__spreadArray(['photo'], utils.dataURItoBlob(photo), false));
41
+ return [4 /*yield*/, this.api.post("/user/photo", formData)];
42
+ case 1: return [2 /*return*/, _a.sent()];
43
+ }
44
+ });
45
+ });
46
+ };
12
47
  UsersEndpoint.prototype.setMeta = function (k, v) {
13
48
  return _tslib.__awaiter(this, void 0, void 0, function () {
14
49
  var _a;
@@ -17,9 +52,7 @@ var UsersEndpoint = /** @class */ (function () {
17
52
  case 0: return [4 /*yield*/, this.api.post("/user/meta", (_a = {},
18
53
  _a[k] = v,
19
54
  _a))];
20
- case 1:
21
- _b.sent();
22
- return [2 /*return*/];
55
+ case 1: return [2 /*return*/, _b.sent()];
23
56
  }
24
57
  });
25
58
  });
@@ -29,9 +62,27 @@ var UsersEndpoint = /** @class */ (function () {
29
62
  return _tslib.__generator(this, function (_a) {
30
63
  switch (_a.label) {
31
64
  case 0: return [4 /*yield*/, this.api.delete("/user/meta/".concat(k))];
32
- case 1:
33
- _a.sent();
34
- return [2 /*return*/];
65
+ case 1: return [2 /*return*/, _a.sent()];
66
+ }
67
+ });
68
+ });
69
+ };
70
+ UsersEndpoint.prototype.sendDeleteValidation = function () {
71
+ return _tslib.__awaiter(this, void 0, void 0, function () {
72
+ return _tslib.__generator(this, function (_a) {
73
+ switch (_a.label) {
74
+ case 0: return [4 /*yield*/, this.api.delete("/user")];
75
+ case 1: return [2 /*return*/, _a.sent()];
76
+ }
77
+ });
78
+ });
79
+ };
80
+ UsersEndpoint.prototype.delete = function (token) {
81
+ return _tslib.__awaiter(this, void 0, void 0, function () {
82
+ return _tslib.__generator(this, function (_a) {
83
+ switch (_a.label) {
84
+ case 0: return [4 /*yield*/, this.api.delete("/users/".concat(this.id, "?token=").concat(token))];
85
+ case 1: return [2 /*return*/, _a.sent()];
35
86
  }
36
87
  });
37
88
  });
@@ -2,6 +2,9 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
+ var _tslib = require('../../../_virtual/_tslib.js');
6
+ var ImportProcessing = require('../ImportProcessing.js');
7
+ var utils = require('../utils.js');
5
8
  var workspacesVersions = require('./workspacesVersions.js');
6
9
 
7
10
  var WorkspacesEndpoint = /** @class */ (function () {
@@ -16,6 +19,124 @@ var WorkspacesEndpoint = /** @class */ (function () {
16
19
  enumerable: false,
17
20
  configurable: true
18
21
  });
22
+ WorkspacesEndpoint.prototype.update = function (workspace) {
23
+ return _tslib.__awaiter(this, void 0, void 0, function () {
24
+ var _a, _b, _c;
25
+ return _tslib.__generator(this, function (_d) {
26
+ switch (_d.label) {
27
+ case 0:
28
+ _b = (_a = this.api).patch;
29
+ _c = ["/workspaces/".concat(this.id)];
30
+ return [4 /*yield*/, this.api.replaceAllImagesData(workspace, this.id)];
31
+ case 1: return [4 /*yield*/, _b.apply(_a, _c.concat([_d.sent()]))];
32
+ case 2: return [2 /*return*/, _d.sent()];
33
+ }
34
+ });
35
+ });
36
+ };
37
+ WorkspacesEndpoint.prototype.delete = function () {
38
+ return _tslib.__awaiter(this, void 0, void 0, function () {
39
+ return _tslib.__generator(this, function (_a) {
40
+ switch (_a.label) {
41
+ case 0: return [4 /*yield*/, this.api.delete("/workspaces/".concat(this.id))];
42
+ case 1: return [2 /*return*/, _a.sent()];
43
+ }
44
+ });
45
+ });
46
+ };
47
+ WorkspacesEndpoint.prototype.uploadFiles = function (files, opts) {
48
+ return _tslib.__awaiter(this, void 0, void 0, function () {
49
+ var formData, e_1;
50
+ return _tslib.__generator(this, function (_a) {
51
+ switch (_a.label) {
52
+ case 0:
53
+ formData = new FormData();
54
+ (Array.isArray(files) ? files : [files]).forEach(function (file) {
55
+ try {
56
+ formData.append.apply(formData, _tslib.__spreadArray(['file'], utils.dataURItoBlob(file), false));
57
+ }
58
+ catch (_a) { }
59
+ });
60
+ if (opts === null || opts === void 0 ? void 0 : opts.expiresAfter) {
61
+ formData.append('expiresAfter', "".concat(opts === null || opts === void 0 ? void 0 : opts.expiresAfter));
62
+ }
63
+ if (typeof (opts === null || opts === void 0 ? void 0 : opts.public) === 'boolean') {
64
+ formData.append('public', "".concat(opts === null || opts === void 0 ? void 0 : opts.public));
65
+ }
66
+ if (typeof (opts === null || opts === void 0 ? void 0 : opts.shareToken) === 'boolean') {
67
+ formData.append('shareToken', "".concat(opts === null || opts === void 0 ? void 0 : opts.shareToken));
68
+ }
69
+ _a.label = 1;
70
+ case 1:
71
+ _a.trys.push([1, 3, , 4]);
72
+ return [4 /*yield*/, this.api.post("/workspaces/".concat(this.id, "/files"), formData)];
73
+ case 2: return [2 /*return*/, _a.sent()];
74
+ case 3:
75
+ e_1 = _a.sent();
76
+ console.error(e_1);
77
+ return [3 /*break*/, 4];
78
+ case 4: return [2 /*return*/, []];
79
+ }
80
+ });
81
+ });
82
+ };
83
+ WorkspacesEndpoint.prototype.listAppInstances = function () {
84
+ return _tslib.__awaiter(this, void 0, void 0, function () {
85
+ return _tslib.__generator(this, function (_a) {
86
+ switch (_a.label) {
87
+ case 0: return [4 /*yield*/, this.api.get("/workspaces/".concat(this.id, "/apps"))];
88
+ case 1: return [2 /*return*/, _a.sent()];
89
+ }
90
+ });
91
+ });
92
+ };
93
+ WorkspacesEndpoint.prototype.getUsage = function (_a) {
94
+ var _b = _a === void 0 ? {} : _a, afterDate = _b.afterDate, beforeDate = _b.beforeDate, details = _b.details;
95
+ return _tslib.__awaiter(this, void 0, void 0, function () {
96
+ var params;
97
+ return _tslib.__generator(this, function (_c) {
98
+ params = new URLSearchParams(utils.removedUndefinedProperties({
99
+ afterDate: "".concat(afterDate || ''),
100
+ beforeDate: "".concat(beforeDate || ''),
101
+ details: "".concat(details || ''),
102
+ }, true));
103
+ return [2 /*return*/, this.api.get("/workspaces/".concat(this.id, "/usage?").concat(params.toString()))];
104
+ });
105
+ });
106
+ };
107
+ WorkspacesEndpoint.prototype.importArchive = function (archive) {
108
+ return _tslib.__awaiter(this, void 0, void 0, function () {
109
+ var _this = this;
110
+ return _tslib.__generator(this, function (_a) {
111
+ return [2 /*return*/, new Promise(function (resolve) {
112
+ var fileReader = new FileReader();
113
+ fileReader.addEventListener('load', function (_a) {
114
+ var target = _a.target;
115
+ return _tslib.__awaiter(_this, void 0, void 0, function () {
116
+ var file, formData, result;
117
+ return _tslib.__generator(this, function (_b) {
118
+ switch (_b.label) {
119
+ case 0:
120
+ file = target === null || target === void 0 ? void 0 : target.result;
121
+ formData = new FormData();
122
+ formData.append.apply(formData, _tslib.__spreadArray(['archive'], utils.dataURItoBlob(file), false));
123
+ return [4 /*yield*/, this.api.post("/workspaces/".concat(this.id, "/import"), formData)];
124
+ case 1:
125
+ result = _b.sent();
126
+ if (result.processing) {
127
+ throw new ImportProcessing.ImportProcessingError(result);
128
+ }
129
+ resolve(result);
130
+ return [2 /*return*/];
131
+ }
132
+ });
133
+ });
134
+ });
135
+ fileReader.readAsDataURL(archive);
136
+ })];
137
+ });
138
+ });
139
+ };
19
140
  return WorkspacesEndpoint;
20
141
  }());
21
142
 
@@ -10,10 +10,10 @@ var WorkspacesVersionsEndpoint = /** @class */ (function () {
10
10
  this.api = api;
11
11
  }
12
12
  WorkspacesVersionsEndpoint.prototype.create = function (version) {
13
- this.api.post("/workspaces/".concat(this.workspaceId, "/versions"), version);
13
+ return this.api.post("/workspaces/".concat(this.workspaceId, "/versions"), version);
14
14
  };
15
- WorkspacesVersionsEndpoint.prototype.rollback = function (versionId) {
16
- this.api.post("/workspaces/".concat(this.workspaceId, "/versions/").concat(versionId, "/rollback"));
15
+ WorkspacesVersionsEndpoint.prototype.rollback = function (versionId, opts) {
16
+ return this.api.post("/workspaces/".concat(this.workspaceId, "/versions/").concat(versionId, "/pull"), opts);
17
17
  };
18
18
  WorkspacesVersionsEndpoint.prototype.export = function (version) {
19
19
  if (version === void 0) { version = 'current'; }
@@ -22,7 +22,7 @@ var WorkspacesVersionsEndpoint = /** @class */ (function () {
22
22
  return _tslib.__generator(this, function (_b) {
23
23
  switch (_b.label) {
24
24
  case 0: return [4 /*yield*/, this.api.prepareRequest("/workspaces/".concat(this.workspaceId, "/versions/").concat(version, "/export"), {
25
- method: 'post'
25
+ method: 'post',
26
26
  })];
27
27
  case 1:
28
28
  res = _b.sent();
@@ -11,7 +11,7 @@ var io__default = /*#__PURE__*/_interopDefaultLegacy(io);
11
11
 
12
12
  var Events = /** @class */ (function () {
13
13
  function Events(_a) {
14
- var workspaceId = _a.workspaceId, token = _a.token, legacyToken = _a.legacyToken, apiKey = _a.apiKey, _b = _a.apiHost, apiHost = _b === void 0 ? 'https://api.eda.prisme.ai' : _b, filters = _a.filters, api = _a.api;
14
+ var workspaceId = _a.workspaceId, token = _a.token, legacyToken = _a.legacyToken, apiKey = _a.apiKey, _b = _a.apiHost, apiHost = _b === void 0 ? 'https://api.eda.prisme.ai' : _b, filters = _a.filters, api = _a.api, transports = _a.transports;
15
15
  var _this = this;
16
16
  this.listeners = new Map();
17
17
  this.workspaceId = workspaceId;
@@ -19,22 +19,45 @@ var Events = /** @class */ (function () {
19
19
  var fullQueryString = queryString ? "?".concat(queryString) : '';
20
20
  var extraHeaders = token
21
21
  ? {
22
- Authorization: "Bearer ".concat(token),
22
+ authorization: "Bearer ".concat(token),
23
23
  }
24
24
  : { 'x-prismeai-token': legacyToken };
25
25
  this.lastReceivedEventDate = new Date();
26
26
  if (apiKey) {
27
27
  extraHeaders['x-prismeai-api-key'] = apiKey;
28
28
  }
29
+ this.filters = [filters || {}];
30
+ this.listenedUserTopics = new Map();
29
31
  this.client = io__default["default"]("".concat(apiHost, "/workspaces/").concat(workspaceId, "/events").concat(fullQueryString), {
30
32
  extraHeaders: extraHeaders,
31
- withCredentials: true,
33
+ withCredentials: !extraHeaders.authorization,
34
+ transports: transports || ['polling', 'websocket'],
35
+ auth: function (cb) {
36
+ cb({
37
+ // Browser websockets cannot send extraHeaders, so we use socketio-client auth instead
38
+ extraHeaders: transports && transports[0] === 'websocket' ? extraHeaders : {},
39
+ filters: {
40
+ payloadQuery: _this.filters,
41
+ },
42
+ reuseSocketId: _this.socketId,
43
+ });
44
+ },
45
+ });
46
+ this.client.on('connect_error', function (err) {
47
+ console.error("Failed websocket connection : ", err);
48
+ // revert to classic upgrade
49
+ _this.client.io.opts.transports = ['polling', 'websocket'];
50
+ });
51
+ this.client.on('error', function (err) {
52
+ _this.client.io.opts.transports = ['polling', 'websocket'];
32
53
  });
33
54
  var onConnect = function () {
34
- // Reset last filters
35
- _this.updateFilters({
36
- payloadQuery: _this.filters,
37
- });
55
+ // First connection
56
+ if (!_this.socketId) {
57
+ _this.socketId = _this.client.id;
58
+ return;
59
+ }
60
+ // Retrieve lost history on reconnection
38
61
  setTimeout(function () { return _tslib.__awaiter(_this, void 0, void 0, function () {
39
62
  var events;
40
63
  var _this = this;
@@ -53,15 +76,18 @@ var Events = /** @class */ (function () {
53
76
  });
54
77
  }); }, 2000);
55
78
  };
79
+ this.client.on('connect', onConnect);
56
80
  this.client.on('disconnect', function () {
57
81
  if (!_this.lastReceivedEventDate) {
58
82
  _this.lastReceivedEventDate = new Date();
59
83
  }
84
+ // Make sure we reconnect with current filters & socketId
85
+ _this.client.auth = _tslib.__assign(_tslib.__assign({}, _this.client.auth), { filters: {
86
+ payloadQuery: _this.filters,
87
+ }, reuseSocketId: _this.socketId });
60
88
  _this.client.off('connect', onConnect);
61
89
  _this.client.on('connect', onConnect);
62
90
  });
63
- this.filters = [filters || {}];
64
- this.listenedUserTopics = new Map();
65
91
  }
66
92
  Object.defineProperty(Events.prototype, "socket", {
67
93
  get: function () {
@@ -83,15 +109,16 @@ var Events = /** @class */ (function () {
83
109
  };
84
110
  Events.prototype.all = function (listener) {
85
111
  var _this = this;
86
- this.client.onAny(function (eventName, eventData) {
112
+ var anyListener = function (eventName, eventData) {
87
113
  _this.lastReceivedEventDate = new Date(eventData === null || eventData === void 0 ? void 0 : eventData.createdAt);
88
114
  return listener(eventName, eventData);
89
- });
90
- return function () { return _this.client.offAny(listener); };
115
+ };
116
+ this.client.onAny(anyListener);
117
+ return function () { return _this.client.offAny(anyListener); };
91
118
  };
92
119
  Events.prototype.on = function (ev, listener) {
93
120
  var _this = this;
94
- this.listeners.set(ev, _tslib.__spreadArray(_tslib.__spreadArray([], (this.listeners.get(ev) || []), true), [listener]));
121
+ this.listeners.set(ev, _tslib.__spreadArray(_tslib.__spreadArray([], (this.listeners.get(ev) || []), true), [listener], false));
95
122
  this.client.on(ev, listener);
96
123
  return function () {
97
124
  _this.listeners.set(ev, (_this.listeners.get(ev) || []).filter(function (l) { return l !== listener; }));
@@ -0,0 +1,12 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var fetch = global.fetch;
6
+ console.log(fetch);
7
+ // @ts-ignore
8
+ delete global.fetch;
9
+ // @ts-ignore
10
+ delete global.XMLHttpRequest;
11
+
12
+ exports["default"] = fetch;
@@ -3,8 +3,14 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var _tslib = require('../../_virtual/_tslib.js');
6
+ var FormData = require('form-data');
6
7
  var ApiError = require('./ApiError.js');
7
8
  var HTTPError = require('./HTTPError.js');
9
+ var utils = require('./utils.js');
10
+
11
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
12
+
13
+ var FormData__default = /*#__PURE__*/_interopDefaultLegacy(FormData);
8
14
 
9
15
  var headersAsObject = function (headers) {
10
16
  return Array.from(headers).reduce(function (prev, _a) {
@@ -13,11 +19,16 @@ var headersAsObject = function (headers) {
13
19
  return (_tslib.__assign(_tslib.__assign({}, prev), (_b = {}, _b[k] = v, _b)));
14
20
  }, {});
15
21
  };
22
+ function isFormData(data) {
23
+ return !!(data.append && typeof data.append === 'function');
24
+ }
25
+ var CSRF_TOKEN_HEADER = 'x-prismeai-csrf-token';
16
26
  var Fetcher = /** @class */ (function () {
17
27
  function Fetcher(host, clientIdHeader) {
18
28
  this.token = null;
19
29
  this.legacyToken = null;
20
30
  this._apiKey = null;
31
+ this._csrfToken = null;
21
32
  this.host = host;
22
33
  this.clientIdHeader = clientIdHeader;
23
34
  }
@@ -40,30 +51,47 @@ var Fetcher = /** @class */ (function () {
40
51
  if (this._apiKey && !headers.has('x-prismeai-apikey')) {
41
52
  headers.append('x-prismeai-api-key', this._apiKey);
42
53
  }
54
+ if (this._csrfToken && options.method && options.method !== 'GET') {
55
+ headers.append(CSRF_TOKEN_HEADER, this._csrfToken);
56
+ }
43
57
  if (this.language) {
44
58
  headers.append('accept-language', this.language);
45
59
  }
46
60
  if (options.body instanceof URLSearchParams) {
47
61
  headers.set('Content-Type', 'application/x-www-form-urlencoded');
48
62
  }
49
- if ((!options.body || !(options.body instanceof FormData)) &&
63
+ if ((!options.body || !(options.body instanceof FormData__default["default"])) &&
50
64
  !headers.has('Content-Type')) {
51
65
  headers.append('Content-Type', 'application/json');
52
66
  }
53
67
  var fullUrl = url.startsWith('http://') || url.startsWith('https://')
54
68
  ? url
55
69
  : "".concat(this.host).concat(url);
56
- return global.fetch(fullUrl, _tslib.__assign(_tslib.__assign({ credentials: 'include' }, options), { headers: headers }));
70
+ return global.fetch(fullUrl, _tslib.__assign(_tslib.__assign({ credentials: headers.has('Authorization') ? 'omit' : 'include' }, options), { headers: headers }));
57
71
  };
58
- Fetcher.prototype._fetch = function (url, options) {
72
+ Fetcher.prototype._fetch = function (url, options, maxRetries) {
73
+ var _a;
59
74
  if (options === void 0) { options = {}; }
75
+ if (maxRetries === void 0) { maxRetries = 3; }
60
76
  return _tslib.__awaiter(this, void 0, void 0, function () {
61
- var res, error, _a, contentType, response, text;
62
- return _tslib.__generator(this, function (_b) {
63
- switch (_b.label) {
64
- case 0: return [4 /*yield*/, this.prepareRequest(url, options)];
77
+ var res, e_1, error, _b, contentType, response, text;
78
+ return _tslib.__generator(this, function (_c) {
79
+ switch (_c.label) {
80
+ case 0:
81
+ _c.trys.push([0, 2, , 5]);
82
+ return [4 /*yield*/, this.prepareRequest(url, options)];
65
83
  case 1:
66
- res = _b.sent();
84
+ res = _c.sent();
85
+ return [3 /*break*/, 5];
86
+ case 2:
87
+ e_1 = _c.sent();
88
+ if (!(maxRetries > 0 && e_1.message === 'Load failed')) return [3 /*break*/, 4];
89
+ return [4 /*yield*/, utils.wait(20)];
90
+ case 3:
91
+ _c.sent();
92
+ return [2 /*return*/, this._fetch(url, options, --maxRetries)];
93
+ case 4: throw e_1;
94
+ case 5:
67
95
  if (options.redirect === 'manual' && res.status === 0) {
68
96
  return [2 /*return*/, { redirected: true }];
69
97
  }
@@ -71,30 +99,42 @@ var Fetcher = /** @class */ (function () {
71
99
  if (this.clientIdHeader && this.lastReceivedHeaders[this.clientIdHeader]) {
72
100
  this.overwriteClientId = this.lastReceivedHeaders[this.clientIdHeader];
73
101
  }
74
- if (!!res.ok) return [3 /*break*/, 6];
102
+ if (this.lastReceivedHeaders[CSRF_TOKEN_HEADER]) {
103
+ this._csrfToken = this.lastReceivedHeaders[CSRF_TOKEN_HEADER];
104
+ }
105
+ if (!!res.ok) return [3 /*break*/, 12];
106
+ if (!(((_a = res.statusText) === null || _a === void 0 ? void 0 : _a.length) &&
107
+ res.statusText.includes('ECONNRESET') &&
108
+ maxRetries > 0)) return [3 /*break*/, 7];
109
+ console.log("Retrying request towards ".concat(url, " as we received ECONNRESET error : ").concat(res.statusText));
110
+ return [4 /*yield*/, utils.wait(20)];
111
+ case 6:
112
+ _c.sent();
113
+ return [2 /*return*/, this._fetch(url, options, --maxRetries)];
114
+ case 7:
75
115
  error = void 0;
76
- _b.label = 2;
77
- case 2:
78
- _b.trys.push([2, 4, , 5]);
79
- _a = ApiError.ApiError.bind;
116
+ _c.label = 8;
117
+ case 8:
118
+ _c.trys.push([8, 10, , 11]);
119
+ _b = ApiError.ApiError.bind;
80
120
  return [4 /*yield*/, res.json()];
81
- case 3:
82
- error = new (_a.apply(ApiError.ApiError, [void 0, _b.sent(), res.status]))();
83
- return [3 /*break*/, 5];
84
- case 4:
85
- _b.sent();
121
+ case 9:
122
+ error = new (_b.apply(ApiError.ApiError, [void 0, _c.sent(), res.status]))();
123
+ return [3 /*break*/, 11];
124
+ case 10:
125
+ _c.sent();
86
126
  error = new HTTPError.HTTPError(res.statusText, res.status);
87
- return [3 /*break*/, 5];
88
- case 5: throw error;
89
- case 6:
127
+ return [3 /*break*/, 11];
128
+ case 11: throw error;
129
+ case 12:
90
130
  contentType = res.headers.get('content-type');
91
- if (!(contentType && contentType.includes('application/json'))) return [3 /*break*/, 10];
92
- _b.label = 7;
93
- case 7:
94
- _b.trys.push([7, 9, , 10]);
131
+ if (!(contentType && contentType.includes('application/json'))) return [3 /*break*/, 16];
132
+ _c.label = 13;
133
+ case 13:
134
+ _c.trys.push([13, 15, , 16]);
95
135
  return [4 /*yield*/, res.json()];
96
- case 8:
97
- response = (_b.sent()) || {};
136
+ case 14:
137
+ response = (_c.sent()) || {};
98
138
  Object.defineProperty(response, 'headers', {
99
139
  value: headersAsObject(res.headers),
100
140
  configurable: false,
@@ -102,16 +142,16 @@ var Fetcher = /** @class */ (function () {
102
142
  writable: false,
103
143
  });
104
144
  return [2 /*return*/, response];
105
- case 9:
106
- _b.sent();
145
+ case 15:
146
+ _c.sent();
107
147
  return [2 /*return*/, {}];
108
- case 10: return [4 /*yield*/, res.text()];
109
- case 11:
110
- text = _b.sent();
148
+ case 16: return [4 /*yield*/, res.text()];
149
+ case 17:
150
+ text = _c.sent();
111
151
  try {
112
152
  return [2 /*return*/, JSON.parse(text)];
113
153
  }
114
- catch (_c) {
154
+ catch (_d) {
115
155
  return [2 /*return*/, text];
116
156
  }
117
157
  return [2 /*return*/];
@@ -131,9 +171,7 @@ var Fetcher = /** @class */ (function () {
131
171
  Fetcher.prototype.post = function (url, body, opts) {
132
172
  return _tslib.__awaiter(this, void 0, void 0, function () {
133
173
  return _tslib.__generator(this, function (_a) {
134
- return [2 /*return*/, this._fetch(url, _tslib.__assign({ method: 'POST', body: body &&
135
- !(body instanceof FormData) &&
136
- !(body instanceof URLSearchParams)
174
+ return [2 /*return*/, this._fetch(url, _tslib.__assign({ method: 'POST', body: body && !isFormData(body) && !(body instanceof URLSearchParams)
137
175
  ? JSON.stringify(body)
138
176
  : body }, opts))];
139
177
  });
@@ -0,0 +1,26 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var _tslib = require('../../_virtual/_tslib.js');
6
+
7
+ function interpolateString(str, values) {
8
+ if (values === void 0) { values = {}; }
9
+ return str.replace(/\$\{([^}]+)\}/g, function (_, m) { return values[m] || ''; });
10
+ }
11
+ function interpolate(into, values) {
12
+ if (typeof into === 'string') {
13
+ return interpolateString(into, values);
14
+ }
15
+ var isArray = Array.isArray(into);
16
+ var newObject = isArray ? _tslib.__spreadArray([], into) : _tslib.__assign({}, into);
17
+ for (var _i = 0, _a = Object.keys(newObject); _i < _a.length; _i++) {
18
+ var key = _a[_i];
19
+ var value = newObject[key];
20
+ newObject[key] = interpolate(value, values);
21
+ }
22
+ return newObject;
23
+ }
24
+
25
+ exports.interpolate = interpolate;
26
+ exports.interpolateString = interpolateString;
@@ -0,0 +1,26 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var _tslib = require('../../_virtual/_tslib.js');
6
+
7
+ function interpolateString(str, values) {
8
+ if (values === void 0) { values = {}; }
9
+ return str.replace(/\$\{([^}]+)\}/g, function (_, m) { return values[m] || ''; });
10
+ }
11
+ function interpolate(into, values) {
12
+ if (typeof into === 'string') {
13
+ return interpolateString(into, values);
14
+ }
15
+ var isArray = Array.isArray(into);
16
+ var newObject = isArray ? _tslib.__spreadArray([], into) : _tslib.__assign({}, into);
17
+ for (var _i = 0, _a = Object.keys(newObject); _i < _a.length; _i++) {
18
+ var key = _a[_i];
19
+ var value = newObject[key];
20
+ newObject[key] = interpolate(value, values);
21
+ }
22
+ return newObject;
23
+ }
24
+
25
+ exports.interpolate = interpolate;
26
+ exports.interpolateString = interpolateString;
@@ -2,6 +2,8 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
+ var _tslib = require('../../_virtual/_tslib.js');
6
+
5
7
  var removedUndefinedProperties = function (obj, removeEmptyStrings) {
6
8
  if (removeEmptyStrings === void 0) { removeEmptyStrings = false; }
7
9
  return Object.entries(obj).reduce(function (newObject, _a) {
@@ -13,6 +15,51 @@ var removedUndefinedProperties = function (obj, removeEmptyStrings) {
13
15
  }
14
16
  return newObject;
15
17
  }, {});
16
- };
18
+ };
19
+ function dataURItoBlob(dataURI) {
20
+ // convert base64/URLEncoded data component to raw binary data held in a string
21
+ var byteString;
22
+ if (dataURI.split(',')[0].indexOf('base64') >= 0)
23
+ byteString = atob(dataURI.split(',')[1].split(';')[0]);
24
+ else
25
+ byteString = unescape(dataURI.split(',')[1]);
26
+ // separate out the mime component
27
+ var metadata = dataURI
28
+ .split(';')
29
+ .map(function (v) { return v.split(/:/); })
30
+ .filter(function (pair) { return pair.length === 2; });
31
+ var _a = metadata.find(function (_a) {
32
+ var k = _a[0]; _a[1];
33
+ return k === 'data';
34
+ }) || [], _b = _a[1], mimeString = _b === void 0 ? '' : _b;
35
+ var _c = mimeString.split(/\//), ext = _c[1];
36
+ var _d = metadata.find(function (_a) {
37
+ var k = _a[0]; _a[1];
38
+ return k === 'filename';
39
+ }) || [], _e = _d[1], fileName = _e === void 0 ? "file.".concat(ext) : _e;
40
+ var sanitizedFileName = encodeURIComponent(decodeURIComponent(fileName).replace(/[;,\s]/g, '-'));
41
+ // write the bytes of the string to a typed array
42
+ var ia = new Uint8Array(byteString.length);
43
+ for (var i = 0; i < byteString.length; i++) {
44
+ ia[i] = byteString.charCodeAt(i);
45
+ }
46
+ return [new Blob([ia], { type: mimeString }), sanitizedFileName];
47
+ }
48
+ function isDataURL(file) {
49
+ return !!(typeof file === 'string' && file.match(/^data\:/));
50
+ }
51
+ function wait(delay) {
52
+ if (delay === void 0) { delay = 0; }
53
+ return _tslib.__awaiter(this, void 0, void 0, function () {
54
+ return _tslib.__generator(this, function (_a) {
55
+ return [2 /*return*/, new Promise(function (resolve) {
56
+ setTimeout(resolve, delay);
57
+ })];
58
+ });
59
+ });
60
+ }
17
61
 
62
+ exports.dataURItoBlob = dataURItoBlob;
63
+ exports.isDataURL = isDataURL;
18
64
  exports.removedUndefinedProperties = removedUndefinedProperties;
65
+ exports.wait = wait;