UNPKG

ngx-uploadx

Version:
41 lines 5.79 kB
import { Uploader } from './uploader'; import { b64, resolveUrl } from './utils'; /** * Implements tus resumable upload protocol * {@link https://github.com/tus/tus-resumable-upload-protocol/blob/master/protocol.md Github} */ export class Tus extends Uploader { headers = { 'Tus-Resumable': '1.0.0' }; async getFileUrl() { const encodedMetaData = b64.serialize(this.metadata); const headers = { 'Upload-Length': this.size, 'Upload-Metadata': encodedMetaData }; await this.request({ method: 'POST', url: this.endpoint, headers }); this.offset = this.getOffsetFromResponse() || (this.responseStatus === 201 ? 0 : undefined); const location = this.getValueFromResponse('location'); if (!location) { throw new Error('Invalid or missing Location header'); } return resolveUrl(location, this.endpoint); } async sendFileContent() { const { body, start, end } = this.getChunk(); const headers = { 'Content-Type': 'application/offset+octet-stream', 'Upload-Offset': start }; await this.request({ method: 'PATCH', body, headers }); return this.getOffsetFromResponse() || end; } async getOffset() { await this.request({ method: 'HEAD' }); return this.getOffsetFromResponse(); } getOffsetFromResponse() { const offset = this.getValueFromResponse('Upload-Offset'); return offset ? parseInt(offset, 10) : undefined; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3VwbG9hZHgvbGliL3R1cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRTFDOzs7R0FHRztBQUNILE1BQU0sT0FBTyxHQUFJLFNBQVEsUUFBUTtJQUMvQixPQUFPLEdBQUcsRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLENBQUM7SUFFdkMsS0FBSyxDQUFDLFVBQVU7UUFDZCxNQUFNLGVBQWUsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNyRCxNQUFNLE9BQU8sR0FBRztZQUNkLGVBQWUsRUFBRSxJQUFJLENBQUMsSUFBSTtZQUMxQixpQkFBaUIsRUFBRSxlQUFlO1NBQ25DLENBQUM7UUFDRixNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzVGLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDZCxNQUFNLElBQUksS0FBSyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7UUFDeEQsQ0FBQztRQUNELE9BQU8sVUFBVSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELEtBQUssQ0FBQyxlQUFlO1FBQ25CLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM3QyxNQUFNLE9BQU8sR0FBRztZQUNkLGNBQWMsRUFBRSxpQ0FBaUM7WUFDakQsZUFBZSxFQUFFLEtBQUs7U0FDdkIsQ0FBQztRQUNGLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDdkQsT0FBTyxJQUFJLENBQUMscUJBQXFCLEVBQUUsSUFBSSxHQUFHLENBQUM7SUFDN0MsQ0FBQztJQUVELEtBQUssQ0FBQyxTQUFTO1FBQ2IsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDdkMsT0FBTyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRVMscUJBQXFCO1FBQzdCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMxRCxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ25ELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFVwbG9hZGVyIH0gZnJvbSAnLi91cGxvYWRlcic7XG5pbXBvcnQgeyBiNjQsIHJlc29sdmVVcmwgfSBmcm9tICcuL3V0aWxzJztcblxuLyoqXG4gKiBJbXBsZW1lbnRzIHR1cyByZXN1bWFibGUgdXBsb2FkIHByb3RvY29sXG4gKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3R1cy90dXMtcmVzdW1hYmxlLXVwbG9hZC1wcm90b2NvbC9ibG9iL21hc3Rlci9wcm90b2NvbC5tZCAgR2l0aHVifVxuICovXG5leHBvcnQgY2xhc3MgVHVzIGV4dGVuZHMgVXBsb2FkZXIge1xuICBoZWFkZXJzID0geyAnVHVzLVJlc3VtYWJsZSc6ICcxLjAuMCcgfTtcblxuICBhc3luYyBnZXRGaWxlVXJsKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgZW5jb2RlZE1ldGFEYXRhID0gYjY0LnNlcmlhbGl6ZSh0aGlzLm1ldGFkYXRhKTtcbiAgICBjb25zdCBoZWFkZXJzID0ge1xuICAgICAgJ1VwbG9hZC1MZW5ndGgnOiB0aGlzLnNpemUsXG4gICAgICAnVXBsb2FkLU1ldGFkYXRhJzogZW5jb2RlZE1ldGFEYXRhXG4gICAgfTtcbiAgICBhd2FpdCB0aGlzLnJlcXVlc3QoeyBtZXRob2Q6ICdQT1NUJywgdXJsOiB0aGlzLmVuZHBvaW50LCBoZWFkZXJzIH0pO1xuICAgIHRoaXMub2Zmc2V0ID0gdGhpcy5nZXRPZmZzZXRGcm9tUmVzcG9uc2UoKSB8fCAodGhpcy5yZXNwb25zZVN0YXR1cyA9PT0gMjAxID8gMCA6IHVuZGVmaW5lZCk7XG4gICAgY29uc3QgbG9jYXRpb24gPSB0aGlzLmdldFZhbHVlRnJvbVJlc3BvbnNlKCdsb2NhdGlvbicpO1xuICAgIGlmICghbG9jYXRpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBvciBtaXNzaW5nIExvY2F0aW9uIGhlYWRlcicpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzb2x2ZVVybChsb2NhdGlvbiwgdGhpcy5lbmRwb2ludCk7XG4gIH1cblxuICBhc3luYyBzZW5kRmlsZUNvbnRlbnQoKTogUHJvbWlzZTxudW1iZXIgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCB7IGJvZHksIHN0YXJ0LCBlbmQgfSA9IHRoaXMuZ2V0Q2h1bmsoKTtcbiAgICBjb25zdCBoZWFkZXJzID0ge1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9vZmZzZXQrb2N0ZXQtc3RyZWFtJyxcbiAgICAgICdVcGxvYWQtT2Zmc2V0Jzogc3RhcnRcbiAgICB9O1xuICAgIGF3YWl0IHRoaXMucmVxdWVzdCh7IG1ldGhvZDogJ1BBVENIJywgYm9keSwgaGVhZGVycyB9KTtcbiAgICByZXR1cm4gdGhpcy5nZXRPZmZzZXRGcm9tUmVzcG9uc2UoKSB8fCBlbmQ7XG4gIH1cblxuICBhc3luYyBnZXRPZmZzZXQoKTogUHJvbWlzZTxudW1iZXIgfCB1bmRlZmluZWQ+IHtcbiAgICBhd2FpdCB0aGlzLnJlcXVlc3QoeyBtZXRob2Q6ICdIRUFEJyB9KTtcbiAgICByZXR1cm4gdGhpcy5nZXRPZmZzZXRGcm9tUmVzcG9uc2UoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRPZmZzZXRGcm9tUmVzcG9uc2UoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBvZmZzZXQgPSB0aGlzLmdldFZhbHVlRnJvbVJlc3BvbnNlKCdVcGxvYWQtT2Zmc2V0Jyk7XG4gICAgcmV0dXJuIG9mZnNldCA/IHBhcnNlSW50KG9mZnNldCwgMTApIDogdW5kZWZpbmVkO1xuICB9XG59XG4iXX0=