@ponceca/storage-sdk 0.1.0

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.
@@ -0,0 +1,625 @@
1
+ "use strict";
2
+ /**
3
+ * SDK compatible con Firebase Storage v9 Modular.
4
+ * Clon fidedigno: misma API, mismos códigos de error, misma semántica de seguridad.
5
+ *
6
+ * Códigos de error idénticos a Firebase:
7
+ * storage/unauthenticated → No hay token (user no autenticado)
8
+ * storage/unauthorized → Token válido pero security rules deniegan (403)
9
+ * storage/object-not-found → Archivo no existe (404)
10
+ * storage/canceled → Operación cancelada por el usuario
11
+ * storage/retry-limit-exceeded → Reintentos agotados
12
+ * storage/unknown → Error genérico del servidor
13
+ */
14
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
15
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
16
+ return new (P || (P = Promise))(function (resolve, reject) {
17
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
18
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
19
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
20
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
21
+ });
22
+ };
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ exports.AcmeStorageError = exports.StorageError = void 0;
25
+ exports.getStorage = getStorage;
26
+ exports.connectStorageEmulator = connectStorageEmulator;
27
+ exports.ref = ref;
28
+ exports.child = child;
29
+ exports.getParent = getParent;
30
+ exports.getRoot = getRoot;
31
+ exports.getDownloadURL = getDownloadURL;
32
+ exports.getMetadata = getMetadata;
33
+ exports.updateMetadata = updateMetadata;
34
+ exports.listAll = listAll;
35
+ exports.list = list;
36
+ exports.getBlob = getBlob;
37
+ exports.getBytes = getBytes;
38
+ exports.getStream = getStream;
39
+ exports.deleteObject = deleteObject;
40
+ exports.uploadBytesResumable = uploadBytesResumable;
41
+ exports.uploadBytes = uploadBytes;
42
+ exports.uploadString = uploadString;
43
+ exports.getThumbnailURL = getThumbnailURL;
44
+ const SparkMD5 = require("spark-md5");
45
+ // ==========================================================================
46
+ // StorageError — Clase de error idéntica a Firebase
47
+ // ==========================================================================
48
+ class StorageError extends Error {
49
+ constructor(code, message, serverResponse = null) {
50
+ super(`Firebase Storage: ${message} (${code})`);
51
+ this.code = code;
52
+ this.serverResponse = serverResponse;
53
+ this.name = 'StorageError';
54
+ }
55
+ }
56
+ exports.StorageError = StorageError;
57
+ class AcmeStorageError extends StorageError {
58
+ constructor(code, message, serverResponse = null) {
59
+ super(code, message, serverResponse);
60
+ this.name = 'AcmeStorageError';
61
+ }
62
+ }
63
+ exports.AcmeStorageError = AcmeStorageError;
64
+ /** Mapea un HTTP status a un StorageError Firebase-compatible. */
65
+ function _handleError(status, context, body) {
66
+ let serverMessage = '';
67
+ let errorCode = 'storage/unknown';
68
+ // Parse Google Standard Error
69
+ if (body) {
70
+ try {
71
+ const json = JSON.parse(body);
72
+ if (json.error && json.error.message) {
73
+ serverMessage = json.error.message;
74
+ }
75
+ else if (json.error) {
76
+ serverMessage = json.error; // Fallback for simple {"error": "msg"}
77
+ }
78
+ }
79
+ catch (e) {
80
+ serverMessage = body.substring(0, 200); // Fallback: raw body
81
+ }
82
+ }
83
+ const fullMsg = serverMessage ? `${context}: ${serverMessage}` : context;
84
+ switch (status) {
85
+ case 400:
86
+ errorCode = 'storage/invalid-argument';
87
+ break;
88
+ case 401:
89
+ errorCode = 'storage/unauthenticated';
90
+ break;
91
+ case 403:
92
+ errorCode = 'storage/unauthorized';
93
+ break;
94
+ case 404:
95
+ errorCode = 'storage/object-not-found';
96
+ break;
97
+ case 413:
98
+ errorCode = 'storage/quota-exceeded';
99
+ break;
100
+ case 429:
101
+ errorCode = 'storage/quota-exceeded';
102
+ break; // Resource exhausted
103
+ case 503:
104
+ errorCode = 'storage/retry-limit-exceeded';
105
+ break; // Unavailable
106
+ }
107
+ return new StorageError(errorCode, fullMsg, body !== null && body !== void 0 ? body : null);
108
+ }
109
+ // ==========================================================================
110
+ // Funciones internas
111
+ // ==========================================================================
112
+ /** Construye headers HTTP: Authorization + x-api-key + Content-Type. */
113
+ function _buildHeaders(storage, token, contentType) {
114
+ const h = {};
115
+ if (token)
116
+ h['Authorization'] = `Bearer ${token}`;
117
+ if (storage.config.apiKey)
118
+ h['x-api-key'] = storage.config.apiKey;
119
+ if (contentType)
120
+ h['Content-Type'] = contentType;
121
+ return h;
122
+ }
123
+ /** Obtiene token y lanza StorageError si no hay. */
124
+ function _requireAuth(storage) {
125
+ return __awaiter(this, void 0, void 0, function* () {
126
+ const token = yield storage.config.tokenGetter();
127
+ if (!token) {
128
+ throw new StorageError('storage/unauthenticated', 'User is not authenticated.');
129
+ }
130
+ return token;
131
+ });
132
+ }
133
+ // ==========================================================================
134
+ // API Principal (Modular — idéntica a firebase/storage v9)
135
+ // ==========================================================================
136
+ function getStorage(config) {
137
+ return { app: {}, config };
138
+ }
139
+ function connectStorageEmulator(storage, host, port) {
140
+ const basePath = storage.config.authEndpoint.includes('/api') ? '/api' : '';
141
+ storage.config.authEndpoint = `http://${host}:${port}${basePath}`;
142
+ }
143
+ function _isStorageReference(value) {
144
+ const candidate = value;
145
+ return !!candidate && typeof candidate.fullPath === 'string' && !!candidate.storage;
146
+ }
147
+ function ref(storageOrRef, path = '') {
148
+ if (_isStorageReference(storageOrRef)) {
149
+ if (!path)
150
+ return storageOrRef;
151
+ const joined = storageOrRef.fullPath
152
+ ? `${storageOrRef.fullPath}/${path}`
153
+ : path;
154
+ return ref(storageOrRef.storage, joined);
155
+ }
156
+ const storage = storageOrRef;
157
+ const normalized = path.startsWith('/') ? path.slice(1) : path;
158
+ const name = normalized.split('/').pop() || '';
159
+ const bucket = storage.config.bucket || 'default';
160
+ const project = storage.config.project || 'default';
161
+ const r = {
162
+ storage,
163
+ fullPath: normalized,
164
+ name,
165
+ bucket,
166
+ parent: null,
167
+ root: null,
168
+ _location: { project, bucket, path: normalized },
169
+ };
170
+ // Lazy parent/root (evita recursión infinita)
171
+ Object.defineProperty(r, 'parent', {
172
+ get() {
173
+ const parts = normalized.split('/');
174
+ if (parts.length <= 1)
175
+ return null;
176
+ parts.pop();
177
+ return ref(storage, parts.join('/'));
178
+ }
179
+ });
180
+ Object.defineProperty(r, 'root', {
181
+ get() { return ref(storage, ''); }
182
+ });
183
+ return r;
184
+ }
185
+ function child(parent, childPath) {
186
+ const newPath = `${parent.fullPath}/${childPath}`.replace(/\/+/g, '/');
187
+ return ref(parent.storage, newPath);
188
+ }
189
+ function getParent(reference) {
190
+ return reference.parent;
191
+ }
192
+ function getRoot(reference) {
193
+ return reference.root;
194
+ }
195
+ // ==========================================================================
196
+ // Operaciones de lectura
197
+ // ==========================================================================
198
+ function getDownloadURL(storageRef) {
199
+ return __awaiter(this, void 0, void 0, function* () {
200
+ const token = yield _requireAuth(storageRef.storage);
201
+ const params = new URLSearchParams();
202
+ params.set('path', storageRef.fullPath);
203
+ if (storageRef._location.project)
204
+ params.set('project', storageRef._location.project);
205
+ if (storageRef._location.bucket)
206
+ params.set('bucket', storageRef._location.bucket);
207
+ const endpoint = `${storageRef.storage.config.authEndpoint}/files/lookup?${params.toString()}`;
208
+ const res = yield fetch(endpoint, { headers: _buildHeaders(storageRef.storage, token) });
209
+ if (!res.ok) {
210
+ const body = yield res.text();
211
+ throw _handleError(res.status, `Path: ${storageRef.fullPath}`, body);
212
+ }
213
+ const data = yield res.json();
214
+ return data.download_url;
215
+ });
216
+ }
217
+ function getMetadata(storageRef) {
218
+ return __awaiter(this, void 0, void 0, function* () {
219
+ if (storageRef._cachedMetadata)
220
+ return storageRef._cachedMetadata;
221
+ const token = yield _requireAuth(storageRef.storage);
222
+ const params = new URLSearchParams();
223
+ params.set('path', storageRef.fullPath);
224
+ if (storageRef._location.project)
225
+ params.set('project', storageRef._location.project);
226
+ if (storageRef._location.bucket)
227
+ params.set('bucket', storageRef._location.bucket);
228
+ const endpoint = `${storageRef.storage.config.authEndpoint}/files/lookup?${params.toString()}`;
229
+ const res = yield fetch(endpoint, { headers: _buildHeaders(storageRef.storage, token) });
230
+ if (!res.ok) {
231
+ const body = yield res.text();
232
+ throw _handleError(res.status, `Path: ${storageRef.fullPath}`, body);
233
+ }
234
+ return res.json();
235
+ });
236
+ }
237
+ function updateMetadata(storageRef, metadata) {
238
+ return __awaiter(this, void 0, void 0, function* () {
239
+ const token = yield _requireAuth(storageRef.storage);
240
+ const fileData = yield getMetadata(storageRef);
241
+ const endpoint = `${storageRef.storage.config.authEndpoint}/files/${fileData.id}/metadata`;
242
+ const res = yield fetch(endpoint, {
243
+ method: 'PATCH',
244
+ headers: _buildHeaders(storageRef.storage, token, 'application/json'),
245
+ body: JSON.stringify(metadata)
246
+ });
247
+ if (!res.ok) {
248
+ const body = yield res.text();
249
+ throw _handleError(res.status, `Update metadata: ${storageRef.fullPath}`, body);
250
+ }
251
+ return res.json();
252
+ });
253
+ }
254
+ function listAll(reference) {
255
+ return __awaiter(this, void 0, void 0, function* () {
256
+ const token = yield _requireAuth(reference.storage);
257
+ const params = new URLSearchParams();
258
+ params.set('prefix', reference.fullPath);
259
+ if (reference._location.project)
260
+ params.set('project', reference._location.project);
261
+ if (reference._location.bucket)
262
+ params.set('bucket', reference._location.bucket);
263
+ const endpoint = `${reference.storage.config.authEndpoint}/files?${params.toString()}`;
264
+ const res = yield fetch(endpoint, { headers: _buildHeaders(reference.storage, token) });
265
+ if (!res.ok) {
266
+ const body = yield res.text();
267
+ throw _handleError(res.status, `List: ${reference.fullPath}`, body);
268
+ }
269
+ const data = yield res.json();
270
+ const items = (data.items || []).map((f) => {
271
+ const r = ref(reference.storage, f.path);
272
+ r._cachedMetadata = f;
273
+ return r;
274
+ });
275
+ const prefixes = (data.prefixes || []).map((p) => ref(reference.storage, p));
276
+ return { items, prefixes };
277
+ });
278
+ }
279
+ function list(reference, options) {
280
+ return __awaiter(this, void 0, void 0, function* () {
281
+ const token = yield _requireAuth(reference.storage);
282
+ const params = new URLSearchParams();
283
+ params.set('prefix', reference.fullPath);
284
+ if (options === null || options === void 0 ? void 0 : options.maxResults)
285
+ params.set('limit', options.maxResults.toString());
286
+ if (options === null || options === void 0 ? void 0 : options.pageToken)
287
+ params.set('offset', options.pageToken);
288
+ if (reference._location.project)
289
+ params.set('project', reference._location.project);
290
+ if (reference._location.bucket)
291
+ params.set('bucket', reference._location.bucket);
292
+ const endpoint = `${reference.storage.config.authEndpoint}/files?${params.toString()}`;
293
+ const res = yield fetch(endpoint, { headers: _buildHeaders(reference.storage, token) });
294
+ if (!res.ok) {
295
+ const body = yield res.text();
296
+ throw _handleError(res.status, `List: ${reference.fullPath}`, body);
297
+ }
298
+ const data = yield res.json();
299
+ const items = (data.items || []).map((f) => {
300
+ const r = ref(reference.storage, f.path);
301
+ r._cachedMetadata = f;
302
+ return r;
303
+ });
304
+ const prefixes = (data.prefixes || []).map((p) => ref(reference.storage, p));
305
+ const result = { items, prefixes };
306
+ if (data.hasMore) {
307
+ result.nextPageToken = String((parseInt((options === null || options === void 0 ? void 0 : options.pageToken) || '0') + ((options === null || options === void 0 ? void 0 : options.maxResults) || 1000)));
308
+ }
309
+ return result;
310
+ });
311
+ }
312
+ // ==========================================================================
313
+ // Operaciones de descarga
314
+ // ==========================================================================
315
+ function getBlob(storageRef, maxDownloadSizeBytes) {
316
+ return __awaiter(this, void 0, void 0, function* () {
317
+ const token = yield _requireAuth(storageRef.storage);
318
+ const fileData = yield getMetadata(storageRef);
319
+ if (maxDownloadSizeBytes && fileData.size_bytes > maxDownloadSizeBytes) {
320
+ throw new StorageError('storage/unknown', `File size ${fileData.size_bytes} exceeds max ${maxDownloadSizeBytes}`);
321
+ }
322
+ const endpoint = `${storageRef.storage.config.authEndpoint}/files/${fileData.id}/download`;
323
+ const res = yield fetch(endpoint, { headers: _buildHeaders(storageRef.storage, token) });
324
+ if (!res.ok) {
325
+ const body = yield res.text();
326
+ throw _handleError(res.status, `Download: ${storageRef.fullPath}`, body);
327
+ }
328
+ return res.blob();
329
+ });
330
+ }
331
+ function getBytes(storageRef, maxDownloadSizeBytes) {
332
+ return __awaiter(this, void 0, void 0, function* () {
333
+ const blob = yield getBlob(storageRef, maxDownloadSizeBytes);
334
+ return blob.arrayBuffer();
335
+ });
336
+ }
337
+ function getStream(storageRef, maxDownloadSizeBytes) {
338
+ return __awaiter(this, void 0, void 0, function* () {
339
+ const token = yield _requireAuth(storageRef.storage);
340
+ const fileData = yield getMetadata(storageRef);
341
+ if (maxDownloadSizeBytes && fileData.size_bytes > maxDownloadSizeBytes) {
342
+ throw new StorageError('storage/unknown', `File size ${fileData.size_bytes} exceeds max ${maxDownloadSizeBytes}`);
343
+ }
344
+ const endpoint = `${storageRef.storage.config.authEndpoint}/files/${fileData.id}/download`;
345
+ const res = yield fetch(endpoint, { headers: _buildHeaders(storageRef.storage, token) });
346
+ if (!res.ok || !res.body) {
347
+ const body = res.body ? yield res.text() : '';
348
+ throw _handleError(res.status, `Stream: ${storageRef.fullPath}`, body);
349
+ }
350
+ return res.body;
351
+ });
352
+ }
353
+ // ==========================================================================
354
+ // Operaciones de escritura
355
+ // ==========================================================================
356
+ function deleteObject(storageRef) {
357
+ return __awaiter(this, void 0, void 0, function* () {
358
+ const token = yield _requireAuth(storageRef.storage);
359
+ const headers = _buildHeaders(storageRef.storage, token);
360
+ // 1. Lookup
361
+ const params = new URLSearchParams();
362
+ params.set('path', storageRef.fullPath);
363
+ if (storageRef._location.project)
364
+ params.set('project', storageRef._location.project);
365
+ if (storageRef._location.bucket)
366
+ params.set('bucket', storageRef._location.bucket);
367
+ const endpoint = `${storageRef.storage.config.authEndpoint}/files/lookup?${params.toString()}`;
368
+ const lookupRes = yield fetch(endpoint, { headers });
369
+ if (!lookupRes.ok) {
370
+ if (lookupRes.status === 404)
371
+ return; // Idempotent
372
+ const body = yield lookupRes.text();
373
+ throw _handleError(lookupRes.status, `Delete lookup: ${storageRef.fullPath}`, body);
374
+ }
375
+ const { id } = yield lookupRes.json();
376
+ // 2. Delete
377
+ const deleteRes = yield fetch(`${storageRef.storage.config.authEndpoint}/files/${id}`, {
378
+ method: 'DELETE', headers
379
+ });
380
+ if (!deleteRes.ok) {
381
+ const body = yield deleteRes.text();
382
+ throw _handleError(deleteRes.status, `Delete: ${storageRef.fullPath}`, body);
383
+ }
384
+ });
385
+ }
386
+ function uploadBytesResumable(storageRef, data, metadata) {
387
+ const task = new CustomUploadTask(storageRef, data, metadata);
388
+ setTimeout(() => task._start(), 0);
389
+ return task;
390
+ }
391
+ function uploadBytes(storageRef, data, metadata) {
392
+ return __awaiter(this, void 0, void 0, function* () {
393
+ return new Promise((resolve, reject) => {
394
+ const task = uploadBytesResumable(storageRef, data, metadata);
395
+ task.on('state_changed', undefined, reject, () => resolve(task.snapshot));
396
+ });
397
+ });
398
+ }
399
+ function uploadString(storageRef_1, value_1) {
400
+ return __awaiter(this, arguments, void 0, function* (storageRef, value, format = 'raw', metadata) {
401
+ let data;
402
+ let contentType = (metadata === null || metadata === void 0 ? void 0 : metadata.contentType) || 'text/plain';
403
+ switch (format) {
404
+ case 'raw':
405
+ data = new TextEncoder().encode(value);
406
+ break;
407
+ case 'base64':
408
+ data = Uint8Array.from(atob(value), c => c.charCodeAt(0));
409
+ break;
410
+ case 'base64url': {
411
+ const b64 = value.replace(/-/g, '+').replace(/_/g, '/');
412
+ data = Uint8Array.from(atob(b64), c => c.charCodeAt(0));
413
+ break;
414
+ }
415
+ case 'data_url': {
416
+ const match = value.match(/^data:([^;,]+)?(?:;base64)?,(.*)$/);
417
+ if (!match)
418
+ throw new StorageError('storage/invalid-argument', 'Invalid data URL format');
419
+ contentType = match[1] || 'application/octet-stream';
420
+ data = Uint8Array.from(atob(match[2] || ''), c => c.charCodeAt(0));
421
+ break;
422
+ }
423
+ default:
424
+ throw new StorageError('storage/invalid-argument', `Unknown string format: ${format}`);
425
+ }
426
+ return uploadBytes(storageRef, data, Object.assign(Object.assign({}, metadata), { contentType }));
427
+ });
428
+ }
429
+ // ==========================================================================
430
+ // Funcionalidades Extendidas (Storage Clone Exclusives)
431
+ // ==========================================================================
432
+ function getThumbnailURL(storageRef_1) {
433
+ return __awaiter(this, arguments, void 0, function* (storageRef, width = 320) {
434
+ const metadata = yield getMetadata(storageRef);
435
+ const baseURL = storageRef.storage.config.authEndpoint.replace(/\/api$/, '');
436
+ return `${baseURL}/media/${metadata.id}/thumbnail?token=${metadata.download_token}&w=${width}`;
437
+ });
438
+ }
439
+ // ==========================================================================
440
+ // Implementación Interna: UploadTask
441
+ // ==========================================================================
442
+ class CustomUploadTask {
443
+ constructor(_ref, data, metadata) {
444
+ this._ref = _ref;
445
+ this.observers = [];
446
+ this.xhr = null;
447
+ this.file = data instanceof Blob ? data : new Blob([data]);
448
+ this._snapshot = {
449
+ bytesTransferred: 0,
450
+ totalBytes: this.file.size,
451
+ state: 'running',
452
+ metadata: metadata || {},
453
+ ref: _ref,
454
+ task: this
455
+ };
456
+ }
457
+ _start() {
458
+ return __awaiter(this, void 0, void 0, function* () {
459
+ try {
460
+ const token = yield this._ref.storage.config.tokenGetter();
461
+ if (!token) {
462
+ throw new StorageError('storage/unauthenticated', 'User is not authenticated.');
463
+ }
464
+ const checksum = yield this._computeChecksum(this.file);
465
+ // Intent
466
+ const intentRes = yield fetch(`${this._ref.storage.config.authEndpoint}/upload-intent`, {
467
+ method: 'POST',
468
+ headers: _buildHeaders(this._ref.storage, token, 'application/json'),
469
+ body: JSON.stringify({
470
+ path: this._ref.fullPath,
471
+ mime_type: this.file.type || 'application/octet-stream',
472
+ size: this.file.size,
473
+ name: this._ref.name,
474
+ md5_hash: checksum,
475
+ project: this._ref._location.project || 'default',
476
+ bucket: this._ref._location.bucket || 'default'
477
+ })
478
+ });
479
+ if (!intentRes.ok) {
480
+ const body = yield intentRes.text();
481
+ throw _handleError(intentRes.status, `Upload intent: ${this._ref.fullPath}`, body);
482
+ }
483
+ const intent = yield intentRes.json();
484
+ // Upload to storage
485
+ yield this._performResilientUpload(intent.upload_url);
486
+ // Finalize
487
+ const finalizeRes = yield fetch(`${this._ref.storage.config.authEndpoint}/files/${intent.object_id}/finalize`, { method: 'POST', headers: _buildHeaders(this._ref.storage, token) });
488
+ if (!finalizeRes.ok) {
489
+ const body = yield finalizeRes.text();
490
+ throw _handleError(finalizeRes.status, `Upload finalize: ${this._ref.fullPath}`, body);
491
+ }
492
+ this._updateState('success');
493
+ }
494
+ catch (err) {
495
+ this._updateState('error');
496
+ const storageErr = err instanceof StorageError ? err
497
+ : new StorageError('storage/unknown', err.message || 'Upload failed');
498
+ this.notifyError(storageErr);
499
+ }
500
+ });
501
+ }
502
+ _performResilientUpload(url_1) {
503
+ return __awaiter(this, arguments, void 0, function* (url, attempts = 0) {
504
+ const MAX_RETRIES = 5;
505
+ const BASE_DELAY = 1000;
506
+ try {
507
+ yield this._uploadToUrl(url);
508
+ }
509
+ catch (err) {
510
+ const isRetryable = err.message === 'Network Error'
511
+ || err.message === 'Upload HTTP 500'
512
+ || err.message === 'Upload HTTP 503';
513
+ if (isRetryable && attempts < MAX_RETRIES) {
514
+ const prevBytes = this._snapshot.bytesTransferred;
515
+ this._snapshot.state = 'paused';
516
+ this.notify();
517
+ yield new Promise(r => setTimeout(r, BASE_DELAY * Math.pow(2, attempts)));
518
+ this._snapshot.state = 'running';
519
+ this._snapshot.bytesTransferred = prevBytes;
520
+ this.notify();
521
+ return this._performResilientUpload(url, attempts + 1);
522
+ }
523
+ if (isRetryable) {
524
+ throw new StorageError('storage/retry-limit-exceeded', 'Max retry limit exceeded.');
525
+ }
526
+ throw err;
527
+ }
528
+ });
529
+ }
530
+ _uploadToUrl(url) {
531
+ return new Promise((resolve, reject) => {
532
+ this.xhr = new XMLHttpRequest();
533
+ this.xhr.open('PUT', url, true);
534
+ this.xhr.setRequestHeader('Content-Type', this.file.type);
535
+ this.xhr.upload.onprogress = (e) => {
536
+ if (e.lengthComputable) {
537
+ this._snapshot.bytesTransferred = e.loaded;
538
+ this._snapshot.totalBytes = e.total;
539
+ this.notify();
540
+ }
541
+ };
542
+ this.xhr.onload = () => {
543
+ if (this.xhr && this.xhr.status >= 200 && this.xhr.status < 300) {
544
+ resolve();
545
+ }
546
+ else {
547
+ reject(new Error(`Upload HTTP ${this.xhr ? this.xhr.status : 'Unknown'}`));
548
+ }
549
+ };
550
+ this.xhr.onerror = () => reject(new Error('Network Error'));
551
+ this.xhr.onabort = () => reject(new StorageError('storage/canceled', 'Upload was canceled.'));
552
+ this.xhr.send(this.file);
553
+ });
554
+ }
555
+ _computeChecksum(file) {
556
+ return __awaiter(this, void 0, void 0, function* () {
557
+ const anyFile = file;
558
+ if (typeof anyFile.arrayBuffer === 'function') {
559
+ const buffer = yield anyFile.arrayBuffer();
560
+ return SparkMD5.ArrayBuffer.hash(buffer);
561
+ }
562
+ if (typeof anyFile.text === 'function') {
563
+ const text = yield anyFile.text();
564
+ const bytes = new TextEncoder().encode(text);
565
+ return SparkMD5.ArrayBuffer.hash(bytes.buffer);
566
+ }
567
+ if (typeof FileReader !== 'undefined') {
568
+ const buffer = yield new Promise((resolve, reject) => {
569
+ const reader = new FileReader();
570
+ reader.onload = () => resolve(reader.result);
571
+ reader.onerror = () => reject(new Error('Unable to read blob with FileReader'));
572
+ reader.readAsArrayBuffer(file);
573
+ });
574
+ return SparkMD5.ArrayBuffer.hash(buffer);
575
+ }
576
+ throw new Error('Unable to compute checksum for provided file/blob');
577
+ });
578
+ }
579
+ _updateState(state) {
580
+ this._snapshot.state = state;
581
+ this.notify();
582
+ if (state === 'success')
583
+ this.notifyComplete();
584
+ }
585
+ get snapshot() { return this._snapshot; }
586
+ on(event, next, error, complete) {
587
+ const obs = { next, error, complete };
588
+ this.observers.push(obs);
589
+ if (next)
590
+ setTimeout(() => next(this._snapshot), 0);
591
+ return () => { this.observers = this.observers.filter(o => o !== obs); };
592
+ }
593
+ then(onFulfilled, onRejected) {
594
+ return new Promise((resolve, reject) => {
595
+ const check = () => {
596
+ if (this._snapshot.state === 'success') {
597
+ resolve(onFulfilled ? onFulfilled(this._snapshot) : this._snapshot);
598
+ }
599
+ else if (this._snapshot.state === 'error') {
600
+ reject(onRejected ? onRejected(new StorageError('storage/unknown', 'Task failed')) : new StorageError('storage/unknown', 'Task failed'));
601
+ }
602
+ else {
603
+ this.on('state_changed', undefined, reject, () => {
604
+ resolve(onFulfilled ? onFulfilled(this._snapshot) : this._snapshot);
605
+ });
606
+ }
607
+ };
608
+ check();
609
+ });
610
+ }
611
+ cancel() {
612
+ if (this.xhr) {
613
+ this.xhr.abort();
614
+ this._updateState('canceled');
615
+ return true;
616
+ }
617
+ return false;
618
+ }
619
+ pause() { return false; }
620
+ resume() { return false; }
621
+ notify() { this.observers.forEach(o => o.next && o.next(this._snapshot)); }
622
+ notifyError(e) { this.observers.forEach(o => o.error && o.error(e)); }
623
+ notifyComplete() { this.observers.forEach(o => o.complete && o.complete()); }
624
+ }
625
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}