{"version":3,"file":"iotize-ionic.mjs","sources":["../../../../projects/iotize-ionic/src/injection-types.ts","../../../../projects/iotize-ionic/src/lib/config-version.ts","../../../../projects/iotize-ionic/src/lib/extensions/device-client-extensions.ts","../../../../projects/iotize-ionic/src/lib/logger.ts","../../../../projects/iotize-ionic/src/lib/extensions/data-manager/impl.ts","../../../../projects/iotize-ionic/src/lib/nfc/utility.ts","../../../../projects/iotize-ionic/src/lib/protocol-factory.service.ts","../../../../projects/iotize-ionic/src/lib/rx-utility/run-in-zone.ts","../../../../projects/iotize-ionic/src/lib/errors.ts","../../../../projects/iotize-ionic/src/lib/utility.ts","../../../../projects/iotize-ionic/src/lib/current-device.service.ts","../../../../projects/iotize-ionic/src/lib/connected-tap-resolver.ts","../../../../projects/iotize-ionic/src/lib/csv-helper.ts","../../../../projects/iotize-ionic/src/lib/definitions/cloud.ts","../../../../projects/iotize-ionic/src/lib/disconnect-current-tap.guard.ts","../../../../projects/iotize-ionic/src/lib/error-utility.ts","../../../../projects/iotize-ionic/src/lib/execute-tap-action/execute-tap-action.provider.ts","../../../../projects/iotize-ionic/src/lib/extensions/datalogger/data-logger.ts","../../../../projects/iotize-ionic/src/lib/has-current-tap.guard.ts","../../../../projects/iotize-ionic/src/lib/inline-editor/value-or-default.pipe.ts","../../../../projects/iotize-ionic/src/lib/inline-editor/inline-editor.component.ts","../../../../projects/iotize-ionic/src/lib/inline-editor/inline-editor.component.html","../../../../projects/iotize-ionic/src/lib/lib-common/auto-focus.directive.ts","../../../../projects/iotize-ionic/src/lib/lib-common/disable-control.directive.ts","../../../../projects/iotize-ionic/src/lib/lib-common/enum.pipe.ts","../../../../projects/iotize-ionic/src/lib/lib-common/extract-bits.pipe.ts","../../../../projects/iotize-ionic/src/lib/lib-common/remember-value-control.ts","../../../../projects/iotize-ionic/src/lib/lib-common/tap-request.pipe.ts","../../../../projects/iotize-ionic/src/lib/lib-common/trim.pipe.ts","../../../../projects/iotize-ionic/src/lib/lib-common/lib-common.module.ts","../../../../projects/iotize-ionic/src/lib/pending-call-manager.ts","../../../../projects/iotize-ionic/src/lib/tap-value-editor-modal/tap-value-editor-modal.component.ts","../../../../projects/iotize-ionic/src/lib/tap-value-editor-modal/tap-value-editor-modal.component.html","../../../../projects/iotize-ionic/src/lib/tap-value-editor-container/tap-value-editor-container.component.ts","../../../../projects/iotize-ionic/src/lib/tap-value-editor-container/tap-value-editor-container.component.html","../../../../projects/iotize-ionic/src/lib/tap-value-editor-container/tap-value-editor-container.module.ts","../../../../projects/iotize-ionic/src/lib/inline-editor/inline-editor.module.ts","../../../../projects/iotize-ionic/src/lib/lib-common/global-events-service.ts","../../../../projects/iotize-ionic/src/lib/mock-variable.ts","../../../../projects/iotize-ionic/src/lib/multi-requests/multi-requests-utility.ts","../../../../projects/iotize-ionic/src/lib/nfc/index.ts","../../../../projects/iotize-ionic/src/lib/tap-scanner/tap-scanner-nfc/nfc-service.service.ts","../../../../projects/iotize-ionic/src/lib/tap-scanner/tap-scanner-nfc/tap-scanner-nfc.service.ts","../../../../projects/iotize-ionic/src/lib/nfc-re-tap.service.ts","../../../../projects/iotize-ionic/src/lib/tap-info/keys.ts","../../../../projects/iotize-ionic/src/lib/tap-info/constants.ts","../../../../projects/iotize-ionic/src/lib/tap-info/tap-info-config.service.ts","../../../../projects/iotize-ionic/src/lib/tap-info/utility.ts","../../../../projects/iotize-ionic/src/lib/tap-info/tap-info-cache.service.ts","../../../../projects/iotize-ionic/src/lib/tap-administration.service.ts","../../../../projects/iotize-ionic/src/lib/tap-info/uniq-array.ts","../../../../projects/iotize-ionic/src/lib/tap-info/uniq-key-queue.ts","../../../../projects/iotize-ionic/src/lib/tap-info/tap-info-request.service.ts","../../../../projects/iotize-ionic/src/lib/tap-connect/tap-connection-store/tap-connection-store.service.ts","../../../../projects/iotize-ionic/src/lib/tap-connect/tap-connection-store/tap-connection-store-item/tap-connection-store-item.component.ts","../../../../projects/iotize-ionic/src/lib/tap-connect/tap-connection-store/tap-connection-store-item/tap-connection-store-item.component.html","../../../../projects/iotize-ionic/src/lib/tap-connect/tap-connection-store/tap-connection-store-list/tap-connection-store-list.component.ts","../../../../projects/iotize-ionic/src/lib/tap-connect/tap-connection-store/tap-connection-store-list/tap-connection-store-list.component.html","../../../../projects/iotize-ionic/src/lib/tap-connect/tap-connection-store/tap-connection-store.module.ts","../../../../projects/iotize-ionic/src/lib/tap-connection.service.ts","../../../../projects/iotize-ionic/src/lib/tap-api-explorer.service.ts","../../../../projects/iotize-ionic/src/lib/tap-info/tap-info-dao.service.ts","../../../../projects/iotize-ionic/src/lib/tap-scanner/tap-scanner-ble/manufacturer-data-filter.ts","../../../../projects/iotize-ionic/src/lib/tap-scanner/tap-scanner-ble/ble-service.service.ts","../../../../projects/iotize-ionic/src/lib/tap-scanner/tap-scanner-common/ble-rssi-signal/ble-rssi-signal.component.ts","../../../../projects/iotize-ionic/src/lib/tap-scanner/tap-scanner-common/ble-rssi-signal/ble-rssi-signal.component.html","../../../../projects/iotize-ionic/src/lib/tap-scanner/tap-scanner-common/rssi-to-signal-strenght.pipe.ts","../../../../projects/iotize-ionic/src/lib/tap-scanner/tap-scanner-ble/tap-scan-results/tap-scan-results.component.ts","../../../../projects/iotize-ionic/src/lib/tap-scanner/tap-scanner-ble/tap-scan-results/tap-scan-results.component.html","../../../../projects/iotize-ionic/src/lib/tap-scanner/tap-scanner-ble/tap-scanner-ble.component.ts","../../../../projects/iotize-ionic/src/lib/tap-scanner/tap-scanner-ble/tap-scanner-ble.component.html","../../../../projects/iotize-ionic/src/lib/tap-scanner/tap-scanner-common/tap-scanner-common.module.ts","../../../../projects/iotize-ionic/src/lib/tap-scanner/tap-scanner-ble/tap-scanner-ble.module.ts","../../../../projects/iotize-ionic/src/lib/tap-scanner/tap-scanner-web-bluetooth/tap-scanner-web-bluetooth.component.ts","../../../../projects/iotize-ionic/src/lib/tap-scanner/tap-scanner-web-bluetooth/tap-scanner-web-bluetooth.component.html","../../../../projects/iotize-ionic/src/lib/tap-scanner/tap-scanner-web-bluetooth/tap-scanner-web-bluetooth.module.ts","../../../../projects/iotize-ionic/src/lib/tap-nfc-initialization.resolver.ts","../../../../projects/iotize-ionic/src/lib/tap-scanner/tap-scanner-wifi/tap-scanner-wifi-item/tap-scanner-wifi-item.component.ts","../../../../projects/iotize-ionic/src/lib/tap-scanner/tap-scanner-wifi/tap-scanner-wifi-item/tap-scanner-wifi-item.component.html","../../../../projects/iotize-ionic/src/lib/tap-scanner/tap-scanner-wifi/tap-scanner-wifi.module.ts","../../../../projects/iotize-ionic/src/lib/utility/protocol-meta-param-converter.ts","../../../../projects/iotize-ionic/src/lib/tap-selected.guard.ts","../../../../projects/iotize-ionic/src/lib/tap-target-connect.service.ts","../../../../projects/iotize-ionic/src/lib/task-manager/provider.ts","../../../../projects/iotize-ionic/src/lib/task-manager/task-manager.service.ts","../../../../projects/iotize-ionic/src/lib/task-manager/task-manager.module.ts","../../../../projects/iotize-ionic/src/lib/task-manager-ui/task-manager.component.ts","../../../../projects/iotize-ionic/src/lib/task-manager-ui/task-manager.component.html","../../../../projects/iotize-ionic/src/lib/task-manager-ui/task-manager-ui.module.ts","../../../../projects/iotize-ionic/src/lib/config.ts","../../../../projects/iotize-ionic/src/public-api.ts","../../../../projects/iotize-ionic/src/iotize-ionic.ts"],"sourcesContent":["export const TAP_BLE_SCANNER = 'TAP_BLE_SCANNER';\nexport const TAP_WIFI_SCANNER = 'TAP_WIFI_SCANNER';\nexport const TAP_NETWORK_SCANNER = 'TAP_NETWORK_SCANNER';\n","export const CONFIGURATION_MODE_VERSION = '255.255.65535';\nexport const FACTORY_RESET_MODE_VERSION = '0.0.0';\n","import { AppPathType, TapResponse, TapVersion } from '@iotize/tap';\nimport { InterfaceService } from '@iotize/tap/service/impl/interface';\nimport { TapnpassService } from '@iotize/tap/service/impl/tapnpass';\nimport { TargetService } from '@iotize/tap/service/impl/target';\n\ndeclare module '@iotize/tap/service/impl/tapnpass/lib/generated/service' {\n  export interface TapnpassService {\n    getAdpVersion(): Promise<TapVersion>;\n  }\n}\nexport async function adpServiceGetAdpVersion(\n  this: TapnpassService\n): Promise<TapVersion> {\n  const response: TapResponse<any> = await this.getStatus();\n  response.successful();\n  const data = await response.rawBody();\n  const version = data.slice(2, 5);\n  return {\n    major: version[0],\n    minor: version[1],\n    patch: version[2],\n  };\n}\n\nTapnpassService.prototype.getAdpVersion = adpServiceGetAdpVersion;\n\ndeclare module '@iotize/tap/service/impl/interface/lib/generated/service' {\n  export interface InterfaceService {\n    getAppPathResolved(): Promise<TapResponse<string>>;\n\n    getConfigPath(): Promise<TapResponse<string>>;\n  }\n}\n\n// export async function interfaceServiceGetAppType(this: InterfaceService): Promise<TapVersion>{\n//     let response: TapResponse<any> = await this.\n// }\n\n// InterfaceService.prototype.getAppType = interfaceServiceGetAppType;\n\nexport async function interfaceServiceGetAppPathResolved(\n  this: InterfaceService\n): Promise<TapResponse<string>> {\n  const response: TapResponse<string> = (await this.getAppPath()) as any;\n  if (response.isSuccessful()) {\n    let value = response.body();\n    if (value.length >= 3) {\n      const start = value.substring(0, 3);\n      const valueWithoutPrefix = value.substring(3);\n      switch (start) {\n        case AppPathType.PRIMER_CLOUD_WEB_APP_URL:\n          value = `https://user.cloud.iotize.com/users/${valueWithoutPrefix}`;\n          break;\n        case AppPathType.URL:\n          value = `${valueWithoutPrefix}`;\n          break;\n        case AppPathType.PRIMER_CLOUD_CONFIG_URL:\n          value = `https://user.cloud.iotize.com/users/${valueWithoutPrefix}`;\n          break;\n      }\n    }\n    response.setBody(value);\n  }\n  return response;\n}\n\nInterfaceService.prototype.getAppPathResolved =\n  interfaceServiceGetAppPathResolved;\n\nexport async function interfaceServiceGetConfigPath(\n  this: InterfaceService\n): Promise<TapResponse<string>> {\n  const response: TapResponse<string> =\n    (await this.getAppPath()) as TapResponse<string>;\n  if (response.isSuccessful()) {\n    let value = response.body();\n    const start = value.substr(0, 2);\n    switch (start) {\n      case '$5':\n        value = `http://user.cloud.iotize.com/users${value.substr(2)}`;\n        break;\n      default:\n        if (\n          !value.endsWith('.json') &&\n          !value.endsWith('.xml') &&\n          !value.endsWith('.cloud')\n        ) {\n          value = '';\n        }\n    }\n    response.setBody(value);\n  }\n  return response;\n}\n\nInterfaceService.prototype.getConfigPath = interfaceServiceGetConfigPath;\n\ndeclare module '@iotize/tap/service/impl/target/lib/generated/service' {\n  export interface TargetService {\n    getAppType(): Promise<TapResponse<string>>;\n  }\n}\n\n// export async function targetServiceGetAppType(this: TargetService): Promise<TapResponse<string>> {\n//     let response = await this.getProtocol();\n//     let protocol = response.body();\n//     let newResponse: TapResponse<string> = TapResponse.SUCCESS();\n//     switch (protocol) {\n//         case TargetProtocol.SERIAL_VIA_TAPNPASS:\n//             newResponse.setBody(\"tapnpass\");\n//         default:\n//             newResponse.setBody(\"tapnlink\");\n//     }\n//     return newResponse;\n// }\n\nexport async function targetServiceGetAppType(\n  this: TargetService\n): Promise<TapResponse<string>> {\n  const response = await this.getSubProtocol();\n  const newResponse: TapResponse<string> = TapResponse.SUCCESS();\n  if (response.isSuccessful()) {\n    newResponse.setBody('tapnpass');\n  } else {\n    newResponse.setBody('tapnlink');\n  }\n  return newResponse;\n}\n\nTargetService.prototype.getAppType = targetServiceGetAppType;\n\n// export async function isConnected(this: TargetService): Promise<TapResponse<boolean>> {\n//     return this._call({\n//         path: \"/target/connect\",\n//         methodType: \"get\",\n//         responseBodyDecoder: \"boolean\"\n//     })\n// }\n\n// TargetService.prototype.isConnected = isConnected;\n","import { createDebugger } from '@iotize/common/debug';\r\n\r\nexport const debug = createDebugger('@iotize/ionic/core');\r\n","import { Tap } from '@iotize/tap';\nimport { TlvBundleConverter } from '@iotize/tap/client/impl';\nimport {\n  BundleConfig,\n  TapConfiguratorConfig,\n} from '@iotize/tap/config/schema/v1';\nimport { MonitorEngine } from '@iotize/tap/data';\nimport { DataLogger } from '@iotize/tap/data-log';\nimport '@iotize/tap/ext/data';\nimport { Observable } from 'rxjs';\nimport { debug } from '../../logger';\nimport { SwitchableStreamMonitor as SwitchableStreamController } from '../switchable-stream-monitor';\nimport {\n  DataSourceController,\n  DataSourceType,\n  ItemHolder,\n} from './definitions';\n\nconst TAG = 'DataManager';\n\nexport class DataHolder {\n  constructor(public items: ItemHolder[] = []) {}\n\n  item(id: string): ItemHolder {\n    const item = this.items.find((v) => v.id == id);\n    if (!item) {\n      throw new Error(`Item with id \"${id}\" does not exist`);\n    }\n    return item;\n  }\n\n  add(item: ItemHolder, replace: boolean) {\n    if (replace || this.items.find((v) => v.id == item.id) == undefined) {\n      debug(TAG, 'Added item: ', item);\n      this.items.push(item);\n    }\n    return this.item(item.id);\n  }\n}\n\n// export function newBundleConfigToOldBundleConfig(bundlesConfig: BundleConfig[] | undefined): BundleConfigPredefined[] {\n//     if (!bundlesConfig) {\n//         return [];\n//     }\n//     return bundlesConfig.map((bundleConfig: BundleSchemaConfig) => {\n//         const predefinedConfig: BundleConfigPredefined = {\n//             id: bundleConfig.id,\n//             converter: undefined,\n//             name: bundleConfig.name || `Bundle ${bundleConfig.id}`,\n//             variables: (bundleConfig.variables || []).map((variableConfig: MemoryVariableConfig) => {\n//                 const variableType = VariableType[variableConfig.type];\n//                 if (variableType === undefined) {\n//                     throw new Error(`Invalid variable type: ${variableConfig.type}`);\n//                 }\n//                 let converter: BodyConverter<any> | undefined;\n//                 if (variableConfig.converter) {\n//                     converter = variableConfig.converter;\n//                 } else {\n//                     converter = getConverterFromFormat(variableType, variableConfig.length || 1);\n//                 }\n//                 const predifinedVariableConfig: TapVariable.Config = {\n//                     id: variableConfig.id,\n//                     converter: converter,\n//                     length: variableConfig.length,\n//                     name: variableConfig.name || `Variable ${variableConfig.id}`,\n//                     type: variableType,\n//                     unit: variableConfig.unit\n//                 };\n//                 return predifinedVariableConfig;\n//             })\n//         };\n//         return predefinedConfig;\n//     });\n// }\n\nexport class DataManagerIonic<\n  VariableByType extends Record<string, any> = Record<string, any>,\n  VariableKey extends string = string,\n  BundleByType extends Record<string, any> = Record<string, any>,\n  BundleKey extends string = string\n> {\n  constructor(public tap: Tap) {\n    // const allVariables: AbstractVariable<VariableByType[VariableKey]>[] = Object.values(data.variables);\n    // this.tlvConverter = new TlvBundleConverter(allVariables.map((variable: AbstractVariable<any>) => {\n    //     if (!(variable instanceof VariableConfig)) {\n    //         throw new Error(`Variable ${variable.identifier} has no config`);\n    //     }\n    //     return {\n    //         id: variable.config.id,\n    //         name: variable.config.name,\n    //         converter: variable.converter\n    //     };\n    // }));\n    // this.dataStream = this.setupDataStream();\n    // this.dataLogger = DataLogger.fromTap(\n    //     this.tap,\n    //     {\n    //         period: 2000 // TODO change\n    //     }\n    // );\n    // this.tap.variables._variables = data.variables as any;\n    // this.tap.bundles._bundles = data.bundles as any;\n    // Change variable stream;\n    // Object.values(this.data.variables).map((variable: any) => {\n    //     const variableName = variable.config.name;\n    //     // console.log('Replacing monitor for ', variable);\n    //     variable._monitor = ObservableMonitor.fromObservable(\n    //         this.dataStream\n    //             .pipe(\n    //                 filter(data => variableName in data),\n    //                 map(data => data[variableName]),\n    //                 rxTap(value => debug(TAG, `Extracted key ${variableName} from monitoring data`, value))\n    //             )\n    //         ,\n    //         MonitorEngine.State.START\n    //     );\n    // });\n    // // Change bundle stream;\n    // Object.values(this.data.bundles).map((bundle: any) => {\n    //     bundle._monitor = ObservableMonitor.fromObservable(\n    //         this.dataStream\n    //             .pipe(\n    //                 rxTap(value => debug(TAG, `New bundle value `, value))\n    //             )\n    //         ,\n    //         MonitorEngine.State.START\n    //     );\n    //     // TODO factorize and clean\n    //     Object.values(bundle.variables).map((variable: any) => {\n    //         const variableName = variable.config.name;\n    //         // console.log('Replacing monitor for variable in bundle', variable);\n    //         variable._monitor = ObservableMonitor.fromObservable(\n    //             this.dataStream\n    //                 .pipe(\n    //                     filter(data => variableName in data),\n    //                     map(data => data[variableName]),\n    //                     rxTap(value => debug(TAG, `Extracted key ${variableName} from monitoring data`, value))\n    //                 )\n    //             ,\n    //             MonitorEngine.State.START\n    //         );\n    //     });\n    // });\n    // debug(TAG, 'New data manager instance: ', this);\n  }\n\n  // get variables(): Record<VariableKey, AbstractVariable<VariableByType[VariableKey]>> {\n  //     return this.data.variables;\n  // }\n\n  // get bundles(): Record<BundleKey, Bundle<BundleByType[BundleKey]>> {\n  //     return this.data.bundles;\n  // }\n\n  public get sourceController(): DataSourceController {\n    const currentSourceId =\n      this.switchableStreamController.getCurrentSourceId();\n    return this.sourceControllers[currentSourceId];\n  }\n\n  get isMonitoringRunning() {\n    for (const value of Object.values(this.sourceControllers)) {\n      if (value.state == MonitorEngine.State.START) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  switchableStreamController!: SwitchableStreamController<any>;\n  // dataStream: Observable<Record<string, any>>;\n  // tlvConverter: TlvBundleConverter<Record<string, Uint8Array>>;\n  // dataLogger: DataLogger;\n  sourceControllers: Record<string, DataSourceController> = {};\n\n  // public static fromSchemaConfig(tap: Tap, schema: TapConfiguratorConfig): DataManagerIonic {\n  //     const bundles = schema.config.data ? schema.config.data.bundles || [] : [];\n  //     return DataManagerIonic.fromBundleConfig(tap, bundles);\n  // }\n\n  // public static fromBundleConfig(tap: Tap, bundles: BundleConfig[]): DataManagerIonic {\n  //     return new DataManagerIonic(\n  //         tap,\n  //         DataManagerIonic.createDataFromSchemaConfig(tap, bundles)\n  //     );\n  // }\n\n  // public static createDataFromSchemaConfig<VariableByType extends Record<string, any>, VariableKey extends string, BundleByType extends Record<string, any>, BundleKey extends string>(tap: Tap, bundlesConfig: BundleSchemaConfig[]) {\n  //     const predifinedConfig: BundleConfigPredefined[] = newBundleConfigToOldBundleConfig(bundlesConfig);\n\n  //     return DataManagerIonic.createDataFromConfig(tap, predifinedConfig);\n  // }\n\n  // public static createDataFromConfig<VariableByType extends Record<string, any>, VariableKey extends string, BundleByType extends Record<string, any>, BundleKey extends string>(tap: Tap, bundlesConfig: BundleConfigPredefined[]) {\n  //     // let bundleConfigCopy = [...bundlesConfig];\n  //     const bundles: Record<string, any> = {};\n  //     bundlesConfig.forEach((bundleConfig: BundleConfigPredefined) => {\n  //         const bundle: Bundle = Bundle.createFromConfig(bundleConfig, tap.service.bundle, tap.service.variable);\n  //         bundles[bundleConfig.name] = bundle;\n  //     });\n\n  //     const variables: Record<string, any> = {};\n  //     bundlesConfig.forEach((bundle) => {\n  //         bundle.variables.forEach((variableConfig: TapVariable.Config) => {\n  //             debug(TAG, 'Create from variable config: ', variableConfig);\n  //             variables[variableConfig.name || variableConfig.id.toString()] = TapVariable.createFromConfig(variableConfig, tap.service.variable);\n  //         });\n  //     });\n\n  //     return {\n  //         bundles: bundles as Record<BundleKey, Bundle<BundleByType[BundleKey]>>,\n  //         variables: variables as Record<VariableKey, AbstractVariable<VariableByType[VariableKey]>>\n  //     };\n  // }\n\n  listVariables() {\n    return this.tap.data.listVariables();\n  }\n\n  listBundles() {\n    return this.tap.data.listBundles();\n  }\n\n  // public variable<T extends VariableKey>(key: T): AbstractVariable<VariableByType[T]> {\n  //     if (!(key in this.variables)) {\n  //         throw new Error(`Variable with identifier \"${key}\" is not configured`);\n  //     }\n  //     return this.variables[key] as AbstractVariable<VariableByType[T]>;\n  // }\n\n  // public bundle<T extends BundleKey>(key: T): Bundle<BundleByType[T]> {\n  //     if (!(key in this.bundles)) {\n  //         throw new Error(`Bundle with identifier \"${key}\" is not configured`);\n  //     }\n  //     return this.bundles[key] as any;\n  // }\n\n  public stopAll() {\n    debug(TAG, 'Stop monitoring');\n    // for (const ctrlKey in this.sourceControllers) {\n    //     this.sourceControllers[ctrlKey].state = MonitorEngine.State.PAUSE;\n    // }\n    this.tap.data.monitoring.stop();\n  }\n\n  public startAll(period?: number) {\n    // debug(TAG, `[Controller=${this.sourceController.id}] Start monitoring with period ${period || this.sourceController.period.value}`, this.sourceController);\n    // if (period) {\n    //     this.setMonitoringPeriod(period);\n    // }\n    // this.sourceController.state = MonitorEngine.State.START;\n    this.tap.data.monitoring.start();\n  }\n\n  setMonitoringPeriod(period: number) {\n    debug(TAG, 'Changing monitoring period to ', period);\n    this.sourceController.period.next(period);\n  }\n\n  public destroy() {\n    this.stopAll();\n  }\n\n  public refresh() {\n    if (this.sourceController.refresh) {\n      this.sourceController.refresh();\n    }\n  }\n\n  changeDataSource(dataSource: DataSourceType) {\n    switch (dataSource) {\n      case 'datalog':\n        this.useDatalogSource();\n        break;\n      default:\n        this.useLiveSource();\n    }\n  }\n\n  useLiveSource() {\n    this.switchableStreamController.useSource('live');\n  }\n\n  useDatalogSource() {\n    this.switchableStreamController.useSource('datalog');\n  }\n\n  // setupDataStream() {\n  //     const monitoringPeriod = 1000;\n  //     debug(TAG, 'setupDataStream', `Period: ${monitoringPeriod}`);\n  //     this.sourceControllers['datalog'] = {\n  //         state: MonitorEngine.State.STOP,\n  //         period: new BehaviorSubject(monitoringPeriod),\n  //         id: `datalog`\n  //     };\n  //     const datalogStream = ObservableMonitor.createStreamFromCallable(\n  //         () => {\n  //             debug(TAG, 'New data logger call');\n  //             return this.dataLogger.dequeue()\n  //                 .then((info) => {\n  //                     debug(TAG, '===> NEW PACKET DEQUEUE: ', info);\n  //                     return info;\n  //                 })\n  //                 .then(info => info.packet.rawVariables)\n  //                 .then((rawVariables: any) => {\n  //                     for (const id of Object.keys(rawVariables)) {\n  //                         const variable: any = Object.values(this.variables).find((v: any) => v.config.id == id);\n  //                         if (variable) {\n  //                             rawVariables[variable.config.name] = variable.converter.decode(rawVariables[id]);\n  //                             delete rawVariables[id];\n  //                         } else {\n  //                             debug(TAG, 'Variable with id ', id, ' is not registered');\n  //                         }\n  //                     }\n  //                     return rawVariables;\n  //                 })\n  //                 .then((info) => {\n  //                     debug(TAG, '===> NEW PACKET INTERPERT: ', info);\n  //                     return info;\n  //                 });\n  //         },\n  //         {\n  //             dueTime: 0,\n  //             ignoreErrors: true\n  //         },\n  //         this.sourceControllers['datalog']\n  //     );\n\n  //     this.sourceControllers['live'] = {\n  //         state: MonitorEngine.State.STOP,\n  //         period: new BehaviorSubject(monitoringPeriod),\n  //         id: `live`\n  //     };\n  //     const liveProfileStream = ObservableMonitor.createStreamFromCallable<any>(\n  //         async (time: number) => {\n  //             debug(TAG, `New call ${time} to read profile`);\n  //             const profileData = (await this.tap.service.variable.readProfile()).body();\n  //             return this.tlvConverter.decode(profileData);\n  //         },\n  //         {\n  //             dueTime: 0,\n  //             ignoreErrors: true\n  //         },\n  //         this.sourceControllers['live']\n  //     );\n\n  //     this.switchableStreamController = new SwitchableStreamController(\n  //         {\n  //             'live': {\n  //                 id: 'live',\n  //                 stream: liveProfileStream\n  //             },\n  //             'datalog': {\n  //                 id: 'datalog',\n  //                 stream: datalogStream\n  //             }\n  //         },\n  //         'live'\n  //     );\n\n  //     return this.switchableStreamController.asObservable();\n  //     // .pipe(\n  //     //     rxTap(values => {\n  //     //         debug(TAG, '#################', values)\n  //     //     })\n  //     // );\n  // }\n}\n","import { NfcTag } from '@awesome-cordova-plugins/nfc/ngx';\nimport { bufferToHexString } from '@iotize/common/byte-converter';\nimport { isCodeError } from '@iotize/common/error';\nimport { NdefTag, NfcError } from '@iotize/device-com-nfc.cordova';\n\nexport function isSameTag(t1: NdefTag | NfcTag, t2: NdefTag | NfcTag) {\n  return (\n    bufferToHexString(t1.id as any as Uint8Array) ===\n    bufferToHexString(t2.id as any as Uint8Array)\n  );\n}\n\nexport function isNfcTapRequiredError(err: Error) {\n  const cause = getCauseError(err);\n  return (\n    isCodeError(NfcError.ErrorCode.TagLostError, cause) ||\n    isCodeError(NfcError.ErrorCode.NotConnectedError, cause) ||\n    isCodeError(NfcError.ErrorCode.Unknown, cause) ||\n    isCodeError(NfcError.ErrorCode.InternalError, cause)\n  );\n}\n\nexport function getCauseError(err: Error & { cause?: Error }) {\n  let depth = 0;\n  while (err.cause && depth < 5) {\n    err = err.cause as Error;\n    depth++;\n  }\n  return err;\n}\n","import { ComProtocol } from '@iotize/tap/protocol/api';\nimport { ProtocolMeta } from './extensions/protocol-info';\n\nexport type ProtocolFactoryFct<T extends Array<any> = Array<any>> = (\n  meta: any,\n  ...args: T\n) => ComProtocol | Promise<ComProtocol>;\n\n/**\n * Do not use this classe.\n * Used for angular DI\n * Create a class that implemement this one\n */\nexport class ProtocolFactoryService {\n  constructor() {}\n\n  public create(meta: ProtocolMeta): ComProtocol | Promise<ComProtocol> {\n    throw new Error(`Unsupported protocol type \"${meta.type}\"`);\n  }\n\n  public isValid(meta: ProtocolMeta): boolean {\n    return false;\n  }\n}\n","import { NgZone } from '@angular/core';\nimport { Observable, OperatorFunction } from 'rxjs';\n\nexport function runInZone<T>(zone: NgZone): OperatorFunction<T, T> {\n  return (source) => {\n    return new Observable((observer) => {\n      const onNext = (value: T) => zone.run(() => observer.next(value));\n      const onError = (e: any) => zone.run(() => observer.error(e));\n      const onComplete = () => zone.run(() => observer.complete());\n      return source.subscribe(onNext, onError, onComplete);\n    });\n  };\n}\n","export class LibError {\n  public static missingFromField(fieldKey: string) {\n    return new Error(\n      `InternalError: form must have a field with name \"${fieldKey}\"`\n    );\n  }\n\n  public static componentArgumentRequired(component: string, input: string) {\n    return new Error(`InternalError: ${component} requires input \"${input}\"`);\n  }\n\n  public static abstractVariableRequired() {\n    return new Error('InternalError: AbstractVariable cannot be undefined');\n  }\n}\n","import { AbstractControl, FormGroup } from '@angular/forms';\nimport { LibError } from './errors';\nimport { AbstractVariable } from '@iotize/tap/data';\n\nexport function createBleName(appName: string, serialNumber: string) {\n  return appName + '_' + serialNumber.substr(serialNumber.length - 5);\n}\n\nexport function getFormFieldOrError(\n  form: FormGroup,\n  key: string\n): AbstractControl {\n  const field = form.get(key);\n  if (!field) {\n    throw LibError.missingFromField(key);\n  }\n  return field;\n}\n\nexport function getAbstractVariableOrError(\n  variable: AbstractVariable<any> | undefined\n): AbstractVariable<any> {\n  if (!variable) {\n    throw LibError.abstractVariableRequired();\n  } else {\n    return variable;\n  }\n}\n","import { Injectable, NgZone } from '@angular/core';\nimport { NfcTag } from '@awesome-cordova-plugins/nfc/ngx';\nimport { Platform, ToastController } from '@ionic/angular';\nimport { CodeError, isCodeError } from '@iotize/common/error';\nimport { NdefTag, parseTapNdefMessage } from '@iotize/device-com-nfc.cordova';\nimport {\n  HostProtocol,\n  Tap,\n  TapError,\n  TapResponse,\n  TapResponseStatusError,\n} from '@iotize/tap';\nimport {\n  INITIAL_SESSION_STATE,\n  TapAuth,\n  _TAP_EXTENSION_AUTH_,\n} from '@iotize/tap/auth';\nimport {\n  ExecutionContext,\n  RequestHandler,\n  ResultCode,\n  TapClientInterface,\n} from '@iotize/tap/client/api';\nimport { TapClient, TapRequestHelper } from '@iotize/tap/client/impl';\nimport { TapConfiguratorConfig } from '@iotize/tap/config/schema/v1';\nimport { _TAP_EXTENSION_DATA_ } from '@iotize/tap/ext/data';\nimport { _TAP_EXTENSION_DATA_LOG_ } from '@iotize/tap/ext/data-log';\nimport { factoryReset } from '@iotize/tap/ext/factory-reset';\nimport { _TAP_EXTENSION_KEEP_ALIVE_ } from '@iotize/tap/ext/keep-alive';\nimport { KeepAliveEngine } from '@iotize/tap/keep-alive';\nimport {\n  ComProtocol,\n  ConnectionState,\n  ConnectionStateChangeEvent,\n} from '@iotize/tap/protocol/api';\nimport {\n  ProtocolMaxFrameSize,\n  _TAP_SERVICE_ALL_EXTENSIONS_,\n} from '@iotize/tap/service/all';\nimport {\n  BehaviorSubject,\n  Observable,\n  OperatorFunction,\n  Subject,\n  of,\n} from 'rxjs';\nimport {\n  distinctUntilChanged,\n  filter,\n  shareReplay,\n  skip,\n  startWith,\n  switchMap,\n  tap,\n} from 'rxjs/operators';\nimport { OnTapEvent } from './definitions';\nimport './extensions';\nimport { DataManagerIonic } from './extensions/data-manager';\nimport { ProtocolMeta, ProtocolMetaNfc } from './extensions/protocol-info';\nimport { debug } from './logger';\nimport { isSameTag } from './nfc/utility';\nimport { ProtocolFactoryService } from './protocol-factory.service';\nimport { runInZone } from './rx-utility/run-in-zone';\nimport { TapSelectedEvent } from './tap-connect/api';\nimport { createBleName } from './utility';\n\nconst TAG = 'CurrentDeviceService';\n\nexport function LONG_RANGE_PROTOCOL_FILTER(meta: ProtocolMeta) {\n  return meta.type !== 'nfc';\n}\n\nfunction getProtocolOrUndefined(\n  client: TapClientInterface\n): ComProtocol | undefined {\n  try {\n    return client.getCurrentProtocol();\n  } catch (err) {\n    return undefined;\n  }\n}\n\nexport class TapServiceError extends Error {\n  static illegalArgument(msg: string) {\n    throw new Error(`Illegal argument: ${msg}`);\n  }\n  public static illegalStateNoTap() {\n    return new TapServiceError('Illegal state: Tap is not set yet');\n  }\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class CurrentDeviceService {\n  /**\n   * Hack to prevent angular treeshaking from removing loaded extension.\n   */\n  private _loadedTapExtensions = [\n    _TAP_EXTENSION_DATA_,\n    _TAP_EXTENSION_DATA_LOG_,\n    _TAP_EXTENSION_KEEP_ALIVE_,\n    _TAP_SERVICE_ALL_EXTENSIONS_,\n    _TAP_EXTENSION_AUTH_,\n    factoryReset,\n  ];\n\n  private _tapOrUndefined = new BehaviorSubject<undefined | Tap>(undefined);\n\n  private _tap?: Tap;\n\n  /**\n   * Only connection lost event\n   */\n  private _connectionLost$ = new Subject<ConnectionStateChangeEvent>();\n\n  private _sessionState$ = this._tapOrUndefined.pipe(\n    switchMap((tapDeviceOrUndefined) => {\n      if (!tapDeviceOrUndefined) {\n        return of(INITIAL_SESSION_STATE);\n      } else {\n        return tapDeviceOrUndefined.auth.sessionState;\n      }\n    })\n  );\n\n  listeners: OnTapEvent[] = [];\n\n  keepAlivePeriod: number = 10 * 1000;\n\n  public meta: {\n    isClientConfigured?: boolean;\n    // config?: IotizeConfigModel,\n    // tapConfig?: TapConfiguratorConfig\n  } = {};\n\n  /**\n   * @deprecated\n   */\n  private _dataManager?: DataManagerIonic;\n\n  /**\n   * @deprecated\n   */\n  private _tapConfig$ = new BehaviorSubject<TapConfiguratorConfig | undefined>(\n    undefined\n  );\n\n  private _maxFrameSizeCache: Record<string, ProtocolMaxFrameSize> = {};\n\n  /**\n   * Event trigger when currrent Tap changed (set or unset)\n   * If tap is removed, value will be undefined\n   * Immediatly triggered the current value when subscribing\n   */\n  public tapOrUndefinedChangedWithLastValue: Observable<Tap | undefined> =\n    this._tapOrUndefined.pipe(distinctUntilChanged());\n  /**\n   * Event trigger when currrent Tap changed (set or unset)\n   * If tap is removed, value will be undefined\n   */\n  public tapOrUndefinedChanged: Observable<Tap | undefined> =\n    this.tapOrUndefinedChangedWithLastValue.pipe(skip(1));\n  /**\n   * Event trigger when a new Tap is selected (no event when tap is removed)\n   */\n  public tapChanged: Observable<Tap> = this.tapOrUndefinedChanged.pipe(\n    filter<Tap>((tap) => !!tap) as OperatorFunction<Tap | undefined, Tap>\n  );\n  /**\n   * Event trigger when a new Tap is selected (no event when tap is removed)\n   * Immediatly triggered the current value when subscribing\n   */\n  public tapChangedWithLastValue: Observable<Tap> =\n    this.tapOrUndefinedChangedWithLastValue.pipe(\n      filter<Tap>((tap) => !!tap) as OperatorFunction<Tap | undefined, Tap>\n    );\n  /**\n   * Event triggered when tap is removed\n   */\n  public tapRemoved = new Subject<Tap>();\n\n  private _protocolMeta = new BehaviorSubject<ProtocolMeta | undefined>(\n    undefined\n  );\n  private _availableProtocols = new BehaviorSubject<ProtocolMeta[]>([]);\n  _isManualDisconnection = false;\n\n  private _sessionStateSnapshot: TapAuth.SessionState = INITIAL_SESSION_STATE;\n\n  get sessionStateSnapshot() {\n    return this._sessionStateSnapshot;\n  }\n\n  get sessionState(): Observable<TapAuth.SessionState> {\n    return this._sessionState$;\n  }\n\n  public get protocolMeta$(): Observable<ProtocolMeta | undefined> {\n    return this._protocolMeta.asObservable();\n  }\n\n  public get availableProtocols$(): Observable<ProtocolMeta[]> {\n    return this._availableProtocols.asObservable();\n  }\n\n  public get protocolMeta(): ProtocolMeta | undefined {\n    return this._protocolMeta.value;\n  }\n\n  public set protocolMeta(meta: ProtocolMeta | undefined) {\n    if (meta) {\n      this.addProtocolMeta(meta);\n    }\n    debug(TAG, 'setting protocol meta', meta);\n    this._protocolMeta.next(meta);\n  }\n\n  public get connectionLost(): Observable<any> {\n    return this._connectionLost$.asObservable();\n  }\n\n  public get availableProtocols(): ProtocolMeta[] {\n    return this._availableProtocols.value;\n  }\n\n  public get tap(): Tap {\n    if (!this._tap) {\n      throw new Error('Connect to a device first');\n      // throw TapServiceError.illegalStateNoTap();\n    }\n    return this._tap;\n  }\n\n  public get tapOrUndefined(): Tap | undefined {\n    return this._tap;\n  }\n\n  public get hasTap(): boolean {\n    return this._tap !== undefined;\n  }\n\n  public set tapConfig(schema: TapConfiguratorConfig | undefined) {\n    debug(TAG, 'Set Tap config', schema);\n    this.dataManager = new DataManagerIonic(this.tap);\n    this._tapConfig$.next(schema);\n\n    if (schema) {\n      if (schema.config?.data) {\n        // this.tap.data.clear();\n        this.tap.data.configureWithDataConfig(schema.config.data);\n        /*\n        this.tap.data.values.subscribe(v => {\n\n        })\n        this.tap.data.monitoring.asSubject()\n        .subscribe(state => {\n    \n        })\n        */\n      } else {\n        this.tap.data.clear();\n      }\n      //\n      // this.dataLogger.converter = new DataLogPacketConverter(\n      //   newBundleConfigToOldBundleConfig(schema.config.data.bundles)\n      // );\n\n      // debug(TAG, 'Updating datalog converter');\n      // this.dataLogger.converter = DataLogPacketConverter.createFromManager(this.tap.bundles, this.tap.variables);\n      // if (schema.config.data) {\n      //   this.dataLogger.converter = new DataLogPacketConverter(\n      //     newBundleConfigToOldBundleConfig(schema.config.data.bundles || [])\n      //   );\n      // }\n    }\n  }\n\n  public get tapConfig(): TapConfiguratorConfig | undefined {\n    return this._tapConfig$.value;\n  }\n\n  public get tapConfig$(): Observable<TapConfiguratorConfig | undefined> {\n    return this._tapConfig$;\n  }\n\n  public isSameTag(tag: NdefTag | NfcTag): boolean {\n    if (this.protocolMeta && this.protocolMeta.type === 'nfc') {\n      // Check is it's the same tag\n      const currentTag = this.protocolMeta.info.tag;\n      if (currentTag.id && currentTag.id?.length == 0) {\n        return false;\n      }\n      return isSameTag(currentTag, tag);\n    } else {\n      // It's not nfc currently\n      const nfcProtocolMeta: ProtocolMetaNfc | undefined =\n        this.availableProtocols.find(\n          (p) => p.type === 'nfc'\n        ) as ProtocolMetaNfc;\n      if (nfcProtocolMeta) {\n        return isSameTag(nfcProtocolMeta.info.tag, tag);\n      }\n    }\n    return false;\n  }\n\n  /**\n   * Use another communicaiton protocol\n   * May be rejected\n   * @param meta: ProtocolMeta\n   * @param disonnectCurrentProtocol if set to true and if tap is already connected with\n   * a communication protocol, it will disconnect from it first\n   * @param connectToNew: boolean\n   */\n  public async useProtocol(\n    meta: ProtocolMeta,\n    disonnectCurrentProtocol: boolean = true,\n    connectToNew: boolean = true\n  ): Promise<void> {\n    debug(TAG, 'use protocol', meta);\n    const protocol = await this.protocolFactory.create(meta);\n    if (!this._tap) {\n      this.tap = Tap.fromProtocol(protocol);\n    } else {\n      // let oldConnectionState = this._tap.protocol.getConnectionState();\n      if (disonnectCurrentProtocol) {\n        try {\n          await this.tap.protocol.disconnect().toPromise();\n        } catch (err) {\n          console.warn('Cannot disconnect current protocol properly: ', err);\n        }\n      }\n      this._tap.useComProtocol(protocol);\n    }\n    this.protocolMeta = meta;\n    if (connectToNew) {\n      await this.connect();\n    }\n  }\n\n  async executeFactoryReset() {\n    await this.tap.factoryReset();\n    this.tap.auth.clearCache();\n    this.tap.encryption.stop();\n  }\n\n  public set tap(t: Tap) {\n    this.setTap(t, { emit: true });\n  }\n\n  constructor(\n    private platform: Platform,\n    private toastCtrl: ToastController,\n    protected protocolFactory: ProtocolFactoryService,\n    private ngZone: NgZone\n  ) {\n    debug(TAG, 'NEW INSTANCE', this._loadedTapExtensions);\n    this.tapChangedWithLastValue.subscribe((newTap) => {\n      newTap.client.addInterceptor(\n        (context: ExecutionContext, next: RequestHandler) => {\n          return next.handle(context).pipe(\n            tap(\n              (tapResponseFrame) => {\n                const response = new TapResponse(\n                  tapResponseFrame,\n                  context.request\n                );\n                if (response.status === ResultCode.UNAUTHORIZED) {\n                  if (\n                    TapRequestHelper.pathToString(\n                      context.request.header.path\n                    ) !== this.tap.service.interface.resources.login.path\n                  ) {\n                    this.listeners.forEach((listener) => {\n                      if (listener.onTapRequestUnauthorized) {\n                        listener.onTapRequestUnauthorized({\n                          request: context,\n                          response: response,\n                        });\n                      }\n                    });\n                  }\n                }\n\n                if (!response.isSuccessful()) {\n                  this.listeners.forEach((listener) => {\n                    if (listener.onTapRequestError) {\n                      listener.onTapRequestError({\n                        request: context.request,\n                        error: new TapResponseStatusError(response),\n                        response: response,\n                      });\n                    }\n                  });\n                }\n              },\n              (error) => {\n                this.listeners.forEach((listener) => {\n                  console.warn(`Request ${context.request} errored: ${error}`);\n                  if (listener.onTapRequestError) {\n                    listener.onTapRequestError({\n                      request: context.request,\n                      error: error,\n                    });\n                  }\n                });\n              }\n            )\n          );\n        }\n      );\n    });\n    this.sessionState.subscribe((newSessionState) => {\n      this._sessionStateSnapshot = newSessionState;\n    });\n    this.connectionStateReplay.subscribe(async (event) => {\n      if (event.newState === ConnectionState.DISCONNECTED) {\n        this.keepAliveEngine?.stop();\n        if (!this._isManualDisconnection) {\n          this._connectionLost$?.next(event);\n        }\n      } else if (event.newState == ConnectionState.CONNECTED) {\n        this.ngZone.runOutsideAngular(() => {\n          if (this.keepAlivePeriod > 0) {\n            debug(TAG, 'Start keep alive with period', this.keepAlivePeriod);\n            this.keepAliveEngine?.start();\n          } else {\n            debug(TAG, 'NO keep alive');\n          }\n        });\n      }\n      this.listeners.forEach((listener) =>\n        listener.onTapConnectionStateChange(event)\n      );\n    });\n  }\n\n  addProtocolMeta(meta: ProtocolMeta) {\n    if (meta) {\n      const protocols = this.availableProtocols;\n      const protocolIndex = protocols.findIndex((existing) => {\n        return existing.type === meta.type;\n      });\n      if (protocolIndex >= 0) {\n        debug(TAG, 'Protocol meta', meta, 'already exists. Replacing infos');\n        protocols[protocolIndex] = meta;\n        this._availableProtocols.next(protocols);\n      } else {\n        debug(TAG, 'Adding protocol meta', meta);\n        protocols.push(meta);\n        this._availableProtocols.next(protocols);\n      }\n    }\n  }\n\n  /**\n   * Parse NDefTag and try to create a ProtocolMeta thanks to record\n   * @returns undefined if there is no other protocol in the tag\n   */\n  async registerProtocolsFromTag(\n    tag: NdefTag | NfcTag\n  ): Promise<ProtocolMeta | undefined> {\n    let meta: ProtocolMeta | undefined;\n    if (!tag.ndefMessage) {\n      return undefined;\n    }\n    const info = parseTapNdefMessage(tag.ndefMessage);\n    if (info.macAddress && info.macAddress !== '00:00:00:00:00:00') {\n      meta = {\n        type: 'ble',\n        info: {\n          mac: info.macAddress,\n          name: info.name,\n        },\n      };\n    } else if (info.ssid) {\n      const hostname = (await this.tap.service.wifi.getHostname()).body();\n      meta = {\n        type: 'wifi',\n        info: {\n          ssid: info.ssid,\n          // name: info.name,\n          url: `tcp://${hostname}:2000`,\n        },\n      };\n    }\n    if (meta) {\n      this.addProtocolMeta(meta);\n    }\n    return meta;\n  }\n\n  async getCurrentHostProtocolMaxFrameSizeCacheFirst(): Promise<ProtocolMaxFrameSize> {\n    const protocol = this.protocolMeta?.type;\n    if (!protocol || !this._maxFrameSizeCache[protocol]) {\n      const hostProtocol = (\n        await this.tap.service.interface.getCurrentHostProtocolMaxFrameSize()\n      ).body();\n      if (hostProtocol.request > 0xff) {\n        hostProtocol.request -= 2; // due to 2 more bytes for apdu.header.lc\n      }\n      if (protocol) {\n        this._maxFrameSizeCache[protocol] = hostProtocol;\n      } else {\n        return hostProtocol;\n      }\n    }\n    return this._maxFrameSizeCache[protocol];\n  }\n\n  /**\n   * Will register available communication protocols on current tap\n   * by asking LWM2M resources.\n   * @returns the list of new ProtocolMeta found\n   */\n  async registerProtocolsFromTap(): Promise<ProtocolMeta[]> {\n    const nProtocolMeta: ProtocolMeta[] = [];\n\n    const [\n      appNameResponse,\n      serialNumberResponse,\n      authorizedHostProtocolsResponse,\n      bleAddressResponse,\n      ipResponse,\n    ] = await this.tap.service.interface.executeMultipleCalls([\n      this.tap.service.interface.getAppNameCall(),\n      this.tap.service.device.getSerialNumberCall(),\n      this.tap.service.interface.getAuthorizedHostProtocolCall(),\n      this.tap.service.ble.getAddressCall(),\n      this.tap.service.wifi.getIpCall(),\n    ]);\n\n    const authorizedHostProtocols: HostProtocol[] =\n      authorizedHostProtocolsResponse.body();\n\n    if (\n      this.protocolMeta?.type !== 'ble' &&\n      authorizedHostProtocols.includes(HostProtocol.BLE)\n    ) {\n      if (this.platform.is('ios')) {\n        const bleName = createBleName(\n          appNameResponse.body(),\n          serialNumberResponse.body()\n        );\n        nProtocolMeta.push({\n          type: 'ble',\n          info: {\n            name: bleName,\n          },\n        });\n      } else {\n        nProtocolMeta.push({\n          type: 'ble',\n          info: {\n            mac: bleAddressResponse.body(),\n          },\n        });\n      }\n    }\n\n    if (\n      this.protocolMeta?.type !== 'socket' &&\n      this.platform.is('mobile') &&\n      authorizedHostProtocols.includes(HostProtocol.WIFI)\n    ) {\n      const ip = ipResponse.body();\n      if (ip && ip !== '0.0.0.0') {\n        nProtocolMeta.push({\n          type: 'socket',\n          info: {\n            url: 'tcp://' + ip + ':2000',\n          },\n        });\n      }\n    }\n\n    nProtocolMeta.forEach((meta) => this.addProtocolMeta(meta));\n\n    return nProtocolMeta;\n  }\n\n  async useProtocolFromMeta(\n    newProtocolMeta: ProtocolMeta,\n    disonnectCurrentProtocol: boolean = true,\n    connectToNew: boolean = true\n  ): Promise<void> {\n    if (!this.protocolMeta || newProtocolMeta.type !== this.protocolMeta.type) {\n      return await this.useProtocol(\n        newProtocolMeta,\n        disonnectCurrentProtocol,\n        connectToNew\n      );\n    }\n  }\n\n  /**\n   * Switch from NFC communication protocol to a long range communication\n   * @warning this is only available when we are in NFC\n   *\n   * @return the new protocol meta used or undefined if it does not have a long range protocol to use\n   */\n  async useLongRangeProtocol(): Promise<ProtocolMeta | undefined> {\n    debug(TAG, 'useLongRangeProtocol');\n    const currentProtocol = this.protocolMeta;\n    if (!this._tap) {\n      throw TapServiceError.illegalStateNoTap();\n    }\n    if (currentProtocol) {\n      if (currentProtocol.type === 'nfc') {\n        const protocolMeta = this.availableProtocols.find(\n          LONG_RANGE_PROTOCOL_FILTER\n        );\n        if (protocolMeta) {\n          debug(TAG, 'Using long range protocol: ', protocolMeta);\n          await this.useProtocolFromMeta(protocolMeta);\n          return protocolMeta;\n        } else {\n          debug(\n            TAG,\n            'NFC tag does not have long range protocol information...'\n          );\n        }\n      }\n    }\n    return undefined;\n  }\n\n  /**\n   * Connection state events.\n   * It works even when tap is changed\n   */\n  public get connectionState(): Observable<ConnectionStateChangeEvent> {\n    return this._connectionState$;\n  }\n  /**\n   * Connection state events with replay.\n   * It works even when tap is changed\n   */\n  public connectionStateReplay: Observable<ConnectionStateChangeEvent> =\n    this.tapOrUndefinedChangedWithLastValue.pipe(\n      switchMap((tapDevice) => {\n        if (!tapDevice) {\n          return of({\n            newState: ConnectionState.DISCONNECTED,\n            oldState: ConnectionState.DISCONNECTED,\n          });\n        }\n        const currentProtocol = getProtocolOrUndefined(tapDevice.client);\n        return (tapDevice.client as TapClient).onProtocolChange().pipe(\n          startWith({\n            newProtocol: currentProtocol,\n          }),\n          switchMap((event) => {\n            if (!event.newProtocol) {\n              return of({\n                newState: ConnectionState.DISCONNECTED,\n                oldState: ConnectionState.DISCONNECTED,\n              });\n            }\n            return event.newProtocol.onConnectionStateChange().pipe(\n              runInZone(this.ngZone),\n              startWith({\n                newState: event.newProtocol.getConnectionState(),\n                oldState: ConnectionState.DISCONNECTED,\n              })\n            );\n          })\n        );\n      }),\n      shareReplay(1)\n    );\n\n  /**\n   * Any connection state change\n   */\n  private _connectionState$ = this.connectionStateReplay.pipe(skip(1));\n\n  /**\n   * @returns true if user is connected as given username or one of the given usernames\n   */\n  async isLoggedInAsUserOrProfileName(\n    userOrProfileNames: string | string[]\n  ): Promise<boolean> {\n    if (typeof userOrProfileNames === 'string') {\n      userOrProfileNames = [userOrProfileNames];\n    }\n    if (typeof userOrProfileNames === 'number') {\n      console.warn(\n        'invalid parameter for CurrentDeviceService.isLoggedInAsUserOrProfileName() username should be a string'\n      );\n      userOrProfileNames = [(userOrProfileNames as number).toString()];\n    }\n    if (!this._tap || !this.tap.auth.sessionStateSnapshot) {\n      return false;\n    }\n    const sessionState =\n      this.tap.auth.sessionStateSnapshot ||\n      (await this.tap.auth.refreshSessionState());\n    return (\n      userOrProfileNames.includes(sessionState.profileName) ||\n      userOrProfileNames.includes(sessionState.name)\n    );\n  }\n\n  async login(\n    username: string,\n    password: string,\n    refreshSessionState: boolean = true\n  ) {\n    return await this.tap.auth.login(\n      { username, password },\n      {\n        noRefreshSessionState: !refreshSessionState,\n      }\n    );\n  }\n\n  async logout(throwErr: boolean = false): Promise<boolean> {\n    if (!this._tap) {\n      return false;\n    }\n    try {\n      await this._tap.auth.logout();\n      return true;\n    } catch (err) {\n      if (throwErr) {\n        throw err;\n      } else {\n        this.onError.bind(this);\n        return false;\n      }\n    }\n  }\n\n  setTap(newTap: Tap, options: { emit: boolean } = { emit: true }) {\n    if (!newTap) {\n      throw new Error('Illegal state: cannot set undefined tap');\n    }\n    this._tap = newTap;\n    debug(TAG, 'Setting tap...');\n    this.meta = {};\n    this._tap = newTap;\n    if (this.keepAlivePeriod === 0) {\n      newTap.keepAlive.stop();\n    }\n    newTap.keepAlive.period = this.keepAlivePeriod;\n    if (options.emit) {\n      this.notifyNewTap();\n    }\n  }\n\n  notifyNewTap() {\n    this._tapOrUndefined.next(this._tap);\n  }\n\n  setTapFromEvent(\n    event: TapSelectedEvent,\n    options: {\n      emit: boolean;\n    } = { emit: true }\n  ) {\n    if (!event.protocolMeta) {\n      throw new Error('Missing protocol information');\n    }\n    this.protocolMeta = event.protocolMeta;\n    // this.tap = event.tap;\n    this.setTap(event.tap, options);\n    debug(TAG, 'setTapFromEvent = >', event);\n  }\n\n  /**\n   * Connect to the Tap and refresh session state\n   * Throw error if it fails\n   */\n  async connect(\n    /**\n     * @deprecated\n     */\n    throwErr: boolean = true\n  ): Promise<boolean> {\n    try {\n      await this.tap.connect();\n      await this.refreshSessionState();\n      return true;\n    } catch (err: any) {\n      debug(TAG, 'Throwing error on connection failed');\n      throw err;\n    }\n  }\n\n  /**\n   *  Disconnect Tap\n   */\n  public async disconnect(): Promise<void> {\n    debug(TAG, 'disconnect');\n    if (!this.hasProtocol()) {\n      return;\n    }\n    this._isManualDisconnection = true;\n    debug(TAG, 'Setting _isManualDisconnection flag to true');\n    return (\n      this._tap\n        ? this._tap.disconnect()\n        : Promise.reject(TapServiceError.illegalStateNoTap())\n    ).then((res) => {\n      // This is a temporary hack to differentiate manual/unexpected disconnection\n      // The timeout is used to make sure that direct events are trigger before we set the manual\n      // disconnection flag back to false\n      // TODO remove later\n      setTimeout(() => {\n        debug(TAG, 'Setting _isManualDisconnection flag to false');\n        this._isManualDisconnection = false;\n      }, 50);\n      return res;\n    });\n  }\n\n  /**\n   * Remove currently used Tap\n   * If no Tap was set, do nothing\n   */\n  async remove(disconnect = true) {\n    if (this._tap) {\n      const oldTap = this._tap;\n      debug(TAG, 'Removing tap');\n      this.protocolMeta = undefined;\n      this._availableProtocols.next([]);\n      if (disconnect) {\n        await this.disconnect().catch(this.onError.bind(this));\n      }\n      console.log('Stopping old keep alive', oldTap.keepAlive);\n      oldTap.keepAlive.stop();\n      this._tap = undefined;\n      this._dataManager = undefined;\n      this._maxFrameSizeCache = {};\n      // this._tapConfig = undefined;\n      this.notifyTapRemoved(oldTap);\n    } else {\n      debug(TAG, 'No tap to remove');\n    }\n  }\n\n  private notifyTapRemoved(t: Tap) {\n    this.tapRemoved.next(t);\n    this.notifyNewTap();\n  }\n\n  /**\n   * @deprecated\n   */\n  public async configureClientIfRequired() {\n    if (!this.meta.isClientConfigured) {\n      console.log('Configuring client...');\n      await this.configureClient().catch((err) => {\n        this.onError(err);\n      });\n    }\n  }\n\n  /**\n   * Rebuild tap configuration according to data on the Tap\n   *\n   * @deprecated\n   */\n  async loadConfigFromDevice() {\n    debug(TAG, 'dynamically load Tap config');\n    const syncEvent = await this.tap.data.synchronizeTapConfig().toPromise();\n    this.meta.isClientConfigured = true;\n    // TODO Fix to get real config\n    if (syncEvent?.step === 'done') {\n      const bundles = syncEvent.bundles;\n      this.tapConfig = {\n        meta: {\n          version: '1.0.0',\n          partial: true,\n        },\n        config: {\n          version: 1,\n          data: {\n            bundles: [],\n          },\n        },\n      } as any;\n    }\n  }\n\n  public set dataManager(v: DataManagerIonic | undefined) {\n    debug(TAG, 'Setting data manager', v);\n    if (this._dataManager) {\n      this._dataManager.destroy();\n    }\n    this._dataManager = v;\n  }\n\n  public get dataManager(): DataManagerIonic | undefined {\n    if (!this._dataManager) {\n      return undefined;\n    }\n    return this._dataManager;\n  }\n\n  /**\n   * Configure client by reading tap device configuration\n   *\n   * @deprecated will be moved to a separate service\n   *\n   * @throws\n   */\n  public async configureClient(refresh: boolean = false): Promise<void> {\n    debug(TAG, 'configureClient');\n    if (refresh) {\n      this.tapConfig = undefined;\n    }\n    // TODO only once\n    // if (this.modelConfig) {\n    //   console.info('load from iotz model configuration file')\n    //   let tapConfigConfigurator = new TapConfigConfigurator(this.modelConfig);\n    //   await this.tap.configure(tapConfigConfigurator);\n    //   this.meta.isClientConfigured = true;\n    //   console.log('Variables: ', this.tap.variables);\n    // }\n    if (this.tapConfig === undefined) {\n      await this.loadConfigFromDevice();\n      // this.tap.bundles.clear();\n      // this.tap.variables.clear();\n      // await this.tap.configure(this.readDeviceDataConfigurator).catch(this.onError.bind(this));\n    }\n  }\n\n  getCurrentProtocol(): ComProtocol | undefined {\n    return getProtocolOrUndefined(this.tap.client);\n  }\n\n  get keepAliveEngine(): KeepAliveEngine | undefined {\n    return this._tap?.keepAlive;\n  }\n\n  hasProtocol(): boolean {\n    return this.getCurrentProtocol() !== undefined;\n  }\n\n  registerEventListerner(listener: OnTapEvent) {\n    this.listeners.push(listener);\n  }\n\n  unregisterEventListener(listener: OnTapEvent) {\n    const index = this.listeners.indexOf(listener);\n    if (index >= 0) {\n      this.listeners.splice(index, 1);\n    }\n  }\n\n  /**\n   * @deprecated refractor: remove on error from this service to use a global handler\n   *\n   * @param err\n   */\n  private async onError(err: Error) {\n    // TODO remove\n    const toast = await this.toastCtrl.create({\n      message: err.message || 'Unknown error',\n      color: 'danger',\n      position: 'bottom',\n      duration: 3000,\n      buttons: [\n        {\n          text: 'Close',\n          role: 'cancel',\n          handler: () => {\n            console.log('Close clicked');\n          },\n        },\n      ],\n    });\n    await toast.present();\n  }\n\n  async reboot() {\n    let rebootResponse: TapResponse<void> | undefined;\n    try {\n      rebootResponse = await this.tap.service.device.reboot();\n    } catch (err) {\n      if (!isCodeError(TapError.Code.ExecuteRequestError, err as Error)) {\n        throw err;\n      } else {\n        const cause = (err as TapError).cause as CodeError | undefined;\n        if (cause?.code !== ComProtocol.ErrorCode.TimeoutError) {\n          console.warn('Reboot error', err);\n          throw err;\n        }\n        // ignore timeout error as tap may reboot before sending response\n      }\n    }\n    if (rebootResponse) {\n      rebootResponse.successful();\n    }\n    await this.clearAuth();\n    this.tap.disconnect().catch((err) => {});\n  }\n\n  async clearAuth() {\n    this.tap.auth.clearCache();\n    this.tap.encryption.stop();\n    await this.tap.auth.logout().catch((err) => {});\n  }\n\n  async refreshSessionState(): Promise<TapAuth.SessionState> {\n    try {\n      return await this.tap.auth.refreshSessionState();\n    } catch (err: any) {\n      if (\n        isCodeError(TapError.Code.ScramNotStartedYet, err) ||\n        isCodeError(TapError.Code.InvalidScramKey, err)\n      ) {\n        console.warn(`SCRAM session ended due to error`, err.message);\n        this.tap.encryption.stop();\n        return await this.tap.auth.refreshSessionState();\n      } else {\n        throw err;\n      }\n    }\n  }\n}\n\n// export class LogTapRequestInterceptor {\n\n//   public pendingCount = 0;\n\n//   intercept(req: ExecutionContext, next: RequestHandler): Observable<TapResponse<any>> {\n//     this.pendingCount++;\n//     // debug(TAG, `Execute request ${req.request} (pending ${this.pendingCount})...`)\n//     return next.handle(req)\n//       .pipe(\n//         finalize(() => {\n//           this.pendingCount--;\n//         }),\n//         tap((response) => {\n//           // debug(TAG, `Request ${req.request} DONE ${response} (pending ${this.pendingCount})`)\n//         })\n//       );\n//   }\n\n// }\n","import { Injectable } from '@angular/core';\nimport {\n  ActivatedRouteSnapshot,\n  Resolve,\n  RouterStateSnapshot,\n} from '@angular/router';\nimport { Tap } from '@iotize/tap';\nimport { CurrentDeviceService } from './current-device.service';\n\nexport type TapResolved = { tap: Tap } | { error: Error };\n\n/**\n * Route resolver to make sure that a Tap is set at this point\n *\n */\n@Injectable()\nexport class ConnectedTapResolver implements Resolve<TapResolved | undefined> {\n  constructor(private tapService: CurrentDeviceService) {}\n\n  async resolve(\n    route: ActivatedRouteSnapshot,\n    state: RouterStateSnapshot\n  ): Promise<TapResolved | undefined> {\n    try {\n      await this.tapService.connect();\n    } catch (err: any) {\n      return this.onError(err);\n    }\n  }\n\n  onError(error: Error): { error: Error } | PromiseLike<TapResolved> {\n    console.warn('ConnectedTapResolver', 'error', error);\n    return {\n      error: error,\n    };\n  }\n}\n","export interface Options {\n  filename: string;\n  fieldSeparator: string;\n  quoteStrings: string;\n  decimalseparator: string;\n  showLabels: boolean;\n  showTitle: boolean;\n  title: string;\n  useBom: boolean;\n  headers: string[];\n  noDownload: boolean;\n  nullToEmptyString: boolean;\n}\n\nexport class CsvConfigConsts {\n  public static EOL = '\\r\\n';\n  public static BOM = '\\ufeff';\n\n  public static DEFAULT_FIELD_SEPARATOR = ',';\n  public static DEFAULT_DECIMAL_SEPARATOR = '.';\n  public static DEFAULT_QUOTE = '\"';\n  public static DEFAULT_SHOW_TITLE = false;\n  public static DEFAULT_TITLE = 'My Report';\n  public static DEFAULT_FILENAME = 'mycsv.csv';\n  public static DEFAULT_SHOW_LABELS = false;\n  public static DEFAULT_USE_BOM = true;\n  public static DEFAULT_HEADER: any[] = [];\n  public static DEFAULT_NO_DOWNLOAD = false;\n  public static DEFAULT_NULL_TO_EMPTY_STRING = false;\n}\n\nexport const ConfigDefaults: Options = {\n  filename: CsvConfigConsts.DEFAULT_FILENAME,\n  fieldSeparator: CsvConfigConsts.DEFAULT_FIELD_SEPARATOR,\n  quoteStrings: CsvConfigConsts.DEFAULT_QUOTE,\n  decimalseparator: CsvConfigConsts.DEFAULT_DECIMAL_SEPARATOR,\n  showLabels: CsvConfigConsts.DEFAULT_SHOW_LABELS,\n  showTitle: CsvConfigConsts.DEFAULT_SHOW_TITLE,\n  title: CsvConfigConsts.DEFAULT_TITLE,\n  useBom: CsvConfigConsts.DEFAULT_USE_BOM,\n  headers: CsvConfigConsts.DEFAULT_HEADER,\n  noDownload: CsvConfigConsts.DEFAULT_NO_DOWNLOAD,\n  nullToEmptyString: CsvConfigConsts.DEFAULT_NULL_TO_EMPTY_STRING,\n};\n\nexport class ExportToCsv {\n  constructor(\n    DataJSON: Record<string, any>[] | string,\n    filename: string,\n    options?: Partial<Options>\n  ) {\n    const config = options || {};\n\n    if (typeof DataJSON === 'string') {\n      this.data = JSON.parse(JSON.stringify(DataJSON));\n    } else {\n      this.data =\n        typeof DataJSON !== 'object' ? JSON.parse(DataJSON) : DataJSON;\n    }\n\n    this._options = objectAssign({}, ConfigDefaults, config);\n\n    if (this._options.filename) {\n      this._options.filename = filename;\n    }\n  }\n\n  // public fileName: string;\n  // public labels: Array<String>;\n  public data: any[];\n\n  private _options: Options;\n  private csv = '';\n\n  /**\n   * Check if is Float\n   * @param {any} input\n   */\n  static isFloat(input: any) {\n    return +input === input && (!isFinite(input) || Boolean(input % 1));\n  }\n\n  /**\n   * Generate CSV To string\n   */\n  public csvToString(): string {\n    if (this._options.useBom) {\n      this.csv += CsvConfigConsts.BOM;\n    }\n\n    if (this._options.showTitle) {\n      this.csv += this._options.title + '\\r\\n\\n';\n    }\n\n    this.getHeaders();\n    this.getBody();\n\n    if (this.csv === '') {\n      console.log('Invalid data');\n      return '';\n    }\n\n    return this.csv;\n    /*\n        if (this._options.noDownload) {\n\n        }\n\n        const blob = new Blob([this.csv], {'type': 'text/csv;charset=utf8;'});\n\n        if (navigator.msSaveBlob) {\n            const filename = this._options.filename.replace(/ /g, '_') + '.csv';\n            navigator.msSaveBlob(blob, filename);\n        } else {\n            const uri = 'data:attachment/csv;charset=utf-8,' + encodeURI(this.csv);\n            const link = document.createElement('a');\n\n            link.href = URL.createObjectURL(blob);\n\n            link.setAttribute('visibility', 'hidden');\n\n            link.download = this._options.filename.replace(/ /g, '_') + '.csv';\n\n            document.body.appendChild(link);\n            link.click();\n            document.body.removeChild(link);\n        }\n         */\n  }\n\n  /**\n   * Create Headers\n   */\n  getHeaders(): void {\n    if (this._options.headers.length > 0) {\n      const { headers } = this._options;\n      let row = headers.reduce((headerRow, header) => {\n        return headerRow + header + this._options.fieldSeparator;\n      }, '');\n      row = row.slice(0, -1);\n      this.csv += row + CsvConfigConsts.EOL;\n    }\n  }\n\n  /**\n   * Create Body\n   */\n  getBody() {\n    for (let i = 0; i < this.data.length; i++) {\n      let row = '';\n      for (const index in this.data[i]) {\n        row +=\n          this.formatData(this.data[i][index]) + this._options.fieldSeparator;\n      }\n\n      row = row.slice(0, -1);\n      this.csv += row + CsvConfigConsts.EOL;\n    }\n  }\n\n  /**\n   * Format Data\n   * @param {any} data\n   */\n  formatData(data: any) {\n    if (\n      this._options.decimalseparator === 'locale' &&\n      ExportToCsv.isFloat(data)\n    ) {\n      return data.toLocaleString();\n    }\n\n    if (this._options.decimalseparator !== '.' && ExportToCsv.isFloat(data)) {\n      return data.toString().replace('.', this._options.decimalseparator);\n    }\n\n    if (typeof data === 'string') {\n      data = data.replace(/\"/g, '\"\"');\n      if (\n        this._options.quoteStrings ||\n        data.indexOf(',') > -1 ||\n        data.indexOf('\\n') > -1 ||\n        data.indexOf('\\r') > -1\n      ) {\n        data = this._options.quoteStrings + data + this._options.quoteStrings;\n      }\n      return data;\n    }\n\n    if (this._options.nullToEmptyString) {\n      if (data === null) {\n        return (data = '');\n      }\n      return data;\n    }\n\n    if (typeof data === 'boolean') {\n      return data ? 'TRUE' : 'FALSE';\n    }\n    return data;\n  }\n}\n\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\nconst propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\n/**\n * Convet to Object\n * @param {any} val\n */\nfunction toObject(val: any) {\n  if (val === null || val === undefined) {\n    throw new TypeError(\n      'Object.assign cannot be called with null or undefined'\n    );\n  }\n  return Object(val);\n}\n\n/**\n * Assign data  to new Object\n * @param {any}   target\n * @param {any[]} ...source\n */\nfunction objectAssign(target: any, ...source: any[]) {\n  let from: any;\n  const to = toObject(target);\n  let symbols: any;\n\n  for (let s = 1; s < arguments.length; s++) {\n    from = Object(arguments[s]);\n\n    for (const key in from) {\n      if (hasOwnProperty.call(from, key)) {\n        to[key] = from[key];\n      }\n    }\n\n    if ((<any>Object).getOwnPropertySymbols) {\n      symbols = (<any>Object).getOwnPropertySymbols(from);\n      for (let i = 0; i < symbols.length; i++) {\n        if (propIsEnumerable.call(from, symbols[i])) {\n          to[symbols[i]] = from[symbols[i]];\n        }\n      }\n    }\n  }\n  return to;\n}\n","import { IonicDataLogger } from '../extensions/datalogger/data-logger';\nimport { Observable } from 'rxjs';\n\nexport interface RemoteConfig {\n  brokerUrl: any;\n  serialNumber: any;\n  password: any;\n  period: any;\n}\n\nexport enum ConnectionState {\n  CONNECTED = 'CONNECTED',\n  DISCONNECTED = 'DISCONNECTED',\n  CONNECTING = 'CONNECTING',\n  DISCONNECTING = 'DISCONNECTING',\n}\n\nexport interface RemoteStateEvent {\n  isDisconnectable?: boolean;\n  isConnectable?: boolean;\n  state?: ConnectionState;\n  isLoading?: boolean;\n}\n\nexport enum RunnableState {\n  RUNNING = 'RUNNING',\n  STOPED = 'STOPED',\n}\n\nexport interface RunnableStateEvent {\n  newState: RunnableState;\n  oldState?: RunnableState;\n}\n\nexport interface SyncableDatalogPacket extends IonicDataLogger.PacketInfo {\n  syncInfo?: SyncMeta;\n  rawSinglePacket?: Uint8Array; // TODO temporary fix as rawSinglePacket has been removed from @iotize/ionic/datalog lib\n}\n\nexport interface SyncMeta {\n  error?: Error;\n  isSync: boolean;\n  lastSync?: Date;\n}\n\nexport interface SyncStats {\n  remainingCount?: number;\n  // totalCount?: number,\n  synchronizedCount?: number;\n}\n\nexport interface SyncEngine {\n  config: Observable<RemoteConfig>;\n  state: Observable<RemoteStateEvent>;\n\n  disconnect(): Promise<void>;\n  connect(): Promise<void>;\n  syncEntry(syncInfo: SyncableDatalogPacket): Promise<SyncableDatalogPacket>;\n  configure(data: RemoteConfig): Promise<any>;\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanDeactivate } from '@angular/router';\nimport { AlertDialogService } from '@iotize/app-common';\nimport { CurrentDeviceService } from './current-device.service';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class DisconnectCurrentTapGuard implements CanDeactivate<unknown> {\n  constructor(\n    private tapService: CurrentDeviceService,\n    private alertDialog: AlertDialogService\n  ) {}\n\n  async canDeactivate(\n    _component: unknown,\n    currentRoute: ActivatedRouteSnapshot\n  ) {\n    const showConfirmExitTap = currentRoute.data.showConfirmExitTapDialog;\n    if (showConfirmExitTap) {\n      const confirm = await this.confirmExitDevice();\n      if (!confirm) {\n        return false;\n      }\n    }\n    await this.tapService.remove();\n    return true;\n  }\n\n  async confirmExitDevice(): Promise<boolean> {\n    try {\n      return await this.alertDialog.confirm({\n        message:\n          'Are you sure you want to disconnect and go back to home page ?',\n        header: 'Disconnect device',\n        okText: 'Quit',\n        cancelText: 'Cancel',\n      });\n    } catch (err) {\n      console.warn(`Failed to display confirm exit device dialog`, err);\n      return true;\n    }\n  }\n}\n","import { isCodeError } from '@iotize/common/error';\nimport { TapError, TapResponseStatusError } from '@iotize/tap';\nimport { ResultCode } from '@iotize/tap/client/api';\n\nexport function isTapUserNotAuthorizedError(err: Error) {\n  return isTapResultCodeError(err, ResultCode.UNAUTHORIZED);\n}\n\nexport function isTapResultCodeError(err: any, code: ResultCode) {\n  if (\n    isCodeError<TapResponseStatusError>(TapError.Code.ResponseStatusError, err)\n  ) {\n    return err.response.status === code;\n  } else {\n    return false;\n  }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport interface ExecuteTapActionServiceInterface {\n  /**\n   * Execute a callable that requires a Tap connection\n   * @param callable action to execute that requires a Tap device connection\n   */\n  executeTapAction<T>(callable: () => Promise<T>): Promise<T>;\n}\n\nexport const TAP_EXECUTE_TAP_ACTION_SERVICE =\n  new InjectionToken<ExecuteTapActionServiceInterface>(\n    'TAP_EXECUTE_TAP_ACTION_SERVICE'\n  );\n","import { Injectable } from '@angular/core';\nimport {\n  createMonitoringTicker,\n  MonitorEngine,\n  MonitoringController,\n} from '@iotize/tap/data';\nimport { DataLogger } from '@iotize/tap/data-log';\nimport { Observable, Subject } from 'rxjs';\nimport { filter, map, share, switchMap } from 'rxjs/operators';\nimport { CurrentDeviceService } from '../../current-device.service';\n\nexport namespace IonicDataLogger {\n  export interface PacketInfo<DataType = any> extends DataLogger.RawPacket {\n    meta: DataLogger.RawPacket.Meta & { bundleName?: string };\n    decodedData: DataType;\n  }\n\n  export interface CachePacketType {\n    id: number;\n    name: string;\n    packets: IonicDataLogger.PacketInfo<any>[];\n  }\n  export interface InstanceOptions {\n    period: number;\n  }\n}\n\n/**\n * Experimental data logger class\n *\n * @experimental\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class IonicDataLogger {\n  controller: MonitoringController;\n\n  /**\n   * Packet per packet stream\n   */\n  stream: Observable<IonicDataLogger.PacketInfo>;\n  /**\n   * Whole data stream\n   */\n  private _data: IonicDataLogger.PacketInfo[] = [];\n  private _data$: Subject<IonicDataLogger.PacketInfo[]> = new Subject();\n  public get data(): Observable<IonicDataLogger.PacketInfo[]> {\n    return this._data$.asObservable();\n  }\n\n  _packetPerBundles: Record<number, IonicDataLogger.CachePacketType> = {};\n\n  public options: IonicDataLogger.InstanceOptions = {\n    period: 1000,\n  };\n\n  constructor(private service: CurrentDeviceService) {\n    this.controller = new MonitoringController({\n      state: MonitorEngine.State.PAUSE,\n      dueTime: 0,\n      period: this.options.period,\n      refresh: false,\n    });\n\n    this.stream = createMonitoringTicker(this.controller)\n      .pipe(\n        switchMap(async (_) => {\n          try {\n            return await this.service.tap.dataLog.dequeue();\n          } catch (err) {\n            console.warn('Failed to read packet', err);\n            return undefined;\n          }\n        }),\n        filter<DataLogger.RawPacket | undefined, DataLogger.RawPacket>(\n          (value): value is DataLogger.RawPacket => {\n            console.log('pass filter', value);\n            return value !== undefined;\n          }\n        ),\n        map<DataLogger.RawPacket, IonicDataLogger.PacketInfo>((entry) => {\n          // Fix as variables is not populated by default\n          //   if (Object.keys(entry.data).length === 0) {\n          //       entry.packet.variables = entry.packet.rawVariables;\n          //   }\n          const output = entry as IonicDataLogger.PacketInfo;\n          output.decodedData = entry.data;\n          this.storePacket(output);\n          return output;\n        })\n      )\n      .pipe(share());\n  }\n\n  getCacheForBundle(bundleId: number): IonicDataLogger.CachePacketType {\n    return this._packetPerBundles[bundleId];\n  }\n\n  set period(v: number) {\n    // console.info(`Update period to ${v} ms`);\n    this.controller.setPeriod(v);\n  }\n\n  get events() {\n    return this.stream;\n  }\n\n  get running(): boolean {\n    return this.controller.state === MonitorEngine.State.START;\n  }\n\n  storePacket(packet: IonicDataLogger.PacketInfo<Record<string, any>>) {\n    if (!(packet.meta.bundleId in this._packetPerBundles)) {\n      this._packetPerBundles[packet.meta.bundleId] = {\n        name: packet.meta.bundleName || `Bundle ${packet.meta.bundleId}`,\n        id: packet.meta.bundleId,\n        packets: [],\n      };\n    }\n    this._packetPerBundles[packet.meta.bundleId].packets.push(packet);\n\n    this._data.push(packet);\n    this._data$.next(this._data);\n  }\n\n  pause() {\n    this.controller.pause();\n  }\n\n  stop() {\n    this.controller.stop();\n  }\n\n  start() {\n    this.controller.start();\n    return this.events;\n  }\n}\n","import { Injectable } from '@angular/core';\nimport {\n  ActivatedRouteSnapshot,\n  CanActivate,\n  Router,\n  RouterStateSnapshot,\n} from '@angular/router';\nimport { Observable } from 'rxjs';\n\nimport { CurrentDeviceService } from './current-device.service';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class HasCurrentTapGuard implements CanActivate {\n  // TODO inject configuration\n  public config = {\n    redirectUrl: ['/', 'connect'],\n  };\n\n  constructor(\n    private tapService: CurrentDeviceService,\n    private router: Router\n  ) {}\n\n  canActivate(\n    next: ActivatedRouteSnapshot,\n    state: RouterStateSnapshot\n  ): Observable<boolean> | Promise<boolean> | boolean {\n    if (!this.tapService.hasTap && !next.queryParams.protocol) {\n      this.router.navigate(this.config.redirectUrl, {\n        queryParams: {\n          returnUrl: state.url,\n        },\n      });\n      return false;\n    }\n    return true;\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n  name: 'valueOrDefault',\n})\nexport class ValueOrDefaultPipe implements PipeTransform {\n  transform(value: any, args?: any): any {\n    return value === undefined ? args : value;\n  }\n}\n","import {\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  Output,\n  ViewChild,\n} from '@angular/core';\nimport {\n  AbstractControl,\n  FormBuilder,\n  FormGroup,\n  Validators,\n} from '@angular/forms';\nimport { IonInput } from '@ionic/angular';\nimport { Observable, Subject, Subscription } from 'rxjs';\nimport { debug } from '../logger';\nimport { getFormFieldOrError } from '../utility';\n\nconst TAG = 'InlineEditorComponent';\n\nexport namespace InlineEditorComponent {\n  export type InputOptions =\n    | ToggleOptions\n    | NumberOptions\n    | PasswordOptions\n    | TextOptions;\n\n  export interface ToggleOptions {\n    type: 'toggle';\n  }\n\n  export interface NumberOptions {\n    min?: number;\n    max?: number;\n    type: 'number';\n  }\n\n  export interface PasswordOptions {\n    pattern?: RegExp;\n    minLength?: number;\n    maxLength?: number;\n    type: 'password';\n  }\n\n  export interface TextOptions {\n    pattern?: RegExp;\n    minLength?: number;\n    maxLength?: number;\n    placeholder?: string;\n    type: 'text';\n  }\n\n  export namespace SelectOptions {\n    export type Options = {\n      key: any;\n      text: string;\n    }[];\n  }\n}\n\n@Component({\n  selector: 'tap-inline-editor',\n  templateUrl: './inline-editor.component.html',\n  styleUrls: ['./inline-editor.component.scss'],\n})\nexport class InlineEditorComponent<ValueType = any> implements OnDestroy {\n  /**\n   * Emitter when form is submit\n   */\n  @Output() onSubmit: EventEmitter<{\n    target: { value: string };\n  }> = new EventEmitter();\n\n  @Output() valueChange = new EventEmitter<string | number>();\n\n  /**\n   * Enable/disable edit mode\n   */\n  @Input() set editMode(v: boolean) {\n    this._editMode = v;\n    this.field.setValue(this.currentValue);\n    if (v) {\n      this.enableEditMode();\n    }\n  }\n\n  @Output() editModeChange = new EventEmitter<boolean>();\n\n  /**\n   * True if field can be edited\n   */\n  @Input() editable = false;\n\n  @Input() unitValue?: string;\n\n  /**\n   * Input option\n   * You can defined how input will be rendered: text, number, toggle, select, ...\n   */\n  @Input() inputOptions: InlineEditorComponent.InputOptions | any = {\n    type: 'text',\n  };\n\n  /**\n   * Additional style for value\n   */\n  @Input() valueStyle?: string;\n\n  /**\n   * Set observable to subscribe to get value updates\n   */\n  @Input() set value(obs: Observable<ValueType> | ValueType) {\n    this.valueSubscription?.unsubscribe();\n    if (obs && obs instanceof Observable) {\n      this.valueSubscription = obs.subscribe((value) => {\n        this.updateValue(value);\n      });\n    } else if (obs !== undefined) {\n      this.updateValue(obs as ValueType);\n    }\n  }\n\n  /**\n   * Set value snapshot\n   */\n  @Input() set forceValue(value: any) {\n    this.updateValue(value);\n  }\n\n  /**\n   * Enable/disable loader when submitting a value\n   */\n  @Input() showLoader = true;\n\n  /**\n   * Set field error message\n   */\n  @Input() set fieldError(err: Error) {\n    if (err) {\n      debug(TAG, 'Set field error', err);\n      this.field.setErrors({\n        submit: err.message,\n      });\n    } else {\n      this.field.setErrors(null);\n    }\n  }\n\n  @ViewChild('inputView') inputView!: IonInput;\n\n  private originalValue?: ValueType;\n\n  public form: FormGroup;\n  public _editMode = false;\n\n  currentValue: any;\n  valueSubscription?: Subscription;\n\n  field: AbstractControl;\n\n  private destroyed = new Subject<void>();\n\n  constructor(\n    formBuilder: FormBuilder,\n    private changeDetectorRef: ChangeDetectorRef\n  ) {\n    this.form = formBuilder.group({\n      field: ['', Validators.required],\n    });\n    this.field = getFormFieldOrError(this.form, 'field');\n  }\n\n  ngOnDestroy(): void {\n    this.destroyed.next();\n    this.destroyed.complete();\n    if (this.valueSubscription) {\n      this.valueSubscription.unsubscribe();\n    }\n  }\n\n  public onValueSubmit() {\n    const value = this.field.value;\n    if (this.field.errors) {\n      return;\n    }\n    this.onSubmit.emit(value);\n  }\n\n  isEdited() {\n    return this.field.value !== this.originalValue;\n  }\n\n  restoreValue() {\n    this.setFieldValue(this.originalValue);\n  }\n\n  setFieldValue(value: ValueType | undefined) {\n    // let formattedValue = this.formatter()\n    // this.inputFormatter ? this._info.editFormatter.write(value) : value;\n    this.field.setValue(value || '');\n  }\n\n  async onValueClick() {\n    if (this.editable) {\n      await this.enableEditMode();\n      this.editModeChange.next(true);\n    }\n  }\n\n  onCancelEdit() {\n    this._editMode = false;\n    this.editModeChange.next(false);\n  }\n\n  async enableEditMode() {\n    this._editMode = true;\n    await this.setInputFocus();\n  }\n\n  private async setInputFocus() {\n    this.changeDetectorRef.detectChanges();\n    await this.inputView.setFocus();\n  }\n\n  private updateValue(value: ValueType) {\n    this.currentValue = value;\n    if (!this._editMode && value !== undefined) {\n      this.field.setValue(value);\n    }\n  }\n\n  onValueChange(event: CustomEvent<{ value: string }>) {\n    const value = event.detail.value;\n    this.valueChange.emit(value);\n  }\n}\n","<ng-container [formGroup]=\"form\">\n  <ion-label\n    (click)=\"onValueClick()\"\n    *ngIf=\"!_editMode\"\n    [class]=\"editable ? 'cell editor-value' : 'editor-value'\"\n  >\n    <span [ngStyle]=\"valueStyle\">{{\n      currentValue | valueOrDefault: '---'\n    }}</span>\n    <span\n      *ngIf=\"unitValue\"\n      [ngStyle]=\"valueStyle\"\n      class=\"variable-unit ion-margin-start\"\n      >{{ unitValue }}</span\n    >\n  </ion-label>\n  <ion-input\n    #inputView\n    (keydown.enter)=\"onValueSubmit()\"\n    (ionChange)=\"onValueChange($event)\"\n    [class]=\"editable ? 'cell' : 'editor-value'\"\n    [ngStyle]=\"valueStyle\"\n    (keydown.escape)=\"onCancelEdit()\"\n    *ngIf=\"_editMode\"\n    [max]=\"inputOptions.max\"\n    [maxlength]=\"inputOptions.maxLength\"\n    [min]=\"inputOptions.min\"\n    [minlength]=\"inputOptions.minLength\"\n    [pattern]=\"inputOptions.pattern\"\n    [placeholder]=\"inputOptions.placeholder\"\n    [type]=\"inputOptions.type\"\n    appAutoFocus\n    class=\"cellInput\"\n    [formControlName]=\"'field'\"\n  ></ion-input>\n</ng-container>\n","import {\n  Directive,\n  ElementRef,\n  OnInit,\n  AfterViewInit,\n  Input,\n} from '@angular/core';\n\n@Directive({\n  selector: '[appAutofocus]',\n})\nexport class AutoFocusDirective implements AfterViewInit {\n  @Input() public appAutoFocus = true;\n\n  constructor(private elementRef: ElementRef) {}\n\n  ngAfterViewInit(): void {\n    setTimeout(() => {\n      this.elementRef.nativeElement.setFocus();\n    }, 100);\n  }\n}\n","import { NgControl } from '@angular/forms';\nimport { Input, Directive } from '@angular/core';\n\n@Directive({\n  selector: '[disableControl]',\n})\nexport class DisableControlDirective {\n  @Input() set disableControl(condition: boolean) {\n    if (this.ngControl.control) {\n      if (condition) {\n        this.ngControl.control.disable();\n      } else {\n        this.ngControl.control.enable();\n      }\n    }\n  }\n\n  constructor(private ngControl: NgControl) {}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n// make up your own interface to match TypeScript enums\n// as closely as possible (not perfect, though)\nexport type EnumType = any; // Record<string | number | any, string | number>\n\nexport interface EnumAsArray {\n  key: string | number;\n  value: string | number;\n}\n\n@Pipe({\n  name: 'enum',\n})\nexport class EnumPipe implements PipeTransform {\n  transform(enumObject: EnumType): Array<EnumAsArray> {\n    return Object.values(enumObject)\n      .filter((value) => typeof value === 'string')\n      .map((value) => {\n        return {\n          key: enumObject[value as any],\n          value: value as any,\n        };\n      });\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * Pipe to extract a bit value or a bit range from a number.\n * Returns 0 when parameters are not valid\n *\n * For example:\n *\n * ```\n * expect(pipe.transform(0b0101, '2')).toEqual(1, 'transform with parameter 2 should returns value of bit at position 2');\n * // Extracting bits n° 1 and n°2 (index starts at 0)\n * expect(pipe.transform(0b0101, '1-2')).toEqual(0b10);\n * ````\n */\n@Pipe({\n  name: 'extractBits',\n})\nexport class ExtractBitsPipe implements PipeTransform {\n  transform(value: number, format?: string | number): number {\n    if (typeof value !== 'number') {\n      console.warn(\n        `Invalid value for \"extractBits\". Should be a number. Given: ${typeof value}`,\n        value\n      );\n      return 0;\n    }\n    let min: number, max: number;\n    if (typeof format === 'string') {\n      if (format.indexOf('-') >= 0) {\n        [min, max] = format.split('-').map((v) => {\n          if (!v) {\n            return 0;\n          } else {\n            return parseInt(v, 10);\n          }\n        });\n      } else {\n        min = max = parseInt(format, 10);\n      }\n    } else if (typeof format === 'number') {\n      min = format;\n      max = format;\n    } else {\n      // No format given, we always return 0\n      return 0;\n    }\n    // For example with max = 3 min = 1\n    // # => 0b0001110\n    // eslint-disable-next-line no-bitwise\n    const valueMask = ((1 << (max - min + 1)) - 1) << min;\n    // eslint-disable-next-line no-bitwise\n    value = (value & valueMask) >> min;\n    return value;\n  }\n}\n","import { Directive, Input, OnDestroy } from '@angular/core';\nimport { NgControl } from '@angular/forms';\nimport { Subscription } from 'rxjs';\n\n@Directive({\n  selector: '[rememberValueControl]',\n})\nexport class RememberValueControlDirective implements OnDestroy {\n  @Input() formControlName?: string;\n\n  @Input() set rememberValueControl(formGroupName: string | undefined) {\n    if (this.formControlName && formGroupName) {\n      this.initializeListeners(formGroupName, this.formControlName);\n    }\n  }\n\n  private valueChangeSub?: Subscription;\n\n  constructor(private ngControl: NgControl) {}\n\n  ngOnDestroy(): void {\n    this.valueChangeSub?.unsubscribe();\n  }\n\n  private initializeListeners(formGroupName: string, formControlName: string) {\n    this.valueChangeSub?.unsubscribe();\n    const keyName = `rembemberValueControl.${formGroupName}.${formControlName}`;\n    this.valueChangeSub = this.ngControl.valueChanges?.subscribe((newValue) => {\n      localStorage.setItem(keyName, newValue);\n    });\n    const lastValue = localStorage.getItem(keyName);\n    if (lastValue) {\n      this.ngControl.control?.setValue(lastValue);\n    }\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n  name: 'tapRequest',\n})\nexport class TapRequestPipe implements PipeTransform {\n  transform(value: any, args?: any): string {\n    return value.toString();\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n  name: 'trim',\n})\nexport class TrimPipe implements PipeTransform {\n  transform(value: string, trimChar: string = ''): string {\n    const ret = value.replace(RegExp(trimChar, 'g'), '');\n    return ret;\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { IonicModule } from '@ionic/angular';\nimport { AutoFocusDirective } from './auto-focus.directive';\nimport { DisableControlDirective } from './disable-control.directive';\nimport { EnumPipe } from './enum.pipe';\nimport { ExtractBitsPipe } from './extract-bits.pipe';\nimport { RememberValueControlDirective } from './remember-value-control';\nimport { TapRequestPipe } from './tap-request.pipe';\nimport { TrimPipe } from './trim.pipe';\n\n@NgModule({\n  declarations: [\n    AutoFocusDirective,\n    DisableControlDirective,\n    EnumPipe,\n    TrimPipe,\n    ExtractBitsPipe,\n    RememberValueControlDirective,\n    TapRequestPipe,\n  ],\n  exports: [\n    CommonModule,\n    IonicModule,\n    AutoFocusDirective,\n    DisableControlDirective,\n    EnumPipe,\n    TrimPipe,\n    ExtractBitsPipe,\n    RememberValueControlDirective,\n    TapRequestPipe,\n  ],\n  imports: [CommonModule, IonicModule],\n})\nexport class LibCommonModule {}\n","import { isCodeError } from '@iotize/common/error';\nimport { TapClientError } from '@iotize/tap/client/impl';\nimport { ConnectionState } from '@iotize/tap/protocol/api';\nimport { Subject, Subscription } from 'rxjs';\nimport { CurrentDeviceService } from './current-device.service';\nimport { isTapUserNotAuthorizedError } from './error-utility';\nimport { debug } from './logger';\nimport { isNfcTapRequiredError } from './nfc/utility';\n\nconst TAG = 'PendingCallManager';\n\nexport class PendingCallManager {\n  private _pendingCall?: () => Promise<any>;\n  private sessionStateSubscription?: Subscription;\n  private connectionStateSub: Subscription;\n  public loading = false;\n\n  pendingCallResult = new Subject<Error | undefined>();\n\n  public static create(tapService: CurrentDeviceService) {\n    return new PendingCallManager(tapService);\n  }\n\n  get pendingCall() {\n    return this._pendingCall;\n  }\n\n  constructor(public tapService: CurrentDeviceService) {\n    this.sessionStateSubscription = this.tapService.sessionState.subscribe(\n      (newState) => {\n        if (newState.name !== 'anonymous') {\n          this._runPendingCalls();\n        }\n      }\n    );\n\n    this.connectionStateSub = this.tapService.connectionState.subscribe(\n      (event) => {\n        if (event.newState == ConnectionState.CONNECTED) {\n          this._runPendingCalls();\n        }\n      }\n    );\n  }\n\n  hasPendingCall() {\n    return Boolean(this._pendingCall);\n  }\n\n  destroy() {\n    if (this.sessionStateSubscription) {\n      this.sessionStateSubscription.unsubscribe();\n    }\n    if (this.connectionStateSub) {\n      this.connectionStateSub.unsubscribe();\n    }\n    this.pendingCallResult.complete();\n  }\n\n  public async exec(call: () => Promise<void>) {\n    if (!this.tapService.tap.isConnected()) {\n      this._pendingCall = call;\n      const error = TapClientError.notConnectedError();\n      error.message = 'Reconnect Tap to apply changes';\n      throw error;\n    }\n    try {\n      this.loading = true;\n      const result = await call();\n      this._pendingCall = undefined;\n      return result;\n    } catch (err: any) {\n      const isUnauthorizedError = isTapUserNotAuthorizedError(err);\n      if (\n        isUnauthorizedError ||\n        isCodeError(TapClientError.Code.NotConnectedError, err) ||\n        isNfcTapRequiredError(err)\n      ) {\n        // debug(TAG, this.config.key, `Request failed: ${err.message}. Will retry after login`);\n        this._pendingCall = call;\n      } else {\n        this._pendingCall = undefined;\n      }\n      throw err;\n    } finally {\n      this.loading = false;\n    }\n  }\n\n  public cancel() {\n    this._pendingCall = undefined;\n  }\n\n  private async _runPendingCalls() {\n    if (this._pendingCall) {\n      debug(TAG, 'Running pending call');\n      try {\n        await this.exec(this._pendingCall);\n        this.pendingCallResult.next(undefined);\n      } catch (err: any) {\n        this.pendingCallResult.next(err);\n      }\n    }\n  }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport {\n  AbstractControl,\n  FormBuilder,\n  FormGroup,\n  Validators,\n} from '@angular/forms';\nimport { ModalController } from '@ionic/angular';\nimport { InlineEditorComponent } from '../inline-editor/inline-editor.component';\nimport { getFormFieldOrError } from '../utility';\n\n@Component({\n  selector: 'tap-value-editor-modal',\n  templateUrl: './tap-value-editor-modal.component.html',\n  styleUrls: ['./tap-value-editor-modal.component.scss'],\n})\nexport class TapValueEditorModalComponent implements OnInit {\n  @Input() inputOptions: InlineEditorComponent.InputOptions | any = {\n    type: 'text',\n  };\n\n  @Input() set value(v: any) {\n    this.field.setValue(v, { emitEvent: false });\n  }\n\n  field: AbstractControl;\n  form: FormGroup;\n\n  constructor(\n    formBuilder: FormBuilder,\n    private modalController: ModalController\n  ) {\n    this.form = formBuilder.group({\n      field: [\n        '',\n        [\n          Validators.required,\n          Validators.max(this.inputOptions.max),\n          Validators.maxLength(this.inputOptions.maxLength),\n          Validators.min(this.inputOptions.min),\n          Validators.minLength(this.inputOptions.minLength),\n        ],\n      ],\n    });\n    this.field = getFormFieldOrError(this.form, 'field');\n  }\n\n  ngOnInit() {}\n\n  onSubmit() {\n    if (this.form.valid) {\n      console.log('Result', this.field.value);\n      this.modalController.dismiss(\n        {\n          value: this.field.value,\n        },\n        'submit'\n      );\n    }\n  }\n\n  cancel() {\n    this.modalController.dismiss();\n  }\n}\n","<ion-header>\n  <ion-toolbar color=\"primary\">\n    <ion-buttons slot=\"start\">\n      <ion-button fill=\"clear\" (click)=\"cancel()\">\n        <ion-icon name=\"arrow-back-outline\"></ion-icon>\n      </ion-button>\n    </ion-buttons>\n    <ion-title>Edition</ion-title>\n  </ion-toolbar>\n</ion-header>\n<ion-content>\n  <ion-grid>\n    <ion-row justify-content-center align-items-center>\n      <div style=\"margin: auto\">\n        <form\n          (ngSubmit)=\"onSubmit()\"\n          [formGroup]=\"form\"\n          (keydown.enter)=\"onSubmit()\"\n        >\n          <ion-list lines=\"none\">\n            <ion-item>\n              <ion-label position=\"floating\"> Value </ion-label>\n              <ion-input\n                [pattern]=\"inputOptions.pattern\"\n                [placeholder]=\"inputOptions.placeholder\"\n                [type]=\"inputOptions.type\"\n                [formControl]=\"field\"\n                [value]=\"value\"\n              >\n              </ion-input>\n            </ion-item>\n            <ion-item>\n              <ion-buttons slot=\"end\">\n                <ion-button\n                  color=\"primary\"\n                  type=\"submit\"\n                  [disabled]=\"!form.valid\"\n                  (click)=\"onSubmit()\"\n                >\n                  Submit\n                </ion-button>\n              </ion-buttons>\n            </ion-item>\n          </ion-list>\n        </form>\n      </div>\n    </ion-row>\n  </ion-grid>\n</ion-content>\n","import {\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  Input,\n  NgZone,\n  OnDestroy,\n  OnInit,\n  Output,\n} from '@angular/core';\nimport { AlertController, ModalController } from '@ionic/angular';\nimport { isCodeError } from '@iotize/common/error';\nimport { TapClientError } from '@iotize/tap/client/impl';\nimport { EditableValueDataStreamInterface } from '@iotize/tap/data';\nimport { BehaviorSubject, merge, Observable, of, Subject } from 'rxjs';\nimport { filter, shareReplay, startWith, switchMap, tap } from 'rxjs/operators';\nimport { CurrentDeviceService } from '../current-device.service';\nimport { LibError } from '../errors';\nimport { InlineEditorComponent } from '../inline-editor/inline-editor.component';\nimport { isNfcTapRequiredError } from '../nfc/utility';\nimport { PendingCallManager } from '../pending-call-manager';\nimport { TapValueEditorModalComponent } from '../tap-value-editor-modal/tap-value-editor-modal.component';\n\nfunction isTapNotConnectedError(err: Error) {\n  return (\n    isNfcTapRequiredError(err) ||\n    isCodeError(TapClientError.Code.NotConnectedError, err)\n  );\n}\n\n@Component({\n  selector: 'tap-value-editor-container',\n  templateUrl: './tap-value-editor-container.component.html',\n  styleUrls: ['./tap-value-editor-container.component.scss'],\n})\nexport class TapValueEditorContainerComponent implements OnInit, OnDestroy {\n  @Input() button: boolean = false;\n\n  @Input() set variable(\n    v: EditableValueDataStreamInterface<unknown, any> | undefined\n  ) {\n    this.variableChange.next(v);\n  }\n\n  @Input() inputOptions: InlineEditorComponent.InputOptions | any = {\n    type: 'text',\n  };\n\n  /**\n   * Show refresh button\n   */\n  @Input() showRefreshButton = false;\n\n  /**\n   * Show submit button\n   */\n  @Input() showSubmitButton = false;\n\n  /**\n   * Show edit button\n   */\n  @Input() showEditButton = false;\n\n  /**\n   * Enable edition mode\n   */\n  editModeChange = new BehaviorSubject<boolean>(false);\n\n  loadingChange = new BehaviorSubject<boolean>(false);\n\n  /**\n   * Error to display\n   */\n  @Input() error?: Error;\n\n  @Input() lines = 'none';\n\n  @Input() modalEdition: boolean = false;\n\n  /**\n   * Force value to display\n   */\n  @Input() set value(v: any) {\n    this.forceValueChange.next(v);\n  }\n\n  @Output() submit = new EventEmitter<any>();\n\n  @Output() refresh = new EventEmitter<any>();\n\n  pendingSubmitValue?: any;\n\n  valueToSubmit?: any;\n\n  lastReadValue?: any;\n\n  private variableChange = new BehaviorSubject<\n    EditableValueDataStreamInterface<unknown, any> | undefined\n  >(undefined);\n\n  public variableValuesStream: Observable<any> = this.variableChange.pipe(\n    filter((v) => !!v),\n    switchMap((v) => v!.values),\n    tap((v) => {\n      this.lastReadValue = v;\n    })\n  );\n\n  forceValueChange = new Subject<any>();\n\n  valueToDisplay = this.editModeChange.pipe(\n    switchMap((editMode) => {\n      if (editMode || this.pendingSubmitValue !== undefined) {\n        return of(this.valueToSubmit);\n      } else {\n        const lastValue = this.variableChange.value?.valueSnapshot;\n        return merge(\n          this.variableValuesStream.pipe(startWith(lastValue)),\n          this.forceValueChange\n        );\n      }\n    }),\n    shareReplay(1)\n  );\n\n  private pendingCallManager?: PendingCallManager;\n\n  private destroyed = new Subject<void>();\n\n  constructor(\n    private alertDialog: AlertController,\n    private tapService: CurrentDeviceService,\n    private changeDetectorRef: ChangeDetectorRef,\n    private ngZone: NgZone,\n    private modalController: ModalController\n  ) {}\n\n  ngOnInit() {\n    this.pendingCallManager = PendingCallManager.create(this.tapService);\n\n    this.pendingCallManager.pendingCallResult.subscribe((error) => {\n      this.pendingSubmitValue = undefined;\n      this.valueToSubmit = undefined;\n      this.editModeChange.next(false);\n      this.error = error;\n      this.changeDetectorRef.detectChanges();\n    });\n  }\n\n  // hasValueChanged(value: any) {\n  //   return this._lastValueFromDevice !== value;\n  // }\n\n  submitValue() {\n    if (this.valueToSubmit === undefined) {\n      console.warn('No value to submit yet');\n      return;\n    }\n    this._submitValue(this.valueToSubmit);\n  }\n\n  async notifyValueChange(newValue: any, forceWrite = false) {\n    if (forceWrite || this.lastReadValue !== newValue) {\n      await this._submitValue(newValue);\n    }\n  }\n\n  async openErrorDialog(error: Error) {\n    const dialog = await this.alertDialog.create({\n      header: 'Error',\n      message: error.message,\n      buttons: ['Ok'],\n    });\n    await dialog.present();\n  }\n\n  async explainWaitForSubmit() {\n    const alertDialog = await this.alertDialog.create({\n      header: 'Value not sent yet',\n      message: 'New value will be sent to the device once you are reconnected',\n      buttons: ['Ok'],\n    });\n    await alertDialog.present();\n  }\n\n  private async _submitValue(newValue: any) {\n    this.submit.emit(newValue);\n    // OLD System\n    const variable = this.variableChange.value;\n    if (!variable) {\n      this.error = LibError.componentArgumentRequired(\n        this.constructor.name,\n        'variable'\n      );\n      return;\n    }\n    if (!this.pendingCallManager) {\n      return;\n    }\n    console.log(`[${variable.id}]`, 'Submit value', newValue);\n    await this.startAction(\n      this.pendingCallManager\n        .exec(async () => {\n          const result = await variable.write(newValue);\n          this.editModeChange.next(false);\n          this.forceValueChange.next(newValue);\n          this.error = undefined;\n          this.pendingSubmitValue = undefined;\n          return result;\n        })\n        .catch((err: any) => {\n          if (!isTapNotConnectedError(err)) {\n            console.warn(\n              `[${variable.id}]`,\n              `onSubmit value \"${newValue}\" error`,\n              err\n            );\n            this.error = err;\n          } else {\n            this.pendingSubmitValue = newValue;\n            this.valueToSubmit = newValue;\n            this.editModeChange.next(false);\n          }\n        })\n    );\n  }\n\n  public async refreshValue() {\n    this.refresh.next(undefined);\n    const variable = this.variableChange.value;\n    if (variable) {\n      await this.startAction(\n        variable\n          .read()\n          .then((newValue: any) => {\n            this.forceValueChange.next(newValue);\n          })\n          .catch((err: any) => {\n            console.log(err);\n          })\n      );\n    }\n  }\n\n  async enableEditMode() {\n    this.modalEdition ? this.showEditModal() : this.editModeChange.next(true);\n  }\n\n  private async showEditModal() {\n    const lastValue = this.variableChange.value?.valueSnapshot;\n\n    const modal = await this.modalController.create({\n      component: TapValueEditorModalComponent,\n      componentProps: {\n        inputOptions: this.inputOptions,\n        value: lastValue,\n      },\n    });\n    await modal.present();\n    const result = await modal.onDidDismiss();\n    if (result) {\n      if (result.role === 'submit') {\n        const newValue = result.data.value;\n        await this.notifyValueChange(newValue);\n      }\n    }\n  }\n\n  private async startAction(actions: Promise<any>): Promise<any> {\n    this.ngZone.run(async () => {\n      this.loadingChange.next(true);\n      try {\n        return await actions;\n      } catch (err: any) {\n        console.warn('action failed', err);\n      } finally {\n        this.loadingChange.next(false);\n      }\n    });\n  }\n\n  ngOnDestroy(): void {\n    this.destroyed.next();\n    this.destroyed.complete();\n    this.pendingCallManager?.destroy();\n  }\n\n  cancelEdit() {\n    this.pendingCallManager?.cancel();\n    this.error = undefined;\n    this.pendingSubmitValue = undefined;\n    this.valueToSubmit = undefined;\n    this.editModeChange.next(false);\n  }\n}\n","<ion-item\n  style=\"pointer-events: auto\"\n  [lines]=\"lines\"\n  [button]=\"button\"\n  [ngClass]=\"{ 'item-input': editModeChange.value }\"\n>\n  <ng-content></ng-content>\n  <ion-buttons\n    slot=\"end\"\n    *ngIf=\"\n      showEditButton ||\n      showRefreshButton ||\n      error ||\n      pendingSubmitValue !== undefined\n    \"\n  >\n    <ion-button\n      (click)=\"explainWaitForSubmit(); $event.stopPropagation()\"\n      *ngIf=\"pendingSubmitValue !== undefined\"\n      [disabled]=\"false\"\n      color=\"warning\"\n    >\n      <ion-icon name=\"alert-circle\"></ion-icon>\n    </ion-button>\n    <ion-button\n      (click)=\"enableEditMode(); $event.stopPropagation()\"\n      class=\"btn-enable-edit-mode\"\n      *ngIf=\"\n        pendingSubmitValue === undefined &&\n        showEditButton &&\n        !editModeChange.value\n      \"\n    >\n      <ion-icon name=\"create\"></ion-icon>\n    </ion-button>\n    <ion-button\n      (click)=\"submitValue(); $event.stopPropagation()\"\n      *ngIf=\"\n        showSubmitButton &&\n        editModeChange.value &&\n        pendingSubmitValue === undefined\n      \"\n      [disabled]=\"loadingChange | async\"\n      class=\"btn-submit-value\"\n    >\n      <ion-icon name=\"send\"></ion-icon>\n    </ion-button>\n    <ion-button\n      (click)=\"cancelEdit(); $event.stopPropagation()\"\n      *ngIf=\"editModeChange.value || pendingSubmitValue !== undefined\"\n      [disabled]=\"loadingChange | async\"\n      class=\"btn-close-edit-mode\"\n    >\n      <ion-icon name=\"close\"></ion-icon>\n    </ion-button>\n    <ion-button\n      *ngIf=\"showRefreshButton\"\n      (click)=\"refreshValue(); $event.stopPropagation()\"\n      [disabled]=\"loadingChange | async\"\n      class=\"btn-refresh-value\"\n    >\n      <ion-icon name=\"sync\"></ion-icon>\n    </ion-button>\n    <ion-button\n      *ngIf=\"error\"\n      (click)=\"openErrorDialog(error); $event.stopPropagation()\"\n      class=\"btn-show-error\"\n    >\n      <ion-icon slot=\"end\" name=\"alert-circle\" color=\"danger\"></ion-icon>\n    </ion-button>\n  </ion-buttons>\n  <ion-spinner *ngIf=\"loadingChange | async\" slot=\"end\"></ion-spinner>\n</ion-item>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { IonicModule } from '@ionic/angular';\nimport { TapValueEditorContainerComponent } from './tap-value-editor-container.component';\nimport { TapValueEditorModalComponent } from '../tap-value-editor-modal/tap-value-editor-modal.component';\nimport { ReactiveFormsModule } from '@angular/forms';\n\n@NgModule({\n  declarations: [\n    TapValueEditorContainerComponent,\n    TapValueEditorModalComponent,\n  ],\n  exports: [TapValueEditorContainerComponent],\n  imports: [CommonModule, IonicModule, ReactiveFormsModule],\n})\nexport class TapValueEditorContainerModule {}\n","import { NgModule } from '@angular/core';\nimport { InlineEditorComponent } from './inline-editor.component';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { LibCommonModule } from '../lib-common/lib-common.module';\nimport { ValueOrDefaultPipe } from './value-or-default.pipe';\nimport { TapValueEditorContainerModule } from '../tap-value-editor-container/tap-value-editor-container.module';\n\n@NgModule({\n  declarations: [InlineEditorComponent, ValueOrDefaultPipe],\n  exports: [InlineEditorComponent],\n  imports: [\n    LibCommonModule,\n    ReactiveFormsModule,\n    TapValueEditorContainerModule,\n  ],\n})\nexport class InlineEditorModule {}\n","import { Injectable } from '@angular/core';\n\n/**\n * This class is a replacement for the remove Events class of @ionic/angular version ^5\n * TODO use observable instead\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class GlobalEventsService {\n  private _channels: any = [];\n\n  /**\n   * Subscribe to an event topic. Events that get posted to that topic will trigger the provided handler.\n   *\n   * @param topic the topic to subscribe to\n   * @param handler the event handler\n   */\n  subscribe(topic: string, ...handlers: Function[]) {\n    if (!this._channels[topic]) {\n      this._channels[topic] = [];\n    }\n    handlers.forEach((handler) => {\n      this._channels[topic].push(handler);\n    });\n  }\n\n  /**\n   * Unsubscribe from the given topic. Your handler will no longer receive events published to this topic.\n   *\n   * @param topic the topic to unsubscribe from\n   * @param handler the event handler\n   *\n   * @return true if a handler was removed\n   */\n  unsubscribe(topic: string, handler?: Function) {\n    const t = this._channels[topic];\n    if (!t) {\n      // Wasn't found, wasn't removed\n      return false;\n    }\n\n    if (!handler) {\n      // Remove all handlers for this topic\n      delete this._channels[topic];\n      return true;\n    }\n\n    // We need to find and remove a specific handler\n    const i = t.indexOf(handler);\n\n    if (i < 0) {\n      // Wasn't found, wasn't removed\n      return false;\n    }\n\n    t.splice(i, 1);\n\n    // If the channel is empty now, remove it from the channel map\n    if (!t.length) {\n      delete this._channels[topic];\n    }\n\n    return true;\n  }\n\n  /**\n   * Publish an event to the given topic.\n   *\n   * @param topic the topic to publish to\n   * @param eventData the data to send as the event\n   */\n  publish(topic: string, ...args: any[]) {\n    const t = this._channels[topic];\n    if (!t) {\n      return null;\n    }\n\n    const responses: any[] = [];\n    t.forEach((handler: any) => {\n      responses.push(handler(...args));\n    });\n    return responses;\n  }\n}\n","import { TapResponse } from '@iotize/tap';\nimport { BodyConverter, ResultCode } from '@iotize/tap/client/api';\nimport { TapVariable } from '@iotize/tap/data';\nimport { converters } from '@iotize/tap/service/core';\n\nexport class MockVariable<DataType = number> extends TapVariable<\n  DataType,\n  string\n> {\n  constructor(id: string) {\n    super(id, {\n      config: {\n        id: 0,\n      },\n      converter: converters.uint32 as unknown as BodyConverter<DataType>,\n      variableService: {\n        getValue: async () => {\n          const value = 10;\n          return TapResponse.create(\n            ResultCode.CONTENT,\n            converters.uint32.encode(value)\n          );\n        },\n        setValue: async (id: number, value: Uint8Array) => {\n          return TapResponse.SUCCESS();\n        },\n      },\n    });\n  }\n}\n","import '@iotize/tap/service/impl/interface';\n\nimport { ServiceCallType, Tap, TapResponse } from '@iotize/tap';\nimport { Buffer } from 'buffer';\nimport { Observable } from 'rxjs';\nimport { TAP_REQUEST_FRAME_HEADER_LENGTH } from '@iotize/tap/client/api';\n\nexport const DEFAULT_TAP_REQUEST_MAX_SIZE_OPTIONS = {\n  maxRequestByteSize: 180,\n  maxResponseByteSize: 200,\n};\n\nexport interface FixedResponseBodySizeServiceCall<BodyType, ReturnType> {\n  call: ServiceCallType<BodyType, ReturnType>;\n  responseBodySize: number;\n}\n\n/**\n * Compute tap request call size for a multi request\n * @param chunk\n * @returns\n */\nexport const computeMultiTapRequestCallSize = (chunk: ServiceCallType) => {\n  let bodyLength = computeBodyLength(chunk);\n  return (\n    2 + // Request length\n    TAP_REQUEST_FRAME_HEADER_LENGTH + // GET /A/B/C\n    bodyLength +\n    1 // expected return code\n  );\n};\n\n/**\n * @deprecated use computeMultiTapRequestCallSize instead\n */\nexport const computeTapRequestCallSize = computeMultiTapRequestCallSize;\n\nexport function createSingleChunkMultiTapRequestCalls(\n  calls: FixedResponseBodySizeServiceCall<unknown, unknown>[],\n  index: number = 0,\n  {\n    maxResponseByteSize,\n    maxRequestByteSize,\n  }: {\n    maxResponseByteSize: number;\n    maxRequestByteSize: number;\n  } = DEFAULT_TAP_REQUEST_MAX_SIZE_OPTIONS\n) {\n  let totalResponseByteSize = 0;\n  let totalRequestByteSize = 0;\n\n  const chunck: ServiceCallType[] = [];\n  if (index >= calls.length) {\n    return {\n      calls: [],\n      nextIndex: undefined,\n    };\n  }\n  for (; index < calls.length; index++) {\n    const { call, responseBodySize } = calls[index];\n    const tapRequestByteSize = computeMultiTapRequestCallSize(call);\n    totalResponseByteSize += computeMultiTapResponseSize(responseBodySize);\n    totalRequestByteSize += tapRequestByteSize;\n    if (\n      chunck.length > 0 &&\n      (totalResponseByteSize > maxResponseByteSize ||\n        totalRequestByteSize > maxRequestByteSize)\n    ) {\n      return {\n        calls: chunck,\n        nextIndex: index,\n      };\n    } else {\n      chunck.push(call);\n    }\n  }\n  return {\n    nextIndex: undefined,\n    calls: chunck,\n  };\n}\n\nexport function chunkMultiTapRequestCalls(\n  calls: FixedResponseBodySizeServiceCall<unknown, unknown>[],\n  options: {\n    maxRequestByteSize: number;\n    maxResponseByteSize: number;\n  } = DEFAULT_TAP_REQUEST_MAX_SIZE_OPTIONS\n): ServiceCallType[][] {\n  let chuncks: ServiceCallType[][] = [];\n  let nextIndex: number | undefined = 0;\n  while (nextIndex !== undefined) {\n    const nextChunk = createSingleChunkMultiTapRequestCalls(\n      calls,\n      nextIndex,\n      options\n    );\n    nextIndex = nextChunk.nextIndex;\n    chuncks.push(nextChunk.calls);\n  }\n  return chuncks;\n}\n\nexport function createMultiTapRequestCallChuncksExecutor(\n  tap: Tap,\n  chunks: ServiceCallType[][]\n) {\n  return new Observable<{ index: number; responses: TapResponse<unknown>[] }>(\n    (emitter) => {\n      let stop = false;\n      (async () => {\n        try {\n          for (let index = 0; index < chunks.length; index++) {\n            if (stop) {\n              return;\n            }\n            const chunck = chunks[index];\n            let responses: TapResponse<unknown>[];\n            if (chunck.length === 1) {\n              responses = [await tap.lwm2m.execute(chunck[0])];\n            } else {\n              responses = await tap.service.interface.executeMultipleCalls(\n                chunck\n              );\n            }\n            emitter.next({\n              index,\n              responses,\n            });\n          }\n          emitter.complete();\n        } catch (err) {\n          emitter.error(err);\n        }\n      })();\n      return () => {\n        stop = true;\n      };\n    }\n  );\n}\n\nfunction computeBodyLength(chunk: ServiceCallType<any, any>): number {\n  if (chunk.body !== undefined) {\n    if (chunk.body instanceof Uint8Array || chunk.body instanceof Buffer) {\n      return chunk.body.length;\n    } else {\n      if (chunk.bodyEncoder) {\n        try {\n          const encoded =\n            typeof chunk.bodyEncoder === 'function'\n              ? chunk.bodyEncoder(chunk.body)\n              : chunk.bodyEncoder.encode(chunk.body);\n          return encoded.length;\n        } catch (err) {\n          console.warn(\n            `Filed to encode body to compute body length`,\n            chunk,\n            err\n          );\n          return 0;\n        }\n      } else {\n        console.warn(\n          `Found body but no body encoder provider to this Tap request`,\n          chunk\n        );\n        return 0;\n      }\n    }\n  } else {\n    return 0;\n  }\n}\nfunction computeMultiTapResponseSize(responseBodySize: number) {\n  return (\n    responseBodySize +\n    2 + // multi_response_frame.response_len\n    1 // tap_response_frame.status;\n  );\n}\n","import {\n  Ndef,\n  NdefEvent,\n  NdefRecord,\n  NdefTag,\n  NFC,\n  NfcUtil,\n} from '@awesome-cordova-plugins/nfc/ngx';\nimport { fromEvent, NEVER, Observable } from 'rxjs';\nimport { RecoverableTapStateEvent } from '../tap-scanner/tap-scanner-nfc/nfc-service.service';\nimport { CordovaInterface } from '@iotize/device-com-nfc.cordova';\nimport { hexStringToBuffer } from '@iotize/common/byte-converter';\n\nexport { Ndef, NdefEvent, NdefRecord, NdefTag, NFC, NfcUtil };\n\ndeclare var cordova: any; // TODO typing\ndeclare var nfc: CordovaInterface;\n\ndeclare module '@awesome-cordova-plugins/nfc/ngx' {\n  export interface NFC {\n    addTapDeviceListener(\n      success?: () => void,\n      failure?: (err: Error) => void\n    ): Observable<RecoverableTapStateEvent>;\n\n    transceiveTap(input: Uint8Array): Promise<Uint8Array>;\n\n    beginSessionFromTech(tech: string, alertMessage?: string): Promise<void>;\n    closeSession(): Promise<void>;\n\n    connectRaw(tech: string, timeout?: number): Promise<void>;\n\n    setTapDeviceDiscoveryEnabled(v: boolean): Promise<void>;\n  }\n}\n\nexport const addTapDeviceListenerImpl = (\n  success?: () => void,\n  failure?: (err: Error) => void\n): Observable<RecoverableTapStateEvent> => {\n  try {\n    const obs = fromEvent<RecoverableTapStateEvent>(document, 'nfc-tap-device');\n    cordova.exec(success, failure, 'NfcPlugin', 'registerTapDevice');\n    return obs;\n  } catch (err: any) {\n    if (failure) {\n      failure(err);\n    }\n    return NEVER;\n  }\n};\n\nNFC.prototype.addTapDeviceListener = addTapDeviceListenerImpl;\n\nexport const transceiveTapImpl = async (\n  data: Uint8Array\n): Promise<Uint8Array> => {\n  const result = await nfc.transceiveTap(data);\n  if (typeof result === 'string') {\n    return hexStringToBuffer(result);\n  } else {\n    const errorMsg =\n      typeof result === 'object' && 'error' in result\n        ? result['error']\n        : `Transceive Tap returned an invalid response type ${typeof result}`;\n    throw new Error(errorMsg);\n  }\n};\n\nNFC.prototype.transceiveTap = transceiveTapImpl;\n\nexport const beginSessionFromTechImpl = async (tech: string, alertMessage?: string): Promise<void> => {\n  return await nfc.beginSessionFromTech(tech, alertMessage);\n};\n\nNFC.prototype.beginSessionFromTech = beginSessionFromTechImpl;\n\nexport const closeSessionImpl = async (): Promise<void> => {\n  return await nfc.endSession();\n};\n\nNFC.prototype.closeSession = closeSessionImpl;\n\nexport const connectRawImpl = async (\n  tech: string,\n  timeout?: number\n): Promise<void> => {\n  return await nfc.connectRaw(tech, timeout);\n};\n\nNFC.prototype.connectRaw = connectRawImpl;\n\nexport const setTapDeviceDiscoveryEnabled = async (\n  enabled: boolean\n): Promise<void> => {\n  return await nfc.setTapDeviceDiscoveryEnabled(enabled);\n};\n\nNFC.prototype.setTapDeviceDiscoveryEnabled = setTapDeviceDiscoveryEnabled;\n","import { Injectable } from '@angular/core';\nimport { Platform } from '@ionic/angular';\nimport { toError } from '@iotize/app-common';\nimport {\n  bufferToHexString,\n  hexStringToBuffer,\n} from '@iotize/common/byte-converter';\nimport { EncryptionOptions } from '@iotize/tap/auth';\nimport { NEVER, Observable, ReplaySubject, Subject } from 'rxjs';\nimport { catchError, filter, share, switchMap, tap } from 'rxjs/operators';\nimport { debug } from '../../logger';\nimport { NFC, NdefEvent, NdefTag } from '../../nfc';\nimport { TagDiscoveredEvent } from './definitions';\n\nconst TAG = 'NfcService';\n\nexport interface RecoverableTapStateEvent {\n  tag: NdefTag;\n  tap: RecoverableTapState;\n}\n\nexport interface RecoverableTapState {\n  nfcPairingDone?: boolean;\n  encryption?: EncryptionOptions;\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class NfcService {\n  private _tagDiscoveredListener = new Subject<\n    Observable<TagDiscoveredEvent>\n  >();\n\n  readonly tagDiscoveredEvents: Observable<TagDiscoveredEvent> =\n    this._tagDiscoveredListener.pipe(\n      switchMap((v) => v),\n      share()\n    );\n\n  private readonly _ndefDiscoveredListener = new ReplaySubject<\n    Observable<NdefEvent>\n  >();\n\n  readonly ndefDiscoveredEvents = this._ndefDiscoveredListener.pipe(\n    switchMap((v) => v)\n  );\n\n  private _tapDeviceDiscoveredEvent = new ReplaySubject<\n    Observable<RecoverableTapStateEvent>\n  >();\n\n  readonly tapDeviceDiscoveredEvent = this._tapDeviceDiscoveredEvent.pipe(\n    switchMap((v) => v)\n  );\n\n  private _setupTapDeviceDiscoveredListenerPromise?: Promise<void>;\n  private _setupTagDiscoveredListenerPromise?: Promise<void>;\n\n  constructor(public nfc: NFC, private platform: Platform) {}\n\n  async write(data: any[]): Promise<void> {\n    try {\n      await this.nfc.write(data);\n    } catch (err) {\n      if (err === 'cordova_not_available') {\n        err = new Error(`NFC is not available on this device`);\n      }\n      throw err;\n    }\n  }\n\n  async transceive(data: Uint8Array): Promise<Uint8Array> {\n    const rawResponse = await this.nfc.transceive(data);\n    const response = parseNFCTransceiveResponse(data, rawResponse);\n    console.debug(\n      `NFC transceive ${bufferToHexString(data)} => 0x${bufferToHexString(\n        response\n      )}`\n    );\n    return response;\n  }\n\n  async isEnabled(): Promise<boolean> {\n    try {\n      return await this.nfc.enabled();\n    } catch (err) {\n      console.error('NFC enabled error', err);\n      return false;\n    }\n  }\n\n  async setupTagDiscoveredListenerOnce() {\n    if (this._setupTagDiscoveredListenerPromise) {\n      return await this._setupTagDiscoveredListenerPromise;\n    } else {\n      return await this.setupTagDiscoveredListener();\n    }\n  }\n\n  async setupTapDeviceDiscoveredListener(): Promise<void> {\n    this._setupTapDeviceDiscoveredListenerPromise =\n      createCatchSafePromise<void>((resolve, reject) => {\n        const tapDeviceDiscoveredListener = this.nfc.addTapDeviceListener(\n          () => {\n            resolve();\n          },\n          (err?: Error) => {\n            reject(err);\n          }\n        );\n        this._tapDeviceDiscoveredEvent.next(tapDeviceDiscoveredListener);\n      }, 5000);\n    await this._setupTapDeviceDiscoveredListenerPromise;\n  }\n\n  async setupTagDiscoveredListener(): Promise<void> {\n    this._setupTagDiscoveredListenerPromise = createCatchSafePromise<void>(\n      (resolve, reject) => {\n        debug(TAG, 'Adding TAG discovered listener...');\n        this._tagDiscoveredListener.next(\n          this.nfc\n            .addTagDiscoveredListener(\n              () => {\n                debug(TAG, 'NFC Tag discovered listener OK!');\n                resolve();\n              },\n              (error: Error) => {\n                debug(TAG, `NFC Tag discovered listener didn't start`, error);\n                reject(error);\n              }\n            )\n            .pipe(\n              catchError((err) => {\n                const error = toError(err);\n                console.warn(\n                  `NFC Tag listener failed to initialize: ${error.message}`,\n                  err\n                );\n                reject(error);\n                return NEVER;\n              }),\n              filter((event) => !!event) // First event is undefined ...\n            )\n        );\n      },\n      5000\n    );\n    await this._setupTagDiscoveredListenerPromise;\n  }\n\n  async setupNdefListener(): Promise<void> {\n    return await createCatchSafePromise<void>((resolve, _reject) => {\n      this._ndefDiscoveredListener.next(\n        this.nfc\n          .addNdefListener() // @warning callbacks are never called...\n          .pipe(\n            catchError((err) => {\n              const error = toError(err);\n              console.warn(\n                `NDEF listener failed to initialize: ${error.message}`,\n                err\n              );\n              return NEVER;\n            })\n          )\n      );\n      resolve();\n    }, 5000);\n  }\n\n  async closeNFC() {\n    await this.nfc.close();\n  }\n\n  /**\n   * iOS specific commands\n   */\n  async beginSessionFromTech(\n    tech: string,\n    alertMessage?: string\n  ): Promise<void> {\n    if (!this.platform.is('ios')) {\n      return;\n    }\n    return this.nfc.beginSessionFromTech(tech, alertMessage);\n  }\n\n  async closeSession(): Promise<void> {\n    return this.nfc.closeSession();\n  }\n}\n\nfunction createCatchSafePromise<T>(\n  callback: (\n    resolve: (value: T | PromiseLike<T>) => void,\n    reject: (reason?: any) => void\n  ) => void,\n  timeout?: number\n): Promise<T> {\n  return new Promise<T>((resolve, reject) => {\n    if (timeout) {\n      setTimeout(() => {\n        reject(\n          new Error(\n            `Native code did not respond before timeout of ${timeout}ms`\n          )\n        );\n      }, timeout);\n    }\n    try {\n      callback(resolve, reject);\n    } catch (error) {\n      reject(error);\n    }\n  });\n}\n\nfunction parseNFCTransceiveResponse(\n  frame: Uint8Array,\n  resultBufferOrString:\n    | ArrayBuffer\n    | string\n    | { error?: string }\n    | undefined\n    | null\n) {\n  if (!resultBufferOrString) {\n    return new Uint8Array(0);\n  }\n  if (typeof resultBufferOrString === 'object') {\n    if ('error' in resultBufferOrString) {\n      const errorString =\n        resultBufferOrString.error === 'cordova_not_available'\n          ? `NFC is not available`\n          : resultBufferOrString.error;\n      throw new Error(\n        `Failed to NFC transceive frame 0x${bufferToHexString(\n          frame\n        )} (error: ${errorString})`\n      );\n    }\n  }\n\n  if (typeof resultBufferOrString === 'string') {\n    return hexStringToBuffer(resultBufferOrString);\n  } else {\n    return Buffer.from(resultBufferOrString);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { NfcTag } from '@awesome-cordova-plugins/nfc/ngx';\nimport { Platform } from '@ionic/angular';\nimport { NdefTag } from '@iotize/device-com-nfc.cordova';\nimport { merge, Observable, Subject } from 'rxjs';\nimport { filter, map, share } from 'rxjs/operators';\nimport { NfcService, RecoverableTapState } from './nfc-service.service';\n\nexport interface TapNfcEvent {\n  tag: NfcTag;\n  tap?: RecoverableTapState | undefined;\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class TapScannerNfcService {\n  private _iosMockTapEvent = new Subject<{\n    tag: NdefTag;\n  }>();\n\n  /**\n   * TODO refractor\n   */\n  tapEvent: Observable<TapNfcEvent> = merge(\n    this._iosMockTapEvent,\n    // TODO fix: tagDiscoveredEvents not listened\n    this.nfcService.tagDiscoveredEvents.pipe(\n      filter((event) => isIoTizeTapTag(event.tag)),\n      map((event) => {\n        return {\n          tag: event.tag,\n          tap: undefined,\n        };\n      }),\n      share()\n    ),\n    // NFC tap devices already initialized\n    this.nfcService.tapDeviceDiscoveredEvent.pipe(\n      filter((event) => {\n        if (!event.tag || !event.tap) {\n          return false;\n        }\n        return true;\n      }),\n      share()\n    )\n  );\n\n  isStartScanAvailable = this.platform.is('ios');\n\n  constructor(private nfcService: NfcService, private platform: Platform) {}\n\n  async listenToNfcTaps() {\n    await this.nfcService.setupTapDeviceDiscoveredListener();\n    await this.nfcService.setupNdefListener();\n  }\n\n  async init() {\n    if (this.platform.is('android')) {\n      await this.nfcService.setupTapDeviceDiscoveredListener();\n    }\n  }\n\n  start() {\n    if (this.isStartScanAvailable) {\n      this.nfcService.beginSessionFromTech('NfcV', 'Bring your phone close to the Tap');\n    }\n  }\n}\n\n/**\n * Try to guess if it's an IoTize Tap NFC tag\n * Examples:\n * Not IoTize Tag: {\"isTrusted\":false,\"tag\":{\"id\":[-77,-84,-7,-55,2,36,2,-32],\"techTypes\":[\"android.nfc.tech.NfcV\",\"android.nfc.tech.NdefFormatable\"]}}\n * IoTize Tag: {\"id\":[60,-91,-67,-79,0,36,2,-32],\"techTypes\":[\"android.nfc.tech.NfcV\",\"android.nfc.tech.Ndef\"],\"type\":\"android.ndef.unknown\",\"maxSize\":102,\"isWritable\":false,\"ndefMessage\":[{\"tnf\":1,\"type\":[85],\"id\":[],\"payload\":[0,104,116,116,112,115,58,47,47,119,119,119,46,105,111,116,105,122,101,46,99,111,109]},{\"tnf\":4,\"type\":[97,110,100,114,111,105,100,46,99,111,109,58,112,107,103],\"id\":[],\"payload\":[99,111,109,46,105,111,116,105,122,101,46,97,112,112,46,115,101,110,115,111,114,100,101,109,111]},{\"tnf\":5,\"type\":[],\"id\":[],\"payload\":[64,32,-16,-100,-43,-77,112]},{\"tnf\":1,\"type\":[84],\"id\":[],\"payload\":[0,83,101,110,115,111,114,32,100,101,109,111,95,48,49,48,49,70]}],\"canMakeReadOnly\":false}\n * @param tag\n * @returns\n */\nfunction isIoTizeTapTag(tag: NfcTag | undefined): boolean {\n  if (!tag) {\n    return false;\n  }\n  const hasNfc5 = !!tag.techTypes?.find((tech) => tech.endsWith('NfcV'));\n  if (!hasNfc5) {\n    return false;\n  }\n  if (!tag.ndefMessage?.length) {\n    return false;\n  }\n  return true;\n}\n","import { Injectable } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { filter, share, tap } from 'rxjs/operators';\nimport { CurrentDeviceService } from './current-device.service';\nimport { TapScannerNfcService } from './tap-scanner/tap-scanner-nfc/tap-scanner-nfc.service';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class NfcReTapService {\n  /**\n   * Event trigger when user tap the same tap he is already connected to\n   */\n  reTapEvent = this.nfcTapScanner.tapEvent.pipe(\n    filter((event) => {\n      return this.tapService.isSameTag(event.tag);\n    }),\n    tap((event) => {\n      const tap = this.tapService.tapOrUndefined;\n      if (!tap) {\n        return;\n      }\n      // if encryption is enabled, we need to refresh encryption keys when new nfc tap occures on the same tag\n      if (event.tap?.encryption) {\n        const {\n          encryption,\n          keys,\n          frameCounter,\n          initializationVectorResetPeriod,\n        } = event.tap.encryption;\n        tap.encryption.setEncryptedFrameCounter(frameCounter);\n        tap.encryption.setInitializationVectorRefreshPeriod(\n          initializationVectorResetPeriod\n        );\n        tap.encryption.setEncryptionKeys(keys);\n        if (encryption) {\n          tap.encryption.resume();\n        } else {\n          tap.encryption.pause();\n        }\n      }\n    }),\n    share()\n  );\n\n  private _sub?: Subscription;\n\n  constructor(\n    private nfcTapScanner: TapScannerNfcService,\n    private tapService: CurrentDeviceService\n  ) {}\n\n  initialize() {\n    if (!this._sub) {\n      this._sub = this.reTapEvent.subscribe();\n    }\n    return this._sub;\n  }\n\n  tearDown() {\n    this._sub?.unsubscribe();\n  }\n}\n","/**\n * @deprecated use TapResourceKey directly instead\n */\nexport enum TapInfo {\n  serialNumber = '/device/serial-number',\n  CloudUploadPeriod = '/cloud/data-log/upload-period',\n  modelName = '/device/firmware-flavor',\n  tapManufacturer = '/device/manufacturer',\n  HostProtocol = '/interface/current-host-protocol',\n  appName = '/interface/app-name',\n  configVersion = '/interface/config-version',\n  CloudEndpoint = '/mqtt/broker-endpoint',\n  MqttRequestTopic = '/mqtt/request-topic',\n  TargetProtocolConfiguration = '/target/raw-protocol-configuration', // /1027//21 Virtual\n  MqttResponseTopic = '/mqtt/response-topic',\n  CloudKey = '/mqtt/password',\n  MqttBrokerHostname = '/mqtt/broker-hostname',\n  MqttBrokerPort = '/mqtt/broker-port',\n  MqttPassword = '/mqtt/password',\n  MqttRelayNetKey = '/mqtt/relay-net-key',\n  MqttClientId = '/mqtt/client-id',\n  MqttUsername = '/mqtt/username',\n  NFCConnectionPriority = '/interface/nfc/connection-priority',\n  NFCPairingMode = '/interface/nfc/pairing-mode',\n  DataLogPacketCount = '/data-log/packet-count',\n  DataLogMaxPacketCount = '/data-log/max-packet-count',\n  IsTargetConnected = '/target/connected',\n  universalLink = '/interface/universal-link',\n  androidApplicationRecord = '/interface/android-application-id',\n  useEncryption = '/interface/security-options/scram/enabled',\n  InterfaceSecurityScramActivated = '/interface/security-options/scram/enabled',\n  lockFactoryReset = '/interface/security-options/hardware-factory-reset/enabled',\n  InterfaceSecurityDisableHardwareFactoryReset = '/interface/security-options/hardware-factory-reset/disabled',\n  InterfaceSecurityDisabledResourceFactoryReset = '/interface/security-options/lwm2m-factory-reset/disabled',\n  InterfaceSecurityDisabledLoginWithUID = '/interface/security-options/admin-login-with-uid/disabled',\n  isLoginWithUIDEnabled = '/interface/security-options/admin-login-with-uid/enabled',\n  isLWM2MFactoryResetEnabled = '/interface/security-options/lwm2m-factory-reset/enabled',\n  hashPassword = '/interface/security-options/hash-password/enabled',\n  lockOptions = '/interface/security-options',\n  appPath = '/interface/app-path-resolved',\n  ProfileName = '/group/{groupId}/name',\n  parentGroupId = '/group/{groupId}/alias',\n  ProfileSessionLifeTime = '/group/{groupId}/session-lifetime',\n  TargetProtocol = '/target/protocol',\n  availableHostProtocols = '/interface/available-host-protocols',\n  authorizedHostProtocols = '/interface/authorized-host-protocol',\n  BundleDatalogPeriod = '/bundle/{bundleId}/data-log-period',\n  tapFirmwareVersion = '/device/firmware-version',\n  DatalogAcquisitionRunning = '/data-log/run',\n  AdpStats = '/tapnpass/status',\n  AdpVersion = '/tapnpass/version',\n  SinglePacketInfo = '/single-packet/info',\n  protocolHostInactivityPeriod = '/interface/host-inactivity-period',\n  bleMacAddress = '/ble/address',\n  WifiHostname = '/wifi/hostname',\n  WifiSSID = '/wifi/ssid',\n  WifiSSIDVisibility = '/wifi/ssid-visibility',\n  WifiKeyVisibility = '/wifi/key-visibility',\n  WifiTxPower = '/wifi/tx-power',\n  NetworkInfraIp = '/wifi/ip',\n  NetworkIpMask = '/wifi/ip-mask',\n  NetworkGatewayIp = '/wifi/gateway-ip',\n  NetworkDNSIp = '/wifi/dns-ip',\n  WifiMode = '/wifi/mode',\n  isHostProtocolAuthorized = '/interface/authorized-host-protocol/{hostProtocol}',\n  WifiKey = '/wifi/key',\n  bundleName = '/bundle/{bundleId}/name',\n  variableMetaData = '/variable/{variableId}/raw-meta',\n  profilePassword = '/group/{groupId}/change-password',\n  ProductKey = '/interface/product-key',\n  DeviceMemoryFree = '/device/memory-free',\n  TimeLocalTime = '/time/local-time',\n  TimeNtpServer = '/time/ntp-server',\n  TimeTimeZone = '/time/time-zone',\n  InterfaceProductCode = '/interface/product-code',\n  DeviceLastErrorCode = '/device/last-error-code',\n  NFCAutologProfileId = '/interface/nfc-autolog-profile-id',\n  /**\n   * @deprecated\n   */\n  configPath = '',\n  scramIterationNumber = '/scram/hash-iteration',\n  InterfaceSpecialFeatureSWDDirect = '/interface/special-feature/swd-direct',\n  InterfaceSpecialFeatureSerial = '/interface/special-feature/serial',\n  InterfaceSpecialFeatureModbusDirect = '/interface/special-feature/modbus-direct',\n}\n","import { InjectionToken } from '@angular/core';\nimport { TapConfigItemBase } from '../tap-config-item/tap-config-item-base';\n\nexport const TAP_INFO_RESOLVER_CONFIG = new InjectionToken<TapConfigItemBase[]>(\n  'TAP_INFO_RESOLVER_CONFIG'\n);\n","import { Inject, Injectable } from '@angular/core';\nimport { TapConfigItemBase } from '../tap-config-item/tap-config-item-base';\nimport { TAP_INFO_RESOLVER_CONFIG } from './constants';\nimport { TapInfoKey } from './definitions';\n\nconst TAG = 'TapInfoConfigService';\n\n/**\n * Will be renamed as TapConfigSyncService\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class TapInfoConfigService {\n  constructor(\n    @Inject(TAP_INFO_RESOLVER_CONFIG) public items: TapConfigItemBase[]\n  ) {}\n\n  /**\n   * Get key configuration or undefined if key does not exist\n   * @param key: TapInfo\n   */\n  findByKey(key: TapInfoKey): TapConfigItemBase | undefined {\n    return this.items.find((value) => value.key === key.key);\n  }\n}\n","import { TapInfoKey, TapInfoKeyObjectOrString } from './definitions';\nimport { TapResourceKey } from './tap-resource-api';\n\nexport function toTapInfoKeyObject(key: TapInfoKeyObjectOrString): TapInfoKey {\n  return typeof key === 'string' ? { key: key as TapResourceKey } : key;\n}\n\nexport function createCacheKey(info: TapInfoKey) {\n  const { key, params } = info;\n  return `${key}${params && params.length > 0 ? `-${params.join('-')}` : ''}`;\n}\n\nexport function toTapInfoKeyEquals(a: TapInfoKey, b: TapInfoKey) {\n  return createCacheKey(a) === createCacheKey(b);\n}\n","import { Injectable } from '@angular/core';\nimport { isCodeError } from '@iotize/common/error';\nimport { TapError, TapResponse, TapResponseStatusError } from '@iotize/tap';\nimport { BehaviorSubject, Observable, ReplaySubject, Subject } from 'rxjs';\nimport { distinctUntilChanged, filter, first, map } from 'rxjs/operators';\nimport { debug } from '../logger';\nimport {\n  GetResponseType,\n  TapInfoHolder,\n  TapInfoKey,\n  TapInfoKeyObjectOrString,\n} from './definitions';\nimport { TapInfoConfigService } from './tap-info-config.service';\nimport { createCacheKey, toTapInfoKeyObject } from './utility';\n\nconst TAG = 'TapInfoCacheService';\n\ntype TapInfoCacheKey = string;\n\n/**\n * Will be renamed as TapConfigSyncService\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class TapInfoCacheService {\n  /**\n   * Observables of infos\n   */\n  private _infoChange: Record<TapInfoCacheKey, BehaviorSubject<TapInfoHolder>> =\n    {};\n\n  constructor(private tapInfoConfigService: TapInfoConfigService) {}\n\n  /**\n   * Subscribe to value change. Will be notified each time value for the given key changes\n   * @param key\n   * @returns\n   */\n  valueChange<T>(key: TapInfoKeyObjectOrString): Observable<T> {\n    return this.infoChange<T>(key).pipe(\n      filter((v) => !v.error && v.value !== undefined),\n      map((v) => {\n        return v.value as T;\n      }),\n      distinctUntilChanged()\n    );\n  }\n\n  /**\n   * If value has already been loaded, it will be returned otherwise it will wait for a value to be resolved\n   * @param info\n   * @returns\n   */\n  value<T = GetResponseType<TapInfoKeyObjectOrString>>(\n    info: TapInfoKeyObjectOrString\n  ): Promise<T> {\n    return this.valueChange<T>(info).pipe(first()).toPromise() as Promise<T>; // TODO fix type\n  }\n\n  infoChange<T>(key: TapInfoKeyObjectOrString): Observable<TapInfoHolder<T>> {\n    return this._createInfoObservableIfRequired(toTapInfoKeyObject(key));\n  }\n\n  clearKeys(keys: TapInfoKeyObjectOrString[]) {\n    keys.forEach((key) => {\n      this.clearKey(key);\n    });\n  }\n\n  getInfoSnapshot<T>(\n    key: TapInfoKeyObjectOrString\n  ): TapInfoHolder<T> | undefined {\n    return this._infoChange[createCacheKey(toTapInfoKeyObject(key))]?.value;\n  }\n\n  clearKey(key: TapInfoKeyObjectOrString) {\n    const objectKey = toTapInfoKeyObject(key);\n    if (this.isInfoLoaded(objectKey)) {\n      const cacheKey = createCacheKey(objectKey);\n      debug(TAG, `clear key \"${cacheKey}\"`);\n      // delete this._info[cacheKey];\n      this._infoChange[cacheKey]?.next({\n        loadDate: undefined,\n      });\n    }\n  }\n\n  reset() {\n    Object.keys(this._infoChange).forEach((key) => {\n      this.clearKey(key as any);\n    });\n    // this._info = {};\n  }\n\n  /**\n   * Return true if value has been loaded, even if it has errors\n   */\n  isInfoLoaded(key: TapInfoKeyObjectOrString): boolean {\n    const cacheKey = createCacheKey(toTapInfoKeyObject(key));\n    return this._infoChange[cacheKey]?.value.loadDate !== undefined;\n  }\n\n  /**\n   * Returns true if value has been loaded.\n   */\n  isValueLoaded(key: TapInfoKey) {\n    const valueHolder = this.getInfoSnapshot(key);\n    if (!valueHolder) {\n      return;\n    }\n    return (\n      valueHolder.value !== undefined ||\n      (valueHolder.error &&\n        isCodeError<TapResponseStatusError>(\n          TapError.Code.ResponseStatusError,\n          valueHolder.error\n        ))\n    );\n  }\n\n  setKeyError(key: TapInfoKeyObjectOrString, error: Error): TapInfoHolder {\n    return this.setKeyInfo(key, {\n      error: error,\n      loadDate: new Date(),\n    });\n  }\n\n  setKeyValue<T>(key: TapInfoKeyObjectOrString, value: T): TapInfoHolder {\n    return this.setKeyInfo(key, {\n      value,\n      loadDate: new Date(),\n    });\n  }\n\n  setKeyFromResponse(key: TapInfoKeyObjectOrString, r: TapResponse<any>) {\n    try {\n      this.setKeyValue(key, r.body());\n    } catch (err) {\n      this.setKeyError(key, err as Error);\n    }\n  }\n\n  setKeyInfo(key: TapInfoKeyObjectOrString, value: TapInfoHolder) {\n    key = toTapInfoKeyObject(key);\n    const cacheKey = createCacheKey(key);\n    debug(TAG, `setKeyValue \"${cacheKey}\": `, value);\n    if (value.error) {\n      this.notifyKeyError(key, value.error);\n    } else {\n      this.notifyNewValue(key, value.value);\n    }\n    return value;\n  }\n\n  /**\n   * Notify new key value\n   */\n  notifyNewValue(key: TapInfoKey, value: any) {\n    const obs = this._createInfoObservableIfRequired(key);\n    obs.next({\n      value: value,\n      loadDate: new Date(),\n    });\n  }\n\n  /**\n   * Notify new key error\n   * @param key: TapInfo\n   * @param err: Error\n   * @param params?: any[]\n   */\n  notifyKeyError(key: TapInfoKey, err: Error) {\n    debug(TAG, key, 'error with', err);\n    const obs = this._createInfoObservableIfRequired(key);\n    obs.next({\n      error: err,\n      loadDate: new Date(),\n    });\n  }\n\n  /**\n   * @deprecated use {@link isInfoLoaded()} instead\n   * @param key\n   * @returns\n   */\n  isKeyInCache(key: TapInfoKeyObjectOrString): boolean {\n    return this.isInfoLoaded(key);\n  }\n  private _createInfoObservableIfRequired(\n    key: TapInfoKey\n  ): Subject<TapInfoHolder> {\n    const cacheKey = createCacheKey(key);\n    if (!this._infoChange[cacheKey]) {\n      debug(TAG, `create new observable cache key \"${cacheKey}\"`);\n      this._infoChange[cacheKey] = new BehaviorSubject<TapInfoHolder>({\n        loadDate: undefined,\n      });\n    }\n    return this._infoChange[cacheKey];\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { sleep } from '@iotize/common/utility';\nimport { ADMIN_USER } from '@iotize/tap/configurator';\nimport { Observable } from 'rxjs';\nimport { map, shareReplay } from 'rxjs/operators';\nimport { FACTORY_RESET_MODE_VERSION } from './config-version';\nimport { CurrentDeviceService } from './current-device.service';\nimport { TapInfo } from './tap-info/keys';\nimport { TapInfoCacheService } from './tap-info/tap-info-cache.service';\n\n@Injectable()\nexport class TapAdministrationService {\n  isLoggedAsAdmin = this._deviceService.sessionState.pipe(\n    map((sessionState) => {\n      return sessionState.name === ADMIN_USER.username;\n    })\n  );\n\n  factoryResetStateChange: Observable<boolean> = this.tapInfoCacheService\n    .valueChange(TapInfo.configVersion)\n    .pipe(\n      map((v) => {\n        return v === FACTORY_RESET_MODE_VERSION;\n      }),\n      shareReplay(1)\n    );\n\n  constructor(\n    private _deviceService: CurrentDeviceService,\n    private tapInfoCacheService: TapInfoCacheService\n  ) {}\n\n  async factoryReset() {\n    await this._deviceService.executeFactoryReset();\n    this.tapInfoCacheService.reset();\n  }\n\n  async reboot() {\n    await this._deviceService.reboot();\n    this.tapInfoCacheService.reset();\n  }\n\n  async rebootAndReconnect() {\n    await this._deviceService.reboot();\n    await sleep(5000);\n    try {\n      await this._deviceService.connect();\n    } catch (err) {\n      console.warn('Failed to reconnect after reboot', err);\n    }\n  }\n}\n","export class UniqArray<T> {\n  get length(): number {\n    return this.items.length;\n  }\n\n  constructor(\n    public items: T[] = [],\n    private readonly equalsFunction: (a: T, b: T) => boolean\n  ) {}\n\n  get(loadedIndex: number): T | undefined {\n    return this.items[loadedIndex];\n  }\n\n  clear() {\n    this.items = [];\n  }\n\n  push(...newItems: T[]) {\n    let addedCount = 0;\n    newItems.forEach((keyToAdd) => {\n      if (\n        !this.items.find((existingKey) =>\n          this.equalsFunction(keyToAdd, existingKey)\n        )\n      ) {\n        this.items.push(keyToAdd);\n        addedCount++;\n      }\n    });\n    return addedCount;\n  }\n\n  remove(...items: T[]): T[] {\n    let removed: T[] = [];\n    items.forEach((key, index) => {\n      const indexToRemove = this.items.findIndex((subKey) =>\n        this.equalsFunction(key, subKey)\n      );\n      if (indexToRemove >= 0) {\n        removed.push(...this.items.splice(indexToRemove, 1));\n      }\n    });\n    return removed;\n  }\n}\n","import { BehaviorSubject } from 'rxjs';\nimport { UniqArray } from './uniq-array';\n\nexport class UniqKeyQueue<T> {\n  private _uniqItems = new UniqArray<T>([], this.equalsFunction);\n  private _queue = new BehaviorSubject<T[]>(this._uniqItems.items);\n\n  get queueChange() {\n    return this._queue.asObservable();\n  }\n\n  constructor(private readonly equalsFunction: (a: T, b: T) => boolean) {}\n\n  getSnasphot() {\n    return [...this._queue.value];\n  }\n\n  reset() {\n    if (this.getSnasphot().length !== 0) {\n      this._uniqItems.clear();\n      this._queue.next([]);\n    }\n  }\n\n  add(...items: T[]) {\n    const addedCount = this._uniqItems.push(...items);\n    if (addedCount > 0) {\n      this._queue.next([...this._uniqItems.items]);\n    }\n  }\n\n  remove(...itemsToRemove: T[]) {\n    const removedItems = this._uniqItems.remove(...itemsToRemove);\n    if (removedItems.length > 0) {\n      this._queue.next([...this._uniqItems.items]);\n    }\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { ProgressState } from '@iotize/common/progress/api';\nimport { Observable } from 'rxjs';\nimport { filter, first } from 'rxjs/operators';\nimport {\n  TapInfoHolder,\n  TapInfoKey,\n  TapInfoKeyObjectOrString,\n} from './definitions';\nimport { UniqKeyQueue } from './uniq-key-queue';\nimport { toTapInfoKeyEquals, toTapInfoKeyObject } from './utility';\n\nimport { TapInfoCacheService } from './tap-info-cache.service';\n\nexport type RefreshKeysProgressState = ProgressState & {};\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class TapInfoRequestService {\n  /**\n   * Tap info keys to load queue\n   */\n  private readonly queue = new UniqKeyQueue<TapInfoKey>(toTapInfoKeyEquals);\n\n  readonly requestedTapInfoKeysChange = this.queue.queueChange;\n\n  constructor(private tapInfoCacheService: TapInfoCacheService) {}\n\n  removeKeys(keys: TapInfoKey[]) {\n    this.queue.remove(...keys);\n  }\n\n  getValue<T = string>(key: TapInfoKeyObjectOrString) {\n    return this.getInfoValue<T>(key);\n  }\n\n  getValues<T extends any[] = unknown[]>(\n    values: TapInfoKeyObjectOrString[]\n  ): Promise<T> {\n    this.loadKeysIfNotInCache(values);\n    return Promise.all(\n      values.map((key) => this.tapInfoCacheService.value(key))\n    ) as Promise<T>;\n  }\n\n  reset() {\n    this.queue.reset();\n  }\n\n  getLoadedKeyInfoChange<T>(\n    info: TapInfoKeyObjectOrString\n  ): Observable<TapInfoHolder<T>> {\n    this.loadKeyIfNotInCache(info);\n    return this.tapInfoCacheService.infoChange<T>(info).pipe(\n      filter((info) => {\n        return info.error !== undefined || info.value !== undefined;\n      })\n    );\n  }\n\n  /**\n   * Refresh all keys\n   */\n  async refreshKeys(keysToRefresh: TapInfoKeyObjectOrString[]) {\n    return this._refreshKeys(keysToRefresh, true);\n  }\n\n  private async _refreshKeys(\n    keysToRefresh: TapInfoKeyObjectOrString[],\n    clearCache: boolean\n  ) {\n    // Append to refresh keys list. If we show dialog before nfc tap is done, it will\n    // append keys to the refresh list\n    if (clearCache) {\n      const keys = keysToRefresh.map((key) => toTapInfoKeyObject(key));\n      this.tapInfoCacheService.clearKeys(keys);\n      this.queue.add(...keys);\n    } else {\n      this.loadKeysIfNotInCache(keysToRefresh);\n    }\n    return await this.waitForKeySync(keysToRefresh);\n  }\n  /**\n   * Refresh a single key\n   * Resolve when refresh has been done (with error or success)\n   */\n  async refreshKey<T>(\n    keyOrString: TapInfoKeyObjectOrString\n  ): Promise<TapInfoHolder<T>> {\n    let key = toTapInfoKeyObject(keyOrString);\n    const nextValue = this.tapInfoCacheService\n      .infoChange<T>(key)\n      .pipe(\n        filter((v) => !!v.loadDate),\n        first()\n      )\n      .toPromise() as Promise<TapInfoHolder<T>>;\n    this.queue.add(key);\n    return await nextValue;\n  }\n\n  /**\n   * @warning do not call this method inside executeTapAction or it will hang forever...\n   * @param allKeys\n   * @returns\n   */\n  async refreshKeysIfNeeded(allKeys: TapInfoKeyObjectOrString[]) {\n    return this._refreshKeys(allKeys, false);\n  }\n\n  /**\n   * Load key only if it's not already loaded\n   * @param key key to load\n   * @returns the info value\n   */\n  async loadKeyIfNotInCache<T>(\n    key: TapInfoKeyObjectOrString\n  ): Promise<TapInfoHolder<T>> {\n    const snapshot = this.tapInfoCacheService.getInfoSnapshot<T>(key);\n    if (!snapshot?.loadDate) {\n      return this.refreshKey<T>(key);\n    }\n    return snapshot;\n  }\n\n  /**\n   * Load key only if it's not already loaded\n   * @param key keys to load\n   */\n  loadKeysIfNotInCache(infos: TapInfoKeyObjectOrString[]) {\n    const notInCacheKeys = infos.map(toTapInfoKeyObject).filter((key) => {\n      return !this.tapInfoCacheService.isValueLoaded(key);\n    });\n    this.queue.add(...notInCacheKeys);\n  }\n\n  /**\n   * Load key info\n   * If key has not been loaded for the device yet, it will to loaded it\n   * @param key\n   * @param params\n   * @returns\n   */\n  loadKeyInfoChange<T>(\n    key: TapInfoKeyObjectOrString\n  ): Observable<TapInfoHolder<T>> {\n    key = toTapInfoKeyObject(key);\n    const obs = this.tapInfoCacheService.infoChange<T>(key);\n    this.loadKeyIfNotInCache(key);\n    return obs;\n  }\n\n  /**\n   *\n   * @param info: TapInfo\n   */\n  async getInfoValue<T = string>(info: TapInfoKeyObjectOrString): Promise<T> {\n    await this.loadKeyIfNotInCache<T>(info);\n    return this.tapInfoCacheService.value(info);\n  }\n\n  async waitForKeySync(keysToWait: TapInfoKeyObjectOrString[]) {\n    if (keysToWait.length === 0) {\n      return;\n    }\n    await this.queue.queueChange\n      .pipe(\n        filter((currentKeysToRefresh) => {\n          const remainingKeyToSync = currentKeysToRefresh.find((currentKey) =>\n            keysToWait.find((key) =>\n              toTapInfoKeyEquals(currentKey, toTapInfoKeyObject(key))\n            )\n          );\n          return !remainingKeyToSync;\n        }),\n        first()\n      )\n      .toPromise();\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { Platform } from '@ionic/angular';\nimport { HostProtocol } from '@iotize/tap';\nimport { WifiMode } from '@iotize/tap/service/impl/wifi';\nimport { ReplaySubject } from 'rxjs';\n\nimport {\n  CONFIGURATION_MODE_VERSION,\n  FACTORY_RESET_MODE_VERSION,\n} from '../../config-version';\nimport { CurrentDeviceService } from '../../current-device.service';\nimport { ProtocolMeta } from '../../extensions/protocol-info';\nimport { debug } from '../../logger';\nimport { TapInfoRequestService } from '../../tap-info/tap-info-request.service';\nimport { TapInfo } from '../../tap-info/keys';\nimport { TapConnectionStoreItem } from './definitions';\n\nconst MQTT_SECURE_PORTS = ['8883'];\n\nconst TAG = 'TapConnectionStoreService';\n\nexport function filterByConnectionTypes(\n  filteredConnectionTypes: string[] | undefined\n) {\n  return (values: TapConnectionStoreItem[]): TapConnectionStoreItem[] => {\n    if (!filteredConnectionTypes) {\n      return values;\n    }\n    return values.filter(\n      (value) => filteredConnectionTypes.indexOf(value.connection.type) >= 0\n    );\n  };\n}\nexport namespace TapConnectionStoreService {\n  export interface InstanceOptions {\n    /**\n     * localStore key path to store connections\n     */\n    localStorageKey: string;\n    /**\n     * MQTT related options\n     */\n    mqtt: {\n      /**\n       * For browser app, we must connect to MQTT broker through websocket\n       * We can specify the port to in this case.\n       * For mobile app we use the same port configured in the Tap\n       */\n      webSocket?: {\n        port: number;\n      };\n      /**\n       * MQTT broker username to user\n       * If not provided it will use TAP username\n       */\n      username?: string;\n      /**\n       * MQTT broker password to user\n       * If not provided it will try to use TAP password (if not protected)\n       */\n      password?: string;\n    };\n  }\n}\n\n/**\n * TODO change implementation to not trigger NFC load\n * Use reactive programming instead\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class TapConnectionStoreService {\n  items: TapConnectionStoreItem[] = [];\n\n  values = new ReplaySubject<TapConnectionStoreItem[]>(1);\n\n  config: TapConnectionStoreService.InstanceOptions = {\n    localStorageKey: 'TapConnectionStoreService.items',\n    mqtt: {\n      webSocket: {\n        port: 9001, // TODO configurable\n      },\n      username: undefined,\n      password: undefined,\n    },\n  };\n\n  constructor(\n    private tapService: CurrentDeviceService,\n    private infoResolver: TapInfoRequestService,\n    private platform: Platform\n  ) {\n    this.loadFromStorage();\n  }\n\n  set(items: TapConnectionStoreItem[] | undefined) {\n    if (!items) {\n      items = [];\n    }\n    this.items = items;\n    this.values.next(this.items);\n    this.saveToStorage();\n  }\n\n  remove(item: TapConnectionStoreItem) {\n    this.items.splice(this.items.indexOf(item), 1);\n    this.set(this.items);\n  }\n\n  /**\n   * Try to add or refresh current stored connection info\n   *\n   */\n  async storeCurrentTapConnectionInfo(): Promise<boolean> {\n    const connection = this.tapService.protocolMeta;\n    if (!connection) {\n      debug(\n        `${TAG} No protocol connection info for this Tap. Cannot store connection info.`\n      );\n      return false;\n    }\n    const [\n      serialNumber,\n      version,\n      appName,\n      availableHostProtocols,\n      currentHostProtocol,\n    ] = await this.infoResolver.getValues<\n      [string, string, string, HostProtocol[], HostProtocol]\n    >([\n      TapInfo.serialNumber,\n      TapInfo.configVersion,\n      TapInfo.appName,\n      TapInfo.availableHostProtocols,\n      TapInfo.HostProtocol,\n    ]);\n\n    if (\n      version === FACTORY_RESET_MODE_VERSION ||\n      version === CONFIGURATION_MODE_VERSION\n    ) {\n      return false;\n    }\n\n    const config = {\n      serialNumber,\n      version,\n      appName,\n    };\n\n    this.addOrRefresh({\n      connection,\n      config,\n    });\n\n    const additionalProtocols = await this._resolveConnectionProtocols(\n      availableHostProtocols,\n      currentHostProtocol\n    );\n    additionalProtocols.forEach((connection) => {\n      this.addOrRefresh({\n        connection,\n        config,\n      });\n    });\n\n    return true;\n  }\n\n  private _createMqttProtocolFromTapInfo({\n    brokerHostname,\n    clientId,\n    password,\n    username,\n    netkey,\n    port,\n    serialNumber,\n  }: {\n    brokerHostname: string;\n    serialNumber: string;\n    netkey: string;\n    port: string;\n    clientId?: string;\n    username?: string;\n    password?: string;\n  }): ProtocolMeta | PromiseLike<ProtocolMeta | undefined> | undefined {\n    clientId =\n      clientId || `${serialNumber}_${Math.round(Math.random() * 1000000)}`;\n\n    username = this.config.mqtt.username || username;\n    password = this.config.mqtt.password || password;\n\n    let brokerPort: string;\n    if (this.platform.is('mobileweb')) {\n      if (!this.config.mqtt.webSocket?.port) {\n        debug(\n          TAG,\n          'MQTT over web socket is not available (no port configured. Skipping...)'\n        );\n        return undefined;\n      }\n      brokerPort = this.config.mqtt.webSocket.port.toString();\n    } else {\n      brokerPort = port;\n    }\n    let url: string;\n    if (!brokerHostname.match(/^[a-z]+:\\/\\//i)) {\n      let mqttProtocol = this.platform.is('mobileweb') ? 'ws' : 'mqtt';\n      if (MQTT_SECURE_PORTS.includes(port)) {\n        mqttProtocol += 's';\n      }\n      url = `${mqttProtocol}://${brokerHostname}`;\n    } else {\n      url = brokerHostname;\n      if (this.platform.is('mobileweb')) {\n        url = url.replace(/^(mqtt)s?:\\/\\//iu, 'ws');\n      }\n    }\n    return {\n      type: 'mqtt',\n      info: {\n        username,\n        password,\n        serialNumber,\n        netkey,\n        clientId,\n        endpoint: `${url}:${brokerPort}`,\n      },\n    };\n  }\n\n  private async _resolveConnectionProtocols(\n    availableHostProtocols: HostProtocol[],\n    currentHostProtocol: HostProtocol\n  ) {\n    debug(\n      TAG,\n      `availableHostProtocols ${availableHostProtocols\n        .map((protocol) => HostProtocol[protocol])\n        .join(', ')}...`\n    );\n    const results: ProtocolMeta[] = [];\n    for (const protocol of availableHostProtocols) {\n      if (protocol === HostProtocol.NFC || protocol === currentHostProtocol) {\n        continue;\n      }\n      try {\n        const connectionInfo = await this._resolveConnectionProtocol(protocol);\n        if (connectionInfo) {\n          results.push(connectionInfo);\n        }\n      } catch (err) {\n        console.warn(`Cannot resolve protocol ${HostProtocol[protocol]}`);\n        // TODO log ?\n      }\n    }\n    return results;\n  }\n\n  private async _resolveConnectionProtocol(\n    protocol: HostProtocol\n  ): Promise<ProtocolMeta | undefined> {\n    debug(TAG, `_resolveConnectionProtocol ${HostProtocol[protocol]}...`);\n    switch (protocol) {\n      case HostProtocol.BLE:\n        return {\n          type: 'ble',\n          info: {\n            mac: await this.infoResolver.getValue<string>(\n              TapInfo.bleMacAddress\n            ),\n          },\n        };\n      case HostProtocol.MQTT:\n        let [\n          brokerHostname,\n          serialNumber,\n          netkey,\n          mqttUsername,\n          mqttPassword,\n          port,\n          clientId,\n        ] = await this.infoResolver.getValues<\n          [string, string, string, string, string, string, string]\n        >([\n          TapInfo.MqttBrokerHostname,\n          TapInfo.serialNumber,\n          TapInfo.MqttRelayNetKey,\n          TapInfo.MqttUsername,\n          TapInfo.MqttPassword,\n          TapInfo.MqttBrokerPort,\n          TapInfo.MqttClientId,\n        ]);\n        return this._createMqttProtocolFromTapInfo({\n          brokerHostname,\n          serialNumber,\n          netkey,\n          username: mqttUsername,\n          password: mqttPassword,\n          port,\n          clientId,\n        });\n      case HostProtocol.WIFI:\n        const [wifiMode, wifiHostname, wifiSSID, wifiKey] =\n          await this.infoResolver.getValues<[WifiMode, string, string, string]>(\n            [\n              TapInfo.WifiMode,\n              TapInfo.WifiHostname,\n              TapInfo.WifiSSID,\n              TapInfo.WifiKey,\n            ]\n          );\n        if (wifiHostname && wifiHostname !== '0.0.0.0') {\n          debug(\n            TAG,\n            `resolveConnectionProtocol wifi mode ${WifiMode[wifiMode]}...`\n          );\n          switch (wifiMode) {\n            case WifiMode.NETWORK:\n              return {\n                type: 'socket',\n                info: {\n                  url: `tcp://${wifiHostname}:2000`,\n                },\n              };\n            case WifiMode.PEER_TO_PEER:\n              return {\n                type: 'wifi',\n                info: {\n                  ssid: wifiSSID,\n                  url: `tcp://${wifiHostname}:2000`,\n                  password: wifiKey,\n                },\n              };\n            default:\n              return undefined;\n          }\n        }\n      default:\n        debug(\n          TAG,\n          `resolveConnectionProtocol nothing to store for protocol ${HostProtocol[protocol]}`\n        );\n        return undefined;\n    }\n  }\n\n  addOrRefresh(newItem: Pick<TapConnectionStoreItem, 'connection' | 'config'>) {\n    debug(\n      `${TAG} Adding/updating new stored device ${JSON.stringify(newItem)}...`\n    );\n    const existingItem = this.items.find((item) => {\n      return (\n        item.config.serialNumber === newItem.config.serialNumber &&\n        item.connection.type === newItem.connection.type\n      );\n    });\n    if (existingItem) {\n      existingItem.config = newItem.config;\n      existingItem.connection = newItem.connection;\n      existingItem.meta.lastConnection = new Date();\n    } else {\n      this.items.push({\n        connection: newItem.connection,\n        config: newItem.config,\n        meta: {\n          state: 'online',\n          lastConnection: new Date(),\n        },\n      });\n    }\n    debug(\n      `${TAG} Added/updated new stored device ${newItem.config.serialNumber} ${newItem.connection.type}`\n    );\n    this.set(this.items);\n  }\n\n  clear() {\n    this.set([]);\n  }\n\n  saveToStorage() {\n    localStorage.setItem(\n      this.config.localStorageKey,\n      JSON.stringify(this.items)\n    );\n  }\n\n  loadFromStorage() {\n    try {\n      const content = localStorage.getItem(this.config.localStorageKey);\n      if (content) {\n        this.set(JSON.parse(content));\n      } else {\n        this.set([]);\n      }\n    } catch (err) {\n      console.warn('Cannot load stored connection from local storage', err);\n      this.set([]);\n    }\n  }\n}\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\n\nimport { TapConnectionStoreItem } from '../definitions';\nimport { TapConnectionStoreService } from '../tap-connection-store.service';\n\n@Component({\n  selector: 'tap-connection-store-item',\n  templateUrl: './tap-connection-store-item.component.html',\n  styleUrls: ['./tap-connection-store-item.component.scss'],\n})\nexport class TapConnectionStoreItemComponent {\n  @Input() item?: TapConnectionStoreItem;\n\n  @Output() selected = new EventEmitter<TapConnectionStoreItem>();\n\n  constructor(private tapConnectionStoreService: TapConnectionStoreService) {}\n\n  connect() {\n    if (this.item) {\n      this.selected.emit(this.item);\n    }\n  }\n\n  remove() {\n    if (this.item) {\n      this.tapConnectionStoreService.remove(this.item);\n    }\n  }\n}\n","<ion-card *ngIf=\"item\" (click)=\"connect()\" [button]=\"true\">\n  <ion-list class=\"store-list\">\n    <ion-item style=\"margin-bottom: 4px\">\n      &nbsp;\n      <span class=\"title\">{{ item.config.appName }}</span>\n      &nbsp;\n      <ion-button slot=\"end\" color=\"danger\" fill=\"clear\" (click)=\"remove()\">\n        <ion-icon name=\"close\"></ion-icon>\n        <!-- &nbsp; Remove -->\n      </ion-button>\n    </ion-item>\n    <!-- <ion-item\n\t\t\tclass=\"extra-info\">\n\t\t\t<ion-icon name=\"time\"></ion-icon>\n\t\t\t&nbsp;\n\t\t\t{{ item.meta.lastConnection | date }}\n\t\t</ion-item> -->\n    <!-- <ion-item class=\"extra-info\">\n\t\t\t<ion-icon name=\"information-circle\"></ion-icon>\n      &nbsp;\n      v{{ item.config.version }}\n\t\t</ion-item> -->\n    <ion-item class=\"extra-info\" lines=\"none\">\n      <ion-icon color=\"primary\" name=\"hardware-chip\"></ion-icon>\n      &nbsp;\n      <!-- <ion-label>Serial number</ion-label> -->\n      {{ item.config.serialNumber }}\n      <ion-badge slot=\"end\">\n        {{ item.connection.type }}\n      </ion-badge>\n    </ion-item>\n    <ion-item\n      *ngIf=\"item.connection.type === 'mqtt'\"\n      class=\"extra-info\"\n      lines=\"none\"\n    >\n      <!-- <ion-label>Last connection</ion-label> -->\n      <ion-icon color=\"primary\" name=\"link\"></ion-icon>\n      &nbsp;\n      <span class=\"\">{{ item.connection.info.endpoint }}</span>\n    </ion-item>\n    <ion-item\n      *ngIf=\"item.connection.type === 'ble'\"\n      class=\"extra-info\"\n      lines=\"none\"\n    >\n      <!-- <ion-label>Last connection</ion-label> -->\n      <ion-icon color=\"primary\" name=\"link\"></ion-icon>\n      &nbsp;\n      <span class=\"\">{{ item.connection.info.mac }}</span>\n    </ion-item>\n    <ion-item\n      *ngIf=\"\n        item.connection.type === 'socket' ||\n        item.connection.type === 'websocket'\n      \"\n      lines=\"none\"\n      class=\"extra-info\"\n    >\n      <!-- <ion-label>Last connection</ion-label> -->\n      <ion-icon color=\"primary\" name=\"link\"></ion-icon>\n      &nbsp;\n      <span class=\"\">{{ item.connection.info.url }}</span>\n    </ion-item>\n    <ion-item\n      *ngIf=\"item.connection.type === 'wifi'\"\n      class=\"extra-info\"\n      lines=\"none\"\n    >\n      <!-- <ion-label>Last connection</ion-label> -->\n      <ion-icon color=\"primary\" name=\"link\"></ion-icon>\n      &nbsp;\n      <span class=\"\">{{ item.connection.info.ssid }}</span>\n    </ion-item>\n    <!-- <ion-item>\n\t\t\t\t\t<ion-buttons slot=\"end\">\n\t\t\t\t\t\n\t\t\t\t\t\t<ion-button slot=\"end\" color=\"primary\" fill=\"clear\" (click)=\"connect()\">\n\t\t\t\t\t\t\t<ion-icon name=\"log-in\"></ion-icon>\n\t\t\t\t\t\t\t&nbsp; Connect\n\t\t\t\t\t\t</ion-button>\n\t\t\t\t\t</ion-buttons>\n\t\t\t\t</ion-item> -->\n  </ion-list>\n</ion-card>\n","import {\n  Component,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { filter, map } from 'rxjs/operators';\n\nimport { TapConnectionStoreItem } from '../definitions';\nimport {\n  filterByConnectionTypes,\n  TapConnectionStoreService,\n} from '../tap-connection-store.service';\n\n@Component({\n  selector: 'tap-connection-store-list',\n  templateUrl: './tap-connection-store-list.component.html',\n  styleUrls: ['./tap-connection-store-list.component.scss'],\n})\nexport class TapConnectionStoreListComponent implements OnDestroy, OnInit {\n  filteredConnectionTypes?: string[] = undefined;\n\n  @Input() items?: TapConnectionStoreItem[];\n\n  @Input() set connectionTypes(filteredConnectionTypes: string[] | undefined) {\n    this.filteredConnectionTypes = filteredConnectionTypes;\n    this.items = filterByConnectionTypes(this.filteredConnectionTypes)(\n      this.items || []\n    );\n  }\n\n  @Output() selected = new EventEmitter<TapConnectionStoreItem>();\n\n  private sub?: Subscription;\n\n  constructor(private storeService: TapConnectionStoreService) {}\n\n  ngOnInit(): void {\n    if (!this.items) {\n      this.sub = this.storeService.values\n        .pipe(map(filterByConnectionTypes(this.filteredConnectionTypes)))\n        .subscribe((values) => {\n          this.items = values;\n        });\n    }\n  }\n\n  ngOnDestroy() {\n    this.sub?.unsubscribe();\n  }\n\n  onItemSelected(item: TapConnectionStoreItem) {\n    this.selected.emit(item);\n  }\n}\n","<ion-grid>\n  <ion-row class=\"center-row\">\n    <ion-col\n      size-xs=\"12\"\n      size-sm=\"12\"\n      size-md=\"12\"\n      size-lg=\"6\"\n      size-xl=\"4\"\n      *ngFor=\"let item of items\"\n    >\n      <tap-connection-store-item\n        [item]=\"item\"\n        (selected)=\"onItemSelected($event)\"\n      >\n      </tap-connection-store-item>\n    </ion-col>\n  </ion-row>\n</ion-grid>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TapConnectionStoreItemComponent } from './tap-connection-store-item/tap-connection-store-item.component';\nimport { TapConnectionStoreListComponent } from './tap-connection-store-list/tap-connection-store-list.component';\nimport { IonicModule } from '@ionic/angular';\n\n@NgModule({\n  declarations: [\n    TapConnectionStoreItemComponent,\n    TapConnectionStoreListComponent,\n  ],\n  exports: [TapConnectionStoreItemComponent, TapConnectionStoreListComponent],\n  imports: [CommonModule, IonicModule],\n})\nexport class TapConnectionStoreModule {}\n","import { Injectable } from '@angular/core';\nimport { NFCComProtocol } from '@iotize/device-com-nfc.cordova';\nimport { Tap } from '@iotize/tap';\nimport { EncryptionOptions } from '@iotize/tap/auth';\nimport { ComProtocol, ConnectionState } from '@iotize/tap/protocol/api';\nimport { defer, Observable, Subscriber } from 'rxjs';\nimport { catchError, map, shareReplay, switchMap, tap } from 'rxjs/operators';\n\nimport {\n  CurrentDeviceService,\n  LONG_RANGE_PROTOCOL_FILTER,\n} from './current-device.service';\nimport { ProtocolMeta } from './extensions/protocol-info';\nimport { debug } from './logger';\nimport { ProtocolFactoryService } from './protocol-factory.service';\n\nconst TAG = 'TapConnectionService';\n\nexport const TAP_CONNECTION_OPTIONS_PROVIDER = 'TapConnectionOptions';\n\nexport enum TapRegisterProtocolsMethod {\n  /**\n   * Only register altertive protocol when connecting with nfc using ndef\n   */\n  NDEF_ONLY = 'NDEF_ONLY',\n\n  /**\n   * Register alternative protocols using NDEF if present or service if not\n   */\n  NDEF_OR_SERVICE = 'NDEF_OR_SERVICE',\n\n  /**\n   * Register alternative protocols using service (even if ndef is available)\n   */\n  SERVICE_ONLY = 'SERVICE_ONLY',\n}\n\nexport interface TapConnectionOptions {\n  /**\n   * Set to true if you want to automatically connect with a long range protocol when connecting with NFC\n   */\n  switchProtocol?: boolean;\n\n  /**\n   * Configure register alternative protocol method when we are connection to the tap\n   * This will performs additional requests leading to a slower connection\n   */\n  registerProtocolsMethod?: TapRegisterProtocolsMethod | false;\n\n  /**\n   * Set to true to refresh session state after connection\n   */\n  refreshSessionState?: boolean;\n\n  /**\n   * True to perform NFC pairing on connection\n   */\n  nfcPairing?: boolean;\n\n  // /**\n  //  * True to enable encryption while using NFC protocol\n  //  */\n  // nfcEnableEncryption?: boolean\n\n  /**\n   * Encryption keys for tap initialization\n   */\n  encryption?: EncryptionOptions;\n\n  /**\n   * Start keep alive (if true or undefined)\n   * If false, keep alive is not started\n   */\n  keepAlive?: boolean;\n}\n\nexport interface ConnectionEvent {\n  message: string;\n  tap: Tap;\n}\n\n/**\n * User can the replace with its own service\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class TapConnectionService {\n  private tapFactory: (protocol: ComProtocol) => Tap = (protocol) => {\n    return Tap.fromProtocol(protocol);\n  };\n\n  constructor(\n    private tapService: CurrentDeviceService,\n    private protocolFactory: ProtocolFactoryService\n  ) {}\n\n  /**\n   * Create a Tap connection Observable shared stream\n   */\n  connect(\n    meta: ProtocolMeta,\n    config: TapConnectionOptions\n  ): Observable<ConnectionEvent> {\n    return new Observable((emitter: Subscriber<ConnectionEvent>) => {\n      const subscription = this.createConnectionObservable(\n        meta,\n        config,\n        emitter\n      ).subscribe({\n        error: async (err) => {\n          console.warn(`Tap connection failed with error`, err);\n          await this.tapService\n            .remove(false)\n            .catch((err) => console.warn('ignored error', err));\n          emitter.error(err);\n        },\n        complete: () => emitter.complete(),\n      });\n      return () => {\n        subscription.unsubscribe();\n      };\n    }).pipe(shareReplay(1));\n  }\n\n  createConnectionObservable(\n    protocolMeta: ProtocolMeta,\n    config: TapConnectionOptions,\n    emitter: Subscriber<ConnectionEvent>\n  ) {\n    let connectObservable = defer(async () => {\n      const protocol = await this.protocolFactory.create(protocolMeta);\n      const tap = this.tapFactory(protocol);\n      emitter.next({\n        message: `Initialize Tap from ${protocolMeta.type}...`,\n        tap,\n      });\n      return tap;\n    });\n\n    if (config.encryption) {\n      const encryptionOptions = config.encryption;\n      connectObservable = connectObservable.pipe(\n        switchMap(async (tap) => {\n          emitter.next({\n            message: `Enable encryption...`,\n            tap,\n          });\n          if (encryptionOptions.keys) {\n            debug(TAG, 'Set encryption keys: ', encryptionOptions.keys);\n            tap.encryption.setEncryptionKeys(encryptionOptions.keys);\n          }\n          if (encryptionOptions.encryption) {\n            if (!tap.encryption.sessionKey && !tap.isConnected()) {\n              await tap.connect();\n            }\n            tap.encryption.resume();\n            debug(TAG, 'Enable encryption: ', encryptionOptions.encryption);\n          }\n          if (encryptionOptions.frameCounter != undefined) {\n            tap.encryption.setEncryptedFrameCounter(\n              encryptionOptions.frameCounter\n            );\n          }\n          return tap;\n        })\n      );\n    }\n\n    connectObservable = connectObservable.pipe(\n      switchMap(async (tap) => {\n        if (this.tapService.hasTap) {\n          await this.tapService.remove();\n        }\n        this.tapService.setTapFromEvent(\n          {\n            protocolMeta: protocolMeta,\n            tap: tap,\n          },\n          {\n            emit: false, // We emit only at the end of initialisation\n          }\n        );\n        tap.keepAlive.stop();\n        return tap;\n      })\n    );\n\n    if (protocolMeta.type === 'nfc') {\n      if (config.nfcPairing) {\n        connectObservable = connectObservable.pipe(\n          switchMap(async (tap) => {\n            emitter.next({\n              message: `NFC pairing...`,\n              tap,\n            });\n            debug(TAG, 'nfcPairing');\n            await tap.connect();\n            await tap.nfcPairing();\n            return tap;\n          })\n        );\n      }\n    }\n\n    if (config.registerProtocolsMethod !== false) {\n      connectObservable = connectObservable.pipe(\n        switchMap(async (tap) => {\n          if (!tap.isConnected()) {\n            emitter.next({\n              message: `Connecting with ${protocolMeta.type}...`,\n              tap,\n            });\n            await tap.connect();\n          }\n          emitter.next({\n            message: `Initializing protocols...`,\n            tap,\n          });\n          await this.registerAlternativeProtocols(\n            config.registerProtocolsMethod,\n            protocolMeta\n          );\n          return tap;\n        })\n      );\n    }\n\n    const switchProtocol = config.switchProtocol;\n    if (protocolMeta.type === 'nfc') {\n      connectObservable = connectObservable.pipe(\n        switchMap(async (tap) => {\n          if (switchProtocol) {\n            const protocolMeta = this.tapService.availableProtocols.find(\n              LONG_RANGE_PROTOCOL_FILTER\n            );\n            if (protocolMeta) {\n              debug(TAG, 'Using long range protocol: ', protocolMeta);\n              emitter.next({\n                message: `Switch to ${protocolMeta.type}`,\n                tap,\n              });\n              await this.tapService.useProtocolFromMeta(protocolMeta);\n            }\n          } else {\n            debug(TAG, 'keep NFC protocol');\n            const nfcProtocol = tap.protocol as NFCComProtocol;\n            // for NFC connection\n            await nfcProtocol._connect().toPromise();\n            nfcProtocol.setConnectionState(ConnectionState.CONNECTED);\n          }\n          return tap;\n        })\n      );\n    }\n\n    if (config.refreshSessionState) {\n      connectObservable = connectObservable.pipe(\n        switchMap(async (tap) => {\n          if (!tap.isConnected()) {\n            emitter.next({\n              message: `Connecting with ${protocolMeta.type}...`,\n              tap,\n            });\n            await tap.connect();\n          }\n          debug(TAG, 'refreshSessionState');\n          emitter.next({\n            message: 'Refreshing user session...',\n            tap,\n          });\n          await tap.auth.refreshSessionState();\n          return tap;\n        })\n      );\n    }\n\n    if (config.keepAlive !== false) {\n      connectObservable = connectObservable.pipe(\n        tap((tap) => {\n          tap.keepAlive.start();\n        })\n      );\n    }\n\n    return connectObservable.pipe(\n      map((tap) => {\n        this.tapService.notifyNewTap();\n        return tap;\n      }),\n      catchError((originalError) => {\n        console.warn(`Tap connection failed with error`, originalError);\n        return defer(async () => {\n          await this.tapService\n            .remove(false)\n            .catch((err) => console.warn('ignored error', err));\n          throw originalError;\n        });\n      })\n    );\n  }\n\n  async registerAlternativeProtocols(\n    registerAlternativeProtocolMethod:\n      | TapRegisterProtocolsMethod\n      | false\n      | undefined,\n    initialProtocolMeta: ProtocolMeta\n  ) {\n    if (registerAlternativeProtocolMethod === false) {\n      return;\n    }\n    registerAlternativeProtocolMethod =\n      registerAlternativeProtocolMethod ||\n      TapRegisterProtocolsMethod.NDEF_OR_SERVICE;\n    debug(\n      TAG,\n      `Register alternative protocols with method: ${registerAlternativeProtocolMethod}`\n    );\n    const tap = this.tapService.tap;\n    switch (registerAlternativeProtocolMethod) {\n      case TapRegisterProtocolsMethod.NDEF_OR_SERVICE:\n        let registeredProtocolMeta: ProtocolMeta | undefined;\n        if (!tap.isConnected()) {\n          await tap.connect();\n        }\n        if (initialProtocolMeta.type === 'nfc') {\n          registeredProtocolMeta =\n            await this.tapService.registerProtocolsFromTag(\n              initialProtocolMeta.info.tag\n            );\n        } else {\n          await this.tapService.registerProtocolsFromTap().catch((err) => {\n            console.warn('Failed to register protocols from tap', err);\n          });\n        }\n        break;\n      case TapRegisterProtocolsMethod.SERVICE_ONLY:\n        if (!tap.isConnected()) {\n          await tap.connect();\n        }\n        await this.tapService.registerProtocolsFromTap().catch((err) => {\n          console.warn('Failed to register protocols from tap', err);\n        });\n        break;\n      case TapRegisterProtocolsMethod.NDEF_ONLY:\n        if (initialProtocolMeta.type === 'nfc') {\n          await this.tapService.registerProtocolsFromTag(\n            initialProtocolMeta.info.tag\n          );\n        }\n        break;\n    }\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { AbstractService, ServiceCallType, Tap } from '@iotize/tap';\nimport { TapRequestFrame } from '@iotize/tap/client/api';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class TapApiExplorerService {\n  _allPaths?: ServiceCallType[];\n\n  constructor() {}\n\n  getByMethod(method: TapRequestFrame.MethodType): ServiceCallType[] {\n    return this.listAllPaths().filter((call) => call.method === method);\n  }\n\n  hasPath(method: TapRequestFrame.MethodType, url: string): boolean {\n    return this.getByUrl(method, url) !== undefined;\n  }\n\n  getByUrl(\n    method: TapRequestFrame.MethodType,\n    url: string\n  ): ServiceCallType | undefined {\n    const allPaths = this.listAllPaths();\n    const results = allPaths.filter(\n      (call: ServiceCallType) =>\n        (call.path === url || call.pathAlias === url) && call.method === method\n    );\n    return results.length > 0 ? results[0] : undefined;\n  }\n\n  listAllPaths(): ServiceCallType[] {\n    if (this._allPaths) {\n      return this._allPaths;\n    }\n    const services: AbstractService[] = Tap.create().service.services();\n    // let serviceNames = Object.keys(serviceContainer);\n    const allResources: ServiceCallType[] = services.reduce((prev, service) => {\n      const resourcesArray = Object.values(service.resources);\n      prev.push(...resourcesArray);\n      return prev;\n    }, [] as ServiceCallType[]);\n    this._allPaths = allResources;\n\n    return this._allPaths;\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { isCodeError } from '@iotize/common/error';\nimport {\n  PathParameter,\n  ServiceCallType,\n  TapError,\n  TapResponse,\n} from '@iotize/tap';\nimport { TapRequestFrame } from '@iotize/tap/client/api';\nimport { TapClientError } from '@iotize/tap/client/impl';\nimport { CurrentDeviceService } from '../current-device.service';\nimport { debug } from '../logger';\nimport { TapApiExplorerService } from '../tap-api-explorer.service';\nimport {\n  TapConfigGetValueType,\n  TapConfigPutValueType,\n} from '../tap-config-item/tap-config-item-base';\nimport { TapInfoKey } from './definitions';\nimport { TapInfoCacheService } from './tap-info-cache.service';\nimport { TapInfoConfigService } from './tap-info-config.service';\nimport { createCacheKey } from './utility';\n\nconst TAG = 'TapInfoDAOService';\n\n/**\n * Tap info Data Access Object service for real LwM2M resources\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class TapInfoDAOService {\n  constructor(\n    private tapInfoConfigService: TapInfoConfigService,\n    private tapInfoCacheService: TapInfoCacheService,\n    private tapService: CurrentDeviceService,\n    private tapApiExplorerService: TapApiExplorerService\n  ) {}\n\n  hasPut(result: TapInfoKey): boolean | undefined {\n    return this._getPut(result) !== undefined;\n  }\n\n  private _getPut(key: TapInfoKey): TapConfigPutValueType<any> | undefined {\n    const infoConfig = this.tapInfoConfigService.findByKey(key);\n    if (!infoConfig?.putValue) {\n      const nativeLwm2mRequestTemplate = this.tapApiExplorerService.getByUrl(\n        TapRequestFrame.MethodType.PUT,\n        key.key\n      );\n      if (!nativeLwm2mRequestTemplate) {\n        return undefined;\n      }\n      return async (tap, value, ...pathParameters) => {\n        const request =\n          pathParameters.length > 0\n            ? fillWithPathParameters(nativeLwm2mRequestTemplate, pathParameters)\n            : { ...nativeLwm2mRequestTemplate };\n        request.body = value;\n        return await tap.lwm2m.execute(request);\n      };\n    } else {\n      return infoConfig.putValue;\n    }\n  }\n\n  async put<ValueType>(\n    key: TapInfoKey,\n    value: ValueType\n  ): Promise<TapResponse<any>> {\n    const tap = this.tapService.tapOrUndefined;\n    const put = this._getPut(key);\n    if (!put) {\n      throw new Error(`Tap resource '${key.key}' is not editable`);\n    }\n    if (!tap) {\n      throw new Error(`No tap selected`);\n    }\n    return put(tap, value, ...(key.params || [])).then((result) => {\n      result.successful();\n      return result;\n    });\n  }\n\n  async get(key: TapInfoKey) {\n    try {\n      const tap = this.tapService.tapOrUndefined;\n      debug(TAG, `refreshKey \"${createCacheKey(key)}\" start`);\n      if (!tap) {\n        throw TapClientError.notConnectedError();\n      }\n      this.tapInfoCacheService.clearKey(key);\n\n      let reader: TapConfigGetValueType<any> | false | undefined;\n      const infoConfig = this.tapInfoConfigService.findByKey(key);\n      if (!infoConfig?.getValue) {\n        const nativeLwm2mRequestTemplate = this.tapApiExplorerService.getByUrl(\n          TapRequestFrame.MethodType.GET,\n          key.key\n        );\n        if (nativeLwm2mRequestTemplate) {\n          let nativeLwm2mRequest = nativeLwm2mRequestTemplate;\n          if (key.params) {\n            nativeLwm2mRequest = fillWithPathParameters(\n              nativeLwm2mRequestTemplate,\n              key.params\n            );\n          }\n          reader = async (tap) => {\n            return (await tap.lwm2m.execute(nativeLwm2mRequest)).body();\n          };\n        } else {\n          throw new Error(`Unknown Tap Resource 'GET ${key.key}'`);\n        }\n      } else {\n        reader = infoConfig.getValue;\n      }\n      if (!reader) {\n        // Check resource info exist\n        return this.tapInfoCacheService.setKeyInfo(key, {\n          loadDate: new Date(),\n        });\n      }\n      if (!tap.isConnected()) {\n        throw TapClientError.notConnectedError();\n      }\n      // let cacheKey = this._createCacheKey(key, params);\n      const responseOrBody = await reader(tap, ...(key.params || []));\n      const body =\n        typeof responseOrBody['body'] === 'function'\n          ? responseOrBody['body']()\n          : responseOrBody;\n      return this.tapInfoCacheService.setKeyValue(key, body);\n    } catch (err: any) {\n      this.tapInfoCacheService.setKeyError(key, err);\n      if (isCodeError(TapError.Code.ResponseStatusError, err)) {\n        // Do not throw, tap request was successful\n        return;\n      }\n      throw err;\n    }\n  }\n}\n\nfunction fillWithPathParameters(\n  nativeLwm2mRequest: ServiceCallType<any, any>,\n  params: any[]\n): ServiceCallType<any, any> {\n  const parameters = PathParameter.extractParams(nativeLwm2mRequest.path);\n  if (parameters.length !== params.length) {\n    throw new Error(\n      `${nativeLwm2mRequest.pathAlias || nativeLwm2mRequest.path} expects ${\n        parameters.length\n      } path parameters but given ${params.length}`\n    );\n  }\n  if (parameters.length > 0) {\n    if (parameters.length === 1) {\n      nativeLwm2mRequest = {\n        ...nativeLwm2mRequest,\n        pathParameters: {\n          [parameters[0]]: params[0],\n        },\n      };\n    } else {\n      throw new Error(\n        `${\n          nativeLwm2mRequest.pathAlias || nativeLwm2mRequest.path\n        } more than 1 path parameter is not implemented yet`\n      );\n    }\n  }\n  return nativeLwm2mRequest;\n}\n","export interface ScanRecord {\n  length: number;\n  type: number;\n  data: Uint8Array;\n}\n\nexport interface WebBluetoothManufacturerDataFilter {\n  companyIdentifier?: number | Uint8Array | number[];\n  dataPrefix?: Uint8Array | number[];\n  mask?: Uint8Array | number[];\n}\n\nexport function checkManufacturerDataMatch(\n  parsedScanRecors: ScanRecord[],\n  manufacturerDataFilters: WebBluetoothManufacturerDataFilter[]\n): boolean {\n  const companyIdentifierRecords = parsedScanRecors.filter((record) => {\n    return record.type === 0xff && record.data.length >= 2;\n  });\n  if (companyIdentifierRecords.length === 0) {\n    return false;\n  } else if (companyIdentifierRecords.length > 1) {\n    console.warn(\n      `Multiple company identifier record found. Only using the first one`\n    );\n  }\n  const manufacturerDataRecord = companyIdentifierRecords[0];\n  const recordCompanyIdentifierId = _toUint16(manufacturerDataRecord.data);\n  return !!manufacturerDataFilters.find((manufacturerDataFilter) => {\n    const filterManufacturerId = _toUint16(\n      manufacturerDataFilter.companyIdentifier\n    );\n    if (filterManufacturerId !== recordCompanyIdentifierId) {\n      return false;\n    }\n    if (manufacturerDataFilter.dataPrefix) {\n      return checkManufacturerDataPrefix(\n        manufacturerDataRecord.data.subarray(2),\n        manufacturerDataFilter.dataPrefix,\n        manufacturerDataFilter.mask\n      );\n    }\n    return true;\n  });\n}\n\nexport function parseScanRecords(\n  scanRecord: number[] | Buffer | Uint8Array | undefined\n): ScanRecord[] {\n  const records: ScanRecord[] = [];\n  if (!scanRecord?.length) {\n    return records;\n  }\n  let index = 0;\n  const arrayScanRecord = Uint8Array.from(scanRecord);\n  while (index < arrayScanRecord.length) {\n    const length = arrayScanRecord[index++];\n    //Done once we run out of records\n    if (length == 0) break;\n\n    const type = arrayScanRecord[index++];\n    //Done if our record isn't a valid type\n    if (type == 0) break;\n\n    const dataLength = length - 1;\n    const data = Uint8Array.from(\n      arrayScanRecord.slice(index, index + dataLength)\n    );\n    index += dataLength;\n\n    records.push({\n      data,\n      length,\n      type,\n    });\n  }\n\n  return records;\n}\n\nfunction checkManufacturerDataPrefix(\n  data: Uint8Array | number[],\n  dataPrefix: Uint8Array | number[],\n  mask: Uint8Array | number[] | undefined\n): boolean {\n  const subData = Uint8Array.from(data).subarray(0, dataPrefix.length);\n  if (mask) {\n    for (\n      let bytePosition = 0;\n      bytePosition < dataPrefix.length;\n      bytePosition++\n    ) {\n      const dataByte = data[bytePosition];\n      const dataPrefixByte = dataPrefix[bytePosition];\n      const maskByte = mask[bytePosition];\n      if (maskByte) {\n        for (let bitPosition = 0; bitPosition < 8; bitPosition++) {\n          const mask = 1 << (7 - bitPosition);\n          if ((maskByte & mask) === 0) {\n            // If mask bit is not set, we don't need to check this bit\n            continue;\n          }\n          if ((dataByte & mask) !== (dataPrefixByte & mask)) {\n            return false;\n          }\n        }\n      }\n    }\n    return true;\n  } else {\n    return arrayEquals(subData, dataPrefix);\n  }\n}\n\nfunction arrayEquals(\n  arg0: Uint8Array | number[],\n  dataPrefix: Uint8Array | number[]\n): boolean {\n  return (\n    arg0.length === dataPrefix.length &&\n    arg0.every((v, index) => v === dataPrefix[index])\n  );\n}\n\nfunction _toUint16(data: Uint8Array | number[] | number | undefined) {\n  if (!data) {\n    return 0;\n  } else if (typeof data === 'number') {\n    return data;\n  } else {\n    const uint8Array = Uint8Array.from(data);\n    return (uint8Array[0] << 8) + uint8Array[1];\n  }\n}\n","import { Injectable, NgZone } from '@angular/core';\nimport { Platform } from '@ionic/angular';\nimport {\n  BLEScanner,\n  CordovaBLEScanResult,\n  getIoTizeBleCordovaPlugin,\n  getScanRecordsFromBytes,\n} from '@iotize/device-com-ble.cordova';\nimport { IoTizeBleCordovaPlugin } from '@iotize/device-com-ble.cordova/lib/iotize-ble-cordova-plugin';\nimport { DeviceScanner } from '@iotize/tap/scanner/api';\nimport {\n  Observable,\n  OperatorFunction,\n  ReplaySubject,\n  Subscription,\n  UnaryFunction,\n  defer,\n  pipe,\n  throwError,\n  timeout\n} from 'rxjs';\nimport { filter, map, share, switchMap } from 'rxjs/operators';\nimport { runInZone } from '../../../lib/rx-utility/run-in-zone';\nimport {\n  WebBluetoothManufacturerDataFilter,\n  checkManufacturerDataMatch,\n  parseScanRecords,\n} from './manufacturer-data-filter';\nimport {\n  WebBluetoothScanner,\n  PeripheralAdapter,\n  WebBluetoothDevice,\n} from '@iotize/device-com-web-bluetooth.js';\nimport {\n  CharacteristicDescription,\n  ServiceDescription,\n  ServiceList,\n} from '@iotize/device-com-ble.cordova/lib/definitions';\n\nexport type BleScannerOptions = {\n  filters?: {\n    services?: string[];\n    manufacturerData?: WebBluetoothManufacturerDataFilter[];\n  }[];\n};\n\nexport type scannerResult = CordovaBLEScanResult | WebBluetoothDevice;\n\nexport type BLEScanResultWithRecords = {\n  address: string;\n  name: string;\n  rssi?: number;\n  txPower?: number;\n  records?: {\n    type: number;\n    data: Uint8Array;\n  }[];\n};\n\nexport type PeripheralAdapterWithRecords = PeripheralAdapter & {\n  rssi?: number;\n  txPower?: number;\n  scanRecord?: number[];\n  watchAdvertisementsAbortController?: AbortController;\n};\n\nexport function filterUndefined<T>(): UnaryFunction<\n  Observable<T | undefined>,\n  Observable<T>\n> {\n  return pipe(filter((value) => value !== undefined)) as OperatorFunction<\n    T | undefined,\n    T\n  >;\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class BleService {\n  private bleScanner?: DeviceScanner<scannerResult>;\n  private scannerSubscription?: Subscription;\n  private plugin?: IoTizeBleCordovaPlugin;\n  private webBluetoothPeripheralAdapters: Map<\n    string,\n    PeripheralAdapterWithRecords\n  > = new Map<string, PeripheralAdapterWithRecords>();\n\n  private lastResults?: scannerResult[];\n  private _results$ = new ReplaySubject<scannerResult[] | undefined>();\n\n  public readonly results: Observable<scannerResult[]> = this._results$.pipe(\n    filterUndefined(),\n    runInZone(this.ngZone),\n    share()\n  );\n\n  public readonly resultsWithRecords: Observable<BLEScanResultWithRecords[]> =\n    this._results$.pipe(\n      filterUndefined(),\n      map((devices) => {\n        return devices?.map((device) => {\n          if (!this.platform.is('cordova') && device.name) {\n            //Web Bluetooth\n            let adapter = this.getDeviceFromPeripheralAdapter(device.name);\n            if (adapter == undefined) {\n              adapter = new PeripheralAdapter(device as BluetoothDevice);\n              this.webBluetoothPeripheralAdapters.set(device.name, adapter);\n              // set deviceAdvertisement listener\n              this.setWatchAdvertisement(adapter);\n            }\n\n            return {\n              address: adapter.id,\n              name: adapter.name as string,\n              rssi: adapter.rssi,\n              txPower: adapter.txPower,\n              records: getScanRecordsFromBytes(\n                new Uint8Array(adapter.scanRecord || [])\n              ),\n            };\n          } else {\n            device = device as CordovaBLEScanResult;\n            return {\n              address: device.address,\n              name: device.name,\n              rssi: device.rssi,\n              txPower: device.txPower,\n              records: getScanRecordsFromBytes(\n                new Uint8Array(device.scanRecord || [])\n              ),\n            };\n          }\n        });\n      })\n    );\n\n  constructor(private platform: Platform, private ngZone: NgZone) {\n    if (this.platform.is('cordova')) this.plugin = getIoTizeBleCordovaPlugin();\n  }\n\n  createNewScanner(options?: BleScannerOptions) {\n    this.clearPreviousScanner();\n    if (this.platform.is('cordova')) {\n      if (options != undefined && options.filters != undefined) {\n        this.bleScanner = new BLEScanner(undefined, {\n          filters: options.filters,\n        });\n      } else {\n        this.bleScanner = new BLEScanner(undefined);\n      }\n    } else {\n      let webBLEOptions: RequestDeviceOptions = {\n        acceptAllDevices: true,\n      };\n\n      const filters: BluetoothLEScanFilter[] | undefined =\n        options?.filters?.reduce<BluetoothLEScanFilter[]>((acc, current) => {\n          if (current.services && current.services.length != 0) {\n            acc.push({\n              services: current.services,\n            });\n          }\n          const manufacturerDataFilter = current.manufacturerData?.reduce<\n            BluetoothManufacturerDataFilter[]\n          >((acc, current) => {\n            if (current.companyIdentifier != undefined) {\n              let newFilter: any = {\n                companyIdentifier: this.companyIdentifierToNumber(\n                  current.companyIdentifier\n                ),\n                // dataPrefix: undefined,\n                // mask: undefined\n              };\n              if (current.dataPrefix) {\n                newFilter.dataPrefix = new Uint8Array(current.dataPrefix);\n              }\n              if (current.mask) {\n                newFilter.mask = new Uint8Array(current.mask);\n              }\n              acc.push(newFilter as BluetoothManufacturerDataFilter);\n            }\n            return acc;\n          }, []);\n          if (manufacturerDataFilter && manufacturerDataFilter?.length != 0) {\n            acc.push({\n              manufacturerData: manufacturerDataFilter,\n            });\n          }\n          return acc;\n        }, []);\n\n      if (filters != undefined && filters.length != 0) {\n        webBLEOptions = {\n          filters,\n        };\n      }\n\n      this.bleScanner = new WebBluetoothScanner({\n        requestDeviceOptions: webBLEOptions,\n      });\n    }\n\n    this.scannerSubscription = this.bleScanner.results.subscribe((results) => {\n      if (options) {\n        const manufacturerDataFilters = options.filters?.reduce<\n          WebBluetoothManufacturerDataFilter[]\n        >((filters, current) => {\n          if (current.manufacturerData) {\n            filters.push(...current.manufacturerData);\n          }\n          return filters;\n        }, []);\n        if (manufacturerDataFilters?.length) {\n          results = results.filter((result) => {\n            const scanRecord = (result as any).scanRecord;\n            if (!scanRecord?.length || manufacturerDataFilters.length === 0) {\n              return false;\n            }\n            const scanRecords = parseScanRecords(scanRecord);\n\n            return checkManufacturerDataMatch(\n              scanRecords,\n              manufacturerDataFilters\n            );\n          });\n        }\n      }\n      this.emitNexResults(results);\n    });\n    return this.bleScanner;\n  }\n  private emitNexResults(results?: scannerResult[]) {\n    this.lastResults = results;\n    this._results$.next(results);\n  }\n\n  private clearPreviousScanner() {\n    if (this.bleScanner) {\n      this.scannerSubscription?.unsubscribe();\n      this.emitNexResults(undefined);\n      this.bleScanner = undefined;\n    }\n  }\n\n  async startScan(options?: BleScannerOptions) {\n    const newScanner = this.createNewScanner(options);\n    return newScanner.start();\n  }\n\n  async stopScan() {\n    if (this.platform.is('cordova')) {\n      if (this.bleScanner == undefined) {\n        throw new Error('BLE Scanner not defined');\n      }\n      return this.bleScanner.stop();\n    } else {\n      // // stop watch advertisements\n      for (let [id, adapter] of this.webBluetoothPeripheralAdapters) {\n        this.unsetWatchAdvertisement(adapter);\n      }\n      return this.bleScanner?.stop();\n    }\n  }\n\n  connectByName(bleDeviceName: string) {\n    if (this.platform.is('cordova')) {\n      if (this.plugin == undefined) {\n        return throwError(() => new Error('BLE plugin is not available'));\n      }\n      return this.plugin.connect(bleDeviceName).pipe(share());\n    } else {\n      return defer(async () => {\n        const device = this.getDeviceFromPeripheralAdapter(bleDeviceName);\n        if (device) {\n          device.connect().then(() => {\n            device._peripheral.watchAdvertisements();\n          });\n          return device.stateChange;\n        }\n        throwError(\n          () =>\n            new Error(`ConnectionError, can not find device ${bleDeviceName}`)\n        );\n      }).pipe(\n        filterUndefined(),\n        switchMap((v) => v)\n      );\n    }\n  }\n\n  async disconnectByName(bleDeviceName: string) {\n    if (this.platform.is('cordova')) {\n      if (this.plugin == undefined) {\n        throw new Error('BLE plugin is not available');\n      }\n      return this.plugin.disConnect(bleDeviceName);\n    } else {\n      const device = await this.getDeviceFromPeripheralAdapterOrThrow(\n        bleDeviceName\n      );\n      // stop watch advertisements\n      this.unsetWatchAdvertisement(device);\n      await device.disconnect();\n      return 'OK';\n    }\n  }\n\n  async closeByName(bleDeviceName: string): Promise<'OK'> {\n    if (this.platform.is('cordova')) {\n      if (this.plugin == undefined) {\n        throw new Error('BLE plugin is not available');\n      }\n      return this.plugin.close(bleDeviceName);\n    } else {\n      // Nothing to do on web browser\n      return 'OK';\n    }\n  }\n\n  async readCharacteristic(\n    deviceName: string,\n    serviceId: string,\n    characteristicId: string\n  ) {\n    if (this.platform.is('cordova')) {\n      if (this.plugin == undefined) {\n        throw new Error('BLE plugin is not available');\n      }\n      return this.plugin.characteristicReadValue(\n        deviceName,\n        serviceId,\n        characteristicId\n      );\n    } else {\n      const characteristic =\n        await this.getCharacteristicFromPeripheralAdapterPromise(\n          deviceName,\n          serviceId,\n          characteristicId\n        );\n      return characteristic.read();\n    }\n  }\n\n  async writeCharacteristic(\n    deviceName: string,\n    serviceId: string,\n    characteristicId: string,\n    data: Uint8Array,\n    withResponse?: boolean\n  ): Promise<true> {\n    if (this.platform.is('cordova')) {\n      if (this.plugin == undefined) {\n        throw new Error('BLE plugin is not available');\n      }\n      let writePromise: Promise<'OK'>;\n      if (withResponse) {\n        writePromise = this.plugin.characteristicWrite(\n          deviceName,\n          serviceId,\n          characteristicId,\n          data\n        );\n      } else {\n        writePromise = this.plugin.characteristicWriteWithoutResponse(\n          deviceName,\n          serviceId,\n          characteristicId,\n          data\n        );\n      }\n      return writePromise.then((_) => true);\n    } else {\n      const characteristic =\n        await this.getCharacteristicFromPeripheralAdapterPromise(\n          deviceName,\n          serviceId,\n          characteristicId\n        );\n      await characteristic.write(data, !!withResponse);\n      return true;\n    }\n  }\n\n  listenCharacteristicChange(\n    deviceName: string,\n    serviceId: string,\n    characteristicId: string\n  ): Observable<Uint8Array> {\n    if (this.platform.is('cordova')) {\n      if (this.plugin == undefined) {\n        return throwError(new Error('BLE plugin is not available'));\n      }\n      return this.plugin\n        .characteristicChanged(deviceName, serviceId, characteristicId)\n        .pipe(\n          runInZone(this.ngZone)\n          // share(),\n        );\n    } else {\n      return this.getCharacteristicFromPeripheralAdapterObservable(\n        deviceName,\n        serviceId,\n        characteristicId\n      ).pipe(\n        switchMap((char) => {\n          return char.data;\n        }),\n        map((data) => data.data),\n        runInZone(this.ngZone)\n      );\n    }\n  }\n\n  async discoverServices(deviceName: string): Promise<ServiceList> {\n    if (this.platform.is('cordova')) {\n      if (this.plugin == undefined) {\n        throw new Error('BLE plugin is not available');\n      }\n      return this.plugin.discoverServices(deviceName);\n    } else {\n      const device = await this.getDeviceFromPeripheralAdapterOrThrow(\n        deviceName\n      );\n      if (!device._peripheral.gatt?.connected) {\n        throw new Error(`device ${deviceName} is not connected`);\n      }\n      const servicesAdapters = await device.discoverServices();\n      const services: ServiceList = [];\n      for (let serviceName in servicesAdapters) {\n        const adapter = servicesAdapters[serviceName];\n        if (adapter) {\n          const description: ServiceDescription = {\n            uuid: adapter.uuid,\n          };\n          const characteristicDescriptions: CharacteristicDescription[] = [];\n          for (let characteristic of await adapter.getCharacteristics()) {\n            const descriptors = await characteristic.getDescriptors();\n            characteristicDescriptions.push({\n              uuid: characteristic.uuid,\n              properties: characteristic.properties,\n              descriptors: descriptors.map((desc) => {\n                return { uuid: desc.uuid, value: desc.value };\n              }),\n            });\n          }\n          if (characteristicDescriptions.length != 0) {\n            description.characteristics = characteristicDescriptions;\n          }\n\n          services.push(description);\n        }\n      }\n\n      return services;\n    }\n  }\n\n  async startNotification(\n    deviceName: string,\n    serviceId: string,\n    characteristicId: string\n  ): Promise<'OK'> {\n    if (this.platform.is('cordova')) {\n      if (this.plugin == undefined) {\n        throw new Error('BLE plugin is not available');\n      }\n      return this.plugin.characteristicStartNotification(\n        deviceName,\n        serviceId,\n        characteristicId\n      );\n    } else {\n      const characteristic =\n        await this.getCharacteristicFromPeripheralAdapterPromise(\n          deviceName,\n          serviceId,\n          characteristicId\n        );\n      await characteristic.enableNotifications(true);\n      return 'OK';\n    }\n  }\n\n  async stopNotification(\n    deviceName: string,\n    serviceId: string,\n    characteristicId: string\n  ): Promise<true> {\n    if (this.platform.is('cordova')) {\n      if (this.plugin == undefined) {\n        throw new Error('BLE plugin is not available');\n      }\n      return this.plugin\n        .characteristicStopNotification(deviceName, serviceId, characteristicId)\n        .then((r) => true);\n    } else {\n      const characteristic =\n        await this.getCharacteristicFromPeripheralAdapterPromise(\n          deviceName,\n          serviceId,\n          characteristicId\n        );\n      await characteristic.enableNotifications(false);\n      return true;\n    }\n  }\n\n  private getDeviceFromPeripheralAdapter(deviceName: string) {\n    const device = this.webBluetoothPeripheralAdapters.get(deviceName);\n    if (device != undefined) {\n      return device;\n    }\n    //try with id\n    for (let [id, adapter] of this.webBluetoothPeripheralAdapters) {\n      if (adapter.id == deviceName) {\n        return adapter;\n      }\n    }\n    return undefined;\n  }\n\n  private async getDeviceFromPeripheralAdapterOrThrow(deviceName: string) {\n    const device = this.getDeviceFromPeripheralAdapter(deviceName);\n    if (device) {\n      return device;\n    }\n    throw new Error(`Can not find device ${device}`);\n  }\n\n  private async getDeviceServiceFromPeripheralAdapter(\n    deviceName: string,\n    serviceId: string\n  ) {\n    const device = await this.getDeviceFromPeripheralAdapterOrThrow(deviceName);\n    const service = await device.getService(serviceId);\n    if (service == undefined) {\n      throw new Error(`Can not find service ${serviceId} on device ${device}`);\n    }\n    return service;\n  }\n\n  private getCharacteristicFromPeripheralAdapterObservable(\n    deviceName: string,\n    serviceId: string,\n    characteristicId: string\n  ) {\n    return defer(() => {\n      return this.getCharacteristicFromPeripheralAdapterPromise(\n        deviceName,\n        serviceId,\n        characteristicId\n      );\n    }).pipe(filterUndefined());\n  }\n\n  private async getCharacteristicFromPeripheralAdapterPromise(\n    deviceName: string,\n    serviceId: string,\n    characteristicId: string\n  ) {\n    const service = await this.getDeviceServiceFromPeripheralAdapter(\n      deviceName,\n      serviceId\n    );\n    if (service) {\n      return await service.getCharacteristic(characteristicId);\n    }\n    throw new Error(\n      `Can not find characteristic ${characteristicId} on service ${serviceId} on device ${deviceName}`\n    );\n  }\n\n  private setWatchAdvertisement(adapter: PeripheralAdapterWithRecords) {\n    console.log('setWatchAdvertisement', adapter.name);\n    adapter._peripheral.addEventListener(\n      'advertisementreceived',\n      (event) => {\n        console.log('UPDATE ADVERTISEMENT');\n        console.log(event);\n        this.updateAdvertisementData(event, adapter);\n      },\n      true\n    );\n\n    adapter.watchAdvertisementsAbortController = new AbortController();\n\n    adapter._peripheral.watchAdvertisements({\n      signal: adapter.watchAdvertisementsAbortController.signal,\n    });\n\n    // (adapter._peripheral as any).onadvertisementreceived = (event: any) => {\n    //   console.log(\"UPDATE ADVERTISEMENT\");\n    //   console.log(event);\n    // }\n  }\n  private unsetWatchAdvertisement(adapter: PeripheralAdapterWithRecords) {\n    // adapter._peripheral.removeEventListener('advertisementreceived', null);\n    adapter.watchAdvertisementsAbortController?.abort();\n  }\n\n  private updateAdvertisementData(\n    event: any,\n    adapter: PeripheralAdapterWithRecords\n  ) {\n    adapter.rssi = event.rssi;\n    adapter.txPower = event.txPower;\n    if (event.manufacturerData) {\n      adapter.scanRecord = [];\n      for (let [key, value] of event.manufacturerData as Map<\n        number,\n        ArrayBuffer\n      >) {\n        adapter.scanRecord.push(0xff, (key & 0xff00) >> 8, key & 0xff);\n        adapter.scanRecord.push(...new Uint8Array(value));\n      }\n    }\n    this.emitNexResults(this.lastResults);\n  }\n\n  private companyIdentifierToNumber(\n    companyIdentifier: number | number[] | Uint8Array\n  ) {\n    if (typeof companyIdentifier == 'number') {\n      return companyIdentifier;\n    } else {\n      return new Array(companyIdentifier).reduce<number>((acc, next, i) => {\n        acc += next[i] << i;\n        return acc;\n      }, 0);\n    }\n  }\n}\n","import { Component, OnInit, Input } from '@angular/core';\n\n@Component({\n  selector: 'tap-ble-rssi-signal',\n  templateUrl: './ble-rssi-signal.component.html',\n  styleUrls: ['./ble-rssi-signal.component.scss'],\n})\nexport class BleRssiSignalComponent {\n  private _colorMap: string[];\n\n  @Input() bars = 0;\n\n  @Input() set colors(colors: string[]) {\n    this._colorMap = colors;\n  }\n\n  constructor() {\n    this._colorMap = ['#E51E25', '#FEC212', '#FEC212', '#0FAF4B', '#0FAF4B'];\n  }\n\n  get color() {\n    const safeIndex = Math.max(0, Math.min(this.bars, this._colorMap.length));\n    return this._colorMap[safeIndex];\n  }\n}\n","<div class=\"rssi-container\">\n  <svg\n    version=\"1.1\"\n    viewBox=\"0 0 512 512\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n    xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n    class=\"chart\"\n    aria-labelledby=\"title\"\n    role=\"img\"\n  >\n    <svg x=\"6\" class=\"bar\" [attr.color]=\"color\">\n      <rect\n        height=\"100\"\n        x=\"10\"\n        y=\"400\"\n        width=\"80\"\n        rx=\"30\"\n        [attr.fill-opacity]=\"bars >= 1 ? 1 : 0\"\n      ></rect>\n    </svg>\n    <svg x=\"106\" class=\"bar\" [attr.color]=\"color\">\n      <rect\n        height=\"200\"\n        x=\"10\"\n        y=\"300\"\n        width=\"80\"\n        rx=\"30\"\n        [attr.fill-opacity]=\"bars >= 2 ? 1 : 0\"\n      ></rect>\n    </svg>\n    <svg x=\"206\" class=\"bar\" [attr.color]=\"color\">\n      <rect\n        height=\"300\"\n        x=\"10\"\n        y=\"200\"\n        width=\"80\"\n        rx=\"30\"\n        [attr.fill-opacity]=\"bars >= 3 ? 1 : 0\"\n      ></rect>\n    </svg>\n    <svg x=\"306\" class=\"bar\" [attr.color]=\"color\">\n      <rect\n        height=\"400\"\n        x=\"10\"\n        y=\"100\"\n        width=\"80\"\n        rx=\"30\"\n        [attr.fill-opacity]=\"bars >= 4 ? 1 : 0\"\n      ></rect>\n    </svg>\n    <svg x=\"406\" class=\"bar\" [attr.color]=\"color\">\n      <rect\n        height=\"500\"\n        x=\"10\"\n        width=\"80\"\n        rx=\"30\"\n        [attr.fill-opacity]=\"bars >= 5 ? 1 : 0\"\n      ></rect>\n    </svg>\n  </svg>\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n  name: 'rssiToSignalStrenght',\n})\nexport class RssiToSignalStrenghtPipe implements PipeTransform {\n  private config = [-90, -80, -70, -60];\n\n  transform(value: number | string, args?: any): number {\n    if (typeof value === 'string') {\n      try {\n        value = parseInt(value);\n      } catch (err) {}\n    }\n    if (typeof value !== 'number') {\n      return 0;\n    }\n    for (let index = 0; index < this.config.length; index++) {\n      if (value < this.config[index]) {\n        return index;\n      }\n    }\n    return this.config.length;\n  }\n}\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { DiscoveredDeviceType } from '../definitions';\n\n@Component({\n  selector: 'tap-ble-scan-result',\n  templateUrl: './tap-scan-results.component.html',\n  styleUrls: ['./tap-scan-results.component.scss'],\n})\nexport class TapScanResultsComponent {\n  @Output() onItemClicked: EventEmitter<DiscoveredDeviceType> =\n    new EventEmitter();\n\n  @Input() lines = 'full';\n\n  @Input() showMacAddress = false;\n\n  @Input() showSignalStrenght = true;\n\n  @Input() devices: Array<DiscoveredDeviceType> = [];\n\n  constructor() {}\n\n  _onItemClicked(device: DiscoveredDeviceType) {\n    this.onItemClicked.emit(device);\n  }\n}\n","<ion-list [lines]=\"lines\" *ngIf=\"devices.length > 0\">\n  <ion-item\n    (click)=\"_onItemClicked(device)\"\n    class=\"hover scan-result-item\"\n    *ngFor=\"let device of devices\"\n  >\n    <ion-label>\n      <span class=\"device-name\">{{ device.name }}</span>\n      <br *ngIf=\"showMacAddress\" /><span\n        *ngIf=\"showMacAddress\"\n        class=\"mac-address\"\n        >{{ device.address }}</span\n      >\n    </ion-label>\n    <tap-ble-rssi-signal\n      *ngIf=\"showSignalStrenght\"\n      slot=\"end\"\n      [bars]=\"device.rssi | rssiToSignalStrenght\"\n    ></tap-ble-rssi-signal>\n  </ion-item>\n</ion-list>\n","import {\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  Inject,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  TemplateRef,\n} from '@angular/core';\nimport { LoadingController } from '@ionic/angular';\nimport { DeviceScanner } from '@iotize/tap/scanner/api';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { TAP_BLE_SCANNER } from '../../../injection-types';\nimport { ProtocolMetaBle } from '../../extensions/protocol-info';\nimport { ProtocolSelectedEvent } from '../api';\nimport { DiscoveredDeviceType } from './definitions';\n\n/**\n * Scanner for bluetooth\n */\n@Component({\n  selector: 'tap-scanner-ble',\n  templateUrl: './tap-scanner-ble.component.html',\n  styleUrls: ['./tap-scanner-ble.component.scss'],\n})\nexport class TapScannerBleComponent implements OnInit, OnDestroy {\n  /**\n   * Scan result template to use to display scan results.\n   *\n   * If not provided, it will use a default component to display devices.\n   *\n   * @example\n   * <!-- Display devices with tap-ble-scan-result component -->\n   * <tap-scanner-ble [scanResultsTemplate]=\"scanResultsTemplate\">\n   *    <ng-template #scanResultsTemplate let-devices>\n   *        <tap-ble-scan-result [devices]=\"devices\" [showSignalStrenght]=\"false\"></tap-ble-scan-result>\n   *    </ng-template>\n   * </tap-scanner-ble>\n   *\n   */\n  @Input() scanResultsTemplate?: TemplateRef<any>;\n\n  /**\n   * @deprecated Not used anymore. start/stop buttons must be define by user\n   */\n  @Input() showScanButton = true;\n\n  /**\n   * RSSI update threshold.\n   * If device list is the same, we will only emit a device update event\n   * if the Math.abs(previousRSSI - newRSSI) >= rssiUpdateThreshold\n   */\n  @Input() rssiUpdateThreshold = 10;\n\n  /**\n   * Event emitted when a scan result has been selected\n   * @deprecated see protocolSelected\n   */\n  @Output() onProtocolSelected = new EventEmitter<ProtocolSelectedEvent>();\n  /**\n   * Event emitted when a scan result has been selected\n   */\n  @Output() protocolSelected = new EventEmitter<ProtocolSelectedEvent>();\n\n  /**\n   * Event emitted when an error occurs\n   */\n  @Output() onError = new EventEmitter<Error>();\n\n  results: DiscoveredDeviceType[] = [];\n\n  private readonly destroyed = new Subject<void>();\n  isScanning = false;\n\n  constructor(\n    @Inject(TAP_BLE_SCANNER)\n    public tapScanner: DeviceScanner<DiscoveredDeviceType>,\n    public changeDetector: ChangeDetectorRef,\n    public loadingCtrl: LoadingController\n  ) {}\n\n  ngOnInit() {\n    this.tapScanner.results\n      .pipe(takeUntil(this.destroyed))\n      .subscribe((values) => {\n        this.mergeScanResults(values);\n      });\n\n    this.tapScanner.scanning.pipe(takeUntil(this.destroyed)).subscribe((v) => {\n      if (v !== this.isScanning) {\n        this.isScanning = v;\n      }\n    });\n  }\n\n  notifyError(error: any) {\n    console.error('BLEScannerError', error);\n    this.onError.emit(error);\n  }\n\n  ngOnDestroy() {\n    this.stopScan();\n    this.destroyed.next();\n    this.destroyed.complete();\n  }\n\n  onItemClicked(device: DiscoveredDeviceType) {\n    const protocolMeta: ProtocolMetaBle = {\n      type: 'ble',\n      info: {\n        id: device.address,\n        mac: device.address,\n        name: device.name,\n      },\n    };\n    const event = {\n      meta: protocolMeta,\n    };\n    this.protocolSelected.emit(event);\n    this.onProtocolSelected.emit(event);\n  }\n\n  startScan() {\n    // this.devices = this.devices.filter(device => device.address == this.tapScanner.selectedDevice);\n    // this.devices.splice(0, this.devices.length);\n    this.tapScanner.start().catch((err) => {\n      this.notifyError(err);\n    });\n    // this.onScanStateChanged.emit(true);\n  }\n\n  stopScan() {\n    this.tapScanner.stop().catch((err) => {\n      this.notifyError(err);\n    });\n    // this.onScanStateChanged.emit(false);\n  }\n\n  private mergeScanResults(newResults: DiscoveredDeviceType[]) {\n    /*\n    newResults.forEach((newResult) => {\n      this.addOrRefreshScanResultList(newResult);\n    });\n    const indexToRemove = this.results.map((oldDevice) => {\n      return newResults.findIndex(\n        (entry) => entry.address === oldDevice.address\n      );\n    }, []);\n    indexToRemove.forEach((resultIndex) => {\n      if (resultIndex < 0) {\n        this.results.splice(resultIndex, 1);\n      }\n    });\n    */\n    this.results = newResults;\n    this.changeDetector.detectChanges();\n  }\n\n  private addOrRefreshScanResultList(newDevice: DiscoveredDeviceType) {\n    const devices = this.results;\n    let hasChanged = false;\n    const storedDeviceIndex = devices.findIndex(\n      (entry) => entry.address === newDevice.address\n    );\n    if (storedDeviceIndex >= 0) {\n      const storedDevice = devices[storedDeviceIndex];\n      if (storedDevice.name !== newDevice.name) {\n        storedDevice.name = newDevice.name;\n        hasChanged = true;\n      }\n      if (\n        Math.abs(storedDevice.rssi - newDevice.rssi) >= this.rssiUpdateThreshold\n      ) {\n        storedDevice.rssi = newDevice.rssi;\n        hasChanged = true;\n      }\n    } else {\n      devices.push(newDevice);\n      hasChanged = true;\n    }\n    return hasChanged;\n  }\n}\n","<ng-container\n  *ngTemplateOutlet=\"scanResultsContainer; context: { $implicit: results }\"\n></ng-container>\n\n<ng-template #scanResultsContainer let-devices>\n  <!-- <ng-content #scanResultsInner select=\"[scan-results]\"></ng-content> -->\n  <ng-template\n    *ngTemplateOutlet=\"scanResultsTemplate; context: { $implicit: results }\"\n  ></ng-template>\n  <tap-ble-scan-result\n    *ngIf=\"!scanResultsTemplate\"\n    [devices]=\"devices\"\n    [showMacAddress]=\"true\"\n    (onItemClicked)=\"onItemClicked($event)\"\n  ></tap-ble-scan-result>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RssiToSignalStrenghtPipe } from './rssi-to-signal-strenght.pipe';\nimport { BleRssiSignalComponent } from './ble-rssi-signal/ble-rssi-signal.component';\n\n@NgModule({\n  declarations: [RssiToSignalStrenghtPipe, BleRssiSignalComponent],\n  exports: [RssiToSignalStrenghtPipe, BleRssiSignalComponent],\n  imports: [CommonModule],\n})\nexport class TapScannerCommonModule {}\n","import { NgModule } from '@angular/core';\nimport { TapScannerBleComponent } from './tap-scanner-ble.component';\nimport { LibCommonModule } from '../../lib-common/lib-common.module';\nimport { TapScanResultsComponent } from './tap-scan-results/tap-scan-results.component';\nimport { TapScannerCommonModule } from '../tap-scanner-common/tap-scanner-common.module';\n@NgModule({\n  declarations: [TapScannerBleComponent, TapScanResultsComponent],\n  exports: [TapScannerBleComponent, TapScanResultsComponent],\n  imports: [LibCommonModule, TapScannerCommonModule],\n})\nexport class TapScannerBleModule {}\n","import {\n  Component,\n  OnInit,\n  EventEmitter,\n  Output,\n  Input,\n  Inject,\n  OnDestroy,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { ProtocolSelectedEvent } from '../api';\nimport { TAP_BLE_SCANNER } from '../../../injection-types';\nimport { DeviceScanner } from '@iotize/tap/scanner/api';\n\n@Component({\n  selector: 'tap-scanner-web-bluetooth',\n  templateUrl: './tap-scanner-web-bluetooth.component.html',\n  styleUrls: ['./tap-scanner-web-bluetooth.component.scss'],\n})\nexport class TapScannerWebBluetoothComponent implements OnInit, OnDestroy {\n  @Output() onProtocolSelected: EventEmitter<ProtocolSelectedEvent> =\n    new EventEmitter();\n\n  @Input() showScanButton = true;\n\n  isScanning = false;\n  isLoadingDevice = false;\n  error?: Error;\n  deviceSubscription?: Subscription;\n  errorSubscription?: Subscription;\n\n  constructor(@Inject(TAP_BLE_SCANNER) public scanner: DeviceScanner<any>) {}\n\n  async ngOnInit() {\n    // if (!await this.platform.isBluetoothAvailable()) {\n    //   this.errorBleUnavailable = new Error(\"Bluetooth is not available with your browser\");\n    // }\n    this.deviceSubscription = this.scanner.results.subscribe({\n      next: async (bluetoothDevices: any[]) => {\n        const bluetoothDevice = bluetoothDevices[0];\n        this.onProtocolSelected.emit({\n          meta: {\n            type: 'ble',\n            info: {\n              webBluetooth: bluetoothDevice,\n              id: bluetoothDevice.id,\n              name: bluetoothDevice.name,\n            },\n          },\n        });\n        this.isScanning = false;\n      },\n      error: (error) => {\n        this.onError(error);\n      },\n      complete: () => {\n        this.isScanning = false;\n      },\n    });\n\n    // this.errorSubscription = this.scanner.errors$().subscribe({\n    //   next: (err) => {\n    //     this.onError(err);\n    //   }\n    // });\n  }\n\n  ngOnDestroy() {\n    this.deviceSubscription?.unsubscribe();\n    this.errorSubscription?.unsubscribe();\n  }\n\n  async startScan() {\n    this.isScanning = true;\n    this.error = undefined;\n    await this.scanner.start();\n    // .catch((err) => {\n    //   this.onError(err);\n    // });\n  }\n\n  onError(error: Error) {\n    this.isScanning = false;\n    console.warn(error);\n    this.error = error;\n  }\n}\n","<ion-progress-bar\n  type=\"indeterminate\"\n  [hidden]=\"!isScanning && !isLoadingDevice\"\n></ion-progress-bar>\n<ion-grid class=\"center-form\" *ngIf=\"showScanButton\">\n  <ion-row>\n    <ion-col>\n      <form>\n        <ion-button\n          (click)=\"startScan()\"\n          [disabled]=\"isScanning\"\n          color=\"primary\"\n          expand=\"block\"\n          size=\"large\"\n        >\n          <ion-icon name=\"bluetooth\"></ion-icon>\n          Scan\n        </ion-button>\n        <!--<ion-button (click)=\"stopScan()\" *ngIf=\"isScanning\" color=\"danger\" expand=\"block\" size=\"large\">Stop</ion-button>-->\n      </form>\n    </ion-col>\n  </ion-row>\n</ion-grid>\n","import { NgModule } from '@angular/core';\nimport { LibCommonModule } from '../../lib-common/lib-common.module';\nimport { TapScannerWebBluetoothComponent } from './tap-scanner-web-bluetooth.component';\nimport { TAP_BLE_SCANNER } from '../../../injection-types';\n// import { TapScannerWebBluetoothService } from './tap-scanner-web-bluetooth.service';\n\n// @dynamic flag is mandatory because we use injection token in TapScannerWebBluetoothComponent. See this issue: https://github.com/angular/angular/issues/19698\n// @dynamic\n@NgModule({\n  declarations: [TapScannerWebBluetoothComponent],\n  exports: [TapScannerWebBluetoothComponent],\n  imports: [LibCommonModule],\n})\nexport class TapScannerWebBluetoothModule {}\n","import { Injectable } from '@angular/core';\nimport {\n  ActivatedRouteSnapshot,\n  Resolve,\n  RouterStateSnapshot,\n} from '@angular/router';\nimport { Platform } from '@ionic/angular';\nimport { TapScannerNfcService } from './tap-scanner/tap-scanner-nfc/tap-scanner-nfc.service';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class TapNfcInitializationResolver implements Resolve<void> {\n  error?: Error;\n\n  private _initPromise?: Promise<void>;\n\n  constructor(\n    private platform: Platform,\n    private tapNfcScannerService: TapScannerNfcService\n  ) {}\n\n  resolve(_route: ActivatedRouteSnapshot, _state: RouterStateSnapshot): void {\n    if (!this._initPromise) {\n      this._initPromise = this._initNFC();\n    }\n  }\n\n  private async _initNFC() {\n    try {\n      await this.platform.ready();\n      await this.tapNfcScannerService.listenToNfcTaps();\n      console.log('NFC init OK');\n    } catch (err) {\n      console.warn('NFC initialization failed', err);\n      this.error = err as Error;\n    }\n  }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { WifiDiscoveredDeviceType } from '../definitions';\n\n@Component({\n  selector: 'tap-scanner-wifi-item',\n  templateUrl: './tap-scanner-wifi-item.component.html',\n  styleUrls: ['./tap-scanner-wifi-item.component.scss'],\n})\nexport class TapScannerWifiItemComponent {\n  @Output() onItemClicked: EventEmitter<WifiDiscoveredDeviceType> =\n    new EventEmitter();\n\n  @Input() lines = 'full';\n\n  @Input() showSignalStrenght = true;\n\n  @Input() devices: Array<WifiDiscoveredDeviceType> = [];\n\n  constructor() {}\n  _onItemClicked(device: WifiDiscoveredDeviceType) {\n    this.onItemClicked.emit(device);\n  }\n}\n","<ion-list [lines]=\"lines\">\n  <ion-item\n    (click)=\"_onItemClicked(device)\"\n    *ngFor=\"let device of devices\"\n    class=\"hover scan-result-item\"\n  >\n    <ng-container *ngIf=\"device\">\n      <ion-label>\n        <span class=\"name\">{{\n          device.name || device.SSID || 'Hidden SSID'\n        }}</span>\n        <ng-container *ngIf=\"device.host\">\n          <br />\n          <span class=\"ip-address\">Host: {{ device.host }}&nbsp;</span>\n        </ng-container>\n        <span *ngIf=\"device.port\" class=\"port\">\n          <br />\n          Port: {{ device.port }}\n        </span>\n      </ion-label>\n      <tap-ble-rssi-signal\n        *ngIf=\"showSignalStrenght\"\n        [bars]=\"device.rssi || device.level | rssiToSignalStrenght\"\n        slot=\"end\"\n      ></tap-ble-rssi-signal>\n      <ion-chip *ngIf=\"device.type\" slot=\"end\" color=\"primary\">\n        Network\n      </ion-chip>\n    </ng-container>\n  </ion-item>\n</ion-list>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n// import { TapScannerWifiService } from './tap-scanner-wifi.service';\nimport { TapScannerCommonModule } from '../tap-scanner-common/tap-scanner-common.module';\nimport { TapScannerWifiItemComponent } from './tap-scanner-wifi-item/tap-scanner-wifi-item.component';\nimport { IonicModule } from '@ionic/angular';\n\n@NgModule({\n  declarations: [TapScannerWifiItemComponent],\n  exports: [TapScannerWifiItemComponent],\n  imports: [CommonModule, IonicModule, TapScannerCommonModule],\n})\nexport class TapScannerWifiModule {}\n","import { ProtocolMeta } from '../extensions/protocol-info';\n\nexport function stringToProtocolMeta(value: string): ProtocolMeta | undefined {\n  if (value === 'iframe') {\n    return {\n      type: 'iframe',\n      info: {},\n    };\n  } else if (value === 'webview') {\n    return {\n      type: 'webview',\n    };\n  } else if (value === 'mock' || value === 'virtual') {\n    return {\n      type: 'virtual',\n    };\n  } else if (value.startsWith('tcp://')) {\n    return {\n      type: 'socket',\n      info: {\n        url: value,\n      },\n    };\n  } else if (value.startsWith('ws://') || value.startsWith('wss://')) {\n    return {\n      type: 'websocket',\n      info: {\n        url: value,\n      },\n    };\n  } else {\n    try {\n      return binaryToProtocolMeta(value);\n    } catch (err) {\n      console.warn('NOT A BINARY', err);\n    }\n  }\n  return undefined;\n}\n\nexport function binaryToProtocolMeta(value: string): ProtocolMeta {\n  return JSON.parse(atob(value));\n}\n","import { Injectable } from '@angular/core';\nimport {\n  ActivatedRouteSnapshot,\n  CanActivate,\n  RouterStateSnapshot,\n} from '@angular/router';\nimport { NavController } from '@ionic/angular';\nimport { Tap } from '@iotize/tap';\nimport { ComProtocol } from '@iotize/tap/protocol/api';\nimport { CurrentDeviceService } from './current-device.service';\nimport { ProtocolMeta } from './extensions/protocol-info';\nimport { ProtocolFactoryService } from './protocol-factory.service';\nimport { stringToProtocolMeta } from './utility/protocol-meta-param-converter';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class TapSelectedGuard implements CanActivate {\n  constructor(\n    private tapService: CurrentDeviceService,\n    private protocolFactory: ProtocolFactoryService,\n    private navController: NavController\n  ) {}\n\n  async canActivate(\n    route: ActivatedRouteSnapshot,\n    state: RouterStateSnapshot\n  ): Promise<boolean> {\n    const noTapRedirectUrl = route.data['noTapRedirectUrl'];\n    try {\n      if (this.tapService.hasTap) {\n        return true;\n      }\n      const protocolParam = route.queryParams.protocol;\n      let protocolMeta: ProtocolMeta | undefined;\n      if (protocolParam) {\n        protocolMeta = stringToProtocolMeta(protocolParam);\n        if (!protocolMeta) {\n          throw new Error(\n            `Invalid protocol parameter value: \"${protocolParam}\"`\n          );\n        }\n      }\n      if (!protocolMeta) {\n        protocolMeta = this.tryRestaureSession();\n      }\n      if (!protocolMeta) {\n        throw new Error(`No device selected`);\n      }\n      if (!this.protocolFactory.isValid(protocolMeta)) {\n        throw new Error(`Invalid protocol meta`);\n      }\n      const protocol: ComProtocol | undefined =\n        await this.protocolFactory.create(protocolMeta);\n      if (protocol) {\n        localStorage.setItem('last-protocol', JSON.stringify(protocolMeta));\n        await this.tapService.useProtocolFromMeta(protocolMeta, true, false);\n      } else {\n        throw new Error(\n          `Failed to create tap connection from given information: ${JSON.stringify(\n            protocolMeta\n          )}`\n        );\n      }\n      return true;\n    } catch (err: any) {\n      console.warn('failed to resolved selected tap', err);\n      if (noTapRedirectUrl) {\n        this.navController.navigateRoot(noTapRedirectUrl, {});\n      }\n      return false;\n    }\n  }\n\n  tryRestaureSession(): ProtocolMeta | undefined {\n    try {\n      const lastSession = localStorage.getItem('last-protocol');\n      if (lastSession) {\n        const protocolMeta = JSON.parse(lastSession);\n        console.log('ConnectedTapResolver', 'Restaure session: ', protocolMeta);\n        return protocolMeta;\n      }\n    } catch (err) {\n      localStorage.removeItem('last-protocol');\n    }\n    return undefined;\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { isCodeError } from '@iotize/common/error';\nimport { TapError, TapResponseStatusError } from '@iotize/tap';\nimport { ResultCode } from '@iotize/tap/client/api';\nimport { ResultCodeTranslation } from '@iotize/tap/client/impl';\nimport { Observable } from 'rxjs';\nimport { isTapResultCodeError } from './error-utility';\nimport { TapInfoRequestService } from './tap-info/tap-info-request.service';\nimport { TapInfo } from './tap-info/keys';\nimport { TapInfoCacheService } from './tap-info/tap-info-cache.service';\nimport { TapInfoDAOService } from './tap-info/tap-info-dao.service';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class TapTargetConnectService {\n  error?: Error;\n\n  connectedChange: Observable<boolean> = this.tapInfoCache.valueChange(\n    TapInfo.IsTargetConnected\n  );\n\n  loading = false;\n\n  constructor(\n    private tapInfoCache: TapInfoCacheService,\n    private infoResolver: TapInfoRequestService,\n    private tapInfoDAOService: TapInfoDAOService\n  ) {}\n\n  isConnected() {\n    return (\n      this.tapInfoCache.getInfoSnapshot(TapInfo.IsTargetConnected)?.value ===\n      true\n    );\n  }\n\n  async refresh(): Promise<boolean> {\n    const result = await this.infoResolver.refreshKey(\n      TapInfo.IsTargetConnected\n    );\n    if (result.error) {\n      throw result.error;\n    } else {\n      return result.value as boolean;\n    }\n  }\n\n  /**\n   * Connect to target\n   * @throws if target connection failed\n   */\n  async connect(): Promise<void> {\n    try {\n      this.loading = true;\n      await this.tapInfoDAOService.put(\n        { key: TapInfo.IsTargetConnected },\n        true\n      );\n      this.tapInfoCache.setKeyValue(TapInfo.IsTargetConnected, true);\n      this.error = undefined;\n    } catch (err: any) {\n      if (isCodeError(TapError.Code.ResponseStatusError, err)) {\n        const codeRet = (err as TapResponseStatusError).response.codeRet();\n        const shortErrorMessage =\n          ResultCodeTranslation[\n            codeRet as keyof typeof ResultCodeTranslation\n          ] || `Unknown error (code: ${codeRet})`;\n        if (isTapResultCodeError(err, ResultCode.UNABLE_TO_CONNECT_TO_TARGET)) {\n          err.message = `${shortErrorMessage}. Make sure that target is properly wired to the Tap.`;\n        } else {\n          err.message = shortErrorMessage;\n        }\n      }\n      this.error = err as Error;\n      throw err;\n    } finally {\n      this.loading = false;\n    }\n  }\n\n  async disconnect(): Promise<boolean> {\n    try {\n      this.loading = true;\n      await this.tapInfoDAOService.put(\n        { key: TapInfo.IsTargetConnected },\n        false\n      );\n      this.tapInfoCache.setKeyValue(TapInfo.IsTargetConnected, false);\n      return true;\n    } catch (err) {\n      throw err;\n    } finally {\n      this.loading = false;\n    }\n  }\n}\n","import { TaskManager } from './definitions';\n\nexport const TASK_MANAGER_RESOLUTION_SERVICE =\n  'TASK_MANAGER_RESOLUTION_SERVICE';\n\nexport interface TaskErrorResolutionServiceInterface {\n  shouldShowNfcModal(error: Error): boolean;\n  onTaskError<TaskContext, TaskResult>(\n    taskContainer: TaskManager.TaskContainer<TaskContext, TaskResult>,\n    err: Error\n  ): Promise<TaskResult>;\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { isCodeError } from '@iotize/common/error';\nimport { TapClientError } from '@iotize/tap/client/impl';\nimport { Observable, Subject, Subscriber, throwError } from 'rxjs';\nimport { share } from 'rxjs/operators';\nimport { isTapUserNotAuthorizedError } from '../error-utility';\nimport { debug } from '../logger';\nimport { TaskManager } from './definitions';\nimport {\n  TaskErrorResolutionServiceInterface,\n  TASK_MANAGER_RESOLUTION_SERVICE,\n} from './provider';\n\nconst TAG = 'TaskManager';\n\ntype TaskContainer<TaskContext, TaskResult> = TaskManager.TaskContainer<\n  TaskContext,\n  TaskResult\n>;\n\nconst characters = 'abcdefghijklmnopqrstuvwxyz0123456789';\n\nexport function randomId() {\n  let result = '';\n  const charactersLength = characters.length;\n  for (let i = 0; i < 20; i++) {\n    result += characters.charAt(Math.floor(Math.random() * charactersLength));\n  }\n  return result;\n}\n\n@Injectable()\nexport class TaskManagerService {\n  private _tasks: TaskContainer<unknown, unknown>[];\n\n  private _events: Subject<TaskManager.Event<unknown>>;\n\n  public get events() {\n    return this._events.asObservable();\n  }\n\n  public get tasks(): TaskManager.Task<unknown>[] {\n    return this._tasks.map((container) => container.task);\n  }\n\n  constructor(\n    @Inject(TASK_MANAGER_RESOLUTION_SERVICE)\n    private taskErrorResolutionService: TaskErrorResolutionServiceInterface\n  ) {\n    debug(TAG, 'new instance!');\n    this._tasks = [];\n    this._events = new Subject();\n  }\n\n  createTask<TaskContext, TaskResult = unknown>(\n    task: TaskManager.Task<TaskContext, TaskResult>,\n    options: {\n      position?: number;\n    } = {}\n  ): TaskManager.TaskContainer<TaskContext, TaskResult> {\n    if (this.hasTask(task.id)) {\n      this.clearTask(task.id);\n    }\n    const taskContainer: TaskContainer<TaskContext, TaskResult> = {\n      task: task,\n      meta: {\n        state: 'pending',\n      },\n      events: new Subject<TaskManager.Event<TaskContext, TaskResult>>(),\n    };\n    let position: number;\n    if (options.position !== undefined) {\n      this._tasks[options.position] = taskContainer as TaskContainer<\n        unknown,\n        unknown\n      >;\n      position = options.position;\n    } else {\n      const newLength = this._tasks.push(\n        taskContainer as TaskContainer<unknown, unknown>\n      );\n      position = newLength - 1;\n    }\n    debug(TAG, 'createTask', task.id, 'position', position);\n    return taskContainer;\n  }\n\n  removeTask(id: string) {\n    const index = this.getTaskPosition(id);\n    if (index >= 0) {\n      const [task] = this._tasks.splice(index, 1);\n      this._cancel(task);\n      debug(TAG, 'removed task', task.task.id, 'position', index);\n    }\n  }\n\n  hasTask(id: string): boolean {\n    return this.getTaskPosition(id) !== -1;\n  }\n\n  task<TaskContext>(id: string): TaskManager.Task<TaskContext> | undefined {\n    const container = this.container(id);\n    if (container) {\n      return container.task;\n    }\n    return undefined;\n  }\n\n  container<TaskContext, TaskResult = unknown>(\n    id: string\n  ): TaskContainer<TaskContext, TaskResult> | undefined {\n    const index = this.getTaskPosition(id);\n    if (index >= 0) {\n      return this._tasks[index] as TaskContainer<TaskContext, TaskResult>;\n    }\n    return undefined;\n  }\n\n  cancel(id: string) {\n    const index = this.getTaskPosition(id);\n    if (index >= 0) {\n      this._cancel(this._tasks[index]);\n    } else {\n      debug(TAG, 'task ', id, 'does not exist. Cannot cancel');\n    }\n  }\n\n  taskMeta(id: string) {\n    const container = this.container(id);\n    if (container) {\n      return container.meta;\n    }\n    return undefined;\n  }\n\n  addTaskContainer<TaskContext>(\n    container: TaskManager.TaskContainer<TaskContext>\n  ) {\n    this._tasks.push(container);\n  }\n\n  addTask$<TaskContext>(\n    task: TaskManager.Task<TaskContext>,\n    options: {\n      position?: number;\n    } = {}\n  ): Observable<TaskManager.Event<TaskContext>> {\n    const taskContainer = this.createTask(task, options);\n    return taskContainer.events;\n  }\n\n  clearTask(id: string): void {\n    const taskIndex = this.getTaskPosition(id);\n    if (taskIndex !== -1) {\n      const removed = this._tasks.splice(taskIndex, 1);\n      if (removed.length !== 1) {\n        throw new Error(\n          `Internal error: clear task removed ${removed.length} task(s). Clear task must removed exactly 1 task. It's probably a bug.`\n        );\n      }\n      debug(TAG, `${removed[0].task.id}: cleared`);\n    } else {\n      debug(TAG, `${id}: does not exist, cannot remove`);\n    }\n  }\n\n  cancelAll() {\n    this._tasks.forEach((task) => {\n      this._cancel(task);\n    });\n  }\n\n  clearAll() {\n    this._tasks = [];\n  }\n\n  exec<TaskContext>(\n    taskId: string,\n    context: TaskContext\n  ): Observable<TaskManager.Event<TaskContext>> {\n    const container = this.container(taskId);\n    if (!container) {\n      return throwError(new Error(`Task with id \"${taskId}\" does not exist`));\n    }\n    container.meta.context = context;\n    return this.execAsObservable(container);\n  }\n\n  private execAsObservable<TaskContext, TaskResult>(\n    task: TaskContainer<TaskContext, TaskResult>\n  ) {\n    return new Observable<TaskManager.Event<TaskContext, TaskResult>>(\n      (emitter) => {\n        (async () => {\n          try {\n            await this._exec(task, emitter);\n            emitter.complete();\n          } catch (err) {\n            emitter.error(err);\n          }\n        })();\n      }\n    ).pipe(share());\n  }\n\n  async retry<TaskContext, TaskResult>(\n    container: TaskManager.TaskContainer<TaskContext, TaskResult>\n  ): Promise<TaskResult> {\n    return (\n      (await this.execAsObservable(\n        container\n      ).toPromise()) as TaskManager.AfterTaskEvent<TaskContext, TaskResult>\n    ).result;\n  }\n\n  execNext() {\n    return new Observable<TaskManager.Event<unknown>>((emitter) => {\n      (async () => {\n        try {\n          if (this._tasks.length > 0) {\n            await this._exec(this._tasks[0], emitter);\n          }\n          emitter.complete();\n        } catch (err) {\n          emitter.error(err);\n        }\n      })();\n    }).pipe(share());\n  }\n\n  execDelayedTasks() {\n    return this.execTasksByState('delayed');\n  }\n\n  execPendingTasks(): Observable<TaskManager.Event<unknown>> {\n    return this.execTasksByState('pending');\n  }\n\n  execTasksByState(\n    state: TaskManager.TaskState\n  ): Observable<TaskManager.Event<unknown>> {\n    const obs = new Observable(\n      (emitter: Subscriber<TaskManager.Event<unknown>>) => {\n        let stop = false;\n        (async () => {\n          try {\n            const pendingTasks = this._tasks.filter(\n              (container) => container.meta.state === state\n            );\n            debug(\n              TAG,\n              `execAll() with ${\n                pendingTasks.length\n              } task(s) (state == ${state}): ${pendingTasks\n                .map((task) => task.task.id)\n                .join(', ')}`\n            );\n            for (const pendingTask of pendingTasks) {\n              if (!stop) {\n                await this._exec(pendingTask, emitter);\n              }\n            }\n            debug(TAG, 'execAll() COMPLETED');\n            emitter.complete();\n          } catch (err) {\n            debug(TAG, 'execAll() ERROR');\n            emitter.error(err);\n          }\n        })();\n        return () => {\n          stop = true;\n          // Nothing to do when unsubscribing\n        };\n      }\n    );\n    return obs.pipe(share());\n  }\n\n  getTaskPosition(id: string): number {\n    // Reversed for LIFO management of tasks with the same id.\n    // TO VALIDATE\n    return this._tasks\n      .reverse()\n      .findIndex((container) => container.task.id === id);\n  }\n\n  private async _exec<TaskContext, TaskResult>(\n    taskContainer: TaskContainer<TaskContext, TaskResult>,\n    emitter: Subscriber<TaskManager.Event<TaskContext, TaskResult>>\n  ) {\n    const task = taskContainer.task;\n    try {\n      debug(TAG, `${task.id} _exec() starting`);\n      taskContainer.meta.state = 'running';\n      this._emit(\n        {\n          type: 'BEFORE_TASK',\n          task: task,\n        },\n        [emitter, taskContainer.events]\n      );\n      const result = await task.exec(taskContainer.meta.context);\n      // this.clearTask(task.id);\n      this._emit(\n        {\n          type: 'AFTER_TASK',\n          task: task,\n          result: result,\n        },\n        [emitter, taskContainer.events]\n      );\n      taskContainer.meta.result = result;\n      taskContainer.meta.state = 'done';\n      debug(TAG, `${task.id} _exec() DONE`);\n      // taskContainer.meta.obs.complete();\n    } catch (initialError: any) {\n      try {\n        await this._onTaskExecError(taskContainer, initialError);\n      } catch (err) {\n        const typedError = err as Error;\n        taskContainer.meta.error = typedError;\n        const isDelayed = this._isDelayError(typedError);\n        const newState: TaskManager.TaskState = isDelayed ? 'delayed' : 'done';\n        debug(TAG, taskContainer.task.id, '_onTaskError newState: ', newState);\n        taskContainer.meta.state = newState;\n        taskContainer.events.next({\n          type: 'ERROR_TASK',\n          error: typedError,\n          delayed: isDelayed,\n          task: taskContainer.task,\n        });\n        throw err;\n      }\n    }\n  }\n\n  private async _onTaskExecError<TaskContext, TaskResult>(\n    taskContainer: TaskContainer<TaskContext, TaskResult>,\n    err: Error\n  ) {\n    return await this.taskErrorResolutionService.onTaskError(\n      taskContainer,\n      err\n    );\n  }\n\n  private async _cancel<TaskContext, TaskResult>(\n    taskContainer: TaskContainer<TaskContext, TaskResult>\n  ) {\n    try {\n      debug(TAG, 'cancel task: ', taskContainer.task.id);\n      const task = taskContainer.task;\n      if (task.cancel) {\n        await task.cancel();\n        this._emit({\n          type: 'CANCEL_TASK',\n          task: task,\n        });\n      }\n      taskContainer.meta.state = 'pending';\n    } catch (err: any) {\n      this._onError(err);\n    }\n  }\n\n  private _emit<TaskContext, TaskResult = unknown>(\n    event: TaskManager.Event<TaskContext, TaskResult>,\n    emitters: (\n      | Subscriber<TaskManager.Event<TaskContext, TaskResult>>\n      | Subject<TaskManager.Event<TaskContext, TaskResult>>\n    )[] = []\n  ) {\n    this._events.next(event);\n    emitters.forEach((emitter) => {\n      emitter.next(event);\n    });\n  }\n\n  private _onError(err: Error) {\n    console.warn('Error task', err);\n    // TODO\n  }\n\n  private _isDelayError(err: Error) {\n    debug(TAG, '_isDelayError', err);\n    if (isTapUserNotAuthorizedError(err)) {\n      return true;\n    }\n    return (\n      isCodeError(TapClientError.Code.NotConnectedError, err) ||\n      isCodeError('NfcTagLostError', err) ||\n      isCodeError('NfcNotConnectedError', err)\n    );\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { Injectable, ModuleWithProviders, NgModule, Type } from '@angular/core';\nimport { TaskManager } from './definitions';\nimport {\n  TaskErrorResolutionServiceInterface,\n  TASK_MANAGER_RESOLUTION_SERVICE,\n} from './provider';\nimport { TaskManagerService } from './task-manager.service';\n\n@Injectable()\nexport class EmptyTaskResolutionService\n  implements TaskErrorResolutionServiceInterface\n{\n  shouldShowNfcModal(error: Error): boolean {\n    return false;\n  }\n  onTaskError<TaskContext, TaskResult>(\n    taskContainer: TaskManager.TaskContainer<TaskContext, TaskResult>,\n    err: Error\n  ): Promise<TaskResult> {\n    throw err;\n  }\n}\n\n@NgModule({\n  declarations: [],\n  imports: [CommonModule],\n  providers: [],\n})\nexport class TaskManagerModule {\n  static forRoot(settings: {\n    taskErrorResolutionService?: Type<TaskErrorResolutionServiceInterface>;\n  }): ModuleWithProviders<TaskManagerModule> {\n    return {\n      ngModule: TaskManagerModule,\n      providers: [\n        {\n          provide: TASK_MANAGER_RESOLUTION_SERVICE,\n          useClass:\n            settings.taskErrorResolutionService || EmptyTaskResolutionService,\n        },\n        TaskManagerService,\n      ],\n    };\n  }\n}\n","import {\n  AfterViewInit,\n  Component,\n  ContentChild,\n  Directive,\n  ElementRef,\n  EventEmitter,\n  HostListener,\n  Input,\n  OnDestroy,\n  Output,\n} from '@angular/core';\nimport { CodeError } from '@iotize/common/error';\nimport { TapError, TapResponseStatusError } from '@iotize/tap';\nimport { ResultCode } from '@iotize/tap/client/api';\nimport { TapClientError } from '@iotize/tap/client/impl';\nimport { debug } from '../logger';\nimport { TaskManager } from '../task-manager/definitions';\nimport { TaskManagerService } from '../task-manager/task-manager.service';\n\nconst TAG = 'TaskManagerComponent';\n\n@Directive({\n  selector: '[app-task-manager-action-cancel]',\n})\nexport class TaskManagerActionCancelDirective {\n  @Output() onClick = new EventEmitter<void>();\n\n  constructor(readonly elementRef: ElementRef) {}\n\n  // disable(value: boolean) {\n  //   // this.elementRef.\n  // }\n\n  @HostListener('click') onClickListener() {\n    debug('app-task-manager-action-cancel clicked');\n    this.onClick.emit();\n  }\n}\n\n@Directive({\n  selector: '[app-task-manager-action-exec]',\n})\nexport class TaskManagerActionExecDirective {\n  @Output() onClick = new EventEmitter<void>();\n\n  constructor() {} // public tpl: TemplateRef<any>\n\n  @HostListener('click') onClickListener() {\n    this.onClick.emit();\n  }\n}\n\n@Component({\n  selector: 'app-task-manager-running',\n  template: ' <ng-content></ng-content> ',\n})\nexport class TaskManagerRunningComponent {\n  /** Template inside the MatTab view that contains an `<ng-content>`. */\n  // @ViewChild(TemplateRef, { static: true }) _implicitContent: TemplateRef<any>;\n\n  @Input() context: any;\n\n  constructor(public taskManager: TaskManagerService) {}\n}\n\n@Component({\n  selector: 'app-task-manager-delayed',\n  template: ' <ng-content></ng-content> ',\n})\nexport class TaskManagerDelayedComponent {\n  /** Template inside the MatTab view that contains an `<ng-content>`. */\n  // @ViewChild(TemplateRef, { static: true }) _implicitContent: TemplateRef<any>;\n\n  @Input() context: any;\n\n  constructor(public taskManager: TaskManagerService) {}\n\n  cancelTask() {\n    debug(TAG, 'Cancel task click');\n  }\n}\n\n@Component({\n  selector: 'app-task-manager-action',\n  template: ' <ng-content></ng-content> ',\n})\nexport class TaskManagerActionComponent {\n  @Input() context: any;\n\n  /** Template inside the MatTab view that contains an `<ng-content>`. */\n  // @ViewChild(TemplateRef, { static: true }) _implicitContent: TemplateRef<any>;\n\n  // @ContentChildren(TaskManagerActionExecDirective) execButton!: TaskManagerActionExecDirective;\n\n  constructor(public taskManager: TaskManagerService) {}\n\n  performTask() {\n    debug(TAG, 'Perform task click');\n  }\n}\n\n@Component({\n  selector: 'app-task-manager',\n  templateUrl: './task-manager.component.html',\n  styleUrls: ['./task-manager.component.scss'],\n})\nexport class TaskManagerComponent implements AfterViewInit, OnDestroy {\n  taskContainer?: TaskManager.TaskContainer<unknown>;\n\n  @Input() set task(\n    taskContainerOrString: TaskManager.TaskContainer<unknown> | string\n  ) {\n    let taskContainer: TaskManager.TaskContainer<unknown> | undefined;\n    taskContainer = taskContainerOrString as TaskManager.TaskContainer<unknown>;\n    debug(TAG, 'set task ', taskContainer?.task?.id);\n    this.taskContainer = taskContainer;\n  }\n\n  get taskId() {\n    return this.taskContainer?.task?.id;\n  }\n\n  @ContentChild(TaskManagerActionCancelDirective, { static: true })\n  cancelDirective?: TaskManagerActionCancelDirective;\n  @ContentChild(TaskManagerActionExecDirective, { static: true })\n  execDirective?: TaskManagerActionCancelDirective;\n\n  // @ContentChild(TaskManagerActionComponent, {}) actionComponent: TaskManagerActionComponent;\n\n  constructor(public taskManager: TaskManagerService) {}\n\n  get loading(): boolean {\n    return false;\n  }\n\n  get taskState() {\n    return this.taskContainer?.meta?.state;\n  }\n\n  get actionTemplateContext() {\n    const cont = this._createContext();\n    if ('execTask' in cont) {\n      cont['execTask'] = (...context: any[]) => {\n        this.execTask(context);\n      };\n    }\n    return { $implicit: cont };\n  }\n\n  get delayedTemplateContext() {\n    const context = this._createContext();\n    if ('execTask' in this) {\n      context['execTask'] = () => {\n        if (this.taskId && this.taskManager.hasTask(this.taskId)) {\n          this.taskManager.cancel(this.taskId);\n        }\n      };\n    }\n    return { $implicit: context };\n  }\n\n  private _createContext(): any {\n    return this;\n  }\n\n  ngAfterViewInit(): void {\n    if (this.cancelDirective) {\n      this.cancelDirective.onClick.subscribe(() => {\n        this.cancelTask();\n      });\n    } else {\n      debug(TAG, 'cancel button is not set yet');\n    }\n    if (this.execDirective) {\n      this.execDirective.onClick.subscribe(() => {\n        this.execTask();\n      });\n    }\n  }\n\n  ngOnDestroy() {\n    debug(TAG, 'Task', this.taskId, 'component ngOnDestroy');\n    this.cancelTask();\n  }\n\n  cancelTask() {\n    debug(TAG, 'cancelTask clicked!');\n    if (!this.taskId) {\n      return;\n    }\n    if (this.taskManager.hasTask(this.taskId)) {\n      this.taskManager.cancel(this.taskId);\n    } else {\n      debug(TAG, 'cannot cancel task ', this.taskId, 'it does not exist');\n    }\n  }\n\n  explainDelayReason() {\n    const err = this.taskContainer?.meta.error;\n    if (err) {\n      const codeError = err as CodeError;\n      switch (codeError.code) {\n        case TapError.Code.ResponseStatusError:\n          switch ((err as TapResponseStatusError).response.status) {\n            case ResultCode.UNAUTHORIZED:\n              return 'Waiting for user login';\n          }\n          break;\n        case TapError.Code.ExecuteRequestError:\n          const cause = (err as TapError).cause as CodeError;\n          if (cause) {\n            switch (cause.code) {\n              case TapClientError.Code.NotConnectedError:\n              case 'NfcTagLostError':\n              case 'NfcNotConnectedError':\n                return 'Waiting for Tap reconnection';\n            }\n          }\n      }\n      return 'Unknown reason';\n    }\n  }\n\n  execTask(context?: any) {\n    const container = this.taskContainer;\n    if (!container) {\n      return;\n    }\n    debug(TAG, 'execTask ', container.task.id);\n    this.taskManager.addTaskContainer(container);\n    // this.execDirective.disable(true);\n    this.taskManager.exec(container.task.id, context).subscribe({\n      error: (err) => {\n        debug(`Task ${container.task.id} error: ${err.message}`);\n        console.warn(err);\n        // this.execDirective.disable(false);\n      },\n      complete: () => {\n        debug(`Task ${container.task.id} COMPLETED`);\n      },\n    });\n  }\n}\n","<ng-container [ngSwitch]=\"taskState\">\n  <ng-content\n    select=\"app-task-manager-delayed\"\n    *ngSwitchCase=\"'delayed'\"\n  ></ng-content>\n  <ng-content\n    select=\"app-task-manager-running\"\n    *ngSwitchCase=\"'running'\"\n  ></ng-content>\n  <ng-content select=\"app-task-manager-action\" *ngSwitchDefault></ng-content>\n</ng-container>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { IonicModule } from '@ionic/angular';\nimport { TaskManagerModule } from '../task-manager/task-manager.module';\n\nimport {\n  TaskManagerActionCancelDirective,\n  TaskManagerActionComponent,\n  TaskManagerActionExecDirective,\n  TaskManagerComponent,\n  TaskManagerDelayedComponent,\n  TaskManagerRunningComponent,\n} from './task-manager.component';\n\nconst EXPORTS = [\n  TaskManagerComponent,\n  TaskManagerActionCancelDirective,\n  TaskManagerActionExecDirective,\n  TaskManagerDelayedComponent,\n  TaskManagerActionComponent,\n  TaskManagerRunningComponent,\n];\n\n@NgModule({\n  declarations: EXPORTS,\n  exports: EXPORTS,\n  imports: [CommonModule, IonicModule, TaskManagerModule],\n})\nexport class TaskManagerUiModule {}\n","export const TAP_MANAGER_APP_ID = 'com.iotize.android.communicationapp';\n","/*\n * Public API Surface of iotize-ionic\n */\nexport * from './injection-types';\nexport {\n  CONFIGURATION_MODE_VERSION,\n  FACTORY_RESET_MODE_VERSION,\n} from './lib/config-version';\nexport * from './lib/connected-tap-resolver';\nexport * from './lib/csv-helper';\nexport * from './lib/current-device.service';\nexport * from './lib/definitions';\nexport * from './lib/definitions/cloud';\nexport { DisconnectCurrentTapGuard } from './lib/disconnect-current-tap.guard';\nexport {\n  isTapResultCodeError,\n  isTapUserNotAuthorizedError,\n} from './lib/error-utility';\nexport { LibError } from './lib/errors';\nexport {\n  ExecuteTapActionServiceInterface,\n  TAP_EXECUTE_TAP_ACTION_SERVICE,\n} from './lib/execute-tap-action/execute-tap-action.provider';\nexport * from './lib/extensions/data-manager/impl';\nexport { IonicDataLogger } from './lib/extensions/datalogger/data-logger';\nexport * from './lib/extensions/protocol-info';\nexport * from './lib/has-current-tap.guard';\nexport * from './lib/inline-editor/inline-editor.component';\nexport * from './lib/inline-editor/inline-editor.module';\nexport { AutoFocusDirective } from './lib/lib-common/auto-focus.directive';\nexport { DisableControlDirective } from './lib/lib-common/disable-control.directive';\nexport { EnumPipe } from './lib/lib-common/enum.pipe';\nexport { ExtractBitsPipe } from './lib/lib-common/extract-bits.pipe';\nexport * from './lib/lib-common/global-events-service';\nexport * from './lib/lib-common/lib-common.module';\nexport { RememberValueControlDirective } from './lib/lib-common/remember-value-control';\nexport * from './lib/lib-common/tap-request.pipe';\nexport { TrimPipe } from './lib/lib-common/trim.pipe';\nexport { MockVariable } from './lib/mock-variable';\nexport {\n  DEFAULT_TAP_REQUEST_MAX_SIZE_OPTIONS,\n  FixedResponseBodySizeServiceCall,\n  chunkMultiTapRequestCalls,\n  computeTapRequestCallSize,\n  computeMultiTapRequestCallSize,\n  createMultiTapRequestCallChuncksExecutor,\n  createSingleChunkMultiTapRequestCalls,\n} from './lib/multi-requests/multi-requests-utility';\nexport { NfcReTapService } from './lib/nfc-re-tap.service';\n// NFC\nexport { isNfcTapRequiredError, isSameTag } from './lib/nfc/utility';\nexport * from './lib/pending-call-manager';\nexport * from './lib/protocol-factory.service';\nexport { TapAdministrationService } from './lib/tap-administration.service';\nexport { TapConfigItem } from './lib/tap-config-item/definitions';\nexport {\n  TapConfigGetValueType,\n  TapConfigItemAction,\n  TapConfigPutValueType,\n} from './lib/tap-config-item/tap-config-item-base';\nexport * from './lib/tap-connect/api';\n\nexport { TapConnectionStoreItem } from './lib/tap-connect/tap-connection-store/definitions';\nexport { TapConnectionStoreItemComponent } from './lib/tap-connect/tap-connection-store/tap-connection-store-item/tap-connection-store-item.component';\nexport { TapConnectionStoreListComponent } from './lib/tap-connect/tap-connection-store/tap-connection-store-list/tap-connection-store-list.component';\nexport { TapConnectionStoreModule } from './lib/tap-connect/tap-connection-store/tap-connection-store.module';\nexport {\n  TapConnectionStoreService,\n  filterByConnectionTypes,\n} from './lib/tap-connect/tap-connection-store/tap-connection-store.service';\n// export * from './lib/extensions/datalogger';\nexport {\n  ConnectionEvent,\n  TAP_CONNECTION_OPTIONS_PROVIDER,\n  TapConnectionOptions,\n  TapConnectionService,\n  TapRegisterProtocolsMethod,\n} from './lib/tap-connection.service';\nexport { TAP_INFO_RESOLVER_CONFIG } from './lib/tap-info/constants';\nexport {\n  TapInfoHolder,\n  TapInfoKey,\n  TapInfoKeyObjectOrString,\n  Lwm2mEnum,\n  EnumInfo,\n} from './lib/tap-info/definitions';\nexport { TapInfo } from './lib/tap-info/keys';\nexport { TapInfoCacheService } from './lib/tap-info/tap-info-cache.service';\nexport { TapInfoConfigService } from './lib/tap-info/tap-info-config.service';\nexport { TapInfoDAOService } from './lib/tap-info/tap-info-dao.service';\nexport {\n  RefreshKeysProgressState,\n  TapInfoRequestService,\n} from './lib/tap-info/tap-info-request.service';\nexport { UniqArray } from './lib/tap-info/uniq-array';\nexport {\n  createCacheKey,\n  toTapInfoKeyEquals,\n  toTapInfoKeyObject,\n} from './lib/tap-info/utility';\nexport * from './lib/tap-scanner/api';\nexport { DiscoveredDeviceType } from './lib/tap-scanner/tap-scanner-ble/definitions';\nexport * from './lib/tap-scanner/tap-scanner-ble/ble-service.service';\nexport * from './lib/tap-scanner/tap-scanner-ble/tap-scan-results/tap-scan-results.component';\nexport { TapScannerBleComponent } from './lib/tap-scanner/tap-scanner-ble/tap-scanner-ble.component';\nexport * from './lib/tap-scanner/tap-scanner-ble/tap-scanner-ble.module';\nexport * from './lib/tap-scanner/tap-scanner-common/ble-rssi-signal/ble-rssi-signal.component';\nexport { BleRssiSignalComponent } from './lib/tap-scanner/tap-scanner-common/ble-rssi-signal/ble-rssi-signal.component';\nexport { RssiToSignalStrenghtPipe } from './lib/tap-scanner/tap-scanner-common/rssi-to-signal-strenght.pipe';\nexport { TapScannerCommonModule } from './lib/tap-scanner/tap-scanner-common/tap-scanner-common.module';\nexport { MqttDeviceScanItem } from './lib/tap-scanner/tap-scanner-mqtt/definitions';\nexport * from './lib/tap-scanner/tap-scanner-nfc/definitions';\nexport * from './lib/tap-scanner/tap-scanner-nfc/nfc-service.service';\nexport {\n  TapNfcEvent,\n  TapScannerNfcService,\n} from './lib/tap-scanner/tap-scanner-nfc/tap-scanner-nfc.service';\n// export * from './lib/tap-scanner/tap-scanner-web-bluetooth/tap-scanner-web-bluetooth.service';\nexport * from './lib/tap-scanner/tap-scanner-web-bluetooth/tap-scanner-web-bluetooth.component';\nexport * from './lib/tap-scanner/tap-scanner-web-bluetooth/tap-scanner-web-bluetooth.module';\nexport { WifiDiscoveredDeviceType } from './lib/tap-scanner/tap-scanner-wifi/definitions';\n// export * from './lib/tap-scanner/tap-scanner-wifi/tap-scanner-wifi.service';\nexport { runInZone } from './lib/rx-utility/run-in-zone';\nexport { TapResourceKey } from './lib/tap-info/tap-resource-api';\nexport { TapNfcInitializationResolver } from './lib/tap-nfc-initialization.resolver';\nexport * from './lib/tap-scanner/tap-scanner-wifi/tap-scanner-wifi-item/tap-scanner-wifi-item.component';\nexport * from './lib/tap-scanner/tap-scanner-wifi/tap-scanner-wifi.module';\nexport { TapSelectedGuard } from './lib/tap-selected.guard';\nexport { TapTargetConnectService } from './lib/tap-target-connect.service';\nexport { TapValueEditorContainerComponent } from './lib/tap-value-editor-container/tap-value-editor-container.component';\nexport { TapValueEditorContainerModule } from './lib/tap-value-editor-container/tap-value-editor-container.module';\nexport * from './lib/task-manager-ui/task-manager-ui.module';\nexport * from './lib/task-manager-ui/task-manager.component';\nexport { TaskManager } from './lib/task-manager/definitions';\nexport {\n  TASK_MANAGER_RESOLUTION_SERVICE,\n  TaskErrorResolutionServiceInterface,\n} from './lib/task-manager/provider';\nexport { TaskManagerModule } from './lib/task-manager/task-manager.module';\nexport { TaskManagerService } from './lib/task-manager/task-manager.service';\nexport * from './lib/utility';\nexport { TapApiExplorerService } from './lib/tap-api-explorer.service';\nexport { TAP_MANAGER_APP_ID } from './lib/config';\nexport { interfaceServiceGetAppPathResolved } from './lib/extensions';\n// OTHERS\nimport './lib/extensions';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["TAG","ConnectionState","i1","i2.ProtocolFactoryService","i1.CurrentDeviceService","i2","i3","i4.ValueOrDefaultPipe","i2.CurrentDeviceService","Buffer","i1.NFC","i1.NfcService","i1.TapScannerNfcService","i1.TapInfoConfigService","i2.TapInfoCacheService","i1.TapInfoCacheService","i2.TapInfoRequestService","i1.TapConnectionStoreService","i4.TapConnectionStoreItemComponent","i3.CurrentDeviceService","i4.TapApiExplorerService","i3.BleRssiSignalComponent","i4.RssiToSignalStrenghtPipe","i3.TapScanResultsComponent","i2.TapScannerNfcService","i3.TapInfoDAOService","i1.TaskManagerService"],"mappings":"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"}