UNPKG

@adaskothebeast/ngxs-signalr-plugin

Version:
1 lines 26.2 kB
{"version":3,"file":"adaskothebeast-ngxs-signalr-plugin.mjs","sources":["../../../../libs/ngxs-signalr-plugin/src/lib/actions/connect-signalr.ts","../../../../libs/ngxs-signalr-plugin/src/lib/actions/disconnect-signalr.ts","../../../../libs/ngxs-signalr-plugin/src/lib/actions/invoke-signalr-message.ts","../../../../libs/ngxs-signalr-plugin/src/lib/actions/send-signalr-message.ts","../../../../libs/ngxs-signalr-plugin/src/lib/actions/signalr-connected.ts","../../../../libs/ngxs-signalr-plugin/src/lib/actions/signalr-connection-updated.ts","../../../../libs/ngxs-signalr-plugin/src/lib/actions/signalr-disconnected.ts","../../../../libs/ngxs-signalr-plugin/src/lib/actions/signalr-message-error.ts","../../../../libs/ngxs-signalr-plugin/src/lib/actions/signalr-reconnected.ts","../../../../libs/ngxs-signalr-plugin/src/lib/actions/signalr-reconnecting.ts","../../../../libs/ngxs-signalr-plugin/src/lib/actions/signalr-stream-completed.ts","../../../../libs/ngxs-signalr-plugin/src/lib/actions/signalr-stream-error.ts","../../../../libs/ngxs-signalr-plugin/src/lib/actions/stream-signalr-message.ts","../../../../libs/ngxs-signalr-plugin/src/lib/signalr-options.ts","../../../../libs/ngxs-signalr-plugin/src/lib/type-key-property-missing-error.ts","../../../../libs/ngxs-signalr-plugin/src/lib/signalr-handler.ts","../../../../libs/ngxs-signalr-plugin/src/lib/ngxs-signalr-plugin.module.ts","../../../../libs/ngxs-signalr-plugin/src/adaskothebeast-ngxs-signalr-plugin.ts"],"sourcesContent":["import { SignalROptions } from '../signalr-options';\r\n/**\r\n * Action to connect to the websocket. Optionally pass a URL.\r\n */\r\nexport class ConnectSignalR {\r\n static readonly type = '[SignalR] Connect';\r\n constructor(public payload?: SignalROptions) {}\r\n}\r\n","/**\r\n * Action to disconnect the SignalR.\r\n */\r\nexport class DisconnectSignalR {\r\n static type = '[SignalR] Disconnect';\r\n}\r\n","/**\r\n * Action to invoke to the server.\r\n */\r\nexport class InvokeSignalRMessage {\r\n static type = '[SignalR] Invoke Message';\r\n\r\n constructor(public name: string, public payload: unknown) {}\r\n}\r\n","/**\r\n * Action to send to the server.\r\n */\r\nexport class SendSignalRMessage {\r\n static type = '[SignalR] Send Message';\r\n\r\n constructor(public name: string, public payload: unknown) {}\r\n}\r\n","/**\r\n * Action triggered when SignalR is connected\r\n */\r\nexport class SignalRConnected {\r\n static type = '[SignalR] Connected';\r\n}\r\n","/**\r\n * Action dispatched when the user tries to connect if the connection already exists.\r\n */\r\nexport class SignalRConnectionUpdated {\r\n static type = '[SignalR] Connection Updated';\r\n}\r\n","/**\r\n * Action triggered when SignalR is disconnected\r\n */\r\nexport class SignalRDisconnected {\r\n static type = '[SignalR] Disconnected';\r\n constructor(public payload?: Error | undefined) {}\r\n}\r\n","/**\r\n * Action triggered when a error ocurrs\r\n */\r\nexport class SignalRMessageError {\r\n static type = '[SignalR] Message Error';\r\n constructor(public payload?: unknown) {}\r\n}\r\n","/**\r\n * Action triggered when SignalR is connected\r\n */\r\nexport class SignalRReconnected {\r\n static type = '[SignalR] Reconnected';\r\n constructor(public connectionId?: string | undefined) {}\r\n}\r\n","/**\r\n * Action triggered when SignalR is connected\r\n */\r\nexport class SignalRReconnecting {\r\n static type = '[SignalR] Reconnecting';\r\n constructor(public payload?: Error | undefined) {}\r\n}\r\n","/**\r\n * Action triggered when SignalR is connected\r\n */\r\nexport class SignalRStreamCompleted {\r\n static type = '[SignalR] Stream Completed';\r\n}\r\n","/**\r\n * Action triggered when a error ocurrs\r\n */\r\nexport class SignalRStreamError {\r\n static type = '[SignalR] Stream Error';\r\n constructor(public payload?: Error | undefined) {}\r\n}\r\n","/**\r\n * Action to stream from the server.\r\n */\r\nexport class StreamSignalRMessage {\r\n static type = '[SignalR] Stream Message';\r\n\r\n constructor(public name: string, public payload: unknown) {}\r\n}\r\n","import { InjectionToken } from '@angular/core';\r\nimport {\r\n HttpTransportType,\r\n IHttpConnectionOptions,\r\n IHubProtocol,\r\n ILogger,\r\n IRetryPolicy,\r\n LogLevel,\r\n} from '@microsoft/signalr';\r\n\r\nexport const NGXS_SIGNALR_OPTIONS = new InjectionToken('NGXS_SIGNALR_OPTIONS');\r\n\r\nexport interface SignalROptions {\r\n /**\r\n * URL of the SignalR endpoint.\r\n */\r\n baseUrl?: string;\r\n\r\n /**\r\n * URL of the SignalR endpoint.\r\n */\r\n url?: string;\r\n\r\n /**\r\n * Specifies a specific HTTP transport type.\r\n */\r\n transportType?: HttpTransportType;\r\n\r\n /**\r\n * Http connection options.\r\n */\r\n httpConnectionOptions?: IHttpConnectionOptions;\r\n\r\n /**\r\n * Retry policy implementation\r\n */\r\n reconnectPolicy?: IRetryPolicy;\r\n\r\n /**\r\n * Retry delays\r\n */\r\n retryDelays?: number[];\r\n\r\n /**\r\n * Automatic reconnect\r\n */\r\n automaticReconnect?: boolean;\r\n\r\n /**\r\n * Hub protocol options.\r\n */\r\n protocol?: IHubProtocol;\r\n\r\n /**\r\n * The property name to distinguish this type for the store.\r\n * Default: 'type'\r\n */\r\n typeKey?: string;\r\n\r\n /**\r\n * Logging options\r\n */\r\n logging?: string | LogLevel | ILogger;\r\n\r\n /**\r\n * Keep alive interval in milliseconds.\r\n */\r\n keepAliveIntervalInMilliseconds?: number;\r\n\r\n /**\r\n * Server timeout in milliseconds.\r\n */\r\n serverTimeoutInMilliseconds?: number;\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\r\nexport function noop(..._args: unknown[]) {\r\n return function () {\r\n // noop\r\n };\r\n}\r\n","/**\r\n * This error is thrown where there is no `type` (or custom `typeKey`) property\r\n * on the message that came from the server side socket\r\n */\r\nexport class TypeKeyPropertyMissingError extends Error {\r\n constructor(typeKey: string) {\r\n super(`Property ${typeKey} is missing on the socket message`);\r\n }\r\n}\r\n","import { Inject, Injectable, OnDestroy } from '@angular/core';\r\nimport {\r\n HubConnection,\r\n HubConnectionBuilder,\r\n HubConnectionState,\r\n IStreamResult,\r\n ISubscription,\r\n} from '@microsoft/signalr';\r\nimport { Actions, Store, ofActionDispatched } from '@ngxs/store';\r\nimport { Subscription } from 'rxjs/internal/Subscription';\r\n\r\nimport { ConnectSignalR } from './actions/connect-signalr';\r\nimport { DisconnectSignalR } from './actions/disconnect-signalr';\r\nimport { InvokeSignalRMessage } from './actions/invoke-signalr-message';\r\nimport { SendSignalRMessage } from './actions/send-signalr-message';\r\nimport { SignalRConnected } from './actions/signalr-connected';\r\nimport { SignalRConnectionUpdated } from './actions/signalr-connection-updated';\r\nimport { SignalRDisconnected } from './actions/signalr-disconnected';\r\nimport { SignalRMessageError } from './actions/signalr-message-error';\r\nimport { SignalRReconnected } from './actions/signalr-reconnected';\r\nimport { SignalRReconnecting } from './actions/signalr-reconnecting';\r\nimport { SignalRStreamCompleted } from './actions/signalr-stream-completed';\r\nimport { SignalRStreamError } from './actions/signalr-stream-error';\r\nimport { StreamSignalRMessage } from './actions/stream-signalr-message';\r\nimport { NGXS_SIGNALR_OPTIONS, SignalROptions } from './signalr-options';\r\nimport { TypeKeyPropertyMissingError } from './type-key-property-missing-error';\r\n\r\n@Injectable()\r\nexport class SignalRHandler implements OnDestroy {\r\n private connection: HubConnection | null = null;\r\n private subscription = new Subscription();\r\n private streamSubscriptions: ISubscription<unknown>[] = [];\r\n private typeKey = 'type';\r\n constructor(\r\n private store: Store,\r\n private actions$: Actions,\r\n @Inject(NGXS_SIGNALR_OPTIONS)\r\n private options: SignalROptions\r\n ) {\r\n this.setupActionsListeners();\r\n if (this.options.typeKey) {\r\n this.typeKey = this.options.typeKey;\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.closeConnection();\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n private setupActionsListeners(): void {\r\n this.subscription.add(\r\n this.actions$\r\n .pipe(ofActionDispatched(ConnectSignalR))\r\n .subscribe(async ({ payload }: ConnectSignalR) => {\r\n await this.connect(payload);\r\n })\r\n );\r\n\r\n this.subscription.add(\r\n this.actions$\r\n .pipe(ofActionDispatched(DisconnectSignalR))\r\n .subscribe(() => {\r\n this.disconnect();\r\n })\r\n );\r\n\r\n this.subscription.add(\r\n this.actions$\r\n .pipe(ofActionDispatched(SendSignalRMessage))\r\n .subscribe(async ({ name, payload }: SendSignalRMessage) => {\r\n await this.send(name, payload);\r\n })\r\n );\r\n\r\n this.subscription.add(\r\n this.actions$\r\n .pipe(ofActionDispatched(InvokeSignalRMessage))\r\n .subscribe(async ({ name, payload }: InvokeSignalRMessage) => {\r\n await this.invoke(name, payload);\r\n })\r\n );\r\n\r\n this.subscription.add(\r\n this.actions$\r\n .pipe(ofActionDispatched(StreamSignalRMessage))\r\n .subscribe(async ({ name, payload }: StreamSignalRMessage) => {\r\n const resultStream = await this.stream(name, payload);\r\n this.streamSubscriptions.push(\r\n resultStream.subscribe({\r\n next: (item) => {\r\n const type = item[this.typeKey];\r\n if (!type) {\r\n throw new TypeKeyPropertyMissingError(this.typeKey);\r\n }\r\n this.store.dispatch({ ...item, type });\r\n },\r\n complete: () => {\r\n this.store.dispatch(new SignalRStreamCompleted());\r\n },\r\n error: (err) => {\r\n this.store.dispatch(new SignalRStreamError(err));\r\n },\r\n })\r\n );\r\n })\r\n );\r\n }\r\n\r\n private setupConnection(): void {\r\n let builder = new HubConnectionBuilder();\r\n if (this.options.url) {\r\n if (this.options.httpConnectionOptions) {\r\n builder = builder.withUrl(\r\n this.options.url,\r\n this.options.httpConnectionOptions\r\n );\r\n } else if (this.options.transportType) {\r\n builder = builder.withUrl(this.options.url, this.options.transportType);\r\n } else {\r\n builder = builder.withUrl(this.options.url);\r\n }\r\n }\r\n\r\n if (this.options.reconnectPolicy) {\r\n builder = builder.withAutomaticReconnect(this.options.reconnectPolicy);\r\n } else if (this.options.retryDelays) {\r\n builder = builder.withAutomaticReconnect(this.options.retryDelays);\r\n } else if (this.options.automaticReconnect) {\r\n builder = builder.withAutomaticReconnect();\r\n }\r\n\r\n if (this.options.protocol) {\r\n builder = builder.withHubProtocol(this.options.protocol);\r\n }\r\n\r\n if (this.options.logging) {\r\n builder = builder.configureLogging(this.options.logging);\r\n }\r\n\r\n this.connection = builder.build();\r\n if (this.options.baseUrl) {\r\n this.connection.baseUrl = this.options.baseUrl;\r\n }\r\n\r\n if (this.options.keepAliveIntervalInMilliseconds) {\r\n this.connection.keepAliveIntervalInMilliseconds =\r\n this.options.keepAliveIntervalInMilliseconds;\r\n }\r\n\r\n if (this.options.serverTimeoutInMilliseconds) {\r\n this.connection.serverTimeoutInMilliseconds =\r\n this.options.serverTimeoutInMilliseconds;\r\n }\r\n\r\n this.connection.onclose((error?: Error | undefined) => {\r\n this.store.dispatch(new SignalRDisconnected(error));\r\n });\r\n this.connection.onreconnecting((error?: Error | undefined) => {\r\n this.store.dispatch(new SignalRReconnecting(error));\r\n });\r\n this.connection.onreconnected((connectionId?: string | undefined) => {\r\n this.store.dispatch(new SignalRReconnected(connectionId));\r\n });\r\n }\r\n\r\n private setupHandlers(): void {\r\n this.connection?.on('send', (message: Record<string, unknown>) => {\r\n const type = message[this.typeKey];\r\n if (!type) {\r\n throw new TypeKeyPropertyMissingError(this.typeKey);\r\n }\r\n this.store.dispatch({ ...message, type });\r\n });\r\n }\r\n\r\n private async connect(options?: SignalROptions): Promise<void> {\r\n this.updateConnection();\r\n\r\n // Users can pass the options in the connect method so\r\n // if options aren't available at DI bootstrap they have access\r\n // to pass them here\r\n if (options) {\r\n this.options = { ...this.options, ...options };\r\n }\r\n\r\n this.setupConnection();\r\n this.setupHandlers();\r\n\r\n try {\r\n await this.connection?.start();\r\n this.store.dispatch(new SignalRConnected());\r\n } catch (err) {\r\n this.store.dispatch(new SignalRMessageError(err));\r\n }\r\n }\r\n\r\n private disconnect(): void {\r\n if (this.connection) {\r\n this.closeConnection();\r\n }\r\n }\r\n\r\n private async send(name: string, data: unknown): Promise<void> {\r\n if (this.connection?.state !== HubConnectionState.Connected) {\r\n throw new Error(\r\n 'You must connect to the SignalR before sending any data'\r\n );\r\n }\r\n\r\n await this.connection.send(name, data);\r\n }\r\n\r\n private async invoke(name: string, data: unknown): Promise<void> {\r\n if (this.connection?.state !== HubConnectionState.Connected) {\r\n throw new Error(\r\n 'You must connect to the SignalR before sending any data'\r\n );\r\n }\r\n\r\n await this.connection.invoke(name, data);\r\n }\r\n\r\n private async stream(\r\n name: string,\r\n data: unknown\r\n ): Promise<IStreamResult<Record<string, unknown>>> {\r\n if (this.connection?.state !== HubConnectionState.Connected) {\r\n throw new Error(\r\n 'You must connect to the SignalR before sending any data'\r\n );\r\n }\r\n\r\n return this.connection.stream<Record<string, unknown>>(name, data);\r\n }\r\n\r\n /**\r\n * To ensure we don't have any memory leaks\r\n * e.g. if the user occasionally dispatched `ConnectWebSocket` twice\r\n * then the previous subscription will still live in the memory\r\n * to prevent such behavior - we close the previous connection if it exists\r\n */\r\n private updateConnection(): void {\r\n if (this.connection) {\r\n this.closeConnection();\r\n this.store.dispatch(new SignalRConnectionUpdated());\r\n }\r\n }\r\n\r\n private async closeConnection(): Promise<void> {\r\n this.streamSubscriptions.forEach((s) => {\r\n s.dispose();\r\n });\r\n this.streamSubscriptions = [];\r\n if (this.connection !== null) {\r\n await this.connection.stop();\r\n this.connection = null;\r\n }\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { InjectionToken, ModuleWithProviders, NgModule, inject, provideAppInitializer } from '@angular/core';\r\nimport { HttpTransportType, JsonHubProtocol } from '@microsoft/signalr';\r\n\r\nimport { SignalRHandler } from './signalr-handler';\r\nimport { NGXS_SIGNALR_OPTIONS, SignalROptions, noop } from './signalr-options';\r\n\r\nexport function signalrOptionsFactory(options: SignalROptions): SignalROptions {\r\n return {\r\n keepAliveIntervalInMilliseconds: 15000,\r\n serverTimeoutInMilliseconds: 30000,\r\n typeKey: 'type',\r\n automaticReconnect: true,\r\n transportType: HttpTransportType.WebSockets,\r\n protocol: new JsonHubProtocol(),\r\n ...options,\r\n };\r\n}\r\n\r\nexport const NGXS_SIGNALR_USER_OPTIONS = new InjectionToken(\r\n 'NGXS_SIGNALR_USER_OPTIONS'\r\n);\r\n\r\n@NgModule({\r\n imports: [CommonModule],\r\n})\r\nexport class NgxsSignalrPluginModule {\r\n static forRoot(\r\n options?: SignalROptions\r\n ): ModuleWithProviders<NgxsSignalrPluginModule> {\r\n return {\r\n ngModule: NgxsSignalrPluginModule,\r\n providers: [\r\n SignalRHandler,\r\n {\r\n provide: NGXS_SIGNALR_USER_OPTIONS,\r\n useValue: options,\r\n },\r\n {\r\n provide: NGXS_SIGNALR_OPTIONS,\r\n useFactory: signalrOptionsFactory,\r\n deps: [NGXS_SIGNALR_USER_OPTIONS],\r\n },\r\n provideAppInitializer(() => {\n const initializerFn = (noop)(inject(SignalRHandler));\n return initializerFn();\n }),\r\n ],\r\n };\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}