{"version":3,"file":"c8y-ngx-components-data-broker.mjs","sources":["../../data-broker/model/data-broker.subscription.model.ts","../../data-broker/factories/data-broker.subscription.factory.ts","../../data-broker/data-broker-subscriptions.service.ts","../../data-broker/data-broker.module.ts","../../data-broker/ng1/downgraded.services.ts","../../data-broker/ng1/index.ts","../../data-broker/c8y-ngx-components-data-broker.ts"],"sourcesContent":["import { IUser } from '@c8y/client';\n\nexport enum DataBrokerConnectorStatus {\n  ACTIVE = 'ACTIVE',\n  SUSPENDED = 'SUSPENDED',\n  WAITING = 'WAITING'\n}\n\nexport interface SubscriptionStatusViewModel {\n  icon: string;\n  textClass: string;\n  text: string;\n  iconClass?: string;\n}\n\nexport interface SubscriptionViewModel {\n  userEnabled: boolean;\n  visibleUserStatus: string;\n  userId: string;\n  status: SubscriptionStatusViewModel;\n  id: string;\n  _c8y_BrokerSource: any;\n}\n\nexport interface NewDeviceRequestStatus {\n  name: string;\n  label: string;\n  value: string;\n}\n\nexport interface SubscriptionsViewModelNg1 {\n  init(): void;\n  reload(): void;\n  destroy(): void;\n}\n\nexport type UserStatusPartial = Required<Pick<IUser, 'id' | 'enabled'>>;\n","import { DeviceRegistrationStatus } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n  SubscriptionStatusViewModel,\n  DataBrokerConnectorStatus,\n  NewDeviceRequestStatus\n} from '../model/data-broker.subscription.model';\n\nexport class SubscriptionStatusViewModelFactory {\n  build(status: DataBrokerConnectorStatus): SubscriptionStatusViewModel {\n    let statusViewModel = null;\n    switch (status) {\n      case DataBrokerConnectorStatus.ACTIVE: // dataBrokerConnectorsSvc.STATUS.ACTIVE.value\n        statusViewModel = {\n          icon: 'check-circle',\n          textClass: 'text-success',\n          text: gettext('Active`data broker subscription`')\n        };\n        break;\n      case DataBrokerConnectorStatus.SUSPENDED: // dataBrokerConnectorsSvc.STATUS.SUSPENDED.value\n        statusViewModel = {\n          icon: 'exclamation-triangle',\n          textClass: 'text-warning',\n          text: gettext('Inactive`data broker subscription`')\n        };\n        break;\n      case DataBrokerConnectorStatus.WAITING: // dataBrokerConnectorsSvc.STATUS.WAITING.value\n        statusViewModel = {\n          icon: 'spinner',\n          iconClass: 'icon-spin',\n          textClass: 'text-warning',\n          text: gettext('Waiting`data broker subscription`')\n        };\n        break;\n      default:\n        break;\n    }\n    return statusViewModel;\n  }\n}\n\nexport class NewDeviceRequestStatusFactory {\n  build(status: DeviceRegistrationStatus): NewDeviceRequestStatus {\n    let result = null;\n    switch (status) {\n      case DeviceRegistrationStatus.WAITING_FOR_CONNECTION:\n        result = {\n          name: DeviceRegistrationStatus.WAITING_FOR_CONNECTION,\n          label: gettext('Waiting for connection`data broker subscription`'),\n          value: DeviceRegistrationStatus.WAITING_FOR_CONNECTION\n        };\n        break;\n      case DeviceRegistrationStatus.PENDING_ACCEPTANCE:\n        result = {\n          name: DeviceRegistrationStatus.PENDING_ACCEPTANCE,\n          label: gettext('Pending acceptance`data broker subscription`'),\n          value: DeviceRegistrationStatus.PENDING_ACCEPTANCE\n        };\n        break;\n      case DeviceRegistrationStatus.ACCEPTED:\n        result = {\n          name: DeviceRegistrationStatus.ACCEPTED,\n          label: gettext('Accepted`data broker subscription`'),\n          value: DeviceRegistrationStatus.ACCEPTED\n        };\n      case DeviceRegistrationStatus.BLOCKED:\n        result = {\n          name: DeviceRegistrationStatus.BLOCKED,\n          label: gettext('Blocked`data broker subscription`'),\n          value: DeviceRegistrationStatus.BLOCKED\n        };\n        break;\n    }\n    return result;\n  }\n}\n","import { Injectable } from '@angular/core';\nimport {\n  IDeviceRegistration,\n  IManagedObject,\n  IUser,\n  UserService,\n  InventoryService,\n  DeviceRegistrationService,\n  DeviceRegistrationStatus\n} from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { get, pick, set } from 'lodash-es';\nimport { BehaviorSubject, interval, merge, Observable, Subject, Subscription } from 'rxjs';\nimport {\n  ManagedObjectRealtimeService,\n  DeviceBootstrapRealtimeService,\n  AppStateService\n} from '@c8y/ngx-components';\nimport {\n  SubscriptionStatusViewModel,\n  DataBrokerConnectorStatus,\n  SubscriptionViewModel,\n  SubscriptionsViewModelNg1\n} from './model/data-broker.subscription.model';\nimport {\n  SubscriptionStatusViewModelFactory,\n  NewDeviceRequestStatusFactory\n} from './factories/data-broker.subscription.factory';\nimport { distinctUntilChanged, filter, map, switchMap, takeUntil, tap } from 'rxjs/operators';\n\n@Injectable()\nexport class DataBrokerSubscriptionsService {\n  private readonly FRAGMENT_TYPE: string = 'c8y_BrokerSource';\n  private readonly NEW_DEVICE_REQUEST_TYPE: string = 'c8y_DataBroker';\n  /**\n   * inventory polling interval\n   */\n  private readonly POLL_INTERVAL_FOR_SUBSCRIPTIONS = 15000;\n  /**\n   * produce status fragment for subscription\n   */\n  private subscriptionStatusViewModelFactory: SubscriptionStatusViewModelFactory;\n  /**\n   * produce request status view model\n   */\n  private newDeviceRequestStatusViewModelFactory: NewDeviceRequestStatusFactory;\n\n  private moRealtimeSubscriptionsMap = new Map<string, Subscription>();\n\n  private subscriptionsCount;\n\n  private refreshPendingTrigger$ = new BehaviorSubject<void>(null);\n\n  filters = {\n    fragmentType: this.FRAGMENT_TYPE,\n    pageSize: 2000\n  };\n\n  /**\n   * legacy enum values\n   */\n  NEW_DEVICE_REQUEST_STATUS;\n\n  constructor(\n    private moRealtimeService: ManagedObjectRealtimeService,\n    private deviceBootstrapRealtimeService: DeviceBootstrapRealtimeService,\n    private inventoryService: InventoryService,\n    private userService: UserService,\n    private deviceRegistrationService: DeviceRegistrationService,\n    private appStateService: AppStateService\n  ) {\n    this.subscriptionStatusViewModelFactory = new SubscriptionStatusViewModelFactory();\n    this.newDeviceRequestStatusViewModelFactory = new NewDeviceRequestStatusFactory();\n\n    // Build legacy enum structure for ng1 component\n    this.NEW_DEVICE_REQUEST_STATUS = this.generateDeviceRequestStatusEnum(\n      this.newDeviceRequestStatusViewModelFactory\n    );\n  }\n\n  async getBrokerSubscriptionsList(): Promise<IManagedObject[]> {\n    return (await this.inventoryService.list(this.filters)).data;\n  }\n\n  /**\n   * User status text (legacy compatibility)\n   */\n  getVisibleUserStatusText(user): string {\n    return user.enabled ? gettext('active`subscription`') : gettext('inactive`subscription`');\n  }\n\n  async remove(subscription: SubscriptionViewModel) {\n    // handle realtime unsubsribe\n    if (this.moRealtimeSubscriptionsMap.has(subscription.id)) {\n      this.moRealtimeSubscriptionsMap.get(subscription.id).unsubscribe();\n      this.moRealtimeSubscriptionsMap.delete(subscription.id);\n    }\n    // handle removal\n    const brokerSourceRenamed = `_${this.FRAGMENT_TYPE}`;\n    set(subscription, this.FRAGMENT_TYPE, null);\n\n    return await this.inventoryService.update(\n      pick(subscription, ['id', this.FRAGMENT_TYPE, brokerSourceRenamed])\n    );\n  }\n\n  async setStatus(\n    subscription: SubscriptionViewModel,\n    enabled: boolean\n  ): Promise<SubscriptionViewModel> {\n    const userData = (\n      await this.userService.update({\n        id: subscription.userId,\n        enabled\n      } as Partial<IUser>)\n    ).data;\n    subscription.userEnabled = userData.enabled;\n    subscription.visibleUserStatus = this.getVisibleUserStatusText(userData);\n    return subscription;\n  }\n\n  /**\n   * List of pending subscriptions\n   */\n  async listPendingBrokerSubscriptions(): Promise<IDeviceRegistration[]> {\n    return (\n      await this.deviceRegistrationService.list({\n        pageSize: 2000,\n        withTotalPages: true\n      })\n    ).data;\n  }\n\n  /**\n   * Accept subscription\n   */\n  async accept(code: string): Promise<IDeviceRegistration> {\n    return (await this.deviceRegistrationService.accept(code)).data;\n  }\n\n  /**\n   * Discard subscription\n   */\n  async discard(code: string) {\n    return await this.deviceRegistrationService.delete(code);\n  }\n\n  /**\n   * Add new subscription\n   */\n  async create(code: string): Promise<IDeviceRegistration> {\n    return (\n      await this.deviceRegistrationService.create({\n        id: code,\n        type: this.NEW_DEVICE_REQUEST_TYPE\n      })\n    ).data;\n  }\n\n  getForNg1({\n    pollingInterval,\n    onPendingSubscriptions,\n    onExistingSubscriptions,\n    onMoUpdate\n  }): SubscriptionsViewModelNg1 {\n    const reload$ = new Subject<void>();\n    const destroy$ = new Subject<void>();\n    const ready$ = new Subject<void>();\n\n    const unsubscribeRealtime = () => {\n      const moRealtimeSubscriptionIterator = this.moRealtimeSubscriptionsMap.keys();\n      let key = moRealtimeSubscriptionIterator.next().value as string;\n      while (this.moRealtimeSubscriptionsMap.has(key)) {\n        this.moRealtimeSubscriptionsMap.get(key).unsubscribe();\n        this.moRealtimeSubscriptionsMap.delete(key as string);\n        key = moRealtimeSubscriptionIterator.next().value as string;\n      }\n    };\n\n    const userInitialized$ = this.appStateService.currentUser.pipe(\n      filter(currentUser => currentUser !== null)\n    );\n    const triggers = merge(reload$, ready$);\n    const pendingSubscriptions$: Observable<SubscriptionViewModel[]> = merge(\n      triggers,\n      this.deviceBootstrapRealtimeService.onAll$(),\n      this.refreshPendingTrigger$\n    ).pipe(\n      switchMap(() => userInitialized$),\n      switchMap(() => this.listPendingBrokerSubscriptions()),\n      map(pendingSubscriptions =>\n        this.convertDeviceRegistrationsToSubscriptionViewModels(pendingSubscriptions)\n      ),\n      takeUntil(destroy$)\n    );\n    const existingSubscriptions$: Observable<SubscriptionViewModel[]> = merge(\n      triggers,\n      interval(pollingInterval)\n    ).pipe(\n      switchMap(() => userInitialized$),\n      switchMap(() => this.getBrokerSubscriptionsList()),\n      tap(mos => {\n        if (this.subscriptionsCount !== mos.length) {\n          this.refreshPendingTrigger$.next();\n          this.subscriptionsCount = mos.length;\n        }\n        mos.forEach(mo => {\n          if (!this.moRealtimeSubscriptionsMap.has(mo.id)) {\n            const mortObservable = this.moRealtimeService\n              .onUpdate$(mo.id)\n              .pipe(switchMap(mo => this.convertToViewModel([mo])));\n            this.moRealtimeSubscriptionsMap.set(mo.id, mortObservable.subscribe(onMoUpdate));\n          }\n        });\n      }),\n      distinctUntilChanged(),\n      switchMap(mos => this.convertToViewModel(mos)),\n      takeUntil(destroy$)\n    );\n\n    return {\n      init() {\n        pendingSubscriptions$.subscribe(onPendingSubscriptions);\n        existingSubscriptions$.subscribe(onExistingSubscriptions);\n        setTimeout(() => {\n          ready$.next();\n        }, 1000);\n      },\n      reload() {\n        reload$.next();\n      },\n      destroy() {\n        destroy$.next();\n        destroy$.complete();\n        unsubscribeRealtime();\n      }\n    };\n  }\n\n  private convertDeviceRegistrationsToSubscriptionViewModels(\n    pendingSubscriptions\n  ): SubscriptionViewModel[] {\n    const convertedToViewModel = pendingSubscriptions\n      .filter(deviceRequest => deviceRequest.type === this.NEW_DEVICE_REQUEST_TYPE)\n      .map(deviceRequest => {\n        return Object.assign({}, get(deviceRequest, 'customProperties.c8y_BrokerSource'), {\n          status: this.newDeviceRequestStatusViewModelFactory.build(deviceRequest.status),\n          type: deviceRequest.type,\n          id: deviceRequest.id\n        });\n      });\n    return convertedToViewModel;\n  }\n\n  private generateDeviceRequestStatusEnum(newDeviceRequestViewModelFactory) {\n    const result = {};\n    for (const status in DeviceRegistrationStatus) {\n      Object.defineProperty(result, status, {\n        enumerable: true,\n        writable: false,\n        configurable: false,\n        value: newDeviceRequestViewModelFactory.build(status as any as DeviceRegistrationStatus)\n      });\n    }\n    return result;\n  }\n\n  // Function maps data in suitable manner to have it easier to display. Used in service mainly for compatibility\n  private async convertToViewModel(\n    subscriptions: IManagedObject[]\n  ): Promise<SubscriptionViewModel[]> {\n    const viewModelSubscriptions = subscriptions.map(async subscription => {\n      const { data: userDetails } = await this.userService.detail(subscription.owner);\n      return {\n        userEnabled: userDetails.enabled,\n        visibleUserStatus: this.getVisibleUserStatusText(userDetails), //TODO:IIAR should be extracted to ngx pipe when the rest of data-broker is migrated\n        userId: userDetails.id,\n        status: this.getStatusViewModel(subscription.c8y_BrokerSource.status), //TODO:IIAR should be extracted to ngx pipe when the rest of data-broker is migrated\n        id: subscription.id,\n        _c8y_BrokerSource: subscription.c8y_BrokerSource\n      } as SubscriptionViewModel;\n    });\n    return Promise.all(viewModelSubscriptions);\n  }\n\n  // Status decoration (legacy compatibility)\n  private getStatusViewModel(status: DataBrokerConnectorStatus): SubscriptionStatusViewModel {\n    return this.subscriptionStatusViewModelFactory.build(status);\n  }\n}\n","import { NgModule } from '@angular/core';\nimport {\n  CoreModule,\n  ManagedObjectRealtimeService,\n  DeviceBootstrapRealtimeService\n} from '@c8y/ngx-components';\nimport { DataBrokerSubscriptionsService } from './data-broker-subscriptions.service';\n\n@NgModule({\n  declarations: [],\n  imports: [CoreModule],\n  providers: [\n    DataBrokerSubscriptionsService,\n    ManagedObjectRealtimeService,\n    DeviceBootstrapRealtimeService\n  ],\n  exports: []\n})\nexport class DataBrokerModule {}\n","import { downgradeInjectable } from '@angular/upgrade/static';\nimport { DataBrokerSubscriptionsService } from '../data-broker-subscriptions.service';\nexport const dataBrokerSubscriptionsServiceDowngradedInjectable = downgradeInjectable(\n  DataBrokerSubscriptionsService\n);\n","import * as angular from 'angular';\nimport { registerNgModule } from '@c8y/ng1-modules';\nimport { dataBrokerSubscriptionsServiceDowngradedInjectable } from './downgraded.services';\n\nconst NAME_DATA_BROKER = 'c8y.upgrade.dataBroker';\n\nangular\n  .module(NAME_DATA_BROKER, [])\n  .service('c8yDataBrokerSubscriptionsService', dataBrokerSubscriptionsServiceDowngradedInjectable);\n\nexport const ng1ModulesDataBroker = [NAME_DATA_BROKER];\n\nregisterNgModule(ng1ModulesDataBroker);\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}