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/NetworkCache.ts"],
4
4
  "sourcesContent": ["import type { JsonlDB } from \"@alcalzone/jsonl-db\";\nimport { type AssociationAddress } from \"@zwave-js/cc\";\nimport {\n\ttype CommandClasses,\n\ttype FileSystem,\n\tNodeType,\n\tProtocols,\n\tSecurityClass,\n\tZWaveError,\n\tZWaveErrorCodes,\n\tdskFromString,\n\tdskToString,\n\tsecurityClassOrder,\n} from \"@zwave-js/core\";\nimport { Bytes, getEnumMemberName, num2hex, pickDeep } from \"@zwave-js/shared\";\nimport { isArray, isObject } from \"alcalzone-shared/typeguards\";\nimport path from \"node:path\";\nimport {\n\tProvisioningEntryStatus,\n\ttype SmartStartProvisioningEntry,\n} from \"../controller/Inclusion.js\";\nimport { DeviceClass } from \"../node/DeviceClass.js\";\nimport { InterviewStage } from \"../node/_Types.js\";\n\n/**\n * Defines the keys that are used to store certain properties in the network cache.\n */\nexport const cacheKeys = {\n\tcontroller: {\n\t\tprovisioningList: \"controller.provisioningList\",\n\t\tassociations: (groupId: number) => `controller.associations.${groupId}`,\n\t\tsecurityKeys: (secClass: SecurityClass) =>\n\t\t\t`controller.securityKeys.${\n\t\t\t\tgetEnumMemberName(\n\t\t\t\t\tSecurityClass,\n\t\t\t\t\tsecClass,\n\t\t\t\t)\n\t\t\t}`,\n\t\tsecurityKeysLongRange: (secClass: SecurityClass) =>\n\t\t\t`controller.securityKeyLongRange.${\n\t\t\t\tgetEnumMemberName(\n\t\t\t\t\tSecurityClass,\n\t\t\t\t\tsecClass,\n\t\t\t\t)\n\t\t\t}`,\n\t\tprivateKey: \"controller.privateKey\",\n\t},\n\t// TODO: somehow these functions should be combined with the pattern matching below\n\tnode: (nodeId: number) => {\n\t\tconst nodeBaseKey = `node.${nodeId}.`;\n\t\treturn {\n\t\t\t_baseKey: nodeBaseKey,\n\t\t\t_securityClassBaseKey: `${nodeBaseKey}securityClasses`,\n\t\t\t_priorityReturnRouteBaseKey: `${nodeBaseKey}priorityReturnRoute`,\n\t\t\tinterviewStage: `${nodeBaseKey}interviewStage`,\n\t\t\tdeviceClass: `${nodeBaseKey}deviceClass`,\n\t\t\tisListening: `${nodeBaseKey}isListening`,\n\t\t\tisFrequentListening: `${nodeBaseKey}isFrequentListening`,\n\t\t\tisRouting: `${nodeBaseKey}isRouting`,\n\t\t\tsupportedDataRates: `${nodeBaseKey}supportedDataRates`,\n\t\t\tprotocolVersion: `${nodeBaseKey}protocolVersion`,\n\t\t\tnodeType: `${nodeBaseKey}nodeType`,\n\t\t\tsupportsSecurity: `${nodeBaseKey}supportsSecurity`,\n\t\t\tsupportsBeaming: `${nodeBaseKey}supportsBeaming`,\n\t\t\tsecurityClass: (secClass: SecurityClass) =>\n\t\t\t\t`${nodeBaseKey}securityClasses.${\n\t\t\t\t\tgetEnumMemberName(\n\t\t\t\t\t\tSecurityClass,\n\t\t\t\t\t\tsecClass,\n\t\t\t\t\t)\n\t\t\t\t}`,\n\t\t\tdsk: `${nodeBaseKey}dsk`,\n\t\t\tendpoint: (index: number) => {\n\t\t\t\tconst endpointBaseKey = `${nodeBaseKey}endpoint.${index}.`;\n\t\t\t\tconst ccBaseKey = `${endpointBaseKey}commandClass.`;\n\t\t\t\treturn {\n\t\t\t\t\t_baseKey: endpointBaseKey,\n\t\t\t\t\t_ccBaseKey: ccBaseKey,\n\t\t\t\t\tcommandClass: (ccId: CommandClasses) => {\n\t\t\t\t\t\tconst ccAsHex = num2hex(ccId);\n\t\t\t\t\t\treturn `${ccBaseKey}${ccAsHex}`;\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t},\n\t\t\thasSUCReturnRoute: `${nodeBaseKey}hasSUCReturnRoute`,\n\t\t\tpriorityReturnRoute: (destinationNodeId: number) =>\n\t\t\t\t`${nodeBaseKey}priorityReturnRoute.${destinationNodeId}`,\n\t\t\tprioritySUCReturnRoute: `${nodeBaseKey}priorityReturnRoute.SUC`,\n\t\t\tcustomReturnRoutes: (destinationNodeId: number) =>\n\t\t\t\t`${nodeBaseKey}customReturnRoutes.${destinationNodeId}`,\n\t\t\tcustomSUCReturnRoutes: `${nodeBaseKey}customReturnRoutes.SUC`,\n\t\t\tdefaultTransitionDuration:\n\t\t\t\t`${nodeBaseKey}defaultTransitionDuration`,\n\t\t\tdefaultVolume: `${nodeBaseKey}defaultVolume`,\n\t\t\tlastSeen: `${nodeBaseKey}lastSeen`,\n\t\t\tdeviceConfigHash: `${nodeBaseKey}deviceConfigHash`,\n\t\t};\n\t},\n} as const;\n\nexport const cacheKeyUtils = {\n\tnodeIdFromKey: (key: string): number | undefined => {\n\t\tconst match = /^node\\.(?<nodeId>\\d+)\\./.exec(key);\n\t\tif (match) {\n\t\t\treturn parseInt(match.groups!.nodeId, 10);\n\t\t}\n\t},\n\tnodePropertyFromKey: (key: string): string | undefined => {\n\t\tconst match = /^node\\.\\d+\\.(?<property>[^\\.]+)$/.exec(key);\n\t\treturn match?.groups?.property;\n\t},\n\tisEndpointKey: (key: string): boolean => {\n\t\treturn /endpoints\\.(?<index>\\d+)$/.test(key);\n\t},\n\tendpointIndexFromKey: (key: string): number | undefined => {\n\t\tconst match = /endpoints\\.(?<index>\\d+)$/.exec(key);\n\t\tif (match) {\n\t\t\treturn parseInt(match.groups!.index, 10);\n\t\t}\n\t},\n\tdestinationFromPriorityReturnRouteKey: (\n\t\tkey: string,\n\t): number | undefined => {\n\t\tconst match = /\\.priorityReturnRoute\\.(?<nodeId>\\d+)$/.exec(key);\n\t\tif (match) {\n\t\t\treturn parseInt(match.groups!.nodeId, 10);\n\t\t}\n\t},\n} as const;\n\nfunction tryParseInterviewStage(value: unknown): InterviewStage | undefined {\n\tif (\n\t\t(typeof value === \"string\" || typeof value === \"number\")\n\t\t&& value in InterviewStage\n\t) {\n\t\treturn typeof value === \"number\"\n\t\t\t? value\n\t\t\t: (InterviewStage as any)[value];\n\t}\n}\n\nfunction tryParseDeviceClass(value: unknown): DeviceClass | undefined {\n\tif (isObject(value)) {\n\t\tconst { basic, generic, specific } = value;\n\t\tif (\n\t\t\ttypeof basic === \"number\"\n\t\t\t&& typeof generic === \"number\"\n\t\t\t&& typeof specific === \"number\"\n\t\t) {\n\t\t\treturn new DeviceClass(\n\t\t\t\tbasic,\n\t\t\t\tgeneric,\n\t\t\t\tspecific,\n\t\t\t);\n\t\t}\n\t}\n}\n\nfunction tryParseSecurityClasses(\n\tvalue: unknown,\n): Map<SecurityClass, boolean> | undefined {\n\tif (isObject(value)) {\n\t\tconst ret = new Map<SecurityClass, boolean>();\n\t\tfor (const [key, val] of Object.entries(value)) {\n\t\t\tif (\n\t\t\t\tkey in SecurityClass\n\t\t\t\t&& typeof (SecurityClass as any)[key] === \"number\"\n\t\t\t\t&& typeof val === \"boolean\"\n\t\t\t) {\n\t\t\t\tret.set((SecurityClass as any)[key] as SecurityClass, val);\n\t\t\t}\n\t\t}\n\t\treturn ret;\n\t}\n}\n\nfunction tryParseNodeType(value: unknown): NodeType | undefined {\n\tif (typeof value === \"string\" && value in NodeType) {\n\t\treturn (NodeType as any)[value];\n\t}\n}\n\nfunction tryParseProvisioningList(\n\tvalue: unknown,\n): SmartStartProvisioningEntry[] | undefined {\n\tconst ret: SmartStartProvisioningEntry[] = [];\n\tif (!isArray(value)) return;\n\tfor (const entry of value) {\n\t\tif (\n\t\t\tisObject(entry)\n\t\t\t&& typeof entry.dsk === \"string\"\n\t\t\t&& isArray(entry.securityClasses)\n\t\t\t// securityClasses are stored as strings, not the enum values\n\t\t\t&& entry.securityClasses.every((s) => isSerializedSecurityClass(s))\n\t\t\t&& (entry.requestedSecurityClasses == undefined\n\t\t\t\t|| (isArray(entry.requestedSecurityClasses)\n\t\t\t\t\t&& entry.requestedSecurityClasses.every((s) =>\n\t\t\t\t\t\tisSerializedSecurityClass(s)\n\t\t\t\t\t)))\n\t\t\t// protocol and supportedProtocols are (supposed to be) stored as strings, not the enum values\n\t\t\t&& (entry.protocol == undefined\n\t\t\t\t|| isSerializedProtocol(entry.protocol))\n\t\t\t&& (entry.supportedProtocols == undefined || (\n\t\t\t\tisArray(entry.supportedProtocols)\n\t\t\t\t&& entry.supportedProtocols.every((s) =>\n\t\t\t\t\tisSerializedProtocol(s)\n\t\t\t\t)\n\t\t\t))\n\t\t\t&& (entry.status == undefined\n\t\t\t\t|| isSerializedProvisioningEntryStatus(entry.status))\n\t\t) {\n\t\t\t// This is at least a PlannedProvisioningEntry, maybe it is an IncludedProvisioningEntry\n\t\t\tif (\"nodeId\" in entry && typeof entry.nodeId !== \"number\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst parsed = {\n\t\t\t\t...entry,\n\t\t\t} as unknown as SmartStartProvisioningEntry;\n\t\t\tparsed.securityClasses = entry.securityClasses\n\t\t\t\t.map((s) => tryParseSerializedSecurityClass(s))\n\t\t\t\t.filter((s) => s !== undefined);\n\t\t\tif (entry.requestedSecurityClasses) {\n\t\t\t\tparsed.requestedSecurityClasses = (\n\t\t\t\t\tentry.requestedSecurityClasses as any[]\n\t\t\t\t)\n\t\t\t\t\t.map((s) => tryParseSerializedSecurityClass(s))\n\t\t\t\t\t.filter((s) => s !== undefined);\n\t\t\t}\n\t\t\tif (entry.status != undefined) {\n\t\t\t\tparsed.status = ProvisioningEntryStatus[\n\t\t\t\t\tentry.status as any\n\t\t\t\t] as any as ProvisioningEntryStatus;\n\t\t\t}\n\t\t\tif (entry.protocol != undefined) {\n\t\t\t\tparsed.protocol = tryParseSerializedProtocol(entry.protocol);\n\t\t\t}\n\t\t\tif (entry.supportedProtocols) {\n\t\t\t\tparsed.supportedProtocols = (\n\t\t\t\t\tentry.supportedProtocols as any[]\n\t\t\t\t)\n\t\t\t\t\t.map((s) => tryParseSerializedProtocol(s))\n\t\t\t\t\t.filter((s) => s !== undefined);\n\t\t\t}\n\t\t\tret.push(parsed);\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t}\n\treturn ret;\n}\n\nfunction isSerializedSecurityClass(value: unknown): boolean {\n\t// There was an error in previous iterations of the migration code, so we\n\t// now have to deal with the following variants:\n\t// 1. plain numbers representing a valid Security Class: 1\n\t// 2. strings representing a valid Security Class: \"S2_Unauthenticated\"\n\t// 3. strings represending a mis-formatted Security Class: \"unknown (0xS2_Unauthenticated)\"\n\tif (typeof value === \"number\" && value in SecurityClass) return true;\n\tif (typeof value === \"string\") {\n\t\tif (value.startsWith(\"unknown (0x\") && value.endsWith(\")\")) {\n\t\t\tvalue = value.slice(11, -1);\n\t\t}\n\t\tif (\n\t\t\t(value as any) in SecurityClass\n\t\t\t&& typeof SecurityClass[value as any] === \"number\"\n\t\t) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction tryParseSerializedSecurityClass(\n\tvalue: unknown,\n): SecurityClass | undefined {\n\t// There was an error in previous iterations of the migration code, so we\n\t// now have to deal with the following variants:\n\t// 1. plain numbers representing a valid Security Class: 1\n\t// 2. strings representing a valid Security Class: \"S2_Unauthenticated\"\n\t// 3. strings represending a mis-formatted Security Class: \"unknown (0xS2_Unauthenticated)\"\n\n\tif (typeof value === \"number\" && value in SecurityClass) return value;\n\tif (typeof value === \"string\") {\n\t\tif (value.startsWith(\"unknown (0x\") && value.endsWith(\")\")) {\n\t\t\tvalue = value.slice(11, -1);\n\t\t}\n\t\tif (\n\t\t\t(value as any) in SecurityClass\n\t\t\t&& typeof SecurityClass[value as any] === \"number\"\n\t\t) {\n\t\t\treturn (SecurityClass as any)[value as any];\n\t\t}\n\t}\n}\n\nfunction isSerializedProvisioningEntryStatus(\n\ts: unknown,\n): s is keyof typeof ProvisioningEntryStatus {\n\treturn (\n\t\ttypeof s === \"string\"\n\t\t&& s in ProvisioningEntryStatus\n\t\t&& typeof ProvisioningEntryStatus[s as any] === \"number\"\n\t);\n}\n\nfunction isSerializedProtocol(\n\ts: unknown,\n): boolean {\n\t// The list of supported protocols has been around since before we started\n\t// saving them as their stringified variant, so we\n\t// now have to deal with the following variants:\n\t// 1. plain numbers representing a valid Protocol: 0\n\t// 2. strings representing a valid Protocols: \"ZWave\"\n\tif (typeof s === \"number\" && s in Protocols) return true;\n\treturn (\n\t\ttypeof s === \"string\"\n\t\t&& s in Protocols\n\t\t&& typeof Protocols[s as any] === \"number\"\n\t);\n}\n\nfunction tryParseSerializedProtocol(\n\tvalue: unknown,\n): Protocols | undefined {\n\t// The list of supported protocols has been around since before we started\n\t// saving them as their stringified variant, so we\n\t// now have to deal with the following variants:\n\t// 1. plain numbers representing a valid Protocol: 0\n\t// 2. strings representing a valid Protocols: \"ZWave\"\n\n\tif (typeof value === \"number\" && value in Protocols) return value;\n\tif (typeof value === \"string\") {\n\t\tif (\n\t\t\t(value as any) in Protocols\n\t\t\t&& typeof Protocols[value as any] === \"number\"\n\t\t) {\n\t\t\treturn (Protocols as any)[value as any];\n\t\t}\n\t}\n}\n\nfunction tryParseDate(value: unknown): Date | undefined {\n\t// Dates are stored as timestamps\n\tif (typeof value === \"number\") {\n\t\tconst ret = new Date(value);\n\t\tif (!isNaN(ret.getTime())) return ret;\n\t}\n}\n\nfunction tryParseAssociationAddress(\n\tvalue: unknown,\n): AssociationAddress | undefined {\n\tif (isObject(value)) {\n\t\tconst { nodeId, endpoint } = value;\n\t\tif (typeof nodeId !== \"number\") return;\n\t\tif (endpoint !== undefined && typeof endpoint !== \"number\") return;\n\n\t\treturn { nodeId, endpoint };\n\t}\n}\n\nfunction tryParseBuffer(\n\tvalue: unknown,\n): Uint8Array | undefined {\n\tif (typeof value === \"string\") {\n\t\ttry {\n\t\t\treturn Bytes.from(value, \"hex\");\n\t\t} catch {\n\t\t\t// ignore\n\t\t}\n\t}\n}\n\nexport function deserializeNetworkCacheValue(\n\tkey: string,\n\tvalue: unknown,\n): unknown {\n\tfunction ensureType<T extends \"boolean\" | \"number\" | \"string\">(\n\t\tvalue: any,\n\t\ttype: T,\n\t): T | boolean {\n\t\tif (typeof value === type) return value as T;\n\t\tthrow new ZWaveError(\n\t\t\t`Incorrect type ${typeof value} for property \"${key}\"`,\n\t\t\tZWaveErrorCodes.Driver_InvalidCache,\n\t\t);\n\t}\n\n\tfunction fail(): never {\n\t\tthrow new ZWaveError(\n\t\t\t`Failed to deserialize property \"${key}\"`,\n\t\t\tZWaveErrorCodes.Driver_InvalidCache,\n\t\t);\n\t}\n\n\tswitch (cacheKeyUtils.nodePropertyFromKey(key)) {\n\t\tcase \"interviewStage\": {\n\t\t\tvalue = tryParseInterviewStage(value);\n\t\t\tif (value) return value;\n\t\t\tfail();\n\t\t}\n\t\tcase \"deviceClass\": {\n\t\t\tvalue = tryParseDeviceClass(value);\n\t\t\tif (value) return value;\n\t\t\tfail();\n\t\t}\n\t\tcase \"isListening\":\n\t\tcase \"isRouting\":\n\t\tcase \"hasSUCReturnRoute\":\n\t\t\treturn ensureType(value, \"boolean\");\n\n\t\tcase \"isFrequentListening\": {\n\t\t\tswitch (value) {\n\t\t\t\tcase \"1000ms\":\n\t\t\t\tcase true:\n\t\t\t\t\treturn \"1000ms\";\n\t\t\t\tcase \"250ms\":\n\t\t\t\t\treturn \"250ms\";\n\t\t\t\tcase false:\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t\tfail();\n\t\t}\n\n\t\tcase \"dsk\": {\n\t\t\tif (typeof value === \"string\") {\n\t\t\t\treturn dskFromString(value);\n\t\t\t}\n\t\t\tfail();\n\t\t}\n\n\t\tcase \"supportsSecurity\":\n\t\t\treturn ensureType(value, \"boolean\");\n\t\tcase \"supportsBeaming\":\n\t\t\ttry {\n\t\t\t\treturn ensureType(value, \"boolean\");\n\t\t\t} catch {\n\t\t\t\treturn ensureType(value, \"string\");\n\t\t\t}\n\t\tcase \"protocolVersion\":\n\t\t\treturn ensureType(value, \"number\");\n\n\t\tcase \"nodeType\": {\n\t\t\tvalue = tryParseNodeType(value);\n\t\t\tif (value) return value;\n\t\t\tfail();\n\t\t}\n\n\t\tcase \"supportedDataRates\": {\n\t\t\tif (\n\t\t\t\tisArray(value)\n\t\t\t\t&& value.every((r: unknown) => typeof r === \"number\")\n\t\t\t) {\n\t\t\t\treturn value;\n\t\t\t}\n\t\t\tfail();\n\t\t}\n\n\t\tcase \"lastSeen\": {\n\t\t\tvalue = tryParseDate(value);\n\t\t\tif (value) return value;\n\t\t\tfail();\n\t\t}\n\n\t\tcase \"deviceConfigHash\": {\n\t\t\tvalue = tryParseBuffer(value);\n\t\t\tif (value) return value;\n\t\t\tfail();\n\t\t}\n\t}\n\n\t// Other properties\n\tif (key.startsWith(\"controller.associations.\")) {\n\t\tvalue = tryParseAssociationAddress(value);\n\t\tif (value) return value;\n\t\tfail();\n\t} else if (key.startsWith(\"controller.securityKeys.\")) {\n\t\tvalue = tryParseBuffer(value);\n\t\tif (value) return value;\n\t\tfail();\n\t}\n\n\tswitch (key) {\n\t\tcase cacheKeys.controller.provisioningList: {\n\t\t\tvalue = tryParseProvisioningList(value);\n\t\t\tif (value) return value;\n\t\t\tfail();\n\t\t}\n\t\tcase cacheKeys.controller.privateKey: {\n\t\t\tvalue = tryParseBuffer(value);\n\t\t\tif (value) return value;\n\t\t\tfail();\n\t\t}\n\t}\n\n\treturn value;\n}\n\nexport function serializeNetworkCacheValue(\n\tkey: string,\n\tvalue: unknown,\n): unknown {\n\t// Node-specific properties\n\tswitch (cacheKeyUtils.nodePropertyFromKey(key)) {\n\t\tcase \"interviewStage\": {\n\t\t\treturn InterviewStage[value as any];\n\t\t}\n\t\tcase \"deviceClass\": {\n\t\t\tconst deviceClass = value as DeviceClass;\n\t\t\treturn {\n\t\t\t\tbasic: deviceClass.basic,\n\t\t\t\tgeneric: deviceClass.generic.key,\n\t\t\t\tspecific: deviceClass.specific.key,\n\t\t\t};\n\t\t}\n\t\tcase \"nodeType\": {\n\t\t\treturn NodeType[value as any];\n\t\t}\n\t\tcase \"securityClasses\": {\n\t\t\tconst ret: Record<string, boolean> = {};\n\t\t\t// Save security classes where they are known\n\t\t\tfor (const secClass of securityClassOrder) {\n\t\t\t\tif (secClass in (value as any)) {\n\t\t\t\t\tret[SecurityClass[secClass]] = (value as any)[secClass];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t\tcase \"dsk\": {\n\t\t\treturn dskToString(value as Uint8Array);\n\t\t}\n\t\tcase \"lastSeen\": {\n\t\t\t// Dates are stored as timestamps\n\t\t\treturn (value as Date).getTime();\n\t\t}\n\n\t\tcase \"deviceConfigHash\": {\n\t\t\treturn Bytes.view(value as Uint8Array).toString(\"hex\");\n\t\t}\n\t}\n\n\t// Other dynamic properties\n\tif (key.startsWith(\"controller.securityKeys.\")) {\n\t\treturn Bytes.view(value as Uint8Array).toString(\"hex\");\n\t}\n\n\t// Other fixed properties\n\tswitch (key) {\n\t\tcase cacheKeys.controller.provisioningList: {\n\t\t\tconst ret: any = [];\n\t\t\tfor (const entry of value as SmartStartProvisioningEntry[]) {\n\t\t\t\tconst serialized: Record<string, any> = { ...entry };\n\t\t\t\tserialized.securityClasses = entry.securityClasses.map((c) =>\n\t\t\t\t\tgetEnumMemberName(SecurityClass, c)\n\t\t\t\t);\n\t\t\t\tif (entry.requestedSecurityClasses) {\n\t\t\t\t\tserialized.requestedSecurityClasses = entry\n\t\t\t\t\t\t.requestedSecurityClasses.map((c) =>\n\t\t\t\t\t\t\tgetEnumMemberName(SecurityClass, c)\n\t\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (entry.status != undefined) {\n\t\t\t\t\tserialized.status = getEnumMemberName(\n\t\t\t\t\t\tProvisioningEntryStatus,\n\t\t\t\t\t\tentry.status,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (entry.protocol != undefined) {\n\t\t\t\t\tserialized.protocol = getEnumMemberName(\n\t\t\t\t\t\tProtocols,\n\t\t\t\t\t\tentry.protocol,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (entry.supportedProtocols != undefined) {\n\t\t\t\t\tserialized.supportedProtocols = entry.supportedProtocols\n\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t(p) => getEnumMemberName(Protocols, p),\n\t\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tret.push(serialized);\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t\tcase cacheKeys.controller.privateKey: {\n\t\t\treturn Bytes.view(value as Uint8Array).toString(\"hex\");\n\t\t}\n\t}\n\n\treturn value;\n}\n\n/** Defines the JSON paths that were used to store certain properties in the legacy network cache */\nconst legacyPaths = {\n\t// These seem to duplicate the ones in cacheKeys, but this allows us to change\n\t// something in the future without breaking migration\n\tcontroller: {\n\t\tprovisioningList: \"controller.provisioningList\",\n\t},\n\tnode: {\n\t\t// These are relative to the node object\n\t\tinterviewStage: `interviewStage`,\n\t\tdeviceClass: `deviceClass`,\n\t\tisListening: `isListening`,\n\t\tisFrequentListening: `isFrequentListening`,\n\t\tisRouting: `isRouting`,\n\t\tsupportedDataRates: `supportedDataRates`,\n\t\tprotocolVersion: `protocolVersion`,\n\t\tnodeType: `nodeType`,\n\t\tsupportsSecurity: `supportsSecurity`,\n\t\tsupportsBeaming: `supportsBeaming`,\n\t\tsecurityClasses: `securityClasses`,\n\t\tdsk: `dsk`,\n\t},\n\tcommandClass: {\n\t\t// These are relative to the commandClasses object\n\t\tname: `name`,\n\t\tendpoint: (index: number) => `endpoints.${index}`,\n\t},\n} as const;\n\nexport async function migrateLegacyNetworkCache(\n\thomeId: number,\n\tnetworkCache: JsonlDB,\n\tvalueDB: JsonlDB,\n\tstorageDriver: FileSystem,\n\tcacheDir: string,\n): Promise<void> {\n\tconst cacheFile = path.join(cacheDir, `${homeId.toString(16)}.json`);\n\tif (!(await storageDriver.pathExists(cacheFile))) return;\n\tconst legacy = JSON.parse(await storageDriver.readFile(cacheFile, \"utf8\"));\n\n\tconst jsonl = networkCache;\n\tfunction tryMigrate(\n\t\ttargetKey: string,\n\t\tsource: Record<string, any>,\n\t\tsourcePath: string,\n\t\tconverter?: (value: any) => any,\n\t): void {\n\t\tlet val = pickDeep(source, sourcePath);\n\t\tif (val != undefined && converter) val = converter(val);\n\t\tif (val != undefined) jsonl.set(targetKey, val);\n\t}\n\n\t// Translate all possible entries\n\n\t// Controller provisioning list\n\ttryMigrate(\n\t\tcacheKeys.controller.provisioningList,\n\t\tlegacy,\n\t\tlegacyPaths.controller.provisioningList,\n\t\ttryParseProvisioningList,\n\t);\n\n\t// All nodes, ...\n\tif (isObject(legacy.nodes)) {\n\t\tfor (const node of Object.values<any>(legacy.nodes)) {\n\t\t\tif (!isObject(node) || typeof node.id !== \"number\") continue;\n\t\t\tconst nodeCacheKeys = cacheKeys.node(node.id);\n\n\t\t\t// ... their properties\n\t\t\ttryMigrate(\n\t\t\t\tnodeCacheKeys.interviewStage,\n\t\t\t\tnode,\n\t\t\t\tlegacyPaths.node.interviewStage,\n\t\t\t\ttryParseInterviewStage,\n\t\t\t);\n\t\t\ttryMigrate(\n\t\t\t\tnodeCacheKeys.deviceClass,\n\t\t\t\tnode,\n\t\t\t\tlegacyPaths.node.deviceClass,\n\t\t\t\t(v) => tryParseDeviceClass(v),\n\t\t\t);\n\t\t\ttryMigrate(\n\t\t\t\tnodeCacheKeys.isListening,\n\t\t\t\tnode,\n\t\t\t\tlegacyPaths.node.isListening,\n\t\t\t);\n\t\t\ttryMigrate(\n\t\t\t\tnodeCacheKeys.isFrequentListening,\n\t\t\t\tnode,\n\t\t\t\tlegacyPaths.node.isFrequentListening,\n\t\t\t);\n\t\t\ttryMigrate(\n\t\t\t\tnodeCacheKeys.isRouting,\n\t\t\t\tnode,\n\t\t\t\tlegacyPaths.node.isRouting,\n\t\t\t);\n\t\t\ttryMigrate(\n\t\t\t\tnodeCacheKeys.supportedDataRates,\n\t\t\t\tnode,\n\t\t\t\tlegacyPaths.node.supportedDataRates,\n\t\t\t);\n\t\t\ttryMigrate(\n\t\t\t\tnodeCacheKeys.protocolVersion,\n\t\t\t\tnode,\n\t\t\t\tlegacyPaths.node.protocolVersion,\n\t\t\t);\n\t\t\ttryMigrate(\n\t\t\t\tnodeCacheKeys.nodeType,\n\t\t\t\tnode,\n\t\t\t\tlegacyPaths.node.nodeType,\n\t\t\t\ttryParseNodeType,\n\t\t\t);\n\t\t\ttryMigrate(\n\t\t\t\tnodeCacheKeys.supportsSecurity,\n\t\t\t\tnode,\n\t\t\t\tlegacyPaths.node.supportsSecurity,\n\t\t\t);\n\t\t\ttryMigrate(\n\t\t\t\tnodeCacheKeys.supportsBeaming,\n\t\t\t\tnode,\n\t\t\t\tlegacyPaths.node.supportsBeaming,\n\t\t\t);\n\t\t\t// Convert security classes to single entries\n\t\t\tconst securityClasses = tryParseSecurityClasses(\n\t\t\t\tpickDeep(node, legacyPaths.node.securityClasses),\n\t\t\t);\n\t\t\tif (securityClasses) {\n\t\t\t\tfor (const [secClass, val] of securityClasses) {\n\t\t\t\t\tjsonl.set(nodeCacheKeys.securityClass(secClass), val);\n\t\t\t\t}\n\t\t\t}\n\t\t\ttryMigrate(\n\t\t\t\tnodeCacheKeys.dsk,\n\t\t\t\tnode,\n\t\t\t\tlegacyPaths.node.dsk,\n\t\t\t\tdskFromString,\n\t\t\t);\n\n\t\t\t// ... and command classes\n\t\t\t// The nesting was inverted from the legacy cache: node -> EP -> CCs\n\t\t\t// as opposed to node -> CC -> EPs\n\t\t\tif (isObject(node.commandClasses)) {\n\t\t\t\tfor (\n\t\t\t\t\tconst [ccIdHex, cc] of Object.entries<any>(\n\t\t\t\t\t\tnode.commandClasses,\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\tconst ccId = parseInt(ccIdHex, 16);\n\t\t\t\t\tif (isObject(cc.endpoints)) {\n\t\t\t\t\t\tfor (const endpointId of Object.keys(cc.endpoints)) {\n\t\t\t\t\t\t\tconst endpointIndex = parseInt(endpointId, 10);\n\n\t\t\t\t\t\t\tconst cacheKey = nodeCacheKeys\n\t\t\t\t\t\t\t\t.endpoint(endpointIndex)\n\t\t\t\t\t\t\t\t.commandClass(ccId);\n\n\t\t\t\t\t\t\ttryMigrate(\n\t\t\t\t\t\t\t\tcacheKey,\n\t\t\t\t\t\t\t\tcc,\n\t\t\t\t\t\t\t\tlegacyPaths.commandClass.endpoint(\n\t\t\t\t\t\t\t\t\tendpointIndex,\n\t\t\t\t\t\t\t\t),\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}\n\t\t\t}\n\n\t\t\t// In addition, try to move the hacky value ID for hasSUCReturnRoute from the value DB to the network cache\n\t\t\tconst dbKey = JSON.stringify({\n\t\t\t\tnodeId: node.id,\n\t\t\t\tcommandClass: -1,\n\t\t\t\tendpoint: 0,\n\t\t\t\tproperty: \"hasSUCReturnRoute\",\n\t\t\t});\n\t\t\tif (valueDB.has(dbKey)) {\n\t\t\t\tconst hasSUCReturnRoute = valueDB.get(dbKey);\n\t\t\t\tvalueDB.delete(dbKey);\n\t\t\t\tjsonl.set(nodeCacheKeys.hasSUCReturnRoute, hasSUCReturnRoute);\n\t\t\t}\n\t\t}\n\t}\n}\n"],
5
- "mappings": "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",
5
+ "mappings": "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",
6
6
  "names": ["value", "path"]
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(Queue_exports);
24
25
  var import_deferred_promise = require("alcalzone-shared/deferred-promise");
25
26
  var import_sorted_list = require("alcalzone-shared/sorted-list");
26
27
  class TransactionQueue {
28
+ static {
29
+ __name(this, "TransactionQueue");
30
+ }
27
31
  constructor(options) {
28
32
  this.name = options?.name ?? "unnamed";
29
33
  this.mayStartNextTransaction = options?.mayStartNextTransaction ?? (() => true);
@@ -81,7 +85,7 @@ class TransactionQueue {
81
85
  // Enable iterating the queue using for-await-of
82
86
  [Symbol.asyncIterator]() {
83
87
  return {
84
- next: async () => {
88
+ next: /* @__PURE__ */ __name(async () => {
85
89
  let value;
86
90
  if (this.transactions.length > 0 && this.mayStartNextTransaction(this.transactions.peekStart())) {
87
91
  value = this.transactions.shift();
@@ -96,7 +100,7 @@ class TransactionQueue {
96
100
  } else {
97
101
  return { value: void 0, done: true };
98
102
  }
99
- }
103
+ }, "next")
100
104
  };
101
105
  }
102
106
  }
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/lib/driver/Queue.ts"],
4
4
  "sourcesContent": ["import { type Message } from \"@zwave-js/serial\";\nimport {\n\ttype DeferredPromise,\n\tcreateDeferredPromise,\n} from \"alcalzone-shared/deferred-promise\";\nimport { SortedList } from \"alcalzone-shared/sorted-list\";\nimport { type Transaction } from \"./Transaction.js\";\n\nexport interface TransactionQueueOptions {\n\tname: string;\n\tmayStartNextTransaction: (transaction: Transaction) => boolean;\n}\n\n/**\n * The transaction queue offers an async-iterable interface to a list of transactions.\n */\nexport class TransactionQueue implements AsyncIterable<Transaction> {\n\tpublic constructor(options?: Partial<TransactionQueueOptions>) {\n\t\tthis.name = options?.name ?? \"unnamed\";\n\t\tthis.mayStartNextTransaction = options?.mayStartNextTransaction\n\t\t\t?? (() => true);\n\t}\n\n\tpublic readonly name: string;\n\n\tprivate mayStartNextTransaction: (transaction: Transaction) => boolean;\n\tpublic readonly transactions = new SortedList<Transaction>();\n\tpublic currentTransaction: Transaction | undefined;\n\n\tpublic add(...items: Transaction[]): void {\n\t\tthis.transactions.add(...items);\n\t\tthis.trigger();\n\t}\n\n\tpublic remove(...items: Transaction[]): void {\n\t\tthis.transactions.remove(...items);\n\t\tthis.trigger();\n\t}\n\n\tpublic find(\n\t\tpredicate: (item: Transaction) => boolean,\n\t): Transaction | undefined {\n\t\treturn this.transactions.find(predicate);\n\t}\n\n\tpublic finalizeTransaction(): void {\n\t\tthis.currentTransaction = undefined;\n\t}\n\n\tpublic get length(): number {\n\t\treturn this.transactions.length;\n\t}\n\n\t/** Causes the queue to re-evaluate whether the next transaction may be started */\n\tpublic trigger(): void {\n\t\twhile (this.transactions.length > 0 && this.listeners.length > 0) {\n\t\t\tif (this.mayStartNextTransaction(this.transactions.peekStart()!)) {\n\t\t\t\tconst promise = this.listeners.shift()!;\n\t\t\t\tconst item = this.transactions.shift()!;\n\t\t\t\tthis.currentTransaction = item;\n\t\t\t\tpromise.resolve(item);\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// A list of Promises that are waiting to be resolved\n\tprivate listeners: DeferredPromise<Transaction | undefined>[] = [];\n\n\t// Whether the queue was ended\n\tprivate ended = false;\n\n\t/** Ends the queue after it has been drained */\n\tpublic end(): void {\n\t\tthis.ended = true;\n\t}\n\n\t/** Ends the queue and discards all pending items */\n\tpublic abort(): void {\n\t\tthis.ended = true;\n\t\tthis.transactions.clear();\n\t\tfor (const p of this.listeners) {\n\t\t\tp.resolve(undefined);\n\t\t}\n\t}\n\n\t// Enable iterating the queue using for-await-of\n\tpublic [Symbol.asyncIterator](): AsyncIterator<Transaction> {\n\t\treturn {\n\t\t\tnext: async (): Promise<IteratorResult<Transaction>> => {\n\t\t\t\tlet value: Transaction | undefined;\n\n\t\t\t\tif (\n\t\t\t\t\tthis.transactions.length > 0\n\t\t\t\t\t&& this.mayStartNextTransaction(\n\t\t\t\t\t\tthis.transactions.peekStart()!,\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\t// If the next transaction may be started, return it\n\t\t\t\t\tvalue = this.transactions.shift()!;\n\t\t\t\t} else if (!this.ended) {\n\t\t\t\t\t// Otherwise create a new promise and add it to the pending list\n\t\t\t\t\tconst promise = createDeferredPromise<\n\t\t\t\t\t\tTransaction | undefined\n\t\t\t\t\t>();\n\t\t\t\t\tthis.listeners.push(promise);\n\t\t\t\t\tvalue = await promise;\n\t\t\t\t}\n\n\t\t\t\tthis.currentTransaction = value;\n\n\t\t\t\tif (value) {\n\t\t\t\t\t// We have a value, return it\n\t\t\t\t\treturn { value, done: false };\n\t\t\t\t} else {\n\t\t\t\t\t// No value means the queue was ended\n\t\t\t\t\treturn { value: undefined, done: true };\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t}\n}\n\nexport interface SerialAPIQueueItem {\n\tmsg: Message;\n\ttransactionSource?: string;\n\tresult: DeferredPromise<Message | undefined>;\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AACA;;;;;AAAA,8BAGO;AACP,yBAA2B;AAWrB,MAAO,iBAAgB;EAC5B,YAAmB,SAA0C;AAC5D,SAAK,OAAO,SAAS,QAAQ;AAC7B,SAAK,0BAA0B,SAAS,4BACnC,MAAM;EACZ;EAEgB;EAER;EACQ,eAAe,IAAI,8BAAU;EACtC;EAEA,OAAO,OAAoB;AACjC,SAAK,aAAa,IAAI,GAAG,KAAK;AAC9B,SAAK,QAAO;EACb;EAEO,UAAU,OAAoB;AACpC,SAAK,aAAa,OAAO,GAAG,KAAK;AACjC,SAAK,QAAO;EACb;EAEO,KACN,WAAyC;AAEzC,WAAO,KAAK,aAAa,KAAK,SAAS;EACxC;EAEO,sBAAmB;AACzB,SAAK,qBAAqB;EAC3B;EAEA,IAAW,SAAM;AAChB,WAAO,KAAK,aAAa;EAC1B;;EAGO,UAAO;AACb,WAAO,KAAK,aAAa,SAAS,KAAK,KAAK,UAAU,SAAS,GAAG;AACjE,UAAI,KAAK,wBAAwB,KAAK,aAAa,UAAS,CAAG,GAAG;AACjE,cAAM,UAAU,KAAK,UAAU,MAAK;AACpC,cAAM,OAAO,KAAK,aAAa,MAAK;AACpC,aAAK,qBAAqB;AAC1B,gBAAQ,QAAQ,IAAI;MACrB,OAAO;AACN;MACD;IACD;EACD;;EAGQ,YAAwD,CAAA;;EAGxD,QAAQ;;EAGT,MAAG;AACT,SAAK,QAAQ;EACd;;EAGO,QAAK;AACX,SAAK,QAAQ;AACb,SAAK,aAAa,MAAK;AACvB,eAAW,KAAK,KAAK,WAAW;AAC/B,QAAE,QAAQ,MAAS;IACpB;EACD;;EAGO,CAAC,OAAO,aAAa,IAAC;AAC5B,WAAO;MACN,MAAM,YAAiD;AACtD,YAAI;AAEJ,YACC,KAAK,aAAa,SAAS,KACxB,KAAK,wBACP,KAAK,aAAa,UAAS,CAAG,GAE9B;AAED,kBAAQ,KAAK,aAAa,MAAK;QAChC,WAAW,CAAC,KAAK,OAAO;AAEvB,gBAAM,cAAU,+CAAqB;AAGrC,eAAK,UAAU,KAAK,OAAO;AAC3B,kBAAQ,MAAM;QACf;AAEA,aAAK,qBAAqB;AAE1B,YAAI,OAAO;AAEV,iBAAO,EAAE,OAAO,MAAM,MAAK;QAC5B,OAAO;AAEN,iBAAO,EAAE,OAAO,QAAW,MAAM,KAAI;QACtC;MACD;;EAEF;;",
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AACA;;;;;AAAA,8BAGO;AACP,yBAA2B;AAWrB,MAAO,iBAAgB;EAf7B,OAe6B;;;EAC5B,YAAmB,SAA0C;AAC5D,SAAK,OAAO,SAAS,QAAQ;AAC7B,SAAK,0BAA0B,SAAS,4BACnC,MAAM;EACZ;EAEgB;EAER;EACQ,eAAe,IAAI,8BAAU;EACtC;EAEA,OAAO,OAAoB;AACjC,SAAK,aAAa,IAAI,GAAG,KAAK;AAC9B,SAAK,QAAO;EACb;EAEO,UAAU,OAAoB;AACpC,SAAK,aAAa,OAAO,GAAG,KAAK;AACjC,SAAK,QAAO;EACb;EAEO,KACN,WAAyC;AAEzC,WAAO,KAAK,aAAa,KAAK,SAAS;EACxC;EAEO,sBAAmB;AACzB,SAAK,qBAAqB;EAC3B;EAEA,IAAW,SAAM;AAChB,WAAO,KAAK,aAAa;EAC1B;;EAGO,UAAO;AACb,WAAO,KAAK,aAAa,SAAS,KAAK,KAAK,UAAU,SAAS,GAAG;AACjE,UAAI,KAAK,wBAAwB,KAAK,aAAa,UAAS,CAAG,GAAG;AACjE,cAAM,UAAU,KAAK,UAAU,MAAK;AACpC,cAAM,OAAO,KAAK,aAAa,MAAK;AACpC,aAAK,qBAAqB;AAC1B,gBAAQ,QAAQ,IAAI;MACrB,OAAO;AACN;MACD;IACD;EACD;;EAGQ,YAAwD,CAAA;;EAGxD,QAAQ;;EAGT,MAAG;AACT,SAAK,QAAQ;EACd;;EAGO,QAAK;AACX,SAAK,QAAQ;AACb,SAAK,aAAa,MAAK;AACvB,eAAW,KAAK,KAAK,WAAW;AAC/B,QAAE,QAAQ,MAAS;IACpB;EACD;;EAGO,CAAC,OAAO,aAAa,IAAC;AAC5B,WAAO;MACN,MAAM,mCAAiD;AACtD,YAAI;AAEJ,YACC,KAAK,aAAa,SAAS,KACxB,KAAK,wBACP,KAAK,aAAa,UAAS,CAAG,GAE9B;AAED,kBAAQ,KAAK,aAAa,MAAK;QAChC,WAAW,CAAC,KAAK,OAAO;AAEvB,gBAAM,cAAU,+CAAqB;AAGrC,eAAK,UAAU,KAAK,OAAO;AAC3B,kBAAQ,MAAM;QACf;AAEA,aAAK,qBAAqB;AAE1B,YAAI,OAAO;AAEV,iBAAO,EAAE,OAAO,MAAM,MAAK;QAC5B,OAAO;AAEN,iBAAO,EAAE,OAAO,QAAW,MAAM,KAAI;QACtC;MACD,GA7BM;;EA+BR;;",
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 });
@@ -29,6 +30,7 @@ var import_xstate = require("xstate");
29
30
  function computeRetryDelay(ctx) {
30
31
  return 100 + 1e3 * (ctx.attempts - 1);
31
32
  }
33
+ __name(computeRetryDelay, "computeRetryDelay");
32
34
  const forwardMessage = (0, import_xstate.raise)((_, evt) => {
33
35
  const msg = evt.message;
34
36
  return {
@@ -57,9 +59,9 @@ function getSerialAPICommandMachineConfig(message, messageData, { timestamp, log
57
59
  actions: forwardMessage
58
60
  },
59
61
  {
60
- actions: (_, evt) => {
62
+ actions: /* @__PURE__ */ __name((_, evt) => {
61
63
  notifyUnsolicited(evt.message);
62
- }
64
+ }, "actions")
63
65
  }
64
66
  ]
65
67
  },
@@ -69,8 +71,8 @@ function getSerialAPICommandMachineConfig(message, messageData, { timestamp, log
69
71
  // and remember the timestamp of transmission
70
72
  entry: [
71
73
  (0, import_xstate.assign)({
72
- attempts: (ctx) => ctx.attempts + 1,
73
- txTimestamp: (_) => timestamp()
74
+ attempts: /* @__PURE__ */ __name((ctx) => ctx.attempts + 1, "attempts"),
75
+ txTimestamp: /* @__PURE__ */ __name((_) => timestamp(), "txTimestamp")
74
76
  }),
75
77
  (ctx) => logOutgoingMessage(ctx.msg)
76
78
  ],
@@ -81,7 +83,7 @@ function getSerialAPICommandMachineConfig(message, messageData, { timestamp, log
81
83
  onError: {
82
84
  target: "retry",
83
85
  actions: (0, import_xstate.assign)({
84
- lastError: (_) => "send failure"
86
+ lastError: /* @__PURE__ */ __name((_) => "send failure", "lastError")
85
87
  })
86
88
  }
87
89
  }
@@ -92,13 +94,13 @@ function getSerialAPICommandMachineConfig(message, messageData, { timestamp, log
92
94
  CAN: {
93
95
  target: "retry",
94
96
  actions: (0, import_xstate.assign)({
95
- lastError: (_) => "CAN"
97
+ lastError: /* @__PURE__ */ __name((_) => "CAN", "lastError")
96
98
  })
97
99
  },
98
100
  NAK: {
99
101
  target: "retry",
100
102
  actions: (0, import_xstate.assign)({
101
- lastError: (_) => "NAK"
103
+ lastError: /* @__PURE__ */ __name((_) => "NAK", "lastError")
102
104
  })
103
105
  },
104
106
  ACK: "waitForResponse"
@@ -107,7 +109,7 @@ function getSerialAPICommandMachineConfig(message, messageData, { timestamp, log
107
109
  ACK_TIMEOUT: {
108
110
  target: "retry",
109
111
  actions: (0, import_xstate.assign)({
110
- lastError: (_) => "ACK timeout"
112
+ lastError: /* @__PURE__ */ __name((_) => "ACK timeout", "lastError")
111
113
  })
112
114
  }
113
115
  }
@@ -125,14 +127,14 @@ function getSerialAPICommandMachineConfig(message, messageData, { timestamp, log
125
127
  target: "retry",
126
128
  cond: "responseIsNOK",
127
129
  actions: (0, import_xstate.assign)({
128
- lastError: (_) => "response NOK",
129
- result: (_, evt) => evt.message
130
+ lastError: /* @__PURE__ */ __name((_) => "response NOK", "lastError"),
131
+ result: /* @__PURE__ */ __name((_, evt) => evt.message, "result")
130
132
  })
131
133
  },
132
134
  {
133
135
  target: "waitForCallback",
134
136
  actions: (0, import_xstate.assign)({
135
- result: (_, evt) => evt.message
137
+ result: /* @__PURE__ */ __name((_, evt) => evt.message, "result")
136
138
  })
137
139
  }
138
140
  ]
@@ -146,14 +148,14 @@ function getSerialAPICommandMachineConfig(message, messageData, { timestamp, log
146
148
  actions: [
147
149
  () => sendDataAbort(),
148
150
  (0, import_xstate.assign)({
149
- lastError: (_) => "response timeout"
151
+ lastError: /* @__PURE__ */ __name((_) => "response timeout", "lastError")
150
152
  })
151
153
  ]
152
154
  },
153
155
  {
154
156
  target: "failure",
155
157
  actions: (0, import_xstate.assign)({
156
- lastError: (_) => "response timeout"
158
+ lastError: /* @__PURE__ */ __name((_) => "response timeout", "lastError")
157
159
  })
158
160
  }
159
161
  ]
@@ -174,15 +176,15 @@ function getSerialAPICommandMachineConfig(message, messageData, { timestamp, log
174
176
  cond: "callbackIsNOK",
175
177
  actions: (0, import_xstate.assign)({
176
178
  // Preserve "response timeout" errors
177
- lastError: (_) => "callback NOK",
178
- result: (_, evt) => evt.message
179
+ lastError: /* @__PURE__ */ __name((_) => "callback NOK", "lastError"),
180
+ result: /* @__PURE__ */ __name((_, evt) => evt.message, "result")
179
181
  })
180
182
  },
181
183
  {
182
184
  target: "success",
183
185
  cond: "callbackIsFinal",
184
186
  actions: (0, import_xstate.assign)({
185
- result: (_, evt) => evt.message
187
+ result: /* @__PURE__ */ __name((_, evt) => evt.message, "result")
186
188
  })
187
189
  },
188
190
  { target: "waitForCallback" }
@@ -199,7 +201,7 @@ function getSerialAPICommandMachineConfig(message, messageData, { timestamp, log
199
201
  CALLBACK_TIMEOUT: {
200
202
  target: "failure",
201
203
  actions: (0, import_xstate.assign)({
202
- lastError: (_) => "callback timeout"
204
+ lastError: /* @__PURE__ */ __name((_) => "callback timeout", "lastError")
203
205
  })
204
206
  }
205
207
  }
@@ -223,67 +225,70 @@ function getSerialAPICommandMachineConfig(message, messageData, { timestamp, log
223
225
  type: "final",
224
226
  data: {
225
227
  type: "success",
226
- txTimestamp: (ctx) => ctx.txTimestamp,
227
- result: (ctx) => ctx.result
228
+ txTimestamp: /* @__PURE__ */ __name((ctx) => ctx.txTimestamp, "txTimestamp"),
229
+ result: /* @__PURE__ */ __name((ctx) => ctx.result, "result")
228
230
  }
229
231
  },
230
232
  failure: {
231
233
  type: "final",
232
234
  data: {
233
235
  type: "failure",
234
- reason: (ctx) => ctx.lastError,
235
- result: (ctx) => ctx.result
236
+ reason: /* @__PURE__ */ __name((ctx) => ctx.lastError, "reason"),
237
+ result: /* @__PURE__ */ __name((ctx) => ctx.result, "result")
236
238
  }
237
239
  }
238
240
  }
239
241
  };
240
242
  }
243
+ __name(getSerialAPICommandMachineConfig, "getSerialAPICommandMachineConfig");
241
244
  function getSerialAPICommandMachineOptions({ sendData, notifyRetry }, timeoutConfig) {
242
245
  return {
243
246
  services: {
244
- send: (ctx) => {
247
+ send: /* @__PURE__ */ __name((ctx) => {
245
248
  ctx.msg.markAsSent();
246
249
  return sendData(ctx.data);
247
- },
248
- notifyRetry: (ctx) => {
250
+ }, "send"),
251
+ notifyRetry: /* @__PURE__ */ __name((ctx) => {
249
252
  notifyRetry(ctx.lastError, ctx.msg, ctx.attempts, ctx.maxAttempts, computeRetryDelay(ctx));
250
253
  return Promise.resolve();
251
- }
254
+ }, "notifyRetry")
252
255
  },
253
256
  guards: {
254
- mayRetry: (ctx) => ctx.attempts < ctx.maxAttempts,
255
- isSendData: (ctx) => (0, import_serialapi.isSendData)(ctx.msg),
256
- expectsNoAck: (ctx) => !ctx.msg.expectsAck(),
257
- expectsNoResponse: (ctx) => !ctx.msg.expectsResponse(),
258
- expectsNoCallback: (ctx) => !ctx.msg.expectsCallback(),
259
- isExpectedMessage: (ctx, evt, meta) => meta.state.matches("waitForResponse") ? ctx.msg.isExpectedResponse(evt.message) : meta.state.matches("waitForCallback") ? ctx.msg.isExpectedCallback(evt.message) : false,
260
- responseIsNOK: (ctx, evt) => evt.type === "response" && (0, import_serial.isSuccessIndicator)(evt.message) && !evt.message.isOK(),
261
- callbackIsNOKAfterTimedOutResponse: (ctx, evt) => evt.type === "callback" && (0, import_serial.isSuccessIndicator)(evt.message) && !evt.message.isOK() && (0, import_serialapi.isSendData)(ctx.msg) && ctx.lastError === "response timeout",
262
- callbackIsNOK: (ctx, evt) => evt.type === "callback" && (0, import_serial.isSuccessIndicator)(evt.message) && !evt.message.isOK(),
263
- callbackIsFinal: (ctx, evt) => evt.type === "callback" && (!(0, import_serial.isSuccessIndicator)(evt.message) || evt.message.isOK()) && (!(0, import_serial.isMultiStageCallback)(evt.message) || evt.message.isFinal())
257
+ mayRetry: /* @__PURE__ */ __name((ctx) => ctx.attempts < ctx.maxAttempts, "mayRetry"),
258
+ isSendData: /* @__PURE__ */ __name((ctx) => (0, import_serialapi.isSendData)(ctx.msg), "isSendData"),
259
+ expectsNoAck: /* @__PURE__ */ __name((ctx) => !ctx.msg.expectsAck(), "expectsNoAck"),
260
+ expectsNoResponse: /* @__PURE__ */ __name((ctx) => !ctx.msg.expectsResponse(), "expectsNoResponse"),
261
+ expectsNoCallback: /* @__PURE__ */ __name((ctx) => !ctx.msg.expectsCallback(), "expectsNoCallback"),
262
+ isExpectedMessage: /* @__PURE__ */ __name((ctx, evt, meta) => meta.state.matches("waitForResponse") ? ctx.msg.isExpectedResponse(evt.message) : meta.state.matches("waitForCallback") ? ctx.msg.isExpectedCallback(evt.message) : false, "isExpectedMessage"),
263
+ responseIsNOK: /* @__PURE__ */ __name((ctx, evt) => evt.type === "response" && (0, import_serial.isSuccessIndicator)(evt.message) && !evt.message.isOK(), "responseIsNOK"),
264
+ callbackIsNOKAfterTimedOutResponse: /* @__PURE__ */ __name((ctx, evt) => evt.type === "callback" && (0, import_serial.isSuccessIndicator)(evt.message) && !evt.message.isOK() && (0, import_serialapi.isSendData)(ctx.msg) && ctx.lastError === "response timeout", "callbackIsNOKAfterTimedOutResponse"),
265
+ callbackIsNOK: /* @__PURE__ */ __name((ctx, evt) => evt.type === "callback" && (0, import_serial.isSuccessIndicator)(evt.message) && !evt.message.isOK(), "callbackIsNOK"),
266
+ callbackIsFinal: /* @__PURE__ */ __name((ctx, evt) => evt.type === "callback" && (!(0, import_serial.isSuccessIndicator)(evt.message) || evt.message.isOK()) && (!(0, import_serial.isMultiStageCallback)(evt.message) || evt.message.isFinal()), "callbackIsFinal")
264
267
  },
265
268
  delays: {
266
- RETRY_DELAY: (ctx) => computeRetryDelay(ctx),
267
- RESPONSE_TIMEOUT: (ctx) => {
269
+ RETRY_DELAY: /* @__PURE__ */ __name((ctx) => computeRetryDelay(ctx), "RETRY_DELAY"),
270
+ RESPONSE_TIMEOUT: /* @__PURE__ */ __name((ctx) => {
268
271
  return (
269
272
  // Ask the message for its callback timeout
270
273
  ctx.msg.getResponseTimeout() || timeoutConfig.response
271
274
  );
272
- },
273
- CALLBACK_TIMEOUT: (ctx) => {
275
+ }, "RESPONSE_TIMEOUT"),
276
+ CALLBACK_TIMEOUT: /* @__PURE__ */ __name((ctx) => {
274
277
  return (
275
278
  // Ask the message for its callback timeout
276
279
  ctx.msg.getCallbackTimeout() || timeoutConfig.sendDataCallback
277
280
  );
278
- },
281
+ }, "CALLBACK_TIMEOUT"),
279
282
  SENDDATA_ABORT_TIMEOUT: timeoutConfig.sendDataAbort,
280
283
  ACK_TIMEOUT: timeoutConfig.ack
281
284
  }
282
285
  };
283
286
  }
287
+ __name(getSerialAPICommandMachineOptions, "getSerialAPICommandMachineOptions");
284
288
  function createSerialAPICommandMachine(message, messageData, implementations, params) {
285
289
  return (0, import_xstate.createMachine)(getSerialAPICommandMachineConfig(message, messageData, implementations, params.attempts), getSerialAPICommandMachineOptions(implementations, params.timeouts));
286
290
  }
291
+ __name(createSerialAPICommandMachine, "createSerialAPICommandMachine");
287
292
  // Annotate the CommonJS export names for ESM import in node:
288
293
  0 && (module.exports = {
289
294
  createSerialAPICommandMachine,
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/lib/driver/SerialAPICommandMachine.ts"],
4
4
  "sourcesContent": ["import type { Message } from \"@zwave-js/serial\";\nimport {\n\tMessageType,\n\tisMultiStageCallback,\n\tisSuccessIndicator,\n} from \"@zwave-js/serial\";\nimport { isSendData } from \"@zwave-js/serial/serialapi\";\nimport {\n\ttype InterpreterFrom,\n\ttype MachineConfig,\n\ttype MachineOptions,\n\ttype StateMachine,\n\tassign,\n\tcreateMachine,\n\traise,\n} from \"xstate\";\nimport type { ZWaveOptions } from \"./ZWaveOptions.js\";\n\nexport interface SerialAPICommandStateSchema {\n\tstates: {\n\t\tsending: object;\n\t\twaitForACK: object;\n\t\twaitForResponse: object;\n\t\twaitForCallback: object;\n\t\tretry: object;\n\t\tretryWait: object;\n\t\tfailure: object;\n\t\tsuccess: object;\n\t};\n}\n\nexport type SerialAPICommandError =\n\t| \"send failure\"\n\t| \"CAN\"\n\t| \"NAK\"\n\t| \"ACK timeout\"\n\t| \"response timeout\"\n\t| \"callback timeout\"\n\t| \"response NOK\"\n\t| \"callback NOK\";\n\nexport interface SerialAPICommandContext {\n\tmsg: Message;\n\tdata: Uint8Array;\n\tattempts: number;\n\tmaxAttempts: number;\n\tlastError?: SerialAPICommandError;\n\tresult?: Message;\n\ttxTimestamp?: number;\n}\n\nexport type SerialAPICommandEvent =\n\t| { type: \"ACK\" }\n\t| { type: \"CAN\" }\n\t| { type: \"NAK\" }\n\t| { type: \"message\"; message: Message } // A message that might or might not be expected\n\t| { type: \"response\"; message: Message } // Gets forwarded when a response-type message is expected\n\t| { type: \"callback\"; message: Message }; // Gets forwarded when a callback-type message is expected\n\nexport type SerialAPICommandDoneData =\n\t| {\n\t\ttype: \"success\";\n\t\t// TODO: Can we get rid of this?\n\t\ttxTimestamp: number;\n\t\tresult?: Message;\n\t}\n\t| (\n\t\t& {\n\t\t\ttype: \"failure\";\n\t\t}\n\t\t& (\n\t\t\t| {\n\t\t\t\treason:\n\t\t\t\t\t| \"send failure\"\n\t\t\t\t\t| \"CAN\"\n\t\t\t\t\t| \"NAK\"\n\t\t\t\t\t| \"ACK timeout\"\n\t\t\t\t\t| \"response timeout\"\n\t\t\t\t\t| \"callback timeout\";\n\t\t\t\tresult?: undefined;\n\t\t\t}\n\t\t\t| {\n\t\t\t\treason: \"response NOK\" | \"callback NOK\";\n\t\t\t\tresult: Message;\n\t\t\t}\n\t\t)\n\t);\n\nexport interface SerialAPICommandServiceImplementations {\n\ttimestamp: () => number;\n\tsendData: (data: Uint8Array) => Promise<void>;\n\tsendDataAbort: () => Promise<void>;\n\tnotifyRetry: (\n\t\tlastError: SerialAPICommandError | undefined,\n\t\tmessage: Message,\n\t\tattempts: number,\n\t\tmaxAttempts: number,\n\t\tdelay: number,\n\t) => void;\n\tnotifyUnsolicited: (message: Message) => void;\n\tlogOutgoingMessage: (message: Message) => void;\n}\n\nfunction computeRetryDelay(ctx: SerialAPICommandContext): number {\n\treturn 100 + 1000 * (ctx.attempts - 1);\n}\n\nconst forwardMessage = raise((_, evt: SerialAPICommandEvent) => {\n\tconst msg = (evt as any).message as Message;\n\treturn {\n\t\ttype: msg.type === MessageType.Response ? \"response\" : \"callback\",\n\t\tmessage: msg,\n\t} as SerialAPICommandEvent;\n});\n\nexport type SerialAPICommandMachineConfig = MachineConfig<\n\tSerialAPICommandContext,\n\tSerialAPICommandStateSchema,\n\tSerialAPICommandEvent\n>;\nexport type SerialAPICommandMachine = StateMachine<\n\tSerialAPICommandContext,\n\tSerialAPICommandStateSchema,\n\tSerialAPICommandEvent\n>;\n\nexport type SerialAPICommandInterpreter = InterpreterFrom<\n\tSerialAPICommandMachine\n>;\nexport type SerialAPICommandMachineOptions = Partial<\n\tMachineOptions<SerialAPICommandContext, SerialAPICommandEvent>\n>;\n\nexport type SerialAPICommandMachineParams = {\n\ttimeouts: Pick<\n\t\tZWaveOptions[\"timeouts\"],\n\t\t\"ack\" | \"response\" | \"sendDataAbort\" | \"sendDataCallback\"\n\t>;\n\tattempts: Pick<ZWaveOptions[\"attempts\"], \"controller\">;\n};\n\nexport function getSerialAPICommandMachineConfig(\n\tmessage: Message,\n\tmessageData: Uint8Array,\n\t{\n\t\ttimestamp,\n\t\tlogOutgoingMessage,\n\t\tnotifyUnsolicited,\n\t\tsendDataAbort,\n\t}: Pick<\n\t\tSerialAPICommandServiceImplementations,\n\t\t| \"timestamp\"\n\t\t| \"logOutgoingMessage\"\n\t\t| \"notifyUnsolicited\"\n\t\t| \"sendDataAbort\"\n\t>,\n\tattemptsConfig: SerialAPICommandMachineParams[\"attempts\"],\n): SerialAPICommandMachineConfig {\n\treturn {\n\t\tpredictableActionArguments: true,\n\t\tid: \"serialAPICommand\",\n\t\tinitial: \"sending\",\n\t\tcontext: {\n\t\t\tmsg: message,\n\t\t\tdata: messageData,\n\t\t\tattempts: 0,\n\t\t\tmaxAttempts: attemptsConfig.controller,\n\t\t},\n\t\ton: {\n\t\t\t// The state machine accepts any message. If it is expected\n\t\t\t// it will be forwarded to the correct states. If not, it\n\t\t\t// will be returned with the \"unsolicited\" event.\n\t\t\tmessage: [\n\t\t\t\t{\n\t\t\t\t\tcond: \"isExpectedMessage\",\n\t\t\t\t\tactions: forwardMessage as any,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tactions: (_: any, evt: any) => {\n\t\t\t\t\t\tnotifyUnsolicited(evt.message);\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\tstates: {\n\t\t\tsending: {\n\t\t\t\t// Every send attempt should increase the attempts by one\n\t\t\t\t// and remember the timestamp of transmission\n\t\t\t\tentry: [\n\t\t\t\t\tassign({\n\t\t\t\t\t\tattempts: (ctx) => ctx.attempts + 1,\n\t\t\t\t\t\ttxTimestamp: (_) => timestamp(),\n\t\t\t\t\t}),\n\t\t\t\t\t(ctx) => logOutgoingMessage(ctx.msg),\n\t\t\t\t],\n\t\t\t\tinvoke: {\n\t\t\t\t\tid: \"sendMessage\",\n\t\t\t\t\tsrc: \"send\",\n\t\t\t\t\tonDone: \"waitForACK\",\n\t\t\t\t\tonError: {\n\t\t\t\t\t\ttarget: \"retry\",\n\t\t\t\t\t\tactions: assign({\n\t\t\t\t\t\t\tlastError: (_) => \"send failure\",\n\t\t\t\t\t\t}),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\twaitForACK: {\n\t\t\t\talways: [{ target: \"success\", cond: \"expectsNoAck\" }],\n\t\t\t\ton: {\n\t\t\t\t\tCAN: {\n\t\t\t\t\t\ttarget: \"retry\",\n\t\t\t\t\t\tactions: assign({\n\t\t\t\t\t\t\tlastError: (_) => \"CAN\",\n\t\t\t\t\t\t}),\n\t\t\t\t\t},\n\t\t\t\t\tNAK: {\n\t\t\t\t\t\ttarget: \"retry\",\n\t\t\t\t\t\tactions: assign({\n\t\t\t\t\t\t\tlastError: (_) => \"NAK\",\n\t\t\t\t\t\t}),\n\t\t\t\t\t},\n\t\t\t\t\tACK: \"waitForResponse\",\n\t\t\t\t},\n\t\t\t\tafter: {\n\t\t\t\t\tACK_TIMEOUT: {\n\t\t\t\t\t\ttarget: \"retry\",\n\t\t\t\t\t\tactions: assign({\n\t\t\t\t\t\t\tlastError: (_) => \"ACK timeout\",\n\t\t\t\t\t\t}),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\twaitForResponse: {\n\t\t\t\talways: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttarget: \"waitForCallback\",\n\t\t\t\t\t\tcond: \"expectsNoResponse\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\ton: {\n\t\t\t\t\tresponse: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttarget: \"retry\",\n\t\t\t\t\t\t\tcond: \"responseIsNOK\",\n\t\t\t\t\t\t\tactions: assign({\n\t\t\t\t\t\t\t\tlastError: (_) => \"response NOK\",\n\t\t\t\t\t\t\t\tresult: (_, evt) => (evt as any).message,\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\t\t\ttarget: \"waitForCallback\",\n\t\t\t\t\t\t\tactions: assign({\n\t\t\t\t\t\t\t\tresult: (_, evt) => (evt as any).message,\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},\n\t\t\t\tafter: {\n\t\t\t\t\t// Do not retry when a response times out\n\t\t\t\t\tRESPONSE_TIMEOUT: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcond: \"isSendData\",\n\t\t\t\t\t\t\ttarget: \"waitForCallback\",\n\t\t\t\t\t\t\tactions: [\n\t\t\t\t\t\t\t\t() => sendDataAbort(),\n\t\t\t\t\t\t\t\tassign({\n\t\t\t\t\t\t\t\t\tlastError: (_) => \"response timeout\",\n\t\t\t\t\t\t\t\t}),\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\t\t\ttarget: \"failure\",\n\t\t\t\t\t\t\tactions: assign({\n\t\t\t\t\t\t\t\tlastError: (_) => \"response timeout\",\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},\n\t\t\t},\n\t\t\twaitForCallback: {\n\t\t\t\talways: [{ target: \"success\", cond: \"expectsNoCallback\" }],\n\t\t\t\ton: {\n\t\t\t\t\tcallback: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// Preserve \"response timeout\" errors\n\t\t\t\t\t\t\t// A NOK callback afterwards is expected, but we're not interested in it\n\t\t\t\t\t\t\ttarget: \"failure\",\n\t\t\t\t\t\t\tcond: \"callbackIsNOKAfterTimedOutResponse\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttarget: \"failure\",\n\t\t\t\t\t\t\tcond: \"callbackIsNOK\",\n\t\t\t\t\t\t\tactions: assign({\n\t\t\t\t\t\t\t\t// Preserve \"response timeout\" errors\n\t\t\t\t\t\t\t\tlastError: (_) => \"callback NOK\",\n\t\t\t\t\t\t\t\tresult: (_, evt) => (evt as any).message,\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\t\t\ttarget: \"success\",\n\t\t\t\t\t\t\tcond: \"callbackIsFinal\",\n\t\t\t\t\t\t\tactions: assign({\n\t\t\t\t\t\t\t\tresult: (_, evt) => (evt as any).message,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{ target: \"waitForCallback\" },\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\tafter: {\n\t\t\t\t\t// Abort Send Data when it takes too long\n\t\t\t\t\tSENDDATA_ABORT_TIMEOUT: {\n\t\t\t\t\t\tcond: \"isSendData\",\n\t\t\t\t\t\tactions: [\n\t\t\t\t\t\t\t() => sendDataAbort(),\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t\tCALLBACK_TIMEOUT: {\n\t\t\t\t\t\ttarget: \"failure\",\n\t\t\t\t\t\tactions: assign({\n\t\t\t\t\t\t\tlastError: (_) => \"callback timeout\",\n\t\t\t\t\t\t}),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tretry: {\n\t\t\t\talways: [\n\t\t\t\t\t{ target: \"retryWait\", cond: \"mayRetry\" },\n\t\t\t\t\t{ target: \"failure\" },\n\t\t\t\t],\n\t\t\t},\n\t\t\tretryWait: {\n\t\t\t\tinvoke: {\n\t\t\t\t\tid: \"notify\",\n\t\t\t\t\tsrc: \"notifyRetry\",\n\t\t\t\t},\n\t\t\t\tafter: {\n\t\t\t\t\tRETRY_DELAY: \"sending\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tsuccess: {\n\t\t\t\ttype: \"final\",\n\t\t\t\tdata: {\n\t\t\t\t\ttype: \"success\",\n\t\t\t\t\ttxTimestamp: (ctx: SerialAPICommandContext) =>\n\t\t\t\t\t\tctx.txTimestamp!,\n\t\t\t\t\tresult: (ctx: SerialAPICommandContext) => ctx.result,\n\t\t\t\t},\n\t\t\t},\n\t\t\tfailure: {\n\t\t\t\ttype: \"final\",\n\t\t\t\tdata: {\n\t\t\t\t\ttype: \"failure\",\n\t\t\t\t\treason: (ctx: SerialAPICommandContext) => ctx.lastError,\n\t\t\t\t\tresult: (ctx: SerialAPICommandContext) => ctx.result!,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t};\n}\n\nexport function getSerialAPICommandMachineOptions(\n\t{\n\t\tsendData,\n\t\tnotifyRetry,\n\t}: Pick<\n\t\tSerialAPICommandServiceImplementations,\n\t\t\"sendData\" | \"sendDataAbort\" | \"notifyRetry\"\n\t>,\n\ttimeoutConfig: SerialAPICommandMachineParams[\"timeouts\"],\n): SerialAPICommandMachineOptions {\n\treturn {\n\t\tservices: {\n\t\t\tsend: (ctx) => {\n\t\t\t\t// Mark the message as sent immediately before actually sending\n\t\t\t\tctx.msg.markAsSent();\n\t\t\t\treturn sendData(ctx.data);\n\t\t\t},\n\t\t\tnotifyRetry: (ctx) => {\n\t\t\t\tnotifyRetry(\n\t\t\t\t\tctx.lastError,\n\t\t\t\t\tctx.msg,\n\t\t\t\t\tctx.attempts,\n\t\t\t\t\tctx.maxAttempts,\n\t\t\t\t\tcomputeRetryDelay(ctx),\n\t\t\t\t);\n\t\t\t\treturn Promise.resolve();\n\t\t\t},\n\t\t},\n\t\tguards: {\n\t\t\tmayRetry: (ctx) => ctx.attempts < ctx.maxAttempts,\n\t\t\tisSendData: (ctx) => isSendData(ctx.msg),\n\t\t\texpectsNoAck: (ctx) => !ctx.msg.expectsAck(),\n\t\t\texpectsNoResponse: (ctx) => !ctx.msg.expectsResponse(),\n\t\t\texpectsNoCallback: (ctx) => !ctx.msg.expectsCallback(),\n\t\t\tisExpectedMessage: (ctx, evt, meta) =>\n\t\t\t\tmeta.state.matches(\"waitForResponse\")\n\t\t\t\t\t? ctx.msg.isExpectedResponse((evt as any).message)\n\t\t\t\t\t: meta.state.matches(\"waitForCallback\")\n\t\t\t\t\t? ctx.msg.isExpectedCallback((evt as any).message)\n\t\t\t\t\t: false,\n\t\t\tresponseIsNOK: (ctx, evt) =>\n\t\t\t\tevt.type === \"response\"\n\t\t\t\t// assume responses without success indication to be OK\n\t\t\t\t&& isSuccessIndicator(evt.message)\n\t\t\t\t&& !evt.message.isOK(),\n\t\t\tcallbackIsNOKAfterTimedOutResponse: (ctx, evt) =>\n\t\t\t\tevt.type === \"callback\"\n\t\t\t\t// assume callbacks without success indication to be OK\n\t\t\t\t&& isSuccessIndicator(evt.message)\n\t\t\t\t&& !evt.message.isOK()\n\t\t\t\t&& isSendData(ctx.msg)\n\t\t\t\t&& ctx.lastError === \"response timeout\",\n\t\t\tcallbackIsNOK: (ctx, evt) =>\n\t\t\t\tevt.type === \"callback\"\n\t\t\t\t// assume callbacks without success indication to be OK\n\t\t\t\t&& isSuccessIndicator(evt.message)\n\t\t\t\t&& !evt.message.isOK(),\n\t\t\tcallbackIsFinal: (ctx, evt) =>\n\t\t\t\tevt.type === \"callback\"\n\t\t\t\t// assume callbacks without success indication to be OK\n\t\t\t\t&& (!isSuccessIndicator(evt.message) || evt.message.isOK())\n\t\t\t\t// assume callbacks without isFinal method to be final\n\t\t\t\t&& (!isMultiStageCallback(evt.message)\n\t\t\t\t\t|| evt.message.isFinal()),\n\t\t},\n\t\tdelays: {\n\t\t\tRETRY_DELAY: (ctx) => computeRetryDelay(ctx),\n\t\t\tRESPONSE_TIMEOUT: (ctx) => {\n\t\t\t\treturn (\n\t\t\t\t\t// Ask the message for its callback timeout\n\t\t\t\t\tctx.msg.getResponseTimeout()\n\t\t\t\t\t// and fall back to default values\n\t\t\t\t\t|| timeoutConfig.response\n\t\t\t\t);\n\t\t\t},\n\t\t\tCALLBACK_TIMEOUT: (ctx) => {\n\t\t\t\treturn (\n\t\t\t\t\t// Ask the message for its callback timeout\n\t\t\t\t\tctx.msg.getCallbackTimeout()\n\t\t\t\t\t// and fall back to default values\n\t\t\t\t\t|| timeoutConfig.sendDataCallback\n\t\t\t\t);\n\t\t\t},\n\t\t\tSENDDATA_ABORT_TIMEOUT: timeoutConfig.sendDataAbort,\n\t\t\tACK_TIMEOUT: timeoutConfig.ack,\n\t\t},\n\t};\n}\n\nexport function createSerialAPICommandMachine(\n\tmessage: Message,\n\tmessageData: Uint8Array,\n\timplementations: SerialAPICommandServiceImplementations,\n\tparams: SerialAPICommandMachineParams,\n): SerialAPICommandMachine {\n\treturn createMachine<SerialAPICommandContext, SerialAPICommandEvent>(\n\t\tgetSerialAPICommandMachineConfig(\n\t\t\tmessage,\n\t\t\tmessageData,\n\t\t\timplementations,\n\t\t\tparams.attempts,\n\t\t),\n\t\tgetSerialAPICommandMachineOptions(implementations, params.timeouts),\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 });
@@ -65,12 +66,14 @@ function serialAPICommandErrorToZWaveError(reason, sentMessage, receivedMessage,
65
66
  }
66
67
  }
67
68
  }
69
+ __name(serialAPICommandErrorToZWaveError, "serialAPICommandErrorToZWaveError");
68
70
  function createMessageDroppedUnexpectedError(original) {
69
71
  const ret = new import_core.ZWaveError(`Message dropped because of an unexpected error: ${original.message}`, import_core.ZWaveErrorCodes.Controller_MessageDropped);
70
72
  if (original.stack)
71
73
  ret.stack = original.stack;
72
74
  return ret;
73
75
  }
76
+ __name(createMessageDroppedUnexpectedError, "createMessageDroppedUnexpectedError");
74
77
  function isSerialCommandError(error) {
75
78
  if (!(0, import_core.isZWaveError)(error))
76
79
  return false;
@@ -83,6 +86,7 @@ function isSerialCommandError(error) {
83
86
  }
84
87
  return false;
85
88
  }
89
+ __name(isSerialCommandError, "isSerialCommandError");
86
90
  function interpretEx(machine, options) {
87
91
  const interpreter = new import_xstate.Interpreter(machine, options);
88
92
  return new Proxy(interpreter, {
@@ -132,6 +136,7 @@ function interpretEx(machine, options) {
132
136
  }
133
137
  });
134
138
  }
139
+ __name(interpretEx, "interpretEx");
135
140
  // Annotate the CommonJS export names for ESM import in node:
136
141
  0 && (module.exports = {
137
142
  createMessageDroppedUnexpectedError,
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/lib/driver/StateMachineShared.ts"],
4
4
  "sourcesContent": ["import {\n\ttype MessagePriority,\n\tTransmitStatus,\n\tZWaveError,\n\tZWaveErrorCodes,\n\tisZWaveError,\n} from \"@zwave-js/core\";\nimport type { Message } from \"@zwave-js/serial\";\nimport {\n\tSendDataBridgeRequest,\n\ttype SendDataBridgeRequestTransmitReport,\n\tSendDataMulticastBridgeRequest,\n\ttype SendDataMulticastBridgeRequestTransmitReport,\n} from \"@zwave-js/serial/serialapi\";\nimport {\n\tSendDataMulticastRequest,\n\ttype SendDataMulticastRequestTransmitReport,\n\tSendDataRequest,\n\ttype SendDataRequestTransmitReport,\n} from \"@zwave-js/serial/serialapi\";\nimport {\n\tisSendData,\n\tisSendDataTransmitReport,\n} from \"@zwave-js/serial/serialapi\";\nimport { getEnumMemberName } from \"@zwave-js/shared\";\nimport {\n\ttype AnyStateMachine,\n\tInterpreter,\n\ttype InterpreterFrom,\n\ttype InterpreterOptions,\n} from \"xstate\";\nimport type { SerialAPICommandDoneData } from \"./SerialAPICommandMachine.js\";\nimport type { Transaction } from \"./Transaction.js\";\n\nexport function serialAPICommandErrorToZWaveError(\n\treason: (SerialAPICommandDoneData & { type: \"failure\" })[\"reason\"],\n\tsentMessage: Message,\n\treceivedMessage: Message | undefined,\n\ttransactionSource: string | undefined,\n): ZWaveError {\n\tswitch (reason) {\n\t\tcase \"send failure\":\n\t\tcase \"CAN\":\n\t\tcase \"NAK\":\n\t\t\treturn new ZWaveError(\n\t\t\t\t`Failed to send the message after 3 attempts`,\n\t\t\t\tZWaveErrorCodes.Controller_MessageDropped,\n\t\t\t\tundefined,\n\t\t\t\ttransactionSource,\n\t\t\t);\n\t\tcase \"ACK timeout\":\n\t\t\treturn new ZWaveError(\n\t\t\t\t`Timeout while waiting for an ACK from the controller`,\n\t\t\t\tZWaveErrorCodes.Controller_Timeout,\n\t\t\t\t\"ACK\",\n\t\t\t\ttransactionSource,\n\t\t\t);\n\t\tcase \"response timeout\":\n\t\t\treturn new ZWaveError(\n\t\t\t\t`Timeout while waiting for a response from the controller`,\n\t\t\t\tZWaveErrorCodes.Controller_Timeout,\n\t\t\t\t\"response\",\n\t\t\t\ttransactionSource,\n\t\t\t);\n\t\tcase \"callback timeout\":\n\t\t\treturn new ZWaveError(\n\t\t\t\t`Timeout while waiting for a callback from the controller`,\n\t\t\t\tZWaveErrorCodes.Controller_Timeout,\n\t\t\t\t\"callback\",\n\t\t\t\ttransactionSource,\n\t\t\t);\n\t\tcase \"response NOK\": {\n\t\t\tif (isSendData(sentMessage)) {\n\t\t\t\treturn new ZWaveError(\n\t\t\t\t\t`Failed to send the command after ${sentMessage.maxSendAttempts} attempts. Transmission queue full`,\n\t\t\t\t\tZWaveErrorCodes.Controller_MessageDropped,\n\t\t\t\t\treceivedMessage,\n\t\t\t\t\ttransactionSource,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\treturn new ZWaveError(\n\t\t\t\t\t`The controller response indicated failure`,\n\t\t\t\t\tZWaveErrorCodes.Controller_ResponseNOK,\n\t\t\t\t\treceivedMessage,\n\t\t\t\t\ttransactionSource,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tcase \"callback NOK\": {\n\t\t\tif (\n\t\t\t\tisSendData(sentMessage)\n\t\t\t\t&& isSendDataTransmitReport(receivedMessage)\n\t\t\t\t&& receivedMessage.transmitStatus === TransmitStatus.Fail\n\t\t\t) {\n\t\t\t\treturn new ZWaveError(\n\t\t\t\t\t`Failed to send the command, the controller is jammed`,\n\t\t\t\t\tZWaveErrorCodes.Controller_Jammed,\n\t\t\t\t\treceivedMessage,\n\t\t\t\t\ttransactionSource,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tsentMessage instanceof SendDataRequest\n\t\t\t\t|| sentMessage instanceof SendDataBridgeRequest\n\t\t\t) {\n\t\t\t\tconst status = (\n\t\t\t\t\treceivedMessage as\n\t\t\t\t\t\t| SendDataRequestTransmitReport\n\t\t\t\t\t\t| SendDataBridgeRequestTransmitReport\n\t\t\t\t).transmitStatus;\n\t\t\t\treturn new ZWaveError(\n\t\t\t\t\t`Failed to send the command after ${sentMessage.maxSendAttempts} attempts (Status ${\n\t\t\t\t\t\tgetEnumMemberName(\n\t\t\t\t\t\t\tTransmitStatus,\n\t\t\t\t\t\t\tstatus,\n\t\t\t\t\t\t)\n\t\t\t\t\t})`,\n\t\t\t\t\tstatus === TransmitStatus.NoAck\n\t\t\t\t\t\t? ZWaveErrorCodes.Controller_CallbackNOK\n\t\t\t\t\t\t: ZWaveErrorCodes.Controller_MessageDropped,\n\t\t\t\t\treceivedMessage,\n\t\t\t\t\ttransactionSource,\n\t\t\t\t);\n\t\t\t} else if (\n\t\t\t\tsentMessage instanceof SendDataMulticastRequest\n\t\t\t\t|| sentMessage instanceof SendDataMulticastBridgeRequest\n\t\t\t) {\n\t\t\t\tconst status = (\n\t\t\t\t\treceivedMessage as\n\t\t\t\t\t\t| SendDataMulticastRequestTransmitReport\n\t\t\t\t\t\t| SendDataMulticastBridgeRequestTransmitReport\n\t\t\t\t).transmitStatus;\n\t\t\t\treturn new ZWaveError(\n\t\t\t\t\t`One or more nodes did not respond to the multicast request (Status ${\n\t\t\t\t\t\tgetEnumMemberName(\n\t\t\t\t\t\t\tTransmitStatus,\n\t\t\t\t\t\t\tstatus,\n\t\t\t\t\t\t)\n\t\t\t\t\t})`,\n\t\t\t\t\tstatus === TransmitStatus.NoAck\n\t\t\t\t\t\t? ZWaveErrorCodes.Controller_CallbackNOK\n\t\t\t\t\t\t: ZWaveErrorCodes.Controller_MessageDropped,\n\t\t\t\t\treceivedMessage,\n\t\t\t\t\ttransactionSource,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\treturn new ZWaveError(\n\t\t\t\t\t`The controller callback indicated failure`,\n\t\t\t\t\tZWaveErrorCodes.Controller_CallbackNOK,\n\t\t\t\t\treceivedMessage,\n\t\t\t\t\ttransactionSource,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport function createMessageDroppedUnexpectedError(\n\toriginal: Error,\n): ZWaveError {\n\tconst ret = new ZWaveError(\n\t\t`Message dropped because of an unexpected error: ${original.message}`,\n\t\tZWaveErrorCodes.Controller_MessageDropped,\n\t);\n\tif (original.stack) ret.stack = original.stack;\n\treturn ret;\n}\n\n/** Tests whether the given error is one that was caused by the serial API execution */\nexport function isSerialCommandError(error: unknown): boolean {\n\tif (!isZWaveError(error)) return false;\n\tswitch (error.code) {\n\t\tcase ZWaveErrorCodes.Controller_Timeout:\n\t\tcase ZWaveErrorCodes.Controller_ResponseNOK:\n\t\tcase ZWaveErrorCodes.Controller_CallbackNOK:\n\t\tcase ZWaveErrorCodes.Controller_MessageDropped:\n\t\t\treturn true;\n\t}\n\treturn false;\n}\n\nexport type ExtendedInterpreterFrom<\n\tTMachine extends AnyStateMachine | ((...args: any[]) => AnyStateMachine),\n> = Extended<InterpreterFrom<TMachine>>;\n\nexport type Extended<\n\tTInterpreter extends Interpreter<any, any, any, any, any>,\n> = TInterpreter & {\n\trestart(): TInterpreter;\n};\n\n/** Extends the default xstate interpreter with a restart function that re-attaches all event handlers */\nexport function interpretEx<TMachine extends AnyStateMachine>(\n\tmachine: TMachine,\n\toptions?: Partial<InterpreterOptions>,\n): ExtendedInterpreterFrom<TMachine> {\n\tconst interpreter = new Interpreter(\n\t\tmachine,\n\t\toptions,\n\t) as ExtendedInterpreterFrom<TMachine>;\n\n\treturn new Proxy(interpreter, {\n\t\tget(target, key) {\n\t\t\tif (key === \"restart\") {\n\t\t\t\treturn () => {\n\t\t\t\t\tconst listeners = [...(target[\"listeners\"] as Set<any>)];\n\t\t\t\t\tconst contextListeners = [\n\t\t\t\t\t\t...(target[\"contextListeners\"] as Set<any>),\n\t\t\t\t\t];\n\t\t\t\t\tconst stopListeners = [\n\t\t\t\t\t\t...(target[\"stopListeners\"] as Set<any>),\n\t\t\t\t\t];\n\t\t\t\t\tconst doneListeners = [\n\t\t\t\t\t\t...(target[\"doneListeners\"] as Set<any>),\n\t\t\t\t\t];\n\t\t\t\t\tconst eventListeners = [\n\t\t\t\t\t\t...(target[\"eventListeners\"] as Set<any>),\n\t\t\t\t\t];\n\t\t\t\t\tconst sendListeners = [\n\t\t\t\t\t\t...(target[\"sendListeners\"] as Set<any>),\n\t\t\t\t\t];\n\t\t\t\t\ttarget.stop();\n\t\t\t\t\tfor (const listener of listeners) {\n\t\t\t\t\t\ttarget.onTransition(listener);\n\t\t\t\t\t}\n\t\t\t\t\tfor (const listener of contextListeners) {\n\t\t\t\t\t\ttarget.onChange(listener);\n\t\t\t\t\t}\n\t\t\t\t\tfor (const listener of stopListeners) {\n\t\t\t\t\t\ttarget.onStop(listener);\n\t\t\t\t\t}\n\t\t\t\t\tfor (const listener of doneListeners) {\n\t\t\t\t\t\ttarget.onDone(listener);\n\t\t\t\t\t}\n\t\t\t\t\tfor (const listener of eventListeners) {\n\t\t\t\t\t\ttarget.onEvent(listener);\n\t\t\t\t\t}\n\t\t\t\t\tfor (const listener of sendListeners) {\n\t\t\t\t\t\ttarget.onSend(listener);\n\t\t\t\t\t}\n\t\t\t\t\treturn target.start();\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\treturn (target as any)[key];\n\t\t\t}\n\t\t},\n\t});\n}\n\nexport type TransactionReducerResult =\n\t| {\n\t\t// Silently drop the transaction\n\t\ttype: \"drop\";\n\t}\n\t| {\n\t\t// Do nothing (useful especially for the current transaction)\n\t\ttype: \"keep\";\n\t}\n\t| {\n\t\t// Reject the transaction with the given error\n\t\ttype: \"reject\";\n\t\tmessage: string;\n\t\tcode: ZWaveErrorCodes;\n\t}\n\t| {\n\t\t// Resolve the transaction with the given message\n\t\ttype: \"resolve\";\n\t\tmessage?: Message;\n\t}\n\t| {\n\t\t// Moves the transaction back to the queue, resetting it if desired.\n\t\t// Optionally change the priority and/or tag.\n\t\ttype: \"requeue\";\n\t\t// TODO: Figure out if there's any situation where we don't want to reset the transaction\n\t\treset?: boolean;\n\t\tpriority?: MessagePriority;\n\t\ttag?: any;\n\t};\n\nexport type TransactionReducer = (\n\ttransaction: Transaction,\n\tsource: \"queue\" | \"active\",\n) => TransactionReducerResult;\n"],
5
- "mappings": "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",
5
+ "mappings": "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",
6
6
  "names": ["import_serialapi"]
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 });
@@ -23,6 +24,9 @@ __export(Statistics_exports, {
23
24
  module.exports = __toCommonJS(Statistics_exports);
24
25
  var import_shared = require("@zwave-js/shared");
25
26
  class StatisticsHost {
27
+ static {
28
+ __name(this, "StatisticsHost");
29
+ }
26
30
  _statistics;
27
31
  get statistics() {
28
32
  if (!this._statistics)
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/lib/driver/Statistics.ts"],
4
4
  "sourcesContent": ["import { throttle } from \"@zwave-js/shared\";\nimport type EventEmitter from \"node:events\";\n\n/** Mixin to provide statistics functionality. Requires the base class to extend EventEmitter. */\nexport abstract class StatisticsHost<T> {\n\tprotected abstract createEmpty(): T;\n\n\tprivate _statistics: T | undefined;\n\tpublic get statistics(): Readonly<T> {\n\t\tif (!this._statistics) this.resetStatistics();\n\t\treturn Object.freeze(this._statistics!);\n\t}\n\n\tpublic resetStatistics(): void {\n\t\tthis.updateStatistics(() => this.createEmpty());\n\t}\n\n\t/** Can be overridden in derived classes to specify additional args to be included in the statistics event callback. */\n\tprotected getAdditionalEventArgs(): any[] {\n\t\treturn [];\n\t}\n\n\tprivate _emitUpdate: ((stat: T) => void) | undefined;\n\tpublic updateStatistics(updater: (current: Readonly<T>) => T): void {\n\t\tthis._statistics = updater(this._statistics ?? this.createEmpty());\n\t\tif (!this._emitUpdate) {\n\t\t\tthis._emitUpdate = throttle(\n\t\t\t\t(this as unknown as EventEmitter).emit.bind(\n\t\t\t\t\tthis,\n\t\t\t\t\t\"statistics updated\",\n\t\t\t\t\t...this.getAdditionalEventArgs(),\n\t\t\t\t),\n\t\t\t\t250,\n\t\t\t\ttrue,\n\t\t\t);\n\t\t}\n\t\tthis._emitUpdate(this._statistics);\n\t}\n\n\tpublic incrementStatistics(property: keyof T): void {\n\t\tthis.updateStatistics((s) => {\n\t\t\tconst value = s[property];\n\t\t\tif (typeof value === \"number\") {\n\t\t\t\treturn {\n\t\t\t\t\t...s,\n\t\t\t\t\t[property]: value + 1,\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\treturn s;\n\t\t\t}\n\t\t});\n\t}\n}\n\nexport interface StatisticsEventCallbacks<T> {\n\t\"statistics updated\": (statistics: Readonly<T>) => void;\n}\n\nexport interface StatisticsEventCallbacksWithSelf<TSelf, TStats> {\n\t\"statistics updated\": (self: TSelf, statistics: Readonly<TStats>) => void;\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;;;;;AAAA,oBAAyB;AAInB,MAAgB,eAAc;EAG3B;EACR,IAAW,aAAU;AACpB,QAAI,CAAC,KAAK;AAAa,WAAK,gBAAe;AAC3C,WAAO,OAAO,OAAO,KAAK,WAAY;EACvC;EAEO,kBAAe;AACrB,SAAK,iBAAiB,MAAM,KAAK,YAAW,CAAE;EAC/C;;EAGU,yBAAsB;AAC/B,WAAO,CAAA;EACR;EAEQ;EACD,iBAAiB,SAAoC;AAC3D,SAAK,cAAc,QAAQ,KAAK,eAAe,KAAK,YAAW,CAAE;AACjE,QAAI,CAAC,KAAK,aAAa;AACtB,WAAK,kBAAc,wBACjB,KAAiC,KAAK,KACtC,MACA,sBACA,GAAG,KAAK,uBAAsB,CAAE,GAEjC,KACA,IAAI;IAEN;AACA,SAAK,YAAY,KAAK,WAAW;EAClC;EAEO,oBAAoB,UAAiB;AAC3C,SAAK,iBAAiB,CAAC,MAAK;AAC3B,YAAM,QAAQ,EAAE,QAAQ;AACxB,UAAI,OAAO,UAAU,UAAU;AAC9B,eAAO;UACN,GAAG;UACH,CAAC,QAAQ,GAAG,QAAQ;;MAEtB,OAAO;AACN,eAAO;MACR;IACD,CAAC;EACF;;",
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;;;;;AAAA,oBAAyB;AAInB,MAAgB,eAAc;EAJpC,OAIoC;;;EAG3B;EACR,IAAW,aAAU;AACpB,QAAI,CAAC,KAAK;AAAa,WAAK,gBAAe;AAC3C,WAAO,OAAO,OAAO,KAAK,WAAY;EACvC;EAEO,kBAAe;AACrB,SAAK,iBAAiB,MAAM,KAAK,YAAW,CAAE;EAC/C;;EAGU,yBAAsB;AAC/B,WAAO,CAAA;EACR;EAEQ;EACD,iBAAiB,SAAoC;AAC3D,SAAK,cAAc,QAAQ,KAAK,eAAe,KAAK,YAAW,CAAE;AACjE,QAAI,CAAC,KAAK,aAAa;AACtB,WAAK,kBAAc,wBACjB,KAAiC,KAAK,KACtC,MACA,sBACA,GAAG,KAAK,uBAAsB,CAAE,GAEjC,KACA,IAAI;IAEN;AACA,SAAK,YAAY,KAAK,WAAW;EAClC;EAEO,oBAAoB,UAAiB;AAC3C,SAAK,iBAAiB,CAAC,MAAK;AAC3B,YAAM,QAAQ,EAAE,QAAQ;AACxB,UAAI,OAAO,UAAU,UAAU;AAC9B,eAAO;UACN,GAAG;UACH,CAAC,QAAQ,GAAG,QAAQ;;MAEtB,OAAO;AACN,eAAO;MACR;IACD,CAAC;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 });
@@ -31,9 +32,11 @@ var import_sorted_list = require("alcalzone-shared/sorted-list");
31
32
  function getTaskName(task) {
32
33
  return `${task.name ?? (task.tag && JSON.stringify(task.tag)) ?? "unnamed"} (ID ${task.id})`;
33
34
  }
35
+ __name(getTaskName, "getTaskName");
34
36
  function isTaskBuilder(obj) {
35
37
  return typeof obj === "object" && typeof obj.task === "function" && typeof obj.priority === "number";
36
38
  }
39
+ __name(isTaskBuilder, "isTaskBuilder");
37
40
  var TaskPriority;
38
41
  (function(TaskPriority2) {
39
42
  TaskPriority2[TaskPriority2["Highest"] = 0] = "Highest";
@@ -74,7 +77,11 @@ function compareTasks(a, b) {
74
77
  return -1;
75
78
  return Math.sign(b.id - a.id);
76
79
  }
80
+ __name(compareTasks, "compareTasks");
77
81
  class TaskScheduler {
82
+ static {
83
+ __name(this, "TaskScheduler");
84
+ }
78
85
  verbose;
79
86
  constructor(verbose = false) {
80
87
  this.verbose = verbose;
@@ -278,7 +285,7 @@ class TaskScheduler {
278
285
  if (this.verbose) {
279
286
  console.log(`Stepping through task: ${getTaskName(this._currentTask)}`);
280
287
  }
281
- const cleanupCurrentTask = async () => {
288
+ const cleanupCurrentTask = /* @__PURE__ */ __name(async () => {
282
289
  if (this._currentTask) {
283
290
  this._tasks.remove(this._currentTask);
284
291
  await this._currentTask.reset();
@@ -290,7 +297,7 @@ class TaskScheduler {
290
297
  }
291
298
  this._currentTask = void 0;
292
299
  }
293
- };
300
+ }, "cleanupCurrentTask");
294
301
  waitFor = void 0;
295
302
  let stepResult;
296
303
  try {