@spica-devkit/storage 0.18.17 → 0.18.18-pre

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.
package/index.js ADDED
@@ -0,0 +1,390 @@
1
+ 'use strict';
2
+
3
+ var form = require('form-data');
4
+ var axios = require('axios');
5
+
6
+ function logWarning(response) {
7
+ const warning = response.headers["warning"];
8
+ if (warning) {
9
+ console.warn(warning);
10
+ }
11
+ }
12
+ class Axios {
13
+ constructor(config) {
14
+ this.interceptors = {
15
+ request: {
16
+ onFulfilled: (request) => {
17
+ request.maxBodyLength = Number.MAX_SAFE_INTEGER;
18
+ request.maxContentLength = Number.MAX_SAFE_INTEGER;
19
+ if (!request.headers["Authorization"]) {
20
+ throw new Error("You should call initialize method with a valid apikey or identity token.");
21
+ }
22
+ return request;
23
+ },
24
+ onRejected: (error) => {
25
+ return Promise.reject(error);
26
+ }
27
+ },
28
+ response: {
29
+ onFulfilled: (response) => {
30
+ logWarning(response);
31
+ return response.data;
32
+ },
33
+ onRejected: (error) => {
34
+ return Promise.reject(error.response ? error.response.data : error);
35
+ }
36
+ }
37
+ };
38
+ this.instance = axios.create(config);
39
+ this.instance.interceptors.request.use(this.interceptors.request.onFulfilled, this.interceptors.request.onRejected);
40
+ this.instance.interceptors.response.use(this.interceptors.response.onFulfilled, this.interceptors.response.onRejected);
41
+ this.baseUrl = this.instance.defaults.baseURL;
42
+ this.instance.defaults.paramsSerializer = paramsSerializer;
43
+ }
44
+ setBaseUrl(url) {
45
+ this.instance.defaults.baseURL = url;
46
+ this.baseUrl = url;
47
+ }
48
+ setWriteDefaults(writeDefaults) {
49
+ for (const [header, value] of Object.entries(writeDefaults.headers)) {
50
+ this.instance.defaults.headers.post[header] = value;
51
+ this.instance.defaults.headers.put[header] = value;
52
+ }
53
+ }
54
+ setAuthorization(authorization) {
55
+ this.instance.defaults.headers["Authorization"] = authorization;
56
+ }
57
+ getAuthorization() {
58
+ return this.instance.defaults.headers["Authorization"].toString();
59
+ }
60
+ get(url, config) {
61
+ return this.instance.get(url, config);
62
+ }
63
+ post(url, body, config) {
64
+ return this.instance.post(url, body, config);
65
+ }
66
+ put(url, body, config) {
67
+ return this.instance.put(url, body, config);
68
+ }
69
+ patch(url, body, config) {
70
+ return this.instance.patch(url, body, config);
71
+ }
72
+ delete(url, config) {
73
+ return this.instance.delete(url, config);
74
+ }
75
+ request(config) {
76
+ return this.instance.request(config);
77
+ }
78
+ }
79
+ function encode(val) {
80
+ return encodeURIComponent(val)
81
+ .replace(/%3A/gi, ":")
82
+ .replace(/%24/g, "$")
83
+ .replace(/%2C/gi, ",")
84
+ .replace(/%20/g, "+")
85
+ .replace(/%5B/gi, "[")
86
+ .replace(/%5D/gi, "]");
87
+ }
88
+ function utilsIsURLSearchParams(val) {
89
+ return typeof URLSearchParams !== "undefined" && val instanceof URLSearchParams;
90
+ }
91
+ function utilsIsArray(val) {
92
+ return toString.call(val) === "[object Array]";
93
+ }
94
+ function utilsIsDate(val) {
95
+ return toString.call(val) === "[object Date]";
96
+ }
97
+ function utilsIsObject(val) {
98
+ return val !== null && typeof val === "object";
99
+ }
100
+ function utilsForEach(obj, fn) {
101
+ if (obj === null || typeof obj === "undefined") {
102
+ return;
103
+ }
104
+ if (typeof obj !== "object") {
105
+ obj = [obj];
106
+ }
107
+ if (utilsIsArray(obj)) {
108
+ for (var i = 0, l = obj.length; i < l; i++) {
109
+ fn.call(null, obj[i], i, obj);
110
+ }
111
+ }
112
+ else {
113
+ for (var key in obj) {
114
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
115
+ fn.call(null, obj[key], key, obj);
116
+ }
117
+ }
118
+ }
119
+ }
120
+ function paramsSerializer(params) {
121
+ if (utilsIsURLSearchParams(params)) {
122
+ return params.toString();
123
+ }
124
+ var parts = [];
125
+ utilsForEach(params, function serialize(val, key) {
126
+ if (val === null || typeof val === "undefined") {
127
+ return;
128
+ }
129
+ if (utilsIsArray(val)) {
130
+ key = key + "[]";
131
+ }
132
+ else {
133
+ val = [val];
134
+ }
135
+ utilsForEach(val, function parseValue(v) {
136
+ if (utilsIsDate(v)) {
137
+ v = v.toISOString();
138
+ }
139
+ else if (utilsIsObject(v)) {
140
+ v = JSON.stringify(v);
141
+ }
142
+ parts.push(encode(key) + "=" + encode(v));
143
+ });
144
+ });
145
+ return parts.join("&");
146
+ }
147
+
148
+ let service$1;
149
+ function initialize$1(options) {
150
+ let authorization;
151
+ if ("apikey" in options) {
152
+ authorization = `APIKEY ${options.apikey}`;
153
+ }
154
+ else if ("identity" in options) {
155
+ authorization = `IDENTITY ${options.identity}`;
156
+ }
157
+ else if ("user" in options) {
158
+ authorization = `USER ${options.user}`;
159
+ }
160
+ const publicUrl = options.publicUrl || getPublicUrl();
161
+ if (!publicUrl) {
162
+ throw new Error("Public url must be provided.");
163
+ }
164
+ if (!service$1) {
165
+ service$1 = new Axios({});
166
+ }
167
+ service$1.setBaseUrl(publicUrl);
168
+ if (authorization) {
169
+ service$1.setAuthorization(authorization);
170
+ }
171
+ return { authorization, publicUrl, service: service$1 };
172
+ }
173
+ function checkInitialized(authorization, service, options = { skipAuthCheck: false }) {
174
+ if (!authorization && !options.skipAuthCheck) {
175
+ throw new Error("You should call initialize method with a valid credentials.");
176
+ }
177
+ if (!service) {
178
+ throw new Error("You should call initialize method with a valid publicUrl.");
179
+ }
180
+ }
181
+ function getPublicUrl() {
182
+ return isPlatformBrowser() ? undefined : process.env.__INTERNAL__SPICA__PUBLIC_URL__;
183
+ }
184
+ function isPlatformBrowser() {
185
+ return typeof window !== "undefined";
186
+ }
187
+
188
+ var Batch;
189
+ (function (Batch) {
190
+ function prepareInsertRequest(resources, url, auth, headers) {
191
+ return {
192
+ requests: resources.map((resource, i) => {
193
+ headers = addAuthHeader(headers, auth);
194
+ return {
195
+ id: i.toString(),
196
+ body: resource,
197
+ method: "POST",
198
+ url: url,
199
+ headers: headers
200
+ };
201
+ })
202
+ };
203
+ }
204
+ Batch.prepareInsertRequest = prepareInsertRequest;
205
+ function prepareRemoveRequest(ids, url, auth, headers) {
206
+ return {
207
+ requests: ids.map((id, i) => {
208
+ headers = addAuthHeader(headers, auth);
209
+ return {
210
+ id: i.toString(),
211
+ body: undefined,
212
+ method: "DELETE",
213
+ url: `${url}/${id}`,
214
+ headers: headers
215
+ };
216
+ })
217
+ };
218
+ }
219
+ Batch.prepareRemoveRequest = prepareRemoveRequest;
220
+ function handleBatchResponse({ requests }, { responses }) {
221
+ const sortById = (a, b) => Number(a.id) - Number(b.id);
222
+ const successResponses = responses
223
+ .sort(sortById)
224
+ .filter(r => r.status >= 200 && r.status < 300);
225
+ const failureResponses = responses
226
+ .sort(sortById)
227
+ .filter(r => r.status >= 400 && r.status <= 500);
228
+ const successes = successResponses.map(sr => {
229
+ const req = requests.find(r => r.id == sr.id);
230
+ return {
231
+ request: (req.body || req.url),
232
+ response: sr.body
233
+ };
234
+ });
235
+ const failures = failureResponses.map(fr => {
236
+ const req = requests.find(r => r.id == fr.id);
237
+ return {
238
+ request: (req.body || req.url),
239
+ response: {
240
+ error: fr.body["error"],
241
+ message: fr.body["message"]
242
+ }
243
+ };
244
+ });
245
+ return {
246
+ successes,
247
+ failures
248
+ };
249
+ }
250
+ Batch.handleBatchResponse = handleBatchResponse;
251
+ })(Batch || (Batch = {}));
252
+ function addAuthHeader(headers, auth) {
253
+ headers = headers || {};
254
+ headers["Authorization"] = auth;
255
+ return headers;
256
+ }
257
+
258
+ async function preparePostBody(objects) {
259
+ let files = [];
260
+ if (!Array.isArray(objects)) {
261
+ files = Array.from(objects);
262
+ }
263
+ else {
264
+ files = objects;
265
+ }
266
+ const form = createForm();
267
+ for (const file of files) {
268
+ appendToForm(form, "files", file);
269
+ }
270
+ return { body: form, headers: getHeaders(form) };
271
+ }
272
+ async function preparePutBody(object) {
273
+ const form = createForm();
274
+ appendToForm(form, "file", object);
275
+ return { body: form, headers: getHeaders(form) };
276
+ }
277
+ function instanceOfBufferWithMeta(value) {
278
+ return "data" in value && "name" in value && "contentType" in value;
279
+ }
280
+ function createForm() {
281
+ return isPlatformBrowser() ? new FormData() : new form();
282
+ }
283
+ async function appendToForm(form, key, file) {
284
+ if (isPlatformBrowser()) {
285
+ if (instanceOfBufferWithMeta(file)) {
286
+ form.append(key, new Blob([file.data], { type: file.contentType }), file.name);
287
+ }
288
+ else {
289
+ form.append(key, file);
290
+ }
291
+ }
292
+ else {
293
+ form.append(key, file.data, {
294
+ contentType: file.contentType,
295
+ filename: file.name
296
+ });
297
+ }
298
+ return form;
299
+ }
300
+ function getHeaders(form) {
301
+ if (!isPlatformBrowser()) {
302
+ return form.getHeaders();
303
+ }
304
+ return {};
305
+ }
306
+
307
+ let authorization;
308
+ let service;
309
+ function initialize(options) {
310
+ const { authorization: _authorization, service: _service } = initialize$1(options);
311
+ authorization = _authorization;
312
+ service = _service;
313
+ }
314
+ async function insert(object, onUploadProgress, headers = {}) {
315
+ checkInitialized(authorization, service);
316
+ const postBody = await preparePostBody([object]);
317
+ return service
318
+ .post("storage", postBody.body, {
319
+ onUploadProgress,
320
+ headers: { ...postBody.headers, ...headers }
321
+ })
322
+ .then(([r]) => r);
323
+ }
324
+ async function insertMany(objects, onUploadProgress, headers = {}) {
325
+ checkInitialized(authorization, service);
326
+ const postBody = await preparePostBody(objects);
327
+ return service.post("storage", postBody.body, {
328
+ onUploadProgress,
329
+ headers: { ...postBody.headers, ...headers }
330
+ });
331
+ }
332
+ function get(id, headers) {
333
+ checkInitialized(authorization, service);
334
+ return service.get(`storage/${id}`, { headers });
335
+ }
336
+ function download(id, options = {}) {
337
+ checkInitialized(authorization, service);
338
+ return service.get(`storage/${id}/view`, {
339
+ headers: options.headers,
340
+ onDownloadProgress: options.onDownloadProgress,
341
+ responseType: isPlatformBrowser() ? "blob" : "stream"
342
+ });
343
+ }
344
+ function getAll(queryParams, headers) {
345
+ checkInitialized(authorization, service);
346
+ return service.get(`storage`, {
347
+ params: queryParams,
348
+ headers
349
+ });
350
+ }
351
+ async function update(id, object, onUploadProgress, headers = {}) {
352
+ checkInitialized(authorization, service);
353
+ const putBody = await preparePutBody(object);
354
+ return service.put(`storage/${id}`, putBody.body, {
355
+ onUploadProgress,
356
+ headers: { ...putBody.headers, ...headers }
357
+ });
358
+ }
359
+ async function updateMeta(id, meta, headers = {}) {
360
+ checkInitialized(authorization, service);
361
+ return service.patch(`storage/${id}`, meta, {
362
+ headers: {
363
+ "Content-Type": "application/json",
364
+ ...headers
365
+ }
366
+ });
367
+ }
368
+ function remove(id, headers) {
369
+ checkInitialized(authorization, service);
370
+ return service.delete(`storage/${id}`, { headers });
371
+ }
372
+ function removeMany(ids, headers) {
373
+ checkInitialized(authorization, service);
374
+ const batchReqs = Batch.prepareRemoveRequest(ids, "storage", service.getAuthorization(), headers);
375
+ return service
376
+ .post("batch", batchReqs, { headers })
377
+ .then(response => Batch.handleBatchResponse(batchReqs, response));
378
+ }
379
+
380
+ exports.download = download;
381
+ exports.get = get;
382
+ exports.getAll = getAll;
383
+ exports.initialize = initialize;
384
+ exports.insert = insert;
385
+ exports.insertMany = insertMany;
386
+ exports.remove = remove;
387
+ exports.removeMany = removeMany;
388
+ exports.update = update;
389
+ exports.updateMeta = updateMeta;
390
+ //# sourceMappingURL=index.js.map
package/index.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../internal_common/dist/src/request.js","../../internal_common/dist/src/initialize.js","../../internal_common/dist/src/batch.js","../../src/utility.ts","../../src/storage.ts"],"sourcesContent":["import axios from \"axios\";\nexport function logWarning(response) {\n const warning = response.headers[\"warning\"];\n if (warning) {\n console.warn(warning);\n }\n}\nexport class Axios {\n constructor(config) {\n this.interceptors = {\n request: {\n onFulfilled: (request) => {\n request.maxBodyLength = Number.MAX_SAFE_INTEGER;\n request.maxContentLength = Number.MAX_SAFE_INTEGER;\n if (!request.headers[\"Authorization\"]) {\n throw new Error(\"You should call initialize method with a valid apikey or identity token.\");\n }\n return request;\n },\n onRejected: (error) => {\n return Promise.reject(error);\n }\n },\n response: {\n onFulfilled: (response) => {\n logWarning(response);\n return response.data;\n },\n onRejected: (error) => {\n return Promise.reject(error.response ? error.response.data : error);\n }\n }\n };\n this.instance = axios.create(config);\n this.instance.interceptors.request.use(this.interceptors.request.onFulfilled, this.interceptors.request.onRejected);\n this.instance.interceptors.response.use(this.interceptors.response.onFulfilled, this.interceptors.response.onRejected);\n this.baseUrl = this.instance.defaults.baseURL;\n this.instance.defaults.paramsSerializer = paramsSerializer;\n }\n setBaseUrl(url) {\n this.instance.defaults.baseURL = url;\n this.baseUrl = url;\n }\n setWriteDefaults(writeDefaults) {\n for (const [header, value] of Object.entries(writeDefaults.headers)) {\n this.instance.defaults.headers.post[header] = value;\n this.instance.defaults.headers.put[header] = value;\n }\n }\n setAuthorization(authorization) {\n this.instance.defaults.headers[\"Authorization\"] = authorization;\n }\n getAuthorization() {\n return this.instance.defaults.headers[\"Authorization\"].toString();\n }\n get(url, config) {\n return this.instance.get(url, config);\n }\n post(url, body, config) {\n return this.instance.post(url, body, config);\n }\n put(url, body, config) {\n return this.instance.put(url, body, config);\n }\n patch(url, body, config) {\n return this.instance.patch(url, body, config);\n }\n delete(url, config) {\n return this.instance.delete(url, config);\n }\n request(config) {\n return this.instance.request(config);\n }\n}\nfunction encode(val) {\n return encodeURIComponent(val)\n .replace(/%3A/gi, \":\")\n .replace(/%24/g, \"$\")\n .replace(/%2C/gi, \",\")\n .replace(/%20/g, \"+\")\n .replace(/%5B/gi, \"[\")\n .replace(/%5D/gi, \"]\");\n}\nfunction utilsIsURLSearchParams(val) {\n return typeof URLSearchParams !== \"undefined\" && val instanceof URLSearchParams;\n}\nfunction utilsIsArray(val) {\n return toString.call(val) === \"[object Array]\";\n}\nfunction utilsIsDate(val) {\n return toString.call(val) === \"[object Date]\";\n}\nfunction utilsIsObject(val) {\n return val !== null && typeof val === \"object\";\n}\nfunction utilsForEach(obj, fn) {\n if (obj === null || typeof obj === \"undefined\") {\n return;\n }\n if (typeof obj !== \"object\") {\n obj = [obj];\n }\n if (utilsIsArray(obj)) {\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n }\n else {\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\nfunction paramsSerializer(params) {\n if (utilsIsURLSearchParams(params)) {\n return params.toString();\n }\n var parts = [];\n utilsForEach(params, function serialize(val, key) {\n if (val === null || typeof val === \"undefined\") {\n return;\n }\n if (utilsIsArray(val)) {\n key = key + \"[]\";\n }\n else {\n val = [val];\n }\n utilsForEach(val, function parseValue(v) {\n if (utilsIsDate(v)) {\n v = v.toISOString();\n }\n else if (utilsIsObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + \"=\" + encode(v));\n });\n });\n return parts.join(\"&\");\n}\n//# sourceMappingURL=request.js.map","import { Axios } from \"./request\";\nlet service;\nexport function initialize(options) {\n let authorization;\n if (\"apikey\" in options) {\n authorization = `APIKEY ${options.apikey}`;\n }\n else if (\"identity\" in options) {\n authorization = `IDENTITY ${options.identity}`;\n }\n else if (\"user\" in options) {\n authorization = `USER ${options.user}`;\n }\n const publicUrl = options.publicUrl || getPublicUrl();\n if (!publicUrl) {\n throw new Error(\"Public url must be provided.\");\n }\n if (!service) {\n service = new Axios({});\n }\n service.setBaseUrl(publicUrl);\n if (authorization) {\n service.setAuthorization(authorization);\n }\n return { authorization, publicUrl, service };\n}\nexport function checkInitialized(authorization, service, options = { skipAuthCheck: false }) {\n if (!authorization && !options.skipAuthCheck) {\n throw new Error(\"You should call initialize method with a valid credentials.\");\n }\n if (!service) {\n throw new Error(\"You should call initialize method with a valid publicUrl.\");\n }\n}\nfunction getPublicUrl() {\n return isPlatformBrowser() ? undefined : process.env.__INTERNAL__SPICA__PUBLIC_URL__;\n}\nexport function isPlatformBrowser() {\n return typeof window !== \"undefined\";\n}\n//# sourceMappingURL=initialize.js.map","export var Batch;\n(function (Batch) {\n function prepareInsertRequest(resources, url, auth, headers) {\n return {\n requests: resources.map((resource, i) => {\n headers = addAuthHeader(headers, auth);\n return {\n id: i.toString(),\n body: resource,\n method: \"POST\",\n url: url,\n headers: headers\n };\n })\n };\n }\n Batch.prepareInsertRequest = prepareInsertRequest;\n function prepareRemoveRequest(ids, url, auth, headers) {\n return {\n requests: ids.map((id, i) => {\n headers = addAuthHeader(headers, auth);\n return {\n id: i.toString(),\n body: undefined,\n method: \"DELETE\",\n url: `${url}/${id}`,\n headers: headers\n };\n })\n };\n }\n Batch.prepareRemoveRequest = prepareRemoveRequest;\n function handleBatchResponse({ requests }, { responses }) {\n const sortById = (a, b) => Number(a.id) - Number(b.id);\n const successResponses = responses\n .sort(sortById)\n .filter(r => r.status >= 200 && r.status < 300);\n const failureResponses = responses\n .sort(sortById)\n .filter(r => r.status >= 400 && r.status <= 500);\n const successes = successResponses.map(sr => {\n const req = requests.find(r => r.id == sr.id);\n return {\n request: (req.body || req.url),\n response: sr.body\n };\n });\n const failures = failureResponses.map(fr => {\n const req = requests.find(r => r.id == fr.id);\n return {\n request: (req.body || req.url),\n response: {\n error: fr.body[\"error\"],\n message: fr.body[\"message\"]\n }\n };\n });\n return {\n successes,\n failures\n };\n }\n Batch.handleBatchResponse = handleBatchResponse;\n})(Batch || (Batch = {}));\nfunction addAuthHeader(headers, auth) {\n headers = headers || {};\n headers[\"Authorization\"] = auth;\n return headers;\n}\n//# sourceMappingURL=batch.js.map",null,null],"names":["service","initialize","_initialize"],"mappings":"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"}