UNPKG

@pazznetwork/ngx-chat

Version:

[![Build status](https://api.travis-ci.com/pazznetwork/ngx-chat.svg?branch=master)](https://travis-ci.com/pazznetwork/ngx-chat) [![Coverage](https://coveralls.io/repos/github/pazznetwork/ngx-chat/badge.svg?branch=master)](https://coveralls.io/github/pazzn

47 lines 7.87 kB
import { xml } from '@xmpp/client'; import { AbstractXmppPlugin } from './abstract-xmpp-plugin'; /** * XEP-0363 http file upload */ export class HttpFileUploadPlugin extends AbstractXmppPlugin { constructor(httpClient, serviceDiscoveryPlugin, xmppChatAdapter, logService) { super(); this.httpClient = httpClient; this.serviceDiscoveryPlugin = serviceDiscoveryPlugin; this.xmppChatAdapter = xmppChatAdapter; this.logService = logService; } onBeforeOnline() { this.uploadService = this.serviceDiscoveryPlugin.findService('store', 'file'); this.uploadService.then(() => { this.fileUploadSupported = true; }, () => { this.fileUploadSupported = false; this.logService.info('http file upload not supported'); }); return Promise.resolve(); } onOffline() { this.uploadService = null; this.fileUploadSupported = false; } async upload(file) { await this.uploadService; const { name, size, type } = file; const slotUrl = await this.requestSlot(name, size.toString(), type); return await this.uploadToSlot(slotUrl, file); } isUploadSupported() { return this.fileUploadSupported; } async requestSlot(filename, size, contentType) { const to = (await this.uploadService).jid; const slotResponse = await this.xmppChatAdapter.chatConnectionService.sendIq(xml('iq', { to, type: 'get' }, xml('request', { xmlns: 'urn:xmpp:http:upload:0', filename, size, 'content-type': contentType }))); return slotResponse.getChild('slot').getChild('put').attrs.url; } async uploadToSlot(slot, file) { await this.httpClient.put(slot, file, { responseType: 'blob' }).toPromise(); return slot; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1maWxlLXVwbG9hZC5wbHVnaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2FkYXB0ZXJzL3htcHAvcGx1Z2lucy9odHRwLWZpbGUtdXBsb2FkLnBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBR25DLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBSTVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLG9CQUFxQixTQUFRLGtCQUFrQjtJQUt4RCxZQUNxQixVQUFzQixFQUN0QixzQkFBOEMsRUFDOUMsZUFBZ0MsRUFDaEMsVUFBc0I7UUFFdkMsS0FBSyxFQUFFLENBQUM7UUFMUyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUFDOUMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLGVBQVUsR0FBVixVQUFVLENBQVk7SUFHM0MsQ0FBQztJQUVELGNBQWM7UUFDVixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzlFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUN6QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1FBQ3BDLENBQUMsRUFBRSxHQUFHLEVBQUU7WUFDSixJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFDM0QsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsU0FBUztRQUNMLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzFCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUM7SUFDckMsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBVTtRQUNuQixNQUFNLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDekIsTUFBTSxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ2hDLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3BFLE9BQU8sTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsaUJBQWlCO1FBQ2IsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUM7SUFDcEMsQ0FBQztJQUVPLEtBQUssQ0FBQyxXQUFXLENBQUMsUUFBZ0IsRUFBRSxJQUFZLEVBQUUsV0FBbUI7UUFDekUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDMUMsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FDeEUsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFDLEVBQ3ZCLEdBQUcsQ0FBQyxTQUFTLEVBQUUsRUFBQyxLQUFLLEVBQUUsd0JBQXdCLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekcsT0FBTyxZQUFZLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO0lBQ25FLENBQUM7SUFFTyxLQUFLLENBQUMsWUFBWSxDQUFDLElBQVksRUFBRSxJQUFVO1FBQy9DLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFDLFlBQVksRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzFFLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7Q0FFSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyB4bWwgfSBmcm9tICdAeG1wcC9jbGllbnQnO1xuaW1wb3J0IHsgTG9nU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2xvZy5zZXJ2aWNlJztcbmltcG9ydCB7IFhtcHBDaGF0QWRhcHRlciB9IGZyb20gJy4uL3htcHAtY2hhdC1hZGFwdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWJzdHJhY3RYbXBwUGx1Z2luIH0gZnJvbSAnLi9hYnN0cmFjdC14bXBwLXBsdWdpbic7XG5pbXBvcnQgeyBTZXJ2aWNlLCBTZXJ2aWNlRGlzY292ZXJ5UGx1Z2luIH0gZnJvbSAnLi9zZXJ2aWNlLWRpc2NvdmVyeS5wbHVnaW4nO1xuaW1wb3J0IHtGaWxlVXBsb2FkSGFuZGxlcn0gZnJvbSAnLi4vLi4vLi4vLi4vaG9va3MvZmlsZS11cGxvYWQtaGFuZGxlcic7XG5cbi8qKlxuICogWEVQLTAzNjMgaHR0cCBmaWxlIHVwbG9hZFxuICovXG5leHBvcnQgY2xhc3MgSHR0cEZpbGVVcGxvYWRQbHVnaW4gZXh0ZW5kcyBBYnN0cmFjdFhtcHBQbHVnaW4gaW1wbGVtZW50cyBGaWxlVXBsb2FkSGFuZGxlciB7XG5cbiAgICBwcml2YXRlIGZpbGVVcGxvYWRTdXBwb3J0ZWQ6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSB1cGxvYWRTZXJ2aWNlOiBQcm9taXNlPFNlcnZpY2U+O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgaHR0cENsaWVudDogSHR0cENsaWVudCxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBzZXJ2aWNlRGlzY292ZXJ5UGx1Z2luOiBTZXJ2aWNlRGlzY292ZXJ5UGx1Z2luLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHhtcHBDaGF0QWRhcHRlcjogWG1wcENoYXRBZGFwdGVyLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGxvZ1NlcnZpY2U6IExvZ1NlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICBvbkJlZm9yZU9ubGluZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy51cGxvYWRTZXJ2aWNlID0gdGhpcy5zZXJ2aWNlRGlzY292ZXJ5UGx1Z2luLmZpbmRTZXJ2aWNlKCdzdG9yZScsICdmaWxlJyk7XG4gICAgICAgIHRoaXMudXBsb2FkU2VydmljZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZmlsZVVwbG9hZFN1cHBvcnRlZCA9IHRydWU7XG4gICAgICAgIH0sICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZmlsZVVwbG9hZFN1cHBvcnRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5sb2dTZXJ2aWNlLmluZm8oJ2h0dHAgZmlsZSB1cGxvYWQgbm90IHN1cHBvcnRlZCcpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIG9uT2ZmbGluZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy51cGxvYWRTZXJ2aWNlID0gbnVsbDtcbiAgICAgICAgdGhpcy5maWxlVXBsb2FkU3VwcG9ydGVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgYXN5bmMgdXBsb2FkKGZpbGU6IEZpbGUpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBhd2FpdCB0aGlzLnVwbG9hZFNlcnZpY2U7XG4gICAgICAgIGNvbnN0IHtuYW1lLCBzaXplLCB0eXBlfSA9IGZpbGU7XG4gICAgICAgIGNvbnN0IHNsb3RVcmwgPSBhd2FpdCB0aGlzLnJlcXVlc3RTbG90KG5hbWUsIHNpemUudG9TdHJpbmcoKSwgdHlwZSk7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnVwbG9hZFRvU2xvdChzbG90VXJsLCBmaWxlKTtcbiAgICB9XG5cbiAgICBpc1VwbG9hZFN1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsZVVwbG9hZFN1cHBvcnRlZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHJlcXVlc3RTbG90KGZpbGVuYW1lOiBzdHJpbmcsIHNpemU6IHN0cmluZywgY29udGVudFR5cGU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGNvbnN0IHRvID0gKGF3YWl0IHRoaXMudXBsb2FkU2VydmljZSkuamlkO1xuICAgICAgICBjb25zdCBzbG90UmVzcG9uc2UgPSBhd2FpdCB0aGlzLnhtcHBDaGF0QWRhcHRlci5jaGF0Q29ubmVjdGlvblNlcnZpY2Uuc2VuZElxKFxuICAgICAgICAgICAgeG1sKCdpcScsIHt0bywgdHlwZTogJ2dldCd9LFxuICAgICAgICAgICAgICAgIHhtbCgncmVxdWVzdCcsIHt4bWxuczogJ3Vybjp4bXBwOmh0dHA6dXBsb2FkOjAnLCBmaWxlbmFtZSwgc2l6ZSwgJ2NvbnRlbnQtdHlwZSc6IGNvbnRlbnRUeXBlfSkpKTtcbiAgICAgICAgcmV0dXJuIHNsb3RSZXNwb25zZS5nZXRDaGlsZCgnc2xvdCcpLmdldENoaWxkKCdwdXQnKS5hdHRycy51cmw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyB1cGxvYWRUb1Nsb3Qoc2xvdDogc3RyaW5nLCBmaWxlOiBGaWxlKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50LnB1dChzbG90LCBmaWxlLCB7cmVzcG9uc2VUeXBlOiAnYmxvYid9KS50b1Byb21pc2UoKTtcbiAgICAgICAgcmV0dXJuIHNsb3Q7XG4gICAgfVxuXG59XG4iXX0=