{"version":3,"file":"c8y-ngx-components-sigfox-device-registration.mjs","sources":["../../sigfox-device-registration/sigfox-device-registration.model.ts","../../sigfox-device-registration/sigfox-provider.service.ts","../../sigfox-device-registration/sigfox-device-registration.component.ts","../../sigfox-device-registration/sigfox-device-registration.component.html","../../sigfox-device-registration/sigfox-device-registration-button.component.ts","../../sigfox-device-registration/sigfox-device-registration-button.component.html","../../sigfox-device-registration/sigfox-device-registration.factory.ts","../../sigfox-device-registration/sigfox-device-registration.module.ts","../../sigfox-device-registration/c8y-ngx-components-sigfox-device-registration.ts"],"sourcesContent":["import { IManagedObject } from '@c8y/client';\n\nexport interface SigfoxDevice {\n  id: string;\n  pac: string;\n  deviceType: IManagedObject;\n  contractId: string;\n  prototype: boolean;\n  productCertificate: string;\n  error?: string;\n  lnsConnectionName: string;\n}\n\nexport interface Contract {\n  id: string;\n  name: string;\n}\n\nexport interface SigfoxDeviceFormly extends SigfoxDevice {\n  contract: Contract;\n  connection: {\n    name: string;\n    description: string;\n    baseUrl: string;\n    parentGroupId: string;\n    username: string;\n    password: string;\n  };\n}\n\nexport const PRODUCT_EXPERIENCE_SIGFOX_REGISTRATION = {\n  EVENT: 'deviceRegistration',\n  COMPONENT: 'sigfox-registration',\n  RESULT: { SUCCESS: 'registrationSuccess', FAILURE: 'registrationFailure' }\n} as const;\n","import { Injectable } from '@angular/core';\nimport {\n  FetchClient,\n  IFetchOptions,\n  IManagedObject,\n  InventoryService,\n  IResult,\n  IResultList,\n  ITenantOption,\n  TenantOptionsService\n} from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { AppStateService } from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { SigfoxDevice } from './sigfox-device-registration.model';\n\nexport enum SigfoxErrorName {\n  NoDeviceProtocolsError = 'NoDeviceProtocolsError',\n  NoConnectivitySettingsError = 'NoConnectivitySettingsError',\n  ConnectivitySettingsError = 'ConnectivitySettingsError',\n  ContractError = 'ContractError',\n  NoContractsError = 'NoContractsError',\n  RegistrationError = 'RegistrationError',\n  DeviceProtocolsFetchError = 'DeviceProtocolsFetchError'\n}\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class SigfoxProviderService {\n  private readonly baseUrl: string = '/service/sigfox-agent/';\n  private readonly registrationUrl: string = `${this.baseUrl}newDeviceRequest`;\n  private readonly contractsUrl: string = `${this.baseUrl}contract`;\n  private readonly header: any = { 'Content-Type': 'application/json' };\n\n  constructor(\n    private client: FetchClient,\n    private inventoryService: InventoryService,\n    private tenantOptions: TenantOptionsService,\n    private translateService: TranslateService,\n    private appState: AppStateService\n  ) {}\n  async getConnections() {\n    const options: IFetchOptions = {\n      method: 'GET',\n      headers: this.header\n    };\n    const res = await this.client.fetch(`${this.baseUrl}lns-connection`, options);\n    const data = await res.json();\n\n    if (res.status === 200) {\n      if (data.length === 0) {\n        await this.throwNoConnectivitySettingsError();\n      }\n    } else {\n      await this.throwConnectivitySettingsError(data);\n    }\n    return { res, data };\n  }\n\n  /**\n   * Gets contracts from Sigfox platform.\n   * @param connectionName The name of connection for which contracts will be retrieved\n   * @returns The result list with contract, or throws an error with exception.\n   */\n  async getContracts(connectionName: string): Promise<IResultList<any>> {\n    const options: IFetchOptions = {\n      method: 'GET',\n      headers: this.header,\n      params: {\n        sigfoxConnectionName: connectionName\n      }\n    };\n    const res = await this.client.fetch(this.contractsUrl, options);\n\n    const data = await res.json();\n\n    if (res.status === 200) {\n      if (data.length === 0) {\n        this.throwNoContractsError();\n      }\n    } else {\n      this.throwContractError(data);\n    }\n    return { res, data };\n  }\n\n  async createDevice(device: SigfoxDevice): Promise<IResult<SigfoxDevice>> {\n    const options: IFetchOptions = {\n      method: 'POST',\n      headers: this.header,\n      body: JSON.stringify(device)\n    };\n    const res = await this.client.fetch(this.registrationUrl, options);\n    const data = await res.json();\n\n    if (res.status !== 201) {\n      this.throwRegistrationError(data);\n    }\n    return { res, data };\n  }\n\n  async getAvailableProtocols(\n    filter: object = { withTotalPages: true }\n  ): Promise<IResultList<IManagedObject>> {\n    const query = {\n      __filter: {\n        __and: [\n          { __has: 'c8y_IsDeviceType' },\n          {\n            type: { __in: ['c8y_SigfoxDeviceType', 'c8y_LpwanDeviceType'] }\n          }\n        ]\n      },\n      __orderby: [{ name: 1 }]\n    };\n    const deviceProtocolsList = await this.inventoryService.listQuery(query, filter);\n    const { res, data } = deviceProtocolsList;\n\n    if (res.status === 200) {\n      if (data.length === 0) {\n        this.throwNoDeviceProtocolsError();\n      }\n    } else {\n      this.throwDeviceProtocolsFetchError();\n    }\n    return deviceProtocolsList;\n  }\n\n  async hasConnectivitySettings(): Promise<boolean> {\n    const option: ITenantOption = {\n      category: 'sigfox-agent',\n      key: 'provider.token'\n    };\n    try {\n      await this.tenantOptions.detail(option);\n      return true;\n    } catch (e) {\n      await this.throwNoConnectivitySettingsError();\n    }\n  }\n\n  private async throwNoConnectivitySettingsError() {\n    const error = new Error();\n    error.name = SigfoxErrorName.NoConnectivitySettingsError;\n    const hasAdminRight = await this.appState.isApplicationAvailable('administration');\n    if (hasAdminRight) {\n      error.message = this.translateService.instant(\n        gettext(\n          `Connectivity settings are not configured. Configure them in the Administration application under <a href=\"{{ link }}\">Settings</a>.`\n        ),\n        {\n          link: '/apps/administration/index.html#/connectivitySettings/multiple_lns_connectors_sigfox'\n        }\n      );\n    } else {\n      error.message = gettext(\n        'Connectivity settings are not configured. Contact the administrator.'\n      );\n    }\n\n    throw error;\n  }\n\n  private throwConnectivitySettingsError(data: { message: string }) {\n    const error = new Error();\n    error.name = SigfoxErrorName.ConnectivitySettingsError;\n    error.message = data.message;\n    throw error;\n  }\n  private throwRegistrationError(data: { message: string }) {\n    const error = new Error();\n    error.name = SigfoxErrorName.RegistrationError;\n    error.message = data.message;\n    throw error;\n  }\n\n  private throwDeviceProtocolsFetchError() {\n    const error = new Error();\n    error.name = SigfoxErrorName.DeviceProtocolsFetchError;\n    error.message = gettext('Could not load device protocols.');\n    throw error;\n  }\n\n  private throwNoDeviceProtocolsError() {\n    const error = new Error();\n    error.name = SigfoxErrorName.NoDeviceProtocolsError;\n    error.message = this.translateService.instant(\n      gettext(\n        `No device protocols configured. Create a Sigfox device protocol in <a href=\"{{ link }}\">Device protocols</a>.`\n      ),\n      {\n        link: '/apps/devicemanagement/#/deviceprotocols'\n      }\n    );\n    throw error;\n  }\n\n  private throwContractError(data: { message: string }) {\n    const error = new Error();\n    error.name = SigfoxErrorName.ContractError;\n    error.message = data.message;\n    throw error;\n  }\n\n  private throwNoContractsError() {\n    const error = new Error();\n    error.name = SigfoxErrorName.NoContractsError;\n    error.message = gettext(\n      'No contracts found. New contracts must be created via the Sigfox platform.'\n    );\n    throw error;\n  }\n}\n","import { CdkStep } from '@angular/cdk/stepper';\nimport { Component } from '@angular/core';\nimport { AbstractControl, FormGroup } from '@angular/forms';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n  C8yStepper,\n  GainsightService,\n  ModalComponent,\n  IconDirective,\n  LoadingComponent,\n  C8yStepperButtons,\n  OperationResultComponent,\n  C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { FormlyFieldConfig, FormlyModule } from '@ngx-formly/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { cloneDeep, uniq } from 'lodash-es';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { BehaviorSubject, defer, forkJoin, from, of, Subject, throwError } from 'rxjs';\nimport { catchError, map, mergeMap, shareReplay, switchMap, takeUntil } from 'rxjs/operators';\nimport {\n  SigfoxDevice,\n  SigfoxDeviceFormly,\n  PRODUCT_EXPERIENCE_SIGFOX_REGISTRATION\n} from './sigfox-device-registration.model';\nimport { SigfoxErrorName, SigfoxProviderService } from './sigfox-provider.service';\nimport { NgIf, NgFor, NgClass, AsyncPipe } from '@angular/common';\n\ntype SigfoxState =\n  | 'loadPending'\n  | 'loadSuccess'\n  | 'loadError'\n  | 'registrationPending'\n  | 'registrationSuccess'\n  | 'registrationError';\n\n@Component({\n  selector: 'c8y-sigfox-device-registration',\n  templateUrl: 'sigfox-device-registration.component.html',\n  imports: [\n    ModalComponent,\n    IconDirective,\n    NgIf,\n    LoadingComponent,\n    C8yStepper,\n    CdkStep,\n    FormlyModule,\n    C8yStepperButtons,\n    OperationResultComponent,\n    NgFor,\n    NgClass,\n    C8yTranslatePipe,\n    AsyncPipe\n  ]\n})\nexport class SigfoxDeviceRegistrationComponent {\n  stepper: C8yStepper;\n  readonly PAGING: object = {\n    withTotalPages: true,\n    pageSize: 10\n  };\n\n  form = new FormGroup({});\n  model: SigfoxDeviceFormly = {} as any;\n  protocols$ = this.getProtocols$();\n  connections$ = this.getConnections$();\n  unsubscribe$: Subject<void> = new Subject();\n\n  load$ = this.connections$.pipe(\n    catchError((error: Error) => of(error)),\n    switchMap(connections => {\n      if (\n        connections instanceof Error &&\n        connections.name === SigfoxErrorName.NoConnectivitySettingsError\n      ) {\n        return of([connections]);\n      }\n      return forkJoin([\n        of(connections),\n        this.protocols$.pipe(catchError((error: Error) => of(error)))\n      ]);\n    }),\n    map(results => {\n      return results.filter(result => {\n        return result instanceof Error;\n      });\n    }),\n    switchMap(errors => {\n      return errors.length === 0 ? of([]) : throwError(errors);\n    })\n  );\n\n  fields: FormlyFieldConfig[] = [\n    {\n      key: 'id',\n      type: 'string',\n      templateOptions: {\n        placeholder: 'FED987',\n        label: gettext('ID'),\n        required: true,\n        pattern: '(0x){0,1}[0-9A-F]+(h){0,1}'\n      },\n      validation: {\n        messages: {\n          pattern: gettext('Must be a valid hexadecimal number.')\n        }\n      }\n    },\n    {\n      key: 'pac',\n      type: 'string',\n      templateOptions: {\n        placeholder: 'FEDCBA9876543210',\n        label: gettext('PAC'),\n        required: true,\n        pattern: '^([a-fA-F0-9]{16})$'\n      },\n      validation: {\n        messages: {\n          pattern: gettext('Must be a valid 16 digit hexadecimal number.')\n        }\n      }\n    },\n    {\n      key: 'connection',\n      type: 'typeahead',\n      templateOptions: {\n        label: gettext('Connection'),\n        required: true,\n        c8yForOptions: this.connections$,\n        displayProperty: 'name',\n        valueProperties: ['name']\n      }\n    },\n    {\n      key: 'contract',\n      type: 'typeahead',\n      templateOptions: {\n        label: gettext('Contract'),\n        required: true,\n        placeholder: 'Free contract_25',\n        displayProperty: 'name',\n        valueProperties: ['id'],\n        description: gettext('Only active contracts with free slots are displayed.')\n      },\n      hooks: {\n        onInit: field => {\n          const connectionControl = field.form.get('connection');\n          connectionControl.valueChanges\n            .pipe(\n              takeUntil(this.unsubscribe$),\n              mergeMap(({ name }) => this.getContracts$(name))\n            )\n            .subscribe(\n              profiles => {\n                field.templateOptions.c8yForOptions = of(profiles);\n                field.formControl.setValue(null);\n              },\n              error => {\n                field.form.get('contract').setErrors({ contract: true });\n                field.validators.contract.message = error.message;\n              }\n            );\n        }\n      },\n      validators: {\n        contract: {\n          expression: (control: AbstractControl) => {\n            return control.status === 'VALID';\n          },\n          message: () => ''\n        }\n      }\n    },\n    {\n      key: 'deviceType',\n      type: 'typeahead',\n      templateOptions: {\n        label: gettext('Device protocol'),\n        required: true,\n        c8yForOptions: this.protocols$,\n        displayProperty: 'name',\n        valueProperties: ['id', 'name']\n      }\n    },\n    {\n      key: 'productCertificate',\n      type: 'string',\n      templateOptions: {\n        placeholder: 'P_001F_EDCB_01',\n        label: gettext('Product certificate key'),\n        pattern: 'P_[0-9A-F]{4}_[0-9A-F]{4}_[0-9A-F]{2}',\n        description: gettext(\n          'If no product certificate key is specified, the device is considered a prototype.'\n        )\n      },\n      validation: {\n        messages: {\n          pattern: (_error, _field: FormlyFieldConfig) =>\n            this.translateService.instant(\n              gettext('Must be a valid product certificate key, for example, {{ example }}'),\n              { example: 'P_001F_EDCB_01' }\n            )\n        }\n      }\n    }\n  ];\n\n  registrationStepLabels = {\n    next: gettext('Register')\n  };\n  finalStepLabels = {\n    back: gettext('Close')\n  };\n\n  state: SigfoxState = 'loadPending';\n  errors$ = new BehaviorSubject<Error[]>([]);\n  errorMessages$ = this.errors$.pipe(\n    map(errors => errors.map(error => error.message)),\n    map(messages => uniq(messages))\n  );\n  constructor(\n    public bsModalRef: BsModalRef,\n    private sigfoxService: SigfoxProviderService,\n    private translateService: TranslateService,\n    private gainsightService: GainsightService\n  ) {\n    this.load$.subscribe(\n      () => {\n        this.state = 'loadSuccess';\n      },\n      errors => {\n        this.state = 'loadError';\n        this.errors$.next(errors);\n      }\n    );\n  }\n\n  async create(event: { stepper: C8yStepper; step: CdkStep }) {\n    this.state = 'registrationPending';\n    const sigfoxDevice = this.getSigfoxDeviceToSend();\n    try {\n      await this.sigfoxService.createDevice(sigfoxDevice);\n      this.state = 'registrationSuccess';\n      this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE_SIGFOX_REGISTRATION.EVENT, {\n        result: PRODUCT_EXPERIENCE_SIGFOX_REGISTRATION.RESULT.SUCCESS,\n        component: PRODUCT_EXPERIENCE_SIGFOX_REGISTRATION.COMPONENT\n      });\n    } catch (error) {\n      this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE_SIGFOX_REGISTRATION.EVENT, {\n        result: PRODUCT_EXPERIENCE_SIGFOX_REGISTRATION.RESULT.FAILURE,\n        component: PRODUCT_EXPERIENCE_SIGFOX_REGISTRATION.COMPONENT\n      });\n      this.state = 'registrationError';\n      this.errors$.next([error]);\n    }\n\n    event.stepper.next();\n  }\n\n  getSigfoxDeviceToSend() {\n    const sigfoxDevice: SigfoxDevice = cloneDeep(this.model);\n    sigfoxDevice.lnsConnectionName = this.model.connection.name;\n    sigfoxDevice.contractId = this.model.contract.id;\n    sigfoxDevice.prototype = !sigfoxDevice.productCertificate;\n    delete (sigfoxDevice as any).contract;\n    delete (sigfoxDevice as any).connection;\n    return sigfoxDevice;\n  }\n\n  getContracts$(name) {\n    return defer(() => from(this.sigfoxService.getContracts(name))).pipe(shareReplay(1));\n  }\n\n  getProtocols$() {\n    return defer(() => from(this.sigfoxService.getAvailableProtocols())).pipe(shareReplay(1));\n  }\n\n  getConnections$() {\n    return defer(() => from(this.sigfoxService.getConnections())).pipe(shareReplay(1));\n  }\n\n  ngOnDestroy(): void {\n    this.unsubscribe$.next();\n    this.unsubscribe$.complete();\n  }\n}\n","<c8y-modal\n  [title]=\"'Sigfox registration' | translate\"\n  [headerClasses]=\"'dialog-header'\"\n  [customFooter]=\"true\"\n>\n  <ng-container c8y-modal-title>\n    <span [c8yIcon]=\"'c8y-device-connect'\"></span>\n  </ng-container>\n  <ng-container *ngIf=\"state === 'loadPending'; else registrationForm\">\n    <div class=\"p-16 text-center\">\n      <c8y-loading></c8y-loading>\n    </div>\n  </ng-container>\n\n  <ng-template #registrationForm>\n    <c8y-stepper\n      [hideStepProgress]=\"true\"\n      linear\n      c8y-modal-body\n      *ngIf=\"(errorMessages$ | async).length === 0; else errorMessagesPresent\"\n    >\n      <cdk-step [stepControl]=\"form\">\n        <div class=\"p-b-16\">\n          <p class=\"modal-subtitle sticky-top\">\n            {{ 'Register a single Sigfox device' | translate }}\n          </p>\n          <formly-form\n            class=\"d-block p-l-24 p-r-24 p-t-16\"\n            [form]=\"form\"\n            [fields]=\"fields\"\n            [model]=\"model\"\n          ></formly-form>\n        </div>\n        <c8y-stepper-buttons\n          class=\"modal-footer d-block sticky-bottom separator-top bg-component\"\n          [labels]=\"registrationStepLabels\"\n          (onNext)=\"create($event)\"\n          (onCancel)=\"bsModalRef.hide()\"\n          [showButtons]=\"{ cancel: true, next: true }\"\n          [pending]=\"state === 'registrationPending'\"\n          [disabled]=\"!form.valid\"\n        ></c8y-stepper-buttons>\n      </cdk-step>\n      <cdk-step state=\"final\">\n        <div\n          class=\"p-16 text-center\"\n          *ngIf=\"state === 'registrationPending'\"\n        >\n          <c8y-loading></c8y-loading>\n        </div>\n        <div class=\"m-24\">\n          <c8y-operation-result\n            class=\"lead m-b-0\"\n            type=\"success\"\n            *ngIf=\"state === 'registrationSuccess'\"\n            text=\"{{ 'Device registered' | translate }}\"\n            [size]=\"84\"\n            [vertical]=\"true\"\n          ></c8y-operation-result>\n        </div>\n\n        <c8y-stepper-buttons\n          class=\"sticky-bottom d-block p-t-16 p-b-16 separator-top bg-component\"\n          (onCustom)=\"bsModalRef.hide()\"\n          [showButtons]=\"{ custom: true }\"\n          [labels]=\"finalStepLabels\"\n        ></c8y-stepper-buttons>\n      </cdk-step>\n    </c8y-stepper>\n  </ng-template>\n\n  <ng-template #errorMessagesPresent>\n    <div class=\"m-24\">\n      <c8y-operation-result\n        class=\"lead\"\n        type=\"error\"\n        *ngIf=\"state === 'registrationError'\"\n        text=\"{{ 'Failed to register' | translate }}\"\n        [size]=\"84\"\n        [vertical]=\"true\"\n      ></c8y-operation-result>\n      <div\n        class=\"m-b-8\"\n        *ngFor=\"let msg of errorMessages$ | async\"\n        data-cy=\"sigfox-device-registration.component--registration-error\"\n        [ngClass]=\"{\n          'text-center': state === 'registrationError',\n          'alert alert-danger': state === 'loadError'\n        }\"\n      >\n        <span [innerHTML]=\"msg | translate\"></span>\n      </div>\n    </div>\n\n    <div class=\"modal-footer\">\n      <button\n        class=\"btn btn-default\"\n        title=\"{{ 'Close' | translate }}\"\n        type=\"button\"\n        (click)=\"bsModalRef.hide()\"\n      >\n        {{ 'Close' | translate }}\n      </button>\n    </div>\n  </ng-template>\n</c8y-modal>\n","import { Component } from '@angular/core';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { SigfoxDeviceRegistrationComponent } from './sigfox-device-registration.component';\nimport { IconDirective, C8yTranslatePipe } from '@c8y/ngx-components';\n\n@Component({\n  selector: 'c8y-sigfox-registration',\n  templateUrl: 'sigfox-device-registration-button.component.html',\n  imports: [IconDirective, C8yTranslatePipe]\n})\nexport class SigfoxDeviceRegistrationButtonComponent {\n  constructor(private modalService: BsModalService) {}\n\n  open() {\n    this.modalService.show(SigfoxDeviceRegistrationComponent, {\n      class: 'modal-sm',\n      ariaDescribedby: 'modal-body',\n      ariaLabelledBy: 'modal-title',\n      ignoreBackdropClick: true\n    });\n  }\n}\n","<button title=\"{{ 'Sigfox' | translate }}\" type=\"button\" (click)=\"open()\">\n  <i c8yIcon=\"c8y-device-connect\"></i>\n  {{ 'Sigfox' | translate }}\n</button>\n","import { Injectable } from '@angular/core';\nimport { TenantUiService } from '@c8y/ngx-components';\nimport { SigfoxDeviceRegistrationButtonComponent } from './sigfox-device-registration-button.component';\nimport { RegisterDeviceFactory, RegisterDeviceItem } from '@c8y/ngx-components/register-device';\n@Injectable({\n  providedIn: 'root'\n})\nexport class SigfoxDeviceRegistrationFactory implements RegisterDeviceFactory {\n  constructor(private tenantService: TenantUiService) {}\n\n  get() {\n    const items: RegisterDeviceItem[] = [];\n    if (this.tenantService.isMicroserviceSubscribedInCurrentTenant('sigfox-agent')) {\n      items.push({\n        template: SigfoxDeviceRegistrationButtonComponent,\n        priority: 98,\n        category: 'single'\n      } as RegisterDeviceItem);\n    }\n    return items;\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule, CoreModule } from '@c8y/ngx-components';\nimport { hookDeviceRegistration } from '@c8y/ngx-components/register-device';\nimport { SigfoxDeviceRegistrationButtonComponent } from './sigfox-device-registration-button.component';\nimport { SigfoxDeviceRegistrationComponent } from './sigfox-device-registration.component';\nimport { SigfoxDeviceRegistrationFactory } from './sigfox-device-registration.factory';\nimport { SigfoxProviderService } from './sigfox-provider.service';\n\n@NgModule({\n  imports: [\n    CoreModule,\n    CommonModule,\n    SigfoxDeviceRegistrationButtonComponent,\n    SigfoxDeviceRegistrationComponent\n  ],\n  providers: [hookDeviceRegistration(SigfoxDeviceRegistrationFactory), SigfoxProviderService]\n})\nexport class SigfoxDeviceRegistrationModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2.SigfoxProviderService","i3","i4"],"mappings":"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"}