UNPKG

ngx-actioncable

Version:

Library for real-time communication over websockets with Rails ActionCable.

80 lines 11 kB
import { Injectable, Optional } from '@angular/core'; import { NgxActionCableBroadcaster } from './ngx-action-cable-broadcaster'; import * as ActionCable from 'actioncable'; import * as i0 from "@angular/core"; import * as i1 from "./ngx-action-cable-configuration"; export class NgxActionCableService { constructor(configuration) { this.configuration = configuration; this.cables = new Map(); this.channels = {}; // TODO: remove this workaround -> createWebSocketURL is undefined exception // in action_cable.js let w = window; w.createWebSocketURL = ActionCable.createWebSocketURL; configuration.urls.forEach((url, key) => { let cable = this.connect(key, url); this.cables.set(key, cable); }); } subscribe(key, channel, params = {}) { let channelName = this.getChannelName(channel, params); let subscriptionParams = Object.assign({ channel: channel }, params); let broadcaster = new NgxActionCableBroadcaster(); let cable = this.getCabel(key); let subscription = cable.subscriptions.create(subscriptionParams, { received: (data) => { broadcaster.broadcast(data.action, data); } }); this.channels[channelName] = { subscription: subscription, broadcaster: broadcaster }; return broadcaster; } unsubscribe(key, channel, params = {}) { let channelName = this.getChannelName(channel, params); let cable = this.getCabel(key); if (!this.channels[channelName]) { console.info(`No Subscription for Channel ${channelName} found!`); } else { let subscription = this.channels[channelName].subscription; cable.subscriptions.remove(subscription); } } perform(channel, params = {}, action, data) { let channelName = this.getChannelName(channel, params); this.channels[channelName].subscription.perform(action, data); } connect(key, url) { let cable = ActionCable.createConsumer(url); cable.connect(); return cable; } disconnect(key) { let cable = this.getCabel(key); cable.disconnect(); } getChannelName(channel, params = {}) { let channelName = (typeof (channel) === 'object') ? channel['channel'] : channel; channelName += `_${JSON.stringify(params)}`; // also add params to unique channel name return channelName; } getCabel(key) { let cable = this.cables.get(key); if (!cable) { throw Error(`No cable instance for key ${key} found!`); } return cable; } } NgxActionCableService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.4", ngImport: i0, type: NgxActionCableService, deps: [{ token: i1.NgxActionCableConfiguration, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); NgxActionCableService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.4", ngImport: i0, type: NgxActionCableService }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.4", ngImport: i0, type: NgxActionCableService, decorators: [{ type: Injectable }], ctorParameters: function () { return [{ type: i1.NgxActionCableConfiguration, decorators: [{ type: Optional }] }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWFjdGlvbi1jYWJsZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL25neC1hY3Rpb24tY2FibGUvbmd4LWFjdGlvbi1jYWJsZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzNFLE9BQU8sS0FBSyxXQUFXLE1BQU0sYUFBYSxDQUFDOzs7QUFHM0MsTUFBTSxPQUFPLHFCQUFxQjtJQUtqQyxZQUF3QyxhQUEwQztRQUExQyxrQkFBYSxHQUFiLGFBQWEsQ0FBNkI7UUFIbEYsV0FBTSxHQUFHLElBQUksR0FBRyxFQUFlLENBQUM7UUFDaEMsYUFBUSxHQUFHLEVBQUUsQ0FBQztRQUliLDZFQUE2RTtRQUM3RSxxQkFBcUI7UUFDckIsSUFBSSxDQUFDLEdBQVEsTUFBTSxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxrQkFBa0IsR0FBRyxXQUFXLENBQUMsa0JBQWtCLENBQUM7UUFFdEQsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFXLEVBQUUsR0FBVyxFQUFFLEVBQUU7WUFDdkQsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDbkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUlELFNBQVMsQ0FBQyxHQUFXLEVBQUUsT0FBWSxFQUFFLE1BQU0sR0FBRyxFQUFFO1FBQy9DLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXZELElBQUksa0JBQWtCLEdBQUcsTUFBTSxD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QztTQUN2RDtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2QsQ0FBQzs7a0hBaEZXLHFCQUFxQjtzSEFBckIscUJBQXFCOzJGQUFyQixxQkFBcUI7a0JBRGpDLFVBQVU7OzBCQU1HLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ3hBY3Rpb25DYWJsZUNvbmZpZ3VyYXRpb24gfSBmcm9tICcuL25neC1hY3Rpb24tY2FibGUtY29uZmlndXJhdGlvbic7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmd4QWN0aW9uQ2FibGVCcm9hZGNhc3RlciB9IGZyb20gJy4vbmd4LWFjdGlvbi1jYWJsZS1icm9hZGNhc3Rlcic7XG5pbXBvcnQgKiBhcyBBY3Rpb25DYWJsZSBmcm9tICdhY3Rpb25jYWJsZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBOZ3hBY3Rpb25DYWJsZVNlcnZpY2Uge1xuXG5cdGNhYmxlcyA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG5cdGNoYW5uZWxzID0ge307XG5cblx0Y29uc3RydWN0b3IoQE9wdGlvbmFsKCkgcHVibGljIHJlYWRvbmx5IGNvbmZpZ3VyYXRpb246IE5neEFjdGlvbkNhYmxlQ29uZmlndXJhdGlvbikge1xuXG5cdFx0Ly8gVE9ETzogcmVtb3ZlIHRoaXMgd29ya2Fyb3VuZCAtPiBjcmVhdGVXZWJTb2NrZXRVUkwgaXMgdW5kZWZpbmVkIGV4Y2VwdGlvbiBcblx0XHQvLyBpbiBhY3Rpb25fY2FibGUuanNcblx0XHRsZXQgdzogYW55ID0gd2luZG93O1xuXHRcdHcuY3JlYXRlV2ViU29ja2V0VVJMID0gQWN0aW9uQ2FibGUuY3JlYXRlV2ViU29ja2V0VVJMO1xuXG5cdFx0Y29uZmlndXJhdGlvbi51cmxzLmZvckVhY2goKHVybDogc3RyaW5nLCBrZXk6IHN0cmluZykgPT4ge1xuXHRcdFx0bGV0IGNhYmxlID0gdGhpcy5jb25uZWN0KGtleSwgdXJsKTtcblx0XHRcdHRoaXMuY2FibGVzLnNldChrZXksIGNhYmxlKTtcblx0XHR9KTtcblx0fVxuXG5cblxuXHRzdWJzY3JpYmUoa2V5OiBzdHJpbmcsIGNoYW5uZWw6IGFueSwgcGFyYW1zID0ge30pOiBOZ3hBY3Rpb25DYWJsZUJyb2FkY2FzdGVyIHtcblx0XHRsZXQgY2hhbm5lbE5hbWUgPSB0aGlzLmdldENoYW5uZWxOYW1lKGNoYW5uZWwsIHBhcmFtcyk7XG5cblx0XHRsZXQgc3Vic2NyaXB0aW9uUGFyYW1zID0gT2JqZWN0LmFzc2lnbih7IGNoYW5uZWw6IGNoYW5uZWwgfSwgcGFyYW1zKTtcblx0XHRsZXQgYnJvYWRjYXN0ZXIgPSBuZXcgTmd4QWN0aW9uQ2FibGVCcm9hZGNhc3RlcigpO1xuXG5cdFx0bGV0IGNhYmxlID0gdGhpcy5nZXRDYWJlbChrZXkpO1xuXHRcdGxldCBzdWJzY3JpcHRpb24gPSBjYWJsZS5zdWJzY3JpcHRpb25zLmNyZWF0ZShzdWJzY3JpcHRpb25QYXJhbXMsIHtcblx0XHRcdHJlY2VpdmVkOiAoZGF0YSkgPT4ge1xuXHRcdFx0XHRicm9hZGNhc3Rlci5icm9hZGNhc3QoZGF0YS5hY3Rpb24sIGRhdGEpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5jaGFubmVsc1tjaGFubmVsTmFtZV0gPSB7XG5cdFx0XHRzdWJzY3JpcHRpb246IHN1YnNjcmlwdGlvbixcblx0XHRcdGJyb2FkY2FzdGVyOiBicm9hZGNhc3RlclxuXHRcdH07XG5cdFx0cmV0dXJuIGJyb2FkY2FzdGVyO1xuXHR9XG5cblx0dW5zdWJzY3JpYmUoa2V5OiBzdHJpbmcsIGNoYW5uZWw6IHN0cmluZywgcGFyYW1zID0ge30pOiB2b2lkIHtcblx0XHRsZXQgY2hhbm5lbE5hbWUgPSB0aGlzLmdldENoYW5uZWxOYW1lKGNoYW5uZWwsIHBhcmFtcyk7XG5cblx0XHRsZXQgY2FibGUgPSB0aGlzLmdldENhYmVsKGtleSk7XG5cdFx0aWYgKCF0aGlzLmNoYW5uZWxzW2NoYW5uZWxOYW1lXSkge1xuXHRcdFx0Y29uc29sZS5pbmZvKGBObyBTdWJzY3JpcHRpb24gZm9yIENoYW5uZWwgJHtjaGFubmVsTmFtZX0gZm91bmQhYCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGxldCBzdWJzY3JpcHRpb24gPSB0aGlzLmNoYW5uZWxzW2NoYW5uZWxOYW1lXS5zdWJzY3JpcHRpb247XG5cdFx0XHRjYWJsZS5zdWJzY3JpcHRpb25zLnJlbW92ZShzdWJzY3JpcHRpb24pO1xuXHRcdH1cblx0fVxuXG5cdHBlcmZvcm0oY2hhbm5lbDogc3RyaW5nLCBwYXJhbXMgPSB7fSwgYWN0aW9uOiBzdHJpbmcsIGRhdGE6IGFueSk6IHZvaWQge1xuXHRcdGxldCBjaGFubmVsTmFtZSA9IHRoaXMuZ2V0Q2hhbm5lbE5hbWUoY2hhbm5lbCwgcGFyYW1zKTtcblx0XHR0aGlzLmNoYW5uZWxzW2NoYW5uZWxOYW1lXS5zdWJzY3JpcHRpb24ucGVyZm9ybShhY3Rpb24sIGRhdGEpO1xuXHR9XG5cblx0Y29ubmVjdChrZXksIHVybDogc3RyaW5nKTogYW55IHtcblx0XHRsZXQgY2FibGUgPSBBY3Rpb25DYWJsZS5jcmVhdGVDb25zdW1lcih1cmwpO1xuXHRcdGNhYmxlLmNvbm5lY3QoKTtcblx0XHRyZXR1cm4gY2FibGU7XG5cdH1cblxuXHRkaXNjb25uZWN0KGtleTogc3RyaW5nKTogdm9pZCB7XG5cdFx0bGV0IGNhYmxlID0gdGhpcy5nZXRDYWJlbChrZXkpO1xuXHRcdGNhYmxlLmRpc2Nvbm5lY3QoKTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0Q2hhbm5lbE5hbWUoY2hhbm5lbDogc3RyaW5nLCBwYXJhbXMgPSB7fSk6IHN0cmluZyB7XG5cdFx0bGV0IGNoYW5uZWxOYW1lID0gKHR5cGVvZiAoY2hhbm5lbCkgPT09ICdvYmplY3QnKSA/IGNoYW5uZWxbJ2NoYW5uZWwnXSA6IGNoYW5uZWw7XG5cdFx0Y2hhbm5lbE5hbWUgKz0gYF8ke0pTT04uc3RyaW5naWZ5KHBhcmFtcyl9YDsgLy8gYWxzbyBhZGQgcGFyYW1zIHRvIHVuaXF1ZSBjaGFubmVsIG5hbWVcblx0XHRyZXR1cm4gY2hhbm5lbE5hbWU7XG5cdH1cblxuXHRwcml2YXRlIGdldENhYmVsKGtleTogc3RyaW5nKTogYW55IHtcblx0XHRsZXQgY2FibGUgPSB0aGlzLmNhYmxlcy5nZXQoa2V5KTtcblx0XHRpZiAoIWNhYmxlKSB7XG5cdFx0XHR0aHJvdyBFcnJvcihgTm8gY2FibGUgaW5zdGFuY2UgZm9yIGtleSAke2tleX0gZm91bmQhYCk7XG5cdFx0fVxuXHRcdHJldHVybiBjYWJsZTtcblx0fVxuXG59XG4iXX0=