imng-signalr-ngrx 9.13.5 → 9.15.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"imng-signalr-ngrx.mjs","sources":["../../../../libs/imng-signalr-ngrx/src/lib/+state/signalr.actions.ts","../../../../libs/imng-signalr-ngrx/src/lib/+state/signalr.reducer.ts","../../../../libs/imng-signalr-ngrx/src/lib/+state/signalr.selectors.ts","../../../../libs/imng-signalr-ngrx/src/lib/models/signalr.configuration.ts","../../../../libs/imng-signalr-ngrx/src/lib/services/hub-connection-injector.service.ts","../../../../libs/imng-signalr-ngrx/src/lib/+state/signalr.effects.ts","../../../../libs/imng-signalr-ngrx/src/lib/+state/signalr.facade.ts","../../../../libs/imng-signalr-ngrx/src/lib/signalr-ngrx.module.ts","../../../../libs/imng-signalr-ngrx/src/imng-signalr-ngrx.ts"],"sourcesContent":["import { createAction } from '@ngrx/store';\nimport { createPayloadAction } from 'imng-ngrx-utils';\nimport { ISignalrMessage } from '../models/signalr.message';\n\nexport const connect = createAction('[SignalR] Init Connection');\nexport const setConnectionState = createPayloadAction<{ isConnected: boolean; }>('[SignalR] Set Connection State');\nexport const sendMessage = createPayloadAction<ISignalrMessage>('[SignalR] Send Message');\nexport const receivedMessage = createPayloadAction<ISignalrMessage>('[SignalR] Received Message');\nexport const clearMessages = createAction('[SignalR] Clear Messages');\n\nexport const signalrActions = {\n connect,\n setConnectionState,\n sendMessage,\n receivedMessage,\n clearMessages\n};\n","import { createReducer, on, createFeature } from '@ngrx/store';\n\nimport * as SignalrActions from './signalr.actions';\nimport { ISignalrMessage } from '../models/signalr.message';\n\nexport const SIGNALR_FEATURE_KEY = 'signalr';\n\nexport interface State {\n isConnected: boolean;\n lastReceivedMessage: ISignalrMessage | undefined;\n receivedMessages: ISignalrMessage[];\n}\n\nexport const initialState: State = {\n isConnected: false,\n receivedMessages: [],\n lastReceivedMessage: undefined,\n};\n\nexport const signalrFeature = createFeature({\n name: SIGNALR_FEATURE_KEY,\n reducer: createReducer(\n initialState,\n on(SignalrActions.setConnectionState,\n (state, action): State => ({\n ...state,\n isConnected: action.payload.isConnected,\n })),\n on(SignalrActions.receivedMessage,\n (state, action): State => ({\n ...state,\n receivedMessages: [action.payload, ...state.receivedMessages],\n lastReceivedMessage: action.payload,\n })),\n on(SignalrActions.clearMessages,\n (state): State => ({\n ...state,\n receivedMessages: [],\n lastReceivedMessage: undefined,\n }))\n )\n});\n","import { signalrFeature } from './signalr.reducer';\n\nexport const signalrSelectors = {\n selectReceivedMessages: signalrFeature.selectReceivedMessages,\n selectLastReceivedMessage: signalrFeature.selectLastReceivedMessage,\n selectIsConnected: signalrFeature.selectIsConnected,\n};\n","import { InjectionToken } from '@angular/core';\nimport {\n HttpTransportType,\n ILogger,\n ITransport,\n LogLevel,\n} from '@microsoft/signalr';\n\nexport const SIGNALR_CONFIG = new InjectionToken('signalr-config');\n\nexport interface ISignalrConfiguration {\n hostUrl: string;\n /** Configures the logger used for logging.\n *\n * Provide an {@link @microsoft/signalr.ILogger} instance, and log messages will be logged via that instance. Alternatively, provide a value from\n * the {@link @microsoft/signalr.LogLevel} enumeration and a default logger which logs to the Console will be configured to log messages of the specified\n * level (or higher).\n */\n logger: ILogger | LogLevel;\n clientMethods: string[];\n /** An {@link @microsoft/signalr.HttpTransportType} value specifying the transport to use for the connection. */\n transport?: HttpTransportType | ITransport;\n /** A boolean indicating if message content should be logged.\n *\n * Message content can contain sensitive user data, so this is disabled by default.\n */\n logMessageContent?: boolean;\n /** A boolean indicating if negotiation should be skipped.\n *\n * Negotiation can only be skipped when the {@link @microsoft/signalr.IHttpConnectionOptions.transport} property is set to 'HttpTransportType.WebSockets'.\n */\n skipNegotiation?: boolean;\n /**\n * Default value is 'true'.\n * This controls whether credentials such as cookies are sent in cross-site requests.\n *\n * Cookies are used by many load-balancers for sticky sessions which is required when your app is deployed with multiple servers.\n */\n withCredentials?: boolean;\n}\n","import { Injectable, OnDestroy, inject } from '@angular/core';\nimport { HubConnection, HubConnectionBuilder } from '@microsoft/signalr';\nimport {\n ISignalrConfiguration,\n SIGNALR_CONFIG,\n} from '../models/signalr.configuration';\n\nimport { Subscribable, Subscriptions } from 'imng-ngrx-utils';\nimport { tap, filter } from 'rxjs/operators';\nimport { signalrActions } from '../+state/signalr.actions';\nimport { Store } from '@ngrx/store';\nimport { OidcFacade } from 'imng-oidc-client';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class HubConnectionInjectorService implements OnDestroy, Subscribable {\n private readonly signalrConfiguration =\n inject<ISignalrConfiguration>(SIGNALR_CONFIG);\n private readonly store = inject(Store);\n\n public readonly allSubscriptions = new Subscriptions();\n public hubConnection?: HubConnection;\n\n constructor() {\n const signalrConfiguration = this.signalrConfiguration;\n const oidcFacade = inject(OidcFacade);\n\n this.allSubscriptions.push(\n oidcFacade.accessToken$\n .pipe(\n filter((accessToken) => !!accessToken),\n tap((accessToken) => {\n this.hubConnection = this.getNewHubConnection(accessToken);\n this.hubConnection?.onclose(this.onClose);\n signalrConfiguration.clientMethods?.forEach((clientMethod) =>\n this.hubConnection?.on(clientMethod, (data) =>\n this.onMessageReceived(clientMethod, data),\n ),\n );\n }),\n )\n .subscribe(),\n );\n }\n public onClose() {\n this.store.dispatch(signalrActions.connect());\n }\n public onMessageReceived(clientMethod: string, data: unknown) {\n this.store.dispatch(\n signalrActions.receivedMessage({ methodName: clientMethod, data }),\n );\n }\n public getNewHubConnection(accessToken?: string): HubConnection | undefined {\n if (accessToken) {\n return new HubConnectionBuilder()\n .withUrl(this.signalrConfiguration.hostUrl, {\n ...this.signalrConfiguration,\n accessTokenFactory: () => accessToken,\n })\n .configureLogging(this.signalrConfiguration.logger)\n .withAutomaticReconnect()\n .build();\n }\n return; //NOSONAR\n }\n\n public ngOnDestroy(): void {\n this.allSubscriptions.unsubscribeAll();\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { createEffect, ofType, Actions } from '@ngrx/effects';\nimport { map } from 'rxjs';\nimport { HubConnectionInjectorService } from '../services/hub-connection-injector.service';\nimport { signalrActions } from './signalr.actions';\n\n@Injectable()\nexport class SignalrEffects {\n private readonly actions$ = inject(Actions);\n private readonly hubConnectionInjectorService = inject(\n HubConnectionInjectorService,\n );\n\n connect$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(signalrActions.connect),\n map(async () => this.hubConnectionInjectorService.hubConnection?.start()),\n map(() => signalrActions.setConnectionState({ isConnected: true })),\n );\n });\n\n sendMessage$ = createEffect(\n () => {\n return this.actions$.pipe(\n ofType(signalrActions.sendMessage),\n map(async (action) =>\n this.hubConnectionInjectorService.hubConnection?.send(\n action.payload.methodName,\n action.payload.data,\n ),\n ),\n );\n },\n { dispatch: false },\n );\n}\n","import { Injectable, inject } from '@angular/core';\n\nimport { Store } from '@ngrx/store';\nimport { ISignalrMessage } from '../models/signalr.message';\nimport { signalrActions } from './signalr.actions';\n\nimport { signalrSelectors } from './signalr.selectors';\n\n@Injectable()\nexport class SignalrFacade {\n private readonly store = inject(Store);\n\n public readonly isConnected$ = this.store.select(\n signalrSelectors.selectIsConnected,\n );\n public readonly lastReceivedMessage$ = this.store.select(\n signalrSelectors.selectLastReceivedMessage,\n );\n public readonly receivedMessages$ = this.store.select(\n signalrSelectors.selectReceivedMessages,\n );\n\n public connect(): void {\n this.store.dispatch(signalrActions.connect());\n }\n public sendMessage(payload: ISignalrMessage): void {\n this.store.dispatch(signalrActions.sendMessage(payload));\n }\n public clearMessages(): void {\n this.store.dispatch(signalrActions.clearMessages());\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule, ModuleWithProviders } from '@angular/core';\nimport { EffectsModule } from '@ngrx/effects';\nimport { StoreModule } from '@ngrx/store';\nimport { ImngOidcClientModule } from 'imng-oidc-client';\nimport { SignalrEffects } from './+state/signalr.effects';\nimport { SignalrFacade } from './+state/signalr.facade';\nimport { signalrFeature } from './+state/signalr.reducer';\nimport {\n ISignalrConfiguration,\n SIGNALR_CONFIG,\n} from './models/signalr.configuration';\nimport { HubConnectionInjectorService } from './services/hub-connection-injector.service';\n\n@NgModule({\n imports: [\n CommonModule,\n StoreModule.forFeature(signalrFeature),\n EffectsModule.forFeature([SignalrEffects]),\n ImngOidcClientModule,\n ],\n providers: [HubConnectionInjectorService, SignalrFacade],\n})\nexport class ImngSignalrNgrxModule {\n static forRoot(\n signalrConfiguration: ISignalrConfiguration,\n ): ModuleWithProviders<ImngSignalrNgrxModule> {\n return {\n ngModule: ImngSignalrNgrxModule,\n providers: [\n {\n provide: SIGNALR_CONFIG,\n multi: false,\n useValue: signalrConfiguration,\n },\n ],\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["SignalrActions.setConnectionState","SignalrActions.receivedMessage","SignalrActions.clearMessages"],"mappings":";;;;;;;;;;;;;MAIa,OAAO,GAAG,YAAY,CAAC,2BAA2B;MAClD,kBAAkB,GAAG,mBAAmB,CAA4B,gCAAgC;MACpG,WAAW,GAAG,mBAAmB,CAAkB,wBAAwB;MAC3E,eAAe,GAAG,mBAAmB,CAAkB,4BAA4B;MACnF,aAAa,GAAG,YAAY,CAAC,0BAA0B;AAE7D,MAAM,cAAc,GAAG;IAC1B,OAAO;IACP,kBAAkB;IAClB,WAAW;IACX,eAAe;IACf;;;ACVG,MAAM,mBAAmB,GAAG;AAQ5B,MAAM,YAAY,GAAU;AACjC,IAAA,WAAW,EAAE,KAAK;AAClB,IAAA,gBAAgB,EAAE,EAAE;AACpB,IAAA,mBAAmB,EAAE,SAAS;;AAGzB,MAAM,cAAc,GAAG,aAAa,CAAC;AAC1C,IAAA,IAAI,EAAE,mBAAmB;AACzB,IAAA,OAAO,EAAE,aAAa,CACpB,YAAY,EACZ,EAAE,CAACA,kBAAiC,EAClC,CAAC,KAAK,EAAE,MAAM,MAAa;AACzB,QAAA,GAAG,KAAK;AACR,QAAA,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW;AACxC,KAAA,CAAC,CAAC,EACL,EAAE,CAACC,eAA8B,EAC/B,CAAC,KAAK,EAAE,MAAM,MAAa;AACzB,QAAA,GAAG,KAAK;QACR,gBAAgB,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,gBAAgB,CAAC;QAC7D,mBAAmB,EAAE,MAAM,CAAC,OAAO;AACpC,KAAA,CAAC,CAAC,EACL,EAAE,CAACC,aAA4B,EAC7B,CAAC,KAAK,MAAa;AACjB,QAAA,GAAG,KAAK;AACR,QAAA,gBAAgB,EAAE,EAAE;AACpB,QAAA,mBAAmB,EAAE,SAAS;AAC/B,KAAA,CAAC,CAAC;AAER,CAAA;;ACvCM,MAAM,gBAAgB,GAAG;IAC9B,sBAAsB,EAAE,cAAc,CAAC,sBAAsB;IAC7D,yBAAyB,EAAE,cAAc,CAAC,yBAAyB;IACnE,iBAAiB,EAAE,cAAc,CAAC,iBAAiB;;;MCGxC,cAAc,GAAG,IAAI,cAAc,CAAC,gBAAgB;;MCQpD,4BAA4B,CAAA;AAQvC,IAAA,WAAA,GAAA;AAPiB,QAAA,IAAA,CAAA,oBAAoB,GACnC,MAAM,CAAwB,cAAc,CAAC;AAC9B,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;AAEtB,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,aAAa,EAAE;AAIpD,QAAA,MAAM,oBAAoB,GAAG,IAAI,CAAC,oBAAoB;AACtD,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAErC,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CACxB,UAAU,CAAC;AACR,aAAA,IAAI,CACH,MAAM,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,WAAW,CAAC,EACtC,GAAG,CAAC,CAAC,WAAW,KAAI;YAClB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC;YAC1D,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;AACzC,YAAA,oBAAoB,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,YAAY,KACvD,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC,YAAY,EAAE,CAAC,IAAI,KACxC,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,IAAI,CAAC,CAC3C,CACF;AACH,SAAC,CAAC;aAEH,SAAS,EAAE,CACf;;IAEI,OAAO,GAAA;QACZ,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;;IAExC,iBAAiB,CAAC,YAAoB,EAAE,IAAa,EAAA;AAC1D,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CACjB,cAAc,CAAC,eAAe,CAAC,EAAE,UAAU,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CACnE;;AAEI,IAAA,mBAAmB,CAAC,WAAoB,EAAA;QAC7C,IAAI,WAAW,EAAE;YACf,OAAO,IAAI,oBAAoB;AAC5B,iBAAA,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE;gBAC1C,GAAG,IAAI,CAAC,oBAAoB;AAC5B,gBAAA,kBAAkB,EAAE,MAAM,WAAW;aACtC;AACA,iBAAA,gBAAgB,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAM;AACjD,iBAAA,sBAAsB;AACtB,iBAAA,KAAK,EAAE;;AAEZ,QAAA,OAAO;;IAGF,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE;;8GApD7B,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA5B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,4BAA4B,cAF3B,MAAM,EAAA,CAAA,CAAA;;2FAEP,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAHxC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCRY,cAAc,CAAA;AAD3B,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC;AAC1B,QAAA,IAAA,CAAA,4BAA4B,GAAG,MAAM,CACpD,4BAA4B,CAC7B;AAED,QAAA,IAAA,CAAA,QAAQ,GAAG,YAAY,CAAC,MAAK;YAC3B,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CACvB,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,EAC9B,GAAG,CAAC,YAAY,IAAI,CAAC,4BAA4B,CAAC,aAAa,EAAE,KAAK,EAAE,CAAC,EACzE,GAAG,CAAC,MAAM,cAAc,CAAC,kBAAkB,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CACpE;AACH,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,YAAY,GAAG,YAAY,CACzB,MAAK;AACH,YAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CACvB,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,EAClC,GAAG,CAAC,OAAO,MAAM,KACf,IAAI,CAAC,4BAA4B,CAAC,aAAa,EAAE,IAAI,CACnD,MAAM,CAAC,OAAO,CAAC,UAAU,EACzB,MAAM,CAAC,OAAO,CAAC,IAAI,CACpB,CACF,CACF;AACH,SAAC,EACD,EAAE,QAAQ,EAAE,KAAK,EAAE,CACpB;AACF;8GA5BY,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAd,cAAc,EAAA,CAAA,CAAA;;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAD1B;;;MCGY,aAAa,CAAA;AAD1B,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAEtB,IAAA,CAAA,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAC9C,gBAAgB,CAAC,iBAAiB,CACnC;QACe,IAAA,CAAA,oBAAoB,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CACtD,gBAAgB,CAAC,yBAAyB,CAC3C;QACe,IAAA,CAAA,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CACnD,gBAAgB,CAAC,sBAAsB,CACxC;AAWF;IATQ,OAAO,GAAA;QACZ,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;;AAExC,IAAA,WAAW,CAAC,OAAwB,EAAA;AACzC,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;;IAEnD,aAAa,GAAA;QAClB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC;;8GApB1C,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAb,aAAa,EAAA,CAAA,CAAA;;2FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBADzB;;;MCeY,qBAAqB,CAAA;IAChC,OAAO,OAAO,CACZ,oBAA2C,EAAA;QAE3C,OAAO;AACL,YAAA,QAAQ,EAAE,qBAAqB;AAC/B,YAAA,SAAS,EAAE;AACT,gBAAA;AACE,oBAAA,OAAO,EAAE,cAAc;AACvB,oBAAA,KAAK,EAAE,KAAK;AACZ,oBAAA,QAAQ,EAAE,oBAAoB;AAC/B,iBAAA;AACF,aAAA;SACF;;8GAbQ,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAArB,qBAAqB,EAAA,OAAA,EAAA,CAP9B,YAAY,EAAA,EAAA,CAAA,kBAAA,EAAA,EAAA,CAAA,oBAAA,EAGZ,oBAAoB,CAAA,EAAA,CAAA,CAAA;AAIX,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,aAFrB,CAAC,4BAA4B,EAAE,aAAa,CAAC,YALtD,YAAY;AACZ,YAAA,WAAW,CAAC,UAAU,CAAC,cAAc,CAAC;AACtC,YAAA,aAAa,CAAC,UAAU,CAAC,CAAC,cAAc,CAAC,CAAC;YAC1C,oBAAoB,CAAA,EAAA,CAAA,CAAA;;2FAIX,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBATjC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,YAAY;AACZ,wBAAA,WAAW,CAAC,UAAU,CAAC,cAAc,CAAC;AACtC,wBAAA,aAAa,CAAC,UAAU,CAAC,CAAC,cAAc,CAAC,CAAC;wBAC1C,oBAAoB;AACrB,qBAAA;AACD,oBAAA,SAAS,EAAE,CAAC,4BAA4B,EAAE,aAAa,CAAC;AACzD,iBAAA;;;ACtBD;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"imng-signalr-ngrx.mjs","sources":["../../../../libs/imng-signalr-ngrx/src/lib/+state/signalr.actions.ts","../../../../libs/imng-signalr-ngrx/src/lib/+state/signalr.reducer.ts","../../../../libs/imng-signalr-ngrx/src/lib/+state/signalr.selectors.ts","../../../../libs/imng-signalr-ngrx/src/lib/models/signalr.configuration.ts","../../../../libs/imng-signalr-ngrx/src/lib/services/hub-connection-injector.service.ts","../../../../libs/imng-signalr-ngrx/src/lib/+state/signalr.effects.ts","../../../../libs/imng-signalr-ngrx/src/lib/+state/signalr.facade.ts","../../../../libs/imng-signalr-ngrx/src/lib/signalr-ngrx.module.ts","../../../../libs/imng-signalr-ngrx/src/imng-signalr-ngrx.ts"],"sourcesContent":["import { createAction } from '@ngrx/store';\nimport { createPayloadAction } from 'imng-ngrx-utils';\nimport { ISignalrMessage } from '../models/signalr.message';\n\nexport const connect = createAction('[SignalR] Init Connection');\nexport const setConnectionState = createPayloadAction<{ isConnected: boolean; }>('[SignalR] Set Connection State');\nexport const sendMessage = createPayloadAction<ISignalrMessage>('[SignalR] Send Message');\nexport const receivedMessage = createPayloadAction<ISignalrMessage>('[SignalR] Received Message');\nexport const clearMessages = createAction('[SignalR] Clear Messages');\n\nexport const signalrActions = {\n connect,\n setConnectionState,\n sendMessage,\n receivedMessage,\n clearMessages\n};\n","import { createReducer, on, createFeature } from '@ngrx/store';\n\nimport * as SignalrActions from './signalr.actions';\nimport { ISignalrMessage } from '../models/signalr.message';\n\nexport const SIGNALR_FEATURE_KEY = 'signalr';\n\nexport interface State {\n isConnected: boolean;\n lastReceivedMessage: ISignalrMessage | undefined;\n receivedMessages: ISignalrMessage[];\n}\n\nexport const initialState: State = {\n isConnected: false,\n receivedMessages: [],\n lastReceivedMessage: undefined,\n};\n\nexport const signalrFeature = createFeature({\n name: SIGNALR_FEATURE_KEY,\n reducer: createReducer(\n initialState,\n on(SignalrActions.setConnectionState,\n (state, action): State => ({\n ...state,\n isConnected: action.payload.isConnected,\n })),\n on(SignalrActions.receivedMessage,\n (state, action): State => ({\n ...state,\n receivedMessages: [action.payload, ...state.receivedMessages],\n lastReceivedMessage: action.payload,\n })),\n on(SignalrActions.clearMessages,\n (state): State => ({\n ...state,\n receivedMessages: [],\n lastReceivedMessage: undefined,\n }))\n )\n});\n","import { signalrFeature } from './signalr.reducer';\n\nexport const signalrSelectors = {\n selectReceivedMessages: signalrFeature.selectReceivedMessages,\n selectLastReceivedMessage: signalrFeature.selectLastReceivedMessage,\n selectIsConnected: signalrFeature.selectIsConnected,\n};\n","import { InjectionToken } from '@angular/core';\nimport {\n HttpTransportType,\n ILogger,\n ITransport,\n LogLevel,\n} from '@microsoft/signalr';\n\nexport const SIGNALR_CONFIG = new InjectionToken('signalr-config');\n\nexport interface ISignalrConfiguration {\n hostUrl: string;\n /** Configures the logger used for logging.\n *\n * Provide an {@link @microsoft/signalr.ILogger} instance, and log messages will be logged via that instance. Alternatively, provide a value from\n * the {@link @microsoft/signalr.LogLevel} enumeration and a default logger which logs to the Console will be configured to log messages of the specified\n * level (or higher).\n */\n logger: ILogger | LogLevel;\n clientMethods: string[];\n /** An {@link @microsoft/signalr.HttpTransportType} value specifying the transport to use for the connection. */\n transport?: HttpTransportType | ITransport;\n /** A boolean indicating if message content should be logged.\n *\n * Message content can contain sensitive user data, so this is disabled by default.\n */\n logMessageContent?: boolean;\n /** A boolean indicating if negotiation should be skipped.\n *\n * Negotiation can only be skipped when the {@link @microsoft/signalr.IHttpConnectionOptions.transport} property is set to 'HttpTransportType.WebSockets'.\n */\n skipNegotiation?: boolean;\n /**\n * Default value is 'true'.\n * This controls whether credentials such as cookies are sent in cross-site requests.\n *\n * Cookies are used by many load-balancers for sticky sessions which is required when your app is deployed with multiple servers.\n */\n withCredentials?: boolean;\n}\n","import { Injectable, OnDestroy, inject } from '@angular/core';\nimport { HubConnection, HubConnectionBuilder } from '@microsoft/signalr';\nimport {\n ISignalrConfiguration,\n SIGNALR_CONFIG,\n} from '../models/signalr.configuration';\n\nimport { Subscribable, Subscriptions } from 'imng-ngrx-utils';\nimport { tap, filter } from 'rxjs/operators';\nimport { signalrActions } from '../+state/signalr.actions';\nimport { Store } from '@ngrx/store';\nimport { OidcFacade } from 'imng-oidc-client';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class HubConnectionInjectorService implements OnDestroy, Subscribable {\n private readonly signalrConfiguration =\n inject<ISignalrConfiguration>(SIGNALR_CONFIG);\n private readonly store = inject(Store);\n\n public readonly allSubscriptions = new Subscriptions();\n public hubConnection?: HubConnection;\n\n constructor() {\n const signalrConfiguration = this.signalrConfiguration;\n const oidcFacade = inject(OidcFacade);\n\n this.allSubscriptions.push(\n oidcFacade.accessToken$\n .pipe(\n filter((accessToken) => !!accessToken),\n tap((accessToken) => {\n this.hubConnection = this.getNewHubConnection(accessToken);\n this.hubConnection?.onclose(this.onClose);\n signalrConfiguration.clientMethods?.forEach((clientMethod) =>\n this.hubConnection?.on(clientMethod, (data) =>\n this.onMessageReceived(clientMethod, data),\n ),\n );\n }),\n )\n .subscribe(),\n );\n }\n public onClose() {\n this.store.dispatch(signalrActions.connect());\n }\n public onMessageReceived(clientMethod: string, data: unknown) {\n this.store.dispatch(\n signalrActions.receivedMessage({ methodName: clientMethod, data }),\n );\n }\n public getNewHubConnection(accessToken?: string): HubConnection | undefined {\n if (accessToken) {\n return new HubConnectionBuilder()\n .withUrl(this.signalrConfiguration.hostUrl, {\n ...this.signalrConfiguration,\n accessTokenFactory: () => accessToken,\n })\n .configureLogging(this.signalrConfiguration.logger)\n .withAutomaticReconnect()\n .build();\n }\n return; //NOSONAR\n }\n\n public ngOnDestroy(): void {\n this.allSubscriptions.unsubscribeAll();\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { createEffect, ofType, Actions } from '@ngrx/effects';\nimport { map } from 'rxjs';\nimport { HubConnectionInjectorService } from '../services/hub-connection-injector.service';\nimport { signalrActions } from './signalr.actions';\n\n@Injectable()\nexport class SignalrEffects {\n private readonly actions$ = inject(Actions);\n private readonly hubConnectionInjectorService = inject(\n HubConnectionInjectorService,\n );\n\n connect$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(signalrActions.connect),\n map(async () => this.hubConnectionInjectorService.hubConnection?.start()),\n map(() => signalrActions.setConnectionState({ isConnected: true })),\n );\n });\n\n sendMessage$ = createEffect(\n () => {\n return this.actions$.pipe(\n ofType(signalrActions.sendMessage),\n map(async (action) =>\n this.hubConnectionInjectorService.hubConnection?.send(\n action.payload.methodName,\n action.payload.data,\n ),\n ),\n );\n },\n { dispatch: false },\n );\n}\n","import { Injectable, inject } from '@angular/core';\n\nimport { Store } from '@ngrx/store';\nimport { ISignalrMessage } from '../models/signalr.message';\nimport { signalrActions } from './signalr.actions';\n\nimport { signalrSelectors } from './signalr.selectors';\n\n@Injectable()\nexport class SignalrFacade {\n private readonly store = inject(Store);\n\n public readonly isConnected$ = this.store.select(\n signalrSelectors.selectIsConnected,\n );\n public readonly lastReceivedMessage$ = this.store.select(\n signalrSelectors.selectLastReceivedMessage,\n );\n public readonly receivedMessages$ = this.store.select(\n signalrSelectors.selectReceivedMessages,\n );\n\n public connect(): void {\n this.store.dispatch(signalrActions.connect());\n }\n public sendMessage(payload: ISignalrMessage): void {\n this.store.dispatch(signalrActions.sendMessage(payload));\n }\n public clearMessages(): void {\n this.store.dispatch(signalrActions.clearMessages());\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule, ModuleWithProviders } from '@angular/core';\nimport { EffectsModule } from '@ngrx/effects';\nimport { StoreModule } from '@ngrx/store';\nimport { ImngOidcClientModule } from 'imng-oidc-client';\nimport { SignalrEffects } from './+state/signalr.effects';\nimport { SignalrFacade } from './+state/signalr.facade';\nimport { signalrFeature } from './+state/signalr.reducer';\nimport {\n ISignalrConfiguration,\n SIGNALR_CONFIG,\n} from './models/signalr.configuration';\nimport { HubConnectionInjectorService } from './services/hub-connection-injector.service';\n\n@NgModule({\n imports: [\n CommonModule,\n StoreModule.forFeature(signalrFeature),\n EffectsModule.forFeature([SignalrEffects]),\n ImngOidcClientModule,\n ],\n providers: [HubConnectionInjectorService, SignalrFacade],\n})\nexport class ImngSignalrNgrxModule {\n static forRoot(\n signalrConfiguration: ISignalrConfiguration,\n ): ModuleWithProviders<ImngSignalrNgrxModule> {\n return {\n ngModule: ImngSignalrNgrxModule,\n providers: [\n {\n provide: SIGNALR_CONFIG,\n multi: false,\n useValue: signalrConfiguration,\n },\n ],\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["SignalrActions.setConnectionState","SignalrActions.receivedMessage","SignalrActions.clearMessages"],"mappings":"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"}
|