UNPKG

pubnub

Version:

Publish & Subscribe Real-time Messaging with PubNub

448 lines (405 loc) 13.1 kB
import { SubscribeRequest } from '../subscribe-request'; import { HeartbeatRequest } from '../heartbeat-request'; import { PubNubClient } from '../pubnub-client'; import { LeaveRequest } from '../leave-request'; import { AccessToken } from '../access-token'; import { Payload } from '../../../../core/types/api'; /** * Type with events which is emitted by PubNub client and can be handled with callback passed to the * {@link EventTarget#addEventListener|addEventListener}. */ export enum PubNubClientEvent { /** * Client unregistered (no connection through SharedWorker connection ports). * */ Unregister = 'unregister', /** * Client temporarily disconnected. */ Disconnect = 'disconnect', /** * User ID for current PubNub client has been changed. * * On identity change for proper further operation expected following actions: * - send immediate heartbeat with new `user ID` (if has been sent before) */ IdentityChange = 'identityChange', /** * Authentication token change event. * * On authentication token change for proper further operation expected following actions: * - cached `heartbeat` request query parameter updated */ AuthChange = 'authChange', /** * Presence heartbeat interval change event. * * On heartbeat interval change for proper further operation expected following actions: * - restart _backup_ heartbeat timer with new interval. */ HeartbeatIntervalChange = 'heartbeatIntervalChange', /** * `userId` presence data change event. * * On presence state change for proper further operation expected following actions: * - cached `subscribe` request query parameter updated * - cached `heartbeat` request query parameter updated */ PresenceStateChange = 'presenceStateChange', /** * Core PubNub client module request to send `subscribe` request. */ SendSubscribeRequest = 'sendSubscribeRequest', /** * Core PubNub client module request to _cancel_ specific `subscribe` request. */ CancelSubscribeRequest = 'cancelSubscribeRequest', /** * Core PubNub client module request to send `heartbeat` request. */ SendHeartbeatRequest = 'sendHeartbeatRequest', /** * Core PubNub client module request to send `leave` request. */ SendLeaveRequest = 'sendLeaveRequest', } /** * Base request processing event class. */ class BasePubNubClientEvent<T = object> extends CustomEvent<{ client: PubNubClient } & T> { /** * Retrieve reference to PubNub client which dispatched event. * * @returns Reference to PubNub client which dispatched event. */ get client(): PubNubClient { return this.detail.client; } } /** * Dispatched by PubNub client when it has been unregistered. */ export class PubNubClientUnregisterEvent extends BasePubNubClientEvent { /** * Create PubNub client unregister event. * * @param client - Reference to unregistered PubNub client. */ constructor(client: PubNubClient) { super(PubNubClientEvent.Unregister, { detail: { client } }); } /** * Create a clone of `unregister` event to make it possible to forward event upstream. * * @returns Clone of `unregister` event. */ clone() { return new PubNubClientUnregisterEvent(this.client); } } /** * Dispatched by PubNub client when it has been disconnected. */ export class PubNubClientDisconnectEvent extends BasePubNubClientEvent { /** * Create PubNub client disconnect event. * * @param client - Reference to disconnected PubNub client. */ constructor(client: PubNubClient) { super(PubNubClientEvent.Disconnect, { detail: { client } }); } /** * Create a clone of `disconnect` event to make it possible to forward event upstream. * * @returns Clone of `disconnect` event. */ clone() { return new PubNubClientDisconnectEvent(this.client); } } /** * Dispatched by PubNub client when it changes user identity (`userId` has been changed). */ export class PubNubClientIdentityChangeEvent extends BasePubNubClientEvent<{ oldUserId: string; newUserId: string; }> { /** * Create PubNub client identity change event. * * @param client - Reference to the PubNub client which changed identity. * @param oldUserId - User ID which has been previously used by the `client`. * @param newUserId - User ID which will used by the `client`. */ constructor(client: PubNubClient, oldUserId: string, newUserId: string) { super(PubNubClientEvent.IdentityChange, { detail: { client, oldUserId, newUserId } }); } /** * Retrieve `userId` which has been previously used by the `client`. * * @returns `userId` which has been previously used by the `client`. */ get oldUserId() { return this.detail.oldUserId; } /** * Retrieve `userId` which will used by the `client`. * * @returns `userId` which will used by the `client`. */ get newUserId() { return this.detail.newUserId; } /** * Create a clone of `identity` _change_ event to make it possible to forward event upstream. * * @returns Clone of `identity` _change_ event. */ clone() { return new PubNubClientIdentityChangeEvent(this.client, this.oldUserId, this.newUserId); } } /** * Dispatched by PubNub client when it changes authentication data (`auth`) has been changed. */ export class PubNubClientAuthChangeEvent extends BasePubNubClientEvent<{ oldAuth?: AccessToken; newAuth?: AccessToken; }> { /** * Create PubNub client authentication change event. * * @param client - Reference to the PubNub client which changed authentication. * @param [newAuth] - Authentication which will used by the `client`. * @param [oldAuth] - Authentication which has been previously used by the `client`. */ constructor(client: PubNubClient, newAuth?: AccessToken, oldAuth?: AccessToken) { super(PubNubClientEvent.AuthChange, { detail: { client, oldAuth, newAuth } }); } /** * Retrieve authentication which has been previously used by the `client`. * * @returns Authentication which has been previously used by the `client`. */ get oldAuth() { return this.detail.oldAuth; } /** * Retrieve authentication which will used by the `client`. * * @returns Authentication which will used by the `client`. */ get newAuth() { return this.detail.newAuth; } /** * Create a clone of `authentication` _change_ event to make it possible to forward event upstream. * * @returns Clone `authentication` _change_ event. */ clone() { return new PubNubClientAuthChangeEvent(this.client, this.newAuth, this.oldAuth); } } /** * Dispatched by PubNub client when it changes heartbeat interval. */ export class PubNubClientHeartbeatIntervalChangeEvent extends BasePubNubClientEvent<{ oldInterval?: number; newInterval?: number; }> { /** * Create PubNub client heartbeat interval change event. * * @param client - Reference to the PubNub client which changed heartbeat interval. * @param [newInterval] - New heartbeat request send interval. * @param [oldInterval] - Previous heartbeat request send interval. */ constructor(client: PubNubClient, newInterval?: number, oldInterval?: number) { super(PubNubClientEvent.HeartbeatIntervalChange, { detail: { client, oldInterval, newInterval } }); } /** * Retrieve previous heartbeat request send interval. * * @returns Previous heartbeat request send interval. */ get oldInterval() { return this.detail.oldInterval; } /** * Retrieve new heartbeat request send interval. * * @returns New heartbeat request send interval. */ get newInterval() { return this.detail.newInterval; } /** * Create a clone of the `heartbeat interval` _change_ event to make it possible to forward the event upstream. * * @returns Clone of `heartbeat interval` _change_ event. */ clone() { return new PubNubClientHeartbeatIntervalChangeEvent(this.client, this.newInterval, this.oldInterval); } } /** * Dispatched by PubNub client when presence state for its user has been changed. */ export class PubNubClientPresenceStateChangeEvent extends BasePubNubClientEvent<{ state: Record<string, Payload> }> { /** * Create a PubNub client presence state change event. * * @param client - Reference to the PubNub client that changed presence state for `userId`. * @param state - Payloads that are associated with `userId` at specified (as keys) channels and groups. */ constructor(client: PubNubClient, state: Record<string, Payload>) { super(PubNubClientEvent.PresenceStateChange, { detail: { client, state } }); } /** * Retrieve the presence state that has been associated with `client`'s `userId`. * * @returns Presence state that has been associated with `client`'s `userId */ get state() { return this.detail.state; } /** * Create a clone of `presence state` _change_ event to make it possible to forward event upstream. * * @returns Clone `presence state` _change_ event. */ clone() { return new PubNubClientPresenceStateChangeEvent(this.client, this.state); } } /** * Dispatched when the core PubNub client module requested to _send_ a `subscribe` request. */ export class PubNubClientSendSubscribeEvent extends BasePubNubClientEvent<{ request: SubscribeRequest; }> { /** * Create subscribe request send event. * * @param client - Reference to the PubNub client which requested to send request. * @param request - Subscription request object. */ constructor(client: PubNubClient, request: SubscribeRequest) { super(PubNubClientEvent.SendSubscribeRequest, { detail: { client, request } }); } /** * Retrieve subscription request object. * * @returns Subscription request object. */ get request() { return this.detail.request; } /** * Create clone of _send_ `subscribe` request event to make it possible to forward event upstream. * * @returns Clone of _send_ `subscribe` request event. */ clone() { return new PubNubClientSendSubscribeEvent(this.client, this.request); } } /** * Dispatched when the core PubNub client module requested to _cancel_ `subscribe` request. */ export class PubNubClientCancelSubscribeEvent extends BasePubNubClientEvent<{ request: SubscribeRequest; }> { /** * Create `subscribe` request _cancel_ event. * * @param client - Reference to the PubNub client which requested to _send_ request. * @param request - Subscription request object. */ constructor(client: PubNubClient, request: SubscribeRequest) { super(PubNubClientEvent.CancelSubscribeRequest, { detail: { client, request } }); } /** * Retrieve subscription request object. * * @returns Subscription request object. */ get request() { return this.detail.request; } /** * Create clone of _cancel_ `subscribe` request event to make it possible to forward event upstream. * * @returns Clone of _cancel_ `subscribe` request event. */ clone() { return new PubNubClientCancelSubscribeEvent(this.client, this.request); } } /** * Dispatched when the core PubNub client module requested to _send_ `heartbeat` request. */ export class PubNubClientSendHeartbeatEvent extends BasePubNubClientEvent<{ request: HeartbeatRequest; }> { /** * Create `heartbeat` request _send_ event. * * @param client - Reference to the PubNub client which requested to send request. * @param request - Heartbeat request object. */ constructor(client: PubNubClient, request: HeartbeatRequest) { super(PubNubClientEvent.SendHeartbeatRequest, { detail: { client, request } }); } /** * Retrieve heartbeat request object. * * @returns Heartbeat request object. */ get request() { return this.detail.request; } /** * Create clone of _send_ `heartbeat` request event to make it possible to forward event upstream. * * @returns Clone of _send_ `heartbeat` request event. */ clone() { return new PubNubClientSendHeartbeatEvent(this.client, this.request); } } /** * Dispatched when the core PubNub client module requested to _send_ `leave` request. */ export class PubNubClientSendLeaveEvent extends BasePubNubClientEvent<{ request: LeaveRequest; }> { /** * Create `leave` request _send_ event. * * @param client - Reference to the PubNub client which requested to send request. * @param request - Leave request object. */ constructor(client: PubNubClient, request: LeaveRequest) { super(PubNubClientEvent.SendLeaveRequest, { detail: { client, request } }); } /** * Retrieve leave request object. * * @returns Leave request object. */ get request() { return this.detail.request; } /** * Create clone of _send_ `leave` request event to make it possible to forward event upstream. * * @returns Clone of _send_ `leave` request event. */ clone() { return new PubNubClientSendLeaveEvent(this.client, this.request); } }