@zwave-js/cc 15.24.3 → 15.25.1

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 (127) hide show
  1. package/build/cjs/cc/AssociationCC.d.ts +1 -1
  2. package/build/cjs/cc/AssociationCC.js +6 -3
  3. package/build/cjs/cc/AssociationCC.js.map +2 -2
  4. package/build/cjs/cc/AssociationGroupInfoCC.js +5 -1
  5. package/build/cjs/cc/AssociationGroupInfoCC.js.map +2 -2
  6. package/build/cjs/cc/ColorSwitchCC.js +5 -2
  7. package/build/cjs/cc/ColorSwitchCC.js.map +2 -2
  8. package/build/cjs/cc/ConfigurationCC.d.ts +14 -3
  9. package/build/cjs/cc/ConfigurationCC.js +65 -19
  10. package/build/cjs/cc/ConfigurationCC.js.map +2 -2
  11. package/build/cjs/cc/IndicatorCC.js +7 -3
  12. package/build/cjs/cc/IndicatorCC.js.map +2 -2
  13. package/build/cjs/cc/IrrigationCC.js +6 -2
  14. package/build/cjs/cc/IrrigationCC.js.map +2 -2
  15. package/build/cjs/cc/MeterCC.js +6 -1
  16. package/build/cjs/cc/MeterCC.js.map +2 -2
  17. package/build/cjs/cc/MultiChannelAssociationCC.d.ts +1 -1
  18. package/build/cjs/cc/MultiChannelAssociationCC.js +6 -3
  19. package/build/cjs/cc/MultiChannelAssociationCC.js.map +2 -2
  20. package/build/cjs/cc/MultiChannelCC.d.ts +1 -1
  21. package/build/cjs/cc/MultiChannelCC.js +4 -2
  22. package/build/cjs/cc/MultiChannelCC.js.map +2 -2
  23. package/build/cjs/cc/MultilevelSensorCC.js +7 -3
  24. package/build/cjs/cc/MultilevelSensorCC.js.map +2 -2
  25. package/build/cjs/cc/NotificationCC.js +9 -2
  26. package/build/cjs/cc/NotificationCC.js.map +2 -2
  27. package/build/cjs/cc/SceneControllerConfigurationCC.js +1 -0
  28. package/build/cjs/cc/SceneControllerConfigurationCC.js.map +2 -2
  29. package/build/cjs/cc/SecurityCC.d.ts +2 -2
  30. package/build/cjs/cc/SecurityCC.js +6 -4
  31. package/build/cjs/cc/SecurityCC.js.map +2 -2
  32. package/build/cjs/cc/ThermostatOperatingStateCC.d.ts +1 -1
  33. package/build/cjs/cc/ThermostatOperatingStateCC.js +2 -2
  34. package/build/cjs/cc/ThermostatOperatingStateCC.js.map +2 -2
  35. package/build/cjs/cc/ThermostatSetpointCC.js +8 -3
  36. package/build/cjs/cc/ThermostatSetpointCC.js.map +2 -2
  37. package/build/cjs/cc/TransportServiceCC.d.ts +0 -14
  38. package/build/cjs/cc/TransportServiceCC.js +0 -41
  39. package/build/cjs/cc/TransportServiceCC.js.map +2 -2
  40. package/build/cjs/cc/UserCodeCC.js +5 -1
  41. package/build/cjs/cc/UserCodeCC.js.map +2 -2
  42. package/build/cjs/cc/UserCredentialCC.d.ts +2 -2
  43. package/build/cjs/cc/UserCredentialCC.js +7 -3
  44. package/build/cjs/cc/UserCredentialCC.js.map +2 -2
  45. package/build/cjs/cc/VersionCC.js +7 -5
  46. package/build/cjs/cc/VersionCC.js.map +2 -2
  47. package/build/cjs/cc/WindowCoveringCC.js +6 -4
  48. package/build/cjs/cc/WindowCoveringCC.js.map +2 -2
  49. package/build/cjs/lib/CommandClass.d.ts +15 -6
  50. package/build/cjs/lib/CommandClass.js +10 -5
  51. package/build/cjs/lib/CommandClass.js.map +2 -2
  52. package/build/cjs/lib/traits.d.ts +16 -1
  53. package/build/esm/cc/AssociationCC.d.ts +1 -1
  54. package/build/esm/cc/AssociationCC.d.ts.map +1 -1
  55. package/build/esm/cc/AssociationCC.js +6 -3
  56. package/build/esm/cc/AssociationCC.js.map +1 -1
  57. package/build/esm/cc/AssociationGroupInfoCC.d.ts.map +1 -1
  58. package/build/esm/cc/AssociationGroupInfoCC.js +7 -1
  59. package/build/esm/cc/AssociationGroupInfoCC.js.map +1 -1
  60. package/build/esm/cc/ColorSwitchCC.d.ts.map +1 -1
  61. package/build/esm/cc/ColorSwitchCC.js +5 -2
  62. package/build/esm/cc/ColorSwitchCC.js.map +1 -1
  63. package/build/esm/cc/ConfigurationCC.d.ts +14 -3
  64. package/build/esm/cc/ConfigurationCC.d.ts.map +1 -1
  65. package/build/esm/cc/ConfigurationCC.js +98 -25
  66. package/build/esm/cc/ConfigurationCC.js.map +1 -1
  67. package/build/esm/cc/IndicatorCC.d.ts.map +1 -1
  68. package/build/esm/cc/IndicatorCC.js +8 -3
  69. package/build/esm/cc/IndicatorCC.js.map +1 -1
  70. package/build/esm/cc/IrrigationCC.d.ts.map +1 -1
  71. package/build/esm/cc/IrrigationCC.js +6 -2
  72. package/build/esm/cc/IrrigationCC.js.map +1 -1
  73. package/build/esm/cc/MeterCC.d.ts.map +1 -1
  74. package/build/esm/cc/MeterCC.js +6 -1
  75. package/build/esm/cc/MeterCC.js.map +1 -1
  76. package/build/esm/cc/MultiChannelAssociationCC.d.ts +1 -1
  77. package/build/esm/cc/MultiChannelAssociationCC.d.ts.map +1 -1
  78. package/build/esm/cc/MultiChannelAssociationCC.js +6 -3
  79. package/build/esm/cc/MultiChannelAssociationCC.js.map +1 -1
  80. package/build/esm/cc/MultiChannelCC.d.ts +1 -1
  81. package/build/esm/cc/MultiChannelCC.d.ts.map +1 -1
  82. package/build/esm/cc/MultiChannelCC.js +4 -2
  83. package/build/esm/cc/MultiChannelCC.js.map +1 -1
  84. package/build/esm/cc/MultilevelSensorCC.d.ts.map +1 -1
  85. package/build/esm/cc/MultilevelSensorCC.js +7 -3
  86. package/build/esm/cc/MultilevelSensorCC.js.map +1 -1
  87. package/build/esm/cc/NotificationCC.d.ts.map +1 -1
  88. package/build/esm/cc/NotificationCC.js +9 -2
  89. package/build/esm/cc/NotificationCC.js.map +1 -1
  90. package/build/esm/cc/SceneControllerConfigurationCC.d.ts.map +1 -1
  91. package/build/esm/cc/SceneControllerConfigurationCC.js +1 -0
  92. package/build/esm/cc/SceneControllerConfigurationCC.js.map +1 -1
  93. package/build/esm/cc/SecurityCC.d.ts +2 -2
  94. package/build/esm/cc/SecurityCC.d.ts.map +1 -1
  95. package/build/esm/cc/SecurityCC.js +7 -4
  96. package/build/esm/cc/SecurityCC.js.map +1 -1
  97. package/build/esm/cc/ThermostatOperatingStateCC.d.ts +1 -1
  98. package/build/esm/cc/ThermostatOperatingStateCC.d.ts.map +1 -1
  99. package/build/esm/cc/ThermostatOperatingStateCC.js +2 -2
  100. package/build/esm/cc/ThermostatOperatingStateCC.js.map +1 -1
  101. package/build/esm/cc/ThermostatSetpointCC.d.ts.map +1 -1
  102. package/build/esm/cc/ThermostatSetpointCC.js +10 -3
  103. package/build/esm/cc/ThermostatSetpointCC.js.map +1 -1
  104. package/build/esm/cc/TransportServiceCC.d.ts +0 -14
  105. package/build/esm/cc/TransportServiceCC.d.ts.map +1 -1
  106. package/build/esm/cc/TransportServiceCC.js +1 -54
  107. package/build/esm/cc/TransportServiceCC.js.map +1 -1
  108. package/build/esm/cc/UserCodeCC.d.ts.map +1 -1
  109. package/build/esm/cc/UserCodeCC.js +4 -0
  110. package/build/esm/cc/UserCodeCC.js.map +1 -1
  111. package/build/esm/cc/UserCredentialCC.d.ts +2 -2
  112. package/build/esm/cc/UserCredentialCC.d.ts.map +1 -1
  113. package/build/esm/cc/UserCredentialCC.js +7 -4
  114. package/build/esm/cc/UserCredentialCC.js.map +1 -1
  115. package/build/esm/cc/VersionCC.d.ts.map +1 -1
  116. package/build/esm/cc/VersionCC.js +12 -6
  117. package/build/esm/cc/VersionCC.js.map +1 -1
  118. package/build/esm/cc/WindowCoveringCC.d.ts.map +1 -1
  119. package/build/esm/cc/WindowCoveringCC.js +7 -5
  120. package/build/esm/cc/WindowCoveringCC.js.map +1 -1
  121. package/build/esm/lib/CommandClass.d.ts +15 -6
  122. package/build/esm/lib/CommandClass.d.ts.map +1 -1
  123. package/build/esm/lib/CommandClass.js +10 -5
  124. package/build/esm/lib/CommandClass.js.map +1 -1
  125. package/build/esm/lib/traits.d.ts +16 -1
  126. package/build/esm/lib/traits.d.ts.map +1 -1
  127. package/package.json +4 -4
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src_gen/cc/UserCredentialCC.ts"],
4
- "sourcesContent": ["import * as __validateArgs from \"./UserCredentialCC._validateArgs.js\";\nconst { validateArgs_UserCredentialCCAPI_setUser, validateArgs_UserCredentialCCAPI_getUser, validateArgs_UserCredentialCCAPI_setCredential, validateArgs_UserCredentialCCAPI_getCredential, validateArgs_UserCredentialCCAPI_startCredentialLearn, validateArgs_UserCredentialCCAPI_setUserCredentialAssociation, validateArgs_UserCredentialCCAPI_getUserChecksum, validateArgs_UserCredentialCCAPI_getCredentialChecksum, validateArgs_UserCredentialCCAPI_setAdminPinCode, validateArgs_UserCredentialCCAPI_setKeyLockerEntry, validateArgs_UserCredentialCCAPI_getKeyLockerEntry, validateArgs_UserCredentialCCAPI_sendUserCapabilitiesReport, validateArgs_UserCredentialCCAPI_sendCredentialCapabilitiesReport, validateArgs_UserCredentialCCAPI_sendKeyLockerCapabilitiesReport, validateArgs_UserCredentialCCAPI_sendUserReport, validateArgs_UserCredentialCCAPI_sendCredentialReport, validateArgs_UserCredentialCCAPI_sendCredentialLearnReport, validateArgs_UserCredentialCCAPI_sendUserCredentialAssociationReport, validateArgs_UserCredentialCCAPI_sendAllUsersChecksumReport, validateArgs_UserCredentialCCAPI_sendUserChecksumReport, validateArgs_UserCredentialCCAPI_sendCredentialChecksumReport, validateArgs_UserCredentialCCAPI_sendAdminPinCodeReport, validateArgs_UserCredentialCCAPI_sendKeyLockerEntryReport } = __validateArgs;\nimport { CommandClasses, type EndpointId, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, type SupervisionResult, type WithAddress, ZWaveError, ZWaveErrorCodes, encodeBitMask, parseBitMask, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, getEnumMemberName, pick, stringToUint8ArrayUTF16BE, uint8ArrayToStringUTF16BE, } from \"@zwave-js/shared\";\nimport { CCAPI, PhysicalCCAPI } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type PersistValuesContext, type RefreshValuesContext, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValueProperty, ccValues, commandClass, expectedCCResponse, implementedVersion, useSupervision, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { UserCredentialAdminCodeOperationResult, type UserCredentialCapability, UserCredentialCommand, UserCredentialCredentialReportType, type UserCredentialKeyLockerEntryCapability, UserCredentialKeyLockerEntryType, UserCredentialLearnStatus, UserCredentialModifierType, UserCredentialNameEncoding, UserCredentialOperationType, UserCredentialRule, UserCredentialType, UserCredentialUserReportType, UserCredentialUserType, } from \"../lib/_Types.js\";\nexport type { UserCredentialCapability as UserCredentialCredentialCapability } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nfunction credentialToLogString(credential: string | Bytes): string {\n if (credential.length === 0)\n return \"(empty)\";\n return \"*\".repeat(credential.length);\n}\n/**\n * Returns the canonical form of a credential for storage and reporting:\n * text credentials (PIN codes, passwords) are returned as strings, binary\n * credentials (biometric data, BLE/NFC/RFID identifiers, ...) as raw bytes.\n */\nexport function normalizeCredentialData(credentialType: UserCredentialType, credentialData: Bytes): string | Bytes {\n if (credentialType === UserCredentialType.PINCode\n || credentialType === UserCredentialType.Password) {\n return credentialData.toString(\"utf8\");\n }\n return credentialData;\n}\nimport { UserCredentialCCValues } from \"./_CCValues.generated.js\";\nexport { UserCredentialCCValues };\n// API class\n@API(CommandClasses[\"User Credential\"])\nexport class UserCredentialCCAPI extends PhysicalCCAPI {\n public supportsCommand(cmd: UserCredentialCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n // Mandatory v1 commands\n case UserCredentialCommand.UserCapabilitiesGet:\n case UserCredentialCommand.UserCapabilitiesReport:\n case UserCredentialCommand.CredentialCapabilitiesGet:\n case UserCredentialCommand.CredentialCapabilitiesReport:\n case UserCredentialCommand.UserSet:\n case UserCredentialCommand.UserGet:\n case UserCredentialCommand.UserReport:\n case UserCredentialCommand.CredentialSet:\n case UserCredentialCommand.CredentialGet:\n case UserCredentialCommand.CredentialReport:\n case UserCredentialCommand.CredentialLearnStart:\n case UserCredentialCommand.CredentialLearnCancel:\n case UserCredentialCommand.CredentialLearnReport:\n case UserCredentialCommand.UserCredentialAssociationSet:\n case UserCredentialCommand.UserCredentialAssociationReport:\n return true;\n case UserCredentialCommand.AllUsersChecksumGet:\n case UserCredentialCommand.AllUsersChecksumReport: {\n return this.tryGetValueDB()?.getValue<boolean>(UserCredentialCCValues.supportsAllUsersChecksum.endpoint(this.endpoint.index));\n }\n case UserCredentialCommand.UserChecksumGet:\n case UserCredentialCommand.UserChecksumReport: {\n return this.tryGetValueDB()?.getValue<boolean>(UserCredentialCCValues.supportsUserChecksum.endpoint(this.endpoint.index));\n }\n case UserCredentialCommand.CredentialChecksumGet:\n case UserCredentialCommand.CredentialChecksumReport: {\n return this.tryGetValueDB()?.getValue<boolean>(UserCredentialCCValues.supportsCredentialChecksum\n .endpoint(this.endpoint.index));\n }\n case UserCredentialCommand.AdminPinCodeSet:\n case UserCredentialCommand.AdminPinCodeGet:\n case UserCredentialCommand.AdminPinCodeReport: {\n return this.tryGetValueDB()?.getValue<boolean>(UserCredentialCCValues.supportsAdminCode.endpoint(this.endpoint.index));\n }\n // V2 commands\n case UserCredentialCommand.KeyLockerCapabilitiesGet:\n case UserCredentialCommand.KeyLockerCapabilitiesReport:\n case UserCredentialCommand.KeyLockerEntrySet:\n case UserCredentialCommand.KeyLockerEntryGet:\n case UserCredentialCommand.KeyLockerEntryReport:\n return this.version >= 2;\n }\n return super.supportsCommand(cmd);\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getUserCapabilities() {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.UserCapabilitiesGet);\n const cc = new UserCredentialCCUserCapabilitiesGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<UserCredentialCCUserCapabilitiesReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\n \"numberOfSupportedUsers\",\n \"supportedCredentialRules\",\n \"maxUserNameLength\",\n \"supportsUserSchedule\",\n \"supportsAllUsersChecksum\",\n \"supportsUserChecksum\",\n \"supportedUserNameEncodings\",\n \"supportedUserTypes\",\n ]);\n }\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getCredentialCapabilities() {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.CredentialCapabilitiesGet);\n const cc = new UserCredentialCCCredentialCapabilitiesGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<UserCredentialCCCredentialCapabilitiesReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\n \"supportsCredentialChecksum\",\n \"supportsAdminCode\",\n \"supportsAdminCodeDeactivation\",\n \"credentialTypes\",\n ]);\n }\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getKeyLockerCapabilities() {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.KeyLockerCapabilitiesGet);\n const cc = new UserCredentialCCKeyLockerCapabilitiesGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<UserCredentialCCKeyLockerCapabilitiesReport>(cc, this.commandOptions);\n return response?.keyLockerCapabilities;\n }\n // User Management\n /**\n * Applications should not use this method directly. Prefer the\n * `endpoint.accessControl` API for managing users.\n */\n @validateArgs_UserCredentialCCAPI_setUser()\n public async setUser(options: UserCredentialCCUserSetOptions): Promise<UserCredentialCCUserReport | undefined> {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.UserSet);\n const cc = new UserCredentialCCUserSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n return this.host.sendCommand<UserCredentialCCUserReport>(cc, this.commandOptions);\n }\n /**\n * Applications should not use this method directly. Prefer the\n * `endpoint.accessControl` API for querying users.\n */\n @validateArgs_UserCredentialCCAPI_getUser()\n public async getUser(userId: number): Promise<UserCredentialCCUserReport | undefined> {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.UserGet);\n const cc = new UserCredentialCCUserGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n userId,\n });\n return this.host.sendCommand<UserCredentialCCUserReport>(cc, this.commandOptions);\n }\n // Credential Management\n /**\n * Applications should not use this method directly. Prefer the\n * `endpoint.accessControl` API for managing credentials.\n */\n @validateArgs_UserCredentialCCAPI_setCredential()\n public async setCredential(options: UserCredentialCCCredentialSetOptions): Promise<UserCredentialCCCredentialReport | undefined> {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.CredentialSet);\n const cc = new UserCredentialCCCredentialSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n return this.host.sendCommand<UserCredentialCCCredentialReport>(cc, this.commandOptions);\n }\n /**\n * Applications should not use this method directly. Prefer the\n * `endpoint.accessControl` API for querying credentials.\n */\n @validateArgs_UserCredentialCCAPI_getCredential()\n public async getCredential(userId: number, credentialType: UserCredentialType, credentialSlot: number): Promise<UserCredentialCCCredentialReport | undefined> {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.CredentialGet);\n const cc = new UserCredentialCCCredentialGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n userId,\n credentialType,\n credentialSlot,\n });\n return this.host.sendCommand<UserCredentialCCCredentialReport>(cc, this.commandOptions);\n }\n @validateArgs_UserCredentialCCAPI_startCredentialLearn()\n public async startCredentialLearn(options: UserCredentialCCCredentialLearnStartOptions): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.CredentialLearnStart);\n // The node will ignore the command if credential learning is not\n // supported for this credential type (CC:0083.01.0F.11.004)\n const caps = UserCredentialCC.getCredentialCapabilitiesCached(this.host, this.endpoint, options.credentialType);\n if (caps && !caps.supportsCredentialLearn) {\n throw new ZWaveError(`Credential learning is not supported for credential type ${getEnumMemberName(UserCredentialType, options.credentialType)}`, ZWaveErrorCodes.CC_NotSupported);\n }\n const cc = new UserCredentialCCCredentialLearnStart({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n public async cancelCredentialLearn(): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.CredentialLearnCancel);\n const cc = new UserCredentialCCCredentialLearnCancel({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n /**\n * Applications should not use this method directly. Prefer the\n * `endpoint.accessControl` API for reassigning credentials between users.\n */\n @validateArgs_UserCredentialCCAPI_setUserCredentialAssociation()\n public async setUserCredentialAssociation(options: UserCredentialCCAssociationSetOptions): Promise<UserCredentialCCAssociationReport | undefined> {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.UserCredentialAssociationSet);\n const cc = new UserCredentialCCAssociationSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n return this.host.sendCommand<UserCredentialCCAssociationReport>(cc, this.commandOptions);\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getAllUsersChecksum() {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.AllUsersChecksumGet);\n const cc = new UserCredentialCCAllUsersChecksumGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<UserCredentialCCAllUsersChecksumReport>(cc, this.commandOptions);\n return response?.checksum;\n }\n @validateArgs_UserCredentialCCAPI_getUserChecksum()\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getUserChecksum(userId: number) {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.UserChecksumGet);\n const cc = new UserCredentialCCUserChecksumGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n userId,\n });\n const response = await this.host.sendCommand<UserCredentialCCUserChecksumReport>(cc, this.commandOptions);\n return response?.checksum;\n }\n @validateArgs_UserCredentialCCAPI_getCredentialChecksum()\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getCredentialChecksum(credentialType: UserCredentialType) {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.CredentialChecksumGet);\n const cc = new UserCredentialCCCredentialChecksumGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n credentialType,\n });\n const response = await this.host.sendCommand<UserCredentialCCCredentialChecksumReport>(cc, this.commandOptions);\n return response?.checksum;\n }\n @validateArgs_UserCredentialCCAPI_setAdminPinCode()\n public async setAdminPinCode(options: UserCredentialCCAdminPinCodeSetOptions): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.AdminPinCodeSet);\n // Deactivating the admin code (empty string) requires ACD support,\n // otherwise the node may ignore the command (CC:0083.01.1A.13.003)\n if (options.pinCode.length === 0) {\n const supportsDeactivation = this.tryGetValueDB()?.getValue<boolean>(UserCredentialCCValues.supportsAdminCodeDeactivation.endpoint(this.endpoint.index));\n if (supportsDeactivation === false) {\n throw new ZWaveError(\"This node does not support deactivating the Admin Code\", ZWaveErrorCodes.CC_NotSupported);\n }\n }\n const cc = new UserCredentialCCAdminPinCodeSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getAdminPinCode() {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.AdminPinCodeGet);\n const cc = new UserCredentialCCAdminPinCodeGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<UserCredentialCCAdminPinCodeReport>(cc, this.commandOptions);\n return response?.pinCode;\n }\n @validateArgs_UserCredentialCCAPI_setKeyLockerEntry()\n public async setKeyLockerEntry(options: UserCredentialCCKeyLockerEntrySetOptions): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.KeyLockerEntrySet);\n const cc = new UserCredentialCCKeyLockerEntrySet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_UserCredentialCCAPI_getKeyLockerEntry()\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getKeyLockerEntry(entryType: UserCredentialKeyLockerEntryType, entrySlot: number) {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.KeyLockerEntryGet);\n const cc = new UserCredentialCCKeyLockerEntryGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n entryType,\n entrySlot,\n });\n const response = await this.host.sendCommand<UserCredentialCCKeyLockerEntryReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\n \"occupied\",\n \"entryType\",\n \"entrySlot\",\n ]);\n }\n }\n @validateArgs_UserCredentialCCAPI_sendUserCapabilitiesReport()\n public async sendUserCapabilitiesReport(options: UserCredentialCCUserCapabilitiesReportOptions): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.UserCapabilitiesReport);\n const cc = new UserCredentialCCUserCapabilitiesReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_UserCredentialCCAPI_sendCredentialCapabilitiesReport()\n public async sendCredentialCapabilitiesReport(options: UserCredentialCCCredentialCapabilitiesReportOptions): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.CredentialCapabilitiesReport);\n const cc = new UserCredentialCCCredentialCapabilitiesReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_UserCredentialCCAPI_sendKeyLockerCapabilitiesReport()\n public async sendKeyLockerCapabilitiesReport(options: UserCredentialCCKeyLockerCapabilitiesReportOptions): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.KeyLockerCapabilitiesReport);\n const cc = new UserCredentialCCKeyLockerCapabilitiesReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_UserCredentialCCAPI_sendUserReport()\n public async sendUserReport(options: UserCredentialCCUserReportOptions): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.UserReport);\n const cc = new UserCredentialCCUserReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_UserCredentialCCAPI_sendCredentialReport()\n public async sendCredentialReport(options: UserCredentialCCCredentialReportOptions): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.CredentialReport);\n const cc = new UserCredentialCCCredentialReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_UserCredentialCCAPI_sendCredentialLearnReport()\n public async sendCredentialLearnReport(options: UserCredentialCCCredentialLearnReportOptions): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.CredentialLearnReport);\n const cc = new UserCredentialCCCredentialLearnReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_UserCredentialCCAPI_sendUserCredentialAssociationReport()\n public async sendUserCredentialAssociationReport(options: UserCredentialCCAssociationReportOptions): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.UserCredentialAssociationReport);\n const cc = new UserCredentialCCAssociationReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_UserCredentialCCAPI_sendAllUsersChecksumReport()\n public async sendAllUsersChecksumReport(options: UserCredentialCCAllUsersChecksumReportOptions): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.AllUsersChecksumReport);\n const cc = new UserCredentialCCAllUsersChecksumReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_UserCredentialCCAPI_sendUserChecksumReport()\n public async sendUserChecksumReport(options: UserCredentialCCUserChecksumReportOptions): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.UserChecksumReport);\n const cc = new UserCredentialCCUserChecksumReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_UserCredentialCCAPI_sendCredentialChecksumReport()\n public async sendCredentialChecksumReport(options: UserCredentialCCCredentialChecksumReportOptions): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.CredentialChecksumReport);\n const cc = new UserCredentialCCCredentialChecksumReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_UserCredentialCCAPI_sendAdminPinCodeReport()\n public async sendAdminPinCodeReport(options: UserCredentialCCAdminPinCodeReportOptions): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.AdminPinCodeReport);\n const cc = new UserCredentialCCAdminPinCodeReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_UserCredentialCCAPI_sendKeyLockerEntryReport()\n public async sendKeyLockerEntryReport(options: UserCredentialCCKeyLockerEntryReportOptions): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.KeyLockerEntryReport);\n const cc = new UserCredentialCCKeyLockerEntryReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n}\n@commandClass(CommandClasses[\"User Credential\"])\n@implementedVersion(2)\n@ccValues(UserCredentialCCValues)\nexport class UserCredentialCC extends CommandClass {\n declare ccCommand: UserCredentialCommand;\n public async interview(ctx: InterviewContext): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"User Credential\"], ctx, endpoint).withOptions({\n priority: MessagePriority.NodeQuery,\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying user capabilities...\",\n direction: \"outbound\",\n });\n const userCaps = await api.getUserCapabilities();\n if (!userCaps) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"User capabilities query timed out - skipping interview\",\n level: \"warn\",\n });\n return;\n }\n // CL:0083.01.21.00.4: The controlling node MUST use User Credential\n // Command Class to control a supporting node unless the supporting\n // node reports that (0) Users are supported.\n if (userCaps.numberOfSupportedUsers === 0) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"Node reports 0 supported users and operates in User Code CC mode, skipping the rest of the interview...\",\n direction: \"none\",\n });\n this.setInterviewComplete(ctx, true);\n return;\n }\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying credential capabilities...\",\n direction: \"outbound\",\n });\n const credCaps = await api.getCredentialCapabilities();\n if (!credCaps) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"Credential capabilities query timed out - skipping interview\",\n level: \"warn\",\n });\n return;\n }\n if (api.version >= 2) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying key locker capabilities...\",\n direction: \"outbound\",\n });\n await api.getKeyLockerCapabilities();\n }\n await this.refreshValues(ctx);\n this.setInterviewComplete(ctx, true);\n }\n public async refreshValues(ctx: RefreshValuesContext): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n // CL:0083.01.21.00.4: The controlling node MUST use User Credential\n // Command Class to control a supporting node unless the supporting\n // node reports that (0) Users are supported.\n // In that case, User Code CC is used instead of this CC:\n if (this.getValue<number>(ctx, UserCredentialCCValues.supportedUsers)\n === 0) {\n return;\n }\n const api = CCAPI.create(CommandClasses[\"User Credential\"], ctx, endpoint).withOptions({\n priority: MessagePriority.NodeQuery,\n });\n const supportsAllUsersChecksum = this.getValue<boolean>(ctx, UserCredentialCCValues.supportsAllUsersChecksum);\n const supportsUserChecksum = this.getValue<boolean>(ctx, UserCredentialCCValues.supportsUserChecksum);\n const supportsAdminCode = this.getValue<boolean>(ctx, UserCredentialCCValues.supportsAdminCode);\n const supportedKeyLockerEntryTypes = this.getValue<UserCredentialKeyLockerEntryType[]>(ctx, UserCredentialCCValues.supportedKeyLockerEntryTypes);\n // If possible use the all-users checksum to determine whether to\n // skip full sync of all users and credentials\n let skipFullSync = false;\n let allUsersChecksum: number | undefined;\n if (supportsAllUsersChecksum) {\n allUsersChecksum = await api.getAllUsersChecksum();\n const cachedChecksum = this.getValue<number>(ctx, UserCredentialCCValues.allUsersChecksum);\n if (allUsersChecksum != undefined\n && cachedChecksum != undefined\n && allUsersChecksum === cachedChecksum) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"all-users checksum unchanged, skipping full sync\",\n direction: \"none\",\n });\n skipFullSync = true;\n }\n }\n if (!skipFullSync) {\n // Iterate all users starting from UUID 0\n let nextUserId = 0;\n let previousUserId = 0;\n do {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `querying user with UUID ${nextUserId}...`,\n direction: \"outbound\",\n });\n const user = await api.getUser(nextUserId);\n if (!user?.userId)\n break; // No user found, stop iterating\n const currentUserId = user.userId;\n // Purge cached data for any users in the gap between the\n // last reported user and this one\n for (let gapUserId = previousUserId + 1; gapUserId < currentUserId; gapUserId++) {\n this.purgeUserFromCache(ctx, gapUserId);\n }\n // If possible use the checksum to determine whether to sync\n // credentials for this user\n let userChecksum: number | undefined;\n let syncCredentials = true;\n if (supportsUserChecksum) {\n userChecksum = await api.getUserChecksum(currentUserId);\n const cachedUserChecksum = this.getValue<number>(ctx, UserCredentialCCValues.userChecksum(currentUserId));\n if (userChecksum != undefined\n && cachedUserChecksum != undefined\n && userChecksum === cachedUserChecksum) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `user ${currentUserId} checksum unchanged, skipping credential sync`,\n direction: \"none\",\n });\n syncCredentials = false;\n }\n }\n if (syncCredentials) {\n await this.queryCredentialsForUser(ctx, api, node.id, currentUserId);\n if (userChecksum != undefined) {\n this.setValue(ctx, UserCredentialCCValues.userChecksum(currentUserId), userChecksum);\n }\n }\n previousUserId = currentUserId;\n nextUserId = user.nextUserId ?? 0;\n } while (nextUserId > 0);\n }\n // After querying all users, save the checksum for the next refresh.\n if (allUsersChecksum != undefined) {\n this.setValue(ctx, UserCredentialCCValues.allUsersChecksum, allUsersChecksum);\n }\n // Query admin PIN code if supported\n if (supportsAdminCode) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying admin PIN code...\",\n direction: \"outbound\",\n });\n await api.getAdminPinCode();\n }\n // Query key locker entries (V2)\n if (api.version >= 2 && supportedKeyLockerEntryTypes?.length) {\n for (const entryType of supportedKeyLockerEntryTypes) {\n const entry = this.getValue<UserCredentialKeyLockerEntryCapability>(ctx, UserCredentialCCValues.keyLockerCapabilities(entryType));\n if (!entry)\n continue;\n for (let slot = 1; slot <= entry.numberOfEntrySlots; slot++) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `querying key locker entry type ${entryType}, slot ${slot}...`,\n direction: \"outbound\",\n });\n await api.getKeyLockerEntry(entryType, slot);\n }\n }\n }\n }\n private purgeUserFromCache(ctx: RefreshValuesContext, userId: number): void {\n // Remove all per-user values\n this.removeValue(ctx, UserCredentialCCValues.userType(userId));\n this.removeValue(ctx, UserCredentialCCValues.userActive(userId));\n this.removeValue(ctx, UserCredentialCCValues.credentialRule(userId));\n this.removeValue(ctx, UserCredentialCCValues.expiringTimeoutMinutes(userId));\n this.removeValue(ctx, UserCredentialCCValues.userName(userId));\n this.removeValue(ctx, UserCredentialCCValues.userModifierType(userId));\n this.removeValue(ctx, UserCredentialCCValues.userModifierNodeId(userId));\n this.removeValue(ctx, UserCredentialCCValues.userChecksum(userId));\n // Remove all credential values for this user\n const valueDB = this.getValueDB(ctx);\n const credentialOwners = valueDB.findValues((vid) => UserCredentialCCValues.credentialOwner.is(vid)\n && vid.endpoint === this.endpointIndex);\n for (const { endpoint, propertyKey, value } of credentialOwners) {\n if (value !== userId)\n continue;\n const key = propertyKey as number;\n const credentialType = key >>> 16;\n const credentialSlot = key & 0xffff;\n valueDB.removeValue(UserCredentialCCValues.credential(credentialType, credentialSlot).endpoint(endpoint));\n valueDB.removeValue(UserCredentialCCValues.credentialOwner(credentialType, credentialSlot).endpoint(endpoint));\n valueDB.removeValue(UserCredentialCCValues.credentialModifierType(credentialType, credentialSlot).endpoint(endpoint));\n valueDB.removeValue(UserCredentialCCValues.credentialModifierNodeId(credentialType, credentialSlot).endpoint(endpoint));\n }\n }\n private async queryCredentialsForUser(ctx: RefreshValuesContext, api: UserCredentialCCAPI, nodeId: number, userId: number): Promise<void> {\n // Start with credential type 0, slot 0 to get the first credential for this user\n let nextCredType: UserCredentialType = UserCredentialType.None;\n let nextCredSlot = 0;\n do {\n ctx.logNode(nodeId, {\n endpoint: this.endpointIndex,\n message: `querying credential for user ${userId}, type ${nextCredType}, slot ${nextCredSlot}...`,\n direction: \"outbound\",\n });\n const cred = await api.getCredential(userId, nextCredType, nextCredSlot);\n if (!cred?.credentialSlot)\n break; // No credential found, stop iterating\n nextCredType = cred.nextCredentialType ?? UserCredentialType.None;\n nextCredSlot = cred.nextCredentialSlot ?? 0;\n } while (nextCredType !== UserCredentialType.None || nextCredSlot !== 0);\n }\n public static getSupportedUsersCached(ctx: GetValueDB, endpoint: EndpointId): MaybeNotKnown<number> {\n return ctx\n .getValueDB(endpoint.nodeId)\n .getValue(UserCredentialCCValues.supportedUsers.endpoint(endpoint.index));\n }\n public static getSupportedCredentialTypesCached(ctx: GetValueDB, endpoint: EndpointId): MaybeNotKnown<UserCredentialType[]> {\n return ctx\n .getValueDB(endpoint.nodeId)\n .getValue(UserCredentialCCValues.supportedCredentialTypes.endpoint(endpoint.index));\n }\n public static getCredentialCapabilitiesCached(ctx: GetValueDB, endpoint: EndpointId, credentialType: UserCredentialType): MaybeNotKnown<UserCredentialCapability> {\n return ctx\n .getValueDB(endpoint.nodeId)\n .getValue(UserCredentialCCValues.credentialCapabilities(credentialType).endpoint(endpoint.index));\n }\n public static supportsAdminCodeCached(ctx: GetValueDB, endpoint: EndpointId): boolean {\n return (ctx\n .getValueDB(endpoint.nodeId)\n .getValue<boolean>(UserCredentialCCValues.supportsAdminCode.endpoint(endpoint.index)) ?? false);\n }\n}\n// ============================================================\n// Group 1: Capabilities\n// ============================================================\n// @publicAPI\nexport interface UserCredentialCCUserCapabilitiesReportOptions {\n numberOfSupportedUsers: number;\n supportedCredentialRules: UserCredentialRule[];\n maxUserNameLength: number;\n supportsUserSchedule: boolean;\n supportsAllUsersChecksum: boolean;\n supportsUserChecksum: boolean;\n supportedUserNameEncodings: UserCredentialNameEncoding[];\n supportedUserTypes: UserCredentialUserType[];\n}\n@CCCommand(UserCredentialCommand.UserCapabilitiesReport)\n@ccValueProperty(\"numberOfSupportedUsers\", UserCredentialCCValues.supportedUsers)\n@ccValueProperty(\"supportedCredentialRules\", UserCredentialCCValues.supportedCredentialRules)\n@ccValueProperty(\"maxUserNameLength\", UserCredentialCCValues.maxUserNameLength)\n@ccValueProperty(\"supportsUserSchedule\", UserCredentialCCValues.supportsUserSchedule)\n@ccValueProperty(\"supportsAllUsersChecksum\", UserCredentialCCValues.supportsAllUsersChecksum)\n@ccValueProperty(\"supportsUserChecksum\", UserCredentialCCValues.supportsUserChecksum)\n@ccValueProperty(\"supportedUserNameEncodings\", UserCredentialCCValues.supportedUserNameEncodings)\n@ccValueProperty(\"supportedUserTypes\", UserCredentialCCValues.supportedUserTypes)\nexport class UserCredentialCCUserCapabilitiesReport extends UserCredentialCC {\n public constructor(options: WithAddress<UserCredentialCCUserCapabilitiesReportOptions>) {\n super(options);\n this.numberOfSupportedUsers = options.numberOfSupportedUsers;\n this.supportedCredentialRules = options.supportedCredentialRules;\n this.maxUserNameLength = options.maxUserNameLength;\n this.supportsUserSchedule = options.supportsUserSchedule;\n this.supportsAllUsersChecksum = options.supportsAllUsersChecksum;\n this.supportsUserChecksum = options.supportsUserChecksum;\n this.supportedUserNameEncodings = options.supportedUserNameEncodings;\n this.supportedUserTypes = options.supportedUserTypes;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): UserCredentialCCUserCapabilitiesReport {\n validatePayload(raw.payload.length >= 4);\n const numberOfSupportedUsers = raw.payload.readUInt16BE(0);\n const credentialRulesBitmask = raw.payload[2];\n const supportedCredentialRules: UserCredentialRule[] = parseBitMask(Bytes.from([credentialRulesBitmask]), 0).filter((v) => v in UserCredentialRule);\n const maxUserNameLength = raw.payload[3];\n validatePayload(raw.payload.length >= 5);\n const flagsByte = raw.payload[4];\n const supportsUserSchedule = !!(flagsByte & 128);\n const supportsAllUsersChecksum = !!(flagsByte & 64);\n const supportsUserChecksum = !!(flagsByte & 32);\n // Name encoding bitmask in bits 4:2\n const nameEncodingBitmask = (flagsByte >> 2) & 0b111;\n let supportedUserNameEncodings: UserCredentialNameEncoding[];\n if (nameEncodingBitmask === 0) {\n // All encodings assumed supported per spec\n supportedUserNameEncodings = [\n UserCredentialNameEncoding.ASCII,\n UserCredentialNameEncoding.ExtendedASCII,\n UserCredentialNameEncoding.UTF16BE,\n ];\n }\n else {\n supportedUserNameEncodings = parseBitMask(Bytes.from([nameEncodingBitmask]), 0).filter((v) => v in UserCredentialNameEncoding);\n }\n validatePayload(raw.payload.length >= 6);\n const userTypesBitmaskLength = raw.payload[5];\n validatePayload(raw.payload.length >= 6 + userTypesBitmaskLength);\n const supportedUserTypes: UserCredentialUserType[] = parseBitMask(raw.payload.subarray(6, 6 + userTypesBitmaskLength), 0).filter((v) => v in UserCredentialUserType);\n return new this({\n nodeId: ctx.sourceNodeId,\n numberOfSupportedUsers,\n supportedCredentialRules,\n maxUserNameLength,\n supportsUserSchedule,\n supportsAllUsersChecksum,\n supportsUserChecksum,\n supportedUserNameEncodings,\n supportedUserTypes,\n });\n }\n public readonly numberOfSupportedUsers: number;\n public readonly supportedCredentialRules: UserCredentialRule[];\n public readonly maxUserNameLength: number;\n public readonly supportsUserSchedule: boolean;\n public readonly supportsAllUsersChecksum: boolean;\n public readonly supportsUserChecksum: boolean;\n public readonly supportedUserNameEncodings: UserCredentialNameEncoding[];\n public readonly supportedUserTypes: UserCredentialUserType[];\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const credentialRulesBitmask = encodeBitMask(this.supportedCredentialRules, UserCredentialRule.Triple, 0);\n const nameEncodingBitmask = encodeBitMask(this.supportedUserNameEncodings, UserCredentialNameEncoding.UTF16BE, UserCredentialNameEncoding.ASCII);\n const flagsByte = (this.supportsUserSchedule ? 0x80 : 0)\n | (this.supportsAllUsersChecksum ? 0x40 : 0)\n | (this.supportsUserChecksum ? 0x20 : 0)\n | ((nameEncodingBitmask[0] & 0b111) << 2);\n const userTypesBitmask = encodeBitMask(this.supportedUserTypes, UserCredentialUserType.RemoteOnly, UserCredentialUserType.General);\n this.payload = Bytes.alloc(6 + userTypesBitmask.length);\n this.payload.writeUInt16BE(this.numberOfSupportedUsers, 0);\n this.payload[2] = credentialRulesBitmask[0];\n this.payload[3] = this.maxUserNameLength;\n this.payload[4] = flagsByte;\n this.payload[5] = userTypesBitmask.length;\n this.payload.set(userTypesBitmask, 6);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"supported users\": this.numberOfSupportedUsers,\n \"supported credential rules\": this.supportedCredentialRules\n .map((r) => getEnumMemberName(UserCredentialRule, r))\n .join(\", \"),\n \"max user name length\": this.maxUserNameLength,\n \"user schedule support\": this.supportsUserSchedule,\n \"all users checksum support\": this.supportsAllUsersChecksum,\n \"user checksum support\": this.supportsUserChecksum,\n \"supported name encodings\": this.supportedUserNameEncodings\n .map((e) => getEnumMemberName(UserCredentialNameEncoding, e))\n .join(\", \"),\n \"supported user types\": this.supportedUserTypes\n .map((t) => getEnumMemberName(UserCredentialUserType, t))\n .join(\", \"),\n },\n };\n }\n}\n@CCCommand(UserCredentialCommand.UserCapabilitiesGet)\n@expectedCCResponse(UserCredentialCCUserCapabilitiesReport)\nexport class UserCredentialCCUserCapabilitiesGet extends UserCredentialCC {\n}\n// @publicAPI\nexport interface UserCredentialCCCredentialCapabilitiesReportOptions {\n supportsCredentialChecksum: boolean;\n supportsAdminCode: boolean;\n supportsAdminCodeDeactivation: boolean;\n credentialTypes: Map<UserCredentialType, UserCredentialCapability>;\n}\n@CCCommand(UserCredentialCommand.CredentialCapabilitiesReport)\n@ccValueProperty(\"supportsCredentialChecksum\", UserCredentialCCValues.supportsCredentialChecksum)\n@ccValueProperty(\"supportsAdminCode\", UserCredentialCCValues.supportsAdminCode)\n@ccValueProperty(\"supportsAdminCodeDeactivation\", UserCredentialCCValues.supportsAdminCodeDeactivation)\nexport class UserCredentialCCCredentialCapabilitiesReport extends UserCredentialCC {\n public constructor(options: WithAddress<UserCredentialCCCredentialCapabilitiesReportOptions>) {\n super(options);\n this.supportsCredentialChecksum = options.supportsCredentialChecksum;\n this.supportsAdminCode = options.supportsAdminCode;\n this.supportsAdminCodeDeactivation =\n options.supportsAdminCodeDeactivation;\n this.credentialTypes = options.credentialTypes;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): UserCredentialCCCredentialCapabilitiesReport {\n validatePayload(raw.payload.length >= 2);\n const flagsByte = raw.payload[0];\n const supportsCredentialChecksum = !!(flagsByte & 128);\n const supportsAdminCode = !!(flagsByte & 64);\n const supportsAdminCodeDeactivation = !!(flagsByte & 32);\n const numberOfCredentialTypes = raw.payload[1];\n const n = numberOfCredentialTypes;\n validatePayload(raw.payload.length >= 2 + n * 9);\n const credentialTypes = new Map<UserCredentialType, UserCredentialCapability>();\n // Grouped block offsets\n const credTypeOff = 2;\n const clSupportOff = credTypeOff + n;\n const numSlotsOff = clSupportOff + n;\n const minLenOff = numSlotsOff + n * 2;\n const maxLenOff = minLenOff + n;\n const clTimeoutOff = maxLenOff + n;\n const clStepsOff = clTimeoutOff + n;\n const maxHashLenOff = clStepsOff + n;\n for (let i = 0; i < n; i++) {\n const credentialType: UserCredentialType = raw.payload[credTypeOff + i];\n const clByte = raw.payload[clSupportOff + i];\n const supportsCredentialLearn = !!(clByte & 128);\n const numberOfCredentialSlots = raw.payload.readUInt16BE(numSlotsOff + i * 2);\n const minCredentialLength = raw.payload[minLenOff + i];\n const maxCredentialLength = raw.payload[maxLenOff + i];\n const credentialLearnRecommendedTimeout = raw.payload[clTimeoutOff + i];\n const credentialLearnNumberOfSteps = raw.payload[clStepsOff + i];\n const maxCredentialHashLength = raw.payload[maxHashLenOff + i];\n if (supportsCredentialLearn) {\n validatePayload(credentialLearnRecommendedTimeout > 0);\n validatePayload(credentialLearnNumberOfSteps > 0);\n credentialTypes.set(credentialType, {\n supportsCredentialLearn,\n numberOfCredentialSlots,\n minCredentialLength,\n maxCredentialLength,\n credentialLearnRecommendedTimeout,\n credentialLearnNumberOfSteps,\n maxCredentialHashLength,\n });\n }\n else {\n validatePayload(credentialLearnRecommendedTimeout === 0);\n validatePayload(credentialLearnNumberOfSteps === 0);\n credentialTypes.set(credentialType, {\n supportsCredentialLearn,\n numberOfCredentialSlots,\n minCredentialLength,\n maxCredentialLength,\n maxCredentialHashLength,\n });\n }\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n supportsCredentialChecksum,\n supportsAdminCode,\n supportsAdminCodeDeactivation,\n credentialTypes: credentialTypes,\n });\n }\n public readonly supportsCredentialChecksum: boolean;\n public readonly supportsAdminCode: boolean;\n public readonly supportsAdminCodeDeactivation: boolean;\n public readonly credentialTypes: Map<UserCredentialType, UserCredentialCapability>;\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n this.setValue(ctx, UserCredentialCCValues.supportedCredentialTypes, [...this.credentialTypes.keys()]);\n for (const [credentialType, capability] of this.credentialTypes) {\n this.setValue(ctx, UserCredentialCCValues.credentialCapabilities(credentialType), capability);\n }\n return true;\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const n = this.credentialTypes.size;\n this.payload = Bytes.alloc(2 + n * 9);\n this.payload[0] = (this.supportsCredentialChecksum ? 0x80 : 0)\n | (this.supportsAdminCode ? 0x40 : 0)\n | (this.supportsAdminCodeDeactivation ? 0x20 : 0);\n this.payload[1] = n;\n const credTypeOff = 2;\n const clSupportOff = credTypeOff + n;\n const numSlotsOff = clSupportOff + n;\n const minLenOff = numSlotsOff + n * 2;\n const maxLenOff = minLenOff + n;\n const clTimeoutOff = maxLenOff + n;\n const clStepsOff = clTimeoutOff + n;\n const maxHashLenOff = clStepsOff + n;\n let i = 0;\n for (const [credentialType, ct] of this.credentialTypes) {\n this.payload[credTypeOff + i] = credentialType;\n this.payload[clSupportOff + i] = ct.supportsCredentialLearn\n ? 0x80\n : 0;\n this.payload.writeUInt16BE(ct.numberOfCredentialSlots, numSlotsOff + i * 2);\n this.payload[minLenOff + i] = ct.minCredentialLength;\n this.payload[maxLenOff + i] = ct.maxCredentialLength;\n this.payload[clTimeoutOff + i] =\n ct.credentialLearnRecommendedTimeout ?? 0;\n this.payload[clStepsOff + i] = ct.credentialLearnNumberOfSteps ?? 0;\n this.payload[maxHashLenOff + i] = ct.maxCredentialHashLength;\n i++;\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"credential checksum support\": this.supportsCredentialChecksum,\n \"admin code support\": this.supportsAdminCode,\n \"admin code deactivation support\": this.supportsAdminCodeDeactivation,\n };\n for (const [credentialType, ct] of this.credentialTypes) {\n message[`credential type ${getEnumMemberName(UserCredentialType, credentialType)}`] = `slots: ${ct.numberOfCredentialSlots}, length: ${ct.minCredentialLength}-${ct.maxCredentialLength}`;\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n@CCCommand(UserCredentialCommand.CredentialCapabilitiesGet)\n@expectedCCResponse(UserCredentialCCCredentialCapabilitiesReport)\nexport class UserCredentialCCCredentialCapabilitiesGet extends UserCredentialCC {\n}\n// @publicAPI\nexport interface UserCredentialCCKeyLockerCapabilitiesReportOptions {\n keyLockerCapabilities: Map<UserCredentialKeyLockerEntryType, UserCredentialKeyLockerEntryCapability>;\n}\n@CCCommand(UserCredentialCommand.KeyLockerCapabilitiesReport)\nexport class UserCredentialCCKeyLockerCapabilitiesReport extends UserCredentialCC {\n public constructor(options: WithAddress<UserCredentialCCKeyLockerCapabilitiesReportOptions>) {\n super(options);\n this.keyLockerCapabilities = options.keyLockerCapabilities;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): UserCredentialCCKeyLockerCapabilitiesReport {\n validatePayload(raw.payload.length >= 1);\n const numberOfEntryTypes = raw.payload[0];\n const n = numberOfEntryTypes;\n validatePayload(raw.payload.length >= 1 + n * 7);\n const keyLockerCapabilities = new Map<UserCredentialKeyLockerEntryType, UserCredentialKeyLockerEntryCapability>();\n // Grouped block offsets\n const entryTypeOff = 1;\n const numSlotsOff = entryTypeOff + n;\n const minLenOff = numSlotsOff + n * 2;\n const maxLenOff = minLenOff + n * 2;\n for (let i = 0; i < n; i++) {\n const entryType: UserCredentialKeyLockerEntryType = raw.payload[entryTypeOff + i];\n const numberOfEntrySlots = raw.payload.readUInt16BE(numSlotsOff + i * 2);\n const minEntryDataLength = raw.payload.readUInt16BE(minLenOff + i * 2);\n const maxEntryDataLength = raw.payload.readUInt16BE(maxLenOff + i * 2);\n keyLockerCapabilities.set(entryType, {\n numberOfEntrySlots,\n minEntryDataLength,\n maxEntryDataLength,\n });\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n keyLockerCapabilities,\n });\n }\n public readonly keyLockerCapabilities: Map<UserCredentialKeyLockerEntryType, UserCredentialKeyLockerEntryCapability>;\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n this.setValue(ctx, UserCredentialCCValues.supportedKeyLockerEntryTypes, [...this.keyLockerCapabilities.keys()]);\n for (const [entryType, capability] of this.keyLockerCapabilities) {\n this.setValue(ctx, UserCredentialCCValues.keyLockerCapabilities(entryType), capability);\n }\n return true;\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const n = this.keyLockerCapabilities.size;\n this.payload = Bytes.alloc(1 + n * 7);\n this.payload[0] = n;\n const entryTypeOff = 1;\n const numSlotsOff = entryTypeOff + n;\n const minLenOff = numSlotsOff + n * 2;\n const maxLenOff = minLenOff + n * 2;\n let i = 0;\n for (const [entryType, capability] of this.keyLockerCapabilities) {\n this.payload[entryTypeOff + i] = entryType;\n this.payload.writeUInt16BE(capability.numberOfEntrySlots, numSlotsOff + i * 2);\n this.payload.writeUInt16BE(capability.minEntryDataLength, minLenOff + i * 2);\n this.payload.writeUInt16BE(capability.maxEntryDataLength, maxLenOff + i * 2);\n i++;\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {};\n for (const [entryType, capability] of this.keyLockerCapabilities) {\n message[`entry type ${getEnumMemberName(UserCredentialKeyLockerEntryType, entryType)}`] = `slots: ${capability.numberOfEntrySlots}, length: ${capability.minEntryDataLength}-${capability.maxEntryDataLength}`;\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n@CCCommand(UserCredentialCommand.KeyLockerCapabilitiesGet)\n@expectedCCResponse(UserCredentialCCKeyLockerCapabilitiesReport)\nexport class UserCredentialCCKeyLockerCapabilitiesGet extends UserCredentialCC {\n}\n// ============================================================\n// Group 2: User Management\n// ============================================================\n// @publicAPI\nexport type UserCredentialCCUserSetOptions = {\n userId: number;\n} & ({\n operationType: UserCredentialOperationType.Add | UserCredentialOperationType.Modify;\n active?: boolean;\n credentialRule?: UserCredentialRule;\n nameEncoding?: UserCredentialNameEncoding;\n userName?: string;\n} & ({\n userType: UserCredentialUserType.Expiring;\n expiringTimeoutMinutes: number;\n} | {\n userType?: Exclude<UserCredentialUserType, UserCredentialUserType.Expiring>;\n expiringTimeoutMinutes?: undefined;\n}) | {\n operationType: UserCredentialOperationType.Delete;\n userType?: undefined;\n active?: undefined;\n credentialRule?: undefined;\n expiringTimeoutMinutes?: undefined;\n nameEncoding?: undefined;\n userName?: undefined;\n});\nfunction testResponseForUserCredentialUserSet(sent: UserCredentialCCUserSet, received: UserCredentialCCUserReport) {\n // CC:0083.01.05.11.010, CC:0083.01.05.11.011, CC:0083.01.05.11.012,\n // CC:0083.01.05.11.013: UserSet MUST be answered by a UserReport.\n // Match any report type other than ResponseToGet. For Add/Modify/Delete\n // the report echoes the requested userId; for DeleteAll (userId 0) the\n // report contains userId 0.\n return (received.reportType !== UserCredentialUserReportType.ResponseToGet\n && received.userId === sent.userId);\n}\n@CCCommand(UserCredentialCommand.UserSet)\n// The response class is forward-declared here, so use a dynamic CC response\n// that resolves the class lazily.\n@expectedCCResponse(() => UserCredentialCCUserReport, testResponseForUserCredentialUserSet)\nexport class UserCredentialCCUserSet extends UserCredentialCC {\n public constructor(options: WithAddress<UserCredentialCCUserSetOptions>) {\n super(options);\n this.operationType = options.operationType;\n this.userId = options.userId;\n if (options.operationType !== UserCredentialOperationType.Delete) {\n this.userType = options.userType;\n this.active = options.active;\n this.credentialRule = options.credentialRule;\n this.expiringTimeoutMinutes = options.expiringTimeoutMinutes;\n this.nameEncoding = options.nameEncoding;\n this.userName = options.userName;\n }\n }\n public operationType: UserCredentialOperationType;\n public userId: number;\n public userType: UserCredentialUserType | undefined;\n public active: boolean | undefined;\n public credentialRule: UserCredentialRule | undefined;\n public expiringTimeoutMinutes: number | undefined;\n public nameEncoding: UserCredentialNameEncoding | undefined;\n public userName: string | undefined;\n public static from(raw: CCRaw, ctx: CCParsingContext): UserCredentialCCUserSet {\n validatePayload(raw.payload.length >= 3);\n const operationType: UserCredentialOperationType = raw.payload[0]\n & 0b11;\n const userId = raw.payload.readUInt16BE(1);\n if (operationType === UserCredentialOperationType.Delete) {\n return new this({\n nodeId: ctx.sourceNodeId,\n operationType,\n userId,\n });\n }\n // For Delete, the remaining fields MAY be omitted\n if (raw.payload.length < 10) {\n return new this({\n nodeId: ctx.sourceNodeId,\n operationType,\n userId,\n });\n }\n const userType: UserCredentialUserType = raw.payload[3];\n const active = !!(raw.payload[4] & 0b1);\n const credentialRule: UserCredentialRule = raw.payload[5];\n const expiringTimeoutMinutes = raw.payload.readUInt16BE(6);\n const nameEncoding: UserCredentialNameEncoding = raw.payload[8] & 0b111;\n const nameLength = raw.payload[9];\n validatePayload(raw.payload.length >= 10 + nameLength);\n let userName: string;\n if (nameEncoding === UserCredentialNameEncoding.UTF16BE) {\n userName = uint8ArrayToStringUTF16BE(raw.payload.subarray(10, 10 + nameLength));\n }\n else {\n userName = raw.payload\n .subarray(10, 10 + nameLength)\n .toString(\"ascii\");\n }\n if (userType === UserCredentialUserType.Expiring) {\n return new this({\n nodeId: ctx.sourceNodeId,\n operationType,\n userId,\n userType,\n expiringTimeoutMinutes,\n active,\n credentialRule,\n nameEncoding,\n userName,\n });\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n operationType,\n userId,\n userType,\n active,\n credentialRule,\n nameEncoding,\n userName,\n });\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n // For Delete, remaining user-detail fields MAY be omitted\n if (this.operationType === UserCredentialOperationType.Delete) {\n this.payload = Bytes.alloc(3);\n this.payload[0] = this.operationType & 0b11;\n this.payload.writeUInt16BE(this.userId, 1);\n return super.serialize(ctx);\n }\n if (this.userType == undefined) {\n throw new ZWaveError(`${this.constructor.name}: user type must be set for Add/Modify operations`, ZWaveErrorCodes.Argument_Invalid);\n }\n if (this.active == undefined) {\n throw new ZWaveError(`${this.constructor.name}: The active flag must be set for Add/Modify operations`, ZWaveErrorCodes.Argument_Invalid);\n }\n // Credential rule defaults to Single\n const credentialRule = this.credentialRule ?? UserCredentialRule.Single;\n // Expiring timeout MUST be 0 for non-Expiring user types\n let expiringTimeoutMinutes: number;\n if (this.userType === UserCredentialUserType.Expiring) {\n if (this.expiringTimeoutMinutes == undefined) {\n throw new ZWaveError(`${this.constructor.name}: expiring timeout minutes must be set for Expiring user type`, ZWaveErrorCodes.Argument_Invalid);\n }\n expiringTimeoutMinutes = this.expiringTimeoutMinutes;\n }\n else {\n expiringTimeoutMinutes = 0;\n }\n // Name encoding defaults to ASCII\n const nameEncoding = this.nameEncoding\n ?? UserCredentialNameEncoding.ASCII;\n // User name defaults to empty string\n const userName = this.userName ?? \"\";\n let nameBuffer: Uint8Array;\n if (nameEncoding === UserCredentialNameEncoding.UTF16BE) {\n nameBuffer = stringToUint8ArrayUTF16BE(userName);\n }\n else {\n nameBuffer = Bytes.from(userName, \"ascii\");\n }\n this.payload = Bytes.alloc(10 + nameBuffer.length);\n this.payload[0] = this.operationType & 0b11;\n this.payload.writeUInt16BE(this.userId, 1);\n this.payload[3] = this.userType;\n this.payload[4] = this.active ? 0b1 : 0;\n this.payload[5] = credentialRule;\n this.payload.writeUInt16BE(expiringTimeoutMinutes, 6);\n this.payload[8] = nameEncoding & 0b111;\n this.payload[9] = nameBuffer.length;\n if (nameBuffer.length > 0) {\n this.payload.set(nameBuffer, 10);\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"operation type\": getEnumMemberName(UserCredentialOperationType, this.operationType),\n \"user ID\": this.userId,\n };\n if (this.userType != undefined) {\n message[\"user type\"] = getEnumMemberName(UserCredentialUserType, this.userType);\n }\n if (this.active != undefined) {\n message[\"active\"] = this.active;\n }\n if (this.credentialRule != undefined) {\n message[\"credential rule\"] = getEnumMemberName(UserCredentialRule, this.credentialRule);\n }\n if (this.expiringTimeoutMinutes != undefined) {\n message[\"expiring timeout (minutes)\"] = this.expiringTimeoutMinutes;\n }\n if (this.nameEncoding != undefined) {\n message[\"name encoding\"] = getEnumMemberName(UserCredentialNameEncoding, this.nameEncoding);\n }\n if (this.userName != undefined) {\n message[\"user name\"] = this.userName;\n }\n return { ...super.toLogEntry(ctx), message };\n }\n}\n// @publicAPI\nexport type UserCredentialCCUserReportOptions = {\n modifierType: UserCredentialModifierType;\n modifierNodeId: number;\n userId: number;\n userType: UserCredentialUserType;\n active: boolean;\n credentialRule: UserCredentialRule;\n expiringTimeoutMinutes: number;\n nameEncoding: UserCredentialNameEncoding;\n userName: string;\n} & ({\n reportType: UserCredentialUserReportType.ResponseToGet;\n nextUserId: number;\n} | {\n reportType: Exclude<UserCredentialUserReportType, UserCredentialUserReportType.ResponseToGet>;\n nextUserId?: undefined;\n});\n@CCCommand(UserCredentialCommand.UserReport)\nexport class UserCredentialCCUserReport extends UserCredentialCC {\n public constructor(options: WithAddress<UserCredentialCCUserReportOptions>) {\n super(options);\n this.reportType = options.reportType;\n if (options.reportType === UserCredentialUserReportType.ResponseToGet) {\n this.nextUserId = options.nextUserId;\n }\n this.modifierType = options.modifierType;\n this.modifierNodeId = options.modifierNodeId;\n this.userId = options.userId;\n this.userType = options.userType;\n this.active = options.active;\n this.credentialRule = options.credentialRule;\n this.expiringTimeoutMinutes = options.expiringTimeoutMinutes;\n this.nameEncoding = options.nameEncoding;\n this.userName = options.userName;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): UserCredentialCCUserReport {\n validatePayload(raw.payload.length >= 13);\n const reportType: UserCredentialUserReportType = raw.payload[0];\n const nextUserId = raw.payload.readUInt16BE(1);\n const modifierType: UserCredentialModifierType = raw.payload[3];\n const modifierNodeId = raw.payload.readUInt16BE(4);\n const userId = raw.payload.readUInt16BE(6);\n const userType: UserCredentialUserType = raw.payload[8];\n const active = !!(raw.payload[9] & 0b1);\n const credentialRule: UserCredentialRule = raw.payload[10];\n const expiringTimeoutMinutes = raw.payload.readUInt16BE(11);\n validatePayload(raw.payload.length >= 15);\n const nameEncoding: UserCredentialNameEncoding = raw.payload[13]\n & 0b111;\n const nameLength = raw.payload[14];\n validatePayload(raw.payload.length >= 15 + nameLength);\n let userName: string;\n if (nameEncoding === UserCredentialNameEncoding.UTF16BE) {\n userName = uint8ArrayToStringUTF16BE(raw.payload.subarray(15, 15 + nameLength));\n }\n else {\n userName = raw.payload\n .subarray(15, 15 + nameLength)\n .toString(\"ascii\");\n }\n const common = {\n nodeId: ctx.sourceNodeId,\n modifierType,\n modifierNodeId,\n userId,\n userType,\n active,\n credentialRule,\n expiringTimeoutMinutes,\n nameEncoding,\n userName,\n };\n if (reportType === UserCredentialUserReportType.ResponseToGet) {\n return new this({ ...common, reportType, nextUserId });\n }\n return new this({ ...common, reportType });\n }\n public readonly reportType: UserCredentialUserReportType;\n public readonly nextUserId?: number;\n public readonly modifierType: UserCredentialModifierType;\n public readonly modifierNodeId: number;\n public readonly userId: number;\n public readonly userType: UserCredentialUserType;\n public readonly active: boolean;\n public readonly credentialRule: UserCredentialRule;\n public readonly expiringTimeoutMinutes: number;\n public readonly nameEncoding: UserCredentialNameEncoding;\n public readonly userName: string;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n let nameBuffer: Uint8Array;\n if (this.nameEncoding === UserCredentialNameEncoding.UTF16BE) {\n nameBuffer = stringToUint8ArrayUTF16BE(this.userName);\n }\n else {\n nameBuffer = Bytes.from(this.userName, \"ascii\");\n }\n this.payload = Bytes.alloc(15 + nameBuffer.length);\n this.payload[0] = this.reportType;\n this.payload.writeUInt16BE(this.nextUserId ?? 0, 1);\n this.payload[3] = this.modifierType;\n this.payload.writeUInt16BE(this.modifierNodeId, 4);\n this.payload.writeUInt16BE(this.userId, 6);\n this.payload[8] = this.userType;\n this.payload[9] = this.active ? 0b1 : 0;\n this.payload[10] = this.credentialRule;\n this.payload.writeUInt16BE(this.expiringTimeoutMinutes, 11);\n this.payload[13] = this.nameEncoding & 0b111;\n this.payload[14] = nameBuffer.length;\n if (nameBuffer.length > 0) {\n this.payload.set(nameBuffer, 15);\n }\n return super.serialize(ctx);\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n if (this.userId === 0)\n return true;\n // A UserModifyRejectedLocationEmpty report means we have a stale cache\n // entry for a user that no longer exists on the device.\n if (this.reportType\n === UserCredentialUserReportType.UserDeleted\n || this.reportType\n === UserCredentialUserReportType.UserModifyRejectedLocationEmpty) {\n // Remove all values for this user\n const userId = this.userId;\n this.removeValue(ctx, UserCredentialCCValues.userType(userId));\n this.removeValue(ctx, UserCredentialCCValues.userActive(userId));\n this.removeValue(ctx, UserCredentialCCValues.credentialRule(userId));\n this.removeValue(ctx, UserCredentialCCValues.expiringTimeoutMinutes(userId));\n this.removeValue(ctx, UserCredentialCCValues.userName(userId));\n this.removeValue(ctx, UserCredentialCCValues.userModifierType(userId));\n this.removeValue(ctx, UserCredentialCCValues.userModifierNodeId(userId));\n return true;\n }\n // A UserAddRejectedLocationOccupied report contains the data for the\n // existing user, so we can update our cache with the actual state.\n if (this.reportType\n !== UserCredentialUserReportType.ResponseToGet\n && this.reportType\n !== UserCredentialUserReportType.UserAdded\n && this.reportType\n !== UserCredentialUserReportType.UserModified\n && this.reportType\n !== UserCredentialUserReportType.UserAddRejectedLocationOccupied) {\n return true;\n }\n const userId = this.userId;\n this.ensureMetadata(ctx, UserCredentialCCValues.userType(userId));\n this.setValue(ctx, UserCredentialCCValues.userType(userId), this.userType);\n this.ensureMetadata(ctx, UserCredentialCCValues.userActive(userId));\n this.setValue(ctx, UserCredentialCCValues.userActive(userId), this.active);\n this.ensureMetadata(ctx, UserCredentialCCValues.credentialRule(userId));\n this.setValue(ctx, UserCredentialCCValues.credentialRule(userId), this.credentialRule);\n this.ensureMetadata(ctx, UserCredentialCCValues.expiringTimeoutMinutes(userId));\n this.setValue(ctx, UserCredentialCCValues.expiringTimeoutMinutes(userId), this.expiringTimeoutMinutes);\n this.ensureMetadata(ctx, UserCredentialCCValues.userName(userId));\n this.setValue(ctx, UserCredentialCCValues.userName(userId), this.userName);\n this.setValue(ctx, UserCredentialCCValues.userModifierType(userId), this.modifierType);\n this.setValue(ctx, UserCredentialCCValues.userModifierNodeId(userId), this.modifierNodeId);\n return true;\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"report type\": getEnumMemberName(UserCredentialUserReportType, this.reportType),\n };\n if (this.nextUserId != undefined) {\n message[\"next user ID\"] = this.nextUserId;\n }\n message[\"modifier type\"] = getEnumMemberName(UserCredentialModifierType, this.modifierType);\n message[\"modifier node id\"] = this.modifierNodeId;\n message[\"user ID\"] = this.userId;\n message[\"user type\"] = getEnumMemberName(UserCredentialUserType, this.userType);\n message.active = this.active;\n message[\"credential rule\"] = getEnumMemberName(UserCredentialRule, this.credentialRule);\n message[\"expiring timeout (minutes)\"] = this.expiringTimeoutMinutes;\n message[\"name encoding\"] = getEnumMemberName(UserCredentialNameEncoding, this.nameEncoding);\n message[\"user name\"] = this.userName;\n return { ...super.toLogEntry(ctx), message };\n }\n}\n// @publicAPI\nexport interface UserCredentialCCUserGetOptions {\n userId: number;\n}\nfunction testResponseForUserCredentialUserGet(sent: UserCredentialCCUserGet, received: UserCredentialCCUserReport) {\n return (received.reportType\n === UserCredentialUserReportType.ResponseToGet);\n}\n@CCCommand(UserCredentialCommand.UserGet)\n@expectedCCResponse(UserCredentialCCUserReport, testResponseForUserCredentialUserGet)\nexport class UserCredentialCCUserGet extends UserCredentialCC {\n public constructor(options: WithAddress<UserCredentialCCUserGetOptions>) {\n super(options);\n this.userId = options.userId;\n }\n public userId: number;\n public static from(raw: CCRaw, ctx: CCParsingContext): UserCredentialCCUserGet {\n validatePayload(raw.payload.length >= 2);\n const userId = raw.payload.readUInt16BE(0);\n return new this({\n nodeId: ctx.sourceNodeId,\n userId,\n });\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.alloc(2);\n this.payload.writeUInt16BE(this.userId, 0);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"user ID\": this.userId,\n },\n };\n }\n}\n// ============================================================\n// Group 3: Credential Management\n// ============================================================\n// @publicAPI\nexport type UserCredentialCCCredentialSetOptions = {\n userId: number;\n credentialType: UserCredentialType;\n credentialSlot: number;\n} & ({\n operationType: UserCredentialOperationType.Add | UserCredentialOperationType.Modify;\n credentialData: Bytes;\n} | {\n operationType: UserCredentialOperationType.Delete;\n credentialData?: undefined;\n});\nfunction testResponseForUserCredentialCredentialSet(sent: UserCredentialCCCredentialSet, received: UserCredentialCCCredentialReport) {\n // CC:0083.01.0A.11.010, CC:0083.01.0A.11.011, CC:0083.01.0A.11.012,\n // CC:0083.01.0A.11.013: CredentialSet MUST be answered by a\n // CredentialReport. The credentialType is always echoed, so we use it\n // as the primary correlation. DuplicateCredential and DuplicateAdminPINCode\n // reports reference the EXISTING duplicate's (userId, slot) rather than\n // the requested location, so we cannot correlate them on slot.\n if (received.reportType\n === UserCredentialCredentialReportType.ResponseToGet) {\n return false;\n }\n if (received.credentialType !== sent.credentialType) {\n return false;\n }\n if (received.reportType\n === UserCredentialCredentialReportType.DuplicateCredential\n || received.reportType\n === UserCredentialCredentialReportType.DuplicateAdminPINCode) {\n return true;\n }\n return received.credentialSlot === sent.credentialSlot;\n}\n@CCCommand(UserCredentialCommand.CredentialSet)\n@expectedCCResponse(() => UserCredentialCCCredentialReport, testResponseForUserCredentialCredentialSet)\nexport class UserCredentialCCCredentialSet extends UserCredentialCC {\n public constructor(options: WithAddress<UserCredentialCCCredentialSetOptions>) {\n super(options);\n this.userId = options.userId;\n this.credentialType = options.credentialType;\n this.credentialSlot = options.credentialSlot;\n this.operationType = options.operationType;\n if (options.operationType !== UserCredentialOperationType.Delete) {\n this.credentialData = options.credentialData;\n }\n }\n public userId: number;\n public credentialType: UserCredentialType;\n public credentialSlot: number;\n public operationType: UserCredentialOperationType;\n public credentialData: Bytes | undefined;\n public static from(raw: CCRaw, ctx: CCParsingContext): UserCredentialCCCredentialSet {\n validatePayload(raw.payload.length >= 6);\n const userId = raw.payload.readUInt16BE(0);\n const credentialType: UserCredentialType = raw.payload[2];\n const credentialSlot = raw.payload.readUInt16BE(3);\n const operationType: UserCredentialOperationType = raw.payload[5]\n & 0b11;\n if (operationType === UserCredentialOperationType.Delete) {\n return new this({\n nodeId: ctx.sourceNodeId,\n userId,\n credentialType,\n credentialSlot,\n operationType,\n });\n }\n let credentialData = new Bytes();\n if (raw.payload.length >= 7) {\n const credentialLength = raw.payload[6];\n validatePayload(raw.payload.length >= 7 + credentialLength);\n credentialData = Bytes.from(raw.payload.subarray(7, 7 + credentialLength));\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n userId,\n credentialType,\n credentialSlot,\n operationType,\n credentialData,\n });\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n // For Delete, credential data MAY be omitted\n if (this.operationType === UserCredentialOperationType.Delete) {\n this.payload = Bytes.alloc(6);\n this.payload.writeUInt16BE(this.userId, 0);\n this.payload[2] = this.credentialType;\n this.payload.writeUInt16BE(this.credentialSlot, 3);\n this.payload[5] = this.operationType & 0b11;\n return super.serialize(ctx);\n }\n if (this.credentialData == undefined) {\n throw new ZWaveError(`${this.constructor.name}: credential data must be set for Add/Modify operations`, ZWaveErrorCodes.Argument_Invalid);\n }\n this.payload = Bytes.alloc(7 + this.credentialData.length);\n this.payload.writeUInt16BE(this.userId, 0);\n this.payload[2] = this.credentialType;\n this.payload.writeUInt16BE(this.credentialSlot, 3);\n this.payload[5] = this.operationType & 0b11;\n this.payload[6] = this.credentialData.length;\n if (this.credentialData.length > 0) {\n this.payload.set(this.credentialData, 7);\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"user ID\": this.userId,\n \"credential type\": getEnumMemberName(UserCredentialType, this.credentialType),\n \"credential slot\": this.credentialSlot,\n \"operation type\": getEnumMemberName(UserCredentialOperationType, this.operationType),\n };\n if (this.credentialData != undefined) {\n message[\"credential data\"] = credentialToLogString(this.credentialData);\n }\n return { ...super.toLogEntry(ctx), message };\n }\n}\n// @publicAPI\nexport type UserCredentialCCCredentialReportOptions = {\n userId: number;\n credentialType: UserCredentialType;\n credentialSlot: number;\n modifierType: UserCredentialModifierType;\n modifierNodeId: number;\n} & ({\n credentialReadBack: true;\n credentialData: Bytes;\n} | {\n credentialReadBack: false;\n credentialData?: undefined;\n}) & ({\n reportType: UserCredentialCredentialReportType.ResponseToGet;\n nextCredentialType: UserCredentialType;\n nextCredentialSlot: number;\n} | {\n reportType: Exclude<UserCredentialCredentialReportType, UserCredentialCredentialReportType.ResponseToGet>;\n nextCredentialType?: undefined;\n nextCredentialSlot?: undefined;\n});\n@CCCommand(UserCredentialCommand.CredentialReport)\nexport class UserCredentialCCCredentialReport extends UserCredentialCC {\n public constructor(options: WithAddress<UserCredentialCCCredentialReportOptions>) {\n super(options);\n this.reportType = options.reportType;\n this.userId = options.userId;\n this.credentialType = options.credentialType;\n this.credentialSlot = options.credentialSlot;\n this.credentialReadBack = options.credentialReadBack;\n if (options.credentialReadBack) {\n this.credentialData = options.credentialData;\n }\n this.modifierType = options.modifierType;\n this.modifierNodeId = options.modifierNodeId;\n if (options.reportType\n === UserCredentialCredentialReportType.ResponseToGet) {\n this.nextCredentialType = options.nextCredentialType;\n this.nextCredentialSlot = options.nextCredentialSlot;\n }\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): UserCredentialCCCredentialReport {\n validatePayload(raw.payload.length >= 8);\n const reportType: UserCredentialCredentialReportType = raw.payload[0];\n const userId = raw.payload.readUInt16BE(1);\n const credentialType: UserCredentialType = raw.payload[3];\n const credentialSlot = raw.payload.readUInt16BE(4);\n const credentialReadBack = !!(raw.payload[6] & 128);\n const credentialLength = raw.payload[7];\n validatePayload(raw.payload.length >= 8 + credentialLength + 6);\n const offset = 8 + credentialLength;\n const modifierType: UserCredentialModifierType = raw.payload[offset];\n const modifierNodeId = raw.payload.readUInt16BE(offset + 1);\n const common = {\n nodeId: ctx.sourceNodeId,\n userId,\n credentialType,\n credentialSlot,\n modifierType,\n modifierNodeId,\n };\n const dataOptions = credentialReadBack\n ? {\n credentialReadBack: true,\n credentialData: Bytes.from(raw.payload.subarray(8, 8 + credentialLength)),\n } as const\n : { credentialReadBack: false } as const;\n if (reportType === UserCredentialCredentialReportType.ResponseToGet) {\n return new this({\n ...common,\n ...dataOptions,\n reportType,\n nextCredentialType: raw.payload[offset + 3],\n nextCredentialSlot: raw.payload.readUInt16BE(offset + 4),\n });\n }\n return new this({\n ...common,\n ...dataOptions,\n reportType,\n });\n }\n public readonly reportType: UserCredentialCredentialReportType;\n public readonly userId: number;\n public readonly credentialType: UserCredentialType;\n public readonly credentialSlot: number;\n public readonly credentialReadBack: boolean;\n public readonly credentialData?: Bytes;\n public readonly modifierType: UserCredentialModifierType;\n public readonly modifierNodeId: number;\n public readonly nextCredentialType?: UserCredentialType;\n public readonly nextCredentialSlot?: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const credentialData = this.credentialData ?? new Bytes();\n this.payload = Bytes.alloc(14 + credentialData.length);\n this.payload[0] = this.reportType;\n this.payload.writeUInt16BE(this.userId, 1);\n this.payload[3] = this.credentialType;\n this.payload.writeUInt16BE(this.credentialSlot, 4);\n this.payload[6] = this.credentialReadBack ? 0x80 : 0x00;\n this.payload[7] = credentialData.length;\n if (credentialData.length > 0) {\n this.payload.set(credentialData, 8);\n }\n const offset = 8 + credentialData.length;\n this.payload[offset] = this.modifierType;\n this.payload.writeUInt16BE(this.modifierNodeId, offset + 1);\n this.payload[offset + 3] = this.nextCredentialType\n ?? UserCredentialType.None;\n this.payload.writeUInt16BE(this.nextCredentialSlot ?? 0, offset + 4);\n return super.serialize(ctx);\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n // A CredentialModifyRejectedLocationEmpty report means we have a stale\n // cache entry for a credential that no longer exists on the device.\n // CredentialDeleted reports may echo the request fields, including the\n // wildcard zeros used to trigger bulk deletes per CC:0083.01.0A.\n if (this.reportType\n === UserCredentialCredentialReportType.CredentialDeleted\n || this.reportType\n === UserCredentialCredentialReportType\n .CredentialModifyRejectedLocationEmpty) {\n if (this.credentialType !== UserCredentialType.None\n && this.credentialSlot !== 0) {\n // Single credential. The (type, slot) tuple uniquely identifies\n // the entry in the value DB, so the userId is not needed.\n this.removeValue(ctx, UserCredentialCCValues.credential(this.credentialType, this.credentialSlot));\n this.removeValue(ctx, UserCredentialCCValues.credentialOwner(this.credentialType, this.credentialSlot));\n this.removeValue(ctx, UserCredentialCCValues.credentialModifierType(this.credentialType, this.credentialSlot));\n this.removeValue(ctx, UserCredentialCCValues.credentialModifierNodeId(this.credentialType, this.credentialSlot));\n }\n else {\n // Bulk delete. Walk all cached credentials and remove those\n // matching the (userId, type) filter (zero means wildcard).\n const valueDB = this.getValueDB(ctx);\n const credentialOwners = valueDB.findValues((vid) => UserCredentialCCValues.credentialOwner.is(vid)\n && vid.endpoint === this.endpointIndex);\n for (const { endpoint, propertyKey, value } of credentialOwners) {\n // If a user ID is given, only delete credentials owned by that user\n if (this.userId !== 0 && value !== this.userId)\n continue;\n const key = propertyKey as number;\n const cType = key >>> 16;\n const cSlot = key & 0xffff;\n // If a credential type is given, only delete credentials of that type\n if (this.credentialType !== UserCredentialType.None\n && cType !== this.credentialType) {\n continue;\n }\n valueDB.removeValue(UserCredentialCCValues.credential(cType, cSlot)\n .endpoint(endpoint));\n valueDB.removeValue(UserCredentialCCValues.credentialOwner(cType, cSlot)\n .endpoint(endpoint));\n valueDB.removeValue(UserCredentialCCValues.credentialModifierType(cType, cSlot).endpoint(endpoint));\n valueDB.removeValue(UserCredentialCCValues.credentialModifierNodeId(cType, cSlot).endpoint(endpoint));\n }\n }\n return true;\n }\n // Non-delete reports may carry (None, 0) as a sentinel for \"no credential\n // at this location\" \u2014 e.g. the end-of-walk marker in nextCredential* of\n // a ResponseToGet. Bail out so we don't write bogus cache entries.\n if (this.credentialType === UserCredentialType.None\n || this.credentialSlot === 0) {\n return true;\n }\n // A CredentialAddRejectedLocationOccupied report includes the actual\n // credential data in the read-back field when the device chooses to\n // reveal it, so we can update our cache with the real state.\n const isRejectionWithReadback = this.reportType\n === UserCredentialCredentialReportType\n .CredentialAddRejectedLocationOccupied\n && this.credentialReadBack;\n if (this.reportType\n !== UserCredentialCredentialReportType.ResponseToGet\n && this.reportType\n !== UserCredentialCredentialReportType.CredentialAdded\n && this.reportType\n !== UserCredentialCredentialReportType.CredentialModified\n && !isRejectionWithReadback) {\n return true;\n }\n if (this.credentialData != undefined) {\n this.ensureMetadata(ctx, UserCredentialCCValues.credential(this.credentialType, this.credentialSlot));\n this.setValue(ctx, UserCredentialCCValues.credential(this.credentialType, this.credentialSlot), normalizeCredentialData(this.credentialType, this.credentialData));\n }\n this.setValue(ctx, UserCredentialCCValues.credentialOwner(this.credentialType, this.credentialSlot), this.userId);\n this.setValue(ctx, UserCredentialCCValues.credentialModifierType(this.credentialType, this.credentialSlot), this.modifierType);\n this.setValue(ctx, UserCredentialCCValues.credentialModifierNodeId(this.credentialType, this.credentialSlot), this.modifierNodeId);\n return true;\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"report type\": getEnumMemberName(UserCredentialCredentialReportType, this.reportType),\n \"user ID\": this.userId,\n \"credential type\": getEnumMemberName(UserCredentialType, this.credentialType),\n \"credential slot\": this.credentialSlot,\n \"credential read-back\": this.credentialReadBack,\n };\n if (this.credentialData != undefined) {\n message[\"credential data\"] = credentialToLogString(this.credentialData);\n }\n message[\"modifier type\"] = getEnumMemberName(UserCredentialModifierType, this.modifierType);\n message[\"modifier node id\"] = this.modifierNodeId;\n if (this.nextCredentialType != undefined) {\n message[\"next credential type\"] = getEnumMemberName(UserCredentialType, this.nextCredentialType);\n }\n if (this.nextCredentialSlot != undefined) {\n message[\"next credential slot\"] = this.nextCredentialSlot;\n }\n return { ...super.toLogEntry(ctx), message };\n }\n}\n// @publicAPI\nexport interface UserCredentialCCCredentialGetOptions {\n userId: number;\n credentialType: UserCredentialType;\n credentialSlot: number;\n}\nfunction testResponseForUserCredentialCredentialGet(_sent: UserCredentialCCCredentialGet, received: UserCredentialCCCredentialReport) {\n return (received.reportType\n === UserCredentialCredentialReportType.ResponseToGet);\n}\n@CCCommand(UserCredentialCommand.CredentialGet)\n@expectedCCResponse(UserCredentialCCCredentialReport, testResponseForUserCredentialCredentialGet)\nexport class UserCredentialCCCredentialGet extends UserCredentialCC {\n public constructor(options: WithAddress<UserCredentialCCCredentialGetOptions>) {\n super(options);\n this.userId = options.userId;\n this.credentialType = options.credentialType;\n this.credentialSlot = options.credentialSlot;\n }\n public userId: number;\n public credentialType: UserCredentialType;\n public credentialSlot: number;\n public static from(raw: CCRaw, ctx: CCParsingContext): UserCredentialCCCredentialGet {\n validatePayload(raw.payload.length >= 5);\n const userId = raw.payload.readUInt16BE(0);\n const credentialType: UserCredentialType = raw.payload[2];\n const credentialSlot = raw.payload.readUInt16BE(3);\n return new this({\n nodeId: ctx.sourceNodeId,\n userId,\n credentialType,\n credentialSlot,\n });\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.alloc(5);\n this.payload.writeUInt16BE(this.userId, 0);\n this.payload[2] = this.credentialType;\n this.payload.writeUInt16BE(this.credentialSlot, 3);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"user ID\": this.userId,\n \"credential type\": getEnumMemberName(UserCredentialType, this.credentialType),\n \"credential slot\": this.credentialSlot,\n },\n };\n }\n}\n// ============================================================\n// Group 4: Credential Learn\n// ============================================================\n// @publicAPI\nexport interface UserCredentialCCCredentialLearnStartOptions {\n userId: number;\n credentialType: UserCredentialType;\n credentialSlot: number;\n operationType: UserCredentialOperationType;\n learnTimeout: number;\n}\n@CCCommand(UserCredentialCommand.CredentialLearnStart)\n@useSupervision()\nexport class UserCredentialCCCredentialLearnStart extends UserCredentialCC {\n public constructor(options: WithAddress<UserCredentialCCCredentialLearnStartOptions>) {\n super(options);\n this.userId = options.userId;\n this.credentialType = options.credentialType;\n this.credentialSlot = options.credentialSlot;\n this.operationType = options.operationType;\n this.learnTimeout = options.learnTimeout;\n }\n public userId: number;\n public credentialType: UserCredentialType;\n public credentialSlot: number;\n public operationType: UserCredentialOperationType;\n public learnTimeout: number;\n public static from(raw: CCRaw, ctx: CCParsingContext): UserCredentialCCCredentialLearnStart {\n validatePayload(raw.payload.length >= 7);\n const userId = raw.payload.readUInt16BE(0);\n const credentialType: UserCredentialType = raw.payload[2];\n const credentialSlot = raw.payload.readUInt16BE(3);\n const operationType: UserCredentialOperationType = raw.payload[5]\n & 0b11;\n const learnTimeout = raw.payload[6];\n return new this({\n nodeId: ctx.sourceNodeId,\n userId,\n credentialType,\n credentialSlot,\n operationType,\n learnTimeout,\n });\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.alloc(7);\n this.payload.writeUInt16BE(this.userId, 0);\n this.payload[2] = this.credentialType;\n this.payload.writeUInt16BE(this.credentialSlot, 3);\n this.payload[5] = this.operationType & 0b11;\n this.payload[6] = this.learnTimeout;\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"user ID\": this.userId,\n \"credential type\": getEnumMemberName(UserCredentialType, this.credentialType),\n \"credential slot\": this.credentialSlot,\n \"operation type\": getEnumMemberName(UserCredentialOperationType, this.operationType),\n \"learn timeout\": this.learnTimeout,\n },\n };\n }\n}\n@CCCommand(UserCredentialCommand.CredentialLearnCancel)\n@useSupervision()\nexport class UserCredentialCCCredentialLearnCancel extends UserCredentialCC {\n}\n// @publicAPI\nexport interface UserCredentialCCCredentialLearnReportOptions {\n learnStatus: UserCredentialLearnStatus;\n userId: number;\n credentialType: UserCredentialType;\n credentialSlot: number;\n stepsRemaining: number;\n}\n@CCCommand(UserCredentialCommand.CredentialLearnReport)\nexport class UserCredentialCCCredentialLearnReport extends UserCredentialCC {\n public constructor(options: WithAddress<UserCredentialCCCredentialLearnReportOptions>) {\n super(options);\n this.learnStatus = options.learnStatus;\n this.userId = options.userId;\n this.credentialType = options.credentialType;\n this.credentialSlot = options.credentialSlot;\n this.stepsRemaining = options.stepsRemaining;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): UserCredentialCCCredentialLearnReport {\n validatePayload(raw.payload.length >= 7);\n const learnStatus = raw.payload[0];\n const userId = raw.payload.readUInt16BE(1);\n const credentialType: UserCredentialType = raw.payload[3];\n const credentialSlot = raw.payload.readUInt16BE(4);\n const stepsRemaining = raw.payload[6];\n return new this({\n nodeId: ctx.sourceNodeId,\n learnStatus,\n userId,\n credentialType,\n credentialSlot,\n stepsRemaining,\n });\n }\n public readonly learnStatus: UserCredentialLearnStatus;\n public readonly userId: number;\n public readonly credentialType: UserCredentialType;\n public readonly credentialSlot: number;\n public readonly stepsRemaining: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.alloc(7);\n this.payload[0] = this.learnStatus;\n this.payload.writeUInt16BE(this.userId, 1);\n this.payload[3] = this.credentialType;\n this.payload.writeUInt16BE(this.credentialSlot, 4);\n this.payload[6] = this.stepsRemaining;\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"learn status\": getEnumMemberName(UserCredentialLearnStatus, this.learnStatus),\n \"user ID\": this.userId,\n \"credential type\": getEnumMemberName(UserCredentialType, this.credentialType),\n \"credential slot\": this.credentialSlot,\n \"steps remaining\": this.stepsRemaining,\n },\n };\n }\n}\n// ============================================================\n// Group 5: Association\n// ============================================================\n// @publicAPI\nexport interface UserCredentialCCAssociationReportOptions {\n credentialType: UserCredentialType;\n credentialSlot: number;\n destinationUserId: number;\n status: number;\n}\n@CCCommand(UserCredentialCommand.UserCredentialAssociationReport)\nexport class UserCredentialCCAssociationReport extends UserCredentialCC {\n public constructor(options: WithAddress<UserCredentialCCAssociationReportOptions>) {\n super(options);\n this.credentialType = options.credentialType;\n this.credentialSlot = options.credentialSlot;\n this.destinationUserId = options.destinationUserId;\n this.status = options.status;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): UserCredentialCCAssociationReport {\n validatePayload(raw.payload.length >= 6);\n const credentialType: UserCredentialType = raw.payload[0];\n const credentialSlot = raw.payload.readUInt16BE(1);\n const destinationUserId = raw.payload.readUInt16BE(3);\n const status = raw.payload[5];\n return new this({\n nodeId: ctx.sourceNodeId,\n credentialType,\n credentialSlot,\n destinationUserId: destinationUserId,\n status,\n });\n }\n public readonly credentialType: UserCredentialType;\n public readonly credentialSlot: number;\n public readonly destinationUserId: number;\n public readonly status: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.alloc(6);\n this.payload[0] = this.credentialType;\n this.payload.writeUInt16BE(this.credentialSlot, 1);\n this.payload.writeUInt16BE(this.destinationUserId, 3);\n this.payload[5] = this.status;\n return super.serialize(ctx);\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n if (this.status !== 0\n || this.credentialType === UserCredentialType.None\n || this.credentialSlot === 0) {\n return true;\n }\n this.setValue(ctx, UserCredentialCCValues.credentialOwner(this.credentialType, this.credentialSlot), this.destinationUserId);\n return true;\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"credential type\": getEnumMemberName(UserCredentialType, this.credentialType),\n \"credential slot\": this.credentialSlot,\n \"destination user ID\": this.destinationUserId,\n status: this.status,\n },\n };\n }\n}\n// @publicAPI\nexport interface UserCredentialCCAssociationSetOptions {\n credentialType: UserCredentialType;\n credentialSlot: number;\n destinationUserId: number;\n}\nfunction testResponseForUserCredentialAssociationSet(sent: UserCredentialCCAssociationSet, received: UserCredentialCCAssociationReport) {\n return (sent.credentialType === received.credentialType\n && sent.credentialSlot === received.credentialSlot);\n}\n@CCCommand(UserCredentialCommand.UserCredentialAssociationSet)\n@expectedCCResponse(UserCredentialCCAssociationReport, testResponseForUserCredentialAssociationSet)\nexport class UserCredentialCCAssociationSet extends UserCredentialCC {\n public constructor(options: WithAddress<UserCredentialCCAssociationSetOptions>) {\n super(options);\n this.credentialType = options.credentialType;\n this.credentialSlot = options.credentialSlot;\n this.destinationUserId = options.destinationUserId;\n }\n public credentialType: UserCredentialType;\n public credentialSlot: number;\n public destinationUserId: number;\n public static from(raw: CCRaw, ctx: CCParsingContext): UserCredentialCCAssociationSet {\n validatePayload(raw.payload.length >= 5);\n const credentialType: UserCredentialType = raw.payload[0];\n const credentialSlot = raw.payload.readUInt16BE(1);\n const destinationUserId = raw.payload.readUInt16BE(3);\n return new this({\n nodeId: ctx.sourceNodeId,\n credentialType,\n credentialSlot,\n destinationUserId,\n });\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.alloc(5);\n this.payload[0] = this.credentialType;\n this.payload.writeUInt16BE(this.credentialSlot, 1);\n this.payload.writeUInt16BE(this.destinationUserId, 3);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"credential type\": getEnumMemberName(UserCredentialType, this.credentialType),\n \"credential slot\": this.credentialSlot,\n \"destination user ID\": this.destinationUserId,\n },\n };\n }\n}\n// ============================================================\n// Group 6: Checksums\n// ============================================================\n// @publicAPI\nexport interface UserCredentialCCAllUsersChecksumReportOptions {\n checksum: number;\n}\n@CCCommand(UserCredentialCommand.AllUsersChecksumReport)\nexport class UserCredentialCCAllUsersChecksumReport extends UserCredentialCC {\n public constructor(options: WithAddress<UserCredentialCCAllUsersChecksumReportOptions>) {\n super(options);\n this.checksum = options.checksum;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): UserCredentialCCAllUsersChecksumReport {\n validatePayload(raw.payload.length >= 2);\n const checksum = raw.payload.readUInt16BE(0);\n return new this({\n nodeId: ctx.sourceNodeId,\n checksum,\n });\n }\n public readonly checksum: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.alloc(2);\n this.payload.writeUInt16BE(this.checksum, 0);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: { checksum: this.checksum },\n };\n }\n}\n@CCCommand(UserCredentialCommand.AllUsersChecksumGet)\n@expectedCCResponse(UserCredentialCCAllUsersChecksumReport)\nexport class UserCredentialCCAllUsersChecksumGet extends UserCredentialCC {\n}\n// @publicAPI\nexport interface UserCredentialCCUserChecksumReportOptions {\n userId: number;\n checksum: number;\n}\n@CCCommand(UserCredentialCommand.UserChecksumReport)\nexport class UserCredentialCCUserChecksumReport extends UserCredentialCC {\n public constructor(options: WithAddress<UserCredentialCCUserChecksumReportOptions>) {\n super(options);\n this.userId = options.userId;\n this.checksum = options.checksum;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): UserCredentialCCUserChecksumReport {\n validatePayload(raw.payload.length >= 4);\n const userId = raw.payload.readUInt16BE(0);\n const checksum = raw.payload.readUInt16BE(2);\n return new this({\n nodeId: ctx.sourceNodeId,\n userId,\n checksum,\n });\n }\n public readonly userId: number;\n public readonly checksum: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.alloc(4);\n this.payload.writeUInt16BE(this.userId, 0);\n this.payload.writeUInt16BE(this.checksum, 2);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"user ID\": this.userId,\n checksum: this.checksum,\n },\n };\n }\n}\n// @publicAPI\nexport interface UserCredentialCCUserChecksumGetOptions {\n userId: number;\n}\nfunction testResponseForUserCredentialUserChecksumGet(sent: UserCredentialCCUserChecksumGet, received: UserCredentialCCUserChecksumReport) {\n return received.userId === sent.userId;\n}\n@CCCommand(UserCredentialCommand.UserChecksumGet)\n@expectedCCResponse(UserCredentialCCUserChecksumReport, testResponseForUserCredentialUserChecksumGet)\nexport class UserCredentialCCUserChecksumGet extends UserCredentialCC {\n public constructor(options: WithAddress<UserCredentialCCUserChecksumGetOptions>) {\n super(options);\n this.userId = options.userId;\n }\n public userId: number;\n public static from(raw: CCRaw, ctx: CCParsingContext): UserCredentialCCUserChecksumGet {\n validatePayload(raw.payload.length >= 2);\n const userId = raw.payload.readUInt16BE(0);\n return new this({\n nodeId: ctx.sourceNodeId,\n userId,\n });\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.alloc(2);\n this.payload.writeUInt16BE(this.userId, 0);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"user ID\": this.userId,\n },\n };\n }\n}\n// @publicAPI\nexport interface UserCredentialCCCredentialChecksumReportOptions {\n credentialType: UserCredentialType;\n checksum: number;\n}\n@CCCommand(UserCredentialCommand.CredentialChecksumReport)\nexport class UserCredentialCCCredentialChecksumReport extends UserCredentialCC {\n public constructor(options: WithAddress<UserCredentialCCCredentialChecksumReportOptions>) {\n super(options);\n this.credentialType = options.credentialType;\n this.checksum = options.checksum;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): UserCredentialCCCredentialChecksumReport {\n validatePayload(raw.payload.length >= 3);\n const credentialType: UserCredentialType = raw.payload[0];\n const checksum = raw.payload.readUInt16BE(1);\n return new this({\n nodeId: ctx.sourceNodeId,\n credentialType,\n checksum,\n });\n }\n public readonly credentialType: UserCredentialType;\n public readonly checksum: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.alloc(3);\n this.payload[0] = this.credentialType;\n this.payload.writeUInt16BE(this.checksum, 1);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"credential type\": getEnumMemberName(UserCredentialType, this.credentialType),\n checksum: this.checksum,\n },\n };\n }\n}\n// @publicAPI\nexport interface UserCredentialCCCredentialChecksumGetOptions {\n credentialType: UserCredentialType;\n}\nfunction testResponseForUserCredentialCredentialChecksumGet(sent: UserCredentialCCCredentialChecksumGet, received: UserCredentialCCCredentialChecksumReport) {\n return received.credentialType === sent.credentialType;\n}\n@CCCommand(UserCredentialCommand.CredentialChecksumGet)\n@expectedCCResponse(UserCredentialCCCredentialChecksumReport, testResponseForUserCredentialCredentialChecksumGet)\nexport class UserCredentialCCCredentialChecksumGet extends UserCredentialCC {\n public constructor(options: WithAddress<UserCredentialCCCredentialChecksumGetOptions>) {\n super(options);\n this.credentialType = options.credentialType;\n }\n public credentialType: UserCredentialType;\n public static from(raw: CCRaw, ctx: CCParsingContext): UserCredentialCCCredentialChecksumGet {\n validatePayload(raw.payload.length >= 1);\n const credentialType: UserCredentialType = raw.payload[0];\n return new this({\n nodeId: ctx.sourceNodeId,\n credentialType,\n });\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.alloc(1);\n this.payload[0] = this.credentialType;\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"credential type\": getEnumMemberName(UserCredentialType, this.credentialType),\n },\n };\n }\n}\n// ============================================================\n// Group 7: Admin PIN Code\n// ============================================================\n// @publicAPI\nexport interface UserCredentialCCAdminPinCodeSetOptions {\n pinCode: string;\n}\n@CCCommand(UserCredentialCommand.AdminPinCodeSet)\n@useSupervision()\nexport class UserCredentialCCAdminPinCodeSet extends UserCredentialCC {\n public constructor(options: WithAddress<UserCredentialCCAdminPinCodeSetOptions>) {\n super(options);\n this.pinCode = options.pinCode;\n }\n public pinCode: string;\n public static from(raw: CCRaw, ctx: CCParsingContext): UserCredentialCCAdminPinCodeSet {\n validatePayload(raw.payload.length >= 1);\n const pinLength = raw.payload[0] & 0b1111;\n validatePayload(raw.payload.length >= 1 + pinLength);\n const pinCode = raw.payload\n .subarray(1, 1 + pinLength)\n .toString(\"ascii\");\n return new this({\n nodeId: ctx.sourceNodeId,\n pinCode,\n });\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const pinCode = this.pinCode.slice(0, 15);\n this.payload = Bytes.concat([\n [pinCode.length & 0b1111],\n Bytes.from(pinCode, \"ascii\"),\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"PIN code\": credentialToLogString(this.pinCode),\n },\n };\n }\n}\n// @publicAPI\nexport interface UserCredentialCCAdminPinCodeReportOptions {\n operationResult: UserCredentialAdminCodeOperationResult;\n pinCode: string;\n}\n@CCCommand(UserCredentialCommand.AdminPinCodeReport)\nexport class UserCredentialCCAdminPinCodeReport extends UserCredentialCC {\n public constructor(options: WithAddress<UserCredentialCCAdminPinCodeReportOptions>) {\n super(options);\n this.operationResult = options.operationResult;\n this.pinCode = options.pinCode;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): UserCredentialCCAdminPinCodeReport {\n validatePayload(raw.payload.length >= 1);\n const operationResult: UserCredentialAdminCodeOperationResult = (raw.payload[0] >> 4) & 0b1111;\n const pinLength = raw.payload[0] & 0b1111;\n validatePayload(raw.payload.length >= 1 + pinLength);\n const pinCode = raw.payload\n .subarray(1, 1 + pinLength)\n .toString(\"ascii\");\n return new this({\n nodeId: ctx.sourceNodeId,\n operationResult,\n pinCode,\n });\n }\n public readonly operationResult: UserCredentialAdminCodeOperationResult;\n public readonly pinCode: string;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const pinBuffer = Bytes.from(this.pinCode, \"ascii\");\n this.payload = Bytes.alloc(1 + pinBuffer.length);\n this.payload[0] = ((this.operationResult & 0b1111) << 4)\n | (pinBuffer.length & 0b1111);\n if (pinBuffer.length > 0) {\n this.payload.set(pinBuffer, 1);\n }\n return super.serialize(ctx);\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n if (this.operationResult\n === UserCredentialAdminCodeOperationResult.Modified\n || this.operationResult\n === UserCredentialAdminCodeOperationResult.ResponseToGet) {\n this.setValue(ctx, UserCredentialCCValues.adminPinCode, this.pinCode);\n }\n return true;\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"operation result\": getEnumMemberName(UserCredentialAdminCodeOperationResult, this.operationResult),\n \"PIN code\": credentialToLogString(this.pinCode),\n },\n };\n }\n}\nfunction testResponseForUserCredentialAdminPinCodeGet(_sent: UserCredentialCCAdminPinCodeGet, received: UserCredentialCCAdminPinCodeReport) {\n return (received.operationResult\n === UserCredentialAdminCodeOperationResult.ResponseToGet);\n}\n@CCCommand(UserCredentialCommand.AdminPinCodeGet)\n@expectedCCResponse(UserCredentialCCAdminPinCodeReport, testResponseForUserCredentialAdminPinCodeGet)\nexport class UserCredentialCCAdminPinCodeGet extends UserCredentialCC {\n}\n// ============================================================\n// Group 8: Key Locker V2\n// ============================================================\n// @publicAPI\nexport type UserCredentialCCKeyLockerEntrySetOptions = {\n entryType: UserCredentialKeyLockerEntryType;\n entrySlot: number;\n} & ({\n operationType: UserCredentialOperationType.Add | UserCredentialOperationType.Modify;\n entryData: Bytes;\n} | {\n operationType: UserCredentialOperationType.Delete;\n entryData?: undefined;\n});\n@CCCommand(UserCredentialCommand.KeyLockerEntrySet)\n@useSupervision()\nexport class UserCredentialCCKeyLockerEntrySet extends UserCredentialCC {\n public constructor(options: WithAddress<UserCredentialCCKeyLockerEntrySetOptions>) {\n super(options);\n this.entryType = options.entryType;\n this.entrySlot = options.entrySlot;\n this.operationType = options.operationType;\n if (options.operationType !== UserCredentialOperationType.Delete) {\n this.entryData = options.entryData;\n }\n }\n public entryType: UserCredentialKeyLockerEntryType;\n public entrySlot: number;\n public operationType: UserCredentialOperationType;\n public entryData: Bytes | undefined;\n public static from(raw: CCRaw, ctx: CCParsingContext): UserCredentialCCKeyLockerEntrySet {\n validatePayload(raw.payload.length >= 4);\n const entryType: UserCredentialKeyLockerEntryType = raw.payload[0];\n const entrySlot = raw.payload.readUInt16BE(1);\n const operationType: UserCredentialOperationType = raw.payload[3]\n & 0b11;\n if (operationType === UserCredentialOperationType.Delete) {\n return new this({\n nodeId: ctx.sourceNodeId,\n entryType,\n entrySlot,\n operationType,\n });\n }\n let entryData = new Bytes();\n if (raw.payload.length >= 6) {\n const entryDataLength = raw.payload.readUInt16BE(4);\n validatePayload(raw.payload.length >= 6 + entryDataLength);\n entryData = Bytes.from(raw.payload.subarray(6, 6 + entryDataLength));\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n entryType,\n entrySlot,\n operationType,\n entryData,\n });\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n // For Delete, entry data MAY be omitted\n if (this.operationType === UserCredentialOperationType.Delete) {\n this.payload = Bytes.alloc(4);\n this.payload[0] = this.entryType;\n this.payload.writeUInt16BE(this.entrySlot, 1);\n this.payload[3] = this.operationType & 0b11;\n return super.serialize(ctx);\n }\n if (this.entryData == undefined) {\n throw new ZWaveError(`${this.constructor.name}: entry data must be set for Add/Modify operations`, ZWaveErrorCodes.Argument_Invalid);\n }\n this.payload = Bytes.alloc(6 + this.entryData.length);\n this.payload[0] = this.entryType;\n this.payload.writeUInt16BE(this.entrySlot, 1);\n this.payload[3] = this.operationType & 0b11;\n this.payload.writeUInt16BE(this.entryData.length, 4);\n if (this.entryData.length > 0) {\n this.payload.set(this.entryData, 6);\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"entry type\": getEnumMemberName(UserCredentialKeyLockerEntryType, this.entryType),\n \"entry slot\": this.entrySlot,\n \"operation type\": getEnumMemberName(UserCredentialOperationType, this.operationType),\n };\n if (this.entryData != undefined) {\n message[\"entry data length\"] = this.entryData.length;\n }\n return { ...super.toLogEntry(ctx), message };\n }\n}\n// @publicAPI\nexport interface UserCredentialCCKeyLockerEntryReportOptions {\n occupied: boolean;\n entryType: UserCredentialKeyLockerEntryType;\n entrySlot: number;\n}\n@CCCommand(UserCredentialCommand.KeyLockerEntryReport)\nexport class UserCredentialCCKeyLockerEntryReport extends UserCredentialCC {\n public constructor(options: WithAddress<UserCredentialCCKeyLockerEntryReportOptions>) {\n super(options);\n this.occupied = options.occupied;\n this.entryType = options.entryType;\n this.entrySlot = options.entrySlot;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): UserCredentialCCKeyLockerEntryReport {\n validatePayload(raw.payload.length >= 4);\n const occupied = !!(raw.payload[0] & 0x01);\n const entryType: UserCredentialKeyLockerEntryType = raw.payload[1];\n const entrySlot = raw.payload.readUInt16BE(2);\n return new this({\n nodeId: ctx.sourceNodeId,\n occupied,\n entryType,\n entrySlot,\n });\n }\n public readonly occupied: boolean;\n public readonly entryType: UserCredentialKeyLockerEntryType;\n public readonly entrySlot: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.alloc(4);\n this.payload[0] = this.occupied ? 0x01 : 0x00;\n this.payload[1] = this.entryType;\n this.payload.writeUInt16BE(this.entrySlot, 2);\n return super.serialize(ctx);\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n this.setValue(ctx, UserCredentialCCValues.keyLockerEntry(this.entryType, this.entrySlot), this.occupied);\n return true;\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n occupied: this.occupied,\n \"entry type\": getEnumMemberName(UserCredentialKeyLockerEntryType, this.entryType),\n \"entry slot\": this.entrySlot,\n },\n };\n }\n}\n// @publicAPI\nexport interface UserCredentialCCKeyLockerEntryGetOptions {\n entryType: UserCredentialKeyLockerEntryType;\n entrySlot: number;\n}\nfunction testResponseForUserCredentialKeyLockerEntryGet(sent: UserCredentialCCKeyLockerEntryGet, received: UserCredentialCCKeyLockerEntryReport) {\n return received.entryType === sent.entryType\n && received.entrySlot === sent.entrySlot;\n}\n@CCCommand(UserCredentialCommand.KeyLockerEntryGet)\n@expectedCCResponse(UserCredentialCCKeyLockerEntryReport, testResponseForUserCredentialKeyLockerEntryGet)\nexport class UserCredentialCCKeyLockerEntryGet extends UserCredentialCC {\n public constructor(options: WithAddress<UserCredentialCCKeyLockerEntryGetOptions>) {\n super(options);\n this.entryType = options.entryType;\n this.entrySlot = options.entrySlot;\n }\n public entryType: UserCredentialKeyLockerEntryType;\n public entrySlot: number;\n public static from(raw: CCRaw, ctx: CCParsingContext): UserCredentialCCKeyLockerEntryGet {\n validatePayload(raw.payload.length >= 3);\n const entryType: UserCredentialKeyLockerEntryType = raw.payload[0];\n const entrySlot = raw.payload.readUInt16BE(1);\n return new this({\n nodeId: ctx.sourceNodeId,\n entryType,\n entrySlot,\n });\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.alloc(3);\n this.payload[0] = this.entryType;\n this.payload.writeUInt16BE(this.entrySlot, 1);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"entry type\": getEnumMemberName(UserCredentialKeyLockerEntryType, this.entryType),\n \"entry slot\": this.entrySlot,\n },\n };\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import * as __validateArgs from \"./UserCredentialCC._validateArgs.js\";\nconst { validateArgs_UserCredentialCCAPI_setUser, validateArgs_UserCredentialCCAPI_getUser, validateArgs_UserCredentialCCAPI_setCredential, validateArgs_UserCredentialCCAPI_getCredential, validateArgs_UserCredentialCCAPI_startCredentialLearn, validateArgs_UserCredentialCCAPI_setUserCredentialAssociation, validateArgs_UserCredentialCCAPI_getUserChecksum, validateArgs_UserCredentialCCAPI_getCredentialChecksum, validateArgs_UserCredentialCCAPI_setAdminPinCode, validateArgs_UserCredentialCCAPI_setKeyLockerEntry, validateArgs_UserCredentialCCAPI_getKeyLockerEntry, validateArgs_UserCredentialCCAPI_sendUserCapabilitiesReport, validateArgs_UserCredentialCCAPI_sendCredentialCapabilitiesReport, validateArgs_UserCredentialCCAPI_sendKeyLockerCapabilitiesReport, validateArgs_UserCredentialCCAPI_sendUserReport, validateArgs_UserCredentialCCAPI_sendCredentialReport, validateArgs_UserCredentialCCAPI_sendCredentialLearnReport, validateArgs_UserCredentialCCAPI_sendUserCredentialAssociationReport, validateArgs_UserCredentialCCAPI_sendAllUsersChecksumReport, validateArgs_UserCredentialCCAPI_sendUserChecksumReport, validateArgs_UserCredentialCCAPI_sendCredentialChecksumReport, validateArgs_UserCredentialCCAPI_sendAdminPinCodeReport, validateArgs_UserCredentialCCAPI_sendKeyLockerEntryReport } = __validateArgs;\nimport { CommandClasses, type EndpointId, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, type SupervisionResult, type WithAddress, ZWaveError, ZWaveErrorCodes, encodeBitMask, parseBitMask, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, getEnumMemberName, pick, stringToUint8ArrayUTF16BE, uint8ArrayToStringUTF16BE, } from \"@zwave-js/shared\";\nimport { CCAPI, PhysicalCCAPI } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type PersistValuesContext, type RefreshValuesContext, type RefreshValuesOptions, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValueProperty, ccValues, commandClass, expectedCCResponse, implementedVersion, useSupervision, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { UserCredentialAdminCodeOperationResult, type UserCredentialCapability, UserCredentialCommand, UserCredentialCredentialReportType, type UserCredentialKeyLockerEntryCapability, UserCredentialKeyLockerEntryType, UserCredentialLearnStatus, UserCredentialModifierType, UserCredentialNameEncoding, UserCredentialOperationType, UserCredentialRule, UserCredentialType, UserCredentialUserReportType, UserCredentialUserType, } from \"../lib/_Types.js\";\nexport type { UserCredentialCapability as UserCredentialCredentialCapability } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nfunction credentialToLogString(credential: string | Bytes): string {\n if (credential.length === 0)\n return \"(empty)\";\n return \"*\".repeat(credential.length);\n}\n/**\n * Returns the canonical form of a credential for storage and reporting:\n * text credentials (PIN codes, passwords) are returned as strings, binary\n * credentials (biometric data, BLE/NFC/RFID identifiers, ...) as raw bytes.\n */\nexport function normalizeCredentialData(credentialType: UserCredentialType, credentialData: Bytes): string | Bytes {\n if (credentialType === UserCredentialType.PINCode\n || credentialType === UserCredentialType.Password) {\n return credentialData.toString(\"utf8\");\n }\n return credentialData;\n}\nimport { UserCredentialCCValues } from \"./_CCValues.generated.js\";\nexport { UserCredentialCCValues };\n// API class\n@API(CommandClasses[\"User Credential\"])\nexport class UserCredentialCCAPI extends PhysicalCCAPI {\n public supportsCommand(cmd: UserCredentialCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n // Mandatory v1 commands\n case UserCredentialCommand.UserCapabilitiesGet:\n case UserCredentialCommand.UserCapabilitiesReport:\n case UserCredentialCommand.CredentialCapabilitiesGet:\n case UserCredentialCommand.CredentialCapabilitiesReport:\n case UserCredentialCommand.UserSet:\n case UserCredentialCommand.UserGet:\n case UserCredentialCommand.UserReport:\n case UserCredentialCommand.CredentialSet:\n case UserCredentialCommand.CredentialGet:\n case UserCredentialCommand.CredentialReport:\n case UserCredentialCommand.CredentialLearnStart:\n case UserCredentialCommand.CredentialLearnCancel:\n case UserCredentialCommand.CredentialLearnReport:\n case UserCredentialCommand.UserCredentialAssociationSet:\n case UserCredentialCommand.UserCredentialAssociationReport:\n return true;\n case UserCredentialCommand.AllUsersChecksumGet:\n case UserCredentialCommand.AllUsersChecksumReport: {\n return this.tryGetValueDB()?.getValue<boolean>(UserCredentialCCValues.supportsAllUsersChecksum.endpoint(this.endpoint.index));\n }\n case UserCredentialCommand.UserChecksumGet:\n case UserCredentialCommand.UserChecksumReport: {\n return this.tryGetValueDB()?.getValue<boolean>(UserCredentialCCValues.supportsUserChecksum.endpoint(this.endpoint.index));\n }\n case UserCredentialCommand.CredentialChecksumGet:\n case UserCredentialCommand.CredentialChecksumReport: {\n return this.tryGetValueDB()?.getValue<boolean>(UserCredentialCCValues.supportsCredentialChecksum\n .endpoint(this.endpoint.index));\n }\n case UserCredentialCommand.AdminPinCodeSet:\n case UserCredentialCommand.AdminPinCodeGet:\n case UserCredentialCommand.AdminPinCodeReport: {\n return this.tryGetValueDB()?.getValue<boolean>(UserCredentialCCValues.supportsAdminCode.endpoint(this.endpoint.index));\n }\n // V2 commands\n case UserCredentialCommand.KeyLockerCapabilitiesGet:\n case UserCredentialCommand.KeyLockerCapabilitiesReport:\n case UserCredentialCommand.KeyLockerEntrySet:\n case UserCredentialCommand.KeyLockerEntryGet:\n case UserCredentialCommand.KeyLockerEntryReport:\n return this.version >= 2;\n }\n return super.supportsCommand(cmd);\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getUserCapabilities() {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.UserCapabilitiesGet);\n const cc = new UserCredentialCCUserCapabilitiesGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<UserCredentialCCUserCapabilitiesReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\n \"numberOfSupportedUsers\",\n \"supportedCredentialRules\",\n \"maxUserNameLength\",\n \"supportsUserSchedule\",\n \"supportsAllUsersChecksum\",\n \"supportsUserChecksum\",\n \"supportedUserNameEncodings\",\n \"supportedUserTypes\",\n ]);\n }\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getCredentialCapabilities() {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.CredentialCapabilitiesGet);\n const cc = new UserCredentialCCCredentialCapabilitiesGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<UserCredentialCCCredentialCapabilitiesReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\n \"supportsCredentialChecksum\",\n \"supportsAdminCode\",\n \"supportsAdminCodeDeactivation\",\n \"credentialTypes\",\n ]);\n }\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getKeyLockerCapabilities() {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.KeyLockerCapabilitiesGet);\n const cc = new UserCredentialCCKeyLockerCapabilitiesGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<UserCredentialCCKeyLockerCapabilitiesReport>(cc, this.commandOptions);\n return response?.keyLockerCapabilities;\n }\n // User Management\n /**\n * Applications should not use this method directly. Prefer the\n * `endpoint.accessControl` API for managing users.\n */\n @validateArgs_UserCredentialCCAPI_setUser()\n public async setUser(options: UserCredentialCCUserSetOptions): Promise<UserCredentialCCUserReport | undefined> {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.UserSet);\n const cc = new UserCredentialCCUserSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n return this.host.sendCommand<UserCredentialCCUserReport>(cc, this.commandOptions);\n }\n /**\n * Applications should not use this method directly. Prefer the\n * `endpoint.accessControl` API for querying users.\n */\n @validateArgs_UserCredentialCCAPI_getUser()\n public async getUser(userId: number): Promise<UserCredentialCCUserReport | undefined> {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.UserGet);\n const cc = new UserCredentialCCUserGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n userId,\n });\n return this.host.sendCommand<UserCredentialCCUserReport>(cc, this.commandOptions);\n }\n // Credential Management\n /**\n * Applications should not use this method directly. Prefer the\n * `endpoint.accessControl` API for managing credentials.\n */\n @validateArgs_UserCredentialCCAPI_setCredential()\n public async setCredential(options: UserCredentialCCCredentialSetOptions): Promise<UserCredentialCCCredentialReport | undefined> {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.CredentialSet);\n const cc = new UserCredentialCCCredentialSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n return this.host.sendCommand<UserCredentialCCCredentialReport>(cc, this.commandOptions);\n }\n /**\n * Applications should not use this method directly. Prefer the\n * `endpoint.accessControl` API for querying credentials.\n */\n @validateArgs_UserCredentialCCAPI_getCredential()\n public async getCredential(userId: number, credentialType: UserCredentialType, credentialSlot: number): Promise<UserCredentialCCCredentialReport | undefined> {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.CredentialGet);\n const cc = new UserCredentialCCCredentialGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n userId,\n credentialType,\n credentialSlot,\n });\n return this.host.sendCommand<UserCredentialCCCredentialReport>(cc, this.commandOptions);\n }\n @validateArgs_UserCredentialCCAPI_startCredentialLearn()\n public async startCredentialLearn(options: UserCredentialCCCredentialLearnStartOptions): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.CredentialLearnStart);\n // The node will ignore the command if credential learning is not\n // supported for this credential type (CC:0083.01.0F.11.004)\n const caps = UserCredentialCC.getCredentialCapabilitiesCached(this.host, this.endpoint, options.credentialType);\n if (caps && !caps.supportsCredentialLearn) {\n throw new ZWaveError(`Credential learning is not supported for credential type ${getEnumMemberName(UserCredentialType, options.credentialType)}`, ZWaveErrorCodes.CC_NotSupported);\n }\n const cc = new UserCredentialCCCredentialLearnStart({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n public async cancelCredentialLearn(): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.CredentialLearnCancel);\n const cc = new UserCredentialCCCredentialLearnCancel({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n /**\n * Applications should not use this method directly. Prefer the\n * `endpoint.accessControl` API for reassigning credentials between users.\n */\n @validateArgs_UserCredentialCCAPI_setUserCredentialAssociation()\n public async setUserCredentialAssociation(options: UserCredentialCCAssociationSetOptions): Promise<UserCredentialCCAssociationReport | undefined> {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.UserCredentialAssociationSet);\n const cc = new UserCredentialCCAssociationSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n return this.host.sendCommand<UserCredentialCCAssociationReport>(cc, this.commandOptions);\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getAllUsersChecksum() {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.AllUsersChecksumGet);\n const cc = new UserCredentialCCAllUsersChecksumGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<UserCredentialCCAllUsersChecksumReport>(cc, this.commandOptions);\n return response?.checksum;\n }\n @validateArgs_UserCredentialCCAPI_getUserChecksum()\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getUserChecksum(userId: number) {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.UserChecksumGet);\n const cc = new UserCredentialCCUserChecksumGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n userId,\n });\n const response = await this.host.sendCommand<UserCredentialCCUserChecksumReport>(cc, this.commandOptions);\n return response?.checksum;\n }\n @validateArgs_UserCredentialCCAPI_getCredentialChecksum()\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getCredentialChecksum(credentialType: UserCredentialType) {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.CredentialChecksumGet);\n const cc = new UserCredentialCCCredentialChecksumGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n credentialType,\n });\n const response = await this.host.sendCommand<UserCredentialCCCredentialChecksumReport>(cc, this.commandOptions);\n return response?.checksum;\n }\n @validateArgs_UserCredentialCCAPI_setAdminPinCode()\n public async setAdminPinCode(options: UserCredentialCCAdminPinCodeSetOptions): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.AdminPinCodeSet);\n // Deactivating the admin code (empty string) requires ACD support,\n // otherwise the node may ignore the command (CC:0083.01.1A.13.003)\n if (options.pinCode.length === 0) {\n const supportsDeactivation = this.tryGetValueDB()?.getValue<boolean>(UserCredentialCCValues.supportsAdminCodeDeactivation.endpoint(this.endpoint.index));\n if (supportsDeactivation === false) {\n throw new ZWaveError(\"This node does not support deactivating the Admin Code\", ZWaveErrorCodes.CC_NotSupported);\n }\n }\n const cc = new UserCredentialCCAdminPinCodeSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getAdminPinCode() {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.AdminPinCodeGet);\n const cc = new UserCredentialCCAdminPinCodeGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<UserCredentialCCAdminPinCodeReport>(cc, this.commandOptions);\n return response?.pinCode;\n }\n @validateArgs_UserCredentialCCAPI_setKeyLockerEntry()\n public async setKeyLockerEntry(options: UserCredentialCCKeyLockerEntrySetOptions): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.KeyLockerEntrySet);\n const cc = new UserCredentialCCKeyLockerEntrySet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_UserCredentialCCAPI_getKeyLockerEntry()\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getKeyLockerEntry(entryType: UserCredentialKeyLockerEntryType, entrySlot: number) {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.KeyLockerEntryGet);\n const cc = new UserCredentialCCKeyLockerEntryGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n entryType,\n entrySlot,\n });\n const response = await this.host.sendCommand<UserCredentialCCKeyLockerEntryReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\n \"occupied\",\n \"entryType\",\n \"entrySlot\",\n ]);\n }\n }\n @validateArgs_UserCredentialCCAPI_sendUserCapabilitiesReport()\n public async sendUserCapabilitiesReport(options: UserCredentialCCUserCapabilitiesReportOptions): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.UserCapabilitiesReport);\n const cc = new UserCredentialCCUserCapabilitiesReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_UserCredentialCCAPI_sendCredentialCapabilitiesReport()\n public async sendCredentialCapabilitiesReport(options: UserCredentialCCCredentialCapabilitiesReportOptions): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.CredentialCapabilitiesReport);\n const cc = new UserCredentialCCCredentialCapabilitiesReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_UserCredentialCCAPI_sendKeyLockerCapabilitiesReport()\n public async sendKeyLockerCapabilitiesReport(options: UserCredentialCCKeyLockerCapabilitiesReportOptions): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.KeyLockerCapabilitiesReport);\n const cc = new UserCredentialCCKeyLockerCapabilitiesReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_UserCredentialCCAPI_sendUserReport()\n public async sendUserReport(options: UserCredentialCCUserReportOptions): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.UserReport);\n const cc = new UserCredentialCCUserReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_UserCredentialCCAPI_sendCredentialReport()\n public async sendCredentialReport(options: UserCredentialCCCredentialReportOptions): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.CredentialReport);\n const cc = new UserCredentialCCCredentialReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_UserCredentialCCAPI_sendCredentialLearnReport()\n public async sendCredentialLearnReport(options: UserCredentialCCCredentialLearnReportOptions): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.CredentialLearnReport);\n const cc = new UserCredentialCCCredentialLearnReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_UserCredentialCCAPI_sendUserCredentialAssociationReport()\n public async sendUserCredentialAssociationReport(options: UserCredentialCCAssociationReportOptions): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.UserCredentialAssociationReport);\n const cc = new UserCredentialCCAssociationReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_UserCredentialCCAPI_sendAllUsersChecksumReport()\n public async sendAllUsersChecksumReport(options: UserCredentialCCAllUsersChecksumReportOptions): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.AllUsersChecksumReport);\n const cc = new UserCredentialCCAllUsersChecksumReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_UserCredentialCCAPI_sendUserChecksumReport()\n public async sendUserChecksumReport(options: UserCredentialCCUserChecksumReportOptions): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.UserChecksumReport);\n const cc = new UserCredentialCCUserChecksumReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_UserCredentialCCAPI_sendCredentialChecksumReport()\n public async sendCredentialChecksumReport(options: UserCredentialCCCredentialChecksumReportOptions): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.CredentialChecksumReport);\n const cc = new UserCredentialCCCredentialChecksumReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_UserCredentialCCAPI_sendAdminPinCodeReport()\n public async sendAdminPinCodeReport(options: UserCredentialCCAdminPinCodeReportOptions): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.AdminPinCodeReport);\n const cc = new UserCredentialCCAdminPinCodeReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_UserCredentialCCAPI_sendKeyLockerEntryReport()\n public async sendKeyLockerEntryReport(options: UserCredentialCCKeyLockerEntryReportOptions): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(UserCredentialCommand, UserCredentialCommand.KeyLockerEntryReport);\n const cc = new UserCredentialCCKeyLockerEntryReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n}\n@commandClass(CommandClasses[\"User Credential\"])\n@implementedVersion(2)\n@ccValues(UserCredentialCCValues)\nexport class UserCredentialCC extends CommandClass {\n declare ccCommand: UserCredentialCommand;\n public async interview(ctx: InterviewContext): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"User Credential\"], ctx, endpoint).withOptions({\n priority: MessagePriority.NodeQuery,\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying user capabilities...\",\n direction: \"outbound\",\n });\n const userCaps = await api.getUserCapabilities();\n if (!userCaps) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"User capabilities query timed out - skipping interview\",\n level: \"warn\",\n });\n return;\n }\n // CL:0083.01.21.00.4: The controlling node MUST use User Credential\n // Command Class to control a supporting node unless the supporting\n // node reports that (0) Users are supported.\n if (userCaps.numberOfSupportedUsers === 0) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"Node reports 0 supported users and operates in User Code CC mode, skipping the rest of the interview...\",\n direction: \"none\",\n });\n this.setInterviewComplete(ctx, true);\n return;\n }\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying credential capabilities...\",\n direction: \"outbound\",\n });\n const credCaps = await api.getCredentialCapabilities();\n if (!credCaps) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"Credential capabilities query timed out - skipping interview\",\n level: \"warn\",\n });\n return;\n }\n if (api.version >= 2) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying key locker capabilities...\",\n direction: \"outbound\",\n });\n await api.getKeyLockerCapabilities();\n }\n await this.refreshValues(ctx, {\n onProgress: (completed, total) => node.reportInterviewProgress(completed, total),\n });\n this.setInterviewComplete(ctx, true);\n }\n public async refreshValues(ctx: RefreshValuesContext, options?: RefreshValuesOptions): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const supportedUsers = this.getValue<number>(ctx, UserCredentialCCValues.supportedUsers);\n // CL:0083.01.21.00.4: The controlling node MUST use User Credential\n // Command Class to control a supporting node unless the supporting\n // node reports that (0) Users are supported.\n // In that case, User Code CC is used instead of this CC:\n if (supportedUsers === 0) {\n return;\n }\n const api = CCAPI.create(CommandClasses[\"User Credential\"], ctx, endpoint).withOptions({\n priority: MessagePriority.NodeQuery,\n });\n const supportsAllUsersChecksum = this.getValue<boolean>(ctx, UserCredentialCCValues.supportsAllUsersChecksum);\n const supportsUserChecksum = this.getValue<boolean>(ctx, UserCredentialCCValues.supportsUserChecksum);\n const supportsAdminCode = this.getValue<boolean>(ctx, UserCredentialCCValues.supportsAdminCode);\n const supportedKeyLockerEntryTypes = this.getValue<UserCredentialKeyLockerEntryType[]>(ctx, UserCredentialCCValues.supportedKeyLockerEntryTypes);\n // If possible use the all-users checksum to determine whether to\n // skip full sync of all users and credentials\n let skipFullSync = false;\n let allUsersChecksum: number | undefined;\n if (supportsAllUsersChecksum) {\n allUsersChecksum = await api.getAllUsersChecksum();\n const cachedChecksum = this.getValue<number>(ctx, UserCredentialCCValues.allUsersChecksum);\n if (allUsersChecksum != undefined\n && cachedChecksum != undefined\n && allUsersChecksum === cachedChecksum) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"all-users checksum unchanged, skipping full sync\",\n direction: \"none\",\n });\n skipFullSync = true;\n }\n }\n if (!skipFullSync) {\n // Iterate all users starting from UUID 0\n let nextUserId = 0;\n let previousUserId = 0;\n do {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `querying user with UUID ${nextUserId}...`,\n direction: \"outbound\",\n });\n const user = await api.getUser(nextUserId);\n if (!user?.userId)\n break; // No user found, stop iterating\n const currentUserId = user.userId;\n // Purge cached data for any users in the gap between the\n // last reported user and this one\n for (let gapUserId = previousUserId + 1; gapUserId < currentUserId; gapUserId++) {\n this.purgeUserFromCache(ctx, gapUserId);\n }\n // If possible use the checksum to determine whether to sync\n // credentials for this user\n let userChecksum: number | undefined;\n let syncCredentials = true;\n if (supportsUserChecksum) {\n userChecksum = await api.getUserChecksum(currentUserId);\n const cachedUserChecksum = this.getValue<number>(ctx, UserCredentialCCValues.userChecksum(currentUserId));\n if (userChecksum != undefined\n && cachedUserChecksum != undefined\n && userChecksum === cachedUserChecksum) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `user ${currentUserId} checksum unchanged, skipping credential sync`,\n direction: \"none\",\n });\n syncCredentials = false;\n }\n }\n if (syncCredentials) {\n await this.queryCredentialsForUser(ctx, api, node.id, currentUserId);\n if (userChecksum != undefined) {\n this.setValue(ctx, UserCredentialCCValues.userChecksum(currentUserId), userChecksum);\n }\n }\n options?.onProgress?.(currentUserId, supportedUsers ?? 0);\n previousUserId = currentUserId;\n nextUserId = user.nextUserId ?? 0;\n } while (nextUserId > 0);\n }\n // After querying all users, save the checksum for the next refresh.\n if (allUsersChecksum != undefined) {\n this.setValue(ctx, UserCredentialCCValues.allUsersChecksum, allUsersChecksum);\n }\n // Query admin PIN code if supported\n if (supportsAdminCode) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying admin PIN code...\",\n direction: \"outbound\",\n });\n await api.getAdminPinCode();\n }\n // Query key locker entries (V2)\n if (api.version >= 2 && supportedKeyLockerEntryTypes?.length) {\n for (const entryType of supportedKeyLockerEntryTypes) {\n const entry = this.getValue<UserCredentialKeyLockerEntryCapability>(ctx, UserCredentialCCValues.keyLockerCapabilities(entryType));\n if (!entry)\n continue;\n for (let slot = 1; slot <= entry.numberOfEntrySlots; slot++) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `querying key locker entry type ${entryType}, slot ${slot}...`,\n direction: \"outbound\",\n });\n await api.getKeyLockerEntry(entryType, slot);\n }\n }\n }\n }\n private purgeUserFromCache(ctx: RefreshValuesContext, userId: number): void {\n // Remove all per-user values\n this.removeValue(ctx, UserCredentialCCValues.userType(userId));\n this.removeValue(ctx, UserCredentialCCValues.userActive(userId));\n this.removeValue(ctx, UserCredentialCCValues.credentialRule(userId));\n this.removeValue(ctx, UserCredentialCCValues.expiringTimeoutMinutes(userId));\n this.removeValue(ctx, UserCredentialCCValues.userName(userId));\n this.removeValue(ctx, UserCredentialCCValues.userModifierType(userId));\n this.removeValue(ctx, UserCredentialCCValues.userModifierNodeId(userId));\n this.removeValue(ctx, UserCredentialCCValues.userChecksum(userId));\n // Remove all credential values for this user\n const valueDB = this.getValueDB(ctx);\n const credentialOwners = valueDB.findValues((vid) => UserCredentialCCValues.credentialOwner.is(vid)\n && vid.endpoint === this.endpointIndex);\n for (const { endpoint, propertyKey, value } of credentialOwners) {\n if (value !== userId)\n continue;\n const key = propertyKey as number;\n const credentialType = key >>> 16;\n const credentialSlot = key & 0xffff;\n valueDB.removeValue(UserCredentialCCValues.credential(credentialType, credentialSlot).endpoint(endpoint));\n valueDB.removeValue(UserCredentialCCValues.credentialOwner(credentialType, credentialSlot).endpoint(endpoint));\n valueDB.removeValue(UserCredentialCCValues.credentialModifierType(credentialType, credentialSlot).endpoint(endpoint));\n valueDB.removeValue(UserCredentialCCValues.credentialModifierNodeId(credentialType, credentialSlot).endpoint(endpoint));\n }\n }\n private async queryCredentialsForUser(ctx: RefreshValuesContext, api: UserCredentialCCAPI, nodeId: number, userId: number): Promise<void> {\n // Start with credential type 0, slot 0 to get the first credential for this user\n let nextCredType: UserCredentialType = UserCredentialType.None;\n let nextCredSlot = 0;\n do {\n ctx.logNode(nodeId, {\n endpoint: this.endpointIndex,\n message: `querying credential for user ${userId}, type ${nextCredType}, slot ${nextCredSlot}...`,\n direction: \"outbound\",\n });\n const cred = await api.getCredential(userId, nextCredType, nextCredSlot);\n if (!cred?.credentialSlot)\n break; // No credential found, stop iterating\n nextCredType = cred.nextCredentialType ?? UserCredentialType.None;\n nextCredSlot = cred.nextCredentialSlot ?? 0;\n } while (nextCredType !== UserCredentialType.None || nextCredSlot !== 0);\n }\n public static getSupportedUsersCached(ctx: GetValueDB, endpoint: EndpointId): MaybeNotKnown<number> {\n return ctx\n .getValueDB(endpoint.nodeId)\n .getValue(UserCredentialCCValues.supportedUsers.endpoint(endpoint.index));\n }\n public static getSupportedCredentialTypesCached(ctx: GetValueDB, endpoint: EndpointId): MaybeNotKnown<UserCredentialType[]> {\n return ctx\n .getValueDB(endpoint.nodeId)\n .getValue(UserCredentialCCValues.supportedCredentialTypes.endpoint(endpoint.index));\n }\n public static getCredentialCapabilitiesCached(ctx: GetValueDB, endpoint: EndpointId, credentialType: UserCredentialType): MaybeNotKnown<UserCredentialCapability> {\n return ctx\n .getValueDB(endpoint.nodeId)\n .getValue(UserCredentialCCValues.credentialCapabilities(credentialType).endpoint(endpoint.index));\n }\n public static supportsAdminCodeCached(ctx: GetValueDB, endpoint: EndpointId): boolean {\n return (ctx\n .getValueDB(endpoint.nodeId)\n .getValue<boolean>(UserCredentialCCValues.supportsAdminCode.endpoint(endpoint.index)) ?? false);\n }\n}\n// ============================================================\n// Group 1: Capabilities\n// ============================================================\n// @publicAPI\nexport interface UserCredentialCCUserCapabilitiesReportOptions {\n numberOfSupportedUsers: number;\n supportedCredentialRules: UserCredentialRule[];\n maxUserNameLength: number;\n supportsUserSchedule: boolean;\n supportsAllUsersChecksum: boolean;\n supportsUserChecksum: boolean;\n supportedUserNameEncodings: UserCredentialNameEncoding[];\n supportedUserTypes: UserCredentialUserType[];\n}\n@CCCommand(UserCredentialCommand.UserCapabilitiesReport)\n@ccValueProperty(\"numberOfSupportedUsers\", UserCredentialCCValues.supportedUsers)\n@ccValueProperty(\"supportedCredentialRules\", UserCredentialCCValues.supportedCredentialRules)\n@ccValueProperty(\"maxUserNameLength\", UserCredentialCCValues.maxUserNameLength)\n@ccValueProperty(\"supportsUserSchedule\", UserCredentialCCValues.supportsUserSchedule)\n@ccValueProperty(\"supportsAllUsersChecksum\", UserCredentialCCValues.supportsAllUsersChecksum)\n@ccValueProperty(\"supportsUserChecksum\", UserCredentialCCValues.supportsUserChecksum)\n@ccValueProperty(\"supportedUserNameEncodings\", UserCredentialCCValues.supportedUserNameEncodings)\n@ccValueProperty(\"supportedUserTypes\", UserCredentialCCValues.supportedUserTypes)\nexport class UserCredentialCCUserCapabilitiesReport extends UserCredentialCC {\n public constructor(options: WithAddress<UserCredentialCCUserCapabilitiesReportOptions>) {\n super(options);\n this.numberOfSupportedUsers = options.numberOfSupportedUsers;\n this.supportedCredentialRules = options.supportedCredentialRules;\n this.maxUserNameLength = options.maxUserNameLength;\n this.supportsUserSchedule = options.supportsUserSchedule;\n this.supportsAllUsersChecksum = options.supportsAllUsersChecksum;\n this.supportsUserChecksum = options.supportsUserChecksum;\n this.supportedUserNameEncodings = options.supportedUserNameEncodings;\n this.supportedUserTypes = options.supportedUserTypes;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): UserCredentialCCUserCapabilitiesReport {\n validatePayload(raw.payload.length >= 4);\n const numberOfSupportedUsers = raw.payload.readUInt16BE(0);\n const credentialRulesBitmask = raw.payload[2];\n const supportedCredentialRules: UserCredentialRule[] = parseBitMask(Bytes.from([credentialRulesBitmask]), 0).filter((v) => v in UserCredentialRule);\n const maxUserNameLength = raw.payload[3];\n validatePayload(raw.payload.length >= 5);\n const flagsByte = raw.payload[4];\n const supportsUserSchedule = !!(flagsByte & 128);\n const supportsAllUsersChecksum = !!(flagsByte & 64);\n const supportsUserChecksum = !!(flagsByte & 32);\n // Name encoding bitmask in bits 4:2\n const nameEncodingBitmask = (flagsByte >> 2) & 0b111;\n let supportedUserNameEncodings: UserCredentialNameEncoding[];\n if (nameEncodingBitmask === 0) {\n // All encodings assumed supported per spec\n supportedUserNameEncodings = [\n UserCredentialNameEncoding.ASCII,\n UserCredentialNameEncoding.ExtendedASCII,\n UserCredentialNameEncoding.UTF16BE,\n ];\n }\n else {\n supportedUserNameEncodings = parseBitMask(Bytes.from([nameEncodingBitmask]), 0).filter((v) => v in UserCredentialNameEncoding);\n }\n validatePayload(raw.payload.length >= 6);\n const userTypesBitmaskLength = raw.payload[5];\n validatePayload(raw.payload.length >= 6 + userTypesBitmaskLength);\n const supportedUserTypes: UserCredentialUserType[] = parseBitMask(raw.payload.subarray(6, 6 + userTypesBitmaskLength), 0).filter((v) => v in UserCredentialUserType);\n return new this({\n nodeId: ctx.sourceNodeId,\n numberOfSupportedUsers,\n supportedCredentialRules,\n maxUserNameLength,\n supportsUserSchedule,\n supportsAllUsersChecksum,\n supportsUserChecksum,\n supportedUserNameEncodings,\n supportedUserTypes,\n });\n }\n public readonly numberOfSupportedUsers: number;\n public readonly supportedCredentialRules: UserCredentialRule[];\n public readonly maxUserNameLength: number;\n public readonly supportsUserSchedule: boolean;\n public readonly supportsAllUsersChecksum: boolean;\n public readonly supportsUserChecksum: boolean;\n public readonly supportedUserNameEncodings: UserCredentialNameEncoding[];\n public readonly supportedUserTypes: UserCredentialUserType[];\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const credentialRulesBitmask = encodeBitMask(this.supportedCredentialRules, UserCredentialRule.Triple, 0);\n const nameEncodingBitmask = encodeBitMask(this.supportedUserNameEncodings, UserCredentialNameEncoding.UTF16BE, UserCredentialNameEncoding.ASCII);\n const flagsByte = (this.supportsUserSchedule ? 0x80 : 0)\n | (this.supportsAllUsersChecksum ? 0x40 : 0)\n | (this.supportsUserChecksum ? 0x20 : 0)\n | ((nameEncodingBitmask[0] & 0b111) << 2);\n const userTypesBitmask = encodeBitMask(this.supportedUserTypes, UserCredentialUserType.RemoteOnly, UserCredentialUserType.General);\n this.payload = Bytes.alloc(6 + userTypesBitmask.length);\n this.payload.writeUInt16BE(this.numberOfSupportedUsers, 0);\n this.payload[2] = credentialRulesBitmask[0];\n this.payload[3] = this.maxUserNameLength;\n this.payload[4] = flagsByte;\n this.payload[5] = userTypesBitmask.length;\n this.payload.set(userTypesBitmask, 6);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"supported users\": this.numberOfSupportedUsers,\n \"supported credential rules\": this.supportedCredentialRules\n .map((r) => getEnumMemberName(UserCredentialRule, r))\n .join(\", \"),\n \"max user name length\": this.maxUserNameLength,\n \"user schedule support\": this.supportsUserSchedule,\n \"all users checksum support\": this.supportsAllUsersChecksum,\n \"user checksum support\": this.supportsUserChecksum,\n \"supported name encodings\": this.supportedUserNameEncodings\n .map((e) => getEnumMemberName(UserCredentialNameEncoding, e))\n .join(\", \"),\n \"supported user types\": this.supportedUserTypes\n .map((t) => getEnumMemberName(UserCredentialUserType, t))\n .join(\", \"),\n },\n };\n }\n}\n@CCCommand(UserCredentialCommand.UserCapabilitiesGet)\n@expectedCCResponse(UserCredentialCCUserCapabilitiesReport)\nexport class UserCredentialCCUserCapabilitiesGet extends UserCredentialCC {\n}\n// @publicAPI\nexport interface UserCredentialCCCredentialCapabilitiesReportOptions {\n supportsCredentialChecksum: boolean;\n supportsAdminCode: boolean;\n supportsAdminCodeDeactivation: boolean;\n credentialTypes: Map<UserCredentialType, UserCredentialCapability>;\n}\n@CCCommand(UserCredentialCommand.CredentialCapabilitiesReport)\n@ccValueProperty(\"supportsCredentialChecksum\", UserCredentialCCValues.supportsCredentialChecksum)\n@ccValueProperty(\"supportsAdminCode\", UserCredentialCCValues.supportsAdminCode)\n@ccValueProperty(\"supportsAdminCodeDeactivation\", UserCredentialCCValues.supportsAdminCodeDeactivation)\nexport class UserCredentialCCCredentialCapabilitiesReport extends UserCredentialCC {\n public constructor(options: WithAddress<UserCredentialCCCredentialCapabilitiesReportOptions>) {\n super(options);\n this.supportsCredentialChecksum = options.supportsCredentialChecksum;\n this.supportsAdminCode = options.supportsAdminCode;\n this.supportsAdminCodeDeactivation =\n options.supportsAdminCodeDeactivation;\n this.credentialTypes = options.credentialTypes;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): UserCredentialCCCredentialCapabilitiesReport {\n validatePayload(raw.payload.length >= 2);\n const flagsByte = raw.payload[0];\n const supportsCredentialChecksum = !!(flagsByte & 128);\n const supportsAdminCode = !!(flagsByte & 64);\n const supportsAdminCodeDeactivation = !!(flagsByte & 32);\n const numberOfCredentialTypes = raw.payload[1];\n const n = numberOfCredentialTypes;\n validatePayload(raw.payload.length >= 2 + n * 9);\n const credentialTypes = new Map<UserCredentialType, UserCredentialCapability>();\n // Grouped block offsets\n const credTypeOff = 2;\n const clSupportOff = credTypeOff + n;\n const numSlotsOff = clSupportOff + n;\n const minLenOff = numSlotsOff + n * 2;\n const maxLenOff = minLenOff + n;\n const clTimeoutOff = maxLenOff + n;\n const clStepsOff = clTimeoutOff + n;\n const maxHashLenOff = clStepsOff + n;\n for (let i = 0; i < n; i++) {\n const credentialType: UserCredentialType = raw.payload[credTypeOff + i];\n const clByte = raw.payload[clSupportOff + i];\n const supportsCredentialLearn = !!(clByte & 128);\n const numberOfCredentialSlots = raw.payload.readUInt16BE(numSlotsOff + i * 2);\n const minCredentialLength = raw.payload[minLenOff + i];\n const maxCredentialLength = raw.payload[maxLenOff + i];\n const credentialLearnRecommendedTimeout = raw.payload[clTimeoutOff + i];\n const credentialLearnNumberOfSteps = raw.payload[clStepsOff + i];\n const maxCredentialHashLength = raw.payload[maxHashLenOff + i];\n if (supportsCredentialLearn) {\n validatePayload(credentialLearnRecommendedTimeout > 0);\n validatePayload(credentialLearnNumberOfSteps > 0);\n credentialTypes.set(credentialType, {\n supportsCredentialLearn,\n numberOfCredentialSlots,\n minCredentialLength,\n maxCredentialLength,\n credentialLearnRecommendedTimeout,\n credentialLearnNumberOfSteps,\n maxCredentialHashLength,\n });\n }\n else {\n validatePayload(credentialLearnRecommendedTimeout === 0);\n validatePayload(credentialLearnNumberOfSteps === 0);\n credentialTypes.set(credentialType, {\n supportsCredentialLearn,\n numberOfCredentialSlots,\n minCredentialLength,\n maxCredentialLength,\n maxCredentialHashLength,\n });\n }\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n supportsCredentialChecksum,\n supportsAdminCode,\n supportsAdminCodeDeactivation,\n credentialTypes: credentialTypes,\n });\n }\n public readonly supportsCredentialChecksum: boolean;\n public readonly supportsAdminCode: boolean;\n public readonly supportsAdminCodeDeactivation: boolean;\n public readonly credentialTypes: Map<UserCredentialType, UserCredentialCapability>;\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n this.setValue(ctx, UserCredentialCCValues.supportedCredentialTypes, [...this.credentialTypes.keys()]);\n for (const [credentialType, capability] of this.credentialTypes) {\n this.setValue(ctx, UserCredentialCCValues.credentialCapabilities(credentialType), capability);\n }\n return true;\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const n = this.credentialTypes.size;\n this.payload = Bytes.alloc(2 + n * 9);\n this.payload[0] = (this.supportsCredentialChecksum ? 0x80 : 0)\n | (this.supportsAdminCode ? 0x40 : 0)\n | (this.supportsAdminCodeDeactivation ? 0x20 : 0);\n this.payload[1] = n;\n const credTypeOff = 2;\n const clSupportOff = credTypeOff + n;\n const numSlotsOff = clSupportOff + n;\n const minLenOff = numSlotsOff + n * 2;\n const maxLenOff = minLenOff + n;\n const clTimeoutOff = maxLenOff + n;\n const clStepsOff = clTimeoutOff + n;\n const maxHashLenOff = clStepsOff + n;\n let i = 0;\n for (const [credentialType, ct] of this.credentialTypes) {\n this.payload[credTypeOff + i] = credentialType;\n this.payload[clSupportOff + i] = ct.supportsCredentialLearn\n ? 0x80\n : 0;\n this.payload.writeUInt16BE(ct.numberOfCredentialSlots, numSlotsOff + i * 2);\n this.payload[minLenOff + i] = ct.minCredentialLength;\n this.payload[maxLenOff + i] = ct.maxCredentialLength;\n this.payload[clTimeoutOff + i] =\n ct.credentialLearnRecommendedTimeout ?? 0;\n this.payload[clStepsOff + i] = ct.credentialLearnNumberOfSteps ?? 0;\n this.payload[maxHashLenOff + i] = ct.maxCredentialHashLength;\n i++;\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"credential checksum support\": this.supportsCredentialChecksum,\n \"admin code support\": this.supportsAdminCode,\n \"admin code deactivation support\": this.supportsAdminCodeDeactivation,\n };\n for (const [credentialType, ct] of this.credentialTypes) {\n message[`credential type ${getEnumMemberName(UserCredentialType, credentialType)}`] = `slots: ${ct.numberOfCredentialSlots}, length: ${ct.minCredentialLength}-${ct.maxCredentialLength}`;\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n@CCCommand(UserCredentialCommand.CredentialCapabilitiesGet)\n@expectedCCResponse(UserCredentialCCCredentialCapabilitiesReport)\nexport class UserCredentialCCCredentialCapabilitiesGet extends UserCredentialCC {\n}\n// @publicAPI\nexport interface UserCredentialCCKeyLockerCapabilitiesReportOptions {\n keyLockerCapabilities: Map<UserCredentialKeyLockerEntryType, UserCredentialKeyLockerEntryCapability>;\n}\n@CCCommand(UserCredentialCommand.KeyLockerCapabilitiesReport)\nexport class UserCredentialCCKeyLockerCapabilitiesReport extends UserCredentialCC {\n public constructor(options: WithAddress<UserCredentialCCKeyLockerCapabilitiesReportOptions>) {\n super(options);\n this.keyLockerCapabilities = options.keyLockerCapabilities;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): UserCredentialCCKeyLockerCapabilitiesReport {\n validatePayload(raw.payload.length >= 1);\n const numberOfEntryTypes = raw.payload[0];\n const n = numberOfEntryTypes;\n validatePayload(raw.payload.length >= 1 + n * 7);\n const keyLockerCapabilities = new Map<UserCredentialKeyLockerEntryType, UserCredentialKeyLockerEntryCapability>();\n // Grouped block offsets\n const entryTypeOff = 1;\n const numSlotsOff = entryTypeOff + n;\n const minLenOff = numSlotsOff + n * 2;\n const maxLenOff = minLenOff + n * 2;\n for (let i = 0; i < n; i++) {\n const entryType: UserCredentialKeyLockerEntryType = raw.payload[entryTypeOff + i];\n const numberOfEntrySlots = raw.payload.readUInt16BE(numSlotsOff + i * 2);\n const minEntryDataLength = raw.payload.readUInt16BE(minLenOff + i * 2);\n const maxEntryDataLength = raw.payload.readUInt16BE(maxLenOff + i * 2);\n keyLockerCapabilities.set(entryType, {\n numberOfEntrySlots,\n minEntryDataLength,\n maxEntryDataLength,\n });\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n keyLockerCapabilities,\n });\n }\n public readonly keyLockerCapabilities: Map<UserCredentialKeyLockerEntryType, UserCredentialKeyLockerEntryCapability>;\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n this.setValue(ctx, UserCredentialCCValues.supportedKeyLockerEntryTypes, [...this.keyLockerCapabilities.keys()]);\n for (const [entryType, capability] of this.keyLockerCapabilities) {\n this.setValue(ctx, UserCredentialCCValues.keyLockerCapabilities(entryType), capability);\n }\n return true;\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const n = this.keyLockerCapabilities.size;\n this.payload = Bytes.alloc(1 + n * 7);\n this.payload[0] = n;\n const entryTypeOff = 1;\n const numSlotsOff = entryTypeOff + n;\n const minLenOff = numSlotsOff + n * 2;\n const maxLenOff = minLenOff + n * 2;\n let i = 0;\n for (const [entryType, capability] of this.keyLockerCapabilities) {\n this.payload[entryTypeOff + i] = entryType;\n this.payload.writeUInt16BE(capability.numberOfEntrySlots, numSlotsOff + i * 2);\n this.payload.writeUInt16BE(capability.minEntryDataLength, minLenOff + i * 2);\n this.payload.writeUInt16BE(capability.maxEntryDataLength, maxLenOff + i * 2);\n i++;\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {};\n for (const [entryType, capability] of this.keyLockerCapabilities) {\n message[`entry type ${getEnumMemberName(UserCredentialKeyLockerEntryType, entryType)}`] = `slots: ${capability.numberOfEntrySlots}, length: ${capability.minEntryDataLength}-${capability.maxEntryDataLength}`;\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n@CCCommand(UserCredentialCommand.KeyLockerCapabilitiesGet)\n@expectedCCResponse(UserCredentialCCKeyLockerCapabilitiesReport)\nexport class UserCredentialCCKeyLockerCapabilitiesGet extends UserCredentialCC {\n}\n// ============================================================\n// Group 2: User Management\n// ============================================================\n// @publicAPI\nexport type UserCredentialCCUserSetOptions = {\n userId: number;\n} & ({\n operationType: UserCredentialOperationType.Add | UserCredentialOperationType.Modify;\n active?: boolean;\n credentialRule?: UserCredentialRule;\n nameEncoding?: UserCredentialNameEncoding;\n userName?: string;\n} & ({\n userType: UserCredentialUserType.Expiring;\n expiringTimeoutMinutes: number;\n} | {\n userType?: Exclude<UserCredentialUserType, UserCredentialUserType.Expiring>;\n expiringTimeoutMinutes?: undefined;\n}) | {\n operationType: UserCredentialOperationType.Delete;\n userType?: undefined;\n active?: undefined;\n credentialRule?: undefined;\n expiringTimeoutMinutes?: undefined;\n nameEncoding?: undefined;\n userName?: undefined;\n});\nfunction testResponseForUserCredentialUserSet(sent: UserCredentialCCUserSet, received: UserCredentialCCUserReport) {\n // CC:0083.01.05.11.010, CC:0083.01.05.11.011, CC:0083.01.05.11.012,\n // CC:0083.01.05.11.013: UserSet MUST be answered by a UserReport.\n // Match any report type other than ResponseToGet. For Add/Modify/Delete\n // the report echoes the requested userId; for DeleteAll (userId 0) the\n // report contains userId 0.\n return (received.reportType !== UserCredentialUserReportType.ResponseToGet\n && received.userId === sent.userId);\n}\n@CCCommand(UserCredentialCommand.UserSet)\n// The response class is forward-declared here, so use a dynamic CC response\n// that resolves the class lazily.\n@expectedCCResponse(() => UserCredentialCCUserReport, testResponseForUserCredentialUserSet)\nexport class UserCredentialCCUserSet extends UserCredentialCC {\n public constructor(options: WithAddress<UserCredentialCCUserSetOptions>) {\n super(options);\n this.operationType = options.operationType;\n this.userId = options.userId;\n if (options.operationType !== UserCredentialOperationType.Delete) {\n this.userType = options.userType;\n this.active = options.active;\n this.credentialRule = options.credentialRule;\n this.expiringTimeoutMinutes = options.expiringTimeoutMinutes;\n this.nameEncoding = options.nameEncoding;\n this.userName = options.userName;\n }\n }\n public operationType: UserCredentialOperationType;\n public userId: number;\n public userType: UserCredentialUserType | undefined;\n public active: boolean | undefined;\n public credentialRule: UserCredentialRule | undefined;\n public expiringTimeoutMinutes: number | undefined;\n public nameEncoding: UserCredentialNameEncoding | undefined;\n public userName: string | undefined;\n public static from(raw: CCRaw, ctx: CCParsingContext): UserCredentialCCUserSet {\n validatePayload(raw.payload.length >= 3);\n const operationType: UserCredentialOperationType = raw.payload[0]\n & 0b11;\n const userId = raw.payload.readUInt16BE(1);\n if (operationType === UserCredentialOperationType.Delete) {\n return new this({\n nodeId: ctx.sourceNodeId,\n operationType,\n userId,\n });\n }\n // For Delete, the remaining fields MAY be omitted\n if (raw.payload.length < 10) {\n return new this({\n nodeId: ctx.sourceNodeId,\n operationType,\n userId,\n });\n }\n const userType: UserCredentialUserType = raw.payload[3];\n const active = !!(raw.payload[4] & 0b1);\n const credentialRule: UserCredentialRule = raw.payload[5];\n const expiringTimeoutMinutes = raw.payload.readUInt16BE(6);\n const nameEncoding: UserCredentialNameEncoding = raw.payload[8] & 0b111;\n const nameLength = raw.payload[9];\n validatePayload(raw.payload.length >= 10 + nameLength);\n let userName: string;\n if (nameEncoding === UserCredentialNameEncoding.UTF16BE) {\n userName = uint8ArrayToStringUTF16BE(raw.payload.subarray(10, 10 + nameLength));\n }\n else {\n userName = raw.payload\n .subarray(10, 10 + nameLength)\n .toString(\"ascii\");\n }\n if (userType === UserCredentialUserType.Expiring) {\n return new this({\n nodeId: ctx.sourceNodeId,\n operationType,\n userId,\n userType,\n expiringTimeoutMinutes,\n active,\n credentialRule,\n nameEncoding,\n userName,\n });\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n operationType,\n userId,\n userType,\n active,\n credentialRule,\n nameEncoding,\n userName,\n });\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n // For Delete, remaining user-detail fields MAY be omitted\n if (this.operationType === UserCredentialOperationType.Delete) {\n this.payload = Bytes.alloc(3);\n this.payload[0] = this.operationType & 0b11;\n this.payload.writeUInt16BE(this.userId, 1);\n return super.serialize(ctx);\n }\n if (this.userType == undefined) {\n throw new ZWaveError(`${this.constructor.name}: user type must be set for Add/Modify operations`, ZWaveErrorCodes.Argument_Invalid);\n }\n if (this.active == undefined) {\n throw new ZWaveError(`${this.constructor.name}: The active flag must be set for Add/Modify operations`, ZWaveErrorCodes.Argument_Invalid);\n }\n // Credential rule defaults to Single\n const credentialRule = this.credentialRule ?? UserCredentialRule.Single;\n // Expiring timeout MUST be 0 for non-Expiring user types\n let expiringTimeoutMinutes: number;\n if (this.userType === UserCredentialUserType.Expiring) {\n if (this.expiringTimeoutMinutes == undefined) {\n throw new ZWaveError(`${this.constructor.name}: expiring timeout minutes must be set for Expiring user type`, ZWaveErrorCodes.Argument_Invalid);\n }\n expiringTimeoutMinutes = this.expiringTimeoutMinutes;\n }\n else {\n expiringTimeoutMinutes = 0;\n }\n // Name encoding defaults to ASCII\n const nameEncoding = this.nameEncoding\n ?? UserCredentialNameEncoding.ASCII;\n // User name defaults to empty string\n const userName = this.userName ?? \"\";\n let nameBuffer: Uint8Array;\n if (nameEncoding === UserCredentialNameEncoding.UTF16BE) {\n nameBuffer = stringToUint8ArrayUTF16BE(userName);\n }\n else {\n nameBuffer = Bytes.from(userName, \"ascii\");\n }\n this.payload = Bytes.alloc(10 + nameBuffer.length);\n this.payload[0] = this.operationType & 0b11;\n this.payload.writeUInt16BE(this.userId, 1);\n this.payload[3] = this.userType;\n this.payload[4] = this.active ? 0b1 : 0;\n this.payload[5] = credentialRule;\n this.payload.writeUInt16BE(expiringTimeoutMinutes, 6);\n this.payload[8] = nameEncoding & 0b111;\n this.payload[9] = nameBuffer.length;\n if (nameBuffer.length > 0) {\n this.payload.set(nameBuffer, 10);\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"operation type\": getEnumMemberName(UserCredentialOperationType, this.operationType),\n \"user ID\": this.userId,\n };\n if (this.userType != undefined) {\n message[\"user type\"] = getEnumMemberName(UserCredentialUserType, this.userType);\n }\n if (this.active != undefined) {\n message[\"active\"] = this.active;\n }\n if (this.credentialRule != undefined) {\n message[\"credential rule\"] = getEnumMemberName(UserCredentialRule, this.credentialRule);\n }\n if (this.expiringTimeoutMinutes != undefined) {\n message[\"expiring timeout (minutes)\"] = this.expiringTimeoutMinutes;\n }\n if (this.nameEncoding != undefined) {\n message[\"name encoding\"] = getEnumMemberName(UserCredentialNameEncoding, this.nameEncoding);\n }\n if (this.userName != undefined) {\n message[\"user name\"] = this.userName;\n }\n return { ...super.toLogEntry(ctx), message };\n }\n}\n// @publicAPI\nexport type UserCredentialCCUserReportOptions = {\n modifierType: UserCredentialModifierType;\n modifierNodeId: number;\n userId: number;\n userType: UserCredentialUserType;\n active: boolean;\n credentialRule: UserCredentialRule;\n expiringTimeoutMinutes: number;\n nameEncoding: UserCredentialNameEncoding;\n userName: string;\n} & ({\n reportType: UserCredentialUserReportType.ResponseToGet;\n nextUserId: number;\n} | {\n reportType: Exclude<UserCredentialUserReportType, UserCredentialUserReportType.ResponseToGet>;\n nextUserId?: undefined;\n});\n@CCCommand(UserCredentialCommand.UserReport)\nexport class UserCredentialCCUserReport extends UserCredentialCC {\n public constructor(options: WithAddress<UserCredentialCCUserReportOptions>) {\n super(options);\n this.reportType = options.reportType;\n if (options.reportType === UserCredentialUserReportType.ResponseToGet) {\n this.nextUserId = options.nextUserId;\n }\n this.modifierType = options.modifierType;\n this.modifierNodeId = options.modifierNodeId;\n this.userId = options.userId;\n this.userType = options.userType;\n this.active = options.active;\n this.credentialRule = options.credentialRule;\n this.expiringTimeoutMinutes = options.expiringTimeoutMinutes;\n this.nameEncoding = options.nameEncoding;\n this.userName = options.userName;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): UserCredentialCCUserReport {\n validatePayload(raw.payload.length >= 13);\n const reportType: UserCredentialUserReportType = raw.payload[0];\n const nextUserId = raw.payload.readUInt16BE(1);\n const modifierType: UserCredentialModifierType = raw.payload[3];\n const modifierNodeId = raw.payload.readUInt16BE(4);\n const userId = raw.payload.readUInt16BE(6);\n const userType: UserCredentialUserType = raw.payload[8];\n const active = !!(raw.payload[9] & 0b1);\n const credentialRule: UserCredentialRule = raw.payload[10];\n const expiringTimeoutMinutes = raw.payload.readUInt16BE(11);\n validatePayload(raw.payload.length >= 15);\n const nameEncoding: UserCredentialNameEncoding = raw.payload[13]\n & 0b111;\n const nameLength = raw.payload[14];\n validatePayload(raw.payload.length >= 15 + nameLength);\n let userName: string;\n if (nameEncoding === UserCredentialNameEncoding.UTF16BE) {\n userName = uint8ArrayToStringUTF16BE(raw.payload.subarray(15, 15 + nameLength));\n }\n else {\n userName = raw.payload\n .subarray(15, 15 + nameLength)\n .toString(\"ascii\");\n }\n const common = {\n nodeId: ctx.sourceNodeId,\n modifierType,\n modifierNodeId,\n userId,\n userType,\n active,\n credentialRule,\n expiringTimeoutMinutes,\n nameEncoding,\n userName,\n };\n if (reportType === UserCredentialUserReportType.ResponseToGet) {\n return new this({ ...common, reportType, nextUserId });\n }\n return new this({ ...common, reportType });\n }\n public readonly reportType: UserCredentialUserReportType;\n public readonly nextUserId?: number;\n public readonly modifierType: UserCredentialModifierType;\n public readonly modifierNodeId: number;\n public readonly userId: number;\n public readonly userType: UserCredentialUserType;\n public readonly active: boolean;\n public readonly credentialRule: UserCredentialRule;\n public readonly expiringTimeoutMinutes: number;\n public readonly nameEncoding: UserCredentialNameEncoding;\n public readonly userName: string;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n let nameBuffer: Uint8Array;\n if (this.nameEncoding === UserCredentialNameEncoding.UTF16BE) {\n nameBuffer = stringToUint8ArrayUTF16BE(this.userName);\n }\n else {\n nameBuffer = Bytes.from(this.userName, \"ascii\");\n }\n this.payload = Bytes.alloc(15 + nameBuffer.length);\n this.payload[0] = this.reportType;\n this.payload.writeUInt16BE(this.nextUserId ?? 0, 1);\n this.payload[3] = this.modifierType;\n this.payload.writeUInt16BE(this.modifierNodeId, 4);\n this.payload.writeUInt16BE(this.userId, 6);\n this.payload[8] = this.userType;\n this.payload[9] = this.active ? 0b1 : 0;\n this.payload[10] = this.credentialRule;\n this.payload.writeUInt16BE(this.expiringTimeoutMinutes, 11);\n this.payload[13] = this.nameEncoding & 0b111;\n this.payload[14] = nameBuffer.length;\n if (nameBuffer.length > 0) {\n this.payload.set(nameBuffer, 15);\n }\n return super.serialize(ctx);\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n if (this.userId === 0)\n return true;\n // A UserModifyRejectedLocationEmpty report means we have a stale cache\n // entry for a user that no longer exists on the device.\n if (this.reportType\n === UserCredentialUserReportType.UserDeleted\n || this.reportType\n === UserCredentialUserReportType.UserModifyRejectedLocationEmpty) {\n // Remove all values for this user\n const userId = this.userId;\n this.removeValue(ctx, UserCredentialCCValues.userType(userId));\n this.removeValue(ctx, UserCredentialCCValues.userActive(userId));\n this.removeValue(ctx, UserCredentialCCValues.credentialRule(userId));\n this.removeValue(ctx, UserCredentialCCValues.expiringTimeoutMinutes(userId));\n this.removeValue(ctx, UserCredentialCCValues.userName(userId));\n this.removeValue(ctx, UserCredentialCCValues.userModifierType(userId));\n this.removeValue(ctx, UserCredentialCCValues.userModifierNodeId(userId));\n return true;\n }\n // A UserAddRejectedLocationOccupied report contains the data for the\n // existing user, so we can update our cache with the actual state.\n if (this.reportType\n !== UserCredentialUserReportType.ResponseToGet\n && this.reportType\n !== UserCredentialUserReportType.UserAdded\n && this.reportType\n !== UserCredentialUserReportType.UserModified\n && this.reportType\n !== UserCredentialUserReportType.UserAddRejectedLocationOccupied) {\n return true;\n }\n const userId = this.userId;\n this.ensureMetadata(ctx, UserCredentialCCValues.userType(userId));\n this.setValue(ctx, UserCredentialCCValues.userType(userId), this.userType);\n this.ensureMetadata(ctx, UserCredentialCCValues.userActive(userId));\n this.setValue(ctx, UserCredentialCCValues.userActive(userId), this.active);\n this.ensureMetadata(ctx, UserCredentialCCValues.credentialRule(userId));\n this.setValue(ctx, UserCredentialCCValues.credentialRule(userId), this.credentialRule);\n this.ensureMetadata(ctx, UserCredentialCCValues.expiringTimeoutMinutes(userId));\n this.setValue(ctx, UserCredentialCCValues.expiringTimeoutMinutes(userId), this.expiringTimeoutMinutes);\n this.ensureMetadata(ctx, UserCredentialCCValues.userName(userId));\n this.setValue(ctx, UserCredentialCCValues.userName(userId), this.userName);\n this.setValue(ctx, UserCredentialCCValues.userModifierType(userId), this.modifierType);\n this.setValue(ctx, UserCredentialCCValues.userModifierNodeId(userId), this.modifierNodeId);\n return true;\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"report type\": getEnumMemberName(UserCredentialUserReportType, this.reportType),\n };\n if (this.nextUserId != undefined) {\n message[\"next user ID\"] = this.nextUserId;\n }\n message[\"modifier type\"] = getEnumMemberName(UserCredentialModifierType, this.modifierType);\n message[\"modifier node id\"] = this.modifierNodeId;\n message[\"user ID\"] = this.userId;\n message[\"user type\"] = getEnumMemberName(UserCredentialUserType, this.userType);\n message.active = this.active;\n message[\"credential rule\"] = getEnumMemberName(UserCredentialRule, this.credentialRule);\n message[\"expiring timeout (minutes)\"] = this.expiringTimeoutMinutes;\n message[\"name encoding\"] = getEnumMemberName(UserCredentialNameEncoding, this.nameEncoding);\n message[\"user name\"] = this.userName;\n return { ...super.toLogEntry(ctx), message };\n }\n}\n// @publicAPI\nexport interface UserCredentialCCUserGetOptions {\n userId: number;\n}\nfunction testResponseForUserCredentialUserGet(sent: UserCredentialCCUserGet, received: UserCredentialCCUserReport) {\n return (received.reportType\n === UserCredentialUserReportType.ResponseToGet);\n}\n@CCCommand(UserCredentialCommand.UserGet)\n@expectedCCResponse(UserCredentialCCUserReport, testResponseForUserCredentialUserGet)\nexport class UserCredentialCCUserGet extends UserCredentialCC {\n public constructor(options: WithAddress<UserCredentialCCUserGetOptions>) {\n super(options);\n this.userId = options.userId;\n }\n public userId: number;\n public static from(raw: CCRaw, ctx: CCParsingContext): UserCredentialCCUserGet {\n validatePayload(raw.payload.length >= 2);\n const userId = raw.payload.readUInt16BE(0);\n return new this({\n nodeId: ctx.sourceNodeId,\n userId,\n });\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.alloc(2);\n this.payload.writeUInt16BE(this.userId, 0);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"user ID\": this.userId,\n },\n };\n }\n}\n// ============================================================\n// Group 3: Credential Management\n// ============================================================\n// @publicAPI\nexport type UserCredentialCCCredentialSetOptions = {\n userId: number;\n credentialType: UserCredentialType;\n credentialSlot: number;\n} & ({\n operationType: UserCredentialOperationType.Add | UserCredentialOperationType.Modify;\n credentialData: Bytes;\n} | {\n operationType: UserCredentialOperationType.Delete;\n credentialData?: undefined;\n});\nfunction testResponseForUserCredentialCredentialSet(sent: UserCredentialCCCredentialSet, received: UserCredentialCCCredentialReport) {\n // CC:0083.01.0A.11.010, CC:0083.01.0A.11.011, CC:0083.01.0A.11.012,\n // CC:0083.01.0A.11.013: CredentialSet MUST be answered by a\n // CredentialReport. The credentialType is always echoed, so we use it\n // as the primary correlation. DuplicateCredential and DuplicateAdminPINCode\n // reports reference the EXISTING duplicate's (userId, slot) rather than\n // the requested location, so we cannot correlate them on slot.\n if (received.reportType\n === UserCredentialCredentialReportType.ResponseToGet) {\n return false;\n }\n if (received.credentialType !== sent.credentialType) {\n return false;\n }\n if (received.reportType\n === UserCredentialCredentialReportType.DuplicateCredential\n || received.reportType\n === UserCredentialCredentialReportType.DuplicateAdminPINCode) {\n return true;\n }\n return received.credentialSlot === sent.credentialSlot;\n}\n@CCCommand(UserCredentialCommand.CredentialSet)\n@expectedCCResponse(() => UserCredentialCCCredentialReport, testResponseForUserCredentialCredentialSet)\nexport class UserCredentialCCCredentialSet extends UserCredentialCC {\n public constructor(options: WithAddress<UserCredentialCCCredentialSetOptions>) {\n super(options);\n this.userId = options.userId;\n this.credentialType = options.credentialType;\n this.credentialSlot = options.credentialSlot;\n this.operationType = options.operationType;\n if (options.operationType !== UserCredentialOperationType.Delete) {\n this.credentialData = options.credentialData;\n }\n }\n public userId: number;\n public credentialType: UserCredentialType;\n public credentialSlot: number;\n public operationType: UserCredentialOperationType;\n public credentialData: Bytes | undefined;\n public static from(raw: CCRaw, ctx: CCParsingContext): UserCredentialCCCredentialSet {\n validatePayload(raw.payload.length >= 6);\n const userId = raw.payload.readUInt16BE(0);\n const credentialType: UserCredentialType = raw.payload[2];\n const credentialSlot = raw.payload.readUInt16BE(3);\n const operationType: UserCredentialOperationType = raw.payload[5]\n & 0b11;\n if (operationType === UserCredentialOperationType.Delete) {\n return new this({\n nodeId: ctx.sourceNodeId,\n userId,\n credentialType,\n credentialSlot,\n operationType,\n });\n }\n let credentialData = new Bytes();\n if (raw.payload.length >= 7) {\n const credentialLength = raw.payload[6];\n validatePayload(raw.payload.length >= 7 + credentialLength);\n credentialData = Bytes.from(raw.payload.subarray(7, 7 + credentialLength));\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n userId,\n credentialType,\n credentialSlot,\n operationType,\n credentialData,\n });\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n // For Delete, credential data MAY be omitted\n if (this.operationType === UserCredentialOperationType.Delete) {\n this.payload = Bytes.alloc(6);\n this.payload.writeUInt16BE(this.userId, 0);\n this.payload[2] = this.credentialType;\n this.payload.writeUInt16BE(this.credentialSlot, 3);\n this.payload[5] = this.operationType & 0b11;\n return super.serialize(ctx);\n }\n if (this.credentialData == undefined) {\n throw new ZWaveError(`${this.constructor.name}: credential data must be set for Add/Modify operations`, ZWaveErrorCodes.Argument_Invalid);\n }\n this.payload = Bytes.alloc(7 + this.credentialData.length);\n this.payload.writeUInt16BE(this.userId, 0);\n this.payload[2] = this.credentialType;\n this.payload.writeUInt16BE(this.credentialSlot, 3);\n this.payload[5] = this.operationType & 0b11;\n this.payload[6] = this.credentialData.length;\n if (this.credentialData.length > 0) {\n this.payload.set(this.credentialData, 7);\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"user ID\": this.userId,\n \"credential type\": getEnumMemberName(UserCredentialType, this.credentialType),\n \"credential slot\": this.credentialSlot,\n \"operation type\": getEnumMemberName(UserCredentialOperationType, this.operationType),\n };\n if (this.credentialData != undefined) {\n message[\"credential data\"] = credentialToLogString(this.credentialData);\n }\n return { ...super.toLogEntry(ctx), message };\n }\n}\n// @publicAPI\nexport type UserCredentialCCCredentialReportOptions = {\n userId: number;\n credentialType: UserCredentialType;\n credentialSlot: number;\n modifierType: UserCredentialModifierType;\n modifierNodeId: number;\n} & ({\n credentialReadBack: true;\n credentialData: Bytes;\n} | {\n credentialReadBack: false;\n credentialData?: undefined;\n}) & ({\n reportType: UserCredentialCredentialReportType.ResponseToGet;\n nextCredentialType: UserCredentialType;\n nextCredentialSlot: number;\n} | {\n reportType: Exclude<UserCredentialCredentialReportType, UserCredentialCredentialReportType.ResponseToGet>;\n nextCredentialType?: undefined;\n nextCredentialSlot?: undefined;\n});\n@CCCommand(UserCredentialCommand.CredentialReport)\nexport class UserCredentialCCCredentialReport extends UserCredentialCC {\n public constructor(options: WithAddress<UserCredentialCCCredentialReportOptions>) {\n super(options);\n this.reportType = options.reportType;\n this.userId = options.userId;\n this.credentialType = options.credentialType;\n this.credentialSlot = options.credentialSlot;\n this.credentialReadBack = options.credentialReadBack;\n if (options.credentialReadBack) {\n this.credentialData = options.credentialData;\n }\n this.modifierType = options.modifierType;\n this.modifierNodeId = options.modifierNodeId;\n if (options.reportType\n === UserCredentialCredentialReportType.ResponseToGet) {\n this.nextCredentialType = options.nextCredentialType;\n this.nextCredentialSlot = options.nextCredentialSlot;\n }\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): UserCredentialCCCredentialReport {\n validatePayload(raw.payload.length >= 8);\n const reportType: UserCredentialCredentialReportType = raw.payload[0];\n const userId = raw.payload.readUInt16BE(1);\n const credentialType: UserCredentialType = raw.payload[3];\n const credentialSlot = raw.payload.readUInt16BE(4);\n const credentialReadBack = !!(raw.payload[6] & 128);\n const credentialLength = raw.payload[7];\n validatePayload(raw.payload.length >= 8 + credentialLength + 6);\n const offset = 8 + credentialLength;\n const modifierType: UserCredentialModifierType = raw.payload[offset];\n const modifierNodeId = raw.payload.readUInt16BE(offset + 1);\n const common = {\n nodeId: ctx.sourceNodeId,\n userId,\n credentialType,\n credentialSlot,\n modifierType,\n modifierNodeId,\n };\n const dataOptions = credentialReadBack\n ? {\n credentialReadBack: true,\n credentialData: Bytes.from(raw.payload.subarray(8, 8 + credentialLength)),\n } as const\n : { credentialReadBack: false } as const;\n if (reportType === UserCredentialCredentialReportType.ResponseToGet) {\n return new this({\n ...common,\n ...dataOptions,\n reportType,\n nextCredentialType: raw.payload[offset + 3],\n nextCredentialSlot: raw.payload.readUInt16BE(offset + 4),\n });\n }\n return new this({\n ...common,\n ...dataOptions,\n reportType,\n });\n }\n public readonly reportType: UserCredentialCredentialReportType;\n public readonly userId: number;\n public readonly credentialType: UserCredentialType;\n public readonly credentialSlot: number;\n public readonly credentialReadBack: boolean;\n public readonly credentialData?: Bytes;\n public readonly modifierType: UserCredentialModifierType;\n public readonly modifierNodeId: number;\n public readonly nextCredentialType?: UserCredentialType;\n public readonly nextCredentialSlot?: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const credentialData = this.credentialData ?? new Bytes();\n this.payload = Bytes.alloc(14 + credentialData.length);\n this.payload[0] = this.reportType;\n this.payload.writeUInt16BE(this.userId, 1);\n this.payload[3] = this.credentialType;\n this.payload.writeUInt16BE(this.credentialSlot, 4);\n this.payload[6] = this.credentialReadBack ? 0x80 : 0x00;\n this.payload[7] = credentialData.length;\n if (credentialData.length > 0) {\n this.payload.set(credentialData, 8);\n }\n const offset = 8 + credentialData.length;\n this.payload[offset] = this.modifierType;\n this.payload.writeUInt16BE(this.modifierNodeId, offset + 1);\n this.payload[offset + 3] = this.nextCredentialType\n ?? UserCredentialType.None;\n this.payload.writeUInt16BE(this.nextCredentialSlot ?? 0, offset + 4);\n return super.serialize(ctx);\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n // A CredentialModifyRejectedLocationEmpty report means we have a stale\n // cache entry for a credential that no longer exists on the device.\n // CredentialDeleted reports may echo the request fields, including the\n // wildcard zeros used to trigger bulk deletes per CC:0083.01.0A.\n if (this.reportType\n === UserCredentialCredentialReportType.CredentialDeleted\n || this.reportType\n === UserCredentialCredentialReportType\n .CredentialModifyRejectedLocationEmpty) {\n if (this.credentialType !== UserCredentialType.None\n && this.credentialSlot !== 0) {\n // Single credential. The (type, slot) tuple uniquely identifies\n // the entry in the value DB, so the userId is not needed.\n this.removeValue(ctx, UserCredentialCCValues.credential(this.credentialType, this.credentialSlot));\n this.removeValue(ctx, UserCredentialCCValues.credentialOwner(this.credentialType, this.credentialSlot));\n this.removeValue(ctx, UserCredentialCCValues.credentialModifierType(this.credentialType, this.credentialSlot));\n this.removeValue(ctx, UserCredentialCCValues.credentialModifierNodeId(this.credentialType, this.credentialSlot));\n }\n else {\n // Bulk delete. Walk all cached credentials and remove those\n // matching the (userId, type) filter (zero means wildcard).\n const valueDB = this.getValueDB(ctx);\n const credentialOwners = valueDB.findValues((vid) => UserCredentialCCValues.credentialOwner.is(vid)\n && vid.endpoint === this.endpointIndex);\n for (const { endpoint, propertyKey, value } of credentialOwners) {\n // If a user ID is given, only delete credentials owned by that user\n if (this.userId !== 0 && value !== this.userId)\n continue;\n const key = propertyKey as number;\n const cType = key >>> 16;\n const cSlot = key & 0xffff;\n // If a credential type is given, only delete credentials of that type\n if (this.credentialType !== UserCredentialType.None\n && cType !== this.credentialType) {\n continue;\n }\n valueDB.removeValue(UserCredentialCCValues.credential(cType, cSlot)\n .endpoint(endpoint));\n valueDB.removeValue(UserCredentialCCValues.credentialOwner(cType, cSlot)\n .endpoint(endpoint));\n valueDB.removeValue(UserCredentialCCValues.credentialModifierType(cType, cSlot).endpoint(endpoint));\n valueDB.removeValue(UserCredentialCCValues.credentialModifierNodeId(cType, cSlot).endpoint(endpoint));\n }\n }\n return true;\n }\n // Non-delete reports may carry (None, 0) as a sentinel for \"no credential\n // at this location\" \u2014 e.g. the end-of-walk marker in nextCredential* of\n // a ResponseToGet. Bail out so we don't write bogus cache entries.\n if (this.credentialType === UserCredentialType.None\n || this.credentialSlot === 0) {\n return true;\n }\n // A CredentialAddRejectedLocationOccupied report includes the actual\n // credential data in the read-back field when the device chooses to\n // reveal it, so we can update our cache with the real state.\n const isRejectionWithReadback = this.reportType\n === UserCredentialCredentialReportType\n .CredentialAddRejectedLocationOccupied\n && this.credentialReadBack;\n if (this.reportType\n !== UserCredentialCredentialReportType.ResponseToGet\n && this.reportType\n !== UserCredentialCredentialReportType.CredentialAdded\n && this.reportType\n !== UserCredentialCredentialReportType.CredentialModified\n && !isRejectionWithReadback) {\n return true;\n }\n if (this.credentialData != undefined) {\n this.ensureMetadata(ctx, UserCredentialCCValues.credential(this.credentialType, this.credentialSlot));\n this.setValue(ctx, UserCredentialCCValues.credential(this.credentialType, this.credentialSlot), normalizeCredentialData(this.credentialType, this.credentialData));\n }\n this.setValue(ctx, UserCredentialCCValues.credentialOwner(this.credentialType, this.credentialSlot), this.userId);\n this.setValue(ctx, UserCredentialCCValues.credentialModifierType(this.credentialType, this.credentialSlot), this.modifierType);\n this.setValue(ctx, UserCredentialCCValues.credentialModifierNodeId(this.credentialType, this.credentialSlot), this.modifierNodeId);\n return true;\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"report type\": getEnumMemberName(UserCredentialCredentialReportType, this.reportType),\n \"user ID\": this.userId,\n \"credential type\": getEnumMemberName(UserCredentialType, this.credentialType),\n \"credential slot\": this.credentialSlot,\n \"credential read-back\": this.credentialReadBack,\n };\n if (this.credentialData != undefined) {\n message[\"credential data\"] = credentialToLogString(this.credentialData);\n }\n message[\"modifier type\"] = getEnumMemberName(UserCredentialModifierType, this.modifierType);\n message[\"modifier node id\"] = this.modifierNodeId;\n if (this.nextCredentialType != undefined) {\n message[\"next credential type\"] = getEnumMemberName(UserCredentialType, this.nextCredentialType);\n }\n if (this.nextCredentialSlot != undefined) {\n message[\"next credential slot\"] = this.nextCredentialSlot;\n }\n return { ...super.toLogEntry(ctx), message };\n }\n}\n// @publicAPI\nexport interface UserCredentialCCCredentialGetOptions {\n userId: number;\n credentialType: UserCredentialType;\n credentialSlot: number;\n}\nfunction testResponseForUserCredentialCredentialGet(_sent: UserCredentialCCCredentialGet, received: UserCredentialCCCredentialReport) {\n return (received.reportType\n === UserCredentialCredentialReportType.ResponseToGet);\n}\n@CCCommand(UserCredentialCommand.CredentialGet)\n@expectedCCResponse(UserCredentialCCCredentialReport, testResponseForUserCredentialCredentialGet)\nexport class UserCredentialCCCredentialGet extends UserCredentialCC {\n public constructor(options: WithAddress<UserCredentialCCCredentialGetOptions>) {\n super(options);\n this.userId = options.userId;\n this.credentialType = options.credentialType;\n this.credentialSlot = options.credentialSlot;\n }\n public userId: number;\n public credentialType: UserCredentialType;\n public credentialSlot: number;\n public static from(raw: CCRaw, ctx: CCParsingContext): UserCredentialCCCredentialGet {\n validatePayload(raw.payload.length >= 5);\n const userId = raw.payload.readUInt16BE(0);\n const credentialType: UserCredentialType = raw.payload[2];\n const credentialSlot = raw.payload.readUInt16BE(3);\n return new this({\n nodeId: ctx.sourceNodeId,\n userId,\n credentialType,\n credentialSlot,\n });\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.alloc(5);\n this.payload.writeUInt16BE(this.userId, 0);\n this.payload[2] = this.credentialType;\n this.payload.writeUInt16BE(this.credentialSlot, 3);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"user ID\": this.userId,\n \"credential type\": getEnumMemberName(UserCredentialType, this.credentialType),\n \"credential slot\": this.credentialSlot,\n },\n };\n }\n}\n// ============================================================\n// Group 4: Credential Learn\n// ============================================================\n// @publicAPI\nexport interface UserCredentialCCCredentialLearnStartOptions {\n userId: number;\n credentialType: UserCredentialType;\n credentialSlot: number;\n operationType: UserCredentialOperationType;\n learnTimeout: number;\n}\n@CCCommand(UserCredentialCommand.CredentialLearnStart)\n@useSupervision()\nexport class UserCredentialCCCredentialLearnStart extends UserCredentialCC {\n public constructor(options: WithAddress<UserCredentialCCCredentialLearnStartOptions>) {\n super(options);\n this.userId = options.userId;\n this.credentialType = options.credentialType;\n this.credentialSlot = options.credentialSlot;\n this.operationType = options.operationType;\n this.learnTimeout = options.learnTimeout;\n }\n public userId: number;\n public credentialType: UserCredentialType;\n public credentialSlot: number;\n public operationType: UserCredentialOperationType;\n public learnTimeout: number;\n public static from(raw: CCRaw, ctx: CCParsingContext): UserCredentialCCCredentialLearnStart {\n validatePayload(raw.payload.length >= 7);\n const userId = raw.payload.readUInt16BE(0);\n const credentialType: UserCredentialType = raw.payload[2];\n const credentialSlot = raw.payload.readUInt16BE(3);\n const operationType: UserCredentialOperationType = raw.payload[5]\n & 0b11;\n const learnTimeout = raw.payload[6];\n return new this({\n nodeId: ctx.sourceNodeId,\n userId,\n credentialType,\n credentialSlot,\n operationType,\n learnTimeout,\n });\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.alloc(7);\n this.payload.writeUInt16BE(this.userId, 0);\n this.payload[2] = this.credentialType;\n this.payload.writeUInt16BE(this.credentialSlot, 3);\n this.payload[5] = this.operationType & 0b11;\n this.payload[6] = this.learnTimeout;\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"user ID\": this.userId,\n \"credential type\": getEnumMemberName(UserCredentialType, this.credentialType),\n \"credential slot\": this.credentialSlot,\n \"operation type\": getEnumMemberName(UserCredentialOperationType, this.operationType),\n \"learn timeout\": this.learnTimeout,\n },\n };\n }\n}\n@CCCommand(UserCredentialCommand.CredentialLearnCancel)\n@useSupervision()\nexport class UserCredentialCCCredentialLearnCancel extends UserCredentialCC {\n}\n// @publicAPI\nexport interface UserCredentialCCCredentialLearnReportOptions {\n learnStatus: UserCredentialLearnStatus;\n userId: number;\n credentialType: UserCredentialType;\n credentialSlot: number;\n stepsRemaining: number;\n}\n@CCCommand(UserCredentialCommand.CredentialLearnReport)\nexport class UserCredentialCCCredentialLearnReport extends UserCredentialCC {\n public constructor(options: WithAddress<UserCredentialCCCredentialLearnReportOptions>) {\n super(options);\n this.learnStatus = options.learnStatus;\n this.userId = options.userId;\n this.credentialType = options.credentialType;\n this.credentialSlot = options.credentialSlot;\n this.stepsRemaining = options.stepsRemaining;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): UserCredentialCCCredentialLearnReport {\n validatePayload(raw.payload.length >= 7);\n const learnStatus = raw.payload[0];\n const userId = raw.payload.readUInt16BE(1);\n const credentialType: UserCredentialType = raw.payload[3];\n const credentialSlot = raw.payload.readUInt16BE(4);\n const stepsRemaining = raw.payload[6];\n return new this({\n nodeId: ctx.sourceNodeId,\n learnStatus,\n userId,\n credentialType,\n credentialSlot,\n stepsRemaining,\n });\n }\n public readonly learnStatus: UserCredentialLearnStatus;\n public readonly userId: number;\n public readonly credentialType: UserCredentialType;\n public readonly credentialSlot: number;\n public readonly stepsRemaining: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.alloc(7);\n this.payload[0] = this.learnStatus;\n this.payload.writeUInt16BE(this.userId, 1);\n this.payload[3] = this.credentialType;\n this.payload.writeUInt16BE(this.credentialSlot, 4);\n this.payload[6] = this.stepsRemaining;\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"learn status\": getEnumMemberName(UserCredentialLearnStatus, this.learnStatus),\n \"user ID\": this.userId,\n \"credential type\": getEnumMemberName(UserCredentialType, this.credentialType),\n \"credential slot\": this.credentialSlot,\n \"steps remaining\": this.stepsRemaining,\n },\n };\n }\n}\n// ============================================================\n// Group 5: Association\n// ============================================================\n// @publicAPI\nexport interface UserCredentialCCAssociationReportOptions {\n credentialType: UserCredentialType;\n credentialSlot: number;\n destinationUserId: number;\n status: number;\n}\n@CCCommand(UserCredentialCommand.UserCredentialAssociationReport)\nexport class UserCredentialCCAssociationReport extends UserCredentialCC {\n public constructor(options: WithAddress<UserCredentialCCAssociationReportOptions>) {\n super(options);\n this.credentialType = options.credentialType;\n this.credentialSlot = options.credentialSlot;\n this.destinationUserId = options.destinationUserId;\n this.status = options.status;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): UserCredentialCCAssociationReport {\n validatePayload(raw.payload.length >= 6);\n const credentialType: UserCredentialType = raw.payload[0];\n const credentialSlot = raw.payload.readUInt16BE(1);\n const destinationUserId = raw.payload.readUInt16BE(3);\n const status = raw.payload[5];\n return new this({\n nodeId: ctx.sourceNodeId,\n credentialType,\n credentialSlot,\n destinationUserId: destinationUserId,\n status,\n });\n }\n public readonly credentialType: UserCredentialType;\n public readonly credentialSlot: number;\n public readonly destinationUserId: number;\n public readonly status: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.alloc(6);\n this.payload[0] = this.credentialType;\n this.payload.writeUInt16BE(this.credentialSlot, 1);\n this.payload.writeUInt16BE(this.destinationUserId, 3);\n this.payload[5] = this.status;\n return super.serialize(ctx);\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n if (this.status !== 0\n || this.credentialType === UserCredentialType.None\n || this.credentialSlot === 0) {\n return true;\n }\n this.setValue(ctx, UserCredentialCCValues.credentialOwner(this.credentialType, this.credentialSlot), this.destinationUserId);\n return true;\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"credential type\": getEnumMemberName(UserCredentialType, this.credentialType),\n \"credential slot\": this.credentialSlot,\n \"destination user ID\": this.destinationUserId,\n status: this.status,\n },\n };\n }\n}\n// @publicAPI\nexport interface UserCredentialCCAssociationSetOptions {\n credentialType: UserCredentialType;\n credentialSlot: number;\n destinationUserId: number;\n}\nfunction testResponseForUserCredentialAssociationSet(sent: UserCredentialCCAssociationSet, received: UserCredentialCCAssociationReport) {\n return (sent.credentialType === received.credentialType\n && sent.credentialSlot === received.credentialSlot);\n}\n@CCCommand(UserCredentialCommand.UserCredentialAssociationSet)\n@expectedCCResponse(UserCredentialCCAssociationReport, testResponseForUserCredentialAssociationSet)\nexport class UserCredentialCCAssociationSet extends UserCredentialCC {\n public constructor(options: WithAddress<UserCredentialCCAssociationSetOptions>) {\n super(options);\n this.credentialType = options.credentialType;\n this.credentialSlot = options.credentialSlot;\n this.destinationUserId = options.destinationUserId;\n }\n public credentialType: UserCredentialType;\n public credentialSlot: number;\n public destinationUserId: number;\n public static from(raw: CCRaw, ctx: CCParsingContext): UserCredentialCCAssociationSet {\n validatePayload(raw.payload.length >= 5);\n const credentialType: UserCredentialType = raw.payload[0];\n const credentialSlot = raw.payload.readUInt16BE(1);\n const destinationUserId = raw.payload.readUInt16BE(3);\n return new this({\n nodeId: ctx.sourceNodeId,\n credentialType,\n credentialSlot,\n destinationUserId,\n });\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.alloc(5);\n this.payload[0] = this.credentialType;\n this.payload.writeUInt16BE(this.credentialSlot, 1);\n this.payload.writeUInt16BE(this.destinationUserId, 3);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"credential type\": getEnumMemberName(UserCredentialType, this.credentialType),\n \"credential slot\": this.credentialSlot,\n \"destination user ID\": this.destinationUserId,\n },\n };\n }\n}\n// ============================================================\n// Group 6: Checksums\n// ============================================================\n// @publicAPI\nexport interface UserCredentialCCAllUsersChecksumReportOptions {\n checksum: number;\n}\n@CCCommand(UserCredentialCommand.AllUsersChecksumReport)\nexport class UserCredentialCCAllUsersChecksumReport extends UserCredentialCC {\n public constructor(options: WithAddress<UserCredentialCCAllUsersChecksumReportOptions>) {\n super(options);\n this.checksum = options.checksum;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): UserCredentialCCAllUsersChecksumReport {\n validatePayload(raw.payload.length >= 2);\n const checksum = raw.payload.readUInt16BE(0);\n return new this({\n nodeId: ctx.sourceNodeId,\n checksum,\n });\n }\n public readonly checksum: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.alloc(2);\n this.payload.writeUInt16BE(this.checksum, 0);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: { checksum: this.checksum },\n };\n }\n}\n@CCCommand(UserCredentialCommand.AllUsersChecksumGet)\n@expectedCCResponse(UserCredentialCCAllUsersChecksumReport)\nexport class UserCredentialCCAllUsersChecksumGet extends UserCredentialCC {\n}\n// @publicAPI\nexport interface UserCredentialCCUserChecksumReportOptions {\n userId: number;\n checksum: number;\n}\n@CCCommand(UserCredentialCommand.UserChecksumReport)\nexport class UserCredentialCCUserChecksumReport extends UserCredentialCC {\n public constructor(options: WithAddress<UserCredentialCCUserChecksumReportOptions>) {\n super(options);\n this.userId = options.userId;\n this.checksum = options.checksum;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): UserCredentialCCUserChecksumReport {\n validatePayload(raw.payload.length >= 4);\n const userId = raw.payload.readUInt16BE(0);\n const checksum = raw.payload.readUInt16BE(2);\n return new this({\n nodeId: ctx.sourceNodeId,\n userId,\n checksum,\n });\n }\n public readonly userId: number;\n public readonly checksum: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.alloc(4);\n this.payload.writeUInt16BE(this.userId, 0);\n this.payload.writeUInt16BE(this.checksum, 2);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"user ID\": this.userId,\n checksum: this.checksum,\n },\n };\n }\n}\n// @publicAPI\nexport interface UserCredentialCCUserChecksumGetOptions {\n userId: number;\n}\nfunction testResponseForUserCredentialUserChecksumGet(sent: UserCredentialCCUserChecksumGet, received: UserCredentialCCUserChecksumReport) {\n return received.userId === sent.userId;\n}\n@CCCommand(UserCredentialCommand.UserChecksumGet)\n@expectedCCResponse(UserCredentialCCUserChecksumReport, testResponseForUserCredentialUserChecksumGet)\nexport class UserCredentialCCUserChecksumGet extends UserCredentialCC {\n public constructor(options: WithAddress<UserCredentialCCUserChecksumGetOptions>) {\n super(options);\n this.userId = options.userId;\n }\n public userId: number;\n public static from(raw: CCRaw, ctx: CCParsingContext): UserCredentialCCUserChecksumGet {\n validatePayload(raw.payload.length >= 2);\n const userId = raw.payload.readUInt16BE(0);\n return new this({\n nodeId: ctx.sourceNodeId,\n userId,\n });\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.alloc(2);\n this.payload.writeUInt16BE(this.userId, 0);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"user ID\": this.userId,\n },\n };\n }\n}\n// @publicAPI\nexport interface UserCredentialCCCredentialChecksumReportOptions {\n credentialType: UserCredentialType;\n checksum: number;\n}\n@CCCommand(UserCredentialCommand.CredentialChecksumReport)\nexport class UserCredentialCCCredentialChecksumReport extends UserCredentialCC {\n public constructor(options: WithAddress<UserCredentialCCCredentialChecksumReportOptions>) {\n super(options);\n this.credentialType = options.credentialType;\n this.checksum = options.checksum;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): UserCredentialCCCredentialChecksumReport {\n validatePayload(raw.payload.length >= 3);\n const credentialType: UserCredentialType = raw.payload[0];\n const checksum = raw.payload.readUInt16BE(1);\n return new this({\n nodeId: ctx.sourceNodeId,\n credentialType,\n checksum,\n });\n }\n public readonly credentialType: UserCredentialType;\n public readonly checksum: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.alloc(3);\n this.payload[0] = this.credentialType;\n this.payload.writeUInt16BE(this.checksum, 1);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"credential type\": getEnumMemberName(UserCredentialType, this.credentialType),\n checksum: this.checksum,\n },\n };\n }\n}\n// @publicAPI\nexport interface UserCredentialCCCredentialChecksumGetOptions {\n credentialType: UserCredentialType;\n}\nfunction testResponseForUserCredentialCredentialChecksumGet(sent: UserCredentialCCCredentialChecksumGet, received: UserCredentialCCCredentialChecksumReport) {\n return received.credentialType === sent.credentialType;\n}\n@CCCommand(UserCredentialCommand.CredentialChecksumGet)\n@expectedCCResponse(UserCredentialCCCredentialChecksumReport, testResponseForUserCredentialCredentialChecksumGet)\nexport class UserCredentialCCCredentialChecksumGet extends UserCredentialCC {\n public constructor(options: WithAddress<UserCredentialCCCredentialChecksumGetOptions>) {\n super(options);\n this.credentialType = options.credentialType;\n }\n public credentialType: UserCredentialType;\n public static from(raw: CCRaw, ctx: CCParsingContext): UserCredentialCCCredentialChecksumGet {\n validatePayload(raw.payload.length >= 1);\n const credentialType: UserCredentialType = raw.payload[0];\n return new this({\n nodeId: ctx.sourceNodeId,\n credentialType,\n });\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.alloc(1);\n this.payload[0] = this.credentialType;\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"credential type\": getEnumMemberName(UserCredentialType, this.credentialType),\n },\n };\n }\n}\n// ============================================================\n// Group 7: Admin PIN Code\n// ============================================================\n// @publicAPI\nexport interface UserCredentialCCAdminPinCodeSetOptions {\n pinCode: string;\n}\n@CCCommand(UserCredentialCommand.AdminPinCodeSet)\n@useSupervision()\nexport class UserCredentialCCAdminPinCodeSet extends UserCredentialCC {\n public constructor(options: WithAddress<UserCredentialCCAdminPinCodeSetOptions>) {\n super(options);\n this.pinCode = options.pinCode;\n }\n public pinCode: string;\n public static from(raw: CCRaw, ctx: CCParsingContext): UserCredentialCCAdminPinCodeSet {\n validatePayload(raw.payload.length >= 1);\n const pinLength = raw.payload[0] & 0b1111;\n validatePayload(raw.payload.length >= 1 + pinLength);\n const pinCode = raw.payload\n .subarray(1, 1 + pinLength)\n .toString(\"ascii\");\n return new this({\n nodeId: ctx.sourceNodeId,\n pinCode,\n });\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const pinCode = this.pinCode.slice(0, 15);\n this.payload = Bytes.concat([\n [pinCode.length & 0b1111],\n Bytes.from(pinCode, \"ascii\"),\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"PIN code\": credentialToLogString(this.pinCode),\n },\n };\n }\n}\n// @publicAPI\nexport interface UserCredentialCCAdminPinCodeReportOptions {\n operationResult: UserCredentialAdminCodeOperationResult;\n pinCode: string;\n}\n@CCCommand(UserCredentialCommand.AdminPinCodeReport)\nexport class UserCredentialCCAdminPinCodeReport extends UserCredentialCC {\n public constructor(options: WithAddress<UserCredentialCCAdminPinCodeReportOptions>) {\n super(options);\n this.operationResult = options.operationResult;\n this.pinCode = options.pinCode;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): UserCredentialCCAdminPinCodeReport {\n validatePayload(raw.payload.length >= 1);\n const operationResult: UserCredentialAdminCodeOperationResult = (raw.payload[0] >> 4) & 0b1111;\n const pinLength = raw.payload[0] & 0b1111;\n validatePayload(raw.payload.length >= 1 + pinLength);\n const pinCode = raw.payload\n .subarray(1, 1 + pinLength)\n .toString(\"ascii\");\n return new this({\n nodeId: ctx.sourceNodeId,\n operationResult,\n pinCode,\n });\n }\n public readonly operationResult: UserCredentialAdminCodeOperationResult;\n public readonly pinCode: string;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const pinBuffer = Bytes.from(this.pinCode, \"ascii\");\n this.payload = Bytes.alloc(1 + pinBuffer.length);\n this.payload[0] = ((this.operationResult & 0b1111) << 4)\n | (pinBuffer.length & 0b1111);\n if (pinBuffer.length > 0) {\n this.payload.set(pinBuffer, 1);\n }\n return super.serialize(ctx);\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n if (this.operationResult\n === UserCredentialAdminCodeOperationResult.Modified\n || this.operationResult\n === UserCredentialAdminCodeOperationResult.ResponseToGet) {\n this.setValue(ctx, UserCredentialCCValues.adminPinCode, this.pinCode);\n }\n return true;\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"operation result\": getEnumMemberName(UserCredentialAdminCodeOperationResult, this.operationResult),\n \"PIN code\": credentialToLogString(this.pinCode),\n },\n };\n }\n}\nfunction testResponseForUserCredentialAdminPinCodeGet(_sent: UserCredentialCCAdminPinCodeGet, received: UserCredentialCCAdminPinCodeReport) {\n return (received.operationResult\n === UserCredentialAdminCodeOperationResult.ResponseToGet);\n}\n@CCCommand(UserCredentialCommand.AdminPinCodeGet)\n@expectedCCResponse(UserCredentialCCAdminPinCodeReport, testResponseForUserCredentialAdminPinCodeGet)\nexport class UserCredentialCCAdminPinCodeGet extends UserCredentialCC {\n}\n// ============================================================\n// Group 8: Key Locker V2\n// ============================================================\n// @publicAPI\nexport type UserCredentialCCKeyLockerEntrySetOptions = {\n entryType: UserCredentialKeyLockerEntryType;\n entrySlot: number;\n} & ({\n operationType: UserCredentialOperationType.Add | UserCredentialOperationType.Modify;\n entryData: Bytes;\n} | {\n operationType: UserCredentialOperationType.Delete;\n entryData?: undefined;\n});\n@CCCommand(UserCredentialCommand.KeyLockerEntrySet)\n@useSupervision()\nexport class UserCredentialCCKeyLockerEntrySet extends UserCredentialCC {\n public constructor(options: WithAddress<UserCredentialCCKeyLockerEntrySetOptions>) {\n super(options);\n this.entryType = options.entryType;\n this.entrySlot = options.entrySlot;\n this.operationType = options.operationType;\n if (options.operationType !== UserCredentialOperationType.Delete) {\n this.entryData = options.entryData;\n }\n }\n public entryType: UserCredentialKeyLockerEntryType;\n public entrySlot: number;\n public operationType: UserCredentialOperationType;\n public entryData: Bytes | undefined;\n public static from(raw: CCRaw, ctx: CCParsingContext): UserCredentialCCKeyLockerEntrySet {\n validatePayload(raw.payload.length >= 4);\n const entryType: UserCredentialKeyLockerEntryType = raw.payload[0];\n const entrySlot = raw.payload.readUInt16BE(1);\n const operationType: UserCredentialOperationType = raw.payload[3]\n & 0b11;\n if (operationType === UserCredentialOperationType.Delete) {\n return new this({\n nodeId: ctx.sourceNodeId,\n entryType,\n entrySlot,\n operationType,\n });\n }\n let entryData = new Bytes();\n if (raw.payload.length >= 6) {\n const entryDataLength = raw.payload.readUInt16BE(4);\n validatePayload(raw.payload.length >= 6 + entryDataLength);\n entryData = Bytes.from(raw.payload.subarray(6, 6 + entryDataLength));\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n entryType,\n entrySlot,\n operationType,\n entryData,\n });\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n // For Delete, entry data MAY be omitted\n if (this.operationType === UserCredentialOperationType.Delete) {\n this.payload = Bytes.alloc(4);\n this.payload[0] = this.entryType;\n this.payload.writeUInt16BE(this.entrySlot, 1);\n this.payload[3] = this.operationType & 0b11;\n return super.serialize(ctx);\n }\n if (this.entryData == undefined) {\n throw new ZWaveError(`${this.constructor.name}: entry data must be set for Add/Modify operations`, ZWaveErrorCodes.Argument_Invalid);\n }\n this.payload = Bytes.alloc(6 + this.entryData.length);\n this.payload[0] = this.entryType;\n this.payload.writeUInt16BE(this.entrySlot, 1);\n this.payload[3] = this.operationType & 0b11;\n this.payload.writeUInt16BE(this.entryData.length, 4);\n if (this.entryData.length > 0) {\n this.payload.set(this.entryData, 6);\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"entry type\": getEnumMemberName(UserCredentialKeyLockerEntryType, this.entryType),\n \"entry slot\": this.entrySlot,\n \"operation type\": getEnumMemberName(UserCredentialOperationType, this.operationType),\n };\n if (this.entryData != undefined) {\n message[\"entry data length\"] = this.entryData.length;\n }\n return { ...super.toLogEntry(ctx), message };\n }\n}\n// @publicAPI\nexport interface UserCredentialCCKeyLockerEntryReportOptions {\n occupied: boolean;\n entryType: UserCredentialKeyLockerEntryType;\n entrySlot: number;\n}\n@CCCommand(UserCredentialCommand.KeyLockerEntryReport)\nexport class UserCredentialCCKeyLockerEntryReport extends UserCredentialCC {\n public constructor(options: WithAddress<UserCredentialCCKeyLockerEntryReportOptions>) {\n super(options);\n this.occupied = options.occupied;\n this.entryType = options.entryType;\n this.entrySlot = options.entrySlot;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): UserCredentialCCKeyLockerEntryReport {\n validatePayload(raw.payload.length >= 4);\n const occupied = !!(raw.payload[0] & 0x01);\n const entryType: UserCredentialKeyLockerEntryType = raw.payload[1];\n const entrySlot = raw.payload.readUInt16BE(2);\n return new this({\n nodeId: ctx.sourceNodeId,\n occupied,\n entryType,\n entrySlot,\n });\n }\n public readonly occupied: boolean;\n public readonly entryType: UserCredentialKeyLockerEntryType;\n public readonly entrySlot: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.alloc(4);\n this.payload[0] = this.occupied ? 0x01 : 0x00;\n this.payload[1] = this.entryType;\n this.payload.writeUInt16BE(this.entrySlot, 2);\n return super.serialize(ctx);\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n this.setValue(ctx, UserCredentialCCValues.keyLockerEntry(this.entryType, this.entrySlot), this.occupied);\n return true;\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n occupied: this.occupied,\n \"entry type\": getEnumMemberName(UserCredentialKeyLockerEntryType, this.entryType),\n \"entry slot\": this.entrySlot,\n },\n };\n }\n}\n// @publicAPI\nexport interface UserCredentialCCKeyLockerEntryGetOptions {\n entryType: UserCredentialKeyLockerEntryType;\n entrySlot: number;\n}\nfunction testResponseForUserCredentialKeyLockerEntryGet(sent: UserCredentialCCKeyLockerEntryGet, received: UserCredentialCCKeyLockerEntryReport) {\n return received.entryType === sent.entryType\n && received.entrySlot === sent.entrySlot;\n}\n@CCCommand(UserCredentialCommand.KeyLockerEntryGet)\n@expectedCCResponse(UserCredentialCCKeyLockerEntryReport, testResponseForUserCredentialKeyLockerEntryGet)\nexport class UserCredentialCCKeyLockerEntryGet extends UserCredentialCC {\n public constructor(options: WithAddress<UserCredentialCCKeyLockerEntryGetOptions>) {\n super(options);\n this.entryType = options.entryType;\n this.entrySlot = options.entrySlot;\n }\n public entryType: UserCredentialKeyLockerEntryType;\n public entrySlot: number;\n public static from(raw: CCRaw, ctx: CCParsingContext): UserCredentialCCKeyLockerEntryGet {\n validatePayload(raw.payload.length >= 3);\n const entryType: UserCredentialKeyLockerEntryType = raw.payload[0];\n const entrySlot = raw.payload.readUInt16BE(1);\n return new this({\n nodeId: ctx.sourceNodeId,\n entryType,\n entrySlot,\n });\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.alloc(3);\n this.payload[0] = this.entryType;\n this.payload.writeUInt16BE(this.entrySlot, 1);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"entry type\": getEnumMemberName(UserCredentialKeyLockerEntryType, this.entryType),\n \"entry slot\": this.entrySlot,\n },\n };\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["userId"]
7
7
  }