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
@@ -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
  var import_node_util = require("node:util");
29
30
  var import_NetworkCache = require("../driver/NetworkCache.js");
30
31
  class Endpoint {
32
+ static {
33
+ __name(this, "Endpoint");
34
+ }
31
35
  nodeId;
32
36
  driver;
33
37
  index;
@@ -37,12 +41,12 @@ class Endpoint {
37
41
  this.index = index;
38
42
  this._implementedCommandClasses = new import_core.CacheBackedMap(this.driver.networkCache, {
39
43
  prefix: import_NetworkCache.cacheKeys.node(this.nodeId).endpoint(this.index)._ccBaseKey,
40
- suffixSerializer: (cc) => (0, import_shared.num2hex)(cc),
41
- suffixDeserializer: (key) => {
44
+ suffixSerializer: /* @__PURE__ */ __name((cc) => (0, import_shared.num2hex)(cc), "suffixSerializer"),
45
+ suffixDeserializer: /* @__PURE__ */ __name((key) => {
42
46
  const ccId = parseInt(key, 16);
43
47
  if (ccId in import_core.CommandClasses)
44
48
  return ccId;
45
- }
49
+ }, "suffixDeserializer")
46
50
  });
47
51
  if (deviceClass)
48
52
  this.deviceClass = deviceClass;
@@ -216,7 +220,7 @@ class Endpoint {
216
220
  }
217
221
  _commandClassAPIs = /* @__PURE__ */ new Map();
218
222
  _commandClassAPIsProxy = new Proxy(this._commandClassAPIs, {
219
- get: (target, ccNameOrId) => {
223
+ get: /* @__PURE__ */ __name((target, ccNameOrId) => {
220
224
  if (process.env.NODE_ENV === "test" && typeof ccNameOrId === "string" && (ccNameOrId === "$$typeof" || ccNameOrId === "constructor" || ccNameOrId.includes("@@__IMMUTABLE"))) {
221
225
  return void 0;
222
226
  }
@@ -238,7 +242,7 @@ class Endpoint {
238
242
  }
239
243
  return target.get(ccId);
240
244
  }
241
- }
245
+ }, "get")
242
246
  });
243
247
  /**
244
248
  * Used to iterate over the commandClasses API without throwing errors by accessing unsupported CCs
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/lib/node/Endpoint.ts"],
4
4
  "sourcesContent": ["import {\n\ttype APIMethodsOf,\n\tCCAPI,\n\ttype CCAPIs,\n\ttype CCConstructor,\n\ttype CCNameOrId,\n\ttype CCToAPI,\n\tCommandClass,\n\tgetCommandClassStatic,\n\tnormalizeCCNameOrId,\n} from \"@zwave-js/cc\";\nimport { ZWavePlusCCValues } from \"@zwave-js/cc/ZWavePlusCC\";\nimport type {\n\tControlsCC,\n\tEndpointId,\n\tGetCCs,\n\tIsCCSecure,\n\tMaybeNotKnown,\n\tModifyCCs,\n\tSupportsCC,\n} from \"@zwave-js/core\";\nimport {\n\tBasicDeviceClass,\n\tCacheBackedMap,\n\ttype CommandClassInfo,\n\tCommandClasses,\n\tGraphNode,\n\tZWaveError,\n\tZWaveErrorCodes,\n\tactuatorCCs,\n\tgetCCName,\n} from \"@zwave-js/core\";\nimport { getEnumMemberName, num2hex } from \"@zwave-js/shared\";\nimport { isDeepStrictEqual } from \"node:util\";\nimport type { Driver } from \"../driver/Driver.js\";\nimport { cacheKeys } from \"../driver/NetworkCache.js\";\nimport type { DeviceClass } from \"./DeviceClass.js\";\nimport type { EndpointDump } from \"./Dump.js\";\nimport type { ZWaveNode } from \"./Node.js\";\n\n/**\n * Represents a physical endpoint of a Z-Wave node. This can either be the root\n * device itself (index 0) or a more specific endpoint like a single plug.\n *\n * Each endpoint may have different capabilities (device class/supported CCs)\n */\nexport class Endpoint\n\timplements EndpointId, SupportsCC, ControlsCC, IsCCSecure, ModifyCCs, GetCCs\n{\n\tpublic constructor(\n\t\t/** The id of the node this endpoint belongs to */\n\t\tpublic readonly nodeId: number,\n\t\t/** The driver instance this endpoint belongs to */\n\t\tprotected readonly driver: Driver,\n\t\t/** The index of this endpoint. 0 for the root device, 1+ otherwise */\n\t\tpublic readonly index: number,\n\t\tdeviceClass?: DeviceClass,\n\t\tsupportedCCs?: CommandClasses[],\n\t) {\n\t\t// Initialize class fields\n\t\tthis._implementedCommandClasses = new CacheBackedMap(\n\t\t\tthis.driver.networkCache,\n\t\t\t{\n\t\t\t\tprefix:\n\t\t\t\t\tcacheKeys.node(this.nodeId).endpoint(this.index)._ccBaseKey,\n\t\t\t\tsuffixSerializer: (cc: CommandClasses) => num2hex(cc),\n\t\t\t\tsuffixDeserializer: (key: string) => {\n\t\t\t\t\tconst ccId = parseInt(key, 16);\n\t\t\t\t\tif (ccId in CommandClasses) return ccId;\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\n\t\t// Optionally initialize the device class\n\t\tif (deviceClass) this.deviceClass = deviceClass;\n\n\t\t// Add optional CCs\n\t\tif (supportedCCs != undefined) {\n\t\t\tfor (const cc of supportedCCs) {\n\t\t\t\tthis.addCC(cc, { isSupported: true });\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Required by {@link IZWaveEndpoint} */\n\tpublic readonly virtual = false;\n\n\t/**\n\t * Only used for endpoints which store their device class differently than nodes.\n\t * DO NOT ACCESS directly!\n\t */\n\tprivate _deviceClass: MaybeNotKnown<DeviceClass>;\n\tpublic get deviceClass(): MaybeNotKnown<DeviceClass> {\n\t\tif (this.index > 0) {\n\t\t\treturn this._deviceClass;\n\t\t} else {\n\t\t\treturn this.driver.cacheGet(\n\t\t\t\tcacheKeys.node(this.nodeId).deviceClass,\n\t\t\t);\n\t\t}\n\t}\n\tprotected set deviceClass(deviceClass: MaybeNotKnown<DeviceClass>) {\n\t\tif (this.index > 0) {\n\t\t\tthis._deviceClass = deviceClass;\n\t\t} else {\n\t\t\tthis.driver.cacheSet(\n\t\t\t\tcacheKeys.node(this.nodeId).deviceClass,\n\t\t\t\tdeviceClass,\n\t\t\t);\n\t\t}\n\t}\n\n\t/** Can be used to distinguish multiple endpoints of a node */\n\tpublic get endpointLabel(): string | undefined {\n\t\treturn this.tryGetNode()?.deviceConfig?.endpoints?.get(this.index)\n\t\t\t?.label;\n\t}\n\n\t/** Resets all stored information of this endpoint */\n\tprotected reset(): void {\n\t\tthis._implementedCommandClasses.clear();\n\t\tthis._commandClassAPIs.clear();\n\t}\n\n\tprivate _implementedCommandClasses: Map<\n\t\tCommandClasses,\n\t\tReadonly<CommandClassInfo>\n\t>;\n\n\t/**\n\t * @internal\n\t * Information about the implemented Command Classes of this endpoint.\n\t */\n\tpublic get implementedCommandClasses(): ReadonlyMap<\n\t\tCommandClasses,\n\t\tReadonly<CommandClassInfo>\n\t> {\n\t\treturn this._implementedCommandClasses;\n\t}\n\n\tpublic getCCs(): Iterable<[ccId: CommandClasses, info: CommandClassInfo]> {\n\t\treturn this._implementedCommandClasses.entries();\n\t}\n\n\t/**\n\t * Adds a CC to the list of command classes implemented by the endpoint or updates the information.\n\t * You shouldn't need to call this yourself.\n\t * @param info The information about the command class. This is merged with existing information.\n\t */\n\tpublic addCC(cc: CommandClasses, info: Partial<CommandClassInfo>): void {\n\t\t// Endpoints cannot support Multi Channel CC\n\t\tif (this.index > 0 && cc === CommandClasses[\"Multi Channel\"]) return;\n\n\t\tconst original = this._implementedCommandClasses.get(cc);\n\t\tconst updated = Object.assign(\n\t\t\t{},\n\t\t\toriginal ?? {\n\t\t\t\tisSupported: false,\n\t\t\t\tisControlled: false,\n\t\t\t\tsecure: false,\n\t\t\t\tversion: 0,\n\t\t\t},\n\t\t\tinfo,\n\t\t);\n\t\tif (!isDeepStrictEqual(original, updated)) {\n\t\t\tthis._implementedCommandClasses.set(cc, updated);\n\t\t}\n\t}\n\n\t/** Removes a CC from the list of command classes implemented by the endpoint */\n\tpublic removeCC(cc: CommandClasses): void {\n\t\tthis._implementedCommandClasses.delete(cc);\n\t}\n\n\t/** Tests if this endpoint supports the given CommandClass */\n\tpublic supportsCC(cc: CommandClasses): boolean {\n\t\treturn !!this._implementedCommandClasses.get(cc)?.isSupported;\n\t}\n\n\t/** Tests if this endpoint supports or controls the given CC only securely */\n\tpublic isCCSecure(cc: CommandClasses): boolean {\n\t\treturn !!this._implementedCommandClasses.get(cc)?.secure;\n\t}\n\n\t/** Tests if this endpoint controls the given CommandClass */\n\tpublic controlsCC(cc: CommandClasses): boolean {\n\t\treturn !!this._implementedCommandClasses.get(cc)?.isControlled;\n\t}\n\n\t/**\n\t * Checks if this endpoint is allowed to support Basic CC per the specification.\n\t * This depends on the device type and the other supported CCs\n\t */\n\tpublic maySupportBasicCC(): boolean {\n\t\t// Basic CC must not be offered if any other actuator CC is supported\n\t\tif (actuatorCCs.some((cc) => this.supportsCC(cc))) {\n\t\t\treturn false;\n\t\t}\n\t\t// ...or the device class forbids it\n\t\treturn this.deviceClass?.specific.maySupportBasicCC\n\t\t\t?? this.deviceClass?.generic.maySupportBasicCC\n\t\t\t?? true;\n\t}\n\n\t/** Determines if support for a CC was force-removed via config file */\n\tpublic wasCCRemovedViaConfig(cc: CommandClasses): boolean {\n\t\tif (this.supportsCC(cc)) return false;\n\n\t\tconst compatConfig = this.tryGetNode()?.deviceConfig?.compat;\n\t\tif (!compatConfig) return false;\n\n\t\tconst removedEndpoints = compatConfig.removeCCs?.get(cc);\n\t\tif (!removedEndpoints) return false;\n\n\t\treturn removedEndpoints == \"*\" || removedEndpoints.includes(this.index);\n\t}\n\n\t/**\n\t * Retrieves the version of the given CommandClass this endpoint implements.\n\t * Returns 0 if the CC is not supported.\n\t */\n\tpublic getCCVersion(cc: CommandClasses): number {\n\t\tconst ccInfo = this._implementedCommandClasses.get(cc);\n\t\tconst ret = ccInfo?.version ?? 0;\n\n\t\t// The specs are contracting themselves here...\n\t\t//\n\t\t// CC Control Specification:\n\t\t// A controlling node interviewing a Multi Channel End Point\n\t\t// MUST request the End Point\u2019s Command Class version from the Root Device\n\t\t// if the End Point does not advertise support for the Version Command Class.\n\t\t// - vs -\n\t\t// Management CC Specification:\n\t\t// [...] the Version Command Class SHOULD NOT be supported by individual End Points\n\t\t// The Root Device MUST respond to Version requests for any Command Class\n\t\t// implemented by the Multi Channel device; also in cases where the actual\n\t\t// Command Class is only provided by an End Point.\n\t\t//\n\t\t// We go with the 2nd interpretation since the other either results in\n\t\t// an unnecessary Version CC interview for each endpoint or an incorrect V1 for endpoints\n\n\t\tif (ret === 0 && this.index > 0) {\n\t\t\treturn this.tryGetNode()!.getCCVersion(cc);\n\t\t}\n\t\treturn ret;\n\t}\n\n\t/**\n\t * Creates an instance of the given CC and links it to this endpoint.\n\t * Throws if the CC is neither supported nor controlled by the endpoint.\n\t */\n\tpublic createCCInstance<T extends CommandClass>(\n\t\tcc: CommandClasses | CCConstructor<T>,\n\t): T | undefined {\n\t\tconst ccId = typeof cc === \"number\" ? cc : getCommandClassStatic(cc);\n\t\tif (!this.supportsCC(ccId) && !this.controlsCC(ccId)) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t`Cannot create an instance of the unsupported CC ${\n\t\t\t\t\tCommandClasses[ccId]\n\t\t\t\t} (${num2hex(ccId)})`,\n\t\t\t\tZWaveErrorCodes.CC_NotSupported,\n\t\t\t);\n\t\t}\n\t\treturn CommandClass.createInstanceUnchecked(this, cc);\n\t}\n\n\t/**\n\t * Creates an instance of the given CC and links it to this endpoint.\n\t * Returns `undefined` if the CC is neither supported nor controlled by the endpoint.\n\t */\n\tpublic createCCInstanceUnsafe<T extends CommandClass>(\n\t\tcc: CommandClasses | CCConstructor<T>,\n\t): T | undefined {\n\t\tconst ccId = typeof cc === \"number\" ? cc : getCommandClassStatic(cc);\n\t\tif (this.supportsCC(ccId) || this.controlsCC(ccId)) {\n\t\t\treturn CommandClass.createInstanceUnchecked(this, cc);\n\t\t}\n\t}\n\n\t/** Returns instances for all CCs this endpoint supports, that should be interviewed, and that are implemented in this library */\n\tpublic getSupportedCCInstances(): readonly CommandClass[] {\n\t\tlet supportedCCInstances = [...this.implementedCommandClasses.keys()]\n\t\t\t// Don't interview CCs the node or endpoint only controls\n\t\t\t.filter((cc) => this.supportsCC(cc))\n\t\t\t// Filter out CCs we don't implement\n\t\t\t.map((cc) => this.createCCInstance(cc))\n\t\t\t.filter((instance) => !!instance);\n\t\t// For endpoint interviews, we skip some CCs\n\t\tif (this.index > 0) {\n\t\t\tsupportedCCInstances = supportedCCInstances.filter(\n\t\t\t\t(instance) => !instance.skipEndpointInterview(),\n\t\t\t);\n\t\t}\n\t\treturn supportedCCInstances;\n\t}\n\n\t/** Builds the dependency graph used to automatically determine the order of CC interviews */\n\tpublic buildCCInterviewGraph(\n\t\tskipCCs: CommandClasses[],\n\t): GraphNode<CommandClasses>[] {\n\t\tconst supportedCCs = this.getSupportedCCInstances()\n\t\t\t.map((instance) => instance.ccId)\n\t\t\t.filter((ccId) => !skipCCs.includes(ccId));\n\n\t\t// Create GraphNodes from all supported CCs that should not be skipped\n\t\tconst ret = supportedCCs.map((cc) => new GraphNode(cc));\n\t\t// Create the dependencies\n\t\tfor (const node of ret) {\n\t\t\tconst instance = this.createCCInstance(node.value)!;\n\t\t\tfor (\n\t\t\t\tconst requiredCCId of instance.determineRequiredCCInterviews()\n\t\t\t) {\n\t\t\t\tconst requiredCC = ret.find(\n\t\t\t\t\t(instance) => instance.value === requiredCCId,\n\t\t\t\t);\n\t\t\t\tif (requiredCC) node.edges.add(requiredCC);\n\t\t\t}\n\t\t}\n\t\treturn ret;\n\t}\n\n\t/**\n\t * @internal\n\t * Creates an API instance for a given command class. Throws if no API is defined.\n\t * @param ccId The command class to create an API instance for\n\t * @param requireSupport Whether accessing the API should throw if it is not supported by the node.\n\t */\n\tpublic createAPI<T extends CommandClasses>(\n\t\tccId: T,\n\t\trequireSupport: boolean = true,\n\t): CommandClasses extends T ? CCAPI : CCToAPI<T> {\n\t\t// Trust me on this, TypeScript :)\n\t\treturn CCAPI.create(ccId, this.driver, this, requireSupport) as any;\n\t}\n\n\tprivate _commandClassAPIs = new Map<CommandClasses, CCAPI>();\n\tprivate _commandClassAPIsProxy = new Proxy(this._commandClassAPIs, {\n\t\tget: (target, ccNameOrId: string | symbol) => {\n\t\t\t// Avoid ultra-weird error messages during testing\n\t\t\tif (\n\t\t\t\tprocess.env.NODE_ENV === \"test\"\n\t\t\t\t&& typeof ccNameOrId === \"string\"\n\t\t\t\t&& (ccNameOrId === \"$$typeof\"\n\t\t\t\t\t|| ccNameOrId === \"constructor\"\n\t\t\t\t\t|| ccNameOrId.includes(\"@@__IMMUTABLE\"))\n\t\t\t) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tif (typeof ccNameOrId === \"symbol\") {\n\t\t\t\t// Allow access to the iterator symbol\n\t\t\t\tif (ccNameOrId === Symbol.iterator) {\n\t\t\t\t\treturn this.commandClassesIterator;\n\t\t\t\t} else if (ccNameOrId === Symbol.toStringTag) {\n\t\t\t\t\treturn \"[object Object]\";\n\t\t\t\t}\n\t\t\t\t// ignore all other symbols\n\t\t\t\treturn undefined;\n\t\t\t} else {\n\t\t\t\t// The command classes are exposed to library users by their name or the ID\n\t\t\t\tconst ccId = normalizeCCNameOrId(ccNameOrId);\n\t\t\t\tif (ccId == undefined) {\n\t\t\t\t\tthrow new ZWaveError(\n\t\t\t\t\t\t`Command Class ${ccNameOrId} is not implemented!`,\n\t\t\t\t\t\tZWaveErrorCodes.CC_NotImplemented,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// When accessing a CC API for the first time, we need to create it\n\t\t\t\tif (!target.has(ccId)) {\n\t\t\t\t\tconst api = CCAPI.create(ccId, this.driver, this);\n\t\t\t\t\ttarget.set(ccId, api);\n\t\t\t\t}\n\t\t\t\treturn target.get(ccId);\n\t\t\t}\n\t\t},\n\t});\n\n\t/**\n\t * Used to iterate over the commandClasses API without throwing errors by accessing unsupported CCs\n\t */\n\tprivate readonly commandClassesIterator: () => Iterator<CCAPI> = function*(\n\t\tthis: Endpoint,\n\t) {\n\t\tfor (const cc of this.implementedCommandClasses.keys()) {\n\t\t\tif (this.supportsCC(cc)) yield (this.commandClasses as any)[cc];\n\t\t}\n\t}.bind(this);\n\n\t/**\n\t * Provides access to simplified APIs that are tailored to specific CCs.\n\t * Make sure to check support of each API using `API.isSupported()` since\n\t * all other API calls will throw if the API is not supported\n\t */\n\tpublic get commandClasses(): CCAPIs {\n\t\treturn this._commandClassAPIsProxy as unknown as CCAPIs;\n\t}\n\n\t/** Allows checking whether a CC API is supported before calling it with {@link Endpoint.invokeCCAPI} */\n\tpublic supportsCCAPI(cc: CCNameOrId): boolean {\n\t\t// No need to validate the `cc` parameter, the following line will throw for invalid CCs\n\t\treturn ((this.commandClasses as any)[cc] as CCAPI).isSupported();\n\t}\n\n\t/**\n\t * Allows dynamically calling any CC API method on this endpoint by CC ID and method name.\n\t * Use {@link Endpoint.supportsCCAPI} to check support first.\n\t */\n\tpublic invokeCCAPI<\n\t\tCC extends CCNameOrId,\n\t\tTMethod extends keyof TAPI,\n\t\tTAPI extends Record<\n\t\t\tstring,\n\t\t\t(...args: any[]) => any\n\t\t> = CommandClasses extends CC ? any\n\t\t\t: Omit<CCNameOrId, CommandClasses> extends CC ? any\n\t\t\t: APIMethodsOf<CC>,\n\t>(\n\t\tcc: CC,\n\t\tmethod: TMethod,\n\t\t...args: Parameters<TAPI[TMethod]>\n\t): ReturnType<TAPI[TMethod]> {\n\t\t// No need to validate the `cc` parameter, the following line will throw for invalid CCs\n\t\tconst CCAPI = (this.commandClasses as any)[cc];\n\t\tconst ccId = normalizeCCNameOrId(cc)!;\n\t\tconst ccName = getCCName(ccId);\n\t\tif (!CCAPI) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t`The API for the ${ccName} CC does not exist or is not implemented!`,\n\t\t\t\tZWaveErrorCodes.CC_NoAPI,\n\t\t\t);\n\t\t}\n\n\t\tconst apiMethod = CCAPI[method];\n\t\tif (typeof apiMethod !== \"function\") {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t`Method \"${method as string}\" does not exist on the API for the ${ccName} CC!`,\n\t\t\t\tZWaveErrorCodes.CC_NotImplemented,\n\t\t\t);\n\t\t}\n\t\treturn apiMethod.apply(CCAPI, args);\n\t}\n\n\t/**\n\t * Returns the node this endpoint belongs to (or undefined if the node doesn't exist)\n\t */\n\tpublic tryGetNode(): ZWaveNode | undefined {\n\t\treturn this.driver.controller.nodes.get(this.nodeId);\n\t}\n\n\t/** Z-Wave+ Icon (for management) */\n\tpublic get installerIcon(): MaybeNotKnown<number> {\n\t\treturn this.tryGetNode()?.getValue(\n\t\t\tZWavePlusCCValues.installerIcon.endpoint(this.index),\n\t\t);\n\t}\n\n\t/** Z-Wave+ Icon (for end users) */\n\tpublic get userIcon(): MaybeNotKnown<number> {\n\t\treturn this.tryGetNode()?.getValue(\n\t\t\tZWavePlusCCValues.userIcon.endpoint(this.index),\n\t\t);\n\t}\n\n\t/**\n\t * @internal\n\t * Returns a dump of this endpoint's information for debugging purposes\n\t */\n\tpublic createEndpointDump(): EndpointDump {\n\t\tconst ret: EndpointDump = {\n\t\t\tindex: this.index,\n\t\t\tdeviceClass: \"unknown\",\n\t\t\tcommandClasses: {},\n\t\t\tmaySupportBasicCC: this.maySupportBasicCC(),\n\t\t};\n\n\t\tif (this.deviceClass) {\n\t\t\tret.deviceClass = {\n\t\t\t\tbasic: {\n\t\t\t\t\tkey: this.deviceClass.basic,\n\t\t\t\t\tlabel: getEnumMemberName(\n\t\t\t\t\t\tBasicDeviceClass,\n\t\t\t\t\t\tthis.deviceClass.basic,\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t\tgeneric: {\n\t\t\t\t\tkey: this.deviceClass.generic.key,\n\t\t\t\t\tlabel: this.deviceClass.generic.label,\n\t\t\t\t},\n\t\t\t\tspecific: {\n\t\t\t\t\tkey: this.deviceClass.specific.key,\n\t\t\t\t\tlabel: this.deviceClass.specific.label,\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\tfor (const [ccId, info] of this._implementedCommandClasses) {\n\t\t\tret.commandClasses[getCCName(ccId)] = { ...info, values: [] };\n\t\t}\n\n\t\tfor (const [prop, value] of Object.entries(ret)) {\n\t\t\t// @ts-expect-error\n\t\t\tif (value === undefined) delete ret[prop];\n\t\t}\n\n\t\treturn ret;\n\t}\n}\n"],
5
- "mappings": "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",
5
+ "mappings": "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",
6
6
  "names": ["instance", "CCAPI"]
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,7 @@ const healthCheckTestFrameCount = 10;
32
33
  function healthCheckRatingToWord(rating) {
33
34
  return rating >= 10 ? "perfect" : rating >= 6 ? "good" : rating >= 4 ? "acceptable" : rating >= 1 ? "bad" : "dead";
34
35
  }
36
+ __name(healthCheckRatingToWord, "healthCheckRatingToWord");
35
37
  function formatLifelineHealthCheckRound(round, numRounds, result) {
36
38
  const ret = [
37
39
  `\xB7 round ${round.toString().padStart(Math.floor(Math.log10(numRounds) + 1), " ")} - rating: ${result.rating} (${healthCheckRatingToWord(result.rating)})`,
@@ -43,6 +45,7 @@ function formatLifelineHealthCheckRound(round, numRounds, result) {
43
45
  ].filter((line) => !!line).join("\n");
44
46
  return ret;
45
47
  }
48
+ __name(formatLifelineHealthCheckRound, "formatLifelineHealthCheckRound");
46
49
  function formatLifelineHealthCheckSummary(summary) {
47
50
  let ret = `
48
51
  rating: ${summary.rating} (${healthCheckRatingToWord(summary.rating)})`;
@@ -57,6 +60,7 @@ Check rounds:
57
60
  ${summary.results.map((r, i) => formatLifelineHealthCheckRound(i + 1, summary.results.length, r)).join("\n \n")}`;
58
61
  return ret.trim();
59
62
  }
63
+ __name(formatLifelineHealthCheckSummary, "formatLifelineHealthCheckSummary");
60
64
  function formatRouteHealthCheckRound(sourceNodeId, targetNodeId, round, numRounds, result) {
61
65
  const ret = [
62
66
  `\xB7 round ${round.toString().padStart(Math.floor(Math.log10(numRounds) + 1), " ")} - rating: ${result.rating} (${healthCheckRatingToWord(result.rating)})`,
@@ -65,6 +69,7 @@ function formatRouteHealthCheckRound(sourceNodeId, targetNodeId, round, numRound
65
69
  ].filter((line) => !!line).join("\n");
66
70
  return ret;
67
71
  }
72
+ __name(formatRouteHealthCheckRound, "formatRouteHealthCheckRound");
68
73
  function formatRouteHealthCheckSummary(sourceNodeId, targetNodeId, summary) {
69
74
  let ret = `
70
75
  rating: ${summary.rating} (${healthCheckRatingToWord(summary.rating)})`;
@@ -79,6 +84,7 @@ Check rounds:
79
84
  ${summary.results.map((r, i) => formatRouteHealthCheckRound(sourceNodeId, targetNodeId, i + 1, summary.results.length, r)).join("\n \n")}`;
80
85
  return ret.trim();
81
86
  }
87
+ __name(formatRouteHealthCheckSummary, "formatRouteHealthCheckSummary");
82
88
  // Annotate the CommonJS export names for ESM import in node:
83
89
  0 && (module.exports = {
84
90
  formatLifelineHealthCheckRound,
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/lib/node/HealthCheck.ts"],
4
4
  "sourcesContent": ["import { Powerlevel } from \"@zwave-js/cc/safe\";\nimport { getEnumMemberName } from \"@zwave-js/shared/safe\";\nimport type {\n\tLifelineHealthCheckResult,\n\tLifelineHealthCheckSummary,\n\tRouteHealthCheckResult,\n\tRouteHealthCheckSummary,\n} from \"./_Types.js\";\n\nexport const healthCheckTestFrameCount = 10;\n\nexport function healthCheckRatingToWord(rating: number): string {\n\treturn rating >= 10\n\t\t? \"perfect\"\n\t\t: rating >= 6\n\t\t? \"good\"\n\t\t: rating >= 4\n\t\t? \"acceptable\"\n\t\t: rating >= 1\n\t\t? \"bad\"\n\t\t: \"dead\";\n}\n\nexport function formatLifelineHealthCheckRound(\n\tround: number,\n\tnumRounds: number,\n\tresult: LifelineHealthCheckResult,\n): string {\n\tconst ret = [\n\t\t`\u00B7 round ${\n\t\t\tround.toString().padStart(\n\t\t\t\tMath.floor(Math.log10(numRounds) + 1),\n\t\t\t\t\" \",\n\t\t\t)\n\t\t} - rating: ${result.rating} (${\n\t\t\thealthCheckRatingToWord(\n\t\t\t\tresult.rating,\n\t\t\t)\n\t\t})`,\n\t\t` failed pings \u2192 node: ${result.failedPingsNode}/${healthCheckTestFrameCount}`,\n\t\t` max. latency: ${result.latency.toFixed(1)} ms`,\n\t\tresult.routeChanges != undefined\n\t\t\t? ` route changes: ${result.routeChanges}`\n\t\t\t: \"\",\n\t\tresult.snrMargin != undefined\n\t\t\t? ` SNR margin: ${result.snrMargin} dBm`\n\t\t\t: \"\",\n\t\tresult.failedPingsController != undefined\n\t\t\t? ` failed pings \u2192 controller: ${result.failedPingsController}/${healthCheckTestFrameCount} at normal power`\n\t\t\t: result.minPowerlevel != undefined\n\t\t\t? ` min. node powerlevel w/o errors: ${\n\t\t\t\tgetEnumMemberName(\n\t\t\t\t\tPowerlevel,\n\t\t\t\t\tresult.minPowerlevel,\n\t\t\t\t)\n\t\t\t}`\n\t\t\t: \"\",\n\t]\n\t\t.filter((line) => !!line)\n\t\t.join(\"\\n\");\n\treturn ret;\n}\n\nexport function formatLifelineHealthCheckSummary(\n\tsummary: LifelineHealthCheckSummary,\n): string {\n\tlet ret = `\nrating: ${summary.rating} (${\n\t\thealthCheckRatingToWord(\n\t\t\tsummary.rating,\n\t\t)\n\t})`;\n\tconst numNeighbors = summary.results.at(-1)!.numNeighbors;\n\tif (numNeighbors != undefined) {\n\t\tret += `\nno. of routing neighbors: ${summary.results.at(-1)!.numNeighbors}`;\n\t}\n\n\tret += `\n\nCheck rounds:\n${\n\t\tsummary.results\n\t\t\t.map((r, i) =>\n\t\t\t\tformatLifelineHealthCheckRound(i + 1, summary.results.length, r)\n\t\t\t)\n\t\t\t.join(\"\\n \\n\")\n\t}`;\n\n\treturn ret.trim();\n}\n\nexport function formatRouteHealthCheckRound(\n\tsourceNodeId: number,\n\ttargetNodeId: number,\n\tround: number,\n\tnumRounds: number,\n\tresult: RouteHealthCheckResult,\n): string {\n\tconst ret = [\n\t\t`\u00B7 round ${\n\t\t\tround.toString().padStart(\n\t\t\t\tMath.floor(Math.log10(numRounds) + 1),\n\t\t\t\t\" \",\n\t\t\t)\n\t\t} - rating: ${result.rating} (${\n\t\t\thealthCheckRatingToWord(\n\t\t\t\tresult.rating,\n\t\t\t)\n\t\t})`,\n\t\tresult.failedPingsToTarget != undefined\n\t\t\t? ` failed pings ${sourceNodeId} \u2192 ${targetNodeId}: ${result.failedPingsToTarget}/${healthCheckTestFrameCount}`\n\t\t\t: result.minPowerlevelSource != undefined\n\t\t\t? ` Node ${sourceNodeId} min. powerlevel w/o errors: ${\n\t\t\t\tgetEnumMemberName(\n\t\t\t\t\tPowerlevel,\n\t\t\t\t\tresult.minPowerlevelSource,\n\t\t\t\t)\n\t\t\t}`\n\t\t\t: \"\",\n\t\tresult.failedPingsToSource != undefined\n\t\t\t? ` failed pings ${targetNodeId} \u2192 ${sourceNodeId}: ${result.failedPingsToSource}/${healthCheckTestFrameCount}`\n\t\t\t: result.minPowerlevelTarget != undefined\n\t\t\t? ` Node ${targetNodeId} min. powerlevel w/o errors: ${\n\t\t\t\tgetEnumMemberName(\n\t\t\t\t\tPowerlevel,\n\t\t\t\t\tresult.minPowerlevelTarget,\n\t\t\t\t)\n\t\t\t}`\n\t\t\t: \"\",\n\t]\n\t\t.filter((line) => !!line)\n\t\t.join(\"\\n\");\n\treturn ret;\n}\n\nexport function formatRouteHealthCheckSummary(\n\tsourceNodeId: number,\n\ttargetNodeId: number,\n\tsummary: RouteHealthCheckSummary,\n): string {\n\tlet ret = `\nrating: ${summary.rating} (${\n\t\thealthCheckRatingToWord(\n\t\t\tsummary.rating,\n\t\t)\n\t})`;\n\tconst numNeighbors = summary.results.at(-1)!.numNeighbors;\n\tif (numNeighbors != undefined) {\n\t\tret += `\nno. of routing neighbors: ${summary.results.at(-1)!.numNeighbors}`;\n\t}\n\n\tret += `\n\nCheck rounds:\n${\n\t\tsummary.results\n\t\t\t.map((r, i) =>\n\t\t\t\tformatRouteHealthCheckRound(\n\t\t\t\t\tsourceNodeId,\n\t\t\t\t\ttargetNodeId,\n\t\t\t\t\ti + 1,\n\t\t\t\t\tsummary.results.length,\n\t\t\t\t\tr,\n\t\t\t\t)\n\t\t\t)\n\t\t\t.join(\"\\n \\n\")\n\t}`;\n\n\treturn ret.trim();\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;AAAA,kBAA2B;AAC3B,IAAAA,eAAkC;AAQ3B,MAAM,4BAA4B;AAEnC,SAAU,wBAAwB,QAAc;AACrD,SAAO,UAAU,KACd,YACA,UAAU,IACV,SACA,UAAU,IACV,eACA,UAAU,IACV,QACA;AACJ;AAEM,SAAU,+BACf,OACA,WACA,QAAiC;AAEjC,QAAM,MAAM;IACX,cACC,MAAM,SAAQ,EAAG,SAChB,KAAK,MAAM,KAAK,MAAM,SAAS,IAAI,CAAC,GACpC,GAAG,CAEL,cAAc,OAAO,MAAM,KAC1B,wBACC,OAAO,MAAM,CAEf;IACA,2CAAsC,OAAO,eAAe,IAAI,yBAAyB;IACzF,sCAAsC,OAAO,QAAQ,QAAQ,CAAC,CAAC;IAC/D,OAAO,gBAAgB,SACpB,sCAAsC,OAAO,YAAY,KACzD;IACH,OAAO,aAAa,SACjB,sCAAsC,OAAO,SAAS,SACtD;IACH,OAAO,yBAAyB,SAC7B,2CAAsC,OAAO,qBAAqB,IAAI,yBAAyB,qBAC/F,OAAO,iBAAiB,SACxB,0CACD,gCACC,wBACA,OAAO,aAAa,CAEtB,KACE;IAEF,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,EACvB,KAAK,IAAI;AACX,SAAO;AACR;AAEM,SAAU,iCACf,SAAmC;AAEnC,MAAI,MAAM;4BACiB,QAAQ,MAAM,KACxC,wBACC,QAAQ,MAAM,CAEhB;AACA,QAAM,eAAe,QAAQ,QAAQ,GAAG,EAAE,EAAG;AAC7C,MAAI,gBAAgB,QAAW;AAC9B,WAAO;4BACmB,QAAQ,QAAQ,GAAG,EAAE,EAAG,YAAY;EAC/D;AAEA,SAAO;;;EAIN,QAAQ,QACN,IAAI,CAAC,GAAG,MACR,+BAA+B,IAAI,GAAG,QAAQ,QAAQ,QAAQ,CAAC,CAAC,EAEhE,KAAK,OAAO,CACf;AAEA,SAAO,IAAI,KAAI;AAChB;AAEM,SAAU,4BACf,cACA,cACA,OACA,WACA,QAA8B;AAE9B,QAAM,MAAM;IACX,cACC,MAAM,SAAQ,EAAG,SAChB,KAAK,MAAM,KAAK,MAAM,SAAS,IAAI,CAAC,GACpC,GAAG,CAEL,cAAc,OAAO,MAAM,KAC1B,wBACC,OAAO,MAAM,CAEf;IACA,OAAO,uBAAuB,SAC3B,kBAAkB,YAAY,WAAM,YAAY,UAAU,OAAO,mBAAmB,IAAI,yBAAyB,KACjH,OAAO,uBAAuB,SAC9B,UAAU,YAAY,oCACvB,gCACC,wBACA,OAAO,mBAAmB,CAE5B,KACE;IACH,OAAO,uBAAuB,SAC3B,kBAAkB,YAAY,WAAM,YAAY,UAAU,OAAO,mBAAmB,IAAI,yBAAyB,KACjH,OAAO,uBAAuB,SAC9B,UAAU,YAAY,oCACvB,gCACC,wBACA,OAAO,mBAAmB,CAE5B,KACE;IAEF,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,EACvB,KAAK,IAAI;AACX,SAAO;AACR;AAEM,SAAU,8BACf,cACA,cACA,SAAgC;AAEhC,MAAI,MAAM;4BACiB,QAAQ,MAAM,KACxC,wBACC,QAAQ,MAAM,CAEhB;AACA,QAAM,eAAe,QAAQ,QAAQ,GAAG,EAAE,EAAG;AAC7C,MAAI,gBAAgB,QAAW;AAC9B,WAAO;4BACmB,QAAQ,QAAQ,GAAG,EAAE,EAAG,YAAY;EAC/D;AAEA,SAAO;;;EAIN,QAAQ,QACN,IAAI,CAAC,GAAG,MACR,4BACC,cACA,cACA,IAAI,GACJ,QAAQ,QAAQ,QAChB,CAAC,CACD,EAED,KAAK,OAAO,CACf;AAEA,SAAO,IAAI,KAAI;AAChB;",
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;AAAA,kBAA2B;AAC3B,IAAAA,eAAkC;AAQ3B,MAAM,4BAA4B;AAEnC,SAAU,wBAAwB,QAAc;AACrD,SAAO,UAAU,KACd,YACA,UAAU,IACV,SACA,UAAU,IACV,eACA,UAAU,IACV,QACA;AACJ;AAVgB;AAYV,SAAU,+BACf,OACA,WACA,QAAiC;AAEjC,QAAM,MAAM;IACX,cACC,MAAM,SAAQ,EAAG,SAChB,KAAK,MAAM,KAAK,MAAM,SAAS,IAAI,CAAC,GACpC,GAAG,CAEL,cAAc,OAAO,MAAM,KAC1B,wBACC,OAAO,MAAM,CAEf;IACA,2CAAsC,OAAO,eAAe,IAAI,yBAAyB;IACzF,sCAAsC,OAAO,QAAQ,QAAQ,CAAC,CAAC;IAC/D,OAAO,gBAAgB,SACpB,sCAAsC,OAAO,YAAY,KACzD;IACH,OAAO,aAAa,SACjB,sCAAsC,OAAO,SAAS,SACtD;IACH,OAAO,yBAAyB,SAC7B,2CAAsC,OAAO,qBAAqB,IAAI,yBAAyB,qBAC/F,OAAO,iBAAiB,SACxB,0CACD,gCACC,wBACA,OAAO,aAAa,CAEtB,KACE;IAEF,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,EACvB,KAAK,IAAI;AACX,SAAO;AACR;AAtCgB;AAwCV,SAAU,iCACf,SAAmC;AAEnC,MAAI,MAAM;4BACiB,QAAQ,MAAM,KACxC,wBACC,QAAQ,MAAM,CAEhB;AACA,QAAM,eAAe,QAAQ,QAAQ,GAAG,EAAE,EAAG;AAC7C,MAAI,gBAAgB,QAAW;AAC9B,WAAO;4BACmB,QAAQ,QAAQ,GAAG,EAAE,EAAG,YAAY;EAC/D;AAEA,SAAO;;;EAIN,QAAQ,QACN,IAAI,CAAC,GAAG,MACR,+BAA+B,IAAI,GAAG,QAAQ,QAAQ,QAAQ,CAAC,CAAC,EAEhE,KAAK,OAAO,CACf;AAEA,SAAO,IAAI,KAAI;AAChB;AA3BgB;AA6BV,SAAU,4BACf,cACA,cACA,OACA,WACA,QAA8B;AAE9B,QAAM,MAAM;IACX,cACC,MAAM,SAAQ,EAAG,SAChB,KAAK,MAAM,KAAK,MAAM,SAAS,IAAI,CAAC,GACpC,GAAG,CAEL,cAAc,OAAO,MAAM,KAC1B,wBACC,OAAO,MAAM,CAEf;IACA,OAAO,uBAAuB,SAC3B,kBAAkB,YAAY,WAAM,YAAY,UAAU,OAAO,mBAAmB,IAAI,yBAAyB,KACjH,OAAO,uBAAuB,SAC9B,UAAU,YAAY,oCACvB,gCACC,wBACA,OAAO,mBAAmB,CAE5B,KACE;IACH,OAAO,uBAAuB,SAC3B,kBAAkB,YAAY,WAAM,YAAY,UAAU,OAAO,mBAAmB,IAAI,yBAAyB,KACjH,OAAO,uBAAuB,SAC9B,UAAU,YAAY,oCACvB,gCACC,wBACA,OAAO,mBAAmB,CAE5B,KACE;IAEF,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,EACvB,KAAK,IAAI;AACX,SAAO;AACR;AA1CgB;AA4CV,SAAU,8BACf,cACA,cACA,SAAgC;AAEhC,MAAI,MAAM;4BACiB,QAAQ,MAAM,KACxC,wBACC,QAAQ,MAAM,CAEhB;AACA,QAAM,eAAe,QAAQ,QAAQ,GAAG,EAAE,EAAG;AAC7C,MAAI,gBAAgB,QAAW;AAC9B,WAAO;4BACmB,QAAQ,QAAQ,GAAG,EAAE,EAAG,YAAY;EAC/D;AAEA,SAAO;;;EAIN,QAAQ,QACN,IAAI,CAAC,GAAG,MACR,4BACC,cACA,cACA,IAAI,GACJ,QAAQ,QAAQ,QAChB,CAAC,CACD,EAED,KAAK,OAAO,CACf;AAEA,SAAO,IAAI,KAAI;AAChB;AAnCgB;",
6
6
  "names": ["import_safe"]
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 });
@@ -159,6 +160,7 @@ function createDefaultBehaviors() {
159
160
  ...import_WindowCovering.WindowCoveringCCBehaviors
160
161
  ];
161
162
  }
163
+ __name(createDefaultBehaviors, "createDefaultBehaviors");
162
164
  // Annotate the CommonJS export names for ESM import in node:
163
165
  0 && (module.exports = {
164
166
  createDefaultBehaviors
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/lib/node/MockNodeBehaviors.ts"],
4
4
  "sourcesContent": ["import {\n\ttype CommandClass,\n\tSecurity2CC,\n\tSecurity2CCMessageEncapsulation,\n\tSecurityCC,\n\tSecurityCCCommandEncapsulation,\n\tVersionCCCommandClassGet,\n\tVersionCCCommandClassReport,\n\tZWavePlusNodeType,\n\tZWavePlusRoleType,\n} from \"@zwave-js/cc\";\nimport { ZWavePlusCCGet, ZWavePlusCCReport } from \"@zwave-js/cc/ZWavePlusCC\";\nimport {\n\tZWaveProtocolCCNodeInformationFrame,\n\tZWaveProtocolCCRequestNodeInformationFrame,\n} from \"@zwave-js/cc/ZWaveProtocolCC\";\nimport { CommandClasses } from \"@zwave-js/core\";\nimport { type MockNodeBehavior } from \"@zwave-js/testing\";\n\nimport { BasicCCBehaviors } from \"./mockCCBehaviors/Basic.js\";\nimport { BinarySensorCCBehaviors } from \"./mockCCBehaviors/BinarySensor.js\";\nimport { BinarySwitchCCBehaviors } from \"./mockCCBehaviors/BinarySwitch.js\";\nimport { ColorSwitchCCBehaviors } from \"./mockCCBehaviors/ColorSwitch.js\";\nimport { ConfigurationCCBehaviors } from \"./mockCCBehaviors/Configuration.js\";\nimport { EnergyProductionCCBehaviors } from \"./mockCCBehaviors/EnergyProduction.js\";\nimport { ManufacturerSpecificCCBehaviors } from \"./mockCCBehaviors/ManufacturerSpecific.js\";\nimport { MeterCCBehaviors } from \"./mockCCBehaviors/Meter.js\";\nimport {\n\tMultiChannelCCBehaviors,\n\tMultiChannelCCHooks,\n} from \"./mockCCBehaviors/MultiChannel.js\";\nimport { MultilevelSensorCCBehaviors } from \"./mockCCBehaviors/MultilevelSensor.js\";\nimport { MultilevelSwitchCCBehaviors } from \"./mockCCBehaviors/MultilevelSwitch.js\";\nimport { NotificationCCBehaviors } from \"./mockCCBehaviors/Notification.js\";\nimport { ScheduleEntryLockCCBehaviors } from \"./mockCCBehaviors/ScheduleEntryLock.js\";\nimport { SoundSwitchCCBehaviors } from \"./mockCCBehaviors/SoundSwitch.js\";\nimport { ThermostatModeCCBehaviors } from \"./mockCCBehaviors/ThermostatMode.js\";\nimport { ThermostatSetbackCCBehaviors } from \"./mockCCBehaviors/ThermostatSetback.js\";\nimport { ThermostatSetpointCCBehaviors } from \"./mockCCBehaviors/ThermostatSetpoint.js\";\nimport { UserCodeCCBehaviors } from \"./mockCCBehaviors/UserCode.js\";\nimport { WindowCoveringCCBehaviors } from \"./mockCCBehaviors/WindowCovering.js\";\n\nconst respondToRequestNodeInfo: MockNodeBehavior = {\n\thandleCC(controller, self, receivedCC) {\n\t\tif (\n\t\t\treceivedCC\n\t\t\t\tinstanceof ZWaveProtocolCCRequestNodeInformationFrame\n\t\t) {\n\t\t\tconst cc = new ZWaveProtocolCCNodeInformationFrame({\n\t\t\t\tnodeId: self.id,\n\t\t\t\t...self.capabilities,\n\t\t\t\tsupportedCCs: [...self.implementedCCs]\n\t\t\t\t\t// Basic CC must not be included in the NIF\n\t\t\t\t\t.filter(([ccId]) => ccId !== CommandClasses.Basic)\n\t\t\t\t\t// Only include supported CCs\n\t\t\t\t\t.filter(([, info]) => info.isSupported)\n\t\t\t\t\t.map(([ccId]) => ccId),\n\t\t\t});\n\t\t\treturn { action: \"sendCC\", cc };\n\t\t}\n\t},\n};\n\nconst respondToVersionCCCommandClassGet: MockNodeBehavior = {\n\thandleCC(controller, self, receivedCC) {\n\t\tif (receivedCC instanceof VersionCCCommandClassGet) {\n\t\t\tconst endpoint = receivedCC.endpointIndex === 0\n\t\t\t\t? self\n\t\t\t\t: self.endpoints.get(receivedCC.endpointIndex);\n\t\t\tif (!endpoint) return;\n\n\t\t\tlet version = 0;\n\t\t\tfor (const ep of [self, ...self.endpoints.values()]) {\n\t\t\t\tconst info = ep.implementedCCs.get(receivedCC.requestedCC);\n\t\t\t\tif (info?.version) {\n\t\t\t\t\tversion = info.version;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Basic CC is always supported implicitly\n\t\t\tif (\n\t\t\t\tversion === 0 && receivedCC.requestedCC === CommandClasses.Basic\n\t\t\t) {\n\t\t\t\tversion = 1;\n\t\t\t}\n\n\t\t\tconst cc = new VersionCCCommandClassReport({\n\t\t\t\tnodeId: self.id,\n\t\t\t\tendpointIndex: \"index\" in endpoint ? endpoint.index : undefined,\n\t\t\t\trequestedCC: receivedCC.requestedCC,\n\t\t\t\tccVersion: version,\n\t\t\t});\n\t\t\treturn { action: \"sendCC\", cc };\n\t\t}\n\t},\n};\n\nconst respondToZWavePlusCCGet: MockNodeBehavior = {\n\thandleCC(controller, self, receivedCC) {\n\t\tif (receivedCC instanceof ZWavePlusCCGet) {\n\t\t\tconst cc = new ZWavePlusCCReport({\n\t\t\t\tnodeId: controller.ownNodeId,\n\t\t\t\tzwavePlusVersion: 2,\n\t\t\t\tnodeType: ZWavePlusNodeType.Node,\n\t\t\t\troleType: self.capabilities.isListening\n\t\t\t\t\t? ZWavePlusRoleType.AlwaysOnSlave\n\t\t\t\t\t: self.capabilities.isFrequentListening\n\t\t\t\t\t? ZWavePlusRoleType.SleepingListeningSlave\n\t\t\t\t\t: ZWavePlusRoleType.SleepingReportingSlave,\n\t\t\t\tinstallerIcon: 0x0000,\n\t\t\t\tuserIcon: 0x0000,\n\t\t\t});\n\t\t\treturn { action: \"sendCC\", cc, ackRequested: true };\n\t\t}\n\t},\n};\n\n// TODO: We should handle this more generically:\nconst respondToS0ZWavePlusCCGet: MockNodeBehavior = {\n\thandleCC(controller, self, receivedCC) {\n\t\tif (\n\t\t\treceivedCC instanceof SecurityCCCommandEncapsulation\n\t\t\t&& receivedCC.encapsulated instanceof ZWavePlusCCGet\n\t\t) {\n\t\t\tlet cc: CommandClass = new ZWavePlusCCReport({\n\t\t\t\tnodeId: controller.ownNodeId,\n\t\t\t\tzwavePlusVersion: 2,\n\t\t\t\tnodeType: ZWavePlusNodeType.Node,\n\t\t\t\troleType: self.capabilities.isListening\n\t\t\t\t\t? ZWavePlusRoleType.AlwaysOnSlave\n\t\t\t\t\t: self.capabilities.isFrequentListening\n\t\t\t\t\t? ZWavePlusRoleType.SleepingListeningSlave\n\t\t\t\t\t: ZWavePlusRoleType.SleepingReportingSlave,\n\t\t\t\tinstallerIcon: 0x0000,\n\t\t\t\tuserIcon: 0x0000,\n\t\t\t});\n\t\t\tcc = SecurityCC.encapsulate(\n\t\t\t\tself.id,\n\t\t\t\tself.securityManagers.securityManager!,\n\t\t\t\tcc,\n\t\t\t);\n\t\t\treturn { action: \"sendCC\", cc, ackRequested: true };\n\t\t}\n\t},\n};\n\nconst respondToS2ZWavePlusCCGet: MockNodeBehavior = {\n\thandleCC(controller, self, receivedCC) {\n\t\tif (\n\t\t\treceivedCC instanceof Security2CCMessageEncapsulation\n\t\t\t&& receivedCC.encapsulated instanceof ZWavePlusCCGet\n\t\t) {\n\t\t\tlet cc: CommandClass = new ZWavePlusCCReport({\n\t\t\t\tnodeId: controller.ownNodeId,\n\t\t\t\tzwavePlusVersion: 2,\n\t\t\t\tnodeType: ZWavePlusNodeType.Node,\n\t\t\t\troleType: self.capabilities.isListening\n\t\t\t\t\t? ZWavePlusRoleType.AlwaysOnSlave\n\t\t\t\t\t: self.capabilities.isFrequentListening\n\t\t\t\t\t? ZWavePlusRoleType.SleepingListeningSlave\n\t\t\t\t\t: ZWavePlusRoleType.SleepingReportingSlave,\n\t\t\t\tinstallerIcon: 0x0000,\n\t\t\t\tuserIcon: 0x0000,\n\t\t\t});\n\t\t\tcc = Security2CC.encapsulate(\n\t\t\t\tcc,\n\t\t\t\tself.id,\n\t\t\t\tself.securityManagers,\n\t\t\t);\n\t\t\treturn { action: \"sendCC\", cc };\n\t\t}\n\t},\n};\n\n/** Predefined default behaviors that are required for interacting with the Mock Controller correctly */\nexport function createDefaultBehaviors(): MockNodeBehavior[] {\n\treturn [\n\t\trespondToRequestNodeInfo,\n\n\t\t...MultiChannelCCHooks,\n\t\t...MultiChannelCCBehaviors,\n\n\t\trespondToVersionCCCommandClassGet,\n\n\t\trespondToZWavePlusCCGet,\n\t\trespondToS0ZWavePlusCCGet,\n\t\trespondToS2ZWavePlusCCGet,\n\n\t\t...BasicCCBehaviors,\n\t\t...BinarySensorCCBehaviors,\n\t\t...BinarySwitchCCBehaviors,\n\t\t...ColorSwitchCCBehaviors,\n\t\t...ConfigurationCCBehaviors,\n\t\t...EnergyProductionCCBehaviors,\n\t\t...ManufacturerSpecificCCBehaviors,\n\t\t...MeterCCBehaviors,\n\t\t...MultilevelSensorCCBehaviors,\n\t\t...MultilevelSwitchCCBehaviors,\n\t\t...NotificationCCBehaviors,\n\t\t...ScheduleEntryLockCCBehaviors,\n\t\t...SoundSwitchCCBehaviors,\n\t\t...ThermostatModeCCBehaviors,\n\t\t...ThermostatSetpointCCBehaviors,\n\t\t...ThermostatSetbackCCBehaviors,\n\t\t...UserCodeCCBehaviors,\n\t\t...WindowCoveringCCBehaviors,\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 });
@@ -29,23 +30,23 @@ function createMultiCCAPIWrapper(apiInstances) {
29
30
  } else if (apiInstances.some((a) => a.ccId !== apiInstances[0].ccId)) {
30
31
  throw new import_safe.ZWaveError("All CC API instances must be for the same CC", import_safe.ZWaveErrorCodes.Argument_Invalid);
31
32
  }
32
- const withOptions = (options) => createMultiCCAPIWrapper(
33
+ const withOptions = /* @__PURE__ */ __name((options) => createMultiCCAPIWrapper(
33
34
  // Create a new wrapper where each instance has the options applied
34
35
  apiInstances.map((a) => a.withOptions(options))
35
- );
36
- const withTXReport = () => createMultiCCAPIWrapper(apiInstances.map((a) => a.withTXReport()));
36
+ ), "withOptions");
37
+ const withTXReport = /* @__PURE__ */ __name(() => createMultiCCAPIWrapper(apiInstances.map((a) => a.withTXReport())), "withTXReport");
37
38
  const version = apiInstances[0].version;
38
39
  const ccId = apiInstances[0].ccId;
39
- const isSupported = () => apiInstances[0].isSupported();
40
- const isSetValueOptimistic = (valueId) => apiInstances[0].isSetValueOptimistic(valueId);
41
- const supportsCommand = (cmd) => apiInstances[0].supportsCommand(cmd);
40
+ const isSupported = /* @__PURE__ */ __name(() => apiInstances[0].isSupported(), "isSupported");
41
+ const isSetValueOptimistic = /* @__PURE__ */ __name((valueId) => apiInstances[0].isSetValueOptimistic(valueId), "isSetValueOptimistic");
42
+ const supportsCommand = /* @__PURE__ */ __name((cmd) => apiInstances[0].supportsCommand(cmd), "supportsCommand");
42
43
  const setValue = apiInstances[0].setValue ? async (...args) => {
43
44
  const tasks = apiInstances.map((a) => a.setValue.call(a, ...args));
44
45
  const results = await Promise.all(tasks);
45
46
  return (0, import_safe.mergeSupervisionResults)(results);
46
47
  } : void 0;
47
- const getNode = () => void 0;
48
- const tryGetNode = () => void 0;
48
+ const getNode = /* @__PURE__ */ __name(() => void 0, "getNode");
49
+ const tryGetNode = /* @__PURE__ */ __name(() => void 0, "tryGetNode");
49
50
  return new Proxy({}, {
50
51
  get(target, prop) {
51
52
  if (process.env.NODE_ENV === "test" && typeof prop === "string" && (prop === "$$typeof" || prop === "constructor" || prop.includes("@@__IMMUTABLE"))) {
@@ -93,6 +94,7 @@ function createMultiCCAPIWrapper(apiInstances) {
93
94
  }
94
95
  });
95
96
  }
97
+ __name(createMultiCCAPIWrapper, "createMultiCCAPIWrapper");
96
98
  // Annotate the CommonJS export names for ESM import in node:
97
99
  0 && (module.exports = {
98
100
  createMultiCCAPIWrapper
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/lib/node/MultiCCAPIWrapper.ts"],
4
4
  "sourcesContent": ["import {\n\ttype CCAPI,\n\ttype SetValueImplementation,\n\tSupervisionCCReport,\n} from \"@zwave-js/cc\";\nimport {\n\ttype CommandClasses,\n\ttype SendCommandOptions,\n\ttype ValueID,\n\tZWaveError,\n\tZWaveErrorCodes,\n\tmergeSupervisionResults,\n} from \"@zwave-js/core/safe\";\n\n/** Creates a wrapper that looks like an instance of a specific CC API, but can handle multiple instances of that API */\nexport function createMultiCCAPIWrapper<T extends CCAPI>(apiInstances: T[]): T {\n\tif (apiInstances.length === 0) {\n\t\tthrow new ZWaveError(\n\t\t\t\"At least one CC API instance must be provided\",\n\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t);\n\t} else if (apiInstances.some((a) => a.ccId !== apiInstances[0].ccId)) {\n\t\tthrow new ZWaveError(\n\t\t\t\"All CC API instances must be for the same CC\",\n\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t);\n\t}\n\n\tconst withOptions = (options: SendCommandOptions) =>\n\t\tcreateMultiCCAPIWrapper(\n\t\t\t// Create a new wrapper where each instance has the options applied\n\t\t\tapiInstances.map((a) => a.withOptions(options)),\n\t\t);\n\tconst withTXReport = () =>\n\t\tcreateMultiCCAPIWrapper<T>(\n\t\t\tapiInstances.map((a) => a.withTXReport() as any),\n\t\t);\n\n\t// Delegate some properties to the first instance\n\tconst version = apiInstances[0].version;\n\tconst ccId = apiInstances[0].ccId;\n\tconst isSupported = () => apiInstances[0].isSupported();\n\tconst isSetValueOptimistic = (valueId: ValueID) =>\n\t\tapiInstances[0].isSetValueOptimistic(valueId);\n\tconst supportsCommand = (cmd: CommandClasses) =>\n\t\tapiInstances[0].supportsCommand(cmd);\n\n\t// Since all instances are the same, either all of them or none have a set value implementation\n\tconst setValue: SetValueImplementation | undefined = apiInstances[0]\n\t\t\t.setValue\n\t\t? async (...args) => {\n\t\t\tconst tasks = apiInstances.map((a) => a.setValue!.call(a, ...args));\n\t\t\tconst results = await Promise.all(tasks);\n\t\t\treturn mergeSupervisionResults(results);\n\t\t}\n\t\t: undefined;\n\n\t// This wrapper is by definition for multiple nodes, so we cannot return one\n\tconst getNode = () => undefined;\n\tconst tryGetNode = () => undefined;\n\n\treturn new Proxy({} as T, {\n\t\tget(target, prop) {\n\t\t\t// Avoid ultra-weird error messages during testing\n\t\t\tif (\n\t\t\t\tprocess.env.NODE_ENV === \"test\"\n\t\t\t\t&& typeof prop === \"string\"\n\t\t\t\t&& (prop === \"$$typeof\"\n\t\t\t\t\t|| prop === \"constructor\"\n\t\t\t\t\t|| prop.includes(\"@@__IMMUTABLE\"))\n\t\t\t) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tswitch (prop) {\n\t\t\t\tcase \"ccId\":\n\t\t\t\t\treturn ccId;\n\t\t\t\tcase \"version\":\n\t\t\t\t\treturn version;\n\t\t\t\tcase \"isSupported\":\n\t\t\t\t\treturn isSupported;\n\t\t\t\tcase \"getNode\":\n\t\t\t\t\treturn getNode;\n\t\t\t\tcase \"tryGetNode\":\n\t\t\t\t\treturn tryGetNode;\n\t\t\t\tcase \"isSetValueOptimistic\":\n\t\t\t\t\treturn isSetValueOptimistic;\n\t\t\t\tcase \"supportsCommand\":\n\t\t\t\t\treturn supportsCommand;\n\t\t\t\tcase \"withOptions\":\n\t\t\t\t\treturn withOptions;\n\t\t\t\tcase \"withTXReport\":\n\t\t\t\t\treturn withTXReport;\n\n\t\t\t\tcase \"pollValue\":\n\t\t\t\t\t// We don't do multicast polls\n\t\t\t\t\treturn undefined;\n\t\t\t\tcase \"setValue\":\n\t\t\t\t\treturn setValue;\n\n\t\t\t\tdefault:\n\t\t\t\t\t// Assume everything else is a CC-specific method.\n\t\t\t\t\t// Call all of them and merge the results\n\t\t\t\t\treturn async (...args: any) => {\n\t\t\t\t\t\tconst tasks = apiInstances.map((a) =>\n\t\t\t\t\t\t\t// This may throw when a non-existing method is accessed, but that is desired here\n\t\t\t\t\t\t\t(a as any)[prop].call(a, ...args)\n\t\t\t\t\t\t);\n\t\t\t\t\t\t// This call won't go through the sendSupervisedCommand method, so supervision results are not automatically unwrapped\n\t\t\t\t\t\tconst responses = await Promise.all(tasks);\n\t\t\t\t\t\tconst results = responses.map((r) => {\n\t\t\t\t\t\t\tif (r instanceof SupervisionCCReport) {\n\t\t\t\t\t\t\t\treturn r.toSupervisionResult();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t\t});\n\t\t\t\t\t\t// The call site may use a GET-type method, which does not make sense in a multicast context\n\t\t\t\t\t\t// The following will return `undefined` in that case\n\t\t\t\t\t\treturn mergeSupervisionResults(results);\n\t\t\t\t\t};\n\t\t\t}\n\t\t},\n\t});\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;;;;;AAAA,gBAIO;AACP,kBAOO;AAGD,SAAU,wBAAyC,cAAiB;AACzE,MAAI,aAAa,WAAW,GAAG;AAC9B,UAAM,IAAI,uBACT,iDACA,4BAAgB,gBAAgB;EAElC,WAAW,aAAa,KAAK,CAAC,MAAM,EAAE,SAAS,aAAa,CAAC,EAAE,IAAI,GAAG;AACrE,UAAM,IAAI,uBACT,gDACA,4BAAgB,gBAAgB;EAElC;AAEA,QAAM,cAAc,CAAC,YACpB;;IAEC,aAAa,IAAI,CAAC,MAAM,EAAE,YAAY,OAAO,CAAC;EAAC;AAEjD,QAAM,eAAe,MACpB,wBACC,aAAa,IAAI,CAAC,MAAM,EAAE,aAAY,CAAS,CAAC;AAIlD,QAAM,UAAU,aAAa,CAAC,EAAE;AAChC,QAAM,OAAO,aAAa,CAAC,EAAE;AAC7B,QAAM,cAAc,MAAM,aAAa,CAAC,EAAE,YAAW;AACrD,QAAM,uBAAuB,CAAC,YAC7B,aAAa,CAAC,EAAE,qBAAqB,OAAO;AAC7C,QAAM,kBAAkB,CAAC,QACxB,aAAa,CAAC,EAAE,gBAAgB,GAAG;AAGpC,QAAM,WAA+C,aAAa,CAAC,EAChE,WACA,UAAU,SAAQ;AACnB,UAAM,QAAQ,aAAa,IAAI,CAAC,MAAM,EAAE,SAAU,KAAK,GAAG,GAAG,IAAI,CAAC;AAClE,UAAM,UAAU,MAAM,QAAQ,IAAI,KAAK;AACvC,eAAO,qCAAwB,OAAO;EACvC,IACE;AAGH,QAAM,UAAU,MAAM;AACtB,QAAM,aAAa,MAAM;AAEzB,SAAO,IAAI,MAAM,CAAA,GAAS;IACzB,IAAI,QAAQ,MAAI;AAEf,UACC,QAAQ,IAAI,aAAa,UACtB,OAAO,SAAS,aACf,SAAS,cACT,SAAS,iBACT,KAAK,SAAS,eAAe,IAChC;AACD,eAAO;MACR;AAEA,cAAQ,MAAM;QACb,KAAK;AACJ,iBAAO;QACR,KAAK;AACJ,iBAAO;QACR,KAAK;AACJ,iBAAO;QACR,KAAK;AACJ,iBAAO;QACR,KAAK;AACJ,iBAAO;QACR,KAAK;AACJ,iBAAO;QACR,KAAK;AACJ,iBAAO;QACR,KAAK;AACJ,iBAAO;QACR,KAAK;AACJ,iBAAO;QAER,KAAK;AAEJ,iBAAO;QACR,KAAK;AACJ,iBAAO;QAER;AAGC,iBAAO,UAAU,SAAa;AAC7B,kBAAM,QAAQ,aAAa,IAAI,CAAC;;cAE9B,EAAU,IAAI,EAAE,KAAK,GAAG,GAAG,IAAI;aAAC;AAGlC,kBAAM,YAAY,MAAM,QAAQ,IAAI,KAAK;AACzC,kBAAM,UAAU,UAAU,IAAI,CAAC,MAAK;AACnC,kBAAI,aAAa,+BAAqB;AACrC,uBAAO,EAAE,oBAAmB;cAC7B;AACA,qBAAO;YACR,CAAC;AAGD,uBAAO,qCAAwB,OAAO;UACvC;MACF;IACD;GACA;AACF;",
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;;;;;AAAA,gBAIO;AACP,kBAOO;AAGD,SAAU,wBAAyC,cAAiB;AACzE,MAAI,aAAa,WAAW,GAAG;AAC9B,UAAM,IAAI,uBACT,iDACA,4BAAgB,gBAAgB;EAElC,WAAW,aAAa,KAAK,CAAC,MAAM,EAAE,SAAS,aAAa,CAAC,EAAE,IAAI,GAAG;AACrE,UAAM,IAAI,uBACT,gDACA,4BAAgB,gBAAgB;EAElC;AAEA,QAAM,cAAc,wBAAC,YACpB;;IAEC,aAAa,IAAI,CAAC,MAAM,EAAE,YAAY,OAAO,CAAC;EAAC,GAH7B;AAKpB,QAAM,eAAe,6BACpB,wBACC,aAAa,IAAI,CAAC,MAAM,EAAE,aAAY,CAAS,CAAC,GAF7B;AAMrB,QAAM,UAAU,aAAa,CAAC,EAAE;AAChC,QAAM,OAAO,aAAa,CAAC,EAAE;AAC7B,QAAM,cAAc,6BAAM,aAAa,CAAC,EAAE,YAAW,GAAjC;AACpB,QAAM,uBAAuB,wBAAC,YAC7B,aAAa,CAAC,EAAE,qBAAqB,OAAO,GADhB;AAE7B,QAAM,kBAAkB,wBAAC,QACxB,aAAa,CAAC,EAAE,gBAAgB,GAAG,GADZ;AAIxB,QAAM,WAA+C,aAAa,CAAC,EAChE,WACA,UAAU,SAAQ;AACnB,UAAM,QAAQ,aAAa,IAAI,CAAC,MAAM,EAAE,SAAU,KAAK,GAAG,GAAG,IAAI,CAAC;AAClE,UAAM,UAAU,MAAM,QAAQ,IAAI,KAAK;AACvC,eAAO,qCAAwB,OAAO;EACvC,IACE;AAGH,QAAM,UAAU,6BAAM,QAAN;AAChB,QAAM,aAAa,6BAAM,QAAN;AAEnB,SAAO,IAAI,MAAM,CAAA,GAAS;IACzB,IAAI,QAAQ,MAAI;AAEf,UACC,QAAQ,IAAI,aAAa,UACtB,OAAO,SAAS,aACf,SAAS,cACT,SAAS,iBACT,KAAK,SAAS,eAAe,IAChC;AACD,eAAO;MACR;AAEA,cAAQ,MAAM;QACb,KAAK;AACJ,iBAAO;QACR,KAAK;AACJ,iBAAO;QACR,KAAK;AACJ,iBAAO;QACR,KAAK;AACJ,iBAAO;QACR,KAAK;AACJ,iBAAO;QACR,KAAK;AACJ,iBAAO;QACR,KAAK;AACJ,iBAAO;QACR,KAAK;AACJ,iBAAO;QACR,KAAK;AACJ,iBAAO;QAER,KAAK;AAEJ,iBAAO;QACR,KAAK;AACJ,iBAAO;QAER;AAGC,iBAAO,UAAU,SAAa;AAC7B,kBAAM,QAAQ,aAAa,IAAI,CAAC;;cAE9B,EAAU,IAAI,EAAE,KAAK,GAAG,GAAG,IAAI;aAAC;AAGlC,kBAAM,YAAY,MAAM,QAAQ,IAAI,KAAK;AACzC,kBAAM,UAAU,UAAU,IAAI,CAAC,MAAK;AACnC,kBAAI,aAAa,+BAAqB;AACrC,uBAAO,EAAE,oBAAmB;cAC7B;AACA,qBAAO;YACR,CAAC;AAGD,uBAAO,qCAAwB,OAAO;UACvC;MACF;IACD;GACA;AACF;AA5GgB;",
6
6
  "names": []
7
7
  }