zwave-js 14.3.3 → 14.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/build/cjs/lib/_version.d.ts +1 -1
  2. package/build/cjs/lib/_version.js +1 -1
  3. package/build/cjs/lib/_version.js.map +1 -1
  4. package/build/cjs/lib/controller/Controller.js +66 -60
  5. package/build/cjs/lib/controller/Controller.js.map +1 -1
  6. package/build/cjs/lib/controller/ControllerStatistics.js +4 -0
  7. package/build/cjs/lib/controller/ControllerStatistics.js.map +1 -1
  8. package/build/cjs/lib/controller/FirmwareUpdateService.js +8 -0
  9. package/build/cjs/lib/controller/FirmwareUpdateService.js.map +1 -1
  10. package/build/cjs/lib/controller/MockControllerBehaviors.js +3 -0
  11. package/build/cjs/lib/controller/MockControllerBehaviors.js.map +1 -1
  12. package/build/cjs/lib/controller/NVMIO.js +7 -0
  13. package/build/cjs/lib/controller/NVMIO.js.map +1 -1
  14. package/build/cjs/lib/controller/NodeInformationFrame.js +2 -0
  15. package/build/cjs/lib/controller/NodeInformationFrame.js.map +1 -1
  16. package/build/cjs/lib/controller/ZWaveSDKVersions.js +3 -0
  17. package/build/cjs/lib/controller/ZWaveSDKVersions.js.map +1 -1
  18. package/build/cjs/lib/controller/utils.js +4 -0
  19. package/build/cjs/lib/controller/utils.js.map +1 -1
  20. package/build/cjs/lib/driver/Bootloader.js +4 -0
  21. package/build/cjs/lib/driver/Bootloader.js.map +1 -1
  22. package/build/cjs/lib/driver/Driver.js +63 -56
  23. package/build/cjs/lib/driver/Driver.js.map +1 -1
  24. package/build/cjs/lib/driver/DriverMock.js +6 -3
  25. package/build/cjs/lib/driver/DriverMock.js.map +1 -1
  26. package/build/cjs/lib/driver/MessageGenerators.js +26 -18
  27. package/build/cjs/lib/driver/MessageGenerators.js.map +1 -1
  28. package/build/cjs/lib/driver/NetworkCache.js +43 -23
  29. package/build/cjs/lib/driver/NetworkCache.js.map +1 -1
  30. package/build/cjs/lib/driver/Queue.js +6 -2
  31. package/build/cjs/lib/driver/Queue.js.map +1 -1
  32. package/build/cjs/lib/driver/SerialAPICommandMachine.js +45 -40
  33. package/build/cjs/lib/driver/SerialAPICommandMachine.js.map +1 -1
  34. package/build/cjs/lib/driver/StateMachineShared.js +5 -0
  35. package/build/cjs/lib/driver/StateMachineShared.js.map +1 -1
  36. package/build/cjs/lib/driver/Statistics.js +4 -0
  37. package/build/cjs/lib/driver/Statistics.js.map +1 -1
  38. package/build/cjs/lib/driver/Task.js +9 -2
  39. package/build/cjs/lib/driver/Task.js.map +1 -1
  40. package/build/cjs/lib/driver/Transaction.js +8 -4
  41. package/build/cjs/lib/driver/Transaction.js.map +1 -1
  42. package/build/cjs/lib/driver/TransportServiceMachine.js +9 -7
  43. package/build/cjs/lib/driver/TransportServiceMachine.js.map +1 -1
  44. package/build/cjs/lib/driver/UpdateConfig.js +8 -4
  45. package/build/cjs/lib/driver/UpdateConfig.js.map +1 -1
  46. package/build/cjs/lib/driver/UserAgent.js +4 -0
  47. package/build/cjs/lib/driver/UserAgent.js.map +1 -1
  48. package/build/cjs/lib/driver/mDNSDiscovery.js +2 -0
  49. package/build/cjs/lib/driver/mDNSDiscovery.js.map +1 -1
  50. package/build/cjs/lib/log/Driver.js +6 -2
  51. package/build/cjs/lib/log/Driver.js.map +1 -1
  52. package/build/cjs/lib/log/Zniffer.js +6 -2
  53. package/build/cjs/lib/log/Zniffer.js.map +1 -1
  54. package/build/cjs/lib/node/DeviceClass.js +4 -0
  55. package/build/cjs/lib/node/DeviceClass.js.map +1 -1
  56. package/build/cjs/lib/node/Endpoint.js +9 -5
  57. package/build/cjs/lib/node/Endpoint.js.map +1 -1
  58. package/build/cjs/lib/node/HealthCheck.js +6 -0
  59. package/build/cjs/lib/node/HealthCheck.js.map +1 -1
  60. package/build/cjs/lib/node/MockNodeBehaviors.js +2 -0
  61. package/build/cjs/lib/node/MockNodeBehaviors.js.map +1 -1
  62. package/build/cjs/lib/node/MultiCCAPIWrapper.js +10 -8
  63. package/build/cjs/lib/node/MultiCCAPIWrapper.js.map +1 -1
  64. package/build/cjs/lib/node/Node.js +51 -46
  65. package/build/cjs/lib/node/Node.js.map +1 -1
  66. package/build/cjs/lib/node/NodeReadyMachine.js +3 -1
  67. package/build/cjs/lib/node/NodeReadyMachine.js.map +1 -1
  68. package/build/cjs/lib/node/NodeStatistics.js +5 -0
  69. package/build/cjs/lib/node/NodeStatistics.js.map +1 -1
  70. package/build/cjs/lib/node/NodeStatusMachine.js +5 -2
  71. package/build/cjs/lib/node/NodeStatusMachine.js.map +1 -1
  72. package/build/cjs/lib/node/VirtualEndpoint.js +8 -4
  73. package/build/cjs/lib/node/VirtualEndpoint.js.map +1 -1
  74. package/build/cjs/lib/node/VirtualNode.js +7 -2
  75. package/build/cjs/lib/node/VirtualNode.js.map +1 -1
  76. package/build/cjs/lib/node/mixins/00_Base.js +4 -0
  77. package/build/cjs/lib/node/mixins/00_Base.js.map +1 -1
  78. package/build/cjs/lib/node/mixins/01_NetworkRole.js +4 -0
  79. package/build/cjs/lib/node/mixins/01_NetworkRole.js.map +1 -1
  80. package/build/cjs/lib/node/mixins/05_Security.js +7 -3
  81. package/build/cjs/lib/node/mixins/05_Security.js.map +1 -1
  82. package/build/cjs/lib/node/mixins/10_Events.js +4 -0
  83. package/build/cjs/lib/node/mixins/10_Events.js.map +1 -1
  84. package/build/cjs/lib/node/mixins/20_Status.js +4 -0
  85. package/build/cjs/lib/node/mixins/20_Status.js.map +1 -1
  86. package/build/cjs/lib/node/mixins/30_Wakeup.js +4 -0
  87. package/build/cjs/lib/node/mixins/30_Wakeup.js.map +1 -1
  88. package/build/cjs/lib/node/mixins/40_Values.js +4 -0
  89. package/build/cjs/lib/node/mixins/40_Values.js.map +1 -1
  90. package/build/cjs/lib/node/mixins/50_Endpoints.js +4 -0
  91. package/build/cjs/lib/node/mixins/50_Endpoints.js.map +1 -1
  92. package/build/cjs/lib/node/mixins/60_ScheduledPoll.js +4 -0
  93. package/build/cjs/lib/node/mixins/60_ScheduledPoll.js.map +1 -1
  94. package/build/cjs/lib/node/mixins/70_FirmwareUpdate.js +8 -3
  95. package/build/cjs/lib/node/mixins/70_FirmwareUpdate.js.map +1 -1
  96. package/build/cjs/lib/node/mixins/index.js +4 -0
  97. package/build/cjs/lib/node/mixins/index.js.map +1 -1
  98. package/build/cjs/lib/node/mockCCBehaviors/ColorSwitch.js +2 -1
  99. package/build/cjs/lib/node/mockCCBehaviors/ColorSwitch.js.map +1 -1
  100. package/build/cjs/lib/node/mockCCBehaviors/Configuration.js +2 -1
  101. package/build/cjs/lib/node/mockCCBehaviors/Configuration.js.map +1 -1
  102. package/build/cjs/lib/node/mockCCBehaviors/ScheduleEntryLock.js +2 -1
  103. package/build/cjs/lib/node/mockCCBehaviors/ScheduleEntryLock.js.map +1 -1
  104. package/build/cjs/lib/node/mockCCBehaviors/ThermostatSetpoint.js +3 -2
  105. package/build/cjs/lib/node/mockCCBehaviors/ThermostatSetpoint.js.map +1 -1
  106. package/build/cjs/lib/node/mockCCBehaviors/UserCode.js +3 -2
  107. package/build/cjs/lib/node/mockCCBehaviors/UserCode.js.map +1 -1
  108. package/build/cjs/lib/node/utils.js +22 -2
  109. package/build/cjs/lib/node/utils.js.map +1 -1
  110. package/build/cjs/lib/telemetry/deviceConfig.js +2 -0
  111. package/build/cjs/lib/telemetry/deviceConfig.js.map +1 -1
  112. package/build/cjs/lib/telemetry/statistics.js +3 -0
  113. package/build/cjs/lib/telemetry/statistics.js.map +1 -1
  114. package/build/cjs/lib/zniffer/MPDU.js +57 -0
  115. package/build/cjs/lib/zniffer/MPDU.js.map +1 -1
  116. package/build/cjs/lib/zniffer/Zniffer.js +10 -3
  117. package/build/cjs/lib/zniffer/Zniffer.js.map +1 -1
  118. package/build/cjs/mockServer.js +14 -0
  119. package/build/cjs/mockServer.js.map +1 -1
  120. package/build/esm/lib/_version.d.ts +1 -1
  121. package/build/esm/lib/_version.js +1 -1
  122. package/package.json +12 -12
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/lib/driver/Task.ts"],
4
4
  "sourcesContent": ["import { ZWaveError, ZWaveErrorCodes, highResTimestamp } from \"@zwave-js/core\";\nimport { createWrappingCounter, evalOrStatic, noop } from \"@zwave-js/shared\";\nimport { type CompareResult } from \"alcalzone-shared/comparable\";\nimport {\n\ttype DeferredPromise,\n\tcreateDeferredPromise,\n} from \"alcalzone-shared/deferred-promise\";\nimport { SortedList } from \"alcalzone-shared/sorted-list\";\n\n/** A high-level task that can be started and stepped through */\nexport interface Task<TReturn> {\n\treadonly id: number;\n\treadonly timestamp: number;\n\treadonly builder: TaskBuilder<TReturn>;\n\n\t/** The parent task spawning this subtask, if any */\n\treadonly parent?: Task<unknown>;\n\n\t/** A name to identify the task */\n\treadonly name?: string;\n\t/** A tag to identify the task programmatically */\n\treadonly tag?: TaskTag;\n\t/** The task's priority */\n\treadonly priority: TaskPriority;\n\t/** How the task should behave when interrupted */\n\treadonly interrupt: TaskInterruptBehavior;\n\t/** Starts the task it if hasn't been started yet, and executes the next step of the task */\n\tstep(): Promise<TaskStepResult<TReturn>>;\n\t/** Stops the task without further executing it, cleans up, and prepares it for starting again */\n\treset(): Promise<void>;\n\t/** Resolves the task's promise to notify the caller */\n\tresolve(result: TReturn): void;\n\t/** Rejects the task's promise to notify the caller */\n\treject(error: Error): void;\n\t/** The current state of the task */\n\tget state(): TaskState;\n\n\treadonly generator: ReturnType<TaskBuilder<TReturn>[\"task\"]> | undefined;\n\treadonly promise: Promise<TReturn>;\n}\n\nfunction getTaskName(task: Task<unknown>): string {\n\treturn `${\n\t\ttask.name ?? (task.tag && JSON.stringify(task.tag)) ?? \"unnamed\"\n\t} (ID ${task.id})`;\n}\n\n/** Defines the necessary information for creating a task */\nexport interface TaskBuilder<TReturn, TInner = unknown> {\n\t/** A name to identify the task */\n\tname?: string;\n\t/** A tag to identify the task programmatically */\n\ttag?: TaskTag;\n\t/** The task's priority */\n\tpriority: TaskPriority;\n\t/** How the task should behave when interrupted */\n\tinterrupt?: TaskInterruptBehavior;\n\t/**\n\t * The task's main generator function. This is called repeatedly until it's done.\n\t * The function must yield at points where it may be interrupted.\n\t *\n\t * At those points, the task can also wait for something to happen:\n\t * - Either a Promise, in which case it must yield a function that returns that Promise\n\t * - Or another task, in which case it must yield a TaskBuilder object or a function that returns one\n\t *\n\t * Yielded Promises should not spawn new tasks. If they do, the spawned tasks MUST have a higher priority than the parent task.\n\t */\n\ttask: () => AsyncGenerator<\n\t\t| (() => Promise<TInner> | TaskBuilder<TInner>)\n\t\t| (() => TaskBuilder<TInner>)\n\t\t| TaskBuilder<TInner>\n\t\t| undefined,\n\t\tTReturn,\n\t\tTInner\n\t>;\n\t/** A cleanup function that gets called when the task is dropped */\n\tcleanup?: () => Promise<void>;\n}\n\nexport type TaskReturnType<T extends TaskBuilder<unknown>> = T extends\n\tTaskBuilder<infer R> ? R\n\t: never;\n\nfunction isTaskBuilder<T>(\n\tobj: any,\n): obj is TaskBuilder<T> {\n\treturn (\n\t\ttypeof obj === \"object\"\n\t\t&& typeof obj.task === \"function\"\n\t\t&& typeof obj.priority === \"number\"\n\t);\n}\n\n/**\n * The priority of a task.\n *\n * Higher priority tasks are executed first and interrupt lower priority tasks.\n * The recommended priority for application-initiated communication is `Normal`.\n * `Low` and `Lower` are recommended for internal long-running tasks that should not interfere with user-initiated tasks.\n * `Idle` is recommended for tasks that should only run when no other tasks are pending.\n */\nexport enum TaskPriority {\n\tHighest,\n\tHigh = 1,\n\tNormal = 2,\n\tLow = 3,\n\tLower = 4,\n\tIdle = 5,\n}\n\nexport enum TaskState {\n\t/** The task has not been created yet */\n\tNone,\n\t/** The task is being executed */\n\tActive,\n\t/** The task is waiting for a Promise to resolve */\n\tAwaitingPromise,\n\t/** The task is waiting for another task to finish */\n\tAwaitingTask,\n\t/** The task is finished */\n\tDone,\n}\n\nexport enum TaskInterruptBehavior {\n\t/** The task may not be interrupted */\n\tForbidden,\n\t/** The task will be resumed after being interrupted (default) */\n\tResume,\n\t/** The task needs to be restarted after being interrupted */\n\tRestart,\n}\n\nexport type TaskStepResult<T> = {\n\tnewState: TaskState.Done;\n\tresult: T;\n} | {\n\tnewState: TaskState.Active;\n} | {\n\tnewState: TaskState.AwaitingPromise;\n\tpromise: Promise<unknown>;\n} | {\n\tnewState: TaskState.AwaitingTask;\n\ttask: Task<unknown>;\n};\n\nfunction compareTasks<T1, T2>(a: Task<T1>, b: Task<T2>): CompareResult {\n\t// Sort by priority first. Higher priority goes to the end of the list\n\tif (a.priority < b.priority) return 1;\n\tif (a.priority > b.priority) return -1;\n\n\t// Deprioritize waiting tasks\n\tconst aWaiting = a.state === TaskState.AwaitingPromise\n\t\t|| a.state === TaskState.AwaitingTask;\n\tconst bWaiting = b.state === TaskState.AwaitingPromise\n\t\t|| b.state === TaskState.AwaitingTask;\n\tif (!aWaiting && bWaiting) return 1;\n\tif (aWaiting && !bWaiting) return -1;\n\n\t// Sort equal priority by timestamp. Newer tasks go to the end of the list\n\tif (a.timestamp < b.timestamp) return 1;\n\tif (a.timestamp > b.timestamp) return -1;\n\n\t// If all else fails, sort by ID\n\treturn Math.sign(b.id - a.id) as CompareResult;\n}\n\nexport type TaskTag =\n\t| {\n\t\t// Rebuild routes for all nodes\n\t\tid: \"rebuild-routes\";\n\t}\n\t| {\n\t\t// Rebuild routes for a single node\n\t\tid: \"rebuild-node-routes\";\n\t\tnodeId: number;\n\t}\n\t| {\n\t\t// Perform an OTA firmware update for a node\n\t\tid: \"firmware-update-ota\";\n\t\tnodeId: number;\n\t};\n\nexport class TaskScheduler {\n\tpublic constructor(private verbose: boolean = false) {\n\t}\n\n\tprivate _tasks = new SortedList<Task<unknown>>(undefined, compareTasks);\n\tprivate _currentTask: Task<unknown> | undefined;\n\n\tprivate _idGenerator = createWrappingCounter(0xff_ff_ff);\n\tprivate _continueSignal: DeferredPromise<void> | undefined;\n\tprivate _stopSignal: DeferredPromise<void> | undefined;\n\tprivate _stopPromise: DeferredPromise<void> | undefined;\n\n\tpublic queueTask<T>(builder: TaskBuilder<T>): Promise<T> {\n\t\tconst task = this.createTask(builder);\n\t\tthis._tasks.add(task);\n\t\tif (this.verbose) {\n\t\t\tconsole.log(\n\t\t\t\t`Task queued: ${getTaskName(task)}`,\n\t\t\t);\n\t\t}\n\n\t\tif (this._continueSignal) this._continueSignal.resolve();\n\t\treturn task.promise;\n\t}\n\n\t/** Removes/stops tasks matching the given predicate. Returns `true` when a task was removed, `false` otherwise. */\n\tpublic async removeTasks(\n\t\tpredicate: (task: Task<unknown>) => boolean,\n\t\treason?: ZWaveError,\n\t): Promise<boolean> {\n\t\t// Collect tasks that should be removed, but in reverse order,\n\t\t// so that we handle the current task last.\n\t\tconst tasksToRemove: Task<unknown>[] = [];\n\t\tlet removeCurrentTask = false;\n\t\tfor (const task of this._tasks) {\n\t\t\tif (predicate(task)) {\n\t\t\t\tif (task === this._currentTask) {\n\t\t\t\t\tremoveCurrentTask = true;\n\t\t\t\t} else {\n\t\t\t\t\ttasksToRemove.push(task);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treason ??= new ZWaveError(\n\t\t\t\"Task was removed\",\n\t\t\tZWaveErrorCodes.Driver_TaskRemoved,\n\t\t);\n\n\t\tfor (const task of tasksToRemove) {\n\t\t\tif (this.verbose) {\n\t\t\t\tconsole.log(\n\t\t\t\t\t`Removing task: ${getTaskName(task)}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis._tasks.remove(task);\n\t\t\tif (\n\t\t\t\ttask.state === TaskState.Active\n\t\t\t\t|| task.state === TaskState.AwaitingPromise\n\t\t\t\t|| task.state === TaskState.AwaitingTask\n\t\t\t) {\n\t\t\t\t// The task is running, clean it up\n\t\t\t\tawait task.reset().catch(noop);\n\t\t\t}\n\t\t\ttask.reject(reason);\n\t\t\t// Re-add the parent task to the list if there is one\n\t\t\tif (task.parent) {\n\t\t\t\tif (this.verbose) {\n\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t`Restoring parent task: ${getTaskName(task.parent)}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tthis._tasks.add(task.parent);\n\t\t\t}\n\t\t}\n\n\t\tif (removeCurrentTask && this._currentTask) {\n\t\t\tif (this.verbose) {\n\t\t\t\tconsole.log(\n\t\t\t\t\t`Removing task: ${getTaskName(this._currentTask)}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis._tasks.remove(this._currentTask);\n\t\t\tawait this._currentTask.reset().catch(noop);\n\t\t\tthis._currentTask.reject(reason);\n\t\t\t// Re-add the parent task to the list if there is one\n\t\t\tif (this._currentTask.parent) {\n\t\t\t\tif (this.verbose) {\n\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t`Restoring parent task: ${\n\t\t\t\t\t\t\tgetTaskName(this._currentTask.parent)\n\t\t\t\t\t\t}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tthis._tasks.add(this._currentTask.parent);\n\t\t\t}\n\t\t\tthis._currentTask = undefined;\n\t\t}\n\n\t\tif (this._continueSignal) this._continueSignal.resolve();\n\n\t\treturn tasksToRemove.length > 0 || removeCurrentTask;\n\t}\n\n\tpublic findTask<T = unknown>(\n\t\tpredicate: (task: Task<T>) => boolean,\n\t): Promise<T> | undefined {\n\t\treturn this._tasks.find((t: any) => predicate(t))?.promise as\n\t\t\t| Promise<T>\n\t\t\t| undefined;\n\t}\n\n\t/** Creates a task that can be executed */\n\tprivate createTask<T>(\n\t\tbuilder: TaskBuilder<T>,\n\t\tparent?: Task<unknown>,\n\t): Task<T> {\n\t\tlet state = TaskState.None;\n\t\tlet generator: ReturnType<TaskBuilder<T>[\"task\"]> | undefined;\n\t\tlet waitForPromise: Promise<unknown> | undefined;\n\t\tconst promise = createDeferredPromise<T>();\n\n\t\tlet prevResult: unknown;\n\t\tlet waitError: unknown;\n\n\t\tconst self = this;\n\n\t\treturn {\n\t\t\tid: this._idGenerator(),\n\t\t\ttimestamp: highResTimestamp(),\n\t\t\tbuilder,\n\t\t\tparent,\n\t\t\tname: builder.name,\n\t\t\ttag: builder.tag,\n\t\t\tpriority: builder.priority,\n\t\t\tinterrupt: builder.interrupt ?? TaskInterruptBehavior.Resume,\n\t\t\tpromise,\n\t\t\tasync step() {\n\t\t\t\t// Do not proceed while still waiting for a Promise to resolve\n\t\t\t\tif (state === TaskState.AwaitingPromise && waitForPromise) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tnewState: state,\n\t\t\t\t\t\tpromise: waitForPromise,\n\t\t\t\t\t};\n\t\t\t\t} else if (state === TaskState.AwaitingTask) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\"Cannot step through a task that is waiting for another task\",\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tgenerator ??= builder.task();\n\t\t\t\tstate = TaskState.Active;\n\n\t\t\t\tconst { value, done } = waitError\n\t\t\t\t\t? await generator.throw(waitError)\n\t\t\t\t\t: await generator.next(prevResult);\n\t\t\t\tprevResult = undefined;\n\t\t\t\twaitError = undefined;\n\t\t\t\tif (done) {\n\t\t\t\t\tstate = TaskState.Done;\n\t\t\t\t\treturn {\n\t\t\t\t\t\tnewState: state,\n\t\t\t\t\t\tresult: value,\n\t\t\t\t\t};\n\t\t\t\t} else if (value != undefined) {\n\t\t\t\t\tconst waitFor = evalOrStatic(value);\n\t\t\t\t\tif (waitFor instanceof Promise) {\n\t\t\t\t\t\tstate = TaskState.AwaitingPromise;\n\t\t\t\t\t\twaitForPromise = waitFor.then((result) => {\n\t\t\t\t\t\t\tprevResult = result;\n\t\t\t\t\t\t}).catch((e) => {\n\t\t\t\t\t\t\twaitError = e;\n\t\t\t\t\t\t}).finally(() => {\n\t\t\t\t\t\t\twaitForPromise = undefined;\n\t\t\t\t\t\t\tif (state === TaskState.AwaitingPromise) {\n\t\t\t\t\t\t\t\tstate = TaskState.Active;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tnewState: state,\n\t\t\t\t\t\t\tpromise: waitForPromise,\n\t\t\t\t\t\t};\n\t\t\t\t\t} else if (isTaskBuilder(waitFor)) {\n\t\t\t\t\t\tif (waitFor.priority > builder.priority) {\n\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t\"Tasks cannot yield to tasks with lower priority than their own\",\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Create a sub-task with a reference to this task\n\t\t\t\t\t\tstate = TaskState.AwaitingTask;\n\t\t\t\t\t\tconst subTask = self.createTask(waitFor, this);\n\n\t\t\t\t\t\tsubTask.promise.then((result) => {\n\t\t\t\t\t\t\tprevResult = result;\n\t\t\t\t\t\t}).catch((e) => {\n\t\t\t\t\t\t\twaitError = e;\n\t\t\t\t\t\t}).finally(() => {\n\t\t\t\t\t\t\tif (state === TaskState.AwaitingTask) {\n\t\t\t\t\t\t\t\tstate = TaskState.Active;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tnewState: state,\n\t\t\t\t\t\t\ttask: subTask,\n\t\t\t\t\t\t};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\"Invalid value yielded by task\",\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\treturn { newState: state };\n\t\t\t\t}\n\t\t\t},\n\t\t\tasync reset() {\n\t\t\t\tif (state === TaskState.None) return;\n\t\t\t\tstate = TaskState.None;\n\t\t\t\twaitForPromise = undefined;\n\t\t\t\tgenerator = undefined;\n\n\t\t\t\tawait builder.cleanup?.();\n\t\t\t},\n\t\t\tresolve(result) {\n\t\t\t\tpromise.resolve(result);\n\t\t\t},\n\t\t\treject(error) {\n\t\t\t\tpromise.reject(error);\n\t\t\t},\n\t\t\tget state() {\n\t\t\t\treturn state;\n\t\t\t},\n\t\t\tget generator() {\n\t\t\t\treturn generator;\n\t\t\t},\n\t\t};\n\t}\n\n\tpublic start(): void {\n\t\tthis._stopSignal = createDeferredPromise();\n\t\tsetImmediate(async () => {\n\t\t\ttry {\n\t\t\t\tawait this.run();\n\t\t\t} catch (e) {\n\t\t\t\tconsole.error(\"Task runner crashed\", e);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate async run(): Promise<void> {\n\t\twhile (true) {\n\t\t\tlet waitFor: Promise<unknown> | undefined;\n\t\t\tif (this._tasks.length > 0) {\n\t\t\t\tconst firstTask = this._tasks.peekStart()!;\n\t\t\t\tif (!this._currentTask) {\n\t\t\t\t\t// We're not currently executing a task, start executing the first one\n\t\t\t\t\tthis._currentTask = firstTask;\n\t\t\t\t} else if (\n\t\t\t\t\tthis._currentTask !== firstTask\n\t\t\t\t\t&& this._currentTask.interrupt\n\t\t\t\t\t\t!== TaskInterruptBehavior.Forbidden\n\t\t\t\t) {\n\t\t\t\t\t// We are executing an interruptible task, and a new task with a higher priority was added\n\t\t\t\t\tif (\n\t\t\t\t\t\tthis._currentTask.interrupt\n\t\t\t\t\t\t\t=== TaskInterruptBehavior.Restart\n\t\t\t\t\t) {\n\t\t\t\t\t\t// The current task needs to be restarted after being interrupted, so reset it\n\t\t\t\t\t\tawait this._currentTask.reset();\n\t\t\t\t\t}\n\t\t\t\t\t// switch to the new task\n\t\t\t\t\tthis._currentTask = firstTask;\n\t\t\t\t}\n\n\t\t\t\tif (this.verbose) {\n\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t`Stepping through task: ${\n\t\t\t\t\t\t\tgetTaskName(this._currentTask)\n\t\t\t\t\t\t}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst cleanupCurrentTask = async () => {\n\t\t\t\t\tif (this._currentTask) {\n\t\t\t\t\t\tthis._tasks.remove(this._currentTask);\n\t\t\t\t\t\tawait this._currentTask.reset();\n\t\t\t\t\t\t// Re-add the parent task to the list if there is one\n\t\t\t\t\t\tif (this._currentTask.parent) {\n\t\t\t\t\t\t\tif (this.verbose) {\n\t\t\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t\t\t`Restoring parent task: ${\n\t\t\t\t\t\t\t\t\t\tgetTaskName(this._currentTask.parent)\n\t\t\t\t\t\t\t\t\t}`,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis._tasks.add(this._currentTask.parent);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._currentTask = undefined;\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\t// Execute the current task one step further\n\t\t\t\twaitFor = undefined;\n\t\t\t\tlet stepResult: TaskStepResult<unknown>;\n\t\t\t\ttry {\n\t\t\t\t\tstepResult = await this._currentTask.step();\n\t\t\t\t} catch (e) {\n\t\t\t\t\tif (this.verbose) {\n\t\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t\t`- Task threw an error:`,\n\t\t\t\t\t\t\te,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\t// The task threw an error, expose the result and clean up.\n\t\t\t\t\tthis._currentTask.reject(e as Error);\n\t\t\t\t\tawait cleanupCurrentTask();\n\t\t\t\t\t// Then continue with the next iteration\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (stepResult.newState === TaskState.Done) {\n\t\t\t\t\tif (this.verbose) {\n\t\t\t\t\t\tconsole.log(`- Task finished`);\n\t\t\t\t\t}\n\t\t\t\t\t// The task is done, clean up\n\t\t\t\t\tthis._currentTask.resolve(stepResult.result);\n\t\t\t\t\tawait cleanupCurrentTask();\n\t\t\t\t\t// Then continue with the next iteration\n\t\t\t\t\tcontinue;\n\t\t\t\t} else if (stepResult.newState === TaskState.AwaitingPromise) {\n\t\t\t\t\t// The task is waiting for something\n\t\t\t\t\tif (this.verbose) {\n\t\t\t\t\t\tconsole.log(`- Task waiting`);\n\t\t\t\t\t}\n\n\t\t\t\t\t// If the task may be interrupted, check if there are other same-priority tasks that should be executed instead\n\t\t\t\t\tif (\n\t\t\t\t\t\tthis._currentTask.interrupt\n\t\t\t\t\t\t\t!== TaskInterruptBehavior.Forbidden\n\t\t\t\t\t) {\n\t\t\t\t\t\t// Re-queue the task, so the queue gets reordered\n\t\t\t\t\t\tthis._tasks.remove(this._currentTask);\n\t\t\t\t\t\tthis._tasks.add(this._currentTask);\n\n\t\t\t\t\t\tif (this._tasks.peekStart() !== this._currentTask) {\n\t\t\t\t\t\t\tif (this.verbose) {\n\t\t\t\t\t\t\t\tconsole.log(`-- Continuing with another task`);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// The task is no longer the first in the queue. Switch to the other one\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Otherwise, we got nothing to do right now than to wait\n\t\t\t\t\twaitFor = stepResult.promise;\n\t\t\t\t} else if (stepResult.newState === TaskState.AwaitingTask) {\n\t\t\t\t\t// The task spawned a sub-task. Replace it with the sub-task and continue executing\n\t\t\t\t\tif (this.verbose) {\n\t\t\t\t\t\tconsole.log(`- Task spawned a sub-task`);\n\t\t\t\t\t}\n\t\t\t\t\tthis._tasks.add(stepResult.task);\n\t\t\t\t\tthis._tasks.remove(this._currentTask);\n\t\t\t\t\t// Continue with the next iteration\n\t\t\t\t\tcontinue;\n\t\t\t\t} else {\n\t\t\t\t\t// The current task is not done, continue with the next iteration\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Task queue empty. Wait for either a new task or the stop signal,\n\t\t\t// or the current task to finish waiting\n\t\t\tthis._continueSignal = createDeferredPromise();\n\t\t\tconst nextAction = await Promise.race([\n\t\t\t\tthis._continueSignal.then(() => \"continue\" as const),\n\t\t\t\tthis._stopSignal!.then(() => \"stop\" as const),\n\t\t\t\twaitFor?.then(() => \"continue\" as const),\n\t\t\t].filter((p) => p !== undefined));\n\t\t\tthis._continueSignal = undefined;\n\t\t\tif (nextAction === \"stop\") break;\n\t\t}\n\t\tthis._stopPromise!.resolve();\n\t}\n\n\tpublic async stop(): Promise<void> {\n\t\tif (!this._stopSignal) return;\n\t\t// Signal to the task runner that it should stop\n\t\tthis._stopPromise = createDeferredPromise();\n\t\tthis._stopSignal.resolve();\n\t\tawait this._stopPromise;\n\t}\n}\n"],
5
- "mappings": "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",
5
+ "mappings": "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",
6
6
  "names": ["TaskPriority", "TaskState", "TaskInterruptBehavior"]
7
7
  }
@@ -3,6 +3,7 @@ var __defProp = Object.defineProperty;
3
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
5
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
6
7
  var __export = (target, all) => {
7
8
  for (var name in all)
8
9
  __defProp(target, name, { get: all[name], enumerable: true });
@@ -26,6 +27,9 @@ var import_shared = require("@zwave-js/shared");
26
27
  var import_comparable = require("alcalzone-shared/comparable");
27
28
  var import_Types = require("../node/_Types.js");
28
29
  class Transaction {
30
+ static {
31
+ __name(this, "Transaction");
32
+ }
29
33
  driver;
30
34
  options;
31
35
  constructor(driver, options) {
@@ -136,7 +140,7 @@ class Transaction {
136
140
  }
137
141
  /** Compares two transactions in order to plan their transmission sequence */
138
142
  compareTo(other) {
139
- const compareWakeUpPriority = (_this, _other) => {
143
+ const compareWakeUpPriority = /* @__PURE__ */ __name((_this, _other) => {
140
144
  const thisNode = _this.message.tryGetNode(this.driver);
141
145
  const otherNode = _other.message.tryGetNode(this.driver);
142
146
  const thisIsAsleep = thisNode?.status === import_Types.NodeStatus.Asleep;
@@ -145,7 +149,7 @@ class Transaction {
145
149
  return 1;
146
150
  if (otherIsAsleep && !thisIsAsleep)
147
151
  return -1;
148
- };
152
+ }, "compareWakeUpPriority");
149
153
  if (this.priority === import_core.MessagePriority.WakeUp) {
150
154
  const result = compareWakeUpPriority(this, other);
151
155
  if (result != void 0)
@@ -155,7 +159,7 @@ class Transaction {
155
159
  if (result != void 0)
156
160
  return -result;
157
161
  }
158
- const compareNodeQueryPriority = (_this, _other) => {
162
+ const compareNodeQueryPriority = /* @__PURE__ */ __name((_this, _other) => {
159
163
  const thisNode = _this.message.tryGetNode(this.driver);
160
164
  const otherNode = _other.message.tryGetNode(this.driver);
161
165
  if (thisNode && otherNode) {
@@ -166,7 +170,7 @@ class Transaction {
166
170
  if (!thisListening && otherListening)
167
171
  return 1;
168
172
  }
169
- };
173
+ }, "compareNodeQueryPriority");
170
174
  if (this.priority === import_core.MessagePriority.NodeQuery) {
171
175
  const result = compareNodeQueryPriority(this, other);
172
176
  if (result != void 0)
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/lib/driver/Transaction.ts"],
4
4
  "sourcesContent": ["import {\n\tMessagePriority,\n\ttype TransactionProgress,\n\ttype TransactionProgressListener,\n\ttype ZWaveError,\n\thighResTimestamp,\n\tisZWaveError,\n} from \"@zwave-js/core\";\nimport type { Message } from \"@zwave-js/serial\";\nimport { noop } from \"@zwave-js/shared\";\nimport {\n\ttype Comparable,\n\ttype CompareResult,\n\tcompareNumberOrString,\n} from \"alcalzone-shared/comparable\";\nimport type { DeferredPromise } from \"alcalzone-shared/deferred-promise\";\nimport { NodeStatus } from \"../node/_Types.js\";\nimport type { Driver } from \"./Driver.js\";\n\nexport interface MessageGenerator {\n\tparent: Transaction;\n\t/** Start a new copy of this message generator */\n\tstart: () => AsyncGenerator<Message, void, Message>;\n\t/** Resets this message generator so it can be started anew */\n\treset: () => void;\n\t/** A reference to the currently running message generator if it was already started */\n\tself?: ReturnType<MessageGenerator[\"start\"]>;\n\t/** A reference to the last generated message, or undefined if the generator wasn't started or has finished */\n\tcurrent?: Message;\n}\n\nexport interface TransactionOptions {\n\t/** The \"primary\" message this transaction contains, e.g. the un-encapsulated version of a SendData request */\n\tmessage: Message;\n\t/**\n\t * The actual messages that will be sent when handling this transaction,\n\t * defined as a message generator to dynamically create the messages.\n\t */\n\tparts: MessageGenerator;\n\t/** The priority of this transaction */\n\tpriority: MessagePriority;\n\t/** Will be resolved/rejected by the Send Thread Machine when the entire transaction is handled */\n\tpromise: DeferredPromise<Message | void>;\n\n\t/** Gets called with progress updates for a transaction */\n\tlistener?: TransactionProgressListener;\n}\n\n/**\n * Transactions are used to track and correlate messages with their responses.\n */\nexport class Transaction implements Comparable<Transaction> {\n\tpublic constructor(\n\t\tpublic readonly driver: Driver,\n\t\tprivate readonly options: TransactionOptions,\n\t) {\n\t\t// Give the message generator a reference to this transaction\n\t\toptions.parts.parent = this;\n\n\t\t// Initialize class fields\n\t\tthis.promise = options.promise;\n\t\tthis.message = options.message;\n\t\tthis.priority = options.priority;\n\t\tthis.parts = options.parts;\n\t\tthis.listener = options.listener;\n\n\t\t// We need create the stack on a temporary object or the Error\n\t\t// class will try to print the message\n\t\tconst tmp = { message: \"\" };\n\t\tError.captureStackTrace(tmp, Transaction);\n\t\tthis._stack = (tmp as any).stack.replace(/^Error:?\\s*\\n/, \"\");\n\t}\n\n\tpublic clone(): Transaction {\n\t\tconst ret = new Transaction(this.driver, this.options);\n\t\tfor (\n\t\t\tconst prop of [\n\t\t\t\t\"_stack\",\n\t\t\t\t\"_progress\",\n\t\t\t\t\"creationTimestamp\",\n\t\t\t\t\"changeNodeStatusOnTimeout\",\n\t\t\t\t\"pauseSendThread\",\n\t\t\t\t\"priority\",\n\t\t\t\t\"tag\",\n\t\t\t\t\"requestWakeUpOnDemand\",\n\t\t\t] as const\n\t\t) {\n\t\t\t(ret as any)[prop] = this[prop];\n\t\t}\n\n\t\t// The listener callback now lives on the clone\n\t\tthis.listener = undefined;\n\n\t\treturn ret;\n\t}\n\n\t/** Will be resolved/rejected by the Send Thread Machine when the entire transaction is handled */\n\tpublic readonly promise: DeferredPromise<Message | void>;\n\n\t/** The \"primary\" message this transaction contains, e.g. the un-encapsulated version of a SendData request */\n\tpublic readonly message: Message;\n\n\t/** The message generator to create the actual messages for this transaction */\n\tpublic readonly parts: MessageGenerator;\n\n\t/** A callback which gets called with state updates of this transaction */\n\tprivate listener?: TransactionProgressListener;\n\n\tprivate _progress: TransactionProgress | undefined;\n\tpublic setProgress(progress: TransactionProgress): void {\n\t\t// Ignore duplicate updates\n\t\tif (this._progress?.state === progress.state) return;\n\t\tthis._progress = progress;\n\t\tthis.listener?.({ ...progress });\n\t}\n\n\t/**\n\t * Returns the current message of this transaction. This is either the currently active partial message\n\t * or the primary message if the generator hasn't been started yet.\n\t */\n\tpublic getCurrentMessage(): Message | undefined {\n\t\treturn this.parts.current ?? this.message;\n\t}\n\n\t/**\n\t * Starts the transaction's message generator if it hasn't been started yet.\n\t * Returns `true` when the generator was started, `false` if it was already started before.\n\t */\n\tpublic start(): boolean {\n\t\tif (!this.parts.self) {\n\t\t\tthis.parts.start();\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Resets this transaction's message generator\n\t */\n\tpublic reset(): void {\n\t\tthis.parts.reset();\n\t}\n\n\tpublic async generateNextMessage(\n\t\tprevResult: Message | undefined,\n\t): Promise<Message | undefined> {\n\t\tif (!this.parts.self) return;\n\t\t// Get the next message from the generator\n\t\tconst { done, value } = await this.parts.self.next(prevResult!);\n\t\tif (!done) return value;\n\t}\n\n\t/**\n\t * Forcefully aborts the message generator by throwing the given result.\n\t * Errors will be treated as a rejection of the transaction, everything else as success\n\t */\n\tpublic abort(result: Message | ZWaveError | undefined): void {\n\t\tif (this.parts.self) {\n\t\t\tthis.parts.self.throw(result).catch(noop);\n\t\t} else if (isZWaveError(result)) {\n\t\t\tthis.promise.reject(result);\n\t\t} else {\n\t\t\tthis.promise.resolve(result);\n\t\t}\n\t}\n\n\t/** The priority of this transaction */\n\tpublic priority: MessagePriority;\n\n\t/** The timestamp at which the transaction was created */\n\tpublic creationTimestamp: number = highResTimestamp();\n\n\t/** Whether the node status should be updated when this transaction times out */\n\tpublic changeNodeStatusOnTimeout: boolean = true;\n\n\t/** Whether the send thread MUST be paused after this transaction was handled */\n\tpublic pauseSendThread: boolean = false;\n\n\t/** If a Wake Up On Demand should be requested for the target node. */\n\tpublic requestWakeUpOnDemand: boolean = false;\n\n\t/** Internal information used to identify or mark this transaction */\n\tpublic tag?: any;\n\n\t/** The stack trace where the transaction was created */\n\tprivate _stack: string;\n\tpublic get stack(): string {\n\t\treturn this._stack;\n\t}\n\n\t/** Compares two transactions in order to plan their transmission sequence */\n\tpublic compareTo(other: Transaction): CompareResult {\n\t\tconst compareWakeUpPriority = (\n\t\t\t_this: Transaction,\n\t\t\t_other: Transaction,\n\t\t): CompareResult | undefined => {\n\t\t\tconst thisNode = _this.message.tryGetNode(this.driver);\n\t\t\tconst otherNode = _other.message.tryGetNode(this.driver);\n\n\t\t\t// We don't require existence of the node object\n\t\t\t// If any transaction is not for a node, it targets the controller\n\t\t\t// which is always awake\n\t\t\tconst thisIsAsleep = thisNode?.status === NodeStatus.Asleep;\n\t\t\tconst otherIsAsleep = otherNode?.status === NodeStatus.Asleep;\n\n\t\t\t// If both nodes are asleep, the conventional order applies\n\t\t\t// Asleep nodes always have the lowest priority\n\t\t\tif (thisIsAsleep && !otherIsAsleep) return 1;\n\t\t\tif (otherIsAsleep && !thisIsAsleep) return -1;\n\t\t};\n\n\t\t// delay messages for sleeping nodes\n\t\tif (this.priority === MessagePriority.WakeUp) {\n\t\t\tconst result = compareWakeUpPriority(this, other);\n\t\t\tif (result != undefined) return result;\n\t\t} else if (other.priority === MessagePriority.WakeUp) {\n\t\t\tconst result = compareWakeUpPriority(other, this);\n\t\t\tif (result != undefined) return -result as CompareResult;\n\t\t}\n\n\t\tconst compareNodeQueryPriority = (\n\t\t\t_this: Transaction,\n\t\t\t_other: Transaction,\n\t\t): CompareResult | undefined => {\n\t\t\tconst thisNode = _this.message.tryGetNode(this.driver);\n\t\t\tconst otherNode = _other.message.tryGetNode(this.driver);\n\t\t\tif (thisNode && otherNode) {\n\t\t\t\t// Both nodes exist\n\t\t\t\tconst thisListening = thisNode.isListening\n\t\t\t\t\t|| thisNode.isFrequentListening;\n\t\t\t\tconst otherListening = otherNode.isListening\n\t\t\t\t\t|| otherNode.isFrequentListening;\n\t\t\t\t// prioritize (-1) the one node that is listening when the other is not\n\t\t\t\tif (thisListening && !otherListening) return -1;\n\t\t\t\tif (!thisListening && otherListening) return 1;\n\t\t\t}\n\t\t};\n\n\t\t// delay NodeQuery messages for non-listening nodes\n\t\tif (this.priority === MessagePriority.NodeQuery) {\n\t\t\tconst result = compareNodeQueryPriority(this, other);\n\t\t\tif (result != undefined) return result;\n\t\t} else if (other.priority === MessagePriority.NodeQuery) {\n\t\t\tconst result = compareNodeQueryPriority(other, this);\n\t\t\tif (result != undefined) return -result as CompareResult;\n\t\t}\n\n\t\t// by default, sort by priority\n\t\tif (this.priority < other.priority) return -1;\n\t\telse if (this.priority > other.priority) return 1;\n\n\t\t// for equal priority, sort by the timestamp\n\t\treturn compareNumberOrString(\n\t\t\tother.creationTimestamp,\n\t\t\tthis.creationTimestamp,\n\t\t);\n\t}\n}\n"],
5
- "mappings": "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",
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -3,6 +3,7 @@ var __defProp = Object.defineProperty;
3
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
5
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
6
7
  var __export = (target, all) => {
7
8
  for (var name in all)
8
9
  __defProp(target, name, { get: all[name], enumerable: true });
@@ -112,24 +113,25 @@ function createTransportServiceRXMachine(implementations, params) {
112
113
  }
113
114
  }, {
114
115
  services: {
115
- requestMissingSegment: (ctx) => {
116
+ requestMissingSegment: /* @__PURE__ */ __name((ctx) => {
116
117
  return implementations.requestMissingSegment(ctx.receivedBytes.indexOf(false));
117
- },
118
- sendSegmentsComplete: () => {
118
+ }, "requestMissingSegment"),
119
+ sendSegmentsComplete: /* @__PURE__ */ __name(() => {
119
120
  return implementations.sendSegmentsComplete();
120
- }
121
+ }, "sendSegmentsComplete")
121
122
  },
122
123
  guards: {
123
- isComplete: (ctx) => {
124
+ isComplete: /* @__PURE__ */ __name((ctx) => {
124
125
  return ctx.receivedBytes.every(Boolean);
125
- },
126
- hasHole: (ctx) => ctx.receivedBytes.lastIndexOf(true) > ctx.receivedBytes.indexOf(false)
126
+ }, "isComplete"),
127
+ hasHole: /* @__PURE__ */ __name((ctx) => ctx.receivedBytes.lastIndexOf(true) > ctx.receivedBytes.indexOf(false), "hasHole")
127
128
  },
128
129
  delays: {
129
130
  missingSegment: params.missingSegmentTimeout
130
131
  }
131
132
  });
132
133
  }
134
+ __name(createTransportServiceRXMachine, "createTransportServiceRXMachine");
133
135
  // Annotate the CommonJS export names for ESM import in node:
134
136
  0 && (module.exports = {
135
137
  createTransportServiceRXMachine
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/lib/driver/TransportServiceMachine.ts"],
4
4
  "sourcesContent": ["import {\n\ttype AssignAction,\n\ttype Interpreter,\n\tMachine,\n\ttype StateMachine,\n\tassign,\n} from \"xstate\";\n\n/*\n\tThis state machine handles the receipt of Transport Service encapsulated commands from a node\n*/\n\nexport interface TransportServiceRXStateSchema {\n\tstates: {\n\t\twaitingForSegment: object;\n\t\tsegmentTimeout: object;\n\t\twaitingForRequestedSegment: object;\n\t\tsegmentsComplete: object;\n\t\tsuccess: object;\n\t\tfailure: object;\n\t};\n}\n\nexport interface TransportServiceRXContext {\n\treceivedBytes: boolean[];\n}\n\nexport type TransportServiceRXEvent = {\n\ttype: \"segment\";\n\toffset: number;\n\tlength: number;\n};\n\nexport type TransportServiceRXMachine = StateMachine<\n\tTransportServiceRXContext,\n\tTransportServiceRXStateSchema,\n\tTransportServiceRXEvent,\n\tany,\n\tany,\n\tany,\n\tany\n>;\nexport type TransportServiceRXInterpreter = Interpreter<\n\tTransportServiceRXContext,\n\tTransportServiceRXStateSchema,\n\tTransportServiceRXEvent\n>;\n\nexport type TransportServiceRXMachineParams = {\n\tdatagramSize: number;\n\tfirstSegmentSize: number;\n\tmissingSegmentTimeout: number;\n};\n\nconst receiveSegment: AssignAction<TransportServiceRXContext, any> = assign(\n\t(ctx, evt: TransportServiceRXEvent) => {\n\t\tfor (let i = evt.offset; i < evt.offset + evt.length; i++) {\n\t\t\tctx.receivedBytes[i] = true;\n\t\t}\n\t\treturn ctx;\n\t},\n);\n\nexport interface TransportServiceRXServiceImplementations {\n\trequestMissingSegment(offset: number): Promise<void>;\n\tsendSegmentsComplete(): Promise<void>;\n}\n\nexport function createTransportServiceRXMachine(\n\timplementations: TransportServiceRXServiceImplementations,\n\tparams: TransportServiceRXMachineParams,\n): TransportServiceRXMachine {\n\treturn Machine<\n\t\tTransportServiceRXContext,\n\t\tTransportServiceRXStateSchema,\n\t\tTransportServiceRXEvent\n\t>(\n\t\t{\n\t\t\tid: \"TransportServiceRX\",\n\t\t\tinitial: \"waitingForSegment\",\n\t\t\tcontext: {\n\t\t\t\treceivedBytes: [\n\t\t\t\t\t// When the machine is started, we've already received the first segment\n\t\t\t\t\t...(new Array(params.firstSegmentSize).fill(\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t) as boolean[]),\n\t\t\t\t\t// The rest of the segments are still missing\n\t\t\t\t\t...(new Array(\n\t\t\t\t\t\tparams.datagramSize - params.firstSegmentSize,\n\t\t\t\t\t).fill(false) as boolean[]),\n\t\t\t\t],\n\t\t\t},\n\t\t\tstates: {\n\t\t\t\twaitingForSegment: {\n\t\t\t\t\talways: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcond: \"isComplete\",\n\t\t\t\t\t\t\ttarget: \"segmentsComplete\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcond: \"hasHole\",\n\t\t\t\t\t\t\ttarget: \"segmentTimeout\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\tafter: {\n\t\t\t\t\t\tmissingSegment: \"segmentTimeout\",\n\t\t\t\t\t},\n\t\t\t\t\ton: {\n\t\t\t\t\t\tsegment: {\n\t\t\t\t\t\t\tactions: receiveSegment,\n\t\t\t\t\t\t\ttarget: \"waitingForSegment\",\n\t\t\t\t\t\t\tinternal: false,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tsegmentTimeout: {\n\t\t\t\t\tinvoke: {\n\t\t\t\t\t\tid: \"requestMissing\",\n\t\t\t\t\t\tsrc: \"requestMissingSegment\",\n\t\t\t\t\t\tonDone: {\n\t\t\t\t\t\t\ttarget: \"waitingForRequestedSegment\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tonError: {\n\t\t\t\t\t\t\ttarget: \"failure\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\twaitingForRequestedSegment: {\n\t\t\t\t\tafter: {\n\t\t\t\t\t\tmissingSegment: \"failure\",\n\t\t\t\t\t},\n\t\t\t\t\ton: {\n\t\t\t\t\t\tsegment: {\n\t\t\t\t\t\t\tactions: receiveSegment,\n\t\t\t\t\t\t\ttarget: \"waitingForSegment\",\n\t\t\t\t\t\t\tinternal: false,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tsegmentsComplete: {\n\t\t\t\t\tinvoke: {\n\t\t\t\t\t\tid: \"segmentsComplete\",\n\t\t\t\t\t\tsrc: \"sendSegmentsComplete\",\n\t\t\t\t\t\tonDone: {\n\t\t\t\t\t\t\ttarget: \"success\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tonError: {\n\t\t\t\t\t\t\t// If sending the command fails, the node will send us the segment again\n\t\t\t\t\t\t\ttarget: \"success\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tsuccess: {\n\t\t\t\t\ttype: \"final\",\n\t\t\t\t\ton: {\n\t\t\t\t\t\tsegment: \"segmentsComplete\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tfailure: {\n\t\t\t\t\ttype: \"final\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tservices: {\n\t\t\t\trequestMissingSegment: (ctx) => {\n\t\t\t\t\treturn implementations.requestMissingSegment(\n\t\t\t\t\t\tctx.receivedBytes.indexOf(false),\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tsendSegmentsComplete: () => {\n\t\t\t\t\treturn implementations.sendSegmentsComplete();\n\t\t\t\t},\n\t\t\t},\n\t\t\tguards: {\n\t\t\t\tisComplete: (ctx) => {\n\t\t\t\t\treturn ctx.receivedBytes.every(Boolean);\n\t\t\t\t},\n\t\t\t\thasHole: (ctx) =>\n\t\t\t\t\tctx.receivedBytes.lastIndexOf(true)\n\t\t\t\t\t\t> ctx.receivedBytes.indexOf(false),\n\t\t\t},\n\t\t\tdelays: {\n\t\t\t\tmissingSegment: params.missingSegmentTimeout,\n\t\t\t},\n\t\t},\n\t);\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;;;;;AAAA,oBAMO;AAgDP,MAAM,qBAA+D,sBACpE,CAAC,KAAK,QAAgC;AACrC,WAAS,IAAI,IAAI,QAAQ,IAAI,IAAI,SAAS,IAAI,QAAQ,KAAK;AAC1D,QAAI,cAAc,CAAC,IAAI;EACxB;AACA,SAAO;AACR,CAAC;AAQI,SAAU,gCACf,iBACA,QAAuC;AAEvC,aAAO,uBAKN;IACC,IAAI;IACJ,SAAS;IACT,SAAS;MACR,eAAe;;QAEd,GAAI,IAAI,MAAM,OAAO,gBAAgB,EAAE,KACtC,IAAI;;QAGL,GAAI,IAAI,MACP,OAAO,eAAe,OAAO,gBAAgB,EAC5C,KAAK,KAAK;;;IAGd,QAAQ;MACP,mBAAmB;QAClB,QAAQ;UACP;YACC,MAAM;YACN,QAAQ;;UAET;YACC,MAAM;YACN,QAAQ;;;QAGV,OAAO;UACN,gBAAgB;;QAEjB,IAAI;UACH,SAAS;YACR,SAAS;YACT,QAAQ;YACR,UAAU;;;;MAIb,gBAAgB;QACf,QAAQ;UACP,IAAI;UACJ,KAAK;UACL,QAAQ;YACP,QAAQ;;UAET,SAAS;YACR,QAAQ;;;;MAIX,4BAA4B;QAC3B,OAAO;UACN,gBAAgB;;QAEjB,IAAI;UACH,SAAS;YACR,SAAS;YACT,QAAQ;YACR,UAAU;;;;MAIb,kBAAkB;QACjB,QAAQ;UACP,IAAI;UACJ,KAAK;UACL,QAAQ;YACP,QAAQ;;UAET,SAAS;;YAER,QAAQ;;;;MAIX,SAAS;QACR,MAAM;QACN,IAAI;UACH,SAAS;;;MAGX,SAAS;QACR,MAAM;;;KAIT;IACC,UAAU;MACT,uBAAuB,CAAC,QAAO;AAC9B,eAAO,gBAAgB,sBACtB,IAAI,cAAc,QAAQ,KAAK,CAAC;MAElC;MACA,sBAAsB,MAAK;AAC1B,eAAO,gBAAgB,qBAAoB;MAC5C;;IAED,QAAQ;MACP,YAAY,CAAC,QAAO;AACnB,eAAO,IAAI,cAAc,MAAM,OAAO;MACvC;MACA,SAAS,CAAC,QACT,IAAI,cAAc,YAAY,IAAI,IAC/B,IAAI,cAAc,QAAQ,KAAK;;IAEpC,QAAQ;MACP,gBAAgB,OAAO;;GAExB;AAEH;",
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;;;;;AAAA,oBAMO;AAgDP,MAAM,qBAA+D,sBACpE,CAAC,KAAK,QAAgC;AACrC,WAAS,IAAI,IAAI,QAAQ,IAAI,IAAI,SAAS,IAAI,QAAQ,KAAK;AAC1D,QAAI,cAAc,CAAC,IAAI;EACxB;AACA,SAAO;AACR,CAAC;AAQI,SAAU,gCACf,iBACA,QAAuC;AAEvC,aAAO,uBAKN;IACC,IAAI;IACJ,SAAS;IACT,SAAS;MACR,eAAe;;QAEd,GAAI,IAAI,MAAM,OAAO,gBAAgB,EAAE,KACtC,IAAI;;QAGL,GAAI,IAAI,MACP,OAAO,eAAe,OAAO,gBAAgB,EAC5C,KAAK,KAAK;;;IAGd,QAAQ;MACP,mBAAmB;QAClB,QAAQ;UACP;YACC,MAAM;YACN,QAAQ;;UAET;YACC,MAAM;YACN,QAAQ;;;QAGV,OAAO;UACN,gBAAgB;;QAEjB,IAAI;UACH,SAAS;YACR,SAAS;YACT,QAAQ;YACR,UAAU;;;;MAIb,gBAAgB;QACf,QAAQ;UACP,IAAI;UACJ,KAAK;UACL,QAAQ;YACP,QAAQ;;UAET,SAAS;YACR,QAAQ;;;;MAIX,4BAA4B;QAC3B,OAAO;UACN,gBAAgB;;QAEjB,IAAI;UACH,SAAS;YACR,SAAS;YACT,QAAQ;YACR,UAAU;;;;MAIb,kBAAkB;QACjB,QAAQ;UACP,IAAI;UACJ,KAAK;UACL,QAAQ;YACP,QAAQ;;UAET,SAAS;;YAER,QAAQ;;;;MAIX,SAAS;QACR,MAAM;QACN,IAAI;UACH,SAAS;;;MAGX,SAAS;QACR,MAAM;;;KAIT;IACC,UAAU;MACT,uBAAuB,wBAAC,QAAO;AAC9B,eAAO,gBAAgB,sBACtB,IAAI,cAAc,QAAQ,KAAK,CAAC;MAElC,GAJuB;MAKvB,sBAAsB,6BAAK;AAC1B,eAAO,gBAAgB,qBAAoB;MAC5C,GAFsB;;IAIvB,QAAQ;MACP,YAAY,wBAAC,QAAO;AACnB,eAAO,IAAI,cAAc,MAAM,OAAO;MACvC,GAFY;MAGZ,SAAS,wBAAC,QACT,IAAI,cAAc,YAAY,IAAI,IAC/B,IAAI,cAAc,QAAQ,KAAK,GAF1B;;IAIV,QAAQ;MACP,gBAAgB,OAAO;;GAExB;AAEH;AAvHgB;",
6
6
  "names": []
7
7
  }
@@ -5,6 +5,7 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
6
  var __getProtoOf = Object.getPrototypeOf;
7
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
8
9
  var __export = (target, all) => {
9
10
  for (var name in all)
10
11
  __defProp(target, name, { get: all[name], enumerable: true });
@@ -62,6 +63,7 @@ async function checkForConfigUpdates(currentVersion) {
62
63
  if (updateVersion)
63
64
  return updateVersion;
64
65
  }
66
+ __name(checkForConfigUpdates, "checkForConfigUpdates");
65
67
  async function installConfigUpdate(newVersion, external) {
66
68
  const { got } = await import("got");
67
69
  let registryInfo;
@@ -81,20 +83,20 @@ async function installConfigUpdate(newVersion, external) {
81
83
  try {
82
84
  await lockfile.lock(lockfilePath, {
83
85
  ...lockfileOptions,
84
- onCompromised: () => {
85
- }
86
+ onCompromised: /* @__PURE__ */ __name(() => {
87
+ }, "onCompromised")
86
88
  });
87
89
  } catch {
88
90
  throw new import_core.ZWaveError(`Config update failed: Another installation is already in progress!`, import_core.ZWaveErrorCodes.Config_Update_InstallFailed);
89
91
  }
90
- const freeLock = async () => {
92
+ const freeLock = /* @__PURE__ */ __name(async () => {
91
93
  try {
92
94
  if (await lockfile.check(lockfilePath, lockfileOptions)) {
93
95
  await lockfile.unlock(lockfilePath, lockfileOptions);
94
96
  }
95
97
  } catch {
96
98
  }
97
- };
99
+ }, "freeLock");
98
100
  let tmpDir;
99
101
  try {
100
102
  tmpDir = await import_promises.default.mkdtemp(path.join(import_node_os.default.tmpdir(), "zjs-config-update-"));
@@ -123,6 +125,7 @@ async function installConfigUpdate(newVersion, external) {
123
125
  path2 = `/${path2}`;
124
126
  return path2;
125
127
  }
128
+ __name(normalizeToUnixStyle, "normalizeToUnixStyle");
126
129
  const extractedDir = path.join(tmpDir, "extracted");
127
130
  try {
128
131
  await import_promises.default.rm(extractedDir, { recursive: true, force: true });
@@ -147,6 +150,7 @@ async function installConfigUpdate(newVersion, external) {
147
150
  });
148
151
  await freeLock();
149
152
  }
153
+ __name(installConfigUpdate, "installConfigUpdate");
150
154
  // Annotate the CommonJS export names for ESM import in node:
151
155
  0 && (module.exports = {
152
156
  checkForConfigUpdates,
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/lib/driver/UpdateConfig.ts"],
4
4
  "sourcesContent": ["import { ZWaveError, ZWaveErrorCodes } from \"@zwave-js/core\";\nimport { copyFilesRecursive, getErrorMessage } from \"@zwave-js/shared\";\nimport { isObject } from \"alcalzone-shared/typeguards\";\nimport execa from \"execa\";\nimport fs from \"node:fs/promises\";\nimport os from \"node:os\";\nimport * as path from \"node:path\";\nimport * as lockfile from \"proper-lockfile\";\nimport semverInc from \"semver/functions/inc.js\";\nimport semverValid from \"semver/functions/valid.js\";\nimport semverMaxSatisfying from \"semver/ranges/max-satisfying.js\";\n\n/**\n * Checks whether there is a compatible update for the currently installed config package.\n * Returns the new version if there is an update, `undefined` otherwise.\n * Throws if the update check failed.\n */\nexport async function checkForConfigUpdates(\n\tcurrentVersion: string,\n): Promise<string | undefined> {\n\tconst { got } = await import(\"got\");\n\tlet registry: Record<string, unknown>;\n\n\ttry {\n\t\tregistry = await got\n\t\t\t.get(\"https://registry.npmjs.org/@zwave-js/config\")\n\t\t\t.json();\n\t} catch {\n\t\tthrow new ZWaveError(\n\t\t\t`Could not check for config updates: Failed to download package information!`,\n\t\t\tZWaveErrorCodes.Config_Update_RegistryError,\n\t\t);\n\t}\n\n\tif (!isObject(registry) || !isObject(registry.versions)) {\n\t\tthrow new ZWaveError(\n\t\t\t`Could not check for config updates: Downloaded package information does not contain version information!`,\n\t\t\tZWaveErrorCodes.Config_Update_RegistryError,\n\t\t);\n\t}\n\n\t// Find the highest possible prepatch update (e.g. 7.2.4 -> 7.2.5-20200424)\n\tconst allVersions = Object.keys(registry.versions)\n\t\t.filter((v) => !!semverValid(v))\n\t\t.filter((v) => /\\-\\d{8}$/.test(v));\n\tconst updateRange = `>${currentVersion} <${\n\t\tsemverInc(\n\t\t\tcurrentVersion,\n\t\t\t\"patch\",\n\t\t)\n\t}`;\n\tconst updateVersion = semverMaxSatisfying(allVersions, updateRange, {\n\t\tincludePrerelease: true,\n\t});\n\tif (updateVersion) return updateVersion;\n}\n\n/**\n * Downloads and installs the given configuration update.\n * This only works if an external configuation directory is used.\n */\nexport async function installConfigUpdate(\n\tnewVersion: string,\n\texternal: {\n\t\tconfigDir: string;\n\t\tcacheDir: string;\n\t},\n): Promise<void> {\n\tconst { got } = await import(\"got\");\n\n\tlet registryInfo: any;\n\ttry {\n\t\tregistryInfo = await got\n\t\t\t.get(`https://registry.npmjs.org/@zwave-js/config/${newVersion}`)\n\t\t\t.json();\n\t} catch {\n\t\tthrow new ZWaveError(\n\t\t\t`Config update failed: Could not fetch package info from npm registry!`,\n\t\t\tZWaveErrorCodes.Config_Update_InstallFailed,\n\t\t);\n\t}\n\n\tconst url = registryInfo?.dist?.tarball;\n\tif (typeof url !== \"string\") {\n\t\tthrow new ZWaveError(\n\t\t\t`Config update failed: Could not fetch package tarball URL from npm registry!`,\n\t\t\tZWaveErrorCodes.Config_Update_InstallFailed,\n\t\t);\n\t}\n\n\tconst lockfilePath = external.cacheDir;\n\tconst lockfileOptions: lockfile.LockOptions = {\n\t\tlockfilePath: path.join(external.cacheDir, \"config-update.lock\"),\n\t};\n\n\ttry {\n\t\tawait lockfile.lock(lockfilePath, {\n\t\t\t...lockfileOptions,\n\t\t\tonCompromised: () => {\n\t\t\t\t// do nothing\n\t\t\t},\n\t\t});\n\t} catch {\n\t\tthrow new ZWaveError(\n\t\t\t`Config update failed: Another installation is already in progress!`,\n\t\t\tZWaveErrorCodes.Config_Update_InstallFailed,\n\t\t);\n\t}\n\n\tconst freeLock = async () => {\n\t\ttry {\n\t\t\tif (await lockfile.check(lockfilePath, lockfileOptions)) {\n\t\t\t\tawait lockfile.unlock(lockfilePath, lockfileOptions);\n\t\t\t}\n\t\t} catch {\n\t\t\t// whatever - just don't crash\n\t\t}\n\t};\n\n\t// Download tarball to a temporary directory\n\tlet tmpDir: string;\n\ttry {\n\t\ttmpDir = await fs.mkdtemp(\n\t\t\tpath.join(os.tmpdir(), \"zjs-config-update-\"),\n\t\t);\n\t} catch (e) {\n\t\tawait freeLock();\n\t\tthrow new ZWaveError(\n\t\t\t`Config update failed: Could not create temporary directory. Reason: ${\n\t\t\t\tgetErrorMessage(\n\t\t\t\t\te,\n\t\t\t\t)\n\t\t\t}`,\n\t\t\tZWaveErrorCodes.Config_Update_InstallFailed,\n\t\t);\n\t}\n\n\t// Download the package tarball into the temporary directory\n\tconst tarFilename = path.join(tmpDir, \"zjs-config-update.tgz\");\n\ttry {\n\t\tconst handle = await fs.open(tarFilename, \"w\");\n\t\tconst fstream = handle.createWriteStream({ autoClose: true });\n\t\tconst response = got.stream.get(url);\n\t\tresponse.pipe(fstream);\n\n\t\tawait new Promise((resolve, reject) => {\n\t\t\tresponse.on(\"error\", reject);\n\t\t\tresponse.on(\"end\", resolve);\n\t\t});\n\t} catch (e) {\n\t\tawait freeLock();\n\t\tthrow new ZWaveError(\n\t\t\t`Config update failed: Could not download tarball. Reason: ${\n\t\t\t\tgetErrorMessage(\n\t\t\t\t\te,\n\t\t\t\t)\n\t\t\t}`,\n\t\t\tZWaveErrorCodes.Config_Update_InstallFailed,\n\t\t);\n\t}\n\n\t// This should not be necessary in Docker. Leaving it here anyways in case\n\t// we want to use this method on Windows at some point\n\tfunction normalizeToUnixStyle(path: string): string {\n\t\tpath = path.replaceAll(\":\", \"\");\n\t\tpath = path.replaceAll(\"\\\\\", \"/\");\n\t\tif (!path.startsWith(\"/\")) path = `/${path}`;\n\t\treturn path;\n\t}\n\n\tconst extractedDir = path.join(tmpDir, \"extracted\");\n\ttry {\n\t\t// Extract the tarball in the temporary folder\n\t\tawait fs.rm(extractedDir, { recursive: true, force: true });\n\t\tawait fs.mkdir(extractedDir, { recursive: true });\n\t\tawait execa(\"tar\", [\n\t\t\t\"--strip-components=1\",\n\t\t\t\"-xzf\",\n\t\t\tnormalizeToUnixStyle(tarFilename),\n\t\t\t\"-C\",\n\t\t\tnormalizeToUnixStyle(extractedDir),\n\t\t]);\n\n\t\t// then overwrite the files in the external config directory\n\t\tawait fs.rm(external.configDir, { recursive: true, force: true });\n\t\tawait fs.mkdir(external.configDir, { recursive: true });\n\t\tawait copyFilesRecursive(\n\t\t\tpath.join(extractedDir, \"config\"),\n\t\t\texternal.configDir,\n\t\t\t(src) => src.endsWith(\".json\"),\n\t\t);\n\t\tconst externalVersionFilename = path.join(\n\t\t\texternal.configDir,\n\t\t\t\"version\",\n\t\t);\n\t\tawait fs.writeFile(externalVersionFilename, newVersion, \"utf8\");\n\t} catch {\n\t\tawait freeLock();\n\t\tthrow new ZWaveError(\n\t\t\t`Config update failed: Could not extract tarball`,\n\t\t\tZWaveErrorCodes.Config_Update_InstallFailed,\n\t\t);\n\t}\n\n\t// Clean up the temp dir and ignore errors\n\tvoid fs.rm(tmpDir, { recursive: true, force: true }).catch(() => {\n\t\t// ignore\n\t});\n\n\t// Free the lock\n\tawait freeLock();\n}\n"],
5
- "mappings": "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",
5
+ "mappings": "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",
6
6
  "names": ["semverValid", "semverInc", "semverMaxSatisfying", "fs", "os", "path", "execa"]
7
7
  }
@@ -3,6 +3,7 @@ var __defProp = Object.defineProperty;
3
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
5
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
6
7
  var __export = (target, all) => {
7
8
  for (var name in all)
8
9
  __defProp(target, name, { get: all[name], enumerable: true });
@@ -27,6 +28,7 @@ function mergeUserAgent(existingComponents, additionalComponents, allowOverwrite
27
28
  function normalize(str) {
28
29
  return str.replaceAll(/[^a-zA-Z0-9\.\-]/g, "");
29
30
  }
31
+ __name(normalize, "normalize");
30
32
  for (let [name, version] of Object.entries(additionalComponents)) {
31
33
  name = normalize(name);
32
34
  if (name === "node-zwave-js")
@@ -42,9 +44,11 @@ function mergeUserAgent(existingComponents, additionalComponents, allowOverwrite
42
44
  }
43
45
  return ret;
44
46
  }
47
+ __name(mergeUserAgent, "mergeUserAgent");
45
48
  function userAgentComponentsToString(components) {
46
49
  return [...components].map(([name, version]) => `${name}/${version}`).join(" ");
47
50
  }
51
+ __name(userAgentComponentsToString, "userAgentComponentsToString");
48
52
  // Annotate the CommonJS export names for ESM import in node:
49
53
  0 && (module.exports = {
50
54
  mergeUserAgent,
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/lib/driver/UserAgent.ts"],
4
4
  "sourcesContent": ["export function mergeUserAgent(\n\texistingComponents: Map<string, string>,\n\tadditionalComponents: Record<string, string | null | undefined>,\n\tallowOverwrite: boolean = false,\n): Map<string, string> {\n\tconst ret = new Map(existingComponents);\n\n\t// Remove everything that's not a letter, number, . or -\n\tfunction normalize(str: string): string {\n\t\treturn str.replaceAll(/[^a-zA-Z0-9\\.\\-]/g, \"\");\n\t}\n\tfor (let [name, version] of Object.entries(additionalComponents)) {\n\t\tname = normalize(name);\n\t\tif (name === \"node-zwave-js\") continue;\n\n\t\tif (!allowOverwrite && ret.has(name)) continue;\n\n\t\tif (version == undefined) {\n\t\t\tret.delete(name);\n\t\t} else {\n\t\t\tversion = normalize(version);\n\t\t\tret.set(name, version);\n\t\t}\n\t}\n\n\treturn ret;\n}\n\nexport function userAgentComponentsToString(\n\tcomponents: Map<string, string>,\n): string {\n\treturn [...components]\n\t\t.map(([name, version]) => `${name}/${version}`)\n\t\t.join(\" \");\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;;;;;;AAAM,SAAU,eACf,oBACA,sBACA,iBAA0B,OAAK;AAE/B,QAAM,MAAM,IAAI,IAAI,kBAAkB;AAGtC,WAAS,UAAU,KAAW;AAC7B,WAAO,IAAI,WAAW,qBAAqB,EAAE;EAC9C;AACA,WAAS,CAAC,MAAM,OAAO,KAAK,OAAO,QAAQ,oBAAoB,GAAG;AACjE,WAAO,UAAU,IAAI;AACrB,QAAI,SAAS;AAAiB;AAE9B,QAAI,CAAC,kBAAkB,IAAI,IAAI,IAAI;AAAG;AAEtC,QAAI,WAAW,QAAW;AACzB,UAAI,OAAO,IAAI;IAChB,OAAO;AACN,gBAAU,UAAU,OAAO;AAC3B,UAAI,IAAI,MAAM,OAAO;IACtB;EACD;AAEA,SAAO;AACR;AAEM,SAAU,4BACf,YAA+B;AAE/B,SAAO,CAAC,GAAG,UAAU,EACnB,IAAI,CAAC,CAAC,MAAM,OAAO,MAAM,GAAG,IAAI,IAAI,OAAO,EAAE,EAC7C,KAAK,GAAG;AACX;",
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;;;;;;AAAM,SAAU,eACf,oBACA,sBACA,iBAA0B,OAAK;AAE/B,QAAM,MAAM,IAAI,IAAI,kBAAkB;AAGtC,WAAS,UAAU,KAAW;AAC7B,WAAO,IAAI,WAAW,qBAAqB,EAAE;EAC9C;AAFS;AAGT,WAAS,CAAC,MAAM,OAAO,KAAK,OAAO,QAAQ,oBAAoB,GAAG;AACjE,WAAO,UAAU,IAAI;AACrB,QAAI,SAAS;AAAiB;AAE9B,QAAI,CAAC,kBAAkB,IAAI,IAAI,IAAI;AAAG;AAEtC,QAAI,WAAW,QAAW;AACzB,UAAI,OAAO,IAAI;IAChB,OAAO;AACN,gBAAU,UAAU,OAAO;AAC3B,UAAI,IAAI,MAAM,OAAO;IACtB;EACD;AAEA,SAAO;AACR;AA1BgB;AA4BV,SAAU,4BACf,YAA+B;AAE/B,SAAO,CAAC,GAAG,UAAU,EACnB,IAAI,CAAC,CAAC,MAAM,OAAO,MAAM,GAAG,IAAI,IAAI,OAAO,EAAE,EAC7C,KAAK,GAAG;AACX;AANgB;",
6
6
  "names": []
7
7
  }
@@ -5,6 +5,7 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
6
  var __getProtoOf = Object.getPrototypeOf;
7
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
8
9
  var __export = (target, all) => {
9
10
  for (var name in all)
10
11
  __defProp(target, name, { get: all[name], enumerable: true });
@@ -88,6 +89,7 @@ function discoverRemoteSerialPorts(timeout = 1e3) {
88
89
  }
89
90
  });
90
91
  }
92
+ __name(discoverRemoteSerialPorts, "discoverRemoteSerialPorts");
91
93
  // Annotate the CommonJS export names for ESM import in node:
92
94
  0 && (module.exports = {
93
95
  discoverRemoteSerialPorts
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/lib/driver/mDNSDiscovery.ts"],
4
4
  "sourcesContent": ["import { Bytes, isUint8Array } from \"@zwave-js/shared\";\nimport { isArray, isObject } from \"alcalzone-shared/typeguards\";\nimport createMDNSServer from \"mdns-server\";\n\nexport interface RemoteSerialPort {\n\tport: string;\n\tinfo: Record<string, string>;\n}\n\nconst domain = \"_zwave._tcp.local\";\n\nexport function discoverRemoteSerialPorts(\n\ttimeout: number | false = 1000,\n): Promise<RemoteSerialPort[] | undefined> {\n\tconst mdns = createMDNSServer({\n\t\treuseAddr: true,\n\t\tloopback: false,\n\t\tnoInit: true,\n\t\tttl: 10,\n\t});\n\tlet timer: NodeJS.Timeout | undefined;\n\n\treturn new Promise((resolve, reject) => {\n\t\tmdns.on(\"response\", (resp) => {\n\t\t\tconst matches = resp.answers\n\t\t\t\t.filter(\n\t\t\t\t\t(n) =>\n\t\t\t\t\t\tn.type === \"PTR\"\n\t\t\t\t\t\t&& n.name === domain\n\t\t\t\t\t\t&& typeof n.data === \"string\",\n\t\t\t\t)\n\t\t\t\t.map(({ data }) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttxt: resp.answers.find(\n\t\t\t\t\t\t\t(n) => n.type === \"TXT\" && n.name === data,\n\t\t\t\t\t\t) ?? resp.additionals.find(\n\t\t\t\t\t\t\t(n) => n.type === \"TXT\" && n.name === data,\n\t\t\t\t\t\t),\n\t\t\t\t\t\tsrv: resp.answers.find(\n\t\t\t\t\t\t\t(n) => n.type === \"SRV\" && n.name === data,\n\t\t\t\t\t\t) ?? resp.additionals.find(\n\t\t\t\t\t\t\t(n) => n.type === \"SRV\" && n.name === data,\n\t\t\t\t\t\t),\n\t\t\t\t\t};\n\t\t\t\t})\n\t\t\t\t.filter(\n\t\t\t\t\t({ srv }) =>\n\t\t\t\t\t\t!!srv\n\t\t\t\t\t\t&& isObject(srv.data)\n\t\t\t\t\t\t&& typeof srv.data.target === \"string\"\n\t\t\t\t\t\t&& typeof srv.data.port === \"number\",\n\t\t\t\t)\n\t\t\t\t.map(({ txt, srv }) => {\n\t\t\t\t\tconst info: Record<string, string> = {};\n\t\t\t\t\tif (!!txt && isArray(txt.data)) {\n\t\t\t\t\t\tconst strings = (txt.data as unknown[])\n\t\t\t\t\t\t\t.filter((d) => isUint8Array(d))\n\t\t\t\t\t\t\t.map((d) => Bytes.view(d).toString(\"utf8\"))\n\t\t\t\t\t\t\t.filter((d) => d.includes(\"=\"));\n\n\t\t\t\t\t\tfor (const string of strings) {\n\t\t\t\t\t\t\tconst [key, value] = string.split(\"=\", 2);\n\t\t\t\t\t\t\tinfo[key] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tconst addr = srv!.data as { target: string; port: number };\n\t\t\t\t\tconst port = `tcp://${addr.target}:${addr.port}`;\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tport,\n\t\t\t\t\t\tinfo,\n\t\t\t\t\t};\n\t\t\t\t});\n\n\t\t\tif (matches.length) {\n\t\t\t\tclearTimeout(timer);\n\t\t\t\tresolve(matches);\n\t\t\t}\n\t\t});\n\n\t\tmdns.on(\"ready\", () => {\n\t\t\tmdns.query([\n\t\t\t\t{ name: domain, type: \"PTR\" },\n\t\t\t\t{ name: domain, type: \"SRV\" },\n\t\t\t\t{ name: domain, type: \"TXT\" },\n\t\t\t]);\n\t\t});\n\n\t\tmdns.on(\"error\", reject);\n\n\t\tmdns.initServer();\n\n\t\tif (typeof timeout === \"number\" && timeout > 0) {\n\t\t\ttimer = setTimeout(() => {\n\t\t\t\tmdns.destroy();\n\t\t\t\tresolve(undefined);\n\t\t\t}, timeout);\n\t\t}\n\t});\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;AAAA,oBAAoC;AACpC,wBAAkC;AAClC,yBAA6B;AAO7B,MAAM,SAAS;AAET,SAAU,0BACf,UAA0B,KAAI;AAE9B,QAAM,WAAO,mBAAAA,SAAiB;IAC7B,WAAW;IACX,UAAU;IACV,QAAQ;IACR,KAAK;GACL;AACD,MAAI;AAEJ,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAU;AACtC,SAAK,GAAG,YAAY,CAAC,SAAQ;AAC5B,YAAM,UAAU,KAAK,QACnB,OACA,CAAC,MACA,EAAE,SAAS,SACR,EAAE,SAAS,UACX,OAAO,EAAE,SAAS,QAAQ,EAE9B,IAAI,CAAC,EAAE,KAAI,MAAM;AACjB,eAAO;UACN,KAAK,KAAK,QAAQ,KACjB,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,SAAS,IAAI,KACtC,KAAK,YAAY,KACrB,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,SAAS,IAAI;UAE3C,KAAK,KAAK,QAAQ,KACjB,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,SAAS,IAAI,KACtC,KAAK,YAAY,KACrB,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,SAAS,IAAI;;MAG7C,CAAC,EACA,OACA,CAAC,EAAE,IAAG,MACL,CAAC,CAAC,WACC,4BAAS,IAAI,IAAI,KACjB,OAAO,IAAI,KAAK,WAAW,YAC3B,OAAO,IAAI,KAAK,SAAS,QAAQ,EAErC,IAAI,CAAC,EAAE,KAAK,IAAG,MAAM;AACrB,cAAM,OAA+B,CAAA;AACrC,YAAI,CAAC,CAAC,WAAO,2BAAQ,IAAI,IAAI,GAAG;AAC/B,gBAAM,UAAW,IAAI,KACnB,OAAO,CAAC,UAAM,4BAAa,CAAC,CAAC,EAC7B,IAAI,CAAC,MAAM,oBAAM,KAAK,CAAC,EAAE,SAAS,MAAM,CAAC,EACzC,OAAO,CAAC,MAAM,EAAE,SAAS,GAAG,CAAC;AAE/B,qBAAW,UAAU,SAAS;AAC7B,kBAAM,CAAC,KAAK,KAAK,IAAI,OAAO,MAAM,KAAK,CAAC;AACxC,iBAAK,GAAG,IAAI;UACb;QACD;AACA,cAAM,OAAO,IAAK;AAClB,cAAM,OAAO,SAAS,KAAK,MAAM,IAAI,KAAK,IAAI;AAE9C,eAAO;UACN;UACA;;MAEF,CAAC;AAEF,UAAI,QAAQ,QAAQ;AACnB,qBAAa,KAAK;AAClB,gBAAQ,OAAO;MAChB;IACD,CAAC;AAED,SAAK,GAAG,SAAS,MAAK;AACrB,WAAK,MAAM;QACV,EAAE,MAAM,QAAQ,MAAM,MAAK;QAC3B,EAAE,MAAM,QAAQ,MAAM,MAAK;QAC3B,EAAE,MAAM,QAAQ,MAAM,MAAK;OAC3B;IACF,CAAC;AAED,SAAK,GAAG,SAAS,MAAM;AAEvB,SAAK,WAAU;AAEf,QAAI,OAAO,YAAY,YAAY,UAAU,GAAG;AAC/C,cAAQ,WAAW,MAAK;AACvB,aAAK,QAAO;AACZ,gBAAQ,MAAS;MAClB,GAAG,OAAO;IACX;EACD,CAAC;AACF;",
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;AAAA,oBAAoC;AACpC,wBAAkC;AAClC,yBAA6B;AAO7B,MAAM,SAAS;AAET,SAAU,0BACf,UAA0B,KAAI;AAE9B,QAAM,WAAO,mBAAAA,SAAiB;IAC7B,WAAW;IACX,UAAU;IACV,QAAQ;IACR,KAAK;GACL;AACD,MAAI;AAEJ,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAU;AACtC,SAAK,GAAG,YAAY,CAAC,SAAQ;AAC5B,YAAM,UAAU,KAAK,QACnB,OACA,CAAC,MACA,EAAE,SAAS,SACR,EAAE,SAAS,UACX,OAAO,EAAE,SAAS,QAAQ,EAE9B,IAAI,CAAC,EAAE,KAAI,MAAM;AACjB,eAAO;UACN,KAAK,KAAK,QAAQ,KACjB,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,SAAS,IAAI,KACtC,KAAK,YAAY,KACrB,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,SAAS,IAAI;UAE3C,KAAK,KAAK,QAAQ,KACjB,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,SAAS,IAAI,KACtC,KAAK,YAAY,KACrB,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,SAAS,IAAI;;MAG7C,CAAC,EACA,OACA,CAAC,EAAE,IAAG,MACL,CAAC,CAAC,WACC,4BAAS,IAAI,IAAI,KACjB,OAAO,IAAI,KAAK,WAAW,YAC3B,OAAO,IAAI,KAAK,SAAS,QAAQ,EAErC,IAAI,CAAC,EAAE,KAAK,IAAG,MAAM;AACrB,cAAM,OAA+B,CAAA;AACrC,YAAI,CAAC,CAAC,WAAO,2BAAQ,IAAI,IAAI,GAAG;AAC/B,gBAAM,UAAW,IAAI,KACnB,OAAO,CAAC,UAAM,4BAAa,CAAC,CAAC,EAC7B,IAAI,CAAC,MAAM,oBAAM,KAAK,CAAC,EAAE,SAAS,MAAM,CAAC,EACzC,OAAO,CAAC,MAAM,EAAE,SAAS,GAAG,CAAC;AAE/B,qBAAW,UAAU,SAAS;AAC7B,kBAAM,CAAC,KAAK,KAAK,IAAI,OAAO,MAAM,KAAK,CAAC;AACxC,iBAAK,GAAG,IAAI;UACb;QACD;AACA,cAAM,OAAO,IAAK;AAClB,cAAM,OAAO,SAAS,KAAK,MAAM,IAAI,KAAK,IAAI;AAE9C,eAAO;UACN;UACA;;MAEF,CAAC;AAEF,UAAI,QAAQ,QAAQ;AACnB,qBAAa,KAAK;AAClB,gBAAQ,OAAO;MAChB;IACD,CAAC;AAED,SAAK,GAAG,SAAS,MAAK;AACrB,WAAK,MAAM;QACV,EAAE,MAAM,QAAQ,MAAM,MAAK;QAC3B,EAAE,MAAM,QAAQ,MAAM,MAAK;QAC3B,EAAE,MAAM,QAAQ,MAAM,MAAK;OAC3B;IACF,CAAC;AAED,SAAK,GAAG,SAAS,MAAM;AAEvB,SAAK,WAAU;AAEf,QAAI,OAAO,YAAY,YAAY,UAAU,GAAG;AAC/C,cAAQ,WAAW,MAAK;AACvB,aAAK,QAAO;AACZ,gBAAQ,MAAS;MAClB,GAAG,OAAO;IACX;EACD,CAAC;AACF;AAxFgB;",
6
6
  "names": ["createMDNSServer"]
7
7
  }
@@ -3,6 +3,7 @@ var __defProp = Object.defineProperty;
3
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
5
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
6
7
  var __export = (target, all) => {
7
8
  for (var name in all)
8
9
  __defProp(target, name, { get: all[name], enumerable: true });
@@ -32,6 +33,9 @@ const DRIVER_LABEL = "DRIVER";
32
33
  const DRIVER_LOGLEVEL = "verbose";
33
34
  const SENDQUEUE_LOGLEVEL = "debug";
34
35
  class DriverLogger extends import_core.ZWaveLoggerBase {
36
+ static {
37
+ __name(this, "DriverLogger");
38
+ }
35
39
  driver;
36
40
  constructor(driver, loggers) {
37
41
  super(loggers, DRIVER_LABEL);
@@ -106,7 +110,7 @@ class DriverLogger extends import_core.ZWaveLoggerBase {
106
110
  try {
107
111
  if (isCCContainer) {
108
112
  msg = msg.filter((line) => !line.startsWith("\u2502 payload:"));
109
- const logCC = (cc, indent = 0) => {
113
+ const logCC = /* @__PURE__ */ __name((cc, indent = 0) => {
110
114
  const isEncapCC = (0, import_cc.isEncapsulatingCommandClass)(cc) || (0, import_cc.isMultiEncapsulatingCommandClass)(cc);
111
115
  const loggedCC = cc.toLogEntry(this.driver);
112
116
  msg.push(" ".repeat(indent * 2) + "\u2514\u2500" + (0, import_core.tagify)(loggedCC.tags));
@@ -121,7 +125,7 @@ class DriverLogger extends import_core.ZWaveLoggerBase {
121
125
  logCC(encap, indent);
122
126
  }
123
127
  }
124
- };
128
+ }, "logCC");
125
129
  logCC(message.command);
126
130
  }
127
131
  this.logger.log({
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/lib/log/Driver.ts"],
4
4
  "sourcesContent": ["import {\n\ttype CommandClass,\n\tisEncapsulatingCommandClass,\n\tisMultiEncapsulatingCommandClass,\n} from \"@zwave-js/cc\";\nimport {\n\ttype DataDirection,\n\ttype LogContext,\n\tMessagePriority,\n\ttype ZWaveLogContainer,\n\tZWaveLoggerBase,\n\tgetDirectionPrefix,\n\tmessageRecordToLines,\n\ttagify,\n} from \"@zwave-js/core\";\nimport type { Message, ResponseRole } from \"@zwave-js/serial\";\nimport { FunctionType, MessageType } from \"@zwave-js/serial\";\nimport { containsCC } from \"@zwave-js/serial/serialapi\";\nimport { getEnumMemberName } from \"@zwave-js/shared\";\nimport type { Driver } from \"../driver/Driver.js\";\nimport { type TransactionQueue } from \"../driver/Queue.js\";\nimport type { Transaction } from \"../driver/Transaction.js\";\nimport { NodeStatus } from \"../node/_Types.js\";\n\nexport const DRIVER_LABEL = \"DRIVER\";\nconst DRIVER_LOGLEVEL = \"verbose\";\nconst SENDQUEUE_LOGLEVEL = \"debug\";\n\nexport interface DriverLogContext extends LogContext<\"driver\"> {\n\tdirection?: DataDirection;\n}\n\nexport class DriverLogger extends ZWaveLoggerBase<DriverLogContext> {\n\tconstructor(private readonly driver: Driver, loggers: ZWaveLogContainer) {\n\t\tsuper(loggers, DRIVER_LABEL);\n\t}\n\n\tprivate isDriverLogVisible(): boolean {\n\t\treturn this.container.isLoglevelVisible(DRIVER_LOGLEVEL);\n\t}\n\n\tprivate isSendQueueLogVisible(): boolean {\n\t\treturn this.container.isLoglevelVisible(SENDQUEUE_LOGLEVEL);\n\t}\n\n\t/**\n\t * Logs a message\n\t * @param msg The message to output\n\t */\n\tpublic print(\n\t\tmessage: string,\n\t\tlevel?: \"debug\" | \"verbose\" | \"warn\" | \"error\" | \"info\",\n\t): void {\n\t\tconst actualLevel = level || DRIVER_LOGLEVEL;\n\t\tif (!this.container.isLoglevelVisible(actualLevel)) return;\n\n\t\tthis.logger.log({\n\t\t\tlevel: actualLevel,\n\t\t\tmessage,\n\t\t\tdirection: getDirectionPrefix(\"none\"),\n\t\t\tcontext: { source: \"driver\", direction: \"none\" },\n\t\t});\n\t}\n\n\t/**\n\t * Serializes a message that starts a transaction, i.e. a message that is sent and may expect a response\n\t */\n\tpublic transaction(transaction: Transaction): void {\n\t\tif (!this.isDriverLogVisible()) return;\n\n\t\tconst { message } = transaction;\n\t\t// On the first attempt, we print the basic information about the transaction\n\t\tconst secondaryTags: string[] = [];\n\t\t// TODO: restore logging\n\t\t// if (transaction.sendAttempts === 1) {\n\t\tsecondaryTags.push(`P: ${MessagePriority[transaction.priority]}`);\n\t\t// } else {\n\t\t// \t// On later attempts, we print the send attempts\n\t\t// \tsecondaryTags.push(\n\t\t// \t\t`attempt ${transaction.sendAttempts}/${transaction.maxSendAttempts}`,\n\t\t// \t);\n\t\t// }\n\n\t\tthis.logMessage(message, {\n\t\t\tsecondaryTags,\n\t\t\t// Since we are programming a controller, the first message of a transaction is always outbound\n\t\t\t// (not to confuse with the message type, which may be Request or Response)\n\t\t\tdirection: \"outbound\",\n\t\t});\n\t}\n\n\t/** Logs information about a message that is received as a response to a transaction */\n\tpublic transactionResponse(\n\t\tmessage: Message,\n\t\toriginalTransaction: Transaction | undefined,\n\t\trole: ResponseRole,\n\t): void {\n\t\tif (!this.isDriverLogVisible()) return;\n\t\tthis.logMessage(message, {\n\t\t\tnodeId: originalTransaction?.message?.getNodeId(),\n\t\t\tsecondaryTags: [role],\n\t\t\tdirection: \"inbound\",\n\t\t});\n\t}\n\n\tpublic logMessage(\n\t\tmessage: Message,\n\t\t{\n\t\t\t// Used to relate this log message to a node\n\t\t\tnodeId,\n\t\t\tsecondaryTags,\n\t\t\tdirection = \"none\",\n\t\t}: {\n\t\t\tnodeId?: number;\n\t\t\tsecondaryTags?: string[];\n\t\t\tdirection?: DataDirection;\n\t\t} = {},\n\t): void {\n\t\tif (!this.isDriverLogVisible()) return;\n\t\tif (nodeId == undefined) nodeId = message.getNodeId();\n\t\tif (nodeId != undefined && !this.container.shouldLogNode(nodeId)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst isCCContainer = containsCC(message);\n\t\tconst logEntry = message.toLogEntry();\n\n\t\tlet msg: string[] = [tagify(logEntry.tags)];\n\t\tif (logEntry.message) {\n\t\t\tmsg.push(\n\t\t\t\t...messageRecordToLines(logEntry.message).map(\n\t\t\t\t\t(line) => (isCCContainer ? \"\u2502 \" : \" \") + line,\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\ttry {\n\t\t\t// If possible, include information about the CCs\n\t\t\tif (isCCContainer) {\n\t\t\t\t// Remove the default payload message and draw a bracket\n\t\t\t\tmsg = msg.filter((line) => !line.startsWith(\"\u2502 payload:\"));\n\n\t\t\t\tconst logCC = (cc: CommandClass, indent: number = 0) => {\n\t\t\t\t\tconst isEncapCC = isEncapsulatingCommandClass(cc)\n\t\t\t\t\t\t|| isMultiEncapsulatingCommandClass(cc);\n\t\t\t\t\tconst loggedCC = cc.toLogEntry(this.driver);\n\t\t\t\t\tmsg.push(\n\t\t\t\t\t\t\" \".repeat(indent * 2) + \"\u2514\u2500\" + tagify(loggedCC.tags),\n\t\t\t\t\t);\n\n\t\t\t\t\tindent++;\n\t\t\t\t\tif (loggedCC.message) {\n\t\t\t\t\t\tmsg.push(\n\t\t\t\t\t\t\t...messageRecordToLines(loggedCC.message).map(\n\t\t\t\t\t\t\t\t(line) =>\n\t\t\t\t\t\t\t\t\t`${\" \".repeat(indent * 2)}${\n\t\t\t\t\t\t\t\t\t\tisEncapCC ? \"\u2502 \" : \" \"\n\t\t\t\t\t\t\t\t\t}${line}`,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\t// If this is an encap CC, continue\n\t\t\t\t\tif (isEncapsulatingCommandClass(cc)) {\n\t\t\t\t\t\tlogCC(cc.encapsulated, indent);\n\t\t\t\t\t} else if (isMultiEncapsulatingCommandClass(cc)) {\n\t\t\t\t\t\tfor (const encap of cc.encapsulated) {\n\t\t\t\t\t\t\tlogCC(encap, indent);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tlogCC(message.command);\n\t\t\t}\n\n\t\t\tthis.logger.log({\n\t\t\t\tlevel: DRIVER_LOGLEVEL,\n\t\t\t\tsecondaryTags: secondaryTags && secondaryTags.length > 0\n\t\t\t\t\t? tagify(secondaryTags)\n\t\t\t\t\t: undefined,\n\t\t\t\tmessage: msg,\n\t\t\t\t// Since we are programming a controller, responses are always inbound\n\t\t\t\t// (not to confuse with the message type, which may be Request or Response)\n\t\t\t\tdirection: getDirectionPrefix(direction),\n\t\t\t\tcontext: { source: \"driver\", direction },\n\t\t\t});\n\t\t} catch {}\n\t}\n\n\t/** Logs what's currently in the driver's send queue */\n\tpublic sendQueue(...queues: TransactionQueue[]): void {\n\t\tif (!this.isSendQueueLogVisible()) return;\n\n\t\tlet message = \"Send queue:\";\n\t\tlet length = 0;\n\t\tfor (const queue of queues) {\n\t\t\tlength += queue.length;\n\t\t\tif (queue.length > 0) {\n\t\t\t\tfor (const trns of queue.transactions) {\n\t\t\t\t\t// TODO: This formatting should be shared with the other logging methods\n\t\t\t\t\tconst node = trns.message.tryGetNode(this.driver);\n\t\t\t\t\tconst prefix = trns.message.type === MessageType.Request\n\t\t\t\t\t\t? \"[REQ]\"\n\t\t\t\t\t\t: \"[RES]\";\n\t\t\t\t\tconst postfix = node != undefined\n\t\t\t\t\t\t? ` [Node ${node.id}, ${\n\t\t\t\t\t\t\tgetEnumMemberName(\n\t\t\t\t\t\t\t\tNodeStatus,\n\t\t\t\t\t\t\t\tnode.status,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}]`\n\t\t\t\t\t\t: \"\";\n\t\t\t\t\tconst command = containsCC(trns.message)\n\t\t\t\t\t\t? `: ${trns.message.command.constructor.name}`\n\t\t\t\t\t\t: \"\";\n\t\t\t\t\tmessage += `\\n\u00B7 ${prefix} ${\n\t\t\t\t\t\tFunctionType[trns.message.functionType]\n\t\t\t\t\t}${command}${postfix} (P: ${\n\t\t\t\t\t\tgetEnumMemberName(MessagePriority, trns.priority)\n\t\t\t\t\t})`;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tmessage += \" (empty)\";\n\t\t\t}\n\t\t}\n\t\tthis.logger.log({\n\t\t\tlevel: SENDQUEUE_LOGLEVEL,\n\t\t\tmessage,\n\t\t\tsecondaryTags: `(${length} message${length === 1 ? \"\" : \"s\"})`,\n\t\t\tdirection: getDirectionPrefix(\"none\"),\n\t\t\tcontext: { source: \"driver\", direction: \"none\" },\n\t\t});\n\t}\n}\n"],
5
- "mappings": "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",
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;;;;;;AAAA,gBAIO;AACP,kBASO;AAEP,oBAA0C;AAC1C,uBAA2B;AAC3B,oBAAkC;AAIlC,mBAA2B;AAEpB,MAAM,eAAe;AAC5B,MAAM,kBAAkB;AACxB,MAAM,qBAAqB;AAMrB,MAAO,qBAAqB,4BAAiC;EAhCnE,OAgCmE;;;EACrC;EAA7B,YAA6B,QAAgB,SAA0B;AACtE,UAAM,SAAS,YAAY;AADC,SAAA,SAAA;EAE7B;EAEQ,qBAAkB;AACzB,WAAO,KAAK,UAAU,kBAAkB,eAAe;EACxD;EAEQ,wBAAqB;AAC5B,WAAO,KAAK,UAAU,kBAAkB,kBAAkB;EAC3D;;;;;EAMO,MACN,SACA,OAAuD;AAEvD,UAAM,cAAc,SAAS;AAC7B,QAAI,CAAC,KAAK,UAAU,kBAAkB,WAAW;AAAG;AAEpD,SAAK,OAAO,IAAI;MACf,OAAO;MACP;MACA,eAAW,gCAAmB,MAAM;MACpC,SAAS,EAAE,QAAQ,UAAU,WAAW,OAAM;KAC9C;EACF;;;;EAKO,YAAY,aAAwB;AAC1C,QAAI,CAAC,KAAK,mBAAkB;AAAI;AAEhC,UAAM,EAAE,QAAO,IAAK;AAEpB,UAAM,gBAA0B,CAAA;AAGhC,kBAAc,KAAK,MAAM,4BAAgB,YAAY,QAAQ,CAAC,EAAE;AAQhE,SAAK,WAAW,SAAS;MACxB;;;MAGA,WAAW;KACX;EACF;;EAGO,oBACN,SACA,qBACA,MAAkB;AAElB,QAAI,CAAC,KAAK,mBAAkB;AAAI;AAChC,SAAK,WAAW,SAAS;MACxB,QAAQ,qBAAqB,SAAS,UAAS;MAC/C,eAAe,CAAC,IAAI;MACpB,WAAW;KACX;EACF;EAEO,WACN,SACA;;IAEC;IACA;IACA,YAAY;EAAM,IAKf,CAAA,GAAE;AAEN,QAAI,CAAC,KAAK,mBAAkB;AAAI;AAChC,QAAI,UAAU;AAAW,eAAS,QAAQ,UAAS;AACnD,QAAI,UAAU,UAAa,CAAC,KAAK,UAAU,cAAc,MAAM,GAAG;AACjE;IACD;AAEA,UAAM,oBAAgB,6BAAW,OAAO;AACxC,UAAM,WAAW,QAAQ,WAAU;AAEnC,QAAI,MAAgB,KAAC,oBAAO,SAAS,IAAI,CAAC;AAC1C,QAAI,SAAS,SAAS;AACrB,UAAI,KACH,OAAG,kCAAqB,SAAS,OAAO,EAAE,IACzC,CAAC,UAAU,gBAAgB,YAAO,QAAQ,IAAI,CAC9C;IAEH;AAEA,QAAI;AAEH,UAAI,eAAe;AAElB,cAAM,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,WAAW,iBAAY,CAAC;AAEzD,cAAM,QAAQ,wBAAC,IAAkB,SAAiB,MAAK;AACtD,gBAAM,gBAAY,uCAA4B,EAAE,SAC5C,4CAAiC,EAAE;AACvC,gBAAM,WAAW,GAAG,WAAW,KAAK,MAAM;AAC1C,cAAI,KACH,IAAI,OAAO,SAAS,CAAC,IAAI,qBAAO,oBAAO,SAAS,IAAI,CAAC;AAGtD;AACA,cAAI,SAAS,SAAS;AACrB,gBAAI,KACH,OAAG,kCAAqB,SAAS,OAAO,EAAE,IACzC,CAAC,SACA,GAAG,IAAI,OAAO,SAAS,CAAC,CAAC,GACxB,YAAY,YAAO,IACpB,GAAG,IAAI,EAAE,CACV;UAEH;AAEA,kBAAI,uCAA4B,EAAE,GAAG;AACpC,kBAAM,GAAG,cAAc,MAAM;UAC9B,eAAW,4CAAiC,EAAE,GAAG;AAChD,uBAAW,SAAS,GAAG,cAAc;AACpC,oBAAM,OAAO,MAAM;YACpB;UACD;QACD,GA3Bc;AA6Bd,cAAM,QAAQ,OAAO;MACtB;AAEA,WAAK,OAAO,IAAI;QACf,OAAO;QACP,eAAe,iBAAiB,cAAc,SAAS,QACpD,oBAAO,aAAa,IACpB;QACH,SAAS;;;QAGT,eAAW,gCAAmB,SAAS;QACvC,SAAS,EAAE,QAAQ,UAAU,UAAS;OACtC;IACF,QAAQ;IAAC;EACV;;EAGO,aAAa,QAA0B;AAC7C,QAAI,CAAC,KAAK,sBAAqB;AAAI;AAEnC,QAAI,UAAU;AACd,QAAI,SAAS;AACb,eAAW,SAAS,QAAQ;AAC3B,gBAAU,MAAM;AAChB,UAAI,MAAM,SAAS,GAAG;AACrB,mBAAW,QAAQ,MAAM,cAAc;AAEtC,gBAAM,OAAO,KAAK,QAAQ,WAAW,KAAK,MAAM;AAChD,gBAAM,SAAS,KAAK,QAAQ,SAAS,0BAAY,UAC9C,UACA;AACH,gBAAM,UAAU,QAAQ,SACrB,UAAU,KAAK,EAAE,SAClB,iCACC,yBACA,KAAK,MAAM,CAEb,MACE;AACH,gBAAM,cAAU,6BAAW,KAAK,OAAO,IACpC,KAAK,KAAK,QAAQ,QAAQ,YAAY,IAAI,KAC1C;AACH,qBAAW;OAAO,MAAM,IACvB,2BAAa,KAAK,QAAQ,YAAY,CACvC,GAAG,OAAO,GAAG,OAAO,YACnB,iCAAkB,6BAAiB,KAAK,QAAQ,CACjD;QACD;MACD,OAAO;AACN,mBAAW;MACZ;IACD;AACA,SAAK,OAAO,IAAI;MACf,OAAO;MACP;MACA,eAAe,IAAI,MAAM,WAAW,WAAW,IAAI,KAAK,GAAG;MAC3D,eAAW,gCAAmB,MAAM;MACpC,SAAS,EAAE,QAAQ,UAAU,WAAW,OAAM;KAC9C;EACF;;",
6
6
  "names": []
7
7
  }
@@ -3,6 +3,7 @@ var __defProp = Object.defineProperty;
3
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
5
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
6
7
  var __export = (target, all) => {
7
8
  for (var name in all)
8
9
  __defProp(target, name, { get: all[name], enumerable: true });
@@ -28,6 +29,9 @@ var import_shared = require("@zwave-js/shared");
28
29
  const ZNIFFER_LABEL = "ZNIFFR";
29
30
  const ZNIFFER_LOGLEVEL = "info";
30
31
  class ZnifferLogger extends import_core.ZWaveLoggerBase {
32
+ static {
33
+ __name(this, "ZnifferLogger");
34
+ }
31
35
  zniffer;
32
36
  constructor(zniffer, loggers) {
33
37
  super(loggers, ZNIFFER_LABEL);
@@ -87,7 +91,7 @@ class ZnifferLogger extends import_core.ZWaveLoggerBase {
87
91
  try {
88
92
  if (!!payloadCC) {
89
93
  msg = msg.filter((line) => !line.startsWith("\u2502 payload:"));
90
- const logCC = (cc, indent = 0) => {
94
+ const logCC = /* @__PURE__ */ __name((cc, indent = 0) => {
91
95
  const isEncapCC = (0, import_cc.isEncapsulatingCommandClass)(cc) || (0, import_cc.isMultiEncapsulatingCommandClass)(cc);
92
96
  const loggedCC = cc.toLogEntry(this.zniffer);
93
97
  msg.push(" ".repeat(indent * 2) + "\u2514\u2500" + (0, import_core.tagify)(loggedCC.tags));
@@ -102,7 +106,7 @@ class ZnifferLogger extends import_core.ZWaveLoggerBase {
102
106
  logCC(encap, indent);
103
107
  }
104
108
  }
105
- };
109
+ }, "logCC");
106
110
  logCC(payloadCC);
107
111
  }
108
112
  const homeId = mpdu.homeId.toString(16).padStart(8, "0").toLowerCase();
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/lib/log/Zniffer.ts"],
4
4
  "sourcesContent": ["import {\n\ttype CommandClass,\n\tisEncapsulatingCommandClass,\n\tisMultiEncapsulatingCommandClass,\n} from \"@zwave-js/cc\";\nimport {\n\ttype DataDirection,\n\ttype LogContext,\n\ttype MessageOrCCLogEntry,\n\ttype RSSI,\n\ttype ZWaveLogContainer,\n\tZWaveLoggerBase,\n\tgetDirectionPrefix,\n\tmessageRecordToLines,\n\trssiToString,\n\ttagify,\n\tznifferProtocolDataRateToString,\n} from \"@zwave-js/core\";\nimport { type ZnifferDataMessage } from \"@zwave-js/serial\";\nimport { buffer2hex, num2hex } from \"@zwave-js/shared\";\nimport {\n\ttype BeamStop,\n\ttype LongRangeBeamStart,\n\ttype LongRangeMPDU,\n\ttype ZWaveBeamStart,\n\ttype ZWaveMPDU,\n} from \"../zniffer/MPDU.js\";\nimport { type Zniffer } from \"../zniffer/Zniffer.js\";\n\nexport const ZNIFFER_LABEL = \"ZNIFFR\";\nconst ZNIFFER_LOGLEVEL = \"info\";\n\nexport interface ZnifferLogContext extends LogContext<\"zniffer\"> {\n\tdirection?: DataDirection;\n}\n\nexport class ZnifferLogger extends ZWaveLoggerBase<ZnifferLogContext> {\n\tconstructor(private readonly zniffer: Zniffer, loggers: ZWaveLogContainer) {\n\t\tsuper(loggers, ZNIFFER_LABEL);\n\t}\n\n\tprivate isLogVisible(): boolean {\n\t\treturn this.container.isLoglevelVisible(ZNIFFER_LOGLEVEL);\n\t}\n\n\t/**\n\t * Logs a message\n\t * @param msg The message to output\n\t */\n\tpublic print(\n\t\tmessage: string,\n\t\tlevel?: \"debug\" | \"verbose\" | \"warn\" | \"error\" | \"info\",\n\t): void {\n\t\tconst actualLevel = level || ZNIFFER_LOGLEVEL;\n\t\tif (!this.container.isLoglevelVisible(actualLevel)) return;\n\n\t\tthis.logger.log({\n\t\t\tlevel: actualLevel,\n\t\t\tmessage,\n\t\t\tdirection: getDirectionPrefix(\"none\"),\n\t\t\tcontext: { source: \"zniffer\", direction: \"none\" },\n\t\t});\n\t}\n\n\tpublic crcError(\n\t\tframe: ZnifferDataMessage,\n\t\trssi?: RSSI,\n\t): void {\n\t\tif (!this.isLogVisible()) return;\n\n\t\tconst logEntry: MessageOrCCLogEntry = {\n\t\t\ttags: [\"CRC ERROR\"],\n\t\t\tmessage: {\n\t\t\t\tchannel: frame.channel,\n\t\t\t\t\"protocol/data rate\": znifferProtocolDataRateToString(\n\t\t\t\t\tframe.protocolDataRate,\n\t\t\t\t),\n\t\t\t\tRSSI: rssi != undefined\n\t\t\t\t\t? rssiToString(rssi)\n\t\t\t\t\t: frame.rssiRaw.toString(),\n\t\t\t\tpayload: buffer2hex(frame.payload),\n\t\t\t},\n\t\t};\n\n\t\tconst msg: string[] = [tagify(logEntry.tags)];\n\t\tmsg.push(\n\t\t\t...messageRecordToLines(logEntry.message!).map(\n\t\t\t\t(line) => \" \" + line,\n\t\t\t),\n\t\t);\n\n\t\ttry {\n\t\t\t// If possible, include information about the CCs\n\t\t\tthis.logger.log({\n\t\t\t\tlevel: \"warn\",\n\t\t\t\tmessage: msg,\n\t\t\t\tdirection: getDirectionPrefix(\"inbound\"),\n\t\t\t\tcontext: { source: \"zniffer\", direction: \"inbound\" },\n\t\t\t});\n\t\t} catch {}\n\t}\n\n\tpublic mpdu(\n\t\tmpdu: ZWaveMPDU | LongRangeMPDU,\n\t\tpayloadCC?: CommandClass,\n\t): void {\n\t\tif (!this.isLogVisible()) return;\n\n\t\tconst hasPayload = !!payloadCC || mpdu.payload.length > 0;\n\t\tconst logEntry = mpdu.toLogEntry();\n\n\t\tlet msg: string[] = [tagify(logEntry.tags)];\n\t\tif (logEntry.message) {\n\t\t\tmsg.push(\n\t\t\t\t...messageRecordToLines(logEntry.message).map(\n\t\t\t\t\t(line) => (hasPayload ? \"\u2502 \" : \" \") + line,\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\ttry {\n\t\t\t// If possible, include information about the CCs\n\t\t\tif (!!payloadCC) {\n\t\t\t\t// Remove the default payload message and draw a bracket\n\t\t\t\tmsg = msg.filter((line) => !line.startsWith(\"\u2502 payload:\"));\n\n\t\t\t\tconst logCC = (cc: CommandClass, indent: number = 0) => {\n\t\t\t\t\tconst isEncapCC = isEncapsulatingCommandClass(cc)\n\t\t\t\t\t\t|| isMultiEncapsulatingCommandClass(cc);\n\t\t\t\t\tconst loggedCC = cc.toLogEntry(this.zniffer as any);\n\t\t\t\t\tmsg.push(\n\t\t\t\t\t\t\" \".repeat(indent * 2) + \"\u2514\u2500\" + tagify(loggedCC.tags),\n\t\t\t\t\t);\n\n\t\t\t\t\tindent++;\n\t\t\t\t\tif (loggedCC.message) {\n\t\t\t\t\t\tmsg.push(\n\t\t\t\t\t\t\t...messageRecordToLines(loggedCC.message).map(\n\t\t\t\t\t\t\t\t(line) =>\n\t\t\t\t\t\t\t\t\t`${\" \".repeat(indent * 2)}${\n\t\t\t\t\t\t\t\t\t\tisEncapCC ? \"\u2502 \" : \" \"\n\t\t\t\t\t\t\t\t\t}${line}`,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\t// If this is an encap CC, continue\n\t\t\t\t\tif (isEncapsulatingCommandClass(cc)) {\n\t\t\t\t\t\tlogCC(cc.encapsulated, indent);\n\t\t\t\t\t} else if (isMultiEncapsulatingCommandClass(cc)) {\n\t\t\t\t\t\tfor (const encap of cc.encapsulated) {\n\t\t\t\t\t\t\tlogCC(encap, indent);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tlogCC(payloadCC);\n\t\t\t}\n\n\t\t\tconst homeId = mpdu.homeId.toString(16).padStart(8, \"0\")\n\t\t\t\t.toLowerCase();\n\n\t\t\tthis.logger.log({\n\t\t\t\tlevel: ZNIFFER_LOGLEVEL,\n\t\t\t\tsecondaryTags: tagify([homeId]),\n\t\t\t\tmessage: msg,\n\t\t\t\tdirection: getDirectionPrefix(\"inbound\"),\n\t\t\t\tcontext: { source: \"zniffer\", direction: \"inbound\" },\n\t\t\t});\n\t\t} catch {}\n\t}\n\n\tpublic beam(\n\t\tbeam: ZWaveBeamStart | LongRangeBeamStart | BeamStop,\n\t): void {\n\t\tif (!this.isLogVisible()) return;\n\n\t\tconst logEntry = beam.toLogEntry();\n\n\t\tconst msg: string[] = [tagify(logEntry.tags)];\n\t\tif (logEntry.message) {\n\t\t\tmsg.push(\n\t\t\t\t...messageRecordToLines(logEntry.message).map(\n\t\t\t\t\t(line) => (\" \") + line,\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\ttry {\n\t\t\t// If possible, include information about the CCs\n\t\t\tlet secondaryTags: string | undefined;\n\t\t\tif (\"homeIdHash\" in beam && beam.homeIdHash) {\n\t\t\t\tsecondaryTags = tagify([`hash: ${num2hex(beam.homeIdHash)}`]);\n\t\t\t}\n\n\t\t\tthis.logger.log({\n\t\t\t\tlevel: ZNIFFER_LOGLEVEL,\n\t\t\t\tsecondaryTags,\n\t\t\t\tmessage: msg,\n\t\t\t\tdirection: getDirectionPrefix(\"inbound\"),\n\t\t\t\tcontext: { source: \"zniffer\", direction: \"inbound\" },\n\t\t\t});\n\t\t} catch {}\n\t}\n}\n"],
5
- "mappings": "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",
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -3,6 +3,7 @@ var __defProp = Object.defineProperty;
3
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
5
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
6
7
  var __export = (target, all) => {
7
8
  for (var name in all)
8
9
  __defProp(target, name, { get: all[name], enumerable: true });
@@ -24,6 +25,9 @@ module.exports = __toCommonJS(DeviceClass_exports);
24
25
  var import_safe = require("@zwave-js/core/safe");
25
26
  var import_safe2 = require("@zwave-js/shared/safe");
26
27
  class DeviceClass {
28
+ static {
29
+ __name(this, "DeviceClass");
30
+ }
27
31
  constructor(basic, generic, specific) {
28
32
  this.basic = basic;
29
33
  this.generic = (0, import_safe.getGenericDeviceClass)(generic);
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/lib/node/DeviceClass.ts"],
4
4
  "sourcesContent": ["import {\n\tBasicDeviceClass,\n\ttype GenericDeviceClass,\n\ttype SpecificDeviceClass,\n\tgetGenericDeviceClass,\n\tgetSpecificDeviceClass,\n} from \"@zwave-js/core/safe\";\nimport { type JSONObject, getEnumMemberName } from \"@zwave-js/shared/safe\";\n\nexport class DeviceClass {\n\tpublic constructor(\n\t\tbasic: BasicDeviceClass,\n\t\tgeneric: number,\n\t\tspecific: number,\n\t) {\n\t\tthis.basic = basic;\n\t\tthis.generic = getGenericDeviceClass(generic);\n\t\tthis.specific = getSpecificDeviceClass(\n\t\t\tgeneric,\n\t\t\tspecific,\n\t\t);\n\t}\n\n\tpublic readonly basic: BasicDeviceClass;\n\tpublic readonly generic: GenericDeviceClass;\n\tpublic readonly specific: SpecificDeviceClass;\n\n\tpublic toJSON(): JSONObject {\n\t\treturn {\n\t\t\tbasic: getEnumMemberName(BasicDeviceClass, this.basic),\n\t\t\tgeneric: this.generic.label,\n\t\t\tspecific: this.specific.label,\n\t\t};\n\t}\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;;;;;AAAA,kBAMO;AACP,IAAAA,eAAmD;AAE7C,MAAO,YAAW;EACvB,YACC,OACA,SACA,UAAgB;AAEhB,SAAK,QAAQ;AACb,SAAK,cAAU,mCAAsB,OAAO;AAC5C,SAAK,eAAW,oCACf,SACA,QAAQ;EAEV;EAEgB;EACA;EACA;EAET,SAAM;AACZ,WAAO;MACN,WAAO,gCAAkB,8BAAkB,KAAK,KAAK;MACrD,SAAS,KAAK,QAAQ;MACtB,UAAU,KAAK,SAAS;;EAE1B;;",
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;;;;;AAAA,kBAMO;AACP,IAAAA,eAAmD;AAE7C,MAAO,YAAW;EATxB,OASwB;;;EACvB,YACC,OACA,SACA,UAAgB;AAEhB,SAAK,QAAQ;AACb,SAAK,cAAU,mCAAsB,OAAO;AAC5C,SAAK,eAAW,oCACf,SACA,QAAQ;EAEV;EAEgB;EACA;EACA;EAET,SAAM;AACZ,WAAO;MACN,WAAO,gCAAkB,8BAAkB,KAAK,KAAK;MACrD,SAAS,KAAK,QAAQ;MACtB,UAAU,KAAK,SAAS;;EAE1B;;",
6
6
  "names": ["import_safe"]
7
7
  }