UNPKG

@hsaadawy/ngx-chat

Version:
51 lines 7.97 kB
import { __awaiter } from "tslib"; 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; } upload(file) { return __awaiter(this, void 0, void 0, function* () { yield this.uploadService; const { name, size, type } = file; const slotUrl = yield this.requestSlot(name, size.toString(), type); return yield this.uploadToSlot(slotUrl, file); }); } requestSlot(filename, size, contentType) { return __awaiter(this, void 0, void 0, function* () { const to = (yield this.uploadService).jid; const slotResponse = yield 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; }); } uploadToSlot(slot, file) { return __awaiter(this, void 0, void 0, function* () { yield this.httpClient.put(slot, file, { responseType: 'blob' }).toPromise(); return slot; }); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1maWxlLXVwbG9hZC5wbHVnaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wYXp6bmV0d29yay9uZ3gtY2hhdC9zcmMvbGliL3NlcnZpY2VzL2FkYXB0ZXJzL3htcHAvcGx1Z2lucy9odHRwLWZpbGUtdXBsb2FkLnBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUduQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUc1RDs7R0FFRztBQUNILE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxrQkFBa0I7SUFLeEQsWUFDcUIsVUFBc0IsRUFDdEIsc0JBQThDLEVBQzlDLGVBQWdDLEVBQ2hDLFVBQXNCO1FBRXZDLEtBQUssRUFBRSxDQUFDO1FBTFMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzlDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxlQUFVLEdBQVYsVUFBVSxDQUFZO0lBRzNDLENBQUM7SUFFRCxjQUFjO1FBQ1YsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM5RSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDekIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztRQUNwQyxDQUFDLEVBQUUsR0FBRyxFQUFFO1lBQ0osSUFBSSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQztZQUNqQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBQzNELENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELFNBQVM7UUFDTCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUMxQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO0lBQ3JDLENBQUM7SUFFSyxNQUFNLENBQUMsSUFBVTs7WUFDbkIsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDO1lBQ3pCLE1BQU0sRUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBQyxHQUFHLElBQUksQ0FBQztZQUNoQyxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNwRSxPQUFPLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbEQsQ0FBQztLQUFBO0lBRWEsV0FBVyxDQUFDLFFBQWdCLEVBQUUsSUFBWSxFQUFFLFdBQW1COztZQUN6RSxNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUMxQyxNQUFNLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUN4RSxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUMsRUFDdkIsR0FBRyxDQUFDLFNBQVMsRUFBRSxFQUFDLEtBQUssRUFBRSx3QkFBd0IsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6RyxPQUFPLFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7UUFDbkUsQ0FBQztLQUFBO0lBRWEsWUFBWSxDQUFDLElBQVksRUFBRSxJQUFVOztZQUMvQyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBQyxZQUFZLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUMxRSxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO0tBQUE7Q0FFSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IHhtbCB9IGZyb20gJ0B4bXBwL2NsaWVudCc7XHJcbmltcG9ydCB7IExvZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9sb2cuc2VydmljZSc7XHJcbmltcG9ydCB7IFhtcHBDaGF0QWRhcHRlciB9IGZyb20gJy4uL3htcHAtY2hhdC1hZGFwdGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBYnN0cmFjdFhtcHBQbHVnaW4gfSBmcm9tICcuL2Fic3RyYWN0LXhtcHAtcGx1Z2luJztcclxuaW1wb3J0IHsgU2VydmljZSwgU2VydmljZURpc2NvdmVyeVBsdWdpbiB9IGZyb20gJy4vc2VydmljZS1kaXNjb3ZlcnkucGx1Z2luJztcclxuXHJcbi8qKlxyXG4gKiBYRVAtMDM2MyBodHRwIGZpbGUgdXBsb2FkXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgSHR0cEZpbGVVcGxvYWRQbHVnaW4gZXh0ZW5kcyBBYnN0cmFjdFhtcHBQbHVnaW4ge1xyXG5cclxuICAgIGZpbGVVcGxvYWRTdXBwb3J0ZWQ6IGJvb2xlYW47XHJcbiAgICBwcml2YXRlIHVwbG9hZFNlcnZpY2U6IFByb21pc2U8U2VydmljZT47XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBodHRwQ2xpZW50OiBIdHRwQ2xpZW50LFxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgc2VydmljZURpc2NvdmVyeVBsdWdpbjogU2VydmljZURpc2NvdmVyeVBsdWdpbixcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHhtcHBDaGF0QWRhcHRlcjogWG1wcENoYXRBZGFwdGVyLFxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgbG9nU2VydmljZTogTG9nU2VydmljZVxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkJlZm9yZU9ubGluZSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICB0aGlzLnVwbG9hZFNlcnZpY2UgPSB0aGlzLnNlcnZpY2VEaXNjb3ZlcnlQbHVnaW4uZmluZFNlcnZpY2UoJ3N0b3JlJywgJ2ZpbGUnKTtcclxuICAgICAgICB0aGlzLnVwbG9hZFNlcnZpY2UudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsZVVwbG9hZFN1cHBvcnRlZCA9IHRydWU7XHJcbiAgICAgICAgfSwgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmZpbGVVcGxvYWRTdXBwb3J0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5sb2dTZXJ2aWNlLmluZm8oJ2h0dHAgZmlsZSB1cGxvYWQgbm90IHN1cHBvcnRlZCcpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBvbk9mZmxpbmUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy51cGxvYWRTZXJ2aWNlID0gbnVsbDtcclxuICAgICAgICB0aGlzLmZpbGVVcGxvYWRTdXBwb3J0ZWQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB1cGxvYWQoZmlsZTogRmlsZSk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy51cGxvYWRTZXJ2aWNlO1xyXG4gICAgICAgIGNvbnN0IHtuYW1lLCBzaXplLCB0eXBlfSA9IGZpbGU7XHJcbiAgICAgICAgY29uc3Qgc2xvdFVybCA9IGF3YWl0IHRoaXMucmVxdWVzdFNsb3QobmFtZSwgc2l6ZS50b1N0cmluZygpLCB0eXBlKTtcclxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy51cGxvYWRUb1Nsb3Qoc2xvdFVybCwgZmlsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyByZXF1ZXN0U2xvdChmaWxlbmFtZTogc3RyaW5nLCBzaXplOiBzdHJpbmcsIGNvbnRlbnRUeXBlOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xyXG4gICAgICAgIGNvbnN0IHRvID0gKGF3YWl0IHRoaXMudXBsb2FkU2VydmljZSkuamlkO1xyXG4gICAgICAgIGNvbnN0IHNsb3RSZXNwb25zZSA9IGF3YWl0IHRoaXMueG1wcENoYXRBZGFwdGVyLmNoYXRDb25uZWN0aW9uU2VydmljZS5zZW5kSXEoXHJcbiAgICAgICAgICAgIHhtbCgnaXEnLCB7dG8sIHR5cGU6ICdnZXQnfSxcclxuICAgICAgICAgICAgICAgIHhtbCgncmVxdWVzdCcsIHt4bWxuczogJ3Vybjp4bXBwOmh0dHA6dXBsb2FkOjAnLCBmaWxlbmFtZSwgc2l6ZSwgJ2NvbnRlbnQtdHlwZSc6IGNvbnRlbnRUeXBlfSkpKTtcclxuICAgICAgICByZXR1cm4gc2xvdFJlc3BvbnNlLmdldENoaWxkKCdzbG90JykuZ2V0Q2hpbGQoJ3B1dCcpLmF0dHJzLnVybDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIHVwbG9hZFRvU2xvdChzbG90OiBzdHJpbmcsIGZpbGU6IEZpbGUpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudC5wdXQoc2xvdCwgZmlsZSwge3Jlc3BvbnNlVHlwZTogJ2Jsb2InfSkudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgcmV0dXJuIHNsb3Q7XHJcbiAgICB9XHJcblxyXG59XHJcbiJdfQ==