UNPKG

imng-application-insights-ngrx

Version:

Small library to facilitate the integration of Application Insights with an NGRX metaReducer.

1 lines 12 kB
{"version":3,"file":"imng-application-insights-ngrx.mjs","sources":["../../../../libs/imng-application-insights-ngrx/src/lib/app-insights-monitoring.service.ts","../../../../libs/imng-application-insights-ngrx/src/lib/application-insights-ngrx.module.ts","../../../../libs/imng-application-insights-ngrx/src/lib/app-insights-root-effects.ts","../../../../libs/imng-application-insights-ngrx/src/imng-application-insights-ngrx.ts"],"sourcesContent":["import { InjectionToken, Injectable, inject } from '@angular/core';\nimport {\n ApplicationInsights,\n IConfiguration,\n} from '@microsoft/applicationinsights-web';\nimport { Actions } from '@ngrx/effects';\nimport { Action } from '@ngrx/store';\nimport { Observable, tap, filter } from 'rxjs';\n\nexport const APP_INSIGHTS_CONFIG = new InjectionToken('app-insights-config');\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AppInsightsMonitoringService {\n readonly appInsightsConfig = inject<IConfiguration>(APP_INSIGHTS_CONFIG);\n\n public readonly appInsights: ApplicationInsights;\n constructor() {\n const appInsightsConfig = this.appInsightsConfig;\n\n this.appInsights = new ApplicationInsights({ config: appInsightsConfig });\n this.appInsights.loadAppInsights();\n }\n\n public setAuthenticatedUserContext(userId: string): void {\n this.appInsights.setAuthenticatedUserContext(userId, undefined, true);\n }\n\n public clearAuthenticatedUserContext(): void {\n this.appInsights.clearAuthenticatedUserContext();\n }\n\n public logException(\n exception: Error,\n properties?: never,\n measurements?: { [key: string]: number },\n ): void {\n this.appInsights.trackException({ exception, properties, measurements });\n }\n\n public logEvent(\n name: string,\n properties?: never,\n measurements?: { [key: string]: number },\n ): void {\n this.appInsights.trackEvent({ name, properties, measurements });\n }\n\n public trackEventsEffect(\n actions$: Actions,\n logPayload: boolean,\n ): Observable<Action> {\n return actions$.pipe(\n tap((x) => {\n this.logEvent(\n x.type,\n logPayload ? (x as unknown as { payload: never }).payload : undefined,\n );\n }),\n );\n }\n\n public trackErrorsEffect(actions$: Actions): Observable<Action> {\n return actions$.pipe(\n filter((x) => {\n const type = x.type.toUpperCase();\n return type.endsWith('ERROR') || type.endsWith('FAILURE');\n }),\n tap((x) => {\n this.logException(x as never);\n }),\n );\n }\n}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AppInsightsMonitoringService, APP_INSIGHTS_CONFIG } from './app-insights-monitoring.service';\nimport { IConfiguration } from '@microsoft/applicationinsights-web';\n\n@NgModule({\n imports: [CommonModule],\n providers: [AppInsightsMonitoringService],\n})\nexport class ImngAppInsightsNgrxModule {\n static forRoot(appInsightsConfiguration: IConfiguration): ModuleWithProviders<ImngAppInsightsNgrxModule> {\n return {\n ngModule: ImngAppInsightsNgrxModule,\n providers: [{ provide: APP_INSIGHTS_CONFIG, multi: false, useValue: appInsightsConfiguration }],\n };\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { Actions, createEffect } from '@ngrx/effects';\nimport { Action } from '@ngrx/store';\nimport { Observable } from 'rxjs';\nimport { tap, filter } from 'rxjs/operators';\nimport { AppInsightsMonitoringService } from './app-insights-monitoring.service';\n\nabstract class AppInsightsBaseffects {\n constructor(\n protected actions$: Actions,\n protected monitor: AppInsightsMonitoringService,\n ) {}\n protected readonly noDispatch = { dispatch: false };\n\n protected getTrackLoginPipe(): Observable<Action> {\n return this.actions$.pipe(\n filter(\n (x: { type: string; payload?: { profile?: { email?: string } } }) =>\n x.type.toUpperCase().endsWith('USER FOUND') && !!x.payload,\n ),\n tap((x: { type: string; payload?: { profile?: { email?: string } } }) => {\n this.monitor.setAuthenticatedUserContext(\n x.payload?.profile?.email ?? 'unknown',\n );\n }),\n );\n }\n\n protected getTrackLogoutPipe(): Observable<Action> {\n return this.actions$.pipe(\n filter((x) => 0 < x.type.toUpperCase().indexOf('SIGN OUT')),\n tap(() => {\n this.monitor.clearAuthenticatedUserContext();\n }),\n );\n }\n\n protected getTrackExceptionsPipe(): Observable<Action> {\n return this.actions$.pipe(\n filter((x) => x.type.toUpperCase().endsWith('ERROR')),\n tap((x: { type: string; payload?: Error }) => {\n this.monitor.logException(x.payload || new Error('Unknown Error'));\n }),\n );\n }\n}\n\n@Injectable()\nexport class AppInsightsVerboseRootEffects extends AppInsightsBaseffects {\n trackEvents = createEffect(() => {\n return this.actions$.pipe(\n tap((x: { type: string; payload?: never }) =>\n this.monitor.logEvent(x.type, x.payload),\n ),\n );\n }, this.noDispatch);\n\n trackLogin = createEffect(() => {\n return this.getTrackLoginPipe();\n }, this.noDispatch);\n\n trackLogout = createEffect(() => {\n return this.getTrackLogoutPipe();\n }, this.noDispatch);\n\n trackExceptions = createEffect(() => {\n return this.getTrackExceptionsPipe();\n }, this.noDispatch);\n\n constructor() {\n const actions$ = inject(Actions);\n const monitor = inject(AppInsightsMonitoringService);\n\n super(actions$, monitor);\n }\n}\n\n@Injectable()\nexport class AppInsightsInfoRootEffects extends AppInsightsBaseffects {\n trackEvents = createEffect(() => {\n return this.actions$.pipe(tap((x) => this.monitor.logEvent(x.type)));\n }, this.noDispatch);\n\n trackLogin = createEffect(() => {\n return this.getTrackLoginPipe();\n }, this.noDispatch);\n\n trackLogout = createEffect(() => {\n return this.getTrackLogoutPipe();\n }, this.noDispatch);\n\n trackExceptions = createEffect(() => {\n return this.getTrackExceptionsPipe();\n }, this.noDispatch);\n\n constructor() {\n const actions$ = inject(Actions);\n const monitor = inject(AppInsightsMonitoringService);\n\n super(actions$, monitor);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["filter","tap"],"mappings":";;;;;;;;MASa,mBAAmB,GAAG,IAAI,cAAc,CAAC,qBAAqB;MAK9D,4BAA4B,CAAA;AAIvC,IAAA,WAAA,GAAA;AAHS,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAiB,mBAAmB,CAAC;AAItE,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB;AAEhD,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,mBAAmB,CAAC,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;AACzE,QAAA,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE;IACpC;AAEO,IAAA,2BAA2B,CAAC,MAAc,EAAA;QAC/C,IAAI,CAAC,WAAW,CAAC,2BAA2B,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC;IACvE;IAEO,6BAA6B,GAAA;AAClC,QAAA,IAAI,CAAC,WAAW,CAAC,6BAA6B,EAAE;IAClD;AAEO,IAAA,YAAY,CACjB,SAAgB,EAChB,UAAkB,EAClB,YAAwC,EAAA;AAExC,QAAA,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC;IAC1E;AAEO,IAAA,QAAQ,CACb,IAAY,EACZ,UAAkB,EAClB,YAAwC,EAAA;AAExC,QAAA,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC;IACjE;IAEO,iBAAiB,CACtB,QAAiB,EACjB,UAAmB,EAAA;QAEnB,OAAO,QAAQ,CAAC,IAAI,CAClB,GAAG,CAAC,CAAC,CAAC,KAAI;AACR,YAAA,IAAI,CAAC,QAAQ,CACX,CAAC,CAAC,IAAI,EACN,UAAU,GAAI,CAAmC,CAAC,OAAO,GAAG,SAAS,CACtE;QACH,CAAC,CAAC,CACH;IACH;AAEO,IAAA,iBAAiB,CAAC,QAAiB,EAAA;QACxC,OAAO,QAAQ,CAAC,IAAI,CAClB,MAAM,CAAC,CAAC,CAAC,KAAI;YACX,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE;AACjC,YAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;AAC3D,QAAA,CAAC,CAAC,EACF,GAAG,CAAC,CAAC,CAAC,KAAI;AACR,YAAA,IAAI,CAAC,YAAY,CAAC,CAAU,CAAC;QAC/B,CAAC,CAAC,CACH;IACH;8GA3DW,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;;;MCJY,yBAAyB,CAAA;IACpC,OAAO,OAAO,CAAC,wBAAwC,EAAA;QACrD,OAAO;AACL,YAAA,QAAQ,EAAE,yBAAyB;AACnC,YAAA,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,wBAAwB,EAAE,CAAC;SAChG;IACH;8GANW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAzB,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,yBAAyB,YAH1B,YAAY,CAAA,EAAA,CAAA,CAAA;AAGX,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,yBAAyB,EAAA,SAAA,EAFzB,CAAC,4BAA4B,CAAC,YAD/B,YAAY,CAAA,EAAA,CAAA,CAAA;;2FAGX,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAJrC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,YAAY,CAAC;oBACvB,SAAS,EAAE,CAAC,4BAA4B,CAAC;AAC1C,iBAAA;;;ACDD,MAAe,qBAAqB,CAAA;IAClC,WAAA,CACY,QAAiB,EACjB,OAAqC,EAAA;QADrC,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACR,IAAA,CAAA,OAAO,GAAP,OAAO;AAEA,QAAA,IAAA,CAAA,UAAU,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE;IADhD;IAGO,iBAAiB,GAAA;AACzB,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CACvBA,QAAM,CACJ,CAAC,CAA+D,KAC9D,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAC7D,EACDC,KAAG,CAAC,CAAC,CAA+D,KAAI;AACtE,YAAA,IAAI,CAAC,OAAO,CAAC,2BAA2B,CACtC,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,IAAI,SAAS,CACvC;QACH,CAAC,CAAC,CACH;IACH;IAEU,kBAAkB,GAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CACvBD,QAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,EAC3DC,KAAG,CAAC,MAAK;AACP,YAAA,IAAI,CAAC,OAAO,CAAC,6BAA6B,EAAE;QAC9C,CAAC,CAAC,CACH;IACH;IAEU,sBAAsB,GAAA;AAC9B,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CACvBD,QAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EACrDC,KAAG,CAAC,CAAC,CAAoC,KAAI;AAC3C,YAAA,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,IAAI,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;QACpE,CAAC,CAAC,CACH;IACH;AACD;AAGK,MAAO,6BAA8B,SAAQ,qBAAqB,CAAA;AAqBtE,IAAA,WAAA,GAAA;AACE,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC;AAChC,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,4BAA4B,CAAC;AAEpD,QAAA,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC;AAxB1B,QAAA,IAAA,CAAA,WAAW,GAAG,YAAY,CAAC,MAAK;AAC9B,YAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CACvBA,KAAG,CAAC,CAAC,CAAoC,KACvC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CACzC,CACF;AACH,QAAA,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC;AAEnB,QAAA,IAAA,CAAA,UAAU,GAAG,YAAY,CAAC,MAAK;AAC7B,YAAA,OAAO,IAAI,CAAC,iBAAiB,EAAE;AACjC,QAAA,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC;AAEnB,QAAA,IAAA,CAAA,WAAW,GAAG,YAAY,CAAC,MAAK;AAC9B,YAAA,OAAO,IAAI,CAAC,kBAAkB,EAAE;AAClC,QAAA,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC;AAEnB,QAAA,IAAA,CAAA,eAAe,GAAG,YAAY,CAAC,MAAK;AAClC,YAAA,OAAO,IAAI,CAAC,sBAAsB,EAAE;AACtC,QAAA,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC;IAOnB;8GA1BW,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAA7B,6BAA6B,EAAA,CAAA,CAAA;;2FAA7B,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBADzC;;AA+BK,MAAO,0BAA2B,SAAQ,qBAAqB,CAAA;AAiBnE,IAAA,WAAA,GAAA;AACE,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC;AAChC,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,4BAA4B,CAAC;AAEpD,QAAA,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC;AApB1B,QAAA,IAAA,CAAA,WAAW,GAAG,YAAY,CAAC,MAAK;YAC9B,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAACA,KAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACtE,QAAA,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC;AAEnB,QAAA,IAAA,CAAA,UAAU,GAAG,YAAY,CAAC,MAAK;AAC7B,YAAA,OAAO,IAAI,CAAC,iBAAiB,EAAE;AACjC,QAAA,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC;AAEnB,QAAA,IAAA,CAAA,WAAW,GAAG,YAAY,CAAC,MAAK;AAC9B,YAAA,OAAO,IAAI,CAAC,kBAAkB,EAAE;AAClC,QAAA,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC;AAEnB,QAAA,IAAA,CAAA,eAAe,GAAG,YAAY,CAAC,MAAK;AAClC,YAAA,OAAO,IAAI,CAAC,sBAAsB,EAAE;AACtC,QAAA,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC;IAOnB;8GAtBW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAA1B,0BAA0B,EAAA,CAAA,CAAA;;2FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBADtC;;;AC7ED;;AAEG;;;;"}